
function spTracker() {
    // cookie name
    this.cName = "spc";
    this.spSites = {
        'cs' : {
            'http:' : 'http://recp.mkt31.net/cst',
            'https:' : 'https://engage3.silverpop.com/cst'
        },
        'tr' : {
            'http:' : 'http://recp.mkt31.net/cot',
            'https:' : 'https://engage3.silverpop.com/cot'
        }
    };

    /** Extract Silverpor info from the initial campain request. */
    function init(t) {
        var qs = window.location.search;
        if (qs.length > 60) {
            qs = qs.substring(1,qs.length);
            var data = {};
            var params = qs.split("&");
            for (var i=0; i < params.length; i++) {
                if (params[i].indexOf("=") > 0) {
                    var pair = params[i].split("=");
                    if (pair[0] == "spMailingID") {
                       data["m"] = pair[1];
                    } else if (pair[0] == "spUserID") {
                        data["r"] = pair[1];
                    } else if (pair[0] == "spJobID") {
                        data["j"] = pair[1];
                    } else if (pair[0] == "spReportId") {
                        data["rj"] = pair[1];
                    }
                }
            }
            var cVal = "";
            var cnt = 0;
            for (var p in data) {
                if (cVal.length > 0) {
                    cVal = cVal + "#";
                }
                cVal = cVal + p + ":" + data[p];
                cnt++;
            }
            if (cnt == 4) {
                document.cookie=t.cName + "=" + cVal + "; path=/";
                t.data = data;
                return true;
            }
        }
        return false;
    }

    /** Extract Silverpor info from the cookie*/
    function getInfo(t) {
        var cArray = document.cookie.split("; ");
        for (var i=0; i < cArray.length; i++) {
            var c = cArray[i];
            var eqPos = c.indexOf("=");
            if (eqPos > 0) {
                var name = c.substring(0,eqPos);
                if (name == t.cName) {
                    var val = c.substring(eqPos + 1, c.length);
                    var pairs = val.split("#");
                    for (var j=0; j < pairs.length;j++) {
                        var pair = pairs[j].split(":");
                        t.data[pair[0]] = pair[1];
                    }
                    return true;
                }
            }
        }
        return false;
    }

    this.data = {};
    isSet = init(this);
    if (!isSet) {
        isSet = getInfo(this);
    }
    this.isSet = isSet;
}

/** Performs the Silverpop call.
 * @param t tracking call type - one of 'tr' for conversion tracking or 'cs' for click stream;
 * @param qs call specific query string parameters.
 */
spTracker.prototype.track = function(t,qs) {
    for (var p in this.data) {
        qs = p + "=" + this.data[p] + "&" + qs;
    }
    var sheme = document.location.protocol;
    var url = this.spSites[t][sheme];
    url = url + "?" + qs;
    var img = new Image();
    img.src=url;
}

/** Generate Click Stream tag.
 * @param name page name. Detauls to page's title.
 * @param s page URL, Defaults to document.URL.
 */
spTracker.prototype.cs = function(name,s) {
    if (this.isSet) {
        if (!name) {
            name = document.title;
        }
        var qs="name="+escape(name);
        if (!s) {
            s = document.URL;
        }
        s = s.replace(/&/g, "&amp;")
        qs=qs + "&s=" + escape(s);
        this.track('cs',qs);
    }
}

/** Generate Conversion tag.
 * @param a action
 * @param d details
 * @param amt amount
 */
spTracker.prototype.ct = function(a,d,amt) {
    if (this.isSet) {
        if (!d) {
            d = "unknown";
        }
        var qs="d="+escape(d);
        if (!a) {
            a = "unknown";
        }
        qs = qs + "&a="+escape(a);
        if (!amt) {
            amt = "?";
        }
        qs = qs + "&amt="+escape(amt);
        this.track('tr',qs);
    }
}

