setEvent(window, 'load', start);
//window.onbeforeunload=saveData;
var sessionID = 1;
function start() {
	
	
	var hash = getCurrentHash().split('~')[0];
	
	if(hash!='replay'){
		sessionID = getCurrentHash().split('~')[0];
		setInterval("saveData()",10000);
		startRecording();
	}else{
		raplayId = getCurrentHash().split('~')[1];
		sendData('http://www.eggplant.nl/save.php/?sessionID='+raplayId+'&get=list&url='+window.location+'');
		startReplay();
	}
}
//var sesId= document.cookie.split('PHP'+'SESS'+'ID=')[1].split(';')[0];
var eventList=[];
function sendData(uri) {
	hd 	= document.getElementsByTagName("head").item(0);
	if(document.getElementById('dFile')){
		hd.removeChild(document.getElementById('dFile'));
	}
	js 	= document.createElement("script");
	js.setAttribute("type", 	"text/javascript");
	js.setAttribute("id", 		"dFile");
	js.setAttribute("charset", 	"utf-8");
	js.setAttribute("src", 		uri+'&idNoCash='+(new Date()).getTime());
	hd.appendChild(js);
}
function saveData() {
	var eventsLog = eventList.join("-");
	sendData('http://www.eggplant.nl/save.php/?sessionID='+sessionID+'&log='+eventsLog+'&url='+window.location);
	eventList = [];
}

var isOpera = (navigator.userAgent.indexOf('Opera') != -1);
var isIE = (!isOpera && navigator.userAgent.indexOf('MSIE') != -1);
var mousePosX = 0;
var mousePosY = 0;
var timer = 0;
var mouse = document.createElement("img");
var lastFocus = null;
var raplayId=null;

function getCurrentHash() {
		var r = window.location.href;
		var i = r.indexOf("#");
		return (i >= 0
			? r.substr(i+1)
			: ""
		);
}







function startReplay(){
	if(!confirm('Wilt u de sessie:'+raplayId+' terug zien?')){return;}
	mouse.setAttribute('src', 'http://www.eggplant.nl/DEV/replay/cursor.png');
	mouse.setAttribute('id', 'mouse');
	mouse.setAttribute('style', 'left'+mousePosX+':px; top:'+mousePosY+'px; position:absolute;');
	document.body.appendChild(mouse);
	
	$c("replay"); 
	for (var i=0; i<eventList.length; i++){
		var triggerTime 	= eventList[i][0];
		var eventType 		= eventList[i][1];
		var extraKey 		= eventList[i][2];
		var elementId 		= eventList[i][3];
		if($(elementId)){var elementTriggert = $(elementId);}

		switch(eventType){
			
			case "mousemove":
				setTimeout("mouseTo("+extraKey+","+elementId+")",triggerTime+"0");
			break;
			
			case "mousedown":
				if($(elementId)){
					if(elementTriggert.nodeName=="INPUT"){
						setTimeout("$('"+elementId+"').focus();",triggerTimt+"0");
					}
					if(elementTriggert.nodeName=="A"){
						setTimeout("location.href='http://www.google.nl/"+elementTriggert.href+"'",triggerTime+"0");
					}
				}
					if(extraKey=="left"){
						setTimeout("mouse.setAttribute('src', 'http://www.eggplant.nl/DEV/replay/mouse-select.png');",triggerTime+"0");
					}else if(extraKey=="right"){
						setTimeout("mouse.setAttribute('src', 'http://www.eggplant.nl/DEV/replay/mouse-select-right.png');",triggerTime+"0");
					}else{
						setTimeout("mouse.setAttribute('src', 'http://www.eggplant.nl/DEV/replay/mouse-select-wheel.png');",triggerTime+"0");
					}
					setTimeout("mouse.setAttribute('src', 'http://www.eggplant.nl/DEV/replay/cursor.png');",(triggerTime+50)+"0");
			break;
			
			case "setKeyInsert":	
				setTimeout("$('"+elementId+"').value+='"+String.fromCharCode(extraKey)+"'",(triggerTime+50)+"0");
			break;
			
			case "keydown":	

			break;
			
			case "blur":	
				setTimeout("$('"+elementId+"').blur()",(triggerTime+50)+"0");
			break;
			
			case "focus":	
				setTimeout("$('"+elementId+"').focus()",(triggerTime+50)+"0");
			break;
			
			case "submit":	
				setTimeout("$('"+elementId+"').submit()",(triggerTime+50)+"0");
			break;
		}
		
	}
}


function mouseTo(x,y){
	mouse.style.left = x+"px";
	mouse.style.top = y+"px";
}

