//==================================================
//
// iAJAX Object AJAX 物件
// 版權所有 (C) 2007/03 許世衛 http://talk.away.com.tw/
// 遵循 GNU GPL 使用規範，修改或散佈時請保留這一段版權聲明。
//

function iAJAXObject () {

	this.Img = "iAJAX/";
	this.GetURL = "iAJAX/GetURL.php";
	this.http_request = this.newHttpRequest_();
}

iAJAXObject.prototype.newHttpRequest_ = function () {

	var http_request = false;

	if (window.XMLHttpRequest) {
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
			http_request.overrideMimeType('text/xml');
		}
	} else if (window.ActiveXObject) {
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}

	return http_request;
}

iAJAXObject.prototype.get_ = function (url, async, func) {
	if (!async) async = false;

	var qidx = url.indexOf("?");
	if (qidx == -1) url += "?";
	url = url.replace("?", "?iajax_seed="+this.seed_()+"&");

	this.http_request.open("GET", url, async);
	this.http_request.onreadystatechange = (async) ? func : function() {void(0);};
	this.http_request.send(null);

	if (async) return;
	return this.http_request.responseText;
}

iAJAXObject.prototype.post_ = function (url, ss, async, func) {
	if (!async) async = false;

	var qidx = url.indexOf("?");
	if (qidx == -1) url += "?";
	url = url.replace("?", "?iajax_seed="+this.seed_()+"&");

	this.http_request.open('POST', url, async);
	this.http_request.onreadystatechange = (async) ? func : function() {void(0);};
	this.http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");

	if (typeof(ss)=="string")
		this.http_request.send(ss);
	else if (ss instanceof Array) {
		var paramAy = new Array();
		for (i in ss) paramAy[i] = i+"="+ss[i];
		var param = paramAy.join("&");
		this.http_request.send(param);
	}

	if (async) return;
	return this.http_request.responseText;
}

iAJAXObject.prototype.iGet_ = function (url, func) {

	var qidx = url.indexOf("?");
	if (qidx == -1) url += "?";
	url = url.replace("?", "?iajax_seed="+this.seed_()+"&");

	var http_request = this.newHttpRequest_();
	http_request.open("GET", url, true);
	http_request.onreadystatechange = function() {
		if (http_request.readyState!=4) return;
		if (func) func((http_request.status==200) ? http_request.responseText : false);
	};
	http_request.send(null);
}

iAJAXObject.prototype.iPost_ = function (url, ss, func) {

	var qidx = url.indexOf("?");
	if (qidx == -1) url += "?";
	url = url.replace("?", "?iajax_seed="+this.seed_()+"&");

	var http_request = this.newHttpRequest_();
	http_request.open('POST', url, true);
	http_request.onreadystatechange = function() {
		if (http_request.readyState!=4) return;
		if (func) func((http_request.status==200) ? http_request.responseText : false);
	};
	http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");

	if (typeof(ss)=="string")
		http_request.send(ss);
	else if (ss instanceof Array) {
		var paramAy = new Array();
		for (i in ss) paramAy[i] = i+"="+ss[i];
		var param = paramAy.join("&");
		http_request.send(param);
	}
}

iAJAXObject.prototype.iGetURL_ = function (url, func) {

	var qidx = url.indexOf("?");
	if (qidx == -1) url += "?";
	url = url.replace("?", "?iajax_seed="+this.seed_()+"&");

	url = this.GetURL+"?"+url;

	var http_request = this.newHttpRequest_();
	http_request.open("GET", url, true);
	http_request.onreadystatechange = function() {
		if (http_request.readyState!=4) return;
		if (func) func((http_request.status==200) ? http_request.responseText : false);
	};
	http_request.send(null);
}

iAJAXObject.prototype.iPostURL_ = function (url, ss, func) {

	var qidx = url.indexOf("?");
	if (qidx == -1) url += "?";
	url = url.replace("?", "?iajax_seed="+this.seed_()+"&");

	url = this.GetURL+"?"+url;

	var http_request = this.newHttpRequest_();
	http_request.open('POST', url, true);
	http_request.onreadystatechange = function() {
		if (http_request.readyState!=4) return;
		if (func) func((http_request.status==200) ? http_request.responseText : false);
	};
	http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");

	if (typeof(ss)=="string")
		http_request.send(ss);
	else if (ss instanceof Array) {
		var paramAy = new Array();
		for (i in ss) paramAy[i] = i+"="+ss[i];
		var param = paramAy.join("&");
		http_request.send(param);
	}
}

iAJAXObject.prototype.postForm_ = function (url, idAy, async, func) {
	var ssAy = new Array();
	for (var i=0; i<idAy.length; i++)
		ssAy[i] = idAy[i]+"="+escape(this.getValue_(idAy[i], ""));
	var ss = ssAy.join("&");
	return this.post_(url, ss, async, func);
}

iAJAXObject.prototype.iPostForm_ = function (url, idAy, func) {
	var ssAy = new Array();
	for (var i=0; i<idAy.length; i++)
		ssAy[i] = idAy[i]+"="+escape(this.getValue_(idAy[i], ""));
	var ss = ssAy.join("&");
	return this.iPost_(url, ss, func);
}

iAJAXObject.prototype.isReady_ = function () {
	return this.http_request.readyState == 4;
}

iAJAXObject.prototype.isOk_ = function () {
	return this.http_request.status == 200;
}

