var SM_Ajax = function(parms){
	this.version = 'Ver 2.0';
	this.Author = 'Slam';

	if (parms)
	{
		this.method = parms.method;
		this.url = parms.url;
		this.data = parms.data;
		this.Async = parms.Async;
		this.charset = parms.charset;
		this.OnFinish = parms.OnFinish;
		this.OnFail = parms.OnFail;
		this.OnReady = parms.OnReady;
	};
	var Me = this;

	var XmlHttp = function(){
		var obj = null;
		var objStr = ["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.5.0","Msxml2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
		try{
			obj = new XMLHttpRequest();
		}catch(e){
			for (var i = 0; i < objStr.length; i++)
			{
				try{
					obj = new ActiveXObject(objStr[i]);
					break;
				}catch(x){}
			
			}
		}
		return obj;
	};

	var strSplit = function(parms){
		if (parms==undefined) parms = '';
		var arr = parms.split('?');
		if (arr.length>1){
			return {'url': arr[0], 'data': arr[1]};
		}else{
			return {'url': arr[0], 'data': ''}
		}
	};

	this.send = function(data){
		if (this.method==undefined) this.method = 'GET';
		if (this.Async==undefined) this.Async = true;
		if (this.OnReady==undefined) this.OnReady = function(s){};
		if (this.OnFail==undefined) this.OnFail = function(err){};
		if (this.OnFinish==undefined) this.OnFinish = function(e){};
		this.method = this.method.toUpperCase();
		this.charset = (this.charset==undefined) ? '' : ';charset='+ this.charset ;

		if (data==undefined){
			data = '';
		}else{
			data += '&'
		}
		if (this.data==undefined){
			this.data = ''
		}else{
			this.data += '&'
		}
		data += this.data;
		if (this.method=='POST')
		{
			var lit = strSplit(this.url);
			this.url = lit.url;
			data = (lit.data!='') ? data + lit.data : (data.substring(0, data.length-1));
		}else{
			if (data!='')
			{
				data = data.substring(0, data.length-1);
				this.url = (this.url.indexOf('?')==-1) ? this.url += '?' + data : this.url += '&'+ data;
			}
			data = null;
		}

		var obj = XmlHttp();
		obj.open (this.method, this.url, this.Async);
		obj.setRequestHeader('Accept', 'text/javascript, text/html, application/xml, text/xml, */*');
		if (this.method=='POST')
		{
			
			if (data!=null) obj.setRequestHeader("Content-Length", data.length);
			obj.setRequestHeader('Content-Type','application/x-www-form-urlencoded'+ this.charset);
		}else{
			data = null
		};
		obj.onreadystatechange = function(){
			if (obj.readyState==4){
				var Result = false;
				var XmlDoc = false;
				if (obj.status==200){
					Result = obj.responseText;
					XmlDoc = obj.responseXML;
					obj = null;
					Me.OnFinish(Result, XmlDoc);
				}else{
					Me.OnFail(obj.status);
				}
			}else{
				Me.OnReady(obj.readyState);
			}
		};
		obj.send(data);
	};

	this.get = function(data){
		this.method = 'GET';
		this.send(data);
	};

	this.post = function(data){
		this.method = 'POST';
		this.send(data);
	};
}
