started opac details page..
[Evergreen.git] / Open-ILS / web / opac / common / js / utils.js
1 function getId(id) {
2         return document.getElementById(id);
3 }
4
5
6 function addCSSClass(e,c) {
7         if(!e || !c) return;
8
9         var css_class_string = e.className;
10         var css_class_array;
11
12         if(css_class_string)
13                 css_class_array = css_class_string.split(/\s+/);
14
15         var string_ip = ""; /*strip out nulls*/
16         for (var css_class in css_class_array) {
17                 if (css_class_array[css_class] == c) { return; }
18                 if(css_class_array[css_class] !=null)
19                         string_ip += css_class_array[css_class] + " ";
20         }
21         string_ip = string_ip + c;
22         e.className = string_ip;
23 }
24
25 function removeCSSClass(e, c) {
26         if(!e || !c) return;
27
28         var css_class_string = '';
29
30         var css_class_array = e.className;
31         if( css_class_array )
32                 css_class_array = css_class_array.split(/\s+/);
33
34         var first = 1;
35         for (var css_class in css_class_array) {
36                 if (css_class_array[css_class] != c) {
37                         if (first == 1) {
38                                 css_class_string = css_class_array[css_class];
39                                 first = 0;
40                         } else {
41                                 css_class_string = css_class_string + ' ' +
42                                         css_class_array[css_class];
43                         }
44                 }
45         }
46         e.className = css_class_string;
47 }
48
49
50 /*returns the character code pressed that caused the event */
51 function grabCharCode(evt) {
52    evt = (evt) ? evt : ((window.event) ? event : null); 
53    if( evt ) {
54       return (evt.charCode ? evt.charCode : 
55          ((evt.which) ? evt.which : evt.keyCode ));
56    } else { return -1; }
57 }       
58
59
60 /* returns true if the user pressed enter */
61 function userPressedEnter(evt) {
62    var code = grabCharCode(evt);
63    if(code==13||code==3) return true;
64    return false;
65 }   
66
67
68 function goTo(url) {location.href = url;}
69
70
71 function removeChildren(dom) {
72         if(!dom) return;
73         while(dom.childNodes[0])
74                 dom.removeChild(dom.childNodes[0]);
75 }
76
77
78 function instanceOf(object, constructorFunction) {
79
80    if(!IE) {
81       while (object != null) {
82          if (object == constructorFunction.prototype)
83             return true;
84          object = object.__proto__;
85       }
86    } else {
87       while(object != null) {
88          if( object instanceof constructorFunction )
89             return true;
90          object = object.__proto__;
91       }
92    }
93    return false;
94 }         
95
96
97 /* ------------------------------------------------------------------------------------------- */
98 /* detect my browser */
99 var isMac, NS, NS4, NS6, IE, IE4, IE4mac, IE4plus, IE5, IE5plus, IE6, IEMajor, ver4;
100 function detect_browser() {       
101
102    isMac = (navigator.appVersion.indexOf("Mac")!=-1) ? true : false;
103    NS = (navigator.appName == "Netscape") ? true : false;
104    NS4 = (document.layers) ? true : false;
105    IE = (navigator.appName == "Microsoft Internet Explorer") ? true : false;
106    IEmac = ((document.all)&&(isMac)) ? true : false;
107    IE4plus = (document.all) ? true : false;
108    IE4 = ((document.all)&&(navigator.appVersion.indexOf("MSIE 4.")!=-1)) ? true : false;
109    IE5 = ((document.all)&&(navigator.appVersion.indexOf("MSIE 5.")!=-1)) ? true : false;
110    IE6 = ((document.all)&&(navigator.appVersion.indexOf("MSIE 6.")!=-1)) ? true : false;
111    ver4 = (NS4 || IE4plus) ? true : false;
112    NS6 = (!document.layers) && (navigator.userAgent.indexOf('Netscape')!=-1)?true:false;
113
114    IE5plus = IE5 || IE6;
115    IEMajor = 0;
116
117    if (IE4plus) {
118       var start = navigator.appVersion.indexOf("MSIE");
119       var end = navigator.appVersion.indexOf(".",start);
120       IEMajor = parseInt(navigator.appVersion.substring(start+5,end));
121       IE5plus = (IEMajor>=5) ? true : false;
122    }
123 }  
124 detect_browser();
125 /* ------------------------------------------------------------------------------------------- */
126
127
128 function text(t) {
129         if(t == null) t = "";
130         return document.createTextNode(t);
131 }
132
133 function elem(name, attrs, text) {
134     var e = createAppElement(name);
135     if (attrs) {
136         for (key in attrs) {
137                           if( key == 'id') e.id = attrs[key];
138                           else e.setAttribute(key, attrs[key]);
139         }
140     }
141     if (text) e.appendChild(text(text));
142     return e;
143 }                   
144
145
146 /* sel is the selector object, sets selected on the 
147         option with the given value. case does not matter...*/
148 function setSelector( sel, value ) {
149         if(sel && value != null) {
150                 for( var i = 0; i!= sel.options.length; i++ ) { 
151                         if( sel.options[i] ) {
152                                 var val = sel.options[i].value;
153                                 value += ""; /* in case of number */ 
154                                 if( val && val.toLowerCase() == value.toLowerCase() ) {
155                                         sel.selectedIndex = i;
156                                         sel.options[i].selected = true;
157                                 }
158                         }
159                 }
160         }
161 }
162
163
164 /* split on spaces.  capitalize the first /\w/ character in
165    each substring */
166 function normalize(val) {
167
168    if(!val) return ""; 
169
170    var newVal = '';
171    try {val = val.split(' ');} catch(E) {return val;}
172    var reg = /\w/;
173
174    for( var c = 0; c < val.length; c++) {
175
176       var string = val[c];
177       var cap = false; 
178       for(var x = 0; x != string.length; x++) {
179
180          if(!cap) {
181             var ch = string.charAt(x);
182             if(reg.exec(ch + "")) {
183                newVal += string.charAt(x).toUpperCase();
184                cap = true;
185                continue;
186             }
187          }
188
189          newVal += string.charAt(x).toLowerCase();
190       }
191       if(c < (val.length-1)) newVal += " ";
192    }
193
194    newVal = newVal.replace(/\s*\.\s*$/,'');
195    newVal = newVal.replace(/\s*\/\s*\/\s*$/,' / ');
196    newVal = newVal.replace(/\s*\/\s*$/,'');
197
198    return newVal;
199 }
200
201
202 /* returns true if n is null or stringifies to 'undefined' */
203 function isNull(n) {
204         if( n == null || n.toString().toLowerCase() == "undefined" 
205                 || n.toString().toLowerCase() == "null" )
206                 return true;
207         return false;
208 }
209
210
211 /* find nodes with an attribute of 'name' that equals nodeName */
212
213 function findNodeByName(root, nodeName) {
214         if( !root || !nodeName) return null;
215
216         if(root.nodeType != 1) return null;
217
218         if(root.getAttribute("name") == nodeName ||
219                         root.name == nodeName ) {
220                 return root;
221         }
222
223         var children = root.childNodes;
224
225         for( var i = 0; i != children.length; i++ ) {
226                 var n = findNodeByName(children[i], nodeName);
227                 if(n) return n;
228         }
229
230         return null;
231
232 }
233
234
235 /* truncates the string at 'size' characters and appends a '...' to the end */
236 function truncate(string, size) {
237         if(string && size != null && 
238                         size > -1 && string.length > size) 
239                 return string.substr(0, size) + "... "; 
240         return string;
241 }
242
243
244 /* style sheets must have a 'name' attribute for these functions to work */
245 function setActivateStyleSheet(name) {
246         var i, a, main;
247         for (i = 0; (a = document.getElementsByTagName ("link")[i]); i++) {
248                 if (a.getAttribute ("rel").indexOf ("style") != -1 && a.getAttribute ("name")) {
249                         a.disabled = true;
250                         if (a.getAttribute ("name").indexOf(name) != -1)
251                                 a.disabled = false;
252                 }
253         }
254 }
255
256
257 /* ----------------------------------------------------- */
258 function scaleFonts(type) {
259
260         var size = "";
261         switch(type) {
262                 case "large": size = "113%"; break;
263                 case "small": size = "87%"; break;
264         }
265
266         document.body.style.fontSize = size;
267         for (i = 0; (a = document.getElementsByTagName ("table")[i]); i++) a.style.fontSize = size;
268 }
269
270
271 function sortWordsIgnoreCase(a, b) {
272         a = a.toLowerCase();
273         b = b.toLowerCase();
274         if(a>b) return 1;
275         if(a<b) return -1;
276         return 0;
277 }
278
279
280
281
282
283