var vwfDefEmptyMessage              = "Пожалуйста, заполните все обязательные поля.";
var vwfDefNWMessage                 = "Укажите корректный email"; 
var vwfErrorWh                      = "alert";
var vwfEroorPasswordMinLenMessage   = "Ошибка, минимальная длина поля #N символов";
var vwfEroorPasswordMaxLenMessage   = "Ошибка, максимальная длина поля #N символов";
var vwfEroorPasswordMessage         = "Ошибка, пароли не совпадают";
function vwfCheck(form_obj)
{

    var errors = true;
    for (var i = 0; form_obj_elem = form_obj.elements[i]; i++)
    {        

            if (form_obj_elem.getAttribute("required"))
            {

	            var type = form_obj_elem.getAttribute("required");
	            if (form_obj_elem.getAttribute("error")) { var message = form_obj_elem.getAttribute("error"); var message2 = message;}
	            else { var message = vwfDefEmptyMessage; var message2 = vwfDefNWMessage;}  
	            
	            
	            if (form_obj_elem.getAttribute("error2")) { var message2 = form_obj_elem.getAttribute("error2"); }
	            
	            
	            
	            var value = form_obj_elem.value;
	            var rvalue = vwfTrim(value);
	            var elem_id = form_obj_elem.getAttribute("id");
	            
            	if(form_obj_elem.type == "textarea" || form_obj_elem.type == "text")
            	{	
	            	// проверка на пустоту
	            	if(type == "true" && rvalue == "")
	            	{
	            		vwfErrormessage(message,elem_id);	
	            		form_obj_elem.focus();
	            		return false;
	            	}
	            	
	            	// проверка на email
	            	if(type == "email")
	            	{
	            		var reg = new RegExp("[0-9a-z_]+@[0-9a-z_^.]+\\.[a-z]", 'i');
	            		if (!reg.test(rvalue)) 
	            		{
	            			vwfErrormessage(message2,elem_id); 
		            		form_obj_elem.focus();
		            		return false;
	            		}
	            	}
	            	
	            	// проверка по регулярному выражению
	            	if(type == "regexp")
	            	{
	            		var regs = form_obj_elem.getAttribute("regexp");
	            	
	            		var reg = /^[a-z0-9]+$/i;

	            		if (!reg.test(rvalue)) 
	            		{
	            			vwfErrormessage(message2,elem_id);   
		            		form_obj_elem.focus();
		            		return false;
	            		}
	            	}	            	
	            	// проверка по регулярному выражению, сокр. вариант
	            	if(type == "lregexp")
	            	{
	            		var regs = form_obj_elem.getAttribute("regexp");
	            		var reg = new RegExp("^["+regs+"]+$");
	            		if (!reg.test(rvalue)) 
	            		{
	            			vwfErrormessage(message2,elem_id); 
		            		form_obj_elem.focus();
		            		return false;
	            		}
	            	}	            	


	            	if(type == "int")
	            	{
	            		var reg = new RegExp("^[0-9]+$", 'i');
	            		if (!reg.test(rvalue)) 
	            		{
	            			vwfErrormessage(message2,elem_id); 
		            		form_obj_elem.focus();
		            		return false;
	            		}
	            	}
	            	
	            	if(type == "string")
	            	{
	            		var reg = new RegExp("^[a-zA-Z]+$");
	            		if (!reg.test(rvalue)) 
	            		{
	            			vwfErrormessage(message2,elem_id); 
		            		form_obj_elem.focus();
		            		return false;
	            		}
	            	}
	            		            	
	            	if(type == "intstring")
	            	{
	            		var reg = new RegExp("^[0-9a-zA-Z]+$");
	            		if (!reg.test(rvalue)) 
	            		{
	            			vwfErrormessage(message2,elem_id); 
		            		form_obj_elem.focus();
		            		return false;
	            		}
	            	}
	            		            		            	
            	}

            	if(form_obj_elem.type == "file")
            	{
	            	// проверка на пустоту
	            	if(type == "true" && rvalue == "")
	            	{
	            		vwfErrormessage(message,elem_id);	
	            		form_obj_elem.focus();
	            		return false;
	            	}
            	}
            	if(form_obj_elem.type == "password")
            	{
            		if(form_obj_elem.getAttribute("minlen"))
            		{
            			var minlen = form_obj_elem.getAttribute("minlen");
            			var smes = vwfEroorPasswordMinLenMessage.replace('#N',minlen);            			
            			if(value.length < minlen)
            			{
            				alert(smes);
            				form_obj_elem.focus();
            				return false;
            			}
            		}

            		if(form_obj_elem.getAttribute("maxlen"))
            		{
            			var maxlen = form_obj_elem.getAttribute("maxlen");
            			var smes = vwfEroorPasswordMaxLenMessage.replace('#N',maxlen);
            			if(value.length > maxlen)
            			{
            				alert(smes);
            				form_obj_elem.focus();
            				return false;
            			}
            		}
            		
            		if(form_obj_elem.getAttribute("subcheck"))
            		{
            			var subcheck = form_obj_elem.getAttribute("subcheck");
            			var subcheckvalue = document.getElementById(subcheck).value;
            			if(value != subcheckvalue)
            			{
            				alert(vwfEroorPasswordMessage);
            				form_obj_elem.focus();
            				return false;            			
            			}
            		
            		}            		            	
            	}            	
            }
		
	}

    return true;
} 	
function vwfErrormessage(message,elem_id)
{
	if(vwfErrorWh == "alert")  alert(message);
	else
	{
		var evCode = vwfErrorWh+"(message,elem_id)"
		eval(evCode);
	}
}


function vwfTrim(s)
{
	return s.replace(/(^\s*)|(\s*$)/,"");
}

function vwfSubRowWrite(message,elem_id)
{
	insertAfter(elem_id, 'abs', elem_id);
}
function insertAfter(parent, node, referenceNode) {	parent.insertBefore(node, referenceNode.nextSibling);}



function vwfSomeFunction(message,elem_id)
{
	alert('Запущена произвольная функция обработки ошибок\n'+message+'\nID элемента "'+elem_id+'"');
}
