var playerType = "normal";
var topDepth = 1;
var scrollToReleaseID = null;
var animationGif = "plLoadingAnim.gif";

var playerDiv = "#playerFrame";

var cwpInitializing = true;
var akamaiRoot = "http://a123.g.akamai.net/f/123/41524/60m/webdata.globaltv.com/";


function refreshScrollbars(){
	$('#playlist').jScrollPane({scrollbarWidth:20,scrollbarMargin:3,dragMinHeight:30,showArrows:true,arrowSize:18, animateTo:true});
	if(scrollToReleaseID){
		if ($("#playlist")[0].scrollTo) $("#playlist")[0].scrollTo(scrollToReleaseID);
		scrollToReleaseID = null;
	}

}
function getCategories(){
	// start loading the categories, use the callback to render
	if (cwpManager.rootCats.length==0){
		$("#playlist").html("<div class='animFrame'><img src='/global/canwestPlayer/images/"+animationGif+"'/></div>");
		cwpManager.getCategories(function(){
			if (playerType=="normal"){
				// Create list for categories and ask the manager to render all of them
				cwpManager.renderCategories($("#menuScrollInternal"),topDepth,topDepth);
				// Hook up the scrolling for the category menu
				catScroll = new cwpCategoryScroller("#menuScrollContainer", "#menuScrollInternal", ".arrowLeft", ".arrowRight",75);
			}
			var qs = new cwpQS();
			if (qs.contains("releaseID")) focusOnTargetRelease("ID",qs.get("releaseID"));
			if (qs.contains("releaseid")) focusOnTargetRelease("ID",qs.get("releaseID"));
			else if (qs.contains("releasePID")) focusOnTargetRelease("PID",qs.get("releasePID"));
			else if (qs.contains("releasepid")) focusOnTargetRelease("PID",qs.get("releasePID"));
			else if (qs.contains("categoryID")) focusOnTargetCategory("ID",qs.get("categoryID"));
			else if (qs.contains("categoryid")) focusOnTargetCategory("ID",qs.get("categoryID"));
			else if (playerType=="relonly" || playerType=="notopmenu") cwpManager.rootCats[0].select();
			else if (playerType == "playeronly") cwpManager.rootCats[0].loadChildren();
			else{
				for (var i=0;i<cwpManager.rootCats[0].children.length;i++){
					if (cwpManager.rootCats[0].children[i].hasReleases){
						cwpManager.rootCats[0].children[i].select();
						break;
					}
				}
			}
		});
	}
}

function focusOnTargetRelease(key, id){
	cwpManager.fetchSingleRelease(key + "s",id,function(relExists){
		if (relExists){
			cwpManager.singleRelease.requestVideoPlay();
			// make this next line share code with the release select
			$("#currentReleaseFrame").html('<div class="pltitle">' + cwpManager.singleRelease.title + '</div>' + cwpManager.singleRelease.description);
			var cat = cwpManager.findFirstParentCategory(cwpManager.singleRelease);
			if (cat){
				var loadedCat = cat.loadChildrenAtDesiredDepth($("#playlist"),topDepth,function(targetCat){
					targetCat.select();
					var rel = cat.getRelease(key,id);
					if (rel) rel.selectWithParents(topDepth+1);
					scrollToReleaseID = "#rel"+rel.ID;
				});
				if (!loadedCat) logError("Could not load category corresponding to target release.");
			}
		}else
			$("#currentReleaseFrame").html("<div class='warningText'>!! Error Message !!</div><div>This video is no longer available</div>");
	});
}

function focusOnTargetCategory(key, id){
	var cat = cwpManager.getCategory(key, id);
	// If we find the category and it has releases, or we should show empty categories
	if (cat && cat.hasReleases || !cwpManager.hideEmptyCats){
		var loadedCat = cat.loadChildrenAtDesiredDepth($("#playlist"),topDepth,function(targetCat){
			targetCat.select();
			cat.selectWithParents(topDepth+1);
			scrollToReleaseID = "#cat"+cat.ID;
		});
		if (!loadedCat) logError("Could not load category corresponding to target release.");
	}else
		$("#currentReleaseFrame").html("<div class='warningText'>!! Error Message !!</div><div>This category is no longer available</div>");
}

