// event handling:
function addEvent(elm, evType, fn, useCapture){
   if (elm.addEventListener) {
      elm.addEventListener(evType, fn, useCapture);
      return true;
   } else if (elm.attachEvent) {
      var r = elm.attachEvent("on"+evType, fn);
      return r;
   }
};

var setBodyClass = function(){
   var elm = $('sidebar');
   var bdy = $('ldr');
   if ( bdy ) {
      if ( !elm ) {
			Element.addClassName(bdy, 'single');
		}
   }
};

// equal heights (non CSS due to anchor problem)
// http://www.positioniseverything.net/articles/onetruelayout/appendix/equalheightproblems#linking
var matchColumns = function(){
	var eCol = $('column');
	var eSide = $('sidebar');
	if ( eCol ){
		Element.setStyle(eCol, {height: Math.max(Element.getHeight($('content')), Element.getHeight($('sidebar'))) + 'px'});
		if ( eSide ) {
			Element.removeClassName(eSide, 'nothing');
		}
	}
};

var stripe = function() {
	var tables = document.getElementsByTagName("table");
	for(var x=0;x!=tables.length;x++){
		var table = tables[x];
		if (! table || !Element.hasClassName(table, "zebra") ) { return; }
		var tbodies = table.getElementsByTagName("tbody");
		for (var h = 0; h < tbodies.length; h++) {
			var even = true;
			var trs = tbodies[h].getElementsByTagName("tr");
			for (var i = 0; i < trs.length; i++) {
				trs[i].onmouseover=function(){ Element.addClassName(this, "ruled"); return false; };
				trs[i].onmouseout=function(){  Element.removeClassName(this,"ruled"); return false; };
				if ( Element.hasClassName(trs[i], "continue") ) {
					if(!even) {
						Element.addClassName(trs[i], "even");
					}
					Element.addClassName(trs[i-1], "precontinue");
				} else {
					if(even)
						Element.addClassName(trs[i], "even");
					even = !even;
				}
			}
		}
	}
};

var addTargets = function(){
	var as = document.getElementsByClassName("extlink");
	for(var i=0; i<as.length; ++i){
		as[i].target = "_blank";
	}
};

var addSelectAll = function(){
	var checks = document.getElementsByClassName("checkall");
	for(var i=0; i<checks.length; ++i){
		checks[i].onclick = function(){
			checkAll(this.checked);
		}
	}
};

function checkAll(checked){
	var checks = document.getElementsByTagName("input");
	for(var i=0; i<checks.length; ++i){
		if ( checks[i].type.toLowerCase() == "checkbox" ) {
			checks[i].checked = checked;
		}
	}
}

function toggleOptionalFields(){
	var opts = document.getElementsByClassName("optional");
	for(var i=0; i<opts.length; ++i){
		Element.toggle(opts[i]);
	}
	matchColumns();
	return false;
}

function sifrCallback(cb){
	matchColumns();
}

var appLoader = function(){
	setBodyClass();
	matchColumns();
	stripe();
	sIFR.initialize();
	doFootnotes();
	addSelectAll();
	addTargets();
	if(typeof addTrackingLinks ===  'function'){
		// defined in the site page
		addTrackingLinks();
	}
};

addEvent(window, 'load', appLoader, false);