// Nitobi Recorder


function robotRecorder() {

	this.uid = Math.random().toString().replace('.', '').replace('0', '');
	this.absMouseX = 0; // the raw MouseX
	this.absMouseY = 0; // raw MouseY
	this.mouseX = 0; // computed MouseX
	this.mouseY = 0; // computed
	this.firstX = 0;
	this.firstY = 0;
	this.firstRecord = false;
	this.scrollLeft = 0; // actual
	this.scrollTop = 0; // actual
	this.ver = '0.99';
	this.sessionId = 0;
	this.userIdentifier = 0;
	this.progress = 0;
	this.isSavedOK = false;
	this.sentReferrer = false;
	this.clickX = 0;this.clickY = 0; this.clickS = 0; this.clickerT = null;
	this.isPaused = false;
	this.progressTotal = 0;
	this.progressIterator = 0;
	
	this.DOMScrapeTimer = new Date();
	
	this.grabbedScreenCoords = false; // have we called the screen coords method before? (expensive)
	this.screenInfo = null; // for screen coords
		
	this.cookiesOK = true;
	if (document.cookie){}else{this.cookiesOK = false;}	
	
	this.recordInterval = 70;
	this.maxInterval = 1000;
	this.intervalTimer = null;
	this.lastTime = null;
	this.transmitAfter = 100; // how many records to transmit after, and how many to transmit at once
	
	// ****************** Data Queue *****************
	this.playbackQueue = Array();
	this.playbackIndex = 0;
	this.dataQueue = Array();
	this.lastMX = 0;
	this.lastMY = 0;
	this.frameType = null;
	this.ignoreMouse = false;
	// **********************************************

	// ****************** Splash *****************
	this.rrSplash = null;
	this.rrPover = null;
	// **********************************************
	
	// ***************** Object Array *************************
		this.objArray = Array();
		this.objCounter = 0;
		this.objCount = Array();
		this.objIndex = Array();
		this.listboxAppearTime = 500; // how long to show listboxes for.. in miliseconds
		this.textFieldStartEdit = Array(); //associative array of text field timings
		this.processedArray = Array();
		this.FormText = new Array();
		this.currentTextField = 0;
		this.saveOK = true;
		this.cancelredirect = false;
	// ********************************************************

	// ***************** JSON Stuff *****************
	this.scriptCounter = 0;
	this.scriptId = '';
	this.headLoc = null;
	this.noCacheIE = '';
	this.scriptObj = Array();
	this.fullUrl = '';
	
	// ****************** API URLs, rename in deply ************ 
	this.apiRecordUrl = g_rrHost+'/sessions/record';
	this.apiPlaybackUrl = g_rrHost+'/sessions/playback';

	// **********************************************
	
	// ****************** Browser Stuff ******************
	this.ie = false;
	this.ie7 = false;
	this.firefox = false;
	this.opera = false;
	var agent = navigator.userAgent.toLowerCase(); 	
	if (agent.indexOf("opera") != -1) {this.opera = true;}
	if(agent.indexOf("firefox")!=-1){ this.firefox = true; }
	if (agent.indexOf("msie") != -1) {this.ie = true;}
	if (agent.indexOf("msie 7.0") != -1) {this.ie7 = true;}		
	// ***************************************************

	// *************** Toolbar Stuff ********************

	this.ToolTimer = null;

	this.playStatus = true;
	this.continuation = false;

	
	// ***************************************************
	
	// *************** Screen Stuff ********************
	this.screenWidth = 0;
	this.screenHeight = 0;
	
	
	// ***************************************************
	
	// *************** Mouse Stuff ********************
	this.MouseTimer = null;
	this.MouseIcon = null;
	this.ignoreMouseTimer = null;
	this.MouseOfx = 0;
	this.MouseOfy = 0;	
	this.targetX = 0;
	this.targetY = 0;
	this.targetTime = 0;
	this.xdist = 0;
	this.ydist = 0;
	this.directionAngle = 0;
	this.MouseImages = new Array();
	this.animating = false;
		// Mouse Image Array - arrow
		this.MouseImages['arrow.png'] = Array();
		this.MouseImages['arrow.png'][0] = -2;
		this.MouseImages['arrow.png'][1] = -4;
		// Mouse Image Array - arrow click
		this.MouseImages['arrow_click.png'] = Array();
		this.MouseImages['arrow_click.png'][0] = -2;
		this.MouseImages['arrow_click.png'][1] = -4;
		// Mouse Image Array - type
		this.MouseImages['type.png'] = Array();
		this.MouseImages['type.png'][0] = -15;
		this.MouseImages['type.png'][1] = -15;	
		// Mouse Image Array - wait
		this.MouseImages['wait.png'] = Array();
		this.MouseImages['wait.png'][0] = -15;
		this.MouseImages['wait.png'][1] = -15;	
		// *******************		
	// ***********************************************
	
	// *************** Timer Stuff ********************
	this.iterateTimer = null;
	this.iterationTime = null;
	this.targetTime = null;
	
	// ***********************************************
	this.scriptsBuffer = new Array();
	this.isCallingRemote = false;
	this.throttle = 0.15;
}

robotRecorder.prototype.setScrolling = function() {
	var x,y;
	x = g_rr.mouseX;
	y = g_rr.mouseY;

	var sc = g_rr.getScrollPositions();

	if ((y-sc.scrollTop) < (sc.clientHeight*0.2)) {
		try {window.scrollTo(0,y-(sc.clientHeight*0.2));} catch(e) {}
		try {
			document.body.scrollTop = y-(sc.clientHeight*0.2);
		} catch(e) {}
		try {
			document.documentElement.scrollTop = y-(sc.clientHeight*0.2);
		} catch(e) {}		
	}

	if ((y-sc.scrollTop) > (sc.clientHeight*0.8)) {
		try {window.scrollTo(0,y-(sc.clientHeight*0.8));} catch(e) {}	
		try {
			document.body.scrollTop = y-(sc.clientHeight*0.8);
		} catch(e) {}
		try {
			document.documentElement.scrollTop = y-(sc.clientHeight*0.8);
		} catch(e) {}		
	}
	

	setTimeout("g_rr.setScrolling()", 20);
}

robotRecorder.prototype.addObjectEvent = function(obj, eventName, fnReference) {
	if (window.addEventListener) 
	{ // Non-IE browsers
		try {
		obj.addEventListener(eventName, fnReference, false);					
		} catch(e) {}
	} 
	else if (window.attachEvent) 
	{ // IE 6+
		try {
			obj.attachEvent('on' + eventName, fnReference);	
		} catch(e) {}
	}
}


robotRecorder.prototype.addForm = function(obj) {
	var myformObj = obj;


	g_rr.addObjectEvent(obj, "submit", function() { g_rr.logInfo('fs', myformObj.name);});
	//myformObj.onsubmit = function() {alert('test'); return false;};
		
}

robotRecorder.prototype.addFormObject = function(obj) {
	var myformObj = obj;
    g_rr.addObjectEvent(obj, "click", function() { g_rr.logInfo('fe', obj.id + ',ck');  if (g_rr.setupDOMObjs(true)) {g_rr.logInfo('dom', '0,0');}});
	if ((obj.type == 'select-multiple')){
		g_rr.addObjectEvent(obj, "change", function() { g_rr.logInfo('fe', myformObj.id + ',' + myformObj.selectedIndex );  if (g_rr.setupDOMObjs(true)) {g_rr.logInfo('dom', '0,0');}});
	}
	if ((obj.type == 'select-one')){
		g_rr.addObjectEvent(obj, "change", function() { g_rr.logInfoEarlier('le', myformObj.id + ',' + this.selectedIndex, g_rr.listboxAppearTime); g_rr.logInfo('fe', myformObj.id + ',' + myformObj.selectedIndex );  if (g_rr.setupDOMObjs(true)) {g_rr.logInfo('dom', '0,0');}});
	}	
	if ((obj.type == 'text') || (obj.type == 'textarea') || (obj.type == 'password')){
		g_rr.addObjectEvent(obj, "focus", function() { g_rr.maxInterval = 500; g_rr.recordState(); g_rr.textFieldStartEdit[myformObj.id] = new Date();  if (g_rr.setupDOMObjs(true)) {g_rr.logInfo('dom', '0,0');} g_rr.saveOK = false;});
		g_rr.addObjectEvent(obj, "blur", function() { g_rr.maxInterval = 5000; var currenttime = new Date(); g_rr.logInfoEarlier('te', myformObj.id + ',' + encodeURI(myformObj.value.replace(/,/g, '$cm$')) + '$_$' + (currenttime-g_rr.textFieldStartEdit[myformObj.id]), (currenttime-g_rr.textFieldStartEdit[myformObj.id])); if (g_rr.setupDOMObjs(true)) {g_rr.logInfo('dom', '0,0');} g_rr.saveOK = true;});
	}
	
}

robotRecorder.prototype.returnFormField = function(fieldID) {
	
	var myfield;
	for(var j=0; j<document.forms.length; j++) {
		for(var i=0; i<document.forms[j].elements.length; i++)
		{
			if (document.forms[j].elements[i].id == fieldID) {
				myfield = document.forms[j].elements[i];
			}
		}
	}
	return myfield;
}