function initializePlayerTemplate(data){
	if (data.playerType){
		playerType = data.playerType;
		if (playerType != "normal") topDepth = 0;
	}
	initData = {
		categoryFields:"title,fullTitle,thumbnailURL",
		releaseFields:"thumbnailURL,title,description",
		PID:data.PID,
		playerTag:data.playerTag,
		site:data.site,
		siteZone:data.siteZone,
		adParameters: data.adParameters,
		hideEmptyCats: data.hideEmptyCats,
		preloadFirstRelease: data.preloadFirstRelease
	};
	// initialize Canwest Player object
	cwpInitializeManager(initData);
	var autoplayTriggered = false;

	if (playerType != "playeronly" ){
		cwpManager.targetPlaylistContainer = $("#playlist");
		cwpManager.catSelect(topDepth,function(cat){
			if (!cat.releasesLoaded) cwpManager.targetPlaylistContainer.html("<div class='animFrame'><img src='/global/canwestPlayer/images/"+animationGif+"'/></div>");
			cat.loadChildren(function(){
				cat.showChildren(cwpManager.targetPlaylistContainer,topDepth+1,topDepth+1);
				if (data.enableAutoplay && !autoplayTriggered){
					var rel = cat.getFirstRelease();
					if (rel){
						rel.requestVideoPlay();
						rel.select();
					}
					autoplayTriggered = true;
				}
			});	
		});
		cwpManager.catClick(topDepth+1,function(catObj){
			if (catObj.isSelected)
				catObj.unselect();
			else{
				catObj.select();
			}
		});
	
		cwpManager.catSelect(topDepth+1,function(catObj){
			if (catObj.children.length>0 && catObj.children[0].mode == CWP_UNRENDERED)
				catObj.renderHTML($("#playlist"),topDepth+1,topDepth+2);
			catObj.element.next().slideToggle("normal",function(){refreshScrollbars();});
		});
		cwpManager.catUnselect(topDepth+1,function(catObj){
			catObj.element.next().slideToggle("normal",function(){refreshScrollbars();});
		});
		cwpManager.catOnChildrenShow(topDepth,function(catObj){
			refreshScrollbars();
		});
		cwpManager.catOnChildrenShow(topDepth+1,function(catObj){
			if (catObj.element) catObj.element.next().hide();
		});
		
		cwpManager.relSelect(function(relObj){
			htmlStr = '<div class="pltitle">' + symbolsToEntities(relObj.title) + '</div>' + symbolsToEntities(relObj.description);
			if (cwpManager.queuedRelease && relObj.ID==cwpManager.queuedRelease.ID)
				htmlStr = '<div id="playWarning">Your video will begin playing after this advertisement...</div>' + htmlStr;
			$("#currentReleaseFrame").html(htmlStr);
		});	
	
		// define the behaviour for rendering Releases
		cwpManager.relRendering = function(targetContainer,rel){
			var htmlStr = '<div class="plRel" id="rel'+rel.ID+'">';
			htmlStr += '<div class="plImage">';
			if (rel.depth < topDepth+2 && rel.thumbnailURL && rel.thumbnailURL.length>0) htmlStr += '<image src="' + rel.thumbnailURL + '" width="58" height="43"/>';
			htmlStr += '</div><div class="plTitle">' + symbolsToEntities(rel.title) + '</div><div class="btnPlaying"></div>' +
				'<div class="plLength">' + convertLength(rel.length)  + '</div></div>';
			targetContainer.append(htmlStr);
			return targetContainer.children(":last");
		}
		// define the behaviour for rendering Categories (we only define depth 0, but all other depths will default to it)
		cwpManager.catRendering[topDepth] = new catRender(function(targetContainer,cat){ // method for rendering a category
			targetContainer.append("<div class='catItem'>" + symbolsToEntities(cat.title) + "</div>");
			return targetContainer.children(":last");
		},function(targetContainer, rel){
			targetContainer.append("<div></div>");
			return targetContainer.children(":last");
		});
		
		cwpManager.catRendering[topDepth+1] = new catRender(function(targetContainer,cat){ // method for rendering a category
			var htmlStr = '<div class="plCat" id="cat'+cat.ID+'"><div class="plCatItem"><div class="plImage">';
			if (cat.thumbnailURL && cat.thumbnailURL.length>0) htmlStr += '<image src="' + cat.thumbnailURL + '" width="58" height="43"/>';
			htmlStr += '</div><div class="plTitle">' + symbolsToEntities(cat.title)  + '</div><div class="btnExpand"></div></div></div>';
			targetContainer.append(htmlStr);
			return targetContainer.children(":last").children(":last");
		},function(targetContainer, rel){
			// we need to add the container at the same level as the category div
			targetContainer.after("<div class='catSub'></div>");
			return targetContainer.next();
		});

		cwpManager.OnPlayBlocked = function(blockPlay,rel){if (!blockPlay) $("#playWarning").hide();}
	}

	cwpManager.OnPlayClick = function(){
		var rel = cwpManager.rootCats[0].getFirstRelease();
		if (rel){
			rel.requestVideoPlay();
			if (playerType == "normal") rel.selectWithParents(topDepth+1);
			else if (playerType != "playeronly") rel.select();
		}
	}

	cwpManager.relOnVideoStart(function(rel,pdkEvent){
		// If the ad synching library is available, we will let it handle companion ads
		if (typeof adSync == "object"){
			adSync.TriggerVideoAdSynch(pdkEvent);
		}
	});

	cwpManager.OnNoCategories = function(){
		$("#playlist").html("<div style='margin:20px;margin-top:20px !important;font-size:larger;'>There are currently no clips available for this player.  Please check back later.</div>");
	}
	getCategories();
	cwpAjaxLinks();
}

