var responseTxt = "";
var handlerNameInt = "";
var READY_STATE_COMPLETE = 4;
var http = get_http();

function get_http(){
	var xmlhttp;
	/*@cc_on
	@if (@_jscript_version >= 5)
		try {
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				xmlhttp = new 
				ActiveXObject("Microsoft.XMLHTTP");
			} catch (E) {
				xmlhttp = false;
			}
		}
		return xmlhttp;
	@else
		xmlhttp = false;
	@end @*/
//	if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
		try {
			xmlhttp = new XMLHttpRequest();
		} catch (e) {
			xmlhttp = false;
		}
//	}
	return xmlhttp;
}

// Function sends GET query to the server
// paramArray - array of parameters' names
// valueArray - array of values
// url        - requested URL
// isAsych    - specifies if communication is asynchronous
function SendGET(paramArray, valueArray, url, isAsych, myFunction) {
	isRequest = true;
	var addUrl = "";
	for(get_i = 0; get_i < paramArray.length; get_i++){
		addUrl = addUrl + paramArray[get_i] + "=" + escape(valueArray[get_i]);
		if(get_i != paramArray.length-1){
			addUrl = addUrl + "&";
		}
	}
//	if(!http){
		http = get_http();
//	}
	if (this.http) {
		url = url + "?" + addUrl;
		http.open("GET", url, isAsych);
		http.onreadystatechange = myFunction;
		http.send(null);
	} else {
		alert('Error durring XMLHTTP object creation!');
	}
}

// Function sends POST query to the server
// paramArray - array of parameters' names
// valueArray - array of values
// url        - requested URL
// isAsych    - specifies if communication is asynchronous
function SendPOST(paramArray, valueArray, url, isAsych, myFunction) {
	var addUrl = "";
	for(get_i = 0; get_i < paramArray.length; get_i++){
		addUrl = addUrl + paramArray[get_i] + "=" + escape(valueArray[get_i]);
		if(get_i != paramArray.length-1){
			addUrl = addUrl + "&";
		}
	}
//	if(!http){	
		http = get_http();
//	}
	if (this.http) {
		http.open("POST", url, isAsych);
		http.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		http.onreadystatechange = myFunction;
		http.send(addUrl);
	} else {
		alert('Error durring XMLHTTP object creation!')
	}
}

//CallBack function. Sets reponseTxt to the server response or error code.
function processResponse(){
	if (http.readyState == READY_STATE_COMPLETE){
		if (http.status == 200){
			reponseTxt = http.responseText;
			clientHandler();
		} else {
			reponseTxt = http.statusText;			
		}
	}
}

function clientHandler(){
	alert(http.status);
	if (handlerNameInt == 'clientHandler') {
		alert(handlerNameInt);
		alert(reponseTxt);
	} 
//	else {
//		var newUserHandlerFunction = new Function(handlerNameInt+"()");
//		newUserHandlerFunction();
//	}
}

function submitAJAX(row, handlerName){
	var names = new Array();
	var values = new Array();	
	handlerNameInt = handlerName;
	for(; row.tagName.toLowerCase() != "form"; row = row.parentNode);
	for(var el_i = 0; el_i < row.elements.length; el_i++){
		switch(row.elements[el_i].type)
		{
			case "hidden":   names.push(row.elements[el_i].name);
							 values.push(row.elements[el_i].value);
							 break;
			case "text":     names.push(row.elements[el_i].name);
							 values.push(row.elements[el_i].value);
							 break;						   
			case "password": names.push(row.elements[el_i].name);
							 values.push(row.elements[el_i].value);
							 break;	
			case "radio":    if(row.elements[el_i].checked){
								names.push(row.elements[el_i].name);
								values.push(row.elements[el_i].value);
							 }
							 break;		
			case "select-multiple":
							 for(var sel_i = 0; sel_i < row.elements[el_i].options.length; sel_i++){
								if (row.elements[el_i].options[sel_i].selected){
									names.push(row.elements[el_i].name);
									values.push(row.elements[el_i].options[sel_i].value);
								}
							 }
							 break;
			case "select":   names.push(row.elements[el_i].name);
							 values.push(row.elements[el_i].options[row.elements[el_i].selectedIndex].value)
							 break;							 
			case "textarea": names.push(row.elements[el_i].name);
							 values.push(row.elements[el_i].value);
							 break;
			case "checkbox": names.push(row.elements[el_i].name);
							 if(row.elements[el_i].checked){
								 values.push('on');
							 } else {
								 values.push('off');
							 }
							 break;

			default:
			break;
		} 
	}
	if(row.method == "post") {
		SendPOST(names, values, row.action, true, handlerName);
	} else {
		SendGET(names, values, row.action, true, handlerName);
	}
}


function trim(str)
{
	return str.replace(/^\s+/, '').replace(/\s+$/, '');
}
