﻿// Uses elements from http://weblog.scanyours.com/2010/06/23/multi-touch-conversion-tracking-with-google-analytics-part-3-implementation/
var _gaq = _gaq || [];

_gaq.push(function ()
{
    var getSource = function ()
    {
        var regex = /^((\w+):\/\/\/?)?((\w+):?(\w+)?@)?([^\/\?:]+):?(\d+)?(\/?[^\?#;\|]+)?([;\|])?([^\?#]+)?\??([^#]+)?#?(\w*)/;
        var referrer = '(direct)';

        if (document.referrer)
        {
            referrer = document.referrer.replace(regex, '$6');

            // Internal referal (same host)
            if (referrer == window.location.host)
            {
                return false;
            }

            // Google (organic)
            var regex = /[a-z0-9\-\.]+\.google\.[a-zA-Z]{2,3}/i;
            if (regex.test(referrer))
            {

                referrer = 'Google';

                if (document.referrer.indexOf('/aclk?') != -1)//getParam('url').substr(1, 4) == 'aclk')
                {
                    referrer = 'Google_adwords';
                }
            }
        }

        return referrer;
    };

    var getParam = function (p)
    {
        var regex = new RegExp('[\\?&]' + p + '=([^&#]*)');
        var result = regex.exec(document.referrer);

        return (result == null) ? '' : result[1];
    };

    // Track implementation
    var pageTracker = _gat._getTrackerByName();
    var referrer = getSource();

    if (!referrer)
    {
        return false;
    }

    // Calculate Time-To-Conversion
    /*var timeToConversion = 0;
    var currentTouch = Math.round(new Date().getTime() / 1000);

    if (pageTracker._getVisitorCustomVar(1))
    {

    var firstTouch = parseInt(Tracert.readCookie('firstTouch'));

    if (firstTouch)
    {
    timeToConversion = Math.round((currentTouch - firstTouch) / 3600);
    }

    }

    // Save Time-To-Conversion (as String to track zero)
    timeToConversion = String(timeToConversion);
    pageTracker._setCustomVar(3, 'time-to-conversion', timeToConversion, 1);*/

    // Save original source (first-touch)
    if (!pageTracker._getVisitorCustomVar(1))
        pageTracker._setCustomVar(1, 'ref-origin', referrer, 1);

    // Save assisting source 
    var route = pageTracker._getVisitorCustomVar(2) || "";

    if (route.indexOf(referrer) == -1)
    {
        if (route.length > 0)
            route += "~";
        
        route += referrer;

        if (route.length <= 55)
            pageTracker._setCustomVar(2, 'ref-route', route, 1);
    }
});
