//HostPipe CMS Ajax Class

function CAjax() {
	this.target = '';
	this.method = 'GET';
	this.url = null;
	this.async = true;
	this.request = null;
	this.status = null;
	this.statusText = null;
	this.readyState = null;
	this.responseText = null;
	this.responseXML = null;
	this.postData = null;
	this.mimeType = null;
	
	this.init = function() {
		//alert('init');
		if (window.XMLHttpRequest) { // Mozilla, Safari, ...
			this.request = new XMLHttpRequest();
		} 
		else if (window.ActiveXObject) { // IE
			try {
				this.request = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					this.request = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {}
			}
		}
		return this.request;
	}; //init
	
	this.doReq = function() {
		//alert('doReq');
		if (!this.init()) {
			alert('Could not create XMLHttpRequest Object.');
			return false;
		}
		this.request.open(this.method, this.url, this.async);
		//alert(this.method);
		if (this.method=="POST") {
			//alert('POST-length: '+this.postData.length+'\ndata: '+this.postData);
			this.request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			this.request.setRequestHeader("Content-length", this.postData.length);
		}
		if	(this.mimeType) {
			try {
				this.request.overrideMimeType(this.mimeType);
			} catch(e) { }
		}
		if (this.async) {
			var self = this;
			this.request.onreadystatechange =	function() {
				var resp = null;
				//alert(self.request.readyState);
				if (self.request.readyState == 4) {
					switch(self.responseFormat) {
						case 'text':
							resp = self.request.responseText;
							break;
						case 'xml':
							resp = self.request.responseXML;
							break;
						case 'object':
							resp = self.request;
							break;
					}
					//alert(self.request.status);
					if (self.request.status >= 200 && self.request.status <= 299) {
						self.handleResp(resp)
					} else {
						self.handleErr(resp)
					}
				}
			}; //request.onreadystatechange
			this.request.send(this.postData);
		} else {
			this.request.send(this.postData);
			switch(this.responseFormat) {
				case 'text':
					resp = this.request.responseText;
					break;
				case 'xml':
					resp = this.request.responseXML;
					break;
				case 'object':
					resp = this.request;
					break;
			}
			if (this.request.status >= 200 && this.request.status <= 299) {
				this.handleResp(resp)
			} else {
				this.handleErr(resp)
			}
		}
	}; //doReq
	
	this.setMimeType = function(mimeType) {
			this.mimeType = mimeType;
	}; //setMimeType
	
	this.handleErr = function(str) {
		var errorWin;
		if(str.length>500) {
			str = str.substring(str.length-500,str.length);
		}
		alert('ERROR\n'+str);
		try {
			errorWin = window.open('','errorWin');
			errorWin.document.body.innerHTML = str;
		} catch(e) {
			alert('cannot display error, popup blocked\n\n'+str);
		}
	}; //handleErr
	
	this.writeResponse = function(str) {
		//alert('target: '+this.target);
		document.getElementById(this.target).innerHTML=str;
	}; //writeResponse
	
	this.abort = function() {
		if (this.request) {
			this.request.onreadystaechange = function() { };
			this.request.abort;
			this.request = null;
		}
	}; //abort
	
	this.doGet = function(url, target, async, hand, format) {
		this.url = url;
		this.target = target;
		this.async = async;
		this.handleResp = hand || this.writeResponse;
		this.responseFormat = format || 'text';
		this.doReq();
	}; //doGet
	
	this.doPost = function(url, target, postData, async, hand, format) {
		this.url = url;
		this.target = target;
		this.async = async;
		this.handleResp = hand || this.writeResponse;
		this.responseFormat = format || 'text';
		this.method='POST';
		this.postData=postData;
		this.doReq();
	};
}

function UpdateGet(url, target, wait) {
	var async = true;
	if (wait==undefined) { wait='no'; }
	if (wait=='yes') {
		async = false;
	}
	//alert(wait);
	var ajax = new CAjax();
	ajax.doGet(url, target, async);
}
function UpdatePost(url, target, eleList, wait) {
	var async = true;
	if (wait==undefined) { wait='no'; }
	if (wait=='yes') {
		async = false;
	}
	//alert(wait);
	var poststr = "";
	var aIDs = eleList.split(",");
	for(i = 0; i < aIDs.length; i++){
		poststr = poststr + aIDs[i] + "=" + encodeURI( document.getElementById(aIDs[i]).value ) + "&";
	}
	var ajax = new CAjax();
	ajax.doPost(url, target, poststr, async);
}

