﻿/*
Universal tracking support
*/
var trackedActionCodes = new Array();

//main tracking init function
//all tracked pages need to be added to the following
//switch statement using the pageTrackingCode variable defined anywhere in the target page itself
function InitUniversalTracking() {

    //check if page label is defined
    if (pageTrackingCode != null) {

        switch (pageTrackingCode.toUpperCase()) {
            case "UT_TEST":
                InitTestPageTracking();
                break;

            case "UT_COMMUNITY":
                InitCommunityPageTracking();
                break;

            case "UT_CONTACTUS_NEWHOMEINFO_FORM":
                InitContactUsNewHomeInfoFormPageTracking();
                break;

            case "UT_CONTACTUS_NEWHOMEINFO":
                InitContactUsNewHomeInfoPageTracking();
                break;

            case "UT_CONTACTUS_WARRANTYREQUEST":
                InitContactUsWarrantyRequestPageTracking();
                break;

            case "UT_CONTACTUS_DESIGNSTUDIO":
                InitContactUsDesignStudioPageTracking();
                break;

            case "UT_CONTACTUS_LANDFORSALE":
                InitContactUsLandForSalePageTracking();
                break;

            case "UT_CONTACTUS_WEBSITEFEEDBACK":
                InitContactUsWebsiteFeedbackPageTracking();
                break;

            case "UT_PLAN":
                InitPlanPageTracking();
                break;

            case "UT_SPEC":
                InitInventoryPageTracking();
                break;

            case "UT_METRO":
                InitMetroPageTracking();
                break;
            case "UT_ESMART":
                IniteSmartPageTracking();
                break;
            case "UT_REALTOR_ESMART":
                InitRealtoreSmartPageTracking();
                break;
            case "UT_ESMART_CPO_OFFER":
                IniteSmartCPOPageTracking();
                break;
            case "UT_ESMART_CPO_THANKYOU":
                IniteSmartCPOTYPageTracking();
                break;
            case "UT_CPO_METROLANDING":
                InitMetroLandingPageTracking();
                break;
            case "UT_CPO_METROLANDING_THANKYOU":
                InitMetroLandingPageThankYouTracking();
                break;
            case "UT_NEWNEWHOME_LANDING":
                InitNewNewHomeLandingPageTracking();
                break;
            case "UT_NEWNEWHOME_CONTACTUSOVERLAY":
                InitNewNewHomeContactUsOverlayTracking();
                break;
            case "UT_NEWNEWHOME_PAGE2":
                InitNewNewHomePage2Tracking();
                break;
            case "UT_NEWNEWHOME_THANKYOU":
                InitNewNewHomeThankYouPageTracking();
                break;
            case "UT_NEWNEWHOME_THANKYOUOVERLAY":
                InitNewNewHomeThankYouOverlayTracking();
                break;
            case "UT_KEYTOSAVINGSPROMO_LANDING":
                InitKeyToSavingsPromoLandingPageTracking();
                break;
            case "UT_KEYTOSAVINGSPROMO_THANKYOU":
                InitKeyToSavingsPromoThankYouPageTracking();
                break;
            case "UT_KEYTOSAVINGSPROMO":
                InitKeyToSavingsPromoPageTracking();
                break;
            case "UT_TAXCREDITSAVINGS":
                InitTaxCreditSavingsPageTracking();
                break;
            case "UT_TAXCREDITSAVINGS_LANDING":
                InitTaxCreditSavingsLandingPageTracking();
                break;
            case "UT_TAXCREDITSAVINGS_THANKYOU":
                InitTaxCreditSavingsThankYouPageTracking();
                break;
            default:
                break;
        }
    }
}

/* ****************** Individual pages configuration ******************* */

//test page
function InitTestPageTracking() {
    $("#lnkDD").click(function() {
        TrackAction("Community_DDTab");
    });
}
//TaxCreditSavings pages
function InitTaxCreditSavingsPageTracking() {
    TrackGoogleEvent("TaxCreditSavings", "Submit", "Lead Form");
}

function InitTaxCreditSavingsLandingPageTracking() {
    TrackAction("TaxCreditSavings_Landing", false, true);
}

function InitTaxCreditSavingsThankYouPageTracking() {
    TrackAction("TaxCreditSavings_ThankYou", false, true);
}

//KeyToSavingsPromo pages
function InitKeyToSavingsPromoLandingPageTracking() {
    TrackAction("KeyToSavingsPromo_Landing", false, true);
}
function InitKeyToSavingsPromoThankYouPageTracking() {
    TrackAction("KeyToSavingsPromo_ThankYou", false, true);
}

