﻿/*---------- uno.xml.js v 0.8.0.0 (Part of [uno-api-project].) - Released by Hideki Yamamoto - GPL equiv. ----------*/
Namespace.register("uno.xml");
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//------------------------   PP  UU  BB  LL  II  CC     II  NN  TT  EE  RR  FF  AA  CC  EE   ----------------------//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//READER COMPONENT
uno.xml.nodeattribute=function(node,attributename){if(node){for(var ai = 0 ; ai < node.attributes.length ; ai++){if(node.attributes[ai].name==attributename){return uno.xml._attributevalue(node.attributes[ai]);}}return false;return false;}};
uno.xml.nodetext=function(node){if(node.text){return node.text;}if(node.textContent){return node.textContent;}};
uno.xml.nodexml=function(node,removecdata){if(removecdata){return uno.xml.tostringformat(node,'','<','>','','',true,false);}if(node.xml){return node.xml;}try{if(XMLSerializer){var test=(new XMLSerializer()).serializeToString(node);return test;}}catch(ex){i=0;}return uno.xml.tostringformat(node,'','<','>','','',removecdata,false);};
uno.xml.nodeinnerxml=function(node,removecdata){if(!node){return null;}var test='';for(var i=0;i<node.childNodes.length;i++){test+=uno.xml.nodexml(node.childNodes[i],removecdata);}return test;};
uno.xml.childinnerxml=function(node,tag,removecdata){return uno.xml.nodeinnerxml(node.getElementsByTagName(tag)[0], removecdata);};
uno.xml.childattribute=function(node,tag,attributename){if(node){return uno.xml.nodeattribute(node.getElementsByTagName(tag)[0], attributename);}else{return false;}};
uno.xml.nodexmltohtml=function(node){var test='';test=uno.xml.tostringformat(node,'','&lt;','&gt;','<br />','&nbsp;&nbsp;',true,true);return test;};
uno.xml.nodeinnerxmltohtml=function(node){var test='';for(var i=0;i<node.childNodes.length;i++){test+=uno.xml.tostringformat(node.childNodes[i],'','&lt;','&gt;','<br />','&nbsp;&nbsp;',true,true);}return test;};
//LOADER COMPONENT
uno.xml.parse=function(xmlstring){return uno.xml._parse(xmlstring);};
uno.xml.syncload=function(url){return uno.xml._syncload(url);};
uno.xml.asyncload=function(url,onstep,onfinish,onerrorfinish,_elm){uno.xml._asyncload(url,onstep,onfinish,onerrorfinish,_elm);};
uno.xml.rendertimestep=100;uno.xml.pagetarget='supercontainer';
//RENDER COMPONENT
uno.xml.updatinghtml='loading...';
uno.xml.renderpage=function(dataurl,_form){uno.xml.asyncload(dataurl,false,uno.xml._renderpage,false,_form);};
uno.xml.rendercontent = function (target, dataurl, _form) { var pidx = uno.xml._fastinstance(); uno.xml.processes[pidx] = new uno.xml.process('content', target, false, dataurl, _form); uno.xml.startprocess(pidx); };
uno.xml.renderactb = function (target, dataurl, _form) { var pidx = uno.xml._fastinstance(); uno.xml.processes[pidx] = new uno.xml.process('actb', target, false, dataurl, _form); uno.xml.startprocess(pidx); };
uno.xml.renderselect = function (target, dataurl, _form) { var pidx = uno.xml._fastinstance(); uno.xml.processes[pidx] = new uno.xml.process('select', target, false, dataurl, _form); uno.xml.startprocess(pidx); };
uno.xml.rendercontrol=function(target,configurl,dataurl,_form){var pidx=uno.xml._fastinstance();uno.xml.processes[pidx]=new uno.xml.process('control',target,configurl,dataurl,_form);uno.xml.startprocess(pidx);};
uno.xml.preload=function(name,url){var pidx=uno.xml._fastinstance(); uno.xml.processes[pidx]=new uno.xml.process('preload',false,false,url,name); uno.xml.startprocess(pidx);};
uno.xml.preloaded=function(name){for(var i=0;i<uno.xml._preloadedn.length;i++){if(uno.xml._preloadedn[i]==name){return uno.xml._preloaded[i];}}return false;};
////////////////////////////////////////////////////OBSOLETE/////////////////////////////////////////////////////////
uno.xml.asyncloadpost=function(url,onstep,onfinish,onerrorfinish,_elm){uno.obsolete('uno.xml.asyncloadpost','uno.xml.asyncload');uno.xml.asyncload(url,onstep,onfinish,onerrorfinish,_elm);};
uno.xml.asyncloadframe=function(url,onstep,onfinish,onerrorfinish,_elm){uno.obsolete('uno.xml.asyncloadframe','uno.xml.asyncload');uno.xml.asyncload(url,onstep,onfinish,onerrorfinish,_elm);};
uno.xml.renderpagepost=function(dataurl,_form){uno.obsolete('uno.xml.renderpagepost','uno.xml.renderpage');uno.xml.renderpage(dataurl,_form);};
uno.xml.rendercontentpost=function(target,dataurl,_form){uno.obsolete('uno.xml.rendercontentpost','uno.xml.rendercontent');uno.xml.rendercontent(target,dataurl,_form);};
uno.xml.rendercontrolpost=function(target,configurl,dataurl,_form){uno.obsolete('uno.xml.rendercontrolpost','uno.xml.rendercontrol');uno.xml.rendercontrol(target,configurl,dataurl,_form);};
uno.xml.renderpageframe=function(dataurl,_form){uno.obsolete('uno.xml.renderpageframe','uno.xml.renderpage');uno.xml.renderpage(dataurl,_form);};
uno.xml.rendercontentframe=function(target,dataurl,_form){uno.obsolete('uno.xml.rendercontentframe','uno.xml.rendercontent');uno.xml.rendercontent(target,dataurl,_form);};
uno.xml.rendercontrolframe=function(target,configurl,dataurl,_form){uno.obsolete('uno.xml.rendercontrolframe','uno.xml.rendercontrol');uno.xml.rendercontrol(target,configurl,dataurl,_form);};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------   XX MM LL - LL OO AA DD EE RR   ---------------------------------------//
/////////////////////////////////////////////////////////////////////////////////////////////private implementation//
//-------------------------------------------- CROSSWBROWSER XML PARSE --------------------------------------------//
uno.xml._parse=function(xmlstring){var xmlDoc=false;try{var xmlParser=new DOMParser();xmlDoc=xmlParser.parseFromString(xmlstring,"text/xml");}catch(errr){try{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async=false;xmlDoc.loadXML(xmlstring);}catch(err){uno.throwerror('There was an error parsing the xml string or the browser do not support xml parsing.\n'+errr.message);}}return xmlDoc;};
//---------------------------------------------- SYNCRONOUS XML LOAD ----------------------------------------------//
uno.xml._syncload=function(url){
 var xmlDoc=false;
 //Chrome, Safari
 if(is_chrome||is_safari){var page_request=new XMLHttpRequest();page_request.open('GET',url,false);page_request.send(null);return page_request.responseXML;}
 else{//Internet Explorer
 try{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");}catch(exxx){
 //Firefox, Mozilla, Opera, etc.
 try{xmlDoc=document.implementation.createDocument("","",null);}
 catch(exx){uno.throwerror('This browser have a problem creating a new xml document using the w3c way[document.implementation.createDocument("", "", null)]\n'+exx.message);}}
 try{xmlDoc.async=false;xmlDoc.load(url);}catch(ex){uno.throwerror('There was an error invoking a [xmlDoc.async = false;xmlDoc.load(url)] : \n'+ex.message);}
return xmlDoc;}};
//---------------------------------------------- ASYNCRONOUS XML LOAD ---------------------------------------------//
uno.xml._asyncload=function(url,onstep,onfinish,onerrorfinish,_elm){_elm=$(_elm);
 var idx=uno.xml._asyncjobs.length;uno.xml._asyncjobs[idx]=new uno.xml._asyncjob(url,onstep,onfinish,onerrorfinish);
 var isjson=false;var hasfile=false;
 if(!_elm){
  if(isjson){//JSON GET
   uno.importscript(uno.xml._asyncjobs[idx].url+'&callback='+encodeURIComponent('uno.xml._ppjson('+idx+',data);'));
  }else{//XMLHTTP GET
   uno.xml._asyncjobs[idx].req=uno.xml._createxmlreq();uno.xml._asyncjobs[idx].req.onreadystatechange=function(){eval('uno.xml._ppasync('+idx+')');};uno.xml._asyncjobs[idx].req.open("GET",uno.xml._asyncjobs[idx].url,true);uno.xml._asyncjobs[idx].req.send('');}        
 }else{var i;var v;var ii=_elm.getElementsByTagName('input');for(i=0;i<ii.length;i++){if(ii[i].type=='file'){if(!uno.isnullorempty(ii[i].value)){hasfile=true;i=10000;}}}
  if(!hasfile){var iit=_elm.getElementsByTagName('textarea');for(var xxxx=0;xxxx<iit.length;xxxx++){if(!uno.isnullorempty(uno.cutrim(uno.getvalue(iit[xxxx])),' ')){hasfile=true;}}}
  if(!hasfile){
   if(isjson){//JSON POST (simulation)
    if(url.indexOf('=')){uno.xml._asyncjobs[idx].url+='&';}else if(!uno.endswith('?')){uno.xml._asyncjobs[idx].url+='?';}
    var s=uno.xml._asyncjobs[idx].url+'callback='+encodeURIComponent('uno.xml._ppjson('+idx+',data);');
    s=s+'&'+uno.xml._serialize(_elm,true);
    if(s.length>2048){throw new Error('Data is too long for a json request');}
    else{uno.importscript(s);}
   }else{//XMLHTTP POST
    //if(isIE){var frameid=uno.upload.form(url,_elm,false,uno.xml._ppasyncframe);var idxx=uno.xml._framefinishes.length;uno.xml._framefinishes[idxx]=new uno.xml._framefinish(frameid,onfinish);};
    uno.xml._asyncjobs[idx].req=uno.xml._createxmlreq();
    uno.xml._asyncjobs[idx].req.onreadystatechange=function(){eval('uno.xml._ppasync('+idx+')');};
    uno.xml._asyncjobs[idx].req.open("POST",uno.xml._asyncjobs[idx].url,true);
    uno.xml._asyncjobs[idx].req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    uno.xml._asyncjobs[idx].req.send(uno.xml._serialize(_elm));
  }}else{
   if(isjson){throw new Error('Cannot send json requests including files.');}
   else{//FRAME TECHNIQUE
    if(!uno.upload){alert('Frame technique requires uno.upload.js');}
    else{var frameid=uno.upload.form(url,_elm,false,uno.xml._ppasyncframe);var idxx=uno.xml._framefinishes.length;uno.xml._framefinishes[idxx]=new uno.xml._framefinish(frameid,onfinish);}
}}}};
uno.xml._createxmlreq=function(){var newreq=false;
    if(window.XMLHttpRequest&&!(window.ActiveXObject)){try {newreq=new XMLHttpRequest();}catch(ex){newreq=false;}}
    else if(window.ActiveXObject){try{newreq=new ActiveXObject("Msxml2.XMLHTTP");}catch(ex){try{newreq=new ActiveXObject("Microsoft.XMLHTTP");}catch(ex){newreq=false;}}}
    if(!newreq){uno.throwerror('This browser is neither w3c or mozilla compatible*[2008], uno.xml javascript framework will not work.');}
    return newreq;};
