/* 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 flyoutVisible = false;
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 = "/"+lang+"/includes/nav-tocs.jsp";

var boolUseAjax = true;

/* Nav object */
function Nav(){
    var thisNav = this;
    thisNav.nav = $('#nav');
    thisNav.nav.logo = $('#nav-logo');
    thisNav.nav.flyout = $('#nav-list-container');
    thisNav.nav.links = $('#nav-list-container 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[0].offsetLeft;
    intNavOffsetTop = thisNav.nav[0].offsetTop;
	$('#htmlcontent').append('<div id="overlay"></div>');
      
    if (boolUseAjax){
		$.ajax({
			url: strNavTocsIncludeUrl,
			processData: false,
			data: 'xml',
			success: 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.css({display:'none', overflow:'hidden'});
}

function logoMouseover(){
	 objNav.navSlideOpen();
     objNav.stopTimeoutNavClose();
}

function logoMouseout(){
	 objNav.startTimeoutNavClose();
}

function flyoutMouseover(){
	objNav.stopTimeoutNavClose()
}

function flyoutMouseout(){
	 objNav.startTimeoutNavClose();
	 objNav.nav.logo.bind('mouseover', logoMouseover);
}

/* Nav animation methods */
Nav.prototype.initNav = function(){
    this.nav.logo.bind('mouseover', logoMouseover);
    this.nav.logo.bind('mouseout', logoMouseout);
	
    this.nav.flyout.bind('mouseover', flyoutMouseover);
    this.nav.flyout.bind('mouseout', flyoutMouseout);
}
Nav.prototype.killNav = function(){
    this.nav.logo.unbind('mouseover', logoMouseover);
}
Nav.prototype.startTimeoutNavClose = function (){
    if (!boolTocIsVisible){
        timeoutNavClose = setTimeout('objNav.navSlideClose()',3000);
    }
}
Nav.prototype.stopTimeoutNavClose = function (){
    if (timeoutNavClose!=null){
        clearTimeout(timeoutNavClose);
    }
}
Nav.prototype.navSlideOpen = function (){
	if (!flyoutVisible){
		flyoutVisible = true;
		objNav.killNav();
		this.nav.flyout.css({width:100, left:0, display:'block'});// TODO: make this value dynamic
		if($('#video-frame').length > 0){
			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.css('left'));
    var curWidth = parseInt(this.nav.flyout.css('width'));
    if(curWidth<200){// TODO: make this value dynamic
		this.nav.flyout.css({width:curWidth+intOPENSPEED});
    }else if(curPos<100){// TODO: make this value dynamic
        this.nav.flyout.css({left:curPos+intOPENSPEED});
    }else{
        clearInterval(animateTimer);
        toggleNavLinkText(1);
    }
}
Nav.prototype.animateClose = function () {
    var curPos = parseInt(this.nav.flyout.css("left"));
    var curWidth = parseInt(this.nav.flyout.css("width"));
    toggleNavLinkText(0);
    if(curPos>0){
        this.nav.flyout.css({left:curPos-intCLOSESPEED});
    } else if(curWidth>100){// TODO: make this value dynamic
        this.nav.flyout.css({width:curWidth-intCLOSESPEED});
    }else{
		flyoutVisible = false;
        objNav.initNav();
		this.nav.flyout.css({display:'none'});
        clearInterval(animateTimer);
        if($('#video-frame').length > 0){
            videoControlNav(1);
        }
    }
}

/* TOC object management methods */
// append the TOC objects to the Nav object
function addTocs(strTocsHtml){
    objTocsDiv = $('#nav-tocs');
    objTocsDiv.append(strTocsHtml);
	//objTocsDiv.innerHTML = strTocsHtml;
    arrayNavTocs = $($("div.nav-toc"));
    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 = $($("div.nav-close")[f]);
        objNavClose.css({display : "inline"});
        objNavClose.click(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 = $('div.nav-toc');
    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.css({'text-align':"left", left:intNavOffsetLeft+marginLeft, top:marginTop + intNavOffsetTop});
			objBody.prepend(objNav.nav);
			
        }
        if ($("#downloads").length > 0) {
            $("#downloads").css({display:"none"});
        }
        objOverlay.css({height:(height-20), display:'block'});
    }else{
        if (window.ActiveXObject){
            var objContent = $("#content");
            objNav.nav.css({left:intNavOffsetLeft, top:intNavOffsetTop});
            objContent.append(objNav.nav);
        }
        objOverlay.css({display:'none'});
        if (objDownloads = $("#downloads")) {
            objDownloads.css({display:"block"});
        }
    }
}
function resizeOverlay() {
    var objOverlay = $("#overlay");
    if(objOverlay.length > 0) {
        var objFrame = $("#frame");
        if (objOverlay.css("display") == 'block'){
            if (window.ActiveXObject){
                var objBody = $("#frame");
				objNav.nav.css({left:intNavOffsetLeft+marginLeft, top:intNavOffsetTop+marginTop});
            }
			objOverlay.css({height:(height-20)});
        }
    }
}

//register
onloadHTMLHandlers[onloadHTMLHandlers.length] = 'objNav = new Nav(); objNav.initNav();';
onresizeHTMLHandlers[onresizeHTMLHandlers.length] = 'resizeOverlay()';