function checkFormAccessControlAdvanced(Form) {
  var msghead = "";
  var msg = "";

  msghead  = "--------------------------------------------------------------\n";
  msghead += "Formulář nebyl odeslán, obsahuje chyby.\n";
  msghead += "Chyby opravte a odešlete znovu.\n";   
  msghead += "--------------------------------------------------------------\n\n"; 

  msg += checkUsernameAdvaced(document.getElementById("registrationUsername"), document.getElementById("requiredregistrationUsername"));
  msg += checkEmailAdvaced(document.getElementById("registrationEmail"), document.getElementById("requiredregistrationEmail"));
  msg += checkPasswordAdvaced(document.getElementById("registrationPassword"), document.getElementById("registrationPasswordControl"), document.getElementById("requiredregistrationPassword"));

  msg += checkJmenoAdvaced(document.getElementById("registrationFirstname"), document.getElementById("requiredregistrationFirstname"));
  msg += checkPrijmeniAdvaced(document.getElementById("registrationSecondname"), document.getElementById("requiredregistrationSecondname"));
  msg += checkTelefonAdvaced(document.getElementById("registrationPhone"), document.getElementById("requiredregistrationPhone"));
  msg += checkTelefonAdvaced(document.getElementById("registrationFax"), document.getElementById("requiredregistrationFax"));
  msg += checkTelefonAdvaced(document.getElementById("registrationMobil"), document.getElementById("requiredregistrationMobil"));
  msg += checkICQAdvaced(document.getElementById("registrationIcq"), document.getElementById("requiredregistrationIcq"));

  msg += checkUliceAdvaced(document.getElementById("registrationCorrespondenceStreet"), document.getElementById("requiredregistrationCorrespondenceStreet"));
  msg += checkMistoAdvaced(document.getElementById("registrationCorrespondencePlace"), document.getElementById("requiredregistrationCorrespondencePlace"));
  msg += checkPSCAdvaced(document.getElementById("registrationCorrespondencePSC"), document.getElementById("requiredregistrationCorrespondencePSC"));

//   msg += checkNazevAdvaced(document.getElementById("registrationCorporationName"), document.getElementById("requiredregistrationCorporationName"));
//   msg += checkICOAdvaced(document.getElementById("registrationCorporationICO"), document.getElementById("requiredregistrationCorporationICO"));
//   msg += checkDICAdvaced(document.getElementById("registrationCorporationDIC"), document.getElementById("requiredregistrationCorporationDIC"));
//   msg += checkUliceAdvaced(document.getElementById("registrationCorporationStreet"), document.getElementById("requiredregistrationCorporationStreet"));
//   msg += checkMistoAdvaced(document.getElementById("registrationCorporationPlace"), document.getElementById("requiredregistrationCorporationPlace"));
//   msg += checkPSCAdvaced(document.getElementById("registrationCorporationPSC"), document.getElementById("requiredregistrationCorporationPSC"));

  if (msg != "") {
    msghead += msg;
    alert (msghead);
    return false;
  }
  return true;
}

function checkUsernameAdvaced(str, required) {
  if (str.value == "") {
    if (required.value == "*") {
      return ("Musíte zadat uživatelské jméno.\n");
    }
    else{
      return ("");
    }   
  }
  else {
    var illegalChars = /[\W]/;
    if ((str.value.length < 4) || (str.value.length > 12)) {
      return ("Uživatelské jméno nemá správnou délku.\nMusí obsahovat minimálně 4 znaky a maximálně 12 znaků.\n");
    }
    else if (illegalChars.test(str.value)) {
      return ("Uživatelské jméno obsahuje nepovolené znaky.\n");
    }
    return(""); 
  }
}