robotRecorder.prototype.runFormTyper = function() {
	var processOK = false;
	try {
		if (g_rr.FormText[g_rr.currentTextField][0] == true) {
			if (g_rr.FormText.length >= g_rr.currentTextField) {
				g_rr.currentTextField++;
			}
		}	
		var bla = g_rr.FormText[g_rr.currentTextField][0];
		
		processOK = true;
	} catch(e) {}
	
	if (processOK) {
		
		if (g_rr.playStatus) {
		if (g_rr.FormText[g_rr.currentTextField][5] == false) {
			g_rr.FormText[g_rr.currentTextField][4] = g_rr.returnFormField(g_rr.FormText[g_rr.currentTextField][3]).value;	
			g_rr.FormText[g_rr.currentTextField][5] = true;
			if (g_rr.FormText[g_rr.currentTextField][4].length > g_rr.FormText[g_rr.currentTextField][1].length) {
				g_rr.returnFormField(g_rr.FormText[g_rr.currentTextField][3]).value = "";
				g_rr.FormText[g_rr.currentTextField][4] = "";
			} else {
				if (g_rr.FormText[g_rr.currentTextField][4] == g_rr.left(g_rr.FormText[g_rr.currentTextField][1], g_rr.FormText[g_rr.currentTextField][4].length)) {
					g_rr.FormText[g_rr.currentTextField][1] = g_rr.right(g_rr.FormText[g_rr.currentTextField][1], g_rr.FormText[g_rr.currentTextField][1].length-g_rr.FormText[g_rr.currentTextField][4].length);
					
				} else {
				g_rr.returnFormField(g_rr.FormText[g_rr.currentTextField][3]).value = "";
				g_rr.FormText[g_rr.currentTextField][4] = "";				
				}
			}
			g_rr.FormText[g_rr.currentTextField][6] = g_rr.FormText[g_rr.currentTextField][2] / (g_rr.FormText[g_rr.currentTextField][1].length+0.0001);
			if (g_rr.FormText[g_rr.currentTextField][6] > 1000)
				g_rr.FormText[g_rr.currentTextField][6] = 1000;
			g_rr.FormText[g_rr.currentTextField][6] = g_rr.FormText[g_rr.currentTextField][6]*0.6;
		}
		
		if (g_rr.FormText[g_rr.currentTextField][0] == false) {
			if (g_rr.FormText[g_rr.currentTextField][1].length > 0) {
				var myField = g_rr.returnFormField(g_rr.FormText[g_rr.currentTextField][3]);
				
				var totalCharCount = g_rr.FormText[g_rr.currentTextField][1].length - g_rr.FormText[g_rr.currentTextField][4].length;
						
				myField.value += g_rr.left(g_rr.FormText[g_rr.currentTextField][1],1);
				g_rr.FormText[g_rr.currentTextField][1] = g_rr.right(g_rr.FormText[g_rr.currentTextField][1],g_rr.FormText[g_rr.currentTextField][1].length-1);
				
				} else {
					g_rr.FormText[g_rr.currentTextField][0] = true;
				}
		}
		setTimeout("g_rr.runFormTyper();", g_rr.FormText[g_rr.currentTextField][6]);
	} else {
		setTimeout("g_rr.runFormTyper();", 500);
	}
	} else {
			// what to do if pause is on
			setTimeout("g_rr.runFormTyper();", 500);
	}
}

robotRecorder.prototype.cueTextEvent = function(textstr, typetime, formfield) {
	g_rr.FormText[g_rr.FormText.length] = Array(7);
	g_rr.FormText[g_rr.FormText.length-1][0] = false;
	g_rr.FormText[g_rr.FormText.length-1][1] = textstr;
	g_rr.FormText[g_rr.FormText.length-1][2] = typetime;
	g_rr.FormText[g_rr.FormText.length-1][3] = formfield;
	g_rr.FormText[g_rr.FormText.length-1][4] = "";
	g_rr.FormText[g_rr.FormText.length-1][5] = false;
	g_rr.FormText[g_rr.FormText.length-1][6] = 0; // time per char - calced later
}


robotRecorder.prototype.recreateFormEvent = function(objid, evt) {

	for(var j=0; j<document.forms.length; j++) {
		for(var i=0; i<document.forms[j].elements.length; i++)
		{
			if (document.forms[j].elements[i].id == objid) {
				if ((document.forms[j].elements[i].type == 'radio') || (document.forms[j].elements[i].type == 'checkbox')) {
					if (evt == 'click') {
						document.forms[j].elements[i].click();
						
					}
				}
				if ((document.forms[j].elements[i].type == 'select-one') || (document.forms[j].elements[i].type == 'select-multiple')) {
					g_rr.ignoreMouse = true;
					clearTimeout(g_rr.ignoreMouseTimer);
					g_rr.ignoreMouseTimer = setTimeout("g_rr.ignoreMouse = false", 3500);
					if (isNaN(parseInt(evt)) == false) {
					document.forms[j].elements[i].selectedIndex = parseInt(evt);
					
					}
						
					
				}				
			}
		}
		
	}
	//alert(objid);

}

robotRecorder.prototype.addObject = function(objid) {
	
 	if (g_rr.objArray[objid] == null) {
		g_rr.objArray[objid] = Array();
		try {
		g_rr.addObjectEvent(document.getElementById(objid), "mouseover", function() { try {g_rr.logInfo('me', objid + ',mov');  if (g_rr.setupDOMObjs(true)) {g_rr.logInfo('dom', '0,0');}} catch(e) {}});
		g_rr.addObjectEvent(document.getElementById(objid), "mouseout", function() {try {g_rr.logInfo('me', objid + ',mout');  if (g_rr.setupDOMObjs(true)) {g_rr.logInfo('dom', '0,0');}} catch(e){}});
		g_rr.addObjectEvent(document.getElementById(objid), "mousedown", function() {g_rr.logInfo('me', objid + ',mown');  if (g_rr.setupDOMObjs(true)) {g_rr.logInfo('dom', '0,0');}});
		g_rr.addObjectEvent(document.getElementById(objid), "mouseup", function() {g_rr.logInfo('me', objid + ',mup');  if (g_rr.setupDOMObjs(true)) {g_rr.logInfo('dom', '0,0');}});		
		g_rr.addObjectEvent(document.getElementById(objid), "click", function() {g_rr.logInfo('me', objid + ',ck'); if (g_rr.setupDOMObjs(true)) {g_rr.logInfo('dom', '0,0');} });		
		} catch(e) {}
	}
 
}

robotRecorder.prototype.setupFormFields = function(setRecordEvents) {
	// Set up Form Fields
	var ftype = '';
	var FoundObjects = false;
	//debugger;
	for(var j=0; j<document.forms.length; j++) {
		if ((document.forms[j].name == null) || (document.forms[j].name.length == 0))
		{
			ftype = 'formhform';
			if ((g_rr.objCount[ftype] == null))
				g_rr.objCount[ftype] = 0;
			g_rr.objCount[ftype]++;			
			document.forms[j].name = ftype + '_' + g_rr.objCount[ftype];
		}
		if (setRecordEvents) {
			if (g_rr.objIndex[document.forms[j].name] == null) {
			
				g_rr.addForm(document.forms[j]);
				g_rr.objIndex[document.forms[j].name] = true;
				FoundObjects = true;

			}
			
		}		
		for(var i=0; i<document.forms[j].elements.length; i++)
		{
			if (document.forms[j].elements[i].id == "submit")
				document.forms[j].elements[i].id = "submit1";
			if (document.forms[j].elements[i].name == "submit")
				document.forms[j].elements[i].name = "submit1";				
			if ((document.forms[j].elements[i].id == null) || (document.forms[j].elements[i].id.length == 0))
			{
				ftype = 'form' + document.forms[j].elements[i].type;
				if ((g_rr.objCount[ftype] == null))
					g_rr.objCount[ftype] = 0;
				g_rr.objCount[ftype]++;			
				document.forms[j].elements[i].id = ftype + '_' + g_rr.objCount[ftype];
			}
			if (setRecordEvents) {
				if (g_rr.objIndex[document.forms[j].elements[i].id] == null) {
					g_rr.addFormObject(document.forms[j].elements[i]);
					g_rr.objIndex[document.forms[j].elements[i].id] = true;
					FoundObjects = true;

				}
				
			}			
			
			
		}	
	}

	return FoundObjects;
	// **********************
}

robotRecorder.prototype.setupDOMObjs = function(setRecordEvents) {
	// Set up Form Fields
	var tdif,vtime;

	vtime = new Date();
	tdif = (parseFloat(vtime.getTime())-parseFloat(g_rr.DOMScrapeTimer.getTime()));	
	if (tdif > 700) {
	//console.log(tdif);
	g_rr.DOMScrapeTimer = new Date();
	


	
	
	var FoundObjects = false;

	var indexableobjs = Array('a', 'div', 'span', 'li', 'ul', 'img');
	for (var s = 0; s < indexableobjs.length; s++){
		var doc = document.getElementsByTagName(indexableobjs[s]);
		
		for (var i = 0; i < doc.length; i++){
			//doc[i]
			
			if ((doc[i].id == null) || (doc[i].id == '')) {
				if ((g_rr.objCount[indexableobjs[s]] == null))
					g_rr.objCount[indexableobjs[s]] = 0;
				g_rr.objCount[indexableobjs[s]]++;
				doc[i].id = indexableobjs[s] + '_' + g_rr.objCount[indexableobjs[s]];
			}

			//console.log(doc[i].id);
			if (setRecordEvents) {
				if (g_rr.objIndex[doc[i].id] == null) {
					g_rr.addObject(doc[i].id);
					g_rr.objIndex[doc[i].id] = true;
					FoundObjects = true;
				}
				
			} else {
				if ((indexableobjs[s] == 'a') && (doc[i].href.length > 1)) {
					doc[i].href = '#';
				}				
			}
		}
		doc = null;
	}		
	var FoundFormItems = g_rr.setupFormFields(setRecordEvents);
	
	if ((FoundObjects == false) && (FoundFormItems)) {
		FoundObjects = true;
	}
	} else {
		FoundObjects = false;
	}
	return FoundObjects;
	// **********************
}

