/*
SiteTracker 5.1.13
Copyright (C) 2008 Site Intelligence Ltd.
*/

var undefined; // For JS engines that don't support this keyword natively

if (window['siAutoTracer'] == undefined) {
    window.siAutoTracer = true;  // Set to false if you don't want automatic page tracking
}

var siBaseDirectory = "/si";
var siTaggingServer = null; // Send tags to same server as document comes from
var siCookieName = "SIVISITOR";
var siTracerCookieName = "SITRACER";
var siLinkAttribute = "si:link";  // This must either be "si:link" or "id"
var siCookieQPName = "simigvis";
var siCookiePath = "/";
var siCookieTimeout = 315360000000;
var siTracerTimeout = 1000; // ms to wait maximum for tracer to be sent
var siDomainList = new Array(".co.uk", ".com");
var siCentralCookie = false;
var siCentralReqName = "req";
var siCentralRefName = "refer";
var siCentralURL = "";
var siTrackerUrl = "http://si.swinton.co.uk/images/track.gif";


//////////////////////////////////
// Do not edit below this line! //
//////////////////////////////////

var siTrackerVersion = "5.1.13";
var siIsCookieNew = "N";
var siCookieValue = null;
var siExtClickID = "t" + (new Date()).getTime() + "h" + window.history.length;
var siClickedLinkID = "";
var siRefClickID = "";
var siTracerPath = "";
var siTracerQuery = "";
var siSendParams = "";
var siTracerCookieIdx = 0;
var siImageSet = new Array(1);
var siReferrer = document.referrer;
var siRequest = document.URL;
var siPageIDAttrName = "si:pageID";
var siTagType = "";
var siFormQueryLimit = 1200;
var siSentPageTag = false;
var siSyncTracersOutstanding = 0;
var siSyncFinishedAction = null;


function SiInternalGetLinkClickingClosure(anchor) {
    var targetLoc = null;
    var destination = anchor.href;
    var target = anchor.getAttribute("target");
    if (target && target != "_self") {
        if (target == "_top") targetLoc = "top";
        else if (target == "_parent") targetLoc = "parent";
        else {
            if (target == "_new") {
                return function() { window.open(destination); }
            }
            else {
                targetLoc = top.frames[target];
                if (!targetLoc) {
                    return function() { window.open(destination, target); }
                }
            }
        }
    }

    if (targetLoc == null) {
        return function() { location.href = destination; }
    }
    else {
        return function() { targetLoc.location.href = destination; }
    }
}


function SiEncodeString(Input) {
    if (!Input) {
        return "";
    }

    var TransChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    var Output = "";
    for (var i = 0; i < Input.length; i += 3) {
        var NumBytesLeft = Input.length - i;
        var Value = 0;
        Value = (Input.charCodeAt(i) << 16) & 0x00ff0000;
        Value |= (NumBytesLeft > 1) ? (Input.charCodeAt(i + 1) << 8) & 0x0000ff00 : 0;
        Value |= (NumBytesLeft > 2) ? Input.charCodeAt(i + 2) & 0x000000ff : 0;
        Output += TransChars.charAt((Value & 0x00fC0000) >> 18);
        Output += TransChars.charAt((Value & 0x0003f000) >> 12);
        Output += (NumBytesLeft > 1) ? TransChars.charAt((Value & 0x00000fc0) >> 6) : '_';
        Output += (NumBytesLeft > 2) ? TransChars.charAt((Value & 0x0000003f)) : '_';
    }
    return Output;
}

function SiEncodeDetails(Format) {
    var Output = "";
    for (var i = 0; i < Format.length; i++) {
        var Data;
        switch (Format.charAt(i)) {
            case 'r':
                Data = siReferrer;
                break;
            case 'p':
                Data = siRequest;
                break;
            case 'd':
                Data = screen.availWidth + "x" + screen.availHeight + "x" + screen.colorDepth + "." + navigator.javaEnabled();
                if (navigator.plugins) Data += "." + navigator.plugins.length;
                break;
            case 'c':
                Data = siCookieValue;
                break;
            case 'u':
                Data = window.history.length + "." + (Math.random() * 1000) + "." + (new Date()).getTime();
                break;
            case 't':
                Data = siExtClickID;
                break;
            case 'f':
                Data = siTracerPath;
                break;
            case 'q':
                Data = siTracerQuery;
                break;
            case 'g':
                Data = SiCollateTagData();
                break;
            case 'w':
                Data = siIsCookieNew;
                break;
            case 'y':
                Data = siTagType;
                break;
        }
        Output += SiEncodeString(Data) + "*";
    }
    return Output;
}

