function getHTTPObject() {
    if (typeof XMLHttpRequest != 'undefined') {
        return new XMLHttpRequest();
    }
    try {
        return new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
        try {
            return new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {}
    }
    return null;
}

var doPingServer= false;
var theUrl;
var theFreq;

function stopPingServer() {
	doPingServer = false;
}

function startPingServer(url, freq) {
	doPingServer = true;
	if (freq == null || freq == "") {
		freq = 300000;
	}
	
	theUrl = url;
	theFreq = freq;
	
	window.setTimeout("ajaxPing()", 100);
}

function ajaxPing() {
	if (!doPingServer) return;

	var http = getHTTPObject();
	http.open("GET", theUrl, true);

	http.onreadystatechange = function() {
		if (http.readyState == 4) {
			if (http.status == 200) { 
				// OK response
				window.setTimeout("ajaxPing()", theFreq);
			} else {
				alert("Cannot connect to server: " + http.statusText);
				stopPingServer();
			}
		}
	}
		
	http.send(null);
}

var validSession = true;

function checkSession(sync, onExpired, onValid) {
	
	if (!validSession)
		return;

	if (!sync)
		window.status= "Transaction is in progress... please wait";
	
	var clientSessionId = getCookie("JSESSIONID");
	
	var url="/JHPortal/Common/tools/pingServer/";
	
	var http = getHTTPObject();
	http.open("GET", url, sync);
	
	http.onreadystatechange = function() {
		if (http.readyState == 4) {
			
			if (!sync)
				window.status= "";

			if (http.status == 200) { // OK response  
							
				// get sessionID
				var serverSessionId = getTagValue(http.responseText, "sessionId");							
				//get userID
				var serverUserId = getTagValue(http.responseText, "userId");
				
				if (clientSessionId.indexOf(serverSessionId) == -1 || serverUserId == "") {
					validSession = false;
					
					if (typeof(onExpired) == "function")
						onExpired();

				} else {
					if (typeof(onValid) == "function")
						onValid();
				}
			}          
		}		
	}
	
	http.send(null);
}

function getTagValue(xml, tag) {
	var val = "";
	if (xml != null && xml != "")
		val = xml.substring(xml.indexOf("<" + tag +">") + tag.length + 2, xml.indexOf("</" + tag +">"));
	
	return val;
}

function getCookie(name) {
    	var dc = document.cookie;
   
	var prefix = name + "=";
	var begin = dc.indexOf("; " + prefix);
    	if (begin == -1) {
        	begin = dc.indexOf(prefix);
        if (begin != 0) 
		return null;
    	} else
        	begin += 2;
   
    	var end = document.cookie.indexOf(";", begin);
    	if (end == -1)
    		end = dc.length;
    
    	return unescape(dc.substring(begin + prefix.length, end));
}