var re_integer = /^[\+\-]?\d*$/;
var re_real = /^[\+\-]?\d*[\,\.]?\d*$/;
var re_real2 = /^[\>\<]?[\=]?[\+\-]?\d*[\,\.]?\d*$/;
var re_email = /^([a-zA-Z0-9_\.\-])+\@([a-zA-Z0-9\-])+(\.[a-zA-Z]{2,4})+$/;

function trim(sString) {
while (sString.substring(0,1) == ' ') {sString = sString.substring(1, sString.length)}
while (sString.substring(sString.length-1, sString.length) == ' ') {sString = sString.substring(0,sString.length-1)}
return sString;
}

function IsEmpty(obj) {
if (obj.tagName=='SELECT') return (obj.value==-1);
obj.value = trim(obj.value);
return (obj.value.length==0)}

function SwitchLayer(obj) {
/*var l=obj;
while(l.tagName!="DIV") {
l=l.parentElement;
if (!l) break;
}*/
}

function FocusObject(obj) {
// SwitchLayer(obj);
 obj.focus();
}

function attr(obj, att) {
var v=obj.getAttribute(att);
if (!v) v=eval('obj.'+att);
return v}

function checkForm(form) {
for (var a=0;a<form.elements.length;a++) {if (!validateInput(form.elements[a])) return false}
return true;
}

function validateInput(Obj) {
var hint = attr(Obj, 'hint');
if (!hint) {hint = ''} else hint = '"'+hint+'" ';
var mask = attr(Obj, 'mask');
var required = attr(Obj, 'req');
if (required) {required=(eval(required))} else required=false;
var len = attr(Obj, 'len');
if ((!mask)&&(!required)) return true;
if (Obj.type=='hidden') return CheckLookUp(hint, Obj, required);
if (IsEmpty(Obj)) {
	if (required) {
	FocusObject(Obj);
	alert('Поле '+hint+'обязательно для заполнения');							
	return false;
	} else {return true;}
}	
if ((len)&&(!HasLen(hint, Obj, len))) return false;
if (mask) {
	switch (mask){
	case 'date': {
	var sd=attr(Obj, 'startDate');
	var ed=attr(Obj, 'endDate');
	if ((!sd)&&(!ed)) return CheckTime(hint, Obj);
	if ((sd)&&(ed)) {return CheckTimeBetween(hint, Obj, sd, ed)} else return false;
	}
	case 'dateRange': return CheckTimeRange(hint, Obj);
	case 'email': return CheckEmail(hint, Obj);
	case 'int': return CheckInt(hint, Obj);
	case 'real': return CheckReal(hint, Obj);
	case 'real2': return CheckReal2(hint, Obj);
}} else return true; //mask
}

function CheckLookUp(title, obj, r) {
if ((r)&&(obj.value==-1)) {
var target=attr(obj, 'targetControl');
var el=null;
if (target) el=document.getElementById(target);
if (el) FocusObject(el);
alert('Поле '+title+'обязательно для заполнения');							
}else return true}

function HasLen(title, obj, len) {
obj.value = trim(obj.value);
if (obj.value.length!=len) {
FocusObject(obj);
alert('Поле '+title+'должно содержать '+len+' знаков');
return false}
return true;
}

function CheckInt(title, obj) {
if (!re_integer.test(obj.value)) {
FocusObject(obj);
alert('Значение поля '+title+'должно быть целое число');
return false} else return true}

function CheckEmail(title, obj) {
if (!re_email.test(obj.value)) {
FocusObject(obj);
alert('Поле '+title+'должно содержать правильный Email адрес');
return false} else return true}

function CheckReal(title, obj) {
if (!re_real.test(obj.value)) {
FocusObject(obj);
alert('Значение поля '+title+'должно быть целое или дробное число');
return false} else return true}

function CheckReal2(title, obj) {
if (!re_real2.test(obj.value)) {
FocusObject(obj);
alert('Значение поля '+title+'должно быть целое или дробное число');
return false} else return true}

function CheckIMO(obj) {
 if (HasLen('Код ИМО', obj, 7)) {
  return CheckInt('Код ИМО', obj, false);
 }
}