function InitKeyToSavingsPromoPageTracking() {
    TrackGoogleEvent("KeyToSavingsPromo", "Submit", "Lead Form");
}

//NewNewHome pages
function InitNewNewHomeLandingPageTracking() {
    TrackAction("NewNewHome_Landing", false, true);
}

function InitNewNewHomeContactUsOverlayTracking() {
    TrackAction("NewNewHome_ContactUsOverlay", false, true);
}

function InitNewNewHomePage2Tracking() {
    $("#lnkSavings").click(function() {
        TrackAction("NewNewHome_Zoning", false, true);
    });
}

function InitNewNewHomeThankYouPageTracking() {
    TrackAction("NewNewHome_ThankYou", false, true);
}

function InitNewNewHomeThankYouOverlayTracking() {
    TrackAction("NewNewHome_ThankYouOverlay", false, true);
}

//MetroLanding page
function InitMetroLandingPageTracking() {
    TrackAction("MetroLanding_CPO", false, true);
    TrackGoogleEvent("MetroLanding - CPO", "Submit", "Lead Form");
}

function InitMetroLandingPageThankYouTracking() {
    TrackAction("MetroLanding_CPO_ThankYou", false, true);
}

//eSMART CPO page
function IniteSmartCPOPageTracking() {
    TrackAction("eSmart_Zoning", false, true);
}

function IniteSmartCPOTYPageTracking() {
    TrackAction("eSmart_CPO_ThankYou", false, true);
}


//eSmart Interactive House page
function IniteSmartPageTracking() {
    $("#lnkeHouse").live("click", function() {
        TrackAction("eSmart_eHouse", false, true);
    });

    $("#submitMetro").click(function() {
        TrackAction("eSmart_Zoning", false, true);
    });
}
//eSmart Realtor Interactive House page
function InitRealtoreSmartPageTracking() {
    $("#lnkeHouse").live("click", function() {
        TrackAction("RealtoreSmart_eHouse", false, true);
    });
}
//community details page
function InitCommunityPageTracking() {
    var TrackDoubleClick = function () {

        if (IsActionTrackedOnPage("doubleclick_DD")) {
            return;
        }

        //Double click targeting pixel
        if (typeof (SetDoubleClickConversionPixel) == "function")
            SetDoubleClickConversionPixel(1);

        trackedActionCodes.push("doubleclick_DD");
    }


    //driving directions tab
    $("#communities_tab4").click(function () {
        TrackDoubleClick();
        TrackAction("Community_DDTab", false, true);
        TrackGoogleEvent(window.location.pathname + "/Driving Directions", "View");
    });

    //driving directions tab via the call-for-action link (RHS)
    $("#rddlink").click(function () {
        TrackDoubleClick();
        TrackAction("Community_DDTab", false, true);
        TrackGoogleEvent(window.location.pathname + "/Driving Directions", "View");
    });

    //driving directions tab via the "Get Directions" link on the overview tab (sales office info)
    $("#lnkDirections").click(function () {
        TrackDoubleClick();
        TrackAction("Community_DDTab", false, true);
        TrackGoogleEvent(window.location.pathname + "/Driving Directions", "View");
    });

    //get directions (Google route) button
    $("div#lnkGetDirections a").click(function() {
        TrackAction("Community_DDRoute", false, true);
        TrackGoogleEvent(window.location.pathname + "/Driving Directions", "Request Directions");
    });

    //local info tab
    $("#communities_tab2").click(function() {
        TrackAction("Community_LITab", false, true);
    });

    //school info tab
    $("#communities_tab3").click(function() {
        TrackAction("Community_SITab", false, true);
    });

    //community sitemap link
    $("div.mainHeaderSiteMap a").click(function() {
        TrackAction("Community_SitemapLink", false, true);
    });

    //community offer link 
    $("#lnkOffer").click(function() {
        TrackAction("Community_OfferLink", false, true);
    });

    //community metro offer link (from parent metro - banner)
    $("#lnkMetroOffer").click(function() {
        TrackAction("Community_MetroOfferLink", false, true);
    });

    //check if the community page is requested with the initial tab being the driving directions
    //and if so, track that goal right away
    if (parent.window.location.search.toUpperCase().indexOf("INITTAB=DD") > -1) {
        TrackDoubleClick();
        TrackAction("Community_DDTab", false, true);
    }

    //Perform above check for remaining tabs 10/12/2010 case 7750
    if (parent.window.location.search.toUpperCase().indexOf("INITTAB=CO") > -1) {
        TrackAction("Community_COTab", false, true);
    }
    if (parent.window.location.search.toUpperCase().indexOf("INITTAB=LI") > -1) {
        TrackAction("Community_LITab", false, true);
    }
    if (parent.window.location.search.toUpperCase().indexOf("INITTAB=SI") > -1) {
        TrackAction("Community_SITab", false, true);
    }

    //community financing options tab
    $("#communities_tab5").click(function() {
        TrackAction("Community_FOTab", false, true);
    });

}

