﻿// JScript File

var MenuItems = new Array();
var MenuGraphics = new Array();
var MenuStartLeft = 0;
var MenuForceMainItemWidth =180;

var DropDownMenuSlideStep = 10;
var DropDownMenuSlideSpeed = 1;

var MenuItemIDStart = 'divMenuItem'

var doDebug = false;

function MenuGraphicsSet(l, bg, r, h, lw, rw)
{
    if (!rw) rw = 0;
    if (!lw) lw = 0;
    this.Left = l;
    this.Background = bg;
    this.Right = r;
    this.Height = h;
    this.LeftWidth = lw;
    this.RightWidth = rw;
}

function MenuItem(menuitemid, title, link, subs)
{
    this.MenuItemID = menuitemid;
    this.Title = title;
    this.Link = link;
    this.SubMenus = subs;
}

function BuildDDMenu(Holder)
{
    var hldr = document.getElementById(Holder);
    hldr.style.zIndex = 99999;
    MenuStartLeft = getElementPosition(Holder).left;

    var tbl = document.createElement('table');
    tbl.style.width = hldr.style.width;
    tbl.style.position = 'absolute';
    tbl.style.zIndex = '99999';
    tbl.cellPadding = 0;
    tbl.cellSpacing = 0;
    var row = tbl.insertRow(0);
    var cellcount = 0;
    for (i=0; i<MenuItems.length; i++)
    {
        var MenuItemID = MenuItems[i].MenuItemID;
        
        //Declare all the variables in the global scope
        eval('DDOpeningInstance' + MenuItemID + '=null');
        eval('DDClosingInstance' + MenuItemID + '=null');
        
        var cell =row.insertCell(cellcount);
        cell.setAttribute('id', 'cl' + MenuItemIDStart + MenuItems[i].MenuItemID);
        cellcount++;
        
        var div = document.createElement('div');
        div.setAttribute('id', MenuItemIDStart + MenuItems[i].MenuItemID);
        cell.style.zIndex = '99998';
        if (MenuForceMainItemWidth != 0) cell.style.width = MenuForceMainItemWidth;
        div.style.zIndex = '99999';
        div.innerHTML = BuildMenuItemContent(MenuItems[i].MenuItemID, MenuItems[i].Title, MenuItems[i].Link, 0, 0);
        div.onmouseover = function () { MainMenuItemMouseMoveControl(this, 'over'); };
        div.onmouseout = function () { MainMenuItemMouseMoveControl(this, 'out'); };
        CreateSubMenuItems(MenuItems[i].MenuItemID, MenuItems[i].SubMenus, Holder, 1);

        cell.appendChild(div);
    }
    hldr.appendChild(tbl);
    PositionMenuItemSubs();
}

function CreateSubMenuItems(ParentID, subs, ContainerID, level)
{
    var container = document.getElementById(ContainerID);
    if (subs)
    {
        for (x=0; x<subs.length; x++)
        {
            var div = document.createElement('div');
            div.setAttribute('id', MenuItemIDStart + subs[x].MenuItemID);
            div.style.visibility = 'hidden';
            div.style.position = 'absolute';
            div.innerHTML = BuildMenuItemContent(subs[x].MenuItemID, subs[x].Title, subs[x].Link, 0, level);
            div.onmouseover = function () { SubMenuItemMouseOver(ParentID); };
            div.onmouseout = function () { MainMenuItemOut(ParentID); };
            container.appendChild(div);
            //CreateSubMenuItems(subs[x].SubMenus, ContainerID, level+1);
        }
    }
}

function SubMenuItemMouseOver(MenuItemID)
{
    clearTimeout(eval('DDClosingInstance' + MenuItemID));
    OpenSubMenu(GetMenuItemIndex(MenuItemID), 0);
}

function MainMenuItemOut(MenuItemID)
{
    if (doDebug) document.getElementById('divDebug').innerHTML += 'Out'  + MenuItemID + '<br>';
    clearTimeout(eval('DDOpeningInstance' + MenuItemID));
    var index = GetMenuItemIndex(MenuItemID);
    if (MenuItems[index].SubMenus) CloseSubMenu(index, MenuItems[index].SubMenus.length-1);
}

function BuildOnClick(Link)
{
    var ret = ' onclick="';
    if (Link.toLowerCase().substr(0,11) == 'javascript:')
        ret += Link.substr(11);
    else
        ret += 'document.location = \'' + Link + '\';';
    
    ret += '" ';
    return ret;
}

