﻿// Ajax Plus
// Powered by Positron
// positron@tracker.in.th
function ajax(){
	this.go=function(sFunction,aArgs){
		if(arguments.length > 2){
			var loader= 'loading_'+arguments[2];
			if((targetObj=$(arguments[2])) && !$(loader)){
				var box=document.createElement('div')
				box.id=loader;
				box.style.left="0px";
				box.style.top="0px";
				box.style.paddingLeft="0px";
				box.style.paddingTop="0px";
				box.style.width="100%"
				box.style.height="100%"
				box.style.background='#CFCFCF';
				box.style.zIndex='1000';
				box.style.filter='alpha(opacity=50)';
				box.style.opacity=.5;
				targetObj.style.position='relative';
				box.style.position='absolute';
				box.innerHTML='<table width="100%" height="100%" ><tr><td align="right" height="16"><img src="/images/close.gif" style="cursor:pointer" border="0" alt="close" onclick="ajax.remove(\''+box.id+'\');"></td></tr><tr><td align="center" valign="middle"><img src="/images/loading.gif" border="0" alt="Loading..."></td></tr></table>';
				targetObj.appendChild(box);
			}
		}
		var xmlhttp,value;this.c=false;
		try{
			xmlhttp=new XMLHttpRequest();this.c=true;
		}catch(e){
			this.b=['Msxml2.XMLHTTP','Microsoft.XMLHTTP','MSXML2.XMLHTTP.5.0','Msxml2.XMLHTTP.4.0','MSXML2.XMLHTTP.3.0'];
			for(this.d=0;(this.d<this.b.length)&&(!this.c);this.d++){
				try{xmlhttp=new ActiveXObject(this.b[this.d]);this.c=true;}catch(e){alert('NO AJAX');}
			}
		};
		if(!this.c){alert('not support AJAX!');return;};
		this.data='ajaxplus='+sFunction;
		if(aArgs){
			for(i=0;i<aArgs.length;i++){
				value=aArgs[i];
				if(typeof(value)=="object") value=this.objectToXML(value);this.data+="&plusargs[]="+encodeURIComponent(value);
			}
		};
		xmlhttp.open("POST",ajaxURI,true);
		try{xmlhttp.setRequestHeader("Method","POST "+ajaxURI+" HTTP/1.1");xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");}
		catch(e){alert("บราวเซอร์ของคุณไม่รองรับการPost.");return;};
		if(document.getElementById('loading')){this.$('loading').style.display='block';}
		document.body.style.cursor = 'wait';xmlhttp.send(this.data);
		xmlhttp.onreadystatechange=function(){
			if(xmlhttp.readyState==4){
				if(loader) ajax.remove(loader);
				if(xmlhttp.status==200){ajax.xml(xmlhttp);}else if(xmlhttp.status==404){alert("ไม่มี URL นี้ในระบบ!");};
				document.body.style.cursor = 'default';
				if(document.getElementById('loading')) this.$('loading').style.display='none';return true;
			}
		}
	}
	this.objectToXML=function(obj){var sXml="<plusobj>";for(i in obj){try{if(i=='constructor') continue;if(obj[i]&&typeof(obj[i])=='function') continue;var key=i;var value=obj[i];if(value&&typeof(value)=="object"&&this.depth <=50){this.depth++;value=this.objectToXML(value);this.depth--;};sXml+="<e><k>"+key+"</k><v>"+value+"</v></e>";}catch(e){if(xajaxDebug)this.DebugMessage(e.name+": "+e.message);}};sXml+="</plusobj>";return sXml;}
	this.xml = function(x){var t=x.responseXML;if(t==null) return;window.status='Processing...';this.t=t.documentElement;if(this.t==null){window.status='XML response processing error';alert(x.responseTEXT);return;};
		var i,j;for(i=0;i<this.t.childNodes.length;i++){if(this.t.childNodes[i].nodeName=="cmd"){	for(j=0;j<this.t.childNodes[i].attributes.length;j++){eval('this.'+this.t.childNodes[i].attributes[j].name+'=this.t.childNodes[i].attributes[j].value');};
				this.d=(this.t.childNodes[i].firstChild?this.t.childNodes[i].firstChild.nodeValue:'');
				switch(this.a){
					case "al":alert(this.d);break;
					case "rm":this.remove(this.d);break;
					case "ap":eval("this.$(this.s)."+this.p+"+=this.d;");break;
					case "as":eval("this.$(this.s)."+this.p+"=this.d;");break;
					case "js":eval(this.d);break;
				}}};delete this.t;document.body.style.cursor='default';window.status='Done';}
	this.$=function(sId){if (!sId){return null;}var i=document.getElementById(sId);if(!i&&document.all){i=document.all[sId];};return i;}	
	this.remove=function(sId){objElement = this.$(sId);if(objElement&&objElement.parentNode && objElement.parentNode.removeChild){objElement.parentNode.removeChild(objElement);}}		
	this.getForm=function(frm){
		var objForm;
		var submitDisabledElements=false;
		if(arguments.length > 1&&arguments[1]==true) submitDisabledElements=true;
		
		var prefix="";if(arguments.length > 2) prefix=arguments[2];
		
		if(typeof(frm)=="string") objForm=this.$(frm);else objForm=frm;
		
		var sXml="<plusquery><q>";
		if(objForm&&objForm.tagName=='FORM')
		{
			var formElements=objForm.elements;
			for(var i=0;i < objForm.length;i++)
			{
				if(!formElements[i].name) continue;
				
				if(formElements[i].name.substring(0,prefix.length)!=prefix) continue;
				
				if(formElements[i].type&&(formElements[i].type=='radio'||formElements[i].type=='checkbox')&&formElements[i].checked==false) continue;
				
				if(formElements[i].disabled&&formElements[i].disabled==true&&submitDisabledElements==false) continue;
				
				var name=formElements[i].name;
				if(name)
				{
					if(sXml!='<plusquery><q>') sXml+='&';
					
					if(formElements[i].type=='select-multiple')
					{
						for(var j=0;j < formElements[i].length;j++)
						{
							if(formElements[i].options[j].selected==true) sXml+=name+"="+encodeURIComponent(formElements[i].options[j].value)+"&";
							
						}
					} else {
						sXml+=name+"="+encodeURIComponent(formElements[i].value);
					}
				}
			}
		};
		sXml+="</q></plusquery>";return sXml;
	}
}
var ajax=new ajax();
