
// --------------------------------------------------------
// (C) Copyright 2006 LFN :: globaldefiance@hotmail.com
// --------------------------------------------------------

// ########################################################
// ########################################################

// Initiation

	navJS_hideMenuTimer = null;
	navJS_aryOriginalImgSrc = new Array();
	navJS_aryLayers = new Array();
	navJS_aryRegisteredAnchors = new Array();
	navJS_isIE = (navigator.userAgent.toLowerCase().indexOf("msie") != -1)

// --------------------------------------------------------

// imgID - id of image in document
// swapImg - img src for mouseover effect
// divName - name of drop menu layer (if present)
// alignDirection - "[[L],[R]]"
// divWidth - required width of menu div
// offSetX - x axis off-set
// offSetY - y axis off-set

function showSubMenu(imgID,swapImg,divName,alignDirection,divWidth,overrideOffSetX,overrideOffSetY,delay) {
if (document.getElementById) {
if ($(imgID)) {

	// ----------------------------------------------------

	layerDelay = 250;	// delay before layers hide (1000 = 1 second)
	offSetX = 0;		// x axis off-set position of the layer from object
	offSetY = 21;		// y axis off-set position of the layer from object
	
	if (delay) {layerDelay = delay;}
	if (overrideOffSetX) {offSetX = overrideOffSetX;}
	if (overrideOffSetY) {offSetY = overrideOffSetY;}
	
	// ----------------------------------------------------
	
	// Get source image object from the passed ref
	objImg = $(imgID);

	// Register source image and requested div to arrays
	if (!navJS_aryLayers[divName]) {navJS_aryLayers[divName] = 0;}
	if (!navJS_aryOriginalImgSrc[objImg.id]) {navJS_aryOriginalImgSrc[objImg.id] = objImg.src;}

	// Reset timer and known images
	clearTimer();
	resetImages();
	
	// Reset (hide) all known layers (except requested one)
	for (var i in navJS_aryLayers) {
		if ($(i) && (!(divName == i))) {$(i).style.visibility = "hidden";}
	}
	
	// Do img swap if requested (swap src supplied)
	if (swapImg) {
		swapImage(imgID,swapImg);
	}

	// Get position of source image object
	var xpos = findPosX(objImg);
	var ypos = findPosY(objImg);
	var rightEdge = xpos + objImg.width
	
	// Position and show (unless already visible, then hide) requested layer
	if (divName) {
	
		if (!((divWidth == 0)||(isNaN(divWidth)))) {
			// set div width
			$(divName).style.width = divWidth + "px";
			// set all hyperlinks within div to width
			var a = $(divName).getElementsByTagName("a");
			for (i=0; i<a.length; i++) {
				a[i].style.width = (divWidth-0) + "px";
			}
		}

		if (alignDirection == "R" || alignDirection == "r") {
		
			uaFixOffsetX = 0 //(navJS_isIE) ? -1 : 0;
			
			var dWidth = $(divName).offsetWidth;
			$(divName).style.left = (((rightEdge-dWidth) - uaFixOffsetX) - offSetX) + "px";
			
		} else {
		
			uaFixOffsetX = 0 //(navJS_isIE) ? 1 : 0;
			$(divName).style.left = (xpos + uaFixOffsetX + offSetX) + "px";
		}
		
		uaFixOffsetY = 0 //(navJS_isIE) ? 1 : 0;
		$(divName).style.top = (ypos + offSetY + uaFixOffsetY) + "px";
		
		if ($(divName).style.visibility == "visible") {
		    $(divName).style.visibility = "hidden";
		    //$(divName).style.top = "-10000px";
		    //$(divName).style.left = "-10000px";
		} else {
			$(divName).style.visibility = "visible";
		}

	}
}}}
//
function menuItemOver() {
	clearTimer();
}
//
function hideMenus() {
	navJS_hideMenuTimer = setTimeout("doHideLayers()", layerDelay);
}
//
function resetImages() {
	for (i in navJS_aryOriginalImgSrc) {
		$(i).src = navJS_aryOriginalImgSrc[i];
	}
}
// reset single image
function mouseOutSubItem(imgID) {
	// get the image object from the passed ref
	var objImg = $(imgID);
	if (navJS_aryOriginalImgSrc[objImg.id]) {
	    $(objImg.id).src = navJS_aryOriginalImgSrc[objImg.id];
	}
	hideMenus();
}
// swap image
function swapImage(imgID,swapImg) {
	clearTimer();
	// get the image object from the passed ref
	var objImg = $(imgID);
	if (!navJS_aryOriginalImgSrc[objImg.id]) {
		navJS_aryOriginalImgSrc[objImg.id] = objImg.src;
	}
	$(objImg.id).src = swapImg;
}
//
function doHideLayers() {
	clearTimer();
	// hide all menus
	for (var i in navJS_aryLayers) {
		if ($(i)) {
			$(i).style.visibility = "hidden";
			//$(i).style.top = "-10000px";
			//$(i).style.left = "-10000px";
		}
	}
	// reset image src's
	resetImages();
}

//
function clearTimer() {
	if (navJS_hideMenuTimer) {
		clearTimeout(navJS_hideMenuTimer);
		navJS_hideMenuTimer = null;
	}
}
function textLinkOver() {
	clearTimer();
}
function textLinkOut() {
	hideMenus();
}

document.onclick = function(e) { 
	var target = (e && e.target) || (event && event.srcElement);
	// see if the source element is a known image object
	if ((!(navJS_aryOriginalImgSrc[target.id])) && (!(navJS_aryRegisteredAnchors[target.id]))) {
			doHideLayers();
	}	
}

window.onresize = function() {
	doHideLayers();
}

// ########################################################

//
function registerNavAnchor(eName) {
	if ($(eName)) {
		navJS_aryRegisteredAnchors[eName] = 5;
	}
}

//
function findPosX(obj) {
	var curleft = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}
//
function findPosY(obj) {
	var curtop = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function $(id) {
	return document.getElementById(id);
}

// ########################################################