uno.xml._collect=function(a,f){var n=[];for(var i=0;i<a.length;i++){var v=f(a[i]);if(v!=null){n.push(v);}}return n;};
uno.xml._serialize=function(f){var g=function(n){return f.getElementsByTagName(n)};
    var nv=function(e){if(e.name)return encodeURIComponent(e.name)+'='+encodeURIComponent(e.value);else return ''};
    var c1=function(i){if((i.type!='radio'&&i.type!='checkbox')||i.checked)return nv(i)};
    var i=uno.xml._collect(g('input'),c1);var s=uno.xml._collect(g('select'),nv);var t=uno.xml._collect(g('textarea'),nv);
    return i.concat(s).concat(t).join('&');};
//------------------------------------------ MEMORY STRUCTURE FOR ASYC JOBS ---------------------------------------//
uno.xml._asyncjobs=new Array();
uno.xml._asyncjob=function(_url,_onstep,_onfinish,_onerrorfinish){this.processed=false;this.req=false;this.url=_url;this.onstep=_onstep;this.onfinish=_onfinish;this.onerrorfinish=_onerrorfinish;};
//---------------------------------------- MORE MEMORY STRUCTURE FOR ASYC JOBS ------------------------------------//
uno.xml._framefinishes=new Array();
uno.xml._framefinish=function(_frameid,_onfinish){this.frameid=_frameid;this.onfinish=_onfinish;};
uno.xml._getframefinish=function(frameid){for(var i=0;i<uno.xml._framefinishes.length;i++){if(uno.xml._framefinishes[i].frameid==frameid){return uno.xml._framefinishes[i].onfinish;}}return false;};
//----------------------------- FAKE CLASS FOR MISSING HEADER AND FRAME OR JSON PARSING ---------------------------//
uno.xml._fakerq=function(xmlstring){this.readyState=4;this.status=200;this.statusText='OK';this.responseText=xmlstring;try{this.responseXML=uno.xml.parse(xmlstring);}catch(ez){this.responseXML=false;}};
//------------------------------------------ ASYNCRONOUS XML POSTPROCESSING ---------------------------------------//
uno.xml._ppasync=function(idx){
 if(uno.xml._asyncjobs[idx].req.readyState==4){
  if(uno.xml._asyncjobs[idx].req.status==200){//If "OK"
   if(uno.xml._asyncjobs[idx].processed==false){uno.xml._asyncjobs[idx].processed=true;
    //Workaround:[manual parsing, encapsulating a fake request class for readonly javascript properties]
   try{var text=uno.xml._asyncjobs[idx].req.responseText;delete uno.xml._asyncjobs[idx].req;uno.xml._asyncjobs[idx].req=new uno.xml._fakerq(text);}
   catch(ex){uno.throwerror('Error executing a workaround(No text/xml Content-Type header in loaded xml response.)'+'\n'+ex.message);}
    //}//end of workaround
   try{uno.xml._asyncjobs[idx].onfinish(uno.xml._asyncjobs[idx].req);}
   catch(exx){var msg='Terminating the XMLHttpRequest Async Job for the url '+uno.xml._asyncjobs[idx].url+' correctly, invoking the onfinish handler : \n';msg+=exx.message;msg+='\n*onfinish handlers must ALWAYS be in the form of onfinish(req), where req is an objet of type XMLHttpRequest.\nthe uno system will make it look like a regular xmlhttprequest with responseText and responseXML properties looking normal also for json and frames.';}
  }else{//If NOT "OK"
    if(uno.xml._asyncjobs[idx].onfinish){uno.xml._invoker(uno.xml._asyncjobs[idx].onfinish,uno.xml._asyncjobs[idx].req,'onfinish','Terminating the XMLHttpRequest Async Job with errors, invoking the onfinish handler anyway.',uno.xml._asyncjobs[idx].url);}
    else{uno.throwerror('Terminating the XMLHttpRequest Async Job for the url '+uno.xml._asyncjobs[idx].url+' with an error, status value : '+uno.xml._asyncjobs[idx].req.status);}
}}}else{//If req do not show "loaded"
 try{uno.xml._asyncjobs[idx].onstep(uno.xml._asyncjobs[idx].req);}
 catch(exx){var msgg='Stepping the XMLHttpRequest Async Job for the url '+uno.xml._asyncjobs[idx].url+' correctly, invoking the onstep handler : \n';msgg+=exx.message;msg+='\n*onstep handlers must ALWAYS be in the form of onfinish(req), where req is an objet of type XMLHttpRequest.\nthe uno system will make it look like a regular xmlhttprequest with responseText and responseXML properties looking normal also for json and frames.';
}}};
uno.xml._ppasyncframe=function(frameid,doc){
    var idx = uno.xml._asyncjobs.length;
    uno.xml._asyncjobs[idx]=new uno.xml._asyncjob('',false,uno.xml._getframefinish(frameid),false);
    var xmlstring=uno.xml.nodexml(doc.childNodes[0],false);
    if(isIE){if(uno.startswith(xmlstring,'<HTML>')){
            xmlstring=doc.childNodes[0].innerText;
            xmlstring=uno.replaceall(xmlstring,'<?xml version="1.0" encoding="utf-8" ?>','');
            var i=0;for(i=0;i<1000;i++){if(uno.startswith(xmlstring,'<')){i=1001;}else{xmlstring=xmlstring.slice(1);}}
            xmlstring=uno.replaceall(xmlstring,'- <','<');}}
    uno.xml._asyncjobs[idx].req=new uno.xml._fakerq(xmlstring);
    uno.xml._ppasync(idx);};