//function BuildMenuItemContent(MenuItemID, Title, Link, SubCount, level)
//{   
//    var ret = '<table cellpadding="0" cellspacing="0">';
//    ret += '<tr><td' + BuildOnClick(Link) + '><img src="' + MenuGraphics[level].Left  + '" /></td>'
//    ret += '<td ' + BuildOnClick(Link) + ' id="clMenuItemContent' + MenuItemID + '" style="background-image:url(' + MenuGraphics[level].Background + ');">';
//    if (Link != '') ret += '<a  href="' + Link + '">';
//    ret += doReplace(Title, ' ', '&nbsp;');
//    if (Link != '') ret += '</a>';
//    ret += '</td>'
//    ret += '<td' + BuildOnClick(Link) + '><img src="' + MenuGraphics[level].Right  + '" /></td>'    
//    ret += '</tr>'
//    ret += '</table>'
//    return ret;
//}

function BuildMenuItemContent(MenuItemID, Title, Link, SubCount, level)
{   
    var ret = '<table cellpadding="0" cellspacing="0" class="tblMenu">';
    ret += '<tr><td' + BuildOnClick(Link) + '><img src="' + MenuGraphics[level].Left  + '" /></td>'
    ret += '<td ' + BuildOnClick(Link) + ' id="clMenuItemContent' + MenuItemID + '" style="background-image:url(' + MenuGraphics[level].Background + ');">';
    if (Link != '') ret += '&nbsp;<a  href="' + Link + '">';
    ret += doReplace(Title, ' ', '&nbsp;');
    if (Link != '') ret += '</a>';
    if (level==0)
    {
        ret += '&nbsp;<img src="' + MenuGraphics[level].Right  + '" style="vertical-align:middle;" />&nbsp;</td>' 
        ret += '<td><img src="nav_top_divider.gif" /></td>' 
    }
    else
    {
        ret += '&nbsp;</td>' 
    }
    ret += '</tr>'
    ret += '</table>'
    return ret;
}


function PositionMenuItemSubs(leftOnly)
{
    //Get max Width
    var mainmaxwidth = 0;
    if (MenuForceMainItemWidth == 0)
    {
        for (var i=0; i<MenuItems.length; i++)
        {
            var w = document.getElementById('clMenuItemContent' + MenuItems[i].MenuItemID).offsetWidth;
            if (w > mainmaxwidth) mainmaxwidth = w;
        }
    }  
    else
        mainmaxwidth = MenuForceMainItemWidth;
    
    var clWidth = (1*mainmaxwidth) + (1*MenuGraphics[0].LeftWidth) + (1*MenuGraphics[0].RightWidth);
    //position all items as left aligned
    for (var i=0; i<MenuItems.length; i++)
    {
        var elem = document.getElementById(MenuItemIDStart + MenuItems[i].MenuItemID);
        document.getElementById('clMenuItemContent'    + MenuItems[i].MenuItemID).style.width = mainmaxwidth + 'px';
        document.getElementById('cl' + MenuItemIDStart + MenuItems[i].MenuItemID).style.width = clWidth + 'px';
        document.getElementById('cl' + MenuItemIDStart + MenuItems[i].MenuItemID).width = clWidth + 'px';
        var pos = getElementPosition(MenuItemIDStart   + MenuItems[i].MenuItemID);
        var top = pos.top;
        //if (i==0) alert(pos.left);
        var zindex = elem.style.zIndex;
        zindex-=4;
        var submaxwidth = mainmaxwidth;
        if (MenuItems[i].SubMenus)
        {
            for (x=0; x<MenuItems[i].SubMenus.length; x++)
            {
                var sub = document.getElementById(MenuItemIDStart + MenuItems[i].SubMenus[x].MenuItemID)
                if (!leftOnly) 
                {
                    sub.style.top = top + 'px';
                    sub.style.zIndex = zindex;     
                    zindex--;
                }
                var ws = document.getElementById('clMenuItemContent'+ MenuItems[i].SubMenus[x].MenuItemID).offsetWidth;
                if (ws > submaxwidth) submaxwidth = ws;    
                sub.style.left = pos.left + 'px';    
            }
        }
        
        if ((MenuItems[i].SubMenus))
        {
            for (x=0; x<MenuItems[i].SubMenus.length; x++)
                document.getElementById('clMenuItemContent'+ MenuItems[i].SubMenus[x].MenuItemID).style.width = submaxwidth + 'px'

        }
    }
    
    var lastid = MenuItemIDStart + MenuItems[MenuItems.length-1].MenuItemID;
    var farright = document.getElementById(lastid).offsetWidth + getElementPosition(lastid).left;

    //loop through all items to check right hand edge doesnt overlap leftcount
    for (i=0; i<MenuItems.length; i++)
    {
        if (MenuItems[i].SubMenus)
        {
            var divMain = document.getElementById(MenuItemIDStart + MenuItems[i].MenuItemID);
            var rightofsub = getElementPosition(MenuItemIDStart + MenuItems[i].SubMenus[0].MenuItemID).left + document.getElementById(MenuItemIDStart + MenuItems[i].SubMenus[0].MenuItemID).offsetWidth;
            var targetleft = farright - document.getElementById(MenuItemIDStart + MenuItems[i].SubMenus[0].MenuItemID).offsetWidth;
            
            //alert(i + '   ' + rightofsub + ' ' + farright);
            if (rightofsub > farright)
            {
                for (x=0; x<MenuItems[i].SubMenus.length; x++)
                {
                    var div = document.getElementById(MenuItemIDStart + MenuItems[i].SubMenus[x].MenuItemID);
                    div.style.left = targetleft + 'px';
                }
            }
        }
   }
}

