function MM_validateForm() { //v2.0
  var i, objStr, field, theCheck, atPos, theNum, colonPos, min, max, errors = '';

  for ( i=0; i < (MM_validateForm.arguments.length-2); i+=3) { // Перебрать все аргументы функции
    objStr = MM_validateForm.arguments[(navigator.appName == 'Netscape') ? i : i+1];
    if (   (objStr.indexOf('document.layers[')==0 && document.layers==null) 
        || (objStr.indexOf('document.all[')   ==0 && document.all   ==null)
       )
      objStr = 'document'+objStr.substring(objStr.substring(0,objStr.lastIndexOf('.')).
                 lastIndexOf('.'),objStr.length);  //fix layer ref if not supp
    field = eval(objStr);
    field.name = (field.name) ? field.name : objStr;
    
    theCheck = MM_validateForm.arguments[i+2];
    
    if (field.value) // Поле не пусто
    { 
      if (theCheck.indexOf('isEmail') != -1) { // Проверка адреса электронной почты
        atPos = field.value.indexOf('@');
        if (atPos < 1 || atPos == (field.value.length - 1))
          errors += '- Поле '+field.name+' должно содержать адрес электронной почты.\n';
      } 
      else if (theCheck != 'R') // Проверка численного значения
      { 
        theNum = parseFloat(field.value);
        if (field.value != ''+theNum) errors += '- В поле '+field.name+' должно быть число.\n';
        
        if (theCheck.indexOf('inRange') != -1) // Интервал значений
        { 
          colonPos = theCheck.indexOf(':');
          min = theCheck.substring(8,colonPos);
          max = theCheck.substring(colonPos+1,theCheck.length);
          if (theNum < min || max < theNum) // число не попадает в диапазон
            errors += '- В поле '+field.name+' должно быть число из интервала '+min+'...'+max+'.\n';
        } 
      } 
    }
    else // Поле должно быть заполнено
      if (theCheck.charAt(0) == 'R') errors += '- Поле '+field.name+' должно быть заполнено.\n';
  }
  if (errors) alert('Обнаружились след. ошибка(и) :\n'+ errors);

  document.MM_returnValue = (errors == '')
}

//eof