uno.xml._ppjson=function(idx,data){data=uno.replaceall(data,'<?xml version="1.0" encoding="utf-8" ?>','');uno.xml._asyncjobs[idx].req=new uno.xml._fakerq(data);uno.xml._postprocessasync(idx);};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------   XX MM LL - RR EE AA DD EE RR   ---------------------------------------//
/////////////////////////////////////////////////////////////////////////////////////////////private implementation//
uno.xml._attributevalue=function(attribute){if(attribute){if(attribute.value){return attribute.value;}if(attribute.nodeValue){return attribute.nodeValue;}}return false};
uno.xml.tostringformat=function(node,tabulation,opentag,closetag,newline,tabincrement,removecdata,killemptytext){
 if(!newline){newline='';}if(!tabulation){tabulation='';}
 var test='';var beforecdata='<![CDATA[';var aftercdata=']]>';
 if(removecdata){beforecdata='';aftercdata='';}if(!tabincrement){tabincrement='';}
 if(node.nodeName=='#cdata-section'){return beforecdata + uno.xml.nodetext(node) +aftercdata + newline;}
 if(node.nodeName=='#comment'){return '<!--'+uno.xml.nodetext(node)+'-->'+newline;}
 if(node.nodeName=='#text'){return uno.xml.nodetext(node)+newline;}
 else{
  if(node.nodeName!='#document'){test=tabulation+opentag+node.nodeName;if(node.attributes){for(var ai=0;ai<node.attributes.length;ai++){test+=' '+node.attributes[ai].name+'="'+uno.xml._attributevalue(node.attributes[ai])+'"';}}}
  if(node.childNodes.length>0){
   if(node.nodeName!='#document'){test+=closetag+newline;}
   for(var i=0;i<node.childNodes.length;i++){
    if(node.childNodes[i].nodeName=='#text'){
     var data=uno.xml.nodetext(node.childNodes[i]);
     if(killemptytext){for(var axe=0;axe<1000;axe++){if(data.indexOf(' ')==0){data=data.replace(' ', '');}else if(data.indexOf('\n')==0){data=data.replace('\n', '');}else{axe=2000;}}}
     if(data!=''){test+=tabulation+tabincrement+uno.xml.nodetext(node.childNodes[i])+newline;}
    }else if(node.childNodes[i].nodeName=='#cdata-section'){
     test+=tabulation+tabincrement+beforecdata+uno.xml.nodetext(node.childNodes[i])+aftercdata+newline;
    }else if(node.childNodes[i].nodeType==1){
     test+=uno.xml.tostringformat(node.childNodes[i],tabulation+tabincrement,opentag,closetag,newline,tabincrement,removecdata,killemptytext);
  }}}else{if(node.nodeName!='#document'){return test+='/'+closetag+newline;}}
if(node.nodeName!='#document'){return test+tabulation+opentag+'/'+node.nodeName+closetag+newline;}else{return test;}}};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------   XX MM LL - RR EE NN DD EE RR   ---------------------------------------//
/////////////////////////////////////////////////////////////////////////////////////////////private implementation//
uno.xml._preloaded=new Array();uno.xml._preloadedn=new Array();
uno.xml._preload=function(pidx,req){var pridx=uno.xml._preloaded.length;uno.xml._preloadedn[pridx]=uno.xml.processes[pidx].pp;uno.xml._preloaded[pridx]=req.responseXML.documentElement;};
uno.xml._fastinstance=function(){var pidx=uno.xml.processes.length;uno.xml.processes[pidx]=null;return pidx;};
//----------------------------------------------- XML RENDER PROCESSES ----------------(advanced loading sequence)-// 
uno.xml.processes=new Array(); uno.xml._h1s=new Array(); uno.xml._h2s=new Array();
uno.xml.process=function(ptype,elm,configurl,dataurl,pp,ff){this.ptype=ptype;if(elm=='newindow'){this.elm=uno.insert(document.body,'div',['id',uno.getuqid('xwin')]);}else{this.elm=$(elm);}if(!ptype=='preload'){this.pp=$(pp);}else{this.pp=pp;}this.configurl=configurl;this.dataurl=dataurl;this.ff=ff;this.config=null;this.data=null;};
uno.xml.startprocess = function (pidx) {
    uno.xml._h1s[pidx] = function (node) { uno.xml.continueprocess(pidx.valueOf(), node); }; uno.xml._h2s[pidx] = function (node) { uno.xml.finishprocess(pidx.valueOf(), node); };
    if (uno.xml.processes[pidx].ptype == 'preload') { uno.xml.asyncload(uno.xml.processes[pidx].dataurl, false, uno.xml._h1s[pidx], false, false); }
    else {
        if ((uno.xml.processes[pidx].ptype != 'actb') && (uno.xml.processes[pidx].ptype != 'select')) { if (uno.updatinghtml) { uno.clearchilds(uno.xml.processes[pidx].elm); uno.xml.processes[pidx].elm.innerHTML = uno.xml.updatinghtml; } }
        if (uno.xml.processes[pidx].ptype == 'content') { uno.xml.asyncload(uno.xml.processes[pidx].dataurl, false, uno.xml._h1s[pidx], false, uno.xml.processes[pidx].pp); }
        else if (uno.xml.processes[pidx].ptype == 'actb') { uno.xml.asyncload(uno.xml.processes[pidx].dataurl, false, uno.xml._h1s[pidx], false, uno.xml.processes[pidx].pp); }
        else if (uno.xml.processes[pidx].ptype == 'select') { uno.xml.asyncload(uno.xml.processes[pidx].dataurl, false, uno.xml._h1s[pidx], false, uno.xml.processes[pidx].pp); }
        else { uno.xml.asyncload(uno.xml.processes[pidx].configurl, false, uno.xml._h1s[pidx], false, false); } 
    } 
};
uno.xml.continueprocess = function (pidx, req) {
    if (uno.xml.processes[pidx].ptype == 'preload') { uno.xml._preload(pidx, req); }
    else if (uno.xml.processes[pidx].ptype == 'content') { uno.xml._rendercontent(pidx, req); }
    else if (uno.xml.processes[pidx].ptype == 'actb') { uno.xml._renderactb(pidx, req); } else if (uno.xml.processes[pidx].ptype == 'select') { uno.xml._renderselect(pidx, req); }
    else { uno.xml.processes[pidx].config = req.responseXML.documentElement; uno.xml.asyncload(uno.xml.processes[pidx].dataurl, false, uno.xml._h2s[pidx], false, uno.xml.processes[pidx].pp); } 
};
uno.xml.finishprocess = function (pidx, req) {
    var execute = true; if (uno.web) { execute = uno.xml._okprocess(req); } if (execute) {
 try{var p=uno.xml.processes[pidx];if(p.ptype=='control'){p.data=req.responseXML.documentElement;uno.xml._rendercontrol(p.elm,p.config,p.data,p.configurl,p.dataurl);}}
 catch(ex){
  if(uno.debug){if(uno.dialog){uno.dialog.show('Error',ex.message+'<br />Response :<br />'+req.responseText,'error');}else{alert(ex.message);}}
  else{uno.throwerror(ex.message+'\nResponse was :\n'+req.responseText);}}}};
