function CHECK_Context_silent(str, isMorpho, isTextarea) {
  var i, s, st = '', len = str.length;
  //заменяем все неопознанные символы пробелами
  str = STR.specialTransliterate(str);
  for (i=0; i<len; i++) {
    s = str.charAt(i);
    if (isMorpho && (s=='*' || s=='!') && !isTextarea) {
      if ((i==(len-1) && i!=0 && STR.isLetterOnly(str.charAt(i-1))) ||
          (i>0 && i<(len-1) && STR.isLetterOnly(str.charAt(i-1)) && (str.charAt(i+1)==' ' || str.charAt(i+1)=='"'))) {
        st+= s;
      }
    } else {
        if (STR.isLetter(s)) {
            st+= s;
        } else {
            st+= ' ';
        }
    }
  }
  return st;
}

function CHECK_Context(str, isMorpho, isTextarea) {
  var re, st;
  
  str = STR.specialTransliterate(STR.trim(str));  

  st = CHECK_Context_silent(str, isMorpho, isTextarea);
  
  if (str.replace(/[\n\r]/g, '') != st.replace(/[\n\r]/g, '')) {
    var tmp = [
      'Illegal character, will be removed automatically.\nThe following are allowed:',
      '0-9\na-z A-Z\nа-я А-Я\n- / \" \№ _'
    ];
    if (isMorpho && !isTextarea) {
      tmp[tmp.length]= 'Characters &quot;!&quot; and &quot;*&quot; are allowed only in the end of the words';
    }
    alert(tmp.join('\n'));
  }

  //множественные пробелы заменяем единичными
  re = / {2,}/ig;
  if (!isTextarea) st = st.replace(re, ' ');
  return st.trim();
}

function CHECK_dateValidChars(strval) {
  var i, s;
  for (i=0; i<strval.length;i++) {
   s = strval.substring(i,i+1);
   if ((s < "0" || s > "9") &&
        s != '.' && s != '-' &&
        s != '\\' && s!= '/') return false;
  }
  return true;
}
function CHECK_Date(dt, dontMes) {
  var month, day, year;
  var retval=false
  var r,d;
  dt = dt.replace(/\\|\/|\-/ig, '.');

  r = dt.split('.');
  if (r.length==1) {
// если точек в введенной строке не оказалось, то вставляем их на третью и на шестую позиции
    dt = dt.substring(0,2) + '.' + dt.substr(2);
    dt = dt.substring(0,5) + '.' + dt.substr(5);
  }

  r = dt.split('.');
  if (r.length!=3) {
    if (!dontMes)
      return alert('Day, month and year must be specified.\nUse dd.mm.yy format');
    else return null;
  }
 
  if (r[0].length<1 || r[0].length>2 || r[1].length<1 || r[1].length>2 || r[2].length<1 || r[2].length>4) {
    if (!dontMes) 
      return alert('Day, month and year must be specified.\nUse dd.mm.yy format');
    else return null;
  }

  if (r[0].length==1) r[0] = '0' + r[0];
  if (r[1].length==1) r[1] = '0' + r[1];
  d = new Date();
  year4 = d.getFullYear();
  switch (r[2].length) {
    case 1:
      if (parseInt('200' + r[2])>year4) r[2]='190'+r[2]; else r[2]='200'+r[2];
      break;
    case 2:
      if (parseInt('20' + r[2])>year4) r[2]='19'+r[2]; else r[2]='20'+r[2];
      break;
    case 3:
      if (parseInt('2' + r[2])>year4) r[2]='1'+r[2]; else r[2]='2'+r[2];
     break;
  }

  day   = Number(r[0]);
  month = Number(r[1]) - 1;
  year  = Number(r[2]);
  var mon = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
  
  mon[1] = (((year%4==0) && (year%100!=0 || year%400==0))) ? 29 : 28;
  
  if (year && year<9999 && mon[month] &&
      day && day<=mon[month]) {
  } else {
    if (!dontMes) 
      return alert('Invalid day, month or year.');
    else return null;
  }

  return r[0] + '.' + r[1]  + '.' + r[2];
}
function CHECK_LP(str, name) {//!-.w'(Ы)->№%:?*/\
  var re = /[^\!\-\.\w\'\(\)\-а-яА-Я\>\№\%\:\?\*\\\/]/;
  return (__alertCheckMess(re, str, name) && str.length<31);
}
function CHECK_FIO(str) {
  
  return true;
  
}
function CHECK_Email(str) {
  var re = /^[\w\.\-]+@[\w\.\-]+\.\w+?$/;
  var res = true;
  if (!re.test(str)) {
    ___alertCheckMess('E-mail');
    res = false;
  }
  return res;
}
function __alertCheckMess(re, str, name) {
  var res = true;
  if (re.test(str)) {
    ___alertCheckMess(name)
    res = false;
  }
  return res;
}
function ___alertCheckMess(name) {
  alert([
    'In field "'+name+'" Invalid value.\nPlease, edit.'
  ].join('\n'));
}