if(typeof NICK == "undefined" || !NICK) var NICK = {};

NICK.namespace("playlistManager");
NICK.playlistManager.playlist = new Array();
NICK.playlistManager.index = 0;
NICK.playlistManager.playerState;
NICK.playlistManager.isFull="false";
NICK.playlistManager.isEpisodePlaylis="false";
NICK.playlistManager.isWebisode="false";

$(document).ready(function() {
	$(document).bind("PlayerEvent.ON_READY", NICK.playlistManager.showSelected );
	$(document).bind("PlayerEvent.ON_MEDIA_ENDED", NICK.playlistManager.showNext);
	$(document).bind("PlayerEvent.ON_PLAYLIST_COMPLETE", NICK.playlistManager.playNext);
	NICK.playlistManager.init();
});

NICK.playlistManager.init = function() {
	//NICK.utils.doLog("playlist length:" + (NICK.playlistManager.playlist).length);
	
	if (NICK.playlistManager.playerState == "playlist") {
		NICK.playlistManager.changeInfo(NICK.playlistManager.index);
	}
};

NICK.playlistManager.initVideoByIndex = function(index){
	NICK.playlistManager.index = index;
	//NICK.playlistManager.showSelected();
}

NICK.playlistManager.showSelected = function(){	
	if(NICK.playlistManager.isWebisode && NICK.playlistManager.isLastWebisode(0)){
		return;
	}
	if (NICK.playlistManager.playerState == "playlist") {
		
		$("#tabs-tabs-1 li")
		.removeClass("selected")
		.removeClass("next")
		.find(".next")
		.remove();		
		
		var playnow = NICK.playlistManager.index % (NICK.playlistManager.playlist).length;
		var playnext = (NICK.playlistManager.index + 1) % (NICK.playlistManager.playlist).length;
		$("#tabs-tabs-1 li:eq(" + playnow + ")").addClass("selected");
		NickLog.debug("showSelected: "+NICK.playlistManager.index+" | "+playnow+" | "+playnext);
		
		$("#tabs-tabs-1 li")
		.eq(playnext)
		.addClass("next")
		.find("a:first")
		.append("<div class='next'></div>");		
		
	}else{
		var playnext = NICK.playlistManager.index % (NICK.playlistManager.playlist).length;
		
		//temp until cs is running on other sites.
		if ((KIDS.get("site") == "Nick") || (KIDS.get("site") == "Nicktoons")) {
			$("#video_detail_video ul.cs-double-high-item li")
			.eq(0)
			.addClass("next")
			.find("a:first")
			.append("<div class='next'></div>");				
		} else {
			$("#tabs-tabs-1 li")
			.eq(playnext)
			.addClass("next")
			.find("a:first")
			.append("<div class='next'></div>");			
		}

	}


};



NICK.playlistManager.showNext = function(){
	if(NICK.playlistManager.playerState == "playlist"){
		if (NICK.playlistManager.isEpisodePlaylist == "true") {
			//skip media ended event, only use playlist end here for episode playlists
		} else {
			//alert(cpPlayer + " isAd:" + cpPlayer.currentMetadata.isAd + " isBumper:" + cpPlayer.currentMetadata.isBumper);
			if (cpPlayer && !cpPlayer.currentMetadata.isBumper && !cpPlayer.currentMetadata.isAd) {
				NICK.utils.doLog("PlaylistManager: play next in the Playlist");
				NICK.playlistManager.index++;
				NICK.playlistManager.showSelected();
				NICK.playlistManager.changeInfo(NICK.playlistManager.index);
				if(NICK.playlistManager.isWebisode){
					NICK.playlistManager.updateWebisodeInfo();
				}
				/*$("#carousel-container-related1 .idx"+NICK.playlistManager.index).click();
				$(".info-list dd").eq(0).html(NICK.playlistManager.playlist[NICK.playlistManager.index].shortTitle);
				$(".info-list dd").eq(1).html(NICK.playlistManager.playlist[NICK.playlistManager.index].description)*/				
			}

		}
	}
};

NICK.playlistManager.playNext = function(){
	if (NICK.playlistManager.playerState == "CLIP") {		
		window.location = "/videos/clip/"+(NICK.playlistManager).playlist[NICK.playlistManager.index].urlAlias+".html";
		NICK.playlistManager.index++;
	} else {
		if (NICK.playlistManager.isEpisodePlaylist == "true") {
			NICK.utils.doLog("PlaylistManager: full episode has finished in an episode playlist, play next episode");		
			//are we at the last item?
			if (NICK.playlistManager.index == NICK.playlistManager.playlist.length-1) {
				var nextEpisode = NICK.playlistManager.playlist[0]["cmsid"];
				var episodeUri = "mgid:cms:episode:" + NICK.playlistManager.playerDomain + ".com:" + nextEpisode;
				NICK.playlistManager.playUri(episodeUri, 0);					
			} else {
				var nextEpisode = NICK.playlistManager.playlist[NICK.playlistManager.index+1]["cmsid"];
				var episodeUri = "mgid:cms:episode:" + NICK.playlistManager.playerDomain + ".com:" + nextEpisode;
				NICK.playlistManager.playUri(episodeUri, NICK.playlistManager.index+1);					
			}	
		} else {
			
		}
	}

}

