// by Roman Bruckner - January 2008
// Validating forms , hide blocks
window.onload = initPage;

function initPage() {
  // initialing validating forms
  initForms();
  // init hiddenable blocks
  initHiddenDiv(); 
} 

/*
   INITIALING FORMS 
*/
function initForms() {
  for (var i=0; i < document.forms.length; i++) {
    document.forms[i].onsubmit = function(){return validForm(this);}
  }

  function validForm(thisForm) {
    var allGood = true;
    var allTags = thisForm.getElementsByTagName("*");
   
    for (var i=0; i<allTags.length; i++) {
      if (!validTag(allTags[i])) {
        allGood = false;
      }    
    }
   
    return allGood;
    
    function validTag(thisTag) {
      var outClass = "";
      var allClasses = thisTag.className.split(" ");
    
    
      for (var j=0; j<allClasses.length; j++) {
        outClass += validBasedOnClass(allClasses[j]) + " ";
      }
      
      thisTag.className = outClass;
      
      if (outClass.indexOf("invalid") > -1) {
        invalidLabel(thisTag.parentNode);
        thisTag.focus();
        if (thisTag.nodeName == "INPUT") {
          thisTag.select();
        }
        return false;
      }
    
      return true;
    
      function validBasedOnClass(thisClass) {
        var classBack = "";
        switch(thisClass)  {
          case "":
          case "invalid":
            break;
          case "email":
            if (allGood  && !validEmail(thisTag.value)) classBack = "invalid ";
            classBack += thisClass;
            break;
          case "number":
            if (allGood && !validNumber(thisTag.value)) classBack = "invalid ";          
            classBack += thisClass;
            break;
          case "radio":
            if (allGood && !radioPicked(thisTag.name)) classBack = "invalid ";
          default:
            classBack += thisClass;
        }
        return classBack;
      }

      function validEmail(email) {
        var filter = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
        return filter.test(email);
      }
    
      function validNumber(number) {
        var filter = /^(\d+)$/;
        return filter.test(number);
      }
  
      function radioPicked(radioName) {
        var radioSet = "";
        
        for (var k=0; k<document.forms.length; k++) {
          if (!radioSet) {
            radioSet = document.forms[k][radioName];
          }
        }
        
        if (!radioSet) return false;  
  
        for (k=0; k<radioSet.length; k++) {
          if (radioSet[k].checked) {
            return true;
          }
        }
        return false;
      }
  
      function invalidLabel(parentTag) {
        if (parentTag.nodeName == "LABEL") {
          parentTag.className += " invalid";
        }
      }
    }
  }

}
/*
  INITIALIZING HIDDING DIV
*/
function initHiddenDiv() {
  var allDIVs = document.getElementsByTagName("DIV");
  for (var i=0; i<allDIVs.length; i++) {
    if (allDIVs[i].className == "buttonHiddenDiv" && allDIVs[i].parentNode.className == "masterHiddenDiv"){           
      allDIVs[i].onclick = function(){actionButtonHiddenDiv(this);}
      allDIVs[i].className += (readCookie(allDIVs[i].parentNode.id) == "1") ? ' shown' : ' hidden';
      setButtonText(allDIVs[i]);
    }
    if (allDIVs[i].className == "slaveHiddenDiv" && allDIVs[i].parentNode.className == "masterHiddenDiv"){
      allDIVs[i].style.display = (readCookie(allDIVs[i].parentNode.id) == "1") ?  'block' : 'none';  
    }   
  }  
    
  function actionButtonHiddenDiv(thisTag) {
    var thisSlaveHiddenDiv = "";
    var allSlaveDIVs = thisTag.parentNode.getElementsByTagName("DIV");
    for (var j=0; j<allSlaveDIVs.length; j++) {
      if (allSlaveDIVs[j].className == "slaveHiddenDiv") {
         thisSlaveHiddenDiv = allSlaveDIVs[j];
         break;
      }
    }
    if (thisSlaveHiddenDiv) {
      if (thisSlaveHiddenDiv.style.display == 'none') {
        thisSlaveHiddenDiv.style.display = 'block';
        setCookie(thisTag.parentNode.id,"1");
        thisTag.className = "buttonHiddenDiv shown";
      } else {
        thisSlaveHiddenDiv.style.display = 'none';
        setCookie(thisTag.parentNode.id,"0");
        thisTag.className = "buttonHiddenDiv hidden";
      }
    }
    setButtonText(thisTag);
  }
  
  function setButtonText(thisTag) {
    var allSPANs = thisTag.getElementsByTagName("SPAN");
    for (var k=0; k<allSPANs.length; k++) {
      if (allSPANs[k].className == "buttonHiddenText") {
        allSPANs[k].innerHTML = (thisTag.className.indexOf("shown") > -1) ? "skrýt" : "zobrazit";
      }
    }  
  }
  
  function readCookie(nameCookie) {
    if (document.cookie != "") {  
      var thisCookie = document.cookie.split("; ");
      for (var j=0; j<thisCookie.length; j++) {
        if (thisCookie[j].split("=")[0] == nameCookie) {
          return thisCookie[j].split("=")[1];
        }      
      }
    }
    return "1";
  }

  function setCookie(nameCookie,valueCookie) {
    document.cookie = nameCookie + "=" + valueCookie;
  }
}




   



