// Рабочие переменные
var form_error_class = 'rh_form_error';

// Функция вывода ошибки заполнения поля формы
function set_error(field, message, ffocus) {
    field = field || null;
    message = message || '';
    ffocus = ffocus && true;

    if ( field != null ) {
        if ( typeof field.parentNode != 'undefined' ) {
            t_parent = field.parentNode;
            set_class(t_parent, form_error_class);
        }
        if ( message.length > 0 ) {
            alert(message);
        }
        if ( ffocus ) {
            field.focus();
        }
    }
}

// Антиспам-фильтр: обнаруживает ссылки
var spam_re = /http|ftp|www|url/i;

// Список обязательных к заполнению полей форм
var check_field = new Array();
var check_items = 0;

check_field[check_items] = new Array();
check_field[check_items]['field'] = 'phone';
check_field[check_items]['empty'] = 'Укажите пожалуйста контактный телефон';
check_field[check_items]['size']  = 125;
check_field[check_items]['large'] = 'Поле Телефон не должно быть длиннее 125 символов';
check_field[check_items]['default'] = 'укажите телефон';
check_items += 1;

check_field[check_items] = new Array();
check_field[check_items]['field'] = 'delivery_date';
check_field[check_items]['empty'] = 'Укажите пожалуйста дату и по возможности время доставки';
check_field[check_items]['size']  = 125;
check_field[check_items]['large'] = 'Поле Дата доставки не должно быть длиннее 125 символов';
check_field[check_items]['default'] = 'укажите дату доставки';
check_items += 1;

check_field[check_items] = new Array();
check_field[check_items]['field'] = 'address';
check_field[check_items]['empty'] = 'Укажите пожалуйста полный почтовый адрес';
check_field[check_items]['size']  = 125;
check_field[check_items]['large'] = 'Поле адрес не должно быть длиннее 125 символов';
check_field[check_items]['default'] = 'укажите контактный адрес';
check_items += 1;

check_field[check_items] = new Array();
check_field[check_items]['field'] = 'fio';
check_field[check_items]['empty'] = 'Укажите пожалуйста Ваши фамилию, имя, отчество';
check_field[check_items]['size']  = 125;
check_field[check_items]['large'] = 'Фамилия, имя, отчество не должны быть длиннее 125 символов';
check_field[check_items]['default'] = 'Введите Имя Отчество';
check_items += 1;

check_field[check_items] = new Array();
check_field[check_items]['field'] = 'author';
check_field[check_items]['empty'] = 'Укажите, пожалуйста, Ваши фамилию, имя, отчество';
check_field[check_items]['size']  = 125;
check_field[check_items]['large'] = 'Фамилия, имя, отчество не должны быть длиннее 125 символов';
check_field[check_items]['default'] = 'Ваши фамилия, имя, отчество';
check_items += 1;

check_field[check_items] = new Array();
check_field[check_items]['field'] = 'contacts';
check_field[check_items]['default'] = 'Укажите контактный EMail либо телефон';
check_field[check_items]['empty'] = 'Укажите, пожалуйста, Ваши контактные данные';
check_field[check_items]['size']  = 125;
check_field[check_items]['large'] = 'Контактные данные не должны быть длиннее 125 символов';
check_items += 1;

check_field[check_items] = new Array();
check_field[check_items]['field'] = 'email';
check_field[check_items]['empty'] = 'Укажите, пожалуйста, Ваш e-mail адрес';
check_field[check_items]['size']  = 125;
check_field[check_items]['large'] = 'E-mail адрес не должен быть длиннее 125 символов';
check_field[check_items]['default'] = 'Введите Ваш email';
check_field[check_items]['regexp'] = /[0-9a-z_\.-]+@[0-9a-z_\.-]+\.[a-z]{2,4}/i;
check_field[check_items]['invalid'] = 'Указанная Вами строка не является e-mail адресом';
check_items += 1;

check_field[check_items] = new Array();
check_field[check_items]['field'] = 'request';
check_field[check_items]['empty'] = 'Укажите, пожалуйста, текст заявки';
check_field[check_items]['size']  = 1024;
check_field[check_items]['large'] = 'Текст заявки не должен быть длиннее 1024 символов';
check_items += 1;

check_field[check_items] = new Array();
check_field[check_items]['field'] = 'question';
check_field[check_items]['empty'] = 'Укажите, пожалуйста, текст вопроса';
check_field[check_items]['size']  = 1024;
check_field[check_items]['large'] = 'Текст вопроса не должен быть длиннее 1024 символов';
check_field[check_items]['default'] = 'Укажите, пожалуйста, текст вопроса';
check_items += 1;

