﻿/* 
tracking.js
Methods that deal with traffic and click tracking, 
such as Omniture and Atlas, as well as Google Analytics
*/

var trackingMatrix = Array();


// BEGIN Atlas Tracking
function AddClickListener() {
    if (document.addEventListener) {
        addEventListener("click", ConsumeClick, false);
    } else {
        document.onclick=ConsumeClick;
    }
}

function ConsumeClick(ptrEvent) {
    var ptrTarget;
    if (ptrEvent) {
        ptrTarget=ptrEvent.target;
    } else {
        ptrTarget = window.event.srcElement;
    }
	
    var strClasses = GetClassAttribute(ptrTarget);
    if (strClasses && strClasses.indexOf("tt$")!=-1)
	{
	    var classArray=strClasses.split(" ");          		 
		for (var i=0;i<classArray.length;i++)    
		{      			
			if(classArray[i].indexOf("tt$")!=-1)
			{  				
			   var trackingArray=classArray[i].substring(3).split("$"); 
			   for(var ii=0;ii<trackingArray.length;ii++) 
			   {
					if(trackingArray[ii].indexOf("at-")!=-1)
					{         
						CallAtlas(trackingArray[ii].substring(3));
					}   
					else if(trackingArray[ii].indexOf("om-")!=-1)
					{   
						s.eVar7="";
						s.prop7="";

						//set default values
						var events_var="";
						var eVar17_var="";
						//check if events are present
						if(trackingMatrix[ptrTarget.id] && trackingMatrix[ptrTarget.id]["omniture_events"]) {
						    events_var = trackingMatrix[ptrTarget.id]["omniture_events"];
						}
						
						var omniture_array=trackingArray[ii].substring(3).split("-");
						
						var pageName_var=omniture_array[0];
						
						if (omniture_array.length==2)
						{
							eVar17_var=omniture_array[1];
						}
						
						CallOmniture(events_var,eVar17_var,pageName_var);
					}
					else if(trackingArray[ii].indexOf("tag-")!=-1) {
						var index = trackingArray[ii].substring(4);
						if(tracking_tags[index]["om"]) {
							var om_tag = tracking_tags[index]["om"];
							s.eVar7="";
							s.prop7="";
							//set default values
							var events_var="";
							var eVar17_var="";
							var omniture_array=om_tag.split("-");
							var pageName_var=omniture_array[0];
							if (omniture_array.length==2) {
								eVar17_var=omniture_array[1];
							}
							CallOmniture(events_var,eVar17_var,pageName_var);
						}
						if(tracking_tags[index]["at"]) {
							var at_tag = tracking_tags[index]["at"];
							CallAtlas(at_tag);
						}
 					}
			   }   
			   //return true;
			   var id = ptrTarget.getAttribute("id");
			   if(id && trackingMatrix[id]) {
			    var href = trackingMatrix[id]["redirect"];
			    //var target = ptrTarget.getAttribute("target");
			    if(href && href != "#") {
			        if($.browser.safari || $.browser.msie) {trackingRedirect(href,trackingMatrix[id]["newwindow"]);} 
			        else {setTimeout("trackingRedirect('"+href+"','"+trackingMatrix[id]["newwindow"]+"')",100);}
			    }
			    return false;
			   }
			   else {
			    return true;
			   }
			   //if(href.indexOf("mailto:")!=-1) {
			   //} else {
    		   //redirect(href);
			   //}
			}
		}
	}
    return true;
}

function trackingRedirect(thisHref,new_window) {
    //alert(thisHref+"::"+new_window);
    if(new_window == "true") {
        var myWindow = window.open(thisHref,"shareLink");
    } else {/*alert('trying to redirect to '+thisHref);*/
        location.href = thisHref;
        //window.location(thisHref);
    }
}

function CallOmnitureForVideo(events, pageName) {
    var oldpagename = s.pageName; 
    s.pageName = "LWW:" + pageName;
    var url = window.location.toString();
    url = url.toLowerCase();
    if (url.indexOf("watchtheads") != -1 || url.indexOf("watchtheads") != -1) {
        s.pageName = "watchtheads: " + pageName;
    }
         // remember the previous pagename    
    s.eVar6 = getPage();               // kylie4 for example
    s.eVar7 = oldpagename;             // keep track of the page where the video was viewed for pathing reports
    
    s.eVar8 = videoType;               // wmp or sl
    if (events)
        s.events = events;
    else
        s.events = "event1";
    try { s.t(); } catch (err) { }     //make tracking call
    s.pageName = oldpagename;          // restore pagename after tracking call
}

