/* <!-- compression status: 1 --> (this is for http compression) */

// Code to determine the browser and version.

function Browser() {
    var ua, s, i;
    
    this.isIE = false; // Internet Explorer
    this.isNS = false; // Netscape
    this.version = null;
    
    ua = navigator.userAgent;
    
    s = "MSIE";
    if ((i = ua.indexOf(s)) >= 0) {
        this.isIE = true;
        this.version = parseFloat(ua.substr(i + s.length));
        return;
    }  
    s = "Netscape6/";
    if ((i = ua.indexOf(s)) >= 0) {
        this.isNS = true;
        this.version = parseFloat(ua.substr(i + s.length));
        return;
    }
    
    // Treat any other "Gecko" browser as NS 6.1.
    
    s = "Gecko";
    if ((i = ua.indexOf(s)) >= 0) {
        this.isNS = true;
        this.version = 6.1;
        return;
    }
}
var ie4=document.all
var ns6=document.getElementById&&!document.all
var ns4=document.layers

var browser = new Browser();

// Code for handling the menu bar and active button.
var activeButton = null;

// Capture mouse clicks on the page so any active button can be
// deactivated.

if (browser.isIE){
    document.onmousedown = pageMousedown;
    document.onkeydown = pageMousedown;
}else{
    document.addEventListener("mousedown", pageMousedown, true);
    document.addEventListener("keydown", pageMousedown, true);
}

function pageMousedown(event) {
    
    var el;
    // If there is no active button, exit.
    
    if (activeButton == null){
        return;
        }
    
    // Find the element that was clicked on.
    
    if (browser.isIE){
        el = window.event.srcElement;
    }else{
        el = (event.target.tagName ? event.target : event.target.parentNode);
    }
    // If the active button was clicked on, exit.
    
    if (el == activeButton){
        return
        };
    
    // If the element is not part of a menu, reset and clear the active
    // button.
    
    if (getContainerWith(el, "UL", "actionMenu") == null) {
        resetButton(activeButton);
        activeButton = null;
    }
}

function buttonShowMenu(event, menuId) {
    var button;
    
    // Find the target button element.
    
    if (browser.isIE){
        button = window.event.srcElement;
    }else{
        button = event.currentTarget;
    }
    clearHideMenu()
    
    // Associate the named menu to this button if not already done.
    // Additionally, initialize menu display.
    
    if (button.menu == null) {
        button.menu = document.getElementById(menuId);
        if (button.menu.isInitialized == null) {
            menuInit(button, button.menu);
        }
    }
    
    // Reset the currently active button, if any.
    if (activeButton != null && button != activeButton) 
        resetButton(activeButton);

    // Activate this button, unless it was the currently active one.
    if (button != activeButton) {
        depressButton(button);
        activeButton = button;
    }
    return false;
}

function contains_ns6(a, b) {
    //Determines if 1 element in contained in another- by Brainjar.com
    while (b.parentNode)
        if ((b = b.parentNode) == a)
            return true;
    return false;
}

function hideMenu(menuId){
    var menu = ns6 ? document.getElementById(menuId) : ie4 ? document.all[menuId] : ns4 ? document.layers[menuId] : ""
    
    if (menu)
        activeButton = null;
        menu.style.visibility=(ie4||ns6)? "hidden" : "hide"
}

function dynamicHide(e, menuId){
    
    var menu = ns6 ? document.getElementById(menuId) : ie4 ? document.all[menuId] : ns4 ? document.layers[menuId] : ""
    if (ie4&&!menu.contains(e.toElement)) 
        delayHideMenu(menuId)
    else if (ns6&&e.currentTarget!= e.relatedTarget&& !contains_ns6(e.currentTarget, e.relatedTarget)) {
        delayHideMenu(menuId);
    }
}

function delayHideMenu(menuId){
    if (ie4||ns6||ns4) {
        delayhide=setTimeout("hideMenu('" + menuId + "')",500)
    }
}

function clearHideMenu(){
    if (window.delayhide)
        clearTimeout(delayhide)
}

function depressButton(button) {

    var x, y;
    
    // Update the button's style class to make it look like it's
    // depressed.
    
    button.className += " menuButtonActive";
    
    // Make the associated drop down menu visible
    
    vis = button.menu.style.visibility;
    button.menu.style.visibility = (vis == "hidden" || vis == '') ? "visible" : "hidden";
}

