/* ****************
*
*	LE0512c (c) 2005 John Prescott
*
*	This is a mod of LE0512b.  Does not use sidebars or corners.
*	HTML is symantically the same as LE0512b, except that images are used in the place of text.
*	The inclusion of the img tag in an unexpected place is the basis of this mod.
*
*	Requires initialize on page load with initPage().
*
*
* ****************** */

/* ******* page initilization ***** */
function initPage() {
	init_docNode();
	initMenu();
	init_imgbar();
}


/* ************** browser biz first *************** */
var browser = new Browser();	

function Browser() {
/* usage: if (browser.isIE) {...} */
	var agt=navigator.userAgent.toLowerCase();
	this.isIE=false;
	this.isFF=false;
	this.isOpera=false;
	var isFF = (agt.indexOf('firefox')!=-1);
	if (isFF) {
		this.isFF=true;
		return;
	}
	var isOpera = (agt.indexOf("opera")!=-1);
	if (isOpera) {
		this.isOpera=true;
		return;
	}
	// run as IE unless proven otherwise
	this.isIE=true;
}

/* *************** DOCUMENT NODE FUNCTIONS ************* */

function init_docNode() {
	document.onmouseover = obj_over;
	document.onclick = obj_click;
}

/* ********************* MENU object *********************/
function menu() {
	this.imgbar;
	this.hasCorners;
	this.currentFocus;
	this.lastFocus;
	this.show;
	this.hasInit;
	this.src;
}

function initMenu() {
	menu.imgbar = document.getElementById('imgbar');
	menu.hasCorners = false;
	menu.lastFocus = document;
	menu.show = _show;
	menu.hasInit = true;
}

function _show(submenu,button) {
	if (submenu) {	
		if (!submenu.hasInit) {
			init_submenu(submenu,button);
		} else {
			submenu.style.display='block';
		}	
	}
}

var menu = new menu();

menu.hasInit = false;

document.createAttribute('hasInit');
document.createAttribute('hasLink');
document.createAttribute('link');
document.createAttribute('hasSubmenu');
document.createAttribute('submenu');


/* ********************** common functions *********************/

function obj_over(e) {
	var elem = getTrigger(e);
	menu.currentFocus = elem;
	eval_menu();
	var ev = getEvent(e);
	ev.cancelBubble = true;
}


function obj_out(e) {
	var elem = getTrigger(e);
	menu.lastFocus = elem;
	var ev = getEvent(e);
	ev.cancelBubble = true;
}

function obj_click(e) {
	var elem = getTrigger(e);
	var ev = getEvent(e);
	ev.cancelBubble = true;
	//alert(elem.id);
}

function eval_menu(){
	var cf = menu.currentFocus;
	var lf = menu.lastFocus;
	if (cf!=lf) {
		//case: moved onto tab
		if (cf.className) {
			if (cf.className=='tab') {hideDrops();return;}
		}
		//case: moved onto imgbar
		//if (cf==menu.imgbar) {hideDrops();return;}
		//case: moved onto document
		if (cf!=menu.imgbar) {
			var elem = menu.currentFocus;
			var x = 0;
			while (x<20) {
				if (elem.nodeType==9){hideDrops();return;}
				if (elem.parentNode!=menu.imgbar) elem = elem.parentNode;
				if (elem.nodeName.toLowerCase()=='html') {hideDrops();return;}
				x++;
			}
		}
		//case: moved onto a button different from one that has a submenu
		if (lf.hasSubmenu) {
			if (lf.submenu!=cf) {lf.submenu.style.display='none';return;}
		}
		//case: moved from an outbar to a button on a different outbar
		if (lf.className=='outbar') {
			if (cf.parentNode!=lf) {
				
				lf.style.display='none';
				return;
			}
		}
	}
}

function hideDrops() {
	var c = menu.imgbar.childNodes;
	for (i=0;i<c.length;i++) {
		if (c[i].className) {
			if ((c[i].className=='tabdrop') || (c[i].className=='outbar')){
				c[i].style.display='none';
			}
		}
	}
}


/* ********************* TABBAR and TABS ******************/

function init_imgbar() {
	var tbar = menu.imgbar;
	tbar.onmouseover = obj_over;
	tbar.onmouseout = obj_out;
	tbar.onclick = obj_click;
	init_tabs();
}

function init_tabs() {
	var c = menu.imgbar.childNodes;
	for (i=0;i<c.length;i++) {
		if (c[i].className) {
			if (c[i].className=='tab') {
				var tab = c[i];
				if (tab.firstChild.nodeType==1) {
					//if (tab.firstChild.tagName.toLowerCase()=='img') menu.hasCorners = true;
				}
				tab.onmouseover = btn_over;
				tab.onmouseout = btn_out;
				tab.onclick = obj_click;
				tab.submenu = document.getElementById(tab.id + '_drop')
				if (!menu.hasCorners) {
				//	tab.style.paddingLeft='10px';
				//	tab.style.paddingRight='10px';
				}
			}
		}
	}
}