function CallOmnitureForSlideshow(events, pageName) {
    var oldpagename = s.pageName; 
    s.pageName = "LWW:" + pageName;
    var url = window.location.toString();
    url = url.toLowerCase();
    if (url.indexOf("watchtheads") != -1 || url.indexOf("watchtheads") != -1) {
        s.pageName = "watchtheads: " + pageName;
    }
         // remember the previous pagename    
    s.eVar6 = getPage()+"_slideshow";               // kylie4 for example
    s.eVar7 = oldpagename;             // keep track of the page where the video was viewed for pathing reports
    
    s.eVar8 = videoType;               // wmp or sl
    if (events)
        s.events = events;
    else
        s.events = "event1";
    try { s.t(); } catch (err) { }     //make tracking call
    s.pageName = oldpagename;          // restore pagename after tracking call
}
function CallOmniture(events, evar17, pageName) {
    var oldpagename = s.pageName; 
    s.pageName = "LWW:" + pageName;
    var url = window.location.toString();
    url = url.toLowerCase();
    if (url.indexOf("watchtheads") != -1 || url.indexOf("watchtheads") != -1) {
        s.pageName = "watchtheads: " + pageName;
    }
         // remember the previous pagename    
    s.eVar6 = getPage();               // kylie4 for example
    s.eVar7 = oldpagename;             // keep track of the page where the video was viewed for pathing reports
    s.eVar8 = null;
                        // wmp or sl
    if (events)
        s.events = events;
    else
        s.events = "event1";
    
    s.eVar17 = evar17;
    try { s.t(); } catch (err) { }     //make tracking call
    s.pageName = oldpagename;

    // restore pagename after tracking call
}

function CallAtlas(param,noappend1)
{
    var trackingImage = document.createElement("img");

    var nocache = new Date().getTime();
    trackingImage.setAttribute("src", "http://view.atdmt.com/action/"+param+"?nocache="+nocache);
    trackingImage.setAttribute("alt", "");
    trackingImage.setAttribute("width", "1");
    trackingImage.setAttribute("height", "1");
    document.getElementById("footer_bkg").appendChild(trackingImage);

}
function GetClassAttribute(element)
{                
	if (element.getAttribute("className")) {
		return element.getAttribute("className"); 
	} else if (element.getAttribute("class")) {
		return element.getAttribute("class"); 
	} else { return null;}
}

var confirmCookieName="Conf";

function SetConfirmCookie() {
	var date=new Date();
	date.setTime(date.getTime()+(60*60*1000));
	document.cookie = confirmCookieName+"=1"+"; expires="+date.toGMTString()+"; path=/";
}

function HasConfirmCookie() {
	return document.cookie.indexOf(confirmCookieName)>-1;
}

function RemoveConfirmCookie() {
	var date=new Date();
	date.setTime(date.getTime()-(60*60*1000));
	document.cookie = confirmCookieName+"=1"+"; expires="+date.toGMTString()+"; path=/";
}

function track(atlasTag,omnitureTag,om1,om2,tech) {
    if(tech) {
        //s.eVar7=tech;
	    //s.prop7=tech;
	    s.eVar8 = tech;
    }
    //call Atlas
    if(atlasTag)
        CallAtlas(atlasTag);
    //call Omniture
    if(omnitureTag) {
        CallOmniture(om1,om2,omnitureTag);
    }
}

function track_tag(tag) {
	var index = tag;
	if(tracking_tags[index]["om"]) {
		var om_tag = tracking_tags[index]["om"];
		s.eVar7="";
		s.prop7="";
		//set default values
		var events_var="";
		var eVar17_var="";
		var omniture_array=om_tag.split("-");
		var pageName_var=omniture_array[0];
		if (omniture_array.length==2) {
			eVar17_var=omniture_array[1];
		}
		
		if(tracking_tags[index]["om1"])
			events_var = tracking_tags[index]["om1"];
			
		if(tracking_tags[index]["om2"])
			eVar17_var = tracking_tags[index]["om2"];
			
		CallOmniture(events_var,eVar17_var,pageName_var);
	}
	if(tracking_tags[index]["at"]) {
		var at_tag = tracking_tags[index]["at"];
		CallAtlas(at_tag);
	}
}