//contact us - new home info request - form
function InitContactUsNewHomeInfoFormPageTracking() {
    TrackGoogleEvent("Lead", "Submit", "Lead Form");
}

//contact us - new home info request - thank you
function InitContactUsNewHomeInfoPageTracking() {
    TrackAction("ContactUs_NewHomeInfo", false, true);
}

//contact us - warranty request - thank you
function InitContactUsWarrantyRequestPageTracking() {
    TrackAction("ContactUs_WarrantyRequest", false, true);
}

//contact us - design studio info - thank you
function InitContactUsDesignStudioPageTracking() {
    TrackAction("ContactUs_DesignStudio", false, true);
}

//contact us - land for sale - thank you
function InitContactUsLandForSalePageTracking() {
    TrackAction("ContactUs_LandForSale", false, true);
}

//contact us - website feedback - thank you
function InitContactUsWebsiteFeedbackPageTracking() {
    TrackAction("ContactUs_WebsiteFeedback", false, true);
}

//plan details page
function InitPlanPageTracking() {
    //virtual tour link
    $("div.vtText a").click(function() {
        TrackAction("CommunityPlan_VirtualTour", false, true);
    });

    //offer link (inherited community offer)
    $("#lnkOffer").click(function() {
        TrackAction("CommunityPlan_OfferLink", false, true);
    });

    //metro offer banner (inherited metro offer)
    $("#lnkMetroOffer").click(function() {
        TrackAction("CommunityPlan_MetroOfferLink", false, true);
    });

    //Track virtual tour overlay open if initial request to page contains action=open_tour 10/12/2010 case 7750
    if (parent.window.location.search.toUpperCase().indexOf("ACTION=OPEN_TOUR") > -1) {
        TrackAction("CommunityPlan_VirtualTour", false, true);
    }
}

//inventory details page
function InitInventoryPageTracking() {
    //virtual tour link
    $("div.vtText a").click(function() {
        TrackAction("CommunityInventory_VirtualTour", false, true);
    });

    //offer link (can be inventory or community)
    $("#lnkOffer").click(function() {
        TrackAction("CommunityInventory_OfferLink", false, true);
    });

    //metro offer banner (inherited metro offer)
    $("#lnkMetroOffer").click(function() {
        TrackAction("CommunityInventory_MetroOfferLink", false, true);
    });

    //Track virtual tour overlay open if initial request to page contains action=open_tour 10/12/2010 case 7750
    if (parent.window.location.search.toUpperCase().indexOf("ACTION=OPEN_TOUR") > -1) {
        TrackAction("CommunityInventory_VirtualTour", false, true);
    }
}

//metro details page
function InitMetroPageTracking() {
    //metro offer banner
    $("#lnkOffer").click(function() {
        TrackAction("Metro_OfferLink", false, true);
    });

    //checkboxes representing home type (non-goals)
    $("#cbxHTSingle").click(function() {
        TrackGoogleEvent(window.location.pathname + "/Home Type Checkbox", "Clicked", "Single Family Homes");

    });

    $("#cbxHTTownhome").click(function() {
        TrackGoogleEvent(window.location.pathname + "/Home Type Checkbox", "Clicked", "Townhomes");

    });

    $("#cbxHTCondo").click(function() {
        TrackGoogleEvent(window.location.pathname + "/Home Type Checkbox", "Clicked", "Condos");

    });

    $("#cbxHTQuick").click(function() {
        TrackGoogleEvent(window.location.pathname + "/Home Type Checkbox", "Clicked", "Quick Move-in Homes");

    });

    $("#selectMin").change(function() {
        TrackGoogleEvent(window.location.pathname + "/Lower Price Range List", "Changed", trackingMetroName);

    });

    $("#selectMax").change(function() {
        TrackGoogleEvent(window.location.pathname + "/Upper Price Range List", "Changed", trackingMetroName);

    });

}

//Create google event when user clicks on Facebook send button
function TrackFacebookButtonSend() {    
    TrackGoogleEvent(window.location.pathname,  "Facebook Send Button", "Click");
}

function TrackCommunityInlineForm() {
    TrackGoogleEvent(window.location.pathname, "inline_form", "Submit");
}



