(function () { var WhenDomReady = function(callBack,scope){ var scope = scope || window; var args = []; for (var i=2, len = arguments.length; i < len; ++i) { args.push(arguments[i]); }; if (navigator.userAgent.match(/WebKit/)) { (function(){ if(document.readyState != 'complete' && document.readyState != 'loaded') return setTimeout(arguments.callee, 1); callBack.apply(scope, args); })(); } else if (document.addEventListener) { document.addEventListener("DOMContentLoaded", function(){callBack.apply(scope, args);}, false); } else if (document.all) { if(!document.getElementById('WhenDomReady_element')) {document.write("<\/scr" + "ipt>"); } document.getElementById('WhenDomReady_element').attachEvent("onreadystatechange",function(){ if (document.getElementById('WhenDomReady_element').readyState=="complete"){ callBack.apply(scope, args); } }); } } var njdc = { util: { init: function () { if (!Array.prototype.push) { Array.prototype.push = function(elem) { this[this.length] = elem; } } }, hasClassName: function(lmnt,classname) { var classArray = lmnt.className.split(' '); for (var i = 0; i < classArray.length; i++) { if (classArray[i] == classname) { return true; } } return false; }, removeClassName: function(lmnt,classname) { if (njdc.util.hasClassName(lmnt,classname)) { if (lmnt.className == classname) { lmnt.className = ""; return true; } else { lmnt.className = lmnt.className.replace(' '+classname,''); lmnt.className = lmnt.className.replace(classname+' ',''); return true; } } return false; }, addClassName: function(lmnt,classname) { if (!njdc.util.hasClassName(lmnt,classname)) { lmnt.className += ' ' + classname; return true; } else { return false; } }, listenerRegistry: { _registry: null, init: function() { if (this._registry == null) { this._registry = []; //this.registerListener(window, "unload", this.clearRegistry); } }, registerListener: function(lmnt, type, handler, capture) { this.init(); if (typeof lmnt == "string") { lmnt = document.getElementById(lmnt); } if (lmnt == null || handler == null) { return false; } if (lmnt.addEventListener) { lmnt.addEventListener(type, handler, capture); this._registry.push({lmnt: lmnt, type: type, handler: handler, capture: capture}); return true; } if (lmnt.attachEvent && lmnt.attachEvent("on" + type, handler)) { this._registry.push({lmnt: lmnt, type: type, handler: handler, capture: false}); return true; } return false; }, clearRegistry: function() { for (var i = 0; i < this._registry.length; i++) { with (this._registry[i]) { if (lmnt.removeEventListener) lmnt.removeEventListener(type, handler, capture); else if (lmnt.detachEvent) lmnt.detachEvent("on" + type, handler); } } this._registry = null; } } }, init: function () { this.util.init(); this.mainNavigation.init(); this.forms.init(); }, mainNavigation: { mainNavigationElement: null, mainNavigationElementId: 'main-navigation', activeLis: [], init: function () { this.mainNavigationElement = document.getElementById(this.mainNavigationElementId); var children = this.mainNavigationElement.childNodes; for (var i = 0; i < children.length; i++) { if (children[i].nodeType == 1 && children[i].nodeName.toLowerCase() == 'li') { this.activeLis[this.activeLis.length] = children[i]; } } this.mainNavigationElement.onmouseout = function (e) { njdc.mainNavigation.handle(e); } this.mainNavigationElement.onmouseover = function (e) { njdc.mainNavigation.handle(e); } }, handle: function (e) { if (!e) {var e = window.event;} var target = (window.event) ? e.srcElement : e.target; if (e.type == 'mouseout') { /* ie uses toElement for relatedTarget, and relatedTarget for the href of a link which is the src of an event... */ var relatedTarget = (e.toElement) ? e.toElement : e.relatedTarget; /* firefox spawns 'anonymous-div's and throws terrible errors when you try and request properties of them...? */ try { relatedTarget.className; } catch (e) { return false; } while (relatedTarget != this.mainNavigationElement && relatedTarget.parentNode) { try { relatedTarget = relatedTarget.parentNode; } catch (e) { } } if (relatedTarget == this.mainNavigationElement) {return false;} this.hide(); } else if (e.type == 'mouseover') { var originalTarget = (window.event) ? e.srcElement : e.target; var isAnActiveLi = function (lmnt) { var activeLis = njdc.mainNavigation.activeLis; for (var i = 0; i < activeLis.length; i++) { if (activeLis[i] == lmnt) { return true; } } return false; } while (target != document.body && target.nodeName.toLowerCase() != 'html' && !isAnActiveLi(target) && target.parentNode) { target = target.parentNode; } if (isAnActiveLi(target)) { this.hide(); njdc.util.addClassName(target,'hover'); return true; } else { return false; } } else {return false;} }, hide: function () { var lis = this.activeLis; for (var i = 0; i < lis.length; i++) { njdc.util.removeClassName(lis[i],'hover'); } } }, forms: { inputs: [], textInputs: [], clearValueInputs: [], init: function () { this.inputs = document.getElementsByTagName('input'); for (var i = 0; i < this.inputs.length; i++) { if (this.inputs[i].getAttribute('type') == 'text') {this.textInputs[this.textInputs.length] = this.inputs[i];} } for (var i = 0; i < this.textInputs.length; i++) { if (njdc.util.hasClassName(this.textInputs[i],'clearValueOnFirstFocus')) { this.clearValueInputs[this.clearValueInputs.length] = this.textInputs[i]; njdc.util.listenerRegistry.registerListener(this.textInputs[i], 'focus', function (e) {njdc.forms.handle(e);}, true); } } }, handle: function (e) { if (!e) {var e = window.event;} if (!e.target) {e.target = e.srcElement;} if (njdc.util.hasClassName(e.target,'clearValueOnFirstFocus')) { this.clearValue(e.target); } }, clearValue: function (lmnt) { var originalValue = null; if (lmnt.getAttribute) { originalValue = lmnt.getAttribute('value'); } else { originalValue = lmnt.attributes['value']; } if (lmnt.value == originalValue) { lmnt.value = ''; return true; } else { return false; } } } }; WhenDomReady( function(){ njdc.init(); } ); })();