function addPlayerHTML(targetContainer){
	htmlStr = '<div class="commManager" id="commManagerDiv"></div>';
	if (playerType == "normal"){// if not normal, we don't have the top menu
	htmlStr += '<div id="menuFrame"><div class="arrowLeft"></div>' +
	'<div id="menuScrollContainer">' +
	'<div id="menuScrollInternal"></div></div>' +
	'<div class="arrowRight"></div></div>'
	}
	playerHTML = '<a class="hackA" /><div class="player" id="playerFrame">' +
	'<p style="font:8pt Verdana;color:#BEBEBE">To view this site, you need to have Flash Player 8.0 or later installed. Click <a href="http://www.macromedia.com/go/getflashplayer/" target="_blank" style="color:#BEBEBE">here</a> to get the latest Flash player.</p></div>'
	if (playerType != "playeronly"){
		htmlStr += '<div><div id="cwpLeftFrame">' + playerHTML +
		'<div id="currentReleaseFrame"></div></div>' +
		'<div id="playlistFrame"><div id="playlist" class="playlist"><div></div></div></div></div>';
	}else htmlStr += playerHTML;
	targetContainer.html(htmlStr);
}

function insertCss(data, extraThemeParams){	
	if(!data.ignoreCSS){
	var cssParams = "cwpWidth=" + data.playerWidth + "&cwpHeight=" + data.playerHeight + "&playerWidth=" + data.videoWidth + "&cwpTheme=" + data.theme + "&cwpLayout=" + data.layout + data.descriptionHeightCSS + data.descriptionMarginCSS + data.keepTopMenuCSS;
	if(extraThemeParams) {cssParams += extraThemeParams;}
		var cssLinkTagHtml = "<link href=\"/global/canwestPlayer/css/cwpDynamic.css.asp?" + cssParams + "\" rel=\"stylesheet\" type=\"text/css\"/>"
		
		if (document.createStyleSheet)
		{
			document.createStyleSheet("/global/canwestPlayer/css/cwpDynamic.css.asp?" + cssParams);
		}
		else
		{
			jQuery(cssLinkTagHtml).appendTo("head");
		}
	}
}