check_field[check_items] = new Array();
check_field[check_items]['field'] = 'auth_login';
check_field[check_items]['empty'] = 'Вы не указали логин';
check_items += 1;

check_field[check_items] = new Array();
check_field[check_items]['field'] = 'auth_password';
check_field[check_items]['empty'] = 'Вы не ввели пароль';
check_items += 1;

check_field[check_items] = new Array();
check_field[check_items]['field'] = 'comments';
check_items += 1;

check_field[check_items] = new Array();
check_field[check_items]['field'] = 'company';
check_field[check_items]['empty'] = 'Укажите название компании заказчика';
check_field[check_items]['size']  = 125;
check_field[check_items]['large'] = 'Название компании не должно превышать 125 символов';
check_items += 1;

check_field[check_items] = new Array();
check_field[check_items]['field'] = 'sizes';
check_field[check_items]['empty'] = 'Вы не указали требуемые размеры';
check_field[check_items]['size']  = 125;
check_field[check_items]['large'] = 'Поле размер детали не должно превышать 125 символов';
check_items += 1;

check_field[check_items] = new Array();
check_field[check_items]['field'] = 'weight';
check_field[check_items]['empty'] = 'Вы не указали вес детали';
check_field[check_items]['size']  = 125;
check_field[check_items]['large'] = 'Поле вес детали не должно превышать 125 символов';
check_items += 1;

check_field[check_items] = new Array();
check_field[check_items]['field'] = 'material';
check_field[check_items]['empty'] = 'Вы не указали материал исполнения';
check_field[check_items]['size']  = 125;
check_field[check_items]['large'] = 'Поле материал детали не должно превышать 125 символов';
check_items += 1;

check_field[check_items] = new Array();
check_field[check_items]['field'] = 'description';
check_field[check_items]['empty'] = 'Вы не указали описание детали';
check_items += 1;



// Функция проверки формы
function check_form( frm , prefix ) {

    prefix = prefix || '';

    // Массивы полей с ошибками и сообщения
    var error_obj = new Array();
    var error_msg = new Array();

    // Поле формы и его значение
    var tmp_obj = null;
    var tmp_value = '';

    // Проверяем по списку полей
    for ( var i = 0 ; i < frm.length ; i++ ) {
        for ( var j = 0 ; j < check_items ; j++ ) {
            if ((prefix + check_field[j]['field']) == frm[i].name && frm[i].type != 'hidden') {

                tmp_obj = frm[i];
                tmp_value = tmp_obj.value;
                if ( typeof check_field[j]['default'] != 'undefined' ) {
                    tmp_value = tmp_value.replace(check_field[j]['default'], '');
                }
                if ( typeof tmp_obj.HelpValue != 'undefined') {
                    tmp_value = tmp_value.replace(tmp_obj.HelpValue, '');
                }
                tmp_clear = tmp_value.trim();
                error_found = false;

                if ( typeof check_field[j]['empty'] != 'undefined' && tmp_clear.length == 0 ) {
                    error_obj[error_obj.length] = tmp_obj;
                    error_msg[error_msg.length] = check_field[j]['empty'];
                    error_found = true;
                }
                else if ( typeof check_field[j]['regexp'] != 'undefined' ) {
                    tmp_regexp = check_field[j]['regexp'];
                    if ( !tmp_regexp.test(tmp_value) ) {
                        error_obj[error_obj.length] = tmp_obj;
                        error_msg[error_msg.length] = check_field[j]['invalid'];
                        error_found = true;
                    }
                }
                if (typeof check_field[j]['size'] != 'undefined' && tmp_value.length > check_field[j]['size'] ) {
                    error_obj[error_obj.length] = tmp_obj;
                    error_msg[error_msg.length] = check_field[j]['large'];
                    error_found = true;
                }
                if ( spam_re.test(tmp_value) ) {
                    error_obj[error_obj.length] = tmp_obj;
                    error_msg[error_msg.length] = 'Запрещено использовать ссылки на другие сайты';
                    error_found = true;
                }

                if ( !error_found ) {
                    del_class(tmp_obj.parentNode,form_error_class);
                }
            }
        }
    
    }

    // Если найдены ошибки
    if ( error_obj.length > 0 ) {
        var first = 0;
        for ( i = error_obj.length-1 ; i >= 0; i-- ) {
            if (error_obj[i].type != 'hidden') {
                set_error(error_obj[i]);
                first = i;
            }
        }
        if ( div = document.getElementById('form_error_message') ) {
            div.innerHTML = '<div style="color:red;font-weight:bold;">' + error_msg.join("<br/>") + '</div>';
        }
        else {
            alert(error_msg.join("\n"));
        }
        error_obj[first].focus();
        return false;
    }


    return true;
}


