
  
  function ajax_send(obsluha, method, url, content, headers) {
      var xmlhttp = (window.XMLHttpRequest ? new XMLHttpRequest : (window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : false));
      if (!xmlhttp) {
          return false;
      }
      xmlhttp.open(method, url);
      if (method=='POST') {
        xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      }
      xmlhttp.onreadystatechange = function() {
        obsluha(xmlhttp);
      };
      /*if (headers) {
          for (var key in headers) {
              xmlhttp.setRequestHeader(key, headers[key]);
          }
      }*/
      xmlhttp.send(content);
      return true;
  }
  
  function ajax_process(xmlhttp) {
    if (xmlhttp.readyState == 4) {
      if (xmlhttp.status == 200) {
        var content=xmlhttp.responseXML;
        /*var html = content.getElementsByTagName('html');*/
        if (content.getElementsByTagName('tag')[0]) { /* obsluha zmeny TAGu */
          var tags = content.getElementsByTagName('tag');
          for (var i=0; i < tags.length; i++) {
            var id=tags[i].getAttribute('id'); /* ID v HTML */
            var tagtype=tags[i].getAttribute('type'); /* o jaky typ tagu jde*/
            if (id) var tag=document.getElementById(id);
            else {
              var name=tags[i].getAttribute('name'); /* NAME v HTML */
              if (name) var tag=document.getElementsByTagName(name);
              else tag=true;
            }
            if (tag && tagtype) { /* prvek a jeho typ je znam, mohu ho tedy obslouzit */
              var actions = tags[i].getElementsByTagName('action');
              for (var j=0; j < actions.length; j++) {
                var data = actions[j];
                var type=data.getElementsByTagName('type')[0];
                if (type) { /* bez typu akce nema cenu pokracovat */
                  /* prirazeni a vytvoreni zakladnich hodnot*/
                  if (data.getElementsByTagName('value')[0]) var value = data.getElementsByTagName('value')[0].firstChild.nodeValue; else value='';
                  if (data.getElementsByTagName('type')[0]) var actiontype = data.getElementsByTagName('type')[0].firstChild.nodeValue; else actiontype='';
                  /* konec */
                  /* obsluha zakladnich spolecnych akci */
                  if (actiontype=='VISIBILITY') {
                    tag.style.visibility=value;
                  }
                  if (actiontype=='DISPLAY') {
                    tag.style.display=value;
                  }
                  if (actiontype=='DISABLED') {
                    if (value=='false'||value=='0') tag.disabled=false;
                    else if (value=='true'||value=='1') tag.disabled=true;
                  }                  
                  if (actiontype=='SETCLASS') {
                    tag.className=value;
                  }  
                  /* obsluha akci prvku TEXT */
                  if (tagtype=='TEXT') {
                    if (actiontype=='CLEARTEXT') {
                      tag.innerHTML='';
                    }
                    if (actiontype=='ADDTEXT') {
                      tag.innerHTML=tag.innerHTML+value;
                    }
                    if (actiontype=='SETTEXT') {
                      tag.innerHTML=value;
                    }
                  }
                  /* obsluha akci prvku SELECT */
                  if (tagtype=='SELECT') {
                    var text='';
                    var selected='';
                    if (data.getElementsByTagName('text')[0])
                      if (data.getElementsByTagName('text')[0].firstChild)
                        if (data.getElementsByTagName('text')[0].firstChild.nodeValue) 
                          text = data.getElementsByTagName('text')[0].firstChild.nodeValue;
                    if (data.getElementsByTagName('selected')[0])
                      if (data.getElementsByTagName('selected')[0].firstChild)
                        if (data.getElementsByTagName('selected')[0].firstChild.nodeValue)  
                          selected = data.getElementsByTagName('selected')[0].firstChild.nodeValue; else selected=false;
                    if (actiontype=='CLEARALLOPTIONS') {
                      tag.options.length=0;
                    }
                    if (actiontype=='ADDOPTION') {
                      var newkey=tag.options.length;
                      tag.options[newkey] = new Option(text,value);
                      if (selected) tag.options[newkey].selected=true;
                    }
                    if (actiontype=='SELECTOPTION') {
                      var length = tag.options.length - 1;
                      for (var k=0; k <= length; k++) {
                        if (value) {if (tag.options[k].value==value) {tag.options[k].selected=true;}}
                      }
                    }
                    if (actiontype=='REMOVEOPTION') {
                      for (var k=0; k < tag.options.length - 1; k++) {
                        if (value) {if (tag.options[k].value==value) tag.options[k]=null;}
                      }
                    }
                  }
                  /* obsluha akci prvku RADIO */
                  if (tagtype=='RADIO') {
                    if (actiontype=='CHECK') { // vyhledam a zatrhnu radio button s danym name a hodnotou
                      if (value) {
                        if (!document.getElementsByName(name)) return false;
                            var buttons = document.getElementsByName(name);
                            if (buttons) {
                              for (var j=0; j < buttons.length; j++) 
                                if (buttons[j].value==value) buttons[j].checked=true;
                            }                        
                      }
                    }                  
                  }
                  /* obsluha kodu */
                  if (tagtype=='CODE') {
                    if (actiontype=='RUN') {
                        eval(value);
                    } 
                    if (actiontype=='FUNCTION') {
                      if (window[value]!=null)
                        window[value]();
                    }
                  }                   
                }
              }
            } else {
              /*window.alert('chyba - tagtype:'+tagtype+' tag:'+tag);*/
            }
          }
        } else {
          if (content.getElementsByTagName('html')[0])  { /* obsluha zmen HTML */
            var html = content.getElementsByTagName('html')[0];
            if (html.getAttribute('type')) var type=html.getAttribute('type');
            else return false;
            if (html.getElementsByTagName('value')[0]) var value=html.getElementsByTagName('value')[0].firstChild.nodeValue;
            else return false;
            if (type=='LOCATION') {
              window.location=value;
              return true;
            }
          } else return false; 
        }
      } else {
        window.alert('ajax failed #3');
        return false;          
      }
    } else {
    }
    return true;
  }

  function AjaxSelectBox(SelectBoxHTMLID,Script,ValueName,NextValues) {
    /* pri zmene zasle informace na patricny skript, ktery vrati obsluhu */
    var SelectBox=document.getElementById(SelectBoxHTMLID);
    if (SelectBox && Script) {
      var value=SelectBox.options[SelectBox.selectedIndex].value;
      if (!ValueName) ValueName=SelectBoxHTMLID;
      var values=ValueName+'='+value;
      if (NextValues) values=values+NextValues;
      var info=ajax_send(ajax_process,'POST',Script,values);
      if (info) return true;
      else {
        window.alert('ajax failed #1');
        return false;
      }
    } else {
      window.alert('ajax failed #2 SelectBoxHTMLID:'+SelectBoxHTMLID+' Script:'+Script);
      return false;
    }
  }
  
  function AjaxAnchor(Script,Values) {
    /* na kliknuti zasle pozadovane hodnoty skriptu */
    var info=ajax_send(ajax_process,'POST',Script,Values);
    if (info) return true;
    else {
      window.alert('ajax failed #1');
      return false;
    }
  }
  
  
  function AjaxRadio(radio,RadioButtonHTMLName,Script,ValueName,NextValues) {
    /* pri zmene zasle informace na patricny skript, ktery vrati obsluhu */
    if (!document.getElementsByName(RadioButtonHTMLName)) return false;
    var buttons = document.getElementsByName(RadioButtonHTMLName);
    var value=false;
    /*if (buttons) {
      for (var j=0; j < buttons.length; j++) 
        if (buttons[j].checked) value=buttons[j].value;
    }*/
    var value=radio.value;
    if (Script && value) {
      if (!ValueName) ValueName=RadioButtonHTMLName;
      var values=ValueName+'='+value;
      if (NextValues) values=values+NextValues;
      var info=ajax_send(ajax_process,'POST',Script,values);
      if (info) return true;
      else {
        window.alert('ajax failed #1');
        return false;
      }
    } else {
      window.alert('ajax failed #2 RadioButtonHTMLName:'+RadioButtonHTMLName+' Script:'+Script);
      return false;
    }
  }
  
  
  
