// Javascript/DOM/DHTML Menu v1.1, Last Modified 29/11/2005
// Copyright Shane Kingston (for use by Australian Discount Travel & Tours), 2005
// Not to be copied or re-used without permission

document.write("<link rel='stylesheet' type='text/css' href='common/menu.css'>");

var menu_currentSubMenu=null;
var menu_currentSubLink=null;
var menu_current_aele=null;
var menu_hideOnTimer=false;
var menu_hide_timer=null;
var menu_show_timer=null;

var MENU_HIDE_TIMEOUT_VALUE=500;
var MENU_SHOW_TIMEOUT_VALUE=500;

if (!document.getElementsByTagName)
{
    document.write("<p><B>Your browser does not fully support this webpage. The menu will not function correctly.</B></p>");
    exit;
}
else
{
    window.onload=setupMenu;
}

function setupMenu()
{
    var uls=document.getElementsByTagName("UL");
    var asub=null;
    var ulsub=null;
    var menuul;
    var menuli;
    var arrowImg,arrowTxt;

    // find ul's of menu class
    for (var i=0;i<uls.length;i++)
    {
        if (uls[i].className.toUpperCase()=='MENU')
        {
          // found a ul with menu class
          // now look through it's children & look for li's containing a & ul elements
          menuul=uls[i];
          for (var t=0;t<menuul.childNodes.length;t++)
          {
                // look for li element
                if ((menuul.childNodes[t].tagName)&&(menuul.childNodes[t].tagName.toUpperCase()=='LI'))
                {
                    // found li element, now look for a & ul child elements
                    asub=null;
                    ulsub=null;
                    menuli=menuul.childNodes[t];
                    for (var p=0;p<menuli.childNodes.length;p++)
                    {
                        if (menuli.childNodes[p].tagName)
                        {
                            if (menuli.childNodes[p].tagName.toUpperCase()=='A')
                            {
                              asub=menuli.childNodes[p];
                            }
                            else if (menuli.childNodes[p].tagName.toUpperCase()=='UL')
                            {
                              ulsub=menuli.childNodes[p];
                            }
                        }
                    }
                    // if a child UL (submenu) was found, set the event handers for the A element (link to submenu)
                    if (asub&&ulsub)
                    {
                        // add event handlers
                        if (asub.addEventListener)
                        {
                            asub.addEventListener('mouseout',menuMouseOutPerformed,true);
                            asub.addEventListener('mouseover',menuMouseOverSubLinkPerformed,true);
                            ulsub.addEventListener('mouseout',menuMouseOutPerformed,true);
                            ulsub.addEventListener('mouseover',menuMouseOverPerformed,true);

                        }
                        else
                        {
                            asub.onmouseout=menuMouseOutPerformed;
                            asub.onmouseover=menuMouseOverSubLinkPerformed;
                            ulsub.onmouseout=menuMouseOutPerformed;
                            ulsub.onmouseover=menuMouseOverPerformed;
                        }
                        
                        // add arrow on link
                        arrowTxt=document.createTextNode(' ');
                        arrowImg=document.createElement('img');
                        arrowImg.src="common/arrow.gif";
                        arrowImg.border=0;
                        asub.appendChild(arrowTxt);
                        asub.appendChild(arrowImg);
                    }

                }
          }
        }
        // if no javascript errors include css styles
//        document.write('<link rel="stylesheet" href="common/menu.css" type="text/css">');
    }
}

// display a submenu after a set amount of time
// called when user moves mouse over a sub menu link
// if a sub menu is about to become hidden, it is cancelled
function menuMouseOverSubLinkPerformed(event)
{
    var aele
    // obtain the a element that the user moved mouse over
    if (window.event)
        aele=window.event.srcElement;
    else
    {
        aele=event.currentTarget;
        event.preventDefault();
    }
    menu_current_aele=aele;
    cancelHideTimer();
    menu_show_timer=setTimeout('showMenu()',MENU_SHOW_TIMEOUT_VALUE);
}

// hide a submenu after a set amount of time
// called when user has moved the mouse away from a sub menu or a sub menu link
// only executes if a hide operation is not already in progress
function menuMouseOutPerformed(event)
{
    if (!window.event)
    {
        event.preventDefault();
    }
    if (!menu_hide_timer)
    {
        cancelShowTimer();
        menu_hide_timer=setTimeout('hideMenu()',MENU_HIDE_TIMEOUT_VALUE);
    }
    return false;
}

// clears the hide sub menu timer if active
function cancelHideTimer()
{
    if (menu_hide_timer)
    {
        clearTimeout(menu_hide_timer);
        menu_hide_timer=null;
    }
}

// clears the show sub menu timer if active
function cancelShowTimer()
{
    if (menu_show_timer)
    {
        clearTimeout(menu_show_timer);
        menu_show_timer=null;
    }
}

// if a sub menu is in the process of disappearing, cancel it
// called when user moves the mouse over a menu item/link
function menuMouseOverPerformed(event)
{
    if (!window.event)
    {
        event.preventDefault();
    }
    cancelHideTimer();
    return false;
}

// hide the currently opened sub menu
function hideMenu()
{
    cancelHideTimer();
    
    if (menu_currentSubMenu)
        menu_currentSubMenu.style.visibility='hidden';
    if (menu_currentSubLink)
        menu_currentSubLink.className='';
    menu_currentSubMenu=null;
    menu_currentSubLink=null;
    
    return false;
}

// show a submenu
function showMenu()
{
    var aele
    var liele
    var subulele
    
    cancelShowTimer();

    aele=menu_current_aele;
    // get the parent li, of the a element
    if (!aele.parentNode)
    {
       alert("An error occured while trying to display a submenu");
       return false;
    }
    liele=aele.parentNode;

    while ((liele.tagName)&&(liele.tagName.toUpperCase()!='LI'))
    {
	if (liele.parentNode==0)
	{
		alert("An error occured while trying to display a submenu. Can't find parent li node.");
		return false;
	}
	liele=liele.parentNode;
    } 

    // get the ul element of the submenu (ie. child ul)
    subulele=null;
    for (var i=0;i<liele.childNodes.length;i++)
    {
        if ((liele.childNodes[i].tagName)&&(liele.childNodes[i].tagName.toUpperCase()=='UL'))
        {
          subulele=liele.childNodes[i];
          break;
        }
    }
    if (!subulele)
    {
        alert("An error occured while trying to display a submenu. Can't find submenu.");
    }
    else
    {
        // check if a sub menu is already open
        if (menu_currentSubMenu)
        {
            // if so, hide it
            menu_currentSubMenu.style.visibility='hidden';
            menu_currentSubLink.className='';
            // check if current sub menu is the one the user just clicked on again
            if (menu_currentSubMenu==subulele)
            {
                // if so, don't open it again, make it disappear
                menu_currentSubMenu=null;
                menu_currentSubLink=null;
                return false;
            }

        }
        // show sub menu & set as current
        subulele.style.visibility='visible';
        aele.className='subItemOpen';
        menu_currentSubMenu=subulele;
        menu_currentSubLink=aele;
    }

}

