~cruzjbishop/anelectron/trunk

« back to all changes in this revision

Viewing changes to themes/default/menu.js

  • Committer: Cruz Julian Bishop
  • Date: 2012-03-18 22:16:46 UTC
  • Revision ID: cruzjbishop@gmail.com-20120318221646-se8p54bd2g7i936n
Initial import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
var remember = true; //Remember menu states, and restore them on next visit.
 
2
var contractall_default= false; //Should all submenus be contracted by default? (true or false)
 
3
 
 
4
var menu, titles, submenus, arrows, bypixels;
 
5
var heights = new Array();
 
6
 
 
7
var n = navigator.userAgent;
 
8
if(/Opera/.test(n)) bypixels = 2;
 
9
else if(/Firefox/.test(n)) bypixels = 3;
 
10
else if(/MSIE/.test(n)) bypixels = 2;
 
11
 
 
12
/////DD added expandall() and contractall() functions/////
 
13
 
 
14
function slash_expandall(){
 
15
    if (typeof menu!="undefined"){
 
16
        for(i=0; i<Math.max(titles.length, submenus.length); i++){
 
17
            titles[i].className="title";
 
18
            arrows[i].src = umimages+"expanded.gif";
 
19
            submenus[i].style.display="";
 
20
            submenus[i].style.height = heights[i]+"px";
 
21
        }
 
22
    }
 
23
}
 
24
 
 
25
function slash_contractall(){
 
26
    if (typeof menu!="undefined"){
 
27
        for(i=0; i<Math.max(titles.length, submenus.length); i++){
 
28
            titles[i].className="titlehidden";
 
29
            arrows[i].src = umimages+"collapsed.gif";
 
30
            submenus[i].style.display="none";
 
31
            submenus[i].style.height = 0;
 
32
        }
 
33
    }
 
34
}
 
35
 
 
36
 
 
37
/////End DD added functions///////////////////////////////
 
38
 
 
39
 
 
40
function init(){
 
41
    menu = getElementsByClassName("ummenu", "div", document)[0];
 
42
    titles = getElementsByClassName("title", "span", menu);
 
43
    submenus = getElementsByClassName("submenu", "div", menu);
 
44
    arrows = getElementsByClassName("arrow", "img", menu);
 
45
    for(i=0; i<Math.max(titles.length, submenus.length); i++) {
 
46
        titles[i].onclick = gomenu;
 
47
        arrows[i].onclick = gomenu;
 
48
        heights[i] = submenus[i].offsetHeight;
 
49
        submenus[i].style.height = submenus[i].offsetHeight+"px";
 
50
    }
 
51
    if(remember)
 
52
        restore()
 
53
    else if (contractall_default) //DD added code
 
54
        slash_contractall() //DD added code
 
55
}
 
56
 
 
57
function restore() {
 
58
    if(getcookie("menu") != null) {
 
59
        var hidden = getcookie("menu").split(",");
 
60
        for(var i in hidden) {
 
61
            titles[hidden[i]].className = "titlehidden";
 
62
            submenus[hidden[i]].style.height = "0px";
 
63
            submenus[hidden[i]].style.display = "none";
 
64
            arrows[hidden[i]].src = umimages+"collapsed.gif";
 
65
        }
 
66
    }
 
67
}
 
68
 
 
69
function gomenu(e) {
 
70
    if (!e)
 
71
        var e = window.event;
 
72
    var ce = (e.target) ? e.target : e.srcElement;
 
73
    var sm;
 
74
    for(var i in titles) {
 
75
        if(titles[i] == ce || arrows[i] == ce)
 
76
            sm = i;
 
77
    }
 
78
    if(parseInt(submenus[sm].style.height) > parseInt(heights[sm])-2) {
 
79
        hidemenu(sm);
 
80
    } else if(parseInt(submenus[sm].style.height) < 2) {
 
81
        titles[sm].className = "title";
 
82
        showmenu(sm);
 
83
    }
 
84
}
 
85
 
 
86
function hidemenu(sm) {
 
87
    var nr = submenus[sm].getElementsByTagName("a").length*bypixels;
 
88
    submenus[sm].style.height = (parseInt(submenus[sm].style.height)-nr)+"px";
 
89
    var to = setTimeout("hidemenu("+sm+")", 30);
 
90
    if(parseInt(submenus[sm].style.height) <= nr) {
 
91
        clearTimeout(to);
 
92
        submenus[sm].style.display = "none";
 
93
        submenus[sm].style.height = "0px";
 
94
        arrows[sm].src = umimages+"collapsed.gif";
 
95
        titles[sm].className = "titlehidden";
 
96
    }
 
97
}
 
98
 
 
99
function showmenu(sm) {
 
100
    var nr = submenus[sm].getElementsByTagName("a").length*bypixels;
 
101
    submenus[sm].style.display = "";
 
102
    submenus[sm].style.height = (parseInt(submenus[sm].style.height)+nr)+"px";
 
103
    var to = setTimeout("showmenu("+sm+")", 30);
 
104
    if(parseInt(submenus[sm].style.height) > (parseInt(heights[sm])-nr)) {
 
105
        clearTimeout(to);
 
106
        submenus[sm].style.height = heights[sm]+"px";
 
107
        arrows[sm].src = umimages+"expanded.gif";
 
108
    }
 
109
        
 
110
        
 
111
}
 
112
 
 
113
function store() {
 
114
    var hidden = new Array();
 
115
    for(var i in titles) {
 
116
        if(titles[i].className == "titlehidden")
 
117
            hidden.push(i);
 
118
    }
 
119
    putcookie("menu", hidden.join(","), 30);
 
120
}
 
121
 
 
122
function getElementsByClassName(strClassName, strTagName, oElm){
 
123
    var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
 
124
    var arrReturnElements = new Array();
 
125
    strClassName = strClassName.replace(/\-/g, "\\-");
 
126
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
 
127
    var oElement;
 
128
    for(var i=0; i<arrElements.length; i++){
 
129
        oElement = arrElements[i];      
 
130
        if(oRegExp.test(oElement.className)){
 
131
            arrReturnElements.push(oElement);
 
132
        }   
 
133
    }
 
134
    return (arrReturnElements)
 
135
}
 
136
 
 
137
function putcookie(c_name,value,expiredays) {
 
138
    var exdate=new Date();
 
139
    exdate.setDate(exdate.getDate()+expiredays);
 
140
    document.cookie = c_name + "=" + escape(value) + ((expiredays==null) ? "" : ";expires="+exdate);
 
141
}
 
142
 
 
143
function getcookie(c_name) {
 
144
    if(document.cookie.length > 0) {
 
145
        var c_start = document.cookie.indexOf(c_name + "=");
 
146
        if(c_start != -1) {
 
147
            c_start = c_start + c_name.length + 1;
 
148
            var c_end = document.cookie.indexOf(";",c_start);
 
149
            if(c_end == -1)
 
150
                c_end = document.cookie.length;
 
151
            return unescape(document.cookie.substring(c_start, c_end));
 
152
        }
 
153
    }
 
154
    return null;
 
155
}
 
156
 
 
157
window.onload = init;
 
158
if(remember) window.onunload = store;