Trials and Tribulations in the Wild World of Web Analytics

See the blog post titled “Waiting is the Hardest Part” for background on this code.

customTrack Script


var customTrack = {};

customTrack.objTrackingVariables = {
    strInteractTrackVars: 'props, eVars, events',
    blnBufferOn: false,
    blnLoadFail: false,
    arrTrackingArray: []
};


customTrack.trackData = (function () {
    //Expanding on this part later
    return function (strTrackType, strTrackValue) {
        if ('undefined' !== typeof(s) && !customTrack.objTrackingVariables.blnBufferOn) {
            s.tl(strTrackType, strTrackValue); //fake s.tl() -- see dummy s_code below
        } else if (!customTrack.objTrackingVariables.blnLoadFail) {
            customTrack.earlyTracking(String(strTrackType), String(strTrackValue));
        }
    };
}());

customTrack.earlyTracking = (function () {

    var objEarlyBuffer = {
        blnDataStored: false,
        blnIntervalOn: false,
        intIntervalCounter: 0,
        arrEarlyArray: [],
        intervalCheckS: null
    };

    function sendEarlyTracking() {
        var intEarlyBufferCounter = -1;
        var arrTrackLink = [];
        while (++intEarlyBufferCounter < objEarlyBuffer.arrEarlyArray.length) {
            arrTrackLink = String(objEarlyBuffer.arrEarlyArray[intEarlyBufferCounter]).split("|");
            customTrack.trackData(String(arrTrackLink[0]), String(arrTrackLink[1]));
        }
        objEarlyBuffer.blnDataStored = false;
        objEarlyBuffer.arrEarlyArray = [];
        objEarlyBuffer.blnIntervalOn = false;
        if ('undefind' !== typeof(customTrack.objTrackingVariables.blnBufferOn)) {
            customTrack.objTrackingVariables.blnBufferOn = false;
        }
        clearInterval(objEarlyBuffer.intervalCheckS);
    }

    function sReady() {
        objEarlyBuffer.intIntervalCounter++;
        if (objEarlyBuffer.blnIntervalOn && objEarlyBuffer.intIntervalCounter > 1200) {
            clearInterval(objEarlyBuffer.intervalCheckS);
            objEarlyBuffer.blnIntervalOn = false;
            customTrack.objOmniVars.blnBufferOn = false;
            customTrack.objOmniVars.blnLoadFail = true;
        }

        if (objEarlyBuffer.blnIntervalOn && 'undefined' !== typeof(s)) {
            clearInterval(objEarlyBuffer.intervalCheckS);
            objEarlyBuffer.blnIntervalOn = false;
            if ('undefind' !== typeof(customTrack.objTrackingVariables.blnBufferOn)) {
                customTrack.objTrackingVariables.blnBufferOn = false;
            }
            sendEarlyTracking();
        } else {
            return false;
        }
    }

    function bufferEarlyTracking(strTmpTrackString) {
        if (!objEarlyBuffer.blnIntervalOn) {
            if ('undefind' !== typeof(customTrack.objTrackingVariables.blnBufferOn)) {
                customTrack.objTrackingVariables.blnBufferOn = false;
            }
            objEarlyBuffer.blnIntervalOn = true;
            objEarlyBuffer.intervalCheckS = setInterval(sReady, 100);
        }
        objEarlyBuffer.blnDataStored = true;
        objEarlyBuffer.arrEarlyArray.push(strTmpTrackString);
        if ('undefined' !== typeof(s) && objEarlyBuffer.arrEarlyArray.length > 0 && !objEarlyBuffer.blnIntervalOn) {
            sendEarlyTracking();
        }
    }

    return function (strTrackType, strTrackValue) {
        bufferEarlyTracking(String(strTrackType) + "|" + String(strTrackValue));
    };
}());

Dummy s_code

        var s = {};
        s.tl = function (a, b) {
            document.trackForm.bufferoutput.value += "Event Type: " + a + " | Event Value: " + b + "\n";
        }
NO COMMENTS

You must be logged in to post a comment.