function validateFormGCode(element) {
	var params = {   
		GCODE: element.value
	};
    
    //столкнулся со следующей проблемой - если валидация проходит не на главной странице модуля
    //а на одной из внутренних - action может быть переопределен в htaccess.
    //поэтому парсим текущий путь и определяем путь к главной странице модуля - считаем что это имя первой директории после имени сайта
    var dirs = document.location.pathname.split('/');
    var module_main_page = '/' + dirs[1] + '/';
    
	var queryUrl = module_main_page + '?action=999';
    
	$.get(queryUrl, params, function(data) {     
		if (data == 1)
		{
			element.form.submit();
		}
		else
		{     
			alert(data);
            element.focus();
		}

	}); 

	return false;
}

function init_field(id, label, type) {
    this.id = id;
    this.label = label;
    this.type = type;
}


function validate_form(check_list_fields)
{
    for (i = 0; i < check_list_fields.length; i++)
    {
        var element_opt = check_list_fields[i];
        var element;
        var elements;
        
        // Пытаемся получить валидируемый элемент
        if (element_opt['type'] == 'checkbox')
        {
            // В случае чекбокосов - надо загрузить их все
            elements = document.getElementsByName(element_opt['id'] + '[]');           
        }
        else if (element_opt['type'] == 'radio')
        {
            elements = document.getElementsByName(element_opt['id']);           
        }
        else
        {
            element = document.getElementById(element_opt['id']);

            //если не существует элемента с таким id, то пытаемся обратиться по имени
            if(element == null)
            {
                if(document.getElementsByName(element_opt['id']).length > 0)
                {
                    element = document.getElementsByName(element_opt['id'])[0];
                }
            }
        }
        
        
        //проверка на заполнение
        if (element_opt['type'] != 'checkbox' && element_opt['type'] != 'radio' && element.value == '')
        {
            alert('Поле "' + element_opt['label'] + '" должно быть заполнено');
            element.focus();
            
            return false;
        }
        
        //для выпадающего списка не должно быть выбрано первое значение
        //так как по умолчанию первое значение должно быть 'Выберите'
        if(element.tagName.toLowerCase() == 'select' && element.selectedIndex == 0)
        {
            alert('Выберите значение в поле "' + element_opt['label']);
            element.focus();
            
            return false;
        }
        
        /* дополнительная проверка */
        
        //проверка корректности email
        if(element_opt['type'] == 'email')
        {
            //if (!(/\w+@\w+\.[a-z]{2,4}/.test(element.value)))
            if (!(/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]+\.[a-zA-Z0-9]{2,4}$/.test(element.value)))
            {
                alert('Неправильное значение в поле "' + element_opt['label'] + '"')
                element.focus();
                
                return false;
            }
        }

        
        /* Проверяем одинаковые ли значения у полей с паролями */
        if (element_opt['type'] == 'password')
        {
            for (j = 0; j < check_list_fields.length; j++)
            {
                var element_opt1 = check_list_fields[j];
                var element1 = document.getElementById(element_opt1['id']);

                var password = element.value;
                
                //ищем остальные элементы с типом password
                if (element_opt1['type'] == 'password' && element_opt1['id'] != element_opt['id'])
                {
                    //пароли не сходятся
                    if(password != element1.value)
                    {
                        alert('Введенные пароли не совпадают');
                        element.focus();
                        
                        return false;
                    }
                }
            }
        }

        
        //проверка чекбоксов и радиокнопок
        if(element_opt['type'] == 'checkbox' || element_opt['type'] == 'radio')
        {
            var checked = false;
            
            // ищем в чекбоксах хотя бы один отмеченный
            for (j = 0; j < elements.length; j++)
            {
                if (elements[j].checked)
                {
                    checked = true;
                }
            }
            
            if (!checked)
            {
                alert('Выберите значение для "' + element_opt['label'] + '"');
                return false;
            }
        }

        
        //проверка капчи
        if(element_opt['type'] == 'captcha')
        {
            validateFormGCode(element);
            
            return false;
        }
    }
    
    return true;
}