iAJAXObject.prototype.responseText_ = function () {
	return this.http_request.responseText;
}

iAJAXObject.prototype.responseXML_ = function () {
	return this.http_request.responseXML;
}

iAJAXObject.prototype.br2nl_ = function (s) {
	if (typeof(s) == "string")
		return s.replace(/<br[\/ ]*>/gi, (document.all) ? "\r\n" : "\n");
	return s;
}

iAJAXObject.prototype.nl2br_ = function (s) {
	if (typeof(s) == "string")
		return s.replace(/\n/gi, "<br />").replace(/\r/gi, "");
	return s;
}

iAJAXObject.prototype.loading_ = function (n) {
	var mask    = document.getElementById("iAJAX_MaskDiv");
	var loading = document.getElementById("iAJAX_LoadingDiv");
	mask.style.display = "none";
	loading.style.display = "none";
	if (loading.innerHTML=="") loading.innerHTML = "<img src='"+this.Img+"progress.gif' border=0>";

	if (document.all) {
		var top  = Math.round((document.body.clientHeight-16) / 2)+document.body.scrollTop;
		var left = Math.round((document.body.clientWidth-16)  / 2)+document.body.scrollLeft;
	}
	else {
		var top  = Math.round((window.innerHeight-16) / 2)+window.pageYOffset;
		var left = Math.round((window.innerWidth-16)  / 2)+window.pageXOffset;
	}
	loading.style.top  = top;
	loading.style.left = left;

	if (n==1) {
		loading.style.display  = "";
	}
	else if (n==2) {
		mask.style.display    = "";
		loading.style.display = "";
		mask.style.top     = 0;
		mask.style.left    = 0;
		mask.style.width   = (document.all) ? document.body.clientWidth  : "100%";
		mask.style.height  = (document.all) ? document.body.scrollHeight : window.innerHeight + window.scrollMaxY;
		if (document.all)
			mask.style.filter = "alpha(opacity=0)";
		else
			mask.style.opacity = 0;
	}
	else if (n==3) {
		mask.style.display    = "";
		loading.style.display = "";
		mask.style.top    = 0;
		mask.style.left   = 0;
		mask.style.width  = (document.all) ? document.body.clientWidth  : "100%";
		mask.style.height = (document.all) ? document.body.scrollHeight : window.innerHeight + window.scrollMaxY;
		if (document.all)
			mask.style.filter = "alpha(opacity=60)";
		else
			mask.style.opacity = 0.6;
	}
}

iAJAXObject.prototype.divLoading_ = function (divname, n, desc) {
	var div = document.getElementById(divname);
	if (n==1) {
		div.innerHTML = "<center><img src='"+this.Img+"progress.gif' border=0>"+((desc!=null) ? "<br>"+desc : "")+"</center>";
		div.style.display = "";
	}
	else {
		div.innerHTML = "";
		div.style.display = "none";
	}
}

iAJAXObject.prototype.getValue_ = function (idname, d4) {
	var v = document.getElementById(idname);
	if (v) v = v.value;
	return (!v || v=="" || v=="0" || v==0) ? d4 : v;
}

iAJAXObject.prototype.setValue_ = function (idname, v) {
	var disp = document.getElementById("disp_"+idname);
	var em   = document.getElementById("value_"+idname);
	var inp  = document.getElementById(idname);

	v = this.strReplace_(v, '&#34;', '"');

	if (em)   em.innerHTML = v;
	if (inp)  inp.value = this.br2nl_(v);
	if (disp) disp.style.display = (!v || v=="" || v=="0" || v==0) ? "none" : "";
}

iAJAXObject.prototype.setValues_ = function (obj) {
	for (var i=0; i<obj.AttrNameList.length; i++)
		this.setValue_(obj.AttrNameList[i], eval("obj."+obj.AttrNameList[i]));
}

iAJAXObject.prototype.href_ = function () {
	var s = document.location.href;
	if (s.indexOf("?")==-1) s += "?";
	return s;
}

iAJAXObject.prototype.seed_ = function () {
	var d = new Date();
	return d.getTime();
}

iAJAXObject.prototype.show_ = function (id, n) {
	var id = document.getElementById(id);
	n = (n=="hide") ? "none" : "";
	if (id) id.style.display = n;
	return id;
}

iAJAXObject.prototype.hide_ = function (id) {
	var id = document.getElementById(id);
	if (id) id.style.display = "none";
	return id;
}

iAJAXObject.prototype.showhide_ = function (id) {
	var id = document.getElementById(id);
	if (id) id.style.display = (id.style.display=="") ? "none" : "";
	return id;
}

iAJAXObject.prototype.chkEmpty_ = function (id, msgEmpty) {
	var id = document.getElementById(id);
	if (id) if (id.value=="") {
		alert(msgEmpty); id.focus(); return false;
	}
	return id;
}

iAJAXObject.prototype.strReplace_ = function (ss, s1, s2) {
	if (typeof(ss) == "string")
	while (ss.indexOf(s1)>=0)
		ss = ss.replace(s1, s2);
	return ss;
}

document.write("<div id='iAJAX_MaskDiv'    style='z-index:3000; position:absolute; top:0px; left:0px; display:none; background-color:#ffffff;'></div>");
document.write("<div id='iAJAX_LoadingDiv' style='z-index:3001; position:absolute; top:0px; left:0px; display:none;'></div>");

var iAJAX = new iAJAXObject();