/* ****************** End individual pages configuration ******************* */

/* ****************** DO NOT edit below this line ******************* */

/* 
Analytics/conversion/lead/transaction tracking support 
*/

//global action tracking method via IFRAME
function TrackAction(actionCode, isDynamicAction, trackOnlyOncePerPageLoad) {

    //get reference to the tracking iframe
    var ifrTrack = document.getElementById("ifrTrack");
    if (ifrTrack == null) {
        return;
    }

    var trackUrl = "";
    var actualActionCode = actionCode;

    var rnd = Math.floor(Math.random() * 1000000);

    //check if spanish
    if (globalCurrentLangCode == "es-ES")
        actualActionCode = actualActionCode + "_Es";

    //check if action is dynamic
    if (isDynamicAction) {
        var actionInfo = actionCode.split('|');

        actualActionCode = actionInfo[0];
        var actionParams = actionInfo[1];
        trackUrl = globalTrackingUrlPrefix + actualActionCode + ".htm?r=" + rnd.toString() + "&p=" + escape(actionParams);

    } else {
        trackUrl = globalTrackingUrlPrefix + actualActionCode + ".htm?r=" + rnd.toString();
    }

    if (trackOnlyOncePerPageLoad) {
        if (IsActionTrackedOnPage(actualActionCode)) {
            return;
        }
    }

    ifrTrack.src = trackUrl;
    trackedActionCodes.push(actualActionCode);

}

//check if a given action code is already tracked on this page load
function IsActionTrackedOnPage(actionCode) {
    for (var i = 0; i < trackedActionCodes.length; i++) {
        if (trackedActionCodes[i] == actionCode) {
            return true;
        }
    }

    return false;
}

//Google Analytics action tracking with custom label
function TrackGoogleAction(pageViewLabel) {
    try {
        var pageTracker = _gat._getTracker(gaAccountId); //gaAccountId is defined in main master
        pageTracker._trackPageview(pageViewLabel);
    } catch (err) { }
}

function TrackGoogleAction_Account2(pageViewLabel) {
    try {
        var pageTracker = _gat._getTracker(gaEnAccountId2); //gaAccountId is defined in main master
        pageTracker._trackPageview(pageViewLabel);
    } catch (err) { }
}

//Google Analytics event (NOT action) tracking (NOT using goal pages)
function TrackGoogleEvent(eventCategory, eventAction, eventLabel) {
    try {
        var pageTracker = _gat._getTracker(gaAccountId); //gaAccountId is defined in main master
        pageTracker._initData();
        pageTracker._trackEvent(eventCategory, eventAction, eventLabel);
    } catch (err) { }
}

//Custom tracking (in-house)
var customTracker = {};

function TrackInternal(kpiCode) {
    var trackingPixel = trackingControllerURL;

    var urlParams = {};

    //Process query strings
    ProcessQueryString(urlParams);

    //For promos/campaigns metro ids are passed through querystring
    ProcessMetroID(urlParams);

    //Process lead source id
    ProcessLeadSourceID(urlParams);

    //Parse google cookie
    ProcessGoogleTrackingParameters(urlParams);

    //Parse eloqua cooke
    ProcessEloquaTrackingParameters(kpiCode);

    var trackingQS = "?";
    trackingQS += "KPICode=" + kpiCode;

    if (customTracker.GoogleVisitorID != undefined)
        trackingQS += "&GoogleVisitorID=" + customTracker.GoogleVisitorID;

    if (customTracker.GAUtmSource != undefined)
        trackingQS += "&GAUtmSource=" + customTracker.GAUtmSource;

    if (customTracker.GAUtmCampaign != undefined)
        trackingQS += "&GAUtmCampaign=" + customTracker.GAUtmCampaign;

    if (customTracker.GAUtmContent != undefined)
        trackingQS += "&GAUtmContent=" + customTracker.GAUtmContent;

    if (customTracker.GAUtmMedium != undefined)
        trackingQS += "&GAUtmMedium=" + customTracker.GAUtmMedium;

    if (customTracker.MetroID != undefined)
        trackingQS += "&MetroID=" + customTracker.MetroID;

    if (customTracker.CommunityID != undefined)
        trackingQS += "&CommunityID=" + customTracker.CommunityID;

    if (customTracker.CommunityPlanID != undefined)
        trackingQS += "&CommunityPlanID=" + customTracker.CommunityPlanID;

    if (customTracker.CommunitySpecID != undefined)
        trackingQS += "&CommunitySpecID=" + customTracker.CommunitySpecID;

    if (customTracker.LeadSourceID != undefined)
        trackingQS += "&LSourceID=" + customTracker.LeadSourceID;

    if (customTracker.EloquaVisitorID != undefined)
        trackingQS += "&EloquaVisitorID=" + customTracker.EloquaVisitorID;

    trackingPixel += encodeURI(trackingQS);

    //Replace image source if exists
    var target = $("body");
    var pixelImg = target.find("#BZ_CustomPixel");
    if (pixelImg.length == 0)
        target.append("<img id=\"BZ_CustomPixel\" border=\"0\" src=\"" + trackingPixel + "\" width=\"1\" height=\"1\" />");
    else
        pixelImg.attr("src", trackingPixel);
}

