// JavaScript Document

// Get elements by class name function
function getElementsByClassName(className, tag, elm){
	var testClass = new RegExp("(^|\\\\s)" + className + "(\\\\s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		if(testClass.test(current.className)){returnElements.push(current);}
	}
	return returnElements;
}
// Get next sibling function
function getNextElement(node) {
	if (node.nodeType == 1) {
		return node;
	}
	if (node.nextSibling) {
		return getNextElement(node.nextSibling);
	}
	return null;
}
// Get previous sibling function
function getPreviousElement(node) {
	if (node.nodeType == 1) {
		return node;
	}
	if (node.previousSibling) {
		return getPreviousElement(node.previousSibling);
	}
	return null;
}
// Preload images
var preloaded = new Array();
function preload_images() {
    for (var i = 0; i < arguments.length; i++){
        preloaded[i] = document.createElement('img');
        preloaded[i].setAttribute('src',arguments[i]);
    };
};
preload_images(
	'http://www.branston.com/images/site_graphics/generic/sub_nav_tab_over.gif'
);

// Close panels onload function
function closePanel(currentElement,finalheight,interval) {
	// test browser for DOM compatability
	if (!document.getElementById) return false;
	if (!document.getElementById("subnav")) return false;
	// get link panels to be closed
	var links = getElementsByClassName(currentElement, "div", document);
	// loop through all link panels
	for (var i=0; i < links.length; i++)  {
		var elmHeight = parseInt(links[i].style.height);
		if (elmHeight == finalheight) {
			var openPanel = getElementsByClassName("subnav_links_panel open", "div", document);
			for (var i=0; i < openPanel.length; i++)  {
				openPanel[i].className = "subnav_links_panel";
			}
			// enable events handlers for the first time
			attachEventHandler();
			return true;
		}
		if (elmHeight > finalheight) {
			var changeheight = Math.ceil((elmHeight - finalheight)/10);
			elmHeight = elmHeight - changeheight;
		}
		links[i].style.height = elmHeight + "px";
		var repeat = "closePanel('"+currentElement+"',"+finalheight+","+interval+")";
	}
	links.movement = setTimeout(repeat,interval);
}

function closePanels() {
	// test browser for DOM compatability
	if (!document.getElementById) return false;
	if (!document.getElementById("subnav")) return false;
	// first set link panels height style
	var linkpanels = getElementsByClassName("subnav_links_panel", "div", document);
	for (var i=0; i < linkpanels.length; i++)  {
		linkpanels[i].style.height = "110px";
		linkpanels[i].style.overflow = "hidden";
	}
	var openlinkpanel = getElementsByClassName("subnav_links_panel open", "div", document);
	for (var i=0; i < openlinkpanel.length; i++)  {
		openlinkpanel[i].style.height = "110px";
		openlinkpanel[i].style.overflow = "hidden";
	}
	var closedlinkpanel = getElementsByClassName("subnav_links_panel closed", "div", document);
	for (var i=0; i < closedlinkpanel.length; i++)  {
		closedlinkpanel[i].style.height = "0px";
		closedlinkpanel[i].style.overflow = "hidden";
	}
	// execute close all link panels function above
	closePanel("subnav_links_panel",0,10);
}

function openThisPanel(currentElement,finalheight,interval) {
	var disablelinks = getElementsByClassName("subnav_section_header", "h3", document);
	for (var i=0; i < disablelinks.length; i++)  {
		disablelinks[i].firstChild.onmouseover = null;
		disablelinks[i].firstChild.onfocus = null;
		disablelinks[i].onmouseover = null;
		disablelinks[i].onfocus = null;
	}
	// open this panel
	var thislink = getElementsByClassName(currentElement, "div", document);
	if (thislink.movement) {clearTimeout(thislink.movement);}
	for (var i=0; i < thislink.length; i++)  {
		var elmHeight = parseInt(thislink[i].style.height);
		if (elmHeight == finalheight) {
			// reset class of open panel
			var openPanel = getElementsByClassName("subnav_links_panel open", "div", document);
			for (var i=0; i < openPanel.length; i++)  {
				var openPanelHeaders = Array();
				openPanelHeaders[i] = getPreviousElement(openPanel[i].previousSibling);
				openPanelHeaders[i].removeAttribute("style");
				openPanelHeaders[i].onmouseover = function() {
					thislink = this.firstChild;
					thislink.style.background = "#5d962f url(http://www.branston.com/images/site_graphics/generic/sub_nav_tab_over.gif) 0 0 no-repeat";
				}
				openPanelHeaders[i].onmouseout = function() {
					thislink = this.firstChild;
					thislink.style.background = "";
				}
				openPanel[i].className = "subnav_links_panel";
			}
			// re-enable links
			attachEventHandler();
			return true;	
		}
		if (elmHeight < finalheight) {
			var changeHeight = Math.ceil((finalheight - elmHeight)/10);
			elmHeight = elmHeight + changeHeight;
		
		}
		thislink[i].style.height = elmHeight + "px";
		
		// close other panels
		var otherlinks = getElementsByClassName("subnav_links_panel", "div", document);
		
		for (var i=0; i < otherlinks.length; i++)  {
			var elmHeight2 = parseInt(otherlinks[i].style.height);
			if (elmHeight2 > 0) {
				var changeHeight2 = Math.ceil((elmHeight2 - 0)/10);
				elmHeight2 = elmHeight2 - changeHeight2;	
			}
			otherlinks[i].style.height = elmHeight2 + "px";
		}
		var repeat = "openThisPanel('"+currentElement+"',"+finalheight+","+interval+")";
	}
	thislink.movement = setTimeout(repeat,interval);
}

// Attach closeThisPanel function
function attachEventHandler() {
	var headerlinks = getElementsByClassName("subnav_section_header", "h3", document);
	for (var i=0; i < headerlinks.length; i++)  {
		headerlinks[i].firstChild.onmouseover = function() {
			containerDiv = this.parentNode;
			containerDiv.style.background = "#5d962f url(http://www.branston.com/images/site_graphics/generic/sub_nav_tab_over.gif) 0 0 no-repeat";
			var nextDiv = getNextElement(containerDiv.nextSibling);
			nextDiv.className = "subnav_links_panel open";
			function openThis() {
				var disablelinks = getElementsByClassName("subnav_section_header", "h3", document);
				for (var i=0; i < disablelinks.length; i++)  {
					disablelinks[i].firstChild.onmouseout = null;
				}
				openThisPanel("subnav_links_panel open",110,5);
			}
			test = setTimeout(openThis,750);
		}
		headerlinks[i].firstChild.onmouseout = function() {
			clearTimeout(test);
			containerDiv = this.parentNode;
			containerDiv.style.background = "#6DB138 url(http://www.branston.com/images/site_graphics/generic/sub_nav_tab.gif) 0 0 no-repeat";
			var nextDiv = getNextElement(containerDiv.nextSibling);
			nextDiv.className = "subnav_links_panel";
		}
		/*headerlinks[i].firstChild.onfocus = function() {
			containerDiv = this.parentNode;
			containerDiv.style.background = "#5d962f url(http://www.branston.com/images/site_graphics/generic/sub_nav_tab_over.gif) 0 0 no-repeat";
			var nextDiv = getNextElement(containerDiv.nextSibling);
			nextDiv.className = "subnav_links_panel open";
			openThisPanel("subnav_links_panel open",110,5);
		}*/
	}
}

function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}
addLoadEvent(closePanels);