robotRecorder.prototype.setSkipGfx = function(onOff) {
var mI = document.getElementById('RRSkipInactive').style;
	if (onOff) {
		mI.visibility = 'visible';
	} else {
		mI.visibility = 'hidden';
	}
}

robotRecorder.prototype.setPauseGfx = function(onOff) {
	g_rr.setSkipGfx(false);
	var mI = document.getElementById('RRBigIndicator').style;
	var mIp = document.getElementById('RRPlayPause');
	var gfxd=g_rrHost+'/images/replay/';
	if (onOff) {
		mI.visibility = 'visible';
		mIp.src = gfxd + 'pausebut.png';
		mIp.onmouseup = function() {this.src=gfxd + 'pausebut_hover.png'};
		mIp.onmouseout = function() {this.src=gfxd + 'pausebut.png'};
		mIp.onmouseover = function() {this.src=gfxd + 'pausebut_hover.png'};
		mIp.onmousedown = function() {this.src=gfxd + 'pausebut.png'; g_rr.iframeFunct('pause');};		
	} else {
		mI.visibility = 'hidden';
		mIp.src = gfxd + 'playbut.png';
		mIp.onmouseup = function() {this.src=gfxd + 'playbut_hover.png'};
		mIp.onmouseout = function() {this.src=gfxd + 'playbut.png'};
		mIp.onmouseover = function() {this.src=gfxd + 'playbut_hover.png'};
		mIp.onmousedown = function() {this.src=gfxd + 'playbut.png'; g_rr.iframeFunct('pause');};

	}
	
}

robotRecorder.prototype.iframeFunct = function(myfunct) {
	var d = document; var j = g_rr;
	var f = d.frames ? d.frames['RRFrame'] : d.getElementById('_RRFrame');
	var p = f.window || f.contentWindow.window;
	if (myfunct == 'restart') {
	//debugger;
		f.src = window.location.toString().replace('&rrbegin=true', '');
	}
	if (myfunct == 'pause') {
	p.g_rr.pause();
	if (!j.isPaused) {
		j.isPaused = true;
		j.setPauseGfx(false);
	} else {
		j.isPaused = false;
		j.setPauseGfx(true);	
	}
	}
	//debugger;
}

robotRecorder.prototype.setupTopBar = function() {
	var topBar, buttonString, sepString;
	topBar = document.getElementById('RRtopBar');
	var imgf=g_rrHost+'/images/';
	buttonString = '<img id=idstring style="margin-left:marMeasuurepx; cursor:pointer;" src="' + imgf + 'replay/oImage" onmouseover="this.src=\'' + imgf + 'replay/aImage\'" onmouseout="this.src=\'' + imgf + 'replay/oImage\'" onmousedown="this.src=\'' + imgf + 'replay/oImage\'; mdown" onmouseup="this.src=\'' + imgf + 'replay/aImage\'">';
	sepString = '<img  style="margin-left:10px;" src="' + imgf + 'replay/separator.png">';
	topBar.innerHTML = '';
	var myStr = '';
	myStr += '<table cellpadding=0 cellspacing=0 style="position:absolute;top:0px;left:0px;"><tr><td>';
	myStr += buttonString.replace(/oImage/g, 'rrbut.png').replace(/aImage/g, 'rrbut_hover.png').replace('marMeasuure', '10').replace('mdown', '').replace('idstring', 'RRControl');
	myStr += sepString;
	myStr += buttonString.replace(/oImage/g, 'backbut.png').replace(/aImage/g, 'backbut_hover.png').replace('marMeasuure', '10').replace('mdown', 'g_rr.progress = 0; g_rr.progressIterator = 0; g_rr.setProgress(0);g_rr.iframeFunct(\'restart\');').replace('idstring', 'RRRewind');
	myStr += buttonString.replace(/oImage/g, 'pausebut.png').replace(/aImage/g, 'pausebut_hover.png').replace('marMeasuure', '0').replace('mdown', 'g_rr.iframeFunct(\'pause\');').replace('idstring', 'RRPlayPause');
	myStr += sepString;
	myStr += "</td><td width=215>";
	myStr += '<img src="' + imgf + 'replay/prog_left.png" width=3 height=46 style="margin-left:10px;"><img src="' + imgf + 'replay/prog_mid.png" width=0 height=46 id=RRProgMidl><img src="' + imgf + 'replay/prog_under.png" width=190 height=46 id=RRProgMidr><img src="' + imgf + 'replay/prog_right_under.png" width=4 height=46 id=RRProgMidc>';
	myStr += "</td><td width=93 valign=top id=RRpercentProg style=\"height:46px; overflow:hidden;font-family:trebuchet ms, georgia, verdana; font-size:34px; font-weight:bold; color:#666666;\">0%";
	myStr += "</td><td><td valign=top style=\"padding-top:5px;\"><img id=\"RRBigIndicator\" src=" + imgf + "bigindicator.gif width=32 height=32></td><td>";	
	myStr += sepString;
	myStr+="</td><td valign=top id=RRMetaDataTd style=\"line-height:13px;padding-left:10px;padding-top:1px;color:#333333;font-family:trebuchet ms, georgia, verdana;font-size:14px;overflow-y:hidden;vertical-align:middle;text-align:right;\">";
	myStr += "</td></tr></table>";
	
	topBar.innerHTML = myStr;	
}

robotRecorder.prototype.drawClick = function() {
	var t = g_rr;
	t.clickS += 0.1;
	if (t.clickS > 1) { t.clickS = 1;}
	var mys = t.clickS*50;
	var myO = document.getElementById('RRClickMovie');
	myO.style.left = (t.clickX-(mys/2)) + 'px';
	myO.style.top = (t.clickY-(mys/2)) + 'px';
	myO.style.width = mys + 'px'; myO.style.height = mys + 'px';
	myO.style.opacity = 1-t.clickS;
	myO.style.filter = 'alpha(opacity=' + ((1-t.clickS)*100) + ')'; 
	if (t.clickS < 1) {
	t.clickerT = setTimeout('g_rr.drawClick()', 30);} else {
		myO.style.left = '-1000px'; myO.style.top = '-1000px';
	}
}

robotRecorder.prototype.runClick = function(x,y) {
	var t = g_rr;
	clearTimeout(t.clickerT);
	t.clickX = x;t.clickY = y; t.clickS = 0.1;
	g_rr.drawClick();
}

robotRecorder.prototype.thisMovie = function(movieName) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
        return window[movieName]
    }
    else {
        return document[movieName]
    }
}

robotRecorder.prototype.createClickMovie = function() {
	var clickMovie = document.createElement('div');
	clickMovie.setAttribute('id', '_RRClickMovie');

	clickMovie.innerHTML = '<img id=RRClickMovie src="'+g_rrHost+'/images/ring.gif" style="position:absolute;top:-2000px;left:-2000px;width:50px;height:50px;">';
	document.getElementsByTagName('body').item(0).appendChild(clickMovie);
}
robotRecorder.prototype.incProgress = function(incAmount) {
	g_rr.progressIterator+=incAmount;
	g_rr.setProgress(g_rr.progressIterator/g_rr.progressTotal);
}


robotRecorder.prototype.setProgress = function(newProg) {
	clearTimeout(g_rr.iterateTimer);
	if (newProg > 0.97) {
		newProg = 1.0;
		}
	if (g_rr.progress < 1) {
	if (g_rr.progress < newProg) {
		g_rr.progress = g_rr.progress+(newProg - g_rr.progress)/3;
	}
	if (g_rr.progress > 0.97) {
		g_rr.progress = 1.0;
		newWidth=190;
		document.getElementById('RRProgMidc').src=g_rrHost+'/images/replay/prog_right.png';
		
	} else {
	var newWidth = Math.round(190 * g_rr.progress);}
	document.getElementById('RRProgMidl').style.width = newWidth + "px";
	document.getElementById('RRProgMidr').style.width = 190-newWidth + "px";
	document.getElementById('RRpercentProg').innerHTML = Math.round(g_rr.progress*100) + '%';
	g_rr.iterateTimer = setTimeout("g_rr.setProgress(" + newProg + ")", 100);
	}
}

