/*
 * Zefext response viewer
 *
 * Responseviewer is display the ajax response:
 * - JSON data in tree
 * - XML data in formated XML
 * - in XML data the content of EVAL tag is formated by javascript syntax highlighter
 *
 * uses:
 * - ExtJS {@link http://extjs.com/ }
 * - xmlViewer {@link http://www.levmuchnik.net/Content/ProgrammingTips/WEB/XMLDisplay/DisplayXMLFileWithJavascript.html}
 *
 * original JSON viewer: {@link http://jsonviewer.stack.hu/}
 * 
 * @author     Zefext developer team
 * @copyright  Copyright (c) 2006 Zefext developer team
 * @version    $Id:$
 */
var jsonDebugger=true;if(ZefextCfg.debvar){Ext.Ajax.on("requestcomplete",function(c,a,b){if(a.responseText.substr(1,4)=="?xml"){Zefext.responseStack=a.responseText;Zefext.responseStackXML=a.responseXML;if(Zefext.winXml.isVisible()){Zefext.winXml.hide();Zefext.winXml.show()}else{Zefext.winXml.hide()}}else{if(a.responseText&&jsonDebugger){Zefext.responseStack=a.responseText;Zefext.responseStackJSON=Zefext.responseStack;if(Zefext.winJson.isVisible()){Zefext.winJson.hide();Zefext.winJson.show()}else{Zefext.winJson.hide()}}}})}Ext.override(Ext.tree.TreeNode,{removeAllChildren:function(){while(this.hasChildNodes()){this.removeChild(this.firstChild)}return this},setIcon:function(a){this.getUI().setIcon(a)},setIconCls:function(a){this.getUI().setIconCls(a)}});Ext.override(Ext.tree.TreeNodeUI,{setIconCls:function(a){if(this.iconNode){Ext.fly(this.iconNode).replaceClass(this.node.attributes.iconCls,a)}this.node.attributes.iconCls=a},setIcon:function(a){if(this.iconNode){this.iconNode.src=a||this.emptyIcon;Ext.fly(this.iconNode)[a?"addClass":"removeClass"]("x-tree-node-inline-icon")}this.node.attributes.icon=a}});String.space=function(a){var c=[],b;for(b=0;b<a;b++){c.push(" ")}return c.join("")};Ext.onReady(function(){Ext.BLANK_IMAGE_URL="/images/ext/spacer.gif";var d={id:"jsonTree",xtype:"treepanel",region:"center",animate:false,loader:new Ext.tree.TreeLoader(),lines:true,root:new Ext.tree.TreeNode({text:"JSON"}),autoScroll:true,trackMouseOver:false,listeners:{render:function(e){e.getSelectionModel().on("selectionchange",function(f,g){a.gridbuild(g)})}}};var b={id:"jsonViewerPanel",layout:"border",cls:"x-panel-transparent",baseCls:"x-panel-transparent",border:false,items:[d]};Zefext.winJson=new Ext.Window({closeAction:"hide",id:"mWjson",manager:Zefext.winGroup,title:"Json Viewer",closable:true,width:455,height:565,border:false,maximizable:true,shadow:true,plain:true,layout:"fit",items:[b]});Zefext.winJson.on("beforeshow",function(){a.check(Zefext.responseStackJSON)});Zefext.winJson.on("show",function(){a.expand()});Zefext.winJson.printR=function(e){a.check(Ext.util.JSON.encode(e));a.expand()};var a=function(){var j="/images/ext/jsonviewer/";var e=Ext.getCmp("jsonTree");var f=e.getRootNode();var i={};var l=null;var g=null;var k=null;var h=null;return{expand:function(){e.expandAll()},check:function(m){var o=m.split("\n").join(" ");try{i=Ext.util.JSON.decode(o);f.setText("response: JSON")}catch(n){f.setText("Not JSON data!!!");return false}if(l===o){}l=o;this.treebuild()},treebuild:function(){f.removeAllChildren();f.appendChild(this.json2leaf(i));f.setIcon(j+(Ext.isArray(i)?"array.gif":"object.gif"))},gridbuild:function(o){if(o.isLeaf()){o=o.parentNode}if(!o.childNodes.length){o.expand(false,false);o.collapse(false,false)}var p={};for(var n=0;n<o.childNodes.length;n++){var m=o.childNodes[n].text.split(":");if(m.length>1){p[m[0]]=m[1]}else{p[m[0]]="..."}}},json2leaf:function(o){var m=[];for(var n in o){if(o.hasOwnProperty(n)){if(o[n]===null){m.push({text:n+" : null",leaf:true,icon:j+"red.gif"})}else{if(typeof o[n]==="string"){m.push({text:n+' : "'+o[n]+'"',leaf:true,icon:j+"blue.gif"})}else{if(typeof o[n]==="number"){m.push({text:n+" : "+o[n],leaf:true,icon:j+"green.gif"})}else{if(typeof o[n]==="boolean"){m.push({text:n+" : "+(o[n]?"true":"false"),leaf:true,icon:j+"yellow.gif"})}else{if(typeof o[n]==="object"){m.push({text:n,children:this.json2leaf(o[n]),icon:j+(Ext.isArray(o[n])?"array.gif":"object.gif")})}else{if(typeof o[n]==="function"){m.push({text:n+" : function",leaf:true,icon:j+"red.gif"})}}}}}}}}return m},selectNode:function(m){m.select();e.fireEvent("click",m);while(m!==f){m=m.parentNode;m.expand(false,false)}},format:function(q){var s=q.split("\n").join(" ");var o=[];var p=0;var r=false;for(var n=0,m=s.length;n<m;n++){var u=s.charAt(n);if(r&&u===r){if(s.charAt(n-1)!=="\\"){r=false}}else{if(!r&&(u==='"'||u==="'")){r=u}else{if(!r&&(u===" "||u==="\t")){u=""}else{if(!r&&u===":"){u+=" "}else{if(!r&&u===","){u+="\n"+String.space(p*2)}else{if(!r&&(u==="["||u==="{")){p++;u+="\n"+String.space(p*2)}else{if(!r&&(u==="]"||u==="}")){p--;u="\n"+String.space(p*2)+u}}}}}}}o.push(u)}return o.join("")},removeWhiteSpace:function(p){var r=p.split("\n").join(" ");var o=[];var q=false;for(var n=0,m=r.length;n<m;n++){var s=r.charAt(n);if(q&&s===q){if(r.charAt(n-1)!=="\\"){q=false}}else{if(!q&&(s==='"'||s==="'")){q=s}else{if(!q&&(s===" "||s==="\t")){s=""}}}o.push(s)}return o.join("")}}}();var c=new Ext.Panel({id:"xmlViewerPanel",cls:"x-panel-transparent",baseCls:"x-panel-transparent",html:'<div id="xmlViewer" style="background:transparent;overflow:scroll;width:100%;height:100%"></div>'});Zefext.winXml=new Ext.Window({closeAction:"hide",id:"mWxml",manager:Zefext.winGroup,title:"XML Viewer",closable:true,width:655,height:515,border:false,maximizable:true,shadow:true,plain:true,layout:"fit",items:[c]});Zefext.winXml.on("beforeshow",function(){LoadXMLObject("xmlViewer",Zefext.responseStackXML)});Zefext.winXml.on("show",function(){sh_highlightDocument()})});if(ZefextCfg.debvar>0){function ZefextJSONShow(){Zefext.winJson.show()}function ZefextXMLShow(){Zefext.winXml.show()}};