function checkPasswordAdvaced(str, str2, required) {
  if (str.value != str2.value) {
    return ("Vámi zadaná hesla se neshodují.\n");
  }
  else{
    if (str.value == "") {
      if (required.value == "*") {
        return ("Musíte zadat heslo.\n");
      }
      else{
       return ("");
     }       
    }
    else {
      var illegalChars = /[\W_]/;
      if ((str.length < 5) || (str.length > 20)) {
        return ("Heslo nemá správnou délku.\nMusí obsahovat minimálně 6 znaků a maximálně 20 znaků.\n");
      }
      else if (illegalChars.test(str.value)) {
        return ("Heslo obsahuje nepovolené znaky.\n");
      } 
      else if (!((str.value.search(/[a-z]+/) >= 0) && (str.value.search(/[A-Z]+/) >= 0) && (str.value.search(/[0-9]+/) >= 0))) {
        return ("Heslo musí obsahovat alespoň jedno velké písmeno,\njedno malé písmeno a jednu číslici.\n");
      }  
      return("");      
    }
  }
} 

function checkJmenoAdvaced(str, required) {
  if (str.value == "") {
    if (required.value == "*") {
      return ("Musíte zadat jméno.\n");
    }
    else{
      return ("");
    }       
  }
  else {
    $RegExp = new RegExp("^[a-zA-Z_ ěščřžýáíéĚŠČŘŽÝÁÍÉďĎňŇóÓťŤůŮúÚ]{1,}$","i");
    if ((str.length < 3) || (str.length > 20)) {
      return ("Jméno nemá správnou délku.\nMusí obsahovat minimálně 3 znaky a maximálně 20 znaků.\n");
    }
    else if (!str.value.match($RegExp)) {
      return ("Jméno obsahuje nepovolené znaky.\n");
    } 
    return("");
  }
}

function checkPrijmeniAdvaced(str, required) {
  if (str.value == "") {
    if (required.value == "*") {
      return ("Musíte zadat příjmení.\n");
    }
    else{
      return ("");
    }       
  }
  else {
    $RegExp = new RegExp("^[a-zA-Z_ ěščřžýáíéĚŠČŘŽÝÁÍÉďĎňŇóÓťŤůŮúÚ]{1,}$","i");
    if ((str.length < 3) || (str.length > 40)) {
      return ("Příjmení nemá správnou délku.\nMusí obsahovat minimálně 3 znaky a maximálně 40 znaků.\n");
    }
    else if (!str.value.match($RegExp)) {
      return ("Příjmení obsahuje nepovolené znaky.\n");
    } 
    return("");    
  }
}

function checkNazevAdvaced(str, required) {
  if (str.value == "") {
    if (required.value == "*") {
      return ("Musíte zadat název.\n");
    }
    else{
      return ("");
    }       
  }
  else {
    $RegExp = new RegExp("^[a-zA-Z_ ěščřžýáíéĚŠČŘŽÝÁÍÉďĎňŇóÓťŤůŮúÚ]{1,}$","i");
    if ((str.length < 3) || (str.length > 80)) {
      return ("Název nemá správnou délku.\nMusí obsahovat minimálně 3 znaky a maximálně 80 znaků.\n");
    }
    else if (!str.value.match($RegExp)) {
      return ("Název obsahuje nepovolené znaky.\n");
    }
    return("");     
  }
}

function checkEmailAdvaced(str, required) {
  if (str.value == "") {
    if (required.value == "*") {
      return ("Musíte zadat e-mail.\n");
    }
    else{
      return ("");
    }       
  }
  else {
    $RegExp = new RegExp("^[a-zA-Z0-9_.]{1,}[@]{1}[a-zA-Z_]{1,}[.]{1}[a-zA-Z_]{0,}[.]{0,1}[a-zA-Z_]{2,3}$","i");
    if (!str.value.match($RegExp)) {
      return ("E-mail nemá správný formát.\n");
    }
    return("");    
  }
}   

