  /* Funkce pro syntaktickou kontrolu e-mailove adresy. */
  function IsValidEmail(anEmail, errText) {
    var email = anEmail.toLowerCase();
    var validChars = 'abcdefghijklmnopqrstuvwxyz0123456789@.-_';
    var i, emailLength, atPosition, dotPosition, lastDotPosition;
    
      // kontrola na minimalni delku 6 znaku - min je ve tvaru x@y.zz
    emailLength = email.length;
    if (emailLength <6) {
      errText[0] = 'Délka e-mailové adresy musí být minimálně 6 znaků.';
      return false;
      }
      // kontrola na povolene znaky
    for(i=0;i<email.length;i++)
      if (validChars.indexOf(email.charAt(i)) == -1) {
        errText[0] = 'Nepovolený znak "' + email.charAt(i) + '" v e-mailové adrese.';
        return false;
        }
      // kontrola na pritomnost znaku @
    atPosition = email.indexOf('@');
    if (atPosition == -1) {
      errText[0] = 'V e-mailové adrese chybí znak "@".';
      return false;
    }
      // kontrola na prave jeden znak @
    if (atPosition != email.lastIndexOf('@')) {
      errText[0] = 'V e-mailové adrese musí být právě jeden znak "@".';
      return false;
    }
      // znak @ nesmi by na zacatku nebo na konci
    if ((atPosition == 0) || (atPosition >=(emailLength-4)) ) {
      errText[0] = 'V e-mailové adrese nesmí být znak "@" na začátku nebo na konci.';
      return false;
    }
      // posledni tecka musi byt za znakem @, zaroven tam tecka musi byt
    lastDotPosition = email.lastIndexOf('.');
    if (lastDotPosition < atPosition) {
      errText[0] = 'V e-mailové adrese musí být poslední tečka za znakem "@".';
      return false;
    }
      // cast adresy zz v x@y.zz musi byt dlouha minimalne 2 znaky
    if (lastDotPosition > (emailLength-3)) {
      errText[0] = 'V e-mailové adrese musí být část za poslední tečkou dlouhá minimálně 2 znaky.';
      return false;
    }
      // cast adresy zz v x@y.zz nesmi byt delsi nez 4 znaky
    if ((lastDotPosition + 5) < emailLength) {
      errText[0] = 'V e-mailové adrese nesmí být část za poslední tečkou delší než 4 znaky.';
      return false;
    }
    return true;
  }
  
  /* Funkce pro odstraneni pocatecnich a koncovych bilych znaku z retezce. */
  function TrimString(aString) {
    var whiteChars, i, stringLength, startPosition, endPosition;
    
    whiteChars   = ' \r\n,';
    stringLength = aString.length;
    if (stringLength == 0)
      return aString;
    
    // odstraneni pocatecnich bilych znaku
    startPosition = 0;
    while ( (whiteChars.indexOf(aString.charAt(startPosition)) != -1) 
          && (startPosition < stringLength) )
      startPosition++;

    // odstraneni koncovych bilych znaku
    endPosition = stringLength - 1;
    while ( (whiteChars.indexOf(aString.charAt(endPosition)) != -1) 
          && (endPosition > startPosition) )
      endPosition--;
    if (startPosition <= endPosition)
      return aString.substring(startPosition, endPosition+1);
    else
      return "";
  }
  
  /* Funkce pro syntaktickou kontrolu seznamu e-mailovych adres. Jednotlive adresy
     jsou oddeleny carkou. Je povoleno pouzivat mezi dvema adresami take mezery nebo
     CR, LF.
     Parametry:
     anEmailList: Retezec se seznamem emailovych adres.
     badEmails:   Prazdne alokovane pole, do ktereho budou ulozeny nevyhovujici adresy.
     Navratova hodnota:
     TRUE:  Vsechny adresy jsou spravne.
     FALSE: Nektere adresy nejsou spravne. Jejich vycet je v poli badEmails.
  */  
  function IsValidEmailList(anEmailList, badEmails, errorTexts) {
    var emailList, emailsCount, email, i, result, badEmailsCount, errText;

    emailList       = TrimString(anEmailList).split(',');
    emailsCount     = emailList.length;
    result          = true;
    badEmailsCount  = 0
    errText         = new Array();
    for(i=0;i<emailsCount;i++) {
      email = TrimString(emailList[i]);
      if (!IsValidEmail(email, errText)) {
        result = false;
        badEmails[badEmailsCount] = email;
        errorTexts[badEmailsCount] = errText[0];
        badEmailsCount++;
      }
    }
    return result;
  }
