/* Navigation Functionality */

/* Globals */
// IE instantiates window.objNav **after** the latter has been fully initialized,
// which is why we need to keep a lot of data in globals instead of objNav scope
var objNav;
var timeoutNavClose;
var boolTocIsVisible = false;
var hashTocs = new Object();
var intTocDivCounter = 0;
var arrayNavLinks;
var lenNavLinks;
var intNavOffsetLeft;
var intNavOffsetTop;
var intOPENSPEED = 5;
var intCLOSESPEED = 10;
var strNavTocsIncludeUrl = "/de/includes/nav-tocs.jsp";

var boolUseAjax = true;

/* Create Nav object and set the mouseover/mouseout on the logo */
onloadHandlers[onloadHandlers.length] = 'objNav = new Nav(); objNav.initNav();';
/* Nav object */
function Nav(){
    var thisNav = this;
    
    thisNav.nav = $('nav');
    thisNav.nav.logo = $('nav-logo');
    thisNav.nav.flyout = $('nav-list-container');
    thisNav.nav.links = thisNav.nav.flyout.getElementsByTagName("a");
    
    // we're going to need this global for the IE workarounds
    arrayNavLinks = thisNav.nav.links; 
    // store the Nav's position for use in the IE workarounds
    intNavOffsetLeft = thisNav.nav.offsetLeft;
    intNavOffsetTop = thisNav.nav.offsetTop;
    
       /* from Lightbox JS */
    // TODO: move these vars into objNav scope
    //var objBody = document.getElementsByTagName("body").item(0);
    var objBody = $("frame");
    var objOverlay = document.createElement("div");
    objOverlay.setAttribute('id','overlay');
    //objBody.appendChild(objOverlay);
    
    new Insertion.Before('breadcrumb', '<div id="overlay"></div>');
    
   //objBody.insertBefore(objOverlay, $("breadcrumb"));    
    if (boolUseAjax){
        // get the content of the target page
        // using the Prototype JS library's Ajax object
        var myAjax = new Ajax.Request(strNavTocsIncludeUrl, {
            method: 'get', 
            onComplete: addTocs
        });

        // define this global once instead of calculating it on 
        // every loop-through (thanks Scott!)
        lenNavLinks = thisNav.nav.links.length;
        // loop through the links to create the TOC objects and set the onclicks
        for (var a=0; a<lenNavLinks; a++){
            
            var currentLink = thisNav.nav.links[a];
            currentLink.onclick = function() {
                var thisAnchor = this;
                thisAnchor.href="javascript:void(0);";
                try {
                  thisNav.showToc(thisAnchor); // display the TOC for this Nav link
                } catch (e) {}
                return false;
            }
        }    
    }
    // hide the flyout
    toggleNavLinkText(0);
    thisNav.nav.flyout.style.display = 'none';
    thisNav.nav.flyout.style.overflow = 'hidden';
}
/* Nav animation methods */
Nav.prototype.initNav = function(){
    this.nav.logo.onmouseover =  function(){
        objNav.navSlideOpen();
        objNav.stopTimeoutNavClose()
    }
    this.nav.logo.onmouseout =  function(){
        objNav.startTimeoutNavClose()
    }
    this.nav.flyout.onmouseover =  function(){
        objNav.stopTimeoutNavClose()
    }
    this.nav.flyout.onmouseout =  function(){
        objNav.startTimeoutNavClose()
    }
}
Nav.prototype.killNav = function(){
    this.nav.logo.onmouseover = null;
}
Nav.prototype.startTimeoutNavClose = function (){
    if (!boolTocIsVisible){
        timeoutNavClose = setTimeout('objNav.navSlideClose()',3000);
    }
}
Nav.prototype.stopTimeoutNavClose = function (){
    if (timeoutNavClose!=null){
        clearTimeout(timeoutNavClose);
    }
}
Nav.prototype.navSlideOpen = function (){
    objNav.killNav();
    this.nav.flyout.style.width = '100px'; // TODO: make this value dynamic
    this.nav.flyout.style.left='0px';
    this.nav.flyout.style.display = 'block';
    if($('video-frame')){
        videoControlNav(0);
    }
    animateTimer = setInterval('objNav.animateOpen()',12);
}
Nav.prototype.navSlideClose = function (){
    animateTimer = setInterval('objNav.animateClose()',12);
}
Nav.prototype.animateOpen = function () {
    var curPos = parseInt(this.nav.flyout.style.left);
    var curWidth = parseInt(this.nav.flyout.style.width);
    if(curWidth<200){// TODO: make this value dynamic
        this.nav.flyout.style.width = (curWidth+intOPENSPEED)+'px';
    }else if(curPos<100){// TODO: make this value dynamic
        this.nav.flyout.style.left = (curPos+intOPENSPEED)+'px';
    }else{
        clearInterval(animateTimer);
        toggleNavLinkText(1);
    }
}
Nav.prototype.animateClose = function () {
    var curPos = parseInt(this.nav.flyout.style.left);
    var curWidth = parseInt(this.nav.flyout.style.width);
    toggleNavLinkText(0);
    if(curPos>0){
        this.nav.flyout.style.left = (curPos-intCLOSESPEED)+'px';
    } else if(curWidth>100){// TODO: make this value dynamic
        this.nav.flyout.style.width = (curWidth-intCLOSESPEED)+'px';
    }else{
        objNav.initNav();
        this.nav.flyout.style.display = 'none';
        clearInterval(animateTimer);
        if($('video-frame')){
            videoControlNav(1);
        }
    }
}