function SiCollateTagData() {
    var TagData = "";

    TagData += "co=" + window.screen.colorDepth;
    TagData += "&sr=" + window.screen.width + 'x' + window.screen.height;
    today = new Date();
    if (null != today) {
        TagData += "&lt=" + SiFormatDate(today);
    }
    if (navigator.javaEnabled()) {
        TagData += "&jv=1";
    }
    else {
        TagData += "&jv=0";
    }
    TagData += SiCollatePageRules();

    if (document.body) {
        var ThisPageID = document.body.getAttribute(siPageIDAttrName);
        if (ThisPageID) {
            TagData += "&req=" + ThisPageID;
        }
    }

    if (siClickedLinkID && siClickedLinkID.length > 0) {
        TagData += "&rl=" + siClickedLinkID;
    }

    if (siRefClickID.length > 0) {
        TagData += "&rcid=" + siRefClickID;
    }

    return TagData;
}

function SiCollatePageRules() {
    var PageData = "";

    if (window.siIsFrameset) {
        PageData += "&page:fset";
    }
    if (window.siIsMenu) {
        PageData += "&page:menu";
    }
    if (window.siIsExtraFrame) {
        PageData += "&page:x-frame";
    }
    if (window.siIsRedirection) {
        PageData += "&page:redir";
    }
    if (window.siIsPopup) {
        PageData += "&page:popup";
    }

    return PageData;
}

function SiIsMenu() {
    window.siIsMenu = true;
}

function SiIsFrameset() {
    window.siIsFrameset = true;
}

function SiIsExtraFrame() {
    window.siIsExtraFrame = true;
}

function SiIsRedirection() {
    window.siIsRedirection = true;
}

function SiIsPopup() {
    window.siIsPopup = true;
}

function SiSetPageID(id) {
    document.body.setAttribute(siPageIDAttrName, id);
}

function SiFormatDate(date) {
    var output = "";
    output += date.getFullYear() + "";
    output += "-";
    output += leadingZero(date.getMonth() + 1);
    output += "-";
    output += leadingZero(date.getDate());
    output += "T";
    output += leadingZero(date.getHours());
    output += ":";
    output += leadingZero(date.getMinutes());
    output += ":";
    output += leadingZero(date.getSeconds());
    return output;
}

function leadingZero(n) {
    if (n < 1) return "00";
    return (n > 9 ? "" : "0") + n;
}

function SiGetDomain() {
    var DomainValue = null;
    var firstDot;
    var secondDot;
    var lastDot;
    var useHostname = document.location.hostname;
    if (useHostname != null) {
        var arIndex;
        for (arIndex = 0; (arIndex < siDomainList.length) && (DomainValue == null); arIndex++) {
            var tldIndex = useHostname.lastIndexOf(siDomainList[arIndex]);
            if (tldIndex > 0) {
                var nextDot = useHostname.lastIndexOf('.', tldIndex - 1);
                if (nextDot >= 0) {
                    DomainValue = useHostname.substring(nextDot);
                }
                else {
                    DomainValue = "." + useHostname;
                }
            }
        }
    }
    return DomainValue;
}

function SiTrackLink(idVar) {
    try {
        siTagType = "trace";

        if (/string/.test(typeof (idVar))) {
            siClickedLinkID = idVar;
        }
        else {
            siClickedLinkID = idVar.getAttribute(siLinkAttribute);
        }

        SiInternalTrackLink();
        return true;
    } catch (e) { return SiInternalError(e); }
}

function SiInternalTrackLink() {
    SiInternalDoLinkTrack(SiDeferTracer);
}

function SiInternalTrackLinkImmediate() {
    SiInternalDoLinkTrack(SiSyncTracer);
}

function SiInternalTrackLinkPassiveSend() {
    SiInternalDoLinkTrack(SiSendTracer);
}

