var G_apilite = new Array();
var G_httpOK = 4;
var G_apiCount = 0;
var G_apiTimeout = 20000;
var G_apiDebug = ""; //new Array();

function getHTTPObject() 
	{ 
	var C=null;try{C=new ActiveXObject("Msxml2.XMLHTTP")}catch(e){try{C=new ActiveXObject("Microsoft.XMLHTTP")}catch(sc){C=null}}if(!C&&typeof XMLHttpRequest!="undefined"){C=new XMLHttpRequest()}return C
	}

function apilite_handleresponse(instance) {
	if (!G_apilite[instance]) { return; }
	if (G_apilite[instance].httpobj.readyState == G_httpOK) {
		clearTimeout(G_apilite[instance].timeoutID);
		var status = G_apilite[instance].httpobj.status;
		//alert ("status = "+status);
		var success = (status < 300 ? true : false);
		var tmp = new Array();
		if (success) {
			//Split the first line off the string, and look for 1 or 0 to determine if successful or not.
			tmp = G_apilite[instance].httpobj.responseText.split("\n");
			success = (tmp.shift() == '1' ? true : false);
		}
		if (success) {
			//If successful, then call success function, with remaining return string re-joined.
			window[G_apilite[instance].okfunc](tmp.join("\n"),G_apilite[instance].okargs,status);
		} else {
			//If failure, then call fail function.
			window[G_apilite[instance].failfunc](tmp.join("\n"),G_apilite[instance].failargs,status);
		}
		delete G_apilite[instance];
	}
}


function urlenc(str)
  { return escape(str).replace('+','%2B','g').replace('%20','+','g'); }

function arr2qstr(arr,enc)
  {
    var encode = (enc ? function(str){return urlenc(str);} : function(str){return(str);});
    var tmp = new Array();
    for (var key in arr)
      { tmp.push(encode(key)+'='+encode(arr[key])); }
    return tmp.join('&');
  }

/*
  function urldec(str)
    { return unescape(str.replace('+','%20','g').replace('%2B','+','g')); }

  function qstr2arr(str)
    {
      var tmp = new Array();
      var a = str.replace('+','%20','g').split('&');
      for (var i = 0; i < a.length; i++)
        { var x = a[i].split('='); tmp[urldec(x[0])] = urldec(x[1]); }
      return tmp;
    }
*/

function apilite_init(method,url,okfunc,okargs,failfunc,failargs) {
	var i = G_apiCount++;
        G_apilite[i] = new Array();
	G_apilite[i].okfunc=okfunc;
	G_apilite[i].okargs=okargs;
	G_apilite[i].failfunc=failfunc;
	G_apilite[i].failargs=failargs;
	G_apilite[i].timeoutID = setTimeout("window['"+failfunc+"']('','"+failargs+"','timeout'); delete G_apilite["+i+"];",G_apiTimeout);
	G_apilite[i].httpobj = getHTTPObject();
	G_apilite[i].httpobj.onreadystatechange = function() { apilite_handleresponse(i); };
	G_apilite[i].httpobj.open(method,url,true);
	return G_apilite[i];
}

function apilite_post(url,postobject,okfunc,okargs,failfunc,failargs,encode) {
	//PostObject should be formatted {name:value,name:value,...}
	//if encode evaluates to true, we'll urlencode the data before sending it
	postobject.rND0m=Math.round(Math.random()*99999999);
	var sendstring = arr2qstr(postobject,encode);

	//ShowDebug("API post-: "+url+" [ "+sendstring+" ]: "+okfunc+" / "+okargs+" : "+failfunc+" / "+failargs);
	//ShowDebug ("apilite_post("+url+","+postobject,okfunc,okargs,failfunc,failargs))

	//Set up and call the HTTP 
	var client = apilite_init('POST',url,okfunc,okargs,failfunc,failargs);
	client.httpobj.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); //'; charset=UTF-8'
	client.httpobj.setRequestHeader('Content-length', sendstring.length);
	client.httpobj.setRequestHeader('Connection', 'close');
	client.httpobj.send(sendstring);
}


function apilite_get(url,getobject,okfunc,okargs,failfunc,failargs,encode) {
	//GetObject should be formatted {name:value,name:value,...}
	//if encode evaluates to true, we'll urlencode the data before sending it
	getobject.rND0m=Math.round(Math.random()*99999999);	//just a quick way to prevent caching problems.
	var sendstring = (url.indexOf('?') == -1 ? '?' : '&') + arr2qstr(getobject,encode);	// prefix sendstring with ? or & as appropriate

	ShowDebug("API get-: "+url+" [ "+sendstring+" ]: "+okfunc+" / "+okargs+" : "+failfunc+" / "+failargs);
	//Set up and call the HTTP 
	var client = apilite_init('GET',url+sendstring,okfunc,okargs,failfunc,failargs);
	client.httpobj.send(null);
}

// for backward compatability
function apilite_call(url,okfunc,okargs,failfunc,failargs)
  { apilite_get(url,new Array(),okfunc,okargs,failfunc,failargs); }

function ShowDebug(debugstring)
	{
	}
