﻿/* 
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 = "";

                        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 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 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.split(":")[1];
                track_tag += "$om-" + omniture_tag;
            }
        }
        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, "atlas": atlas_tag, "newwindow": new_window/*,"redirect":redirect_url*/ };
        }

        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]["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)
{
    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;
    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)
{
    //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;
    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 */
