/*------------------------------------------|
| Copyright (c) 2004-2007 Andree Riechert   |
| All rights reserved                       |
| www.fids3.com                             |
| www.fids3mobile.com                       |
| www.fids-consulting.com                   |
|-------------------------------------------*/

var ajaxmode = "poll";
var pollInterval = 15000;
var ajaxServerURL=".";

var timerID = null;

var displays=new Array();

function Display(displayID,localTimestamp,queryUrl,innerID) {
    this.displayID = displayID;
    this.localTimestamp = localTimestamp;
    this.queryUrl = queryUrl
    this.innerID = innerID
};

function createXHR() 
{
    var request = false;
        try {
            request = new ActiveXObject('Msxml2.XMLHTTP');
        }
        catch (err2) {
            try {
                request = new ActiveXObject('Microsoft.XMLHTTP');
            }
            catch (err3) {
		try {
			request = new XMLHttpRequest();
		}
		catch (err1) 
		{
			request = false;
		}
            }
        }
    return request;
}

function contactAjaxServer() { 
    var dpids = "";
    var timestamps = "";
	
    for(var ix = 0; ix < displays.length; ix++) {
    	if (ix > 0) {
    	    dpids += ",";
    	    timestamps += ",";
    	} 
   	    dpids += displays[ix].displayID;
   	    timestamps += displays[ix].localTimestamp;
    }

    if (dpids.length > 0) {
	var xhr=createXHR();
	var url = ajaxServerURL + "/clientsync?mode=" + ajaxmode + "&operation=sync&dpid=" + dpids + "&lastupd=" + timestamps;

	xhr.onreadystatechange = function() { 
	   if (xhr.readyState == 4) 
               checkServerResponse(xhr.responseText);
	}; 

	xhr.open("GET", url , true);
	xhr.send(null); 
	}
} 

function activateAjaxTimer() {
	 if (timerID != null)
	     clearTimeout(timerID);
     timerID = setTimeout("contactAjaxServer()", pollInterval);
}

function setAjaxParameters(serverUrl,mode,pollSecs) {
    ajaxmode=mode; // block|poll
    ajaxServerURL = serverUrl;  
    if (ajaxServerURL == null || ajaxServerURL.length < 1)
        ajaxServerURL = ".";
    pollInterval = pollSecs*1000;

}

function waitForDisplayChanges(serverUrl,mode,pollSecs) {
	if (displays.length > 0) {
	    setAjaxParameters(serverUrl,mode,pollSecs);	
	    activateAjaxTimer();
	}		
}

function checkServerResponse(response) {
	if (response == null || response.length < 1) {
	    for(var ix = 0; ix < displays.length; ix++)
	        displays[ix].localTimestamp = "0";
	} else {
		var dp = getDisplay(response);
		if (dp != null) {
		    if (dp.innerID != null) {
		       loadAndUpdateDisplayInner(dp.queryUrl + "&dpid=" + dp.displayID,dp.innerID);
		       return;
		    } else	
		       location.replace(dp.queryUrl + "&dpid=" + dp.displayID ); 
		}
	}
	         
	activateAjaxTimer();
}

function registerDisplay(dpid,timestamp,query) {
	if (displayExists(dpid) == false) {
	    if (query == null || query.length < 1)
		    query = document.URL;
	    displays[displays.length] = new Display(dpid,timestamp,query,null);    
	}	
}
	
function registerDisplayInner(dpid,timestamp,query,innerID) {
	var dp = getDisplay(dpid);
	if (dp == null) {
	    if (query == null || query.length < 1)
		    query = document.URL;
	    displays[displays.length] = new Display(dpid,timestamp,query,innerID);    
	} else {
	   dp.localTimestamp = timestamp;	
	}		
}
	
function getDisplay(dpid) {
	for(var ix = 0; ix < displays.length; ix++)
	    if (displays[ix].displayID == dpid)
		    return displays[ix];
    return null;
}

function displayExists(dpid) {
	return getDisplay(dpid) != null;
}
	
function loadAndUpdateDisplayInner(url,innerID) {
	    var xhr=createXHR();
	    if (url.indexOf(ajaxServerURL) < 0) 
	        url = ajaxServerURL + "/" + url;

	    xhr.onreadystatechange = function() { 
		    if (xhr.readyState == 4) 
  		        updateDisplayInner(xhr.responseText,innerID);
	    }; 

	    xhr.open("GET", url , true);
	    xhr.send(null); 
}

function updateDisplayInner(html,innerID) {
	document.getElementById(innerID).innerHTML = html;
	var dpid = document.getElementById("dpid").getAttribute("value");
	var lastupd = document.getElementById("lastupd").getAttribute("value");
	var queryurl = document.getElementById("queryurl").getAttribute("value");
	registerDisplayInner(dpid,lastupd,queryurl,innerID);
	activateAjaxTimer();
}
	
