
// --------------------------------------------------------
// (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) {
    try {

        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 invoking object (top left 0,0)
                offSetY = 20; 	// y axis off-set position of the layer from invoking object (top left 0,0)

                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
                var divWidth

                // 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") {

                        // Position from right edge flowing left
                        uaFixOffsetX = 0 //(navJS_isIE) ? -1 : 0;

                        var dWidth = $(divName).offsetWidth;
                        $(divName).style.left = (((rightEdge - dWidth) - uaFixOffsetX) - offSetX) + "px";

                    } else {

                        if (alignDirection == "C" || alignDirection == "c") {

                            // Position center to invoking object
                            var dWidth = $(divName).offsetWidth;
                            $(divName).style.left = (xpos - (dWidth / 2) + (objImg.width / 2)) + "px";


                        } else {

                            // Position from left edge flowing right
                            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";
                    } else {
                        $(divName).style.visibility = "visible";
                    }

                }
            } 
        }
    } catch (e) {
        // ignore
    }
}
//
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";
		}
	}
	// 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;
	}
}
// ########################################################