1 function $(id) { return getId(id); }
3 return document.getElementById(id);
6 function swapCSSClass(obj, old, newc ) {
7 removeCSSClass(obj, old );
8 addCSSClass(obj, newc );
12 function addCSSClass(e,c) {
15 var css_class_string = e.className;
19 css_class_array = css_class_string.split(/\s+/);
21 var string_ip = ""; /*strip out nulls*/
22 for (var css_class in css_class_array) {
23 if (css_class_array[css_class] == c) { return; }
24 if(css_class_array[css_class] !=null)
25 string_ip += css_class_array[css_class] + " ";
28 e.className = string_ip;
31 function removeCSSClass(e, c) {
34 var css_class_string = '';
36 var css_class_array = e.className;
38 css_class_array = css_class_array.split(/\s+/);
41 for (var css_class in css_class_array) {
42 if (css_class_array[css_class] != c) {
44 css_class_string = css_class_array[css_class];
47 css_class_string = css_class_string + ' ' +
48 css_class_array[css_class];
52 e.className = css_class_string;
56 /*returns the character code pressed that caused the event */
57 function grabCharCode(evt) {
58 evt = (evt) ? evt : ((window.event) ? event : null);
60 return (evt.charCode ? evt.charCode :
61 ((evt.which) ? evt.which : evt.keyCode ));
66 /* returns true if the user pressed enter */
67 function userPressedEnter(evt) {
68 var code = grabCharCode(evt);
69 if(code==13||code==3) return true;
75 /* setTimeout because ie sux */
76 setTimeout( function(){ location.href = url; }, 0 );
80 function removeChildren(dom) {
82 while(dom.childNodes[0])
83 dom.removeChild(dom.childNodes[0]);
86 function appendClear(node, child) {
88 node.appendChild(child);
92 function instanceOf(object, constructorFunction) {
95 while (object != null) {
96 if (object == constructorFunction.prototype)
98 object = object.__proto__;
101 while(object != null) {
102 if( object instanceof constructorFunction )
104 object = object.__proto__;
111 /* ------------------------------------------------------------------------------------------- */
112 /* detect my browser */
113 var isMac, NS, NS4, NS6, IE, IE4, IE4mac, IE4plus, IE5, IE5plus, IE6, IEMajor, ver4;
114 function detect_browser() {
116 isMac = (navigator.appVersion.indexOf("Mac")!=-1) ? true : false;
117 NS = (navigator.appName == "Netscape") ? true : false;
118 NS4 = (document.layers) ? true : false;
119 IE = (navigator.appName == "Microsoft Internet Explorer") ? true : false;
120 IEmac = ((document.all)&&(isMac)) ? true : false;
121 IE4plus = (document.all) ? true : false;
122 IE4 = ((document.all)&&(navigator.appVersion.indexOf("MSIE 4.")!=-1)) ? true : false;
123 IE5 = ((document.all)&&(navigator.appVersion.indexOf("MSIE 5.")!=-1)) ? true : false;
124 IE6 = ((document.all)&&(navigator.appVersion.indexOf("MSIE 6.")!=-1)) ? true : false;
125 ver4 = (NS4 || IE4plus) ? true : false;
126 NS6 = (!document.layers) && (navigator.userAgent.indexOf('Netscape')!=-1)?true:false;
128 IE5plus = IE5 || IE6;
132 var start = navigator.appVersion.indexOf("MSIE");
133 var end = navigator.appVersion.indexOf(".",start);
134 IEMajor = parseInt(navigator.appVersion.substring(start+5,end));
135 IE5plus = (IEMajor>=5) ? true : false;
139 /* ------------------------------------------------------------------------------------------- */
143 if(t == null) t = "";
144 return document.createTextNode(t);
147 function elem(name, attrs, txt) {
148 var e = document.createElement(name);
151 if( key == 'id') e.id = attrs[key];
152 else e.setAttribute(key, attrs[key]);
155 if (txt) e.appendChild(text(txt));
160 /* sel is the selector object, sets selected on the
161 option with the given value. case does not matter...*/
162 function setSelector( sel, value ) {
163 if(sel && value != null) {
164 for( var i = 0; i!= sel.options.length; i++ ) {
165 if( sel.options[i] ) {
166 var val = sel.options[i].value;
167 if( val == null || val == "" ) /* for IE */
168 val = sel.options[i].innerHTML;
169 value += ""; /* in case of number */
170 if( val && val.toLowerCase() == value.toLowerCase() ) {
171 sel.selectedIndex = i;
172 sel.options[i].selected = true;
179 function getSelectorVal( sel ) {
180 if(!sel) return null;
181 var o = sel.options[sel.selectedIndex];
183 if(v == null) v = o.innerHTML;
187 function getSelectorName( sel ) {
188 var o = sel.options[sel.selectedIndex];
190 if(v == null || v == undefined || v == "") v = o.innerHTML;
194 function setSelectorByName( sel, name ) {
195 for( var o in sel.options ) {
196 var opt = sel.options[o];
197 if( opt.name == name || opt.innerHTML == name ) {
198 sel.selectedIndex = o;
204 function debugSelector(sel) {
205 var s = 'Selector\n';
206 for( var i = 0; i != sel.options.length; i++ ) {
207 var o = sel.options[i];
208 s += "\t" + o.innerHTML + "\n";
213 function findParentByNodeName(node, name) {
214 while( ( node = node.parentNode) )
215 if (node.nodeName == name) return node;
219 /* returns only elements in nodes childNodes list, not sub-children */
220 function getElementsByTagNameFlat( node, name ) {
222 for( var e in node.childNodes ) {
223 var n = node.childNodes[e];
224 if( n && n.nodeName == name ) elements.push(n);
229 /* expects a tree with a id() method on each node and a
230 children() method to get to each node */
231 function findTreeItemById( tree, id ) {
232 if( tree.id() == id ) return tree;
233 for( var c in tree.children() ) {
234 var found = findTreeItemById( tree.children()[c], id );
235 if(found) return found;
240 /* returns null if none of the tests are true. returns sub-array of
241 matching array items otherwise */
242 function grep( arr, func ) {
244 for( var i in arr ) {
246 results.push(arr[i]);
248 if(results.length > 0) return results;
252 function doSelectorActions(sel) {
254 sel.onchange = function() {
255 var o = sel.options[sel.selectedIndex];
256 if(o && o.onclick) o.onclick()
261 /* if index < 0, the item is pushed onto the end */
262 function insertSelectorVal( selector, index, name, value, action, indent ) {
263 if( index < 0 ) index = selector.options.length;
265 for( var i = selector.options.length; i != index; i-- )
266 a[i] = selector.options[i-1];
268 var opt = setSelectorVal( selector, index, name, value, action, indent );
270 for( var i = index + 1; i < a.length; i++ )
271 selector.options[i] = a[i];
276 function setSelectorVal( selector, index, name, value, action, indent ) {
277 if(!indent || indent < 0) indent = 0;
278 indent = parseInt(indent);
283 var pre = elem("pre");
284 for( var i = 0; i != indent; i++ )
285 pre.appendChild(text(" "));
287 pre.appendChild(text(name));
288 option = new Option("", value);
289 selector.options[index] = option;
290 option.appendChild(pre);
293 indent = indent * 14;
294 option= new Option(name, value);
295 option.setAttribute("style", "padding-left: "+indent+'px;');
296 selector.options[index] = option;
297 if(action) option.onclick = action;
300 if(action) option.onclick = action;
305 /* split on spaces. capitalize the first /\w/ character in
307 function normalize(val) {
312 try {val = val.split(' ');} catch(E) {return val;}
315 for( var c = 0; c < val.length; c++) {
319 for(var x = 0; x != string.length; x++) {
322 var ch = string.charAt(x);
323 if(reg.exec(ch + "")) {
324 newVal += string.charAt(x).toUpperCase();
330 newVal += string.charAt(x).toLowerCase();
332 if(c < (val.length-1)) newVal += " ";
335 newVal = newVal.replace(/\s*\.\s*$/,'');
336 newVal = newVal.replace(/\s*\/\s*\/\s*$/,' / ');
337 newVal = newVal.replace(/\s*\/\s*$/,'');
343 /* returns true if n is null or stringifies to 'undefined' */
345 if( n == null || n == undefined || n.toString().toLowerCase() == "undefined"
346 || n.toString().toLowerCase() == "null" )
352 /* find nodes with an attribute of 'name' that equals nodeName */
354 function $n( root, nodeName ) { return findNodeByName(root,nodeName); }
356 function findNodeByName(root, nodeName) {
357 if( !root || !nodeName) return null;
359 if(root.nodeType != 1) return null;
361 if(root.getAttribute("name") == nodeName || root.name == nodeName )
364 var children = root.childNodes;
366 for( var i = 0; i != children.length; i++ ) {
367 var n = findNodeByName(children[i], nodeName);
375 /* truncates the string at 'size' characters and appends a '...' to the end */
376 function truncate(string, size) {
377 if(string && size != null &&
378 size > -1 && string.length > size)
379 return string.substr(0, size) + "... ";
384 /* style sheets must have a 'name' attribute for these functions to work */
385 function setActivateStyleSheet(name) {
387 for (i = 0; (a = document.getElementsByTagName ("link")[i]); i++) {
388 if (a.getAttribute ("rel").indexOf ("style") != -1 && a.getAttribute ("name")) {
390 if (a.getAttribute ("name").indexOf(name) != -1)
397 /* ----------------------------------------------------- */
399 function scaleFonts(type) {
406 if(!currentFontSize) currentFontSize = 'regular';
407 if(currentFontSize == 'regular' && type == 'regular' ) return;
408 if( currentFontSize == type ) return;
409 currentFontSize = type;
412 case "large": /* these are arbitrary.. but they seem to work ok in FF/IE */
419 document.getElementsByTagName('body')[0].style.fontSize = size;
420 for (i = 0; (a = document.getElementsByTagName ("td")[i]); i++) a.style.fontSize = size;;
421 for (i = 0; (a = document.getElementsByTagName ("div")[i]); i++) a.style.fontSize = ssize;
422 for (i = 0; (a = document.getElementsByTagName ("option")[i]); i++) a.style.fontSize = ssize;
423 for (i = 0; (a = document.getElementsByTagName ("li")[i]); i++) a.style.fontSize = ssize;
424 for (i = 0; (a = document.getElementsByTagName ("span")[i]); i++) a.style.fontSize = ssize;
425 for (i = 0; (a = document.getElementsByTagName ("select")[i]); i++) a.style.fontSize = ssize;
426 for (i = 0; (a = document.getElementsByTagName ("a")[i]); i++) a.style.fontSize = size2;
430 function sortWordsIgnoreCase(a, b) {
439 function getSelectedList(sel) {
442 for( var i = 0; i != sel.options.length; i++ ) {
443 if(sel.options[i].selected)
444 vals.push(sel.options[i].value);
450 function setEnterFunc(node, func) {
451 if(!(node && func)) return;
452 node.onkeydown = function(evt) {
453 if( userPressedEnter(evt)) func();
457 function iterate( arr, callback ) {
458 for( var i = 0; i < arr.length; i++ )
465 /* taken directly from the JSAN util.date library */
466 /* but changed from the util.date.interval_to_seconds invocation,
467 because JSAN will assume the whole library is already loaded if
468 it sees that, and the staff client uses both this file and the
470 function interval_to_seconds( $interval ) {
472 $interval = $interval.replace( /and/, ',' );
473 $interval = $interval.replace( /,/, ' ' );
476 var results = $interval.match( /\s*\+?\s*(\d+)\s*(\w{1})\w*\s*/g);
477 for( var i = 0; i < results.length; i++ ) {
478 if(!results[i]) continue;
479 var result = results[i].match( /\s*\+?\s*(\d+)\s*(\w{1})\w*\s*/ );
480 if (result[2] == 's') $amount += result[1] ;
481 if (result[2] == 'm') $amount += 60 * result[1] ;
482 if (result[2] == 'h') $amount += 60 * 60 * result[1] ;
483 if (result[2] == 'd') $amount += 60 * 60 * 24 * result[1] ;
484 if (result[2] == 'w') $amount += 60 * 60 * 24 * 7 * result[1] ;
485 if (result[2] == 'M') $amount += ((60 * 60 * 24 * 365)/12) * result[1] ;
486 if (result[2] == 'y') $amount += 60 * 60 * 24 * 365 * result[1] ;
492 function openWindow( data ) {
494 var data = window.escape(
495 '<html><head><title></title></head><body>' + data + '</body></html>');
498 'data:text/html,' + data,
500 'chrome,resizable,width=700,height=500');
503 win = window.open('','', 'resizable,width=700,height=500');
504 win.document.body.innerHTML = data;
509 /* alerts the innerhtml of the node with the given id */
510 function alertId(id) {
512 if(node) alert(node.innerHTML);