/* 
 * Softgarden Tracking Script
 */

function SG_addEventListener(obj, event, handler) {
    if (obj.addEventListener) {
	obj.addEventListener(event, handler, false);
    } else {
	obj.attachEvent('on' + event, handler);
    }
}

function SG_getQueryParameter(name) {
    if (!document.location.search) {
        return null;
    }

    var regex = new RegExp("(&|\\?)" + name + "=([^&#]*)");
    var matches = regex.exec(document.location.search);
    if (!matches || matches.length != 3) {
        return null;
    }

    return matches[2];
}

function SG_getAbsoluteURL(url) {
    // check if this url is already absolute
    if (url.substr(0, 10).indexOf('://') != -1) {
        return url;
    }

    var host = null, path = null;

    // check if a base-tag exists
    var base = document.getElementsByTagName('base');
    if (base && base.length > 0) {
        baseUrl = base[base.length - 1].href;

        // check if the base url contains a protocol
        var protoIdx = baseUrl.substr(0, 10).indexOf('://');
        var pathIdx = baseUrl.indexOf('/', protoIdx + 3);
        if (pathIdx != -1) {
            host = baseUrl.substr(0, pathIdx);
            path = baseUrl.substring(pathIdx, baseUrl.lastIndexOf('/') + 1);
        } else {
            host = baseUrl;
            path = '/';
        }

        if (protoIdx == -1) {
            host = document.location.protocol + '//' + host;
        }
    } else {
        // no base tag exists, use document.location
        host = document.location.protocol + '//' + document.location.host;
        path = document.location.pathname.substring(0, document.location.pathname.lastIndexOf('/') + 1);
    }

    return host + (url.charAt(0) != '/' ? path : '') + url;
}


function SG_tracker() {
    this.TRACKER_URL = (("https:" == document.location.protocol) ? "https://" : "http://")
        + 'tracker.softgarden.de/tracker/';
	
    this.setup = function() {
        var tracker = this;
        var links = document.getElementsByTagName('a');
        for (var i = 0; i < links.length; ++i) {
            var link = links[i];
            SG_addEventListener(link, 'click', function(e) {
                tracker.click(e);
            });
        }
    }

    this.view = function() {
        var url = this.TRACKER_URL + 'view';
        url += '?url=' + encodeURIComponent(document.location.href);

        if (document.referrer) {
            url += '&ref=' + encodeURIComponent(document.referrer);
        }

        var clickId = SG_getQueryParameter('sgClickId');
        if (clickId) {
            // clickId is still url-encoded
            url += '&sgRefClickId=' + clickId;
        }

        var sgref = SG_getQueryParameter('sgRef');
        if (sgref) {
            // clickId is still url-encoded
            url += '&sgRef=' + sgref;
        }

        url += '&tcid=lp-52-1';

        (new Image()).src = url;
    }

    this.click = function(event) {
        var link = event.target ? event.target : event.srcElement;
        var newWindow = link.target != "" || event.ctrlKey;

        var url = this.TRACKER_URL + 'click';
        url += '?origin=' + encodeURIComponent(document.location.href);
        url += '&dest=' + encodeURIComponent(SG_getAbsoluteURL(link.href));
        url += '&tcid=lp-52-1';

        var img = new Image();
        SG_addEventListener(img, 'load', function() {
            if (!newWindow) {
                document.location.href = link.href;
            }
        });
        img.src = url;

        // prevent the default link processing
        if (!newWindow) {
            event.cancelBubble = true;
            event.returnValue = false;
            if (event.preventDefault) {
                event.preventDefault();
            }
        }
    }

    this.setup();
//    this.view();
}

var tracker = new SG_tracker();
tracker.view();

SG_addEventListener(window, 'load', SG_tracker);
