/*  Prototype JavaScript framework, version 1.4.0
 *  (c) 2005 Sam Stephenson <sam@conio.net>
 *
 *  Prototype is freely distributable under the terms of an MIT-style license.
 *  For details, see the Prototype web site: http://prototype.conio.net/
 *
 /*--------------------------------------------------------------------------*/

//note: stripped down version of prototype, to be used with clicktracker.iwink.nl

if (!window.ctEvent) {
    var ctEvent = new Object();
}

ctEvent.pointerX = function(event) {
    return event.pageX || (event.clientX +
			   (document.documentElement.scrollLeft || document.body.scrollLeft));
};

ctEvent.pointerY = function(event) {
    return event.pageY || (event.clientY +
			   (document.documentElement.scrollTop || document.body.scrollTop));
};

ctEvent.observers = false;

ctEvent._observeAndCache= function(element, name, observer, useCapture) {
    if (!this.observers) this.observers = [];
    if (element.addEventListener) {
	this.observers.push([element, name, observer, useCapture]);
	element.addEventListener(name, observer, useCapture);
    } else if (element.attachEvent) {
	this.observers.push([element, name, observer, useCapture]);
	element.attachEvent('on' + name, observer);
    }
};

ctEvent.observe = function(element, name, observer, useCapture) {
    useCapture = useCapture || false;

    if (name == 'keypress' &&
        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
         || element.attachEvent))
	name = 'keydown';

    ctEvent._observeAndCache(element, name, observer, useCapture);
};

/**
 Clicktracker specifieke code
 */

function getClicktrackerURL(pagename)
{
    var a = encodeURIComponent(document.location);
    var b = encodeURIComponent(document.title);
    var c = encodeURIComponent(navigator.userAgent);
    var d = encodeURIComponent(navigator.platform);
    var e = encodeURIComponent(navigator.cookieEnabled);
    var f = encodeURIComponent(navigator.cpuClass);
    var g = encodeURIComponent(navigator.browserLanguage);
    var h = encodeURIComponent(document.images.length);
    //var i = encodeURIComponent(document.cookie);
    var i = "";
    var j = encodeURIComponent(document.referrer);
    var k = encodeURIComponent(screen.width+'x'+screen.height+'x'+screen.colorDepth);
    var l = encodeURIComponent(pagename);
    var m = navigator.appName.indexOf("Microsoft")!=-1?encodeURIComponent(document.body.offsetWidth+'x'+document.body.offsetHeight):encodeURIComponent(window.innerWidth+'x'+window.innerHeight);
    var n = "GET";
    //	var n = encodeURIComponent(request.method.toUpperCase());
    var uri = 'http://clicktracker.iwink.nl/in.php?a='+a+'&b='+b+'&c='+c+'&d='+d+'&e='+e+'&f='+f+'&g='+g+'&h='+h+'&i='+i+'&j='+j+'&k='+k+'&l='+l+'&m='+m+'&n='+n;
    return uri;
}

function getChildnodesByTagName(parent,tagname) {
    var ret = new Array();
    for(var i=0; i<parent.childNodes.length;i++) {
	try {
	    if (parent.childNodes[i].nodeName == tagname)
		ret.push(parent.childNodes[i]);
	} catch(err) {
	    // dont show the browser the exception
	}
    }
    return ret;
}

function findElementsByQuery(tag, query) {
    var elements = document.getElementsByTagName(tag);
    var tags = Array();
    var tagIndex = 0;
    for (i = 0; i < elements.length; ++i)
	if (elements[i].className.indexOf(query) != -1)
	    tags[tagIndex++] = elements[i];
    return tags;
}

function findDomPath(obj) {
    try{
	var nm = obj.nodeName;
	var par = obj.parentNode;
	if (nm == 'BODY' || nm == 'HTML') return '/';
	var children = getChildnodesByTagName(par,nm);
	for(var i=0;i<children.length;i++) {
	    if(children[i]==obj) {
		if (res = findDomPath(par)) {
		    return res + '/' + nm + '[' + (i+1) + ']';
		}
	    }
	}
	return '';
    } catch (x) {
	return '';
    }   
}

ctEvent.observe(
    document,
    'mousedown',
    function(evt) {

	var clickcoords = [ctEvent.pointerX(evt), ctEvent.pointerY(evt)];

	var evtTarget = evt.originalTarget || evt.srcElement;
	if (evtTarget == document) return;
	var dompath = '';
	dompath = findDomPath(evtTarget).replace('\/\/' ,'/HTML/BODY/');

	var targetcoords = findPos(evtTarget);
	var dx = clickcoords[0] - targetcoords[0];
	var dy = clickcoords[1] - targetcoords[1];

	var rx = (evtTarget.offsetWidth) ? dx / evtTarget.offsetWidth : 0.5;
	var ry = (evtTarget.offsetHeight) ? dy / evtTarget.offsetHeight : 0.5;

	var timestamp = Date.parse(new Date()) / 1000;

	var hit = '';
	if (experiment == 1) {
	    var abtargets = findElementsByQuery('div', 'abtarget');
	    for (i = 0; i < abtargets.length; i++) {
		var target = abtargets[i];
		targetdom = findDomPath(target).replace('\/\/' ,'/HTML/BODY/');
		if (dompath.startsWith(targetdom))
		    hit = target.className.replace('abselect abtarget ', '');
	    }
	}

	var imgurl = 'http://clicktracker.iwink.nl/storeheat.php?url='+encodeURIComponent(document.location);
	imgurl += '&xpath='+encodeURIComponent(dompath);
	imgurl += '&x='+encodeURIComponent(rx);
	imgurl += '&y='+encodeURIComponent(ry);
	imgurl += '&ts='+encodeURIComponent(timestamp);
	if (experiment == 1 && hit != '')
	    imgurl += '&hit='+encodeURIComponent(hit);

	var heatImg = new Image();
	heatImg.src = imgurl;

    }
);
function findPos(obj) {
    var curleft = curtop = 0;
    if (obj.offsetParent) {
	while (obj.offsetParent) {
	    curleft += obj.offsetLeft;
	    curtop  += obj.offsetTop;
	    obj=obj.offsetParent;
	}
    }
    return [curleft,curtop];
}

var experiment = 0;
function setupExperiment() {
    var abselects = findElementsByQuery('div', 'abselect');
    var ab = '';
    var abtarget = '';
    for (i = 0; i < abselects.length; i++)
	ab = ab + '&' + encodeURIComponent(abselects[i].className.replace('abselect ', '')).replace('%20', '=');
    if(abselects.length > 1) {
	experiment = 1;
	var imgurl = 'http://clicktracker.iwink.nl/store-experiment.php?url=' + encodeURIComponent(document.location) + ab;
	var experimentImg = new Image();
	experimentImg.src = imgurl;
    }
}

setupExperiment();

// actual runtime code
if(document.location.href.match("showheatmap")) {
    document.write('<script type="text/javascript" src="http://clicktracker.iwink.nl/assets/js/heatmap-gen-code.js"></script>');
    document.write('<script type="text/javascript" src="http://clicktracker.iwink.nl/heatmapdata/?' + document.location.search + '&rnd=' + Math.round(1000*Math.random()) + '"></script>');
} else {
    var ctImg = new Image();
    ctImg.src = getClicktrackerURL('');
}
