/* yt api/slide interface.
   @requires: jquery.
*/

// override in template
// override to get widget domain from template
var getWidgetDomain = function(){};
// override for load event in template
var videoInit = function(){};
// override to performs actual forward
var videoForward = function(){};
// override for post play events in template
var _videoPlay = function(){};
// override for flash debug writer/partner page
var flash_debug_writer = function(){};

// template overrides for local player state
var _ytDefaults = {
	'is_active': false,  				// used for logging
	'video_play_callback': _videoPlay	// used for post play actions
};

// lookup table of player_ids and video play lists
var gPlayerMap = {};

var getVideoPlayer = function(id){
	return $('#' + id)[0];
};

var getPlayList = function(player_id){
	return gPlayerMap[player_id].videos;
};

var getNextVideo = function(player_id, video_id){
	var video;
	var VideoPlayList = getPlayList(player_id);
	if (video_id){
		for (var i=0; i< VideoPlayList.length; i++){
			if (VideoPlayList[i].video_id == video_id){
				video = VideoPlayList[i+1];
				break;
			}
		}		
	}
	if (!video){
		video = VideoPlayList[0];
	}

	return video;
};

var videoPlay = function(params, callback){
	var is_active = params.is_active || false;
	var ad = params.ad || {};
	var is_as3 = params.is_as3 || false;
	var is_expired = params.is_expired || false;
	var channel_id = params.channel_id || 0;
	var publisher_id = params.publisher_id || 0;
	var category_id = params.category_id || 0;
	var player_url = params.player_url || 'http://www.youtube.com/apiplayer';
	var player = getVideoPlayer(params.player_id);
	var _params = {
		'video_id': params.video_id,
		'adapter_path': params.adapter_path,
		'postroll_url': params.postroll_url,
		'channel_id': channel_id,
		'category_id': category_id,
		'publisher_id': publisher_id, 	
		'player_url': player_url,
		'is_active': is_active,
		'is_expired': is_expired,
		'pingback': params.pingback,
		'is_as3': is_as3,
		'ad': ad};
	$(player).ready(function(){
		player.video_play(_params);
	});
	if (callback){
		callback(params.player_id, params.video_id);
	}
};

var onYTPlayerStateChange = function(state, player_id, current_video_id){
	switch(state){
		case 'loaded':
			// play the preroll
			//videoInit(player_id, current_video_id);
			//videoPlay(player_id, "preroll");
			//break;
			
			// don't play preroll
			videoInit(player_id, current_video_id);
			var next_video = getNextVideo(player_id);
			videoPlay({
				'player_id': player_id,
				'video_id': next_video.video_id,
				'channel_id': next_video.channel_id,
				'category_id': next_video.category_id,
				'publisher_id': next_video.publisher_id,
				'player_url': next_video.player_url,
				'adapter_path': next_video.adapter_path,
				'is_expired': next_video.is_expired,
				'is_active': _ytDefaults.is_active,
				'pingback': next_video.pingback,
				'is_as3': next_video.is_as3,
				'ad': next_video.ad},
				_ytDefaults.video_play_callback);
			break;
	}
	return false;
};

var loadPlayerMap = function(player_id, videos){
	gPlayerMap[player_id] = {'videos': videos};
};

var videoForwardFinished = function(player_id, current_video_id){
	var next_video = getNextVideo(player_id, current_video_id);
	videoPlay({
		'player_id':player_id,
		'video_id': next_video.video_id,
		'channel_id':next_video.channel_id,
		'category_id': next_video.category_id,
		'publisher_id': next_video.publisher_id,
		'player_url': next_video.player_url,
		'adapter_path': next_video.adapter_path,
		'is_expired': next_video.is_expired,
		'is_active': false,
		'pingback': next_video.pingback,
		'is_as3': next_video.is_as3,
		'ad': next_video.ad},
		_ytDefaults.video_play_callback);
};

var videoDestroy = function(player_id){
	var player = getVideoPlayer(player_id);
	if(player){
		player.destroy();
	}
};

var videoStatus = function(player_id){
	var player = getVideoPlayer(player_id);
	var result = {};
	if(player && player.video_status){
		result = player.video_status();
	}
	return result;
};