function SiInternalTrackLinkWait() {
    SiInternalDoLinkTrack(SiSendTracerWithWait);
}

function SiInternalTrackLinkViaSynchronousSend(anchorTag, closure) {
    if (!closure)
        closure = SiInternalGetLinkClickingClosure(anchorTag);

    SiInternalDoLinkTrack(SiSyncTracer, closure, siTracerTimeout);
}

function SiInternalDoLinkTrack(dispatcher, closure, timeout) {
    siRefClickID = siExtClickID;
    siTracerPath = "http://" + document.location.hostname + siBaseDirectory + "/link";
    siTracerQuery = "";

    if (closure) {
        if (timeout) {
            dispatcher("fctgy", "fdtgy", closure, timeout);
        } else {
            dispatcher("fctgy", "fdtgy", closure);
        }
    } else {
        dispatcher("fctgy", "fdtgy");
    }

    siClickedLinkID = "";
    siRefClickID = "";
    siTracerPath = "";
}

function SiTrackEvent(idVar) {
    try {
        siTagType = "trace";
        if (/string/.test(typeof (idVar))) { siClickedLinkID = idVar; }
        else { siClickedLinkID = idVar.getAttribute(siLinkAttribute); }
        SiInternalTrackLinkPassiveSend();
    } catch (e) { SiInternalError(e); }
}

function SiTrackExternalLink(idVar, closure) {
    try {
        siTagType = "trace";
        if (/string/.test(typeof (idVar))) {
            siClickedLinkID = idVar;
        }
        else {
            siClickedLinkID = idVar.getAttribute(siLinkAttribute);
        }
        SiInternalTrackLinkViaSynchronousSend(idVar, closure);
        return false;
    } catch (e) { return SiInternalError(e); }
}

function SiTrackLinkToUntagged(anchorTag) {
    try {
        siClickedLinkID = anchorTag.getAttribute(siLinkAttribute);
        siTagType = "trace";
        SiInternalTrackLinkImmediate();
        siTagType = "page";
        siTracerPath = anchorTag.href;
        if (siTracerPath.indexOf('://') == -1) {
            if (siTracerPath.substring(0, 1) != '/') {
                var lastSlash = document.location.pathname.lastIndexOf('/');
                var currentDirectory = document.location.pathname.substring(0, lastSlash + 1);
                siTracerPath = currentDirectory + siTracerPath;
            }
            if (siTracerPath.substring(0, 2) != '//') {
                siTracerPath = '//' + document.location.hostname + siTracerPath;
            }
            siTracerPath = document.location.protocol + siTracerPath;
        }
        var closure = SiInternalGetLinkClickingClosure(anchorTag);
        SiSyncTracer("fctgy", "fdtgy", closure, siTracerTimeout);
        return false;
    } catch (e) { return SiInternalError(e); }
}

function SiTrackData(query) {
    siTracerPath = "http://" + document.location.hostname + siBaseDirectory + "/data";
    siTracerQuery = query;
    siTagType = "extra";
    SiSendTracer("fqcty", "fqdty");
}

function SiAddTrackParam(name, value) {
    try {
        if (siSendParams != "")
            siSendParams += "&";
        siSendParams += escape(name) + "=" + escape(value);
        if (siSendParams.length >= 512)
            SiSendTrackParams();
    } catch (e) { SiInternalError(e); }
}

function SiSendTrackParams() {
    if (siSendParams != "") {
        SiTrackData(siSendParams);
        siSendParams = "";
    }
}

function SiSetCookie(Name, Value, Timeout) {
    var Expiry = new Date;
    Expiry.setTime(Expiry.getTime() + Timeout);
    var Domain = SiGetDomain();
    var CookieDetails = Name + "=" + Value + ((siCookiePath) ? "; path=" + siCookiePath : "") + ((Domain) ? "; domain=" + Domain : "");
    document.cookie = CookieDetails + "; expires=" + Expiry.toGMTString();
    if (SiGetCookie(Name) != Value) {
        document.cookie = CookieDetails;
    }
}

function SiGetCookie(Name) {
    return SiExtractPart(Name, document.cookie, ";");
}

