if (!window.PlayerMessenger) {
    window.PlayerMessenger = {};
}

var index = 0;

PlayerMessenger.IsLoaded = false;

PlayerMessenger.Messenger = null;

PlayerMessenger.CurrentPlayCommand = null;

PlayerMessenger.Parameter = {};

PlayerMessenger.PlayVideo = function(path, volume, isLive) {
    var isMuted = false;

    var hasLastValue = true;

    if (PlayerMessenger.CurrentPlayCommand) {
        isMuted = PlayerMessenger.CurrentPlayCommand.IsMuted;
        if(volume== null || volume<=0)
        {
           volume = PlayerMessenger.CurrentPlayCommand.Volume;
        }
        if (PlayerMessenger.CurrentPlayCommand.IsOpened) {
            PlayerMessenger.CurrentPlayCommand.Dispose();
        }
    }
    else {
        hasLastValue = false;
    }

    if (PlayerMessenger.Messenger) {
        PlayerMessenger.CurrentPlayCommand = PlayerMessenger.Messenger.GetCommand();
        PlayerMessenger.AttachCurrentPlayCommand();
    }

    if (PlayerMessenger.CurrentPlayCommand) {
        if (!hasLastValue) {
            if (PlayerMessenger.Parameter.DisableBalance)
            {
               PlayerMessenger.CurrentPlayCommand.DisableBalance = PlayerMessenger.Parameter.DisableBalance;
            }

            if (PlayerMessenger.Parameter.AudioIndex != null) {
                PlayerMessenger.CurrentPlayCommand.SwitchAudio(PlayerMessenger.Parameter.AudioIndex);
            }

            if (PlayerMessenger.Parameter.NextEnable != null  && PlayerMessenger.Parameter.PreviousEnable != null) {
                PlayerMessenger.CurrentPlayCommand.UpdatePreviousNext(PlayerMessenger.Parameter.PreviousEnable, PlayerMessenger.Parameter.NextEnable);
            }

            if (PlayerMessenger.Parameter.IsShareEnable != null) {
                PlayerMessenger.CurrentPlayCommand.IsShareEnable = PlayerMessenger.Parameter.IsShareEnable;
            }
            
            if ((volume == null || volume <= 0) && PlayerMessenger.Parameter.Volume != null) {
                volume = PlayerMessenger.Parameter.Volume;
            }
            
            if (PlayerMessenger.Parameter.IsMuted != null) {
                isMuted = PlayerMessenger.Parameter.IsMuted;
            }
        }

        PlayerMessenger.CurrentPlayCommand.Url = path;
        if (isLive != null) {
            PlayerMessenger.CurrentPlayCommand.IsLive = isLive;
        }

        if (volume != null) {            
            PlayerMessenger.CurrentPlayCommand.SetVolume(volume, isMuted);
        }

        if (PlayerMessenger.IsLoaded) {
            PlayerMessenger.PlayProgram();
        }
    }
}

PlayerMessenger.PlayProgram = function() {
    if (PlayerMessenger.IsLoaded && PlayerMessenger.Messenger && PlayerMessenger.CurrentPlayCommand) {
        PlayerMessenger.Messenger.PlayProgram(PlayerMessenger.CurrentPlayCommand);
    }
}

PlayerMessenger.IsPlugInLoad = function(sender, args) {
    index++; 
    var sl = document.getElementById("iptvslembed");
    if (sl && sl.Content) {
        PlayerMessenger.Messenger = sl.Content.Messenger;
        PlayerMessenger.AttachMessengerEvent();
        if (PlayerMessenger.Messenger && PlayerMessenger.Messenger.IsLoaded) {
            PlayerMessenger.Loaded();
        }
    }
}

PlayerMessenger.AttachMessengerEvent = function() {
    if (PlayerMessenger.Messenger != null) {
        PlayerMessenger.Messenger.Loaded = PlayerMessenger.Loaded;
    }
}

PlayerMessenger.Loaded = function(sender, args) {  
    if (PlayerMessenger.IsLoaded) {
        return;
    }
      
    PlayerMessenger.IsLoaded = true;
    if (!PlayerMessenger.Messenger) {
        return;
    }
    
    PlayerMessenger.PlayProgram();
}

