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 == "") 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 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 /* ----------------------------------------------------- */
398 function scaleFonts(type) {
406 case "large": /* these are arbitrary.. but they seem to work ok in FF/IE */
413 document.getElementsByTagName('body')[0].style.fontSize = size;
414 for (i = 0; (a = document.getElementsByTagName ("td")[i]); i++) a.style.fontSize = size;;
415 for (i = 0; (a = document.getElementsByTagName ("div")[i]); i++) a.style.fontSize = ssize;
416 for (i = 0; (a = document.getElementsByTagName ("option")[i]); i++) a.style.fontSize = ssize;
417 for (i = 0; (a = document.getElementsByTagName ("li")[i]); i++) a.style.fontSize = ssize;
418 for (i = 0; (a = document.getElementsByTagName ("span")[i]); i++) a.style.fontSize = ssize;
419 for (i = 0; (a = document.getElementsByTagName ("select")[i]); i++) a.style.fontSize = ssize;
420 for (i = 0; (a = document.getElementsByTagName ("a")[i]); i++) a.style.fontSize = size2;
424 function sortWordsIgnoreCase(a, b) {
436 function setEnterFunc(node, func) {
437 if(!(node && func)) return;
438 node.onkeydown = function(evt) {
439 if( userPressedEnter(evt)) func();