// data validators
//
// version 2.1_ru
//
// with support tooltips
//
// author: Serge Y Kozlov (root@wand.ru)


//string constants
var text_error_empty=          "Значение не введено.\n";
var text_error_not_selected=   "Значение не выбрано.\n";
var text_error_int=            "Значение не является целым числом.\n";
var text_error_int_positive=   "Значение не является положительным целым числом.\n";
var text_error_float=          "Значение не является числом.\n";
var text_error_float_positive= "Значение не является положительным числом.\n";
var text_error_interval=       "Значение выходит за доступные границы.\n";
var text_search_error=         "Все слова в поисковой фразе должны быть длиной не менее 4х символов";

//
// validate value for not empty string
//
function validEmpty(el)
{ var re= /^(\s*|undefined)$/;
  excludeErr(el);
  if(re.test(el.value))
  { el.className += " err";
    el.focus();
    return '"'+getTitle(el)+'" - '+text_error_empty;
  }
  return '';
}

//
// validate selected value for not empty
//
function validSelected(el)
{ 
  excludeErr(el);
  if(el.tagName == 'SELECT' &&
     !el.options[el.selectedIndex].value)
  { el.className += " err";
    el.focus();
    return '"'+getTitle(el)+'" - '+text_error_not_selected;
  }
  return '';
}

//
// validate value for integer
//
function validInt(el, can_be_negative)
{ var re;
  if(can_be_negative)
       re= /^(-?\d+)$/;
  else re= /^(\d+)$/;
  excludeErr(el);
  if(!re.test(el.value))
  { el.className += " err";
    el.focus();
    return '"'+getTitle(el)+'" - '+(can_be_negative ? text_error_int : text_error_int_positive);
  }
  return '';
}

//
// validate value for float
//
function validFloat(el, can_be_negative)
{ var re;
  if(can_be_negative)
       re= /^(-?\d+(\.\d+)?)$/;
  else re= /^(\d+(\.\d+)?)$/;
  excludeErr(el);
  if(!re.test(el.value))
  { el.className += " err";
    el.focus();
    return '"'+getTitle(el)+'" - '+(can_be_negative ? text_error_float : text_error_float_positive);
  }
  return '';
}

//
// validate integer value on entry into interval
//
function validIntInterval(el, v1, v2)
{ var r= validInt(el, 1);
  if(r) return r;
  excludeErr(el);
  if(el.value < v1 || el.value > v2)
  { el.className += " err";
    el.focus();
    return '"'+getTitle(el)+'" - '+text_error_interval;
  }
  return '';
}
function getTitle(el)
{ var title = el.title;
  var tooltip = el.getAttribute('tooltip');
  if(tooltip) return tooltip;
  else return title;
}
function excludeErr(el)
{
  el.className = el.className.replace(/ err$/, '');
}
function invalidText(el)
{ var re1= /^(\s*)/;
  var re2= /(\s*)$/;
  el.value= el.value.replace(re1, "").replace(re2, "");
  excludeErr(el);
  if(!el.value)
  { el.className += " err";
    el.focus();
    return '- поле "'+getTitle(el)+'" не заполнено\n';
  }
  return "";
}
function invalidEmail(el)
{ var re= /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
  excludeErr(el);
  if(el.value.search(re) < 0)
  { el.className += " err";
    el.focus();
    return '- ошибка при вводе e-mail "'+el.value+'"\n';
  }
  return "";
}
function invalidEmailPhone(e, p)
{ 
  excludeErr(e);
  excludeErr(p);
  if(!(e.value || p.value))
  { e.className += " err"
    p.className += " err";
    e.focus();
    return '- поле "'+getTitle(e)+'" или "'+getTitle(p)+'" не заполнено\n';
  }
  if(e.value)
       return invalidEmail(e);
  else return invalidText(p);
}
function invalidSearchString(el) {
    var words = el.value.split(/ /);
    for(var n = 0; n < words.length; n ++) {
        if(words[n].length < 4) return text_search_error;
    }
    return '';
}