function GetMenuItemIndex(MenuItemID)
{
    var index = -1;
    for(j=0; j<MenuItems.length; j++)
    {
        if (MenuItems[j].MenuItemID == MenuItemID)
        {
            index = j;
            break;
        }
    }
    return index;
}

function CloseSubMenu(MenuItemsIndex, SubMenuItemsIndex)
{
    var elemid = MenuItemIDStart + MenuItems[MenuItemsIndex].SubMenus[SubMenuItemsIndex].MenuItemID;
    var SubMenuItem = document.getElementById(elemid);
    var currenttop = getElementPosition(elemid).top;

    var targettop = getElementPosition(MenuItemIDStart + MenuItems[MenuItemsIndex].MenuItemID).top;
    
    if (SubMenuItemsIndex != 0)
    {
        var previouselemid = MenuItemIDStart + MenuItems[MenuItemsIndex].SubMenus[SubMenuItemsIndex-1].MenuItemID;
        targettop = getElementPosition(previouselemid).top;
    }
    
    //if (doDebug) document.getElementById('divDebug').innerHTML += 'Closing ' + SubMenuItemsIndex + ' target:' + targettop + '   Current:' + currenttop + '<br>';
    
    var difference = (currenttop - targettop);
    var steps = (((difference/DropDownMenuSlideStep)^2)^0.5) + '';
    var bits = steps.split('.');
    if (bits.length > 1)
    {
        var intbit = bits[0];
        var t= ((intbit*1) * SlideShowSliderStep);
        SubMenuItem.style.top = t + 'px';
        SetAllSubOtherMenuTops(MenuItemsIndex, SubMenuItemsIndex, t)
    }
    
    if (currenttop > targettop)
    {
        var t = ((1*currenttop) - DropDownMenuSlideStep);
        SubMenuItem.style.top = t + 'px';
        SetAllSubOtherMenuTops(MenuItemsIndex, SubMenuItemsIndex, t);
        eval('DDClosingInstance' + MenuItems[MenuItemsIndex].MenuItemID + ' = setTimeout(\'CloseSubMenu(' + MenuItemsIndex + ', ' + SubMenuItemsIndex + ')\', DropDownMenuSlideSpeed);');
    }
    else
    {
        SubMenuItem.style.visibility = 'hidden';
        SubMenuItemsIndex--;
        if (SubMenuItemsIndex < 0)
        {    
            //alert('closed');
        }
        else
        {
            CloseSubMenu(MenuItemsIndex, SubMenuItemsIndex);
        }
    }
}

function MainMenuItemMouseMoveControl(cntrl, action)
{
    MenuItemID = cntrl.id.substring(MenuItemIDStart.length)
    
    if (action == 'over')
    {
        PositionMenuItemSubs(true);
        MainMenuItemOver(MenuItemID);
    }
    else
        MainMenuItemOut(MenuItemID)
}


function MainMenuItemOver(MenuItemID)
{
    //alert(MenuItemID);
    if (doDebug) document.getElementById('divDebug').innerHTML += 'Over'  + MenuItemID + '<br>';
    clearTimeout(eval('DDClosingInstance' + MenuItemID));
    OpenSubMenu(GetMenuItemIndex(MenuItemID), 0)
}

