// get the link clicked and impression data
// and set into cookie for next page load tracking
// via OmnitureStandardTracking.jsp

// Please refer to eBusiness_Docs/Software_Development/Design/Web Analytics 
// for implementation guide and variables list SDR

//This JS requires omniTrackStandard.js.
$(document).ready(function(){
//Current URI variable for convenience
var currentPage = window.location.href;
var objectLocation = "";
//Keep track of which card was clicked to prevent tracking a card twice in a row.
var oldCardClicked = "";

 /* BEGIN Dynamically Controlled ON/OFF elements - The following tracked elements are turned on/off via application-config.xml
----------------------------------------------- */
if(document.getElementById("moduleTrackingOn").value == "true") { 
/* If the rendered page is the M.com homepage, Track clicks on a Tab which is on a Flash Card
----------------------------------------------- */
	if(document.getElementById("homepage")){
		$('#hotelTabLink,#dealTabLink,#meetingTabLink').click(function(event) {		
			trackTabClicked(event);
			return false;
		});
	}
/*  Track click selection of a Flash Card if it is NOT in the first position. Do not track clicking on the same card twice in a row
----------------------------------------------- */
	$('#flash-card-1, #flash-card-2, #flash-card-3, #flash-card-4, #flash-card-5, #flash-card-6').click(function(event) {
		var eventCard = $(event.target);
		if(oldCardClicked != $(eventCard).parents(".flash-card").attr("id") && !$(eventCard).parents(".flash-card").hasClass("front-card")){
			var events = 'None';
			var evars = 'eVar1';
			var objectData;
			var numberOfCards = $('.flash-card').length;
			var cardTitle = $(this).children('h2').text();
			objectLocation = $(eventCard).parents(".flash-card").attr("id");
			objectData = "uri=" + currentPage + ":loc=" + objectLocation + ":slotTotal=" + numberOfCards + ":cardTitle=" + cardTitle ;
		    sendData(this,objectData,events,evars);
			oldCardClicked = $(eventCard).parents(".flash-card").attr("id");
		}
	});	
//End on/off tracking switch
}
/*  Track click on a carousel "next" or "previous" buttons
----------------------------------------------- */
	$('#carousel-prev, #carousel-next').click(function(event) {
		var cookieValue = omnitureStandard.getOmniCookie("omniData");
		if(cookieValue == "" || !cookieValue.match("Carousel Click")){
	   		var carouselData = "Carousel Click";
	   		setTrackingCookie(carouselData,'carouselData');
	   		sendData(this,carouselData,"","prop29");
	   	}
	   	return false;
	});	
/*  Prevent tracking on calendar. Choosing a start or end date was shwoing up as a tracked link
----------------------------------------------- */
	$('#calContainer_0, #calContainer_1').click(function(event) {
		return false;
	});	

/* 	Start Primary Body onClick function which captures any click on the page
----------------------------------------------- */
   $("body").click(function(event){
		var eventTarget = $(event.target);
		//Track if the event target or the parent of the event target is "A"(href)
		if(eventTarget.is("A") || $(eventTarget).parent(0).is("A")){
			var uri;
			if($(eventTarget).parent(0).is("A")){
				uri = $(eventTarget).parent(0).attr('href');
			}else{
				uri = $(eventTarget).attr('href');
			}
			if(eventTarget.hasClass("trackExtLink")){
			//TRACk exterior or exit links
				objectData = "uri=" + currentPage + ":loc=" + getLinkLocation(eventTarget) + ":linkDescription=" + $(eventTarget).text();	 
				sendData(this,objectData,"","");
			}else if(uri.indexOf("vsstart/clickcounter") != -1){
			//TRACK legacy "VSSTART- VSEND" links
				vsstartLinkTrack(eventTarget);
			}else if(eventTarget.attr("id") == "hotSpotLink"){
			//TRACK hotSpot link
				var hotSpotLinkData = "uri=" + currentPage + ":loc=" + $(eventTarget).parents(".flash-card").attr("id") + ":linkDescription=" + $(eventTarget).text();		
				setTrackingCookie(hotSpotLinkData,"uri");
			}else{
				/* Track my-account-control clicks, only the first time clicked
				----------------------------------------------- */
				if(eventTarget.hasClass("my-account-control-title")){
	  				var omniCookie = omnitureStandard.getOmniCookie("omniData");
	   				if(omniCookie == "" || !omniCookie.match("View My Account")){
	   					var myAccountData = "Expand Quick View: View My Account";
	   					setTrackingCookie(myAccountData,'myAccountData');
	   					sendData(this,myAccountData,"","prop29");
	   				}
	  		  	}		
	  		  	
		    /* BEGIN Dynamically Controlled ON/OFF elements - The following tracked elements are turned on/off via application-config.xml
			----------------------------------------------- */
			if(document.getElementById("moduleTrackingOn").value == "true") { 
			
				//Track links clicked in the Global Header or nav-container in the header
			 	if((getLinkLocation(eventTarget) == "header" || $(eventTarget).parents('.nav-container').hasClass('nav-container')  ) && !eventTarget.hasClass("my-account-control-title")){
					trackLink(event,getLinkLocation(eventTarget));
				 }else	if(getLinkLocation(eventTarget) == "footer") {
				 //Global Footer Links
					trackLink(event,getLinkLocation(eventTarget));
				}else if(!eventTarget.hasClass("my-account-control-title")){
				//Track links clicked on the Carousel
					if($(eventTarget).parents().hasClass('carousel')) {
						var theEventClass = $(event.target).attr("class");
						 if(theEventClass.match("carousel-image")){
					    	trackLink($(event.target),"carousel",$(event.target).attr("class"));
					    }else{
					    	trackLink($(event.target),"carousel",$(event.target).text());
					    }
				  	}else if(currentPage.match("/default.mi") || currentPage.match("/rewards/rewards-program.mi") || currentPage.match("/specials/default.mi")){
					//Track other Body Links for homepage, rewards homepage and deals landing page
						objectLocation = "body";
						trackLink(event,objectLocation,$(eventTarget).text());
					}
				}
		   }
		 /* END Dynamically Controlled ON/OFF elements
		 ----------------------------------------------- */
	//End else A	
		    }
		}else if(eventTarget.parent().attr("id") =="logo"){
			trackLink(event,getLinkLocation(eventTarget));
		}
		else if(eventTarget.is("IMG") && !$(eventTarget).hasClass("fc-frame") && !$(eventTarget).hasClass("fc-bg")){
				//IMG is a Link in the header
				if((getLinkLocation(eventTarget) == "header")){
					objectLocation = "header";
					trackLink(event,objectLocation);
				 }else{
				 //IMG is a Link NOT in the header
					objectLocation = "";
					trackLink(event,objectLocation,"");
			 }
		}
  	//Closing bracket of $("body").click(function()  
 		}	
	);

	/* Process if a Tab on a flash-card is clicked
----------------------------------------------- */
	function trackTabClicked(event){
		var eventTarget = $(event.target);
		var events;
		var evars="";
		objectData = "uri=" + currentPage + ":loc=" + $(eventTarget).parents(".flash-card").attr("id") + ":slotTotal=" + $('.flash-card').length + ":tabTitle=" + $(eventTarget).attr('title');
		sendData(this,objectData,events,evars);
	}
	
	/* Builds a data string about the link that was clicked
----------------------------------------------- */
	function trackLink(linkObject,location,linkText) {
		var theObjLocation = location;
		var theLinkText = "";
		if(linkText != ""){
			theLinkText = linkText;
		}
		var objectData;
		var targetData = "uri";
		var linkDetail = ":linkDescription=";

		//Set the LinkText if NOT from Flash-Card
		if(theObjLocation=="header"||theObjLocation=="footer"){
				theLinkText = $(linkObject.target).text();
		}
		if(theLinkText.match("cardTitle")){
			linkDetail = "";
		}
		theLinkText = $.trim(theLinkText);
		objectData = "uri=" + currentPage + ":loc=" + theObjLocation + linkDetail + theLinkText; 
		setTrackingCookie(objectData,targetData);
	}
	
	/* 	Sends collected data to Omniture through an image request embedded with query string values
----------------------------------------------- */
	function sendData(theObject,objectTitle,events,evars) {
		var suiteAccounts = omnitureStandard.getSAccount();
		var s=s_gi(suiteAccounts);
		if(evars !=""){
			s.linkTrackVars = evars;
			if(evars.match("prop29")){
				s.prop29 = objectTitle;
			}
		}else{
			s.linkTrackVars='eVar1,events';
		}
		s.linkTrackEvents=events;
		s.eVar1=objectTitle;
		s.events=events;
		s.tl(this,'o',objectTitle);		
	}
	
	/* 	Gets information from the VSStart...VSEnd link that was clicked and stores the data in a cookie.
	This functionality was kept seperate from the other link tracking functions to make it easier to remove when VSStart is retired.
----------------------------------------------- */
	function vsstartLinkTrack(eventTarget) {
		var theUrl = $(eventTarget).attr('href');
		var start = theUrl.indexOf("vsstart/clickcounter/");
		var end = theUrl.indexOf("/vsend");
		var linkId = theUrl.substring(start + 21, end);
		var linkTrack = "omniLinkClick";
		// check for cookie
		// if exists then append value
		// if not then create new and set
		var omniData = omnitureStandard.getOmniCookie("omniData");
		if(omniData !== null && omniData != "") {
			if(omniData.indexOf(linkTrack) == -1) {
				omniData += linkTrack + linkId + "&;path=/";
			} else {
				var subDataStart = omniData.indexOf(linkTrack);
				var subDataEnd = omniData.length;
				var subData = omniData.substring(subDataStart, subDataEnd);
				var replaceString = linkTrack + linkId;
				if(subData.indexOf("&") != -1) {
					subDataEnd = subData.indexOf("&");
				}
				else
				{
					replaceString += "&";
				}
				subData = subData.substring(subDataStart, subDataEnd);
				omniData = omniData.replace(subData,replaceString);
			}
		} else {
			omniData = linkTrack + linkId + "&"; 
		}
		// set cookie
		document.cookie = "omniData=" + omniData + ";path=/";
	}
	
	function omniFlashOnLoadTrack(flashName) {
		if(document.getElementById("omniture-impression-flash")){
			var omniImpression = document.getElementById("omniture-impression-flash");
			omniImpression.value = flashName;
		}
	}
//Closing bracket of $(document).ready
});

