// cf.  http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html
// adds ability for crossbrowser DOM event handlers
function addEvent(obj, type, fn) {
	if (obj.addEventListener)
		obj.addEventListener( type, fn, false );
	else if (obj.attachEvent) {
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
	}
}

// Written by Jonathan Snook, http://www.snook.ca/jonathan
// Add-ons by Robert Nyman, http://www.robertnyman.com
function getElementsByClassName(oElm, strTagName, strClassName) {
    var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++) {
        oElement = arrElements[i];      
        if(oRegExp.test(oElement.className)) {
            arrReturnElements.push(oElement);
        }   
    }
    return (arrReturnElements)
}



// removes attributes from any font tags that get inserted
function NA_removeAttributes(element, node, attributes) {
	if(document.getElementById(element)) {
		var els = document.getElementById(element).getElementsByTagName(node);
		var ats = NA_removeAttributes.arguments;
		for (var i=els.length-1; i>=0; i--) {
			for(j=2; j<ats.length; j++) {
				els[i].removeAttribute(ats[j]);
			}
		}
	}
}

function NA_removeAttributes_init() {
	NA_removeAttributes("content", "font", "size", "color", "face");
}

// IE only
if (document.all) { addEvent(window, "load", NA_removeAttributes_init); }




// IE support for CSS :psuedo classes
function NA_ieChildren(id, tag) {
	// if we dont specify a tag, then we want to target whatever child there is
	if(tag == "") {
		if(document.getElementById(id))	{
			if(document.getElementById(id).firstChild) {
				document.getElementById(id).firstChild.className += " first-child";
				document.getElementById(id).lastChild.className  += " last-child";
			}
		}
	}
	// otherwise just deal with the id and tag
	else {
		if(document.getElementById(id))	{
			var els = document.getElementById(id).getElementsByTagName(tag);
			for (var i=els.length-1; i>=0; i--) {
				els[i].firstChild.className += " first-child";
				els[i].lastChild.className  += " last-child";
			}
		}
	}
}
function NA_ieChildren_init() {
	NA_ieChildren("content", "UL");
}

// IE only
if (document.all) { addEvent(window, "load", NA_ieChildren_init); }




// IE support for CSS :psuedo classes
function NA_altTR(id) {
	if(document.getElementById(id))	{
		obj = document.getElementById(id);
		els = obj.getElementsByTagName("TABLE");
		for (var i=0; i<els.length; i++) {
			rows = els[i].getElementsByTagName("TR");  
			for(j=0; j<rows.length; j++){          
				if(j % 2==0) {
					rows[j].className = "even";
				}
				else {
					rows[j].className = "odd";
				}      
			} 
		}
	}
}
function NA_altTR_init() {
	NA_altTR("content-main");
}

addEvent(window, "load", NA_altTR_init);



function NA_listb() {
	els = getElementsByClassName(document, "div", "listb-hr");
	if (els.length > 0) {
		els[els.length-1].className += " listb-hr-last-child";
	}
	
	if(document.getElementById("content-related")) {
		els = document.getElementById("content-related").getElementsByTagName("div");
		if (els.length > 0) {
			els[els.length-1].className += " last-child";
		}
	}
}

// this is running due to a rendering CSS bug in Firefox
addEvent(window, "load", NA_listb);



// adds the focus/blur effect to the search form
// adds small validation to the form to prevent an empty query
function NA_search() {
	if(document.getElementById("q"))	{
		var el = document.getElementById("q");
		el.onfocus = function() {
			if(this.value == "Search") { this.value = ""; }
		}
		el.onblur = function() {
			if(this.value == "") { this.value = "Search"; }
		}
		if (el.value == "") {
			el.value = "Search";
		}
		var obj = document.getElementById("nav-search").getElementsByTagName("FORM")[0];
		obj.onsubmit = function() {
			if (document.getElementById("q").value == '' | 
				document.getElementById("q").value == 'Search') {
				alert("Please enter in a search term");
				return false;
			}
		}
	}
}

addEvent(window, "load", NA_search);



function NA_navBusinessTypes() {
	if(document.getElementById("form-nav-business")) {
		var obj = document.getElementById("form-nav-business");
		var val = document.getElementById("select-nav-business");
		
		obj.onsubmit = function() {
			if (val.value != "") {
				location.href = val.value;
			}
			return false;
		}
	}
}

addEvent(window, "load", NA_navBusinessTypes);



function NA_height_init() {
	if(document.getElementsByTagName("BODY")[0].className == "article") {
		if(document.getElementById("nav-main-ul3")) {
				document.getElementById("nav-main-ul3").style.height = "auto";
				document.getElementById("content-main").style.height = "auto";
				NA_height("nav-main-ul3", "content-main");
		}
	}
}

addEvent(window, "load", NA_height_init);

//==============================================================================
// na_height.js 1.5
// by NavigationArts: navarts.com
//==============================================================================
// This function is built to take X elements, compare the actual browser  
// rendered heigths, and then makes the shorter ones taller. Useful when trying 
// to emulate a table based design grid.
//==============================================================================

//alert(window.getComputedStyle != undefined);                      // IE false, FF true,  Opera true,  Safari false
//alert(document.defaultView != undefined);                         // IE false, FF true,  Opera true,  Safari true
//alert(document.getElementById(els[0]).currentStyle != undefined); // IE true,  FF false, Opera false, Safari false
	
// px could be % or em

function NA_height(elements) {
	els = NA_height.arguments;
	css = document.defaultView != undefined ? "padding-top,padding-bottom,border-top-width,border-bottom-width" :
	                                          "paddingTop,paddingBottom,borderTopWidth,borderBottomWidth";
	css = css.split(",");
	for(i=0; i<els.length; i++) {
		if(document.getElementById(els[i])) {
			obj = document.getElementById(els[i]); // object we are manipulating
			//alert(obj.offsetHeight);
			eval("pHeight" + i + "=" + 0); // creating the var that stores the height of padding/borders
			if (navigator.userAgent.toLowerCase().indexOf("msie 5") == -1) { // MSIE5 Check
				for(j=0; j < css.length; j++) {
					val = document.defaultView != undefined ? (parseInt(document.defaultView.getComputedStyle(obj, "").getPropertyValue(css[j]))) : // W3C model
					                                          (parseInt(obj.currentStyle[css[j]])); // IE Model
					if (! isNaN(val)) {
						eval("pHeight" + i + "=" + eval(eval("pHeight" + i) + val)); // build padding/border var for this object
					}
				}
			}
			obj.style.height = obj.offsetHeight - eval("pHeight" + i) + "px"; // so we no longer have to deal with offsetHeight (it won't be right the 2nd loop through)
		}
	}
	for(x=0; x<2; x++) { // loop throught twice because it's incremental
		for(i=0; i<els.length; i++) {
			j = i == els.length-1 ? 0 : i+1; // if last compare with first
			iHeight = eval(document.getElementById(els[i]).style.height.replace("px", "")) + eval("pHeight" + i);
			jHeight = eval(document.getElementById(els[j]).style.height.replace("px", "")) + eval("pHeight" + j);
			dHeight = iHeight - jHeight;
			if (dHeight < 0) {
				dHeight = dHeight * -1; // make the difference addable to either obj
			}
			if (dHeight > 0) {
				k = iHeight < jHeight ? "i" : "j"; // determine with obj to add to
				dHeight = eval(k + "Height") - eval("pHeight" + eval(k)) + dHeight;
				document.getElementById(els[eval(k)]).style.height = dHeight + "px";
			}
		}
	}
}