function SiExtractPart(Name, DataSource, DataEndChar) {
    var Prefix = Name + "=";
    var Value = null;
    var Begin = DataSource.indexOf(Prefix);
    if ((Begin != -1) && (Name.length > 0)) {
        var End = DataSource.indexOf(DataEndChar, Begin);
        if (End == -1) End = DataSource.length;
        Value = DataSource.substring(Begin + Prefix.length, End);
    }
    return Value;
}

function SiDeleteCookie(Name, Path, Domain) {
    var Expiry = new Date();
    Expiry.setTime(Expiry.getTime() - 1);
    if (!Path) Path = siCookiePath;
    if (!Domain) Domain = SiGetDomain();
    var CookieDetails = Name + "=null" + ((Path) ? "; path=" + Path : "") + ((Domain) ? "; domain=" + Domain : "");
    document.cookie = CookieDetails + "; expires=" + Expiry.toGMTString();
}

function SiBuildCookie() {
    var CookieValue = SiExtractPart(siCookieQPName, document.URL, "&");
    if (CookieValue != null) {
        SiSetCookie(siCookieName, CookieValue, siCookieTimeout);
        if (siCentralCookie) {
            var extractedURL = SiExtractPart(siCentralRefName, document.URL, "&");
            if (extractedURL != null) {
                siReferrer = unescape(extractedURL);
            }
            extractedURL = SiExtractPart(siCentralReqName, document.URL, "&");
            if (extractedURL != null) {
                siRequest = unescape(extractedURL);
            }
        }
    }
    else {
        CookieValue = SiGetCookie(siCookieName);
        if (CookieValue == null) {
            CookieValue = SiEncodeDetails("u");
            siIsCookieNew = 'Y';
            SiSetCookie(siCookieName, CookieValue, siCookieTimeout);

            if (siCentralCookie) {
                CookieValue = SiGetCookie(siCookieName);
                if (CookieValue != null) {
                    var centralURL = siCentralURL;
                    if (siCentralURL.indexOf("?") == -1) {
                        centralURL += "?";
                    }
                    else {
                        centralURL += "&";
                    }
                    centralURL += siCentralReqName + "=" + escape(document.URL) + "&" + siCentralRefName + "=" + escape(document.referrer);
                    siAutoTracer = false;
                    document.location = centralURL;
                }
            }
        }
    }
    CookieValue = SiGetCookie(siCookieName);
    return CookieValue;
}

function SiMigrateCookie(link) {
    var CookieValue = SiGetCookie(siCookieName);
    if (CookieValue != null) link.href = link.href + ((link.href.indexOf('?') > 0) ? "&" : "?") + siCookieQPName + "=" + CookieValue;
    return true;
}

function SiMigrateCookieForm(form) {
    var CookieValue = SiGetCookie(siCookieName);
    if (CookieValue != null) {
        if (form.method.toUpperCase() == "GET") {
            try {
                try {
                    var element = document.createElement('<input name="' + siCookieQPName + '" type="hidden" value="' + CookieValue + '" />');
                }
                catch (e) {
                    var element = document.createElement("input");
                    element.setAttribute("name", siCookieQPName);
                    element.setAttribute("type", "hidden");
                    element.setAttribute("value", CookieValue);
                }
                form.appendChild(element);
            }
            catch (andIgnore) { }
        }
        else {
            form.action = form.action + ((form.action.indexOf('?') > 0) ? "&" : "?") + siCookieQPName + "=" + CookieValue;
        }
    }
    return true;
}

function SiProcessTracer(cookieForm, noCookieForm, dispatcher) {
    var tracer;
    if (siCookieValue == null) {
        tracer = siTaggingServer + siTrackerUrl + "?f=" + noCookieForm + "&d=" + SiEncodeDetails(noCookieForm);
    }
    else {
        tracer = siTaggingServer + siTrackerUrl + "?f=" + cookieForm + "&d=" + SiEncodeDetails(cookieForm);
    }

    siTagType = "";
    dispatcher(tracer);
}

function SiSendTracer(cookieForm, noCookieForm) {
    var sendNow = function(tracer) {
        var Tracker = new Image();
        Tracker.src = tracer;
        siImageSet[siImageSet.length] = Tracker;
    }

    SiProcessTracer(cookieForm, noCookieForm, sendNow);
}