robotRecorder.prototype.detectModeAndBegin = function() { 
	clearTimeout(g_rr.ToolTimer);
	var allowRecord = true; // if no cookies than this will prevent recording.
	var myLoc = window.location.toString();
	var myCID = g_rr.getCookie('robotreplayid');
	var myCEID = g_rr.getCookie('robotreplayeid');
	var rr_lastUrl = g_rr.getCookie('rr_url');
	var rr_recBlock = g_rr.getCookie('rr_lastblock');
	var rr_recBlockHash = g_rr.getCookie('rr_lastblockhash');	
	var useCookies = false;
	var replayID = '';
	var replayEID = '';
	if (myLoc.indexOf('rrbegin=true') > -1) {
		g_rr.progressTotal = Number(g_rr.getQueryStringVar('rrsestime'));
		document.body.style.padding = '0px'; document.body.style.margin = '0px';
		document.body.innerHTML = '<div id=RRSkipInactive style="position:absolute; left:215px; top: 8px; visibility:hidden; background:#FFFFFF; font-family:Trebuchet ms, georgia, verdana; font-size:10px;color:#000000;padding:5px;z-index:100000;opacity:0.5; filter:alpha(opacity=50);">Skipping Inactive..</div><div id=RRtopBar style="text-align:left; background-image: url('+g_rrHost+'/images/replay/greyback.png); background-repeat: repeat-x; width:100%; height:46px; margin:0px; padding:0px; border:0px;">&nbsp;</div><iframe id="_RRFrame" name="RRFrame" style="position:absolute; top:46px; left:0px;" width="100%" height="' + g_rr.getQueryStringVar('rrheight') + '" frameborder=0 src="' + myLoc.replace('&rrbegin=true', '') + '"></iframe>';
		g_rr.setupTopBar();
	} else {
	g_rr.setupDOMObjs(false);
	g_rr.setupFormFields(false);
	try {
	if (myLoc.indexOf('robotreplay=') == -1) {
		if (myCID.length > 0) {
			myLoc = "fdsfs?robotreplay=" + myCID + "&robotreplayeid=" + myCEID;
			replayID = myCID;
			replayEID = myCEID;
			useCookies = true;
			g_rr.continuation = true;
		}
	}
	} catch(e) {}

	//alert('test');
	if (myLoc.indexOf('robotreplay=') > -1) {
		
		if (useCookies == false) {
		replayID = g_rr.getQueryStringVar('robotreplay');
		if (myLoc.indexOf('robotreplayeid=') > -1) {
			replayEID = g_rr.getQueryStringVar('robotreplayeid');
			g_rr.continuation = true;
		}}
		//alert('yes' + replayID + ':' + replayEID + '[' + myLoc + ']');
		g_rr.iterationTime = new Date();
		g_rr.setupDOMObjs(false);
		
		g_rr.setupMouse();
		g_rr.setupSplash();

		window.onbeforeunload = rrclearCookies;
		g_rr.createClickMovie();
		g_rr.downloadPageData(replayID, replayEID);
		g_rr.sessionId = parseInt(replayID);
		//alert('playing back: ' + replayID);
	
	} else {
        var sid = g_rr.getCookie('rr_sid');
        if (sid==null){
            // if the session has not been created then throttle the client.
            var throt=Math.random();
			//throt = 0;
            if (throt > this.throttle)
			{
                return;
			}
        }else{
            // if the session has been created then reset the session id to timeout in 10 mins
            g_rr.setCookie('rr_sid', sid, 10, '/', '', '');
            g_rr.sessionId = sid;
        }

		if (g_rr.getCookie('robotreplay')==null){
			g_rr.userIdentifier=Math.random();
			g_rr.setCookie('robotreplay', g_rr.userIdentifier, 10, '/', '', '');
			if (g_rr.getCookie('robotreplay') == null) { allowRecord = false;}
			//console.log('setting cookie. starting from scratch: ' + );
		}else{
			g_rr.userIdentifier=g_rr.getCookie('robotreplay');
			g_rr.delCookie('robotreplay', '/', '');
			g_rr.setCookie('robotreplay', g_rr.userIdentifier, 10, '/', '', '');
			//console.log('Continuing: ' + g_rr.getCookie('robotreplay'));
		}
		g_rr.delCookie('robotreplayid','/','');
		g_rr.delCookie('robotreplayeid','/','');
		if (allowRecord) {g_rr.record();}
		if (rr_lastUrl != null){
			
			setTimeout("g_rr.savePrevPageData('" + rr_lastUrl + "','" + rr_recBlock + "', " + rr_recBlockHash + ")", 1600);
			
		}
		setTimeout("g_rr.setupDOMObjs(true);", 1600);
	}
	}

}

function rrclearCookies() {
	try {
		g_rr.delCookie('robotreplayid', '/', '');
		g_rr.delCookie('robotreplayeid', '/', '');	
	} catch(e) {}
}

robotRecorder.prototype.downloadPageData = function(sid,eid) {
	g_rr.JSONscriptRequest(this.apiPlaybackUrl + '?action=pb&ver=' + this.ver + '&sid=' + sid + '&pbi=0&robotreplayeid=' + eid, '');
}

robotRecorder.prototype.bufferInstruction = function(insType, insDelay, insDetails, insExtraDetails) {
	var InsID = g_rr.playbackQueue.length;
	g_rr.playbackQueue[InsID] = Array(4);
	g_rr.playbackQueue[InsID][0] = insType;
	g_rr.playbackQueue[InsID][1] = insDelay;
	g_rr.playbackQueue[InsID][2] = insDetails;
	g_rr.playbackQueue[InsID][3] = insExtraDetails;
	
	if (insType == 'ms') {
	var mytarget = null;
	}
}

robotRecorder.prototype.beginPlayback = function() {
	var firstMouseIndex = g_rr.returnNextFrame('ms', -1);
	try {
	var insarray = g_rr.playbackQueue[firstMouseIndex][2].split(',');
	

	g_rr.setMouseXY(insarray[0],insarray[1]);
	g_rr.mouseX = insarray[0];
	g_rr.mouseY = insarray[1];	
	} catch(e) {
		g_rr.setMouseXY(0,0);
		g_rr.mouseX = 0;
		g_rr.mouseY = 0;
		g_rr.delCookie('robotreplayid', '/', '');
		g_rr.delCookie('robotreplayeid', '/', '');	
		g_rr.pause();

		parent.window.g_rr.setPauseGfx(false);
		g_rr.runPover();		
	}
	this.lastTime = new Date();
	
	g_rr.playbackFrame();
	g_rr.iterateFrame();
	g_rr.runFormTyper();
	g_rr.setPlaybackState();
	g_rr.setScrolling();
}

robotRecorder.prototype.returnNextFrame = function(frameType, startIndex) {
	for (var i=startIndex+1;i<g_rr.playbackQueue.length;i++) {
		if (g_rr.playbackQueue[i][0] == frameType) {
			return i;
			break;
		}
	}
}

robotRecorder.prototype.iterateFrame = function() {
	
	if (g_rr.playStatus) {
	if (g_rr.targetTime != null) {
	var newx,newy = 0;

	var currentTime = new Date();
	var tDiff = currentTime.getTime() - g_rr.lastTime.getTime() + 1;
	var totalDiff = currentTime.getTime() - g_rr.iterationTime.getTime();
	var totalElapsedPercent = totalDiff/g_rr.targetTime;
	var timeElapsedPercent = tDiff/g_rr.targetTime;
	
	var xIt = (timeElapsedPercent*g_rr.xdist);
	var yIt = (timeElapsedPercent*g_rr.ydist);
	var velocity = Math.sqrt((xIt*xIt)+(yIt*yIt))/((1+timeElapsedPercent)*22);

	var targetAngle = g_rr.returnAngle(g_rr.mouseX,g_rr.mouseY,g_rr.targetX, g_rr.targetY);
	
	if (Math.abs(targetAngle-g_rr.directionAngle) > 100) {
	
	if (targetAngle < g_rr.directionAngle) {
		g_rr.directionAngle -= 360; } else {
		g_rr.directionAngle += 360;
		}
		g_rr.directionAngle = targetAngle;

	} else {
		g_rr.directionAngle += (targetAngle-g_rr.directionAngle)/((1+timeElapsedPercent)*4);
	}

	var newdirection = g_rr.rotateCoords(10,0,g_rr.directionAngle);

	if (velocity > 1)
		velocity = 0.9*velocity;
	
	g_rr.mouseX = parseFloat(g_rr.mouseX) + parseFloat(newdirection.x*velocity);
	g_rr.mouseY = parseFloat(g_rr.mouseY) + parseFloat(newdirection.y*velocity);
	
	var velocitymultiplier = 0;
	
	if (velocity > 2) {
		velocitymultiplier = 40*(velocity/5);
	}

	if ((Math.abs(g_rr.targetX-g_rr.mouseX) < ((totalElapsedPercent*14)+velocitymultiplier)) && (Math.abs(g_rr.targetY-g_rr.mouseY) < ((totalElapsedPercent*14)+velocitymultiplier)) && (totalElapsedPercent > 1.0)) {
		clearTimeout(g_rr.iterateTimer);
		g_rr.playbackFrame();
	}
	
	try {
	
	g_rr.MouseIcon.style.left = g_rr.mouseX + 'px';
	g_rr.MouseIcon.style.top = g_rr.mouseY + 'px';
	
	} catch(e) {
		alert(g_rr.targetTime);
	}
	
	if ((g_rr.mouseX < 1) || (g_rr.mouseY < 1) ){
		g_rr.MouseIcon.style.visibility = 'hidden';
		if (g_rr.mouseX < 1)
			g_rr.mouseX = 1;
		if (g_rr.mouseY < 1)
			g_rr.mouseY = 1;	
	} else {
		g_rr.MouseIcon.style.visibility = 'visible';
	}
	}
	g_rr.lastTime = currentTime;	} else {
	g_rr.lastTime = new Date();
	}
	setTimeout("g_rr.iterateFrame()", 25);
}

robotRecorder.prototype.left = function(str, n){
	if (n <= 0)
	    return "";
	else if (n > String(str).length)
	    return str;
	else
	    return String(str).substring(0,n);
}
robotRecorder.prototype.right = function(str, n){
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}

