﻿/* Phizz.Ajax.js requires Phizz.Xml.js to be loaded first */

Phizz.Ajax = {

	requests: new Array()

}

Phizz.Ajax.Request = function(url, onSuccessHandler, onErrorHandler) {
	this.url = url;
	this.delay = 0;
	this.onSuccessHandler = onSuccessHandler;
	this.onErrorHandler = onErrorHandler;
	this.parameters = new Array();
	this.httpRequest = null;
	this.httpResponse = null;
}

Phizz.Ajax.Request.prototype.AddParam = function(name, value) {
	this.parameters.push({name: name, value: value});
}

Phizz.Ajax.Request.prototype.ToString = function(encode) {
	var s = "";
	for (var i = 0; i < this.parameters.length; i++) {
		if (i > 0) s += "&";
		s += this.parameters[i].name + "=" + (encode ? encodeURIComponent(this.parameters[i].value) : this.parameters[i].value);
	}
	return s;
}

Phizz.Ajax.Request.prototype.Send = function() {
	this.httpRequest = Phizz.Xml.CreateXmlHttpRequest();
	Phizz.Ajax.requests.push(this);
	this.httpRequest.onreadystatechange = function() {Phizz.Ajax.requests[Phizz.Ajax.requests.length - 1].OnReadyStateChange()}; // TODO: This assumes a first in last out model - IE6 is giving me headaches trying any other way - fix it!
	var queryString = "";
	for (var i = 0; i < this.parameters.length; i++) {
		if (i > 0) queryString += "&";
		queryString += this.parameters[i].name + "=" + encodeURIComponent(this.parameters[i].value);
	}
	this.httpRequest.open("GET", this.url + "?" + queryString, true);
	this.httpRequest.send(null);
}

Phizz.Ajax.Request.prototype.OnReadyStateChange = function() {
	if (this.httpRequest.readyState == 4 || this.httpRequest.readyState == "complete") {
		if (this.httpRequest.status == 200) {
			this.httpResponse = this.httpRequest.responseXML;
			setTimeout(this.onSuccessHandler, this.delay);
		} else {
			setTimeout(this.onErrorHandler, this.delay);
		}
		Phizz.Ajax.requests.pop();
	} 
}