NICK.playlistManager.playIndex = function(index){
	//player.playIndex(index);
	if(NICK.playlistManager.index != index || null === cpPlayer.state){
		cpPlayer.playIndex(index);
	
		NICK.playlistManager.index = index;
		NICK.playlistManager.showSelected();
		if(NICK.playlistManager.isWebisode){
			NICK.playlistManager.updateWebisodeInfo();
		}else{
			NICK.playlistManager.changeInfo(NICK.playlistManager.index);
		}
	}
};
	
NICK.playlistManager.changeInfo = function(index){
	var pos = index < NICK.playlistManager.playlist.length - 2 ? index : index - 2 ;
	$("#carousel-container-related1 .idx"+pos).click();
	
	if (NICK.playlistManager.playlist[index] != undefined) {
		var tags = NICK.playlistManager.parseTags(NICK.playlistManager.playlist[index].tags);
		$('div#description h2').html(NICK.playlistManager.playlist[index].shortTitle);
		$('#tray #description .brief p, #tray #description .full p').html(NICK.playlistManager.playlist[index].description);

		// updates total views 
		NICK.imx.getReport(NICK.playlistManager.playlist[index].cmsid, 'video', "#total-plays","#rating-count");
		
		if(!$('dt.tag-list-title').html()){
			NICK.utils.doLog('Playlist-Manager: appending tag section.');
			NICK.playlistManager.addTagsSection();
		}
		$('dt.tag-list-title').parent('dl').css('display', ((''!=tags)?'block':'none'));
		$('dd.tag-list-details').empty().html(tags)		
	}
	
};
NICK.playlistManager.addTagsSection = function () {
	var dl = $('<dl/>').prependTo($('div.tray-full-info'));
	var dd = $('<dt class="tag-list-title">Tags:</dt>').appendTo(dl);
	var dt = $('<dd class="tag-list-details" />').appendTo(dl);
};

NICK.playlistManager.parseTags = function (tagsArray){
	if('' == tagsArray){
		return tagsArray;
	}
	var tagsArray = tagsArray.split(', ');
	var len = tagsArray.length;
	var tags = [];
	for(var i = 0; i < len; i++){
		tags.push('<a href="/tags/' + escape(tagsArray[i]) + '" class="color-dark-link text-noline">' + tagsArray[i] + '</a>');
	}
	return tags.join(', ');
};

$(document).bind("carousel-ready",function(){
	var pos = NICK.playlistManager.index < NICK.playlistManager.playlist.length - 2 ? NICK.playlistManager.index : NICK.playlistManager.index - 2 ;
	$("#carousel-container-related1 .idx"+pos).click();	
});

NICK.playlistManager.playUri = function(uri, index){
	cpPlayer.playURI(uri);
	NICK.playlistManager.index = index;
	NICK.playlistManager.showSelected();
	NICK.playlistManager.changeInfo(NICK.playlistManager.index);
};

NICK.playlistManager.updateWebisodeInfo = function (){
	if(!NICK.playlistManager.isLastWebisode(0)){
		NICK.utils.doLog('playlistManager: Item #' + NICK.playlistManager.index + ' | last webisdoe: ' + NICK.playlistManager.isLastWebisode(0));
		var episode = NICK.playlistManager.playlist[NICK.playlistManager.index];
		var lengthLimit = 91;
		if(episode.description.length > lengthLimit){
			var epDesc = episode.description.substr(0,lengthLimit) + '...';
		}else{
			var epDesc = episode.description;
		}
		$('.episode-description').html(epDesc);
		$('.episode-title').html(episode.shortTitle);
		$('.episode-current').html(NICK.playlistManager.index+1);
		if(NICK.playlistManager.isLastWebisode(1)){
			$('#ws-next-episode').hide();
		} else {
			$('#ws-next-episode').show();
		}
	}
		
}
NICK.playlistManager.isLastWebisode = function (offset) {
	offset = (offset != 0) ? offset : 0; 
	return (!$('div.webseries-grid ul li').eq(NICK.playlistManager.index + offset).find('a.not-clickable').length == 0);
}

