function check_form(f,skip,error_field) {
  var errMSG = "";
  var err_html_fill="Пустое поле: ";
  var err_html_int="Не корректно заполнено поле: ";
  var out_div=document.getElementById(error_field);
  var checked=false;
  var check_init=false;
  var check_label='';
  
  // цикл ниже перебирает все элементы в объекте f,
  // переданном в качестве параметра
  // функции, в данном случае - наша форма.
  for (var i = 0; i<f.elements.length; i++){
    // если текущий элемент имеет атрибут required
    // т.е. обязательный для заполнения
    var label=f.elements[i].getAttribute("default");
    if(!label){
      label=f.elements[i].getAttribute("label");
    }
    if (!(null==f.elements[i].getAttribute("alert") || isEmpty(f.elements[i].getAttribute("alert")))){
      if(!(f.elements[i].checked)){
        errMSG += label+"<br>"; // формируем сообщение
      }
    }
    if (!(null==f.elements[i].getAttribute("need") || isEmpty(f.elements[i].getAttribute("need")))){
      f.elements[i].className='';
      if(need_check(f.elements[i].name,skip)){
        // проверяем, заполнен ли он в форме
        //var default_label=f.elements[i].getAttribute("default");
        if(f.elements[i].getAttribute("type")!="radio"){
          if ((isEmpty(f.elements[i].value) || label==f.elements[i].value)
          ||
          (f.elements[i].getAttribute("type")=="checkbox" && f.elements[i].checked==false)
          ){ // пустой
            errMSG += err_html_fill +'"'+ label+'"'+ "<br>"; // формируем сообщение
            mark_field(f.elements[i]);
          }
        }else{
          check_init=true;
          check_label=label;
          if(f.elements[i].checked){
            checked=true;
          }else{
            mark_field(f.elements[i]);
          }
        }
      }
    }
    // Проверки на типы
    if (f.elements[i].getAttribute("check")=="int"){
      f.elements[i].value=f.elements[i].value.replace(",",'.');
    }
    if(!(isEmpty(f.elements[i].value) || label==f.elements[i].value)){
      if(f.elements[i].getAttribute("check")){
        f.elements[i].className='';
      }
      var check_type=f.elements[i].getAttribute("check");
      if (check_type=="int" && !isNumeric(f.elements[i].value)){ // пустой
        errMSG += err_html_int +'"'+ label+'"'+ "<br>"; // формируем сообщение
        mark_field(f.elements[i]);

      }else if(check_type=="url" && !checkURL(f.elements[i].value)){
        errMSG += err_html_int +'"'+ label+'"'+ "<br>"; // формируем сообщение
        mark_field(f.elements[i]);

      }else if(check_type=="email" && !checkmail(f.elements[i].value)){
        errMSG += err_html_int +'"'+ label+'"'+ "<br>"; // формируем сообщение
        mark_field(f.elements[i]);

      }else if(check_type=="date"&& !isValidDate(f.elements[i].value)){
        errMSG += err_html_int +'"'+ label+'"'+ "<br>"; // формируем сообщение
        mark_field(f.elements[i]);

      }else if(check_type=="minutes" && (!isNumeric(f.elements[i].value) || f.elements[i].value>=60)){
        errMSG += err_html_int +'"'+ label+'"'+ "<br>"; // формируем сообщение
        mark_field(f.elements[i]);

      }else if(check_type=="hours" && (!isNumeric(f.elements[i].value) || f.elements[i].value>=24)){
        errMSG += err_html_int +'"'+ label+'"'+ "<br>"; // формируем сообщение
        mark_field(f.elements[i]);
      }
    }
    if("" != errMSG){
      if(f.elements[i].getAttribute("focus")) {
        //document.getElementById(f.elements[i].getAttribute("focus")).focus();
      }
      f.elements[i].focus();
      break;
    }
  }
  if(check_init && checked==false){
    errMSG += err_html_fill +'"'+ check_label+'"'+ "<br>"; // формируем сообщение
  }
  // об ошибке, перечисляя
  // незаполненные поля
  // если сообщение об ошибке не пусто,
  // выводим его, и возвращаем false
  if ("" != errMSG) {
    if(out_div && error_field){
      out_div.innerHTML=errMSG;
      //window.location=location.href.replace('#error','')+'#error';
      return false;
    }else{
      //alert('Не создан div c id="errors" !!! Вывод ошибок невозможен');
      return false;
    }
  }
  if(out_div)
  out_div.innerHTML="";
  return true;
}

function need_check(name,params) {
  if(params){
    var res;
    var tmp = eval ("if(params." + name+") res=false;else res=true;");
    return res;
  }else{
    return true;
  }
}

function mark_field(field){
  field.className='empty_field';
  //var area = field.parentNode;
  //area.className='empty_field';
}

function isValidDate(str){
  str=str.replace('/','.');
  myregexp = new RegExp("^[0-9]{1,2}.[0-9]{1,2}.[0-9]{2,4}$");
  if(str.match(myregexp)){
    return true;
  }else{
    return false;
  }
}

function isEmpty(str) {
  for (var i = 0; i < str.length; i++)
  if (" " != str.charAt(i))
  return false;
  return true;
}

function isNumeric(sText) {
  var validChars = "0123456789.,";
  var isNumber=true;
  var Char;

  for (i = 0; i < sText.length && isNumber == true; i++)
  {
    Char = sText.charAt(i);
    if (validChars.indexOf(Char) == -1)
    {
      isNumber = false;
    }
  }
  return isNumber;
}


function checkURL(value) {
  var urlregex = new RegExp("^(ftp|https?):\/\/(www\.)?[a-z0-9\-\.]{2,}\.[a-z]{2,4}.*$");
  if(urlregex.test(value))
  {
    return(true);
  }
  return(false);
}


function checkmail(txt){
  if (txt.indexOf(".") == -1) {

    return(false)
  }
  dog = txt.indexOf("@");
  if (dog == -1) {
    return(false)
  }

  if ((dog < 1) || (dog > txt.length - 5)) {
    return(false)
  }

  if ((txt.charAt(dog - 1) == '.') || (txt.charAt(dog + 1) == '.')) {
    return(false)
  }
  return true;
}