﻿//****************************
//  CONSTRUCTOR
//****************************
function Nav(control, rootElement) {

    //****************************
    //  PROPERTIES
    //****************************
    
    var _control = control;
    var _rootElement = rootElement;
    var _oScope = this;
    
    //NAV REFERENCE
    var _oNavElements = new Object();
    var _oVideoClass = new Object();
    
    //NAV STATUS
    var _sVideoStatus = new String();
    var _nVideoDuration = new Number();
    var _nVideoPosition = new Number();
    
     //PROGRESS BAR 
    var _isProgressBarEnabled = new Boolean();
    
    //CLASS REFERENCE
    var UI_fullscreen = new UI();
    var UI_playPause = new UI();
    var UI_volume = new UI();
    var UI_restart = new UI();


    //****************************
    //  GETTER / SETTERS
    //****************************
    
    this.addNavElements = function(oNavElements) {_oNavElements = oNavElements};
    this.navElements = function() {return _oNavElements;};
    
    this.addVideoClass = function(oVideoClass) {_oVideoClass = oVideoClass;};
    this.videoClass = function() {return _oVideoClass;};
    
    
      //DETERMINE IF PROGRESS BAR IS REQUIRED
    this.addIsProgressBar = function(isProgressBarEnabled) {_isProgressBarEnabled = isProgressBarEnabled;};
    this.isProgressBar = function() {return _isProgressBarEnabled;};

    //****************************
    //  PRIVATE
    //****************************
    
    //*************************************
    //  INITIATE BUTTON PROPERTIES
    //*************************************
    function playPauseButton() {
      playPauseUI();
    }
    
    function fullScreenButton() {
      fullScreenUI();
    }
    
    function volumeButton() {      
        volumeUI();
    }
    
    function restartButton() {
        restartUI();
    }
    
    //*********************************
    //  GENERAL UI 
    //*********************************
    
    
    //*****************************************
    //FULLSCREEN
    //*****************************************
    function fullScreenUI() {
      var oTarget = _oScope.navElements().fullScreen;
      var oVideoClass = _oScope.videoClass();
      
      //INITIATE LISTENR
      UI_fullscreen.addTargetButton(oTarget);
        
      //FULLSCREEN EVENT
      UI_fullscreen.onPressEvent = function() {
         var isFullScreen = oVideoClass.isFullScreen();
          if(isFullScreen) {
              oVideoClass.defaultScreen()
          }else {
              oVideoClass.fullScreen();
          }
       }
    }
    
    
    //*********************************** 
    //PLAY PAUSE
    //**********************************
    function playPauseUI() {
        //PROPERTIES
        var oTarget = _oScope.navElements().playPause;
        var oVideoClass = _oScope.videoClass().videoElement();
      
       
        //INITIATE LISTENER
        UI_playPause.addTargetButton(oTarget);
        
        //PLAY PAUSE EVENT
        UI_playPause.onPressEvent = function() {
            var sStatus = _sVideoStatus;
            
            
            if(sStatus == "Playing") {
                oVideoClass.Pause();
               
            }else {
                oVideoClass.Play();
                
            }
         }
    }
    
    //******************************************
    //  VOLUME
    //******************************************
    function volumeUI() {
        //PROPERTIES
        var oTarget = _oScope.navElements().volume;
        var oVideoClass = _oScope.videoClass().videoElement();
        
        //INITIATE LISTENER
        UI_volume.addTargetButton(oTarget);
        
        //VOLUME EVENT
        UI_volume.onPressEvent = function() {
            if(oVideoClass.Volume == 0) {
                oVideoClass.Volume = 100;
                checkCurrentVolume();
            }else {
                 oVideoClass.Volume = 0;
                 checkCurrentVolume();
            }
        }
     }
     
     //***************************************
     // UPDATE FULLSCREEN BUTTON
     //***************************************
     function checkFullScreen() {
     
        var oFullScreenImage = _oScope.navElements().fullScreenImage;
        var oDefaultScreenImage = _oScope.navElements().defaultScreenImage;
        var oVideoClass = _oScope.videoClass();
        
        oVideoClass.onFullScreenChange = function(isFullScreen) {
      
            if(isFullScreen) {
                oFullScreenImage.Opacity = 0;
                oDefaultScreenImage.Opacity = 1;
            }else {
                oFullScreenImage.Opacity = 1;
                oDefaultScreenImage.Opacity = 0;
            }
        }
    }
     
     
     
     
     //***************************************
     // UPDATE VOLUME BUTTON
     //***************************************
     function checkCurrentVolume() {
         var oVideoClass = _oScope.videoClass().videoElement();
         var nCurrentVolume = oVideoClass.Volume;
         var volumeUpImage = _oScope.navElements().volumeUpImage;
         var volumeDownImage = _oScope.navElements().volumeDownImage;
         
         if(nCurrentVolume == 0) {
            volumeUpImage.Opacity = 0;
            volumeDownImage.Opacity = 1;
         }else {
            volumeUpImage.Opacity = 1;
            volumeDownImage.Opacity = 0;
         }
     }
   
    //****************************
    //  GENERAL VIDEO STATUS
    //***************************
    function generalVideoStatus() {
        var oVideoClass = _oScope.videoClass();
        var oPlayImage = _oScope.navElements().playBtnImage;
        var oPauseImage = _oScope.navElements().pauseBtnImage;
        
        oVideoClass.onVideoStatusChange = function(sStatus) {
            _sVideoStatus = sStatus;
            
            //DISPLAY PLAY OR PAUSE FROM STATUS OF VIDEO
            if(_sVideoStatus == "Playing") {
                oPlayImage.Opacity = 0;
                oPauseImage.Opacity = 1;
            }else {
                 oPlayImage.Opacity = 1;
                oPauseImage.Opacity = 0;
            }
        }
    }
    
    //******************************
    //  VIDEO LENGTH
    //******************************
    function videoDuration() {
       var oVideoClass = _oScope.videoClass(); 
       oVideoClass.onVideoDuration = function(sDuration) {
         var sDurationRound = Math.round(sDuration);
         _nVideoDuration = sDurationRound;
         }
     }
     
     function videoPosition() {
       var oVideoClass = _oScope.videoClass(); 
       var oVideoElement = _oScope.videoClass().videoElement();
       var oDuration =  _oScope.navElements().duration;
       
       
       oVideoClass.onPositionChange = function(sPosition) {
         var sPositionRound = Math.round(sPosition*10)/10;
         var sVidDuration =  _nVideoDuration.toString();
         
         _nVideoPosition = sPositionRound;
        
         if(oVideoElement.CurrentState == "Buffering") {
//              oDuration.Text =  oVideoElement.CurrentState;
         }else {
//             oDuration.Text = sPositionRound.toString() + " / " + sVidDuration;
         }
         
         //REFRESH PROGRESS BAR 
         if(_oScope.isProgressBar() == true) {
            updateProgressBar();
         }
         
         
         
         checkCurrentVolume();
       
       }
     }
     
     //***************************
     // PROGRESS BAR 
     //***************************
     function updateProgressBar() {
        var oTarget = _oScope.navElements().progressBar; 
        var oBarLength = _oScope.navElements().progressBase;
        var nBarTotalLength = oBarLength.Width;
        
        //CONVERT TO PERCENT
        var nDuratPercent = _nVideoPosition / _nVideoDuration * 100;
        var nDuratPercentRound = Math.round(nDuratPercent*100)/100;
        
        //REVERT FROM PERCENT TO BAR LENGTH
        var nBarPos = nDuratPercentRound / 100 * nBarTotalLength;
        var nBarPosRound = Math.round(nBarPos*100)/100;
        
        oTarget.Width = nBarPosRound; 
     }

    //****************************
    //  PUBLIC
    //****************************
    
    this.intitate = function() {
        fullScreenButton();
        
        //REFRESH PROGRESS BAR 
         if(_oScope.isProgressBar() == true) {
             playPauseButton();
         }
         
        volumeButton();
        generalVideoStatus();
        videoDuration();
        videoPosition();
        checkFullScreen();
    }
}