function resetButton(button) {

    // Restore the button's style class.
    
    removeClassName(button, "menuButtonActive");
    
    // Hide the button's menu, first closing any sub menus.
    
    if (button.menu != null) {
        closeSubMenu(button.menu);
        button.menu.style.visibility = "hidden";
    }
}

function closeSubMenu(menu) {
    
    if (menu == null || menu.activeItem == null)
    return;
    
    // Recursively close any sub menus.
    
    if (menu.activeItem.subMenu != null) {
    closeSubMenu(menu.activeItem.subMenu);
    menu.activeItem.subMenu.style.visibility = "hidden";
    menu.activeItem.subMenu = null;
    }
    removeClassName(menu.activeItem, "menuItemHighlight");
    menu.activeItem = null;
}

// Code to initialize menus.

function menuInit(button, menu) {
    
    var itemList, spanList;
    var textEl, arrowEl;
    var itemWidth;
    var w, dw;
    var i, j;
    
    // For IE, replace arrow characters.
    
    if (browser.isIE) {
        menu.style.lineHeight = "2.5ex";
        spanList = menu.getElementsByTagName("SPAN");
        for (i = 0; i < spanList.length; i++)
        if (hasClassName(spanList[i], "menuItemArrow")) {
            spanList[i].style.fontFamily = "Webdings";
            spanList[i].firstChild.nodeValue = "4";
        }
    }
    
    // Find the width of a menu item.
    
    itemList = menu.getElementsByTagName("A");
    if (itemList.length > 0){
        itemWidth = itemList[0].offsetWidth;
    }else{
        return;
    }
    // For items with arrows, add padding to item text to make the
    // arrows flush right.
    
    maxWidth = 0;
    
    for (i = 0; i < itemList.length; i++) {
        var w = itemList[i].offsetWidth;
        if (w) {
            if(w>maxWidth) maxWidth = w;
        }
        
        spanList = itemList[i].getElementsByTagName("A");
        textEl = null;
        arrowEl = null;
        for (j = 0; j < spanList.length; j++) {
        if (hasClassName(spanList[j], "menuItemText")){
            textEl = spanList[j];
            }
        if (hasClassName(spanList[j], "menuItemArrow")){
            arrowEl = spanList[j];
            }
        }
        if (textEl != null && arrowEl != null){
        textEl.style.paddingRight = (itemWidth - (textEl.offsetWidth + arrowEl.offsetWidth)) + "px";
        }
    }

    // Fix IE hover problem by setting an explicit width on first item of
    // the menu.
    
    if (browser.isIE) {
        w = itemList[0].offsetWidth;
        itemList[0].style.width = w + "px";
        dw = itemList[0].offsetWidth - w;
        w -= dw;
        itemList[0].style.width = w + "px";
    }
    
    // Mark menu as initialized.
    if (maxWidth != 'undefined' && maxWidth>0) {
        menu.style ? menu.style.width = maxWidth+"px" : menu.width = maxWidth;
    }
                        
    menu.isInitialized = true;
}

// General utility functions.

function getContainerWith(node, tagName, className) {
    
    // Starting with the given node, find the nearest containing element
    // with the specified tag name and style class.
    
    while (node != null) {
        if (node.tagName != null && node.tagName == tagName && hasClassName(node, className)){
            return node;
    }
    node = node.parentNode;
    }
    return node;
}

    function hasClassName(el, name) {
    
    var i, list;
    
    // Return true if the given element currently has the given class
    // name.
    
    list = el.className.split(" ");
    for (i = 0; i < list.length; i++)
    if (list[i] == name){
        return true;
        }
    return false;
}

function removeClassName(el, name) {
    var i, curList, newList;
    
    if (el.className == null){
        return;
        }
    // Remove the given class name from the element's className property.
    
    newList = new Array();
    curList = el.className.split(" ");
    for (i = 0; i < curList.length; i++){
        if (curList[i] != name){
            newList.push(curList[i]);
            el.className = newList.join(" ");
        }
    }
}
// function getPageOffsetLeft(el) {

// var x;

// // Return the x coordinate of an element relative to the page.

// x = el.offsetLeft;
// if (el.offsetParent != null)
// x += getPageOffsetLeft(el.offsetParent);

// return x;
// }

// function getPageOffsetTop(el) {
//     
//     var y;
//     
//     // Return the x coordinate of an element relative to the page.
//     
//     y = el.offsetTop;
//     if (el.offsetParent != null){
//         y += getPageOffsetTop(el.offsetParent);
//     }
//     return y;
// }


