function checkEmail(object)
{
    var emailStr=object.value;
        var emailPat=/^(.+)@(.+)$/;
        var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
        var validChars="\[^\\s" + specialChars + "\]";
        var quotedUser="(\"[^\"]*\")";
        var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
        var atom=validChars + '+';
        var word="(" + atom + "|" + quotedUser + ")";
        var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
        var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

        var matchArray=emailStr.match(emailPat);
        if (matchArray==null) 
        {
                alert("Неправильный Email.");
	        object.focus();
                return false;
        }
        var user=matchArray[1];
        var domain=matchArray[2];
        if (user.match(userPat)==null) 
        {
                alert("Неправильный Email.");
        	object.focus();
                return false;
        }
        var IPArray=domain.match(ipDomainPat);
        if (IPArray!=null) 
        {
                for (var i=1;i<=4;i++) 
                {
                        if (IPArray[i]>255) 
                        {
                                alert("Неправильный Email.");
                		object.focus();
                                return false;
                        }
                }
                return true;
        }
        var domainArray=domain.match(domainPat);
        if (domainArray==null) 
        {
                alert("Неправильный Email.");
        	object.focus();
                return false;
        }
        var atomPat=new RegExp(atom,"g");
        var domArr=domain.match(atomPat);
        var len=domArr.length;
        if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>4)
        {
                alert("Неправильный Email.");
	        object.focus();
                return false;
        }
        if (len<2) 
        {
                alert("Неправильный Email.");
	        object.focus();
                return false;
        }
        return true;
}

function checkDigits(object,maxvalue)
{
    var strDigits=object.value;
    var valid="0123456789";
    var ok=1;
    var temp;
    if (strDigits.length==0)
    {
        alert("Неправильное значение. Максимальное значение "+maxvalue);
        object.focus();
        return false;
    }
    for (var i=0;i<strDigits.length;i++)
    {
        temp=""+strDigits.substring(i,i+1);
        if (valid.indexOf(temp)=="-1")
        {
            ok=0;
            alert("Неправильное значение.  азрешены только цифры.");
            object.focus();
            return false;
        }
    }
    if (strDigits>maxvalue || strDigits<1)
    {
        alert("Неправильное значение. Максимальное значение "+maxvalue);
        object.focus();
        return false;
    }
        return true;
}

function checkText(object)
{
    var strText=object.value;
    var invalid=".,;:/\'\"@#$&^%~|+=[]{}<>_";
    var ok=1;
    var temp;
    if (strText.length==0)
    {
        alert("Неправильное значение.");
        object.focus();
        return false;
    }
    for (var i=0;i<strText.length;i++)
    {
        temp=""+strText.substring(i,i+1);
        if (invalid.indexOf(temp)>0)
        {
            ok=0;
            alert("Неправильное значение.  азрешены только буквы и цифры.");
            object.focus();
            return false;
        }
    }
        return true;
}

function checkSend(sform,required,required_type)
{
    var required_array = required.split(",");
    var required_type_array = required_type.split(",");
    for (var i=0;i<required_array.length-1;i++)
    {
        type=eval(sform+"."+required_type_array[i]+".value");
        el=eval(sform+"."+required_array[i]);
        if (type=="email")
        {
            if (!checkEmail(el))
            {
                return false;
            }
        }
        else if (type=="phone")
        {
            if (!checkPhone(el))
            {
                return false;
            }
        }
        else if (type=="number")
        {
            if (!checkDigits(el,999999999999))
            {
                return false;
            }
        }
        else if (type=="zip")
        {
            if (!checkZip(el))
            {
                return false;
            }
        }
        else if (type=="date")
        {
            if (!checkDate(el))
            {
                return false;
            }
        }
        else if (type=="time")
        {
            if (!checkTime(el))
            {
                return false;
            }
        }
        else if (type=="comments")
        {
            if (!checkMandatory(el))
            {
                return false;
            }
        }
        else if (type=="other")
        {
            if (!checkMandatory(el))
            {
                return false;
            }
        }
    }
}

function checkPhone(object)
{
    var strField=object.value;
    if (strField.length==0)
    {
        alert(" азрешены только цифры.");
        object.focus();
        return false;
    }
    for (var i=0;i<strField.length;i++)
    {
        sSimb=strField.charAt(i);
        if ((sSimb < '0' || sSimb > '9') && (sSimb != '-') && (sSimb != '.') && (sSimb != '+') && (sSimb != ' ') && (sSimb != '(') && (sSimb != ')'))
        {
            alert(" азрешены только цифры.");
            object.focus();
            return false;
        }
    }
    return true;
}

