
/* -----------------------------------------------------------------------------
    @AUTHOR:  Zdenek Benak, zdenek.benak@centrum.cz
    @YEAR:    2006
    @PROJECT: MAppEngine
    @FILE:    inc/m_elements.js
    @DESCR:   funkce pro praci s formulari, zmeny obrazku na najeti a pod
 * -------------------------------------------------------------------------- */


// -------------- funkce pro test formuláře na pozadovane polozky  -------------

    function CheckForm(form, params, show_alert, texts)
    {
      // syntaxe parametrů: "polozka1:název položky1(:dolní_limit(:horní_limit))(|||custom error)(;položka2:...)"
      // příklad: checkFrom(this, "vek:věk:0;rok_narozeni:rok narození:1900:2000");
      
      if (show_alert==undefined)
      {
        show_alert = true;
      }
      
      if (!texts)
      {
        texts  = new Array();
        texts["chyba_ve_formulari"] = "Chyba ve formuláři:";
        texts["polozka"]        = "položka";
        texts["chyba_vyplnena"] = "musí být vyplněna.";
        texts["chyba_cislo"]    = "musí mít minimální číselnou hodnotu.";
        texts["chyba_interval"] = "musí mít číselnou hodnotu v intervalu";
      }
      
      if (!form) alert("chyba - nexesitujici formular.");
      var result = true;
      var errstr = texts["chyba_ve_formulari"]+"\n";
      var pars   = params.split(";");
      var alert_str = "";
      
      for (i=0; i<pars.length; i++)
      {
      
        var item = pars[i].split("|||");
        var par  = item[0].split(":");
        var custom_error = item.length>1?item[1]:"";

        if (!form[par[0]])
        {
          alert("chyba - neexistujici pole: " + par[0]);
          return false;
        }
        
        var val      = parseInt(form[par[0]].value);
        var vyplneno = false;
        
        switch (form[par[0]].type)
        {
          case "checkbox":
            vyplneno = form[par[0]].checked;
            break;
            
          default:
            vyplneno = form[par[0]].value;
            break;
        }
        
        if (!par[2] && !vyplneno)
        {
          if (result) form[par[0]].focus();
          alert_str += custom_error?custom_error:(texts["polozka"]+" \""+par[1]+"\" "+texts["chyba_vyplnena"]+"\n");
          result = false;
        }
        else if (par[2]&&!par[3]&&(isNaN(val)||(val<par[2])))
        {
          if (result) form[par[0]].focus();
          alert_str +=  custom_error?custom_error:(texts["polozka"]+" \""+par[1]+"\" "+texts["chyba_cislo"]+" "+par[2]+".\n");
          form[par[0]].value = "";
          result = false;
        }
        else if (par[3]&&(isNaN(val)||(val<par[2])||(val>par[3])))
        {
          if (result) form[par[0]].focus();
          alert_str +=  custom_error?custom_error:(texts["polozka"]+" \""+par[1]+"\" "+texts["chyba_interval"]+" "+par[2]+" až "+par[3]+".\n");
          form[par[0]].value = "";
          result = false;
        }
      }

      if (show_alert)
      {
        if (!result) alert (errstr+alert_str);
        return result;
      }
      else
      {
        return alert_str;
      }
    }

// ------------------------ CheckBox - zatrhnout vse --------------------------
 
    function CheckBoxSelectAll(form_name,cb_name)
    {
      var i;
      inputs = document.forms[form_name].elements;
      for (i=0;i<inputs.length;i++)
      {
        if (inputs[i].type=='checkbox' && inputs[i].name.indexOf(cb_name)>-1)
        {
          inputs[i].checked = true;
          if (inputs[i][inputs[i].name+"h_"]) inputs[i][inputs[i].name+"h_"].value = "1";
        }
      }
    }

// ------------------------ CheckBox - odtrhnout vse ---------------------------

    function CheckBoxSelectNone(form_name,cb_name)
    {
      var i;
      inputs = document.forms[form_name].elements;
      for (i=0;i<inputs.length;i++)
      {
        if (inputs[i].type=='checkbox' && inputs[i].name.indexOf(cb_name)>-1)
        {
          inputs[i].checked = false;
          if (inputs[i][inputs[i].name+"h_"]) inputs[i][inputs[i].name+"h_"].value = "0";
        }
      }
    }
    
// ------------------- CheckBox - zatrhnout vse (not disabled) -----------------

    function CheckBoxSelectAll_NotDisabled(form_name,cb_name)
    {
      var i;
      inputs = document.forms[form_name].elements;
      for (i=0;i<inputs.length;i++)
      {
        if (inputs[i].type=='checkbox' && inputs[i].name.indexOf(cb_name)>-1 && !inputs[i].disabled)
        {
          inputs[i].checked = true;
          if (inputs[i][inputs[i].name+"h_"]) inputs[i][inputs[i].name+"h_"].value = "1";
        }
      }
    }

// ------------------- CheckBox - odtrhnout vse (not disabled) -----------------

    function CheckBoxSelectNone_NotDisabled(form_name,cb_name)
    {
      var i;
      inputs = document.forms[form_name].elements;
      for (i=0;i<inputs.length;i++)
      {
        if (inputs[i].type=='checkbox' && inputs[i].name.indexOf(cb_name)>-1 && !inputs[i].disabled)
        {
          inputs[i].checked = false;
          if (inputs[i][inputs[i].name+"h_"]) inputs[i][inputs[i].name+"h_"].value = "0";
        }
      }
    }

    
