
// cogged from http://rajshekhar.net/blog/archives/85-Rasmus-30-second-AJAX-Tutorial.html
// simple AJAX implementation
function isIE(){
	return navigator.appName == "Microsoft Internet Explorer"
}
function createRequestObject() {
    var ro;
    if(isIE() ){
        ro = new ActiveXObject("Microsoft.XMLHTTP");
    }else{
        ro = new XMLHttpRequest();
    }
    return ro;
}

// create global http handler
var http = createRequestObject();
var _appdatahandler;
var _appnodatahandler;
function _handler() {
    if(http.readyState == 4){
    		if( http.status == 200 ){
				var response = http.responseText;
				var update = new Array();
				if(response.indexOf('|' != -1)) {					
					_appdatahandler(response.split('|'));
				}
			}
			else if( http.status == 201 ){
				_appnodatahandler();
			}
			else if( http.status == 202 ) {
				alert("Too many rows for query");
			}
			else{
				alert('backend failure\n'+http.responseText)
			}			
    }
}


// public i/f invoke to request specific service
function getSRow(cols,tables,where,datahandler,nodatahandler){

	http.open('get','generic/srowsql.jsp?cols='+escape(cols)
		+'&tabs='+escape(tables)
		+'&where='+escape(where))
	_appdatahandler=datahandler
	_appnodatahandler=nodatahandler;
	http.onreadystatechange=_handler
	http.send(null)
}

/*
	jtc extensions to prototype.js (http://www.conio.net)
	MultiUpdater
	Splits response into 	multiple fields
	
	
*/
Ajax.MultiUpdater = Class.create();
Object.extend(Object.extend(Ajax.MultiUpdater.prototype, Ajax.Request.prototype), {
  initialize: function(fields, url, options) {
    this.fields = fields;
    this.transport = Ajax.getTransport();
    this.setOptions(options);

    var onComplete = this.options.onComplete || Prototype.emptyFunction;
    this.options.onComplete = (function(transport, object) {
      this.updateContent();
      onComplete(transport, object);
    }).bind(this);

    this.request(url);
  },

  updateContent: function() {
    var response = this.transport.responseText;

    if (!this.options.evalScripts){
      response = response.stripScripts();
      }
 	var fvals = response.split("|");
 	len = fvals.length 	
 	for ( i=0;i<len;++i ){ 	
 		fval = fvals[i]; 		
 		var receiver = this.fields[i];
    if (receiver) {
      if (this.options.insertion) {
        new this.options.insertion(receiver,fval);
      } else {
        Element.update(receiver, fval);
      }
    } 		
 	}
    if (this.responseIsSuccess()) {
      if (this.onComplete)
        setTimeout(this.onComplete.bind(this), 10);
    }
  }
});
/*
	"convenience" versions of the above,
	half way between conio.net library
	and origianl non-reentrant ajax
*/

function getSRowId(flid,cols,tables,where,cb){

	var url = 'generic/srowsql.jsp'
	var params = 'cols='+escape(cols)
		+'&tabs='+escape(tables)
		+'&where='+escape(where)
	var ajax = new Ajax.Updater(
		{success:flid},
		url,
		{method:'get',
		parameters:params,
		onComplete:cb
		}
	);
}

function getSRowIds(flids,cols,tables,where,cb){
	var url = 'generic/srowsql.jsp'
	var params = 'cols='+escape(cols)
		+'&tabs='+escape(tables)
		+'&where='+escape(where)
	var ajax = new Ajax.MultiUpdater(
		flids,		
		url,
		{method:'get',
		parameters:params,
		onComplete:cb
		}		
	);
}

/*
	end JTC
*/


// end of global functions, 