function ProcessGoogleTrackingParameters(urlParams) {
    //customTracker.GoogleVisitorID = gaAccountId;
    //grab unique visitor id from cookie if present
    var ga_visitor = $.cookie("__utma");
    if (ga_visitor != null)
        customTracker.GoogleVisitorID = ga_visitor;

    //grab utm parameters from cookie      
    var ga_string = $.cookie("__utmz");

    if (ga_string != null) {
        ga_string = ga_string.substr(ga_string.lastIndexOf(".") + 1);

        var ga_values = ga_string.split('|');

        for (var ga_value in ga_values) {
            var ga_val = ga_values[ga_value].split('=');

            switch (ga_val[0]) {
                case "utmcsr":
                    customTracker.GAUtmSource = ga_val[1];
                    break;
                case "utmccn":
                    customTracker.GAUtmCampaign = ga_val[1];
                    break;
                case "utmcmd":
                    customTracker.GAUtmMedium = ga_val[1];
                    break;
                case "utmcct":
                    customTracker.GAUtmContent = ga_val[1];
                    break;
                default:
                    break;
            }
        }
    }
    //Parse from querystring if it exists (overwrites values retrieved from cookie)
    for (var qs_key in urlParams) {
        switch (qs_key) {
            case "utm_source":
                customTracker.GAUtmSource = urlParams[qs_key];
                break;
            case "utm_campaign":
                customTracker.GAUtmCampaign = urlParams[qs_key];
                break;
            case "utm_medium":
                customTracker.GAUtmMedium = urlParams[qs_key];
                break;
            case "utm_content":
                customTracker.GAUtmContent = urlParams[qs_key];
                break;
            default:
                break;
        }
    }
}

function ProcessEloquaTrackingParameters(kpiCode) {
    var e_string = $.cookie("BZ_eloqua");

    if (e_string != null) {
        var e_val = e_string.split('|');
        customTracker.EloquaVisitorID = e_val[0];
    }
}

function ProcessLeadSourceID(urlParams) {
    customTracker.LeadSourceID = 0;
    var eSourceID = $.cookie("ExternalSourceID");
    if (eSourceID != null)
        customTracker.LeadSourceID = eSourceID;
    else if (urlParams["LeadSourceID"] != undefined)
        customTracker.LeadSourceID = urlParams["LeadSourceID"];
}

function ProcessMetroID(urlParams) {
    if (urlParams["MetroID"] != undefined)
        customTracker.MetroID = urlParams["MetroID"];
}

function ProcessQueryString(urlParams) {
    var e,
a = /\+/g,
    // Regex for replacing addition symbol with a space
r = /([^&;=]+)=?([^&;]*)/g,
d = function(s) { return decodeURIComponent(s.replace(a, " ")); },
q = window.location.search.substring(1);
    while (e = r.exec(q))
        urlParams[d(e[1])] = d(e[2]);
}
//End Custom tracking code

//javascript call to populate double click thank you pixel
//iframe is located in Main.master
function SetDoubleClickConversionPixel(type) {
    var axel1 = Math.random() + "";
    var a1 = axel1 * 10000000000000;
    var frmSrc = "";
    switch (type) {
        case 1: //Driving Directions pixel
            frmSrc = "http://fls.doubleclick.net/activityi;src=3423363;type=conve756;cat=beaze413;u4=[Custom D];u3=[Custom C];u2=[Custom B];u1=[Custom A];u6=[Custom F];u5=[Custom E];ord=" + a1 + "?";
            break;
        default: //Thank you pixel
            frmSrc = "http://fls.doubleclick.net/activityi;src=3423363;type=conve476;cat=beaze176;u4=[Custom D];u3=[Custom C];u2=[Custom B];u1=[Custom A];u6=[Custom F];u5=[Custom E];ord=" + a1 + "?";
            break;
    }
    $("#ifrDoubleClick").attr("src", frmSrc);
}
