/*****************************************************************************
  Konstanty
*/
var _ISDATE_TEXT =    'Hodnota musí být datum ve formátu "[d]d.[m]m.yyyy".';
var _ISDATETIME_TEXT ='Hodnota musí být datum a čas ve formátu "[d]d.[m]m.yyyy hh:mm:ss".';
var _ISEMAIL_TEXT =   'Hodnota musí být korektní email.';
var _ISFLOAT_TEXT =   'Hodnota musí být reálné číslo.';
var _ISINTEGER_TEXT = 'Hodnota musí být celé číslo.';
//var _ISNOTNULL_TEXT = 'Hodnota musí být zadána.';
var _ISTIME_TEXT =    'Hodnota musí být čas ve formátu "hh:mm:ss".';
var _ISURL_TEXT =     'Hodnota musí být korektní URL odkaz.';


/*****************************************************************************
  Funkce isDate().
  Funkce prověří, zda je zadaná hodnota datum dle formátu 'dd.mm.yyyy'.
*/
function isDate(input, blank) {
    input.value = input.value.replace(/^\s*(.*?)\s*$/, '$1');
    if (blank && !input.value)
        return true;
                                                        // převod na CZ formát
    input.value = input.value.replace(/^(\d{1,2})\D(\d{1,2})\D(\d{4})$/, '$1.$2.$3');
    input.value = input.value.replace(/^(\d{4})\D(\d{1,2})\D(\d{1,2})$/, '$3.$2.$1');
    input.value = input.value.replace(/^(\d{1,2})\D(\d{1,2})\D(\d{2})$/, '$1-$2-20$3');
    input.value = input.value.replace(/^(\d{2})\D(\d{1,2})\D(\d{1,2})$/, '$3-$2-20$1');
                                                        // ISO: yyyy-(m)m-(d)d
//    reg = /^(\d{4})-(0?[1-9]|1[0-2])-(0?[1-9]|[12]\d|3[01])$/;
                                                         // CZ: (d)d.(m)m.yyyy
    reg = /^(0?[1-9]|[12]\d|3[01])\.(0?[1-9]|1[0-2])\.(\d{4})$/;
    if (!(reg.test(input.value)
        && (                                                // měsíce s 30 dny
            ((RegExp.$2 == 4 || RegExp.$2 == 6 || RegExp.$2 == 9 || 
              RegExp.$2 == 11) && RegExp.$1 < 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.$1 < 32)
            ||                                                         // únor
            (RegExp.$2 == 2 && RegExp.$1 < 29)
            ||                                         // únor - přestupný rok
            (RegExp.$2 == 2 && RegExp.$1 < 30 && ((RegExp.$3 % 100) == 0 || 
                          (RegExp.$3 % 4) == 0 || (RegExp.$3 % 400) == 0))
         ) 
    )) {
        input.select();
        input.focus();
        alert(_ISDATE_TEXT);
    }
}
/* isDate() *****************************************************************/


/*****************************************************************************
  Funkce isDateTime().
  Funkce prověří, zda je zadaná hodnota datum a čas dle 
         formátu 'dd.mm.yyyy hh:mm:ss'.
*/
function isDateTime(input, blank) {
    input.value = input.value.replace(/^\s*(.*?)\s*$/, '$1');
    if (blank && !input.value)
        return true;

    if (!input.value.match(/^(0?[1-9]|[12]\d|3[01])\.(0?[1-9]|1[0-2])\.(\d{4}) (?:[01]?\d|2[0-3]):[0-5]?\d:[0-5]?\d$/)) {
        input.select();
        input.focus();
        alert(_ISDATETIME_TEXT);
    }
}
/* isDateTime() *************************************************************/


/*****************************************************************************
  Funkce isEmail().
  Funkce prověří, zda je zadaný řetězec email.
*/
function isEmail(input, blank) {
    input.value = input.value.replace(/^\s*(.*?)\s*$/, '$1');
    if (blank && !input.value)
        return true;
    if (!input.value.match(/^[\w_-]+(\.[\w_-]+)*@[\w_-]+(\.[\w_-]+)*(\.[a-z]{2,4})$/)) {
        input.select();
        input.focus();
        alert(_ISEMAIL_TEXT);
    }
}
/* isEmail() ****************************************************************/


/*****************************************************************************
  Funkce isFloat().
  Funkce prověří, zda je zadané číslo reálné.
*/
function isFloat(input) {
    input.value = input.value.replace(/^\s*(.*?)\s*$/, '$1');
    if (!input.value.match(/^[+-]?[0-9]+[.,][0-9]+$/))
        if (input.value.match(/^[+-]?[0-9]+$/)) {     // vstupem je cele cislo
            input.value += '.00';              // prevedem jej na realne cislo
        } else {
            input.select();                         // na vstupu neni cislo ;(
            input.focus();
            alert(_ISFLOAT_TEXT);
        }
}
/* isFloat() ****************************************************************/


/*****************************************************************************
  Funkce isInteger().
  Funkce prověří, zda je zadané číslo celé.
*/
function isInteger(input) {
    input.value = input.value.replace(/^\s*(.*?)\s*$/, '$1');
    if (!input.value.match(/^[+-]?[0-9]+$/)) {
        input.select();
        input.focus();
        alert(_ISINTEGER_TEXT);
    }
}
/* isInteger() **************************************************************/


/*****************************************************************************
  Funkce isTime().
  Funkce prověří, zda je zadaná hodnota čas dle formátu 'hh:mm:ss'.
*/
function isTime(input, blank) {
    input.value = input.value.replace(/^\s*(.*?)\s*$/, '$1');
    if (blank && !input.value)
        return true;
                                                       // převod na ISO formát
    input.value = input.value.replace(/^(\d{1,2})\D(\d{1,2})\D(\d{1,2})$/, '$1:$2:$3');
    input.value = input.value.replace(/^(\d{1,2})\D(\d{1,2})$/, '$1:$2:00');
    input.value = input.value.replace(/^(\d{1,2})$/, '$1:00:00');
                                                        // ISO: (h)h:(m)m:(s)s
    if (!input.value.match(/^(?:[01]?\d|2[0-3]):[0-5]?\d:[0-5]?\d$/)) {
        input.select();
        input.focus();
        alert(_ISTIME_TEXT);
    }
}
/* isTime() *****************************************************************/


/*****************************************************************************
  Funkce isUrl().
  Funkce prověří, zda je zadaný řetězec URL odkaz.
*/
function isUrl(input, blank) {
    input.value = input.value.replace(/^\s*(.*?)\s*$/, '$1');
    if (blank && !input.value)
        return true;
    if (!input.value.match(/^(?:(?:https?|ftp):\/\/)?[\w_-]+(\.[\w_-]+)*(\.[a-z]{2,4})(?:\/|:|$)/)) {
        input.select();
        input.focus();
        alert(_ISURL_TEXT);
    }
}
/* isEmail() ****************************************************************/


/*****************************************************************************
  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(name, maxscale, etrim) {
    if (!document.getElementById)
        return false;
    remain = document.getElementById(name + '_rm');
    scale = document.getElementById(name + '_sc');
    sender = document.getElementById(name + '_id');
    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.innerHTML = 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. */