/* ajax.js - Revision: AJAX Release 1.0 */

//	Copyright (c) 2006. Gavin Fu(傅政樺). All rights reserved.
//
//	語法：AJAX(Command, URL, [Parameters], [DataType]);
//	說明：
//		onReady：取出／寫入資料後執行的指令
//		URL：取出／寫入資料的網址
//		Parameters：傳送的資料
//		DataType：返回資料的類型 XML (XML類型), Text (文字類型) 或 Array (XML 轉換為 Array)，預設值：TEXT
//
function AJAX(onReady, URL) {
	var HTTP_Request = false;
	if (window.XMLHttpRequest) {
		HTTP_Request = new XMLHttpRequest();
		if (HTTP_Request.overrideMimeType) {
			HTTP_Request.overrideMimeType('text/xml');
		}
	} else if (window.ActiveXObject) {
		var ClassIDs = ["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.5.0","Msxml2.XMLHTTP.4.0","Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP.2.6","Microsoft.XMLHTTP.1.0","Microsoft.XMLHTTP.1","Microsoft.XMLHTTP"];
		i = 0;
		while (!HTTP_Request) {
			try {
				HTTP_Request = new ActiveXObject(ClassIDs[i]);
			} catch (e) {
				if (++i>=ClassIDs.length) {
					return;
				}
			}
		}
	}
	DataType = AJAX.arguments[AJAX.arguments.length-1].toUpperCase();
	HTTP_Request.onreadystatechange = function() {
		if (HTTP_Request.readyState==4) {
			if (HTTP_Request.status==200) {		// 已經取得資料，可以進行分析。
				if (DataType=='ARRAY') {
					function getValue(node) {
						if (node.firstChild.nodeName!='#text') {
							var value = new Array;
							for (var i=0; i<node.childNodes.length; i++) {
								value[node.childNodes[i].getAttribute('name')] = getValue(node.childNodes[i]);
							}
							return value;
						} else switch (node.nodeName) {
							case 'integer':
								return parseInt(node.firstChild.nodeValue, 10);
								break;
							case 'float':
								return parseFloat(node.firstChild.nodeValue);
								break;
							case 'boolean':
								return node.firstChild.nodeValue == 'true';
								break;
							default:
								return node.firstChild.nodeValue;
						}
					}
					var Request = HTTP_Request.responseXML;
					var XMLDoc = Request.firstChild.nodeName.toUpperCase() == 'XML' ? Request.lastChild.childNodes : Request.firstChild.childNodes;
					for (var i=0; i<XMLDoc.length; i++) 
						Request[XMLDoc[i].getAttribute('name')] = getValue(XMLDoc[i]);
					onReady(Request);
				} else if (DataType=='XML') onReady(HTTP_Request.responseXML);
				else onReady(HTTP_Request.responseText);
			} else {
				onReady(false);
			}
		}
	}
	if (AJAX.arguments.length>2 && !/^(xml)|(text)$/i.test(AJAX.arguments[2])) {
		HTTP_Request.open('POST', URL, true);
		HTTP_Request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		HTTP_Request.setRequestHeader("Content-length", AJAX.arguments[2].length);
		HTTP_Request.setRequestHeader("Connection", "close");
		HTTP_Request.setRequestHeader("If-Modified-Since","0");
		HTTP_Request.send(AJAX.arguments[2]);
	} else {
		HTTP_Request.open('GET', URL, true);
		HTTP_Request.setRequestHeader("If-Modified-Since","0");
		HTTP_Request.send(null);
	}
}