function HttpRequest(method,url){
	this.method = method;
	this.url = url;
	this.init = CreateXMLHTTPObject;
	this.self_url = self.location.href;

	this.go=function go(str_url){
		self.location.href=str_url;
	}

	function CreateXMLHTTPObject(){
		var xObject = null;
		try {
			xObject = new ActiveXObject("Msxml2.xmlhttp.4.0");
		}
		catch (e){
			try{
				xObject = new XMLHttpRequest(); 
				if(xObject.overrideMimeType){
					xObject.overrideMimeType('text/xml');
				}

			}
			catch (e){
				try {
					xObject = new ActiveXObject("Msxml2.xmlhttp");
				} 
				catch (e) {
					try {
						xObject = new ActiveXObject("Microsoft.xmlhttp");
					} 
					catch (e) {	
						alert("Error: Unable to create XML HTTP object!");
					}
				}
			}
		}
		return xObject;
	}

	this.post = dopost;
	function dopost(obj,func,param)
	{
		//request.overrideMimeType('text/xml');
		obj.onreadystatechange = func ;
		obj.open(this.method, this.url, true);
		obj.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
		obj.send(param);
	}

	this.utf16to8 = utf16to8;
	function utf16to8(str) {
		if(str==''){
			return '';
		}
		var out, i, len, c;

		out = "";
		len = str.length;
		for(i = 0; i < len; i++) {
		c = str.charCodeAt(i);
		if ((c >= 0x0001) && (c <= 0x007F)) {
			out += str.charAt(i);
		} else if (c > 0x07FF) {
			out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
			out += String.fromCharCode(0x80 | ((c >>  6) & 0x3F));
			out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));
		} else {
			out += String.fromCharCode(0xC0 | ((c >>  6) & 0x1F));
			out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));
		}
		}
		return out;
	}

	this.$ = $;
	function $(id){
		return document.getElementById(id);
	}

	this.tagNameParam = tagNameParam
	function tagNameParam(name,obj){
		var objs = obj.getElementsByTagName(name);
		var param = '';
		for (i=0;i<objs.length;i++){
			param = param + objs.name+"="+escape(utf16to8(Trim(objs.value)))+"&";		
		}
		return param;
	}

	this.form2param = form2param
	function form2param( objs, ignore ) {
		/**                     //getElementsByClass('test')
		 * 调用方法: form2param(document.getElementsByTagName('*'), Array('submit'));
		 * param1: 一般不需要修改
		 * param2: 需要忽略的表单域名称
		 * retrun: 字符串
		 */
		var param = "";

		function add2param( str_param, tagName, value ) {
			var param
			if (str_param.length==0) {
				return tagName+"="+escape(utf16to8(value));
			}
			else {
				return str_param+'&'+tagName+"="+escape(utf16to8(value));
			}
		}

		function arrayToObject(arr) {
			var obj=new Object();
			for (i=0; i<arr.length; i++) {
				obj[arr[i]]=null;
			}
			return obj;
		}
		
		var tagnames = new Array("input", "textarea", "select");
		var chkboxs = new Array("checkbox", "radio");
		var obj_tagnames = arrayToObject(tagnames);
		var obj_ignore = arrayToObject(ignore);
		var obj_chkboxs = arrayToObject(chkboxs);
		
		for (var i=0; i<objs.length; i++) {
			if (objs[i].tagName.toLowerCase() in obj_tagnames) {
				if (!(objs[i].name.toLowerCase() in obj_ignore)) {
					if (objs[i].type.toLowerCase() in obj_chkboxs) {
						if (objs[i].checked) {
							param = add2param(param, objs[i].name.toLowerCase(), objs[i].value);
						}
					}
					else {
						param = add2param(param, objs[i].name.toLowerCase(), objs[i].value);
					}				
				}
			}
		}

		return param;
	}


	this.checkboxToArray = function (form,tag){
		var objs = form.getElementsByTagName(tag);
		var param = null;
		for (i=0;i<objs.length;i++ )
		{
			if(objs[i].type=="checkbox" && objs[i].checked){
				param+=objs[i].name+"="+escape(utf16to8(objs[i].value));
			}
		}
		return param;
	}

	this.load = function( url ){
		var ss = document.getElementsByTagName("script");
		for( i=0;i<ss.length;i++ ){
			if( ss[i].src && ss[i].src.indexOf( url ) != -1 ){
				this.onsuccess();
				return;
			}
		}
		 s = document.createElement("script");
		 s.type = "text/javascript";
		 s.src = url;
		 var head = document.getElementsByTagName("head")[0];
		 head.appendChild(s);
		 var self = this;

		 s.onload = s.onreadystatechange = function(){
			if( this.readyState && this.readyState == "loading" )
				return;
			self.onsuccess();
		 }
		 s.onerror = function(){
			head.removeChild(s);
			self.onfailure;
		 }
	};
	
	this.onsuccess = function(){};
	this.onfailure = function(){};
		
	//去掉字符串 的左边 空格
	this.LTrim = LTrim ;
	function LTrim(str){ 
		var i;
		for(i=0;i<str.length;i++)  {
			if( str.charAt(i)!=" " && str.charAt(i)!=null )
			break;
		}
		str = str.substring(i,str.length);
		return str;
	};
	//去掉字符串 的右边 空格
	this.RTrim = RTrim ;
	function RTrim(str){
		var i;
		for( i=str.length-1;i>=0;i-- ){
			if( str.charAt(i)!=" "&&str.charAt(i)!=null ) 
			break;
		}
		str = str.substring(0,i+1);
		return str;
	};
	//去掉字符串 的 左右边 空格
	this.Trim = Trim ; 
	function Trim(str){
		return LTrim(RTrim(str));
	};	


}