﻿// JScript 檔
var ASHTTP = new _XHTTP();

function _XHTTP() {
	var _XMLHttpRequest = new Array();
	var _LastModified = new Array();
	var _Index = -1;
	var _RVMore = new Array();
	var _CallbackCompleted = new Array();
	var _CallbackError = new Array();
	
	this.Get = function (Url, A, CallbackCompleted, CallbackError, More) {
		_Index += 1;
		_RVMore[_Index] = More;
		
		_XMLHttpRequest[_Index] = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
		_CallbackCompleted[_Index] = CallbackCompleted;
		_CallbackError[_Index] = CallbackError;
		_XMLHttpRequest[_Index].Index = _Index

		_XMLHttpRequest[_Index].onreadystatechange = function () {
			if (this.readyState == 4) {
				_LastModified[this.Index] = this.getResponseHeader("Last-Modified");

				switch (this.status.toString().substring(0, 1)) {
					case '1':
						_CallbackCompleted[this.Index](this.responseText, _RVMore[this.Index]);
						break;
					case '2':
						_CallbackCompleted[this.Index](this.responseText, _RVMore[this.Index]);
						break;
					case '3':
						_CallbackCompleted[this.Index](this.responseText, _RVMore[this.Index]);
						break;
					default:
						_CallbackError[this.Index](this.status, this.statusText, _RVMore[this.Index]);
						break;
				}
			}
		}

		_XMLHttpRequest[_Index].open('GET', Url, true);
		_XMLHttpRequest[_Index].setRequestHeader('Pragma', 'No-Cache');
		_XMLHttpRequest[_Index].setRequestHeader('Cache-Control', 'No-Cache');

		if (_LastModified[_Index]) {
			_XMLHttpRequest[_Index].setRequestHeader('If-Modified-Since', _LastModified[_Index]);
		}
		else {
			var _TempDate = new Date();
			
			_XMLHttpRequest[_Index].setRequestHeader('If-Modified-Since', _TempDate.toUTCString);
		}
			
		_XMLHttpRequest[_Index].send(((A == null) ? null : A.join('&')));
		
		return _Index;
	};
	
	this.Post = function (Url, A, CallbackCompleted, CallbackError, More) {
		_Index += 1;
		_RVMore[_Index] = More;
		
		_XMLHttpRequest[_Index] = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
		_CallbackCompleted[_Index] = CallbackCompleted;
		_CallbackError[_Index] = CallbackError;
		_XMLHttpRequest[_Index].Index = _Index

		_XMLHttpRequest[_Index].onreadystatechange = function () {
			if (this.readyState == 4) {
				switch (this.status.toString().substring(0, 1)) {
					case '1':
						_CallbackCompleted[this.Index](this.responseText, _RVMore[this.Index]);
						break;
					case '2':
						_CallbackCompleted[this.Index](this.responseText, _RVMore[this.Index]);
						break;
					case '3':
						_CallbackCompleted[this.Index](this.responseText, _RVMore[this.Index]);
						break;
					default:
						if (_CallbackError[this.Index]) {
							_CallbackError[this.Index](this.status, this.statusText, _RVMore[this.Index]);
						}
						break;
				}
			}
		}

		_XMLHttpRequest[_Index].open('POST', Url, true);
		_XMLHttpRequest[_Index].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		_XMLHttpRequest[_Index].setRequestHeader("Content-length", ((A == null) ? 0 : A.join('&').length));
		_XMLHttpRequest[_Index].setRequestHeader("Connection", "close");
		_XMLHttpRequest[_Index].setRequestHeader('Pragma', 'No-Cache');
		_XMLHttpRequest[_Index].setRequestHeader('Cache-Control', 'No-Cache');

		if (_LastModified[_Index]) {
			_XMLHttpRequest[_Index].setRequestHeader('If-Modified-Since', _LastModified[_Index]);
		}
		
		_XMLHttpRequest[_Index].send(((A == null) ? null : A.join('&')));
		
		return _Index;
	};

	var ErrorMessage = new Array();
	ErrorMessage[100] = 'Continue';
	ErrorMessage[101] = 'Switching protocols';
	ErrorMessage[200] = 'OK';
	ErrorMessage[201] = 'Created';
	ErrorMessage[202] = 'Accepted';
	ErrorMessage[203] = 'Non-Authoritative Information';
	ErrorMessage[204] = 'No Content';
	ErrorMessage[205] = 'Reset Content';
	ErrorMessage[206] = 'Partial Content';
	ErrorMessage[300] = 'Multiple Choices';
	ErrorMessage[301] = 'Moved Permanently';
	ErrorMessage[302] = 'Found';
	ErrorMessage[303] = 'See Other';
	ErrorMessage[304] = 'Not Modified';
	ErrorMessage[305] = 'Use Proxy';
	ErrorMessage[307] = 'Temporary Redirect';
	ErrorMessage[400] = 'Bad Request';
	ErrorMessage[401] = 'Unauthorized';
	ErrorMessage[402] = 'Payment Required';
	ErrorMessage[403] = 'Forbidden';
	ErrorMessage[404] = 'Not Found';
	ErrorMessage[405] = 'Method Not Allowed';
	ErrorMessage[406] = 'Not Acceptable';
	ErrorMessage[407] = 'Proxy Authentication Required';
	ErrorMessage[408] = 'Request Timeout';
	ErrorMessage[409] = 'Conflict';
	ErrorMessage[410] = 'Gone';
	ErrorMessage[411] = 'Length Required';
	ErrorMessage[412] = 'Precondition Failed';
	ErrorMessage[413] = 'Request Entity Too Large';
	ErrorMessage[414] = 'Request-URI Too Long';
	ErrorMessage[415] = 'Unsupported Media Type';
	ErrorMessage[416] = 'Requested Range Not Suitable';
	ErrorMessage[417] = 'Expectation Failed';
	ErrorMessage[500] = 'Internal Server Error';
	ErrorMessage[501] = 'Not Implemented';
	ErrorMessage[502] = 'Bad Gateway';
	ErrorMessage[503] = 'Service Unavailable';
	ErrorMessage[504] = 'Gateway Timeout';
	ErrorMessage[505] = 'HTTP Version Not Supported';
};


