// ----------------------------------------------------------------------------------------------------
// ajax.js - Client Side JavaScript Part
// ----------------------------------------------------------------------------------------------------
var AJAX = {
	Request : function(args) {
		// args: url, params{}, method, async, onSuccess, onError
		this.url = args.url || (document.location.protocol + '//' +
  	                            document.location.hostname + ':' +
        	                    document.location.port);
		this.params = '';
		if (args.params) {
			for (var key in args.params)
				this.params += (this.params ? '&' : '') + key + '=' + String(args.params[key]);
		}
		this.method = args.method || 'POST';
		this.async = !(args.sync === true);

		this.request = null;
		this.onSuccess = args.onSuccess || function(text,xml) {};
		this.onError = args.onError || function(status,text) {};

		// readystatechange handler
		this.stateChange = function() {
			if (this.request.readyState < 4)
				return false;
			if (this.request.status == 200 || this.request.status == 304)
				this.onSuccess(this.request.responseText,
				               this.request.responseXML);
			else
				this.onError(this.request.status,
				             this.request.statusText);
		};
		// submit request
		this.submit = function() {
			this.request = new XMLHttpRequest();
			this.request.onreadystatechange = this.stateChange.bind(this);

			if (this.method == 'GET') {
				if (this.params.length)
					this.url += '?' + this.params;
				this.request.open('GET',this.url,this.async);
				this.request.send(null);
			}
			else {
				this.request.open('POST',this.url,this.async);
				this.request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				this.request.send(this.params);
			}
		};
	}
}
// Workaround for IE
if (typeof(XMLHttpRequest) == 'undefined') {
	XMLHttpRequest = function() {
		try { return new ActiveXObject('Msxml2.XMLHTTP.6.0'); }
		  catch(e) {}
		try { return new ActiveXObject('Msxml2.XMLHTTP.3.0'); }
		  catch(e) {}
		try { return new ActiveXObject('Msxml2.XMLHTTP'); }
		  catch(e) {}
		try { return new ActiveXObject('Microsoft.XMLHTTP'); }
		  catch(e) {}
		throw 'This browser does not support XMLHttpRequest.';
	};
}
// bind methods to eventhandler
Function.prototype.bind = function(object) {
	var handler = this;
	return function() {
		return handler.apply(object);
	};
};
// ----------------------------------------------------------------------------------------------------
// end of ajax.js
// ----------------------------------------------------------------------------------------------------