robotRecorder.prototype.playbackFrame = function() {
	var insarray;
	var tempnum = 0;
	
	if (g_rr.processedArray[g_rr.playbackIndex] == null) {} else {
		for(var i=g_rr.playbackIndex; i<g_rr.playbackQueue.length; i++)
		{
			if (g_rr.processedArray[i] == null) {
				tempnum = i;
				break;
			}
		}
		g_rr.playbackIndex = i;
	}
	g_rr.processedArray[g_rr.playbackIndex] = true;
	
	
	try {
	var frametype = g_rr.playbackQueue[g_rr.playbackIndex][0];
	} catch(e) {}
	try {
	var nextframetype = g_rr.playbackQueue[g_rr.playbackIndex+1][0];
	} catch(e) {}
	
	
	
	g_rr.frameType = frametype;
	if (frametype == 'nexturl') {
		
		

		if (g_rr.playbackQueue[g_rr.playbackIndex][2].indexOf("?") > 0) {
			if (g_rr.cancelredirect == false) {

			document.location=g_rr.playbackQueue[g_rr.playbackIndex][2] + '&robotreplay=' + g_rr.sessionId + '&robotreplayeid=' + g_rr.playbackQueue[g_rr.playbackIndex][3]; 

			}
		} else {
		if (g_rr.cancelredirect == false) {

		document.location=g_rr.playbackQueue[g_rr.playbackIndex][2] + '?robotreplay=' + g_rr.sessionId + '&robotreplayeid=' + g_rr.playbackQueue[g_rr.playbackIndex][3]; 

		}
		}
	}
	
	if (frametype == 'dom') {
		g_rr.setupDOMObjs(false);
	}
	
	if (frametype == 'end') {
		g_rr.delCookie('robotreplayid', '/', '');
		g_rr.delCookie('robotreplayeid', '/', '');	
		g_rr.pause();
		parent.window.g_rr.setPauseGfx(false);
		g_rr.runPover();
		//alert('End of Data');
	}	

	if (frametype == 'le') {
		insarray = g_rr.playbackQueue[g_rr.playbackIndex][2].split(',');
		setTimeout(function() {g_rr.openDropDown(g_rr.listboxAppearTime, insarray[0]);}, 1);
		//
	}
	
	if (frametype == 'fs') {
		// FORM SUBMIT

		g_rr.cancelredirect = true;

		var myaction = document.forms[g_rr.playbackQueue[g_rr.playbackIndex][2]].action;
		
		if (myaction.indexOf("?") > 0) {
			myaction=myaction + '&robotreplay=' + g_rr.sessionId + '&robotreplayeid=' + g_rr.playbackQueue[g_rr.playbackQueue.length-1][3];
		} else {
		myaction=myaction + '?robotreplay=' + g_rr.sessionId + '&robotreplayeid=' + g_rr.playbackQueue[g_rr.playbackQueue.length-1][3];
		}		

		document.forms[g_rr.playbackQueue[g_rr.playbackIndex][2]].action = myaction;
		document.forms[g_rr.playbackQueue[g_rr.playbackIndex][2]].submit();
		
		g_rr.cancelredirect = true;
	
	}
	
	if (frametype == 'ms') {

		// it's a mouse movement
		g_rr.animating = true;
		
		var nextMouseIndex = g_rr.returnNextFrame('ms', g_rr.playbackIndex);
		g_rr.targetTime = 0;
		for (var i=g_rr.playbackIndex;i<nextMouseIndex;i++) {
			g_rr.targetTime += g_rr.playbackQueue[i][1];
		}
		try {
		document.getElementById('rrtarget'+(g_rr.playbackIndex-1)).style.visibility = 'hidden'; } catch(e) {}

		insarray = g_rr.playbackQueue[g_rr.playbackIndex][2].split(',');
	
		if ((insarray[0] == 0) || (g_rr.ignoreMouse)) {
			insarray[0] = g_rr.targetX;
		}
		if ((insarray[1] == 0) || (g_rr.ignoreMouse)) {
			insarray[1] = g_rr.targetY;
		}		
		var newTime = g_rr.playbackQueue[g_rr.playbackIndex][1];
		if ((newTime > 900) && (g_rr.targetX == insarray[0]) && (g_rr.targetY == insarray[1])) {
			//ok fast forward
			newTime = 100;
			parent.window.g_rr.setSkipGfx(true);
			
		} else {
			parent.window.g_rr.setSkipGfx(false);
		}

		g_rr.targetX = insarray[0];
		g_rr.targetY = insarray[1];

		g_rr.xdist = parseInt(g_rr.targetX-g_rr.mouseX);
		g_rr.ydist = parseInt(g_rr.targetY-g_rr.mouseY);
		g_rr.iterationTime = new Date();
		g_rr.lastTime = new Date();
		g_rr.targetTime = newTime;
		if (g_rr.targetTime == 0)
			g_rr.targetTime = 100;

	}
	
	if (frametype == 'md') {
		insarray = g_rr.playbackQueue[g_rr.playbackIndex][2].split(',');
		if (!g_rr.ignoreMouse) {
		g_rr.runClick(insarray[0],insarray[1]);}
	}
	
	if (frametype == 'me') {
	
		insarray = g_rr.playbackQueue[g_rr.playbackIndex][2].split(',');
		
			
		if (g_rr.ie) {
			try {
				document.getElementById(insarray[0]).fireEvent('on' + insarray[1]);
				} catch(e) {}
		} else {
			try {
			  var evt = document.createEvent("MouseEvents");
			  evt.initMouseEvent(insarray[1], true, true, window,
			    0, 0, 0, 0, 0, false, false, false, false, 0, null);
			  var cb = document.getElementById(insarray[0]); 
			  var canceled = !cb.dispatchEvent(evt);			
			  } catch(e) {}
			
		}

		try {
			setTimeout("g_rr.playbackFrame();", g_rr.playbackQueue[g_rr.playbackIndex+1][1]);
		} catch(e) {}
	
	}	

	if (frametype == 'fe') {
		insarray = g_rr.playbackQueue[g_rr.playbackIndex][2].split(',');
        g_rr.recreateFormEvent(insarray[0], insarray[1]);
		try {
			setTimeout("g_rr.playbackFrame();", g_rr.playbackQueue[g_rr.playbackIndex+1][1]);
		} catch(e) {}
	}

	if (frametype == 'te') {
		insarray = g_rr.playbackQueue[g_rr.playbackIndex][2].split(',');
		g_rr.cueTextEvent(insarray[1].split("$_$")[0],insarray[1].split("$_$")[1], insarray[0]);

		try {
			setTimeout("g_rr.playbackFrame();", g_rr.playbackQueue[g_rr.playbackIndex+1][1]);
		} catch(e) {}
	}		
	
	g_rr.playbackIndex++;
	try {
	parent.window.g_rr.incProgress(g_rr.playbackQueue[g_rr.playbackIndex][1]);
	} catch(e) {g_rr.playbackIndex++;}
}

robotRecorder.prototype.getQueryStringVar = function(variable) {
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  for (var i=0;i<vars.length;i++) {
    var pair = vars[i].split("=");
    if (pair[0] == variable) {
      return pair[1];
    }
  } 
}

robotRecorder.prototype.setMouseXY = function(x,y) {

	g_rr.MouseIcon.style.left = (parseFloat(x) + parseFloat(g_rr.MouseOfx)) + "px";
	g_rr.MouseIcon.style.top = (parseFloat(y) + parseFloat(g_rr.MouseOfy)) + "px";

	
}
	
robotRecorder.prototype.setMouseIcon = function(iconname) {
	g_rr.MouseOfx = g_rr.MouseImages[iconname][0];
	g_rr.MouseOfy = g_rr.MouseImages[iconname][1];
	if ((g_rr.ie) && (!g_rr.ie7)) {
		this.MouseIcon.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\''+g_rrHost+'/images/' + iconname + '\', sizingMethod=\'crop\');'; } else {
	this.MouseIcon.style.backgroundImage = 'url('+g_rrHost+'/images/' + iconname + ')';}
}

robotRecorder.prototype.setupScreen = function(x,y) {
	g_rr.screenWidth = parseInt(x);
	g_rr.screenHeight = parseInt(y);
}


robotRecorder.prototype.setupSplash = function() {
	this.rrSplash = document.createElement('div');
	this.rrSplash.innerHTML = '';
	this.rrSplash.setAttribute('id', 'rrSplash');
	document.getElementsByTagName('body').item(0).appendChild(this.rrSplash);	
	this.rrSplash.style.position = "absolute";
	this.rrSplash.style.width = "363px";
	this.rrSplash.style.height = "264px";
	this.rrSplash.style.zIndex = 1999999;
	this.rrSplash.style.display = 'none';	
	this.rrSplash.style.cursor = 'pointer';
	if ((g_rr.ie) && (!g_rr.ie7)) {
		this.rrSplash.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\''+g_rrHost+'/images/replaysplash.png\', sizingMethod=\'crop\');'; } else {
		this.rrSplash.style.backgroundImage = 'url('+g_rrHost+'/images/replaysplash.png)';
	}	

	if (window.addEventListener) 
	{ // Non-IE browsers
		this.rrSplash.addEventListener("click", function() {g_rr.hideSplash()}, false);					
	} 
	else if (window.attachEvent) 
	{ // IE 6+
		this.rrSplash.attachEvent('onclick', function() {g_rr.hideSplash()});	
	}	
	
	this.rrPover = document.createElement('div');
	this.rrPover.innerHTML = '';
	this.rrPover.setAttribute('id', 'rrPoveri');
	document.getElementsByTagName('body').item(0).appendChild(this.rrPover);	
	this.rrPover.style.position = "absolute";
	this.rrPover.style.width = "363px";
	this.rrPover.style.height = "264px";
	this.rrPover.style.zIndex = 2999999;
	this.rrPover.style.display = 'none';	
	this.rrPover.style.cursor = 'pointer';
	if ((g_rr.ie) && (!g_rr.ie7)) {
		this.rrPover.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\''+g_rrHost+'/images/pover.png\', sizingMethod=\'crop\');'; } else {
		this.rrPover.style.backgroundImage = 'url('+g_rrHost+'/images/pover.png)';
	}	

	if (window.addEventListener) 
	{ // Non-IE browsers
		this.rrPover.addEventListener("click", function() {g_rr.hideOver()}, false);					
	} 
	else if (window.attachEvent) 
	{ // IE 6+
		this.rrPover.attachEvent('onclick', function() {g_rr.hideOver()});	
	}	
	
	
}

