/*minimizing the use of the url and using listeners on the html elements instead of reading the url to set the parameters because
 the url structure will most likely change after migrating from swf address to yui*/
var VideoStats = function (){
	var _privateVars = [];
	var $P = _privateVars;
	$P["categoryParent"] = "categories";
	$P["breadcrumbParent"] = "breadcrumb";
	$P["topSearchFormParent"] = "searchform-top";
	$P["mainSearchFormParent"] = "searchform-main";
	$P["searchFormClass"] = "searchform";
	$P["headerParent"] = "header";
	$P["playlistFilterParent"] = "libraryfilters";
	$P["paginationParent"] = "pagination";
	$P["topSearchQueryId"] = "q-top";
	$P["mainSearchQueryId"] = "q-main";
	$P["linkPage"] = "video page";
	$P["libraryItemClass"] = "clip";
	$P["index"] = "index";
	$P["videoClip"] = "videoclip";
	$P["linkId"] = "";
	$P["linkPos"] = {};
	$P["linkPos"]["breadcrumb"] = "breadcrumb";
	$P["linkPos"]["pagination"] = "pagination";
	$P["linkPos"]["search"] = "search";
	$P["linkPos"]["mainNav"] = "mainnav";
	$P["linkPos"]["playlistFilter"] = "playlist filter";
	$P["linkPos"]["categoryList"] = "category list";
	$P["linkPos"]["headerLink"] = "header link";
	$P["linkPos"]["mainPlaylist"] = "main playlist";
	$P["addToPlaylist"] = "add to my playlist";
	$P["removeFromPlaylist"] = "remove from my playlist";
	$P["catcatalyst"] = null;
	$P["separator"]= ":";
	$P["navParent"] = "nav";
	$P["channel"] = "video";
	$P["subsection"] = [];
	$P["region"] = "";
	$P["clipId"] = "";
	$P["clipTitle"] = "";
	$P["defaultVideoCategory"] = "shows";
	$P["regions"] = ["bc", "calgary", "edmonton", "saskatchewan", "manitoba", "thunder bay", "sudbury", "windsor", "toronto", "ottawa", "montreal", "nb", "pei", "ns", "nl", "north"];
	$E = YAHOO.util.Event;
	$D = YAHOO.util.Dom;
	$U = CBC.UTIL;
	$ = $U.getElementsById;
	var $SC = null;
	var $PT = null;
	var $LT = null;
	return{
		init : function (){
			CBC.APP.UberPlayer.subscribe(CBC.APP.UberPlayer.ON_GET_CATEGORY_BY_PARENT_ID_EVENT, this.handlePageView, this, true);
			if (s_cbc_sitecatalyst)$SC = s_cbc_sitecatalyst;
			else return;
			if (CBC.APP.SC.PageTracker) $PT = CBC.APP.SC.PageTracker;
			else return;
			if (CBC.APP.SC.LinkTracker) $LT = CBC.APP.SC.LinkTracker;
			CBC.APP.SC.ptinit = "true";
			this.addCategoryListener();
			this.addBreadcrumbListener();
			this.addNavListener();
			this.addPlaylistFilterListener();
			this.addHeaderListeners();
			this.addSearchListeners();
		},
		addHeaderListeners : function(o){
			var ul = $($P["headerParent"]).getElementsByTagName("ul")[0];
			$E.addListener(ul, "click", this.handlePortalLinkListener, this);
			var logo = $($P["headerParent"]).getElementsByTagName("a")[0];
			$E.addListener(logo, "click", this.handleVideoPortalLinkListener, this);
		},
		addSearchListeners : function(o){
			$E.addListener($($P["mainSearchFormParent"]), "click", this.handleSearchListener, this);
			$E.addListener($($P["topSearchFormParent"]), "click", this.handleSearchListener, this);
		},
		addPlaylistFilterListener : function(o){
			$E.addListener($($P["playlistFilterParent"]), "click", this.handlePlaylistFilterListener, this);
		},
		addNavListener : function(o){
			$E.addListener($($P["navParent"]), "click", this.handleNavListener, this);
		},
		addCategoryListener : function(o){
			$E.addListener($($P["categoryParent"]), "click", this.handleCategoryListener, this);
		},
		addBreadcrumbListener : function(o){
			$E.addListener($($P["breadcrumbParent"]), "click", this.handleBreadcrumbListener, this);
		},
		handlePaginationListener : function(num){
			var containers = $U.getElementsByClassName($P["paginationParent"]);
			var anchors = [];
			var i = containers.length;
			while (i--){
				anchors.concat(containers[i].getElementsByTagName("a"));
			}
			var linkNum;
			var pageName = $PT.getPageName();
			for( x in anchors){
				linkNum = anchors[x].innerHTML;
				if (linkNum == num +''){
					var catalyst = anchors[x];
					$LT.registerLinkClick(catalyst, {linkName:num+"", linkPage:pageName, linkPos:$P["linkPos"]["pagination"], ajax: true});
					this.registerPageView();
					break;  
				}
			}
		},
		handlePlaylistFilterListener : function(e, o){
			var filter = (e.target)?e.target:e.srcElement;
			if (filter.tagName != "A") return;
			var filterType = unescape(filter.innerHTML);
			filterType = filterType.toLowerCase();
			$LT.registerLinkClick(e, {linkPage:$P["linkPage"], linkName:filterType, linkPos:$P["linkPos"]["playlistFilter"], ajax: true});
		},
		handleSearchListener : function(e, o){
			var searchButton = (e.target)?e.target:e.srcElement;
			if (searchButton.className != "btn") return;
			var searchForm = $D.getAncestorByClassName(searchButton, $P["searchFormClass"]);
			var queryField = (searchForm.id == $P["topSearchFormParent"])?$P["topSearchQueryId"]:$P["mainSearchQueryId"];
			var searchQuery = unescape($(queryField).value);
			searchQuery = searchQuery.toLowerCase();
			$LT.registerLinkClick(e, {linkPage:$P["linkPage"], linkName:$P["linkPos"]["search"]+$P["separator"]+"'"+searchQuery+"'", linkPos:queryField, ajax: true});
		},
		handlePortalLinkListener : function(e, o){
			var portalLink = (e.target)?e.target:e.srcElement;
			if (portalLink.tagName != "A") return;
			var linkLabel = unescape(portalLink.innerHTML);
			linkLabel = linkLabel.toLowerCase();
			$LT.registerLinkClick(e, {linkPage:$P["linkPage"], linkPos:$P["linkPos"]["headerLink"], linkName:linkLabel, ajax: true});
		},
		handleVideoPortalLinkListener : function(e, o){
			var portalLink = (e.target)?e.target:e.srcElement;
			if (portalLink.className != "logo") return;
			var logo = unescape(portalLink.alt);
			logo = logo.toLowerCase();
			$LT.registerLinkClick(e, {linkPage:$P["linkPage"], linkName:logo, linkPos:$P["linkPos"]["headerLink"], ajax: true});
		},
		handleNavListener : function(e, o){
			var backpedal;
			var navLink = (e.target)?e.target:e.srcElement;
			if (navLink.tagName == "A") backpedal = unescape(navLink.innerHTML);
			else return;
			backpedal = backpedal.toLowerCase();

			$P["clipId"] = "";
			$P["clipTitle"] = "";
			try{
			$LT.registerLinkClick(e, {linkPage:$P["linkPage"], linkPos:$P["linkPos"]["mainNav"], linkName:backpedal, ajax: true});
			}catch(e){}
		},
		handleBreadcrumbListener : function(e, o){
			var position, backpedal;
			//determine the category by inspecting the value of the element that was clicked
			var breadcrumb = (e.target)?e.target:e.srcElement;
			//set the subsection
			if (breadcrumb.tagName == "A") backpedal = unescape(breadcrumb.innerHTML);
			else return;
			backpedal = backpedal.toLowerCase();

			$P["clipId"] = "";
			$P["clipTitle"] = "";
			$LT.registerLinkClick(e, {linkPage:$P["linkPage"], linkPos:$P["linkPos"]["breadcrumb"], linkName:backpedal, ajax: true});
		},
		handleCategoryListener : function(e, o){
			//determine the category by inspecting the value of the a that was clicked
			var htmlLink = (e.target)?e.target:e.srcElement;
			if ($P["catcatalyst"] == htmlLink) return; //disregard multiclicks
			$P["catcatalyst"] = htmlLink;
			var category = unescape(htmlLink.innerHTML);
			category = category.toLowerCase();
			
			//reset clipId and clipTitle
			$P["clipId"] = "";
			$P["clipTitle"] = "";
			$LT.registerLinkClick(e, {linkPage:$P["linkPage"], linkPos:$P["linkPos"]["categoryList"], linkName:category, ajax: true});
		},
		handleMyPlaylistAction : function(o){
			var linkName = (o.add == true)?$P["addToPlaylist"]:$P["removeFromPlaylist"];
			var actionParent = $D.getAncestorByClassName(o.node, $P["libraryItemClass"]);
			var clipTitle = $U.getElementsByClassName("title", actionParent, "span")[0].innerHTML;
			var clipCategory = $U.getElementsByClassName("id", actionParent, "span")[0].innerHTML;
			clipTitle = clipTitle.toLowerCase();
			clipCategory = clipCategory.toLowerCase();
			$LT.registerLinkClick(o.node, {linkPage:$P["linkPage"], linkPos:$P["linkPos"]["mainPlaylist"], linkName: linkName + $P["separator"] + clipCategory + $P["separator"] + clipTitle})
		},
		handlePageView : function(){//called when the breadcrumb is updated
			$P["subsection"] = CBC.APP.UberPlayer.getCurrentCategory().toLowerCase().split("/");
			this.registerPageView();
		},
		registerPageView : function(){
			$SC.prop20 = "";
			var contenttype = ($P["clipTitle"] == "")?$P["index"]:$P["videoClip"];
			CBC.APP.SC.QueryString = "contentarea=" + $P["channel"] + "&amp;contenttype=" + contenttype;
			if ($P["clipTitle"] != "") CBC.APP.SC.QueryString +="&amp;title=" + $P["clipTitle"];
			if ($P["subsection"][0]) CBC.APP.SC.QueryString +="&amp;subsection1=" + $P["subsection"][0];
			if ($P["subsection"][1]) CBC.APP.SC.QueryString +="&amp;subsection2=" + $P["subsection"][1];
			if ($P["subsection"][2]) {
				CBC.APP.SC.QueryString +="&amp;subsection3=" + $P["subsection"][2];
				if ($P["subsection"][1] == "canada"){
					for (var i=0; i<$P["regions"].length; i++){ //determine if in a region
						if ($P["subsection"][2] == $P["regions"][i]){
							$SC.prop20 = $P["regions"][i];
							break;
						}
					}
				}
			}
			$SC.prop6 = $P["clipId"]; //cid
			$PT.init();//register page view
		},
		setClip : function(clip){ //when a clip is initialized in the flash player this fn will be invoked
			$P["clipTitle"] = clip.title.toLowerCase();
			$P["clipId"] = clip.ID;
			this.registerPageView();
		},
		getVal : function(privateParam){
			return $P[privateParam];
		}
	}
}