//---------------------------------------------- NTT PRELOAD ROUTINE ----------------------------------------------//
uno.xml._preloadntt=function(ntt){var e;var ts;var xx;var nn=new Array();var ss=new Array();xx=ntt.getElementsByTagName('querystring');
 for(e=0;e<xx.length;e++){nn[e]=uno.xml.nodeattribute(xx[e],'varname');ss[e]=uno.xml.nodeattribute(xx[e],'substitution');xx[e].parentNode.removeChild(xx[e]);}
 ts=uno.xml.nodeinnerxml(ntt);for(e=0;e<nn.length;e++){ts=uno.replaceall(ts,ss[e],uno.querystring(nn[e]));}
 ntt=uno.xml.parse('<?xml version="1.0" encoding="utf-8" ?><unontt>'+ts+'</unontt>');xx=ntt.getElementsByTagName('cookie');
 for(e=0;e<xx.length;e++){nn[e]=uno.xml.nodeattribute(xx[e],'varname');ss[e]=uno.xml.nodeattribute(xx[e],'substitution');}for(e=0;e<xx.length;e++){xx[e].parentNode.removeChild(xx[e]);}
 ts=uno.xml.nodeinnerxml(ntt);for(e=0;e<nn.length;e++){ts=uno.replaceall(ts,ss[e],uno.cookie.read(nn[e]));}
 return uno.xml.parse('<?xml version="1.0" encoding="utf-8" ?><unontt>' + ts + '</unontt>');
};
//----------------------------------------------- ACTB RENDER ROUTINE ----------------------------(simple handler)-//
uno.xml._actbs = new Array(); uno.xml._actbn = new Array();
uno.xml._actbt = new Array(); uno.xml._actbv = new Array();
uno.xml._renderactb = function (pidx, req) {
    var data = req.responseXML.documentElement; var p = uno.xml.processes[pidx]; p.elm = $(p.elm); var tt = new Array(); var vv = new Array();
    var xx = data.getElementsByTagName('item'); for (var i = 0; i < xx.length; i++) { tt[tt.length] = uno.xml.childinnerxml(xx[i], 'name', true); vv[vv.length] = uno.xml.childinnerxml(xx[i], 'value', true); }
    var iname = p.elm.name; p.elm.name = 'ex' + iname; p.elm.id = 'ex' + iname;
    var x = document.createElement('input'); x.setAttribute('type', 'hidden'); x.setAttribute('name', iname); x.id = iname; p.elm.parentNode.appendChild(x);
    uno.xml._actbt[uno.xml._actbt.length] = tt; uno.xml._actbv[uno.xml._actbv.length] = vv;
    uno.xml._actbs[uno.xml._actbs.length] = new actb($(p.elm), uno.xml._actbt[uno.xml._actbt.length - 1], iname, uno.xml._actbchange); uno.xml._actbn[uno.xml._actbn.length] = iname;
};
uno.xml._actbchange = function (elmid, value) {
    var i; var v;
    for (i = 0; i < uno.xml._actbn.length; i++) {
        if (uno.xml._actbn[i] == elmid) {
            for (v = 0; v < uno.xml._actbt[i].length; v++) { if (uno.xml._actbt[i][v] == value) { $(elmid).value = uno.xml._actbv[i][v]; return false; } } 
        } 
    } 
};
uno.xml._renderselect = function (pidx, req) { var data = req.responseXML.documentElement; var p = uno.xml.processes[pidx]; p.elm = $(p.elm); var vv = false; if (uno.isnullorempty(p.elm.getElementsByTagName('option')[0].value)) { uno.clearchilds(p.elm); vv = true; } var xx = data.getElementsByTagName('item'); var o; for (var i = 0; i < xx.length; i++) { o = document.createElement('option'); o.innerHTML = uno.xml.childinnerxml(xx[i], 'name', true); o.value = uno.xml.childinnerxml(xx[i], 'value', true); if (vv) { if (i == 0) { o.setAttribute('selected', 'selected'); } } p.elm.appendChild(o); } };
//----------------------------------------------- PAGE RENDER ROUTINE ----------------------------(simple handler)-//
uno.xml._rendertempobj=null;
uno.xml._renderpage=function(req){
try{var e;var nodes=null;var data=req.responseXML.documentElement;data=uno.xml._preloadntt(req.responseXML.documentElement);
 nodes=data.getElementsByTagName('icon');for(e=0;e<nodes.length;e++){uno.importwebicon(uno.xml.nodetext(nodes[e]));}
 nodes=data.getElementsByTagName('title');for(e=0;e<nodes.length;e++){uno.setitle(uno.xml.nodeinnerxml(nodes[e],true));}
 nodes=data.getElementsByTagName('style');for(e=0;e<nodes.length;e++){uno.importcss(uno.xml.nodeinnerxml(nodes[e],true));}
 nodes=data.getElementsByTagName('script');for(e=0;e<nodes.length;e++){uno.importscript(uno.xml.nodeinnerxml(nodes[e],true));}
 nodes=data.getElementsByTagName('html');
 var elm=$(uno.xml.pagetarget);elm.innerHTML=uno.xml.nodeinnerxml(nodes[0],true); 
 uno.xml._chainload(data,0,false,false,false,false,false,false,false,false);
}catch(ex){if(uno.dialog){uno.dialog.show('Error',ex.message+'<br />Response :<br />'+req.responseText,'error');}else{alert(ex.message);}}};
//--------------------------------------------- CONTENT RENDER ROUTINE --------------------------------------------//
uno.xml._rendercontent=function(pidx,req){
 var p=uno.xml.processes[pidx];uno.clearchilds(p.elm);var written=false;var data=uno.xml._preloadntt(req.responseXML.documentElement);
 try{var ctc=data.getElementsByTagName('html')[0];p.elm.innerHTML=uno.xml.nodeinnerxml(ctc,true);written=true;
  if(uno.web){if(uno.web.editmode()>0){uno.insert(p.elm,'a',['href','javascript:uno.web._editor_show(\'ctc\',\''+p.dataurl+'\',\''+p.elm.id+'\');'],false,'<img src="'+uno._resimg+'edit.png" alt="edit" />');}}
  if(uno.startswith(p.elm.id,'xwinuno')){
   var title=data.getElementsByTagName('wintitle');
   if(title.length>0){title=uno.xml.nodeinnerxml(title[0],true);}else{title=false;}
   p.elm.id=uno.replaceall(p.elm.id,'xwinuno','winuno');
   uno.window.show(p.elm.id,['title',title,'refreshjs','uno.xml.rendercontent(\''+p.elm.id+'\',\''+p.dataurl+'\');']);}
  uno.xml._chainload(data,0,false,false,false,false,false,false,false,false);
 }catch(exxz){throw exxz;}
if(written==false){p.elm.innerHTML=req.responseText;}};
//----------------------------------------------- OK PROCESS ROUTINE ----------------------------------------------//
uno.xml._okprocess=function(req){var e;var ok='ok';var msg='';var oo=null;var ts='';var ts2='';
 try{ok=req.responseXML.documentElement.getElementsByTagName('ok')[0].childNodes[0].nodeValue;}catch(exxx){ok='ok';}
 oo=req.responseXML.documentElement.getElementsByTagName('srvdialog');
// for(e=0;e<oo.length;e++){
//    ts=uno.xml.nodeattribute(oo[e],'dialogtype');
//    if(!ts){ts='success'}
//    ts2=uno.xml.nodeinnerxml(oo[e],true);
//    if(uno.dialog){uno.dialog.show('Server response',uno.htmlentities(ts2,true),ts,false);}else{ts2=ts.toUpperCase()+'\n'+ts2;alert(ts2);}  
// } 
 if(ok!='ok'){
  oo=req.responseXML.documentElement.getElementsByTagName('servererror');
  try{for(e=0;e<oo.length;e++){msg=msg+uno.xml.nodeinnerxml(oo[e],true)+'\n';}}catch(ex){msg=req.responseText;e=100;}
  try{for(e=0;e<100;e++){ts2='servererror'+e.toString();ts=uno.cookie.read(ts2);if(ts){msg+='\n'+ts;}else{uno.cookie.erase(ts2);e=100;}}}catch(exx){msg=req.responseText;e=100;}
  if(uno.dialog){uno.dialog.show('Service error',uno.htmlentities(msg,true),'warning');}else{alert(msg);}
 }else{
  oo=req.responseXML.documentElement.getElementsByTagName('servermessage');
  try{for(e=0;e<oo.length;e++){msg=msg+uno.xml.nodeinnerxml(oo[e],true)+'\n';}}catch(ex){msg=responseText;e=100;}
  try{for(e=0;e<100;e++){ts2='servermessage'+e.toString();ts=uno.cookie.read(ts2);if(ts){msg+='\n'+ts;}else{uno.cookie.erase(ts2);e=100;}}}catch(ex){msg=req.responseText;e=100;}
  if(!uno.isnullorempty(msg)){if(uno.dialog){uno.dialog.show('Server response',uno.htmlentities(msg,true),'success',2);}else{alert(msg);}}}return (ok=='ok');};
