/************************************ Global Variables *************************************************/
var rulereqs = new Array();


/*********************************** AJAX Calling Methods ***************************************************/
function ExecuteRuleXMLReq(freed) {
	this.freed = freed;
	this.xmlhttp = false;
	if (window.XMLHttpRequest) {
		this.xmlhttp = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
}

function retrieveExecuteRuleReq(url,fldId) {
	var pos = -1;
	for (var i=0; i<rulereqs.length; i++) {
		if (rulereqs[i].freed == 1) { pos = i; break; }
	}
	if (pos == -1) { pos = rulereqs.length; rulereqs[pos] = new ExecuteRuleXMLReq(1); }
	if (rulereqs[pos].xmlhttp) {
		rulereqs[pos].freed = 0;
		
		if (window.XMLHttpRequest) {	
			try {
				rulereqs[pos].xmlhttp.open("GET",url,true);
			} catch ( e ) {
				alert(e);
			}						
			rulereqs[pos].xmlhttp.onreadystatechange = function() {
				if (typeof(executeXmlhttpChange) != 'undefined') { executeXmlhttpChange(pos,fldId); }
			}
			rulereqs[pos].xmlhttp.send(null);
		} else if (window.ActiveXObject) {
			rulereqs[pos].xmlhttp.open("GET", url, true);
			rulereqs[pos].xmlhttp.onreadystatechange = function() {
				if (typeof(executeXmlhttpChange) != 'undefined') { executeXmlhttpChange(pos,fldId); }
			}      		

        	rulereqs[pos].xmlhttp.send();        	
      	}				
	}
}



function executeXmlhttpChange(pos,fldId) 
{
	if (typeof(rulereqs[pos]) != 'undefined' && rulereqs[pos].freed == 0 && rulereqs[pos].xmlhttp.readyState == 4) {
		if (rulereqs[pos].xmlhttp.status == 200 || rulereqs[pos].xmlhttp.status == 304) {
			populateRuleField(rulereqs[pos].xmlhttp,fldId);
		} else {
			alert("Problem: " + rulereqs[pos].xmlhttp.statusText);
		}
		rulereqs[pos].freed = 1;
	}
}



/*********************************** Retrieve Field Display *************************************************/

  
  
  function populateRuleField(req, fldId)
  {
  	var el = document.getElementById(fldId);
    el.value=req.responseText;
  }


  function runRule(fldId, fLabel, fList)
  {
  	//alert('got fields of ' + fieldsToAppend + ' and gps of ' + gps);
	var flds = fList.split("|");  	
	
  	
  	var qs2 = new Querystring(getFormData(document.forms[0]));	

	var fParams = "";
  	for ( var i = 0; i< flds.length; i++ ) 
  	{
  		var newVal = qs2.get(flds[i]);
  		fParams = fParams + "&" + flds[i] + "=" + newVal;
  	}
    
	var url = 'jsp/ajax.executeRule?fldId=' + fldId + fParams;		
	retrieveExecuteRuleReq(url, fLabel);	 
  }