/* Returns the links location on the page
----------------------------------------------- */
	function getLinkLocation(eventTarget){
		var linkLocation = "";
		if($(eventTarget).parents('#footer').attr('id')){
			linkLocation = "footer";
		}else if($(eventTarget).parents('#header').attr('id') || $(eventTarget).parents('.nav-container').hasClass('nav-container') ){
			linkLocation = "header";
		}else{
			linkLocation = "body";
		}
		return linkLocation;
	}

/* 	Sets the OmniData cookie with link information. 
	This info is "read" on the NEXT rendered page and subsequently sent to Omniture via an image request.
----------------------------------------------- */
	function setTrackingCookie(objectData,targetData){
		var omniData = omnitureStandard.getOmniCookie("omniData");
		//Process if OmniData cookie already exits
		if(omniData !== null && omniData != "") {
			if(omniData.indexOf(targetData) == -1 || targetData == "myAccountData" || targetData == "carouselData") {
			//If cookie has data that is NOT link-related, keep it and append new link data onto the end.
				omniData += objectData + "*";
			} else {
			//Cookie has existing link data, overwrite but keep non-link data
				var start = omniData.indexOf(targetData);
				var sub = omniData.substring(start);
				sub = sub.substring(0,sub.indexOf('&'));
				omniData = omniData.replace(sub,objectData);	
			}
	   //Process if NO OmniData cookie exists
		} else {
			omniData = objectData + "*";
		}
		// set tracking cookie
		document.cookie = "omniData=" + omniData + ";path=/";
	}