/* TOC object management methods */
// append the TOC objects to the Nav object
function addTocs(originalRequest){
    var strTocsHtml = originalRequest.responseText;
    objTocsDiv = $('nav-tocs');
    objTocsDiv.innerHTML = strTocsHtml;
    arrayNavTocs = document.getElementsByClassName("nav-toc", objTocsDiv);
    lenNavTocs = arrayNavTocs.length;
    for(var f=0;f<lenNavTocs;f++){
        var currentNavToc = arrayNavTocs[f];
        // set the IE hover state on the LIs
        if (window.ActiveXObject){
            var arrayNavTocItems = currentNavToc.getElementsByTagName("li");
            var lenNavTocItems = arrayNavTocItems.length;
            for (var q=0;q<lenNavTocItems;q++){
                var currentNavTocItem = arrayNavTocItems[q];
                currentNavTocItem.onmouseover = function(){
                    this.className = "hover";
                }
                currentNavTocItem.onmouseout = function(){
                    this.className = "";
                }
            }
        }
        // set the close button functionality
        var objNavClose = document.getElementsByClassName("nav-close", currentNavToc).pop();
        objNavClose.style.display = "inline";
        objNavClose.onclick = function() {
            objNav.hideToc();
            objNav.navSlideClose();
        }
    }
    //Display the correct toc panel if on a landing page
    if(flash == false) {
        var landingPageTocLink = $('frame').className+'-toclink';
        var navListAnchors = $('nav-list-container').getElementsByTagName('a');
        
        for(var i=0;i<navListAnchors.length;i++) {
            if(landingPageTocLink == navListAnchors[i].id) { //Open Nav if on landing page
                var navCloseLinks = document.getElementsByClassName('nav-close');//Hide close links for landing pages
                for(var j=0;j<navCloseLinks.length;j++) {
                    navCloseLinks[j].style.display = 'none';
                }
                objNav.navSlideOpen();
                objNav.showToc($(navListAnchors[i]));
            }
        }
        setupXitiOnclicks();
    }
}
// show the TOC related to this anchor
Nav.prototype.showToc = function(anchor){
    toggleOverlay(1);
    boolTocIsVisible = true;
    
    objTocsDiv = $('nav-tocs');
    arrayNavTocs = document.getElementsByClassName("nav-toc", objTocsDiv);
    lenNavTocs = arrayNavTocs.length;

    for(var e=0;e<lenNavLinks;e++){
        var currentNavLink = arrayNavLinks[e];
        if (currentNavLink==anchor){
            currentNavLink.className = "hover";
            for(var f=0;f<lenNavTocs;f++){
                if (f==e){
                    arrayNavTocs[f].style.display = "block";
                }
                else{
                    arrayNavTocs[f].style.display = "none";
                }
            }
        } else{
            currentNavLink.className = "";
        }
        
    }
}
// hide all TOC objects on the page
Nav.prototype.hideToc = function(){
    boolTocIsVisible = false;
    for(var g=0;g<lenNavTocs;g++){
        arrayNavTocs[g].style.display = "none";
    }
    
    for(var e=0;e<lenNavLinks;e++){
        arrayNavLinks[e].className = "";
    }
    
    toggleOverlay(0);
}
function toggleNavLinkText(state){
    for (var h=0; h<lenNavLinks; h++){
        if (state==true){
            arrayNavLinks[h].style.visibility = "visible";
        }else{
            arrayNavLinks[h].style.visibility = "hidden";
        }
    }
}
function toggleOverlay(state){
    var objOverlay = $("overlay");
    var objFrame = $("frame");
    var objDownloads;
    if (state==true){       
        if (window.ActiveXObject){
            var objBody = $("frame");
            objNav.nav.style.textAlign = "left";
            objNav.nav.style.left = (intNavOffsetLeft+marginLeft)+"px";
            objNav.nav.style.top = (intNavOffsetTop+marginTop)+"px";
            objBody.insertBefore(objNav.nav, objOverlay);
        }
        if (objDownloads = $("downloads")) {
            objDownloads.style.display = "none";
        }
        objOverlay.style.height = (height-20)+"px";
        objOverlay.style.display = 'block';
    }else{
        if (window.ActiveXObject){
            var objContent = $("content");
            objNav.nav.style.left=intNavOffsetLeft+"px";
            objNav.nav.style.top=intNavOffsetTop+"px";
            objContent.appendChild(objNav.nav);
        }
        objOverlay.style.display = 'none';
        if (objDownloads = $("downloads")) {
            objDownloads.style.display = "block";
        }
    }
}
function resizeOverlay() {
    var objOverlay = $("overlay");

    if(objOverlay) {
        var objFrame = $("frame");
        if (objOverlay.style.display == 'block'){
            if (window.ActiveXObject){
                var objBody = $("frame");
                objNav.nav.style.left = (intNavOffsetLeft+marginLeft)+"px";
                objNav.nav.style.top = (intNavOffsetTop+marginTop)+"px";
            }
            objOverlay.style.height = (height-20)+"px";
        }
    }
}
onresizeHandlers[onresizeHandlers.length] = 'resizeOverlay()';