//--------------------------------------------- CONTROL RENDER ROUTINE --------------------------------------------//
uno.xml._rendercontrol=function(elm,template,data,_templateurl,_dataurl){template=uno.xml._preloadntt(template);
 var rt=0;var x=0;var v=0;var s='';var vins;var prel;var js='';var nn=new Array();var tn='';
 //Prepare constants
 var consts=new Array();var consts_name=new Array();
 var xconsts=template.getElementsByTagName('constant');
 for(v=0;v<xconsts.length;v++){s=uno.xml.nodeattribute(xconsts[v],'tagname');consts[v]=uno.xml.nodeinnerxml(data.getElementsByTagName(s)[0],true);consts_name[v]=uno.xml.nodeattribute(xconsts[v],'substitution');}
 //Prepare and plot constant javascripts;
 nn=template.getElementsByTagName('constantjavascript');
 for(v=0;v<nn.length;v++){
  tn=uno.xml.nodeattribute(nn[v],'substitution');
  js=uno.xml.nodeinnerxml(nn[v],true);js=uno.xml._subs(js,consts,consts_name);
  consts[consts.length]=eval(js);
  consts_name[consts_name.length]=tn;}
 //Prepare and plot constant conditions;
 var const_xconds=null;var const_conds=new Array();var const_conds_name=new Array();
 const_xconds=template.getElementsByTagName('constantcondition');
 for(v=0;v<const_xconds.length;v++){
  const_conds_name[v]=uno.xml.nodeattribute(const_xconds[v],'substitution');
  js=uno.xml.childinnerxml(const_xconds[v],'js',true);js=uno.xml._subs(js,consts,consts_name);
  if(eval(js)){const_conds[v]=uno.xml.childinnerxml(const_xconds[v],'true',true);}
  else{const_conds[v]=uno.xml.childinnerxml(const_xconds[v],'false',true);}}
 //Start Writing
 s=uno.xml.childinnerxml(template,'beforeall',true);s=uno.xml._subs(s,const_conds,const_conds_name);
 var html=uno.xml._subs(s,consts,consts_name);
 //Fetch row types
 var rowtypes=template.getElementsByTagName('rowtype');
 var xvars=null;var xins=null;var vars=new Array();var vars_name=new Array();
 var rows=null;var rbefore='';var rafter='';var between='';var hasbetween=true;var betweenstep;var pagecount;
 var xconds=null;var conds=new Array();var condsT=new Array();var condsF=new Array();var conds_name=new Array();var conds_js=new Array();
 //Write row types
 var htm2 = '';
 for(rt=0;rt<rowtypes.length;rt++){
  //Fetch rows
  s=uno.xml.nodeattribute(rowtypes[rt],'tagname');rows=data.getElementsByTagName(s);
  //Fetch variables
  xvars=rowtypes[rt].getElementsByTagName('variable');
  vars=null;vars=new Array();vars_name=null;vars_name=new Array();
  for(v=0;v<xvars.length;v++){vars_name[v]=uno.xml.nodeattribute(xvars[v],'substitution');vars[v]='';}
  v=vars_name.length;vars_name[v]='#TEXT#';vars[v]='';v=vars_name.length;vars_name[v]='#XML#';vars[v]='';
  v=vars_name.length;vars_name[v]='#ROWIDX#';vars[v]='';v=vars_name.length;vars_name[v]='#ROWCOUNT#';vars[v]='';
  v=vars_name.length;vars_name[v]='#PAGECOUNT#';vars[v]='';
  //Fetch javascripts
  nn=rowtypes[rt].getElementsByTagName('javascript');
  for(v=0;v<nn.length;v++){
    vars_name[vars_name.length]=uno.xml.nodeattribute(nn[v],'substitution');
    vars[vars.length]=uno.xml.nodeinnerxml(nn[v],true);}
  //Fetch inlines
  xins=rowtypes[rt].getElementsByTagName('inline');
  for(v=0;v<xins.length;v++){vins=vars_name.length;vars_name[vins]=uno.xml.nodeattribute(xins[v],'substitution');}
  //Fetch conditions
  xconds=rowtypes[rt].getElementsByTagName('condition');
  for(v=0;v<xconds.length;v++){
   conds_name[v]=uno.xml.nodeattribute(xconds[v],'substitution');
   conds_js[v]=uno.xml.childinnerxml(xconds[v],'js',true);
   conds_js[v]=uno.xml._subs(conds_js[v],const_conds,const_conds_name);conds_js[v]=uno.xml._subs(conds_js[v],consts,consts_name);
   condsT[v]=uno.xml.childinnerxml(xconds[v],'true',true);if(condsT[v]==null){condsT[v]='';}
   condsF[v]=uno.xml.childinnerxml(xconds[v],'false',true);if(condsF[v]==null){condsF[v]='';}}
  //Prepare prefix suffix and between
  rbefore=uno.xml.childinnerxml(rowtypes[rt],'before',true);rbefore=uno.xml._subs(rbefore,const_conds,const_conds_name);
  rafter=uno.xml.childinnerxml(rowtypes[rt],'after',true);rafter=uno.xml._subs(rafter,const_conds,const_conds_name);        
  between=uno.xml.childinnerxml(rowtypes[rt],'between',true);between=uno.xml._subs(between,const_conds,const_conds_name);
  hasbetween=!uno.isnullorempty(between);
  if(hasbetween){betweenstep=uno.xml.childattribute(rowtypes[rt],'between','step');if(uno.isnullorempty(betweenstep)){betweenstep=0;}else{betweenstep=parseInt(betweenstep);}if(betweenstep<1){betweenstep=1;}}
  //Case zero rows
  if(rows.length==0){htm2+=uno.xml._subs(uno.xml.nodeinnerxml(rowtypes[rt].getElementsByTagName('casezero')[0]),consts,consts_name);}
  else{pagecount=2;
   rbefore=uno.replaceall(rbefore,'#ROWCOUNT#',rows.length.toLocaleString());
   rafter=uno.replaceall(rafter,'#ROWCOUNT#',rows.length.toLocaleString());
   htm2+=uno.xml._subs(rbefore,consts,consts_name);
   for(x=0;x<rows.length;x++){
    //Read variables
    for(v=0;v<xvars.length;v++){s=uno.xml.nodeattribute(xvars[v],'tagname');vars[v]=uno.xml.nodeinnerxml(rows[x].getElementsByTagName(s)[0],true);}
    //read text, xml, rowcount and  betweenrowcount
    vars[v]=uno.xml.nodetext(rows[x]);vars[v+1]=uno.xml.nodexml(rows[x]);
    vars[v+2]=x.toLocaleString();vars[v+3]=rows.length.toLocaleString();
    vars[v+4]=pagecount.toLocaleString();
    //Read javascripts
    nn=rowtypes[rt].getElementsByTagName('javascript');
    for(v=xvars.length+5;v<nn.length+xvars.length+5;v++){vars[v]=uno.xml._subs(vars[v],consts,consts_name);vars[v]=uno.xml._subs(vars[v],vars,vars_name);vars[v]=uno.xml._subs(vars[v],const_conds,const_conds_name);vars[v]=uno.xml._subs(vars[v],conds,conds_name);
        vars[v]=eval(vars[v]);}
    //Read & Plot inlines
    for(v=0;v<xins.length;v++){
     s=uno.xml.nodeattribute(xins[v],'tagname');
     prel=uno.xml.nodeattribute(xins[v],'preload');
     vins=xvars.length+5+nn.length+v;
     vars[vins]=uno.xml._rendercontrol(false,uno.xml.preloaded(prel),rows[x].getElementsByTagName(s)[0]);
    }//Execute & Plot conditions
    for(v=0;v<xconds.length;v++){js=uno.xml._subs(conds_js[v],vars,vars_name);if(eval(js)){conds[v]=condsT[v];}else{conds[v]=condsF[v];}}
    //Write start
    s=uno.xml.nodeinnerxml(rowtypes[rt].getElementsByTagName('html')[0],true);
    s=uno.xml._subs(s,conds,conds_name);s=uno.xml._subs(s,vars,vars_name);s=uno.xml._subs(s,const_conds,const_conds_name);
    htm2+=uno.xml._subs(s,consts,consts_name);
    if((hasbetween)&&(x==(betweenstep*(pagecount-1)))){s=uno.xml._subs(between,conds,conds_name);htm2+=uno.xml._subs(s,vars,vars_name);pagecount=pagecount+1;}
    uno.xml._chainload(rowtypes[rt],2,consts,consts_name,const_conds,const_conds_name,vars,vars_name,conds,conds_name);
   }htm2+=uno.xml._subs(rafter,consts,consts_name);}}
 if (uno.isnullorempty(htm2)){htm2=uno.xml.nodeinnerxml(template.getElementsByTagName('caseallzero')[0],true);htm2=uno.xml._subs(htm2,const_conds,const_conds_name);}
 html+=htm2;
 s=uno.xml.nodeinnerxml(template.getElementsByTagName('afterall')[0],true);s=uno.xml._subs(s,const_conds,const_conds_name);
 html+=uno.xml._subs(s,consts,consts_name);
 if(html.indexOf('#RESPONSEXML#')){html=uno.replaceall(html,'#RESPONSEXML#',uno.xml.nodexml(data,false));}
 if(!elm){return html;}else{
  try{uno.clearchilds(elm);}catch(ex){var n='';if(elm.id){n='Target was: '+elm.id;}uno.throwerror('Target element vanished during control update.'+n);}
  try{elm.innerHTML=html;}catch(ex){var nxs='';if(elm.id){nxs='Html was: '+html;}uno.throwerror('Target element vanished during control update OR generated html is syntactycally incorrect.\n'+nxs);}
  try{if((uno.web)&&(uno.web.editmode()>0)){if((_templateurl)&&(_dataurl)){if(!uno.startswith(_templateurl,uno._res)){
      uno.insert(elm,'a',['href','javascript:uno.web._editor_show(\'ctr\',\''+_templateurl+'\',\''+elm.id+'\',\''+_dataurl+'\');'],false,'<img src="'+uno._resimg+'edit.png" alt="edit" />');
   }}}
   if(uno.startswith(elm.id,'xwinuno')){if((_templateurl)&&(_dataurl)){
     var title=template.getElementsByTagName('wintitle');if(title.length>0){title=uno.xml.nodeinnerxml(title[0],true);}else{title=false;}
     elm.id=uno.replaceall(elm.id,'xwinuno','winuno');
     uno.window.show(elm.id,['title',title,'refreshjs','uno.xml.rendercontrol(\''+elm.id+'\',\''+_templateurl+'\',\''+_dataurl+'\');']);
   }}uno.xml._chainload(template,1,consts,consts_name,const_conds,const_conds_name,false,false,false,false);
  }catch(exx){uno.throwerror('Error chain loading: '+exx.message);}}};
