function httpRequest() {
	var req;
	var isGet = (arguments.length == 2);
	var m = (isGet ? "GET" : "POST");
	var q = (isGet ? null : arguments[1]);
	var f = arguments[arguments.length - 1];
	try {
		req = new XMLHttpRequest();
	}
	catch(err) {
		try {
			req = new ActiveXObject("MSXML2.XMLHTTP.3.0");
		}
		catch(err){
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(err) {
				alert("Your Browser Doesn't Support AJAX!");
				return false;
			}
		}
	}
	req.onreadystatechange = function() {
		var rsp;
		if(req.readyState == 4) {
			if(req.status != 200 || req.responseText == "false") {
				f(false);
			}
			else {
				if (req.responseXML && /\/.*\bxml\b/i.test(req.getResponseHeader("Content-Type"))) {
					rsp = req.responseXML
				}
				else {
					rsp = req.responseText;
				}
				f(rsp);
			}
		}
	}
	req.open(m, arguments[0], true);
	if (!isGet) req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	req.send(q);
	return true;
}

function enc(str) {
	return encodeURIComponent(str).replace(/%20/g,"+");
}

function dec(str) {
	return decodeURIComponent(str.replace(/\+/g," "));
}

var entChar = "<>&'\"";
var entities = ["&lt;", "&gt;", "&amp;", "&#39;", "&quot;"];

function entEnc(str) {
	return str.replace(/[<>&'"]/g, function(str) { return entities[entChar.indexOf(str)] });
}

function textToHTML(str) {
	var i, arr, arrLen;
	str = entEnc(str);
	str = str.replace(/\r/g, "");
	arr = str.split("\n\n");
	arrLen = arr.length;
	str = "";
	for (i=0;i<arrLen;i++) {
		str += '<p>' + arr[i].replace(/\n/g, '<br />') + '</p>';
	}
	return str;
}