// Backwards compatibility with report_omniture.js
var hwShowAlerts = window.location.href.indexOf("debug=true") > 0;

if (!org.healthwise.analytics) {
    org.healthwise["analytics"] = {};
}

org.healthwise.analytics.track = function(request) {

    // PageView
    if (request.isPageView) {
        omniture(request.documentType(), {
            pageName: shortTitle(request.documentTitle()),
            prop1: request.documentHwid(),
            prop20: request.documentLocalization(),
            prop2: request.sectionHwid(),
            prop3: spaceTrim(request.sectionTitle())
        });
    }

    // HomePage
    else if (request.isHomePageVisited) {
        omniture("HOMEPAGE", {
            pageName: "HOMEPAGE"
        });
    }

    // List
    else if (request.isListViewed) {
        omniture("LIST", {
            pageName: "LIST : " + request.letter(),
            prop3: request.filter().replace("%20", " ")
        });
    }

    // Category
    else if (request.isCategoryViewed) {
        omniture("CATEGORY", {
            pageName: "CATEGORY : " + request.category(),
            prop17: request.category()
        });
    }

    // Search
    else if (request.isSearch) {
        if (isGoToWebCode(request.term())) {
            omniture("GOTOWEB_SEARCH", {
                pageName: "GOTOWEB_SEARCH",
                prop25: request.term(),
                prop9: request.numberOfResults(),
                events: "event1"
            });
        } else {
            omniture("SEARCH", {
                pageName: "SEARCH",
                prop5: request.term(),
                prop9: request.numberOfResults(),
                events: "event1",
                prop18: request.filter(),
                prop28: request.conceptMatch(),
                prop29: request.matchType()
            });
        }
    }

    // Slideshow
    else if (request.isSlideShowViewed) {
        omniture("SLIDESHOW", {
            pageName: request.documentTitle(),
            prop26: request.totalNumberOfSlides(),
            prop27: request.numberOfSlidesViewed()
        });
    }

    // Pdf
    else if (request.isPdfView) {
        omniture("PDF", {
            pageName: shortTitle(request.documentTitle()),
            events: "event12",
            prop1: request.documentHwid(),
            prop20: request.documentLocalization(),
            prop11: request.documentTitle()
        });
    }

    // ITool
    else if (request.isIToolTransitioned) {
        var stageToEvent = {
            "access tool": "event2",
            "continue 1": "event3",
            "continue 2": "event4",
            "continue 3": "event5",
            "continue 4": "event6",
            "continue 5": "event7",
            "continue 6": "event8",
            "continue 7": "event9",
            "completed tool": "event10",
            "recalculate": "event11",
            "follow up action": "event12"
        };
        omniture("Interactive Tool", {
            pageName: "iTool: " + request.name() + "/" + request.stage(),
            prop10: request.name(),
            prop7: request.stage(),
            events: stageToEvent[request.stage()]
        });
    }

    // Survey
    else if (request.isDocumentSurveyed) {
        omniture(request.documentType(), {
            pageName: "SURVEY",
            prop1: request.documentHwid(),
            prop11: request.documentTitle(),
            prop20: request.documentLocalization(),
            prop2: request.sectionHwid(),
            prop3: request.sectionTitle(),
            prop23: request.question(),
            prop24: request.response()
        });
    }

    // Print
    else if (request.isDocumentPrinted) {
        omniture("PRINTED", {
            pageName: "PRINTED",
            events: "event11",
            prop1: request.documentHwid(),
            prop12: request.documentTitle(),
            prop20: request.documentLocalization()
        });
    }

    //DP - tab selected
    else if (request.isDecisionPointTabSelected) {
        omniture("DecisionPoint", {
            type: "DP_TAB",
            pageName: request.documentTitle() + "~Tab" + request.tabNumber(),
            prop1: request.documentHwid(),
            prop2: request.tabNumber(),
            prop3: request.tabTitle(),
            prop16: request.documentTitle() + "~Tab" + request.tabNumber()
        });
    }

    //DP - tab navigated away
    else if (request.isDecisionPointTabAway) {
        var data = {
            type: "DP_TAB",
            pageName: request.documentTitle() + "~Tab" + request.tabNumber(),
            prop1: request.documentHwid(),
            prop2: request.tabNumber(),
            prop3: request.tabTitle(),
            prop16: request.documentTitle() + "~Tab" + request.tabNumber(),
            linkTrackVars: "None",
            linkTrackEvents: "None"
        }

        var linkTrackVars = request.linkTrackedVariables();
        var linkTrackEvents = "";
        var linkLevelKeyValues = request.linkLevelKeyValues();
        for (var i = 0; i < linkLevelKeyValues.length; i++) {
            var property = linkLevelKeyValues[i];
            if (property.name.toLowerCase().indexOf("event") > -1) {
                linkTrackVars = addCsvValue(linkTrackVars, "events");
                linkTrackEvents = addCsvValue(linkTrackEvents, property.name);
                data.events = linkTrackEvents;
            }
            else {
                linkTrackVars = addCsvValue(linkTrackVars, property.name);
                data[property.name] = property.value;
            }
        }

        if (linkTrackVars != "") {
            data["linkTrackVars"] = linkTrackVars;
        }
        if (linkTrackEvents != "") {
            data["linkTrackEvents"] = linkTrackEvents;
        }

        omniture("DecisionPoint", data, true);
    }

    //DP - accessibility mode selected
    else if (request.isDecisionPointAccessibilityModeSelected) {
        omniture("DecisionPoint", {
            type: "DP_ACCESSIBILITY_LINK",
            pageName: request.documentTitle(),
            prop1: request.documentHwid(),
            prop2: request.description(),
            prop16: request.documentTitle()
        });
    }

    //DP - summary printed
    else if (request.isDecisionPointSummaryPrinted) {
        omniture("DecisionPoint", {
            type: "DP_PRINT_SUMMARY_LINK",
            pageName: request.documentTitle(),
            prop1: request.documentHwid(),
            event14: "decision point print"
        });
    }

    // Error
    else {
        org.healthwise.error("Tracking: UNKNOWN REQUEST\n\n" + request.toString());
    }


    // This sends the request to Omniture, adding client token to the request
    // and mapping properties to evars.

    function omniture(channel, parms, linkLevel) {
        parms.channel = channel;
        parms.prop4 = org.healthwise.config.clientToken;

        if (parms.prop1) { parms.eVar7 = parms.prop1; }
        if (parms.prop2) { parms.eVar5 = parms.prop2; parms.eVar8 = parms.prop2; }
        if (parms.prop3) { parms.eVar9 = parms.prop3; }
        if (parms.prop4) { parms.eVar10 = parms.prop4; }
        if (parms.prop5) { parms.eVar11 = parms.prop5.toLowerCase(); }
        if (parms.prop10) { parms.eVar16 = parms.prop10; }
        if (parms.prop11) { parms.eVar17 = parms.prop11; }
        if (parms.prop12) { parms.eVar18 = parms.prop12; }
        if (parms.prop13) { parms.eVar19 = parms.prop13; }
        if (parms.prop14) { parms.eVar20 = parms.prop14; }
        if (parms.prop22) { parms.eVar22 = parms.prop22; }
        if (parms.prop23) { parms.eVar23 = parms.prop23; }
        if (parms.prop25) { parms.eVar25 = parms.prop25; }

        for (var i = 26; i <= 50; i++) {
            if (parms["prop" + i]) { parms["eVar" + i] = parms["prop" + i]; }
        }

        // Remove "undefined" entries and create "raw" string for debugging output
        var raw = "";
        for (var p in parms) {
            if (parms[p] == undefined) {
                delete parms[p];
            }
            else {
                raw += "   " + p + ": " + parms[p] + "\n";
            }
        }

        debug("TRACKING  [" + org.healthwise.config.account + "] - Sent to Omniture:\n" + raw);
        if (org.healthwise.config.account) {
            org.healthwise.omniture.track(org.healthwise.config.account, parms, linkLevel);
        }
    }

    // Remove leading, trailing and duplicate spaces
    function spaceTrim(s) {
        return s ? s.replace(/^\s*|\s*$/g, "").replace(/\s\s+/g, " ") : s;
    }

    // Remove leading, trailing and duplicate spaces
    function shortTitle(s) {
        return s ? s.replace(/^\s*|\s*$/g, "").replace(/\s\s+/g, " ").substring(0, 99) : s;
    }

    function isGoToWebCode(term) {
        return /[a-zA-Z]{1}\d{3}/.exec(term) == term;
    }

    function addCsvValue(csv, newValue) {
        if (csv.length == 0) {
            csv = newValue;
        }
        else {
            var csvValues = csv.split(",");
            var valueInArray = false;
            for (var i = 0; i < csvValues.length; i++) {
                if (csvValues[i] == newValue) {
                    valueInArray = true;
                    break;
                }
            }
            if (!valueInArray) {
                csv += "," + newValue;
            }
        }
        return csv;
    }

    // Debugging alerts (if debug=true/popup)
    function debug(msg) {
        if (hwShowAlerts) {
            alert(msg);
        }
    }
};
