// Usage...
//gatewayRequest('doesemailexist','&var='+email.value,'emailHandler');

var http_host;
var user_id;

//var gateway = 'http://www.fusionio.com/ajax_server.php';
var gateway;

// BEGIN: New Schtuff //
var ajax = new AJAX();
function AJAX(){
	this.sendReq = function(div,loc){
		loadXML(loc,returnAction,div);
		//var whatdiv = div;
		function returnAction(rval){
			//whatdiv.innerHTML = rval;
			div.innerHTML = rval;
		}
	}
	this.downDriver = function(loc,fpath){
		loadXML(loc,returnAction);
		function returnAction(rval){
			window.location='downDriver.php?filePath='+rval;
			window.status = 'File Downloaded';
		}
	}
}
// Usage: sendReq('supContainer','sub_drivers.inc.php','ID,Version,OpSys','1234,r1.2.2,Ubuntu',this.form);
function sendReq(divid,script,varNames,varVals,frm){
	var params = '';
	
	if(varNames.length > 0) varNames = varNames.split(',');
	if(varVals.length > 0) varVals = varVals.split(',');
	
	for(i=0; i<varNames.length; i++) {
		params += varNames[i]+'='+varVals[i]+'&';
	}
	params = params.substring(0, (params.length-1));
	var loc = script+'?'+params;
	var divref = document.getElementById(divid);
	if(frm.length > 0){
		var str="";
		if(str = getForm(frm)) {
			if(params.length > 0){
				loc = loc + '&' + str;
			}else{
				loc = loc + str;
			}			
			ajax.sendReq(divref,loc);
		}
	}else{
		ajax.sendReq(divref,loc);
	}
}
function downDriver(fpath,uid){
	var loc = 'methods/log_download.php?fn='+fpath+'&uid='+userid;
	ajax.downDriver(loc);
}
function loadXML(File,returnFunc,divref){
	var Doc;
	var req;
	try {req = new XMLHttpRequest();}
		catch(e) {try {req = new ActiveXObject("Msxml2.XMLHTTP");}
			catch(e) {try {req = new ActiveXObject("Microsoft.XMLHTTP");}
				catch(e) {alert('Requires ajax compatibility'); return false;}
			}
		}
	req.onreadystatechange = processReqChange;
	req.open("GET", File, true);
	req.send(null);
	
	//this function is called at different stages of requesting the page.
	//nested function inside loadXML
	function processReqChange(){	// only if req shows "complete"
		if(req.readyState < 4 && divref){
			divref.innerHTML = "<img src='images/loading.gif'>";
		}else if (req.readyState == 4) {
			// only if "OK"
			if (req.status == 200) {
				Doc = req.responseText;
				returnFunc(Doc); //called after the data has been retrieved.
			}else{
				alert("There was a problem retrieving the data from the server:\n" + req.statusText);
			}
		}
	}
}
function getForm(fobj) {
	var str = ""; 
	var ft = ""; 
	var fv = ""; 
	var fn = ""; 
	var els = ""; 
	for(var i = 0;i < fobj.elements.length;i++) {
		els = fobj.elements[i];
		ft = els.title;
		// get rid of &
		fv = els.value.replace('&','and');
		fn = els.name;
		idx = els.id;
		switch(els.type) {
			case "text": 
			case "hidden": 
			case "password": 
			case "textarea":
				// is it a required field? 
				if(URLEncode(ft) == "required" && URLEncode(fv).length < 1) {
					alert("'" + fn + "'" + ' is a required field, please complete.');
					els.focus();
					return false;
				}
				if(fv.length > 0) { str += idx + "=" + URLEncode(fv) + "&"; }
			break;
			
			case "checkbox":
			case "radio":
				if(els.checked) str += idx + "=" + URLEncode(fv) + "&";
			break;
			
			case "select-one":
				// is it a required field? 
				if(URLEncode(ft) == "required" && URLEncode(els.options[els.selectedIndex].value).length < 1) {
					alert("'"+ fn + "'" + ' is a required field, please complete.');
					els.focus();
					return false;
				}
				str += idx + "=" +  els.options[els.selectedIndex].value + "&";
			break;
		} // switch
	} // for  
	str = str.substr(0,(str.length - 1));
	return str;  
}
function URLEncode(plaintext){
	// The Javascript escape and unescape functions do not correspond
	// with what browsers actually do...
	var SAFECHARS = "0123456789" +					// Numeric
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
					"abcdefghijklmnopqrstuvwxyz" +
					"-_.!~*'()";					// RFC2396 Mark characters
	var HEX = "0123456789ABCDEF";

	var encoded = "";
	for(var i = 0; i < plaintext.length; i++ ){
		var ch = plaintext.charAt(i);
	  if(ch == " "){
			encoded += "+";				// x-www-urlencoded, rather than %20
		}else if (SAFECHARS.indexOf(ch) != -1){
			encoded += ch;
		}else{
		  var charCode = ch.charCodeAt(0);
			if(charCode > 255){
				alert( "Unicode Character '" + 
					ch + 
					"' cannot be encoded using standard URL encoding.\n" +
					"(URL encoding only supports 8-bit characters.)\n" +
					"A space (+) will be substituted." );
				encoded += "+";
			}else{
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4) & 0xF);
				encoded += HEX.charAt(charCode & 0xF);
			}
		}
	}
	return encoded;
}
// END: New //

function gatewayRequest(fn,data,callback){
	var params = data.parseQuery();
	params.method = fn;
	new Ajax.Request(
		'../../ajax_server.php', {
			method: 'POST',
			parameters: params,
			onComplete: eval(callback)
  });
}

function gatewayRequestOrig(method,data,callback){
	gateway = 'http://' + http_host + '/ajax_server.php';
	ajaxRequest(
		gateway,
		'POST',
		'method='+method+data,
		callback
	);
}
	
function ajaxRequest(url,mode,data,callback){
	//alert(url);
	var xmlHttp;
	//alert(data);
	try {xmlHttp = new XMLHttpRequest();}
		catch(e) {try {xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");}
			catch(e) {try {xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");}
				catch(e) {alert('Requires ajax compatibility'); return false;}
			}
		}
	xmlHttp.onreadystatechange = function(){
		if(xmlHttp.readyState==4){
			//call callback
			alert(xmlHttp.responseText);
			var result;
			try{eval('result = '+xmlHttp.responseText);}
			catch(e){result = false;}
			
			eval(callback+'(result);');
		}
	}
	try{
		//alert(url);
		
		xmlHttp.open(mode,url,true);
		xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		xmlHttp.send(data);
	}
	catch(e){
		return false;
	}
}
