/********************************************
* AJAX support functions
**********************************************/
var http_request = false;
var ajaxDefaultFailureMsg = "<p>We're sorry, but the system was unable to process your request.</p>";
var ajax_DisplayArea = "";
var ajaxREDIRECT_FLAG="**REDIRECT**:";

function getXMLHttpRequest(){
	var request;
	if (window.XMLHttpRequest) { // Mozilla, Safari, ...
	    request = new XMLHttpRequest();
	} else if (window.ActiveXObject) { // IE
		try { request = ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch (e1) {
			try { request = ActiveXObject("Msxml2.XMLHTTP.5.0"); } catch (e2) {
				try { request = ActiveXObject("Msxml2.XMLHTTP.4.0"); } catch (e3) {
					try { request = ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch (e4) {
						try { request = ActiveXObject("Msxml2.XMLHTTP"); } catch (e5) {
							try { request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e6) {
								alert("Microsoft.XMLHTTP: " + err2.name + "-" + err2.message);
							}
						}
					}
				}
			}
		}
	}
	return request;
}

function AJAXGet(requestURL, parameters, async){
	http_request.open('POST', requestURL, async);
	try {
		// needed for Firefox
		http_request.overrideMimeType('text/html'); 
	} catch (e) {}
	http_request.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" ); // disable caching
	http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http_request.setRequestHeader("Content-length", parameters.length);
    http_request.setRequestHeader("Connection", "close");
	http_request.send(parameters);
}

function outputToElelment(elementName, content){
	try {
		document.getElementById(elementName).innerHTML=content;
	} catch(e){
		document[elementName].innerHTML=content;
	}
}

function submitAjaxForHTML_worker(async_flag, commandName, displayArea, fieldArray, message){
	ajax_DisplayArea = displayArea;
	if (message){
		outputToElelment(displayArea, message);
	}
	var url = commandName;
	var parms = buildAjaxParms(fieldArray);
	http_request = getXMLHttpRequest();
	if (async_flag == true){
		http_request.onreadystatechange = ajaxUpdateHTML;
	}
	AJAXGet(url, parms, async_flag);
	if (async_flag == false){
		ajaxUpdateHTML(); // synchronous	
	}
}

function submitAjaxForHTML(commandName, displayArea, fieldArray, message){
	submitAjaxForHTML_worker(false, commandName, displayArea, fieldArray, message)
}

function submitAjaxForHTMLAsync(commandName, displayArea, fieldArray, message){
	submitAjaxForHTML_worker(true, commandName, displayArea, fieldArray, message)
}

function buildAjaxParms(fieldArrayParm){
    var myParms = "";
    if (fieldArrayParm && fieldArrayParm.length > 0) {
        var accessMethod = 0;
        var myField;
        try {
            myField = document.getElementById(fieldArrayParm[0]);
            var test = myField.name
        } catch (e) {
            try {
                myField = document[fieldArrayParm[0]];
                accessMethod = 1;
                var test = myField.name
            } catch (e2) {
                //within a form
                accessMethod = 2;
            }
        }
        for (i = 0; i < fieldArrayParm.length; i++) {
            if (accessMethod == 0) {
                myField = document.getElementById(fieldArrayParm[i]);
            } else if (accessMethod == 1) {
                myField = document[fieldArrayParm[i]];
            } else if (accessMethod == 2) {
                myField = document.UIservletForm[fieldArrayParm[i]];
            }
            if(myField){
	            if (myParms=="") myParms = myField.name + "=";
	            else myParms = myParms + "&" + myField.name + "=";
	            if (myField.type == "checkbox") {
	                myParms = myParms + escape(myField.checked ? "Y" : "N");
	            } else {
	                myParms = myParms + escape(myField.value);
	            }
             }
        }
    }
    return myParms;
}

function ajaxUpdateHTML(){
	try{
    if (http_request.readyState == 4) {
        if (http_request.status == 200) {
        	if(http_request.responseText){
	        	if(isRedirect(http_request.responseText)){
	        		top.location.href=getRedirect(http_request.responseText);
	        	}else{
	        		outputToElelment(ajax_DisplayArea,http_request.responseText);
	        	}
        	}	
        } else {
             outputToElelment(ajax_DisplayArea,ajaxDefaultFailureMsg);
		}
    }
    }catch(e){
				alert("ajaxUpdateHTML: " + e.name + "-" + e.message);
    
    }
}

function isRedirect(ajaxReturnMsg){
	var prefix = ajaxReturnMsg.substr(0,ajaxREDIRECT_FLAG.length);
	if(prefix == ajaxREDIRECT_FLAG){
		return true;
	}else{
		return false;
	}
}

function getRedirect(ajaxReturnMsg){
	return ajaxReturnMsg.substr(ajaxREDIRECT_FLAG.length);
}

/****************************************************
 * ajaxKeepAlive() use with command=**ping** to send
 * a simple keep alive request.
 */

function ajaxKeepAlive(url, waitMinutes){
	var waitMils = waitMinutes * 60 * 1000;
	var keepAliveRequest = getXMLHttpRequest();
	keepAliveRequest.open('GET', url, true);
	keepAliveRequest.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" ); // disable caching
	keepAliveRequest.send(null);
	setTimeout("ajaxKeepAlive('" + url + "'," + waitMinutes + ");", waitMils);
	
}