//
uno.xml._chainload=function(node,sublev,consts,consts_name,const_conds,const_conds_name,vars,vars_name,conds,conds_name){
 var e=0;var tgt='';var curl='';var durl='';var timeout=200;var nodes;
 var ctcname='content';var ctrname='control';
 if(sublev==1){ctcname='constant'+ctcname; ctrname='constant'+ctrname;}    
 if(sublev==1){nodes=node.getElementsByTagName('onloadall');}
 else{nodes=node.getElementsByTagName('onload');}
 for(e=0;e<nodes.length;e++){
  try{tgt=uno.xml.nodeinnerxml(nodes[e],true);
   if(sublev>0){
    if(sublev>1){tgt=uno.xml._subs(tgt,conds,conds_name);tgt=uno.xml._subs(tgt,vars,vars_name);}
    tgt=uno.xml._subs(tgt,const_conds,const_conds_name);tgt=uno.xml._subs(tgt,consts,consts_name);
   }eval(tgt);
  }catch(exxx){uno.throwerror('Error evaluating javascript '+uno.escapejs(tgt)+'.');}
 }nodes=node.getElementsByTagName(ctcname);
 for(e=0;e<nodes.length;e++){
  tgt=uno.xml.childinnerxml(nodes[e],'target',true);durl=uno.xml.childinnerxml(nodes[e],'ctcurl',true);
  try{if(sublev>0){
    //Replace variables
    if(sublev>1){tgt=uno.xml._subs(tgt,conds,conds_name);tgt=uno.xml._subs(tgt,vars,vars_name);
     durl=uno.xml._subs(durl,conds,conds_name);durl=uno.xml._subs(durl,vars,vars_name);}
    //Replace constants
    tgt=uno.xml._subs(tgt,const_conds,const_conds_name);tgt=uno.xml._subs(tgt,consts,consts_name);
    durl=uno.xml._subs(durl,const_conds,const_conds_name);durl=uno.xml._subs(durl,consts,consts_name);}
    setTimeout('uno.xml.rendercontent('+tgt+','+durl+');',timeout);timeout+=uno.xml.rendertimestep;}
  catch(exxxx){uno.throwerror('Error chainloading content '+e+'.');}
 }nodes=node.getElementsByTagName(ctrname);
 for(e=0;e<nodes.length;e++){
  tgt=uno.xml.childinnerxml(nodes[e],'target',true);curl=uno.xml.childinnerxml(nodes[e],'ctrurl',true);durl=uno.xml.childinnerxml(nodes[e],'dataurl',true);
  try{if(sublev>0){
    //Replace variables
    if(sublev>1){tgt=uno.xml._subs(tgt,conds,conds_name);tgt=uno.xml._subs(tgt,vars,vars_name);
      curl=uno.xml._subs(curl,conds,conds_name);curl=uno.xml._subs(curl,vars,vars_name);
      durl=uno.xml._subs(durl,conds,conds_name);durl=uno.xml._subs(durl,vars,vars_name);}
    //Replace constants
    tgt=uno.xml._subs(tgt,const_conds,const_conds_name);tgt=uno.xml._subs(tgt,consts,consts_name);
    curl=uno.xml._subs(curl,const_conds,const_conds_name);curl=uno.xml._subs(curl,consts,consts_name);
    durl=uno.xml._subs(durl,const_conds,const_conds_name);durl=uno.xml._subs(durl,consts,consts_name);}
    setTimeout('uno.xml.rendercontrol('+tgt+','+curl+','+durl+');',timeout);timeout+=uno.xml.rendertimestep;}
  catch(exxxx){uno.throwerror('Error chainloading control '+e+'.');}}};
uno.xml._subs=function(value,vars,names){if(uno.isnullorempty(value)){return '';}if(vars){for(var i=0;i<vars.length;i++){value=uno.replaceall(value,names[i],vars[i]);}}return value;};