//js tracking global for all flash players on the site
function trackFlashAtlas(playerType, action, trackingDump) {
    //console.log("trackFlashAtlas("+playerType+","+action+","+trackingDump+") called.");
    var input = new Array();
    
    //parse input
    var pairs = trackingDump.split(":::");
    for(var i=0;i<pairs.length;i++) {
        var key_value = pairs[i].split("=");
        input[key_value[0]]=key_value[1];
    }
    
    switch(playerType) {
        case "flv_intro_player":
            if(action=="end") {
                $get("landing-embed-replace").style.display = "none";
                $get("landing-end-overlay").style.display = "block";
            }
            break;
        case "flv_player_extended":
            if(action=="start") {
            	if(tracking_tags["pcstory_start"]) {
					track(tracking_tags["pcstory_start"]["at"], tracking_tags["pcstory_start"]["om"]+input["videoName"], "event5", null, "flash");
			    }
		    }
            else if(action=="end") {
            	if(tracking_tags["pcstory_complete"]) {
					track(tracking_tags["pcstory_complete"]["at"], tracking_tags["pcstory_complete"]["om"]+input["videoName"], "event6", null, "flash");
				}
		    }
            break;
        case "flv_player_spot":
            if(action=="interaction") {
                if(tracking_tags["ugcvideo_interaction"]) {
				    track(tracking_tags["ugcvideo_interaction"]["at"],null,null,null,"flash");
				}
			    if(tracking_tags["ugcvideo_start"]) {
	                track(tracking_tags["ugcvideo_start"]["at"], tracking_tags["ugcvideo_start"]["om"], null, null, "flash");
		        }
		    }
            else if(action=="end") {/*console.log("spot: stop");*/}
            break;
        case "flv_player_ads":
            if(action=="start") {
                /*console.log("ads: start");*/
                flashVideoOpen();
                if(tracking_tags["ad_start"]) {
                    CreateAtlasImage(tracking_tags["ad_start"]["at"]+input["videoName"].toLowerCase().replace(/[^a-zA-Z0-9]/g,""));
                }
            }
            else if(action=="end") {
                //console.log("ads: stop");
                //WMPvideoClose();
                flashVideoClose();
                if(tracking_tags["ad_end"]) {
                    CreateAtlasImage(tracking_tags["ad_end"]["at"]+input["videoName"].toLowerCase().replace(/[^a-zA-Z0-9]/g,""));
                }
            }
            break;
        default:
            break;
    }
}

function createXMLHttpRequest()
{
	if(typeof XMLHttpRequest != "undefined") return new XMLHttpRequest();
	else if (typeof ActiveXObject != "undefined") return new ActiveXObject("Microsoft.XMLHTTP");
	else throw new Error("XMLHttpRequest not supported");
}

function loadXML(file)
{
 	var request = this.createXMLHttpRequest();
	request.open("GET", file, true);
	request.onreadystatechange = function()
	{
		if(request.readyState == 4)
		{
		    processXML(request.responseXML);
		}
	}
	request.send(null);
}

function setupTracking(xmlfile) {
    AddClickListener();
    loadXML(xmlfile);
}


$.fn.tagName = function() {
    return this.get(0)?this.get(0).tagName:null;
}

function processXML(xmldata) {
    
    var trackNodes = xmldata.getElementsByTagName("track");

    for(var i=0;i<trackNodes.length;i++) {
        
        var id = trackNodes[i].attributes.getNamedItem("id").value;
        
        //validate
        //if($('#'+id).length == 0) {
        //    console.log(id);
        //}
        
        var track_tag = "";
        var atlas_tag = "";
        var omniture_tag = "";
        var omniture_events = "";
        var redirect_url = "";
        var new_window = "";
        
        if(trackNodes[i].getElementsByTagName("omniture").item(0).firstChild) {
            if(trackNodes[i].getElementsByTagName("omniture").item(0).firstChild.nodeValue!=null) {
                omniture_tag = trackNodes[i].getElementsByTagName("omniture").item(0).firstChild.nodeValue;
                track_tag += "$om-"+omniture_tag;
            }
        }
        if(trackNodes[i].getElementsByTagName("omniture_events").item(0).firstChild) {
            if(trackNodes[i].getElementsByTagName("omniture_events").item(0).firstChild.nodeValue!=null) {
                omniture_events = trackNodes[i].getElementsByTagName("omniture_events").item(0).firstChild.nodeValue;
            }
        }
        if(trackNodes[i].getElementsByTagName("atlas").item(0).firstChild) {
            if(trackNodes[i].getElementsByTagName("atlas").item(0).firstChild.nodeValue!=null) {
                atlas_tag = trackNodes[i].getElementsByTagName("atlas").item(0).firstChild.nodeValue;
                track_tag += "$at-"+atlas_tag;
            }
        }
        if(trackNodes[i].getElementsByTagName("redirect").item(0).firstChild) {
            if(trackNodes[i].getElementsByTagName("redirect").item(0).firstChild.nodeValue!=null) {
                redirect_url = trackNodes[i].getElementsByTagName("redirect").item(0).firstChild.nodeValue;
            }
        }
        if(trackNodes[i].getElementsByTagName("newwindow").item(0).firstChild) {
            if(trackNodes[i].getElementsByTagName("newwindow").item(0).firstChild.nodeValue!=null) {
                new_window = trackNodes[i].getElementsByTagName("newwindow").item(0).firstChild.nodeValue;
            }
        }
        
        if(id) {
            trackingMatrix[id] = Array();
            trackingMatrix[id] = {"omniture":omniture_tag,"omniture_events":omniture_events,"atlas":atlas_tag,"newwindow":new_window/*,"redirect":redirect_url*/};
        }
        
        //checker
        if($('#'+id).html() == null) {/*console.log("["+id+"] does not exist");*/}
        else {/*console.log("["+id+"] exist");*/}
        
        if(track_tag) {
            //assign tracking class
            var old_class = $('#'+id).attr("class");
            $('#'+id).attr("class","tt"+track_tag+" "+old_class);
            if($('#'+id).tagName() && $('#'+id).tagName() == "A" && old_class != "Active") {
                //return false;
                $('#'+id).attr("onclick","return false;");
                if($('#'+id).attr("href") && $('#'+id).attr("href")!="#") {
                    //save href
                    trackingMatrix[id]["redirect"] = $('#'+id).attr("href");
                    //remove href
                    $('#'+id).attr("href","#");
                    //remove target
                    $('#'+id).attr("target","");
                }
                else {
                    trackingMatrix[id]["redirect"] = redirect_url;
                }
            }
            else {
               trackingMatrix[id]["redirect"] = redirect_url;
            }
        }
        
        //defaults
        
        if(!trackingMatrix[id]["redirect"]) {trackingMatrix[id]["redirect"] = "#";}
        if(!trackingMatrix[id]["omniture"]) {trackingMatrix[id]["omniture"] = "";}
        if(!trackingMatrix[id]["omniture_events"]) {trackingMatrix[id]["omniture_events"] = "";}
        if(!trackingMatrix[id]["atlas"]) {trackingMatrix[id]["atlas"] = "";}
        if(!trackingMatrix[id]["newwindow"]) {trackingMatrix[id]["newwindow"] = "false";}
        
        /*
        for(item in trackNodes[i]) {
            console.log(item+"::"+trackNodes[i][item]);
        }
        */
    }
}