function SiSyncTracer(cookieForm, noCookieForm, action, timeout) {
    var send = function(tracer) {
        var Tracker = new Image();
        if (action) {
            siSyncFinishedAction = action;
            if (timeout) {
                var timeoutFn = function() {
                    if (siSyncFinishedAction) {
                        var exec = siSyncFinishedAction;
                        siSyncFinishedAction = null;
                        exec();
                    }
                }
                timeoutFn.toString = function() { return 'var exec = siSyncFinishedAction; siSyncFinishedAction = null; exec();' };
                var runningTimeout = window.setTimeout(timeoutFn, timeout);
            }
        }
        var checkDone = function() {
            if (Tracker.complete && --siSyncTracersOutstanding == 0 && siSyncFinishedAction) {
                if (runningTimeout) window.clearTimeout(runningTimeout);
                var exec = siSyncFinishedAction;
                siSyncFinishedAction = null;
                exec();
            }
        };
        try {
            Tracker.addEventListener ?
      Tracker.addEventListener("load", checkDone, false) :
      Tracker.attachEvent("onreadystatechange", checkDone);
        } catch (e) { }
        ++siSyncTracersOutstanding;
        Tracker.src = tracer;
        siImageSet[siImageSet.length] = Tracker;
    }
    SiProcessTracer(cookieForm, noCookieForm, send)
}

function SiDeferTracer(cookieForm, noCookieForm) {
    if (siTracerCookieIdx < 25) {
        var defer = function(tracer) {
            if (siTracerCookieIdx > 0) {
                if (SiGetCookie(siTracerCookieName + (siTracerCookieIdx - 1)) == null)
                    siTracerCookieIdx = 0;
            }

            var cookieName = siTracerCookieName + siTracerCookieIdx++;
            SiSetCookie(cookieName, tracer, 1800000);
        }
        SiProcessTracer(cookieForm, noCookieForm, defer);
    }
}

function SiTrackFormData(form, list) {
    return SiTrackForm(null, form, list);
}

function SiTrackExternalFormData(form, list, closure) {
    try {
        siTracerPath = "http://" + document.location.hostname + siBaseDirectory + "/form";
        siTagType = "extra";
        if (!closure)
            closure = function() { form.submit() };
        var s = function() { SiSyncTracer("fqcty", "fqdty", closure, siTracerTimeout) };
        SiInternalBuildAndSendFormTracerQuery(form, s, list);
        return false;
    } catch (e) { return SiInternalError(e); }
}

function SiTrackForm(filePath, form, list) {
    try {
        siTracerPath = "http://" + document.location.hostname + (filePath == null ? siBaseDirectory + "/form" : filePath);
        siTagType = "extra";
        SiInternalBuildAndSendFormTracerQuery(form, function() { SiDeferTracer("fqcty", "fqdty") }, list);
        return true;
    } catch (e) { return SiInternalError(e); }
}

function SiActiveTrackForm(form, list) {
    try {
        if (form.elements && (form.elements.length > 0)) {
            form.siFilledFields = [];
            for (var i = 0; i < form.elements.length; i++) {
                var el = form.elements[i];
                if (el.name) {
                    var capture = (list == null);
                    if (list != null) {
                        for (var j = 0; !capture && (j < list.length); j++) {
                            if (el.name == list[j]) capture = true;
                        }
                    }
                    if (capture) {
                        var prev = el.onblur;
                        el.onblur = function() { if (prev) prev(); SiInternalActiveTrackElement(form, this); }
                    }
                }
            }
        }
    }
    catch (e) { SiInternalError(e); }
}

function SiInternalActiveTrackElement(form, el) {
    if (el.name && ((el.type == "radio" || el.type == "checkbox") ? (el.checked != el.defaultChecked) : (el.value != el.defaultValue))) {
        var list = form.siFilledFields;
        for (var i = 0; i < list.length; i++) {
            if (el.name == list[i]) return;
        }
        var attrName = "siform:" + el.name;
        var query = escape(attrName) + "=Y";
        siTracerPath = "http://" + document.location.hostname + siBaseDirectory + "/formfield";
        siTracerQuery = query;
        siTagType = "extra";
        SiSendTracer("fqcty", "fqdty");
        list[list.length] = el.name;
    }
}

