<!--
/************************************************************************************
 **
 **		Ajax
 **
 ************************************************************************************/


/************************************************************************************
 **		Constants
 **/
var undefined = 'undefined';


/************************************************************************************
 **		Global identefiers
 **/
var isIE = !isIE ? Boolean(navigator.appName.toLowerCase().indexOf('microsoft internet explorer') != (-1)) : isIE;
var oAJAX = new Object();


/************************************************************************************
 **		Object setup
 **/
oAJAX = {
	 // constants
	 READY_STATE_UNINITIALIZED:0,
	 READY_STATE_LOADING:1,
	 READY_STATE_LOADCOMPLETE:2,
	 READY_STATE_INTERACTIVE:3,
	 READY_STATE_COMPLETE:4,
	
	 METHOD_GET:0,
	 METHOD_POST:1,
	 METHOD_XML:3,
	 
	 // properties
	 oRequest:null,
	 nReadyState:0,
	 
	 // *************************************************************
	 //	   	start request
	 //
	 startRequest:function(strURL) {
		var strURLCleaned = strURL;
		var strURLArgumentsCleared = '';
		var nMethod = arguments.length > 1 ? arguments[1] : this.METHOD_GET;
		
		/* free resources */
		if (this.oRequest) { delete this.oRequest; } 
		
		/* get request object */
		if (window.XMLHttpRequest) {
			this.oRequest = new XMLHttpRequest();
		}
		else if (window.ActiveXObject) {
			try { this.oRequest = new ActiveXObject('Microsoft.XMLHTTP') } catch(e) { }
		}
		else {
			this.oRequest = null;
		}
		
		/* send data */
		if (this.oRequest) {
			try {
				/* attempt to send data  */
				if (typeof(this.oRequest.onreadystatechange) != undefined) {
					/* set callback */
					var self= this;
					this.oRequest.onreadystatechange = function() { self.onReadyStateChange(self); };
					
					/* clean url */
					var posQuestionMark;
					if ((posQuestionMark = strURL.indexOf('?')) > (-1)) {
						strURLCleaned = strURL.substr(0, posQuestionMark);
						strURLArgumentsCleared = strURL.substr(posQuestionMark + 1);
					}
					
					/* set data */
					switch(nMethod) {
						case this.METHOD_POST:
							this.oRequest.open("POST", strURLCleaned, true);
							this.oRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
							this.oRequest.setRequestHeader('Content-length', strURLArgumentsCleared.length);
							break;
							
						case this.METHOD_XML:
							strURLArgumentsCleared = 'xml=' + strURLArgumentsCleared;
							break;
						
						default:
							this.oRequest.open("GET", strURL, true);
							strURLArgumentsCleared = null;
							break;
					}
					
					/* send */
					this.oRequest.send(strURLArgumentsCleared);
				}
			}
			catch(e) {
				this.onError();
			}
		}
	 },
	 
	// *************************************************************
	 //	   	ready state
	 //
	 onReadyStateChange:function(self) {
		if (self.oRequest) {
			 /* set state */
			 self.nReadyState = self.oRequest.readyState;
		
			 /* check if request has completed */
			 if (self.nReadyState == self.READY_STATE_COMPLETE) {
				 if (self.oRequest.status == 200 || !self.oRequest.status) {
					 self.onLoad(self.oRequest.responseText, self.oRequest.nReadyState, self.oRequest.status);
				 }
				 else {
					 self.onError(self.oRequest.nReadyState, self.oRequest.status);
				 }
			 }
		 }
	 },
	
	// *************************************************************
	 //	   	get xml document (doesn't work in safari)
	 //
	 getXMLDocument:function() {
		 var oXMLDocument = null;
		 
		 if (document.implementation) {
			 if (document.implementation.createDocument) { 
				oXMLDocument = document.implementation.createDocument('', '', null); 
			}
			else if (window.ActiveXObject) {
				 var aMSXML = [ 'MSXML2.DOMDocument.5.0', 'MSXML2.DOMDocument.4.0', 'MSXML2.DOMDocument.3.0', 'MSXML2.DOMDocument', 'MSXML.DOMDocument' ];
				 
				 for (var i = 0; i < aMSXML.length; i ++) {
					try { oXMLDocument = new ActiveXObject(aMSXML[i]); break; } catch (e) {}
				 }
			 }
		 }
		 
		 if (oXMLDocument) {
			 if (typeof(oXMLDocument.load) == undefined) {
				 oXMLDocument = null;
			 }
		 }
		 
		 return oXMLDocument;
	 },
	
	 // *************************************************************
	 //	   	callbacks
	 //
	 onLoad:function(sResponseText, nReadyState, nStatus) {},
	 onError:function(nReadyState, nStatus) {}
}

//-->
