var responseIdx = 0;
var eventNumber = 0;
var successfulLoad = false;
var eventDebug = false;

var qlessPageId = new Date().getTime();

var listener = {
	'eventURL' : function() {
		var rtn = '/qless/event/v1/employee?id=' + qlessPageId;
		if (BrowserDetect.browser == 'Explorer') {
			rtn += '&useScript=true';
		}
		return rtn;
	},
	'poll' : function() {
		if (eventDebug) {
			alert('LISTENING FOR EVENTS');
		}
		//console.log('LISTENING FOR EVENTS...');
		var xhr = createXMLHttpRequest();
		xhr.open('GET', listener.eventURL(), true);
		xhr.onreadystatechange = function() {
					if (typeof xhr == 'undefined') return;
					if (xhr.readyState == 3) {
						listener.interactive(xhr);
					} else if (xhr.readyState == 4) {
						listener.process(xhr);
					}
				};
		xhr.send(null);
		//console.log('CONNECTION ESTABLISHED');
	},
	'process' : function(transport) {
		try {
			if (transport != null) {
				if (transport.status == 200) {
					if (eventDebug) {
						alert('RESTARTING...');
					}
					responseIdx = 0;
					successfulLoad = true;
				//	console.log('PROCESS FINISHED. DOING NORMAL RELOAD');
					setTimeout("listener.poll()", 2000);
				} else {
					//console.log('transport status is ' + transport.status);
					listener.reload();
				}
			}
		} catch (e) {
			listener.reload();
		}
	},
	'interactive' : function(transport) {
		try {
			var response = transport.responseText.substring(responseIdx);
			responseIdx = transport.responseText.length;
			listener.handleEvent(response);
			successfulLoad = true;
		} catch (e) {
			if (BrowserDetect.browser != 'Explorer') {
				throw e;
			}
		}
	},
	'handleEvent' : function(event) {
		Lz.setCanvasAttribute('event' + eventNumber, event);
		Lz.setCanvasAttribute('eventNumber', eventNumber);
		eventNumber++;
	},
	'reload' : function() {
		//console.log('RELOAD IN 10-20 s');
		setTimeout("document.location.reload()", (Math.random() * 10000) + 10000);
	}
};

function createXMLHttpRequest() {
  try { return new ActiveXObject("Msxml2.XMLHTTP");    } catch(e) {}
  try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
  try { return new XMLHttpRequest();                   } catch(e) {}
  return null;
}

function iePoll() {
		transferDoc = new ActiveXObject("htmlfile");
    transferDoc.open();
    transferDoc.write(
        "<html><script>" +
        "document.domain='" + document.domain + "';" +
        "</script></html>");
    transferDoc.close();
    var ifrDiv = transferDoc.createElement("div");
    transferDoc.body.appendChild(ifrDiv);
    ifrDiv.innerHTML = "<iframe src='" + listener.eventURL() + "'></iframe>";
    transferDoc.parentWindow.p = function(event) {
				listener.handleEvent(event);
			};
		transferDoc.parentWindow.reconnect = function() {
				transferDoc = null;
				if(typeof CollectGarbage == "function") CollectGarbage();
				setTimeout( 'iePoll();', 100);
			};
		// See http://www.issociate.de/board/post/483905/htmlfile_ActiveX_very_abscure_problem_(not_the_usual_disconnect.html
		setInterval(
			function () {
				var __x = ((transferDoc ) &&
						(typeof transferDoc.parentWindow == "object" ))
			}, 100);
}

window.onload = function() {
	BrowserDetect.init();
	if (BrowserDetect.browser != 'Explorer' && window.XMLHttpRequest) {
		listener.poll();
	} else if (BrowserDetect.browser == 'Explorer' && BrowserDetect.version >= 7) {
		iePoll();
	} else {
		alert('Sorry, we don\'t yet support your browser.  Please try Firefox.');
		window.location = 'http://www.mozilla.com';
	}
}