

function S$(name)
{
	var obj = document.getElementById(name);
	obj = (obj) ? obj : document.getElementsByTagName(name);
	return obj
}
//function $appand(el) { document.getElementsByTagName("body")[0].append}
// jquery的效率比js低 (上式較快).
function S$append(el) { $("body").appendChild(el); }
function S$remove(el) { $("body").removeChild(el); }




var ajaxObj = {
	_asynload : function (_url, _params, _onloaded , _onerror, _loading){
		var _request = ajaxObj.pri_getRequestObj();
		if (_loading) ajaxObj.pri_loading(true);
		_request.open("POST", _url, true);
		_request.SetRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");
		_request.send(ajaxObj.pri_getQueryString(_params));
		// 0: request not initialized
		// 1: server connection established
		// 2: request received
		// 3: processing request
		// 4: request finished and response is ready
		_request.onreadystatechange = function (){
			if(_request.readyState == 4)
			{
				if (_loading) ajaxObj.pri_loading(false);
				if (_request.status == 200)
				{
					var _obj = eval("(" + _request.responseText  + ")");
					_onloaded.call(this, _obj);
				}
				else
				{
					(_onerror) ? _onerror.call(this) : ajaxObj.pri_defaultError.call(this, _url, _request.status)
				}
			}
		}
	},
	_syncload : function (_url, _params, _loading){
		var _request = ajaxObj.pri_getRequestObj();
		if (_loading) ajaxObj.pri_loading(true);
		_request.open("POST", _url, false);
		_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
		_request.send(ajaxObj.pri_getQueryString(_params));
		if (_loading) ajaxObj.pri_loading(false)
		var _response = _request.responseText.replace(/^\s+/g, '').replace(/\s$/g, '');
		return (_response.indexOf("{") == 0) ? eval("(" + _response + ")") : "";
	},
	pri_getRequestObj : function (){
		try { return new XMLHttpRequest(); }
		catch(e)
		{
				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; i++)
				{
						try { return new ActiveXObject(_XmlHttpVersions[i]); }
						catch (e) {}
				}
		}
	},
	pri_getQueryString: function(_params){
		var _qs = "";
		for (p in _params)
		{
			if (_qs != "") _qs += "&";
			_qs += p;
			_qs += "=";
			_qs += _params[p]
		}
		return _qs;
	},
	pri_loading: function(_show){
		var _ctrl = $("divload");
		if (!_ctrl)
		{
				_ctrl = document.createElement("div");
				_ctrl.id = "divload";
				_ctrl.innerHTML = "Loading";
				$append(_ctrl);
		}
		_ctrl.style.display = (_show) ? "block" : "none";
	},
	pri_defaultError: function(_url, _status){
		if (_status != 0) alert("HttpRequest Error To " +_url +"(status:" + _status + ")");
	}
}



function S$syncload(_url, _params, _loading) { return ajaxObj._syncload(_url, _params, _loading); }
function S$asycload(_url, _params, _onloaded, _onerror, _loading) { ajaxObj._asynload(_url, _params, _onloaded, _onerror, _loading); }

