function getById(el) {
	return document.getElementById(el);
}

function getByTag(par,el) {
	var par = (par == '') ? document.body : par;
	return par.getElementsByTagName(el);
}

function getByClass(cla,par,el) {
	var par = (par == '') ? document.body : par;
	var el = (el == '') ? '*' : el;
	if(document.getElementsByClassName) {
		return par.getElementsByClassName(cla);
	}
	else {
		var tagColl = par.getElementsByTagName(el);
		trimedColl = new Array;
		for (var i = 0; tagColl[i]; i++) {
			if(tagColl[i].className.match(new RegExp(cla))) {
				trimedColl[trimedColl.length]=tagColl[i];
			}
		}
		return trimedColl;
	}
}

function addClass(obj,newClass) {
	if(!obj.className.match(new RegExp(newClass)))
		obj.className+=(obj.className.length>0? " ": "") + newClass;
}
	
function removeClass(obj,oldClass) {
	obj.className=obj.className.replace(new RegExp("( ?|^)"+oldClass+"\\b"), "");
}

function setLinks(linkTags){
	var linkCollection = [];
	for (var j = 0; linkTags[j]; j++) {
		linkCollection[j] = getByTag('',linkTags[j]);
		for (var i = 0; linkCollection[j][i]; i++) {
			if(/bookmark|external|corporate|sponsor/.test(linkCollection[j][i].getAttribute('rel'))) {
				linkCollection[j][i].onclick = function(e) {
					if (!e) var e = window.event;
					if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey)
						return true;
					window.open(this.href);
					return false;
				}
			}
		}
	}
}

var addEvent = function() {
  if (window.addEventListener) {
    return function(el, type, fn) {
      el.addEventListener(type, fn, false);
    };
  } else if (window.attachEvent) {
    return function(el, type, fn) {
      var f = function() {
        fn.call(el, window.event);
      };
      el.attachEvent('on' + type, f);
    };
  }
}();

function setFancySearchField() {
	var searchF = getById('searchForm');
	if(!searchF) return;
	if( (spanI = getByTag(searchF,'span')[0]) && (inputI = getByTag(searchF,'input')[0]) ){
		inputI.value = spanI.childNodes[0].nodeValue;
		
		addEvent(inputI, 'focus', function(e) {
			if(this.value==spanI.childNodes[0].nodeValue)
				this.value='';
				addClass(this,'straight');
		});
	}
}

function setBackListed() {
	var callers = getByClass('caller',getById('content'),'div');
	for(var i = 0; callers[i]; i++) {
		var title = getByTag(callers[i],'h2')[0];
		if(title && getByTag(title,'a')[0]) {
			callers[i].innerHTML = callers[i].innerHTML + '<a href="'+ getByTag(title,'a')[0].href +'" class="callee">[<span>…</span>]</a>';
		}
		else {
			if( /collapsed/.test(callers[i].parentNode.className) || /collapsed/.test(callers[i].parentNode.parentNode.className) ) {
				var target = getByClass('block',callers[i].parentNode,'div')[0];
				if(target) {
					callers[i].innerHTML = callers[i].innerHTML + '<a href="javascript:void(0);" class="callee">[<span>+</span>]</a>';
					var callee = getByClass('callee',callers[i],'a')[0];
					var newToggler = new Toggler(callers[i],target,callee);
					addClass(callers[i],'toggable');
				}
			}
		}
	}
}

function Toggler(caller,target,callee) {
	this.caller = caller;
	this.target = target;
	this.callee = callee;
	
	if(! /expanded/.test(target.className) ) {
		addClass(target,'hidden');
	} else {
		callee.innerHTML = '[<span>-</span>]';
	}
	
	this.makeToggable();
}

Toggler.prototype.makeToggable = function () {
	this.caller.onclick = function (that) {
        return function (e) {
            that.click(e);
        }
    }(this);
}

Toggler.prototype.click = function (e) {
	e = e ? e : window.event;
	var targ;
	if (e.target) targ = e.target;
	else if (e.srcElement) targ = e.srcElement;
	if (targ.nodeType == 3) // defeat Safari bug
		targ = targ.parentNode;
	if(/signup/.test(targ.parentNode.className)) return;
	
	if(/hidden/.test(this.target.className)) {
		removeClass(this.target,'hidden');
		this.callee.innerHTML = '[<span>-</span>]';
	}
	else {
		addClass(this.target,'hidden');
		this.callee.innerHTML = '[<span>+</span>]';
	}
	return false;
}

