//проверка за дължината на даден текст по зададена минимална и максимална дължина
//-1 за min и max означава, че не се проверява
function is_text_min_max (text, min, max)
{
    valid = 1;
    if (min != -1) {
        if (text.length < min) {
            valid = 0;
        }
    }
    if (max != -1) {
        if (text.length > max) {
            valid = 0;
        }
    }
    return valid;
}


//обща функция за проверка на определено поле от даден формуляр
function check_form_field (form_name, field_name, return_result)
{
    debug = 0;
    class_valid = 'valid_value';
    class_invalid = 'invalid_value';

    field = get_form_el (form_name, field_name);
    error = '';
    ok_text = '';
    show_result = 1;
    switch (form_name) {
        case 'reg_form':
            switch (field_name) {
                case 'reg_username':
                    if (!is_text_min_max (field.value, 5, -1)) {
                        error = 'Потребителското име трябва да бъде минимум 5 символа.';
                        break; // не е бъг
                    }
                    filter = /^([a-zA-Z0-9_\.\-])+$/;
                    if (!filter.test (field.value)) {
                        error = 'Невалидно потребителско име.';
                        break; // не е бъг
                    }
                    if (!return_result) {
                        get_form_el(form_name,'pending_request').value = '1';
                        register_user ('username_check', field.value);
                        show_result = 0;
                    }
                    break;

                case 'reg_email':
                    if (!is_valid_mail (field.value)) {
                        error = 'Моля въведете валиден e-mail!';
                    }
                    break;

                case 'reg_password':
                    if (!is_text_min_max (field.value, 5, -1)) {
                        error = 'Паролата трябва да бъде минимум 5 символа.';
                    }
                    break;

                case 'reg_passwordC':
                    if (!is_text_min_max (field.value, 5, -1)) {
                        error = 'Паролата трябва да бъде минимум 5 символа.';
                    } else {
                        field2 = get_form_el (form_name,'reg_password');
                        if (field2.value != field.value) {
                            error = 'Несъответствие между въведените пароли!';
                            field.value = '';
                            field2.value = '';
                        }
                    }
                    break;

                case 'reg_captcha':
                    if (get_form_el(form_name, 'captcha_ok').value == '0') {
                        if (!is_text_min_max (field.value, 4, -1)) {
                            error = 'Моля въведете кода от картинката.';
                        } else {
                            if (!return_result) {
                                get_form_el(form_name, 'pending_request').value = '1';
                                register_user ('captcha_check', field.value);
                                show_result = 0;
                            } else {
                                if (get_form_el(form_name, 'server_error').value == '1') {
                                    error = '1';
                                    show_result = 0;
                                }
                            }
                        }
                    }
                    break;

                default:
                    if (debug) {
                        error = 'недефинирано поле [' + field_name + ']';
                    }
                    break;
            }
            break;

        case 'edit_profile_form':
            switch (field_name) {
                case 'edit_profile_email':
                    if (!is_valid_mail (field.value)) {
                        error = 'Моля въведете валиден e-mail!';
                    }
                    break;


                case 'edit_profile_password':
                    if (field.value.length > 0) {
                        if (!is_text_min_max (field.value, 5, -1)) {
                            error = 'Паролата трябва да бъде минимум 5 символа.';
                        }
                    } else {
                        ok_text = 'Не се променя';
                    }
                    break;

                case 'edit_profile_passwordC':
                    field2 = get_form_el (form_name,'edit_profile_password');
                    if (field.value.length > 0 || field2.value.length > 0) {
                        if (!is_text_min_max (field.value, 5, -1)) {
                            error = 'Паролата трябва да бъде минимум 5 символа.';
                        } else {
                            if (field2.value != field.value) {
                                error = 'Несъответствие между въведените пароли!';
                                field.value = '';
                                field2.value = '';
                            }
                        }
                    } else {
                        ok_text = 'Не се променя';
                    }
                    break;

                case 'edit_profile_place':
                    if (!is_text_min_max (field.value, 2, -1)) {
                        error = 'Моля въведете населено място.';
                    }
                    break;

                case 'edit_profile_captcha':
                    if (get_form_el(form_name, 'captcha_ok').value == '0') {
                        if (!is_text_min_max (field.value, 4, -1)) {
                            error = 'Моля въведете кода от картинката.';
                        } else {
                            if (!return_result) {
                                get_form_el(form_name, 'pending_request').value = '1';
                                edit_user_profile ('captcha_check', field.value);
                                show_result = 0;
                            } else {
                                if (get_form_el(form_name, 'server_error').value == '1') {
                                    error = '1';
                                    show_result = 0;
                                }
                            }
                        }
                    }
                    break;

                default:
                    if (debug) {
                        error = 'недефинирано поле [' + field_name + ']';
                    }
                    break;
            }
            break;

        case 'add_hotel_form' :
            switch (field_name) {
                case 'place':
                    if (!is_text_min_max (field.value, 2, -1)) {
                        error = 'Моля въведете населено място.';
                    }
                    break;

                case 'hotel_name':
                    if (!is_text_min_max (field.value, 2, -1)) {
                        error = 'Моля въведете име на хотел.';
                    }
                    break;

                default:
                    if (debug) {
                        error = 'недефинирано поле [' + field_name + ']';
                    }
                    break;
            }
            break;

        default:
            if (debug) {
                error = 'недефиниран формуляр [' + form_name + ']';
            }
            break;
    }

    //показване на резултата от проверката
    if (show_result) {
        show_check_result(field_name, error, ok_text);
    }
    if (debug) {
        window.alert('form[' + form_name + '][' + field_name + "]\nvalue = '" + field.value + "'\nerror = " + error );
    }
    if (return_result) {
        if (error) {
            return 1;
        } else {
            return 0;
        }
    }
}