// Устанавливаем обработчики
function init_handlers() {

    // выходим, если функция уже выполнялась
    if (arguments.callee.done) return;

    // устанавливаем флаг, чтобы функция не исполнялась дважды
    arguments.callee.done = true;

}

//// -----------------------------------------------------
//// МЕГАХАК для старта скриптов после загрузки DOM
//// -----------------------------------------------------

/* для Mozilla/Firefox/Opera 9 */
if (document.addEventListener) {
    document.addEventListener("DOMContentLoaded", init_handlers, false);
}

/* для Internet Explorer */
/*@cc_on @*/
/*@if (@_win32)
document.write("<script id=\"__ie_onload\" defer=\"defer\" src=\"javascript:void(0)\"><\/script>");
var script = document.getElementById("__ie_onload");
script.onreadystatechange = function() {
    if (this.readyState == "complete") {
        init_handlers(); // вызываем обработчик для onload
    }
};
/*@end @*/

/* для Safari */
if (/WebKit/i.test(navigator.userAgent)) { // условие для Safari
    var _timer = setInterval(function() {
        if (/loaded|complete/.test(document.readyState)) {
            clearInterval(_timer);
            init_handlers(); // вызываем обработчик для onload
        }
    }, 10);
}

/* для остальных браузеров */
window.onload = init_handlers;

//// -----------------------------------------------------
//// Окончание МЕГАХАКА
//// -----------------------------------------------------


// Добавить класс элементу DOM
function set_class( w_object , c_name ) {
    w_object = w_object || null;
    c_name = c_name || '';
    if ( ( w_object != null ) && ( c_name.length > 0 ) ) {
        if ( typeof w_object['className'] != 'undefined' ) {
            var c_list = w_object.className.split(' ');
            if ( c_list.find(c_name) < 0 ) {
                c_list[c_list.length] = c_name;
                w_object.className = c_list.join(' ');
            }
        }
    }
}


// Убрать класс у элемента DOM
function del_class( w_object , c_name ) {
    w_object = w_object || null;
    c_name = c_name || '';
    if ( ( w_object != null ) && ( c_name.length > 0 ) ) {
        if ( typeof w_object['className'] != 'undefined' ) {
            var c_list = w_object.className.split(' ');
            var c_index = c_list.find(c_name);
            if ( c_index >= 0 ) {
                delete c_list[c_index];
                w_object.className = c_list.join(' ');
            }
        }
    }
}
// Проверить наличие класса
function has_class( w_object , c_name ) {
    w_object = w_object || null;
    c_name = c_name || '';
    
    if ( ( w_object != null ) && ( c_name.length > 0 ) ) {
        if ( typeof w_object['className'] != 'undefined' ) {
            var c_list = w_object.className.split(' ');
            var c_index = c_list.find(c_name);
            return c_index >= 0;
        }
    }
}



// -------------------------------------------------------
// Доработки (хаки) объектов JavaScript
// -------------------------------------------------------

// Найти элемент в массиве, вернуть его индекс
Array.prototype.find = function( value ) {
    var l = this.length;
    for ( var i = 0 ; i < l ; i++ ) {
        if ( this[i] == value ) {
            return i;
        }
    }
    return -1;
}

// Убрать "пробельные" символы в начале строки
String.prototype.ltrim = function() {
    var s = '';
    var l = this.length;
    var c = null;
    var starting = true;
    for ( var i = 0 ; i < l ; i++ ) {
        c = this.substr(i, 1);
        if ( ( c != ' ' ) && ( c != "\t" ) && ( c != "\r" ) && ( c != "\n" ) ) {
            s += c;
            if ( starting ) starting = false;
        }
        else if ( !starting ) {
            s += c;
        }
    }
    return s;
}

// Убрать "пробельные" символы в конце строки
String.prototype.rtrim = function() {
    var s = '';
    var l = this.length;
    var c = null;
    var delayed = '';
    for ( var i = 0 ; i < l ; i++ ) {
        c = this.substr(i, 1);
        if ( ( c != ' ' ) && ( c != "\t" ) && ( c != "\r" ) && ( c != "\n" ) ) {
            s += delayed + c;
            delayed = '';
        }
        else {
            delayed += c;
        }
    }
    return s;
}

// Убрать "пробельные" символы с обоих концов строки
String.prototype.trim = function() {
    return this.ltrim().rtrim();
}