﻿/**
* XMLHttpRequest Object Pool
*
* @author    legend <legendsky@hotmail.com>
* @link      http://www.ugia.cn/?p=85
* @Copyright www.ugia.cn
*/

var XMLHttp = {
	_objPool: [],

	_getInstance: function () {
		for (var i = 0; i < this._objPool.length; i ++) {
			if (this._objPool[i].readyState == 0 || this._objPool[i].readyState == 4) {
				return this._objPool[i];
			}
		}

		// IE5中不支持push方法
		this._objPool[this._objPool.length] = this._createObj();
		return this._objPool[this._objPool.length - 1];
	},

	_createObj: function () {
		if (window.XMLHttpRequest) {
			var objXMLHttp = new XMLHttpRequest();
		} else {
			var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
			for(var n = 0; n < MSXML.length; n ++) {
				try {
					var objXMLHttp = new ActiveXObject(MSXML[n]);
					break;
				} catch(e) {
				}
			}
		}         

		// mozilla某些版本?有readyState屬性
		if (objXMLHttp.readyState == null) {
			objXMLHttp.readyState = 0;
			
			objXMLHttp.addEventListener("load", function () {
				objXMLHttp.readyState = 4;
				
				if (typeof objXMLHttp.onreadystatechange == "function") {
					objXMLHttp.onreadystatechange();
				}
			},  false);
		}
		
		return objXMLHttp;
	},

    // 發送請求(方法[post,get], 地址, 數據, 回傳函數)
	sendReq: function (method, url, data, callback, show_div, kbg, noReplace) {
		var objXMLHttp = this._getInstance();

		if (show_div) {
			var divTarget = document.getElementById(show_div);
			var pos = this.getObjectPos(divTarget);
			objWidth = divTarget.offsetWidth;
			objHeight = divTarget.offsetHeight;
		}

		var divBG = document.getElementById('showBG');
		if (!this.maskIndex) this.maskIndex = 100;
		else this.maskIndex++;
		var maskId = "Mask"+kbg;
		var mask = document.createElement('DIV');
		mask.style.display="block";
		mask.style.position="absolute";
		mask.style.zIndex=this.maskIndex;
		mask.className = "alp_bg";
		if (show_div) {
			mask.style.top=pos[1]+"px";
			mask.style.left=pos[0]+"px";
		}
		mask.style.width=objWidth+"px";
		mask.style.height=objHeight+"px";
		mask.innerHTML = "<img src=image/loading_icon.gif border=0 />";
		eval("var mask"+kbg+" = mask;");
		eval("mask"+kbg+".id = maskId;");
		eval("divBG.appendChild(mask"+kbg+");");

		with(objXMLHttp) {
			try {
				// 加隨機數防止瀏覽器緩存
				if (url.indexOf("?") > 0) {
					url += "&randnum=" + Math.random();
				} else {
					url += "?randnum=" + Math.random();
				}

				open(method, url, true);
				
				// 設定請求編碼方式
				setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
				send(data);
				onreadystatechange = function () {
					if (objXMLHttp.readyState == 4 && (objXMLHttp.status == 200 || objXMLHttp.status == 304)) {
						spaceChar = String.fromCharCode(65279); // in string front's space char code     charCodeAt(0)
						eval('returnString'+kbg+' = objXMLHttp.responseText.replace(new RegExp(spaceChar, "g"), "");'); // delete front link's
						if ((show_div) && (!noReplace)) {
							eval('divTarget.innerHTML = returnString'+kbg+';');
						}
						if (callback) {
							eval('callback(returnString'+kbg+');');
						}
						eval("divBG.removeChild(mask"+kbg+");");
					}
				}
			} catch(e) {
				alert(e);
			}
		}
	},

	getObjectPos: function (obj) {
		var curleft = curtop = 0;
		if (obj.offsetParent) {
			curleft = obj.offsetLeft;
			curtop = obj.offsetTop;
			while (obj = obj.offsetParent) {
				curleft += obj.offsetLeft;
				curtop += obj.offsetTop;
			}
		}
		return [curleft,curtop];
	},

	formValue: function (formTarget) {
		this.postString = "";
		try {
			for ( i = 0; i < parent.frames.length; ++i ) {
				if ( parent.frames[i].FCK ) parent.frames[i].FCK.UpdateLinkedField();
			}
		} catch(error) {
		}
		eval("formDoc = document."+formTarget+";");
		for (i=0;i<formDoc.length;i++) {
			formDoc.elements[i].value = formDoc.elements[i].value.replace(/\'/g, '&rsquo;');
			if (formDoc.elements[i].type == "radio") {
				if (formDoc.elements[i].checked) {
					this.postString += "&"+formDoc.elements[i].name+"="+formDoc.elements[i].value;
				}
			} else if (formDoc.elements[i].type == "checkbox") {
				if (formDoc.elements[i].checked) {
					this.postString += "&"+formDoc.elements[i].name+"="+formDoc.elements[i].value;
				}
			} else {
				this.postString += "&"+formDoc.elements[i].name+"="+formDoc.elements[i].value.replace(/\&/g, "-_and_-");
			}
		}
	},
	
	selectTarget: function (type, selectId, formName, fieldName) {
		eval("formDoc = document."+formName+";");
		if (!formDoc) formDoc = document.formList;
		if (type == "all") {
			eval("allFieldChecked = formDoc."+fieldName+"all.checked;");
			for (i=0;i<formDoc.length;i++) {
				if (formDoc.elements[i].name.indexOf(fieldName) == 0) {
					formDoc.elements[i].checked = allFieldChecked;
				}
			}
		}
		else {
			eval("fieldDoc = formDoc."+fieldName+selectId+";");
			fieldChecked = fieldDoc.checked;
			if (fieldChecked) fieldDoc.checked = false;
			else fieldDoc.checked = true;
	
			detectAllChecked = 1;
			for (i=0;i<formDoc.length;i++) {
				if ((formDoc.elements[i].name.indexOf(fieldName) == 0) && (formDoc.elements[i].name != fieldName+"all")) {
					if (!formDoc.elements[i].checked) detectAllChecked = 0;
				}
			}
			if (detectAllChecked) eval("formDoc."+fieldName+"all.checked = true;");
			else eval("formDoc."+fieldName+"all.checked = false;");
		}
	},

	end: function () {
	}
};  
