/*
Создание XMLHttpRequest-объекта
Возвращает созданный объект или null,
если XMLHttpRequest не поддерживается
*/
function createRequestObject() {
    var request = null;
    try {
        request=new ActiveXObject('Msxml2.XMLHTTP');
    } catch (e){}
    if(!request) try {
        request=new ActiveXObject('Microsoft.XMLHTTP');
    } catch (e){}
    if(!request) try {
        request=new XMLHttpRequest();
    } catch (e){}
    return request;
}

/*
Кодирование данных (простого ассоциативного массива вида
{ name : value, ...} в URL-escaped строку (кодировка UTF-8)
*/
function urlEncodeData(data) {
    var query = [];
    if (data instanceof Object) {
        for (var k in data) {
            query.push(encodeURIComponent(k) + "=" +
            		encodeURIComponent(data[k]));
        }
        return query.join('&');
    } else {
        return encodeURIComponent(data);
    }
}

/*
Выполнение POST-запроса 
url  - адрес запроса
data - параметры в виде простого ассоциативного массива
	{ name : value, ...} 
callback - (не обяз.) callback-функция,
	которая будет вызвана после выполнения запроса
	и получения ответа от сервера
*/
function serverRequest(url, data, callback) {
    var request = createRequestObject();
    if(!request) return false;
    request.onreadystatechange  = function() { 
            if(request.readyState == 4 && callback) callback(request);
        };
    request.open('POST', url, true);
    //if(request.setRequestHeader)
        request.setRequestHeader("Content-Type",
        	"application/x-www-form-urlencoded");
    request.send(urlEncodeData(data));
    return true;
}
/*собирает данные с формы, посылает их POST запрос на сервер и вызывает callback функцию при получении ответа от сервера*/
function sendForm(id, callback){
	var form = document.getElementById(id);
	var data = [];
	for (var i=0;i<form.elements.length-1;i++) {
		if(form.elements[i].name!="") data[form.elements[i].name] = form.elements[i].value;
    }
    serverRequest(form.action, data, callback);
}