robotRecorder.prototype.runSplash = function() {
	var sc = g_rr.getScrollPositions();
	g_rr.rrSplash.style.left = ((g_rr.screenWidth/2)-181.5) + 'px';
	g_rr.rrSplash.style.top = ((g_rr.screenHeight/2)-132+parseInt(sc.scrollTop)) + 'px';
	g_rr.rrSplash.style.display = 'block';
}

robotRecorder.prototype.runPover = function() {
var sc = g_rr.getScrollPositions();
	g_rr.rrPover.style.left = ((g_rr.screenWidth/2)-181.5) + 'px';
	g_rr.rrPover.style.top = ((g_rr.screenHeight/2)-132+parseInt(sc.scrollTop)) + 'px';
	g_rr.rrPover.style.display = 'block';	
}

robotRecorder.prototype.hideOver = function() {
	g_rr.rrPover.style.display = 'none';
}

robotRecorder.prototype.hideSplash = function() {
	g_rr.rrSplash.style.display = 'none';
}


robotRecorder.prototype.setupMouse = function() {
    var mouse = document.getElementById('rrMouseIcon_' + this.uid);
    if (mouse == null) {
    	this.MouseIcon = document.createElement('div');
    	this.MouseIcon.innerHTML = '';
    	this.MouseIcon.setAttribute('id', 'rrMouseIcon_' + this.uid);
    	document.getElementsByTagName('body').item(0).appendChild(this.MouseIcon);	
    	this.MouseIcon.style.position = "absolute";
    	// Initially put the mouse off the page.
    	this.MouseIcon.style.top = "-1000px";
    	this.MouseIcon.style.left = "-1000px";
    	this.MouseIcon.style.width = "30px";
    	this.MouseIcon.style.height = "40px";
    	this.MouseIcon.style.zIndex = 1999990;
    	this.MouseIcon.style.display = 'block';
    	this.MouseIcon.style.visibility = 'visible';
    	this.MouseIcon.style.backgroundRepeat = 'no-repeat';
    	this.setMouseIcon('arrow.png');
    } else {
        this.MouseIcon = mouse;
    }
}


robotRecorder.prototype.pause = function() {
	if (g_rr.playStatus) {
		// pause
		g_rr.playStatus = false;
	} else {
		// play
		g_rr.playStatus = true;
	}
}


robotRecorder.prototype.record = function() {
	this.attachWindowEvent('mousemove', g_rr.handleMouse);
	this.attachWindowEvent('scroll', g_rr.handleMouse);
	this.attachWindowEvent('mousedown', function(){g_rr.logInfo('md', g_rr.mouseX + ',' + g_rr.mouseY);});
	var ie7 = false;
	var agent = navigator.userAgent.toLowerCase(); 	
	if (agent.indexOf("msie 7.0") != -1) {ie7 = true;}	
	if (ie7) { 
		window.onscroll = g_rr.handleMouse;
	}
	
	//this.attachWindowEvent('beforeunload', unloadtest);
	window.onbeforeunload = g_rr.closeOutRecord;
	this.setupDOMObjs(true);
	
	this.lastTime = new Date();
	this.intervalTimer = setTimeout(function(){g_rr.recordState()}, this.recordInterval);

}

robotRecorder.prototype.stopRecord = function(msg) {

	clearTimeout(this.intervalTimer);
	try {
	window.onbeforeunload = '';
	if (g_rr.ie) {
		window.detachEvent('onscroll', g_rr.handleMouse);
		document.detachEvent('onmousemove', g_rr.handleMouse);
	} else {
		window.removeEventListener('scroll', g_rr.handleMouse);
		window.removeEventListener('mousemove', g_rr.handleMouse);
	} } catch(e) {}
}

robotRecorder.prototype.attachWindowEvent = function(eventName, fnReference) {

if (g_rr.ie) {
try {
document.attachEvent('on' + eventName, fnReference);	
} catch(e) {
	//alert(e);
}
if (eventName == "scroll") {
window.attachEvent('on' + eventName, fnReference);
}
//document.attachEvent('on' + eventName, function(){alert('event fired');});
//alert(eventName);
} else {

window.addEventListener(eventName, fnReference, false);
}
	
}

robotRecorder.prototype.handleMouse = function(event) {
	var sP = g_rr.getScroll();
	try {
	if (event.clientX == null) {
		g_rr.mouseX = g_rr.absMouseX + sP.scrollLeft;
		g_rr.mouseY = g_rr.absMouseY + sP.scrollTop;
		
	} else {
		g_rr.absMouseX = event.clientX;
		g_rr.absMouseY = event.clientY;
		g_rr.mouseX = event.clientX + sP.scrollLeft;
		g_rr.mouseY = event.clientY + sP.scrollTop;
		g_rr.scrollLeft = sP.scrollLeft;
		g_rr.scrollTop = sP.scrollTop;			
	}} catch(e){
		g_rr.mouseX = g_rr.absMouseX + sP.scrollLeft;
		g_rr.mouseY = g_rr.absMouseY + sP.scrollTop;	
	}
	if (g_rr.mouseX > sP.bodyWidth) {
		g_rr.mouseX = sP.bodyWidth;
	}
	if (g_rr.mouseY > sP.bodyHeight) {
		g_rr.mouseY = sP.bodyHeight;
	}
	if (g_rr.firstX == 0) {
		g_rr.firstX = g_rr.mouseX;
		g_rr.firstY = g_rr.mouseY;
	}


}

robotRecorder.prototype.getScroll = function() {
	var ResultScrollTop, ResultScrollLeft = 0;
    try {
    	if ((this.opera == false) && (document.documentElement.scrollTop > 0)) {
    		ResultScrollTop = document.documentElement.scrollTop;
    		ResultScrollLeft = document.documentElement.scrollLeft;	
    	} else {
    		ResultScrollTop = document.body.scrollTop;
    		ResultScrollLeft = document.body.scrollLeft;
    	}
    
    	if (((ResultScrollTop == 0) && (document.documentElement.scrollTop > 0)) ||  ((ResultScrollLeft == 0) && (document.documentElement.scrollLeft > 0))){
    		ResultScrollTop = document.documentElement.scrollTop;
    		ResultScrollLeft = document.documentElement.scrollLeft;
    		}
    } catch(e) {}
	return {scrollLeft:ResultScrollLeft,scrollTop:ResultScrollTop}
}

robotRecorder.prototype.timeElapsed = function() {

	var currentTime = new Date();
	var tDiff = 0;
	if (this.lastTime)
	{
		var tDiff = currentTime.getTime() - this.lastTime.getTime();
	}	
	return tDiff;
}

robotRecorder.prototype.logInfo = function(stateType, stateInfo) {
	if (!this.firstRecord) {
		this.firstRecord = true;
		this.logInfo('ms', this.firstX + ',' + this.firstY);
	}	
		
	var currentTime = new Date();
	try {
		var tDiff = currentTime.getTime() - this.lastTime.getTime();
	} catch(e) {
		var tDiff = 0;
	}
	
	this.lastTime = currentTime;
	var action = stateType + ':' + stateInfo;
	
	if (!this.lastLog || (action != this.lastLog.action))
	{
		if (this.lastLog)
			this.dataQueue[this.dataQueue.length] = this.lastLog.time + '|'+ this.lastLog.action + '$.$';
		if (stateType == "ms")
			this.lastLog = {action: action, time: tDiff}
		else
		{
			this.dataQueue[this.dataQueue.length] = tDiff + '|' + stateType + ':' + stateInfo + '$.$';
			this.lastLog = null;
			if (this.dataQueue.length > this.transmitAfter) {
			 if (g_rr.saveOK == true)
				this.compileAndTransmitLog();
			}
		}	
	}
	else if (this.lastLog)
	{
		this.lastLog.time += tDiff
	}
	else
	{
		this.lastLog = { action: action, time: tDiff };
	}

}


