/*
Attributes: 
	[Javascript function] - gsSimpleAjax
		url			: url target for the ajax call (required)
		target		: id of div or other target to load with results of ajax call (optional)
		method		: method to use, default is post (optional)
		callback	: function to call after ajax returns with the results (optional)
		form		: id of form to post (optional)
Usage:
	<script>
		gsSimpleAjax({url:'http://www.google.com', target:'myDiv', method:'post', callback:'mycallbackfunction()', form:'myForm'});
	</script>
*/
	
if (!sgsAjaxStore) {
	var sgsAjaxStore = new Object();
	
	/*sgsAjaxTarget = document.createElement("DIV");
	sgsAjaxTarget.setAttribute("id", "defaultsgsAjaxTarget");
	sgsAjaxTarget.style.display = 'none';
	window.appendChild(sgsAjaxTarget);*/
	
	function sgsAjaxObj() {
		var modetypes = ["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];
		if (window.ActiveXObject) {
			for (var i=0; i<modetypes.length; i++) {
				try{return new ActiveXObject(modetypes[i])}
				catch(e){}
			}
		} else if (window.XMLHttpRequest) return new XMLHttpRequest();
		else return false;
	}
	
	function sgsAjaxPostFormStr(gsForm) {
		var sgsPostStr;
		var sgsPostStr_array = [];
		if (!gsForm.id) gsForm = document.getElementById(gsForm);
		for (i=0;i<gsForm.elements.length;i++) {
			var elem = gsForm.elements[i];
			if (!elem.name) continue;
			if ((elem.type == 'radio' || elem.type == 'checkbox') && !elem.checked) continue;
			if (elem.nodeName.match(/SELECT/i) && elem.multiple) {
				var sel_array = new Array();
				for (var o=0;o<elem.options.length;o++)
					if (elem.options[o].selected) sel_array[sel_array.length] = elem.name + "=" + encodeURIComponent(elem.options[o].value);
				var sel_str = sel_array.join('&');
				sgsPostStr_array[sgsPostStr_array.length] = sel_str;
			} else if (elem.nodeName.match(/SELECT/i)) sgsPostStr_array[sgsPostStr_array.length] = elem.name + "=" + encodeURIComponent(elem.options[elem.selectedIndex].value);
			else sgsPostStr_array[sgsPostStr_array.length] = elem.name + "=" + encodeURIComponent(elem.value);
		}
		sgsPostStr = sgsPostStr_array.join("&");
		return sgsPostStr;
	}

	function sgsAjax(parameters) {
		var url = (parameters.url == null) ? '' : parameters.url;
		var target = (parameters.target == null) ? 'defaultsgsAjaxTarget' : parameters.target;
		var method = (parameters.method == null) ? 'post' : parameters.method;
		var callback = (parameters.callback == null) ? null : parameters.callback;
		var form = (parameters.form == null) ? null : parameters.form;
		
		if (url == '') {
			alert('URL is required for sgsAjax');
		} else {
			sgsAjaxStore[target] = new Object();
			sgsAjaxStore[target].callback = callback;
			sgsAjaxStore[target].ajaxObj = new sgsAjaxObj();
			sgsAjaxStore[target].ajaxObj.onreadystatechange = function() {
				if (sgsAjaxStore[target].ajaxObj.readyState == 4 && (sgsAjaxStore[target].ajaxObj.status == 200 || window.location.href.indexOf("http") == -1)) {
					if (document.getElementById(target)) {
						thisRT = sgsAjaxStore[target].ajaxObj.responseText;
						while (thisRT.substring(0,1) == ' ') thisRT = thisRT.substring(1, thisRT.length);
					    while (thisRT.substring(thisRT.length-1,thisRT.length) == ' ') thisRT = thisRT.substring(0, thisRT.length-1);
						document.getElementById(target).innerHTML = '<span style="display:none;">ignore</span>' + thisRT;
						sgsAjaxScripts = document.getElementById(target).getElementsByTagName("script");
						sgsAjaxScriptArr = new Array();
						for (i = 0; i < sgsAjaxScripts.length; i++) sgsAjaxScriptArr[i] = sgsAjaxScripts[i].text;
						for (i = 0; i < sgsAjaxScriptArr.length; ++i) {
							if (sgsAjaxScriptArr[i].length != 0) {
								var oScript = document.createElement('script');
								oScript.text = sgsAjaxScriptArr[i];
								document.getElementsByTagName("head").item(0).appendChild(oScript);
							}
						}
					}
					if (sgsAjaxStore[target].callback != null) eval(sgsAjaxStore[target].callback);
				}
			}
			if (method == 'post') {
				var sgsFormParams = '';
				if (form != null) sgsFormParams = sgsAjaxPostFormStr(form);
				else if (url.indexOf('?')) sgsFormParams = url.substring(url.indexOf('?')+1,url.length);
				sgsAjaxStore[target].ajaxObj.open("POST", url, true);
				sgsAjaxStore[target].ajaxObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
				sgsAjaxStore[target].ajaxObj.setRequestHeader("Content-Length", url.length);
				sgsAjaxStore[target].ajaxObj.send(sgsFormParams);
			} else {
				sgsAjaxStore[target].ajaxObj.open("GET", url, true);
				sgsAjaxStore[target].ajaxObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				sgsAjaxStore[target].ajaxObj.send(null);
			}
		}
	}
}