/* ******************** SUBMENU and SUBMENU BUTTONS ****************/

function init_submenu(submenu,button) {
	var top;
	var left;
	switch (submenu.className.toLowerCase()) {
		case 'tabdrop' :
			top = menu.imgbar.offsetHeight;
			left = button.offsetLeft;
		break;
		case 'outbar' : 
			top = button.parentNode.offsetTop + button.offsetTop;
			left = button.parentNode.offsetLeft + button.parentNode.offsetWidth;
		break;
	}
	submenu.style.display = 'block';
	submenu.style.top = top;
	submenu.style.left = left;
	init_btns(submenu);
	submenu.onmouseover = obj_over;
	submenu.onmouseout = obj_out;
	submenu.onclick = obj_click;
	submenu.hasInit = true;
}

function init_btns(submenu) {
	var width = submenu.offsetWidth;
	var c = submenu.childNodes;
	for (i=0;i<c.length;i++){
		if (c[i].nodeName.toLowerCase() == 'span') {
			var btn = c[i];
			var cbtn = btn.childNodes;
			btn.style.width = width;
			btn.onmouseover = btn_over;
			btn.onmouseout = btn_out;
			btn.onclick = btn_click;
			// associate an anchor object with its btn (one max per btn)
			for (j=0;j<cbtn.length;j++) {
				if (cbtn[j].nodeName.toLowerCase()=='a') {
					var link = cbtn[j];
					btn.hasLink = true;
					btn.link = link;
				} else {
					btn.hasLink = false;
				}
			}
			// associate an outbar-type submenu with its btn (if it has one)
			if (btn.id) {
				btn.hasSubmenu = true;
				btn.submenu = document.getElementById(btn.id + '_outbar');
			}
		}
	}
	return true;	
}

function btn_over(e) {
	var elem = getTrigger(e);
	toggle_btn_style(e);
	var node = elem.nodeName.toLowerCase();
	if ((node=='a') || (node=='img')) elem = elem.parentNode.parentNode;
	menu.currentFocus = elem;
	eval_menu();
	if (elem.className.toLowerCase()=='tab') {
		menu.show(elem.submenu,elem);
	} else {
		if (elem.hasSubmenu) menu.show(elem.submenu,elem);
	}
	var ev = getEvent(e);
	ev.cancelBubble = true;
}

function btn_out(e) {
	var elem = getTrigger(e);
	toggle_btn_style(e);
	var node = elem.nodeName.toLowerCase();
	if ((node=='a') || (node=='img')) elem = elem.parentNode.parentNode;
	menu.lastFocus = elem;
	var ev = getEvent(e);
	ev.cancelBubble = true;
}

function btn_click(e) {
	var elem = getTrigger(e);
	var ev = getEvent(e);
	if (elem.hasLink) location.href = elem.link.href;
	ev.cancelBubble = true;
}

function toggle_btn_style(e){
	var elem = getTrigger(e);
	var ev = getEvent(e);
	if (!elem) return;
	switch (ev.type.toLowerCase()) {
		case (('mouseover')||('click')) :
			if (elem.src.indexOf('.jpg')>-1) {
				elem.src = elem.src.substring(0,elem.src.length-4) + "_over.jpg";
				elem.style.cursor='pointer';
			}
		break;
		case 'mouseout' :
		//doublecheck
		if (elem.src.indexOf('_over.jpg')>-1) {
			elem.src = elem.src.substring(0,elem.src.length-9) + ".jpg";
		}
		break;
	}
}

/*********************** EVENTS *********************/

function getTrigger(e) {
	if (!e) e = event;
	return e.target || e.srcElement;
}

function getEvent(e) {
   if (!e) e = event;
   return e;
}


/* ************ other stuff ********************/

/*	handy nodeType list ....... YOU'RE WELCOME!
	 1 ELEMENT_NODE 
	 2 ATTRIBUTE_NODE 
	 3 TEXT_NODE 
	 4 CDATA_SECTION_NODE 
	 5 ENTITY_REFERENCE_NODE 
	 6 ENTITY_NODE 
	 7 PROCESSING_INSTRUCTION_NODE 
	 8 COMMENT_NODE 
	 9 DOCUMENT_NODE 
	 10 DOCUMENT_TYPE_NODE 
	 11 DOCUMENT_FRAGMENT_NODE 
	 12 NOTATION_NODE 
*/

//window.onload = initPage;