function checkUliceAdvaced(str, required) {
  if (str.value == "") {
    if (required.value == "*") {
      return ("Musíte zadat název ulici.\n");
    }
    else{
      return ("");
    }       
  }
  else {
    $RegExp = new RegExp("^[a-zA-Z0-9_ ěščřžýáíéĚŠČŘŽÝÁÍÉďĎňŇóÓťŤůŮúÚ]{1,}[ ]{1}[0-9]{1,}[/]{0,1}[0-9]{0,}$","i");
    if (!str.value.match($RegExp)) {
      return ("Název ulice nemá správný formát.\n");
    } 
    return("");    
  }
}

function checkMistoAdvaced(str, required) {
  if (str.value == "") {
    if (required.value == "*") {
      return ("Musíte zadat název místa.\n");
    }
    else{
      return ("");
    }       
  }
  else {
    $RegExp = new RegExp("^[a-zA-Z_ ěščřžýáíéĚŠČŘŽÝÁÍÉďĎňŇóÓťŤůŮúÚ]{1,}[ ]{0,}[0-9]{0,}[ ]{0,}[-]{0,1}[ ]{0,}[a-zA-Z_ ěščřžýáíéĚŠČŘŽÝÁÍÉďĎňŇóÓťŤůŮúÚ]{0,}$","i");
    if (!str.value.match($RegExp)) {
      return ("Název místa nemá správný formát.\n");
    }
    return("");     
  }
}

function checkPSCAdvaced(str, required) {
  if (str.value == "") {
    if (required.value == "*") {
      return ("Musíte zadat PSČ.\n");
    }
    else{
      return ("");
    }
  }
  else {
    $RegExp = new RegExp("^[0-9]{3}[ ]{1}[0-9]{2}$","i");
    if (!str.value.match($RegExp)) {
      return ("PSČ nemá správný formát.\nPSČ musí být zadáno ve formátu: XXX XX\n");
    }
    return("");
  }
}

function checkTelefonAdvaced(str, required) {
  if (str.value == "") {
    if (required.value == "*") {
      return ("Musíte zadat telefon.\n");
    }
    else{
      return ("");
    }       
  }
  else {
    $RegExp = new RegExp("^[+]{1}[0-9]{3}[ ]{1}[0-9]{9}$","i");
    if (!str.value.match($RegExp)) {
      return ("Telefon nemá správný formát.\nTelefoní číslo musí být zadáno v mezinárodním formátu: +XXX XXXXXXXXX\n");
    } 
    return("");    
  }
}  

function checkICQAdvaced(str, required) {
  if (str.value == "") {
    if (required.value == "*") {
      return ("Musíte zadat ICQ.\n");
    }
    else{
      return ("");
    }       
  }
  else {
    $RegExp = new RegExp("^[0-9]{9}$","i");
    if (!str.value.match($RegExp)) {
      return ("ICQ nemá správný formát.\nICQ musí být zadáno ve formátu: XXXXXXXXX\n");
    } 
    return("");    
  }
}

function checkICOAdvaced(str, required) {
  if (str.value == "") {
    if (required.value == "*") {
      return ("Musíte zadat IČO.\n");
    }
    else{
      return ("");
    }       
  }
  else {
    $RegExp = new RegExp("^[0-9]{8}$","i");
    if (!str.value.match($RegExp)) {
      return ("IČO nemá správný formát.\nIČO musí být zadáno ve formátu: XXXXXXXX\nPokud Váše IČO nemá 8 číslic doplňte jej uvozovacími nulami.");
    } 
    return("");    
  }
}

function checkDICAdvaced(str, required) {
  if (str.value == "") {
    if (required.value == "*") {
      return ("Musíte zadat DIČ.\n");
    }
    else{
      return ("");
    }       
  }
  else {
    $RegExp = new RegExp("^CZ[0-9]{8,10}$","i");
    if (!str.value.match($RegExp)) {
      return ("DIČ nemá správný formát.\nDIČ musí být zadáno ve formátu: CZXXXXXXXX\nDIČ musí mít předvolbu CZ a 8 - 10 číslic.");
    } 
    return("");    
  }
}
