var W3CDOM = (document.createElement && document.getElementsByTagName);

var mouseOvers = new Array();

var mouseOuts = new Array();

var arrSubs = new Array();

var overMain = false;

var subVisible = false;

var overSub = false;

var delay = 1000;



window.onload = init;



function init(){

	if (!W3CDOM) return;

	

		arrSubs = getElementsByClassName(document, 'div', 'submenu');

	var imgs = getElementsByClassName(document, 'img', 'mouseovers');	



	for (var i=0;i<imgs.length;i++){

		imgs[i].onmouseover = mouseGoesOver;

		imgs[i].onmouseout = mouseGoesOut;

		var suffix = imgs[i].src.substring(imgs[i].src.lastIndexOf('.'));

		mouseOuts[i] = new Image();

		mouseOuts[i].src = imgs[i].src;

		mouseOvers[i] = new Image();

		mouseOvers[i].src = imgs[i].src.substring(0,imgs[i].src.lastIndexOf('.')) + "_on" + suffix;

		imgs[i].number = i;

		imgs[i].submenu = '';



		for(var j=0; j < arrSubs.length; j++){

			if (arrSubs[j].id == imgs[i].id + '-submenu'){

				imgs[i].submenu = imgs[i].id + '-submenu';

			}

		}

	}	

}



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);

}



function isSubmenu(thisEL){



	do{

		var sNodeName = thisEL.nodeName

		if ( (sNodeName == 'DIV') || (sNodeName == 'BODY') ){

			break;

		}else{

			thisEL = thisEL.offsetParent;

		}

	}while (sNodeName != 'BODY')

	

	if (thisEL.id.length !=0){

		return true;

	} else {

		return false;

	}

}



function mouseGoesOver(){

	this.src = mouseOvers[this.number].src;

	overSub = isSubmenu(this);



	if (this.submenu.length != 0){

		showSub(this.id);

		overSub = true;

		return;

	}

	

	hideAllSubs();

}



function mouseGoesOut(){

	this.src = mouseOuts[this.number].src;

	overSub = isSubmenu(this);



	if (this.submenu.length != 0){

		return;

	}

	

	if (overSub){

		overSub = false;

		setTimeout('hideAllSubs()', delay);

	} else {

		hideAllSubs();

	}

}



function showSub(foobar){



	hideAllSubs();



	var tmptop = getRealTop(foobar);

	var tmpleft = getRealLeft(foobar);

	var tmpel = getElement(foobar);

	var tmpwidth = tmpel.offsetWidth;

	var submenu = foobar + '-submenu';

	var objToMove = getElement(submenu);



	moveObjectTo(submenu, tmpleft + tmpwidth, tmptop); 

	objToMove.style.display='block';

	subVisible = true;

}



function hideAllSubs() {

	if (overSub == false) {

		for(var i=0; i<arrSubs.length; i++){

			var oElement = arrSubs[i];

			oElement.style.display='none';

		}

		subVisible = false;

	}

}



function hideSub(foobar){

	if (overSub == false) {

		var objToMove = getElement(foobar);

		objToMove.style.display='none';

		subVisible = false;

	}

}



// GET ELEMENT ID MULTI BROWSER
function getElement(id) {
	return document.getElementById ? document.getElementById(id) : document.all ? document.all(id) : null; 
}

// GET X COORDINATE
function getRealLeft(id) { 
	var el = getElement(id);
	if (el) { 
		xPos = el.offsetLeft;
		tempEl = el.offsetParent;
		while (tempEl != null) {
			xPos += tempEl.offsetLeft;
			tempEl = tempEl.offsetParent;
		} 
		return xPos;
	} 
} 

// GET Y COORDINATE
function getRealTop(id) {
	var el = getElement(id);
	if (el) { 
		yPos = el.offsetTop;
		tempEl = el.offsetParent;
		while (tempEl != null) {
			yPos += tempEl.offsetTop;
			tempEl = tempEl.offsetParent;
		}
		return yPos;
	}
}

// MOVE OBJECT TO COORDINATE
function moveObjectTo(objectID,x,y) {
	var el = getElement(objectID);
	el.style.left = x;
	el.style.top = y;
}

// MOVE SUBMENU TO CORRESPONDING BUTTON
function showSubMenu(subID, buttonID) {
	hideAllSubMenus();
	butX = getRealLeft(buttonID);
	butY = getRealTop(buttonID);
	moveObjectTo(subID,butX+xSubOffset, butY+ySubOffset);
}

// HIDE ALL SUB MENUS
function hideAllSubMenus() {
	for ( x=0; x<totalButtons; x++) {
		moveObjectTo("submenu" + (x+1) + "",-500, -500 );
	}
}

// HIDE ONE SUB MENU
function hideSubMenu(subID) {
	if ( overSub == false ) {
		moveObjectTo(subID,-500, -500);
	}
}
