﻿//***********************************
//  CONSTRUCTOR
//***********************************
function NavDropDown(control, rootElement) {

    //******************************
    //  PROPERTIES
    //******************************
    var _control = control;
    var _rootElement = rootElement;
    var _oScope = this;
    
    //DROP DOWN PROPERTIES
    var _aDropDown = new Array();
    var _oNavElements = new Object();
    
    //DROP DOWN STATUS
    var _sDropDownStatus = new String();
    var _nDropDownSelected = new Number();
    var _oCurrentOptionSelected = new Object();
    var _oCurrentSilverlightOption = new Object();
    
    //VIDEO FRAMEWOKR
    var _oVideoFramework = new Object();
    
    //NAV BUTTONS
    var _defaultButton = new SimpleButton(_control, _rootElement);
    var _secondaryButton = new SimpleButton(_control, _rootElement);
    
    //OPTIONS
    var _option1Button = new SimpleButton(_control, _rootElement);
    var _option2Button = new SimpleButton(_control, _rootElement);
    var _option3Button = new SimpleButton(_control, _rootElement);

    //******************************
    //  GETTER / SETTERS
    //******************************
    
    this.addNavElements = function(oNavElements) {_oNavElements = oNavElements;};
    this.navElements = function() {return _oNavElements;};
    
    this.addVideoFramework = function(oVideoFramework) {_oVideoFramework = oVideoFramework;};
    this.videoFramework = function() {return _oVideoFramework;};

    //******************************
    //  PRIVATE
    //******************************
    
    
    //*******************************
    //  GENERAL PROPERTIES
    //********************************
    function initiateProperties() {
        
        //NAV ELEMENTS
        var oTitleDefault = _oScope.navElements().defaultButton;
        var oTitleSecondary = _oScope.navElements().secondaryButton;
        
        var oOption1 = _oScope.navElements().option1;
        var oOption2 = _oScope.navElements().option2;
        var oOption3 = _oScope.navElements().option3;
        
        //HAND PROPERTIES
        oOption1.Cursor = "Hand";
        oOption2.Cursor = "Hand";
        oOption3.Cursor = "Hand";
        oTitleDefault.Cursor = "Hand";
        oTitleSecondary.Cursor = "Hand";
    }
    
    //******************************
    //  INITIAL VIDEO LOAD
    //******************************
    function initialVideoLoad() {
        var aNavProperties = _aDropDown;
        var oOption = _oScope.navElements().option2;
        var sURL = aNavProperties[0].option2.url; 
    
        //Load video
        loadURL(sURL, true, oOption);
        highlightSelection(oOption);
        initiateDefaultStage(0);
    }
    
    //******************************
    //  UI
    //******************************
    
    //******************************
    //  DEFAULT STAGE
    //******************************
    function initiateDefaultStage(nDefaultIndex) {
        //PROPERTIES
        var oDropDownContainer = _oScope.navElements().dropDownContainer;
        var oSecondaryButton = _oScope.navElements().secondaryButton;
        
        //NAV ELEMENTS
        var oTitleDefault = _oScope.navElements().defaultTitle;
        var oOption1 = _oScope.navElements().option1;
        var oOption2 = _oScope.navElements().option2;
        var oOption3 = _oScope.navElements().option3;
        
        var aNavProperties = _aDropDown;
        
        //DROP DOWN PROPERTIES
        oTitleDefault.text = aNavProperties[nDefaultIndex].title;
        oOption1.text = aNavProperties[nDefaultIndex].option1.title;
        oOption2.text = aNavProperties[nDefaultIndex].option2.title;
        oOption3.text = aNavProperties[nDefaultIndex].option3.title;
        
        oDropDownContainer.Height = 19;
        oSecondaryButton.Visibility = "Collapsed";
        
        //LINK PROPERTIES
        //CALL FIRST VIDEO TO PLAY
        
        
        //SET STATUS
        _sDropDownStatus = "DEFAULT_STAGE";
        _nDropDownSelected = nDefaultIndex;
    }
    
    
    
    //******************************
    //  SECONDARY STAGE
    //******************************
    function initiateSecondaryStage(nDefaultIndex, nSecondaryIndex) {
        //PROPERTIES
        var oDropDownContainer = _oScope.navElements().dropDownContainer;
        var oSecondaryButton = _oScope.navElements().secondaryButton;
        
        var aNavProperties = _aDropDown;
        
        //NAV ELEMENTS DEFAULT
        var oTitleDefault = _oScope.navElements().defaultTitle;
        var oTitleSecondary = _oScope.navElements().secondaryTitle; 

        //DROP DOWN PROPERTIES
        oTitleDefault.text = aNavProperties[nDefaultIndex].title;
        oTitleSecondary.text = aNavProperties[nSecondaryIndex].title;
        oDropDownContainer.Height = 39;
        oSecondaryButton.Visibility = "Visible";
        
        //LINK PROPERTIES
        
        //SET STATUS
        _sDropDownStatus = "SECONDARY_STAGE";
        
        oSecondaryButton.Cursor = "Hand";
    }
    
    
    
    //******************************
    //DROP DOWN
    //******************************
    function initiateDropDownUI() {
        
        //PROPERTIES
        var oDefaultButton = _oScope.navElements().defaultButton;
        var oSeondaryButton = _oScope.navElements().secondaryButton;
        
        //APPLY
        _defaultButton.setButton(oDefaultButton);
        _secondaryButton.setButton(oSeondaryButton);
        
        
        //EVENT LISTENERS ONCLICK
        _defaultButton.onReleaseEvent = function() {
            
          if(_sDropDownStatus == "SECONDARY_STAGE") {
           
            //CHECK SELECTED INDEX
            if(_nDropDownSelected == 0) {
                    initiateDefaultStage(0);
            }else {
                    initiateDefaultStage(1);
            }
          
          
          }else {

            //CHECK SELECTED INDEX
            if(_nDropDownSelected == 0) {
                 initiateSecondaryStage(0,1);
            }else {
                 initiateSecondaryStage(1,0);
            }
            
            }
        }
        
        _secondaryButton.onReleaseEvent = function() {
        
        //CHECK SELECTED INDEX
        if(_nDropDownSelected == 0) {
                  clearAllHighlights();
                  initiateDefaultStage(1);
                
            }else {
                  clearAllHighlights();
                  highlightSelection(_oCurrentSilverlightOption);
                  initiateDefaultStage(0);
         }
           
        }
        
        //INITIATE
        _defaultButton.initiate();
        _secondaryButton.initiate();
    }
    
    //*************************************
    //  VIDEO OPITIONS UI
    //*************************************
    function initiateVideoOptions() {
        //PROPERTIES
        var oOption1 =  _oScope.navElements().option1;
        var oOption2 =  _oScope.navElements().option2;
        var oOption3 =  _oScope.navElements().option3;
        
        //
        var aNavProperties = _aDropDown;
        
        //APPLY
        _option1Button.setButton(oOption1);
        _option2Button.setButton(oOption2);
        _option3Button.setButton(oOption3);
        
        //EVENT LISTENERS
        _option1Button.onReleaseEvent = function() {
            var oOption1 =  _oScope.navElements().option1;
            var url = aNavProperties[_nDropDownSelected].option1.url;
           
            var bIsSilverlight = aNavProperties[_nDropDownSelected].isSilverlight;
            
            loadURL(url, bIsSilverlight, oOption1);
            highlightSelection(oOption1);
        }
        
        _option2Button.onReleaseEvent = function() {
           var oOption2 =  _oScope.navElements().option2;
           var url = aNavProperties[_nDropDownSelected].option2.url;
         
           var bIsSilverlight = aNavProperties[_nDropDownSelected].isSilverlight;
        
           loadURL(url, bIsSilverlight, oOption2);
           highlightSelection(oOption2);
        }
        
       _option3Button.onReleaseEvent = function() {
           var oOption3 =  _oScope.navElements().option3;
           var url = aNavProperties[_nDropDownSelected].option3.url;
    
           var bIsSilverlight = aNavProperties[_nDropDownSelected].isSilverlight;
          
           loadURL(url, bIsSilverlight, oOption3);
           highlightSelection(oOption3);
        }
         
         //INITIATE
        _option1Button.initiate();
        _option2Button.initiate();
        _option3Button.initiate();
    
    }
    
    //*****************************
    //  LOAD CONTENT
    //*****************************
    function loadURL(url, bIsSilverlight, oTitle) {
        var sURL = url;
        var oTitle = oTitle;
        var bIsSilverlight = bIsSilverlight;
        var oVideo = _oScope.videoFramework();
        
        if(bIsSilverlight) {
            oVideo.showVideo(sURL);
            _oCurrentSilverlightOption = oTitle;
        } else {
            //window.navigate(sURL);
            window.location.href=sURL;
            pauseVideo();
        } 
     }
    
    //******************************
    //  VIDEO SELECTION HIGHLIGHT
    //******************************
    function highlightSelection(oTarget) {
        var oTarget = oTarget;
        
        //IF NOT FIRST TIME RUNNING
        if(_oCurrentOptionSelected.name != undefined) {
            _oCurrentOptionSelected.Foreground = "White";
         }
         
         oTarget.Foreground = "Yellow";
        _oCurrentOptionSelected = oTarget;
    }
   
    //****************************************
    // VIDEO SELECTION HIGHLIGHT CLEAR ALL
    //****************************************
    function clearAllHighlights() {
      var oOption1 =  _oScope.navElements().option1;
      var oOption2 =  _oScope.navElements().option2;
      var oOption3 =  _oScope.navElements().option3;
      
      oOption1.Foreground = "White";
      oOption2.Foreground = "White";
      oOption3.Foreground = "White";
    }
    
    //******************************
    //  PAUSE VIDEO
    //******************************
    function pauseVideo() {
     var oVideo = _oScope.videoFramework();
     oVideo.pauseVideo();
    }
    
    //******************************
    //  PUBLIC
    //******************************
    
    //******************************
    // ADD PROPERTIES TO ARRAY
    //******************************
    
    this.addDropDownProperties = function(sTitle, oOption1, oOption2, oOption3, bIsSilverlight) {
        _aDropDown.push({title:sTitle, option1:oOption1, option2:oOption2, option3:oOption3, isSilverlight:bIsSilverlight});
    }
    
    this.clearDropDownProperties = function() {
        var aTarget = _aDropDown;
        var nLength = aTarget.length;
        
        for(var i = 0; i < nLength; i++) {
            aTarget.splice(0,i);
        }
    }
    
    //****************************
    //  INITIATE
    //****************************
    
    this.initiate = function() {
       initiateDropDownUI();
       initiateVideoOptions();
       initiateProperties();
      
      // initialVideoLoad();
    }
    
    
    this.applyUpdate = function() {
        initialVideoLoad();
        initiateVideoOptions();
        initiateProperties();
    }
}