
function createXMLHttpRequest(){if(window.ActiveXObject){try{return new ActiveXObject("Msxml2.XMLHTTP");}catch(e){}
try{return new ActiveXObject("Microsoft.XMLHTTP");}catch(e){}}
if(window.XMLHttpRequest)
return new XMLHttpRequest();return null;}
function createXMLGetRequest(url,callback){var r=createXMLHttpRequest();r.onreadystatechange=function(){if(r.readyState==4)
callback(r);};r.open("get",url,true);return r;}
function createXMLPostRequest(url,callback){var r=createXMLHttpRequest();r.onreadystatechange=function(){if(r.readyState==4)
callback(r);};r.open("post",url,true);r.setRequestHeader('Content-Type','application/x-www-form-urlencoded');return r;}
function findElement(elem,tag){while(elem.nodeName!==tag)
elem=elem.parentNode;return elem;}
function findRowIndex(tr,tbody){for(var i=0;i<tbody.rows.length;++i)
if(tbody.rows[i]===tr)
return i;return-1;}
function sortTable(table,compare){var rows=[];for(var i=0;i<table.rows.length;++i){var r=table.rows[i];for(var j=rows.length;j>0&&compare(rows[j-1],r)>0;--j)
rows[j]=rows[j-1];rows[j]=r;}
for(i=0;i<rows.length;++i)
table.tBodies[0].appendChild(rows[i]);}
function append_innerHTML(id,args){var elem=document.getElementById(id);if(elem)
elem.innerHTML+=toArray(args).join(' ');}
function set_innerHTML(id,args){var elem=document.getElementById(id);if(elem)
elem.innerHTML=toArray(args).join(' ');}
function clear_innerHTML(id){var elem=document.getElementById(id);if(elem)
elem.innerHTML='';}
function toArray(arg){if(arg instanceof Array)
return arg;if(typeof arg!=='object')
return[arg];var arr=[];for(var i=0;i<arg.length;++i)
arr[i]=arg[i];return arr;}
function debugAppend(){append_innerHTML('debug',arguments);}
function debugSet(){set_innerHTML('debug',arguments);}
function debugClear(){clear_innerHTML('debug');}
function errorsSet(){set_innerHTML('errors',arguments);}
function errorsAppend(){append_innerHTML('errors',arguments);}
function errorsClear(){clear_innerHTML('errors');}
