﻿
//Region Global Variables
var skm_SelectedMenuStyleInfos = new Object();
var skm_UnselectedMenuStyleInfos = new Object();
var skm_MenuFadeDelays = new Object();
var skm_clockValue = 0;
var skm_ticker;
var skm_highlightTopMenus = new Object();
var skm_images = new Array();
var skm_OpenMenuItems = new Array();
//EndRegion
//Region Methods to hook up a menu to the global variables
function skm_registerMenu(menuID, selectedStyleInfo, unselectedStyleInfo, menuFadeDelay, highlightTopMenu) {
    skm_SelectedMenuStyleInfos[menuID] = selectedStyleInfo;
    skm_UnselectedMenuStyleInfos[menuID] = unselectedStyleInfo;
    skm_MenuFadeDelays[menuID] = menuFadeDelay;
    skm_highlightTopMenus[menuID] = highlightTopMenu;
}
//Region The methods and contructor of the skm_styleInfo object.
function skm_applyStyleInfoToElement(element) {
    element.style.backgroundColor = this.backgroundColor;
    element.style.borderColor = this.borderColor;
    element.style.borderStyle = this.borderStyle;
    element.style.borderWidth = this.borderWidth;
    element.style.color = this.color;
    if (this.fontFamily != '')
        element.style.fontFamily = this.fontFamily;
    element.style.fontSize = this.fontSize;
    element.style.fontStyle = this.fontStyle;
    element.style.fontWeight = this.fontWeight;
    if (this.className != '')
        element.style.className = this.className;
}
function skm_styleInfo(backgroundColor, borderColor, borderStyle, borderWidth, color, fontFamily, fontSize, fontStyle, fontWeight, className) {
    this.backgroundColor = backgroundColor;
    this.borderColor = borderColor;
    this.borderStyle = borderStyle;
    this.borderWidth = borderWidth;
    this.color = color;
    this.fontFamily = fontFamily;
    this.fontSize = fontSize;
    this.fontStyle = fontStyle;
    this.fontWeight = fontWeight;
    this.className = className;
    this.applyToElement = skm_applyStyleInfoToElement;
}
//Region MouseEventHandlers
function skm_mousedOverMenu(menuID, elem, parent, displayedVertically, imageSource) {
    skm_stopTick();
    skm_closeSubMenus(elem);
    var childID = elem.id + "-subMenu";  // Display child menu if needed
    if (document.getElementById(childID) != null) {  // make the child menu visible and specify that its position is specified in absolute coordinates
        document.getElementById(childID).style.display = 'block';
        document.getElementById(childID).style.position = 'absolute';
        skm_OpenMenuItems = skm_OpenMenuItems.concat(childID);
        if (displayedVertically) { // Set the child menu's left and top attributes according to the menu's offsets
            document.getElementById(childID).style.left = skm_getAscendingLefts(parent) + parent.offsetWidth;
            document.getElementById(childID).style.top = skm_getAscendingTops(elem);
            var visibleWidth = parseInt(window.outerWidth ? window.outerWidth - 9 : document.body.clientWidth, 10);
            if ((parseInt(document.getElementById(childID).offsetLeft, 10) + parseInt(document.getElementById(childID).offsetWidth, 10)) > visibleWidth) {
                document.getElementById(childID).style.left = visibleWidth - parseInt(document.getElementById(childID).offsetWidth, 10);
            }
        } else {  // Set the child menu's left and top attributes according to the menu's offsets

            document.getElementById(childID).style.left = skm_getAscendingLefts(elem) + 'px';
            document.getElementById(childID).style.top = skm_getAscendingTops(parent) + parent.offsetHeight + 'px';

            if (document.getElementById(childID).offsetWidth < elem.offsetWidth)
                document.getElementById(childID).style.width = elem.offsetWidth;
        }
    }
    if (skm_SelectedMenuStyleInfos[menuID] != null) skm_SelectedMenuStyleInfos[menuID].applyToElement(elem);
    if (skm_highlightTopMenus[menuID]) {
        var eId = elem.id + '';
        while (eId.indexOf('-subMenu') >= 0) {
            eId = eId.substring(0, eId.lastIndexOf('-subMenu'));
            skm_SelectedMenuStyleInfos[menuID].applyToElement(document.getElementById(eId));
        }
    }
    if (imageSource != '') {
        setimage(elem, imageSource)
    }
}
function skm_mousedOverClickToOpen(menuID, elem, parent, imageSource) {
    skm_stopTick();
    if (skm_SelectedMenuStyleInfos[menuID] != null) skm_SelectedMenuStyleInfos[menuID].applyToElement(elem);
    if (skm_highlightTopMenus[menuID]) {
        var eId = elem.id + '';
        while (eId.indexOf('-subMenu') >= 0) {
            eId = eId.substring(0, eId.lastIndexOf('-subMenu'));
            skm_SelectedMenuStyleInfos[menuID].applyToElement(document.getElementById(eId));
        }
    }
    if (imageSource != '') {
        setimage(elem, imageSource)
    }
}
function skm_mousedOverSpacer(menuID, elem, parent) {
    skm_stopTick();
}
function skm_mousedOutMenu(menuID, elem, imageSource) {
    skm_doTick(menuID);
    if (skm_UnselectedMenuStyleInfos[menuID] != null) skm_UnselectedMenuStyleInfos[menuID].applyToElement(elem);
    if (skm_highlightTopMenus[menuID]) {
        var eId = elem.id + '';
        while (eId.indexOf('-subMenu') >= 0) {
            eId = eId.substring(0, eId.lastIndexOf('-subMenu'));
            skm_UnselectedMenuStyleInfos[menuID].applyToElement(document.getElementById(eId));
        }
    }
    if (imageSource != '') {
        setimage(elem, imageSource)
    }
}
function skm_mousedOutSpacer(menuID, elem) {
    skm_doTick(menuID);
}
//Region Utility Functions
function skm_closeSubMenus(parent) {
    if (skm_OpenMenuItems == "undefined") return;
    for (var i = skm_OpenMenuItems.length - 1; i > -1; i--) {
        if (parent.id.indexOf(skm_OpenMenuItems[i]) != 0) {
            document.getElementById(skm_OpenMenuItems[i]).style.display = 'none';
            skm_shimSetVisibility(false, skm_OpenMenuItems[i]);
            skm_OpenMenuItems = new Array().concat(skm_OpenMenuItems.slice(0, i), skm_OpenMenuItems.slice(i + 1));
        }
    }
}
function skm_shimSetVisibility(makevisible, tableid) {
    var tblRef = document.getElementById(tableid);
    var IfrRef = document.getElementById('shim' + tableid);
    if (tblRef != null && IfrRef != null) {
        if (makevisible) {
            IfrRef.style.width = tblRef.offsetWidth;
            IfrRef.style.height = tblRef.offsetHeight;
            IfrRef.style.top = tblRef.style.top;
            IfrRef.style.left = tblRef.style.left;
            IfrRef.style.zIndex = tblRef.style.zIndex - 1;
            IfrRef.style.display = "block";
        } else {
            IfrRef.style.display = "none";
        }
    }
}
function skm_IsSubMenu(id) {
    if (skm_subMenuIDs == "undefined") return false;
    for (var i = 0; i < skm_subMenuIDs.length; i++)
        if (id == skm_subMenuIDs[i]) return true;
    return false;
}
function skm_getAscendingLefts(elem) {
    if (elem == null)
        return 0;
    else {
        if ((elem.style.position == 'absolute' || elem.style.position == 'relative') && !skm_IsSubMenu(elem.id)) return 0;
        return elem.offsetLeft + skm_getAscendingLefts(elem.offsetParent);
    }
}
function skm_getAscendingTops(elem) {
    if (elem == null)
        return 0;
    else {
        if ((elem.style.position == 'absolute' || elem.style.position == 'relative') && !skm_IsSubMenu(elem.id)) return 0;
        return elem.offsetTop + skm_getAscendingTops(elem.offsetParent);
    }
}
//Region Fade Functions
function skm_doTick(menuID) {
    if (skm_clockValue >= 1) {
        skm_stopTick();
        skm_closeSubMenus(document.getElementById(menuID));
    } else {
        skm_clockValue++;
        skm_ticker = setTimeout("skm_doTick('" + menuID + "');", 500);
    }
}
function skm_stopTick() {
    skm_clockValue = 0;
    clearTimeout(skm_ticker);
}
function preloadimages() {
    for (i = 0; i < preloadimages.arguments.length; i++) {
        skm_images[i] = new Image();
        skm_images[i].src = preloadimages.arguments[i];
    }
}
function setimage(elem, imageSource) {
    var i = elem.getElementsByTagName("img")[0];
    i.src = imageSource;
}
		