﻿/*
Functionality for the embedded youTube players
*/
(function()
{
	var playerHoldDiv;
	var _videoId;
    
	jQuery.fn.ytPlayer = function(videoId)
	{
	    if(typeof(videoId) == "undefined")
	    {
	        _videoId = false;
	    }
	    else
	    {
        	_videoId = videoId;
        }
	
		return this.each(function()
		{
			playerHoldDiv = jQuery(this);
		
			var playerDiv = jQuery(this).find(".playerDiv")
			
			if(playerDiv.attr("id") == "")
			{
				var i = 0;
			
				while(jQuery("#ytPlayer" + i).size())
				{
					i++;
				}
			
				playerDiv.attr("id", "ytPlayer" + i);
			}
		
		    var playerDivLink = playerDiv.find("a");
		
		    if(!playerDivLink.size())
		    {
		        playerDivLink = playerDiv;
		    }
		    
		    // originally pointed to a.ytPlay but IE didn't like this
			playerDivLink.add(playerHoldDiv.find("a")).click(function(evt)
			{   
			    // should things fail this is a useful function to include as a call back
			    function outputStatus(e) {
			        alert("e.success = " + e.success +"\ne.id = "+ e.id +"\ne.ref = "+ e.ref);
			    }
				evt.preventDefault();
				var id = playerDiv.attr("id");
				var playerURL = "http://www.youtube.com/apiplayer?enablejsapi=1&playerapiid=";
				var params = {
				    allowScriptAccess: "always",
				    bgcolor: "#cccccc",
				    wmode: "transparent"};    
				var atts = {
				    id: id};
				swfobject.embedSWF(
					(playerURL + id),
					id,
					playerDiv.width(),
					playerDiv.height(),
					"8", null, null, params, atts);
				
				/* 
				    this line fixes ie bug where videos don't play due to the whole page being inside a .NET form
				    (http://kb2.adobe.com/cps/400/kb400730.html)
				*/
                window[id] = document.forms[0][id];
			})
		});
	};

	window.onYouTubePlayerReady = function(playerid) {
	
		var ytplayer = jQuery("#" + playerid);

		var videoLength = 0;
		var currSecs = 0;

		window.setInterval(function()
		{
		    try {
		    
		        var bLoaded = ytplayer[0].getVideoBytesLoaded();
		        var bTotal = ytplayer[0].getVideoBytesTotal();
                var startBytes = ytplayer[0].getVideoStartBytes();
    		
		        videoLength = ytplayer[0].getDuration();
		        currSecs = ytplayer[0].getCurrentTime();
    		    
	            var percentProgress = (currSecs / videoLength) * 100;
    	
		        var vol = ytplayer[0].getVolume();
    		    
		        ytplayer.parents("div.ytPlayer").find("div.progressBar div").css("width", percentProgress + "%");
		    
		    } catch (Error) {
                
		    }
		    
		}, 250);
		

		ytplayer[0].addEventListener("onStateChange", '(function(state) { return playerState(state, "' + playerid + '"); })');
		ytplayer[0].addEventListener("onError", "onPlayerError");

        var playerHoldDiv = ytplayer.parents("div.ytPlayer");

        ytplayer.parent().add(playerHoldDiv.find("div.overlayControls")).mouseover(function()
        {
            playerHoldDiv.find("div.overlayControls").show();
        });
        
        ytplayer.parent().add(playerHoldDiv.find("div.overlayControls")).mouseout(function()
        {
            playerHoldDiv.find("div.overlayControls").hide();
        });

        var video_to_play = _videoId;

        if(!video_to_play)
        {
            // hidden input taken from the mark-up and .net control
            video_to_play = playerHoldDiv.find("input").val();
        }

		ytplayer[0].loadVideoById(video_to_play, 0);
		
		// unbind the vid loader before binding over it 
		playerHoldDiv.find(".ytPlay").unbind();
		
		playerHoldDiv.find(".ytPlay, div.overlayControls a.play").click(function(evt)
		{
			evt.preventDefault();
			
			if(ytplayer[0].getPlayerState() == 1)
			{
				ytplayer[0].pauseVideo();
			}
			else
			{
			    ytplayer[0].playVideo();
			}
		});

        var volControl = playerHoldDiv.find(".ytVolume");

        volControl.click(function()
        {
            if(ytplayer[0].isMuted())
            {
                ytplayer[0].unMute();
                volControl.removeClass("mute");
            }
            else
            {
                ytplayer[0].mute();
                volControl.addClass("mute");
            }
        });
	
	
		playerHoldDiv.find(".progressBar").click(function(evt)
		{
			evt.preventDefault();
			
			var pBar = jQuery(this);
			var offet = evt.pageX - pBar.offset().left;
    		var percentSeekTo = (offet / pBar.width());
			var seekSecs = percentSeekTo * videoLength;
			
			ytplayer[0].seekTo(seekSecs, true);
		});		
		
	}

	window.playerState = function(newState, playerid)
	{
		if(newState === 1)
		{
		    jQuery("#" + playerid).parents("div.ytPlayer").find("a.ytPlay, div.overlayControls a.play").addClass("playing");
		}
		else
		{
		    jQuery("#" + playerid).parents("div.ytPlayer").find("a.ytPlay, div.overlayControls a.play").removeClass("playing");
		}
	}
    
    // attached to window so that we can call it when closing lightBoxes
    window.stopAllVideos = function()
    {
        var playingVideos = jQuery(".ytPlayer");       

        jQuery.each(playingVideos, function(i, val) {                        

            try {    
                //console.log(i, jQuery("#ytPlayer" + i)[0].getPlayerState());        
                jQuery("#ytPlayer" + i)[0].pauseVideo();
                jQuery("#ytPlayer" + i)[0].seekTo(0, false);    
                //console.log(i, jQuery("#ytPlayer" + i)[0].getPlayerState());         
            } catch (Error) {}
        });
    }
    
	function onPlayerError(errorCode) {
		alert("An error occured: " + errorCode);
	}

	function fomatSeconds(secs)
	{
		var mins = Math.floor(secs / 60);
		
		var secs = Math.floor(((secs / 60) - mins) * 60);
		
		if((mins + "").split("").length == 1)
			mins = "0" + mins;
			
		if((secs + "").split("").length == 1)
			secs = "0" + secs;
		
		return mins + ":" + secs;
	}

})();
