﻿/* MenuLink.js */

var xhr = false;
var currentMenu;
var toleranceTop = 5; /* IE doesn't remove menu very well */
var toleranceLeft = 20;
var toleranceBottom = 10;
var toleranceRight = 10;

function initMenuLink()
{
    var allLinks = document.getElementsByTagName("a");

    for(i=0;i<allLinks.length;i++)
    {
         if ( 
            ( allLinks[i].className.indexOf("menuItem") > -1 )
            ||
            (allLinks[i].className.indexOf("menuDropdownItem") > -1)
        )
        {
            allLinks[i].onclick = getNewFile;            
        }
        else
        if (allLinks[i].className.indexOf("menuDropdown") > -1) 
        {
            allLinks[i].onclick = function() { return false; }      
            allLinks[i].onmouseover = toggleMenu;         
        }

    }
   makeRequest("about.htm");
}

function toggleMenu(evt)
{
    if (!evt){
        evt = window.event;
    }
    var mouseX = evt.clientX;
    
    var startMenu = this.href.lastIndexOf("/") + 1;
    var stopMenu = this.href.lastIndexOf(".");
    
    var thisMenuName = this.href.substring(startMenu, stopMenu);
    
    var thisMenu = document.getElementById(thisMenuName);
    if ( thisMenu )
    {
        currentMenu = thisMenu;
        
        var thisMenuStyle = thisMenu.style;
        
    
        thisMenuStyle.display = "block";
        thisMenuStyle.left = document.body.offsetLeft + this.offsetLeft;
        /*
        thisMenuStyle.top = document.body.offsetTop + this.offsetTop 
        + this.offsetHeight + toleranceTop;
          */     
        thisMenu.onmouseover = toggleMenuOn;
        thisMenu.onmouseout = mouseOut;
        this.parentNode.onmouseout = mouseOut;
        this.parentNode.onmouseover = toggleMenuOn;
    }
   
    return false;
}

function toggleMenuOn()
{
    //currentMenu.style.display = "block";
    
    currentMenu.style.visibility = "visible";
}
function toggleMenuOff()
{
    currentMenu.style.visibility = "hidden";
    //currentMenu.style.display = "none";
}

function mouseOut(evt) 
{
    if(!evt || typeof(evt) == 'undefined') evt = window.event;
    if(checkMouseOut(this,evt)) 
    {
        toggleMenuOff();
    }
}

// Check whether the mouse has really left the element
function checkMouseOut(elem,evt) {
    var boundaries = getBoundaries(elem);
    if ( evt.clientX < 0 || evt.clientY < 0 ) return true; 
    
    if (   evt.clientX <= ( boundaries.left + toleranceLeft )
        || evt.clientX >= ( boundaries.right - toleranceRight )
        || evt.clientY <= ( boundaries.top + toleranceTop )
        || evt.clientY >= ( boundaries.bottom - toleranceBottom )
            ) 
            return true;
    else return false;
}

// Returns an object containing four properties - top, right, bottom, left - containing the co-ordinates of the four corners of the element
function getBoundaries(elem) {
    var boundaries = getRealOffsets(elem);
    boundaries.right = boundaries.left + elem.clientWidth;
    boundaries.bottom = boundaries.top + elem.clientHeight;
    return boundaries;
}

// Gets the absolute offsets of an element
function getRealOffsets(elem) {
    var offsets = new Object();
    offsets.left = elem.offsetLeft;
    offsets.top = elem.offsetTop;
    var parent = elem.offsetParent;
    while(parent != document.body) {
        offsets.left += parent.offsetLeft;
        offsets.top += parent.offsetTop;
        parent = parent.offsetParent;
    }

    return offsets;
}

function findAbsoluteX(obj)
{
    var posX = obj.offsetLeft;
    
    while(obj.offsetParent)
    {
        if(obj==document.getElementsByTagName('body')[0]){break}
        else
        {
            posX=posX+obj.offsetParent.offsetLeft;
            obj=obj.offsetParent;
        }
    }
    
    return posX;
}



function getNewFile()
{
    makeRequest(this.href);
    return false;
}

function makeRequest(url) 
{
    if (window.XMLHttpRequest) 
    {
        xhr = new XMLHttpRequest();
    }
    else {
        if ( window.ActiveXObject ) 
        {
            try 
            {
                xhr = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(e) {}
        }
   }
   
   if (xhr) 
   {
       xhr.onreadystatechange = showContents;
       xhr.open("GET", url, true);
       xhr.send(null);
   }
   else 
   {
        document.getElementById("panelUpdate").innerHTML = "Sorry, but I couldn't create an XMLHttpRequest";
   }
}

function showContents() 
{
    if ( xhr.readyState == 4 ) 
    {
        if (xhr.status == 200) 
        {
            var outMsg = (xhr.responseXML && 
            xhr.responseXML.contentType == "text/xml") ?
            xhr.responseXML.getElementsByTagName("choices")[0].textContent :
            xhr.responseText;
        }
        else
        {
            var outMsg = "There was a problem with the request " + xhr.status;
        }
        
        document.getElementById("panelUpdate").innerHTML = outMsg;
        
        //*** Detect PlugIns ***
        detectJPlayer();
        detectCloudCarousel();
   }
}            
        

