/**
 * @package 
 * @author {@link mailto:ss@toolboxstudios.com Steve Simons, Toolbox Studios, Inc.}
 * @license http://toolboxstudios.com Contact about usage
 * @revision $Revision: 1.7 $
 * @copyright Copyright 2008
**/

function createXMLHttpRequest() {
	var xmlhttp;
	try {
		// native XMLHttpRequest object
		xmlhttp = new XMLHttpRequest();
	}
	catch(e) {
		// IE/Windows ActiveX version
		var xmlhttpversions = new Array(
				"MSXML2.XMLHTTP.6.0",
				"MSXML2.XMLHTTP.5.0",
				"MSXML2.XMLHTTP.4.0",
				"MSXML2.XMLHTTP.3.0",
				"MSXML2.XMLHTTP",
				"Microsoft.XMLHTTP"
			);
		for (var i=0; i<xmlhttpversions.length && !xmlhttp; i++) {
			try {
				xmlhttp = new ActiveXObject(xmlhttpversions[i]);
			}
			catch (e) {}
		}
	}
	return xmlhttp;
}

var xmlhttp = createXMLHttpRequest();

function simpleAjaxGet(requestPage,obj,keydata) {
	if (xmlhttp && obj) {
		if (typeof keydata == "undefined" || keydata == null) {
			xmlhttp.open( "GET", decodeURIComponent(requestPage), true);
			postdata = null;
		}
		else {
			xmlhttp.open( "POST", decodeURIComponent(requestPage), true);
			xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
			if (xmlhttp.overrideMimeType)
				xmlhttp.setRequestHeader("Connection","close");
			postdata = serialize(keydata);
		}
		xmlhttp.onreadystatechange = function() {
			if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
				obj.innerHTML = xmlhttp.responseText;
			}
		}
		xmlhttp.send(postdata);
	}
}

function doAjax(requestPage,func,keydata) {
	if (xmlhttp && func) {
		if (typeof keydata == "undefined" || keydata == null) {
			xmlhttp.open( "GET", decodeURIComponent(requestPage), true);
			postdata = null;
		}
		else {
			xmlhttp.open( "POST", decodeURIComponent(requestPage), true);
			xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
			if (xmlhttp.overrideMimeType)
				xmlhttp.setRequestHeader("Connection","close");
			postdata = serialize(keydata);
		}
		xmlhttp.onreadystatechange = function() {
			if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
				func(xmlhttp);
			}
		}
		xmlhttp.send(postdata);
	}
}


function TboxAjax() {
	this.xmlhttp;
	try {
		// native XMLHttpRequest object
		this.xmlhttp = new XMLHttpRequest();
	}
	catch(e) {
		// IE/Windows ActiveX version
		var xmlhttpversions = new Array(
				"MSXML2.XMLHTTP.6.0",
				"MSXML2.XMLHTTP.5.0",
				"MSXML2.XMLHTTP.4.0",
				"MSXML2.XMLHTTP.3.0",
				"MSXML2.XMLHTTP",
				"Microsoft.XMLHTTP"
			);
		for (var i=0; i<xmlhttpversions.length && !xmlhttp; i++) {
			try {
				this.xmlhttp = new ActiveXObject(xmlhttpversions[i]);
			}
			catch (e) {}
		}
	}
}

TboxAjax.prototype.simpleAjaxGet = function( requestPage, obj, keydata) {
	if ( this.xmlhttp && obj) {
		if ( typeof keydata == "undefined" || keydata == null) {
			this.xmlhttp.open( "GET", decodeURIComponent( requestPage), true);
			postdata = null;
		}
		else {
			this.xmlhttp.open( "POST", decodeURIComponent( requestPage), true);
			this.xmlhttp.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded");
			if ( this.xmlhttp.overrideMimeType)
				this.xmlhttp.setRequestHeader( "Connection", "close");
			postdata = serialize( keydata);
		}
		this.xmlhttp.onreadystatechange = function() {
			if ( this.readyState == 4 && this.status == 200) {
				obj.innerHTML = this.responseText;
			}
		}
		this.xmlhttp.send( postdata);
	}
}

TboxAjax.prototype.doAjax = function( requestPage, func, keydata) {
	if ( this.xmlhttp && func) {
		if ( typeof keydata == "undefined" || keydata == null) {
			this.xmlhttp.open( "GET", decodeURIComponent( requestPage), true);
			postdata = null;
		}
		else {
			this.xmlhttp.open( "POST", decodeURIComponent( requestPage), true);
			this.xmlhttp.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded");
			if ( this.xmlhttp.overrideMimeType)
				this.xmlhttp.setRequestHeader( "Connection", "close");
			postdata = serialize( keydata);
		}
		this.xmlhttp.onreadystatechange = function() {
			if ( this.readyState == 4 && this.status == 200) {
				func( this);
			}
		}
		this.xmlhttp.send( postdata);
	}
}



function serialize(a) {
	var s = [];
	if (a.constructor == Array) {
		for (var i = 0; i < a.length; i++)
			s.push(a[i].name + "=" + encodeURIComponent(a[i].value));
	}
	else {
		for (var j in a)
			s.push(j + "=" + encodeURIComponent(a[j]));
	}
	return s.join("&");
}

function tboxGetFormData( container) {
	var data = [];
	var fieldname = '';
	var inputs = container.getElementsByTagName( 'input');
	for (var i = 0; i < inputs.length; i++) {
		switch (inputs[i].type) {
		case 'text':
		case 'password':
		case 'hidden':
				data.push({name:inputs[i].name,value:inputs[i].value});
			break;
		case 'radio':
				if (inputs[i].checked)
					data.push({name:inputs[i].name,value:inputs[i].value});
			break;
		case 'checkbox':
				if (inputs[i].checked)
					data.push({name:inputs[i].name,value:inputs[i].value});
			break;
		}
	}
	var selects = container.getElementsByTagName( 'select');
	for (i = 0; i < selects.length; i++) {
		if ( selects[i].multiple) {
			for (var o = 0; o < selects[i].options.length; o++)
				if (selects[i].options[o].selected)
					data.push({name:selects[i].name, value:selects[i].options[o].value});
		}
		else
			data.push({name:selects[i].name, value:selects[i].options[selects[i].selectedIndex].value});
	}
	var textareas = container.getElementsByTagName( 'textarea');
	for (i = 0; i < textareas.length; i++)
		data.push({name:textareas[i].name,value:textareas[i].value});
	return data;
}