robotRecorder.prototype.logInfoEarlier = function(stateType, stateInfo, timeAgo) {
	g_rr.recordState();

	var insertWhere = 0;
	var timeCount = 0;
	
	timeAgo = 1.0*timeAgo;
	
	var currentTime = new Date();
	try {
		var tDiff = currentTime.getTime() - this.lastTime.getTime();
	} catch(e) {
		var tDiff = 0;
	}	
	
	timeCount = tDiff;
	
	for(var i = 0; i < 100; i++){
		if (((g_rr.dataQueue.length-i-1) >= 0) && (insertWhere == 0)) {
			timeCount += parseInt(g_rr.dataQueue[g_rr.dataQueue.length-i-1].split('|')[0]);
			if (timeCount >= timeAgo) {
				
				insertWhere = g_rr.dataQueue.length-i;
				break;
			}
		}	
	}
	
	var arrayHalf1 = g_rr.dataQueue.slice(0, insertWhere);
	var arrayHalf2 = g_rr.dataQueue.slice(insertWhere, g_rr.dataQueue.length);
	g_rr.dataQueue.concat(arrayHalf1,arrayHalf2);

	var currentTime = new Date();
	try {
		var tDiff = currentTime.getTime() - g_rr.lastTime.getTime();
	} catch(e) {
		var tDiff = 0;
	}
	tDiff = (timeCount-timeAgo);
	
	if (tDiff < 0)
		tDiff = 0;
		
	g_rr.dataQueue[insertWhere] = tDiff + '|' + stateType + ':' + stateInfo + '$.$';
	
	//this.lastTime = currentTime;
	
	if (g_rr.dataQueue.length > g_rr.transmitAfter) {
	 if (g_rr.saveOK == true)
		g_rr.compileAndTransmitLog();
	}

}

robotRecorder.prototype.recordState = function() {
	if ((this.mouseX != this.lastMX) || (this.mouseY != this.lastMY) || (this.timeElapsed() > this.maxInterval)) {	
		this.logInfo('ms', this.mouseX + ',' + this.mouseY);
		this.lastMX = this.mouseX; this.lastMY = this.mouseY;
	}
	this.intervalTimer = setTimeout(function(){g_rr.recordState()}, this.recordInterval);
}

robotRecorder.prototype.openDropDown = function(timedelay, ddid) {
	var dropDown;
	var uid = Math.random() + 'uid';
	
	var agent = navigator.userAgent.toLowerCase(); 
	var opera = false;		
	if (agent.indexOf("opera") == 0) {opera = true;}		
		var ObjCoords;

		if (opera) {ObjCoords = g_rr.getCoordsOpera(document.getElementById(ddid));
		} else{
		//debugger;
		ObjCoords = g_rr.getCoords(document.getElementById(ddid));}		

	
	dropDown = document.createElement('div');
	dropDown.setAttribute('id', 'ntbDropDownContainer_' + uid);
	document.getElementsByTagName('body').item(0).appendChild(dropDown);
	dropDown.style.position = 'absolute';
	dropDown.style.display = 'block';
	dropDown.style.top = (parseInt(ObjCoords.y) + parseInt(document.getElementById(ddid).offsetHeight) - 1) + 'px';
	dropDown.style.left = (ObjCoords.x) +  'px';
	dropDown.style.width = '200px';
	dropDown.style.height = '20px';
	dropDown.style.border = '1px solid #7F9DB9';
	//dropDown.style.borderLeft = '1px solid #00000';
	//dropDown.style.borderRight = '1px solid #00000';
	//dropDown.style.borderBottom = '1px solid #00000';
	dropDown.style.fontFamily = 'verdana, arial, tahoma';
	dropDown.style.fontSize = '12px';
	dropDown.style.backgroundColor = '#ffffff';
	dropDown.style.padding = '3px';
	dropDown.innerHTML = 'Selecting item..';
	var TimeoutString = "document.getElementsByTagName('body').item(0).removeChild(document.getElementById('ntbDropDownContainer_" + uid + "'));";
	setTimeout(TimeoutString, timedelay);

}

robotRecorder.prototype.closeOutRecord = function () {
	
	try {
	g_rr.compileAndTransmitLog(true, true);
	var d,e;
	var stime = new Date();
	var vtime,tdif;
	for (var x = 0; x < 3999999; x++)
	{
		vtime = new Date();
		tdif = (parseFloat(vtime.getTime())-parseFloat(stime.getTime()));
		if (tdif > 400) {
		
			break;
			}
		d = Math.sin(x);
		e = Math.cos(x);
		
		
	}
	} catch(e) {}
}

robotRecorder.prototype.savePrevPageData = function(rrUrl, rrData, rrDataHash){
	
	//console.log(rrUrl + '\n' + rrData);
	g_rr.JSONscriptRequestChunk(g_rr.apiRecordUrl + '?a=b&referer=' + rrUrl + '&sd=', rrData,'&action=rec&ver=' + g_rr.ver + '&sid=' + g_rr.sessionId + '&uid=' + g_rr.userIdentifier + '&cw=0&ch=0', 'g_rr.markOK(true);',true);	
	
}

robotRecorder.prototype.compileAndTransmitLog = function (force, toCookie) {
	if (!g_rr.grabbedScreenCoords) {
		g_rr.screenInfo = g_rr.getScrollPositions();
		g_rr.grabbedScreenCoords = true;
	}
	
	var transmitString = '';
	var alen = g_rr.dataQueue.length;
	
	for (var x = 0; x < alen; x++)
		transmitString += g_rr.dataQueue[x];
	for (x = 0; x < alen; x++)
		g_rr.dataQueue.pop();
	var refString = '';
	if (!g_rr.sentReferrer) {
		refString = '&ref=' + escape(document.referrer);
		g_rr.sentReferrer = true;
	}
	var totalstringlength = g_rr.apiRecordUrl + '?action=rec&ver=' + g_rr.ver + '&sid=' + g_rr.sessionId + '&uid=' + g_rr.userIdentifier + '&sd=' + transmitString + '&cw=' + g_rr.screenInfo.clientWidth + '&ch=' + g_rr.screenInfo.clientHeight + refString;
	
	g_rr.JSONscriptRequestChunk(g_rr.apiRecordUrl + '?a=b&sd=', transmitString,'&action=rec&ver=' + g_rr.ver + '&sid=' + g_rr.sessionId + '&uid=' + g_rr.userIdentifier + '&cw=' + g_rr.screenInfo.clientWidth + '&ch=' + g_rr.screenInfo.clientHeight + refString, 'g_rr.markOK(true);', force);
	if (toCookie) {
		// ok now we need to throw the whole thing into a cookie incase it doesn't get sent
		g_rr.setCookie('rr_url', window.location.href, 10);
		g_rr.setCookie('rr_lastblock', transmitString, 10);
		g_rr.setCookie('rr_lastblockhash', transmitString.length, 10);
		//alert(transmitString);
		//alert(window.location.href);
	}
}

robotRecorder.prototype.markOK = function (truefalse) {
	g_rr.isSavedOK = true;
    g_rr.setCookie('rr_sid', g_rr.sessionId, 10, '/', '', '');
}

robotRecorder.prototype.JSONscriptRequest = function (jsonURL, resultCall) {
	
	g_rr.isSavedOK = true;
	g_rr.noCacheIE = '&noCacheIE=' + (new Date()).getTime();
	g_rr.headLoc = document.getElementsByTagName("head").item(0);
	g_rr.scriptId = 'RPLAY' + g_rr.scriptCounter++;
	g_rr.fullUrl = jsonURL + g_rr.noCacheIE + '&scriptid=' + g_rr.scriptId + '&resultCall=' + resultCall;
	g_rr.buildScriptTag(g_rr.scriptId, g_rr.fullUrl);
    g_rr.addScriptTag(g_rr.scriptId);
	
}

robotRecorder.prototype.JSONscriptRequestChunk = function (RootUrl, jsonURL, endcapdat, resultCall, force) {

	var totalData = RootUrl + jsonURL + endcapdat;
	force_s = force ? "true" : "false";
	var secondRequest = '';
	var timeDelay = 0;
	var chunkAmount = 1800;

	if (totalData.length > chunkAmount) {
	
		var temparr = jsonURL.split("$.$");
		
		
		var chunkarray = Array();
		CurrentItem = 0;
		chunkarray[CurrentItem] = '';
		
		for (var x = 0; x < temparr.length; x++) {
			chunkarray[CurrentItem] += temparr[x] + '$.$';		
			if (chunkarray[CurrentItem].length > chunkAmount) {
				g_rr.noCacheIE = '&noCacheIE=' + (new Date()).getTime();
				g_rr.headLoc = document.getElementsByTagName("head").item(0);
				g_rr.scriptId = 'RPLAY' + g_rr.scriptCounter++;
				g_rr.fullUrl = RootUrl + chunkarray[CurrentItem] + endcapdat + g_rr.noCacheIE + '&scriptid=' + g_rr.scriptId + '&resultCall=' + resultCall;
			    setTimeout('g_rr.buildScriptTag("' + g_rr.scriptId + '", "' + g_rr.fullUrl + '");   g_rr.addScriptTag("' + g_rr.scriptId + '",'+force_s+');', timeDelay);
				timeDelay += 500;
				chunkarray[CurrentItem+1] = '';
				CurrentItem++;
			}
		}
		g_rr.noCacheIE = '&noCacheIE=' + (new Date()).getTime();
		g_rr.headLoc = document.getElementsByTagName("head").item(0);
		g_rr.scriptId = 'RPLAY' + g_rr.scriptCounter++;
		g_rr.fullUrl = RootUrl + chunkarray[CurrentItem] + endcapdat + g_rr.noCacheIE + '&scriptid=' + g_rr.scriptId + '&resultCall=' + resultCall;
	    var scID = '_' + Math.random();
	    setTimeout('g_rr.buildScriptTag("' + g_rr.scriptId + '", "' + g_rr.fullUrl + '");   g_rr.addScriptTag("' + g_rr.scriptId + '",'+force_s+');', timeDelay);
		timeDelay += 500;
	} else {
    	g_rr.noCacheIE = '&noCacheIE=' + (new Date()).getTime();
    	g_rr.headLoc = document.getElementsByTagName("head").item(0);
    	g_rr.scriptId = 'RPLAY' + g_rr.scriptCounter++;
    	g_rr.fullUrl = RootUrl + jsonURL + endcapdat + g_rr.noCacheIE + '&scriptid=' + g_rr.scriptId + '&resultCall=' + resultCall;
        g_rr.buildScriptTag(g_rr.scriptId, g_rr.fullUrl);
        g_rr.addScriptTag(g_rr.scriptId, force);
	}
}

