var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
//function to get programs from the db
function get_progs(prog, selectsize, mode)
{
xmlhttp.open("GET","get_progs.php?fProgram="+prog+"&fSelectSize="+selectsize+"&fMode="+mode,false);
xmlhttp.send();
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById('progfield').innerHTML = xmlhttp.responseText;
document.getElementById('keyfield').innerHTML = "";
if (document.getElementById('valuefield1'))
document.getElementById('valuefield1').innerHTML = "";
}
else
document.getElementById('progfield').innerHTML = "argh";
}
//function to get keys from the db
function get_keys(prog, key, selectsize, mode)
{
xmlhttp.open("GET","get_keys.php?fProgram="+prog+"&fKey="+key+"&fSelectSize="+selectsize+"&fMode="+mode,false);
xmlhttp.send();
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById('keyfield').innerHTML = xmlhttp.responseText;
if (document.getElementById('valuefield1'))
document.getElementById('valuefield1').innerHTML = "";
}
else
document.getElementById('keyfield').innerHTML = "argh";
if(document.getElementById('addrowprog'))
document.getElementById('addrowprog').style.display = "";
}
function get_statusdate(getvalcase, val)
{
if (!val)
{
radio=document.getElementsByName('dateformat'+getvalcase);
for (i=0; i< radio.length; i++)
if (radio[i].checked)
val=radio[i].value;
}
if (val=="pulldown")
{
year=document.getElementById('year'+getvalcase).value;
month=document.getElementById('month'+getvalcase).value;
day=document.getElementById('day'+getvalcase).value;
hour=document.getElementById('hour'+getvalcase).value;
min=document.getElementById('min'+getvalcase).value;
sec=document.getElementById('sec'+getvalcase).value;
statusdate=(year =='empty'? '':year);
statusdate=statusdate+(month=='empty'? '':'-'+month);
statusdate=statusdate+(day =='empty'? '':'-'+day);
statusdate=statusdate+(hour =='empty'? '':' '+hour);
statusdate=statusdate+(min =='empty'? '':':'+min);
statusdate=statusdate+(sec =='empty'? '':':'+sec);
}
if (val=="textinput")
statusdate=document.getElementById('statusdate'+getvalcase).value;
return statusdate;
}
//function to get values from the db
function get_values(getvalcase, prog, key, mode)
{
//in this case the given 'prog' and 'key' are ignored
if (parseInt(getvalcase)>1)
{
//get prog and key
progselect=document.getElementById("prog");
if (!progselect)
prog="all";
else
if (progselect.selectedIndex>=0)
prog=progselect.options[progselect.selectedIndex].value;
else
prog="all";
keyselect=document.getElementById("key");
if (!keyselect)
key="all";
else
if (keyselect.selectedIndex>=0)
key=keyselect.options[keyselect.selectedIndex].value;
else
key="all";
}
//if (mode=="view" && getvalcase==1)
// return;
if ((getvalcase==2 || getvalcase==3) && document.getElementById('statusdate'+getvalcase))
{
statusdate=get_statusdate(getvalcase);
phpcall="get_values.php?fStatusDate="+statusdate+"&fGetValCase="+getvalcase+"&fKey="+key+"&fProgram="+prog;
}
else
phpcall="get_values.php?fGetValCase="+getvalcase+"&fKey="+key+"&fProgram="+prog;
xmlhttp.open("GET",phpcall,false);
xmlhttp.send();
if (xmlhttp.readyState==4 && xmlhttp.status==200)
document.getElementById('valuefield'+getvalcase).innerHTML = xmlhttp.responseText;
else
document.getElementById('valuefield'+getvalcase).innerHTML = "argh";
if(document.getElementById('addrowkey'))
document.getElementById('addrowkey').style.display = "";
}
function addRow(addcase, prog, key, key1, key2, type, min, max, descr)
{
if (!prog)
{
progselect=document.getElementById("prog");
if (progselect.selectedIndex>=0)
prog=progselect.options[progselect.selectedIndex].value;
else
prog='all';
}
if (!key)
{
keyselect=document.getElementById("key");
if (!keyselect)
key='all';
else
if (keyselect.selectedIndex>=0)
key=keyselect.options[keyselect.selectedIndex].value;
else
key='all';
}
switch(addcase)
{
case 1:
get_keys(prog, key, "10", "edit");
case 2:
get_values(1, prog, key, "edit");
}
if (prog=='all' && (addcase==3 || addcase==2))
addcase=1;
if (key=='all' && addcase==3)
addcase=2;
for (var i = 1 ; i <= document.getElementById('maxindex').innerHTML ; i++)
if(document.getElementById('action'+i))
document.getElementById('action'+i).innerHTML = "";
//document.getElementById('action'+i).style.display = "none";
tabBody=document.getElementById("valtable1");
row=document.createElement("TR");
row.id='val0';
row.bgColor='#C8C8C8';
cell0 = document.createElement("TD");
cell1 = document.createElement("TD");
cell2 = document.createElement("TD");
cell3 = document.createElement("TD");
cell4 = document.createElement("TD");
cell5 = document.createElement("TD");
cell6 = document.createElement("TD");
cell7 = document.createElement("TD");
cell8 = document.createElement("TD");
cell9 = document.createElement("TD");
cell10 = document.createElement("TD");
cell11 = document.createElement("TD");
cell0.className="indices1";
cell6.className="validsince1";
cell11.className="user1";
var updcase;
// addcase: three cases
// 1: add new prog+key, val=NULL
// 2: add new key, val=NULL, prog=selected
// 3: add new val, prog=selected, key=selected, type/min/max fixed
//field descr
input4 = document.createElement("INPUT");
input4.style.width = 300;
input4.id = 'newdescr0';
switch(addcase)
{
case 1:
updcase=5;
//field for prog
input1 = document.createElement("INPUT");
input1.style.width = 80;
input1.id = 'prog0';
cell1.appendChild(input1);
//fields for keys
input2 = document.createElement("INPUT");
input2.style.width = 200;
input2.id = '1key0';
cell2.appendChild(input2);
input10 = document.createElement("INPUT");
input10.id = '2key0';
input10.style.width = 100;
cell10.appendChild(input10);
//field for val
cell3.id = 'newval0';
textnode3=document.createTextNode("NULL");
cell3.appendChild(textnode3);
//field type
select7 = document.createElement("select");
select7.id = 'newtype0';
select7.option = 'string';
option7a = document.createElement("option");
option7a.text = '-';
option7a.value = '';
select7.appendChild(option7a);
option7b = document.createElement("option");
option7b.id = 'int';
option7b.text = 'int';
option7b.value = 'int';
select7.appendChild(option7b);
option7c = document.createElement("option");
option7c.id = 'float';
option7c.text = 'float';
option7c.value = 'float';
select7.appendChild(option7c);
option7d = document.createElement("option");
option7d.id = 'string';
option7d.text = 'string';
option7d.value = 'string';
select7.appendChild(option7d);
option7e = document.createElement("option");
option7e.id = 'bool';
option7e.text = 'bool';
option7e.value = 'bool';
select7.appendChild(option7e);
cell7.appendChild(select7);
//field for min
input8 = document.createElement("INPUT");
input8.id = 'newmin0';
input8.style.width = 50;
cell8.appendChild(input8);
//field for max
input9 = document.createElement("INPUT");
input9.id = 'newmax0';
input9.style.width = 50;
cell9.appendChild(input9);
break;
case 2:
updcase=1;
//field for prog
cell1.id = 'prog0';
textnode1=document.createTextNode(prog);
cell1.appendChild(textnode1);
//field for key
input2 = document.createElement("INPUT");
input2.id = '1key0';
input2.style.width = 200;
if (key1)
input2.value = key1;
cell2.appendChild(input2);
input10 = document.createElement("INPUT");
input10.id = '2key0';
input10.style.width = 100;
if (key2)
input10.value = key2;
cell10.appendChild(input10);
//field for val
cell3.id = 'newval0';
textnode3=document.createTextNode("NULL");
cell3.appendChild(textnode3);
//field type
select7 = document.createElement("select");
select7.id = 'newtype0';
select7.option = 'string';
option7a = document.createElement("option");
option7a.text = '-';
option7a.value = '';
select7.appendChild(option7a);
option7b = document.createElement("option");
option7b.id = 'int';
option7b.text = 'int';
option7b.value = 'int';
select7.appendChild(option7b);
option7c = document.createElement("option");
option7c.id = 'float';
option7c.text = 'float';
option7c.value = 'float';
select7.appendChild(option7c);
option7d = document.createElement("option");
option7d.id = 'string';
option7d.text = 'string';
option7d.value = 'string';
select7.appendChild(option7d);
option7e = document.createElement("option");
option7e.id = 'bool';
option7e.text = 'bool';
option7e.value = 'bool';
select7.appendChild(option7e);
cell7.appendChild(select7);
//field for min
input8 = document.createElement("INPUT");
input8.id = 'newmin0';
input8.style.width = 50;
if (min)
input8.value = min;
cell8.appendChild(input8);
//field for max
input9 = document.createElement("INPUT");
input9.id = 'newmax0';
input9.style.width = 50;
if (max)
input9.value = max;
cell9.appendChild(input9);
//field for descr
if (descr)
input4.value = descr;
break;
case 3:
updcase=2;
//field for prog
cell1.id = 'prog0';
textnode1=document.createTextNode(prog);
cell1.appendChild(textnode1);
//field for key
cell2.id = '1key0';
textnode2=document.createTextNode(key1);
cell2.appendChild(textnode2);
cell10.id = '2key0';
textnode10=document.createTextNode(key2);
cell10.appendChild(textnode10);
//field for val
input3 = document.createElement("INPUT");
input3.style.width = 200;
input3.id = 'newval0';
cell3.appendChild(input3);
//field type
cell7.id = 'type0';
textnode7 = document.createTextNode(type);
cell7.appendChild(textnode7);
//field min
cell8.id = 'min0';
textnode8 = document.createTextNode(min);
cell8.appendChild(textnode8);
//field max
cell9.id = 'max0';
textnode9 = document.createTextNode(max);
cell9.appendChild(textnode9);
break;
default:
break;
}
//rest of field descr
cell4.appendChild(input4);
//field action
input5a = document.createElement("input");
input5a.value = 'Add';
input5a.type = "button";
input5a.onclick = function () { UpdateRow(updcase, 0); onclick() }
cell5.appendChild(input5a);
input5b = document.createElement("input");
input5b.value = 'Cancel';
input5b.type = "button";
input5b.onclick = function () { CancelAddRow(prog, key); onclick() }
cell5.appendChild(input5b);
row.appendChild(cell0);//index, counter
row.appendChild(cell6);//valid from
row.appendChild(cell1);//prog
row.appendChild(cell2);//key1
row.appendChild(cell10);//key2
row.appendChild(cell3);//value
row.appendChild(cell7);//type
row.appendChild(cell8);//min
row.appendChild(cell9);//max
row.appendChild(cell4);//descr
row.appendChild(cell5);//action
row.appendChild(cell11);//user
tabBody.appendChild(row);
ShowHide('indices', 'sh_indices', 1)
ShowHide('validsince', 'sh_validsince', 1)
ShowHide('user', 'sh_user', 1)
//disabeling all other edit/add buttons
// (to be removed later when solution for adding multiple new rows is found)
document.getElementById('addrowvals').style.display = "none";
document.getElementById('addrowvals2').style.display = "none";
document.getElementById('addrowkey').style.display = "none";
document.getElementById('addrowprog').style.display = "none";
}
function CancelAddRow(prog, key)
{
//get select program and key
if (!prog)
{
progselect=document.getElementById("prog");
prog=progselect.options[progselect.selectedIndex].value;
}
if (!key)
{
keyselect=document.getElementById("key");
key=keyselect.options[keyselect.selectedIndex].value;
}
//reload the original content in case of cancel
get_values(1, prog, key, "edit");
//disabeling all other edit/add buttons
// (to be removed later when solution for adding multiple new rows is found)
document.getElementById('addrowvals').style.display = "";
document.getElementById('addrowvals2').style.display = "";
document.getElementById('addrowkey').style.display = "";
document.getElementById('addrowprog').style.display = "";
}
function CancelUpdate()
{
//get select program and key
document.getElementById('addrowprog').style.display = "";
progselect=document.getElementById("prog");
prog=progselect.options[progselect.selectedIndex].value;
keyselect=document.getElementById("key");
key=keyselect.options[keyselect.selectedIndex].value;
//reload the original table in case of cancel
get_values(1, prog, key, "edit");
}
function EditRow(index)
{
//disabeling all other edit/add buttons
// (to be removed later when solution for adding multiple new rows is found)
for (var i = 1 ; i <= document.getElementById('maxindex').innerHTML ; i++)
if(document.getElementById('action'+i) && i!=index)
//document.getElementById('action'+i).style.display = "none";
document.getElementById('action'+i).innerHTML = "";
document.getElementById('addrowvals').style.display = "none";
document.getElementById('addrowvals2').style.display = "none";
document.getElementById('addrowkey').style.display = "none";
document.getElementById('addrowprog').style.display = "none";
//get current values
oldval=document.getElementById('val'+index).innerHTML;
olddescr=document.getElementById('descr'+index).innerHTML;
oldtype=document.getElementById('type'+index).innerHTML;
// added to make min/max editable
oldmin=document.getElementById('min'+index).innerHTML;
oldmax=document.getElementById('max'+index).innerHTML;
if (!oldval)
delcase=6;
else
delcase=4;
//set field for value
if (oldtype=='bool')
{
if (oldval=='yes')
textval=" yes";
else
textval=" yes";
if (oldval=='no')
textval=textval+" no"
else
textval=textval+" no"
}
else
textval="";
document.getElementById('val'+index).innerHTML = textval;
//set field for description
document.getElementById('descr'+index).innerHTML = "";
if (oldtype=='int' || oldtype=='float')
{
document.getElementById('min'+index).innerHTML = "";
document.getElementById('max'+index).innerHTML = "";
}
/*
//set field for type
typeselecttext="";
document.getElementById('type'+index).innerHTML = typeselecttext;
*/
//set field for action
actiontext="";
notyetvalid=document.getElementById('notyetvalid'+index)
if (delcase!=6 || notyetvalid)
actiontext=actiontext+"";
actiontext=actiontext+"";
document.getElementById('action'+index).innerHTML =actiontext;
}
function UpdateRow(updcase,index)
{
// five cases of update corresponds to
// 5: add new prog + key addcase 1
// 1: add new key addcase 2
// 2: add new val (for same key) addcase 3 -> same type,min,max
// 3: edit val -> same type,min,max
// 4: delete val (ie set to NULL) -> same type,min,max
// 6: delete new key (ie val still NULL) -> real delete
descr=document.getElementById('newdescr'+index).value;
origindex=0;
switch(updcase)
{
case 5:
prog=document.getElementById('prog'+index).value;
key1=document.getElementById('1key'+index).value;
key2=document.getElementById('2key'+index).value;
val=document.getElementById('newval'+index).innerHTML;
type=document.getElementById('newtype'+index).value;
min=document.getElementById('newmin'+index).value;
max=document.getElementById('newmax'+index).value;
break;
case 1:
//prog=document.getElementById('prog'+index).value;
prog=document.getElementById('prog'+index).innerHTML;
key1=document.getElementById('1key'+index).value;
key2=document.getElementById('2key'+index).value;
val=document.getElementById('newval'+index).innerHTML;
type=document.getElementById('newtype'+index).value;
min=document.getElementById('newmin'+index).value;
max=document.getElementById('newmax'+index).value;
break;
case 2:
//prog=document.getElementById('prog'+index).value;
prog=document.getElementById('prog'+index).innerHTML;
key1=document.getElementById('1key'+index).innerHTML;
key2=document.getElementById('2key'+index).innerHTML;
val=document.getElementById('newval'+index).value;
type=document.getElementById('type'+index).innerHTML;
min=document.getElementById('min'+index).innerHTML;
max=document.getElementById('max'+index).innerHTML;
break;
case 3:
prog=document.getElementById('prog'+index).innerHTML;
key1=document.getElementById('1key'+index).innerHTML;
key2=document.getElementById('2key'+index).innerHTML;
type=document.getElementById('type'+index).innerHTML;
// changed to make min/max editable
if (type=='int' || type=='float')
{
min=document.getElementById('newmin'+index).value;
max=document.getElementById('newmax'+index).value;
}
else
{
min=document.getElementById('min'+index).innerHTML;
max=document.getElementById('max'+index).innerHTML;
}
val="hallo";
if (type=="bool")
{
radio=document.getElementsByName('boolbox');
for (i=0; i< radio.length; i++)
if (radio[i].checked)
val=radio[i].value;
}
else
val=document.getElementById('newval'+index).value;
origindex=document.getElementById('1origindex'+index).innerHTML;
break;
case 4:
case 6:
answer = confirm("Do you really want to delete the value?");
if (!answer)
return;
prog=document.getElementById('prog'+index).innerHTML;
key1=document.getElementById('1key'+index).innerHTML;
key2=document.getElementById('2key'+index).innerHTML;
val=document.getElementById('newval'+index).value;
if (!val)
val="NULL";
type=document.getElementById('type'+index).innerHTML;
min=document.getElementById('min'+index).innerHTML;
max=document.getElementById('max'+index).innerHTML;
origindex=document.getElementById('1origindex'+index).innerHTML;
break;
}
if (!descr)
alert("Please insert description!");
if (!key1)
alert("Please insert key1!");
if (!val)
alert("Please insert value!");
if (!val || !descr || !key1)
return;
if (index==0)
index=-1;
if (!type && (updcase==2 || updcase==3 || updcase==4))
{
alert("Please select type!");
return;
}
//check if value has correct type and is within ranges
// for string no check needed
if (updcase==3)
{
if (type=='int' && parseInt(val)!=val)
{
alert("Value is not a int.");
return;
}
if (type=='float' && parseFloat(val)!=val)
{
alert("Value is not a float.");
return;
}
if (type=='bool' && val!='yes' && val!='no')
{
alert("Value is neither 'yes' not 'no'.");
return;
}
// check ranges for int
if (max && type=='int' && parseInt(val)>parseInt(max))
{
alert("You cannot enter a value larger than "+max+".");
return;
}
if (min && type=='int' && parseInt(val)parseFloat(max))
{
alert("You cannot enter a value larger than "+max+".");
return;
}
if (min && type=='float' && parseFloat(val)=0)
oldprog=progselect.options[progselect.selectedIndex].value;
else
oldprog=prog;
keyselect=document.getElementById("key");
if (!keyselect)
oldkey=key1+"."+key2;
else
if (keyselect.selectedIndex>=0)
oldkey=keyselect.options[keyselect.selectedIndex].value;
else
oldkey=key1+"."+key2;
*/
//reload content of page for the values of prog and key1.key2
// which were just edited/added
oldprog=prog;
if (key2)
oldkey=key1+"."+key2;
else
oldkey=key1;
//reload progs and keys
get_progs(oldprog, "10", "edit");
get_keys(oldprog, oldkey, "10", "edit");
//reload values
xmlhttp.open("GET","get_values.php?fGetValCase=1&fKey="+oldkey+"&fProgram="+oldprog,false);
xmlhttp.send();
if (xmlhttp.readyState==4 && xmlhttp.status==200)
document.getElementById('valuefield1').innerHTML = xmlhttp.responseText;
else
document.getElementById('valuefield1').innerHTML = "argh";
}
function ShowCurrent()
{
for (var i = 1 ; i <= document.getElementById('maxindex').innerHTML ; i++)
if(document.getElementById('old'+i))
document.getElementById('old'+i).style.display = "none";
document.getElementById('showcurrent').style.display = "none";
document.getElementById('showcurrent2').style.display = "none";
document.getElementById('showall').style.display = "";
document.getElementById('showall2').style.display = "";
}
function ShowAll()
{
for (var i = 1 ; i <= document.getElementById('maxindex').innerHTML ; i++)
if(document.getElementById('old'+i))
{
document.getElementById('old'+i).style.display = "";
document.getElementById('old'+i).style.color = "grey";
}
document.getElementById('showcurrent').style.display = "";
document.getElementById('showcurrent2').style.display = "";
document.getElementById('showall').style.display = "none";
document.getElementById('showall2').style.display = "none";
}
function InsertRow(table, row)
{
var x=document.getElementById('valtable'+table).insertRow(row);
y=x.insertCell(0);
y.colSpan='5';
y.innerHTML=" ";
}
function CompareValues()
{
counter=0;
maxindex2=document.getElementById('maxindex').innerHTML;
maxindex3=document.getElementById('maxindex3').innerHTML;
if (parseInt(maxindex2)>parseInt(maxindex3))
maxindex=maxindex2;
else
maxindex=maxindex3;
for (var i = 1 ; i <= maxindex ; i++)
{
if (document.getElementById('2compare'+i))
{
counter++;
if (!document.getElementById('3compare'+i))
{
InsertRow(3,counter);
document.getElementById('2compare'+i).style.color='red';
}
else
{
val2=document.getElementById('2compare'+i).cells[5].innerHTML;
val3=document.getElementById('3compare'+i).cells[5].innerHTML;
if (val2!=val3)
{
document.getElementById('2compare'+i).style.color='blue';
document.getElementById('3compare'+i).style.color='blue';
}
}
}
else
if (document.getElementById('3compare'+i))
{
counter++;
InsertRow(2,counter);
document.getElementById('3compare'+i).style.color='green';
}
}
//document.getElementById('comparevals').style.display = "none";
//reload all setting for show-menu
ShowHide('indices', 'sh_indices', 2)
ShowHide('indices', 'sh_indices', 3)
ShowHide('description', 'sh_descr', 2)
ShowHide('description', 'sh_descr', 3)
ShowHide('validsince', 'sh_validsince', 2)
ShowHide('validsince', 'sh_validsince', 3)
ShowHide('minimum', 'sh_min', 2)
ShowHide('minimum', 'sh_min', 3)
ShowHide('maximum', 'sh_max', 2)
ShowHide('maximum', 'sh_max', 3)
ShowHide('user', 'sh_user', 2)
ShowHide('user', 'sh_user', 3)
}
function ShowHide(column, idname, getvalcase)
{
box=document.getElementById(idname+getvalcase);
text=box.checked? '':'none';
for(var i=0;i