/**
 * Remote Scripting Region
 */

var xmlHttp;

function createXmlHttp(){
	if (window.ActiveXObject){
		xmlHttp	= new ActiveXObject("Microsoft.XMLHTTP");		
	}
	else{
		xmlHttp = new XMLHttpRequest();
	}
}

/**
 * Main funtion for sending request to the server synchronously or asynchronously
 * @param string request method
 * @param string page url
 * @param boolean asynchronous
 * @param string handler for changing connection state
 * @param string parameter in the format of (name1=value1&..&namen=valuen)
 */
function sendRequest(method, strUrl, async, param, stateChangeHandler){
	createXmlHttp();
	
	var handler	= stateChangeHandler ? 
								typeof stateChangeHandler === 'string' ? eval(stateChangeHandler + ';') 
								: stateChangeHandler : handleRequest;
	
	xmlHttp.onreadystatechange	= handler;
	xmlHttp.open(method, strUrl, async);
	if (method == 'POST')
		xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	
	xmlHttp.send(param);
}

function createQueryString(param){
	var queryString	= '';
	
	var counter	= 0;
	
	var length	= associativeArrayLength(param);
	
	for (var key in param){
		if (counter > 0 && counter != length)
			queryString	+= '&';
		
		queryString	+= key + '=' + param[key];
		
		counter++;
	}
	
	return queryString;
}

function associativeArrayLength(param){
	var counter	= 0;
	
	for (var key in param){
		counter++;
	}
	
	return counter;
}