//функция за проверка на цели формуляри
function check_form (form_name)
{
    error = 0;
    switch (form_name) {
        case 'reg_form':
            //ако има AJAX заявка, която не е върнала отговор, се изчаква 300ms
            if ( get_form_el(form_name, 'pending_request').value != '0' ) {
                setTimeout('check_form(\'' + form_name + '\')', 300);
                return false;
            }
            if ( get_form_el(form_name,'server_error').value != '0' ) {
                error++;
            } else {
                error += check_form_field('reg_form', 'reg_username', 1);
            }
            error += check_form_field(form_name, 'reg_email', 1);
            error += check_form_field(form_name, 'reg_password', 1);
            error += check_form_field(form_name, 'reg_passwordC', 1);
            error += check_form_field(form_name, 'reg_captcha', 1);
            break;

        case 'edit_profile_form':
            //ако има AJAX заявка, която не е върнала отговор, се изчаква 300ms
            if ( get_form_el(form_name, 'pending_request').value != '0' ) {
                setTimeout('check_form(\'' + form_name + '\')', 300);
                return false;
            }
            error += check_form_field(form_name, 'edit_profile_email', 1);
            error += check_form_field(form_name, 'edit_profile_password', 1);
            error += check_form_field(form_name, 'edit_profile_passwordC', 1);
            error += check_form_field(form_name, 'edit_profile_place', 1);
//          error += check_form_field(form_name, 'edit_profile_captcha', 1);
            break;

        case 'add_hotel_form':
            //ако има AJAX заявка, която не е върнала отговор, се изчаква 300ms
            if ( get_form_el(form_name, 'pending_request').value != '0' ) {
                setTimeout('check_form(\'' + form_name + '\')', 300);
                return false;
            }
            error += check_form_field(form_name, 'place', 1);
            error += check_form_field(form_name, 'hotel_name', 1);
            break;
    }

    if (error) {
        window.alert ('Моля въведете нужната информация.');
    } else {
        submit_form(form_name);
    }
}


// дали да се предаде събитието за събмит или не
handle_submit_event = 1;

// функция, която пренасочва събитието за submit на определен формуляр
function handle_submit(form_name)
{
    if ( handle_submit_event ) {
        if (submit_button = get_submit_button(form_name)) {
            submit_button.focus();
        }
        func_preloader('check_form(\'' + form_name + '\');', 200);
        return false;
    } else {
        return true;
    }
}

// функция връщаща input submit тага на даден формуляр
function get_submit_button(form_name)
{
    inputs = document.forms[form_name].getElementsByTagName('input');
    for (i=0; i<inputs.length; i++) {
        if (inputs[i].type == "submit") {
            return inputs[i];
        }
    }
    return false;
}

// функция за изпращане на определен формуляр
function submit_form(form_name)
{
    handle_submit_event = 0;
    document.forms[form_name].submit();
}

//функция за показване на резултата от проверката на полето
function show_check_result( field_name, error_text, ok_text )
{
    hide_object(field_name + '_check', 'v');
    if (error_text != '') {
        get_el (field_name + '_check').innerHTML = error_text;
        get_el (field_name + '_check').className = class_invalid;
    } else {
        if (ok_text == '') {
            ok_text = 'OK';
        }
        get_el (field_name + '_check').innerHTML = ok_text;
        get_el (field_name + '_check').className = class_valid;
    }
    show_object(field_name + '_check', 'v');
}
