/*****************************************************/
/*    Юнит проверки вводимых данных в поля формы     */
/*****************************************************/

String.prototype.trim = function(){
    return this.replace(/(^\s+)|(\s+$)/g, "");
}

//
// Переопределение стандартных валидаторов для
// возможности выполнения проверок как обязательных
// для ввода полей так и не обязательных.
//

dhtmlxValidation.isNotEmptyReq = function(value){
    return this.isNotEmpty(value.trim());
}

dhtmlxValidation.isValIntegerReq = function(value){
    return this.isValidInteger(value);
}

dhtmlxValidation.isValInteger = function(value){
    if (value != '')
        return this.isValidInteger(value);
    return true;
}

dhtmlxValidation.isValNumericReq = function(value){
    return this.isValidNumeric(value);
}

dhtmlxValidation.isValNumeric = function(value){
    if (value != '')
        return this.isValidNumeric(value);
    return true;
}

dhtmlxValidation.isValAplhaNumericReq = function(value){
    if (value.trim() != '')
        return this.isValAplhaNumeric(value);
    return false;
}

dhtmlxValidation.isValAplhaNumeric = function(value){
    if (value != '')
        return !!value.match(/^[_\.\-a-zA-Zа-яА-Я0-9]+$/gi);
    return true;
}

//
// Определение своих валидаторов.
//

dhtmlxValidation.isValStringReq = function(value){
    if (value != '')
        return this.isValString(value);
    return false;
}

dhtmlxValidation.isValString = function(value){
    if (value != '')
        return !!value.match(/^[\s\-a-zA-Zа-яА-Я]+$/gi);
    return true;
}
dhtmlxValidation.isValCheckedReq = function(value){
    if (value == 0) return false;
    return true;
}

dhtmlxValidation.isCheckEmail = function (value) {
  if (value!=''){
    var template = /^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z])+$/;
    if (template.test(value)) {return true;}
    else {return false;}
  }
  else {return true;}
}

dhtmlxValidation.isCheckEmailReq = function (value) {
    if (value != '')
        return this.isCheckEmail(value);
    return false;
}

dhtmlxValidation.isLatinNumeric = function(value){
    var template  = /^[_\.\-A-Za-z0-9]+$/;
    if (template.test(value)){ return true;}
    return false;
}

dhtmlxValidation.isValSnils = function(value){
    value = value.replace(/(\s+)|(\-)/g, "");
    var p=0;
    if (dhtmlxValidation.isValNumericReq(value)){
        var j=9;
        for (var i=0;i<=8;i++)
            { p += parseInt(value.substr(i,1))*j--;}
        var cn = parseInt(value.substr(9));
        if (p % 101 === cn) return true;
    }
}

dhtmlxValidation.isValSnilsReq = function(value){
    if (value != '')
        return this.isValSnils(value);
    return false;
}

dhtmlxValidation.isValPhone = function(value){
    value = value.replace(/(\-)|(\()|(\))|(\+)/g, "");
    if (value!='') {
        if (dhtmlxValidation.isValNumericReq(value)) {;return true;}
        else {return false;}
    }
    else return true;
}

dhtmlxValidation.isValPhoneReq = function(value){
    if (value != '')
        return this.isValPhone(value);
    return false;
}

dhtmlxValidation.isValZipCode = function(value){
    if (value!='') {
        if (dhtmlxValidation.isValNumericReq(value)) {return true;}
        else {return false;}
    }
    else return true;
}

dhtmlxValidation.isValZipCodeReq = function(value){
    if (value != '')
        return this.isValZipCode(value);
    return false;
}

dhtmlxValidation.isValINN = function(value){
    if (value!='') {
        if (dhtmlxValidation.isInnCorrect(value)) {return true;}
        else {return false;}
    }
    else return true;
}

dhtmlxValidation.isValINNReq = function(value){
    if (value != '')
        return this.isValINN(value);
    return false;
}

dhtmlxValidation.isInnCorrect = function(value){
    var p=0;
    if (dhtmlxValidation.isValNumericReq(value)&&(value.length==10||value.length==12)){
        var a1 = [7,2,4,10,3,5,9,4,6,8];
        var a2 = [3,7,2,4,10,3,5,9,4,6,8];
        if (value.length==10){
              var a2 = a2.slice(2)
              for (var i=0;i<=8;i++) p +=parseInt(value.substr(i,1))*a2[i];
              var r = p % 11;
              if (r===10) {r = 0;}
              if (r === parseInt(value.substr(9,1))) return true;
            }
        else {
              for (var i=0;i<=9;i++) p +=parseInt(value.substr(i,1))*a1[i];
              var r = p % 11;
              if (r===10) {r = 0;}
              if (r === parseInt(value.substr(10,1))) var r1 = 1
              p=0;
              for (var j=0;j<=10;j++) p +=parseInt(value.substr(j,1))*a2[j];
              var r = p % 11;
              if (r===10) {r = 0;}
              if (r === parseInt(value.substr(11,1))) var r2 = 1
              if (r1===1&&r2===1) return true;
             }
    }
}