function fixIE() {
	var ulColl = getByTag(getById('footer'),'ul');
	for(var i = 0; ulColl[i]; i++) {
		var liColl = getByTag(ulColl[i],'li');
		for(var j = 1; liColl[j]; j++) {
			liColl[j].innerHTML = '  |  ' + liColl[j].innerHTML;
		}
	}
	
	var smap = getById('siteMap');
	if(smap) {
		var ulColl = getByTag(smap,'ul');
		for(var i = 0; ulColl[i]; i++) {
			if(ulColl[i].parentNode == smap) {
				var liColl = getByTag(ulColl[i],'li');
				for(var j = 1; liColl[j]; j++) {
					if(liColl[j].parentNode.parentNode == smap)
						liColl[j].innerHTML = '  |  ' + liColl[j].innerHTML;
				}
			}
			else {
				var liColl = getByTag(ulColl[i],'li');
				for(var j = 1; liColl[j]; j++) {
					liColl[j].innerHTML = '  -  ' + liColl[j].innerHTML;
				}
				if(liColl[0])
					liColl[0].innerHTML = '  :   ' + liColl[0].innerHTML;
			}
		}
	}
	
	var nav = getById('navigation');
	if(nav){
		var liColl = getByTag(nav,'li');
		for(var i = 0; liColl[i]; i++) {
			liColl[i].style.zIndex = 999;
		}
	}
	
}

function fixLowIE() {
	var ulColl = getByTag(getById('page'),'ul');
	for(var i = 0; ulColl[i]; i++) {
		var liColl = getByTag(ulColl[i],'li');
		if(liColl[0])
			addClass(liColl[0],'first-child');
	}
	
	var ulColl = getByClass('npslinks',getById('page'),'ul');
	for(var i = 0; ulColl[i]; i++) {
		var liColl = getByTag(ulColl[i],'li');
		for(var j = 0; liColl[j]; j++) {
			liColl[j].innerHTML = liColl[j].innerHTML + '<span class="ie6"></span>';
		}
	}
	
	var btnColl = getByTag(getById('page'),'button');
	for(var i = 0; btnColl[i]; i++) {
		if(btnColl[i].type=='submit') {
			addClass(btnColl[i],'ie6Btn');
			btnColl[i].innerHTML = btnColl[i].innerHTML + '<span class="ie6"></span>';
		}
	}
	
	var nav = getById('navigation');
	if(nav){
		var liColl = getByTag(nav,'li');
		for(var i = 0; liColl[i]; i++) {
			liColl[i].onmouseover = function () {
				addClass(this,'hover');
			}
			liColl[i].onmouseout = function () {
				removeClass(this,'hover');
			}
		}
	}
	
	var dispatch = getById('dispatcher');
	if(dispatch) {
		var divColl = getByClass('dispatcher',dispatch,'div');
		for(var i = 0; divColl[i]; i++) {
			divColl[i].onmouseover = function () {
				addClass(this,'dispatcherOn');
			}
			divColl[i].onmouseout = function () {
				removeClass(this,'dispatcherOn');
			}
		}
	}
}

/* Init
-------------------- */
var init = function() {
	if (arguments.callee.done) return;
	arguments.callee.done = true;
	if(!document.getElementsByTagName)
		return;
	addClass(getById('page'),'scripted');
	setLinks(['a','area']);
	setFancySearchField();
	setBackListed();
	/*@cc_on @*/
	/*@if (@_win32)
	fixIE();
	newerThanIe6 = eval('document.getElementsByTagName("body")[0].currentStyle.minWidth');
	if (!newerThanIe6) {
		fixLowIE();
	}
	/*@end @*/
}

if (document.addEventListener) {
    document.addEventListener("DOMContentLoaded", init, null);
}
else if (/WebKit/i.test(navigator.userAgent)) {
	var _timer = setInterval(function() {
		if (/loaded|complete/.test(document.readyState)) {
			clearInterval(_timer);
			init();
		}
	}, 10);
}
else {
	/*@cc_on @*/
	/*@if (@_win32)
	document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
	var script = document.getElementById("__ie_onload");
	script.onreadystatechange = function() {
		if (this.readyState == "complete") {
			init();
		}
	};
	/*@end @*/
}
window.onload = init;