function insertScript(data, extraSwfParams){
	if (!data.skipFlash){
		var parsedLocation = window.location.href.replace(/[?].*/,"");
		var rootURL = parsedLocation.match(/^[^\/]*\/\/[^\/]*/);
		var playerURL = "&playerURL=" + escape(parsedLocation + "?releasePID={releasePID}");
		var rssURL = "&RSSURL=" + escape(rootURL + "/global/applications/flashbridge/MRSS.ashx?U=" + parsedLocation);
		
		var sbStr = ScriptRoot + "?type=Video&u=" + escape(parsedLocation) + playerURL + rssURL + ((data.theme == "default")?"":"&theme="+data.theme) + "&width=" + data.videoWidth + "&height=" + data.videoHeight + "&PID=" + data.PID + "&playerTag=" +data.playerTag;
		if (data.overlayImage) sbStr += "&plugin6=type=overlay|URL=/global/canwestPlayer/swf/ImageOverlayPlugin.swf|image_path=" + data.overlayImage;
		if(extraSwfParams) {sbStr += extraSwfParams;}
		logDebug("Scriptbuilder: " + sbStr);
		$.ajaxSetup({cache:true});
		$.getScript(sbStr,function(){
			$(document).ready(function(){initializePlayerTemplate(initData);});
			// related to FF hack to make player load
			$(document).ready(function(){$(".hackA").hide()});
		});
		$.ajaxSetup({cache:false});
	}else{
		$(document).ready(function(){initializePlayerTemplate(initData);});
		// related to FF hack to make player load
		$(document).ready(function(){$(".hackA").hide()});
	}
}

/**********
* The first function called, which launches everything
**********/
function cwpInsertPlayer(data){
	// set defaults
	if(!data.PID){alert("You must specify the PID.");return;}
	if(!data.playerTag){alert("You must specify the playerTag.");return;}
	if(!data.site){alert("You must specify the site.");return;}
	
	if(!data.playerType){data.playerType = "normal";} else if (data.playerType == "notopmenu" || data.playerType == "relonly" || data.playerType == "playeronly") {data.keepTopMenu = "false"; } 
	playerType = data.playerType;
	
	if(!data.layout){data.layout = "horizontal";} 
	
	if(!data.videoWidth) data.videoWidth = 400;
	data.videoHeight = Math.floor(data.videoWidth / 4 * 3 + 20); 

	if(!data.descriptionHeight){data.descriptionHeightCSS = "";} else {data.descriptionHeightCSS = "&descriptionHeight=" + data.descriptionHeight;}
	if(!data.descriptionMargin){data.descriptionMarginCSS = "";} else {data.descriptionMarginCSS = "&descriptionMargin=" + data.descriptionMargin;}
	if(!data.keepTopMenu){data.keepTopMenuCSS = "";} else {data.keepTopMenuCSS = "&cwpKeepTopMenu=" + data.keepTopMenu;} 

	

	//if( data.playerType == "normal" )
		insertCss(data);
		
	if (!data.skipHTML)
		addPlayerHTML($("#cwpFrame"));

	if (!data.skipFlash){
		cwpLoadFlashObjects({
			width:data.videoWidth,
			height:data.videoHeight,
			akamaiRoot:akamaiRoot,
			rssURL:data.rssURL,
			targetContainer:playerDiv.substring(1),
			omnitureAccount:data.omnitureAccount || "canhgtv",
			swfFolder: "/includes/cwp/swf/",
			comscoreSiteId: "7292437",
			variables:{
				backgroundColor:"0x131313",
				controlBackgroundColor:"0x4ba4ac",
				controlColor:"0xFFFFFF",
				controlFrameColor:"0x545759",
				controlHoverColor:"0xFFFFFF",
				controlSelectedColor:"0xFFFFFF",
				frameColor:"0xFFFFFF",
				pageBackgroundColor:"0x000000",
				playProgressColor:"0x2d6870",
				scrubberColor:"0x2d6870",
				scrubberFrameColor:"0x333333",
				scrubTrackColor:"0x2d6870",
				loadProgressColor:"0xFFFFFF",
				textBackgroundColor:"0x4ba4ac",
				textColor:"0xffffff",
				previewImageURL:data.overlayImage || "http://www.hgtv.ca/includes/cwp/images/overlayHGTV.png",
				useDefaultPlayOverlay: "false"
			},
			bgcolor:"0x131313"
		});
	}
	// Notify the player tracker that this player is in use
	var parsedLocation = window.location.href.replace(/(&|)(release|category)(ID|id|PID|pid)=[^&]*/,"").replace(/[?]$/,"");
	$(document).ready(function(){initializePlayerTemplate(data);});
}