PlayerMessenger.AttachCurrentPlayCommand = function() {
    if (PlayerMessenger.CurrentPlayCommand != null) {
        PlayerMessenger.CurrentPlayCommand.MediaOpen = PlayerMessenger.OnMediaOpen;
        PlayerMessenger.CurrentPlayCommand.MediaFailed = PlayerMessenger.OnMediaFailed;
        PlayerMessenger.CurrentPlayCommand.MediaEnded = PlayerMessenger.OnMediaEnded;
        PlayerMessenger.CurrentPlayCommand.MediaDuration = PlayerMessenger.OnMediaDuration;
        PlayerMessenger.CurrentPlayCommand.Previous = PlayerMessenger.OnPrevious;
        PlayerMessenger.CurrentPlayCommand.Next = PlayerMessenger.OnNext;
        PlayerMessenger.CurrentPlayCommand.MediaHalf = PlayerMessenger.OnHalf;
        PlayerMessenger.CurrentPlayCommand.FullScreen = PlayerMessenger.OnFullScreen;
        PlayerMessenger.CurrentPlayCommand.AskShare = PlayerMessenger.OnAskShare;
        PlayerMessenger.CurrentPlayCommand.VolumeChanged = PlayerMessenger.OnVolumeChanged;
        //PlayerMessenger.CurrentPlayCommand.OnSNS = PlayerMessenger.OnSNS;
    }
}

/// video start
PlayerMessenger.OnMediaOpen = function(sender, args) {
    slCallback("videostart", args.Length);
}

PlayerMessenger.OnMediaFailed = function(sender, args) {
}

/// video duration
PlayerMessenger.OnMediaDuration = function(sender, args) {
    slCallback("videoduration", args.Parameter);
}


/// half
PlayerMessenger.OnHalf = function(sender, args) {
     slCallback("half");
}

/// video complete
PlayerMessenger.OnMediaEnded = function(sender, args) {
     slCallback("videocomplete");
}

/// previous program
PlayerMessenger.OnPrevious = function(sender, args) {
     slCallback("prev");
}

/// next program
PlayerMessenger.OnNext = function(sender, args) {
     slCallback("next");
}

PlayerMessenger.OnFullScreen = function(sender, args) {
}

/// share
PlayerMessenger.OnAskShare = function(sender, args) {
    slCallback("shareshow");
}

/// volume change
PlayerMessenger.OnVolumeChanged = function(sender, args) {
    slCallback("volumechange", args.Volume, args.IsMuted);
}

/// SNS
PlayerMessenger.OnSNS = function(sender, args) {
    slCallback("SNS", args.Parameter);
}

PlayerMessenger.Stop = function() {
    if (PlayerMessenger.CurrentPlayCommand) {
        PlayerMessenger.CurrentPlayCommand.Stop();
    }
}

PlayerMessenger.Pause = function() {
    if (PlayerMessenger.CurrentPlayCommand) {
        PlayerMessenger.CurrentPlayCommand.Pause();
    }
}

PlayerMessenger.Play = function() {
    if (PlayerMessenger.CurrentPlayCommand) {
        PlayerMessenger.CurrentPlayCommand.Play();
    }
}

PlayerMessenger.SetVolume = function(volume, isMuted) {
    if (PlayerMessenger.CurrentPlayCommand) {
        PlayerMessenger.CurrentPlayCommand.SetVolume(volume, isMuted);
    }
    else {
        PlayerMessenger.Parameter.Volume = volume;
        PlayerMessenger.Parameter.IsMuted = isMuted;
    }
}

PlayerMessenger.GetVolume = function() {
    var result = {};

    if (PlayerMessenger.CurrentPlayCommand) {
        result.volume = PlayerMessenger.CurrentPlayCommand.Volume;
        result.ismute = PlayerMessenger.CurrentPlayCommand.IsMuted;
    }

    return result;
}

PlayerMessenger.UpdateShare = function(value) {
    if (PlayerMessenger.CurrentPlayCommand) {
        PlayerMessenger.CurrentPlayCommand.IsShareEnable = value;
    }
    else {
        PlayerMessenger.Parameter.IsShareEnable = value;
    }
}

PlayerMessenger.UpdatePrevNext = function(previous, next) {
    if (PlayerMessenger.CurrentPlayCommand) {
        PlayerMessenger.CurrentPlayCommand.UpdatePreviousNext(previous, next);
    }

    else {
        PlayerMessenger.Parameter.PreviousEnable = previous;
        PlayerMessenger.Parameter.NextEnable = next;
    }
}

PlayerMessenger.SwitchAudio = function(value, disableBalance) {
	disableBalance = disableBalance ? true : false;
    if (PlayerMessenger.CurrentPlayCommand) {

        PlayerMessenger.CurrentPlayCommand.DisableBalance = disableBalance;
      
        PlayerMessenger.CurrentPlayCommand.SwitchAudio(value);
    }
    else {
   
        PlayerMessenger.Parameter.DisableBalance = disableBalance;
        
        PlayerMessenger.Parameter.AudioIndex = value;
    }
}

PlayerMessenger.Replay = function()
{
    if (PlayerMessenger.CurrentPlayCommand) {
        PlayerMessenger.CurrentPlayCommand.Replay();
    }
}