robotRecorder.prototype.buildScriptTag = function (scid, fullurl) {
	g_rr.scriptId = scid;
    // Create the script tag
    this.scriptObj[scid] = document.createElement("script");    
    // Add script object attributes
    this.scriptObj[scid].setAttribute("type", "text/javascript");
    this.scriptObj[scid].setAttribute("src", fullurl + this.noCacheIE);
    this.scriptObj[scid].setAttribute("id", scid);
}
 
robotRecorder.prototype.removeScriptTag = function (scriptid) {
    // Destroy the script tag
	try {
    this.headLoc.removeChild(document.getElementById(scriptid));  
	this.scriptObj[scriptid] = null;
	this.isCallingRemote = false;
	} catch(e) {}
}

robotRecorder.prototype.addScriptTag = function (scriptid, force) {
    // Create the script tag
    
	this.scriptsBuffer.push(scriptid);
	this.writeScriptsBuffer(force);
}
robotRecorder.prototype.writeScriptsBuffer = function(force)
{
    if (this.scriptsBuffer.length)
    {
	    if (!this.isCallingRemote || force)
	    {
	    	var scriptTag = this.scriptObj[this.scriptsBuffer.shift()];
	    	var src = scriptTag.getAttribute("src");
	    	scriptTag.setAttribute("src",src.replace("sid=0&", "sid="+(this.sessionId || 0)+"&"));
	    	this.headLoc.appendChild(scriptTag);
	    	this.isCallingRemote = true;
	    }
	    var force_s = force ? "true" : "false";
		if (this.scriptsBuffer.length)
    		window.setTimeout("g_rr.writeScriptsBuffer("+force_s+");",100);
    }
}

robotRecorder.prototype.rotateCoords = function (oldx,oldy,rotation) {
	var RotationRads = rotation*(3.1415927/180)
	var x = Math.round(oldx*Math.cos(RotationRads) - oldy*Math.sin(RotationRads));
	var y = Math.round(oldy*Math.cos(RotationRads) + oldx*Math.sin(RotationRads));	
	return {x : x, y : y};
}

robotRecorder.prototype.returnAngle = function (oldx,oldy,newx,newy) {
	var myAngle = Math.atan2(newy - oldy, newx - oldx) * 57.29578;
	return myAngle;
}

robotRecorder.prototype.setCookie = function ( name, value, expires, path, domain, secure ) {
	// set time, it's in milliseconds
	var today = new Date();
	today.setTime( today.getTime() );

	if ( expires )
	{
	expires = expires * 1000 * 60;
	}
	var expires_date = new Date( today.getTime() + (expires) );

	document.cookie = name + "=" +escape( value ) +
	( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) + 
	( ( path ) ? ";path=" + path : "" ) + 
	( ( domain ) ? ";domain=" + domain : "" ) +
	( ( secure ) ? ";secure" : "" );
}

robotRecorder.prototype.getCookie = function(name){
	var start = document.cookie.indexOf( name + "=" );
	var len = start + name.length + 1;
	if ( ( !start ) &&
	( name != document.cookie.substring( 0, name.length ) ) )
	{
	return null;
	}
	if ( start == -1 ) return null;
	var end = document.cookie.indexOf( ";", len );
	if ( end == -1 ) end = document.cookie.length;
	return unescape( document.cookie.substring( len, end ) );
}

robotRecorder.prototype.delCookie = function(name, path, domain ){
	if ( g_rr.getCookie( name ) ) document.cookie = name + "=" + ( ( path ) ? ";path=" + path : "") + ( ( domain ) ?";domain=" + domain : "" ) + ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}


var rrPermHeight = 0;
var rrPermWidth = 0;
robotRecorder.prototype.getScrollPositions = function() {
	var scrollLeft,scrollTop,clientWidth,clientHeight;
	var x,y;
	var agent = navigator.userAgent.toLowerCase(); 
	var opera = false;		
	var firefox = false;
	var safari = false;
	var ie = false;
	var strict = false;
	if (agent.indexOf("opera") >= 0) {opera = true;}
	if (agent.indexOf("firefox") >= 0) {firefox = true;}	
	if (agent.indexOf("msie") >= 0) {ie = true;}
	if (agent.indexOf("safari") >= 0) {safari = true;}
	if (document.compatMode == 'CSS1Compat') {strict = true;}
	
	
	if (self.innerHeight) // all except Explorer
	{
		x = self.innerWidth;
		y = self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientHeight)
		// Explorer 6 Strict Mode
	{
		x = document.documentElement.clientWidth;
		y = document.documentElement.clientHeight;
	}
	else if (document.body) // other Explorers
	{
		x = document.body.clientWidth;
		y = document.body.clientHeight;
	}
	clientWidth = x; clientHeight = y;

	if (self.pageYOffset) // all except Explorer
	{
		x = self.pageXOffset;
		y = self.pageYOffset;
	}
	else if (document.documentElement && document.documentElement.scrollTop)
		// Explorer 6 Strict
	{
		x = document.documentElement.scrollLeft;
		y = document.documentElement.scrollTop;
	}
	else if (document.body) // all other Explorers
	{
		x = document.body.scrollLeft;
		y = document.body.scrollTop;
	}	
	scrollLeft = x; scrollTop = y;

	var test1 = document.body.scrollHeight;
	var test2 = document.body.offsetHeight
	if (test1 > test2) // all but Explorer Mac
	{
		x = document.body.scrollWidth;
		y = document.body.scrollHeight;
	}
	else // Explorer Mac;
	     //would also work in Explorer 6 Strict, Mozilla and Safari
	{
		x = document.body.offsetWidth;
		y = document.body.offsetHeight;
	}	
	nrrPermHeight = y; rrPermWidth = x;
	
	if (nrrPermHeight < clientHeight) {
		nrrPermHeight = clientHeight;
		if (ie && strict) {
			clientWidth += 20;
		}
	}
	
	if (clientWidth < rrPermWidth) {
		clientWidth = rrPermWidth;
	}
	
	if (nrrPermHeight > clientHeight) {
		
		clientWidth += 20;
	}
	
	var scrollHeight, scrollWidth;
	scrollHeight = document.documentElement.scrollHeight;
	scrollWidth = document.documentElement.scrollWidth;
	

	return {scrollWidth:scrollWidth,scrollHeight:scrollHeight,scrollLeft:scrollLeft,scrollTop:scrollTop,clientWidth:clientWidth,clientHeight:clientHeight,bodyWidth:rrPermWidth,bodyHeight:nrrPermHeight}
}

robotRecorder.prototype.writeMetaData = function(htmlblob) {
	parent.document.getElementById('RRMetaDataTd').innerHTML = htmlblob;
}

robotRecorder.prototype.getCoords = function(element) {
   var ew, eh;
   try {
       var originalElement = element;
       ew = element.offsetWidth;
       eh = element.offsetHeight;
       for (var lx=0,ly=0;element!=null;
           lx+=element.offsetLeft,ly+=element.offsetTop,element=element.offsetParent);
       for (;originalElement!=document.body;
           lx-=originalElement.scrollLeft,ly-=originalElement.scrollTop,originalElement=originalElement.parentNode);
   } catch(e) {}
   return {x:lx,y:ly,h:eh,w:ew}
}

robotRecorder.prototype.getCoordsOpera = function(element) {
     if (!eElement && this) 
    {       
        eElement = this; 
    }  
    
    try {var nLeftPos = eElement.offsetLeft; 
    var nTopPos = eElement.offsetTop;	
    var eParElement = eElement.offsetParent; } catch(e) {}
    while (eParElement != null)
    {  
        try {
		nLeftPos += eParElement.offsetLeft; 
		nTopPos += eParElement.offsetTop;
        eParElement = eParElement.offsetParent;  
		} catch(e){}
    }


	return {x:nLeftPos,y:nTopPos,h:eElement.offsetHeight,w:eElement.offsetWidth}
}


robotRecorder.prototype.setPlaybackState = function() {
	g_rr.delCookie('robotreplayid', '/', '');
	g_rr.delCookie('robotreplayeid', '/', '');
	g_rr.setCookie('robotreplayid', g_rr.sessionId, 10, '/', '', '');
	g_rr.setCookie('robotreplayeid', g_rr.playbackQueue[g_rr.playbackQueue.length-1][3], 10, '/', '', '');			
}

var g_rrHost="http://www.robotreplay.com";
var g_rr = new robotRecorder();
var rri_ntb02 = g_rr.bufferInstruction;
var _RRisPlayback = false;
var _RRmyLoc = window.location.toString();
if (_RRmyLoc.indexOf('robotreplay=') > -1) {
    _RRisPlayback = true;
    g_rr.attachWindowEvent('load', g_rr.detectModeAndBegin);
} else {
    g_rr.detectModeAndBegin();
}
// for Internet Explorer (using conditional comments)
/*@cc_on @*/
/*@if (@_win32)
document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
var script = document.getElementById("__ie_onload");
script.onreadystatechange = function() {
    if (this.readyState == "complete") { if (_RRisPlayback) {
        g_rr.detectModeAndBegin(); }
    }
};
/*@end @*/
