var validateFormLang = 1;

function validateFormGCode(element) 
{
	var params = {   
		GCODE: element.value
	};
    
    //столкнулся со следующей проблемой - если валидация проходит не на главной странице модуля
    //а на одной из внутренних - action может быть переопределен в htaccess.
    //поэтому парсим текущий путь и определяем путь к главной странице модуля - считаем что это имя первой директории после имени сайта
    var dirs = document.location.pathname.split('/');
    var module_main_page = '/' + dirs[1] + '/';
    
    //путь с учетом языковых версий
    if (dirs[1] == 'ru' || dirs[1] == 'en')
    {
        module_main_page = '/' + dirs[1] + '/' + dirs[2];
    }
    
	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 = 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'] == 'string')
        {
            if (element.value == '')
            {
                if (validateFormLang == 2)
                {
                    alert('Field "' + element_opt['label'] + '" required');
                }
                else
                {
                    alert('Поле "' + element_opt['label'] + '" должно быть заполнено');
                }
            	element.focus();
            	
            	return false;
            }
        }
        
        
        
        //Число
        if (element_opt['type'] == 'number')
        {
        	//alert(element.value);
        	
        	if (!validateNumber(element.value))
            {
                if (validateFormLang == 2)
                {
                    alert('Type a number in field "' + element_opt['label']+'"');
                }
                else
                {
                    alert('Введите число в поле "' + element_opt['label']+'"');
                }
            	
            	element.focus();
            
            	return false;
            }
        }
        
        
        //для выпадающего списка не должно быть выбрано первое значение
        //так как по умолчанию первое значение должно быть 'Выберите'
        if((element_opt['type'] == 'select') && (element.selectedIndex == 0))
        {
            if (validateFormLang == 2)
            {
                alert('Select value at field "' + element_opt['label']+'"');
            }
            else
            {
                alert('Выберите значение в поле "' + element_opt['label']+'"');
            }
            
            element.focus();
            
            return false;
        }
        

        //Выпадающий список со множеством значений
        if(element_opt['type'] == 'select-multiple')
        {
            //alert(element.options.length);
            
        	flag = false;
        	
        	for (z=0; z<element.options.length; z++)
            {
        		if (element.options[z].selected) 
        		{
        			flag = true;
        			continue;
        		}
            }
        	
        	if (!flag)
        	{
                if (validateFormLang == 2)
                {
                    alert('Select value at field "' + element_opt['label']+'"');
                }
                else
                {
                    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 (validateFormLang == 2)
                {
                    alert('Incorrect email in field "' + element_opt['label']+'"');
                }
                else
                {
                    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)
                    {
                        if (validateFormLang == 2)
                        {
                            alert('Your passwords do not match');
                        }
                        else
                        {
                            alert('Введенные пароли не совпадают');
                        }
                        
                        element.focus();
                        
                        return false;
                    }
                }
            }
        }

        
        //проверка капчи
        if(element_opt['type'] == 'captcha')
        {
            validateFormGCode(element);
            
            return false;
        }
    }
    
    return true;
}

//Функция проверяет, является ли переданное значение числом
function validateNumber(value)
{
	//проверяем длину строки
	if (value.length == 0)
	{
		return false;
	}
	
	res = true;
	
	var re =/[^0-9.]/g;
	if (re.test(value))
	{			
		res = false;
	}
	
	return res;
}

