function $(oId){
	if (!oId) {
		return null;
	}
	return document.getElementById(oId);
}
function __getRequestObject(){
	var xmlHttp = null;
	try {
		xmlHttp = new XMLHttpRequest();
	} catch (e) {
		var progIds = ['MSXML2.XMLHTTP', 'Microsoft.XMLHTTP', 'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0'];
		var success = false;
		for (var iterator = 0; (iterator < progIds.length) && ( ! success); iterator ++) {
			try {
				xmlHttp = new ActiveXObject(progIds[iterator]);
				success = true;
			} catch (e) {}
		}
		if ( ! success ) {
			return null;
		}
	}
	return xmlHttp;
}
function __ParseXML(oXml){
	oXml = oXml.documentElement;
	for (var i = 0 ; i < oXml.childNodes.length ; i++){
		if (oXml.childNodes[i].nodeName == "ajax"){
			var sAction;
			var sId;
			var sTag;
			var sData;
			for (var j = 0 ; j < oXml.childNodes[i].attributes.length ; j++){
				if (oXml.childNodes[i].attributes[j].name == "a"){
					sAction = oXml.childNodes[i].attributes[j].value;
				}
				if (oXml.childNodes[i].attributes[j].name == "i"){
					sId = oXml.childNodes[i].attributes[j].value;
				}
				if (oXml.childNodes[i].attributes[j].name == "t"){
					sTag = oXml.childNodes[i].attributes[j].value;
				}
			}
			if (oXml.childNodes[i].firstChild){
				var cdata = oXml.childNodes[i].firstChild;
				sData = cdata.nodeValue;
				while(cdata){
					cdata = cdata.nextSibling;
					if (cdata == null || cdata.nodeType != 4) break;
					sData += cdata.nodeValue;
				}
			}
			else {
				sData = "";
			}
			try{
				if (sAction == "alert"){
					alert(sData);
				}
				if (sAction == "javascript"){
					eval(sData);
				}
				if (sAction == "append"){
					eval("$(sId)." + sTag + "+= sData;");
				}
				if (sAction == "insert"){
					eval("$(sId)." + sTag + " = sData;");
				}
				if (sAction == "include"){
					var objHead = document.getElementsByTagName('body');
					var objScript = document.createElement('script');
					objScript.language = 'javascript';
					objScript.type = 'text/javascript';
					objScript.src = sData;
					objHead[0].appendChild(objScript);
				}
			}
			catch(e){
				alert(e);
			}
				delete sAction;
				delete sId;
				delete sTag;
				delete sData;
				delete cdata;
			}	
		}
	delete i;
	delete j;
	delete oXml;
}
function eajax() {
	var oRequest = __getRequestObject();
	var sData        = null;
	var sCurArgument = null;
	var sUrl         = RequestURL;
	var	iLength      = arguments.length;
	var i            = 0;
	
	if (iLength < 1){
		alert('Wrong Arguments!');
		return false;
	}
	sData  = "sFunction="+encodeURIComponent(arguments[0]);
	sData += "&iRequestId="+ new Date().getTime() + Math.random();
			
	for (i = 1; i < iLength; i++){
		sData = sData+"&sArgs[]="+encodeURIComponent(arguments[i]);
	}
		
	if(oRequest == null){
		alert("XMLHTTP Request don't created");
		return false;
	}
	if (RequestType == "GET"){
		if (sUrl.indexOf("?") == -1){
			sUrl += "?" + sData;
		} else {
				sUrl += "&" + sData;
		}
	}
	oRequest.open(RequestType, sUrl, true);
	if (RequestType == "POST"){
		try {
			oRequest.setRequestHeader("Method", "POST " + sUrl + " HTTP/1.1");
			oRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		}
		catch(e){
			alert("You brouser dont's support POST metod");
			return false;
		}
	}
	var oProgress = document.createElement('div');
	oProgress.setAttribute('id','progressBar');
	oProgress.innerHTML = '0%';
	oProgress.style.left = '45%';
	oProgress.style.top = document.body.scrollTop + 350;
	document.body.appendChild(oProgress);
	
	oRequest.onreadystatechange = function(){
		oProgress.innerHTML = (oRequest.readyState * 25) + "%";
		if (oRequest.readyState != 4){
			return false;
		}
			if(oRequest.status == 200){
				if(oRequest.responseXML.documentElement && oRequest.responseXML){
					window.status = "Request progress : complete";
					__ParseXML(oRequest.responseXML);
				} else {
					alert("No xml recived , server error! Try again");
					alert(oRequest.responseText);
				}
			}
			else {
				alert("Error retrieving data!\nReason : "+ oRequest.statusText);
			}
			delete oRequest;
			oRequest = null;	
			oProgress.parentNode.removeChild(oProgress);
			delete oProgress;		
	}
	oRequest.send(sData);
	if (oRequest){
		delete oRequest;
	}
	return true;
		
	
}
