UAK = YAHOO.namespace('trp.uak.529');
/*
modified from vrt retail.
TODO: properties as passed in json objects with defaults and wta functions as json function refs.
*/

if (typeof UAK.WebMetrics == "undefined")
{

UAK.WebMetrics = function(){
  
		var DropdownChangeListener =  function(el){
			var dropdownOnChange = function(e, el){
				VRT.logger.log("trapped DROPDOWN ONCHANGE event -- " 
					+ "name >" + el.options[el.selectedIndex].text 
					+ "< href >" + el.href 
					+ "< onchange >" + el.onchange 
					+ "< id  >" + el.id + "  location " +window.location.pathname);			 
				//WTA.utils.tags.sendretaillinkp('link', escape(el.options[el.selectedIndex].text), "CONTENT");
			};		
			YAHOO.util.Event.addListener(el, 'change', dropdownOnChange, el);
		};
		
  		var NavIdPlacement = {
  			"ssmenu":"TN",
  			"tmenu0":"TN",
  			"tmenu1":"TN",
  			"tmenu2":"TN",
  			"tmenu3":"TN",
  			"tmenu4":"TN",
  			"leftNavLink":"LN",
  			"breadcrumbLink":"BRD",
  			"footerLink":"FTR",
  			"rightSideBarLink":"RN",
  			"globalUtilityLink":"HDR",
  			"jsExternalUrl":"FTR",
  			"log_in":"HDR"
  		};
  		
  		var UtilityIdPlacement = {
  			"pageUtilityLink":"HDR",
  			"myTextSize":"HDR"
   		};
  		
  		var setDispatchProperties = function(eventTarget){
  		
  		//need to grab the image from document handler
  		
			VRT.logger.log("WEBMETRICS setDispatchProperties");
			
		 	//prevents double reporting when hardcoded onclick handlers handle reporting. see showPage
		 	//VRT.logger.log("metricsReportedOn = " + Retail.page.properties.metricsReportedOn);
			//if(Retail.page.properties.metricsReportedOn) return;

		 	//ie fires on select  - bailing 
		 	if (eventTarget.tagName.toLowerCase() == 'select')
		 	{
			 	VRT.logger.log("event tag == select");
		 		UAK.ClickEventDispatch.dispatchControl.linkName = jvl.form.getSelectedOption(eventTarget).text;
		 		UAK.ClickEventDispatch.dispatchControl.linkPlacement = "CONTENT";
	 			UAK.ClickEventDispatch.dispatchControl.linkType = "internal-onchange";
	 			UAK.ClickEventDispatch.dispatchControl.linkProtocol= "javascript";
			 	VRT.logger.log("selectedOption = " + jvl.form.getSelectedOption(eventTarget).text);
		 		return;
		 	}

			 	//ff fires on option		 	
		 	if (eventTarget.tagName.toLowerCase() == 'option')
		 	{
		 		UAK.ClickEventDispatch.dispatchControl.linkPlacement = "CONTENT";
		 		UAK.ClickEventDispatch.dispatchControl.linkName= eventTarget.parentNode.options[eventTarget.parentNode.selectedIndex].text
		 		var onchangeFunction = eventTarget.parentNode.onchange;
		 		if(!jvl.validation.isEmpty(onchangeFunction)) 
		 		{
		 			UAK.ClickEventDispatch.dispatchControl.linkType = "internal-onchange";
		 			UAK.ClickEventDispatch.dispatchControl.linkProtocol= "javascript";
		 		}
		 			
		 		return;
		 	}
		 	  						
			var linkPlacement = NavIdPlacement[eventTarget.id];
							
			if(linkPlacement == undefined) linkPlacement = UtilityIdPlacement[eventTarget.id];
			
			if(jvl.validation.isEmpty(linkPlacement)) linkPlacement = "CONTENT";
			
			UAK.ClickEventDispatch.dispatchControl.linkPlacement = linkPlacement;

			
			if (eventTarget.tagName.toLowerCase() == 'a') { 
				UAK.ClickEventDispatch.dispatchControl.linkName= getLinkName(eventTarget);
			}

			if (eventTarget.tagName.toLowerCase() == 'img') { 

				var name =  eventTarget.parentNode.getElementsByTagName('img')[0].alt;

				if(jvl.validation.isEmpty(name))
					name = eventTarget.parentNode.getElementsByTagName('img')[0].title;
				
				VRT.logger.log("processing image with name of " + name);
				
				UAK.ClickEventDispatch.dispatchControl.linkName= name;
			}
			
			var targetHref;
			
			if (eventTarget.tagName.toLowerCase() == 'img') { 

				targetHref = String(eventTarget.parentNode);
				VRT.logger.log("processing image with target href of " + targetHref  + " parent node id " + eventTarget.parentNode.id);
				//repeated code from above 
                linkPlacement = NavIdPlacement[eventTarget.parentNode.id];
                if(jvl.validation.isEmpty(linkPlacement)) linkPlacement = "CONTENT";
                UAK.ClickEventDispatch.dispatchControl.linkPlacement = linkPlacement;
                
				
			}
			else targetHref = eventTarget.href;

			if(targetHref != undefined && targetHref.indexOf("LeftSubNav") != -1) //utility channel specific function name
			{
				UAK.ClickEventDispatch.dispatchControl.linkPlacement = "LN";
				UAK.ClickEventDispatch.dispatchControl.linkName = targetHref;
			}

			UAK.ClickEventDispatch.dispatchControl.linkType= getLinkType(targetHref);						

			UAK.ClickEventDispatch.dispatchControl.targetHref = targetHref;
	
  		};
		//not defined when clicking on image  
	    var getLinkType = function(targetHref)
		{
			
			if(targetHref == undefined) return "unknown";
			
			VRT.logger.log("getLinkType href = " + targetHref);
			
			var linkType = "external"

			if(targetHref.indexOf("public/ua529") != -1) 
			{
				linkType = "internal"; 
			}
				
			if((targetHref.indexOf("brightcove") != -1) || (targetHref.indexOf("javascript:O_LC()") != -1))  
			{
					linkType = "external";
			}
			
			if(targetHref.indexOf("financialtrans") != -1) 
			{
				linkType = "skip"; 
			}			

			if(targetHref.indexOf("javascript") != -1)
			{
				UAK.ClickEventDispatch.dispatchControl.linkProtocol= "javascript";
			}

					
			return linkType;
		};

		var getLinkName = function(eventTarget)
		{
			var linkName = eventTarget.innerHTML;
				
			var imageInAnchor = YAHOO.util.Dom.getElementsBy(function(){return true;},"img",eventTarget); //footer
			
			VRT.logger.log(" imageInAnchor = " + imageInAnchor + " length =" + imageInAnchor.length);
			
			if(imageInAnchor.length > 0) //ie bug
			{
				var imageTag = imageInAnchor[0];
				VRT.logger.log("image alt attribute text =  " + imageTag.alt);
				if(!jvl.validation.isEmpty(imageTag.alt)) linkName = imageTag.alt;
				VRT.logger.log("image title attribute text =  " + imageTag.title);
				if(!jvl.validation.isEmpty(imageTag.title)) linkName = imageTag.title;
				
			}

			return linkName;
		 };
			
  		return{
  			
  			properties:{
  				htmlElement:""
  			},
  			
  			generateMetrics:function(eventTarget){
  				setDispatchProperties(eventTarget);
  			}
  			
  		};
  }();
  
  UAK.ClickEventDispatch = function(){
  		
  		var clearDispatchControl = function(props){
			props.targetHref ="";
  			props.eventTarget ="";
  			props.linkName="";
  			props.linkPlacement="CONTENT";
  			props.linkType="";
  			props.linkProtocol="http";
			props.leavingBankingServices=false;
			props.bankingServicesDisclaimer="";
  		};
  		
  		var completeEventRequest = function(eventTarget){
  		
  			var props = UAK.ClickEventDispatch.dispatchControl;
  			
  			VRT.logger.log("ClickEventDispatch has the following control props");
			VRT.logger.log("UAK.ClickEventDispatch.dispatchControl.sentPageDot " +		props.sentPageDot);
  			VRT.logger.log("UAK.ClickEventDispatch.dispatchControl.linkComponent " +	props.linkComponent);
  			VRT.logger.log("UAK.ClickEventDispatch.dispatchControl.linkName "+ props.linkName);
  			VRT.logger.log("UAK.ClickEventDispatch.dispatchControl.linkPlacement " + props.linkPlacement);
  			VRT.logger.log("UAK.ClickEventDispatch.dispatchControl.linkType " + props.linkType);
  			VRT.logger.log("UAK.ClickEventDispatch.dispatchControl.linkPtotocol " + props.linkProtocol);
  			VRT.logger.log("UAK.ClickEventDispatch.dispatchControl.targetHref " + props.targetHref);
			VRT.logger.log("UAK.ClickEventDispatch.dispatchControl.leavingBankingServices " + props.leavingBankingServices);
			VRT.logger.log("UAK.ClickEventDispatch.dispatchControl.bankingServicesDisclaimer " + props.bankingServicesDisclaimer);
  			 
  	
  			var linkEvent = "link";
  			if(props.linkType.indexOf("onchange") != -1) linkEvent = "onchange";
  			
  			if(props.linkType.indexOf("internal") != -1 && props.linkProtocol == "javascript")
  			{
	  			VRT.logger.log("reporting internal " + linkEvent + " " + props.linkName + " " +props.linkPlacement);
	  			//WTA.utils.tags.sendretaillinkp(linkEvent,props.linkName, props.linkPlacement);
	  			VRT.logger.alertMsg(" --- preview stage log inspect alert --- ");
	  			clearDispatchControl(props);

	  			return;
	  		}
	  		
	  		if(props.linkType.indexOf("internal") != -1  && props.linkPlacement == "CONTENT")
  			{
	  			VRT.logger.log("reporting internal " + linkEvent + " " + props.linkName + " " +props.linkPlacement);
	  			//WTA.utils.tags.sendretaillinkp(linkEvent,props.linkName, props.linkPlacement);
	  			VRT.logger.alertMsg(" --- preview stage log inspect alert --- ");
	  			clearDispatchControl(props);

	  			return;
	  		}
	  		
	  		var target = YAHOO.util.Dom.get(eventTarget);
	  			
  			if(props.linkType == "external" && props.linkProtocol == "javascript")
  			{
	  			VRT.logger.log("reporting external javascript link " + " " + target + " " + props.linkName + " " +props.linkPlacement);
	  			WTA.utils.tags.sendalaskaexitjs(target,'link', props.linkName, props.linkPlacement);
	  			//WTA.utils.tags.sendretailexitjs(target,'link', props.linkName, props.linkPlacement);
	  			VRT.logger.alertMsg(" --- preview stage log inspect alert --- ");
	  			clearDispatchControl(props);

	  			return;
	  		}
	  			
  			if(props.linkType == "external" && props.linkProtocol == "http")
  			{
	  			VRT.logger.log("reporting external http link " + " " + target + " " + props.linkName + " " +props.linkPlacement);
	  			WTA.utils.tags.sendalaskaexitjs(target,'link', props.linkName, props.linkPlacement);
  				//WTA.utils.tags.sendretailexiturl(target,'link', props.linkName, props.linkPlacement);
  				VRT.logger.alertMsg(" --- preview stage log inspect alert --- ");
	  			clearDispatchControl(props);

  				return;
  			}
  			
  			if(props.linkType == "skip")
  			{
	  			clearDispatchControl(props);

  				return;
  			}  			
  			
  			var metricsHref = "";

  			if(props.targetHref.indexOf("/v/index.jsp") == -1)
  			{
  				metricsHref= props.targetHref + "?v_linkcomp=link&v_linkplmt=" + props.linkPlacement  + "&v_link=" + escape(props.linkName);
  			}
  			else
  			{
  				metricsHref = props.targetHref;
  			}
  			
  			clearDispatchControl(props);  			

  			VRT.logger.log("reporting on qstring click dispatch metricsHref = " + metricsHref);
			
			VRT.logger.alertMsg(" --- preview stage log inspect alert --- ");
			
  			target.href = metricsHref;

  		};
  		
  		return{
  			
			dispatchControl:{
				leavingBankingServices: false,
				bankingServicesDisclaimer: "",
				sentPageDot: false,  //may not need
				targetHref: "",
				linkComponent: "link",
				linkName :"",
				linkPlacement:"CONTENT", //default
				linkType:"",
				linkProtocol:"http"
			},
			
			dispatch: function(eventTarget){
		
					completeEventRequest(eventTarget);
			},
			
			dispatchEmbeddedJsMertic: function(type, name, placement){
			//if !Retail.page.properties.isInPreview
				//WTA.utils.tags.sendretaillinkp(type, name, placement);
			},
			
			reportAndReplace: function(url, type, name, placement){
				VRT.logger.log(" replace and replace  this url " + url);
				VRT.logger.log(" reporting " + type + " " + name + " " + placement);
				//WTA.utils.tags.sendretaillinkp(type, name, placement);
				//top.location.href=url;
			}
			
			
	
  		};
  }();
  
}