// ---------------------- zobrazi skryje element -------------------------------

    function SHElement(element_name,sh)
    {
      elm = document.getElementById(element_name);
      if (elm) elm.style.display = sh?"":"none";
    }

// -------------------------- zobrazi element ----------------------------------

    function ShowElement(element_name)
    {
      elm = document.getElementById(element_name);
      if (elm) elm.style.display = "";
    }

// -------------------------- skryje element ----------------------------------

    function HideElement(element_name)
    {
      elm = document.getElementById(element_name);
      if (elm) elm.style.display = "none";
    }
    
// ----------- zobrazi/skryje element na zaklade zatrzerni checkboxu -----------

    function ShowHideElement(form_name,checkbox_name,element_name)
    {
      sh = document[form_name][checkbox_name].checked;
      elm = document.getElementById(element_name);
      elm.style.display = sh?"":"none";
    }
    
    function ShowHideElements(form_name,checkbox_name,elements_array)
    {
      sh = eval("document."+form_name+"."+checkbox_name+".checked;");
      earray = elements_array.split(";");
      for(var i=0;i<earray.length;i++)
      {
        elm = document.getElementById(earray[i]);
        if (elm) elm.style.display = sh?"":"none";
      }
    }

// -------------- skryje element pokud je mys mimo tento element ---------------

    function HideElementOutside(event,element_name)
    {
      elm     = document.getElementById(element_name);
      mouseX  = GetMouseX(event);
      mouseY  = GetMouseY(event);

      if(!(mouseX>GetElementLeft(elm)+1 && mouseX<GetElementRight(elm)-1 && mouseY>GetElementTop(elm)+1 && mouseY<GetElementBottom(elm)-1)) elm.style.display = "none";
    }

// ---------------------------- zvyrazneni elementu ----------------------------

    function HiliteElement(elm_id,color)
    {
      elm = document.getElementById(elm_id);
      elm.style.backgroundColor = color;
      ch = elm.childNodes;
      for (i=0;i<ch.length;i++)
      {
        if (ch[i].style) ch[i].style.backgroundColor = color;
      }
    }
    
// ------------------------ zruseni zvyrazneni elementu ------------------------

    function UnHiliteElement(elm_id)
    {
      elm = document.getElementById(elm_id);
      elm.style.backgroundColor = "";
      for (i=0;i<ch.length;i++)
      {
        if (ch[i].style) ch[i].style.backgroundColor = "";
      }
    }
    
    
// ------------------------ zakazani vstupnich poli  ---------------------------

    function DisableInputs(elm_id)
    {
      elm = document.getElementById(elm_id);
      ch = elm.childNodes;
      for (i=0;i<ch.length;i++)
      {
        ch[i].disabled = true;
        //DisableInputs(ch[i].id);
      }
    }

// ------------------------ povoleni vstupnich poli  ---------------------------

  function EnableInputs(elm_id)
  {
    elm = document.getElementById(elm_id);
    for (i=0;i<ch.length;i++)
    {
      ch[i].disabled = false;
      //EnableInputs(ch[i].id);
    }
  }
    


// ----------------- preload obrazku, zmeny stavu obrazku ----------------------

  // img cache
    var _img_cache = new Array();
  
  // preload obrazku - obecna funkce
    function PreloadImage(img_cache_id, img_version, img_file)
    {
      if (!document.images) return;

      if (!_img_cache[img_cache_id])
      {
        _img_cache[img_cache_id] = new Array();
      }

      _img_cache[img_cache_id][img_version]     = new Image();
      _img_cache[img_cache_id][img_version].src = img_file;
    }

  // preload image - normal / rollover / disabled
    function PreloadNormalImage(img_id,  img_file)   { PreloadImage(img_id, "normal",   img_file); }
    function PreloadRolloverImage(img_id, img_file)  { PreloadImage(img_id, "rollover", img_file); }
    function PreloadDisabledImage(img_id, img_file)  { PreloadImage(img_id, "disabled", img_file); }

  // zobrazeni verze obrazku
    function ImgVersion(img_id, img_version)
    {
      if (!document.images) return;

      var elm = document.getElementById(img_id);
      if (elm) elm.src = _img_cache[img_id][img_version].src;
    }

  // zobrazeni verze obrazku - normal / rollover / disabled
    function ImgNormal(img_id)    {ImgVersion(img_id,"normal");   }
    function ImgRollover(img_id)  {ImgVersion(img_id,"rollover"); }
    function ImgDisabled(img_id)  {ImgVersion(img_id,"disabled"); }
  
  // skupinovy obrazek - zobrazeni verze
    function GroupImgVersion(img_id, img_cache_id, img_version)
    {
      if (!document.images) return;

      var elm = document.getElementById(img_id);
      if (elm) elm.src = _img_cache[img_cache_id][img_version].src;
    }
    
  // skupinovy obrazek -  normal / rollover / disabled
    function GroupImgNormal(img_id, img_cache_id)    {GroupImgVersion(img_id, img_cache_id, "normal");   }
    function GroupImgRollover(img_id, img_cache_id)  {GroupImgVersion(img_id, img_cache_id, "rollover"); }
    function GroupImgDisabled(img_id, img_cache_id)  {GroupImgVersion(img_id, img_cache_id, "disabled"); }

// ---------------------------- remove all child nodes -------------------------

  function RemoveAllChildNodes(node_name)
  {
    var node      = document.getElementById(node_name);
    var cn_count  = node.childNodes.length;
  	for (i=0;i<cn_count;i++)
    {
      node.removeChild(node.childNodes[0]);
    }
  }