/*****************************************************************************
  Konstanty
*/
var _ISNOTNULL_TEXT = 'Hodnota musí být zadána.';
var _ISEMAIL_TEXT =   'Hodnota musí být korektní email.';
var _ISINT_TEXT =  'Hodnota musí být celé číslo.';
var _ISREAL_TEXT = 'Hodnota musí být reálné číslo.';
var _ISTIME_TEXT = 'Hodnota musí být čas ve formátu "hh:mm:ss".';
var _ISDATE_TEXT = 'Hodnota musí být datum ve formátu "yyyy-mm-dd".';


/*****************************************************************************
  Funkce eraseBlank().
  Funkce odstraní veškeré bíle znaky na začátku a konci řetezce.
*/
function eraseBlank(text)
{
  text = text.replace(/^\s*/, '');        // odstranění blank znaků na zažátku
  return text = text.replace(/\s*$/, '');                   // a konci řetězce
}
/* eraseBlank() *************************************************************/


/*****************************************************************************
  Funkce isNotNull().
  Funkce prověří, zda je zadána nějaká hodnota.
*/
function isNotNull(input)
{
  input.value = eraseBlank(input.value);
  if (input.value == '') {
    input.select();
    input.focus();
    alert(_ISNOTNULL_TEXT);
  }
}
/* isInt() ******************************************************************/


/*****************************************************************************
  Funkce isEmail().
  Funkce prověří, zda je zadaný řetězec email.
*/
function isEmail(input, blank)
{
  input.value = eraseBlank(input.value);
  if (blank && !input.value)
    return true;
  
  reg = /^[\w_-]+(\.[\w_-]+)*@[\w_-]+(\.[\w_-]+)*(\.[a-z]{2,4})$/i; 
  if (!reg.test(input.value)) {
    input.select();
    input.focus();
    alert(_ISEMAIL_TEXT);
  }
}
/* isInt() ******************************************************************/


/*****************************************************************************
  Funkce isInt().
  Funkce prověří, zda je zadané číslo celé.
*/
function isInt(input)
{
  input.value = eraseBlank(input.value);
  
  reg = /^[+-]?[0-9]+$/; 
  if (!reg.test(input.value)) {
    input.select();
    input.focus();
    alert(_ISINT_TEXT);
  }
}
/* isInt() ******************************************************************/


/*****************************************************************************
  Funkce isReal().
  Funkce prověří, zda je zadané číslo reálné.
*/
function isReal(input)
{
  input.value = eraseBlank(input.value);

  reg = /^[+-]?[0-9]+[.,][0-9]+$/;
  if (!reg.test(input.value)) {                  // je na vstupu realne cislo?
    reg = /^[+-]?[0-9]+$/;
    if (reg.test(input.value)) {                      // vstupem je cele cislo
      input.value += '.0';                     // prevedem jej na realne cislo
    } else {
      input.select();                               // na vstupu neni cislo ;(
      input.focus();
      alert(_ISREAL_TEXT);
    }
  }
}
/* isReal() *****************************************************************/


/*****************************************************************************
  Funkce isTime().
  Funkce prověří, zda je zadaná hodnota čas dle formátu 'hh:mm:ss'.
*/
function isTime(input)
{
  t = input.value;
  t = eraseBlank(t);                                 // odstranění blank znaků
                                                       // převod na ISO formát
  t = t.replace(/^(\d{1,2})\D(\d{1,2})\D(\d{1,2})$/, '$1:$2:$3');
  t = t.replace(/^(\d{1,2})\D(\d{1,2})$/, '$1:$2:00');
  t = t.replace(/^(\d{1,2})$/, '$1:00:00');

  reg = /^([0-1]?[0-9]|2[0-3]):[0-5]?[0-9]:[0-5]?[0-9]$/;
  if (reg.test(t)) {
    t = t.replace(/^(\d):/, '0$1:');                           // doplnění nul
    t = t.replace(/:(\d):/, ':0$1:');
    t = t.replace(/:(\d)$/, ':0$1');
    input.value = t;                             // uložení upraveného formátu
  } else {
    input.select();                                              // chybný čas
    input.focus();
    alert(_ISTIME_TEXT);
  }
}
/* isTime() *****************************************************************/


