﻿  var Navigation = new Navigation();
    EventUtility.AddEventHandler(window,"onload",Navigation.Init);
   
  function Navigation()
  {
    this.Init = Init;
    
    var ThirdTierEnabled = false;
    var FirstTier, SecondTier, ThirdTier;
    var SelectedThirdTier;
    var CurrentPageNode;
    
    function Init()
    {
        //show all page content
        document.body.style.visibility = "visible";
       
        FirstTier = ClassUtility.GetMembers("FirstTier","div");
        AddFirstTierHandler();
     
       
        SecondTier = ClassUtility.GetMembers("SecondTier","div");
        EventUtility.AddGroupEventHandler(SecondTier,"onmouseover",Navigation.ShowThirdTier);
       
        
        
        
        var ThirdTierGroup = ClassUtility.GetMembers("ThirdTierGroup","div");
       
        //HideThirdTier
        EventUtility.AddGroupEventHandler(ThirdTierGroup,"onmouseleave",Navigation.HideThirdTier);
        
        
        ThirdTier = ClassUtility.GetMembers("ThirdTier","div");
        EventUtility.AddGroupEventHandler(ThirdTier,"onmouseover",Navigation.HandleThirdTierItemEvents);
       
        var IsIE = (navigator.userAgent.toString().toLowerCase().indexOf("msie") >=0) ? true : false;
        if (IsIE)
        {
            RevealCurrentPageInNav();
        }
       
       //Add ad, unless it is for an article page under /midsizebusiness/resources directory structure or is https
       
       if ((location.toString().indexOf('/midsizebusiness/resources') > -1 == false) && (location.protocol != "https:"))
            AddAdFrame();
       else
         HideAdFrame();  
         
       //AddSBPlusLogin();           
    }
    
    function AddAdFrame()
    {
        var adFrame = document.getElementById("adFrame");
        adFrame.src = "http://rad.microsoft.com/ADSAdClient31.dll?GetAd=&PG=CMSSM1&SC=F3&AP=1164";
    }
    
     function HideAdFrame()
    {
        var adFrame = document.getElementById("adFrame");
        adFrame.style.display = "none";
    }
    
//    function AddSBPlusLogin()
//    {
//        //elements in MNP header where SBPlus login should go
//        var msviPPSpace = ClassUtility.GetMembers("msviPPSpace",'td');
//        var msviPassport = ClassUtility.GetMembers("msviPassport",'td');
//        var LoginLocation = (msviPassport.length > 0) ? msviPassport[0]: msviPPSpace[0];
//        
//        //login html provided by PassportButtons.ascx
//        var SBPlusLoginElements = document.getElementById('SBPlusLoginElements');
//        LoginLocation.innerHTML = SBPlusLoginElements.innerHTML;
//        var parent = SBPlusLoginElements.parentNode;
//        parent.removeChild(SBPlusLoginElements);
//        
//    }
    
    this.RevealCurrentPageInNav = RevealCurrentPageInNav;
    
    function RevealCurrentPageInNav()
    {
        var links = document.getElementsByTagName("a");
        var href, className;
        var pathName = location.pathname.toString().toLowerCase() + location.hash.toString().toLowerCase();
        
        for (var i=0;i<links.length;i++)
        {
            if (links[i].href != undefined)
            {
                href = links[i].href.toString().toLowerCase(); 
                if (href.indexOf(pathName) > -1)
                {
                    if (links[i].parentNode != undefined)
                    {
                        if (links[i].parentNode.className != undefined)
                        {
                            className = links[i].parentNode.className.toString();
                            if (className.indexOf('FirstTier') > -1 || className.indexOf('SecondTier') > -1)
                            {
                                //First & Second tier page
                                CurrentPageNode = links[i].parentNode;
                                Navigation.ShowSecondTier();
                                break;
                            } else if (className.indexOf('ThirdTier') > -1) {
                                //Third tier page
                                CurrentPageNode = links[i].parentNode.parentNode.parentNode;
                                Navigation.ShowSecondTier();
                                break;
                            }
                            
                        }
                    }
                    
                }
            }
        }
    }
    
    
    this.AddFirstTierHandler = AddFirstTierHandler;
    
    function AddFirstTierHandler()
    {
        EventUtility.AddGroupEventHandler(FirstTier,"onmouseover",Navigation.ShowSecondTier);
    }
    
    var SelectedSecondTier;
    
    this.ShowSecondTier = ShowSecondTier;
    function ShowSecondTier(e)
    {
        var SecondTierGroup;
        var sourceObject = EventUtility.GetEventSourceObject(e);
        if (sourceObject == undefined)
        {
            sourceObject = CurrentPageNode;
            SecondTierGroup = ClassUtility.GetChildMember(sourceObject.parentNode.parentNode,"SecondTierGroup");
        } else {
            if (sourceObject.nodeName == "A")//if A triggers event, pass up to parent DIV
                sourceObject = sourceObject.parentNode;
            SecondTierGroup = ClassUtility.GetChildMember(sourceObject,"SecondTierGroup");
        }
        
       
        var AllThirdTier = ClassUtility.GetMembers("ThirdTierGroup", "div");
        
        //remove the highlight from all first tier items
        ClassUtility.RemoveClassFromGroup(FirstTier,"FirstTierSelected");
        
        //remove the highlight from all second tier items
        ClassUtility.RemoveClassFromGroup(SecondTier,"SecondTierSelected");
        
        //hightlight current selection
       
       if (sourceObject.className.toString().indexOf('SecondTier') > -1)
            ClassUtility.AddClass(sourceObject,"SecondTierSelected");
       else
            ClassUtility.AddClass(sourceObject,"FirstTierSelected");
        
       //alert("source: " + sourceObject.parentNode.parentNode.className);
        if (SelectedSecondTier != sourceObject)
        {
            if (sourceObject.className.toString().indexOf('SecondTier') > -1)
                SelectedSecondTier = sourceObject.parentNode.parentNode;
            else    
                SelectedSecondTier = sourceObject;
            
       
            HideMembers(AllThirdTier,sourceObject);
            VerticalScale(SecondTierGroup,true);        
       }
      
    }
    
    this.HandleThirdTierItemEvents = HandleThirdTierItemEvents;
    function HandleThirdTierItemEvents(e)
    {
        e.cancelBubble = true;//prevent from bubble to second tier
        var sourceObject = EventUtility.GetEventSourceObject(e);
          
            if (sourceObject.nodeName == "A")//if A triggers event, pass up to parent DIV
                sourceObject = sourceObject.parentNode;
                
        //alert(sourceObject);
        //remove the highlight from all second tier items
        ClassUtility.RemoveClassFromGroup(ThirdTier,"ThirdTierSelected");
        
        //hightlight current selection
        ClassUtility.AddClass(sourceObject,"ThirdTierSelected");
        
    }
    
  
    this.HideThirdTier = HideThirdTier;
    
    function HideThirdTier(e)
    {
        
        e.cancelBubble = true;//prevent from bubble to second tier
        
        var sourceObject = EventUtility.GetEventSourceObject(e);
            if (sourceObject.nodeName == "A")//if A triggers event, pass up to parent DIV
                sourceObject = sourceObject.parentNode;
        var ThirdTierGroup = ClassUtility.GetChildMember(sourceObject,"ThirdTierGroup");
        
        
        
                     var AllThirdTier = ClassUtility.GetMembers("ThirdTierGroup", "div");
       
                    //hide all existing third tier items
                    var ThirdTier = ClassUtility.GetMembers("ThirdTierGroup", "div");
                    ClassUtility.RemoveClassFromGroup(FirstTier,"FirstTierSelected");
                    
                    HideMembers(AllThirdTier,ThirdTierGroup);
    }
    
    this.ShowThirdTier = ShowThirdTier;
    function ShowThirdTier(e)
    {
        
        e.cancelBubble = true;//prevent from bubble to second tier
        
        var sourceObject = EventUtility.GetEventSourceObject(e);
            if (sourceObject.nodeName == "A")//if A triggers event, pass up to parent DIV
                sourceObject = sourceObject.parentNode;
                
        //assign currently selected third tier to globabl variable, 
        //which other functions can check if actions still pending on a third tier that was previously selected
        SelectedThirdTier = sourceObject;
                        
        var ThirdTierGroup = ClassUtility.GetChildMember(sourceObject,"ThirdTierGroup");
        
        var AllThirdTier = ClassUtility.GetMembers("ThirdTierGroup", "div");
            
        var SecondTierGroup = sourceObject.parentNode;
        ClassUtility.AddClass(SecondTierGroup,"AllowOverflow");
        
        //hide all existing third tier items
        var ThirdTier = ClassUtility.GetMembers("ThirdTierGroup", "div");
        ClassUtility.RemoveClassFromGroup(FirstTier,"FirstTierSelected");
        
        HideMembers(AllThirdTier,ThirdTierGroup);
        
        //remove the highlight from all second tier items
       ClassUtility.RemoveClassFromGroup(SecondTier,"FirstTierSelected"); 
        ClassUtility.RemoveClassFromGroup(SecondTier,"SecondTierSelected");
        
        //hightlight current selection
        ClassUtility.AddClass(sourceObject,"SecondTierSelected");
        
        //show third selected third tier
        //VerticalScale(ThirdTierGroup, true);
        ShowImmediately(ThirdTierGroup);
    }
    
     function HideMembers(memberArray, selectedMember)
    {
        for (var i=0;i<memberArray.length;i++)
        {
            if (memberArray[i] != selectedMember)
            {
                memberArray[i].style.display = "none";
            }
        }
        
        
        
    }
    
     function IsMember(potentialMember, memberArray)
    {
        var isMember = false;
        for (var i=0;i<memberArray.length;i++)
        {
            if (memberArray[i] == potentialMember)
            {
                isMember = true;
                break;
               
            } 
        }
        
        return isMember;
    }
    
   
     function ShowImmediately(complexNode)
     {
         if (complexNode != null)
        {
            var childNodes = complexNode.childNodes;
            var childCount = childNodes.length;
            var childHeight = "27";
           
            
            if (childCount > 0)
            {
                
                StyleChangeObject = complexNode;
                var multiplicationFactor = 5;
                var iterations = childCount * 5;
                var newHeight = multiplicationFactor * iterations;
                complexNode.style.height = newHeight + "px";
                complexNode.style.display = "block";
            }
         }   
     }
     
    
    
     function VerticalScale(complexNode,isPositive)
    {
        if (complexNode != null)
        {
            var childNodes = complexNode.childNodes;
            var childCount = childNodes.length;
            var childHeight = "27";
            
            complexNode.style.height = "3px";
            
            StyleChangeObject = complexNode;
            var currentHeight = (isPositive) ? 0 : (childCount*childHeight);
            
            var newHeight;
            var timeDelay = 100;
            var multiplicationFactor = 5;
            var iterations = childCount * 5;
            
            
            for (var i=0;i<iterations;i++)
            {
                newHeight = (isPositive) ? parseInt(currentHeight)  + (parseInt(childHeight)/multiplicationFactor) : parseInt(currentHeight)  - (parseInt(childHeight)/multiplicationFactor);
                currentHeight = newHeight;
                if (i != 0)
                {
                    timeDelay += 5;
                    window.setTimeout("Navigation.StyleChange(document.getElementById('" + complexNode.id + "'),'" + newHeight + "px" + "');",timeDelay);
                    
                    //if (i == iterations-1)
                        //window.setTimeout("document.getElementById('" + complexNode.id + "').style.display = 'none';",timeDelay);
                }
                    
            }
            
        }
         
    }
    
    this.StyleChange = StyleChange;
    function StyleChange(obj, value)
    {
            obj.style.display = "block";
            obj.style.height = value;
    }
    
    
  
  }
 

