var URL = {
	// public method for URL encoding
	encode : function (string) {
		return escape(this._utf8_encode(string));
	},

	// public method for URL decoding
	decode : function (string) {
		return this._utf8_decode(unescape(string));
	},

	// private method for UTF-8 encoding
	_utf8_encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
		for (var n = 0; n < string.length; n++) {
			var c = string.charCodeAt(n);
			if (c < 128) {
				utftext += String.fromCharCode(c);
			} else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			} else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
		}
	return utftext;
	},

	// private method for UTF-8 decoding
	_utf8_decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;
		while ( i < utftext.length ) {
			c = utftext.charCodeAt(i);
			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			} else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			} else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
		}
	return string;
	}
}

function GetAjaxObject() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		try {
			return new ActiveXObject("MSXML2.XMLHTTP");
		} catch (exception) {
			try {
				return new ActiveXObject("Microsoft.XMLHTTP");
			} catch (exception) {
				return false;
			}
		}
	}
	return false;
}

var AJAX = new Object();

AJAX.UNINITIALIZED	= 0;
AJAX.LOADING		= 1;
AJAX.LOADED		= 2;
AJAX.INTERACTIVE	= 3;
AJAX.COMPLETE		= 4;

AJAX.DataLoader = function (method, Req_URL, params, destDivID, onLoad, ajax_loader) {
	this.query	= null;
	this.onLoad	= (onLoad)	? onLoad	: this.ConstructorError('onLoad');
	this.onError	= this.defError;
	this.destDivID	= (destDivID)	? destDivID	: this.ConstructorError('destDivID');
	if (ajax_loader != null) {
		document.getElementById(destDivID).innerHTML = ajax_loader;
	}
	this.load(method,Req_URL,params);
}

AJAX.DataLoader.prototype.ConstructorError = function (ConstErrCode) {
	switch (ConstErrCode) {
		case 'onLoad':
			alert('AJAX Hiba: Az onLoad függvény nem definiálható a függvény hívásakor!');
			break;
		case 'destDivID':
			alert('AJAX Hiba: Hibás, vagy nem definiált destDiv!');
			break;
		default:
			alert('AJAX Hiba! Hibakód: ' + ConstErrCode); 
			
			break;
	}
	return(-1);
}

AJAX.DataLoader.prototype.load = function (method,Req_URL,params) {
	method = (method) ? method : 'GET';

	if (method == 'POST') {
		ContentType = 'application/x-www-form-urlencoded; charset=iso-8859-2';
	}

	if ((method == 'GET') && (params != null)) {
		var Req_URL	= Req_URL + "?" + params;
		var params	= null;
	}

	this.query = GetAjaxObject();
	if (this.query.overrideMimeType) {
		this.query.overrideMimeType('text/html; charset=iso-8859-2');
	}

	if (this.query) {
		try {
			var loader = this;

			this.query.onreadystatechange = function () {
				AJAX.DataLoader.state.call(loader);
			}

			this.query.open(method,Req_URL,true,'reborn','2007');

			if ((method == 'POST') && (ContentType)) {
				this.query.setRequestHeader('Content-Type', ContentType);
				this.query.setRequestHeader('Connection', 'close');
			}
			this.query.send(params);
		} catch (error) {
//			this.onError.call(this);
			this.ConstructorError('Request_SEND');
		}
	}
}

AJAX.DataLoader.state = function () {
	var query = this.query;
	var ready = query.readyState;
	try {
		var Ajax_HTTPStat = query.status;
		switch (ready) {
			case AJAX.UNINITIALIZED:
				break;
			case AJAX.LOADING:
				break;
			case AJAX.LOADED:
				break;
			case AJAX.INTERACTIVE:
				break;
			case AJAX.COMPLETE:
				switch (Ajax_HTTPStat) {
					case   0:
					case 200:
						this.onLoad.call(this);
					//304 Not Modified (Cache)
					case 304:
						break;
					//402 Unauthorized (User,Pass)
					case 402:
						break;
					//403 Forbidden
					case 403:
						break;
					//404 Not Found
					case 404:
						break;
					//500 Internal Server Error (IJ)
					case 500:
						break;
					//503 Service Unavailable (túlterhelt)
					case 503:
						break;
					default:
//						this.onError.call(this);
						this.ConstructorError('Ajax_HTTPstat: ' + Ajax_HTTPStat);
						break;
				}
				break;
			default:
				break;
		}
	} catch(error) {
//		this.onError.call(this);
//		this.ConstructorError('state');
	}
}

AJAX.DataLoader.prototype.defError = function () {
	error = "Adatlekérési hiba!\n" +
		"\nState      : " + this.query.readyState +
		"\nHTTP Status: " + this.query.status +
		"\nHeaders    : \n" + this.query.getAllResponseHeaders();
	alert(error);
}

function AjaxRequestEcho() {
	var destDiv		= document.getElementById(this.destDivID);
	destDiv.innerHTML	= this.query.responseText;
}

function GetParameters(form) {
	var elements	= form.elements;
	var pairs	= new Array();

	for (var i=0; i<elements.length; i++) {
		if ((name = elements[i].name) && (value = elements[i].value) && ((elements[i].type != "checkbox") || elements[i].checked)) {
			pairs.push(name + "=" + URL.encode(value));
		}
	}
	return pairs.join("&");
}

window.onload = mboard_reload;

function mboard_reload() {
	var RELOAD = setTimeout(mboard_reload,30000);
	var MBOARD = new AJAX.DataLoader('GET','./mboard.php',null,'msgboard',AjaxRequestEcho,null);
}