/*****************************************************************************
  Funkce isDate().
  Funkce prověří, zda je zadaná hodnota datum dle formátu 'yyyy-mm-dd'.
*/
function isDate(input)
{
  d = input.value;
  d = eraseBlank(d);                                 // odstranění blank znaků
                                                       // převod na ISO formát
  d = d.replace(/^(\d{1,2})\D(\d{1,2})\D(\d{4})$/, '$3-$2-$1');
  d = d.replace(/^(\d{1,2})\D(\d{1,2})\D(\d{2})$/, '20$3-$2-$1');
  d = d.replace(/^(\d{2})\D(\d{1,2})\D(\d{1,2})$/, '20$1-$2-$3');
                                                        // ISO: yyyy-(m)m-(d)d
  reg = /^(\d{4})-(0?[1-9]|1[0-2])-(0?[1-9]|[12]\d|3[01])$/;
  if (reg.test(d)
      && (                                                  // měsíce s 30 dny
           ((RegExp.$2 == 4 || RegExp.$2 == 6 || RegExp.$2 == 9 || 
             RegExp.$2 == 11) && RegExp.$3 < 31)
           ||                                               // měsíce s 31 dny
           ((RegExp.$2 == 1 || RegExp.$2 == 3 || RegExp.$2 == 5 || 
             RegExp.$2 == 7 || RegExp.$2 == 8 || RegExp.$2 == 10 ||
             RegExp.$2 == 12) && RegExp.$3 < 32)
           ||                                                          // únor
           (RegExp.$2 == 2 && RegExp.$3 < 29)
           ||                                          // únor - přestupný rok
           (RegExp.$2 == 2 && RegExp.$3 < 30 && ((RegExp.$1 % 100) == 0 || 
                         (RegExp.$1 % 4) == 0 || (RegExp.$1 % 400) == 0))
         ) 
     ) {

    d = d.replace(/-(\d)-/, '-0$1-');           // doplnění nul u měsíců a dní
    d = d.replace(/-(\d)$/, '-0$1');
    input.value = d;                             // uložení upraveného formátu
  } else {
    input.select();                                              // chybný čas
    input.focus();
    alert(_ISDATE_TEXT);
  }
}
/* isDate() *****************************************************************/


/*****************************************************************************
  Funkce isDateTime().
  Funkce prověří, zda je zadaná hodnota datum a čas dle 
    formátu 'yyyy-mm-dd hh:mm:ss'.
*/
function isDateTime(input)
{
  t = input.value;
  t = eraseBlank(t);                                 // odstranění blank znaků

  reg = /^(.*) (.*)$/;
  if (reg.test(t)) {
    var date = t.replace(/^(.*) (.*)$/, '$1');
    var time = t.replace(/^(.*) (.*)$/, '$2');
    input.value = date;
    isDate(input);
    date = input.value;
    input.value = time;
    isTime(input);
    time = input.value;
    input.value = date +' '+ time;               // uložení upraveného formátu
  } else {
    input.select();                                              // chybný čas
    input.focus();
    alert(_ISDATE_TEXT);
    alert(_ISTIME_TEXT);
  }
}
/* isTime() *****************************************************************/



/*****************************************************************************
  Funkce countIt().
  Volání probíhá událostními ovladači prvků, u kterých je požadováno
  počítání délky zadaného textu s následným zobrazením výsledku graficky
  a numericky. 
*/
function countIt(sender, scale, remain, maxscale, etrim)
{
    sender = document.getElementById(sender);
    scale = document.getElementById(scale);
    remain = document.getElementById(remain);

    var len = sender.value.length;
    if (etrim) {
        len += countETrim(sender.value);
        while (len > maxscale) {
            sender.value = sender.value.substring(0, sender.value.length - 1);
            len = sender.value.length + countETrim(sender.value);
        }
    } else {
        if (len > maxscale)
            sender.value = sender.value.substring(0, maxscale);
        len = sender.value.length;
    }
    scale.style.width = Math.round(len / maxscale * 100) + '%';
    remain.innerText = len + '/' + maxscale + ' znaků';
    
  return true;
}
/* countIt() ****************************************************************/
 
 
 
/*****************************************************************************
  Funkce countETrim().
  Funkce vrací, o kolik znaků se zvětší parametrem předaný řetězec,
  bude-li na něj aplikována funkce ETrim(), která nahrazuje některé speciální
  znaky entitatmi HTML.
*/
function countETrim(s) {
  cnt = 0;
  for (i = 0; i < s.length; i++) {
    switch (s.charAt(i)) {
      case "\"": cnt += 5; break;                                     //&quot;
      case "\'": cnt += 4; break;                                      //&#39;
      case "\\": cnt += 4; break;                                      //&#92;
      case "&":  cnt += 4; break;                                      //&amp;
      case "<":  cnt += 3; break;                                       //&lt;
      case ">":  cnt += 3; break;                                       //&gt;
    }
  }
  
  return cnt;
}
/* countETrim() *************************************************************/



/* End of file. */