//------------------------------------------------------------------
// Выполнение AJAX-запроса
// На входе:
// method - POST или GET
// file - файл для приема запроса, по умолчанию ajax.php
// data - данные для запроса
// p_callback - процедура, которой будет отдан результат
//------------------------------------------------------------------
function ajax_load(method, file, data, p_callback) {
    var http_request = false;

    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text/xml');
        }
    }
    else if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (e) {
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e) {}
        }
    }

    if (!http_request) {
        return false;
    }

    http_request.onreadystatechange = function() {
        try {
            if (http_request.readyState == 4) {
                if (http_request.status == 200) {
                    eval(p_callback + '(http_request.responseText)');
                }
                else {
                    alert('Ошибка при запросе (Код ошибки: ' + http_request.status + ')');
                }
            }
        }
        catch (e) {}
    }

    file = (file == '' ? '/ajax.php' : file);

    var timeval = new Date().getTime();
    data+='&randomval='+timeval;

    if (method == 'POST') {
        http_request.open('POST', file, true);
        try {
            http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            http_request.setRequestHeader('Accept-Language', 'en');
            http_request.setRequestHeader('Accept-Charset', 'windows-1251');
        } catch (e) {}
    }
    else {
        http_request.open('GET', file+'?'+data, true);
        data='';
    }
    http_request.send(data);
    return ('OK');
}

//------------------------------------------------------------------
// Получение всех элементов формы
// На входе id формы, на выходе строка значений формы
//------------------------------------------------------------------
function load_form(id) {
    var e=document.getElementById(id);
    if (!e) { return ''; }
    var form_data=new Array;
    for (var i=0; i<e.elements.length; i++) {
        var el = e.elements[i];
        var elName = el.nodeName.toLowerCase();

        // Заблокированные элементы формы не обрабатываем
        if (!el.disabled) {
            // Обработка input
            if (elName=='input' && el.name!='') {
                var type = el.type.toLowerCase();
                switch (type) {
                    // Текстовое поле
                    case 'text': {
                        form_data.push(el.name+'='+encodeURIComponent(el.value));
                        break;
                    }
                    // Поле ввода пароля
                    case 'password': {
                        form_data.push(el.name+'='+encodeURIComponent(el.value));
                        break;
                    }
                    // Флажок checkbox
                    case 'checkbox': {
                        if (el.checked) {
                            form_data.push(el.name+'='+encodeURIComponent(el.value));
                        }
                        break;
                    }
                    // Флажок radio
                    case 'radio': {
                        if (el.checked) {
                            form_data.push(el.name+'='+encodeURIComponent(el.value));
                        }
                        break;
                    }
                    // Скрытое поле
                    case 'hidden': {
                        form_data.push(el.name+'='+encodeURIComponent(el.value));
                        break;
                    }
                    // Любые другие input'ы
                    default: {
                        break;
                    }
                }
            }
            // Обработка textarea
            else if (elName=='textarea' && el.name!='') {
                form_data.push(el.name+'='+encodeURIComponent(el.value));
            }
            // Обработка select
            else if (elName=='select' && el.name!='' && el.options.length>0) {
                // Многострочный select
                if (el.multiple) {
                    for (var j=0; j<el.options.length; j++) {
                        if (el.options[j].selected) {
                            form_data.push(el.name+'='+encodeURIComponent(el.options[j].value));
                        }
                    }
                }
                // Однострочный select
                else {
                    form_data.push(el.name+'='+encodeURIComponent(el.value));
                }
            }
        }
    }
    return(form_data);
}