function OpenSubMenu(MenuItemsIndex, SubMenuItemsIndex)
{ 
    if (MenuItems[MenuItemsIndex].SubMenus)
    {
        if (doDebug) document.getElementById('divDebug').innerHTML += '1<br>'
        var elemid = MenuItemIDStart + MenuItems[MenuItemsIndex].SubMenus[SubMenuItemsIndex].MenuItemID;
        var SubMenuItem = document.getElementById(elemid);
        SubMenuItem.style.visibility = 'visible';
        
        var currenttop = getElementPosition(elemid).top;
        
        var targettop = 0;
        
        if (SubMenuItemsIndex == 0)
        {
            targettop = getElementPosition(MenuItemIDStart + MenuItems[MenuItemsIndex].MenuItemID).top;
            targettop += MenuGraphics[0].Height;
        }
        else
        {
            targettop = getElementPosition(MenuItemIDStart + MenuItems[MenuItemsIndex].SubMenus[SubMenuItemsIndex-1].MenuItemID).top;
            targettop += MenuGraphics[1].Height;
        }
        
        if (doDebug) document.getElementById('divDebug').innerHTML += 'Opening ' + SubMenuItemsIndex + ' target:' + targettop + '   Current:' + currenttop + '<br>';
        
        //Check we are starting from a position divisble by slider step
        var difference = (targettop - currenttop);
        var steps = (((difference/DropDownMenuSlideStep)^2)^0.5) + '';
        var bits = steps.split('.');
        if (bits.length > 1)
        {
            var intbit = bits[0];
            var t = ((intbit*1) * SlideShowSliderStep);
            SubMenuItem.style.top = t + 'px';
            SetAllSubOtherMenuTops(MenuItemsIndex, SubMenuItemsIndex, t)
        }
        
        if (currenttop < targettop)
        {
            var t = ((1*currenttop) + DropDownMenuSlideStep);
            if (doDebug) document.getElementById('divDebug').innerHTML += 'AAA   ' + MenuItemsIndex + '    ' + SubMenuItemsIndex + '   <br>';
            SubMenuItem.style.top = t + 'px';
            SetAllSubOtherMenuTops(MenuItemsIndex, SubMenuItemsIndex, t)
            if (doDebug) document.getElementById('divDebug').innerHTML += 'shouldtimer<br>';
            //alert(eval('DropDownMenuSlideSpeed'));
            eval('DDOpeningInstance' + MenuItems[MenuItemsIndex].MenuItemID + ' = setTimeout(\'OpenSubMenu("' + MenuItemsIndex + '", "' + SubMenuItemsIndex + '");\', DropDownMenuSlideSpeed);');
            //setTimeout('OpenSubMenu("' + MenuItemsIndex + '", "' + SubMenuItemsIndex + '");', DropDownMenuSlideSpeed);
            //alert('OpenSubMenu("' + MenuItemsIndex + '", "' + SubMenuItemsIndex + '");' + DropDownMenuSlideSpeed);
            if (doDebug) document.getElementById('divDebug').innerHTML += 'timerdone<br>';
        }
        else
        {
            SubMenuItemsIndex++;
            if (SubMenuItemsIndex > MenuItems[MenuItemsIndex].SubMenus.length-1)
            {    
                //alert('open');
            }
            else
            {
                if (doDebug) document.getElementById('divDebug').innerHTML += 'NEXT   ' + MenuItemsIndex + '    ' + SubMenuItemsIndex + '   <br>';
                OpenSubMenu(MenuItemsIndex, SubMenuItemsIndex);
            }
        }
    }
}

function SetAllSubOtherMenuTops(MenuItemsIndex, SubMenuItemsIndex, top)
{
    var start = SubMenuItemsIndex*1;
    var ed = MenuItems[MenuItemsIndex].SubMenus.length*1;
    if (doDebug) document.getElementById('divDebug').innerHTML += 'loop   ' + start + '    ' + ed + '   <br>';
    for (var ii=start; ii<ed; ii++)
    {
        if  (MenuItems[MenuItemsIndex].SubMenus[ii])
        {
            document.getElementById(MenuItemIDStart + MenuItems[MenuItemsIndex].SubMenus[ii].MenuItemID).style.top = top + 'px';
        }
        else
           break;
    }
}

function getElementPosition(elemID)
{
    var offsetTrail = document.getElementById(elemID);
    var offsetLeft = 0;
    var offsetTop = 0;
    while (offsetTrail){
        offsetLeft += offsetTrail.offsetLeft;
        offsetTop += offsetTrail.offsetTop;
        offsetTrail = offsetTrail.offsetParent;
    }
    if (navigator.userAgent.indexOf('Mac') != -1 && typeof document.body.leftMargin != 'undefined'){
        offsetLeft += document.body.leftMargin;
        offsetTop += document.body.topMargin;
    }
    return {left:offsetLeft,top:offsetTop};
}


