function htmlchanger_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 htmlchanger_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;
}
if (actiontype=='SETBUFFER') {
var bufferText=value;
}
if (actiontype=='ADDBUFFER') {
bufferText+=value;
}
if (actiontype=='OUTPUTBUFFER') {
tag.innerHTML=bufferText;
bufferText = null;
}
}
/* 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=htmlchanger_ajax_send(htmlchanger_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=htmlchanger_ajax_send(htmlchanger_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=htmlchanger_ajax_send(htmlchanger_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;
}
}