var aRequest = false;
var aChangeFuncCode = false;
function aRequestReset() {
	try {
		aRequest = new XMLHttpRequest();
	} catch (trymicrosoft) {
		try {
			aRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (othermicrosoft) {
			try {
				aRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (failed) {
				aRequest = false;
			}
		}
	}
}
function aRequestGet(aUrl, aChangeFunc) { 

	aRequest.open("GET", aUrl, true);
	aChangeFuncCode = aChangeFunc;
	aRequest.onreadystatechange = aRequestChange;
	aRequest.send(null);
}
function aRequestPost(aUrl, aChangeFunc, aNames, aValues) {
	var postList = "";
	var count = 0;

	aRequest.open("POST", aUrl, true);
	aChangeFuncCode = aChangeFunc;
	aRequest.onreadystatechange = aRequestChange;
	
	for(count = 0; count < aNames.length; count++) {
		if(postList != "") { postList += "&"; }
		postList += aNames[count] + "=" + URLEncode(aValues[count]);
	}
	aRequest.send(postList);
}
function aRequestAbort() {
	try {
		aRequest.abort();
	} catch (abortFailed) {
	}
	aRequestReset();
}
function aRequestChange() {
	var result = true;
	try {
		if (aRequest.readyState != 4) {
			result = false;
		} else {
			if (aRequest.status != 200) {
				result = false;
			}
		}
	} catch (changeFailed) {
		result = false;
	}
	if(result) {
		aChangeFuncCode(true,aRequest.responseText);
	} else {
		aChangeFuncCode(false);
	}
}

function URLEncode (clearString) { 
  var output = '';
  var x = 0;
  clearString = clearString.toString();
  var regex = /(^[a-zA-Z0-9_.]*)/;
  while (x < clearString.length) {
    var match = regex.exec(clearString.substr(x));
    if (match !== null && match.length > 1 && match[1] !== '') {
    	output += match[1];
      x += match[1].length;
    } else {
      if (clearString[x] == ' ') {
    		output += '+';
			} else {
        var charCode = clearString.charCodeAt(x);
        var hexVal = charCode.toString(16);
		if(hexVal.length == 1) {
			hexVal = "0" + hexVal;
		}
        output += '%' + hexVal.toUpperCase();
      }
      x++;
    }
  }
  return output;
}
aRequestReset();
