/*

    Drop down menus initialization code
    Updated Jan 2 2007

*/    

window._blasi_outgoingNav = Array()
window._blasi_incomingNav = Array()
window._blasi_menuCount = 1
window._blasi_tmpCount = 0;

function initializeNav(navID, menuElemName, menuItemElemName, dropDownLevels) {
    initializeMenus(navID, menuElemName, menuItemElemName, 1)
    initializeMenuItems(navID, menuElemName, menuItemElemName)
}

function initializeMenus(navID, menuElemName, menuItemElemName, dropDownLevels) {
    var nav = null
    if (typeof navID == 'object') {
        nav = navID
    } else {
        nav = document.getElementById(navID);
    }
    
    var i,j,k;
    if (!nav._blasi_dropDownLevel) {
        nav._blasi_dropDownLevel = dropDownLevels
    } else if (nav._blasi_dropDownLevel < dropDownLevels) {
        nav._blasi_dropDownLevel = dropDownLevels
    } else {
        return
    }
    nav.className  = 'menu ' + _blasi_makeLevelClass(nav._blasi_dropDownLevel)
    if (!nav.id) nav.id = 'blasi_menuID_'+ (window._blasi_menuCount++)
    
    var items = nav.getElementsByTagName(menuItemElemName)
    for (j=0;j<items.length;j++) {
        if (!items[j]._blasi_origClassName) {
            items[j]._blasi_origClassName = items[j].className + ' '
//        } elseif (items[j]._blasi_origClassName != 'blank' {
//            items[j]._blasi_origClassName = 'blank'
        }
        items[j].className = (items[j]._blasi_origClassName != 'blank' ? items[j]._blasi_origClassName + ' ' : '') + 'menu '+ _blasi_makeLevelClass(nav._blasi_dropDownLevel)
        items[j]._blasi_dropDownLevel = nav._blasi_dropDownLevel 
    }
    items[0].className += " first"
    items[items.length-1].className += " last"
    if (nav.parentNode) {
        nav.parentNode._blasi_menuID = nav.id
        nav.parentNode.className += ' submenu'
    }

    // recursivly initialize submenus below
    var menus = nav.getElementsByTagName(menuElemName)
    for (i=0;i<menus.length;i++) {
        initializeMenus(menus[i], menuElemName, menuItemElemName, dropDownLevels+1)
    }
}

function initializeMenuItems(navID, menuElemName, menuItemElemName) {
    var nav = document.getElementById(navID);
    var tabs = GetElementsWithClassName(menuItemElemName, 'menu', nav)

    var i
    for (i=0;i<tabs.length;i++) {
        tabs[i]._blasi_ID = i // give each item a unique id
        _blasi_fixLinks(tabs[i])

        // event handlers, only if there's a submenu
        if (tabs[i]._blasi_menuID) {
            tabs[i]._blasi_showDropDown = _blasi_showDropDown
            tabs[i]._blasi_hideDropDown = _blasi_hideDropDown
            tabs[i].onmouseover = _blasi_onmouseover
            tabs[i].onmouseout  = _blasi_onmouseout
        }
    }

}

if (typeof BlasiPage == "function") BlasiPage.addOnLoad(function () { initializeNav('blasi_mainNav', 'ul', 'li') } )


function _blasi_fixLinks(obj) {
    var a = obj.getElementsByTagName('a');
    if (a && a.length) {
        var label = _blasi_makeLabelClass(a[0].innerHTML)
        a[0].innerHTML = '<span>'+a[0].innerHTML+'</span>'
        if (a[0].className) {
            a[0].className += ' ' + obj.className +' '+ label
        } else {
            a[0].className = obj.className +' '+ label
        }
        obj.className += ' '+ label
    }
    var nub = document.createElement('span');
    nub.className='nub'
    obj.appendChild(nub);
}

function _blasi_makeLevelClass(level) {
    return "menu_"+level
}
function _blasi_makeLabelClass(label) {
    var regexp = new RegExp("\\W", "gi")
    return label.toLowerCase().replace(regexp, '')
}

function _blasi_showDropDown() {
    if (!this._blasi_classNameOrig) this._blasi_classNameOrig = this.className;
    this.className += ' '+_blasi_makeLevelClass(this._blasi_dropDownLevel)+'_hover';

    var menu = document.getElementById(this._blasi_menuID)
//    if (menu) showDisplayElem(menu)

    if (this._blasi_hideTimer) clearTimeout(this._blasi_hideTimer)
    if (this._blasi_showTimer) clearTimeout(this._blasi_showTimer)
}

function _blasi_hideDropDown() {
    if (this._blasi_classNameOrig) this.className = this._blasi_classNameOrig
    this._blasi_classNameOrig = false
    var menu = document.getElementById(this._blasi_menuID)
//    if (menu) hideDisplayElem(menu)
    
    if (this._blasi_hideTimer) clearTimeout(this._blasi_hideTimer)
    if (this._blasi_showTimer) clearTimeout(this._blasi_showTimer)
}

function _blasi_onmouseover () {
    if (this._blasi_hideTimer) clearTimeout(this._blasi_hideTimer)
    if (window._blasi_outgoingNav[this.parentNode.id]) {
        if (this._blasi_showTimer) clearTimeout(this._blasi_showTimer)
        if (window._blasi_outgoingNav[this.parentNode.id]._blasi_ID != this._blasi_ID) {
            window._blasi_incomingNav[this.parentNode.id] = this
            this._blasi_showTimer = setTimeout("_blasi_showNav('"+this.parentNode.id+"')", 250)
        } 
    } else {
        window._blasi_incomingNav[this.parentNode.id] = this
        this._blasi_showTimer = setTimeout("_blasi_showNav('"+this.parentNode.id+"')", 250)
    }
}

function _blasi_onmouseout () {
    if (this._blasi_showTimer) clearTimeout(this._blasi_showTimer)
    if (this._blasi_classNameOrig) {
        if (window._blasi_outgoingNav) window._blasi_outgoingNav[this.parentNode.id] = this
        if (this._blasi_hideTimer) clearTimeout(this._blasi_hideTimer)
        this._blasi_hideTimer = setTimeout("_blasi_hideNav('"+this.parentNode.id+"')", 750)
    } else {
    }
}



function _blasi_showNav(id) {
    if (window._blasi_outgoingNav[id]) {
        window._blasi_outgoingNav[id]._blasi_hideDropDown()
        if (window._blasi_outgoingNav[id].blasi_hideTimer) clearTimeout(window._blasi_outgoingNav[id].blasi_hideTimer)
        if (window._blasi_outgoingNav[id].blasi_showTimer) clearTimeout(window._blasi_outgoingNav[id].blasi_showTimer)
    }
    if (window._blasi_incomingNav[id]) window._blasi_incomingNav[id]._blasi_showDropDown();
    window._blasi_incomingNav[id] = false
}

function _blasi_hideNav(id)  {
    if (window._blasi_outgoingNav[id]) {
        if (window._blasi_incomingNav[id]) {
            if (window._blasi_outgoingNav[id]._blasi_ID != window._blasi_incomingNav[id]._blasi_ID) {
                window._blasi_outgoingNav[id]._blasi_hideDropDown();
                window._blasi_outgoingNav[id] = false
            }
        } else {
            window._blasi_outgoingNav[id]._blasi_hideDropDown();
            window._blasi_outgoingNav[id] = false
        }
    }
}