function SiInternalBuildAndSendFormTracerQuery(form, send, list) {
    siTracerQuery = "";
    if (form.elements && (form.elements.length > 0)) {
        var doamp = false;
        for (var i = 0; i < form.elements.length; i++) {
            var el = form.elements[i];
            if (el.name) {
                var capture = (list == null);
                if (list != null) {
                    for (var j = 0; !capture && (j < list.length); j++) {
                        if (el.name == list[j]) capture = true;
                    }
                }
                if (capture && (el.type == "radio")) capture = el.checked;
                if (el.type == "file") capture = false;
                if (el.type == "submit") capture = (el == form.siActivatedSubmit);
                if (capture) {
                    var field = escape(el.name) + "=" + ((el.type == "checkbox") ? ((el.checked) ? "true" : "false") : escape(el.value));
                    if (siTracerQuery.length + field.length > siFormQueryLimit) {
                        send();
                        siTracerQuery = "";
                        doamp = false;
                    }
                    if (doamp) siTracerQuery += "&";
                    siTracerQuery += field;
                    doamp = true;
                }
            }
        }
        send();
    }
}

function SiTrackTracer(filePath, queryString) {
    try {
        SiInternalTrackTracer(filePath, queryString, null);
    } catch (e) { SiInternalError(e); }
}

function SiSendAdditionalTracer(filePath, queryString) {
    try {
        SiInternalTrackTracer(filePath, queryString, 'trace');
    } catch (e) { SiInternalError(e); }
}

function SiInternalTrackTracer(filePath, queryString, tagType) {
    if (filePath.substring(0, 1) == '/') {
        filePath = document.location.protocol + "//" + document.location.hostname + filePath;
    }
    siTracerPath = filePath;
    siTracerQuery = queryString;
    siTagType = tagType;
    SiSendTracer("fqcty", "fqdty");
}

function SiTrackPage(pageID) {
    try {
        if (pageID != undefined) {
            if (pageID.indexOf('://') == -1) {
                if (pageID.substring(0, 1) != '/')
                    pageID = '/' + pageID;

                pageID = document.location.protocol + "//" + document.location.hostname + pageID;
            }

            siRequest = pageID.indexOf('?') == -1 ? pageID + window.location.search : pageID + "&" + window.location.search.substring(1);
        }
        siTagType = "page";
        SiSendTracer("pcrtgy", "pdrtgy");
    } catch (e) { SiInternalError(e); }
}

function SiRegisterForms() {
    try {
        var flagSubmitButton = function() { this.form.siActivatedSubmit = this; };
        for (var i = 0; i < document.forms.length; i++) {
            var form = document.forms[i];
            for (var j = 0; j < form.elements.length; j++) {
                if (form.elements[j].type == "submit") {
                    var el = form.elements[j];
                    var prev = el.onclick;
                    if (prev) {
                        (function() {
                            var fn = prev;
                            el.onclick = function() { this.form.siActivatedSubmit = this; fn(); }
                        })();
                    } else {
                        el.onclick = flagSubmitButton;
                    }
                }
            }
        }
    } catch (e) { SiInternalError(e); }
}

function SiInitPage() {
    try {
        if (siTaggingServer == null) {
            siTaggingServer = document.location.protocol + "//" + document.location.hostname + ":" + document.location.port;
        }
        else if (siTaggingServer.substring(0, 4) != "http") {
            siTaggingServer = document.location.protocol + "//" + siTaggingServer + ":" + document.location.port;
        }
        siCookieValue = SiBuildCookie();
        SiSendDeferredTracers();
    } catch (e) { SiInternalError(e); }
}

function SiSendDeferredTracers() {
    var i = 0;
    var cookieName = siTracerCookieName + i++;
    var tracer = SiGetCookie(cookieName);
    while (tracer) {
        var Tracker = new Image();
        Tracker.src = tracer;
        siImageSet[siImageSet.length] = Tracker;

        SiDeleteCookie(cookieName);

        cookieName = siTracerCookieName + i++;
        tracer = SiGetCookie(cookieName);
    }
}

function SiNewPageContext() {
    siExtClickID = "t" + (new Date()).getTime() + "h" + window.history.length;
}

function SiInternalError(e) {
    return true;
}

SiInitPage();

if (window.siAutoTracer) {
    SiTrackPage();
}
