//To be able to use Mootools on the same page
jQuery.noConflict();

var VideoTracker = {
	debugMode		: 	true,		//change this to false to behave like production
	startTimestamp	:	'',			//in Milliseconds
	//currentTimestamp:	'',			//in Milliseconds
	beingRequested	:	false,		
	watchingInterval: 	60*1000,	//1 minute
	intervalID		: 	'',
	serverUrl		: 	'http://members.portaleducation.com',
	trackingPath	: 	'/users/watching_video/?ext=jsonp&jsoncallback=?&user_id={userID}&video_id={videoID}&&auth_token={authToken}&wd={watchedDuration}&watching_token={watchingToken}&',
	fullUrl			:	'',
	userID			: 	'',
	videoID			:	'',
	authToken		: 	'',	
	watchingToken	:	'',


	//Livestream player
	lsPlayer :	{
		channel_name: '',
		player:	'',
		
		play: function(){
			this.player.startPlayback();
			VideoTracker.startTracking();
		},
		pause: function(){
			this.player.stopPlayback();
			VideoTracker.stopTracking();
		},
		volumeUp: function(){
			this.player.volumeUp();
		},
		volumeDown: function(){
			this.player.volumeDown();
		}
		
	},
	
	
	startTracking:function(bcArg){
	
		//Setup
		this.setup(bcArg);
		
		//clear previous interval if any
		if (this.intervalID != ''){
			this.stopTracking();
		}

		//Start to track
		this.getNewToken();

		//Start new timestamp
		this.generateStartTimestamp();		
		
		//set interval to track the waching session
		jQuery('#status').text('start and track');
		
		//this.intervalID = setInterval("VideoTracker.watchVideo()", this.watchingInterval);
		this.intervalID = setInterval(function(){VideoTracker.watchVideo();}, this.watchingInterval);
	},
	
	stopTracking:function(){
		
		//Record the current watching records before stoping 
		this.watchVideo();
		
		this.clearToken();
		this.clearTimestamp();
		this.clearInterval();
	},
	
	setup: function(bcArg){
		
		//check debug mode
		if ( (document.location.host.indexOf('.loc') >= 0) || (document.location.host.indexOf('.dev.extro.com.au') >= 0)){
			//set new tracking interval
			if (this.debugMode){
				this.watchingInterval = 10*1000; //10 seconds
			}
		}
		if (document.location.host.indexOf('.loc') >= 0){
			this.serverUrl = 'http://members.portaleducation.loc';
		}
		
		if (document.location.host.indexOf('.dev.extro.com.au') >= 0){
			this.serverUrl = 'http://members.portaleducation.dev.extro.com.au';
		}
		
		//set user ID, to be populated from WP
		//this.userID = 1057;
		this.userID = jQuery('#tracking_details .user_id').text();		
		
		//get playing video id
		if( typeof bcArg != "undefined" ){
			this.videoID = bcArg.media.id;
		}else{
			if (VideoTracker.lsPlayer.channel_name.length > 0){
				this.videoID = VideoTracker.lsPlayer.channel_name;
			}
		}
	},
	
	getActualRequestParams: function(){
		var tmpUrl = this.trackingPath;
		
		this.userID 	= jQuery('#tracking_details .user_id').text();
		this.authToken 	= jQuery('#tracking_details .auth_token').text();
		
		tmpUrl = tmpUrl.replace('{userID}', this.userID);
		tmpUrl = tmpUrl.replace('{videoID}', this.videoID);
		tmpUrl = tmpUrl.replace('{watchedDuration}', this.getDurationSinceStart());
		tmpUrl = tmpUrl.replace('{authToken}', this.authToken);
		tmpUrl = tmpUrl.replace('{watchingToken}', this.watchingToken);
		
		return tmpUrl;
	},
		
	watchVideo: function(){
		
			if (this.beingRequested == false){

				this.beingRequested = true;
				
				//get full tracking url
				this.fullUrl = this.serverUrl + this.getActualRequestParams() // + this.userID;
				//console.log(this.fullUrl);
				//tracking request
				
				var self = this;
				
				jQuery.ajax(
					{
						url: this.fullUrl,
						//type: 'GET',
						dataType: 'jsonp',
						cache:false,
						success: function(data){
							//end request
							self.beingRequested = false;
						},
						error: function(){
							self.beingRequested = false;
						}
					}
				);

			}
	},
	
	getDurationSinceStart: function(){
		var startTimestamp = this.getStartTimestamp();
		var currentTimestamp = this.getCurrentTimestamp();
				
		//Calculate duration
		this.watchedDuration = Math.abs(currentTimestamp - startTimestamp);
		
		return this.watchedDuration;
	},
	
	generateStartTimestamp: function(){
		this.startTimestamp = this.getCurrentTimestamp();
	},
	
	getStartTimestamp: function(){
		return this.startTimestamp;
	},
	
	getCurrentTimestamp: function(){
		var tmp = new Date();
		return tmp.getTime();
	},
		
	clearTimestamp: function(){
		this.startTimestamp ='';
	},	
	
	getNewToken: function(){
		var tmp = new Date();
		this.watchingToken = 'tkn' + tmp.getTime();
	},
	
	clearToken:function(){
		this.watchingToken = '';
	},
	
	clearInterval: function(){
		clearInterval(this.intervalID);
		this.intervalID = '';
	}
	
}

	/*------------------------------------------------------
	Start: Brightcove's Video tracking codes
	--------------------------------------------------------*/
		var bcExp;
		var modVP;
		var modExp;
		var modCon;
		var epID;
		
		/*
			It's called when template loads, this function stores a reference to the player and modules.
		*/
		function onTemplateLoaded(experienceID) {
			bcExp = brightcove.getExperience(experienceID);
			modVP = bcExp.getModule(APIModules.VIDEO_PLAYER);
			

			modVP.addEventListener(BCMediaEvent.PLAY, PlayEventHandler);
			modVP.addEventListener(BCMediaEvent.STOP, StopEventHandler);


			/*modVP.addEventListener(BCMediaEvent.PROGRESS, onMediaEvent);*/
			//modVP.addEventListener(BCMediaEvent.BEGIN, beginX); 
			//modVP.addEventListener(BCMediaEvent.BUFFER_BEGIN, alertEvent);
			//modVP.addEventListener(BCMediaEvent.BUFFER_COMPLETE, alertEvent);
			//modVP.addEventListener(BCMediaEvent.CHANGE, alertEvent);
			//modVP.addEventListener(BCMediaEvent.COMPLETE, alertEvent);
			//modVP.addEventListener(BCMediaEvent.ERROR, alertEvent);
			//modVP.addEventListener(BCMediaEvent.MUTE_CHANGE, alertEvent);
			//modVP.addEventListener(BCMediaEvent.SEEK, alertEvent);
			//modVP.addEventListener(BCMediaEvent.VOLUME_CHANGE, alertEvent);
		}
									
		function PlayEventHandler(bcArg){
			VideoTracker.startTracking(bcArg);
		}
		
		function StopEventHandler(e){
			VideoTracker.stopTracking();
		}
	/*------------------------------------------------------
	End: Brightcove's Video tracking codes
	--------------------------------------------------------*/


	
	/*------------------------------------------------------
	Start: Livestream's Video tracking codes
	--------------------------------------------------------*/

		/*
			Setup a player and call livestreamPlayerCallback() when player is ready
		*/
		jQuery(document).ready(function(){	
			if ( (jQuery('#height').length > 0) && (jQuery('#width').length >= 0) ) {

				//Prepare settings for video player
				params = { AllowScriptAccess: 'always' };		
				var playerHeight = jQuery('#height').text(); 
				var playerWidth = jQuery('#width').text(); 
				
				//Load player object
				swfobject.embedSWF("http://cdn.livestream.com/chromelessPlayer/wrappers/JSPlayer.swf", "livestreamPlayer", 
						playerHeight.toString(), playerWidth.toString() , "9.0.0", "expressInstall.swf", null, params);
			}else{
				jQuery('#message').text("Invalid Html tags for a player");
			}
						
		});	
		
		
		/*
			Livestream player callback
		*/
		function livestreamPlayerCallback(event) {
				
			  if (event == 'ready') {
				
				//player pointer
				VideoTracker.lsPlayer.player = document.getElementById("livestreamPlayer"); 
				
				if (VideoTracker.lsPlayer.player != null){
					
					var $channelName = jQuery('#channel_name');
					
					if ($channelName.length > 0){
					
						VideoTracker.lsPlayer.channel_name = $channelName.text();
						//player.setDevKey('YOUR DEVKEY');
						//player.setChannel('proshowcase');	
						
						//Initiate a channel
						VideoTracker.lsPlayer.player.setChannel(VideoTracker.lsPlayer.channel_name);	
						
						//Assume that the player is ready for user interaction (play, pause, vol+, vol-)
					}else{
						alert("Can't load this channel");
					}
				}else{
					jQuery('#message').text("Invalid Html tags for a player");
				}
				
			  }
			  else if (event == 'disconnectionEvent') {
					//If event isn't live, it will disconnect and we should clear interval here
					VideoTracker.clearInterval();
			}

		}
		
	/*------------------------------------------------------
	End: Livestream's Video tracking codes
	--------------------------------------------------------*/
	
	
var Site = {

	fullBaseUrl: null,

	onReady: function() {

		// Set base path
		this.fullBaseUrl = document.location.protocol + '//' + document.location.host;

		for (var selector in this.elements) {
			var elms = jQuery(selector);

			if (elms.size() > 0) {
				this.elements[selector](elms);
			}
		}
	},

	
	elements:
	{

	}

}
	

		
/*------------------------------------------------------
Start: JQuery start function
--------------------------------------------------------*/



jQuery(document).ready(
	function() {
		Site.onReady();
	}
);

/*------------------------------------------------------
End: JQuery start function
--------------------------------------------------------*/