function startRecording(){
	
	$c("start recording");
	setEvent($("replay"), 'click', startReplay);
	setEvent(document, 'mousewheel', 	scrolling);
	setEvent(document, 'keydown', 		keyDown);
	setEvent(document, 'keyup', 		keyUp);
	setEvent(document, 'mousedown', 	mouseDown);
	setEvent(document, 'mouseup', 		mouseUp);
	setEvent(document, 'mousemove', 	mouseMove);
	
	var nodes = document.getElementsByTagName('*');

	for (var i=0; i<nodes.length; i++){
		var node = nodes[i];
		
		if(node.id==''){node.id = "nodeId_"+i;}
		
		if(nodes[i].tagName=='INPUT'){
			setEvent(node, 'focus', setFocus);
			setEvent(node, 'blur', 	setBlur);
			setEvent(node, 'keyup', setKeyIn);
		}
		if(nodes[i].tagName=='TEXTAREA'){
			setEvent(node, 'focus', setFocus);
			setEvent(node, 'blur', 	setBlur);
			setEvent(node, 'keyup', setKeyIn);
		}
		if(nodes[i].tagName=='FORM'){
			setEvent(node, 'submit', submitForm);
		}
	}
	
	setInterval("timer+=1;",10);
}

function setKeyIn(e){
	var on = getTarget(e).id;
	var key = e.keyCode;
	$c(timer+" setKeyIn: on "+on);
	eventList.push([timer,"setKeyInsert",key,on]);
}

function submitForm(e){
	var on = getTarget(e).id;
	$c(timer+" "+e.type+": on "+on);
	eventList.push([timer,e.type,'',on]);
}

function setFocus(e){
	var on = getTarget(e).id;
	$c(timer+" "+e.type+": on "+on);
	eventList.push([timer,e.type,'',on]);
	lastFocus = on;
}

function setBlur(e){
	var on = getTarget(e).id;
	$c(timer+" "+e.type+": on "+on);
	eventList.push([timer,e.type,'',on]);
	lastFocus = null;
}

function keyDown(e) {			if (!e) var e = window.event; 
	var key = e.keyCode;
	var keypref = String.fromCharCode(key);
	var on = getTarget(e).id;
	$c(timer+" "+e.type+":"+key+" on "+on);
	eventList.push([timer,e.type,key,on]);
}

function keyUp(e) {				if (!e) var e = window.event;
	var key = e.keyCode;
	var keypref = String.fromCharCode(key);
	var on = getTarget(e).id;
	$c(timer+" "+e.type+":"+key+" on "+on);
	eventList.push([timer,e.type,key,on]);
}

function mouseDown(e) {			if (!e) var e = window.event; 
	var on = getTarget(e).id;
	$c(timer+" "+e.type+":"+getButtonSide(e)+" on:"+on);
	eventList.push([timer,e.type,getButtonSide(e),on]);
}

function mouseUp(e) {			if (!e) var e = window.event; 
	var on = getTarget(e).id;
	$c(timer+" "+e.type+":"+getButtonSide(e)+" on:"+on);
	eventList.push([timer,e.type,getButtonSide(e),on]);
}

function mouseMove(e) {			if (!e) var e = window.event; 
	setMousePos(e);
	$c(timer+" "+e.type+":"+mousePosX+"x"+mousePosY);
	eventList.push([timer,e.type,mousePosX,mousePosY]);
}

function scrolling(e) {			if (!e) var e = window.event; 
	var scrollAmount=(e.detail?e.detail*-1:e.wheelDelta/40);
	var on = getTarget(e);
	$c(timer+" "+e.type+":"+scrollAmount);
	eventList.push([timer,e.type,scrollAmount,on]);
}

function $(id) 		{	return document.getElementById(id);		}
function $int(e) 	{	return parseInt(e);						}
function $c(val) 	{						}//console.log("%s",val);
function isElement(object) {  	return !!(object && object.nodeType == 1);	}
function isFunction(object) {  	return typeof object === "function";		}


function getTarget(e){
	if (!e) var e = window.event;
	if (e.target) targ = e.target;
		else if (e.srcElement) targ = e.srcElement;
		if (targ.nodeType == 3) // defeat Safari bug
			targ = targ.parentNode;
	
	return targ;
}

function getButtonSide(e){
	if (!e) var e = window.event;
	var rightclick,leftclick;
	if (e.which) rightclick = (e.which == 3);
	else if (e.button) rightclick = (e.button == 2);
	if (e.which) leftclick = (e.which == 1 || e.which == 0);
	
		if(rightclick){
			return "right";
		}else if(leftclick){
			return "left";
		}else{
			return "middle";
		}
}

function setMousePos(e){
	if (e.target) targ = e.target;
	if (!e) var e = window.event;
	if (e.pageX || e.pageY)
	{
		mousePosX = e.pageX;
		mousePosY = e.pageY;
	}
	else if (e.clientX || e.clientY)
	{
		mousePosX = e.clientX;
		mousePosY = e.clientY;
		if (isIE)
		{
			mousePosX += document.body.scrollLeft;
			mousePosY += document.body.scrollTop;
		}
	}
}

function setEvent(element, eventName, callback){
  if(typeof(element) == "string")
    element = document.getElementById(element);
  if(element == null)
    return;
  if(element.addEventListener)  {
    if(eventName == 'mousewheel')
      element.addEventListener('DOMMouseScroll', callback, false);  
    element.addEventListener(eventName, callback, false);
  }
  else if(element.attachEvent)
    element.attachEvent("on" + eventName, callback);
}

function getChildNodes(element) {
        var nodes = element.getElementsByTagName('*'), results = [];
        for (var i = 0, node; node = nodes[i]; i++)
          if (node.tagName !== "!") // Filter out comment nodes.
            results.push(node);
        return results;
}