/* took from windows.js */

function omnitureVideoOnLoad(playerType) {
	s.Media.autoTrack = false;
	s.Media.playerName = playerType;
	s.eVar7 = s.pageName;  // sourcepage
	s.Media.trackVars = "events,pageName,eVar6,eVar7";
	//s.Media.trackMilestones = "10,20,30,40,50,60,70,80,90";
	s.Media.trackSeconds = "10";
    //s.Media.trackEvents = "event6";
}

/* playerType = {"wmp","sl"} */

function omnitureVideoOpen(videoPlayer, videoName, videoLength, playerType, videoType) {
    omnitureVideoOnLoad(playerType);
    videoPos = 0;
    s.events = "event5";
	var oldltvars = s.linkTrackVars;
	var oldltevts = s.linkTrackEvents;
	s.linkTrackEvents = "event5";
	s.linkTrackVars = "prop6,prop8,prop9,eVar6,eVar7,eVar8,eVar9,events";
	s.eVar6 = s.prop6 = videoName+videoType;
	s.eVar8 = s.prop8 = playerType; 
	s.eVar9 = s.prop9 = playerType;  
	s.tl(true,'o','Video Start');

    s.linkTrackEvents = oldltevts;
    s.linkTrackVars = oldltvars;

    s.Media.open(videoName, videoLength, videoPlayer);
    s.Media.play(videoName, videoPos);
}

function omnitureVideoClose(videoPlayer, videoName, playerType, videoType) {
    //s.Media.trackEvents = "event6";
    var oldltvars = s.linkTrackVars;
    var oldltevts = s.linkTrackEvents;
    s.events = "event6";
    s.Media.close(videoName);
    s.linkTrackEvents = "event6";
    // added to better track pathing following completions
    s.prop6 = s.prop8 = s.prop9 = s.eVar6 = s.eVar8 = s.eVar9 = ""; /*s.events = */
    s.linkTrackVars = "prop6,prop8,prop9,eVar6,eVar7,eVar8,eVar9,events";
    s.eVar6 = s.prop6 = videoName+videoType;
    s.eVar8 = s.prop8 = playerType;
    s.eVar9 = s.prop9 = playerType;
    var oldPageName = s.pageName;

    s.tl(true, 'o', 'Video Complete');

    s.linkTrackEvents = oldltevts;
    s.linkTrackVars = oldltvars;
    s.pageName = oldPageName;

}

function omnitureVideoStart(videoPlayer,videoName,videoPos) {
    s.Media.play(videoName, videoPos);
}

function omnitureVideoStop(videoPlayer,videoName,videoPos) {
    s.Media.stop(videoName, videoPos);
}

/* END - took from windows.js */