function checkZip(object)
{
    var strField=object.value;
    if (strField.length!=5 && strField.length!=9)
    {
        alert("Please, make sure ZIP Code is 5 or 9 digits.");
        object.focus();
        return false;
    }
    for (var i=0;i<strField.length;i++)
    {
        if (strField.charAt(i)<'0' || strField.charAt(i)>'9')
        {
            alert("ZipCode must be a valid numeric entry. Please do not use non-numeric symbols.");
            object.focus();
            return false;
        }
    }
    return true;
}

function checkDate(object)
{
    var strField=object.value;
    if (strField.length==0)
    {
        alert("Дата должна быть в формате MM/DD/YYYY.");
        object.focus();
        return false;
    }
    var i=0;
    var j=0;
    while ((strField.charAt(i)!= "/" && strField.charAt(i)!= "-") && i<strField.length)
    {
        i++;
    }
    if (i==strField.length || i>2)
    {
        alert("Дата должна быть в формате MM/DD/YYYY.");
        object.focus();
        return false;
    }
    var addOne=false;
    if (i==2)
    {
        addOne = true;
    }
    if (!isDateNumber(strField.substring(0,i),1))
    {
        alert("Дата должна быть в формате MM/DD/YYYY.");
        object.focus();
        return false;
    }
    j=i+1;
    i=0;
    while ((strField.charAt(i+j)!= "/" && strField.charAt(j+i)!="-") && (i+j)<strField.length)
    {
        i++;
    }
    if ((i+j)==strField.length || i>2)
    {
        alert("Дата должна быть в формате MM/DD/YYYY.");
        object.focus();
        return false;
    }
    if (!isDateNumber(strField.substring(j,i+j),2))
    {
        alert("Дата должна быть в формате MM/DD/YYYY.");
        object.focus();
        return false;
    }
    j = i+3;
    i = 0;
    if (addOne)
    {
        j++;
    }
    while ((i+j)<strField.length)
    {
        i++;
    }
    if (i!= 2 && i!=4)
    {
        alert("Дата должна быть в формате MM/DD/YYYY.");
        object.focus();
        return false;
    }
    if (!isDateNumber(strField.substring(j,i+j),3))
    {
        alert("Дата должна быть в формате MM/DD/YYYY.");
        object.focus();
        return false;
    }
    return true;
}

function isDateNumber(str,method)
{
    var i=0;
    if (isNaN(parseInt(str)) || parseInt(str) < 0)
    {
        return false;
    }
    if (method == 2)
    {
        if (parseInt(str)>31)
        {
            return false;
        }
    }
    if (method==1)
    {
        if (parseInt(str)>12)
        {
            return false;
        }
    }
    for (i=0;i<str.length;i++)
    {
        if (str.charAt(i)<'0' || str.charAt(i)>'9')
        {
            return false;
        }
    }
    return true;
}

function checkTime(object)
{
    var s=object.value;
    sError="Введите время в формате 'HH:MM'";
    if (s.length==0)
    {
        alert(sError);
        object.focus();
        return false;
    }
    var bFlag=false;
    var i=0;
    while ((s.charAt(i)!=":") && (i<s.length))
    {
        i++;
    }
    if ((s.charAt(i)!=':') || (s.length>5))
    {
        bFlag=true;
    }
    var iHour=parseInt(s.substr(0,i));
    if (isNaN(iHour) || (parseInt(iHour)>24) || (parseInt(iHour)<0))
    {
        bFlag=true;
    }
    var iMin=parseInt(s.substr(i+1,s.length-i));
    if (isNaN(iMin) || (parseInt(iMin)>60) || (parseInt(iMin)<0))
    {
        bFlag=true;
    }
    if (s=='24:00')
    {
        object.value='23:59';
    }
    if (bFlag)
    {
        alert(sError);
        object.focus();
        return false;
    }
    else
    {
        return true;
    }
}

function checkMandatory(object)
{
    if (object.value.length==0)
    {
        alert ("Поле не заполнено!");
        object.focus();
        return false;
    }
    return true;
}
