
Ext.ux.AutoGridPanel=Ext.extend(Ext.grid.GridPanel,{initComponent:function(){if(this.columns&&(this.columns instanceof Array)){this.colModel=new Ext.grid.ColumnModel(this.columns);delete this.columns}if(!this.colModel){this.colModel=new Ext.grid.ColumnModel([])}Ext.ux.AutoGridPanel.superclass.initComponent.call(this);if(this.store){this.store.on("metachange",this.onMetaChange,this)}if(this.autoSave){this.colModel.on("widthchange",this.saveColumModel,this);this.colModel.on("hiddenchange",this.saveColumModel,this);this.colModel.on("columnmoved",this.saveColumModel,this);this.colModel.on("columnlockchange",this.saveColumModel,this)}},onMetaChange:function(a,b){this.colModel.setConfig(b.fields,false);if(this.rendered){this.view.refresh(true)}this.view.hmenu.add({id:"reset",text:"Reset Columns",cls:"xg-hmenu-reset-columns"})},saveColumModel:function(){var g,e=this.colModel.config;var b=[];for(var f=0,a=e.length;f<a;f++){g=e[f];b[f]={name:g.name,width:g.width};if(g.hidden){b[f].hidden=true}}var d=this.store.getSortState();Ext.Ajax.request({url:this.saveUrl,params:{fields:Ext.encode(b),sort:Ext.encode(d)}})}});Ext.reg("autogrid",Ext.ux.AutoGridPanel);
/*
 * Ext JS Library 3.0.0
 * Copyright(c) 2006-2009 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.ux.Portal=Ext.extend(Ext.Panel,{layout:"column",autoScroll:true,cls:"x-portal",defaultType:"portalcolumn",initComponent:function(){Ext.ux.Portal.superclass.initComponent.call(this);this.addEvents({validatedrop:true,beforedragover:true,dragover:true,beforedrop:true,drop:true})},initEvents:function(){Ext.ux.Portal.superclass.initEvents.call(this);this.dd=new Ext.ux.Portal.DropZone(this,this.dropConfig)},beforeDestroy:function(){if(this.dd){this.dd.unreg()}Ext.ux.Portal.superclass.beforeDestroy.call(this)}});Ext.reg("portal",Ext.ux.Portal);Ext.ux.Portal.DropZone=function(a,b){this.portal=a;Ext.dd.ScrollManager.register(a.body);Ext.ux.Portal.DropZone.superclass.constructor.call(this,a.bwrap.dom,b);a.body.ddScrollConfig=this.ddScrollConfig};Ext.extend(Ext.ux.Portal.DropZone,Ext.dd.DropTarget,{ddScrollConfig:{vthresh:50,hthresh:-1,animate:true,increment:200},createEvent:function(a,f,d,b,h,g){return{portal:this.portal,panel:d.panel,columnIndex:b,column:h,position:g,data:d,source:a,rawEvent:f,status:this.dropAllowed}},notifyOver:function(v,t,w){var f=t.getXY(),a=this.portal,n=v.proxy;if(!this.grid){this.grid=this.getGrid()}var b=a.body.dom.clientWidth;if(!this.lastCW){this.lastCW=b}else{if(this.lastCW!=b){this.lastCW=b;a.doLayout();this.grid=this.getGrid()}}var d=0,l=this.grid.columnX,m=false;for(var s=l.length;d<s;d++){if(f[0]<(l[d].x+l[d].w)){m=true;break}}if(!m){d--}var q,k=false,i=0,u=a.items.itemAt(d),o=u.items.items,j=false;for(var s=o.length;i<s;i++){q=o[i];var r=q.el.getHeight();if(r===0){j=true}else{if((q.el.getY()+(r/2))>f[1]){k=true;break}}}i=(k&&q?i:u.items.getCount())+(j?-1:0);var g=this.createEvent(v,t,w,d,u,i);if(a.fireEvent("validatedrop",g)!==false&&a.fireEvent("beforedragover",g)!==false){n.getProxy().setWidth("auto");if(q){n.moveProxy(q.el.dom.parentNode,k?q.el.dom:null)}else{n.moveProxy(u.el.dom,null)}this.lastPos={c:u,col:d,p:j||(k&&q)?i:false};this.scrollPos=a.body.getScroll();a.fireEvent("dragover",g);return g.status}else{return g.status}},notifyOut:function(){delete this.grid},notifyDrop:function(k,g,f){delete this.grid;if(!this.lastPos){return}var i=this.lastPos.c,b=this.lastPos.col,j=this.lastPos.p;var a=this.createEvent(k,g,f,b,i,j!==false?j:i.items.getCount());if(this.portal.fireEvent("validatedrop",a)!==false&&this.portal.fireEvent("beforedrop",a)!==false){k.proxy.getProxy().remove();k.panel.el.dom.parentNode.removeChild(k.panel.el.dom);if(j!==false){if(i==k.panel.ownerCt&&(i.items.items.indexOf(k.panel)<=j)){j++}i.insert(j,k.panel)}else{i.add(k.panel)}i.doLayout();this.portal.fireEvent("drop",a);var l=this.scrollPos.top;if(l){var h=this.portal.body.dom;setTimeout(function(){h.scrollTop=l},10)}}delete this.lastPos},getGrid:function(){var a=this.portal.bwrap.getBox();a.columnX=[];this.portal.items.each(function(b){a.columnX.push({x:b.el.getX(),w:b.el.getWidth()})});return a},unreg:function(){Ext.ux.Portal.DropZone.superclass.unreg.call(this)}});
/*
 * Ext JS Library 3.0.0
 * Copyright(c) 2006-2009 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.ux.PortalColumn=Ext.extend(Ext.Container,{layout:"anchor",defaultType:"portlet",cls:"x-portal-column"});Ext.reg("portalcolumn",Ext.ux.PortalColumn);
/*
 * Ext JS Library 3.0.0
 * Copyright(c) 2006-2009 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.ux.Portlet=Ext.extend(Ext.Panel,{anchor:"100%",frame:true,collapsible:true,draggable:true,cls:"x-portlet"});Ext.reg("portlet",Ext.ux.Portlet);
/*
 * Ext JS Library 3.1.1
 * Copyright(c) 2006-2010 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.ux.Spinner=Ext.extend(Ext.util.Observable,{incrementValue:1,alternateIncrementValue:5,triggerClass:"x-form-spinner-trigger",splitterClass:"x-form-spinner-splitter",alternateKey:Ext.EventObject.shiftKey,defaultValue:0,accelerate:false,constructor:function(a){Ext.ux.Spinner.superclass.constructor.call(this,a);Ext.apply(this,a);this.mimicing=false},init:function(a){this.field=a;a.afterMethod("onRender",this.doRender,this);a.afterMethod("onEnable",this.doEnable,this);a.afterMethod("onDisable",this.doDisable,this);a.afterMethod("afterRender",this.doAfterRender,this);a.afterMethod("onResize",this.doResize,this);a.afterMethod("onFocus",this.doFocus,this);a.beforeMethod("onDestroy",this.doDestroy,this)},doRender:function(b,a){var c=this.el=this.field.getEl();var d=this.field;if(!d.wrap){d.wrap=this.wrap=c.wrap({cls:"x-form-field-wrap"})}else{this.wrap=d.wrap.addClass("x-form-field-wrap")}this.trigger=this.wrap.createChild({tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.triggerClass});if(!d.width){this.wrap.setWidth(c.getWidth()+this.trigger.getWidth())}this.splitter=this.wrap.createChild({tag:"div",cls:this.splitterClass,style:"width:13px; height:2px;"});this.splitter.setRight((Ext.isIE)?1:2).setTop(10).show();this.proxy=this.trigger.createProxy("",this.splitter,true);this.proxy.addClass("x-form-spinner-proxy");this.proxy.setStyle("left","0px");this.proxy.setSize(14,1);this.proxy.hide();this.dd=new Ext.dd.DDProxy(this.splitter.dom.id,"SpinnerDrag",{dragElId:this.proxy.id});this.initTrigger();this.initSpinner()},doAfterRender:function(){var a;if(Ext.isIE&&this.el.getY()!=(a=this.trigger.getY())){this.el.position();this.el.setY(a)}},doEnable:function(){if(this.wrap){this.wrap.removeClass(this.field.disabledClass)}},doDisable:function(){if(this.wrap){this.wrap.addClass(this.field.disabledClass);this.el.removeClass(this.field.disabledClass)}},doResize:function(a,b){if(typeof a=="number"){this.el.setWidth(a-this.trigger.getWidth())}this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth())},doFocus:function(){if(!this.mimicing){this.wrap.addClass("x-trigger-wrap-focus");this.mimicing=true;Ext.get(Ext.isIE?document.body:document).on("mousedown",this.mimicBlur,this,{delay:10});this.el.on("keydown",this.checkTab,this)}},checkTab:function(a){if(a.getKey()==a.TAB){this.triggerBlur()}},mimicBlur:function(a){if(!this.wrap.contains(a.target)&&this.field.validateBlur(a)){this.triggerBlur()}},triggerBlur:function(){this.mimicing=false;Ext.get(Ext.isIE?document.body:document).un("mousedown",this.mimicBlur,this);this.el.un("keydown",this.checkTab,this);this.field.beforeBlur();this.wrap.removeClass("x-trigger-wrap-focus");console.log("blur")},initTrigger:function(){this.trigger.addClassOnOver("x-form-trigger-over");this.trigger.addClassOnClick("x-form-trigger-click")},initSpinner:function(){this.field.addEvents({spin:true,spinup:true,spindown:true,beforespinup:true,beforespindown:true});this.keyNav=new Ext.KeyNav(this.el,{up:function(a){a.preventDefault();this.onSpinUp()},down:function(a){a.preventDefault();this.onSpinDown()},pageUp:function(a){a.preventDefault();this.onSpinUpAlternate()},pageDown:function(a){a.preventDefault();this.onSpinDownAlternate()},scope:this});this.repeater=new Ext.util.ClickRepeater(this.trigger,{accelerate:this.accelerate});this.field.mon(this.repeater,"click",this.onTriggerClick,this,{preventDefault:true});this.field.mon(this.trigger,{mouseover:this.onMouseOver,mouseout:this.onMouseOut,mousemove:this.onMouseMove,mousedown:this.onMouseDown,mouseup:this.onMouseUp,scope:this,preventDefault:true});this.field.mon(this.wrap,"mousewheel",this.handleMouseWheel,this);this.dd.setXConstraint(0,0,10);this.dd.setYConstraint(1500,1500,10);this.dd.endDrag=this.endDrag.createDelegate(this);this.dd.startDrag=this.startDrag.createDelegate(this);this.dd.onDrag=this.onDrag.createDelegate(this)},onMouseOver:function(){if(this.disabled){return}var a=this.getMiddle();this.tmpHoverClass=(Ext.EventObject.getPageY()<a)?"x-form-spinner-overup":"x-form-spinner-overdown";this.trigger.addClass(this.tmpHoverClass)},onMouseOut:function(){this.trigger.removeClass(this.tmpHoverClass)},onMouseMove:function(){if(this.disabled){return}var a=this.getMiddle();if(((Ext.EventObject.getPageY()>a)&&this.tmpHoverClass=="x-form-spinner-overup")||((Ext.EventObject.getPageY()<a)&&this.tmpHoverClass=="x-form-spinner-overdown")){}},onMouseDown:function(){if(this.disabled){return}var a=this.getMiddle();this.tmpClickClass=(Ext.EventObject.getPageY()<a)?"x-form-spinner-clickup":"x-form-spinner-clickdown";this.trigger.addClass(this.tmpClickClass)},onMouseUp:function(){this.trigger.removeClass(this.tmpClickClass)},onTriggerClick:function(){if(this.disabled||this.el.dom.readOnly){return}var b=this.getMiddle();var a=(Ext.EventObject.getPageY()<b)?"Up":"Down";this["onSpin"+a]()},getMiddle:function(){var b=this.trigger.getTop();var c=this.trigger.getHeight();var a=b+(c/2);return a},isSpinnable:function(){if(this.disabled||this.el.dom.readOnly){Ext.EventObject.preventDefault();return false}return true},handleMouseWheel:function(a){if(this.wrap.hasClass("x-trigger-wrap-focus")==false){return}var b=a.getWheelDelta();if(b>0){this.onSpinUp();a.stopEvent()}else{if(b<0){this.onSpinDown();a.stopEvent()}}},startDrag:function(){this.proxy.show();this._previousY=Ext.fly(this.dd.getDragEl()).getTop()},endDrag:function(){this.proxy.hide()},onDrag:function(){if(this.disabled){return}var b=Ext.fly(this.dd.getDragEl()).getTop();var a="";if(this._previousY>b){a="Up"}if(this._previousY<b){a="Down"}if(a!=""){this["onSpin"+a]()}this._previousY=b},onSpinUp:function(){if(this.isSpinnable()==false){return}if(Ext.EventObject.shiftKey==true){this.onSpinUpAlternate();return}else{if(this.field.fireEvent("beforespinup",this.field,false)===false){return}this.spin(false,false)}this.field.fireEvent("spin",this.field,false);this.field.fireEvent("spinup",this.field,false)},onSpinDown:function(){if(this.isSpinnable()==false){return}if(Ext.EventObject.shiftKey==true){this.onSpinDownAlternate();return}else{if(this.field.fireEvent("beforespindown",this.field,false)===false){return}this.spin(true,false)}this.field.fireEvent("spin",this.field,false);this.field.fireEvent("spindown",this.field,false)},onSpinUpAlternate:function(){if(this.isSpinnable()==false){return}if(this.field.fireEvent("beforespinup",this.field,true)===false){return}this.spin(false,true);this.field.fireEvent("spin",this.field,true);this.field.fireEvent("spinup",this.field,true)},onSpinDownAlternate:function(){if(this.isSpinnable()==false){return}if(this.field.fireEvent("beforespindown",this.field,true)===false){return}this.spin(true,true);this.field.fireEvent("spin",this.field,true);this.field.fireEvent("spindown",this.field,true)},spin:function(d,b){var a=parseFloat(this.field.getValue());var c=(b==true)?this.alternateIncrementValue:this.incrementValue;(d==true)?a-=c:a+=c;a=(isNaN(a))?this.defaultValue:a;a=this.fixBoundries(a);this.field.setRawValue(a)},fixBoundries:function(b){var a=b;if(this.field.minValue!=undefined&&a<this.field.minValue){a=this.field.minValue}if(this.field.maxValue!=undefined&&a>this.field.maxValue){a=this.field.maxValue}return this.fixPrecision(a)},fixPrecision:function(b){var a=isNaN(b);if(!this.field.allowDecimals||this.field.decimalPrecision==-1||a||!b){return a?"":b}return parseFloat(parseFloat(b).toFixed(this.field.decimalPrecision))},doDestroy:function(){if(this.trigger){this.trigger.remove()}if(this.wrap){this.wrap.remove();delete this.field.wrap}if(this.splitter){this.splitter.remove()}if(this.dd){this.dd.unreg();this.dd=null}if(this.proxy){this.proxy.remove()}if(this.repeater){this.repeater.purgeListeners()}}});Ext.form.Spinner=Ext.ux.Spinner;
/*
 * Ext JS Library 3.1.1
 * Copyright(c) 2006-2010 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.ns("Ext.ux.form");Ext.ux.form.SpinnerField=Ext.extend(Ext.form.NumberField,{actionMode:"wrap",deferHeight:true,autoSize:Ext.emptyFn,adjustSize:Ext.BoxComponent.prototype.adjustSize,constructor:function(c){var b=Ext.copyTo({},c,"incrementValue,alternateIncrementValue,accelerate,defaultValue,triggerClass,splitterClass");var d=this.spinner=new Ext.ux.Spinner(b);var a=c.plugins?(Ext.isArray(c.plugins)?c.plugins.push(d):[c.plugins,d]):d;Ext.ux.form.SpinnerField.superclass.constructor.call(this,Ext.apply(c,{plugins:a}))},getResizeEl:function(){return this.wrap},getPositionEl:function(){return this.wrap},alignErrorIcon:function(){if(this.wrap){this.errorIcon.alignTo(this.wrap,"tl-tr",[2,0])}},validateBlur:function(){return true}});Ext.reg("spinnerfield",Ext.ux.form.SpinnerField);Ext.form.SpinnerField=Ext.ux.form.SpinnerField;
JSON_FORMAT_DATE="Y/m/d";JSON_FORMAT_TIME="H:i:s";JSON_FORMAT_DATETIME=JSON_FORMAT_DATE+" "+JSON_FORMAT_TIME;JSON_FORMAT_DATETIME_MS=JSON_FORMAT_DATETIME+"\\.u";ErrorPanelId=null;ErrorDisplayTimeout=5000;
Ext.namespace("Pld");Array.prototype.any=function(b){for(var a=0;a<this.length;a++){if(this[a][b]){return this[a][b]}}return undefined};Array.prototype.toObject=function(){var b={};for(var a=0;a<this.length;a++){b[this[a]]=true}return b};Array.prototype.compare=function(b){if(!b){return false}if(this.length!=b.length){return false}for(var a=0;a<b.length;a++){if(this[a].compare){if(!this[a].compare(b[a])){return false}}if(this[a]!==b[a]){return false}}return true};Pld.map=function(c,a,b){if(Ext.isFunction(c)){if(Ext.isArray(a)){Ext.each(a,function(e,d){a[d]=c.call(this,e)},b||this)}else{if(Ext.isObject(a)){Ext.iterate(a,function(e,d){a[e]=c.call(this,d)},b||this)}}}return a};Pld.regPage=function(a){Ext.reg(a.prototype.id+"_page",a)};Pld.hasPermission=function(){var c=Pld.User.permissions;for(var b=0,a=arguments.length;b<a;b++){if(c[arguments[b]]){return true}}return false};Pld.setUserOption=function(c,d,b){var a={};if(typeof c=="object"){a=c}else{a[c]=d}Ext.apply(Pld.User.options,a);Ext.iptego.request({url:"setUserOptions",params:{options:Ext.encode(a)},successHandler:b||Ext.emptyFn})};Pld.getUserOption=function(a,b){var c=Pld.User.options[a];return c==undefined?b:c};Pld.deleteUserOption=function(b,a){delete Pld.User.options[b];Ext.iptego.request({url:"deleteUserOption",params:{option:b},successHandler:a||Ext.emptyFn})};Pld.getDashboardDefaults=function(){return Pld.User.dashboardDefaults};Pld.SlideInMessage=function(){var b;function a(d,e,c){return['<div class="msg">','<div class="x-box-tl"><div class="x-box-tr"><div class="x-box-tc"></div></div></div>','<div class="x-box-ml"><div class="x-box-mr"><div class="x-box-mc"><h3 style="color: ',c,'">',d,"</h3>",e,"</div></div></div>",'<div class="x-box-bl"><div class="x-box-br"><div class="x-box-bc"></div></div></div>',"</div>"].join("")}return{msg:function(g,f,d){if(!b){b=Ext.DomHelper.insertFirst(document.body,{id:"msg-div"},true)}b.alignTo(document,"t-t");d=d||"black";var e=String.format.apply(String,Array.prototype.slice.call(arguments,1));var c=Ext.DomHelper.append(b,{html:a(g,e,d)},true);c.slideIn("t").pause(6).ghost("t",{remove:true})}}}();if(typeof(console)=="undefined"){console={log:function(a){},debug:function(a){},dir:function(a){}}}function info(a){Pld.SlideInMessage.msg("Info",a,"green");logHandler(a,"info")}function dump(a){logHandler(a,"dump")}function debug(a){logHandler(a,"debug")}function warning(a){Pld.SlideInMessage.msg("Warning",a,"orange");logHandler(a,"warning")}function error(a){Pld.SlideInMessage.msg("Error",a,"red");logHandler(a,"error")}Pld.createIpMenu=function(d,c,b){var a=new Ext.menu.Menu();a.add({text:Resources.get("ip.menu.whois_info"),handler:Pld.showWhoisWindow.createDelegate(this,[d])});c.stopEvent();a.showAt(c.xy)};Pld.createCallDiagram=function(b,a){return new Ext.iptego.SDWindow({url:"callDiagram",params:{id:b,pid:a}})};Pld.createRegDiagram=function(a){return new Ext.iptego.SDWindow({url:"regEvDiagram",hideOptions:["flow_show_time_difference_arrows"],params:{id:a}})};function getFixedWidth(){var a="auto";if(Ext.isIE6){a=document.documentElement.clientWidth-250}if(Ext.isIE||Ext.isSafari){a=document.documentElement.clientWidth-310}else{if(navigator.userAgent.indexOf("Firefox/3")>-1||navigator.userAgent.indexOf("Iceweasel/3")>-1||navigator.userAgent.indexOf("Minefield/3")>-1){a=window.innerWidth-290}}return a}function formFailure(a,b){if(!Ext.isEmpty(b.result)&&!Ext.isEmpty(b.result.errorMsg)){error(b.result.errorMsg)}}function formFailureMsg(a,b){if(b.failureType==Ext.form.Action.CLIENT_INVALID){Ext.iptego.defaultClientErr()}else{Ext.iptego.defaultFailure(b.result)}}function requestFailure(a,b){error("Could not connect to server!")}SrvTime=function(){var b=new Date();var a={run:function(){b=b.add(Date.SECOND,1)},interval:1000};var c={run:function(d){Ext.Ajax.request({url:"getTime",success:function(e){b=Date.parseDate(Ext.decode(e.responseText),JSON_FORMAT_DATETIME);if(d instanceof Function){d(b)}}})},interval:60*1000};return{init:function(){Ext.TaskMgr.start(a);Ext.TaskMgr.start(c)},get:function(){return b},sync:function(d){c.run(d)}}}();SrvTime.init();Ext.namespace("Ext.iptego");asciiValidate=function(b){for(var a=0;a<b.length;a++){var d=b.charCodeAt(0);if(b<32||b>127){return false}}return true};function getComponentValues(a){var b={};Ext.each(a,function(d){var c=Ext.getCmp(d);if(c){this[c.id]=c.getValue()}},b);return b}function updateLocationHashmark(b){var a=location.href.split("#")[0];location.href=a+"#"+b}function getLocationHashmark(){var b=location.href.split("#");if(b.length>1){var d=b[1];var a="nav_"+d;if(Pld.hasPermission(a)){return d}else{for(var c=0;c<Pld.Modules.length;c++){if(Pld.hasPermission("nav_"+Pld.Modules[c])){return Pld.Modules[c]}}}}return null}function disableCtxMenu(b,a){if(b.target.tagName.toLowerCase()!="img"){b.preventDefault()}}function C(a){console.log(a)}function D(a){console.dir(a)}TIME_RESOLUTIONS=["1 minute","5 minutes","10 minutes","30 minutes","1 hour","3 hours","6 hours","24 hours","3 days","7 days","30 days"];Pld.openHelpTopic=function(a){var b=HelpBaseUrl+"/"+a;window.open(b,"palladion_help")};Pld.getViewportDimensions=function(a){var b=Ext.getBody().getViewSize();if(a){b.height-=130;b.width-=180}return b};Pld.escapeDeviceName=function(a){return a.replace(/\(/g,"\\(").replace(/\)/g,"\\)")};
Pld.getNodeRelativeUrl=function(a,b){if(Ext.isEmpty(b)){return a}else{return"node/"+b+"/"+a}};Pld.showWhoisWindow=function(c,b){var a=new Ext.Window({title:"WHOIS Information",html:"",width:600,autoScroll:true,height:500,bodyStyle:Pld.WhoisBodyStyle});Pld.updateWhoisInfo(a,c,b)};Pld.WhoisBodyStyle={"background-color":"#989898",padding:"10px","font-family":"courier","font-size":"10px",color:"#ffffff"};Pld.updateWhoisInfo=function(a,c,b){Ext.iptego.request({url:Pld.getNodeRelativeUrl("getWhoisInformation",b),params:{ip:c},successHandler:function(d){var e=Pld.prettifyWhoisInfo(d.data);if(this.rendered){this.body.update(e)}else{this.html=e}this.show()}.createDelegate(a)})};Pld.prettifyWhoisInfo=function(c){var d=c.match(/\S*:/g);c=c.replace(/\n/g,"<br>").replace(/\s/g,"&nbsp;");if(d){for(var b=0;b<d.length;b++){var a=new RegExp(d[b]+"&nbsp;","g");c=c.replace(a,"<b>"+d[b]+"</b>")}}return c};function bandwidthRenderer(b){var a=1000;var c=1000*a;if(b>10*c){return largeValueRenderer(b/c)+" Mbit/s"}else{if(b>c){return floatRenderer(b/c)+" Mbit/s"}else{if(b>a){return floatRenderer(b/a)+" Kbit/s"}else{return b+" bit/s"}}}}var bytesRenderer=Ext.util.Format.fileSize;var largeValueRenderer=Ext.util.Format.numberRenderer("0,000");var floatRenderer=Ext.util.Format.numberRenderer("0,0.00");var datetimeRenderer=Ext.util.Format.dateRenderer(Date.patterns.ISO8601Long);var dateRenderer=Ext.util.Format.dateRenderer(Date.patterns.ISO8601Short);function genericColorRenderer(b,a){if(Ext.isEmpty(b)){return""}if(!Ext.isEmpty(a[b])){return'<span class="'+a[b]+'">'+b+"</span>"}else{return b}}PRIORITIES=["low","normal","high"];function priorityRenderer(a){if(Ext.isEmpty(a)){return""}a=a.constrain(0,PRIORITIES.length);return PRIORITIES[a]}STATUSES=["read","new","forwarded"];function isNewRenderer(b,a){if(Ext.isEmpty(b)){return}b=b.constrain(0,STATUSES.length);a.css="icon_"+STATUSES[b];a.attr='ext:qtip="Status: '+STATUSES[b]+' (click to change)"'}function groupCountRenderer(b){var a=0;Ext.each(b,function(c){a+=c.data.count});return a}function formatTimeInterval(b){var c=60;var a=60*c;str="";if(b>a){str+=Math.floor(b/a)+" hours ";b%=a;haveH=true}else{haveH=false}if(b>c||haveH){str+=Math.floor(b/c)+" minutes ";b%=c}str+=b+" seconds";return str}function formatTimeIntervalMs(e){if(typeof e!="number"||e<0){return""}var c="";var b=Math.floor(e/1000);if(b<10){c=(e-b*1000)+"ms"}b=Math.floor(b);var f=60;var a=60*f;var d="";if(b>a){d+=Math.floor(b/a)+"h";b%=a;haveH=true}else{haveH=false}if(b>f||haveH){d+=Math.floor(b/f)+"'";b%=f}d+=b+"''";return d+c}function formatMillisecondsTime(a){if(isNaN(a)){return a}M=60;H=60*M;secs=a/1000;str="";if(secs>H){str+=Math.floor(secs/H)+" hours ";secs%=H;haveH=true}else{haveH=false}if(secs>M||haveH){str+=Math.floor(secs/M)+" minutes ";secs%=M}str+=Math.floor(secs)+" seconds ";return str}Array.prototype.toObject=function(){var b={};for(var a=0;a<this.length;a++){b[this[a]]=true}return b};
Ext.namespace("Pld.Config");Pld.Config.UserManagement={api:{}};Pld.Config.RealmsPanel={api:{}};Pld.getCurrentUser=function(){return Pld.User};
ResourceManager=function(d){this._strings=new Object();this.publishMessage=function(g,f,e){if(typeof e=="undefined"){e=false}if(e){this._strings[g]=new Ext.XTemplate(f)}else{this._strings[g]=f}};this.get=function(h,f){try{var g=null;if(typeof this._strings[h]=="string"){g=this._strings[h]}else{if(f instanceof Array){g=this._strings[h].applyTemplate(f[0])}else{g=this._strings[h].applyTemplate(f)}}g=g.replace(/\[/g,"{");g=g.replace(/\]/g,"}");return g}catch(i){console.log("Error on reading string resource with key '",h,"' => ",i);return"Error in Resources class"}};this.initializeFromPropertiesFile=function(h){var e=h.split("\r\n");var j=[];var k=0;for(var g=0;g<e.length;g++){if(e[g].substring(0,1)=="#"){continue}var f=e[g].substring(0,e[g].indexOf("="));var l=e[g].substring(e[g].indexOf("=")+1);if(l.indexOf("{")>-1){this.publishMessage(f,l,true)}else{this.publishMessage(f,l)}j[k++]=f}};function a(){var f;if(window.XMLHttpRequest){try{f=new XMLHttpRequest()}catch(g){f=false}}else{if(window.ActiveXObject){try{f=new ActiveXObject("Microsoft.XMLHTTP")}catch(g){f=false}}}return f}var c=a();c.open("GET","res/application_resources_"+d+".properties?nocache="+new Date().getTime(),false);c.send(null);var b=c.responseText;this.initializeFromPropertiesFile(b)};Resources=new ResourceManager("en");
Pld.StoreConfigs={getRealmNames:{root:"names",fields:[{name:"id",type:"int"},{name:"name",type:"string"}]},searchUsers:{root:"users",fields:["uri"]},getSipDevicesComboStore:{fields:["id","name"],root:"data",idProperty:"id"}};Pld.getStore=function(c,b){var a=Ext.StoreMgr.lookup(c);if(!a){b=b||Pld.StoreConfigs[c];b=Ext.apply(b,{url:c,storeId:c});a=new Ext.data.JsonStore(b)}return a};Pld.RealmsBox=Ext.extend(Ext.form.ComboBox,{emptyText:Resources.get("module.user_management.select_a_realm"),disableKeyFilter:true,allowBlank:false,displayField:"name",valueField:"id",name:"realm_name",fieldLabel:"Realm",forceSelection:true,editable:false,triggerAction:"all",initComponent:function(){this.store=Pld.getStore("getRealmNames");Pld.RealmsBox.superclass.initComponent.call(this)}});Ext.reg("realms_box",Pld.RealmsBox);
Ext.grid.RowExpander=function(a){Ext.apply(this,a);this.addEvents({beforeexpand:true,expand:true,beforecollapse:true,collapse:true});Ext.grid.RowExpander.superclass.constructor.call(this);if(this.tpl){if(typeof this.tpl=="string"){this.tpl=new Ext.Template(this.tpl)}this.tpl.compile()}this.state={};this.bodyContent={}};Ext.extend(Ext.grid.RowExpander,Ext.util.Observable,{header:"",width:20,sortable:false,fixed:true,dataIndex:"",id:"expander",lazyRender:true,enableCaching:true,getRowClass:function(a,e,d,c){d.cols=d.cols-1;var b=this.bodyContent[a.id];if(!b&&!this.lazyRender){b=this.getBodyContent(a,e)}if(b){d.body=b}return this.state[a.id]?"x-grid3-row-expanded":"x-grid3-row-collapsed"},init:function(b){this.grid=b;var a=b.getView();a.getRowClass=this.getRowClass.createDelegate(this);a.enableRowBody=true;b.on("render",function(){a.mainBody.on("mousedown",this.onMouseDown,this)},this)},getBodyContent:function(a,b){if(!this.enableCaching){return this.tpl.apply(a.data)}var c=this.bodyContent[a.id];if(!c){c=this.tpl.apply(a.data);this.bodyContent[a.id]=c}return c},onMouseDown:function(b,a){if(a.className=="x-grid3-row-expander"){b.stopEvent();var c=b.getTarget(".x-grid3-row");this.toggleRow(c)}},renderer:function(b,c,a){c.cellAttr='rowspan="2"';return'<div class="x-grid3-row-expander">&#160;</div>'},beforeExpand:function(b,a,c){if(this.fireEvent("beforeexpand",this,b,a,c)!==false){if(this.tpl&&this.lazyRender){a.innerHTML=this.getBodyContent(b,c)}return true}else{return false}},toggleRow:function(a){if(typeof a=="number"){a=this.grid.view.getRow(a)}this[Ext.fly(a).hasClass("x-grid3-row-collapsed")?"expandRow":"collapseRow"](a)},expandRow:function(c){if(typeof c=="number"){c=this.grid.view.getRow(c)}var b=this.grid.store.getAt(c.rowIndex);var a=Ext.DomQuery.selectNode("tr:nth(2) div.x-grid3-row-body",c);if(this.beforeExpand(b,a,c.rowIndex)){this.state[b.id]=true;Ext.fly(c).replaceClass("x-grid3-row-collapsed","x-grid3-row-expanded");this.fireEvent("expand",this,b,a,c.rowIndex)}},collapseRow:function(c){if(typeof c=="number"){c=this.grid.view.getRow(c)}var b=this.grid.store.getAt(c.rowIndex);var a=Ext.fly(c).child("tr:nth(1) div.x-grid3-row-body",true);if(this.fireEvent("beforcollapse",this,b,a,c.rowIndex)!==false){this.state[b.id]=false;Ext.fly(c).replaceClass("x-grid3-row-expanded","x-grid3-row-collapsed");this.fireEvent("collapse",this,b,a,c.rowIndex)}}});
COUNTER_PARAM_TYPES={IntegerType:"COUNTER_PARAM_TYPES.IntegerType",MethodType:"COUNTER_PARAM_TYPES.MethodType",IpTagType:"COUNTER_PARAM_TYPES.IpTagType",TransportType:"COUNTER_PARAM_TYPES.TransportType",DirectionType:"COUNTER_PARAM_TYPES.DirectionType",TcpDirectionType:"COUNTER_PARAM_TYPES.TcpDirectionType",CallsActiveType:"COUNTER_PARAM_TYPES.CallsActiveType"};COUNTER_TRANSPORT=["TCP","UDP"];COUNTER_METHODS=[[1,"ACK"],[2,"BYE"],[3,"CANCEL"],[4,"INFO"],[5,"INVITE"],[6,"MESSAGE"],[7,"NOTIFY"],[8,"OPTIONS"],[9,"PRACK"],[10,"PUBLISH"],[11,"REGISTER"],[12,"REFER"],[13,"SUBSCRIBE"],[14,"UPDATE"]];COUNTER_DIRECTIONS=[[0,"IN"],[1,"OUT"],[2,"TRAVERSING"]];COUNTER_TCP_DIRECTIONS=[[0,"Received"],[1,"Sent"]];COUNTER_CALLS_ACTIVE_TYPES=[[0,"Established calls"],[1,"Calls in state 100 Trying"],[2,"Calls in state 180 Ringing"],[3,"Calls in state 183 Progress"]];COUNTER_TYPE_MAPPING=[{id:0,name:"CNT_TRANSPORT",title:"Transport",subtypes:[{id:0,name:"CNT_TRANSPORT_BANDW",title:"Traffic volume on selected interface",params:[{id:"param1",title:"Interface Index",type:COUNTER_PARAM_TYPES.IntegerType}]},{id:1,name:"CNT_TRANSPORT_TCP_ACTIVE_STREAMS",title:"Total number of active TCP streams"},{id:2,name:"CNT_TRANSPORT_TCP_STREAMS_CREATED",title:"Number of TCP streams created"},{id:3,name:"CNT_TRANSPORT_TCP_STREAMS_TIMEDOUT",title:"Number of TCP streams timed out"},{id:4,name:"CNT_TRANSPORT_TCP_SYN",title:"Number of TCP SYN messages"},{id:5,name:"CNT_TRANSPORT_TCP_ACK",title:"Number of TCP ACK messages"},{id:6,name:"CNT_TRANSPORT_TCP_RST",title:"Number of TCP RST messages"},{id:7,name:"CNT_TRANSPORT_TCP_FIN",title:"Number of TCP FIN messages"}]},{id:1,name:"CNT_SIP",title:"SIP messages",subtypes:[{id:0,name:"CNT_SIP_REQ",title:"Total number of SIP requests"},{id:1,name:"CNT_SIP_REPL",title:"Total number of SIP replies"},{id:2,name:"CNT_SIP_METH",title:"Number of SIP requests with a given method name",params:[{id:"param1",title:"SIP Method",type:COUNTER_PARAM_TYPES.MethodType}]},{id:3,name:"CNT_SIP_ANSW_RANGE",title:"Number of SIP responses with a given response code",params:[{id:"param1",title:"Minimum answer code",type:COUNTER_PARAM_TYPES.IntegerType,group:["param1","param2"]},{id:"param2",title:"Maximum answer code",type:COUNTER_PARAM_TYPES.IntegerType,group:["param1","param2"]}]},{id:4,name:"CNT_SIP_TRANSPORT",title:"Number of SIP messages over a given transport protocol",params:[{id:"param1",title:"Transport protocol",type:COUNTER_PARAM_TYPES.TransportType}]},{id:5,name:"CNT_SIP_UDP_FRAG",title:"Number of fragmented UDP SIP messages"}]},{id:2,name:"CNT_TM",title:"SIP Transactions",subtypes:[{id:0,name:"CNT_TM_COMPLETED",title:"Number of completed transactions"},{id:1,name:"CNT_TM_COMPLETED_METH",title:"Number of completed transaction with a given method name",params:[{id:"param1",title:"Transaction method",type:COUNTER_PARAM_TYPES.MethodType}]},{id:2,name:"CNT_TM_COMPLETED_METH_ANSW_RANGE",title:"Number of completed transaction with given method name and response code",params:[{id:"param1",title:"Transaction method",type:COUNTER_PARAM_TYPES.MethodType},{id:"param2",title:"Minimum answer code",type:COUNTER_PARAM_TYPES.IntegerType,group:["param2","param3"]},{id:"param3",title:"Maximum answer code",type:COUNTER_PARAM_TYPES.IntegerType,group:["param2","param3"]}]},{id:3,name:"CNT_TM_COMPLETED_ANSW_RANGE",title:"Number of completed transactions with a given response code",params:[{id:"param1",title:"Minimum answer code",type:COUNTER_PARAM_TYPES.IntegerType,group:["param1","param2"]},{id:"param2",title:"Maximum answer code",type:COUNTER_PARAM_TYPES.IntegerType,group:["param1","param2"]}]},{id:4,name:"CNT_TM_TIMEOUT",title:"Number of timed out transactions"},{id:5,name:"CNT_TM_COMPLETED_REQ_RETRAN",title:"Number of completed transactions with the number of request re-transmissions bigger than a given value",params:[{id:"param1",title:"Method to monitor",type:COUNTER_PARAM_TYPES.MethodType},{id:"param2",title:"Minimum number of retransmissions",type:COUNTER_PARAM_TYPES.IntegerType}]},{id:6,name:"CNT_TM_INV_FAIL_REPL_RETRAN",title:"Number of INVITE transactions completed with a code > 299 with the number of re-transmissions final response bigger than a given value",params:[{id:"param1",title:"Method to monitor",type:COUNTER_PARAM_TYPES.MethodType},{id:"param2",title:"Minimum number of retransmissions",type:COUNTER_PARAM_TYPES.IntegerType}]},{id:7,name:"CNT_TM_TIMEOUT_METH",title:"Number of timed out transactions with a certain method",params:[{id:"param1",title:"Method to monitor",type:COUNTER_PARAM_TYPES.MethodType}]}]},{id:3,name:"CNT_DLG",title:"Calls",subtypes:[{id:0,name:"CNT_DLG_CALL_ATTEMPTS",title:"Total number of call attempts"},{id:1,name:"CNT_DLG_CALLS_ESTABLISHED",title:"Number of established calls"},{id:2,name:"CNT_DLG_CALLS_CLOSED",title:"Number of closed calls"},{id:3,name:"CNT_DLG_CALLS_TIMEOUT",title:"Number of calls ended because of session timeout"},{id:4,name:"CNT_DLG_ACTIVE_CALLS",title:"Number of currently active calls",params:[{id:"param1",title:"Relevant call state",type:COUNTER_PARAM_TYPES.CallsActiveType}]},{id:5,name:"CNT_DLG_LENGTH_INTERV",title:"Number of calls with a given call length",params:[{id:"param1",title:"Call length (seconds) >=",type:COUNTER_PARAM_TYPES.IntegerType,group:["param1","param2"]},{id:"param2",title:"Call length (seconds) <",type:COUNTER_PARAM_TYPES.IntegerType,group:["param1","param2"]}]},{id:6,name:"CNT_DLG_RINGING_INTERV",title:"Number of calls with a given ringing time",params:[{id:"param1",title:"Ringing time (seconds) >=",type:COUNTER_PARAM_TYPES.IntegerType,group:["param1","param2"]},{id:"param2",title:"Ringing time (seconds) <",type:COUNTER_PARAM_TYPES.IntegerType,group:["param1","param2"]}]},{id:7,name:"CNT_DLG_CLOSED_CALLEE",title:"Number of calls closed by the callee"},{id:8,name:"CNT_DLG_ACTIVE_CALLS_PROBE",title:"Number of active calls belonging to this probe"},{id:9,name:"CNT_DLG_CLOSED_SDF",title:"Number of calls closed with a reason header in the BYE message"},{id:10,name:"CNT_DLG_FAILED_TIMEOUT",title:"Number of calls failed due to a timeout during session setup"},{id:11,name:"CNT_DLG_CLOSING_TIMEOUT",title:"Number of calls timed out while waiting for the response to the BYE message"},{id:12,name:"CNT_DLG_FAILED",title:"Number of calls failed due to a non-200 OK response to the INVITE"},{id:13,name:"CNT_DLG_INGRESS_LEG_ESTABLISHED",title:"Number of ingress legs that were established"},{id:14,name:"CNT_DLG_INGRESS_LEG_REDIRECTED",title:"Number of ingress legs where the INVITE was answered with a code from the 300 range"},{id:15,name:"CNT_DLG_INGRESS_LEG_FAILED",title:"Number of ingress legs where the INVITE was answered with a code equal or above to 400"},{id:16,name:"CNT_DLG_INGRESS_LEG_FAILED_TIMEOUT",title:"Number of ingress legs where the INVITE was not answered with a final response"},{id:17,name:"CNT_DLG_INGRESS_LEG_TIMEOUT",title:"Number of ingress legs finished due to session timeout"},{id:18,name:"CNT_DLG_INGRESS_LEG_CLOSED",title:"Number of ingress legs that where closed successfully"},{id:19,name:"CNT_DLG_INGRESS_LEG_CLOSED_SDF",title:"Number of ingress legs that where closed successfully, but with a non-empty Reason header in the BYE message"},{id:20,name:"CNT_DLG_INGRESS_LEG_CLOSING_TIMEOUT",title:"Number of ingress legs where the BYE message was not answered"},{id:21,name:"CNT_DLG_INGRESS_LEG_FAILED_ANSW_RANGE",title:"Number of ingress legs failed with a certain response code",params:[{id:"param1",title:"Lower bound for the code",type:COUNTER_PARAM_TYPES.IntegerType},{id:"param2",title:"Upper bound for the code",type:COUNTER_PARAM_TYPES.IntegerType}]}]},{id:4,name:"CNT_REG",title:"Registrations",subtypes:[{id:0,name:"CNT_REG_USERS",title:"Total number of registered users"},{id:1,name:"CNT_REG_CONTACTS",title:"Total number of registered contacts"},{id:2,name:"CNT_REG_EXPIRED",title:"Expired contacts in the last second"},{id:3,name:"CNT_REG_NEW",title:"New contacts in the last second"},{id:4,name:"CNT_REG_REFRESHED",title:"Contacts refreshed in the last second"},{id:5,name:"CNT_REG_FAILED",title:"Failed registrations in the last second"},{id:6,name:"CNT_REG_UNAUTH",title:"Unauthorized registrations in the last second"}]},{id:5,name:"CNT_MEM",title:"Memory",subtypes:[],hidden:true},{id:6,name:"CNT_DEV",title:"SIP Device Statistics",subtypes:[{id:0,name:"CNT_DEV_ACTIVE_IN",title:"Number of incoming active call legs (deprecated)",hidden:true},{id:1,name:"CNT_DEV_ACTIVE_OUT",title:"Number of outgoing active call legs (deprecated)",hidden:true},{id:2,name:"CNT_DEV_ACTIVE",title:"Number of active calls",params:[{id:"param1",title:"Direction of the call",type:COUNTER_PARAM_TYPES.DirectionType},{id:"param2",title:"Relevant call state",type:COUNTER_PARAM_TYPES.CallsActiveType}]},{id:3,name:"CNT_DEV_CALL_ATTEMPTS",title:"Number of call attempts per second",params:[{id:"param1",title:"Direction of the call",type:COUNTER_PARAM_TYPES.DirectionType}]},{id:4,name:"CNT_DEV_CALLS_ESTABLISHED",title:"Number of established calls per second",params:[{id:"param1",title:"Direction of the call",type:COUNTER_PARAM_TYPES.DirectionType}]},{id:5,name:"CNT_DEV_CALLS_CLOSED",title:"Number of closed calls per second",params:[{id:"param1",title:"Direction of the call",type:COUNTER_PARAM_TYPES.DirectionType}]},{id:6,name:"CNT_DEV_CALLS_TIMEOUT",title:"Number of session-timeouted calls per second",params:[{id:"param1",title:"Direction of the call",type:COUNTER_PARAM_TYPES.DirectionType}]},{id:7,name:"CNT_DEV_CALLS_FAILED",title:"Number of failed calls per second",params:[{id:"param1",title:"Direction of the call",type:COUNTER_PARAM_TYPES.DirectionType}]},{id:8,name:"CNT_DEV_CALLS_ANSW_RANGE",title:"Number of calls completed/established with a specific code per second",params:[{id:"param1",title:"Direction of the call",type:COUNTER_PARAM_TYPES.DirectionType},{id:"param2",title:"Lower bound for the code",type:COUNTER_PARAM_TYPES.IntegerType},{id:"param3",title:"Upper bound for the code",type:COUNTER_PARAM_TYPES.IntegerType}]},{id:9,name:"CNT_DEV_REG_USERS",title:"Number of registered users"},{id:10,name:"CNT_DEV_REG_CONTACTS",title:"Number of registered contacts"},{id:11,name:"CNT_DEV_REG_EXPIRED",title:"Number of expired contacts per second"},{id:12,name:"CNT_DEV_REG_NEW",title:"Number of new contacts per second"},{id:13,name:"CNT_DEV_REG_REFRESHED",title:"Number of refreshed contacts per second"},{id:14,name:"CNT_DEV_REG_FAILED",title:"Number of failed registrations per second"},{id:15,name:"CNT_DEV_REG_UNAUTH",title:"Number of unauthorized registrations per second"},{id:16,name:"CNT_DEV_REG_ANSW_RANGE",title:"Number of registration attempts with a specific code per second",params:[{id:"param1",title:"Lower bound for the code",type:COUNTER_PARAM_TYPES.IntegerType},{id:"param2",title:"Upper bound for the code",type:COUNTER_PARAM_TYPES.IntegerType}]},{id:17,name:"CNT_DEV_TRANSIT_TIME",title:"Transit time for this device"},{id:18,name:"CNT_DEV_RESPONSE_TIME",title:"Response time for this device"},{id:19,name:"CNT_DEV_TCP_ACTIVE_STREAMS",title:"Number of active TCP connections to/from this device"},{id:20,name:"CNT_DEV_TCP_STREAMS_CREATED",title:"Number of created TCP connections to/from this device"},{id:21,name:"CNT_DEV_TCP_STREAMS_TIMEDOUT",title:"Number of timed out TCP connections to/from this device"},{id:22,name:"CNT_DEV_TCP_SYN",title:"Number of TCP SYN messages to/from this device",params:[{id:"param1",title:"Direction of the message",type:COUNTER_PARAM_TYPES.TcpDirectionType}]},{id:23,name:"CNT_DEV_TCP_ACK",title:"Number of TCP ACK messages to/from this device",params:[{id:"param1",title:"Direction of the message",type:COUNTER_PARAM_TYPES.TcpDirectionType}]},{id:24,name:"CNT_DEV_TCP_RST",title:"Number of TCP RST messages to/from this device",params:[{id:"param1",title:"Direction of the message",type:COUNTER_PARAM_TYPES.TcpDirectionType}]},{id:25,name:"CNT_DEV_TCP_FIN",title:"Number of TCP FIN messages to/from this device",params:[{id:"param1",title:"Direction of the message",type:COUNTER_PARAM_TYPES.TcpDirectionType}]},{id:26,name:"CNT_DEV_ACTIVE_TOTAL",title:"Total number of active calls"},{id:27,name:"CNT_DEV_ACTIVE_TOTAL_WITH_TRAVERSING",title:"Total number of active calls (including traversing calls)"},{id:28,name:"CNT_AVG_AVG",title:"Average counter"}],hidden:true},{id:7,name:"CNT_IETF",title:"IETF counters",subtypes:[{id:0,name:"CNT_IETF_RRD",title:"Registration request delay"},{id:1,name:"CNT_IETF_IRA",title:"Ineffective registration attempts"},{id:2,name:"CNT_IETF_IRA_BY_CODE",title:"Ineffective registration attempts by code",params:[{id:"param1",title:"Lower bound for the code",type:COUNTER_PARAM_TYPES.IntegerType},{id:"param2",title:"Upper bound for the code",type:COUNTER_PARAM_TYPES.IntegerType}]},{id:3,name:"CNT_IETF_SSRD",title:"Successful session request delay"},{id:4,name:"CNT_IETF_FSRD",title:"Failed session request delay"},{id:5,name:"CNT_IETF_SSDD",title:"Successful session disconnect delay"},{id:6,name:"CNT_IETF_FSDD",title:"Failed session disconnectd delay"},{id:7,name:"CNT_IETF_SSDT",title:"Successful session duration time"},{id:8,name:"CNT_IETF_FSDT",title:"Failed session completion duration time"},{id:9,name:"CNT_IETF_HPR",title:"Hops per request"},{id:10,name:"CNT_IETF_SER",title:"Session establishment ratio"},{id:11,name:"CNT_IETF_SEER",title:"Session establishment effectiveness ratio"},{id:12,name:"CNT_IETF_SDR",title:"Session defects ratio"},{id:13,name:"CNT_IETF_ISA",title:"Ineffective session attempts ratio"},{id:14,name:"CNT_IETF_SDF",title:"Session disconnect failure ratio"},{id:15,name:"CNT_IETF_SSCR",title:"Successful session completion ratio"},{id:16,name:"CNT_IETF_FSCR",title:"Failed session completion ratio"},{id:17,name:"CNT_IETF_SSR",title:"Session success ratio"}]},{id:9,name:"CNT_AVG",title:"Average counter",subtypes:[{id:0,name:"CNT_AVG_AVG",title:"Average of another counter"}]}];
/*
 * Ext JS Library 3.1.1
 * Copyright(c) 2006-2010 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.namespace("Ext.ux.menu");Ext.ux.menu.ListMenu=Ext.extend(Ext.menu.Menu,{labelField:"text",loadingText:"Loading...",loadOnShow:true,single:false,constructor:function(b){this.selected=[];this.addEvents("checkchange");Ext.ux.menu.ListMenu.superclass.constructor.call(this,b=b||{});if(!b.store&&b.options){var c=[];for(var d=0,a=b.options.length;d<a;d++){var e=b.options[d];switch(Ext.type(e)){case"array":c.push(e);break;case"object":c.push([e.id,e[this.labelField]]);break;case"string":c.push([e,e]);break}}this.store=new Ext.data.Store({reader:new Ext.data.ArrayReader({id:0},["id",this.labelField]),data:c,listeners:{load:this.onLoad,scope:this}});this.loaded=true}else{this.add({text:this.loadingText,iconCls:"loading-indicator"});this.store.on("load",this.onLoad,this)}},destroy:function(){if(this.store){this.store.destroy()}Ext.ux.menu.ListMenu.superclass.destroy.call(this)},show:function(){var a=null;return function(){if(arguments.length===0){Ext.ux.menu.ListMenu.superclass.show.apply(this,a)}else{a=arguments;if(this.loadOnShow&&!this.loaded){this.store.load()}Ext.ux.menu.ListMenu.superclass.show.apply(this,arguments)}}}(),onLoad:function(c,b){var g=this.isVisible();this.hide(false);this.removeAll(true);var e=this.single?Ext.id():null;for(var d=0,a=b.length;d<a;d++){var f=new Ext.menu.CheckItem({text:b[d].get(this.labelField),group:e,checked:this.selected.indexOf(b[d].id)>-1,hideOnClick:false});f.itemId=b[d].id;f.on("checkchange",this.checkChange,this);this.add(f)}this.loaded=true;if(g){this.show()}this.fireEvent("load",this,b)},getSelected:function(){return this.selected},setSelected:function(a){a=this.selected=[].concat(a);if(this.loaded){this.items.each(function(d){d.setChecked(false,true);for(var c=0,b=a.length;c<b;c++){if(d.itemId==a[c]){d.setChecked(true,true)}}},this)}},checkChange:function(b,a){var c=[];this.items.each(function(d){if(d.checked){c.push(d.itemId)}},this);this.selected=c;this.fireEvent("checkchange",b,a)}});
/*
 * Ext JS Library 3.1.1
 * Copyright(c) 2006-2010 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.ns("Ext.ux.menu");Ext.ux.menu.RangeMenu=Ext.extend(Ext.menu.Menu,{constructor:function(c){Ext.ux.menu.RangeMenu.superclass.constructor.call(this,c);this.addEvents("update");this.updateTask=new Ext.util.DelayedTask(this.fireUpdate,this);var d,a,e,b,f;for(d=0,a=this.menuItems.length;d<a;d++){e=this.menuItems[d];if(e!=="-"){b={itemId:"range-"+e,enableKeyEvents:true,iconCls:this.iconCls[e]||"no-icon",listeners:{scope:this,keyup:this.onInputKeyUp}};Ext.apply(b,Ext.applyIf(this.fields[e]||{},this.fieldCfg[e]),this.menuItemCfgs);f=b.fieldCls||this.fieldCls;e=this.fields[e]=new f(b)}this.add(e)}},fireUpdate:function(){this.fireEvent("update",this)},getValue:function(){var a={},b,c;for(b in this.fields){c=this.fields[b];if(c.isValid()&&String(c.getValue()).length>0){a[b]=c.getValue()}}return a},setValue:function(b){var a;for(a in this.fields){this.fields[a].setValue(b[a]!==undefined?b[a]:"")}this.fireEvent("update",this)},onInputKeyUp:function(c,b){var a=b.getKey();if(a==b.RETURN&&c.isValid()){b.stopEvent();this.hide(true);return}if(c==this.fields.eq){if(this.fields.gt){this.fields.gt.setValue(null)}if(this.fields.lt){this.fields.lt.setValue(null)}}else{this.fields.eq.setValue(null)}this.updateTask.delay(this.updateBuffer)}});
/*
 * Ext JS Library 3.1.1
 * Copyright(c) 2006-2010 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.namespace("Ext.ux.grid.filter");Ext.ux.grid.filter.Filter=Ext.extend(Ext.util.Observable,{active:false,dataIndex:null,menu:null,updateBuffer:1000,constructor:function(a){Ext.apply(this,a);this.addEvents("activate","deactivate","serialize","update");Ext.ux.grid.filter.Filter.superclass.constructor.call(this);this.menu=new Ext.menu.Menu();this.init(a);if(a&&a.value){this.setValue(a.value);this.setActive(a.active!==false,true);delete a.value}},destroy:function(){if(this.menu){this.menu.destroy()}this.purgeListeners()},init:Ext.emptyFn,getValue:Ext.emptyFn,setValue:Ext.emptyFn,isActivatable:function(){return true},getSerialArgs:Ext.emptyFn,validateRecord:function(){return true},serialize:function(){var a=this.getSerialArgs();this.fireEvent("serialize",a,this);return a},fireUpdate:function(){if(this.active){this.fireEvent("update",this)}this.setActive(this.isActivatable())},setActive:function(b,a){if(this.active!=b){this.active=b;if(a!==true){this.fireEvent(b?"activate":"deactivate",this)}}}});
/*
 * Ext JS Library 3.1.1
 * Copyright(c) 2006-2010 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.ux.grid.filter.BooleanFilter=Ext.extend(Ext.ux.grid.filter.Filter,{defaultValue:false,yesText:"Yes",noText:"No",init:function(a){var c=Ext.id();this.options=[new Ext.menu.CheckItem({text:this.yesText,group:c,checked:this.defaultValue===true}),new Ext.menu.CheckItem({text:this.noText,group:c,checked:this.defaultValue===false})];this.menu.add(this.options[0],this.options[1]);for(var b=0;b<this.options.length;b++){this.options[b].on("click",this.fireUpdate,this);this.options[b].on("checkchange",this.fireUpdate,this)}},getValue:function(){return this.options[0].checked},setValue:function(a){this.options[a?0:1].setChecked(true)},getSerialArgs:function(){var a={type:"boolean",value:this.getValue()};return a},validateRecord:function(a){return a.get(this.dataIndex)==this.getValue()}});
/*
 * Ext JS Library 3.1.1
 * Copyright(c) 2006-2010 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.ux.grid.filter.DateFilter=Ext.extend(Ext.ux.grid.filter.Filter,{afterText:"After",beforeText:"Before",compareMap:{before:"lt",after:"gt",on:"eq"},dateFormat:"m/d/Y",menuItems:["before","after","-","on"],menuItemCfgs:{selectOnFocus:true,width:125},onText:"On",pickerOpts:{},init:function(c){var g,d,a,e,b,f;g=Ext.apply(this.pickerOpts,{minDate:this.minDate,maxDate:this.maxDate,format:this.dateFormat,listeners:{scope:this,select:this.onMenuSelect}});this.fields={};for(d=0,a=this.menuItems.length;d<a;d++){e=this.menuItems[d];if(e!=="-"){b={itemId:"range-"+e,text:this[e+"Text"],menu:new Ext.menu.DateMenu(Ext.apply(g,{itemId:e})),listeners:{scope:this,checkchange:this.onCheckChange}};f=Ext.menu.CheckItem;e=this.fields[e]=new f(b)}this.menu.add(e)}},onCheckChange:function(){this.setActive(this.isActivatable());this.fireEvent("update",this)},onInputKeyUp:function(c,b){var a=b.getKey();if(a==b.RETURN&&c.isValid()){b.stopEvent();this.menu.hide(true);return}},onMenuSelect:function(c,d,b){var a=this.fields,e=this.fields[c.itemId];e.setChecked(true);if(e==a.on){a.before.setChecked(false,true);a.after.setChecked(false,true)}else{a.on.setChecked(false,true);if(e==a.after&&a.before.menu.picker.value<d){a.before.setChecked(false,true)}else{if(e==a.before&&a.after.menu.picker.value>d){a.after.setChecked(false,true)}}}this.fireEvent("update",this)},getValue:function(){var b,a={};for(b in this.fields){if(this.fields[b].checked){a[b]=this.fields[b].menu.picker.getValue()}}return a},setValue:function(c,b){var a;for(a in this.fields){if(c[a]){this.fields[a].menu.picker.setValue(c[a]);this.fields[a].setChecked(true)}else{if(!b){this.fields[a].setChecked(false)}}}this.fireEvent("update",this)},isActivatable:function(){var a;for(a in this.fields){if(this.fields[a].checked){return true}}return false},getSerialArgs:function(){var a=[];for(var b in this.fields){if(this.fields[b].checked){a.push({type:"date",comparison:this.compareMap[b],value:this.getFieldValue(b).format(this.dateFormat)})}}return a},getFieldValue:function(a){return this.fields[a].menu.picker.getValue()},getPicker:function(a){return this.fields[a].menu.picker},validateRecord:function(a){var b,d,c=a.get(this.dataIndex);if(!Ext.isDate(c)){return false}c=c.clearTime(true).getTime();for(b in this.fields){if(this.fields[b].checked){d=this.getFieldValue(b).clearTime(true).getTime();if(b=="before"&&d<=c){return false}if(b=="after"&&d>=c){return false}if(b=="on"&&d!=c){return false}}}return true}});
Ext.ux.grid.filter.DatetimeFilter=Ext.extend(Ext.ux.grid.filter.DateFilter,{filterType:"datetime",dateTimeFormat:Date.patterns.ISO8601Long,dateFormat:Date.patterns.ISO8601Short,init:function(c){var g,d,a,e,b,f;g=Ext.apply(this.pickerOpts,{minDate:this.minDate,maxDate:this.maxDate,format:this.dateTimeFormat,datetimeAspect:true,listeners:{scope:this,select:this.onMenuSelect}});this.fields={};for(d=0,a=this.menuItems.length;d<a;d++){e=this.menuItems[d];if(e!=="-"){b={itemId:"range-"+e,text:this[e+"Text"],menu:new Ext.menu.DateMenu(Ext.apply({},{dateOnly:e=="on",format:e=="on"?this.dateFormat:this.dateTimeFormat,itemId:e},g)),listeners:{scope:this,checkchange:this.onCheckChange}};f=Ext.menu.CheckItem;e=this.fields[e]=new f(b)}this.menu.add(e)}},serialize:function(){var a=[];if(this.fields.before.checked){a=[{type:this.filterType,comparison:"lt",value:this.getFieldValue("before").format(this.dateTimeFormat)}]}if(this.fields.after.checked){a.push({type:this.filterType,comparison:"gt",value:this.getFieldValue("after").format(this.dateTimeFormat)})}if(this.fields.on.checked){a={type:this.filterType,comparison:"eq",value:this.getFieldValue("on").format(this.dateFormat)}}this.fireEvent("serialize",a,this);return a},validateRecord:function(a){var b=a.get(this.dataIndex).clearTime(true).getTime();if(this.fields.on.checked&&b!=this.getFieldValue("on").clearTime(true).getTime()){return false;b=a.get(this.dataIndex).getTime()}if(this.fields.before.checked&&b>=this.getFieldValue("before").getTime()){return false}if(this.fields.after.checked&&b<=this.getFieldValue("after").getTime()){return false}return true}});
/*
 * Ext JS Library 3.1.1
 * Copyright(c) 2006-2010 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.ux.grid.filter.NumericFilter=Ext.extend(Ext.ux.grid.filter.Filter,{fieldCls:Ext.form.NumberField,iconCls:{gt:"ux-rangemenu-gt",lt:"ux-rangemenu-lt",eq:"ux-rangemenu-eq",neq:"ux-rangemenu-neq"},menuItemCfgs:{emptyText:"Enter a number...",selectOnFocus:true,width:125},menuItems:["lt","gt","-","eq","neq"],init:function(a){if(this.menu){this.menu.destroy()}this.menu=new Ext.ux.menu.RangeMenu(Ext.apply(a,{fieldCfg:this.fieldCfg||{},fieldCls:this.fieldCls,fields:this.fields||{},iconCls:this.iconCls,menuItemCfgs:this.menuItemCfgs,menuItems:this.menuItems,updateBuffer:this.updateBuffer}));this.menu.on("update",this.fireUpdate,this)},getValue:function(){return this.menu.getValue()},setValue:function(a){this.menu.setValue(a)},isActivatable:function(){var a=this.getValue();for(key in a){if(a[key]!==undefined){return true}}return false},getSerialArgs:function(){var c,b=[],a=this.menu.getValue();for(c in a){b.push({type:"numeric",comparison:c,value:a[c]})}return b},validateRecord:function(a){var c=a.get(this.dataIndex),b=this.getValue();if(b.eq!==undefined&&c!=b.eq){return false}if(b.neq!==undefined&&c==b.neq){return false}if(b.lt!==undefined&&c>=b.lt){return false}if(b.gt!==undefined&&c<=b.gt){return false}return true}});
/*
 * Ext JS Library 3.1.1
 * Copyright(c) 2006-2010 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.ux.grid.filter.StringFilter=Ext.extend(Ext.ux.grid.filter.Filter,{iconCls:"ux-gridfilter-text-icon",emptyText:"Enter Filter Text...",selectOnFocus:true,width:125,init:function(a){Ext.applyIf(a,{enableKeyEvents:true,iconCls:this.iconCls,listeners:{scope:this,keyup:this.onInputKeyUp}});this.inputItem=new Ext.form.TextField(a);this.menu.add(this.inputItem);this.updateTask=new Ext.util.DelayedTask(this.fireUpdate,this)},getValue:function(){return this.inputItem.getValue()},setValue:function(a){this.inputItem.setValue(a);this.fireEvent("update",this)},isActivatable:function(){return this.inputItem.getValue().length>0},getSerialArgs:function(){return{type:"string",value:this.getValue()}},validateRecord:function(a){var b=a.get(this.dataIndex);if(typeof b!="string"){return(this.getValue().length===0)}return b.toLowerCase().indexOf(this.getValue().toLowerCase())>-1},onInputKeyUp:function(c,b){var a=b.getKey();if(a==b.RETURN&&c.isValid()){b.stopEvent();this.menu.hide(true);return}this.updateTask.delay(this.updateBuffer)}});
/*
 * Ext JS Library 3.1.1
 * Copyright(c) 2006-2010 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.ux.grid.filter.ListFilter=Ext.extend(Ext.ux.grid.filter.Filter,{phpMode:false,init:function(a){this.dt=new Ext.util.DelayedTask(this.fireUpdate,this);if(this.menu){this.menu.destroy()}this.menu=new Ext.ux.menu.ListMenu(a);this.menu.on("checkchange",this.onCheckChange,this)},getValue:function(){return this.menu.getSelected()},setValue:function(a){this.menu.setSelected(a);this.fireEvent("update",this)},isActivatable:function(){return this.getValue().length>0},getSerialArgs:function(){var a={type:"list",value:this.phpMode?this.getValue().join(","):this.getValue()};return a},onCheckChange:function(){this.dt.delay(this.updateBuffer)},validateRecord:function(a){return this.getValue().indexOf(a.get(this.dataIndex))>-1}});
/*
 * Ext JS Library 3.1.1
 * Copyright(c) 2006-2010 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.namespace("Ext.ux.grid");Ext.ux.grid.GridFilters=Ext.extend(Ext.util.Observable,{autoReload:true,filterCls:"ux-filtered-column",local:false,menuFilterText:"Filters",paramPrefix:"filter",showMenu:true,stateId:undefined,updateBuffer:500,constructor:function(a){a=a||{};this.deferredUpdate=new Ext.util.DelayedTask(this.reload,this);this.filters=new Ext.util.MixedCollection();this.filters.getKey=function(b){return b?b.dataIndex:null};this.addFilters(a.filters);delete a.filters;Ext.apply(this,a)},init:function(a){if(a instanceof Ext.grid.GridPanel){this.grid=a;this.bindStore(this.grid.getStore(),true);if(this.filters.getCount()==0){this.addFilters(this.grid.getColumnModel())}this.grid.filters=this;this.grid.addEvents({filterupdate:true});a.on({scope:this,beforestaterestore:this.applyState,beforestatesave:this.saveState,beforedestroy:this.destroy,reconfigure:this.onReconfigure});if(a.rendered){this.onRender()}else{a.on({scope:this,single:true,render:this.onRender})}}else{if(a instanceof Ext.PagingToolbar){this.toolbar=a}}},applyState:function(b,d){var a,c;this.applyingState=true;this.clearFilters();if(d.filters){for(a in d.filters){c=this.filters.get(a);if(c){c.setValue(d.filters[a]);c.setActive(true)}}}this.deferredUpdate.cancel();if(this.local){this.reload()}delete this.applyingState},saveState:function(a,c){var b={};this.filters.each(function(d){if(d.active){b[d.dataIndex]=d.getValue()}});return(c.filters=b)},onRender:function(){this.grid.getView().on("refresh",this.onRefresh,this);this.createMenu()},destroy:function(){this.removeAll();this.purgeListeners();if(this.filterMenu){Ext.menu.MenuMgr.unregister(this.filterMenu);this.filterMenu.destroy();this.filterMenu=this.menu.menu=null}},removeAll:function(){if(this.filters){Ext.destroy.apply(Ext,this.filters.items);this.filters.clear()}},bindStore:function(a,b){if(!b&&this.store){if(this.local){a.un("load",this.onLoad,this)}else{a.un("beforeload",this.onBeforeLoad,this)}}if(a){if(this.local){a.on("load",this.onLoad,this)}else{a.on("beforeload",this.onBeforeLoad,this)}}this.store=a},onReconfigure:function(){this.bindStore(this.grid.getStore());this.store.clearFilter();this.removeAll();this.addFilters(this.grid.getColumnModel());this.updateColumnHeadings()},createMenu:function(){var a=this.grid.getView(),b=a.hmenu;if(this.showMenu&&b){this.sep=b.addSeparator();this.filterMenu=new Ext.menu.Menu({id:this.grid.id+"-filters-menu"});this.menu=b.add({checked:false,itemId:"filters",text:this.menuFilterText,menu:this.filterMenu});this.menu.on({scope:this,checkchange:this.onCheckChange,beforecheckchange:this.onBeforeCheck});b.on("beforeshow",this.onMenu,this)}this.updateColumnHeadings()},getMenuFilter:function(){var a=this.grid.getView();if(!a||a.hdCtxIndex===undefined){return null}return this.filters.get(a.cm.config[a.hdCtxIndex].dataIndex)},onMenu:function(b){var a=this.getMenuFilter();if(a){this.menu.menu=a.menu;this.menu.setChecked(a.active,false);this.menu.setDisabled(a.disabled===true)}this.menu.setVisible(a!==undefined);this.sep.setVisible(a!==undefined)},onCheckChange:function(a,b){this.getMenuFilter().setActive(b)},onBeforeCheck:function(a,b){return !b||this.getMenuFilter().isActivatable()},onStateChange:function(b,a){if(b==="serialize"){return}if(a==this.getMenuFilter()){this.menu.setChecked(a.active,false)}if((this.autoReload||this.local)&&!this.applyingState){this.deferredUpdate.delay(this.updateBuffer)}this.updateColumnHeadings();if(!this.applyingState){this.grid.saveState()}this.grid.fireEvent("filterupdate",this,a)},onBeforeLoad:function(a,b){b.params=b.params||{};this.cleanParams(b.params);var c=this.buildQuery(this.getFilterData());Ext.apply(b.params,c)},onLoad:function(a,b){a.filterBy(this.getRecordFilter())},onRefresh:function(){this.updateColumnHeadings()},updateColumnHeadings:function(){var b=this.grid.getView(),c,a,d;if(b.mainHd){for(c=0,a=b.cm.config.length;c<a;c++){d=this.getFilter(b.cm.config[c].dataIndex);Ext.fly(b.getHeaderCell(c))[d&&d.active?"addClass":"removeClass"](this.filterCls)}}},reload:function(){if(this.local){this.grid.store.clearFilter(true);this.grid.store.filterBy(this.getRecordFilter())}else{var b,a=this.grid.store;this.deferredUpdate.cancel();if(this.toolbar){b=a.paramNames.start;if(a.lastOptions&&a.lastOptions.params&&a.lastOptions.params[b]){a.lastOptions.params[b]=0}}a.reload()}},getRecordFilter:function(){var c=[],a,b;this.filters.each(function(d){if(d.active){c.push(d)}});a=c.length;return function(d){for(b=0;b<a;b++){if(!c[b].validateRecord(d)){return false}}return true}},addFilter:function(a){var c=this.getFilterClass(a.type),b=a.menu?a:(new c(a));this.filters.add(b);Ext.util.Observable.capture(b,this.onStateChange,this);return b},addFilters:function(f){if(f){var c,b,e,a=false,d;if(f instanceof Ext.grid.ColumnModel){f=f.config;a=true}for(c=0,b=f.length;c<b;c++){e=false;if(a){d=f[c].dataIndex;e=f[c].filter||f[c].filterable;if(e){e=(e===true)?{}:e;Ext.apply(e,{dataIndex:d});e.type=e.type||this.store.fields.get(d).type}}else{e=f[c]}if(e){this.addFilter(e)}}}},getFilter:function(a){return this.filters.get(a)},clearFilters:function(){this.filters.each(function(a){a.setActive(false)})},getFilterData:function(){var c=[],b,a;this.filters.each(function(e){if(e.active){var g=[].concat(e.serialize());for(b=0,a=g.length;b<a;b++){c.push({field:e.dataIndex,data:g[b]})}}});return c},buildQuery:function(b){var a={},c,h,j,e,k,d,g=b.length;if(!this.encode){for(c=0;c<g;c++){h=b[c];j=[this.paramPrefix,"[",c,"]"].join("");a[j+"[field]"]=h.field;e=j+"[data]";for(k in h.data){a[[e,"[",k,"]"].join("")]=h.data[k]}}}else{d=[];for(c=0;c<g;c++){h=b[c];d.push(Ext.apply({},{field:h.field},h.data))}if(d.length>0){a[this.paramPrefix]=Ext.util.JSON.encode(d)}}return a},cleanParams:function(c){if(this.encode){delete c[this.paramPrefix]}else{var b,a;b=new RegExp("^"+this.paramPrefix+"[[0-9]+]");for(a in c){if(b.test(a)){delete c[a]}}}},getFilterClass:function(a){switch(a){case"auto":a="string";break;case"int":case"float":a="numeric";break}return Ext.ux.grid.filter[a.substr(0,1).toUpperCase()+a.substr(1)+"Filter"]}});Ext.preg("gridfilters",Ext.ux.grid.GridFilters);
Ext.iptego.defaultSuccess=function(a){info("Settings succesfully applied")};Ext.iptego.defaultFailure=function(a){Ext.Msg.show({title:"Error",msg:a.errorMsg,buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.ERROR})};Ext.iptego.defaultConnectErr=Ext.emptyFn;Ext.iptego.defaultClientErr=function(){error("Please fill out the form properly.")};Ext.iptego.request=function(a,b){a.successHandler=a.successHandler||Ext.iptego.defaultSuccess;a.failureHandler=a.failureHandler||Ext.iptego.defaultFailure;a.connectErrHandler=a.connectErrHandler||Ext.iptego.defaultConnectErr;b=b||this;if(!Ext.isEmpty(a.confirmMsg)){Ext.MessageBox.show({title:a.confirmTitle||"Confirm",msg:a.confirmMsg,fn:function(d){if(d=="ok"){a.confirmMsg=null;Ext.iptego.request(a,b)}},buttons:Ext.MessageBox.OKCANCEL,icon:Ext.MessageBox.WARNING});return}var c=null;if(!Ext.isEmpty(a.waitMsg)){Ext.MessageBox.wait(a.waitMsg,a.waitTitle||"Please Wait...")}a.success=function(e){if(!Ext.isEmpty(a.waitMsg)){Ext.MessageBox.updateProgress(1);Ext.MessageBox.hide()}var d=Ext.decode(e.responseText);if(d.success===true){a.successHandler.call(b,d)}else{a.failureHandler.call(b,d)}};a.failure=function(d){if(!Ext.isEmpty(a.waitMsg)){Ext.MessageBox.updateProgress(1);Ext.MessageBox.hide()}a.connectErrHandler.call(b,d)};Ext.Ajax.request(a)};Ext.iptego.requestFile=function(a){var c="iptego-download-form";var b=Ext.get(c);if(Ext.isEmpty(b)){b=Ext.DomHelper.append(document.body,{tag:"form",method:"POST",id:c});document.body.appendChild(b)}a.form=b;a.isUpload=true;Ext.Ajax.request(a)};
Ext.state.Manager.setProvider(new Ext.state.CookieProvider());Ext.layout.PanelLayout=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:true,onLayout:function(b,c){Ext.layout.FitLayout.superclass.onLayout.call(this,b,c);if(!this.container.collapsed){var a=c.getViewSize(true).width;b.items.each(function(d){d.setWidth(a)})}}});Ext.Container.LAYOUTS.panel=Ext.layout.PanelLayout;Ext.iptego.StatefulPanel=Ext.extend(Ext.Panel,{maskMsg:null,layout:"fit",stateful:true,animCollapse:false,stateEvents:["collapse","expand"],getState:function(){return{collapsed:this.collapsed}},applyState:function(a){this.collapsed=a.collapsed},titleCollapse:true,border:true,baseCls:"iptego-panel",collapsedCls:"iptego-panel-collapsed",listeners:{beforecollapse:function(){this.cascade(function(a){a.fireEvent("hide",a)},this)},beforeexpand:function(){this.cascade(function(a){a.fireEvent("show",a)},this)}},afterRender:function(){Ext.iptego.StatefulPanel.superclass.afterRender.apply(this,arguments);if(this.header&&this.headerAsText&&this.title&&this.info){var a={tag:"img",src:"images/icon_info.png",style:"margin-left: 8px;cursor:help;"};var b=Ext.DomHelper.append(this.header,a);Ext.QuickTips.register({target:b,text:this.info});if(this.topic&&Pld.hasPermission("view_help")){Ext.fly(b).on("click",function(c,e,d){Pld.openHelpTopic(this.topic);c.stopPropagation()},this)}}this.mask()},mask:function(a){if(a){this.maskMsg=a}if(this.rendered&&this.maskMsg){if(!this.body.isMasked()){this.body.mask(this.maskMsg)}}},unmask:function(){if(this.rendered){if(this.body.isMasked()){this.body.unmask()}}this.maskMsg=null}});Ext.reg("spanel",Ext.iptego.StatefulPanel);
Ext.iptego.Chart=Ext.extend(Ext.Panel,{height:400,url:null,updateInterval:0,border:true,autoRefresher:true,timeSlider:null,timeSliderMin:0,timeSliderMax:TIME_RESOLUTIONS.length-1,goToNow:false,slider:null,refresher:null,baseParams:null,image:null,barItems:null,initComponent:function(){this.addEvents("load","beforeload");this.baseParams=this.baseParams||{};this.barItems=[];if(this.timeSlider){var a=this.timeSliderMax-this.timeSliderMin+1;this.slider=new Ext.Slider({width:20*a,value:this.timeSlider,increment:1,minValue:this.timeSliderMin,maxValue:this.timeSliderMax,plugins:new Ext.iptego.TimeSliderTip()});this.slider.on("change",this.onTimeScaleChange.createDelegate(this));this.barItems=this.barItems.concat(["Time scale:",TIME_RESOLUTIONS[this.timeSliderMin],this.slider,TIME_RESOLUTIONS[this.timeSliderMax]],"-")}if(this.goToNow){this.barItems.push({text:"Go to now",handler:this.onGoToNow,scope:this})}if(this.autoRefresher){if(!Ext.isEmpty(this.barItems)){this.barItems.push("-")}this.refresher=new Ext.iptego.AutoRefresher({defaultInterval:this.updateInterval,target:this});this.barItems.push(this.refresher)}if(!this.bbar){this.bbar=[]}this.bbar.push("->");this.bbar=this.bbar.concat(this.barItems);Ext.iptego.Chart.superclass.initComponent.call(this)},onTimeScaleChange:function(a,b){this.baseParams.timescale=b;this.load()},onGoToNow:function(){this.load({now:true});if(this.refresher&&!this.refreshing){var a=this.refresher.getInterval()||this.updateInterval;if(a){this.refresher.setInterval(a,true)}}},afterRender:function(){Ext.iptego.Chart.superclass.afterRender.apply(this,arguments);if(this.body.getHeight()<this.height){this.body.setHeight(this.height)}this.image=this.body.createChild({tag:"img"});this.on("hide",function(){if(this.refresher){this.refresher.stopTask()}},this);this.on("show",function(){this.body.mask("Loading chart...");this.image.on("load",this.unMask,this);if(!this.refresher||!this.refresher.startTask()){this.load()}},this);this.on("resize",function(){if(this.image&&this.isVisible()){this.load()}},this);this.on("enable",this.onEnable,this)},onEnable:function(){this.un("enable",this.onEnable,this);this.fireEvent("show",this)},unMask:function(){this.body.unmask();this.image.un("load",this.unMask)},load:function(a){if(!this.image){return}if(this.autoRefreshProcId){clearTimeout(this.autoRefreshProcId)}if(!this.fireEvent("beforeload",this)){return}var b=function(){this.fireEvent("load",this);this.image.un("load",b,this)};this.image.on("load",b,this);a=a||{};this.baseParams.width=this.getInnerWidth()||this.baseParams.width;this.baseParams.height=this.getInnerHeight()||this.baseParams.height;this.baseParams.nocache=new Date().getTime();Ext.applyIf(a,this.baseParams);this.image.dom.src=this.url+"?"+Ext.urlEncode(a)},autoRefresh:function(){if(!this.refreshing){return}this.autoRefreshProcId=setTimeout(this.load.createDelegate(this,[null]),this.interval)},startAutoRefresh:function(a){this.refreshing=true;this.interval=a||this.updateInterval*1000;if(this.image){this.image.on("load",this.autoRefresh,this);this.load()}},stopAutoRefresh:function(){if(this.autoRefreshProcId){clearTimeout(this.autoRefreshProcId)}if(this.image){this.image.un("load",this.autoRefresh,this)}this.refreshing=false}});Ext.reg("chart",Ext.iptego.Chart);
Ext.namespace("Ext.iptego");Ext.iptego.Config={defaultGridConfig:{height:400,border:false,pageSize:30,displayMsg:true,selectionType:"rowclick",selectionMode:"single"},defaultUpdateIntervals:{updateIntervals:[{name:Resources.get("interval.off"),value:0},{name:Resources.get("interval.2"),value:2},{name:Resources.get("interval.5"),value:5},{name:Resources.get("interval.10"),value:10},{name:Resources.get("interval.30"),value:30},{name:Resources.get("interval.60"),value:60}]}};
Ext.iptego.AutoRefresher=Ext.extend(Ext.Toolbar.SplitButton,{updateIntervals:null,defaultInterval:0,handlers:null,target:null,tooltip:Resources.get("button.refresh"),iconCls:"x-tbar-loading",handler:function(){for(var a=0;a<this.handlers.length;a++){this.handlers[a]()}},unwantedIntervals:null,timerTask:null,interval:0,initComponent:function(){this.handlers=this.handlers||[Ext.emptyFn];if(!this.updateIntervals){Ext.apply(this,Ext.iptego.Config.defaultUpdateIntervals)}if(this.target&&this.target.load){this.handlers.push(this.target.load.createDelegate(this.target))}this.interval=this.defaultInterval*1000;Ext.iptego.AutoRefresher.superclass.initComponent.apply(this,arguments)},setInterval:function(b,a){this.onIntervalChange(null,true,b,a);this.menu=this.buildMenu()},getInterval:function(){return this.defaultInterval},stopTask:function(){if(this.target){this.target.stopAutoRefresh()}else{try{Ext.TaskMgr.stop(this.timerTask)}catch(a){}}},startTask:function(){this.stopTask();if(this.interval>0){if(this.target){this.target.startAutoRefresh(this.interval)}else{this.timerTask={run:this.handler.createDelegate(this),interval:this.interval};Ext.TaskMgr.start(this.timerTask)}return true}return false},onIntervalChange:function(b,a,c,d){if(!a){return}this.defaultInterval=c;this.interval=c*1000;if(d){this.startTask.defer(this.interval,this)}else{this.startTask()}},buildMenu:function(){var d=["<b>"+Resources.get("autorefresh.title")+"</b>"];var c=new Date().getTime();for(var f=0;f<this.updateIntervals.length;f++){var a=this.updateIntervals[f];var g=false;if(this.unwantedIntervals){for(var e=0;e<this.unwantedIntervals.length;e++){if(this.unwantedIntervals[e]==a.value){g=true}}}if(g){continue}var b=this.defaultInterval==a.value;d.push({text:a.name,interval:this.updateIntervals[f].value,checked:b,group:"__autoRefresh"+c,checkHandler:this.onIntervalChange.createDelegate(this,[a.value],true)})}return new Ext.menu.Menu({items:d})},onShow:function(a){this.startTask()},onRender:function(b,a){Ext.iptego.AutoRefresher.superclass.onRender.call(this,b,a);this.menu=this.buildMenu();this.on("show",this.onShow,this);this.on("hide",this.stopTask,this)}});
Ext.iptego.ClickTip=Ext.extend(Ext.ToolTip,{autoHide:false,draggable:true,closable:true,constrainPosition:false,constrain:true,iconColor:null,initTarget:function(){if(this.target){this.target=Ext.get(this.target);this.target.on("click",this.onTargetClick,this)}},onRender:function(b,a){Ext.iptego.ClickTip.superclass.onRender.apply(this,arguments);if(this.header){this.el.on("mousedown",this.onMouseDown,this)}},afterRender:function(){Ext.iptego.ClickTip.superclass.afterRender.apply(this,arguments);if(this.header&&this.headerAsText&&this.title&&this.iconColor){var a={cls:"icon_colorbox",style:"background-color: "+this.iconColor};Ext.DomHelper.insertFirst(this.header,a)}},onTargetClick:function(b){this.targetXY=b.getXY();this.show();if(this.dd){var a={bottom:20+this.getSize().height*-1};a=Ext.applyIf(a,this.dd.defaultPadding);this.dd.constrainTo(this.container,a)}},onMouseDown:function(a){this.fireEvent("activate",this)},onDestroy:function(){if(this.manager){this.manager.unregister(this)}if(this.target){this.target.un("click",this.onTargetClick,this)}if(this.header){this.el.un("mousedown",this.onMouseDown,this)}Ext.iptego.ClickTip.superclass.onDestroy.call(this)},setActive:function(a){},setZIndex:function(a){Ext.Layer.prototype.setZIndex.call(this.el,a)}});
Ext.iptego.FieldTip=function(a){a=a||{};var b;function c(){var d=b.container.child("label");if(!d){d=b.container.up(".x-form-item").child("label")}var e={tag:"img",src:"images/icon_info.png",style:"margin-left: 8px"};var f=Ext.DomHelper.append(d,e);Ext.QuickTips.register({target:f,text:a.text,title:a.title||""});if(a.topic&&Pld.hasPermission("view_help")){Ext.fly(f).on("click",function(g,i,h){Pld.openHelpTopic(a.topic);g.stopPropagation()},this)}}return{init:function(d){b=d;b.on("render",c)}}};
Ext.iptego.FilterField=Ext.extend(Ext.form.TriggerField,{validationEvent:false,validateOnBlur:false,hideTrigger:true,triggerClass:"x-form-clear-trigger",enableKeyEvents:true,width:200,initComponent:function(){Ext.iptego.FilterField.superclass.initComponent.call(this);this.addEvents("filterchanged");this.on("keyup",this.checkValue,this)},onRender:function(b,a){Ext.iptego.FilterField.superclass.onRender.apply(this,arguments);this.trigger.setRight("0px")},checkValue:function(){var a=this.getRawValue();this.trigger.setVisible(!Ext.isEmpty(a));this.fireEvent("filterchanged",this,a)},onTriggerClick:function(a){this.reset();this.checkValue()}});Ext.reg("filterfield",Ext.iptego.FilterField);
Ext.namespace("Ext.iptego");Ext.iptego.Grid=Ext.extend(Ext.grid.GridPanel,{border:true,stateful:true,autoExpandMax:800,selectionMode:"single",selectionType:"rowclick",actions:null,topToolbar:null,topToolbarItems:null,pageingToolbar:null,refresher:null,contextMenu:null,rowNumberer:false,autoTypedBackend:true,useToolbarAsContextmenu:false,preventCheckAll:false,pagingToolbarItems:[],initComponent:function(){Ext.applyIf(this,Ext.iptego.Config.defaultGridConfig);this.resourceid=this.resourceid||this.id;this.stateId=this.stateId||this.id;this.singleSelect=this.selectionMode=="single";this.actions=this.actions||{};this.plugins=this.plugins||[];this.viewConfig=this.viewConfig||{};if(typeof this.store=="string"){if(!this.autoTypedBackend){this.store=new Ext.data.JsonStore({url:this.store,fields:this.columns})}else{this.store=new Ext.data.JsonStore({url:this.store})}}if(!this.viewConfig.emptyText){this.viewConfig.emptyText=Resources.get(this.resourceid+".emptymsg")}if(this.selectionType=="rowclick"){this.selectionModel=new Ext.grid.RowSelectionModel({singleSelect:this.singleSelect})}else{if(this.selectionType="checkbox"){var h={singleSelect:this.singleSelect};if(this.preventCheckAll){h.header=""}this.selectionModel=new Ext.grid.CheckboxSelectionModel(h);this.store.on("load",function(k,m){var l=k.query("selected",true);var n=this.getSelectionModel();n.suspendEvents();n.selectRecords(l.getRange());n.resumeEvents()},this)}}this.sm=this.selectionModel;for(var e=0;e<this.columns.length;e++){var b=this.columns[e];if(!Ext.isEmpty(b)){if(Ext.isEmpty(b.header)){b.header=Resources.get(this.resourceid+".column."+b.dataIndex)}}}if(this.selectionType=="checkbox"){this.columns.unshift(this.selectionModel)}if(this.rowNumberer){this.columns.unshift(new Ext.ux.PagingRowNumberer())}if(this.expander){this.plugins[this.plugins.length]=this.expander;this.columns.unshift(this.expander)}if(this.filters){this.plugins[this.plugins.length]=this.filters}if(this.topToolbar!=null){var f=[];this.topToolbarItems=this.topToolbar;var j=[];var d=[];for(var e=0;e<this.topToolbar.length;e++){var a=this.topToolbar[e];var g=null;if(typeof a=="string"){if(a=="filter"){f.push({id:this.resourceid+"_filterinput",xtype:"textfield",selectOnFocus:true});g={id:"iptegofilter_btn",text:Resources.get(this.resourceid+".button.filter"),handler:this.onTriggerSearch.createDelegate(this)}}else{g=a}}else{g=a;if(!(a instanceof Ext.iptego.AutoRefresher)&&a.name){g.id=g.id||this.id+"-button-"+a.name;if(g.selectionRequired){j.push(g.id);g.disabled=true}if(g.singleSelectionRequired){d.push(g.id);g.disabled=true}if(Ext.isEmpty(g.iconCls)){g.text=Resources.get(this.resourceid+".button."+a.name)}if(!g.menu){g.handler=this.handleAction.createDelegate(this,[a.name])}}}f.push(g);if(a.name){this.actions[a.name]=a}}this.tbar=new Ext.Toolbar(f)}if(this.pageSize&&this.pageing!==false){config={xtype:"paging",pageSize:this.pageSize,store:this.store,displayInfo:true,items:this.pagingToolbarItems,displayMsg:this.pagingMsg||Resources.get(this.resourceid+".pagingmsg")};if(this.totalCountUrl){config.xtype="decoupled_paging";config.totalCountUrl=this.totalCountUrl}this.bbar=Ext.ComponentMgr.create(config);if(this.refresher instanceof Ext.iptego.AutoRefresher){this.bbar.on("beforechange",this.refresher.setInterval.createDelegate(this.refresher,[0]))}}if(this.filters&&this.refresher instanceof Ext.iptego.AutoRefresher){this.on("filterupdate",this.refresher.setInterval.createDelegate(this.refresher,[0]))}if(this.filters&&this.bbar instanceof Ext.iptego.DecoupledPagingToolbar){this.on("filterupdate",this.bbar.resetCount.createDelegate(this.bbar))}Ext.iptego.Grid.superclass.initComponent.call(this);if((j&&j.length)||(d&&d.length)){var c=this.getSelectionModel();c.on("selectionchange",function(o){var m=!o.hasSelection();for(var n=0;n<j.length;n++){var k=Ext.getCmp(j[n]);k.setDisabled(m)}for(var l=0;l<d.length;l++){var k=Ext.getCmp(d[l]);k.setDisabled(o.getCount()!=1)}})}},getSelection:function(c){if(this.singleSelect&&this.selectionModel.getSelected()){return c?this.selectionModel.getSelected():this.selectionModel.getSelected().data}if(!this.singleSelect&&this.selectionModel.getSelections()){var b=this.selectionModel.getSelections();if(b.length==0){return null}var a=[];for(i=0;i<b.length;i++){a.push(c?b[i]:b[i].data)}return a}return null},handleAction:function(a){if(!this.actions[a]){console.log("TODO Error: no such action defined. this cannot happen unless someone manipulated the top toolbar from the outside....");return}var b=this.actions[a];if(b.selectionRequired&&!this.getSelection()){Ext.Msg.alert(Resources.get("general.selectionNecessary.title"),Resources.get("general.selectionNecessary"));return}if(b.confirmation){Ext.MessageBox.show({title:Resources.get(this.resourceid+".button."+a+".confirmmsg.title"),msg:Resources.get(this.resourceid+".button."+a+".confirmmsg",this.getSelection()),fn:this.executeActionHandler.createDelegate(this,[b],1),buttons:Ext.MessageBox.OKCANCEL,icon:Ext.MessageBox.WARNING});return}b.callback.call(this,this.getSelection(b.getRecord))},executeActionHandler:function(a,b){if(a=="ok"){b.callback.call(this,this.getSelection(b.getRecord))}},onTriggerSearch:function(){var a=Ext.getCmp(this.resourceid+"_filterinput");this.store.load({params:{fulltext:a.getValue()}})},contextMenuHandler:function(a,k,h){var o=this.getStore().getAt(k).data;this.getSelectionModel().clearSelections();this.getSelectionModel().selectRow(k);var p=new Ext.menu.Menu();for(var f=0;f<this.contextMenu.length;f++){var n=this.contextMenu[f];if(typeof n=="string"){p.addSeparator()}else{var d=n.disabler?n.disabler(o):false;p.add({disabled:d,text:Resources.get(this.resourceid+".contextmenu."+n.name,o),handler:n.callback.createDelegate(this,[o])})}}if(this.filters){var j=[],g;var m=this.getColumnModel();var c=this.getStore().getAt(k);var g,b,l,d;this.filters.filters.each(function(e){if(e.type!="datetime"){g=m.findColumnIndex(e.dataIndex);b=m.getColumnHeader(g);renderer=m.getRenderer(g);l=o[e.dataIndex];d=l==null||l==="";j.push({text:b+": "+renderer(l,null,c),disabled:d,handler:function(s,r,q){var t=r[q];if(s.type=="numeric"){t={eq:t}}s.setValue(t);s.setActive(true)}.createDelegate(this,[e,o,e.dataIndex])})}return true});if(j.length){p.add({text:"Filter table for ...",menu:j})}}if(this.useToolbarAsContextmenu===true){p.addSeparator();this.getTopToolbar().items.each(function(q){if((q instanceof Ext.iptego.AutoRefresher)||q.menu){}else{if(q instanceof Ext.Toolbar.Separator){p.addSeparator()}else{if(q instanceof Ext.Button){var e=Ext.copyTo({},this.initialConfig,"text,handler");p.add(e)}else{if(q instanceof Ext.Toolbar.Fill){return false}}}}})}h.stopEvent();p.showAt(h.xy)},onAction:function(c,a){a=a||this.getStore().url;var d={action:c};if(this.getSelection()){d.selected=this.singleSelect?this.getSelection()["id"]:Ext.pluck(this.getSelection(),"id")}if(this.filters){var b=this.filters.buildQuery(this.filters.getFilterData());if(b){Ext.apply(d,b)}}Ext.iptego.request({url:a,params:d,successHandler:function(){this.getStore().reload()}},this)},onCsvExport:function(){var b=this.getStore().getTotalCount();if(b){var c={csv:true};Ext.applyIf(c,this.store.baseParams);if(this.filters){var a=this.filters.buildQuery(this.filters.getFilterData());if(a){Ext.apply(c,a)}}this.requestCsvFile(c)}else{Ext.Msg.alert("CSV Export","This table is empty. Nothing to export.")}},requestCsvFile:function(a){Ext.iptego.request({url:this.getStore().url,params:a,successHandler:function(b){Ext.iptego.ExportStatusWindow.show()}})},onShow:function(){Ext.iptego.Grid.superclass.onShow.apply(this,arguments);var a=true;if(this.refresher instanceof Ext.iptego.AutoRefresher){if(this.refresher.startTask()){a=false}}if(a){this.getStore().reload()}},onHide:function(){Ext.iptego.Grid.superclass.onHide.apply(this,arguments);if(this.refresher instanceof Ext.iptego.AutoRefresher){this.refresher.stopTask()}},onRender:function(d,b){Ext.iptego.Grid.superclass.onRender.apply(this,arguments);if(this.contextMenu){this.on("rowcontextmenu",this.contextMenuHandler,this)}this.on("show",this.onShow,this);this.on("hide",this.onHide,this);this.ownerCt.on("resize",this.onResizeSignal,this);var a=this.getColumnModel();var f=a.config;if(!(a.defaultSortable||f.any("sortable"))){var c=this.getView().hmenu.items;c.get("asc").setVisible(false);c.get("desc").setVisible(false);var e=c.get(2);if(e&&!e.text){e.setVisible(false)}}},afterRender:function(){Ext.iptego.Grid.superclass.afterRender.apply(this,arguments);this.onShow()},onResizeSignal:function(b,a,c){this.onResize()}});
Ext.iptego.GridFilters=Ext.extend(Ext.ux.grid.GridFilters,{buildQuery:function(g){var j=[];for(var d=0,b=g.length;d<b;d++){var a={};var e={};var h=g[d];for(var c in h.data){e[c]=h.data[c]}a.field=h.field;a.data=e;j.push(a)}return g.length>0?{filters:Ext.encode(j)}:undefined},cleanParams:function(a){if(a&&a.filters){delete a.filters}},onBeforeLoad:function(a,b){Ext.iptego.GridFilters.superclass.onBeforeLoad.apply(this,arguments);if(b.params.filters){Ext.apply(a.lastOptions,b)}}});
var cp=new Ext.state.CookieProvider({path:"/",expires:new Date(new Date().getTime()+(1000*60*60*24*30))});Ext.state.Manager.setProvider(cp);Ext.iptego.GridStateManager=function(){this.state={}};Ext.iptego.GridStateManager.prototype={init:function(a,d){this.provider=d;this.grid=a;if(this.grid.stateful===false){return}this.cm=a.getColumnModel();var b=d.get(this.getStateKey());if(b){this.restoreState(b)}function c(){this.updateState();this.storeState()}a.on("columnresize",c,this);this.cm.on("hiddenchange",c,this);this.cm.on("columnlockchange",c,this);this.cm.on("columnmoved",c,this)},storeState:function(){if(this.grid.stateful===false){return}this.provider.set(this.getStateKey(),this.state)},restoreState:function(e){if(this.grid.stateful===false){return}var b,f,a,d,c;if("config" in e){a=e.config;for(d=0;d<a.length;d++){f=a[d];b=this.cm.getIndexById(f.id);if(b!=-1){if(b!=d){this.cm.moveColumn(b,d)}if("hidden" in f){this.cm.setHidden(d,f.hidden)}else{this.cm.setHidden(d,false)}if("locked" in f){this.cm.setLocked(d,f.locked)}else{this.cm.setLocked(d,"false")}if("width" in f){this.cm.setColumnWidth(d,f.width)}}}}},resetState:function(){if(this.grid.stateful===false){return}},getStateKey:function(){xid=this.grid.stateId?this.grid.stateId:this.grid.id;return xid+"-grid-state"},updateState:function(){var a=this.grid.getColumnModel();var d=this.state;var f=[];for(var b=0;b<a.config.length;b++){f.push({id:a.config[b].id,hidden:a.config[b].hidden,width:a.config[b].width,locked:a.config[b].locked})}var e=Ext.encode(f);d.config=Ext.decode(e)}};Ext.apply(Ext.iptego.Grid.prototype,{restoreState:function(a){if(!a){a=Ext.state.Manager}this.sm=new Ext.iptego.GridStateManager();this.sm.init(this,a)},getStateManager:function(){return this.sm}});
Ext.iptego.HorizontalDrag=function(g){g=g||{};var i,a,q,e;var x,f,c=new Ext.lib.Region(0,0,0,0);var m=g.dragSafe===true;var p,k,v,n,o;function s(){return false}function w(b){return !m||b.target==i.body.dom}function u(b){i.on("containerclick",s,i,{single:true});if(i.refresher){i.refresher.setInterval(0)}n=i.body.getRight();p=i.body.getLeft();k=i.body.getTop();v=i.body.getBottom();o=0;if(!q){q=i.body.createChild({cls:"x-view-selector"})}else{q.setDisplayed("block")}}function j(b){o=e.getXY()[0]-e.startXY[0];c.left=p+o;c.top=k;c.right=n+o;c.bottom=v;q.setRegion(c)}function h(r){if(q){q.setDisplayed(false)}var b=n-p;if(b>0&&o!=0){var l=o/b;x.dist=l;if(i.load){i.load({dist:l})}}}function d(b){e=new Ext.dd.DragTracker({onBeforeStart:w,onStart:u,onDrag:j,onEnd:h});e.initEl(b.body);x=b[g.target]||{}}return{init:function(b){i=b;i.on("render",d)}}};
Ext.iptego.LoginWindow=Ext.extend(Ext.Window,{layout:"fit",width:290,height:180,closable:false,resizable:false,maskDisabled:false,modal:true,title:"Please login...",url:"login?__do_login=1",initComponent:function(){this.items=[{xtype:"form",monitorValid:true,id:"pld-login-window-form",labelWidth:70,labelAlign:"right",url:this.url,frame:true,defaults:{xtype:"textfield",allowBlank:false},items:[{fieldLabel:"Username",name:"login",listeners:{afterrender:function(a){a.focus(true,true)}}},{fieldLabel:"Password",name:"password",inputType:"password"},{xtype:"checkbox",boxLabel:"Remember me",labelSeparator:"",name:"remember"},{xtype:"displayfield",labelSeparator:"",hidden:true,cls:"iptego-generic-red",id:"pld-login-window-failed",value:"Login failed, please try again."}],keys:{key:[Ext.EventObject.ENTER,Ext.EventObject.RETURN],handler:this.onLogin,scope:this},buttons:[{text:"Login",formBind:true,handler:this.onLogin,scope:this}]}];Ext.iptego.LoginWindow.superclass.initComponent.call(this);this.addEvents("loggedin")},onLogin:function(){var a=Ext.getCmp("pld-login-window-form").getForm();a.submit({waitTitle:"Connecting",waitMsg:"Sending login information...",success:function(b,c){this.hide();this.fireEvent("loggedin",c.result.identity)},failure:function(b,c){b.reset();b.findField("login").focus(true,true);var d=Ext.getCmp("pld-login-window-failed");if(c.result&&c.result.errorMsg){d.setValue(c.result.errorMsg)}d.show()},scope:this})}});
Ext.iptego.MultiThumbSlider=Ext.extend(Ext.Slider,{thumbs:null,thumbIndex:0,maxThumbs:10,minThumbs:0,values:null,trackers:null,increment:0.1,dragged:false,tipOffsets:[0,40],precisionFormats:["0","0.0"],tipZIndexOffset:10500,tips:null,parentComponent:null,ceaseFire:false,converter:null,markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,initComponent:function(){Ext.iptego.MultiThumbSlider.superclass.initComponent.call(this);this.addEvents("set");this.thumbs=new Array();this.trackers=new Array();this.tips=new Array();this.initValues=this.values||[];this.values=new Array()},onRender:function(){this.ceaseFire=true;Ext.iptego.MultiThumbSlider.superclass.onRender.apply(this,arguments);this.addThumb(this.minValue);this.parentComponent=this.findParentBy(function(a){return a.baseCls&&a.baseCls=="x-window"});if(this.parentComponent){this.mon(this.parentComponent,"move",this.updateTips,this);this.mon(this.parentComponent,"show",this.updateTips,this);this.mon(this.parentComponent,"hide",this.onHide,this);this.mon(this.parentComponent,"destroy",this.onDestroy,this)}this.ceaseFire=false},addThumb:function(a){if(!this.rendered){return}if(this.thumbs.length>0||this.thumb==null){this.thumb=this.innerEl.createChild({cls:"x-slider-thumb"});this.initEvents();this.el.un("mousedown",this.onMouseDown,this)}this.el.un("keydown",this.onKeyDown,this);this.thumbIndex=this.thumbs.push(this.thumb)-1;this.trackers.push(this.tracker);this.tips.push(new Ext.Tip({minWidth:10,style:"z-index: "+(this.tipZIndexOffset+this.thumbIndex)}));if(!Ext.isEmpty(a)){this.setValue(a);this.values.push(a)}else{this.setValue(this.values[this.thumbIndex])}if(!this.ceaseFire){this.fireEvent("set",this)}},afterRender:function(){Ext.iptego.MultiThumbSlider.superclass.afterRender.apply(this,arguments);if(this.initValues.length>0){this.setValues(this.initValues)}},onMouseDown:function(d){if(this.disabled){return false}for(var b=0;b<this.thumbs.length;b++){if(this.thumbs[b].dom==d.target){this.selectThumb(b);return false}}if(this.thumbs.length>=this.maxThumbs){for(var b=0;b<this.thumbs.length;b++){this.thumbs[b].frame()}return false}var a=this.innerEl.translatePoints(d.getXY());var c=this.getValueFromEvent(d);if(a.top>this.clickRange[0]&&a.top<this.clickRange[1]&&!this.hasSameValue(c)){this.addThumb(c)}this.focus();return true},selectThumb:function(b,a){this.thumb=this.thumbs[b];this.tracker=this.trackers[b];this.thumbIndex=b;if(a!==true){this.value=this.values[b]}},hasSameValue:function(a,c){a=this.normalizeValue(a);for(var b=0;b<this.thumbs.length;b++){if((!c||this.thumbIndex!=b)&&this.values[b]==a){return true}}return false},getValueFromEvent:function(a){var c=this.innerEl.translatePoints(a.getXY());var b=Ext.util.Format.round(this.reverseValue(c.left,this.decimalPrecision));return b},onDrag:function(b){var a=this.getValueFromEvent(b);if(this.hasSameValue(a,true)){return}this.setValue(a,false);this.dragged=true;this.values[this.thumbIndex]=this.value;this.updateTip(this.thumbIndex)},onDragEnd:function(b){Ext.iptego.MultiThumbSlider.superclass.onDragEnd.apply(this,arguments);if(this.dragged){this.dragged=false;var a=this.innerEl.translatePoints(b.getXY());if(this.minThumbs<this.thumbs.length&&(a.top<-1*this.clickRange[0]||a.top>this.clickRange[1]*2)){this.removeThumb()}this.fireEvent("set",this)}},onDestroy:function(){for(var a=0;a<this.tips.length;a++){this.tips[a].destroy()}},onHide:function(){for(var a=0;a<this.tips.length;a++){this.tips[a].hide()}},updateTips:function(){if(this.disabled){return}for(var a=0;a<this.tips.length;a++){this.updateTip(a)}},updateTip:function(a){if(!this.tips[a]){return}this.tips[a].show();this.tips[a].body.update(this.getText(this,a));this.tips[a].doAutoWidth();this.tips[a].el.alignTo(this.thumbs[a],"b-t?",this.tipOffsets)},getText:function(b,a){return Ext.util.Format.number(b.values[a],b.precisionFormats[b.decimalPrecision])},moveThumb:function(b,a){if(!a||this.animate===false){Ext.iptego.MultiThumbSlider.superclass.moveThumb.apply(this,arguments)}else{this.thumb.shift({left:b,stopFx:true,duration:0.35,callback:this.updateTip.createDelegate(this,[this.thumbIndex]),scope:this})}},removeThumb:function(){if(this.thumbs.length<=1){return}var d=this.tips[this.thumbIndex];var a=this.thumbs[this.thumbIndex];var b=this.trackers[this.thumbIndex];var c=this.values[this.thumbIndex];this.tips.remove(d);this.thumbs.remove(a);this.trackers.remove(b);this.values.remove(c);d.destroy();b.destroy();a.puff({remove:true});this.selectThumb(0);if(!this.ceaseFire){this.fireEvent("set",this)}},translateValue:function(a){return((a-this.minValue)*this.getRatio())-this.halfThumb},setValues:function(a){this.setValue(a)},setValue:function(a){if(Ext.isObject(a)){if(a.config){Ext.apply(this,a.config)}a=a.values}if(Ext.isArray(a)){this.ceaseFire=true;this.values=a;if(a.length==this.thumbs.length){for(var b=0;b<this.thumbs.length;b++){this.selectThumb(b,true);this.setValue(a[b])}}else{for(var b=0;b<this.thumbs.length;b++){this.trackers[b].destroy();this.thumbs[b].remove();this.tips[b].destroy()}this.thumb=null;this.thumbIndex=0;this.value=-1;this.trackers=new Array();this.thumbs=new Array();this.tips=new Array();for(b=0;b<a.length;b++){this.addThumb()}}this.ceaseFire=false}else{Ext.iptego.MultiThumbSlider.superclass.setValue.apply(this,arguments)}},getValue:function(){return this.getValues()},getValues:function(){return this.values}});Ext.reg("multislider",Ext.iptego.MultiThumbSlider);
Ext.iptego.RangeSlider=Ext.extend(Ext.iptego.MultiThumbSlider,{maxThumbs:2,minThumbs:2,range:0,tipOffsets:[0,-5],onRender:function(){Ext.iptego.RangeSlider.superclass.onRender.apply(this,arguments);this.el.on("mouseover",function(){Ext.each(this.tips,function(a){a.show()},this);this.updateTips()},this);this.el.on("mouseout",function(){Ext.each(this.tips,function(a){a.hide()},this)},this)},getOtherIndex:function(a){return a?0:1},isLeft:function(a){return this.values[a]<this.values[this.getOtherIndex(a)]},updateTip:function(a){if(!this.tips[a]||!this.tips[a].body||!this.tips[a].isVisible()){return}this.tips[a].body.update(this.getText(this,a));this.tips[a].doAutoWidth();var b=this.isLeft(a)?"br-t?":"bl-t";this.tips[a].el.alignTo(this.thumbs[a],b,this.tipOffsets)},hasSameValue:function(a,b){var d=Ext.iptego.RangeSlider.superclass.hasSameValue.apply(this,arguments);var c=this.isLeft(this.thumbIndex)==this.value>this.values[this.getOtherIndex(this.thumbIndex)];return d||c},onDrag:function(d){Ext.iptego.RangeSlider.superclass.onDrag.apply(this,arguments);if(this.range){var b=this.thumbIndex;var c=this.value;var a=this.getOtherIndex(b);this.selectThumb(a);var f=c-this.value;if(Math.abs(f)>this.range){if(f>0){this.setValue(c-this.range,false)}else{this.setValue(c+this.range,false)}this.values[a]=this.value}this.selectThumb(b)}}});
Ext.iptego.DivisionSlider=Ext.extend(Ext.Slider,{divisions:["calls","registrations"],values:{},thumbs:{},trackers:{},tips:{},titles:{},tipOffsets:[0,40],numThumbs:0,tipZIndexOffset:10500,initComponent:function(){Ext.iptego.DivisionSlider.superclass.initComponent.call(this)},onRender:function(){this.ceaseFire=true;Ext.iptego.MultiThumbSlider.superclass.onRender.apply(this,arguments);for(var a=0;a<this.divisions.length;a++){var b=this.divisions[a];console.log(b);this.addThumb(b)}this.parentComponent=this.findParentByType("window");if(this.parentComponent){this.mon(this.parentComponent,"hide",this.onHide,this);this.mon(this.parentComponent,"destroy",this.onDestroy,this)}this.ceaseFire=false},addThumb:function(a){if(!this.rendered){return}if(this.numThumbs>0||this.thumb==null){this.thumb=this.innerEl.createChild({cls:"x-slider-thumb"});this.initEvents();this.el.un("mousedown",this.onMouseDown,this)}this.thumb.on("mouseenter",function(b){this.showTip(b)}.createDelegate(this,[a]));this.thumb.on("mouseleave",function(b){this.hideTip(b)}.createDelegate(this,[a]));this.thumbName=a;this.numThumbs=this.numThumbs+1;this.thumbs[a]=this.thumb;this.trackers[a]=this.tracker;this.tips[a]=new Ext.Tip({minWidth:10,style:"z-index: "+(this.tipZIndexOffset+this.numThumbs)});if(Ext.isEmpty(this.values[a])){this.values[a]=0}this.setValue(this.getAbsoluteValue(a))},getAbsoluteValue:function(a){var c=0;for(var b=0;b<this.divisions.length;b++){c=c+this.values[this.divisions[b]];if(this.divisions[b]==a){break}}return c},getLowerBoundValue:function(a){var c=0;for(var b=0;b<this.divisions.length;b++){if(this.divisions[b]==a){break}c=c+this.values[this.divisions[b]]}return c},getUpperBoundValue:function(a){var c=0;for(var b=0;b<this.divisions.length;b++){c=c+this.values[this.divisions[b]];if(this.divisions[b]==a){if(b<this.divisions.length-1){c=c+this.values[this.divisions[b+1]]}else{c=100}break}}return c},getNextThumbName:function(a){for(var b=0;b<this.divisions.length;b++){if(this.divisions[b]==a&&b<(this.divisions.length-1)){return this.divisions[b+1]}}return null},selectThumb:function(a){this.thumb=this.thumbs[a];this.tracker=this.trackers[a];this.thumbName=a;this.value=this.values[a]},afterRender:function(){for(var b=0;b<this.divisions.length;b++){var a=this.divisions[b];this.selectThumb(a);Ext.iptego.MultiThumbSlider.superclass.afterRender.apply(this,arguments)}},onMouseDown:function(c){if(this.disabled){return false}for(var b=0;b<this.divisions.length;b++){var a=this.divisions[b];if(this.thumbs[a].dom==c.target){this.selectThumb(a);return false}}return false},getValueFromEvent:function(a){var c=this.innerEl.translatePoints(a.getXY());var b=Ext.util.Format.round(this.reverseValue(c.left,this.decimalPrecision));return b},onDrag:function(d){var c=this.getValueFromEvent(d);if(c-this.getLowerBoundValue(this.thumbName)<0){return}if(c>this.getUpperBoundValue(this.thumbName)){return}this.setValue(c,false);this.dragged=true;var a=this.getNextThumbName(this.thumbName);if(a!==null){var b=this.getAbsoluteValue(a)}this.values[this.thumbName]=this.value-this.getLowerBoundValue(this.thumbName);if(a!==null){this.values[a]=b-this.getLowerBoundValue(a)}this.updateTip(this.thumbName);if(a!==null){this.updateTip(a)}},showTip:function(a){if(!this.tips[a]){return}this.tips[a].show();this.tips[a].body.update(this.getTipText(a));this.tips[a].doAutoWidth();this.tips[a].el.alignTo(this.thumbs[a],"b-t?",this.tipOffsets)},hideTip:function(a){if(!this.tips[a]){return}this.tips[a].hide()},getTipText:function(a){var c=this.titles[a]||a;var b=c+": "+this.values[a]+"%";return b},onDestroy:function(){for(var a=0;a<this.divisions.length;a++){this.tips[this.divisions[a]].destroy()}},onHide:function(){for(var a=0;a<this.divisions.length;a++){this.tips[this.divisions[a]].hide()}},getValues:function(){return this.values},setValues:function(a){for(var b=0;b<this.divisions.length;b++){this.values[this.divisions[b]]=a[this.divisions[b]]||0}for(var b=0;b<this.divisions.length;b++){this.selectThumb(this.divisions[b]);this.setValue(this.getAbsoluteValue(this.divisions[b]))}this.updateTips()}});
Ext.iptego.Page=Ext.extend(Ext.Panel,{border:false,baseCls:"nostyle",listeners:{show:function(){this.cascade(function(a){if(this!=a){if(!a.hidden){a.fireEvent("show",a)}}},this)},hide:function(){this.cascade(function(a){if(this!==a){a.fireEvent("hide",a)}},this)}},onAfterLayout:function(){this.un("afterlayout",this.onAfterLayout,this);this.cascade(function(a){if(this!=a){if(!a.hidden){a.fireEvent("enable",a)}}},this)},initComponent:function(){if(this.id&&(this.id.indexOf("_card")<0)){this.id=this.id+"_card"}Ext.iptego.Page.superclass.initComponent.apply(this,arguments);this.on("afterlayout",this.onAfterLayout,this)}});Ext.reg("page",Ext.iptego.Page);
Ext.iptego.TabPanel=Ext.extend(Ext.TabPanel,{activeItem:0,border:false,plain:true,layoutOnTabChange:true,listeners:{tabchange:function(d,c){if(c.tabTip){var b=this.getTabEl(c);if(!b.qtip){b.qtip=c.tabTip;var a=Ext.fly(b).select(".x-tab-strip-help").item(0);if(a){a.dom.qtip=c.tabTip}}}if(c.topic&&Pld.hasPermission("view_help")){var b=this.getTabEl(c);var a=Ext.fly(b).select(".x-tab-strip-help").item(0);if(a){a.on("click",function(){Pld.openHelpTopic(this.topic)},c)}}}},onRender:function(b,a){if(Ext.TabPanel.prototype.itemTpl==Ext.iptego.TabPanel.prototype.itemTpl){var c=new Ext.Template('<li  id="{id}">','<a onclick="return false;">','<span class="x-tab-strip-text">',"{text}</span>",'<span class="x-tab-strip-help"></span>',"</a></li>");c.disableFormats=true;c.compile();Ext.iptego.TabPanel.prototype.itemTpl=c}Ext.iptego.TabPanel.superclass.onRender.call(this,b,a);this.bwrap.addClass("tabContainer");this.header.removeClass("x-tab-panel-header");this.stripWrap.addClass("tabHeader");this.stripWrap.removeClass("x-tab-strip-wrap");this.stripWrap.removeClass("x-tab-strip");this.stripWrap.removeClass("x-tab-strip-"+this.tabPosition);this.strip.first().addClass("first")}});Ext.reg("iptego_tabpanel",Ext.iptego.TabPanel);
Ext.iptego.SDWindow=Ext.extend(Ext.Window,{layout:"fit",title:"Message Flow",maximizable:true,collapsible:true,constrain:true,node:null,url:null,params:null,zoomIndex:0,zoomActIndex:0,zoomWidthIndex:0,tips:null,hideOptions:null,loaded:false,initialized:false,zoomingReady:false,listeners:{beforeclose:function(){if(this.maximized){this.container.removeClass("x-window-maximized-ct")}},hide:function(){this.hideTips()}},initComponent:function(){this.width=Math.round(Ext.getBody().getWidth()/2);this.height=Math.round(this.width*0.75);this.initButtons();this.tbar=new Ext.Toolbar({items:[this.zoomInBtn,this.zoomOutBtn,this.zoomFitBtn,this.zoomWidthBtn,this.zoomActBtn,"-",this.optionsBtn,"-",this.downloadBtn,"-",this.hideMsgBtn,"->",this.refreshBtn]});Ext.iptego.SDWindow.superclass.initComponent.call(this);this.tracker=new Ext.dd.DragTracker({onStart:this.onDragStart.createDelegate(this),onDrag:this.onDrag.createDelegate(this),onEnd:this.onDragEnd.createDelegate(this)})},initButtons:function(){this.zoomInBtn=new Ext.Button({tooltip:"Zoom in",iconCls:"icon_zoom_in",handler:function(){this.zoomIn()},scope:this});this.zoomOutBtn=new Ext.Button({tooltip:"Zoom out",iconCls:"icon_zoom_out",handler:function(){this.zoomOut()},scope:this});this.zoomFitBtn=new Ext.Button({tooltip:"Zoom to fit all",iconCls:"icon_zoom_all",handler:function(){this.setZoom(0)},scope:this});this.zoomWidthBtn=new Ext.Button({tooltip:"Zoom to fit width",iconCls:"icon_zoom_width",handler:function(){this.setZoom(this.zoomWidthIndex)},scope:this});this.zoomActBtn=new Ext.Button({tooltip:"Zoom to actual size",iconCls:"icon_zoom",handler:function(){this.setZoom(this.zoomActIndex)},scope:this});this.hideMsgBtn=new Ext.Button({tooltip:"Hide messages",disabled:true,iconCls:"icon_hide_messages",handler:function(){this.hideTips();this.hideMsgBtn.disable()},scope:this});this.optionsBtn=new Ext.Button({text:"Options",menu:this.generateOptionsMenu()});this.downloadBtn=new Ext.Button({iconCls:"icon_save",tooltip:"Save this message flow as a PNG file.",handler:this.onDownload,scope:this});this.refreshBtn=new Ext.Button({tooltip:"Refresh",iconCls:"x-tbar-loading",handler:this.refresh,scope:this})},toggleOption:function(a){Pld.setUserOption(a.option,!a.checked,this.refresh.createDelegate(this))},generateOptionsMenu:function(){var e=Ext.isArray(this.hideOptions)?this.hideOptions.toObject():{};var b=[{text:"Combine identical",option:"flow_show_dups"},{text:"SIP URIs",option:"flow_show_sip_uris"},{text:"Transport protocol",option:"flow_show_proto"},{text:"IP addresses",option:"flow_show_ip"},{text:"MAC addresses",option:"flow_show_mac"},{text:"Codecs",option:"flow_show_codecs"},{text:"Absolute times",option:"flow_show_absolute_times"},{text:"Time spans",option:"flow_show_time_difference_arrows"},{text:"Resolve IP addresses",option:"flow_resolve_ips"}];var f=[];for(var d=0,a=b.length;d<a;d++){var c=b[d];if(e[c.option]){continue}c.handler=this.toggleOption;c.scope=this;c.checked=Pld.getUserOption(c.option,false);f[f.length]=c}return f},fitContainer:function(){var c=this.container.getViewSize();var b=this.container.getXY();var a=this.container.getScroll();this.setPosition(b[0],b[1]+a.top);this.setSize(c.width,c.height)},onRender:function(b,a){Ext.iptego.SDWindow.superclass.onRender.apply(this,arguments);this.refresh()},refresh:function(){this.refreshBtn.disable();this.downloadBtn.disable();this.body.load({url:this.url,params:this.params,scripts:true,callback:this.onMapReceived,nocache:true,scope:this})},afterRender:function(){Ext.iptego.SDWindow.superclass.afterRender.apply(this,arguments);this.body.setStyle("overflow","scroll");this.dd.b4Drag=function(){var a={bottom:20+this.getSize().height*-1};a=Ext.applyIf(a,this.dd.defaultPadding);this.dd.constrainTo(this.container,a)}.createDelegate(this)},onMapReceived:function(c,k,e){var i=null;if(k){this.image=this.el.child("img");if(this.image){this.image.on("load",this.onLoad,this);if(this.image.dom.alt){this.setTitle(this.image.dom.alt);this.image.dom.alt=""}if(this.image.dom.src){var a=this.image.dom.src;var d=a.substring(a.lastIndexOf("?")+1);d=Ext.urlDecode(d);if(d.id){this.diagramId=d.id;this.downloadBtn.enable()}var h=a.substring(a.lastIndexOf("/")+1);var h=h.substring(0,h.lastIndexOf("?"));this.image.dom.src=Pld.getNodeRelativeUrl(h,this.node)+"?"+Ext.urlEncode(d)}var g=Ext.DomHelper.append(this.body,{cls:"flowTools"});if(NOBRANDING){Ext.DomHelper.append(g,{cls:"logoPalladionRed"})}var j=this.image.dom.attributes.warning;if(j&&j.value){var f={cls:"flowWarningIcon"};this.warningIcon=Ext.DomHelper.append(g,f);Ext.QuickTips.register({target:this.warningIcon,text:j.value})}this.initMap();this.initDD();this.realWidth=this.image.dom.width;this.realHeight=this.image.dom.height;this.aspectRatio=this.realWidth/this.realHeight;this.resetViewBox();this.initialized=true;if(!this.maximized){var b=Math.min(this.viewWidth,this.realWidth);b+=this.getFrameWidth();if(!Ext.isIE6){b+=this.body.getWidth()-this.body.getViewSize().width}this.setSize(b,this.height)}if(!this.zoomingReady){this.initZooming()}this.zoomIndex=this.zoomActIndex}else{i="The call flow could not be loaded. Please try again."}}else{i=e.statusText}if(i){Ext.Msg.alert("Problem",i,function(){this.close()}.createDelegate(this))}},initMap:function(){this.map=this.el.select("area");this.areas=new Array(this.map.getCount());this.tips=new Ext.WindowGroup();var b;var a;this.map.each(function(g,o,m){this.mon(g,"mousewheel",this.onMouseWheel,this);b=g.dom.coords.split(",");for(var k=0;k<b.length;k++){b[k]=parseInt(b[k])}this.areas[m]=b;a=g.dom.alt||"black";var f=g.dom.id.substr(5);var l=f.substr(f.lastIndexOf("_")+1);var j=Ext.get("msg_"+f);var q=700;var c=300;var r=null;var n=null;var e=0;var h=0;var s="chars";j.select("div").each(function(i){e=parseInt(i.dom.attributes[s].value);if(e>h){h=e;r=i;n=i.dom.innerHTML}});var d=r.getTextWidth(Ext.util.Format.stripTags(n),c,q);this.openMsgCounter=0;var p=new Ext.iptego.ClickTip({title:"Message "+l,target:g,width:d+20,bodyStyle:"overflow-x: auto",iconColor:a,html:j.dom.innerHTML,listeners:{beforeshow:function(i){this.hideMsgBtn.enable();if(!i.isVisible()){this.openMsgCounter++}}.createDelegate(this),show:function(i){Pld.CallFlowMessageMgr.bringToFront(i)}.createDelegate(this),hide:function(){this.openMsgCounter--;if(this.openMsgCounter<=0){this.hideMsgBtn.disable()}}.createDelegate(this),activate:function(i){Pld.CallFlowMessageMgr.bringToFront(i)}.createDelegate(this)}});this.tips.register(p);p.manager=null;Pld.CallFlowMessageMgr.register(p)},this)},initDD:function(){this.xy=this.image.getXY();this.originX=this.xy[0];this.originY=this.xy[1];this.mon(this.image,"mousewheel",this.onMouseWheel,this);this.tracker.initEl(this.image);this.on("move",this.onMove,this)},onLoad:function(){this.loaded=true;this.updateCursor();this.refreshBtn.enable()},onMove:function(){this.originX=this.body.getX();this.originY=this.body.getY()},onMouseWheel:function(a){if(a.shiftKey){if(a.getWheelDelta()>0){this.zoomIn(a)}else{this.zoomOut(a)}}else{var c=a.getWheelDelta();if(c){var b=this.originY-this.xy[1]-c*60;this.body.scrollTo("top",b);this.xy=this.image.getXY()}}a.stopEvent()},zoomIn:function(a){this.setZoom(this.zoomIndex+1,a)},zoomOut:function(a){this.setZoom(this.zoomIndex-1,a)},setZoom:function(h,j){h=h.constrain(0,this.zooms.length-1);z=this.zooms[h];var i=this.zoomWidth||z[0];var c=this.zoomHeight||z[1];this.zoomWidth=z[0];this.zoomHeight=z[1];this.image.setWidth(this.zoomWidth);this.image.setHeight(this.zoomHeight);this.zoomIndex=h;var k=z[2];this.map.each(function(o,p,e){var q=this.areas[e];var r=[];for(var n=0;n<q.length;n++){r[n]=q[n]*k}o.dom.coords=r.join(",")},this);this.calcOverflow();this.xy=this.image.getXY();var m=this.originX-this.xy[0];var l=this.originY-this.xy[1];var g=0.5;var f=0.5;if(j){var d=j.getXY();var b=d[0];var a=d[1];g=(b-this.originX)/i;f=(a-this.originY)/c}m+=(this.zoomWidth-i)*g;l+=(this.zoomHeight-c)*f;this.body.scrollTo("left",m);this.body.scrollTo("top",l);this.updateButtons();this.updateCursor()},updateCursor:function(){var a=(this.zoomIndex==0||Ext.isIE6)?"auto":"move";this.image.setStyle("cursor",a)},updateButtons:function(){this.zoomInBtn.setDisabled(this.zoomIndex==this.zooms.length-1);this.zoomOutBtn.setDisabled(this.zoomIndex==0);this.zoomFitBtn.setDisabled(this.zoomIndex==0);this.zoomActBtn.setDisabled(this.zoomIndex==this.zoomActIndex);this.zoomWidthBtn.setDisabled(this.zoomIndex==this.zoomWidthIndex)},calcOverflow:function(){this.overflowX=this.image.dom.width-this.viewWidth;this.overflowY=this.image.dom.height-this.viewHeight},moveTo:function(a,b){a=a.constrain(this.originX-this.overflowX,this.originX);b=b.constrain(this.originY-this.overflowY,this.originY);this.image.moveTo(a,b)},onDragStart:function(a){this.xy=this.image.getXY();this.calcOverflow()},onDrag:function(b){var c=this.tracker.getOffset();var a=this.originX-this.xy[0]+c[0];var d=this.originY-this.xy[1]+c[1];this.body.scrollTo("left",a);this.body.scrollTo("top",d)},onDragEnd:function(a){this.xy=this.image.getXY()},onResize:function(a,c){Ext.iptego.SDWindow.superclass.onResize.call(this,a,c);if(this.initialized){var b=this.zoomIndex==this.zoomWidthIndex;this.initZooming();if(b){this.setZoom(this.zoomWidthIndex)}else{if(this.overflowX<0&&this.overflowY<0){this.setZoom(0)}else{this.updateButtons()}}}},initZooming:function(){this.resetViewBox();var a=this.realWidth;var k=this.realHeight;var f=1.25;var b=1.125;var h=1;var g=[[a,k,h]];var c=new Array();while(h<f){a*=b;k*=b;h*=b;g.push([a,k,h])}if(this.realWidth>this.viewWidth||this.realHeight>this.viewHeight){a=this.realWidth;k=this.realHeight;h=1;this.zoomActIndex=0;while(true){h/=b;a/=b;k/=b;if(a>this.viewWidth||k>this.viewHeight){c.push([a,k,h])}else{break}}c.reverse();if(this.viewWidth/a<this.viewHeight/k){h=this.viewWidth/this.realWidth;c[0]=[this.viewWidth,this.realHeight*h,h]}else{h=this.viewHeight/this.realHeight;c[0]=[this.realWidth*h,this.viewHeight,h]}this.zoomActIndex=Math.max(1,c.length);h=this.viewWidth/this.realWidth;if(h<1){k=this.realHeight*h;var e=c.length;for(var d=0,j=c.length;d<j;d++){if(Math.round(h*100)<=Math.round(c[d][2]*100)){e=d;break}}if(e>0){c.splice(e,0,[this.viewWidth,k,h])}this.zoomWidthIndex=e}else{this.zoomWidthIndex=this.zoomActIndex}}this.zooms=c.concat(g);this.zoomingReady=true},resetViewBox:function(){var a=this.body.getViewSize();this.viewWidth=Ext.isIE6?this.getInnerWidth()-20:a.width;this.viewHeight=Ext.isIE6?this.getInnerHeight()-20:a.height;this.calcOverflow()},onDestroy:function(){if(this.tips){this.tips.each(function(a){this.tips.unregister(a);Pld.CallFlowMessageMgr.unregister(a);a.destroy()},this)}Ext.iptego.SDWindow.superclass.onDestroy.call(this)},onDownload:function(){if(this.diagramId){var b=this.title.replace(/ /g,"_").replace(/__/g,"_").replace(/\W/g,"");var a="files/"+b+".png?type="+MESSAGES+"&id="+this.diagramId;location.href=a}else{warning("No diagram has been loaded.")}},hideTips:function(){if(this.tips){this.tips.hideAll();this.openMsgCounter=0}}});
Ext.iptego.SliderTip=Ext.extend(Ext.Tip,{minWidth:10,offsets:[0,-8],slider:null,init:function(a){this.slider=a;this.mon(a,"dragstart",this.onSlide,this);this.mon(a,"drag",this.onSlide,this);this.mon(a,"destroy",this.destroy,this);this.mon(a,"changecomplete",function(){this.onSlide(this.slider);this.hide.defer(2000,this)},this);this.mon(a,"render",function(){this.mon(a.thumb,"click",function(){this.onSlide(this.slider);this.hide.defer(2000,this)},this)},this)},onSlide:function(a){this.show();this.body.update(this.getText(a));this.doAutoWidth();this.el.alignTo(a.thumb,"b-t?",this.offsets)},getText:function(a){return a.getValue()}});Ext.iptego.TimeSliderTip=Ext.extend(Ext.iptego.SliderTip,{getText:function(a){return TIME_RESOLUTIONS[a.getValue().constrain(0,TIME_RESOLUTIONS.length-1)]}});
Ext.iptego.MsgGrid=Ext.extend(Ext.iptego.Grid,{url:null,params:{},pageSize:15,rowNumberer:true,viewSummary:true,msgFields:["msgid","proto","src_ip","src_port","src_mac","dst_ip","dst_port","dst_mac",{name:"ts",convert:function(b,a){return Date.parseDate(b,JSON_FORMAT_DATETIME_MS)}},"data","method","code","ruri","reason"],pagingMsg:Resources.get("iptego.msg_grid.pagingmsg"),emptyMsg:Resources.get("iptego.msg_grid.empty"),addColums:function(){this.columns=[{dataIndex:"proto",width:35,sortable:true,header:Resources.get("iptego.msg_grid.proto")},{dataIndex:"src_ip",width:110,sortable:true,header:Resources.get("iptego.msg_grid.source"),renderer:function(c,a,b){return b.get("src_ip")+":"+b.get("src_port")}},{dataIndex:"src_mac",width:80,sortable:true,hidden:true,header:Resources.get("iptego.msg_grid.src_mac")},{dataIndex:"dst_ip",width:110,sortable:true,header:Resources.get("iptego.msg_grid.dest"),renderer:function(c,a,b){return b.get("dst_ip")+":"+b.get("dst_port")}},{dataIndex:"dst_mac",width:80,sortable:true,hidden:true,header:Resources.get("iptego.msg_grid.dst_mac")},{dataIndex:"ts",width:80,sortable:true,renderer:function(c,a,b){if(Ext.isEmpty(c)){return""}return c.format("Y/m/d G:i:s.u")},header:Resources.get("iptego.msg_grid.ts")},{dataIndex:"method",width:80,sortable:true,header:Resources.get("iptego.msg_grid.meth_code"),renderer:function(c,a,b){if(!Ext.isEmpty(b.get("method"))){return b.get("method")}else{return b.get("code")}}},{dataIndex:"ruri",width:100,sortable:true,header:Resources.get("iptego.msg_grid.ruri_reason"),renderer:function(c,a,b){if(!Ext.isEmpty(b.get("ruri"))){return b.get("ruri")}else{return b.get("reason")}}}];this.autoExpandColumn="ruri"},addJsonStore:function(){this.store=new Ext.data.JsonStore({url:this.url,idProperty:"msgid",root:"data",totalProperty:"totalCount",fields:this.msgFields,baseParams:this.params})},getRowClass:function(a,c,d,b){if(!this.viewSummary||this.expandedRows.containsKey(c)){d.body='<pre class="sip-msg">'+Ext.util.Format.htmlEncode(a.get("data"))+"</pre>";return"x-grid3-row-expanded"}return"x-grid3-row-collapsed"},onRowDblClick:function(a,b,c){if(this.expandedRows.containsKey(b)){this.expandedRows.removeKey(b)}else{this.expandedRows.add(b,b)}this.view.refresh()},makeRowsSelectable:function(){var a=this.store.getCount();for(var b=0;b<a;b++){row=new Ext.Element(this.getView().getRow(b));if(row){row.child(".x-grid3-body-cell").setStyle("-moz-user-select","text")}}},addViewConfig:function(){this.viewConfig={emptyText:Resources.get("iptego.msg_grid.empty"),forceFit:true,enableRowBody:true,getRowClass:this.getRowClass.createDelegate(this)}},toggleSummary:function(a){this.viewSummary=!this.viewSummary;this.store.reload({callback:function(b){var c=this.viewSummary?"Show raw messages":"Hide raw messages";b.setText(c)}.createDelegate(this,[a],0)})},addToolbarButtons:function(){this.pagingToolbarItems=["-"];if(Pld.hasPermission("view_sipmsgs")){this.pagingToolbarItems.push({text:"Show raw messages",handler:this.toggleSummary,scope:this})}},refreshInfo:function(){this.store.reload();this.getBottomToolbar().doLoad(0)},setUrl:function(a){delete this.store.proxy.api;this.store.proxy.setUrl(a,true)},setParams:function(a){this.store.baseParams=a},initComponent:function(){this.addJsonStore();this.addViewConfig();this.addToolbarButtons();this.addColums();this.expandedRows=new Ext.util.MixedCollection();Ext.iptego.MsgGrid.superclass.initComponent.call(this);this.getView().on("refresh",this.makeRowsSelectable,this);if(Pld.hasPermission("view_sipmsgs")){this.on("rowdblclick",this.onRowDblClick,this)}this.on("resize",function(a,e,c,b,d){a.setHeight(c)},this)}});
Ext.iptego.WizardCard=Ext.extend(Ext.Panel,{initComponent:function(){Ext.iptego.WizardCard.superclass.initComponent.apply(this,arguments);this.addEvents("prev","next")},getWizard:function(){return this.findParentByType(Ext.iptego.Wizard)},getWizardValues:function(){return this.getWizard().getValues()},getWizardValue:function(a){return this.getWizardValues()[a]},isAllValid:function(){var b=this.findByType("form");var c=true;Ext.each(b,function(e){if(!e.getForm().isValid()){c=false;return false}},this);if(!c){return false}var d=this.findByType("radio");var a=this.getValues();Ext.each(d,function(e){if(!e.disabled){if(Ext.isEmpty(a[e.name])){c=false;return false}}},this);return c},getValues:function(){var a=this.findByType("form");var b={};Ext.each(a,function(e){e=e.getForm();var c=e.getValues();for(var g in c){var f=e.findField(g);var d=f&&f.xtype=="radiogroup";if(f&&!f.getRawValue()&&!d||d&&!f.getValue().getGroupValue()){delete c[g]}}Ext.apply(b,c)});return b},setValues:function(b){var a=this.findByType("form");Ext.each(a,function(c){c.getForm().setValues(b)},this)},reset:function(){var a=this.findByType("form");Ext.each(a,function(b){b.getForm().reset()},this)}});Ext.reg("wform",Ext.iptego.WizardCard);Ext.iptego.WizardQuestion=Ext.extend(Ext.Panel,{initComponent:function(){this.cls="iptego-wizard-question";Ext.iptego.WizardQuestion.superclass.initComponent.apply(this,arguments)}});Ext.reg("wizq",Ext.iptego.WizardQuestion);Ext.iptego.Wizard=Ext.extend(Ext.Window,{closeAction:"hide",layout:"border",modal:true,plain:false,resizable:true,height:400,minHeight:400,width:625,minWidth:625,resetNextSlidesOnChange:false,current:null,next:null,stack:null,bbuttons:null,values:null,initialValues:{},hiddenValues:{},initButtons:function(){this.bbuttons={cancel:new Ext.Toolbar.Button({text:"Cancel",handler:this.onCancel.createDelegate(this)}),prev:new Ext.Toolbar.Button({disabled:true,text:"Previous",handler:this.setActiveCard.createDelegate(this,["prev"])}),next:new Ext.Toolbar.Button({text:this.getNextButtonText(),handler:this.setActiveCard.createDelegate(this,["next"])})}},initComponent:function(){this.northPanel=new Ext.Panel({height:60,region:"north",bodyStyle:"padding: 40",border:true,html:""});this.centerPanel=new Ext.Panel({region:"center",layout:"card",border:true,autoScroll:true,bodyStyle:"background-color: white",activeItem:0,defaults:{autoHeight:true,bodyStyle:"background-color: transparent;",border:false,xtype:"wform",defaults:{bodyStyle:"background-color: transparent;",cls:"iptego-wizard-default",border:false,xtype:"form"}},layoutConfig:{deferredRender:true},items:this.cardItems});this.items=[this.northPanel,this.centerPanel];this.current=0;this.stack=[];this.lastCardIndex=this.centerPanel.items.length-1;this.setInitialValues(this.initialValues);this.initButtons();this.buttons=[this.bbuttons.prev,this.bbuttons.next,this.bbuttons.cancel];Ext.iptego.Wizard.superclass.initComponent.apply(this,arguments);this.addEvents("finished","cancelled","navigate");this.on("show",this.onDisplay,this)},updateNorth:function(){var d=this.getActiveCardObj().cardTitle||"";var a=this.current+1;var b=this.centerPanel.items.length;var c=this.northPanel.getEl();Ext.DomHelper.overwrite(c,{cls:"iptego-wizard-north",children:[{cls:"iptego-wizard-north-title",html:d},{cls:"iptego-wizard-north-steps",html:"Step "+a+" of "+b}]})},onCancel:function(){this.reset(true);this.hide();this.fireEvent("cancelled",this,this.getValues())},onSubmit:function(){var a=this.getValues();Ext.apply(a,this.hiddenValues);this.fireEvent("finished",this,a)},setCardIndexForFields:function(a,b){if(Ext.isArray(a)){for(var c=0;c<a.length;c++){var d=Ext.isEmpty(b)?c:b;this.setCardIndexForFields(a[c].items,d)}}else{if(!Ext.isEmpty(b)){if(a.items){this.setCardIndexForFields(a.items,b)}else{a.wizardCardIndex=b}}}},getActiveCardObj:function(){return this.centerPanel.layout.activeItem},getActiveFormValues:function(){var a=this.getActiveCardObj();if(!a||!a.isXType("wform")){return{}}return a.getValues()},setActiveFormValues:function(){var a=this.getActiveCardObj();if(!a||!a.isXType("wform")||!this.values[this.current]){return}a.setValues(this.values[this.current])},onDisplay:function(){this.setActiveFormValues();this.updateNorth()},getSequenceControl:function(b){var a=this.getActiveFormValues();var e=null;var c=null;if(b.sequenceControl){if(!isNaN(b.sequenceControl)){c=b.sequenceControl}else{if(typeof b.sequenceControl=="function"){c=b.sequenceControl(a)}else{for(i=0;i<b.sequenceControl.length;i++){var d=b.sequenceControl[i];e=d.values[a[d.key]];if(e){c=e}}}}}if(c<0){return this.centerPanel.items.length+c}return c},activeCardValuesChanged:function(){var b=this.getActiveFormValues();var a=this.values[this.current];if(Ext.isEmpty(a)){return false}for(var c in b){if(a[c]===undefined||a[c]!=b[c]){return true}}return false},setActiveCard:function(b){var f=this.getActiveCardObj();var c=f.isXType("wform",true);this.next=null;if(b=="next"){if(this.current==this.lastCardIndex){if(c&&!f.isAllValid()){Ext.Msg.alert(Resources.get("wizard.valid_err.title"),Resources.get("wizard.valid_err.msg"));return false}this.onSubmit();return}if(c){if(!f.isAllValid()){Ext.Msg.alert(Resources.get("wizard.valid_err.title"),Resources.get("wizard.valid_err.msg"));return false}if(this.resetNextSlidesOnChange){if(this.activeCardValuesChanged()){this.values=this.values.slice(0,this.current)}}this.next=this.getSequenceControl(f)}if(!this.next){this.next=this.current+1}this.stack.push(this.current)}else{if(b=="prev"){if(this.resetNextSlidesOnChange&&c){try{f.reset()}catch(d){}}this.next=this.stack.pop()}}this.values[this.current]=this.getActiveFormValues();this.current=this.next;var a=this.getActiveCardObj();a.fireEvent(b,a);this.centerPanel.layout.setActiveItem(this.next);this.doLayout();this.setActiveFormValues();this.updateNorth();this.bbuttons.prev.setDisabled(this.next<1);this.bbuttons.next.setText(this.getNextButtonText());this.fireEvent("navigate",this,f,this.getActiveCardObj())},getNextButtonText:function(){return this.current<this.lastCardIndex?"Next":"Finish"},reset:function(a){if(a){Ext.each(this.findByType("wform"),function(b){if(b.rendered){b.reset()}},this)}this.current=0;this.bbuttons.prev.setDisabled(true);this.bbuttons.next.setDisabled(false);this.bbuttons.next.setText(this.getNextButtonText());this.centerPanel.layout.setActiveItem(0)},setValues:function(a,b){if(!!b){this.reset(true)}this.setInitialValues(a)},getInitialValues:function(){return this.initialValues},setInitialValues:function(a){this.values=[];this.initialValues=a;if(this.centerPanel.items){for(var b=0;b<this.centerPanel.items.length;b++){this.values.push(Ext.ux.clone(a))}}},setHiddenValues:function(a){this.hiddenValues=a},getHiddenValues:function(){return this.hiddenValues},getValues:function(){var a={};this.centerPanel.items.each(function(d,c,b){if(d.rendered&&d.isXType("wform",true)){Ext.apply(this,d.getValues())}},a);return a},removeCardAt:function(a){this.centerPanel.items.removeAt(a)}});
Ext.iptego.DecoupledPagingToolbar=Ext.extend(Ext.PagingToolbar,{prelimDisplayMsg:"Displaying {0} - {1}",origDisplayMsg:null,totalCount:-1,initComponent:function(){this.refreshCountBut=new Ext.Button({tooltip:"Refresh total count",iconCls:"icon_counter",handler:this.refreshTotalCount.createDelegate(this)});var b=this.items||this.buttons||[];var a=["-",this.refreshCountBut];this.items=b.concat(a);this.origDisplayMsg=this.displayMsg;Ext.iptego.DecoupledPagingToolbar.superclass.initComponent.call(this);this.fixView()},fixView:function(){if(this.totalCount<0){this.afterTextItem.hide();this.displayMsg=this.prelimDisplayMsg;this.last.setDisabled(true)}},onLoad:function(a,b,c){if(this.totalCount>-1){this.store.totalLength=this.totalCount}else{this.store.totalLength=2<<25}Ext.iptego.DecoupledPagingToolbar.superclass.onLoad.apply(this,arguments);this.fixView()},resetCount:function(){this.totalCount=-1;this.fixView()},refreshTotalCount:function(a){this.refreshCountBut.setDisabled(true);this.refreshCountBut.el.child(this.refreshCountBut.buttonSelector).dom[this.refreshCountBut.tooltipType]="Calculating total count...";var a=Ext.apply({},this.store.lastOptions.params);Ext.apply(a,this.store.baseParams);delete a.start;delete a.limit;Ext.iptego.request({url:this.totalCountUrl,params:a,timeout:300000,successHandler:this.onTotalCountUpdate.createDelegate(this)})},onTotalCountUpdate:function(a){this.totalCount=a.totalCount;this.displayMsg=this.origDisplayMsg;this.onLoad(this.store,null,this.store.lastOptions);this.afterTextItem.show();this.refreshCountBut.setDisabled(false);this.refreshCountBut.el.child(this.refreshCountBut.buttonSelector).dom[this.refreshCountBut.tooltipType]=this.refreshCountBut.tooltip}});Ext.reg("decoupled_paging",Ext.iptego.DecoupledPagingToolbar);
Ext.iptego.ExportStatusWindow=Ext.extend(Ext.Window,{interval:500,width:400,height:400,closeAction:"hide",autoScroll:true,initComponent:function(){this.title="CSV exports";this.store=new Ext.data.JsonStore({url:"progressView",fields:["id","filename","start_ts","finished","error_msg","lines_written","total_lines","progress"],root:"data",idProperty:"id"});this.tpl=new Ext.XTemplate('<tpl for=".">','<div class="exported-item">','<h2>Export of <a target="_blank" href="downloadExport?id={id}">{filename}</a> started {start_ts}</h2>','<tpl if="finished">','<tpl if="!error_msg">',"<p>{lines_written} lines of {total_lines} have been written</p>",'<p>Export has finished. To download, click on the link above. You can also <a href="javascript:Ext.iptego.ExportStatusWindow.removeExport({id});">remove</a> this export.</p>',"</tpl>",'<tpl if="error_msg">','<p>An error occurred while exporting: {error_msg}. You can <a href="javascript:Ext.iptego.ExportStatusWindow.removeExport({id});">remove</a> this export and try again.</p>',"</tpl>","</tpl>",'<tpl if="!finished">','<div class="export-progress">','<div class="x-progress-inner">','<tpl if="progress !== undefined">','<div class="x-progress-bar" style="width:{progress}%;padding:5px;">','<div class="x-progress-text" style="z-index:99">{lines_written} lines of {total_lines} have been written</div>',"</div>","</tpl>",'<tpl if="total_lines === null">','<div class="x-progress-bar style="width:{this.getTick(id)}%;padding:5px;">','<div class="x-progress-text" style="z-index:99">preparing export...</div>',"</div>","</tpl>","</div>","</div>","</tpl>","</div>","</tpl>",{getTick:function(a){if(Ext.isEmpty(this.ticks)){this.ticks={}}if(Ext.isEmpty(this.ticks[a])){this.ticks[a]=0}this.ticks[a]=this.ticks[a]+1;return(this.ticks[a]*10)%100},isEmpty:function(a){return Ext.isEmpty(a)}});this.items=new Ext.DataView({store:this.store,tpl:this.tpl,itemSelector:"div.exported-item"});this.buttons=[{text:"Clean",handler:function(){Ext.iptego.request({url:"cleanCSVExports",params:{dummy:"dummy"}})}.createDelegate(this)},{text:"Hide",handler:function(){this.hide()}.createDelegate(this)}];Ext.iptego.ExportStatusWindow.superclass.initComponent.call(this)},updateHandler:function(){this.store.reload()},onRender:function(b,a){Ext.iptego.ExportStatusWindow.superclass.onRender.call(this,b,a);this.on("show",this.onShowCallback,this);this.on("hide",this.onHideCallback,this)},onShowCallback:function(a){this.timerTask={interval:this.interval,run:this.updateHandler.createDelegate(this)};this.timerTask=Ext.TaskMgr.start(this.timerTask)},onHideCallback:function(a){if(!Ext.isEmpty(this.timerTask)){Ext.TaskMgr.stop(this.timerTask)}}});Ext.iptego.ExportStatusWindow.show=function(){var a=Ext.WindowMgr.get("export-status-window");if(Ext.isEmpty(a)){a=new Ext.iptego.ExportStatusWindow({id:"export-status-window"})}a.show()};Ext.iptego.ExportStatusWindow.hide=function(){var a=Ext.WindowMgr.get("export-status-window");if(!Ext.isEmpty(a)){a.hide()}};Ext.iptego.ExportStatusWindow.removeExport=function(b){var a=Ext.WindowMgr.get("export-status-window");if(!Ext.isEmpty(a)){Ext.iptego.request({url:"removeExport",params:{id:b},successHandler:function(c){this.store.reload()}.createDelegate(a)})}};
Pld.Dashboard=Ext.extend(Ext.ux.Portal,{margins:"35 5 5 0",border:false,master:false,stateKey:"dashboard-state",idSeq:1,dropConfig:{notifyEnter:function(a,c,b){a.setDelta(0,0)},notifyOut:function(a,c,b){a.setDelta(-10,-10)}},initComponent:function(){if(this.master){this.stateKey="master-dashboard-state";var a=[];if(Pld.hasPermission("set_dashboard")){a.push({text:"Add a panel...",tooltip:"Opens a wizard to choose a panel that gets added to the Dashboard.",handler:this.configurePortletWizard.createDelegate(this)});a.push("-")}this.groupBtn=new Ext.Button({disabled:true,handler:function(b){this.fireEvent("makegroup",this);Ext.getCmp("master-dashboard-filterfield").reset()},scope:this,text:"Create group from filter"});a.push({xtype:"filterfield",emptyText:"Filter for panels",id:"master-dashboard-filterfield",listeners:{filterchanged:function(c,b){this.groupBtn.setDisabled(Ext.isEmpty(b));this.fireEvent("filterchanged",b)}.createDelegate(this)}});a.push(" ");a.push(this.groupBtn);this.bbar=a}Pld.Dashboard.superclass.initComponent.call(this);this.addEvents("filterchanged","makegroup");this.column1=this.add({style:"padding:10px 5px 0px 10px",columnWidth:0.5});this.column2=this.add({style:"padding:10px 10px 0px 5px",columnWidth:0.5});this.column1.on("close",this.stateSave,this);this.column2.on("close",this.stateSave,this);this.on("drop",this.stateSave,this);this.on("beforerender",this.onBeforeRender,this)},getWizard:function(){if(!this.wizard){var c=[];if(this.master){c.push({cardTitle:"Display regional or node-related information?",items:[{xtype:"wizq",html:"Do you wish to display regional or node-related information?"},{defaults:{xtype:"radio",hideLabel:true,name:"global"},items:[{inputValue:"global",boxLabel:"Regional information"},{inputValue:"node-related",boxLabel:"Node-related information"}]}],sequenceControl:[{key:"global",values:{global:1,"node-related":3}}]});var f=[];f.push({inputValue:"call-search-portlet",boxLabel:"Display a call search entry"});f.push({inputValue:"master-counter-portlet",boxLabel:"Display a Regional counter"});f.push({inputValue:"regional-alerts-portlet",boxLabel:"Display alerts aggregated on the Regional"});c.push({cardTitle:"Dashboard panel type",items:[{xtype:"wizq",html:"Select the type of dashboard panel you would like to add:"},{defaults:{xtype:"radio",hideLabel:true,name:"xtype"},items:f}],sequenceControl:[{key:"xtype",values:{"master-counter-portlet":2,"call-search-portlet":-1,"regional-alerts-portlet":-1}}]});c.push({cardTitle:"Regional counter type",items:[{xtype:"wizq",html:"Select the type of Regional counter you would like to display:"},{defaults:{xtype:"radio",hideLabel:true,name:"ctype"},items:[{inputValue:"m:3/s:8/p:0/p:0/p:0",boxLabel:"Regional active calls counter"}]}],sequenceControl:-1});var b=new Ext.data.JsonStore({url:"nodes/list",root:"data",idProperty:"id",fields:["id","name"]});c.push({cardTitle:"Select node",items:[{xtype:"wizq",html:"Select the node which should be the source of information:"},{items:{xtype:"combo",id:"node",width:300,name:"node",fieldLabel:"Node",store:b,mode:"remote",displayField:"name",valueField:"name",triggerAction:"all",emptyText:"Select a node..."}}]})}var f=[];if(Pld.hasPermission("nav_monitor")){f.push({inputValue:"counters-portlet",boxLabel:"Display a counter"})}if(Pld.hasPermission("nav_callviewer")){f.push({inputValue:"calls-portlet",boxLabel:"Display recent calls"})}if(Pld.hasPermission("nav_regviewer")){f.push({inputValue:"regs-portlet",boxLabel:"Display registrations"})}if(Pld.hasPermission("nav_alerts")){f.push({inputValue:"alerts-portlet",boxLabel:"Display alerts"})}if(Pld.hasPermission("nav_voiceq")){f.push({inputValue:"voice-quality-portlet",boxLabel:"Display voice quality data"})}if(Pld.hasPermission("nav_uastats")){f.push({inputValue:"user-devices-portlet",boxLabel:"Display user devices chart"})}if(Pld.hasPermission("nav_callviewer")&&Pld.hasPermission("nav_utrack")){f.push({inputValue:"user-calls-portlet",boxLabel:"Display calls by a particular user"})}if(Pld.hasPermission("nav_device_detail")&&Pld.hasPermission("nav_callviewer")){f.push({inputValue:"calls-passing-device-portlet",boxLabel:"Display calls passing a platform device"});f.push({inputValue:"calls-terminated-by-device-portlet",boxLabel:"Display calls terminated by a platform device"});f.push({inputValue:"calls-created-by-device-portlet",boxLabel:"Display calls created by a platform device"})}if(Pld.hasPermission("nav_regviewer")&&Pld.hasPermission("nav_utrack")){f.push({inputValue:"user-regs-portlet",boxLabel:"Display registrations of a particular user"})}if(Pld.hasPermission("nav_device_detail")&&Pld.hasPermission("nav_regviewer")){f.push({inputValue:"device-regs-portlet",boxLabel:"Display registrations at a particular device"})}if(Pld.hasPermission("nav_device_detail")){f.push({inputValue:"device-counters-portlet",boxLabel:"Display a device counter"})}c.push({cardTitle:"Dashboard panel type",items:[{xtype:"wizq",html:"Select the type of dashboard panel you would like to add:"},{defaults:{xtype:"radio",hideLabel:true,name:"xtype"},items:f}],sequenceControl:[{key:"xtype",values:{"calls-portlet":-1,"regs-portlet":-1,"alerts-portlet":-1,"voice-quality-portlet":-1,"user-devices-portlet":-1,"user-calls-portlet":this.master?7:3,"calls-passing-device-portlet":this.master?6:2,"calls-terminated-by-device-portlet":this.master?6:2,"calls-created-by-device-portlet":this.master?6:2,"user-regs-portlet":this.master?7:3,"device-regs-portlet":this.master?6:2,"device-counters-portlet":this.master?8:4}}]});var d=new Ext.data.JsonStore({url:"getCounterTypes",root:"counters",idProperty:"id",fields:["id","name"]});c.push({cardTitle:"Which counter",items:[{xtype:"wizq",html:"Select which counter will be displayed in the panel"},{items:{xtype:"combo",id:"selected_title",width:300,name:"selected_title",hiddenName:"selected",fieldLabel:"Counter",store:d,mode:"remote",displayField:"name",valueField:"id",triggerAction:"all",emptyText:"Select a counter..."}}],listeners:{beforeshow:function(g){var j=g.findParentByType(Ext.iptego.Wizard);var i=j.getValues();var h=i.node;delete d.proxy.api;d.proxy.setUrl(Pld.getNodeRelativeUrl("getCounterTypes",h),true);d.reload()}},sequenceControl:-1});var a=new Ext.data.JsonStore({url:"getSipDevicesComboStore",root:"data",fields:["name","id","type"],idProperty:"id"});c.push({cardTitle:"Which device",items:[{xtype:"wizq",html:"Select which device the displayed information should be based on"},{items:{xtype:"combo",id:"device_title",name:"device_title",hiddenName:"device",fieldLabel:"Device",store:a,mode:"remote",displayField:"name",valueField:"id",triggerAction:"all",emptyText:"Select a device..."}}],listeners:{beforeshow:function(g){var j=g.findParentByType(Ext.iptego.Wizard);var i=j.getValues();var h=i.node;delete a.proxy.api;a.proxy.setUrl(Pld.getNodeRelativeUrl("getSipDevicesComboStore",h),true);a.reload()}},sequenceControl:-1});c.push({cardTitle:"User",items:[{xtype:"wizq",html:"Enter the user uri:"},{items:{xtype:"textfield",name:"user",fieldLabel:"User"}}],sequenceControl:-1});c.push({cardTitle:"Which device",items:[{xtype:"wizq",html:"Select which device the displayed information should be based on"},{items:{xtype:"combo",id:"device2_title",name:"device_title",hiddenName:"device",fieldLabel:"Device",store:a,mode:"remote",displayField:"name",valueField:"id",triggerAction:"all",emptyText:"Select a device..."}}],listeners:{beforeshow:function(g){var j=g.findParentByType(Ext.iptego.Wizard);var i=j.getValues();var h=i.node;delete a.proxy.api;a.proxy.setUrl(Pld.getNodeRelativeUrl("getSipDevicesComboStore",h),true);a.reload()}}});var e=new Ext.data.JsonStore({url:"getSimpleDeviceCounters",root:"counters",idProperty:"id",fields:["id","name"],listeners:{beforeload:function(g,h){return !Ext.isEmpty(g.baseParams.device_id)}}});c.push({cardTitle:"Which counter",items:[{xtype:"wizq",html:"Select which counter to display"},{items:{xtype:"combo",id:"device_counter_selection",name:"selected_title",width:300,hiddenName:"selected",fieldLabel:"Counter",store:e,mode:"remote",displayField:"name",valueField:"id",triggerAction:"all",emtpyText:"Select a counter..."}}],listeners:{beforeshow:function(g){var j=g.findParentByType(Ext.iptego.Wizard);var i=j.getValues();var h=i.node;delete e.proxy.api;e.proxy.setUrl(Pld.getNodeRelativeUrl("getSimpleDeviceCounters",h),true);e.baseParams.device_id=this.getWizardValue("device");e.reload()}},sequenceControl:-1});c.push({cardTitle:"Portlet title",items:[{xtype:"wizq",html:"Enter a title for the new panel:"},{items:{xtype:"textfield",name:"title",fieldLabel:"Title"}}]});this.wizard=new Ext.iptego.Wizard({cardItems:c,resetNextSlidesOnChange:false,height:500,listeners:{finished:this.finishWizard.createDelegate(this)}})}if(this.wizard.rendered){this.wizard.reset(true)}return this.wizard},finishWizard:function(b,a){this.addPortlet(a);b.hide()},configurePortletWizard:function(){this.getWizard().show()},configurePortlet:function(a){Ext.Msg.prompt("Title","Please enter a title for the new panel",function(b,c){if(b=="ok"){a.title=c;this.addPortlet(a)}},this)},addPortlet:function(c){c.title=c.title||"Dashboard panel";var d=this.column1.items.getCount();var b=this.column2.items.getCount();var a=b<d?this.column2:this.column1;c.id=this.genId();c.closable=Pld.hasPermission("set_dashboard");this.addPortletToColumn(c,a);this.doLayout();this.stateSave()},stateSave:function(a){var c=[];this.column1.items.each(function(d){c.push(d.getConfig())});var b=[];this.column2.items.each(function(d){b.push(d.getConfig())});Pld.setUserOption(this.stateKey,{column1:c,column2:b,idSeq:this.idSeq})},genId:function(){var a="portlet-"+this.idSeq;this.idSeq++;return a},addPortletToColumn:function(b,a){a.add(b)},addComponentsToColumn:function(a,c){for(var d=0;d<a.length;d++){var f=a[d];if(Ext.isEmpty(f.xtype)){continue}if(Ext.isEmpty(f.id)){f.id=this.genId()}f.closable=Pld.hasPermission("set_dashboard");var e=Ext.ComponentMgr.create(f);var g=true;for(var b=0;b<e.requiredPermissions.length;b++){if(!Pld.hasPermission(e.requiredPermissions[b])){g=false;break}}if(g){this.addPortletToColumn(e,c)}}},onBeforeRender:function(a){var b=Pld.getUserOption(this.stateKey);if(Ext.isEmpty(b)){b=Pld.getDashboardDefaults()}this.idSeq=b.idSeq||1;this.addComponentsToColumn(b.column1,this.column1);this.addComponentsToColumn(b.column2,this.column2);return true},afterRender:function(){Pld.Dashboard.superclass.afterRender.call(this);if(!this.master&&Pld.hasPermission("set_dashboard")){this.el.on("contextmenu",this.onContextMenu,this)}},onContextMenu:function(b,a,c){var d=this.getContextMenu();b.stopEvent();d.showAt(b.xy)},getContextMenu:function(){if(!this.contextMenu){this.contextMenu=new Ext.menu.Menu();this.contextMenu.add({text:"Add a panel...",handler:this.configurePortletWizard.createDelegate(this)})}return this.contextMenu}});Ext.reg("dashboard",Pld.Dashboard);Pld.Dashboard.configurePortlet=function(b){loadContent(MAIN);var a=Ext.getCmp("main_card_layout_panel").findByType("dashboard")[0];a.configurePortlet(b)};Pld.DashboardPortlet=Ext.extend(Ext.ux.Portlet,{stateful:true,layout:"fit",style:"margin-bottom: 10px",node:null,requiredPermissions:[],initComponent:function(){if(Pld.hasPermission("set_dashboard")){this.tools=[{id:close,handler:this.onClose}]}Pld.DashboardPortlet.superclass.initComponent.call(this)},onClose:function(c,b,a){if(a.fireEvent("beforeclose",a)!==false){var f="Remove Dashboard Panel";var d="Do you really want to remove '"+a.title+"' from the Dashboard?";Ext.Msg.confirm(f,d,function(g){if(g=="yes"){var e=this.ownerCt;this.ownerCt.remove(this,true);e.fireEvent("close",e)}},a)}},getConfig:function(){return{id:this.id,title:this.title,node:this.node}}});
Pld.SettingsDialog=Ext.extend(Ext.Window,{width:1020,height:640,collapsible:true,title:"PALLADION Settings",layout:"border",constrainHeader:true,closeAction:"hide",border:false,initComponent:function(){this.tree=new Ext.tree.TreePanel({region:"west",width:200,rootVisible:false,autoScroll:true,resizable:true,split:true,animate:true});var b=new Ext.tree.TreeNode({text:"PALLADION"});this.tree.setRootNode(b);var a=[];Pld.SettingsDialog.Root.cascade(function(d){a.push({id:d.id+"_card",title:d.attributes.sectionTitle?d.attributes.sectionTitle+": "+d.text:null,xtype:d.attributes.pageXType,autoScroll:true,defaults:{buttonAlign:"center"}})});this.content=new Ext.Panel({region:"center",bodyStyle:{"background-color":"#ffffff",border:"none"},layout:"card",layoutConfig:{deferredRender:true},items:a});this.items=[this.tree,this.content];this.buttons=[];if(Pld.hasPermission("view_help")){this.buttons.push({text:"Help",handler:this.onHelpClicked.createDelegate(this)})}this.buttons.push({text:"Close",handler:this.onCloseClicked.createDelegate(this)});var c=this.tree.getSelectionModel();c.on("selectionchange",this.onNodeSelect,this);this.on("beforeshow",this.onBeforeShow,this);Pld.SettingsDialog.superclass.initComponent.call(this)},onHelpClicked:function(){var b=this.tree.getSelectionModel();var a=b.getSelectedNode();Pld.openHelpTopic(a.attributes.topic)},onCloseClicked:function(){this.hide()},onNodeSelect:function(b,a){this.content.getLayout().setActiveItem(a.id+"_card");Ext.getCmp(a.id+"_card").fireEvent("activate");if(Ext.isIE7){this.doLayout.defer(200,this)}},onBeforeShow:function(b){var a=Pld.SettingsDialog.actualizeTree(Pld.SettingsDialog.Root);if(Ext.isEmpty(a)){return false}this.tree.setRootNode(a);this.tree.getSelectionModel().select(a);return true},showTransientPage:function(b){var a=this.content.add(b);this.content.getLayout().setActiveItem(a.id);a.fireEvent("activate");this.content.doLayout();return a}});Pld.SettingsDialog.Root=new Ext.tree.TreeNode({text:"PALLADION",id:"root",expanded:true,topic:"70ui-settings.html",pageXType:"panel"});Pld.SettingsDialog.show=function(){var a=Ext.WindowMgr.get("settings-dialog");if(Ext.isEmpty(a)){a=new Pld.SettingsDialog({id:"settings-dialog"})}size=Pld.getViewportDimensions(true);size.width=Math.min(size.width,1000);size.height=Math.min(size.height,600);a.setSize(size);a.show()};Pld.SettingsDialog.jumpto=function(c){Pld.SettingsDialog.show();var d=Ext.WindowMgr.get("settings-dialog");var a=d.tree.getNodeById("root");d.tree.getSelectionModel().select(a);var b=d.tree.getNodeById(c);d.tree.getSelectionModel().select(b)};Pld.SettingsDialog.showTransientPage=function(b){Pld.SettingsDialog.show();var a=Ext.WindowMgr.get("settings-dialog");return a.showTransientPage(b)};Pld.SettingsDialog.registerSection=function(c,a,b,e,d){e=e||"panel";Pld.SettingsDialog.Root.appendChild(new Ext.tree.TreeNode({id:c,text:a,topic:b,expanded:true,requiredPermissions:d,pageXType:e}))};Pld.SettingsDialog.registerPage=function(b,g,f,a,d,c){var e=Pld.SettingsDialog.Root.findChild("id",b);e.appendChild(new Ext.tree.TreeNode({id:g,text:f,sectionTitle:e.text,topic:a,requiredPermissions:c,pageXType:d}))};Pld.SettingsDialog.actualizeTree=function(e){var h=true;var g=e.attributes.requiredPermissions||[];for(var c=0;c<g.length;c++){var d=g[c];if(d instanceof Array){var f=false;for(var a=0;a<d.length;a++){f=true;break}h=h&&f}else{h=h&&Pld.hasPermission(d)}}if(!h){return null}var b={id:e.id,text:e.text};Ext.apply(b,e.attributes);b=new Ext.tree.TreeNode(b);e.eachChild(function(j){var i=Pld.SettingsDialog.actualizeTree(j);if(!Ext.isEmpty(i)){b.appendChild(i)}});if(e.hasChildNodes()&&!b.hasChildNodes()){return null}return b};
Pld.Permissions=["set_appliance","set_platform","set_create_users","set_spit_config","nav_main","nav_dumps","nav_alerts","nav_utrack","nav_monitor","nav_times","nav_voiceq","nav_uastats","nav_callviewer","nav_spit","nav_authmon","nav_regviewer","view_traffic","nav_servers","set_incremental_user_search","nav_ping_monitoring","set_external_devices","set_system_management","view_sipmsgs","view_reghist","nav_scripts","nav_devices","nav_device_detail","nav_trunks","view_pdf","view_help","set_export_import","set_dashboard","nav_always_login","set_snmp_export","nav_iptrack","nav_rtp_recording"];Pld.UserManagement=Ext.extend(Ext.iptego.Grid,{title:Resources.get("module.user_management.headline"),id:"usermanagement.usergrid",resourceid:"usermanagement.usergrid",selectionType:"checkbox",selectionMode:"multiple",pageSize:25,userRecord:Ext.data.Record.create([{name:"id",type:"int"},"user_name","user_email","user_radius",{name:"realm",type:"int"},"realm_name","set_appliance","set_platform","set_create_users","set_spit_config","nav_main","nav_dumps","nav_alerts","nav_utrack","nav_monitor","nav_times","nav_voiceq","nav_uastats","nav_callviewer","nav_spit","nav_authmon","nav_regviewer","view_traffic","nav_servers","set_incremental_user_search","nav_ping_monitoring","set_external_devices","set_system_management","view_sipmsgs","view_reghist","nav_scripts","nav_devices","nav_device_detail","nav_trunks","view_pdf","view_help","set_export_import","set_dashboard","nav_always_login","set_snmp_export","nav_iptrack","nav_rtp_recording"]),onAdd:function(){var a=Pld.UserManagement.createUserWizard("Add a user",false,true);a.show()},onEdit:function(){var a=this.getSelectionModel().getSelected();var b=Pld.UserManagement.createUserWizard("Edit user",false,false);b.setValues(a.data,false);b.setHiddenValues({id:a.data.id});b.show()},onDelete:function(a){this.onAction("delete","deleteUsers")},onAddRightsToSelected:function(){var a=this.getSelectionModel().getSelections();var b=Pld.UserManagement.createPermissionsWizard("add","Add permissions to selected users",a);b.show()},onRemoveRightsFromSelected:function(){var a=this.getSelectionModel().getSelections();var b=Pld.UserManagement.createPermissionsWizard("remove","Remove permissions from selected users",a);b.show()},onAddRightsToAll:function(){var a=Pld.UserManagement.createPermissionsWizard("add","Add permissions to all users");a.show()},onRemoveRightsFromAll:function(){var a=Pld.UserManagement.createPermissionsWizard("remove","Remove permissions from all users");a.show()},reloginUser:function(){var a=this.getSelectionModel().getSelected().data;Ext.iptego.request({url:Pld.Config.UserManagement.api.become_user||"BecomeUser",params:{user_id:a.id},successHandler:function(){location.reload(true)}})},initComponent:function(){this.store=new Ext.data.JsonStore({url:Pld.Config.UserManagement.api.get_users||"getUsers",storeId:"getUsers",root:"data",totalProperty:"totalCount",fields:this.userRecord});this.columns=[{width:150,dataIndex:"user_name"},{width:150,dataIndex:"user_email"},{width:150,dataIndex:"realm_name"}];this.topToolbar=[{name:"add",callback:this.onAdd},{name:"edit",selectionRequired:true,singleSelectionRequired:true,callback:this.onEdit},{name:"delete",confirmation:true,selectionRequired:true,singleSelectionRequired:true,callback:this.onDelete},{name:"add_rights",menu:[{text:"to selected users",selectionRequired:true,handler:this.onAddRightsToSelected.createDelegate(this)},{text:"to all users",selectionRequired:false,handler:this.onAddRightsToAll.createDelegate(this)}]},{name:"remove_rights",menu:[{text:"from selected users",selectionRequired:true,handler:this.onRemoveRightsFromSelected.createDelegate(this)},{text:"from all users",selectionRequired:false,handler:this.onRemoveRightsFromAll.createDelegate(this)}]},{name:"relogin",confirmation:true,selectionRequired:true,singleSelectionRequired:true,callback:this.reloginUser},"->",{name:"edit_own_profile",callback:Pld.UserManagement.editOwnProfile}];Pld.UserManagement.superclass.initComponent.call(this)}});Ext.reg("pld-user-management",Pld.UserManagement);Pld.UserManagement.editOwnProfile=function(){Ext.iptego.request({url:Pld.Config.UserManagement.api.get_current_user||"getCurrentUser",successHandler:function(a){var b=Pld.UserManagement.createUserWizard("Edit own user information",true);b.setValues(a.data);b.show()}},this)};function navigationCheckboxGroups(){return[[{xtype:"label",text:"Main Modules",anchor:"-15"},{name:"nav_main",boxLabel:"Dashboard"},{name:"nav_dumps",boxLabel:"Traces"},{name:"nav_alerts",boxLabel:"Alerts"},{name:"nav_utrack",boxLabel:"User Tracking"},{name:"nav_iptrack",boxLabel:"IP Tracking"},{name:"nav_scripts",boxLabel:"Scripting"},{name:"nav_monitor",boxLabel:"Overall Monitoring"}],[{xtype:"label",text:"Service Health",anchor:"-15"},{name:"nav_voiceq",boxLabel:"Voice Quality"},{name:"nav_rtp_recording",boxLabel:"RTP Recording"},{name:"nav_uastats",boxLabel:"User Devices"},{name:"nav_callviewer",boxLabel:"Calls"},{name:"nav_regviewer",boxLabel:"Registrations"}],[{xtype:"label",text:"Network",anchor:"-15"},{name:"nav_devices",boxLabel:"Devices"},{name:"nav_device_detail",boxLabel:"Device Details"},{name:"nav_trunks",boxLabel:"Trunks"},{name:"nav_servers",boxLabel:"CleanBye"},{name:"nav_times",boxLabel:"Response Times"},{name:"nav_ping_monitoring",boxLabel:"Link Quality"}],[{xtype:"label",text:"Abuse",anchor:"-15"},{name:"nav_spit",boxLabel:"Behavioral Analysis"},{name:"nav_authmon",boxLabel:"Authentication Monitor"}]]}function settingsCheckboxGroups(){return[[{xtype:"label",text:"Settings",anchor:"-15"},{name:"set_appliance",boxLabel:Resources.get("module.user_management.set_appliance")},{name:"set_platform",boxLabel:Resources.get("module.user_management.set_platform")},{name:"set_create_users",boxLabel:Resources.get("module.user_management.set_create_users")},{name:"set_external_devices",boxLabel:Resources.get("module.user_management.set_external_devices")},{name:"set_system_management",boxLabel:Resources.get("module.user_management.set_system_management")},{name:"set_spit_config",boxLabel:Resources.get("module.user_management.set_spit_config")}],[{xtype:"label",text:"User Interface",anchor:"-15"},{name:"view_traffic",boxLabel:"View Traffic Meter"},{name:"view_sipmsgs",boxLabel:"View SIP messages"},{name:"view_pdf",boxLabel:"Create PDF reports"},{name:"view_reghist",boxLabel:"View registration history"},{name:"set_incremental_user_search",boxLabel:"Incremental User Search"},{name:"view_help",boxLabel:"View the PALLADION manual"},{name:"set_dashboard",boxLabel:"Change the dashboard page"},{name:"nav_always_login",boxLabel:"May always login"}]]}function generatePermissionCheckboxes(c,e){var a=[];var b=0;Ext.each(c,function(l){var j=[];for(var h=1,f=l.length;h<f;h++){var k=l[h];if(Pld.hasPermission([k.name])){if(!e){k.checked=true}j.push(k)}}if(j.length>0){b++;var g=l[0];j=[g].concat(j);this.push({items:j})}},a);for(var d in a){a[d].columnWidth="."+parseInt(1/b*100)}return a}Pld.UserManagement.generatePermissionBitmask=function(a){bitmask=0;Ext.each(Pld.Permissions,function(c,b){if(!Ext.isEmpty(a[c])){bitmask=bitmask|1<<b}});return bitmask};Pld.UserManagement.createUserWizard=function(g,j,i){var b=[{cardTitle:"User Information",items:[{xtype:"wizq",html:!j?"Please provide your username, email (optional) and password.":"Please provide your email (optional) and password."},{xtype:"panel",layout:"table",layoutConfig:{columns:3},defaults:{xtype:"form",border:false,width:300,defaults:{height:200}},items:[{items:{title:"User Information",xtype:"fieldset",defaults:{xtype:"textfield"},items:[!!j?{xtype:"label",text:""}:{name:"user_name",allowBlank:false,fieldLabel:Resources.get("usermanagement.usergrid.column.user_name")},{xtype:"checkbox",name:"user_radius",fieldLabel:"RADIUS authentication",listeners:{check:function(l,m){var k=l.findParentByType("fieldset");var n=k.findBy(function(o){return !!o.name&&o.name.search("user_password")>-1});Ext.each(n,function(o){o.setDisabled(m);o.allowBlank=m||!i})}}},{name:"user_email",vtype:"email",allowBlank:true,fieldLabel:Resources.get("usermanagement.usergrid.column.user_email")},{name:"user_password_1",inputType:"password",allowBlank:!i,fieldLabel:Resources.get("module.user_management.password")},{name:"user_password_2",inputType:"password",allowBlank:!i,validator:function(m){var l=this.findParentByType("form").getForm();var k=l.findField("user_password_1");return k.getValue()==m},invalidText:Resources.get("module.user_management.password_mismatch"),fieldLabel:Resources.get("module.user_management.password_repeat")}]}},{width:10,border:false,xtype:"panel"},{xtype:"form",cellCls:"valigntop",url:Pld.Config.UserManagement.api.upload_logo||"customLogoUpload",fileUpload:true,items:[{xtype:"fieldset",collapsible:true,collapsed:true,title:"Custom Logo",items:[{xtype:"panel",height:50,cls:"centered-panel",html:!i&&!j?'<img class="logoPreview">':'<img class="logoPreview" src="customLogo?_dc='+new Date().getTime()+'">'},{xtype:"checkbox",id:"logo_reflection",name:"logo_reflection",hideLabel:true,plugins:new Ext.iptego.FieldTip({title:"Reflection Effect",text:"Use this option to make your logo look like mirroring on the floor. Disable if any problems occur."}),boxLabel:"Reflection",checked:false},{xtype:"hidden",name:"customLogoId"},{xtype:"field",id:"custom_logo",hideLabel:true,inputType:"file",name:"custom_logo",style:{"margin-top":"5px"},cls:"centered-panel"},{xtype:"button",id:"logo_upload_button",text:"Upload image",handler:function(k){var l=k.findParentByType("form");var m=Ext.id(null,"logo");l.getForm().submit({method:"POST",params:{id:m},waitMsg:"Please wait while the image is being uploaded...",failure:formFailure,success:function(p,q,s){var o=p.getEl();var r=o.up("div.x-window-body");var n=r.dom.getElementsByTagName("img")[0];n.src="customLogo?_dc="+new Date().getTime()+"&temp="+s;p.findField("customLogoId").setValue(s)}.createDelegate(this,[m],true)})}},{xtype:"checkbox",name:"clear_logo",hideLabel:true,plugins:new Ext.iptego.FieldTip({text:"Clear a previously set custom logo"}),boxLabel:"Clear logo",checked:false,listeners:{check:function(l,k){Ext.getCmp("logo_reflection").setDisabled(k);Ext.getCmp("custom_logo").setDisabled(k);Ext.getCmp("logo_upload_button").setDisabled(k)}}}]}]}]}],listeners:{beforeshow:function(l){var k=l.findBy(function(m){if(m instanceof Ext.form.Checkbox){if(m.name=="user_radius"){return true}}return false})[0];k.fireEvent("check",k,k.checked)},afterlayout:function(l){if(!this.isVisible()){return}var m=this.getWizard().getHiddenValues()["id"];if(m){var k=this.getEl().dom.getElementsByTagName("img")[0];if(k){k.src="customLogo?_dc="+new Date().getTime()+"&id="+m}}}}}];function h(p,l,k,n){var o=l.user_password_1,m=l.user_password_2;if(o!==m){warning("Passwords do not match");return}Ext.iptego.request({url:n,params:l,successHandler:function(r,q){if(!q){Pld.getStore("getUsers").reload()}else{if(this.getValues()["customLogoId"]){setCustomLogo()}}this.close()}.createDelegate(p,[k],true),waitMsg:"Saving user information..."})}var c=new Ext.XTemplate("<p>The user will be entered in the user database with the following attributes</p>","<ul>","<li><b>Username</b>: {user_name}</li>","<li><b>Email</b>: {user_email}</li>","<li><b>Realm</b>: {realm}</li>","<li><b>Permissions</b>: {permissions}</li>","</ul>");var e=new Ext.XTemplate("<p>RADIUS should report the following attributes for user `{user_name}`</p>","<ul>","<li><b>PLD-User-Realm</b>: {realm}</li>","<li><b>PLD-User-Permissions</b>: {permissions}</li>","<li><b>PLD-User-Creator</b>: {creator}</li>","</ul>");if(!j){b[0].sequenceControl=function(){return Pld.getStore("getRealmNames").getCount()>1?1:2};Pld.getStore("getRealmNames").reload();b=b.concat([{cardTitle:"Realms",items:[{xtype:"wizq",html:"Select a realm for the user from the list."},{items:[{xtype:"combo",emptyText:Resources.get("module.user_management.select_a_realm"),disableKeyFilter:true,allowBlank:false,displayField:"name",valueField:"id",name:"realm_name",fieldLabel:"Realm",forceSelection:true,editable:false,triggerAction:"all",store:Pld.getStore("getRealmNames"),width:300,hiddenName:"realm",fieldLabel:"Realm"}]}]},{cardTitle:"Permissions for Modules",items:[{xtype:"wizq",html:"Check the boxes of the modules the user will be permitted to use."},{xtype:"panel",layout:"column",defaults:{xtype:"form",border:false,height:250,defaults:{hideLabel:true,xtype:"checkbox"}},items:generatePermissionCheckboxes(navigationCheckboxGroups())}]},{cardTitle:"Permissions for Settings",items:[{xtype:"wizq",html:"Check the boxes of the settings the user will be permitted to modify."},{xtype:"panel",layout:"column",defaults:{xtype:"form",border:false,defaults:{hideLabel:true,xtype:"checkbox"}},items:generatePermissionCheckboxes(settingsCheckboxGroups())}]},{cardTitle:"Summary",items:[{xtype:"wizq",html:"Summary"},{xtype:"panel",html:"Content",id:"user-wizard-summary-content-area"}],listeners:{beforeshow:function(n){var o=n.getWizard();var l=o.getValues();summary={user_name:l.user_name,user_email:l.user_email,realm:l.realm,permissions:Pld.UserManagement.generatePermissionBitmask(l),creator:Pld.getCurrentUser().id};var k=this.getComponent("user-wizard-summary-content-area");var m=Ext.isEmpty(l.user_radius)?c:e;if(k.rendered){m.overwrite(k.body,summary)}else{k.html=m.apply(summary)}}}}])}var d=Pld.Config.UserManagement.api.save_user||"saveUser";var f=Pld.Config.UserManagement.api.save_own||"saveOwn";var a=!j?d:f;return new Ext.iptego.Wizard({height:400,title:g,width:700,closeAction:"close",cardItems:b,resetNextSlidesOnChange:false,listeners:{finished:h.createDelegate(this,[!!j,a],true)}})};Pld.UserManagement.createPermissionsWizard=function(c,e,b){var d=[{cardTitle:"Permissions for Modules",items:[{xtype:"wizq",html:"Check the boxes of the modules the user will be permitted to use."},{xtype:"panel",layout:"column",defaults:{xtype:"form",border:false,height:250,defaults:{hideLabel:true,xtype:"checkbox"}},items:generatePermissionCheckboxes(navigationCheckboxGroups(),true)}]},{cardTitle:"Permissions for Settings",items:[{xtype:"wizq",html:"Check the boxes of the settings the user will be permitted to modify."},{xtype:"panel",layout:"column",defaults:{xtype:"form",border:false,defaults:{hideLabel:true,xtype:"checkbox"}},items:generatePermissionCheckboxes(settingsCheckboxGroups(),true)}]}];function a(l,g,k,j){g.action=k;if(j){var f=[];for(var h=0;h<j.length;h++){f.push(j[h].data.id)}g.selected=Ext.encode(f)}Ext.iptego.request({url:Pld.Config.UserManagement.api.update_permissions||"updatePermissions",params:g,successHandler:function(i){this.close();Pld.getStore("getUsers").reload()}.createDelegate(l),waitMsg:"Updating permissions..."})}return new Ext.iptego.Wizard({height:400,title:e,width:700,closeAction:"close",cardItems:d,resetNextSlidesOnChange:false,listeners:{finished:a.createDelegate(this,[c,b],true)}})};Pld.UserManagement.leaveUser=function(a){Ext.iptego.request({url:Pld.Config.UserManagement.api.leave_user||"leaveUser",params:{index:a},successHandler:function(){location.reload(true)}})};
Pld.RealmsPanel=Ext.extend(Ext.grid.EditorGridPanel,{height:450,viewConfig:{emptyText:Resources.get("module.platform.realms.empty"),forceFit:true},autoExpandColumn:"comments",clicksToEdit:1,initComponent:function(){this.RealmPattern=Ext.data.Record.create([{name:"id",type:"int"},{name:"realm_id",type:"int"},{name:"realm_name",type:"string"},{name:"min",type:"string"},{name:"max",type:"string"},{name:"domain",type:"string"},{name:"comments",type:"string"}]);this.store=new Ext.data.Store({url:Pld.Config.RealmsPanel.api.get_patterns||"getRealmPatterns",storeId:"getRealmPatterns",reader:new Ext.data.JsonReader({root:"data",totalProperty:"totalCount"},this.RealmPattern)});this.sm=new Ext.grid.CheckboxSelectionModel();this.RealmName=Ext.data.Record.create([{name:"id",type:"int"},{name:"name",type:"string"}]);this.cbStore=Pld.getStore("getRealmNames");this.cm=new Ext.grid.ColumnModel([this.sm,{id:"realm_name",header:Resources.get("module.platform.realms.name"),width:40,sortable:true,dataIndex:"realm_name",editor:new Ext.form.ComboBox({store:this.cbStore,displayField:"name",minChars:0,typeAhead:true,mode:"local",triggerAction:"all",listeners:{blur:function(b){var a=b.getValue();if(a&&b.store.find("name",a)<0){Ext.iptego.request({url:Pld.Config.RealmsPanel.api.add_realm||"addRealm",params:{realm:a},successHandler:function(){this.store.reload()}.createDelegate(b)})}}}})},{id:"min",header:Resources.get("module.platform.realms.min"),width:30,sortable:true,dataIndex:"min",editor:new Ext.form.TextField({allowBlank:true})},{id:"max",header:Resources.get("module.platform.realms.max"),width:30,sortable:true,dataIndex:"max",editor:new Ext.form.TextField({allowBlank:true})},{id:"domain",header:Resources.get("module.platform.realms.domain"),width:30,sortable:true,dataIndex:"domain",editor:new Ext.form.TextField({allowBlank:true})},{id:"comments",header:Resources.get("module.platform.realms.comment"),width:100,dataIndex:"comments",editor:new Ext.form.TextField({})}]);this.tbar=[{text:Resources.get("modules.platform.realms.add_pattern"),handler:this.addPattern.createDelegate(this)},"|",{text:Resources.get("modules.platform.realms.delete_pattern"),handler:this.deletePatterns.createDelegate(this)},"|",{text:Resources.get("button.save"),handler:this.savePatterns.createDelegate(this)},{text:Resources.get("button.reset"),handler:function(){this.store.reload()}.createDelegate(this)},"->",{text:Resources.get("button.import_csv"),handler:this.importFromCSV.createDelegate(this)},"|",{text:Resources.get("button.export_csv"),handler:function(){document.location.href="exportRealmsAsCSV"}}];this.bbar=new Ext.PagingToolbar({id:"realms-paging-toolbar",pageSize:25,store:this.store,displayInfo:true,displayMsg:Resources.get("modules.platform.realms.pagingmsg")});this.on("afteredit",this.onAfterEdit,this);Pld.RealmsPanel.superclass.initComponent.call(this)},onAfterEdit:function(b){var a=Ext.getCmp("realms-paging-toolbar");a.disable()},onRender:function(b,a){Pld.RealmsPanel.superclass.onRender.call(this,b,a);this.store.reload();this.cbStore.reload()},addPattern:function(){this.stopEditing();this.store.insert(0,new this.RealmPattern({realm_id:-1,realm_name:"",min:"",max:"",domain:"",comments:""}));this.startEditing(0,0);unsavedRealmsDefinitions=true},savePatternsConfirm:function(){Ext.MessageBox.show({title:Resources.get("modules.platform.realms.button.save.confirmmsg.title"),msg:Resources.get("modules.platform.realms.button.save.confirmmsg"),fn:this.savePatterns.createDelegate(this),buttons:Ext.MessageBox.OKCANCEL,icon:Ext.MessageBox.WARNING})},savePatterns:function(){var a=[];for(var c=0;c<this.store.getCount();c++){var b=this.store.getAt(c);a.push(b.data)}Ext.iptego.request({url:Pld.Config.RealmsPanel.api.save_patterns||"saveRangeList",params:{data:Ext.encode(a)},successHandler:function(d){this.store.reload();this.cbStore.reload();if(!Ext.isEmpty(d.warns)&&d.warns!=""){warning(d.warns)}}},this)},deletePatterns:function(){var c=this.getSelectionModel().getSelections();var a=[];for(var b=0;b<c.length;b++){a.push(c[b].get("id"))}Ext.iptego.request({url:Pld.Config.RealmsPanel.api.delete_patterns||"deleteRealms",params:{data:Ext.encode(a)},successHandler:function(d){this.store.reload();this.cbStore.reload()}},this)},importCsvForm:null,iCsvWindow:null,buildCsvDialog:function(){this.importCsvForm=new Ext.form.FormPanel({title:"Import CSV",url:Pld.Config.RealmsPanel.api.import_from_csv||"importRealmsFromCSV",bodyStyle:{padding:"20px 0px 20px 10px"},labelWidth:120,fileUpload:true,monitorValid:true,items:[{xtype:"textfield",style:"padding: 20px",width:250,fieldLabel:"Upload CSV file",plugins:new Ext.iptego.FieldTip({text:"Please make sure to provide a valid CSV configuration. You may export current Realms as CSV for backup and CSV srtucture documentation purposes."}),name:"upFile",inputType:"file",allowBlank:false}],buttons:[{text:"Import",formBind:true,handler:function(){this.importCsvForm.getForm().submit({method:"POST",waitMsg:"Please wait while the file is uploaded...",success:function(a,b){this.iCsvWindow.hide();answ=b.result;this.store.reload();this.cbStore.reload();if(!Ext.isEmpty(answ.warns)&&answ.warns!=""){warning(answ.warns)}}.createDelegate(this),failure:function(a,b){error("Saving data failed: "+b.result.errorMsg);this.iCsvWindow.hide();this.store.reload();this.cbStore.reload()}.createDelegate(this)})}.createDelegate(this)},{text:"Cancel",handler:function(){this.iCsvWindow.hide()},scope:this}]});this.iCsvWindow=new Ext.Window({title:Resources.get("modules.platform.realms.import_csv.title"),modal:true,width:450,height:150,layout:"fit",items:[this.importCsvForm]})},importFromCSV:function(){if(Ext.isEmpty(this.importCsvForm)){this.buildCsvDialog()}this.iCsvWindow.show()}});Ext.reg("pld-realms-panel",Pld.RealmsPanel);
var _callsDetailsWin=null;Pld.showCallDetailsWin=function(a,c,b){if(!_callsDetailsWin){_callsDetailsWin=new Ext.iptego.CallDetailsWindow()}_callsDetailsWin.updateInfo(a,c,b);_callsDetailsWin.show()};Pld.PanelRenderer=function(a){Ext.apply(this,a);Pld.PanelRenderer.superclass.constructor.call(this)};Ext.extend(Pld.PanelRenderer,Ext.Updater.BasicRenderer,{err_msg:"No data available",render:function(c,a,b,e){var d=Ext.decode(a.responseText);if(!d.success){a.responseText=this.err_msg;Pld.PanelRenderer.superclass.render.call(this,c,a,b,e)}else{a.responseText=this.renderFunc(d);Pld.PanelRenderer.superclass.render.call(this,c,a,b,e)}}});Pld.CallsPanel=Ext.extend(Ext.iptego.Grid,{node:null,user:null,device:null,in_device:null,out_device:null,isForUser:false,isForDevice:false,isForInDevice:false,isForOutDevice:false,searchResults:false,reduce:false,url:"getPagedCalls",totalCountUrl:"getCallsCount",devicesUrl:"getSipDevicesComboStore",useToolbarAsContextmenu:true,autoExpandColumn:"state_details_col",pageSize:20,height:500,partitionStart:0,partitionStop:2,partitionCount:2,viewConfig:{getRowClass:function(a,c,d,b){if(!a.get("id")){return"row_license_limit"}}},declareStaticFields:function(){this.fields=["pid","id","id32","src_user","dst_user",{name:"state",type:"int"},{name:"code",type:"int"},"state_msg","state_cls","state_details",{name:"setup_start_ts",type:"date",dateformat:JSON_FORMAT_DATETIME},{name:"setup_time",type:"int"},{name:"call_time",type:"int"},{name:"nlegs",type:"int"},"ingress_devs","egress_devs","init_devs","term_devs","src_ua","dst_ua","src_codecs","dst_codecs","src_initial_codecs","dst_initial_codecs",{name:"MOS",type:"float"},"mos_cls"];this.columns=[{id:"src_user",width:180,dataIndex:"src_user"},{width:180,dataIndex:"dst_user"},{width:110,dataIndex:"setup_start_ts",renderer:datetimeRenderer,hidden:this.reduced},{width:70,dataIndex:"call_time",renderer:formatTimeIntervalMs,align:"right"},{width:70,dataIndex:"setup_time",renderer:formatTimeIntervalMs,hidden:true},{width:70,dataIndex:"nlegs",hidden:true},{width:50,dataIndex:"code",align:"right",hidden:this.reduced},{width:80,dataIndex:"init_devs",hidden:true},{width:80,dataIndex:"term_devs",hidden:true},{width:80,dataIndex:"src_ua",hidden:true},{width:80,dataIndex:"dst_ua",hidden:true},{width:80,dataIndex:"src_codecs",hidden:true},{width:80,dataIndex:"dst_codecs",hidden:true},{width:80,dataIndex:"src_initial_codecs",hidden:true},{width:80,dataIndex:"dst_initial_codecs",hidden:true},{width:80,dataIndex:"ingress_devs",hidden:this.reduced},{width:80,dataIndex:"egress_devs",hidden:this.reduced},{width:45,dataIndex:"MOS",renderer:this.MOSRenderer,align:"right"},{width:75,dataIndex:"state_msg",renderer:this.callsStateRenderer.createDelegate(this)},{id:"state_details_col",width:120,dataIndex:"state_details",hidden:this.reduced}]},callsStateRenderer:function(c,b,a){str='<span class="calls-'+a.get("state_cls")+'">';str+=c;str+="</span>";return str},MOSRenderer:function(c,b,a){if(b){b.css="calls-"+a.get("mos_cls")}if(Ext.isEmpty(c)){return""}return floatRenderer(c)},buildContextMenu:function(){this.contextMenu=[];if(Pld.hasPermission("nav_utrack")&&Ext.isEmpty(this.node)){this.contextMenu.push({name:"track_caller",callback:function(a){Pld.trackUser(a.src_user)}})}if(Pld.hasPermission("nav_dumps")){this.contextMenu.push({name:"trace_caller",callback:function(a){Pld.createUserTrace(a.src_user)}});this.contextMenu.push("-")}if(Pld.hasPermission("nav_utrack")&&Ext.isEmpty(this.node)){this.contextMenu.push({name:"track_callee",callback:function(a){Pld.trackUser(a.dst_user)}})}if(Pld.hasPermission("nav_dumps")){this.contextMenu.push({name:"trace_callee",callback:function(a){Pld.createUserTrace(a.dst_user)}});this.contextMenu.push("-")}this.contextMenu.push({name:"showDetails",callback:function(a){Pld.showCallDetailsWin(a.pid,a.id,this.node)}.createDelegate(this)});this.contextMenu.push({name:"showChart",callback:function(a){Pld.createCallDiagram(a.id,a.pid,this.node).show()}.createDelegate(this)});if(Pld.hasPermission("view_pdf")){this.contextMenu.push({name:"createPdfReport",callback:function(a){Pld.createCallReport(a,true,this.node).show()}.createDelegate(this)})}this.contextMenu.push("-")},initComponent:function(){this.url=Pld.getNodeRelativeUrl(this.url,this.node);this.totalCountUrl=Pld.getNodeRelativeUrl(this.totalCountUrl,this.node);this.declareStaticFields();this.store=new Ext.data.JsonStore({idProperty:"id32",url:this.url,root:"calls",totalProperty:"totalCount",fields:this.fields,listeners:{beforeload:function(){if(this.isForUser&&this.user==null){return false}if(this.isForDevice&&this.device==null){return false}if(this.isForInDevice&&this.in_device==null){return false}if(this.isForOutDevice&&this.out_device==null){return false}this.refresher.disable();return true},load:function(b){this.refresher.enable();var e=b.reader.jsonData;if(e&&!Ext.isEmpty(e.partitions)){var f=e.partitions;var a=this.partitionCount;this.partitionCount=f.length;this.partitionStart=this.partitionStart.constrain(0,this.partitionCount-1);this.partitionStop=this.partitionStop.constrain(this.partitionStart+1,this.partitionCount);if(this.partitionCount!=a){if(this.partitionCount>1){this.partition_selector.maxValue=this.partitionCount+1;this.partition_selector.setValues([this.partitionStart,this.partitionStop])}}this.partition_selector.setDisabled(this.partitionCount<2);var d=0;for(var c=this.partitionStart;c<this.partitionStop;c++){d+=f[c].ncalls}if(!this.reduced){Ext.get("partition_selector_count").dom.innerHTML=String.format("Scope ({0} calls):",d)}}},scope:this}});this.refresher=new Ext.iptego.AutoRefresher({target:this.store});this.devFilterStore=new Ext.data.JsonStore({url:Pld.getNodeRelativeUrl(this.devicesUrl,this.node),fields:["id","name"],root:"data",idProperty:"id"});this.filters=new Ext.iptego.GridFilters({filters:[{type:"string",dataIndex:"src_user"},{type:"string",dataIndex:"dst_user"},{type:"datetime",dataIndex:"setup_start_ts"},{type:"numeric",dataIndex:"call_time"},{type:"numeric",dataIndex:"setup_time"},{type:"numeric",dataIndex:"nlegs"},{type:"numeric",dataIndex:"code"},{type:"string",dataIndex:"src_ua"},{type:"string",dataIndex:"dst_ua"},{type:"string",dataIndex:"src_codecs"},{type:"string",dataIndex:"dst_codecs"},{type:"string",dataIndex:"src_initial_codecs"},{type:"string",dataIndex:"dst_initial_codecs"},{type:"list",dataIndex:"state_msg",options:["Unauthorized","Proceeding","Ringing","Established","Finished","Timed out","Error","Failed","Closed by CleanBye","Not Found","Moved","Off-line","Busy","Canceled"]},{type:"list",dataIndex:"ingress_devs",store:this.devFilterStore,labelField:"name"},{type:"list",dataIndex:"egress_devs",store:this.devFilterStore,labelField:"name"},{type:"list",dataIndex:"init_devs",store:this.devFilterStore,labelField:"name"},{type:"list",dataIndex:"term_devs",store:this.devFilterStore,labelField:"name"},{type:"numeric",dataIndex:"MOS"}]});this.buildContextMenu();if(!this.id){this.id=this.isForUser?"callviewer_usr.grid":"callviewer.grid";this.id=this.isForDevice?"callviewer_dev.grid":this.id}this.resourceid="callviewer.grid";this.topToolbar=[];this.partition_selector=new Ext.iptego.RangeSlider({getText:function(d,b){var f=d.store.reader.jsonData;var h=this.isLeft(b);var g=d.getValues()[b];g=h?g:g-1;g=g.constrain(0,f.partitions.length-1);if(f&&!Ext.isEmpty(f.partitions)){var a=f.partitions[g];var c,e;if(h){if(g==0){return"Now"}c=a.end_ts;e="From: "}else{c=a.start_ts;e="To: "}return e+datetimeRenderer(c)}},listeners:{set:function(b){var a=b.getValues();this.partitionStart=a[0];this.partitionStop=a[1];this.store.baseParams.partitionStart=this.partitionStart;this.store.baseParams.partitionStop=this.partitionStop;this.store.reload();this.getBottomToolbar().resetCount()}.createDelegate(this)},store:this.store,values:[0,1],width:200,disabled:true,maxValue:10,minValue:0,range:this.isForUser?6:3,increment:1});if(!this.reduced){this.topToolbar.push({xtype:"tbtext",text:"Scope:",id:"partition_selector_count"})}this.topToolbar=this.topToolbar.concat(["Latest",this.partition_selector,"Oldest"]);this.topToolbar.push("->");if(!this.reduced){this.topToolbar.push({name:"csv_export",iconCls:"icon_csv",tooltip:"CSV export of calls, filters apply if set",callback:this.onCsvExport.createDelegate(this)});if(Pld.hasPermission("nav_main")&&Pld.hasPermission("set_dashboard")){this.topToolbar.push({name:"dashboard",iconCls:"icon_dashboard",tooltip:"Show in Dashboard",selectionRequired:false,callback:function(){if(this.isForUser){Pld.Dashboard.configurePortlet({xtype:"user-calls-portlet",user:this.user})}else{if(this.isForDevice){Pld.Dashboard.configurePortlet({xtype:"calls-passing-device-portlet",device:this.device})}else{if(this.isForInDevice){Pld.Dashboard.configurePortlet({xtype:"calls-terminated-by-device-portlet",device:this.in_device})}else{if(this.isForOutDevice){Pld.Dashboard.configurePortlet({xtype:"calls-created-by-device-portlet",device:this.out_device})}else{Pld.Dashboard.configurePortlet({xtype:"calls-portlet"})}}}}}.createDelegate(this)})}this.topToolbar.push("-")}this.topToolbar.push(this.refresher);Pld.CallsPanel.superclass.initComponent.call(this)},listeners:{rowdblclick:function(a,d,b){var c=a.getSelection();if(!Ext.isEmpty(c.pid)||!Ext.isEmpty(c.id)){Pld.showCallDetailsWin(c.pid,c.id,a.node)}}},setUser:function(a){this.user=a;this.store.baseParams.user=a;this.store.reload()},setDevice:function(a){this.device=a;this.store.baseParams.device=a;this.store.reload()},setInDevice:function(a){this.in_device=a;this.store.baseParams.in_device=a;this.store.reload()},setOutDevice:function(a){this.out_device=a;this.store.baseParams.out_device=a;this.store.reload()}});Ext.reg("calls-panel",Pld.CallsPanel);Ext.iptego.CallDetailsWindow=Ext.extend(Ext.Window,{width:700,height:500,collapsible:true,constrainHeader:true,closeAction:"hide",pid:0,id:0,node:null,compileTemplate:function(){this.headTemplate=new Ext.XTemplate('<div class="call-details-head">','<p class="call-details-hdr">','<tpl if="values.src_user"><span id="srcUser" style="cursor:pointer">',"{src_user}","</span></tpl>"," -&gt; ",'<tpl if="values.dst_user"><span id="dstUser" style="cursor:pointer">',"{dst_user}","</span></tpl>","</p>","<p>",'<span class="calls-{state_cls}">{state_msg}</span> <br />','<tpl if="values.state_details">',"State Details: {state_details} <br />","</tpl>","Setup start time: {setup_start_ts} <br />",'<tpl if="values.setup_time">',"Ringing time: {setup_time} <br />","</tpl>",'<tpl if="values.call_time">',"<p>Call time: {call_time} <br />","</tpl>","</p>","</div>");this.legsTemplate=new Ext.XTemplate('<div class="call-details">','<p class="legs-header">This call has {nlegs} segment(s):</p>','<tpl for="legs">','<p class="leg-header">','<span id="srcIp" style="cursor:default">{src_ip}</span>:{src_port} -&gt;',' <span id="dstIp" style="cursor:default">{dst_ip}</span>:{dst_port}',"</p>",'<p class="leg-details">','State: <span class="calls-{state_cls}">{state_msg}</span> <br />','<tpl if="values.code">',"Last response code: {code} <br />","</tpl>","Call-ID: {callid} <br />","From tag: {from_tag} <br />",'<tpl if="values.to_tag">',"To tag: {to_tag} <br />","</tpl>",'<tpl if="values.src_uri">',"Caller uri: {src_uri} <br />","</tpl>",'<tpl if="values.dst_uri">',"Callee uri: {dst_uri} <br />","</tpl>",'<tpl if="values.ruri">',"Request-URI: {ruri} <br />","</tpl>",'<tpl if="values.src_ua">',"Caller device: {src_ua} <br />","</tpl>",'<tpl if="values.dst_ua">',"Callee device: {dst_ua} <br />","</tpl>","</tpl>","</div>");this.voiceTemplate=new Ext.XTemplate('<div class="calls-voice">','<tpl for="resp">',"<hr />",'<div class="calls-voice-sep">','<p class="calls-voice-header">',"Reporter: {source}","</p>",'<tpl if="values.decoder">',"Decoder: {decoder} <br />","</tpl>",'<p class="calls-voice-header">',"Stream direction: {direction}","</p>",'<tpl if="!Ext.isEmpty(values.src_ip)">',"Stream source address: {src_ip}:{src_port} <br />","</tpl>",'<tpl if="!Ext.isEmpty(values.dst_ip)">',"Stream destination address: {dst_ip}:{dst_port} <br />","</tpl>",'<tpl if="!Ext.isEmpty(values.first_ts)">',"Timestamp of the first packet from the stream: {first_ts} <br />","</tpl>",'<tpl if="!Ext.isEmpty(values.last_ts)">',"Timestamp of the last packet from the stream: {last_ts} <br />","</tpl>",'<tpl if="values.MOS">','<div class="calls-voice-sep">',"MOScqe: {MOS} <br />","</tpl>",'<tpl if="!Ext.isEmpty(values.R)">',"R factor (E-model quality estimation): {R} <br />","</tpl>",'<tpl if="!Ext.isEmpty(values.Ieeff)">',"Effective equipment impairment factor (Ie-eff): {Ieeff} <br />","</tpl>",'<div class="calls-voice-sep">','<tpl if="!Ext.isEmpty(values.pl_rate)">',"Packet lost rate: {pl_rate}% <br />","</tpl>",'<tpl if="values.received">',"Packets received: {received} <br />","</tpl>",'<tpl if="values.expected">',"Packets expected: {expected} <br />","</tpl>",'<tpl if="!Ext.isEmpty(values.max_burst)">',"Maximum packet burst lost: {max_burst} <br />","</tpl>",'<tpl if="!Ext.isEmpty(values.burst_cnt)">',"Number of burst losts (gaps): {burst_cnt} <br />","</tpl>",'<div class="calls-voice-sep">','<tpl if="!Ext.isEmpty(values.max_jitter)">',"Maximum jitter in milliseconds: {max_jitter} <br />","</tpl>",'<tpl if="!Ext.isEmpty(values.avg_jitter)">',"Average jitter in milliseconds: {avg_jitter} <br />","</tpl>",'<tpl if="!Ext.isEmpty(values.total_jitter)">',"Total jitter in milliseconds: {total_jitter} <br />","</tpl>",'<tpl if="!Ext.isEmpty(values.latency)">',"Latency in milliseconds: {latency} <br />","</tpl>","</tpl>","</div>")},initButtons:function(){this.closeButton=new Ext.Button({text:"Close",handler:function(){this.hide()},scope:this,minWidth:75});this.refreshButton=new Ext.iptego.AutoRefresher({text:"Refresh",handler:this.refreshInfo.createDelegate(this)});this.diagramButton=new Ext.Button({text:"Message flow",handler:this.showDiagram.createDelegate(this),minWidth:75});this.pcapButton=new Ext.Button({text:"PCAP",handler:function(){if(this.pid!=0||this.id!=0){if(Pld.hasPermission("nav_rtp_recording")){Ext.iptego.request({url:Pld.getNodeRelativeUrl("getAvailablePcaps",this.node),params:{pid:this.pid,id:this.id},successHandler:function(a){Pld.createCallPcap({pid:this.pid,id:this.id,available:a.available},this.node)}.createDelegate(this)})}else{Pld.createCallPcap({pid:this.pid,id:this.id,available:[]},this.node)}}}.createDelegate(this),scope:this,minWidth:75});this.reportButton=new Ext.Button({text:"PDF",handler:function(){if(this.pid!=0||this.id!=0){Pld.createCallReport({pid:this.pid,id:this.id},true,this.node)}}.createDelegate(this),scope:this,minWidth:75});this.helpButton=new Ext.Button({text:"Help",handler:function(){Pld.openHelpTopic("55ui-calls.html#call-details-window")},minWidth:75})},initPanels:function(){this.northPanel=new Ext.Panel({height:100,region:"north",bodyStyle:"padding:10px 10px 10px 40px;",border:"no",html:"Call details"});this.detailedPanel=new Ext.Panel({title:"Segments",bodyStyle:"padding:10px 10px 10px 20px;background-color:white;",html:"No data",autoScroll:true});this.voicePanel=new Ext.Panel({title:"Voice Quality",bodyStyle:"padding:10px 10px 10px 20px;background-color:white;",html:"No data",autoScroll:true});this.msgsGrid=new Ext.iptego.MsgGrid({url:"getCallMsgs",title:"Messages",params:{pid:this.pid,id:this.id}})},createContextMenu:function(c,b){if(b.id.indexOf("User")!=-1){var f=b.textContent;var a=new Ext.menu.Menu();if(Pld.hasPermission("nav_utrack")){a.add({text:Resources.get("users.menu.track"),handler:function(e){Pld.trackUser(e)}.createDelegate(this,[f])})}if(Pld.hasPermission("nav_dumps")){a.add({text:Resources.get("users.menu.create_trace"),handler:function(e){Pld.createUserTrace(e)}.createDelegate(this,[f])})}a.add({text:Resources.get("users.menu.more_info"),handler:function(g){var e=new Ext.iptego.UserMoreInfoWindow({user:g});e.show()}.createDelegate(this,[f])});c.stopEvent();a.showAt(c.xy)}if(b.id.indexOf("Ip")!=-1){var d=b.textContent;var a=new Ext.menu.Menu();a.add({text:Resources.get("ip.menu.whois_info"),handler:Pld.showWhoisWindow.createDelegate(this,[d,this.node])});if(Pld.hasPermission("nav_iptrack")){a.add({text:Resources.get("ip.menu.track_ip"),handler:Pld.trackIp.createDelegate(this,[d])})}c.stopEvent();a.showAt(c.xy)}},prepareContextMenu:function(){var a=["srcUser","dstUser","srcIp","dstIp"];for(var b=0;b<a.length;b++){var c=Ext.fly(a[b]);if(!Ext.isEmpty(c)){c.on("contextmenu",this.createContextMenu,this)}}},updateDetailedPanel:function(b,d){var a=this.detailedPanel.getEl();var c=this.detailedPanel.getUpdater();if(typeof(c.getRenderer())!=Pld.PanelRenderer){c.setRenderer(new Pld.PanelRenderer({err_msg:"No data available. This call was probably lost during a PALLADION core restart. Please refresh the call list. ",renderFunc:this.renderDetailedPanel.createDelegate(this)}))}c.on("update",this.prepareContextMenu,this);c.update({url:Pld.getNodeRelativeUrl("getCallDetails",this.node),params:{id:d,pid:b}})},updateVoicePanel:function(b,d){if(!this.voicePanel.rendered){return}var a=this.voicePanel.getEl();var c=this.voicePanel.getUpdater();if(typeof(c.getRenderer())!=Pld.PanelRenderer){c.setRenderer(new Pld.PanelRenderer({err_msg:"No RTP data available.",renderFunc:this.renderVoicePanel.createDelegate(this)}))}c.update({url:Pld.getNodeRelativeUrl("getRtpStatsForCall",this.node),params:{id:d,pid:b}})},updateHeadPanel:function(a,d){var b=this.northPanel.getEl();var c=this.northPanel.getUpdater();if(typeof(c.getRenderer())!=Pld.PanelRenderer){c.setRenderer(new Pld.PanelRenderer({renderFunc:this.renderHeadPanel.createDelegate(this)}))}c.on("update",this.prepareContextMenu,this);c.update({url:Pld.getNodeRelativeUrl("getCallDetails",this.node),params:{id:d,pid:a}})},updateInfo:function(a,c,b){this.pid=a;this.id=c;this.node=b;this.msgsGrid.setUrl(Pld.getNodeRelativeUrl("getCallMsgs",this.node));this.msgsGrid.setParams({id:c,pid:a});if(this.rendered){this.refreshInfo()}},showDiagram:function(){if(this.pid!=0||this.id!=0){this.diaWin=Pld.createCallDiagram(this.id,this.pid,this.node).show()}},refreshInfo:function(){if(this.pid!=0||this.id!=0){this.updateDetailedPanel(this.pid,this.id);this.updateVoicePanel(this.pid,this.id);this.updateHeadPanel(this.pid,this.id);this.msgsGrid.refreshInfo()}},renderDetailedPanel:function(b){var c=b.resp;var a=this.legsTemplate.apply(c);return a},renderVoicePanel:function(c){if(c.resp.length==0){return"We have no RTP data about this call."}var d=c.resp;for(var a=0;a<d.length;a++){d[a].direction=(d[a].dir=="src2dst")?"From caller to callee":"From callee to caller"}var b=this.voiceTemplate.apply(c);return b},renderHeadPanel:function(b){var c=b.resp;if(!Ext.isEmpty(c.setup_time)&&c.setup_time>=0){c.setup_time=formatTimeIntervalMs(c.setup_time)}if(!Ext.isEmpty(c.call_time)&&c.call_time>=0){c.call_time=formatTimeIntervalMs(c.call_time)}var a=this.headTemplate.apply(c);return a},initComponent:function(){this.initPanels();this.initButtons();this.compileTemplate();var a=[this.detailedPanel,this.voicePanel];a.push(this.msgsGrid);var b=[this.refreshButton,this.diagramButton];if(Pld.hasPermission("view_sipmsgs")){b.push(this.pcapButton)}if(Pld.hasPermission("view_pdf")){b.push(this.reportButton)}b.push(this.helpButton);b.push(this.closeButton);Ext.apply(this,{title:Resources.get("callviewer.detailswin.title"),layout:"border",buttons:b,items:[this.northPanel,{region:"center",layout:"fit",items:[new Ext.TabPanel({region:"center",activeTab:0,defferedRender:false,items:a})]}]});this.on("show",this.refreshInfo,this);this.voicePanel.on("render",this.refreshInfo,this);Ext.iptego.CallDetailsWindow.superclass.initComponent.call(this)}});Pld.createCallPcap=function(c,d){if(c.available.length==0){Ext.iptego.requestFile({url:Pld.getNodeRelativeUrl("callPcap",this.node),params:{pid:c.pid,id:c.id}});return}var b=[];var a=new Ext.form.Checkbox({boxLabel:"Signaling messages"});b.push(a);var e=[];Ext.each(c.available,function(h){if(h.type=="rtp"){var g=new Ext.form.Checkbox({name:"rtp_stream_%d",boxLabel:String.format("RTP stream from {0}:{1} to {2}:{3}",h.sip,h.sport,h.dip,h.dport)});b.push(g);h.chkbox=g}});Ext.each(b,function(g){Ext.apply(g,{checked:true,hideLabel:true})});var f=new Ext.Window({title:"Please select the messages to include",layout:"border",height:300,width:480,items:[{xtype:"panel",border:false,region:"north",bodyStyle:"padding: 10px;background-color: white",html:"For this call, we have more streams of raw packets available. Please select which streams you want to include in the generated PCAP file."},{xtype:"form",autoScroll:true,region:"center",bodyStyle:"padding: 10px;background-color: white",border:false,items:b}],buttons:[{text:"Download",handler:function(){var h=[];if(a.getValue()){h.push("signaling")}Ext.each(c.available,function(j){if(!Ext.isEmpty(j.chkbox)&&j.chkbox.getValue()){h.push(j.name)}});var g={pid:c.pid,id:c.id};Ext.iptego.requestFile({url:Pld.getNodeRelativeUrl("callPcap",this.node),params:{pid:c.pid,id:c.id,streams:Ext.encode(h)}})}},{text:"Close",handler:function(){f.destroy()}}]});f.show()};Pld.createCallReport=function(d,e,g){var a=["callReportInfo","callReportVoiceQuality","callReportGraph","callReportTrace"];var m=[];var j=new Ext.form.Checkbox({name:"callReportInfo",checked:true,hideLabel:true,boxLabel:"Call Information"});m.push(j);var l=new Ext.form.Checkbox({name:"callReportLinkQuality",checked:true,hideLabel:true,boxLabel:"Link Quality Information"});m.push(l);var b=new Ext.form.Checkbox({name:"callReportVoiceQuality",checked:true,hideLabel:true,boxLabel:"Voice Quality Information"});m.push(b);var n=new Ext.form.Checkbox({name:"callReportGraph",checked:true,hideLabel:true,boxLabel:"Include Graph"});m.push(n);var k=new Ext.form.Checkbox({name:"callReportTrace",checked:true,hideLabel:true,boxLabel:"Messages"});if(Pld.hasPermission("view_sipmsgs")){m.push(k)}var f=new Ext.form.TextArea({name:"callReportComment",height:90,allowBlank:true,fieldLabel:"Report Comment (optional)"});var c=new Ext.form.FormPanel({url:Pld.getNodeRelativeUrl("createCallReport",g),fileUpload:true,frame:true,border:false,monitorValid:true,labelAlign:"top",labelWidth:120,bodyStyle:{padding:"5px"},waitMsgTarget:true,items:[{xtype:"hidden",name:"reportType",value:e?"pdf":"html"},{xtype:"fieldset",autoHeight:true,title:"Report Contents",defaults:{width:420},items:m},{xtype:"fieldset",autoHeight:true,title:"Additional Info",defaults:{width:420},collapsible:false,items:[f]}],buttons:[{formBind:true,text:"Create",handler:function(){formContents=c.getForm().getValues();nothingToDeclare=true;for(i=0;i<a.length;i++){if(typeof(formContents[a[i]])!="undefined"){nothingToDeclare=false}}if(nothingToDeclare){Ext.Msg.alert("Warning","Nothing selected. Please choose at least one option to include.");return 0}c.getForm().submit();h.hide()}},{text:"Reset",handler:function(){c.getForm().reset()}},{text:"Cancel",handler:function(){h.hide()}}]});for(item_ in d){c.add(new Ext.form.Hidden({name:item_,value:d[item_]}))}var h=new Ext.Window({title:"Create Report",layout:"fit",autoScroll:true,height:450,width:480,modal:true,items:c});h.show()};Pld.CallsPortlet=Ext.extend(Pld.DashboardPortlet,{requiredPermissions:["nav_callviewer"],initComponent:function(){this.items=new Pld.CallsPanel({reduced:true,height:300,node:this.node});Pld.CallsPortlet.superclass.initComponent.call(this)},getConfig:function(){var a=Pld.CallsPortlet.superclass.getConfig.call(this);Ext.apply(a,{xtype:"calls-portlet"});return a}});Ext.reg("calls-portlet",Pld.CallsPortlet);Pld.UserCallsPortlet=Ext.extend(Pld.DashboardPortlet,{requiredPermissions:["nav_callviewer","nav_utrack"],initComponent:function(){this.items=new Pld.CallsPanel({height:300,reduced:true,isForUser:true,node:this.node});this.items.setUser(this.user);Pld.UserCallsPortlet.superclass.initComponent.call(this)},getConfig:function(){var a=Pld.UserCallsPortlet.superclass.getConfig.call(this);Ext.apply(a,{xtype:"user-calls-portlet",user:this.user});return a}});Ext.reg("user-calls-portlet",Pld.UserCallsPortlet);Pld.CallsPassingDevicePortlet=Ext.extend(Pld.DashboardPortlet,{requiredPermissions:["nav_callviewer","nav_device_detail"],initComponent:function(){this.items=new Pld.CallsPanel({height:300,reduced:true,isForDevice:true,node:this.node});this.items.setDevice(this.device);Pld.CallsPassingDevicePortlet.superclass.initComponent.call(this)},getConfig:function(){var a=Pld.CallsPassingDevicePortlet.superclass.getConfig.call(this);Ext.apply(a,{xtype:"calls-passing-device-portlet",device:this.device});return a}});Ext.reg("calls-passing-device-portlet",Pld.CallsPassingDevicePortlet);Pld.CallsTerminatedByDevicePortlet=Ext.extend(Pld.DashboardPortlet,{requiredPermissions:["nav_callviewer","nav_device_detail"],initComponent:function(){this.items=new Pld.CallsPanel({height:300,reduced:true,isForInDevice:true,node:this.node});this.items.setInDevice(this.device);Pld.CallsTerminatedByDevicePortlet.superclass.initComponent.call(this)},getConfig:function(){var a=Pld.CallsTerminatedByDevicePortlet.superclass.getConfig.call(this);Ext.apply(a,{xtype:"calls-terminated-by-device-portlet",device:this.device});return a}});Ext.reg("calls-terminated-by-device-portlet",Pld.CallsTerminatedByDevicePortlet);Pld.CallsCreatedByDevicePortlet=Ext.extend(Pld.DashboardPortlet,{requiredPermissions:["nav_callviewer","nav_device_detail"],initComponent:function(){this.items=new Pld.CallsPanel({height:300,reduced:true,isForOutDevice:true,node:this.node});this.items.setOutDevice(this.device);Pld.CallsCreatedByDevicePortlet.superclass.initComponent.call(this)},getConfig:function(){var a=Pld.CallsCreatedByDevicePortlet.superclass.getConfig.call(this);Ext.apply(a,{xtype:"calls-created-by-device-portlet",device:this.device});return a}});Ext.reg("calls-created-by-device-portlet",Pld.CallsCreatedByDevicePortlet);
Pld.RegsPanel=Ext.extend(Ext.iptego.Grid,{node:null,user:null,isForUser:false,device:null,useToolbarAsContextmenu:true,isForDevice:false,id:"regevents.grid",resourceid:"regevents.grid",autoExpandColumn:"contacts",viewConfig:{getRowClass:function(a,c,d,b){if(!a.get("id")){return"row_license_limit"}}},fields:["id","user","contacts","ip","dest_ip","type_msg","dev_id",{name:"ts",type:"date",dateformat:JSON_FORMAT_DATETIME},{name:"code",type:"int"}],typeRenderer:function(d,c,a){var b="orange";if(d=="New"){b="green"}else{if(d=="Failed"){b="red"}}str='<span class="calls-'+b+'">';str+=d;str+="</span>";return str},buildColumns:function(){this.columns=[{width:150,dataIndex:"user"},{id:"contacts",width:200,dataIndex:"contacts"},{width:80,dataIndex:"ip",hidden:this.reduced},{width:80,dataIndex:"dest_ip",hidden:true},{width:150,dataIndex:"ts",renderer:datetimeRenderer,hidden:this.reduced},{width:50,dataIndex:"dev_id",hidden:this.reduced},{width:50,dataIndex:"type_msg",renderer:this.typeRenderer},{width:50,dataIndex:"code",align:"right",hidden:this.reduced}]},buildContextMenu:function(){this.contextMenu=[];if(!this.isForUser&&Pld.hasPermission("nav_utrack")){this.contextMenu.push({name:"track_user",callback:function(a){Pld.trackUser(a.user)}})}if(Pld.hasPermission("nav_dumps")){this.contextMenu.push({name:"trace_user",callback:function(a){Pld.createUserTrace(a.user)}});this.contextMenu.push("-")}this.contextMenu.push({name:"whois_ip",callback:function(a){Pld.showWhoisWindow(a.ip,this.node)}.createDelegate(this)})},initComponent:function(){this.totalCountUrl=Pld.getNodeRelativeUrl("getRegsCount",this.node);this.buildColumns();this.store=new Ext.data.JsonStore({id:"id",url:Pld.getNodeRelativeUrl("getRegsPaged",this.node),root:"data",idProperty:"id",totalProperty:"totalCount",fields:this.fields,listeners:{beforeload:function(){return !(this.isForUser&&this.user==null)&&!(this.isForDevice&&this.device==null)}.createDelegate(this)}});this.devFilterStore=new Ext.data.JsonStore({url:Pld.getNodeRelativeUrl("getSipDevicesComboStore",this.node),fields:["id","name"],root:"data",idProperty:"id"});this.filters=new Ext.iptego.GridFilters({filters:[{type:"string",dataIndex:"user"},{type:"string",dataIndex:"contacts"},{type:"datetime",dataIndex:"ts"},{type:"numeric",dataIndex:"code"},{type:"string",dataIndex:"ip"},{type:"string",dataIndex:"dest_ip"},{type:"list",dataIndex:"type_msg",options:["New","Failed","Unauthorized","Expired","Gone"]},{type:"list",dataIndex:"dev_id",store:this.devFilterStore,labelField:"name"}]});this.buildContextMenu();this.pageSize=this.isForUser?5:22;if(!this.height){this.height=this.isForUser?150:500}if(!this.isForUser){this.refresher=new Ext.iptego.AutoRefresher({target:this.store});this.topToolbar=[];if(!this.reduced){this.topToolbar.push({name:"showDetails",selectionRequired:true,callback:function(a){this.detailsWin.updateInfo(a.id);this.detailsWin.show()}});this.topToolbar.push({name:"showChart",selectionRequired:true,callback:function(a){Pld.createRegDiagram(a.id).show()}})}this.topToolbar.push("->");if(!this.reduced){this.topToolbar.push({name:"csv_export",iconCls:"icon_csv",tooltip:"CSV export of registrations, filters apply if set",callback:this.onCsvExport.createDelegate(this)});if(Pld.hasPermission("nav_main")&&Pld.hasPermission("set_dashboard")){this.topToolbar.push({name:"dashboard",iconCls:"icon_dashboard",tooltip:"Show in Dashboard",selectionRequired:false,callback:function(){if(this.isForUser){Pld.Dashboard.configurePortlet({xtype:"user-regs-portlet",user:this.user})}else{if(this.isForDevice){Pld.Dashboard.configurePortlet({xtype:"device-regs-portlet",device:this.device})}else{Pld.Dashboard.configurePortlet({xtype:"regs-portlet"})}}}.createDelegate(this)})}}this.topToolbar.push(this.refresher)}Pld.RegsPanel.superclass.initComponent.call(this);if(this.isForUser){this.getColumnModel().setHidden(0,true)}this.detailsWin=new Ext.iptego.RegDetailsWindow({node:this.node})},setUser:function(a){this.user=a;this.store.baseParams.user=a;this.store.reload()},setDevice:function(a){this.device=a;this.store.baseParams.device=a;this.store.reload()},listeners:{rowdblclick:function(){var a=this.getSelection(true);this.detailsWin.updateInfo(a.get("id"));this.detailsWin.show()}}});Ext.iptego.RegDetailsWindow=Ext.extend(Ext.Window,{node:null,width:700,height:500,collapsible:true,constrainHeader:true,closeAction:"hide",id:0,initButtons:function(){this.closeButton=new Ext.Button({text:"Close",handler:function(){this.hide()},scope:this,minWidth:75})},initPanels:function(){this.northPanel=new Ext.Panel({height:75,region:"north",bodyStyle:"padding:10px 10px 10px 20px;",border:"no",html:"Registration event details"});this.diagramButton=new Ext.Button({text:"Message flow",handler:function(){if(this.id!=0){Pld.createRegDiagram(this.id).show()}},scope:this,minWidth:75});this.pcapButton=new Ext.Button({text:"PCAP",handler:function(){if(this.id!=0){Ext.iptego.requestFile({url:Pld.getNodeRelativeUrl("regEvPcap",this.node),params:{id:this.id}})}},scope:this,minWidth:75});this.helpButton=new Ext.Button({text:"Help",minWidth:75});this.msgsGrid=new Ext.iptego.MsgGrid({url:Pld.getNodeRelativeUrl("getRegEvMsgs",this.node),params:{id:this.id}})},getUpdateManager:function(a,d,b){var c=a.getUpdater();if(typeof(c.getRenderer())!=Pld.PanelRenderer){c.setRenderer(new Pld.PanelRenderer({renderFunc:d.createDelegate(this)}))}if(!Ext.isEmpty(b)){c.on("update",b,this)}return c},compileTemplates:function(){this.northTemplate=new Ext.XTemplate('<table id="regNorthPanel">',"<tr>","<td>User: {user}</td><td>Ip: {ip}</td>","</tr><tr>","<td>Timestamp: {ts}</td>","<td>Event: ",'<span class="calls-{color}">{type_msg}</span>',"</td>","</tr>","<tr>","<td>Ingress Device: {device}</td>","</tr>","</table>")},clearNorth:function(){var a=this.northPanel.getEl();Ext.DomHelper.overwrite(a,{html:""})},renderNorth:function(a){var h=Ext.DomHelper;var e=this.northPanel.getEl();var i=h.overwrite(e,{cls:"regNorthPanel",children:[{tag:"table",children:[{tag:"tr",children:[{tag:"td",cls:"regNorthPanel",html:"User: "},{tag:"td",children:[{tag:"span",cls:"reg-user regNorthPanelVal",html:a.user}]},{tag:"td",cls:"regNorthPanel",html:"IP address: "},{tag:"td",children:[{tag:"span",cls:"reg-ip regNorthPanelVal",html:a.ip}]}]},{tag:"tr",children:[{tag:"td",cls:"regNorthPanel",html:"Timestamp:"},{tag:"td",children:[{tag:"span",cls:"reg-ts regNorthPanelVal",html:a.ts}]},{tag:"td",cls:"regNorthPanel",html:"Event type:"},{tag:"td",children:[{tag:"span",cls:"reg-type regNorthPanelVal",html:a.type_msg},{tag:"img",src:"images/icon_info.png",style:"margin-left: 8px; margin-top: 2px",qtip:Resources.get("regs.type_msg.tips."+a.type_msg)}]}]},{tag:"tr",children:[{tag:"td",cls:"regNorthPanel",html:"Ingress Device:"},{tag:"td",children:[{tag:"span",cls:"reg-device regNorthPanelVal",html:a.device}]}]}]}]});var b=new Ext.Element(i);var g=b.child(".reg-user");if(!Ext.isEmpty(g)&&Ext.isEmpty(this.node)){g.applyStyles({cursor:"pointer"});g.on("contextmenu",Pld.createUserMenu.createDelegate(window,[a.user],0));g.on("click",Pld.createUserMenu.createDelegate(window,[a.user],0))}var j=b.child(".reg-ip");if(!Ext.isEmpty(j)&&Ext.isEmpty(this.node)){j.applyStyles({cursor:"pointer"});j.on("contextmenu",Pld.createIpMenu.createDelegate(window,[a.ip],0));j.on("click",Pld.createIpMenu.createDelegate(window,[a.ip],0))}var f=b.child(".reg-type");if(!Ext.isEmpty(f)){var d="orange";var c=a.type_msg;if(c=="New"){d="green"}else{if(c=="Failed"){d="red"}}f.addClass("calls-"+d);j.applyStyles({cursor:"pointer"})}},updateNorth:function(){Ext.Ajax.request({url:Pld.getNodeRelativeUrl("getRegEvent",this.node),params:{id:this.id},success:function(c,a){var b=Ext.decode(c.responseText);if(b.success){this.renderNorth(b.reg)}else{this.clearNorth()}},failure:this.clearNorth,scope:this})},refreshInfo:function(){this.msgsGrid.refreshInfo();this.updateNorth()},updateInfo:function(a){this.id=a;this.msgsGrid.setParams({id:a});if(this.rendered){this.refreshInfo()}},initComponent:function(){this.initPanels();this.initButtons();this.compileTemplates();Ext.apply(this,{title:"Registration details",layout:"border",buttons:[this.diagramButton,this.pcapButton,this.helpButton,this.closeButton],items:[this.northPanel,{region:"center",layout:"fit",items:[this.msgsGrid]}]});this.on("show",this.refreshInfo,this);Ext.iptego.RegDetailsWindow.superclass.initComponent.call(this)}});Pld.RegsPortlet=Ext.extend(Pld.DashboardPortlet,{requiredPermissions:["nav_regviewer"],initComponent:function(){this.items=new Pld.RegsPanel({id:this.id+"-regs",reduced:true,height:300,node:this.node});Pld.RegsPortlet.superclass.initComponent.call(this)},getConfig:function(){var a=Pld.RegsPortlet.superclass.getConfig.call(this);a.xtype="regs-portlet";return a}});Ext.reg("regs-portlet",Pld.RegsPortlet);Pld.UserRegsPortlet=Ext.extend(Pld.DashboardPortlet,{requiredPermissions:["nav_regviewer","nav_utrack"],initComponent:function(){this.items=new Pld.RegsPanel({id:this.id+"-regs",reduced:true,height:300,node:this.node});this.items.setUser(this.user);Pld.UserRegsPortlet.superclass.initComponent.call(this)},getConfig:function(){var a=Pld.UserRegsPortlet.superclass.getConfig.call(this);a.xtype="user-regs-portlet";a.user=this.user;return a}});Ext.reg("user-regs-portlet",Pld.UserRegsPortlet);Pld.DeviceRegsPortlet=Ext.extend(Pld.DashboardPortlet,{requiredPermissions:["nav_regviewer","nav_device_detail"],initComponent:function(){this.items=new Pld.RegsPanel({id:this.id+"-regs",reduced:true,height:300,node:this.node});this.items.setDevice(this.device);Pld.DeviceRegsPortlet.superclass.initComponent.call(this)},getConfig:function(){var a=Pld.DeviceRegsPortlet.superclass.getConfig.call(this);a.xtype="device-regs-portlet";a.device=this.device;return a}});Ext.reg("device-regs-portlet",Pld.DeviceRegsPortlet);
SPIT_CASES={callattempts:{title:"Call attempts",id:1<<5,cfgItems:[{value:"Users or IP addresses that have more than"},{xtype:"numberfield",name:"vsi.spit.oca1_attempts",value:100,width:30},{value:"call attempts in the last"},{xtype:"numberfield",name:"vsi.spit.oca1_y_minutes",value:60,width:30},{value:"minutes are reported."}]},concurrentCalls:{title:"Concurrent Calls",id:1<<3,cfgItems:[{value:"Users or IP addresses that have more than"},{xtype:"numberfield",name:"vsi.spit.ohs_concurrent",value:10,width:30},{value:"parallel calls are reported."}]},lowCallCompletion:{title:"Low call completion",id:1,cfgItems:[{value:"Users or IP addresses that have a call completion rate of less then"},{xtype:"numberfield",name:"vsi.spit.olcc_rate",value:70,width:30},{value:"% per "},{xtype:"numberfield",name:"vsi.spit.olcc_attempts",value:20,width:30},{value:"attempts within"},{xtype:"numberfield",name:"vsi.spit.olcc_z_minutes",value:60,width:30},{value:"minutes are detected."}]},lowCallDurationAvg:{title:"Low call duration average",id:1<<1,cfgItems:[{value:"Users or IP addresses with a call duration average of less than"},{xtype:"numberfield",name:"vsi.spit.olcd_seconds",value:5,width:30},{value:"seconds over at least"},{xtype:"numberfield",name:"vsi.spit.olcd_calls",value:20,width:30},{value:"successful calls are detected."},{value:"Data is collected over"},{xtype:"numberfield",name:"vsi.spit.olcd_z_minutes",value:20,width:30},{value:"minutes."}]},highSender:{title:"High calls cumulative duration",id:1<<2,cfgItems:[{value:"Users or IP addresses with call volumes of more than"},{xtype:"numberfield",name:"vsi.spit.ohcd_minutes",value:100,width:30},{value:"minutes per"},{xtype:"numberfield",name:"vsi.spit.ohcd_y_minutes",value:100,width:40},{value:"minutes are detected."}]},callsClosedByCallee:{title:"Calls closed by the callee",id:1<<4,cfgItems:[{value:"Users or IP addresses for which more than"},{xtype:"numberfield",name:"vsi.spit.bma_rate",value:95,width:30},{value:"% of their calls over a period of"},{xtype:"numberfield",name:"vsi.spit.bma_z_minutes",value:60,width:30},{value:"minutes are closed by the callee."},{value:"At least"},{xtype:"numberfield",name:"vsi.spit.bma_calls",value:60,width:30},{value:"successful calls in this period are needed to trigger the alert."}]}};
Pld.NodesCombo=Ext.extend(Ext.form.ComboBox,{width:300,triggerAction:"all",displayField:"name",valueField:"name",lazyInit:false,initComponent:function(){this.store=Pld.getStore("getNodeNames");Pld.NodesCombo.superclass.initComponent.call(this)}});Ext.reg("nodes_combo",Pld.NodesCombo);Pld.CountersCombo=Ext.extend(Ext.form.ComboBox,{width:300,triggerAction:"all",displayField:"name",valueField:"id",lazyInit:false,node:null,storeId:"counter_types_store",initComponent:function(){this.store=new Ext.data.JsonStore({storeId:this.storeId,url:Pld.getNodeRelativeUrl("getSimpleCounters",this.node),root:"counters",fields:["id","name"]});Pld.CountersCombo.superclass.initComponent.call(this)},setNode:function(a){this.node=a;this.store.proxy.setUrl(Pld.getNodeRelativeUrl("getSimpleCounters",this.node),true)}});Ext.reg("counters_combo",Pld.CountersCombo);Pld.DevicesCombo=Ext.extend(Ext.form.ComboBox,{width:300,triggerAction:"all",valueField:"id",displayField:"name",layzyInit:false,initComponent:function(){this.store=new Ext.data.JsonStore({url:Pld.getNodeRelativeUrl("getSipDevicesComboStore",this.node),root:"data",fields:["id","name"],idProperty:"id"});Pld.DevicesCombo.superclass.initComponent.call(this)},setNode:function(a){this.node=a;this.store.proxy.setUrl(Pld.getNodeRelativeUrl("getSipDevicesComboStore",this.node),true)}});Ext.reg("devices_combo",Pld.DevicesCombo);Pld.RegionalCountersCombo=Ext.extend(Ext.form.ComboBox,{width:300,triggerAction:"all",displayField:"name",valueField:"id",lazyInit:false,initComponent:function(){this.store=new Ext.data.JsonStore({url:"monitoring/list_types",root:"data",fields:["id","name"]});Pld.RegionalCountersCombo.superclass.initComponent.call(this)}});Ext.reg("regional_counters_combo",Pld.RegionalCountersCombo);Pld.OperatorsCombo=Ext.extend(Ext.form.ComboBox,{width:300,mode:"local",triggerAction:"all",store:[[">","greater than (>)"],["<","less than (<)"],[">=","greater or equal than (>=)"],["<=","less or equal than (<=)"],["==","equals (==)"],["!","is not (!)"]]});Ext.reg("operators_combo",Pld.OperatorsCombo);function generateSpitTypeRadios(){var b=[];for(var a in SPIT_CASES){b.push({inputValue:SPIT_CASES[a].id,boxLabel:SPIT_CASES[a].title})}return b}function generatePriorityRadios(){var b=[];for(var a=0;a<PRIORITIES.length;a++){b.push({inputValue:a,boxLabel:PRIORITIES[a]})}return b}Pld.generateAlertWizardItems=function(c,b){var d=[{boxLabel:"Behavioral Analysis",inputValue:SPIT},{boxLabel:"Generic Metrics",inputValue:COUNTERS},{boxLabel:"Device Metrics",inputValue:DEVICES}];if(c){d.push({boxLabel:"Regional Metrics",inputValue:REGIONAL})}else{REGIONAL="regional"}d.push({boxLabel:"User Agent",inputValue:USER_DEVICES});d.push({boxLabel:"Voice Quality",inputValue:RTPSTATS});d.push({boxLabel:"Device Monitoring (when a device is down)",inputValue:DEVICE_MONITORING});d.push({boxLabel:"Authentication",inputValue:AUTHENTICATION});d.push({boxLabel:"PALLADION errors",inputValue:"palladion"});var a=[{cardTitle:"Alert definition",items:[{xtype:"wizq",html:"Select an alert type"},{defaults:{xtype:"radio",hideLabel:true,name:"type"},items:d}],sequenceControl:function(e){switch(e.type){case SPIT:return 1;case COUNTERS:return !(c&&!b)?3:1;case DEVICES:return !(c&&!b)?2:1;case USER_DEVICES:return !(c&&!b)?4:1;case RTPSTATS:return !(c&&!b)?5:1;case REGIONAL:return 6;case DEVICE_MONITORING:case"palladion":return !(c&&!b)?-2:1;case AUTHENTICATION:return !(c&&!b)?-3:1}}}];if(c&&!b){a.push({cardTitle:"Node selection",items:[{xtype:"wizq",html:"Select the node, which is the source of information"},{items:{xtype:"nodes_combo",name:"node",fieldLabel:"Node"}}],sequenceControl:function(e){switch(this.getWizardValue("type")){case SPIT:return 2;case COUNTERS:return 4;case DEVICES:return 3;case USER_DEVICES:return 5;case RTPSTATS:return 6;case DEVICE_MONITORING:case"palladion":return -2;case AUTHENTICATION:return -3}}})}a.push({cardTitle:"Behavioral Analysis case",items:[{xtype:"wizq",html:"Please select a Behavioral Analysis case for the alert."},{items:{xtype:"radiogroup",defaults:{name:"spit_case",anchor:"95%"},hideLabel:true,columns:1,items:generateSpitTypeRadios()}}],sequenceControl:-3});a.push({cardTitle:"Select a device",items:[{xtype:"wizq",html:"Select the device whose metrics you want to inspect"},{labelWidth:180,items:[{xtype:"devices_combo",ref:"../combo",hiddenName:"device",fieldLabel:"Device"}]}],listeners:{beforeshow:function(e){var f=b?this.getWizard().getHiddenValues()["node"]:this.getWizardValue("node");this.combo.setNode(f);this.combo.store.reload({callback:function(){this.combo.setValue(this.getWizardValue("device"))},scope:this})}}});a.push({cardTitle:"Metric Configuration",items:[{xtype:"wizq",html:"Select a metric to monitor and specify a threshold on when to raise the alert. A second metric can be selected to be subtracted automatically from the value of the first metric."},{items:[{hiddenName:"counter_name",xtype:"counters_combo",ref:"../combo1",storeId:"device_counter_types_store1",allowBlank:false,fieldLabel:"Metric",emptyText:"Select a metric"},{hiddenName:"counter2_name",xtype:"counters_combo",ref:"../combo2",storeId:"device_counter_types_store2",fieldLabel:"Subtract Metric",emptyText:"Optional: Select another metric to subtract"},{hiddenName:"counter_logic",xtype:"operators_combo",fieldLabel:"Comparison",allowBlank:false,emptyText:"Select an operation"},{name:"counter_value",xtype:"numberfield",fieldLabel:"Metric threshold",allowBlank:false,emptyText:"Specify a value"},{xtype:"radiogroup",name:"component",columns:1,fieldLabel:"Use value",defaults:{name:"component"},listeners:{change:function(f,e){if(e){Ext.getCmp("seconds-radio-button").setDisabled(e.getGroupValue()!="avg")}}},items:[{inputValue:"avg",boxLabel:"Average"},{inputValue:"sum",boxLabel:"Sum"},{inputValue:"min",boxLabel:"Minimum"},{inputValue:"max",boxLabel:"Maximum"}]},{xtype:"radiogroup",fieldLabel:"Time resolution",name:"resolution",columns:1,defaults:{name:"resolution"},items:[{id:"seconds-radio-button",inputValue:"seconds",boxLabel:"Second values"},{inputValue:"minutes",boxLabel:"Minute values"},{inputValue:"hours",boxLabel:"Hour values"}]}]}],listeners:{beforeshow:function(){var f=b?this.getWizard().getHiddenValues()["node"]:this.getWizardValue("node");var e=this.getWizardValue("device");this.combo1.setNode(f);if(!Ext.isEmpty(e)){this.combo1.store.baseParams.device_id=e}this.combo1.store.reload({callback:function(){this.combo1.setValue(this.getWizardValue("counter_name"))},scope:this});this.combo2.setNode(f);if(!Ext.isEmpty(e)){this.combo2.store.baseParams.device_id=e}this.combo2.store.reload({callback:function(){this.combo2.setValue(this.getWizardValue("counter2_name"))},scope:this})}},sequenceControl:-2});a.push({cardTitle:"User Devices",items:[{xtype:"wizq",html:'Selecting "Disapproved devices" will fire an alert when a disapproved device has been found. Providing a device name creates an alert when a device matches that name.'},{labelWidth:180,items:[{xtype:"checkbox",fieldLabel:"Disapproved devices",id:"alert.user_agent_list",name:"user_agent_list",listeners:{check:function(f,e){if(e){Ext.getCmp("alert.user_agent").setValue("")}}}},{xtype:"label",text:"OR"},{xtype:"textfield",fieldLabel:"Alert on match",id:"alert.user_agent",name:"user_agent",width:180,emptyText:"Regular expression",selectOnFocus:true,listeners:{focus:function(e){Ext.getCmp("alert.user_agent_list").setValue(false)}}}]}],sequenceControl:-2});a.push({cardTitle:"Voice Quality Thresholds",items:[{xtype:"wizq",html:"Specify thresholds for when a Voice Quality alert should be raised. Alert is raised when more than n calls in m minutes have MOS lower than y"},{defaults:{xtype:"textfield"},labelWidth:180,items:[{name:"number_threshold",fieldLabel:"Threshold for number of calls (n)"},{name:"mos_threshold",fieldLabel:"MOS value threshold (y)"},{name:"minutes",fieldLabel:"Timespan of interest (minutes, m)"}]}]});a.push({cardTitle:"Regional Metric Configuration",items:[{xtype:"wizq",html:"Select a regional metric and specify a threshold when to raise the alert."},{items:[{xtype:"regional_counters_combo",hiddenName:"counter",name:"counter_name",fieldLabel:"Metric",emptyText:"Select a metric"},{hiddenName:"logic",xtype:"operators_combo",fieldLabel:"Comparison",emptyText:"Select an operation"},{name:"threshold",xtype:"textfield",fieldLabel:"Metric threshold",emptyText:"Specify a value"},{xtype:"radiogroup",name:"component",columns:1,fieldLabel:"Use value",defaults:{name:"component"},listeners:{change:function(f,e){if(e){Ext.getCmp("regional-seconds-radio-button").setDisabled(e.getGroupValue()!="avg")}}},items:[{inputValue:"avg",boxLabel:"Average"},{inputValue:"sum",boxLabel:"Sum"},{inputValue:"min",boxLabel:"Minimum"},{inputValue:"max",boxLabel:"Maximum"}]},{xtype:"radiogroup",fieldLabel:"Time resolution",name:"resolution",columns:1,defaults:{name:"resolution"},items:[{id:"regional-seconds-radio-button",inputValue:"seconds",boxLabel:"Second values"},{inputValue:"minutes",boxLabel:"Minute values"},{inputValue:"hours",boxLabel:"Hour values"}]}]}],sequenceControl:(c&&!b)?6:5});a.push({cardTitle:"Restrict to users",items:[{xtype:"wizq",html:"Enter the list of users for which alerts should be raised. An empty list indicates that alerts should be raised for all users"},{items:[{xtype:"textfield",fieldLabel:"Users restricted to",emptyText:"Users",width:250,name:"restricted"}]}]});a.push({cardTitle:"Actions",items:[{xtype:"wizq",html:"Specify what should happen when the alert is raised. (Optional)"},{labelWidth:180,items:[{xtype:"textfield",fieldLabel:"Send alert email",emptyText:"Email address",width:250,name:"email",vtype:"email",selectOnFocus:true},{xtype:"textfield",fieldLabel:"Create a trace",emptyText:"Trace span in seconds",width:250,name:"traces_period",vtype:"int",selectOnFocus:true},{xtype:"checkbox",fieldLabel:"Generate SNMP trap",name:"SnmpAction",plugins:new Ext.iptego.FieldTip({title:"SNMP Trap",text:"The SNMP options need to be configured and enabled in the SETTINGS page for this to work."}),boxLabel:"Enable this option to send an SNMP trap."}]}],listeners:{beforeshow:function(e){var g=e.findByType("form")[0];var h=g.findBy(function(i){return i.name==="BlackListSBCAction"||i.name==="BlackListDefenseProAction"});var f=e.getWizardValue("type");if(f==SPIT||f==USER_DEVICES||f==AUTHENTICATION){Ext.each(h,function(i){i.enable()})}else{Ext.each(h,function(i){i.disable()})}}}});a.push({cardTitle:"Alert Name and Priority",items:[{xtype:"wizq",html:"Please provide a name for the metric and press Finish to submit the changes"},{items:[{xtype:"textfield",name:"description",fieldLabel:"Description",emptyText:"Alert definition name",hideLabel:false,allowBlank:false,width:300},{xtype:"radiogroup",defaults:{name:"prio",anchor:"80%"},fieldLabel:"Priority",items:generatePriorityRadios()}]}]});return a};
Pld.AlertConfigParameters=["spit_case","use_difference","counter_name","counter2_name","counter_logic","counter_value","resolution","component","user_agent_list","user_agent","device","number_threshold","mos_threshold","minutes","restricted","counter","logic","threshold"];Pld.AlertActionParameters={EmailAction:["email"],DumpAction:["traces_period"],SnmpAction:true};Pld.AlertDefinitions=Ext.extend(Ext.iptego.Grid,{id:"alert_definitions.grid",title:"Alert definitions",height:610,regional:false,selectionType:"checkbox",selectionMode:"multiple",autoExpandColumn:"description_col",viewConfig:{getRowClass:function(a,c,d,b){return"row_"+priorityRenderer(a.get("prio"))}},listeners:{rowdblclick:function(a,c,b){this.onEdit(a.getSelection())}},initComponent:function(){this.columns=[{width:100,sortable:true,dataIndex:"type",renderer:alertTypeRenderer},{width:200,sortable:true,dataIndex:"description",id:"description_col"},{width:100,sortable:true,dataIndex:"prio",renderer:priorityRenderer},{width:150,sortable:true,dataIndex:"modified",renderer:datetimeRenderer}];if(this.regional){this.columns.push({width:50,sortable:true,dataIndex:"node"})}var a=["id","description","type","prio",{name:"modified",type:"date",dateformat:JSON_FORMAT_DATETIME}];if(this.regional){a.push("node")}this.store=new Ext.data.JsonStore({url:this.regional?"alerts/list_definitions":"getAlertDefinitions",root:"alert_definitions",id:"id",fields:a});this.topToolbar=[{name:"add_definition",callback:this.onAdd},{name:"edit_definition",callback:this.onEdit,selectionRequired:true},{name:"delete_definition",callback:this.onDelete,confirmation:true,selectionRequired:true}];Pld.AlertDefinitions.superclass.initComponent.call(this)},onSubmitWizard:function(a,l,f){Ext.apply(l,f);var c={};for(var k=0;k<Pld.AlertConfigParameters.length;k++){var b=Pld.AlertConfigParameters[k];if(!Ext.isEmpty(l[b])){c[b]=l[b];delete l[b]}}l.config=Ext.encode(c);var j={};for(var h in Pld.AlertActionParameters){var g=Pld.AlertActionParameters[h];if(Ext.isArray(g)){var m=false;var e={};for(var k=0;k<g.length;k++){var d=g[k];if(!Ext.isEmpty(l[d])){m=true;e[d]=l[d];delete l[d]}}if(m){j[h]=e}}else{if(!Ext.isEmpty(l[h])){j[h]=l[h];delete l[h]}}}l.actions=Ext.encode(j);Ext.iptego.request({url:this.regional?"alerts/save_definition":"saveAlertDefinition",params:l,successHandler:function(i){this.store.reload();a.destroy()}.createDelegate(this),waitMsg:"Saving alert definition..."})},getWizard:function(a,d,b){var c=new Ext.iptego.Wizard({closeAction:"destroy",height:500,cardItems:Pld.generateAlertWizardItems(this.regional,b),resetNextSlidesOnChange:false,listeners:{finished:this.onSubmitWizard.createDelegate(this)}});if(!Ext.isEmpty(a)){c.setValues(a,false)}if(!Ext.isEmpty(d)){c.setTitle(d)}return c},onAdd:function(){var a=this.getWizard({},"Add an alert",false);a.setHiddenValues({action:"add"});a.show()},onEdit:function(a){Ext.iptego.request({method:"GET",url:this.regional?"alerts/definition_by_id":"getAlertDefinitionById",params:{id:a[0].id},successHandler:function(b){var e=b.alertDefinition;Ext.apply(e,e.config);Ext.apply(e,e.actions);for(var d in Pld.AlertActionParameters){var f=Pld.AlertActionParameters[d];if(Ext.isArray(f)){Ext.apply(e,e[d])}}var c=this.getWizard(e,"Edit alert",true);hvalues={action:"edit",id:e.id};if(this.regional){hvalues.node=e.node}c.setHiddenValues(hvalues);c.show()}.createDelegate(this),waitMsg:"Loading alert definition..."})},onDelete:function(a){var b=Ext.pluck(a,"id");Ext.iptego.request({url:this.regional?"alerts/delete_definitions":"deleteAlertDefinition",params:{ids:Ext.encode(b)},successHandler:function(c){this.store.reload()}.createDelegate(this),waitMsg:"Deleting alert definitions..."})}});
ALERT_TYPES={};ALERT_TYPES.spit="Behavioral Analysis";ALERT_TYPES.counters="Generic Metrics";ALERT_TYPES.devices="Device Metrics";ALERT_TYPES.uastats="User Agent";ALERT_TYPES.device_monitoring="Device Monitoring";ALERT_TYPES.authmon="Authentication";ALERT_TYPES.license="License";ALERT_TYPES.palladion="PALLADION errors";ALERT_TYPES.regional="Regional Metrics";function alertTypeRenderer(a){if(Ext.isEmpty(a)||Ext.isEmpty(ALERT_TYPES[a])){return""}return ALERT_TYPES[a]}Pld.Alerts=Ext.extend(Ext.iptego.Grid,{node:null,resourceid:"alerts.grid",stateId:"alerts_grid",selectionType:"checkbox",selectionMode:"multiple",frame:false,autoExpandColumn:"message_col",height:620,reduced:false,regional:false,viewConfig:{getRowClass:function(a,c,d,b){return"row_"+priorityRenderer(a.get("prio"))}},initComponent:function(){this.columns=[{width:50,sortable:true,dataIndex:"new",renderer:isNewRenderer},{width:120,sortable:true,dataIndex:"ts",renderer:datetimeRenderer},{width:100,sortable:true,dataIndex:"type",renderer:alertTypeRenderer},{width:300,sortable:true,id:"message_col",dataIndex:"message"},{width:50,sortable:true,dataIndex:"prio",renderer:priorityRenderer}];if(this.regional){this.columns.push({width:50,sortable:true,dataIndex:"node"})}var b;if(this.regional){b="/alerts/list"}else{b=Pld.getNodeRelativeUrl("getAlerts",this.node)}var a=["id",{name:"ts",type:"date",dateformat:JSON_FORMAT_DATETIME},"type","prio","message","details","new"];if(this.regional){a.push("node")}this.store=new Ext.data.JsonStore({url:b,root:"alerts",totalProperty:"totalCount",id:"id",fields:a});var c=[{type:"datetime",dataIndex:"ts"},{type:"list",dataIndex:"type",options:ALERT_TYPES},{type:"list",dataIndex:"prio",options:[["2","High"],["1","Normal"],["0","Low"]]},{type:"list",dataIndex:"new",options:[["1","New"],["0","Read"]]}];if(this.regional){c.push({type:"string",dataIndex:"node"})}this.filters=new Ext.iptego.GridFilters({filters:c});this.refresher=new Ext.iptego.AutoRefresher({defaultInterval:10,target:this.store});this.topToolbar=[];if(!this.reduced){this.topToolbar.push({name:"mark_all_read",confirmation:true,tooltip:"Mark all alerts as read. (Filters may apply if set.)",callback:this.onAction.createDelegate(this,["mark_all_read"])});this.topToolbar.push({name:"delete",tooltip:"Delete alerts. (Filters may apply if set.)",menu:[{text:"selected",selectionRequired:true,confirmation:true,handler:this.onAction.createDelegate(this,["delete_selected"])},{text:"read",confirmation:true,handler:this.onAction.createDelegate(this,["delete_read"])},{text:"all",confirmation:true,handler:this.onAction.createDelegate(this,["delete_all"])}]})}this.topToolbar.push("->");if(!this.reduced){this.topToolbar.push({text:"CSV export",iconCls:"icon_csv",tooltip:"CSV export of alerts, filters apply if set",handler:this.onCsvExport.createDelegate(this)});if(Pld.hasPermission("nav_main")&&Pld.hasPermission("set_dashboard")&&!this.regional){this.topToolbar.push({name:"dashboard",iconCls:"icon_dashboard",tooltip:"Show in Dashboard",callback:function(){Pld.Dashboard.configurePortlet({xtype:"alerts-portlet"})}})}if(this.regional){this.topToolbar.push({text:"Edit definitions",tooltip:"Edit alert definitions",handler:this.onEditDefinitions.createDelegate(this)})}}this.topToolbar.push(this.refresher);Pld.Alerts.superclass.initComponent.call(this)},onEditDefinitions:function(){var a=new Ext.Window({items:new Pld.AlertDefinitions({regional:true})});a.show()},listeners:{cellclick:function(b,g,c){var f=b.getColumnModel().getDataIndex(c);if(f=="new"){var a=b.getStore().getAt(g);var e=a.get(f);var d=parseInt(e)?"mark_read":"mark_new";b.onAction(d)}},rowdblclick:function(c,i,f){var h=c.getSelectionModel().getSelected();var g=h.get("message");var a="<b>Reason:</b><br />"+h.get("details");var b=h.get("new")==1?"Mark this alert as read?":"Do you want to delete this alert?";a+="<br /><br />"+b;var d=h.get("new")==1?"mark_read":"delete_selected";Ext.Msg.show({buttons:Ext.MessageBox.YESNO,fn:function(e,j){if(e=="yes"){this.onAction(j)}}.createDelegate(this,[d],1),msg:a,title:g})}}});Pld.AlertsPortlet=Ext.extend(Pld.DashboardPortlet,{requiredPermissions:["nav_alerts"],initComponent:function(){this.items=new Pld.Alerts({reduced:true,height:300,node:this.node});Pld.AlertsPortlet.superclass.initComponent.call(this)},getConfig:function(){var a=Pld.AlertsPortlet.superclass.getConfig.call(this);Ext.apply(a,{xtype:"alerts-portlet"});return a}});Ext.reg("alerts-portlet",Pld.AlertsPortlet);
Pld.VOICEQ_MEASURES=[["max_jitter","Jitter times in ms"],["pl_rate","Calls with Packet Loss Rate"],["max_burst","Calls with Burst Loss Rate"],["latency","Latency"],["Ieeff","Ieeff"],["R","R"],["MOS","MOS"]];Pld.VOICEQ_MEASURES_CONFIG={max_jitter:[1000,1,false,0],pl_rate:[100,1,false,0],max_burst:[100,1,false,0],latency:[1000,1,false,0],Ieeff:[100,1,false,0],R:[100,1,true,0],MOS:[5,1,true,1]};Pld.getVoiceMeasureSettings=function(d,a,g){var f="voiceq__";var e=Pld.getUserOption("voiceq-thresholds__"+d,a[d]);var b=Pld.getUserOption("voiceq-hide__"+d,!!g[d]);var c={thresholds:e,hide:b};return c};Pld.VoiceQualityChart=Ext.extend(Ext.iptego.Chart,{node:null,height:300,reduced:false,cfg_win:null,initComponent:function(){this.url=Pld.getNodeRelativeUrl("voiceq",this.node);if(!this.reduced){this.bbar=["Show period: "," ",{xtype:"datefield",id:"rtp.fromdate",emptyText:"From: 3 hours ago",width:130,validator:this.validateDates,maxDate:new Date(),listeners:{select:function(){Ext.getCmp("rtp.show").enable()}}}," "," "," ",{xtype:"datefield",id:"rtp.todate",width:130,emptyText:"To: now",validator:this.validateDates,maxDate:new Date(),listeners:{select:function(){Ext.getCmp("rtp.show").enable()}}},{text:"Show",id:"rtp.show",tooltip:"Show voice quality for the given period",disabled:true,handler:this.onUpdateInterval.createDelegate(this)},{text:"Go to now",id:"rtp.now",tooltip:"Reset the display period to the default values.",disabled:true,handler:this.onResetInterval.createDelegate(this)},"-",{text:"Configure thresholds",id:"rtp.configure",tooltip:"Configure the thresholds for each measure. Affects the chart and the call list.",handler:this.onConfigure.createDelegate(this)},"-",{xtype:"checkbox",id:"rtpAutoHide",boxLabel:"Auto-hide empty bars"},"->"];if(Pld.hasPermission("nav_main")&&Pld.hasPermission("set_dashboard")){this.bbar.push({xtype:"button",tooltip:"Show in Dashboard",iconCls:"icon_dashboard",handler:function(){Pld.Dashboard.configurePortlet({xtype:"voice-quality-portlet",start_ts:this.baseParams.start_ts,end_ts:this.baseParams.end_ts})}.createDelegate(this)})}}Pld.VoiceQualityChart.superclass.initComponent.call(this)},onRender:function(){Pld.VoiceQualityChart.superclass.onRender.apply(this,arguments);if(!this.reduced){Ext.iptego.request({url:Pld.getNodeRelativeUrl("rtpConfig",this.node),successHandler:function(b){if(!Ext.isEmpty(b.auto_hide)){var a=Ext.getCmp("rtpAutoHide");a.setValue(b.auto_hide);a.on("check",this.onAutoHide,this)}this.thresholds=b.thresholds||{};this.hideConfig=b.hidden||[]}},this)}if(!Ext.isEmpty(this.device)){this.baseParams.device=this.device}},onAutoHide:function(b,a){Ext.iptego.request({url:Pld.getNodeRelativeUrl("rtpAutoHide",this.node),params:{auto_hide:a},successHandler:function(){this.load()}},this)},onUpdateInterval:function(){var a={};var c=Ext.getCmp("rtp.fromdate").getValue();var b=Ext.getCmp("rtp.todate").getValue();if(c){a.start_ts=c.format(Date.patterns.ISO8601Long)}if(b){a.end_ts=b.format(Date.patterns.ISO8601Long)}Ext.getCmp("rtp.now").setDisabled(!b&&!c);if(this.baseParams.start_ts){delete this.baseParams.start_ts}if(this.baseParams.end_ts){delete this.baseParams.end_ts}Ext.apply(this.baseParams,a);this.load()},onResetInterval:function(){Ext.getCmp("rtp.fromdate").setValue("");Ext.getCmp("rtp.todate").setValue("");Ext.getCmp("rtp.show").disable();this.onUpdateInterval()},validateDates:function(){var b=Ext.getCmp("rtp.fromdate").getValue();var a=Ext.getCmp("rtp.todate").getValue();if(b&&a&&b<a||!b!=!a){return true}else{return"Invalid time interval."}},onConfigure:function(){Ext.getCmp("rtp.configure").disable();if(!this.cfg_win){this.cfg_win=new Pld.VoiceQualityConfigWindow({thresholds:this.thresholds,hideConfig:this.hideConfig,animateTarget:"rtp.configure",listeners:{update:function(){this.load()}.createDelegate(this),hide:function(){Ext.getCmp("rtp.configure").enable()}}})}this.cfg_win.show()}});Pld.VoiceQualityConfigWindow=Ext.extend(Ext.Window,{width:760,height:180,closeAction:"hide",title:"Configure Voice Quality Thresholds",layout:"border",border:false,measure:null,thresholds:null,hideConfig:null,storeConfig:function(b,a){var c={measure:this.measure};c[b]=a;Ext.iptego.request({url:Pld.getNodeRelativeUrl("rtpConfig",this.node),params:c,successHandler:function(){this.fireEvent("update")}},this)},initComponent:function(){var a=[];Ext.each(Pld.VOICEQ_MEASURES,function(b){a.push({leaf:true,id:b[0],text:b[1]})});this.form=new Ext.form.FormPanel({region:"center",xtype:"form",disabled:true,padding:10,labelWidth:75,items:[{xtype:"displayfield",fieldLabel:"Measure",value:"None selected",name:"name"},{xtype:"multislider",fieldLabel:"Thresholds",maxThumbs:6,width:430,id:"thresholds",listeners:{set:function(b){this.storeConfig("thresholds",Ext.encode(b.getValues()))}.createDelegate(this)}},{xtype:"box",autoEl:"div",height:20},{xtype:"checkbox",fieldLabel:"Hide",name:"hide",id:"rtp_hide",boxLabel:"Hide in chart",listeners:{check:function(c,b){this.storeConfig("hide",b)}.createDelegate(this)}}]});this.items=[{xtype:"treepanel",region:"west",split:true,width:200,root:{text:"Measures",expanded:true,children:a},listeners:{click:function(f){if(!f.isLeaf()){return}this.measure=f.id;var c=Pld.VOICEQ_MEASURES_CONFIG[this.measure];var d={maxValue:c[0],minValue:c[1],decimalPrecision:c[3]};var b={name:f.text,thresholds:{values:this.thresholds[this.measure],config:d},hide:this.hideConfig.indexOf(this.measure)>-1};var e=Ext.getCmp("rtp_hide");e.suspendEvents();this.form.getForm().setValues(b);e.resumeEvents();this.form.enable()}.createDelegate(this)}},this.form];Pld.VoiceQualityConfigWindow.superclass.initComponent.call(this);this.addEvents("update")}});Pld.VoiceQualityPortlet=Ext.extend(Pld.DashboardPortlet,{requiredPermissions:["nav_voiceq"],initComponent:function(){this.items=new Pld.VoiceQualityChart({node:this.node,reduced:true,height:200,baseParams:{start_ts:this.start_ts,end_ts:this.end_ts}});Pld.VoiceQualityPortlet.superclass.initComponent.call(this)},getConfig:function(){var a=Pld.VoiceQualityPortlet.superclass.getConfig.call(this);Ext.apply(a,{xtype:"voice-quality-portlet",start_ts:this.start_ts,end_ts:this.end_ts});return a}});Ext.reg("voice-quality-portlet",Pld.VoiceQualityPortlet);
Pld.UserDevices=Ext.extend(Ext.iptego.Chart,{node:null,reduced:false,fieldWidth:180,chartUpdate:function(){try{var a=new RegExp(this.filter.getValue())}catch(b){error("Invalid regular expression!");return}Ext.getCmp("userdevicelist").setFilter(this.filter.getValue(),this.invert.getValue());Ext.getCmp("userdevicelist").setWhat(this.calls.getValue());this.baseParams.filter=escape(this.filter.getValue());this.baseParams.grouping=this.grouping.getValue();this.baseParams.what=this.calls.getValue();this.baseParams.invert=this.invert.getValue();this.grouping.setDisabled(!!this.baseParams.filter);this.load()},createGroup:function(){Ext.iptego.request({url:Pld.getNodeRelativeUrl("createDeviceGroup",this.node),params:{filter:escape(this.filter.getValue())},success:function(){this.filter.setValue("");this.invert.setValue(false);this.chartUpdate()}},this)},initComponent:function(){this.url=Pld.getNodeRelativeUrl("uastats",this.node);this.filter=new Ext.form.TextField({emptyText:"Filter for device",width:this.fieldWidth,value:"",listeners:{specialkey:function(b,a){if(a.getKey()==Ext.EventObject.ENTER){if(this.filter.getValue()){this.clearBtn.enable();this.chartUpdate()}}}.createDelegate(this)}});this.grouping=new Ext.form.Checkbox({name:"grouping",boxLabel:"Show grouping",listeners:{check:function(b,a){this.chartUpdate()}.createDelegate(this)}});this.calls=new Ext.form.ComboBox({name:"calls",store:new Ext.data.SimpleStore({id:0,fields:["id","text"],data:[[0,"View Registrations"],[1,"View Callers"],[2,"View Callees"]]}),valueField:"id",displayField:"text",triggerAction:"all",mode:"local",width:120,listeners:{select:function(a,b,c){this.chartUpdate()}.createDelegate(this)}});this.calls.setValue(0);this.invert=new Ext.form.Checkbox({name:"invert",boxLabel:"Invert",checked:false,listeners:{check:function(b,a){this.chartUpdate()}.createDelegate(this)}});this.filterBtn=new Ext.Button({text:"Filter",tooltip:"Filter the chart and the table for the device name (regular expression). Filtering disables device grouping for the chart.",handler:function(){if(this.filter.getValue()){this.clearBtn.enable();this.chartUpdate()}}.createDelegate(this)});this.clearBtn=new Ext.Button({disabled:true,text:"Clear",tooltip:"Clears the filter expression to display all devices.",handler:function(){this.clearBtn.disable();this.filterBtn.enable();this.filter.setValue("");this.invert.setValue(false);this.chartUpdate()}.createDelegate(this)});if(!this.reduced){this.bbar=[this.calls,"|",this.filter," ",this.filterBtn,this.clearBtn," ",this.invert,"|",{text:"Create group",tooltip:"Creates a device group from the filter expression, e.g. for combining all devices from the same vendor.",handler:this.createGroup.createDelegate(this)}," ",this.grouping,"->"];if(Pld.hasPermission("nav_main")&&Pld.hasPermission("set_dashboard")){this.bbar.push({iconCls:"icon_dashboard",tooltip:"Show in Dashboard",handler:function(){Pld.Dashboard.configurePortlet({xtype:"user-devices-portlet",filter:this.baseParams.filter,grouping:this.baseParams.grouping,invert:this.baseParams.invert})}.createDelegate(this)})}}Pld.UserDevices.superclass.initComponent.call(this)},onRender:function(b,a){Pld.UserDevices.superclass.onRender.call(this,b,a);if(!this.reduced){this.grouping.setValue(true)}},setFilter:function(a){if(!Ext.isEmpty(a)){a=Pld.escapeDeviceName(a);this.filter.setValue(a);this.clearBtn.enable();this.chartUpdate()}}});Pld.UserDevicesPortlet=Ext.extend(Pld.DashboardPortlet,{requiredPermissions:["nav_uastats"],initComponent:function(){this.items=new Pld.UserDevices({node:this.node,reduced:true,height:200,baseParams:{filter:this.filter,grouping:this.grouping,invert:this.invert}});Pld.UserDevicesPortlet.superclass.initComponent.call(this)},getConfig:function(){var a=Pld.UserDevicesPortlet.superclass.getConfig.call(this);Ext.apply(a,{xtype:"user-devices-portlet",filter:this.filter,grouping:this.grouping,invert:this.invert});return a}});Ext.reg("user-devices-portlet",Pld.UserDevicesPortlet);
Pld.CountersPortlet=Ext.extend(Pld.DashboardPortlet,{requiredPermissions:["nav_monitor"],initComponent:function(){if(!(this.selected instanceof Array)){this.selected=[this.selected]}this.items={xtype:"chart",updateInterval:5,url:Pld.getNodeRelativeUrl("MonitorGraph",this.node),height:200,baseParams:{selected:Ext.encode(this.selected)}};Pld.CountersPortlet.superclass.initComponent.call(this)},getConfig:function(){config=Pld.CountersPortlet.superclass.getConfig.call(this);Ext.apply(config,{xtype:"counters-portlet",selected:this.selected});return config}});Ext.reg("counters-portlet",Pld.CountersPortlet);
Pld.DeviceCountersPortlet=Ext.extend(Pld.DashboardPortlet,{requiredPermissions:["nav_device_detail"],initComponent:function(){if(!(this.selected instanceof Array)){this.selected=[this.selected]}this.items={xtype:"chart",updateInterval:5,url:Pld.getNodeRelativeUrl("MonitorGraph",this.node),height:200,baseParams:{selected:Ext.encode(this.selected)}};Pld.DeviceCountersPortlet.superclass.initComponent.call(this)},getConfig:function(){config=Pld.DeviceCountersPortlet.superclass.getConfig.call(this);Ext.apply(config,{xtype:"device-counters-portlet",selected:this.selected});return config}});Ext.reg("device-counters-portlet",Pld.DeviceCountersPortlet);
Pld.DashboardPage=Ext.extend(Ext.iptego.Page,{id:MAIN,initComponent:function(){this.items={xtype:"dashboard"};Pld.DashboardPage.superclass.initComponent.call(this)}});Pld.regPage(Pld.DashboardPage);
Pld.AdminStatusPage=Ext.extend(Ext.Panel,{initComponent:function(){this.statusForm=new Ext.form.FormPanel({style:"padding-top: 20px",bodyStyle:{"background-color":"#ffffff"},border:false,labelWidth:150,width:450,defaults:{xtype:"fieldset",style:"margin-left: 20px; padding: 10px",defaults:{xtype:"displayfield"}},items:[{id:"status_net_id",title:"Network",height:140,items:[{fieldLabel:"IP Address",name:"ip"},{fieldLabel:"Network Mask",name:"mask"},{fieldLabel:"Default Gateway",name:"gw"},{fieldLabel:"Name server",name:"dns"}]},{id:"status_time_id",height:90,title:"Date&nbsp;and&nbsp;Time",items:[{fieldLabel:"Time Zone",name:"timezone"},{fieldLabel:"Current&nbsp;date and&nbsp;time",name:"current_time"}]},{id:"status_firm_id",height:150,title:"Software",items:[{fieldLabel:"Version",name:"version"},{fieldLabel:"Serial",name:"serial"},{fieldLabel:"Appliance up since",name:"reboot",style:"margin-bottom: 10px;"},{fieldLabel:"Core running since",name:"vsi_restart",style:"margin-bottom: 10px;"}]}],buttons:[{text:"Refresh",handler:this.reloadStatusForm.createDelegate(this)}]});this.statusForm.addClass("centered-panel");this.items=this.statusForm;this.on("beforeshow",this.onBeforeShow,this);Pld.AdminStatusPage.superclass.initComponent.call(this)},reloadStatusForm:function(){this.statusForm.load({url:"getApplianceStatus",params:{dummy:"Content-Length bug fix."},failure:formFailure})},onBeforeShow:function(){this.reloadStatusForm()}});Ext.reg("pld-admin-status-page",Pld.AdminStatusPage);Pld.AdminDateTimePage=Ext.extend(Ext.Panel,{initComponent:function(){this.tzCombo=new Ext.form.ComboBox({store:new Ext.data.JsonStore({url:"getStoreTimezone",root:"timezones",fields:["tz"]}),name:"timezone",fieldLabel:"Time zone",triggerAction:"all",editable:false,valueField:"tz",displayField:"tz",forceSelection:true,mode:"remote",emptyText:"Please select timezone",value:"GMT",width:150,listWidth:165});this.methodRadio=new Ext.form.RadioGroup({fieldLabel:"Synchronize",id:"tmethod",items:[{name:"tmethod",boxLabel:"using NTP server",inputValue:"ntp",value:"ntp"},{name:"tmethod",boxLabel:"manual",inputValue:"manual",value:"manual"}],listeners:{change:function(b,a){this.toggleFields(a)}.createDelegate(this)}});this.ntpFieldset=new Ext.form.FieldSet({defaultType:"textfield",title:"Time server",height:120,maskDisabled:true,items:[{fieldLabel:"NTP server",name:"ntp_server",value:"pool.ntp.org",allowBlank:false},{fieldLabel:"NTP server 2",name:"ntp_server2",value:"",allowBlank:true},{fieldLabel:"NTP server 3",name:"ntp_server3",value:"",allowBlank:true}]});this.manualFieldset=new Ext.form.FieldSet({title:"Manual",height:90,maskDisabled:true,disabled:true,items:[{xtype:"datefield",name:"date",fieldLabel:"Current date",value:SrvTime.get(),allowBlank:false,width:100},{xtype:"timefield",name:"time",fieldLabel:"Current time",value:SrvTime.get(),width:100,allowBlank:false,format:JSON_FORMAT_TIME,listWidth:115}]});this.dateForm=new Ext.form.FormPanel({style:"padding-top: 30px",bodyStyle:{"background-color":"#ffffff"},width:350,border:false,items:[this.tzCombo,this.methodRadio,this.ntpFieldset,this.manualFieldset],buttons:[{text:"Save",handler:function(){this.dateForm.getForm().submit({url:"setTimeSettings",success:function(a,b){info("Time settings have been saved!");SrvTime.sync(function(d){var e=this.manualFieldset.findByType("datefield")[0];e.setValue(SrvTime.get());var c=this.manualFieldset.findByType("timefield")[0];c.setValue(SrvTime.get())}.createDelegate(this))}.createDelegate(this),failure:formFailure})}.createDelegate(this)},{text:"Reset",handler:function(){this.dateForm.getForm().reset()}.createDelegate(this)}]});this.dateForm.addClass("centered-panel");this.items=this.dateForm;this.on("beforeshow",this.onBeforeShow,this);Pld.AdminDateTimePage.superclass.initComponent.call(this)},toggleFields:function(a){var b=a.inputValue=="ntp";this.ntpFieldset.setDisabled(!b);this.manualFieldset.setDisabled(b)},reloadDateForm:function(){this.dateForm.load({url:"getSettingsTime",params:{dummy:"Content-Length bug fix."},success:function(){this.toggleFields(this.methodRadio.getValue())},failure:formFailure,scope:this})},onBeforeShow:function(){this.reloadDateForm();var b=this.manualFieldset.findByType("datefield")[0];b.setValue(SrvTime.get());var a=this.manualFieldset.findByType("timefield")[0];a.setValue(SrvTime.get())}});Ext.reg("pld-admin-date-time-page",Pld.AdminDateTimePage);Pld.AdminDiskUsagePage=Ext.extend(Ext.Panel,{initComponent:function(){this.items=[{xtype:"panel",id:"space-display",border:false,bodyStyle:"font-size: 12px;",html:"There are 30.000 MB of disk space reserved for gathered data.",padding:5},new Ext.form.FormPanel({ref:"form",url:"setDiskUsageParameters",labelWidth:250,style:"padding: 30px",border:false,defaults:{xtype:"spinnerfield",decimalPrecision:2,listeners:{beforespinup:function(a,c){var b=this.form.free_size.getValue();if(b-(c?a.spinner.alternateIncrementValue:a.spinner.incrementValue)<0){return false}}.createDelegate(this),spinup:function(a,c){var b=this.form.free_size.getValue();this.form.free_size.setRawValue(b-(c?a.spinner.alternateIncrementValue:a.spinner.incrementValue))}.createDelegate(this),beforespindown:function(a,b){if(a.getValue()-(b?a.spinner.alternateIncrementValue:a.spinner.incrementValue)<0){return false}}.createDelegate(this),spindown:function(a,c){var b=this.form.free_size.getValue();this.form.free_size.setRawValue(b+(c?a.spinner.alternateIncrementValue:a.spinner.incrementValue))}.createDelegate(this),change:function(c,b,a){var d=this.form.free_size.getValue();if(d-(b-a)<0){c.setRawValue(a)}else{this.form.free_size.setRawValue(d-(b-a))}}.createDelegate(this)}},items:[{name:"calls-size",fieldLabel:"Reserved for calls in MB"},{name:"legs-size",fieldLabel:"Reserved for call legs in MB"},{name:"calls-disk-buffer-size",fieldLabel:"Reserved for call messages in MB"},{name:"call-hash-size",fieldLabel:"Reserved for call hashes table in MB"},{name:"regs-size",fieldLabel:"Reserved for registration events in MB"},{name:"regs-disk-buffer-size",fieldLabel:"Reserved for registration messages in MB"},{name:"traces-disk-buffer-size",fieldLabel:"Reserved for traces in MB"},{name:"rtpstats-size",fieldLabel:"Reserved for voice quality data in MB"},{name:"rtp-rec-size",fieldLabel:"Reserved for RTP recording traces in MB"},{name:"free-size",ref:"free_size",fieldLabel:"Free space in MB",disabled:true}],buttons:[{text:"Save",handler:function(a){this.form.getForm().submit({success:function(){info("Disk Usage parameters submitted")}})}.createDelegate(this)},{text:"Reset",handler:function(a){this.onBeforeShow(this)}.createDelegate(this)}]}),{xtype:"panel",border:false,bodyStyle:"font-size: 12px;",html:'<span style="font-weight: bold">Warning</span>: If not properly set, these settings may affect the stability of PALLADION. Please consult with IPTEGO or your system integrator before changing them.',padding:20}];this.items[1].addClass("centered-panel");this.on("beforeshow",this.onBeforeShow,this);Pld.AdminDiskUsagePage.superclass.initComponent.call(this)},onBeforeShow:function(a){this.form.getForm().load({url:"getDiskUsageParameters",params:{dummy:"dummy"},failure:function(b,c){console.log(c)},success:function(e,f){var d=0;for(var c in f.result.data){d+=f.result.data[c]}var b=this.findById("space-display");b.body.update("There are <b>"+Ext.util.Format.fileSize(parseInt(d*1024*1024))+"</b> of disk space reserved for gathered data. Please select, how much of this space should be allocated for which data type.")}.createDelegate(this)})}});Ext.reg("pld-admin-disk-usage-page",Pld.AdminDiskUsagePage);Pld.AdminUpdatePage=Ext.extend(Ext.Panel,{initComponent:function(){this.onUpdateUploaded=function(a,c){var b=Pld.SettingsDialog.showTransientPage({xtype:"pld-admin-update-confirm-page",updateInfo:c.result.update_info})};this.updateForm=new Ext.form.FormPanel({style:"padding-top: 100px",border:false,url:"uploadUpdate",width:400,fileUpload:true,method:"POST",buttonAlign:"center",items:[{xtype:"field",plugins:new Ext.iptego.FieldTip({title:"Choose file",text:"Please upload only software or licence updates provided by IPTEGO or your system distributor."}),fieldLabel:"Choose file",name:"upFile",inputType:"file",allowBlank:false}],buttons:[{text:"Upload",handler:function(){this.updateForm.getForm().submit({method:"POST",waitMsg:"Please wait while the file is uploaded...",success:this.onUpdateUploaded.createDelegate(this),failure:formFailure})}.createDelegate(this)}]});this.updateForm.addClass("centered-panel");this.items=this.updateForm;Pld.AdminUpdatePage.superclass.initComponent.call(this)}});Ext.reg("pld-admin-update-page",Pld.AdminUpdatePage);Pld.AdminUpdateConfirmPage=Ext.extend(Ext.Panel,{updateInfo:null,WAIT_SECS:25,initComponent:function(){var a=[];a.push({xtype:"hidden",name:"uid",submitValue:true,value:this.updateInfo.uid});if(this.updateInfo.type=="software"){a.push({fieldLabel:"Version",name:"version",value:this.updateInfo.version});a.push({fieldLabel:"Revision",name:"revision",value:this.updateInfo.revision})}else{a.push({fieldLabel:"Serial number",name:"serial",value:this.updateInfo.serial})}if(!Ext.isEmpty(this.updateInfo.date)){a.push({fieldLabel:"Issued at",name:"date",value:this.updateInfo.date})}a.push({fieldLabel:"MD5",name:"md5",value:this.updateInfo.md5});if(!Ext.isEmpty(this.updateInfo.note)){a.push({fieldLabel:"Notes",name:"note",value:this.updateInfo.note})}this.items=[new Ext.form.FormPanel({style:"padding-top: 20px",bodyStyle:{"background-color":"#ffffff"},border:false,labelWidth:150,width:425,defaults:{xtype:"fieldset",style:"margin-left: 20px; padding: 10px",defaults:{xtype:"displayfield",submitValue:false}},items:{title:"Uploaded "+(this.updateInfo.type=="software"?"update":"license"),items:a},buttons:[{text:"Install",handler:this.onInstall.createDelegate(this)},{text:"Cancel",handler:this.onCancel.createDelegate(this)}]})];this.items[0].addClass("centered-panel");if(this.updateInfo.type=="software"&&this.updateInfo.downgrade){this.items.push({xtype:"panel",html:"<b>Warning</b>: The uploaded update file is a downgrade. <br/>Downgrading PALLADION implies a loss of the current settings and data.",border:false,width:400,cls:"centered-panel",style:"padding: 10px; padding-left: 30px;",bodyStyle:"font-size: 120%;"})}Pld.AdminUpdateConfirmPage.superclass.initComponent.call(this)},onUpdateInstalling:function(){Ext.MessageBox.progress("Please wait..","The update is currently installing and the services are being restarted.");this.task={run:function(){Ext.iptego.request({url:"getUpdateStatus",successHandler:function(a){Ext.MessageBox.updateProgress(a.progress,a.status+"...")},failureHandler:function(a){if(!Ext.isEmpty(a.auth)){Ext.MessageBox.updateProgress(1,"Finished. Reloading...");new Ext.util.DelayedTask(function(){location.reload(true)}).delay(500)}else{Ext.MessageBox.updateProgress(0,"Error.");Ext.TaskMgr.stop(this.task);Ext.iptego.defaultFailure(a)}}},this)},scope:this,interval:1000};Ext.TaskMgr.start(this.task)},onInstall:function(){var a=this.findByType("form")[0];a.getForm().submit({url:"installUpdate",method:"POST",success:function(){return True},failure:formFailure});this.onUpdateInstalling()},onCancel:function(){Ext.iptego.request({url:"cancelUpdate",params:{uid:this.updateInfo.uid},successHandler:function(){},failureHandler:function(){}});this.destroy();Pld.SettingsDialog.jumpto("update-page")}});Ext.reg("pld-admin-update-confirm-page",Pld.AdminUpdateConfirmPage);Pld.AdminLicensePage=Ext.extend(Ext.Panel,{initComponent:function(){this.licenseForm=new Ext.form.FormPanel({style:"padding-top: 30px",bodyStyle:{"background-color":"#ffffff"},border:false,width:400,labelWidth:270,defaults:{xtype:"fieldset",style:"margin-left: 20px; padding: 10px",height:270,defaults:{xtype:"displayfield"}},items:[{id:"status_lic_general_id",title:"General",height:140,items:[{fieldLabel:"Issued&nbsp;at",name:"issued_at"},{fieldLabel:"Installed&nbsp;at",name:"installed_at"},{fieldLabel:"Valid&nbsp;until",name:"valid_through"},{fieldLabel:"Maximum&nbsp;major&nbsp;version",name:"max_major"}]},{id:"status_lic_maxval_id",title:"Maximum&nbsp;Values",items:[{fieldLabel:"SIP&nbsp;messages/s",name:"sip_msg_per_sec",renderer:largeValueRenderer},{fieldLabel:"Bandwidth&nbsp;in&nbsp;bit/s",name:"bandwidth",renderer:bytesRenderer},{fieldLabel:"Call&nbsp;attempts/s",name:"caps",renderer:largeValueRenderer},{fieldLabel:"Concurrent&nbsp;calls",name:"conc_calls",renderer:largeValueRenderer},{fieldLabel:"Registration&nbsp;attempts/s",name:"raps",renderer:largeValueRenderer},{fieldLabel:"Registered&nbsp;Contacts",name:"reged_contacts",renderer:largeValueRenderer},{fieldLabel:"Number&nbsp;of&nbsp;configured&nbsp;devices",name:"confed_devs",renderer:largeValueRenderer},{fieldLabel:"Number&nbsp;of&nbsp;configured&nbsp;PALLADION&nbsp;user&nbsp;accounts",name:"confed_users",renderer:largeValueRenderer},{fieldLabel:"Concurrent&nbsp;PALLADION&nbsp;users",name:"conc_users",renderer:largeValueRenderer}]}]});this.licenseForm.addClass("centered-panel");this.items=this.licenseForm;this.on("beforeshow",this.onBeforeShow,this);Pld.AdminLicensePage.superclass.initComponent.call(this)},reloadLicenseForm:function(){this.licenseForm.load({url:"getLicenseInfo",params:{dummy:"dummy."},failure:formFailure})},onBeforeShow:function(){this.reloadLicenseForm()}});Ext.reg("pld-admin-license-page",Pld.AdminLicensePage);Pld.AdminActionsPage=Ext.extend(Ext.Panel,{initComponent:function(){this.actionsForm=new Ext.Panel({style:"padding-top: 120px",bodyStyle:{"background-color":"#ffffff"},border:false,layout:"auto",width:250,defaults:{minWidth:250,style:"padding: 5px"},defaultType:"button",items:[{text:"Block alert sending",id:"block-alerts-button",tooltip:"Block or unblock sending of alerts",handler:function(){Ext.Ajax.request({url:"toggleBlockAlerts",method:"POST",params:{when:"now"},success:this.updateBlockAlertsButton.createDelegate(this)})}.createDelegate(this)},{text:"Reboot",tooltip:"Reboot the PALLADION machine.",handler:function(){Ext.MessageBox.show({title:"Confirm",msg:"This will reboot the PALLADION machine.",fn:function(a){if(a=="ok"){Ext.Ajax.request({url:"___reboot",method:"POST",params:{when:"now"},success:function(){info("The PALLADION machine is rebooting now.")}})}},buttons:Ext.MessageBox.OKCANCEL,icon:Ext.MessageBox.WARNING})}},{text:"Power Off",tooltip:"Power Off the PALLADION machine.",handler:function(){Ext.MessageBox.show({title:"Confirm",msg:"This will shutdown the PALLADION machine.",fn:function(a){if(a=="ok"){Ext.Ajax.request({url:"___poweroff",method:"POST",params:{when:"now"},success:function(){info("The PALLADION machine is turned off now.")}})}},buttons:Ext.MessageBox.OKCANCEL,icon:Ext.MessageBox.WARNING})}},{text:"Reset to factory defaults",tooltip:"Reset settings and data to the factory default",handler:function(){Ext.MessageBox.show({title:"Confirm",msg:"Reset to factory defaults implies a loss of all settings and data",fn:function(a){if(a=="ok"){Ext.Ajax.request({url:"__factoryDefaults",method:"POST",params:{bogus:"value"},success:function(){info("PALLADION has been reset to factory defaults. Please re-login...")}})}},buttons:Ext.MessageBox.OKCANCEL,icon:Ext.MessageBox.WARNING})}},{text:"Reset UI state",tooltip:"Reset the state of the PALLADION user interface",handler:function(){clearState()}}]});this.actionsForm.addClass("centered-panel");this.items=this.actionsForm;this.on("show",this.updateBlockAlertsButton,this);Pld.AdminActionsPage.superclass.initComponent.call(this)},updateBlockAlertsButton:function(){Ext.iptego.request({url:"alertsBlocked",successHandler:function(a){if(a.blocked){Ext.getCmp("block-alerts-button").setText("Unblock alerts")}else{Ext.getCmp("block-alerts-button").setText("Block alerts")}}.createDelegate(this)})}});Ext.reg("pld-admin-actions-page",Pld.AdminActionsPage);Pld.SettingsDialog.registerSection("admin-section","Appliance Settings","71ui-appsets.html","panel",["set_appliance"]);Pld.SettingsDialog.registerPage("admin-section","status-page","Status","71ui-appsets.html#status","pld-admin-status-page");Pld.SettingsDialog.registerPage("admin-section","date-time-settings","Date and Time","71ui-appsets.html#date-and-time","pld-admin-date-time-page");Pld.SettingsDialog.registerPage("admin-section","disk-usage-settings","Disk Usage","71ui-appsets.html#disk-usage","pld-admin-disk-usage-page");Pld.SettingsDialog.registerPage("admin-section","update-page","Software/License Update","71ui-appsets.html#software-or-license-update","pld-admin-update-page");Pld.SettingsDialog.registerPage("admin-section","license-page","License Information","71ui-appsets.html#license-information","pld-admin-license-page");Pld.SettingsDialog.registerPage("admin-section","actions-page","Actions","71ui-appsets.html#actions","pld-admin-actions-page");
Pld.CallsPage=Ext.extend(Ext.iptego.Page,{id:CALLVIEWER,initComponent:function(){var a=[];a.push({xtype:"spanel",title:"Active calls",collapsible:true,info:"The chart displays the number of active calls. <b>Use the timescale</b> to change the time frame or <b>drag the chart</b> to view past values.",topic:"55ui-calls.html#active-calls-chart",stateId:"calls_activecalls",items:{xtype:"chart",url:CALLVIEWER,updateInterval:30,timeSlider:5,goToNow:true,plugins:[new Ext.iptego.HorizontalDrag()]}});a.push({xtype:"spanel",title:"Recent calls",info:"Information about the recent and currently active calls. <b>Double-click a call</b> to see more details or create a call-flow diagram.",topic:"55ui-calls.html#recent-calls",stateId:"calls_recent_calls",items:new Pld.CallsPanel({stateId:"calls_recent_calls-panel"})});this.items=a;Pld.CallsPage.superclass.initComponent.apply(this,arguments)}});Pld.regPage(Pld.CallsPage);
Pld.RegistrationsPage=Ext.extend(Ext.iptego.Page,{id:REG_VIEWER,initComponent:function(){var a=[];a.push({xtype:"spanel",collapsible:true,title:"Registered Users",info:"Evolution of the number of registered users. <b>Use the timescale</b> to change the time frame or <b>drag the chart</b> to view past values.",topic:"56ui-regs.html#registered-users-panel",items:{xtype:"chart",url:"regsChart",id:"regschart",updateInterval:30,timeSlider:5,goToNow:true,plugins:[new Ext.iptego.HorizontalDrag()]},stateId:"regschart"});a.push({xtype:"spanel",title:"Registrations",info:"View the new registrations bindings, the expired bindings, as well as the failed registrations.",topic:"56ui-regs.html#registrations-panel",items:new Pld.RegsPanel({stateId:"regspanel.grid"}),stateId:"regspanel"});this.items=a;Pld.RegistrationsPage.superclass.initComponent.apply(this,arguments)}});Pld.regPage(Pld.RegistrationsPage);
Pld.ResponseTimesPage=Ext.extend(Ext.iptego.Page,{id:RESPONSE_TIMES,initComponent:function(){this.items={xtype:"spanel",collapsible:false,info:"Response times of the service averaged over 3 time periods. The response times are calculated from the difference in time between the request and the response of the non-INVITE transactions. Only the transactions answered by the configured devices are taken into account.",topic:"63ui-resptime.html",title:"Response times",stateId:"responseTimesChart",items:{xtype:"chart",url:RESPONSE_TIMES}};Pld.ResponseTimesPage.superclass.initComponent.apply(this,arguments)}});Pld.regPage(Pld.ResponseTimesPage);
Pld.DeviceList=Ext.extend(Ext.Panel,{layout:"border",id:"userdevicelist",border:false,height:440,removeListed:function(){var a=this.listedBox.getValue();if(a){var c="Disapproved Devices";var b='Removing this expression will approve devices matching "'+String.escape(a)+'". Continue?';Ext.Msg.confirm(c,b,function(d){if(d=="yes"){Ext.iptego.request({url:"listDevices",params:{devices:Ext.encode(a),deselect:true},successHandler:function(){this.listedgridStore.reload();this.listedBox.setValue("")}},this)}}.createDelegate(this))}else{Ext.Msg.alert("Device Group","Select a custom device group!")}},deleteGroup:function(){var a=this.grid.getSelection();if(a&&a.groupid){var c="Device Group";var b="Do you really want to delete the device group "+a.group+"?";Ext.Msg.confirm(c,b,function(d){if(d=="yes"){Ext.iptego.request({url:"deleteDeviceGroup",params:{group:a.groupid},successHandler:function(){Ext.getCmp("userdevices").load();this.gridStore.reload()}},this)}}.createDelegate(this))}else{Ext.Msg.alert("Device Group","Select a custom device group!")}},listDevices:function(a){if(Ext.isEmpty(a)){Ext.Msg.alert("Devices","Please select a device or a custom group!");return}a=Pld.escapeDeviceName(a);Ext.iptego.request({url:"listDevices",params:{devices:Ext.encode(a)},successHandler:function(){this.listedgridStore.reload()}},this)},addListed:function(){var a=this.listedBox.getValue();if(!a){Ext.Msg.alert("Disapproved Devices","Please enter a device or a custom group to add them!");return}this.listDevices(a)},initComponent:function(){this.deviceReader=new Ext.data.JsonReader({root:"devices",id:"name"},Ext.data.Record.create(["name","group","groupid",{name:"count",type:"int"},{name:"listed",type:"boolean"}]));this.gridStore=new Ext.data.GroupingStore({url:"uastats",storeId:"user_devices_store",baseParams:{list:true},reader:this.deviceReader,sortInfo:{field:"count",direction:"DESC"},groupField:"group"});this.listedDevices=null;this.listedgridStore=new Ext.data.JsonStore({url:"getListedDevices",root:"devices",fields:["expression","id"],listeners:{load:function(){this.gridStore.reload()}.createDelegate(this)}});this.listedBox=new Ext.form.ComboBox({width:240,store:this.listedgridStore,emptyText:"Disapproved device definitions",triggerAction:"all",displayField:"expression"});this.refresher=new Ext.iptego.AutoRefresher({defaultInterval:60,handler:function(){this.gridStore.reload()}.createDelegate(this)});this.grid=new Ext.iptego.Grid({border:false,id:"devicelist",stateId:"devicelist.grid",pageing:false,store:this.gridStore,columns:[{width:200,sortable:true,dataIndex:"name"},{width:50,sortable:true,dataIndex:"group"},{width:100,sortable:true,dataIndex:"count",align:"right"}],view:new Ext.grid.GroupingView({groupTextTpl:'{text} ({[groupCountRenderer(values.rs)]} users on {[values.rs.length]} {[values.rs.length > 1 ? "devices" : "device"]})',getRowClass:function(a,d,e,b){if(!this.listedgridStore||this.listedgridStore.getTotalCount()==0){return}var c=false;this.listedgridStore.each(function(g){var f=new RegExp(g.data.expression,"i");c=f.test(a.data.name);if(c){return false}});return c?"not_listed_bg":""}.createDelegate(this),showGroupName:false,forceFit:true}),listeners:{render:function(a){var b=a.getSelectionModel();b.on("rowselect",function(g,f,e){var d=e.get("name");var c=e.get("count");this.usergridStore.baseParams.total=c;if(this.usergridStore.baseParams.device!=d){this.usergridStore.baseParams.device=d;this.usergrid.getBottomToolbar().changePage(0)}},this)}.createDelegate(this)},bbar:[this.listedBox,{text:"Add",tooltip:"Type a user device name into the box and click this button to mark it red in the table. This can be used to monitor occurrences of disapproved user devices.",handler:this.addListed.createDelegate(this)},{text:"Remove",handler:this.removeListed.createDelegate(this)},"->",this.refresher],contextMenu:[{name:"delete_group",disabler:function(a){return Ext.isEmpty(a.groupid)},callback:this.deleteGroup.createDelegate(this)},{name:"list_group",disabler:function(a){return Ext.isEmpty(a.groupid)},callback:function(a){this.listDevices(a.groupid)}.createDelegate(this)},{name:"list_device",callback:function(a){this.listDevices(a.name)}.createDelegate(this)},{name:"filter",callback:function(b){var a=b.name;Ext.getCmp("userdevices").setFilter(a)}.createDelegate(this)}],frame:false});this.usergridStore=new Ext.data.JsonStore({url:"uausers",root:"users",totalProperty:"totalCount",fields:["name"]});this.usergrid=new Ext.iptego.Grid({id:"servicehealth.usergrid",stateId:"servicehealth.usergrid",store:this.usergridStore,columns:[{dataIndex:"name"}],closable:true,paging:false,border:false,viewConfig:{forceFit:true},listeners:{rowdblclick:function(a,d,b){var c=a.getSelection(true);Pld.trackUser(c.get("name"))}},contextMenu:[{name:"trace_user",callback:function(a){Pld.trackUser(a.name)}},{name:"dump_with_user",callback:function(a){Pld.createUserTrace(a.name)}}],pagingToolbarItems:[{tooltip:"CSV export",iconCls:"icon_csv",handler:function(){this.usergrid.onCsvExport.call(this.usergrid)}.createDelegate(this)}]});this.items=[{region:"center",title:"Devices",layout:"fit",items:[this.grid]},{region:"east",collapsible:true,layout:"fit",split:true,title:"Users",items:[this.usergrid],width:400}];Pld.DeviceList.superclass.initComponent.call(this)},onShow:function(){Pld.DeviceList.superclass.onShow.apply(this,arguments);this.listedgridStore.reload()},onRender:function(){Pld.DeviceList.superclass.onRender.apply(this,arguments);this.listedgridStore.reload()},setFilter:function(a,b){this.gridStore.baseParams.filter=a;this.gridStore.baseParams.invert=b;this.gridStore.reload();this.usergridStore.removeAll()},setWhat:function(a){this.gridStore.baseParams.what=a;this.usergridStore.baseParams.what=a;this.gridStore.reload();this.usergridStore.removeAll()}});
Pld.UserDevicesPage=Ext.extend(Ext.iptego.Page,{id:USER_DEVICES,initComponent:function(){var a=[];a.push({xtype:"spanel",collapsible:true,title:"User Devices",info:"View which user devices have the most registered users. <br />Devices with a representation below a certain threshold (default is 2%) will be grouped to 'Other devices'.",topic:"54ui-userdev.html#user-devices-chart",items:new Pld.UserDevices({id:"userdevices"}),stateId:"userdevicesChart"});a.push({xtype:"spanel",title:"Devices List",info:"A list of all user devices. <b>Click on a device</b> to see all users that are registered with it. <br /><b>Double-click a user</b> for tracking.",topic:"54ui-userdev.html#devices-list-combined-table",items:new Pld.DeviceList(),stateId:"userdevicesList"});this.items=a;Pld.UserDevicesPage.superclass.initComponent.apply(this,arguments)}});Pld.regPage(Pld.UserDevicesPage);
Pld.UserTrackingPage=Ext.extend(Ext.iptego.Page,{id:USER_TRACKING,initComponent:function(){this.items=[];this.items.push(new Ext.iptego.StatefulPanel({title:"User Search",info:"<b>Enter</b> the user you want to track.",topic:"46ui-tracking.html#user-search-panel",collapsible:true,items:new Pld.UserSearch()}));var b=[new Pld.UserReg({region:"center",stateId:"user_regs.grid"})];var a="View the user's contacts.";if(Pld.hasPermission("view_reghist")){a+=" The lower area shows the previous registrations.";b.push(new Pld.RegsPanel({isForUser:true,id:"regs_user",region:"south",height:150,stateId:"reghist.grid",border:true}))}this.items.push(new Ext.iptego.StatefulPanel({id:USER_TRACKING+"_regs_panel",title:"Registrations",info:a,topic:"46ui-tracking.html#registrations-panel",collapsible:true,height:b.length>1?300:130,layout:"border",items:b}));this.items.push(new Ext.iptego.StatefulPanel({title:"User Calls",collapsible:false,info:"View the user's recent calls. <b>Double-click</b> on a call to see its details.",topic:"46ui-tracking.html#user-calls-table",items:new Pld.CallsPanel({isForUser:true,id:"calls_user",stateId:"user_calls.grid"})}));Pld.UserTrackingPage.superclass.initComponent.apply(this,arguments)}});Pld.regPage(Pld.UserTrackingPage);Pld.trackUser=function(a){loadContent(USER_TRACKING);Ext.getCmp("users_search").setUser(a);Ext.get("user_search_field").frame()};Pld.createUserMenu=function(d,c,b){var a=new Ext.menu.Menu();if(Pld.hasPermission("nav_utrack")){a.add({text:Resources.get("users.menu.track"),handler:function(e){Pld.trackUser(e)}.createCallback(d)})}if(Pld.hasPermission("nav_dumps")){a.add({text:Resources.get("users.menu.create_trace"),handler:function(e){Pld.createUserTrace(e)}.createCallback(d)})}a.add({text:Resources.get("users.menu.more_info"),handler:function(f){var e=new Ext.iptego.UserMoreInfoWindow({user:f});e.show()}.createCallback(d)});c.stopEvent();a.showAt(c.xy)};Pld.UserSearchField=Ext.extend(Ext.form.ComboBox,{fieldLabel:"User",displayField:"uri",loadingText:"Searching..",typeAhead:false,minChars:1,emptyText:"Live search will est up to 30 users based on your input..",triggerClass:"x-form-search-trigger",width:380,initComponent:function(){this.store=Pld.getStore("searchUsers");Pld.UserSearchField.superclass.initComponent.apply(this,arguments)}});Pld.UserSearch=Ext.extend(Ext.form.FormPanel,{searchField:null,bodyStyle:"padding:10px 10px 0",id:"users_search",autoHeight:true,initComponent:function(){this.searchField=new Pld.UserSearchField({id:"user_search_field",listeners:{select:function(d,b,c){Ext.getCmp("users_search").setUser(b.get("uri"))},change:function(c,d,b){this.updateUser()}.createDelegate(this),render:function(){var b=this.getEl().up("div.x-form-item");b.addClass("float-panel");b.setStyle("width","500px")}}});var a=[];if(Pld.hasPermission("nav_dumps")){a.push({text:Resources.get("users.menu.create_trace"),handler:function(){Pld.createUserTrace(this.getUser())}.createDelegate(this)})}a.push({text:Resources.get("users.menu.more_info"),handler:function(){var b=new Ext.iptego.UserMoreInfoWindow({user:this.getUser()});b.show()}.createDelegate(this)});this.menu=new Ext.SplitButton({text:"Show",handler:function(){this.updateUser()}.createDelegate(this),menu:a,listeners:{render:function(){this.getEl().wrap({style:"padding:9px"})}}});this.items=[this.searchField,this.menu];Pld.UserSearch.superclass.initComponent.call(this)},updateUser:function(){var a=this.getUser();var b=Ext.getCmp("registrations.grid");b.getStore().baseParams.user=a;b.getStore().reload();Ext.getCmp("calls_user").setUser(a);if(Pld.hasPermission("view_reghist")){Ext.getCmp("regs_user").setUser(a)}if(Ext.isIE7){Ext.getCmp(USER_TRACKING+"_regs_panel").show()}},getUser:function(){return this.searchField.getValue()},setUser:function(a){this.searchField.setValue(a);this.updateUser()}});Pld.UserReg=Ext.extend(Ext.iptego.Grid,{id:"registrations.grid",pageing:false,frame:false,autoExpandColumn:"uri",linkQualityRenderer:function(c,b,a){switch(c){case 1:return'<img src="../images/led_red.png"/>';case 0:return'<img src="../images/led_green.png"/>';default:case -1:return""}},initComponent:function(){this.store=new Ext.data.JsonStore({storeId:"user_reg_store",url:"getRegs",root:"regs",idProperty:"uri",fields:["uri",{name:"expires",type:"int"},{name:"expires_in",type:"int"},{name:"last_refreshed_ts",type:"date",dateformat:JSON_FORMAT_DATETIME},{name:"first_seen_ts",type:"date",dateformat:JSON_FORMAT_DATETIME},{name:"last_suggested_expires",type:"int"},{name:"link_quality",type:"int"},"srcip","usrdev"]});this.refresher=new Ext.iptego.AutoRefresher({handlers:[function(){this.store.reload();if(Pld.hasPermission("view_reghist")){Ext.getCmp("regs_user").getStore().reload()}}.createDelegate(this)]});this.columns=[{id:"uri",width:200,sortable:true,dataIndex:"uri"},{width:120,sortable:true,dataIndex:"srcip"},{width:80,sortable:true,dataIndex:"expires",align:"right"},{width:80,sortable:true,dataIndex:"expires_in",align:"right"},{width:120,sortable:true,dataIndex:"last_refreshed_ts",renderer:datetimeRenderer},{width:120,sortable:true,dataIndex:"first_seen_ts",renderer:datetimeRenderer},{width:80,sortable:true,dataIndex:"last_suggested_expires",hidden:true},{width:80,sortable:false,dataIndex:"link_quality",renderer:this.linkQualityRenderer,align:"center"},{width:150,sortable:true,dataIndex:"usrdev"}];this.tbar=["->",this.refresher];this.contextMenu=[{name:"whois_ip",callback:function(a){Pld.showWhoisWindow(a.srcip,null)}},{name:"ping_ip",callback:function(a){Pld.startPingMonitoring(a.srcip,this.store.baseParams.user)}}];if(Pld.hasPermission("nav_iptrack")){this.contextMenu.push({name:"track_ip",callback:function(a){Pld.trackIp(a.srcip)}})}Pld.UserReg.superclass.initComponent.apply(this,arguments)}});Ext.iptego.UserMoreInfoWindow=Ext.extend(Ext.Window,{user:"",width:600,height:600,layout:"border",title:Resources.get("users.more_info.title"),initComponent:function(){this.items=[new Ext.ux.AutoGridPanel({region:"center",loadMask:true,height:200,store:new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"getUserMoreInfo"}),reader:new Ext.data.JsonReader({root:"rows",id:"id"},["id","name"])})}),{region:"south",collapsible:true,autoScroll:true,title:"WHOIS Info",split:true,height:400,bodyStyle:Pld.WhoisBodyStyle,html:"",id:"user_whois"}];this.buttons=[{text:"Close",handler:this.close,scope:this,minWidth:75}];Ext.iptego.UserMoreInfoWindow.superclass.initComponent.call(this);this.on("show",this.onShow,this)},onShow:function(){this.setTitle("More info about user "+this.user+" from external sources:");Ext.iptego.UserMoreInfoWindow.superclass.onShow.apply(this,arguments);this.items.first().getStore().reload({params:{user:this.user}});var a=Ext.StoreMgr.get("user_reg_store").collect("srcip");if(a.length){Pld.updateWhoisInfo(Ext.getCmp("user_whois"),a[0])}}});
Pld.IpTrackingPage=Ext.extend(Ext.iptego.Page,{id:IP_TRACKING,initComponent:function(){this.items=[];this.items.push(new Ext.iptego.StatefulPanel({title:"IP Search",info:"<b>Enter</b> the IP address you want to track.",topic:"47ui-iptracking.html#ip-search-panel",collapsible:true,items:new Pld.IpSearch()}));var a=[new Pld.UsersWithIp({autoHeight:true,stateId:"users_ip.grid"})];this.items.push(new Ext.iptego.StatefulPanel({title:"Users registered on the IP",info:"The users that are registered with the specific IP",topic:"47ui-iptracking.html#user-results-panel",collapsible:true,items:a}));Pld.IpTrackingPage.superclass.initComponent.apply(this,arguments)}});Pld.regPage(Pld.IpTrackingPage);Pld.trackIp=function(a){loadContent(IP_TRACKING);Ext.getCmp("ips_search").setIp(a);Ext.get("ip_search_field").frame()};Pld.IpSearchField=Ext.extend(Ext.form.TextField,{initComponent:function(){this.store=Pld.getStore("searchIps");Pld.IpSearchField.superclass.initComponent.apply(this,arguments)}});Pld.IpSearch=Ext.extend(Ext.form.FormPanel,{searchField:null,bodyStyle:"padding:10px 10px 0",id:"ips_search",autoHeight:true,initComponent:function(){this.searchField=new Ext.form.TextField({id:"ip_search_field",fieldLabel:"IP",displayField:"ip",emptyText:"Enter an IP for a host or an IP/mask for a network.",width:380,listeners:{change:function(b,c,a){this.updateIp()}.createDelegate(this),render:function(){var a=this.getEl().up("div.x-form-item");a.addClass("float-panel");a.setStyle("width","500px")},specialkey:function(b,a){if(a.getKey()==a.ENTER){this.updateIp()}}.createDelegate(this)}});this.menu=new Ext.Button({text:"Show",handler:function(){this.updateIp()}.createDelegate(this),listeners:{render:function(){this.getEl().wrap({style:"padding:9px"})}}});this.items=[this.searchField,this.menu];Pld.IpSearch.superclass.initComponent.call(this)},updateIp:function(){var b=this.getIp();var a=Ext.getCmp("userswithip.grid");a.getStore().baseParams.ip=b;a.getStore().reload()},getIp:function(){return this.searchField.getValue()},setIp:function(a){this.searchField.setValue(a);this.updateIp()}});Pld.UsersWithIp=Ext.extend(Ext.iptego.Grid,{id:"userswithip.grid",pageing:false,frame:false,autoExpandColumn:"username",reduce:false,pageing:true,pageSize:20,height:500,buildContextMenu:function(){this.contextMenu=[];if(Pld.hasPermission("nav_utrack")){this.contextMenu.push({name:"track_user",callback:function(a){Pld.trackUser(a.username)}})}},initComponent:function(){this.store=new Ext.data.JsonStore({storeId:"user_ip_store",url:"getUsersWithIp",root:"users",totalProperty:"totalCount",idProperty:"username",fields:["username","srcip","regcontacts"]});this.refresher=new Ext.iptego.AutoRefresher({target:this.store});this.topToolbar=[];this.columns=[{id:"username",width:200,sortable:true,dataIndex:"username"},{width:250,sortable:true,dataIndex:"srcip"},{width:120,sortable:true,dataIndex:"regcontacts"}];this.topToolbar.push("->");this.topToolbar.push({name:"csv_export",iconCls:"icon_csv",tooltip:"CSV export",callback:this.onCsvExport.createDelegate(this)});this.topToolbar.push(this.refresher);this.buildContextMenu();Pld.UsersWithIp.superclass.initComponent.apply(this,arguments)}});
Pld.ScriptsPage=Ext.extend(Ext.iptego.Page,{id:SCRIPTS,initComponent:function(){this.items=[{xtype:"spanel",title:"Scripts",info:"PALLADION supports scripts, that can be uploaded to extend the base functionality of PALLADION.",topic:"48ui-scripts.html",collapsible:false,stateId:"scripts_scriptlist",items:new Pld.ScriptsMainPanel()}];Pld.ScriptsPage.superclass.initComponent.apply(this,arguments)}});Pld.regPage(Pld.ScriptsPage);Pld.ScriptsGrid=Ext.extend(Ext.iptego.Grid,{resourceid:"scripts.grid",stateId:"scripts_grid",selectionType:"checkbox",selectionMode:"multiple",pageing:false,autoExpandColumn:"name",tooltipRenderer:function(c,b,a){tipText=a.get("description");b.attr='ext:qtip="'+tipText+'"';return c},initComponent:function(){this.columns=[{width:60,sortable:true,dataIndex:"id",hidden:true},{id:"name",width:120,sortable:true,dataIndex:"name",renderer:this.tooltipRenderer},{width:120,sortable:true,dataIndex:"mtime",renderer:datetimeRenderer}];this.store=new Ext.data.JsonStore({url:"getScripts",root:"scripts",totalProperty:"totalCount",idProperty:"id",fields:["id",{name:"mtime",type:"date",dateformat:JSON_FORMAT_DATETIME},"name","description"]});this.topToolbar=[{name:"upload",tooltip:"Upload a script.",callback:this.onUpload.createDelegate(this)},{name:"execute",tooltip:"Execute the selected script.",callback:this.onExecute.createDelegate(this),singleSelectionRequired:true},{name:"delete",tooltip:"Delete the selected script.",callback:this.onDeleteSelected.createDelegate(this),selectionRequired:true}];Pld.ScriptsGrid.superclass.initComponent.call(this)},listeners:{rowdblclick:function(a,d,b){var c=a.getStore().getAt(d);this.showScriptExecuteWindow(c.id)}},onUpload:function(){this.showScriptUploadWindow()},onExecute:function(){var b=this.getSelectionModel();var a=b.getSelected();if(a){this.showScriptExecuteWindow(a.id)}},onDeleteSelected:function(b){if(Ext.isEmpty(b)){return}var a=this;Ext.MessageBox.confirm("Confirm","Do you really want to delete the selected scripts?",function(c){if(c=="yes"){Ext.iptego.request({url:"deleteScripts",params:{selected:Ext.pluck(b,"id")},successHandler:function(){a.getStore().reload()}})}})},showScriptUploadWindow:function(){var b=new Ext.form.TextField({fieldLabel:"Script file",name:"scriptFile",allowBlank:false,inputType:"file"});var a=this;var c=function(){d.getForm().submit({waitTitle:"Uploading",waitMsg:"Uploading script file...",success:function(f,g){a.getStore().reload();e.hide()},failure:function(f,g){Ext.Msg.alert("Upload failed!",g.result.errorMsg);d.getForm().reset();e.hide()}})};var d=new Ext.form.FormPanel({url:"uploadScript",method:"POST",fileUpload:true,title:"Please enter a script file",labelWidth:80,width:440,monitorValid:true,items:[b],keys:{key:[Ext.EventObject.ENTER,Ext.EventObject.RETURN],fn:c},buttons:[{text:"Upload",formBind:true,handler:c},{text:"Cancel",formBind:false,handler:function(){e.hide()}}]});var e=new Ext.Window({layout:"fit",width:440,height:170,closable:true,resizable:false,maskDisabled:false,modal:true,items:[d]});e.show()},showScriptExecuteWindow:function(a){Ext.iptego.request({url:"getScriptParams",params:{id:a},successHandler:function(b){var h=b.params;var c=[];c.push(new Ext.form.Hidden({name:"id",value:a}));for(var d=0;d<h.length;d++){switch(h[d].type){case"textarea":c.push(new Ext.form.TextArea({fieldLabel:h[d].label,name:h[d].name,value:h[d].default_value,allowBlank:h[d].optional,anchor:"100%"}));break;case"datetime":c.push(new Ext.form.DateField({fieldLabel:h[d].label,name:h[d].name,value:h[d].default_value,allowBlank:h[d].optional,anchor:"100%"}));break;case"time":c.push(new Ext.form.TimeField({fieldLabel:h[d].label,name:h[d].name,value:h[d].default_value,allowBlank:h[d].optional,anchor:"100%"}));case"date":c.push(new Ext.form.DateField({fieldLabel:h[d].label,dateOnly:true,name:h[d].name,value:h[d].default_value,allowBlank:h[d].optional,anchor:"100%"}));break;default:c.push(new Ext.form.TextField({fieldLabel:h[d].label,name:h[d].name,value:h[d].default_value,allowBlank:h[d].optional,anchor:"100%"}));break}}var g=function(){f.getForm().submit({waitTitle:"Executing",waitMsg:"Executing script...",success:function(i,j){e.hide();mainpanel=Ext.getCmp("scripts_mainpanel");mainpanel.runsgrid.getStore().reload();mainpanel.leftpanel.setActiveTab(mainpanel.runsgrid)},failure:function(i,j){Ext.Msg.alert("Executing the script failed!",j.result.errorMsg);f.getForm().reset();e.hide()}})};var f=new Ext.form.FormPanel({url:"executeScript",method:"POST",monitorValid:true,title:"Please enter the script parameters",labelWidth:80,items:c,buttons:[{text:"Execute",formBind:true,handler:g},{text:"Cancel",formBind:false,handler:function(){e.hide()}}]});var e=new Ext.Window({layout:"fit",width:440,height:250,closable:true,resizable:true,maskDisabled:false,modal:true,items:[f]});e.show()}})}});Pld.ScriptRunsGrid=Ext.extend(Ext.iptego.Grid,{id:"scriptruns_grid",resourceid:"runscripts.grid",stateId:"runscripts_grid",selectionType:"checkbox",selectionMode:"multiple",pageing:false,autoExpandColumn:"run_title",runningStateRenderer:function(c,b,a){if(c==1){return"<div>Running</div>"}else{if(c===0){return"<div>Starting</div>"}else{return"<div>Finished</div>"}}},initComponent:function(){this.columns=[{width:60,sortable:true,dataIndex:"id",hidden:true},{width:100,sortable:true,dataIndex:"script_name",hidden:true},{id:"run_title",width:100,sortable:true,dataIndex:"title"},{width:110,sortable:true,dataIndex:"start_ts",renderer:datetimeRenderer},{width:100,sortable:true,dataIndex:"result_count"},{width:60,sortable:true,dataIndex:"running",renderer:this.runningStateRenderer}];var a=new Ext.data.Record.create(["id",{name:"start_ts",type:"date",dateformat:JSON_FORMAT_DATETIME},"title","script_name","output_table","table_type",{name:"result_count",type:"int"},"running"]);this.scriptsReader=new Ext.data.JsonReader({root:"scripts",totalProperty:"totalCount",id:"id"},a);this.store=new Ext.data.GroupingStore({url:"getScriptRuns",reader:this.scriptsReader,groupField:"script_name",sortInfo:{field:"start_ts",direction:"DESC"}});this.view=new Ext.grid.GroupingView({groupTextTpl:'{text} ({[values.rs.length]} {[values.rs.length > 1 ? "runs" : "run"]})'});this.topToolbar=[{name:"actions",selectionRequired:true,menu:[{text:"View results table",tooltip:"View the results table of the selected script run.",singleSelectionRequired:true,handler:this.onViewResults.createDelegate(this)},{text:"CSV export",tooltip:"Export the results table of the selected script run to CSV.",selectionRequired:true,handler:this.onCSV.createDelegate(this)},{text:"View output",tooltip:"View the console output of the selected script run.",selectionRequired:true,handler:this.onViewOutput.createDelegate(this)}]},{name:"kill",tooltip:"Force the selected script to quit.",callback:this.onKill.createDelegate(this),selectionRequired:true},{name:"delete",tooltip:"Delete the selected script run.",callback:this.onDeleteSelected.createDelegate(this),selectionRequired:true}];Pld.ScriptRunsGrid.superclass.initComponent.call(this)},listeners:{rowdblclick:function(a,d,b){var c=a.getStore().getAt(d);a.showResultsTab(c.id,c.get("title"),c.get("table_type"))}},onDeleteSelected:function(b){if(Ext.isEmpty(b)){return}var a=this;Ext.MessageBox.confirm("Confirm","Do you really want to delete the selected scripts runs?",function(c){if(c=="yes"){Ext.iptego.request({url:"deleteScriptRuns",params:{selected:Ext.pluck(b,"id")},waitMsg:"Deleting script run...",successHandler:function(){a.getStore().reload()}})}})},onKill:function(){var b=this.getSelectionModel();var a=b.getSelected();if(a){this.killScript(a.id)}},onViewOutput:function(){var b=this.getSelectionModel();var a=b.getSelected();if(a){this.showOutputWindow(a.id)}},onViewResults:function(){var b=this.getSelectionModel();var a=b.getSelected();if(a){this.showResultsTab(a.id,a.get("title"),a.get("table_type"))}},onCSV:function(a){var c=this.getSelectionModel();var b=c.getSelected();switch(b.get("table_type")){case"calls":Ext.iptego.requestFile({url:"getScriptResult",params:{id:b.id,csv:true}});break;default:Ext.iptego.requestFile({url:"getCustomScriptResult",params:{id:b.id,csv:true}});break}},killScript:function(a){Ext.iptego.request({url:"killScript",params:{id:a},waitMsg:"Stopping script...",successHandler:function(){this.getStore().reload()}.createDelegate(this)})},showResultsTab:function(d,c,b){var a=Pld.Application.findById("scriptresults_panel");a.showResult(d,c,b)},showOutputWindow:function(a){Ext.iptego.request({url:"getScriptOutput",params:{id:a},successHandler:function(b){var d="<pre>"+b.result+"</pre>";var c=new Ext.Panel({collapsible:false,html:d,autoScroll:true});var f=[{text:"Close",handler:function(){e.close()}}];var e=new Ext.Window({layout:"fit",width:440,height:170,modal:true,items:c,buttons:f,closable:true});e.show()}})}});Pld.ScriptRunPanel=Ext.extend(Ext.Panel,{layout:"border",border:false,tableType:null,compileTemplates:function(){this.northTemplate=new Ext.XTemplate('<div class="run-details">',"<p>The script was called with the following parameters:</p>","<ul>",'<tpl for="parameters">',"<li>{name}: {value}</li>","</tpl>","</ul>")},renderNorthPanel:function(a){return this.northTemplate.apply(a)},initComponent:function(){this.compileTemplates();this.northpanel=new Ext.Panel({html:"",bodyStyle:"padding:10px 10px 10px 10px;",region:"north",height:100,collapsible:true,listeners:{render:function(){var a=this.northpanel.getUpdater();a.setRenderer(new Pld.PanelRenderer({renderFunc:this.renderNorthPanel.createDelegate(this)}));a.update({url:"getRunParameters",params:{id:this.runId}});return true}.createDelegate(this)}});if(this.tableType=="calls"){this.centerpanel=new Ext.iptego.Grid({resourceid:"scripts.result.grid",region:"center",store:new Ext.data.JsonStore({url:"getScriptResult",baseParams:{id:this.runId},root:"result",totalProperty:"totalCount",fields:["id","pid","caller","callee",{name:"start_ts",type:"date",dateformat:JSON_FORMAT_DATETIME},"call_time","code","state","state_extra"]}),columns:[{width:120,sortable:true,dataIndex:"caller"},{width:120,sortable:true,dataIndex:"callee"},{width:120,sortable:true,dataIndex:"start_ts"},{width:120,sortable:true,dataIndex:"call_time"},{width:120,sortable:true,dataIndex:"code"},{width:120,sortable:true,dataIndex:"state"},{width:120,sortable:true,dataIndex:"state_extra"}],listeners:{rowdblclick:function(a,d,b){var c=a.getStore().getAt(d);Pld.showCallDetailsWin(c.get("pid"),c.get("id"),null)}}})}else{this.centerpanel=new Pld.ScriptResultsGrid({runId:this.runId,region:"center"})}this.items=[this.northpanel,this.centerpanel];Pld.ScriptRunPanel.superclass.initComponent.call(this)}});Pld.ScriptResultsGrid=Ext.extend(Ext.ux.AutoGridPanel,{runId:null,pageSize:30,initComponent:function(){this.store=new Ext.data.JsonStore({url:"getCustomScriptResult",root:"result",baseParams:{id:this.runId},totalProperty:"totalCount",fields:["id"]});this.bbar=new Ext.PagingToolbar({pageSize:this.pageSize,store:this.store,displayInfo:true});this.on("render",function(a){this.store.reload()},this);Pld.ScriptResultsGrid.superclass.initComponent.call(this)}});Pld.ScriptResultsPanel=Ext.extend(Ext.TabPanel,{id:"scriptresults_panel",showResult:function(d,a,b){var c=this.getItem("tab-"+d);if(!c){c=new Pld.ScriptRunPanel({id:"tab-"+d,title:a,tableType:b,closable:true,runId:d});this.add(c);mainpanel=Pld.Application.findById("scripts_mainpanel");mainpanel.doLayout()}this.setActiveTab(c);c.doLayout()},hideResult:function(b){var a=this.getItem("tab-"+b);if(a){this.remove(a)}}});Pld.ScriptsMainPanel=Ext.extend(Ext.Panel,{id:"scripts_mainpanel",layout:"border",border:false,height:600,initComponent:function(){this.scriptsgrid=new Pld.ScriptsGrid({title:"Available scripts",stateId:"scripts.grid"});this.runsgrid=new Pld.ScriptRunsGrid({title:"Script runs",stateId:"script_runs.grid"});this.leftpanel=new Ext.TabPanel({region:"west",title:"Overview",split:true,collapsible:true,width:500,items:[this.scriptsgrid,this.runsgrid]});this.leftpanel.setActiveTab(this.scriptsgrid);this.centerpanel=new Pld.ScriptResultsPanel({region:"center",collapsible:false});this.items=[this.leftpanel,this.centerpanel];Pld.ScriptsMainPanel.superclass.initComponent.call(this)}});
Pld.EditMetricWindow=Ext.extend(Ext.Window,{layout:"fit",autoHeight:true,width:600,bodyStyle:"padding: 5px 10px",initComponent:function(){var b=[{xtype:"textfield",name:"name",fieldLabel:"Name",allowBlank:false,width:200}];if(Pld.hasPermission("set_snmp_export")){b.push({xtype:"checkbox",name:"snmp_export",fieldLabel:"Export to SNMP",plugins:new Ext.iptego.FieldTip({text:"Please indicate, if you want to export this metric via SNMP."})})}var e=[{title:"Metric Configuration",items:b}];if(this.params){var d=[];for(var c=0;c<this.params.length;c++){var g=this.params[c];var f=null;switch(g.type){case"COUNTER_PARAM_TYPES.TransportType":f={xtype:"combo",store:["TCP","UDP"]};break;case"COUNTER_PARAM_TYPES.MethodType":f={xtype:"combo",editable:false,mode:"local",allowBlank:false,triggerAction:"all",forceSelection:true,store:[[1,"ACK"],[2,"BYE"],[3,"CANCEL"],[4,"INFO"],[5,"INVITE"],[6,"MESSAGE"],[7,"NOTIFY"],[8,"OPTIONS"],[9,"PRACK"],[10,"PUBLISH"],[11,"REGISTER"],[12,"REFER"],[13,"SUBSCRIBE"],[14,"UPDATE"]]};break;case"COUNTER_PARAM_TYPES.IntegerType":f={xtype:"numberfield",allowDecimals:false,allowNegative:false,allowBlank:false};break;case"COUNTER_PARAM_TYPES.DirectionType":f={xtype:"combo",hiddenName:g.id,name:g.id+"_visible",editable:false,mode:"local",allowBlank:false,triggerAction:"all",forceSelection:true,store:[[0,"IN"],[1,"OUT"],[2,"TRAVERSING"]]};break;case"COUNTER_PARAM_TYPES.TcpDirectionType":f={xtype:"combo",hiddenName:g.id,name:g.id+"_visible",editable:false,mode:"local",allowBlank:false,triggerAction:"all",forceSelection:true,store:[[0,"Received"],[1,"Sent"]]};break;case"COUNTER_PARAM_TYPES.CallsActiveType":f={xtype:"combo",hiddenName:g.id,name:g.id+"_visible",editable:false,mode:"local",allowBlank:false,triggerAction:"all",forceSelection:true,store:[[0,"Established calls"],[1,"Calls in state 100 Trying"],[2,"Calls in state 180 Ringing"],[3,"Calls in state 183 Progress"]]};break;default:f={xtype:"textfield",allowBlank:false};break}f.name=f.name||g.id;f.fieldLabel=g.text;d.push(f)}if(!Ext.isEmpty(d)){e.push({title:"Parameters",items:d})}}if(!Ext.isEmpty(this.source)){var a={title:"Average Metric Configuration",items:[{xtype:"hidden",name:"src_cnt",value:this.source},{xtype:"radio",name:"weekdays",fieldLabel:"Handle weekdays",inputValue:0,boxLabel:"All weekdays are equal"},{xtype:"radio",name:"weekdays",inputValue:1,boxLabel:"Calculate average per weekday"},{xtype:"numberfield",allowDecimals:false,allowNegative:false,allowBlank:false,fieldLabel:"Average period in days",name:"days"}]};e.push(a)}this.form=new Ext.form.FormPanel({defaultType:"fieldset",labelWidth:300,border:false,labelAlign:"right",autoHeight:true,items:e,buttons:[{text:"Save",scope:this,formBind:true,handler:this.onSave},{text:"Cancel",scope:this,handler:function(){this.close()}}]});this.items=this.form;Pld.EditMetricWindow.superclass.initComponent.call(this);this.addEvents("counter_changed");if(this.action=="edit"){this.on("afterrender",this.onReady,this)}},onReady:function(){this.form.getForm().load({url:"getCounterConfig",params:{id:this.counterId},failure:formFailureMsg,waitMsg:"Loading metrics configuration..."})},onSave:function(){this.form.getForm().submit({params:{realm:this.realm,action:this.action,device:this.device,id:this.counterId,maintype:this.maintype,subtype:this.subtype},url:"addOrModifyCounter",success:function(a,b){this.fireEvent("counter_changed",this);this.close()}.createDelegate(this),failure:formFailureMsg,waitMsg:"Saving configuration..."})}});
Pld.CountersChart=Ext.extend(Ext.iptego.Chart,{updateInterval:5,timeSlider:5,goToNow:true,url:"MonitorGraph",selectedForChart:null,maxCounters:5,initComponent:function(){this.selectedForChart=new Ext.util.MixedCollection();this.bbar=this.bbar||[{iconCls:"icon_dashboard",tooltip:"Show in Dashboard",name:"dashboard",handler:function(){var a=this.selectedForChart.getRange();Pld.Dashboard.configurePortlet({xtype:"counters-portlet",selected:a})}.createDelegate(this)},"-",{xtype:"checkbox",boxLabel:"Show Min/Avg/Max",listeners:{check:function(c,a){var b=Ext.getCmp("counters.chart");b.baseParams.aggregate=a;b.load()}}}];this.plugins=[new Ext.iptego.HorizontalDrag()];Pld.CountersChart.superclass.initComponent.call(this)},setDevice:function(b,a){this.selectedForChart.clear();this.baseParams.device_id=b;Ext.each(a,function(c){this.onSelectCounter(c)},this)},onSelectCounter:function(b){if(this.selectedForChart.getCount()>=this.maxCounters){info("Cannot display more than 5 metrics.");return false}if(this.selectedForChart.contains(b)){return true}this.selectedForChart.add(b);var a={counter:b};if(!Ext.isEmpty(this.baseParams.device_id)){a.device=this.baseParams.device_id}Ext.iptego.request({url:"selectCounter",params:a,successHandler:function(){this.load()}.createDelegate(this)});return true},onDeselectCounter:function(c,a){if(this.selectedForChart.remove(c)){var b={counter:c};if(!Ext.isEmpty(this.baseParams.device_id)){b.device=this.baseParams.device_id}Ext.iptego.request({url:"deselectCounter",params:b,successHandler:function(){this.load()}.createDelegate(this)});return true}return false}});Pld.CountersPanel=Ext.extend(Ext.iptego.Grid,{viewConfig:{forceFit:true},fields:["id","name","maintype","device","realm",{name:"sec",type:"float"},{name:"m_avg",type:"float"},{name:"m_sum",type:"int"},{name:"h_avg",type:"float"},{name:"h_sum",type:"int"},{name:"selected",type:"boolean"},{name:"snmp_export",type:"boolean"},"datatype"],snmpRenderer:function(e,c,a,d,b){return e?"On":"Off"},counterRenderer:function(g,e,b,f,d,c,a){if(b.get("datatype")=="bandwith"){g=g<<3;return bandwidthRenderer(g)}else{if(g>=1000){if(a){return floatRenderer(g)}return largeValueRenderer(g)}else{if(a){return floatRenderer(g)}}}return g},preventCheckAll:true,selectionType:"checkbox",selectionMode:"multiple",pageing:false,initComponent:function(){this.columns=[{header:"Id",width:50,dataIndex:"id",hidden:true,sortable:true},{header:"Name",width:150,dataIndex:"name",sortable:true},{header:"Device",width:50,dataIndex:"device",sortable:true},{header:"Realm",width:50,dataIndex:"realm",sortable:true},{header:"Last second",width:50,dataIndex:"sec",align:"right",renderer:this.counterRenderer},{header:"Last Minute Avg",width:30,dataIndex:"m_avg",align:"right",renderer:this.counterRenderer.createDelegate(this,[true],true)},{header:"Last Minute Sum",width:30,dataIndex:"m_sum",align:"right",renderer:this.counterRenderer,hidden:true},{header:"Last Hour Avg",width:30,dataIndex:"h_avg",align:"right",renderer:this.counterRenderer.createDelegate(this,[true],true)},{header:"Last Hour Sum",width:30,dataIndex:"h_sum",align:"right",renderer:this.counterRenderer,hidden:true},{header:"SNMP",width:30,dataIndex:"snmp_export",renderer:this.snmpRenderer}];this.store=new Ext.data.JsonStore({url:"getCounterValues",root:"counters",idProperty:"id",fields:this.fields});this.refresher=new Ext.iptego.AutoRefresher({defaultInterval:0,handlers:[function(){this.store.reload()}.createDelegate(this)]});this.snmpBtn=new Ext.Button({text:"SNMP Export",handler:this.onExport,scope:this,action:"enable",disabled:true});this.removeFavBtn=new Ext.Button({name:"remove_favorite",selectionRequired:true,text:"Remove from Favorites",tooltip:"Remove selected metric from the list of Favorites.",callback:this.onRemoveFavorite.createDelegate(this)});this.topToolbar=[this.removeFavBtn,this.snmpBtn,"->"];this.topToolbar.push(this.refresher);Pld.CountersPanel.superclass.initComponent.call(this)},onRender:function(b,a){Pld.CountersPanel.superclass.onRender.call(this,b,a);var c=this.getSelectionModel();this.relayEvents(c,["rowselect","rowdeselect"]);c.on("selectionchange",this.onSelectionChange,this)},onSelectionChange:function(c){if(c.getCount()){var a=false;c.each(function(d){if(!d.get("snmp_export")){a=true;return false}});var b=a?"Enable SNMP Export":"Disable SNMP Export";this.snmpBtn.setText(b);this.snmpBtn.action=a?"enable":"disable";this.snmpBtn.enable();this.removeFavBtn.enable()}else{this.snmpBtn.disable();this.removeFavBtn.disable()}},onDashboard:function(){var c=this.getSelectionModel();var a=c.getSelections();var b=Ext.pluck(a,"id");Pld.Dashboard.configurePortlet({xtype:"counters-portlet",selected:b})},onFavorite:function(c){if(Ext.isEmpty(c)){return}if(!Ext.isArray(c)){c=[c]}var a=Pld.getUserOption("favorite-counters");var d=false;if(Ext.isEmpty(a)){a=c;d=true}else{for(var b=0;b<c.length;b++){var e=c[b];if(a.indexOf(e)<0){a.push(e);d=true}}}if(d){Pld.setUserOption("favorite-counters",a,function(){this.getStore().reload()}.createDelegate(this))}},onRemoveFavorite:function(b){var a=Pld.getUserOption("favorite-counters");if(Ext.isEmpty(a)){return}var c={};Ext.each(b,function(d){c[d.id]=true;this.fireEvent("rowdeselect",null,null,d)},this);updated=[];Ext.each(a,function(d){if(!(c[d]===true)){updated.push(d)}});Pld.setUserOption("favorite-counters",updated,function(){this.getStore().reload()}.createDelegate(this))},onExport:function(){var a=Ext.pluck(this.getSelectionModel().getSelections(),"id");if(!Ext.isEmpty(a)){Ext.iptego.request({url:"toggleSNMPExport",params:{action:this.snmpBtn.action,ids:a},successHandler:function(b){this.store.reload()}.createDelegate(this),waitMsg:"Modifying metric configuration"})}}});Pld.CountersLibrary=Ext.extend(Ext.tree.TreePanel,{wizard:null,autoScroll:true,useArrows:true,animate:true,enableDrag:true,ddGroup:"kpis",initComponent:function(){this.hiddenNodes=[];this.loader=new Ext.tree.TreeLoader({createNode:function(a){if(a.leaf&&!a.disabled&&!a.add){a.checked=a.checked||false}else{a.allowDrag=false}return Ext.tree.TreeLoader.prototype.createNode.call(this,a)},url:"getCounterTypes"});this.root={text:"Platform-wide",id:"root",nodeType:"async"};this.customBtn=new Ext.Button({text:"Custom",tooltip:"Edit the customized selected metric.",disabled:true,menu:[{text:"Edit custom...",scope:this,handler:this.onEdit},{text:"Delete Custom...",scope:this,handler:this.onDelete}]});this.filterField=new Ext.iptego.FilterField({width:120,emptyText:"Filter for a metric...",listeners:{filterchanged:this.onFilter.createDelegate(this)}});this.avgBtn=new Ext.Button({text:"Create Avg",disabled:true,scope:this,handler:this.onAvg});this.tbar=this.tbar||[{text:"Add to Favorites",tooltip:"Adds the selected or checked metrics to the favorites on the left. You can also drag and drop metrics to the KPIs table.",handler:function(){var b=Ext.getCmp("counters_grid");if(b){var a=this.getChecked("id");if(!Ext.isEmpty(a)){b.onFavorite(a)}else{var c=this.getSelectionModel().getSelectedNode();if(c&&c.isLeaf()){b.onFavorite(c.id)}}}}.createDelegate(this)},"-",this.filterField,"->",this.avgBtn,this.customBtn];this.bbar=this.reduced?null:[new Pld.DeviceSelectionField({mode:"remote",editable:true,blankValue:"Platform-wide",title:"Devices",width:180,emptyText:"Device...",listeners:{select:function(b,c,a){this.getLoader().baseParams.device=c.get("id");this.reload(this.root);this.root.setText(c.get("name"))}.createDelegate(this)}}),"-",{xtype:"realms_box",allowBlank:true,title:"Realms",typeAhead:true,width:180,minChars:2,editable:true,emptyText:"Realm...",listeners:{select:function(b,c,a){this.getLoader().baseParams.realm=c.get("id");this.reload()}.createDelegate(this)}}];Pld.CountersLibrary.superclass.initComponent.call(this);this.on("click",this.onClick,this);this.on("beforeclick",this.onBeforeClick,this)},onBeforeClick:function(a){if(a.disabled){this.toActivate=a;Ext.Msg.confirm("Inactive Metric","Would you like to activate the metric?",function(b){if(b=="yes"){this.activateMetric(this.toActivate)}}.createDelegate(this))}},onClick:function(c){var b=c.attributes;if(c.isLeaf()){if(b.add){this.lastCategory=c.id.substring(1);var a=c.parentNode.attributes;this.editMetric("add",a.maintype,a.subtype,a.params,a.text,a.device)}else{if(b.editable){this.lastCategory=c.parentNode.id}}}this.customBtn.setDisabled(!b.editable);this.avgBtn.setDisabled(!c.isLeaf()||b.source||b.add)},onFilter:function(b,c){Ext.each(this.hiddenNodes,function(d){d.ui.show()});if(!c){return}this.expandAll();var a=new RegExp("^.*"+Ext.escapeRe(c)+".*","i");this.root.cascade(function(d){if(a.test(d.text)){d.ui.show();d.bubble(function(){this.ui.show()})}else{d.ui.hide();this.hiddenNodes.push(d)}},this)},reload:function(a){a=a||this.getNodeById(this.lastCategory)||this.root;this.lastPath=a.getPath();while(a!=this.root){if(a.attributes.children){a=a.parentNode}else{break}}a.reload(function(b){this.expandPath(this.lastPath);Ext.each(this.getChecked(),function(c){this.fireEvent("checkchange",c,c.getUI().isChecked())});this.customBtn.disable();this.avgBtn.disable();this.fireEvent("load",b)},this)},editMetric:function(g,e,h,f,b,d,c,a){if(g=="add"){b="Adding "+b}else{b="Editing "+b}var i=new Pld.EditMetricWindow({source:a,realm:this.getLoader().baseParams.realm,action:g,counterId:c,device:d,maintype:e,subtype:h,params:f,title:b});i.show();i.on("counter_changed",function(j){this.reload()},this)},activateMetric:function(b){var a=b.attributes;this.lastCategory=b.parentNode.id;var c={action:"add",name:a.text,device:a.device,maintype:a.maintype,subtype:a.subtype};if(!Ext.isEmpty(this.getLoader().baseParams.realm)){c.realm=this.getLoader().baseParams.realm}if(a.params){Ext.each(a.params,function(d){if(!Ext.isEmpty(d.value)){c[d.id]=d.value}})}Ext.iptego.request({url:"addOrModifyCounter",params:c,successHandler:function(d){info(d.successMsg);this.reload()}.createDelegate(this)})},onAvg:function(){var a=this.getSelectionModel().getSelectedNode();if(a){this.editMetric("add",9,0,null,"average metric for "+a.text,a.attributes.device,null,a.id)}},onEdit:function(){var b=this.getSelectionModel().getSelectedNode();if(b){var a=b.parentNode.attributes.params?b.parentNode.attributes:b.attributes;this.editMetric("edit",a.maintype,a.subtype,a.params,b.text,a.device,b.id,b.attributes.source)}},onDelete:function(){var a=this.getSelectionModel().getSelectedNode();if(a&&a.isLeaf()){Ext.Msg.confirm("Delete Custom Metric",String.format("Do you want to delete {0}?",a.text),function(c){if(c=="yes"){var d=this.getSelectionModel().getSelectedNode();var b=Ext.getCmp("counters_grid");if(b){b.onRemoveFavorite([d])}Ext.iptego.request({url:"deleteCounter",params:{id:d.id},successHandler:function(e){this.reload()}.createDelegate(this),waitMsg:"Modifying metric configuration"})}}.createDelegate(this))}}});Pld.MonitoringPage=Ext.extend(Ext.iptego.Page,{id:MONITORING,initComponent:function(){var a={xtype:"spanel",layout:"border",height:Pld.getViewportDimensions(true).height,info:"Create charts by combining the KPI/metrics data gathered by PALLADION. To fill the chart, <b>select a KPI/metric</b> from the list below.",topic:"50ui-monitor.html#counter-monitoring-chart",title:"KPI / Metrics Monitoring",items:[new Pld.CountersChart({id:"counters.chart",height:350,split:true,region:"north"}),{xtype:"panel",layout:"fit",region:"center",title:"Favorites",items:[new Pld.CountersPanel({topic:"50ui-monitor.html#monitor-counters-table",ddGroup:"kpis",id:"counters_grid",border:false,listeners:{afterrender:function(c){var b=c.container.dom;new Ext.dd.DropTarget(b,{ddGroup:"kpis",notifyDrop:function(g,f,d){var h=d.node.id;info("Adding "+d.node.text+" to Favorites.");c.onFavorite(h);return true}.createDelegate(c)})},rowselect:function(g,f,e){var c=Ext.getCmp("counters.chart");if(!c.onSelectCounter(e.id)){g.deselectRow(f)}else{var b=Ext.getCmp("counters_library");if(b){var d=b.getNodeById(e.id);if(d){b.suspendEvents();d.getUI().toggleCheck(true);b.resumeEvents()}}}},rowdeselect:function(g,f,e){var c=Ext.getCmp("counters.chart");c.onDeselectCounter(e.id);var b=Ext.getCmp("counters_library");if(b){var d=b.getNodeById(e.id);if(d){b.suspendEvents();d.getUI().toggleCheck(false);b.resumeEvents()}}}}})]},new Pld.CountersLibrary({region:"east",width:390,split:true,layout:"fit",id:"counters_library",title:"Library",listeners:{afterrender:function(b){b.root.expand(false,false,function(d){var c=d.getOwnerTree();console.log(c.getChecked());Ext.each(c.getChecked(),function(e){c.fireEvent("checkchange",e,e.getUI().isChecked())})})},checkchange:function(g,f){var e=Ext.getCmp("counters.chart");if(f){if(!e.onSelectCounter(g.id)){var b=g.getOwnerTree();b.suspendEvents();g.getUI().toggleCheck(false);b.resumeEvents();return}}else{e.onDeselectCounter(g.id)}var d=Ext.getCmp("counters_grid");if(d){var c=d.getStore();var h=c.find("id",g.id);if(h>-1){var i=d.getSelectionModel();if(f){i.selectRow(h,true)}else{i.deselectRow(h)}d.onSelectionChange(i)}}}.createDelegate(this)}})]};this.items=[a];Pld.MonitoringPage.superclass.initComponent.apply(this,arguments)}});Pld.regPage(Pld.MonitoringPage);
traces_usersearchfield=null;Pld.TracesPage=Ext.extend(Ext.iptego.Page,{id:TRACES,initComponent:function(){this.items=[];this.items.push(new Ext.iptego.StatefulPanel({title:"Traces Info",info:"Shows the status of the packet buffer. Traces cannot reach beyond the first frame in the buffer.",topic:"42ui-traces.html#traces-info-panel",collapsible:false,items:new Pld.DumpInfoPanel({stateId:"dump_info_grid"})}));this.items.push(new Ext.iptego.StatefulPanel({title:"New Packet Capture",info:"<b>Start</b> a packet capture for the given time interval. The resulting trace can be downloaded for further analysis. <br />The capturing can be limited to a particular user and/or to a network interface.",topic:"42ui-traces.html#new-packet-capture-panel",collapsible:false,items:new Pld.PacketCaptureForm()}));this.items.push(new Ext.iptego.StatefulPanel({title:"Running and Finished Traces",topic:"42ui-traces.html#running-and-finished-traces-panel",collapsible:false,items:new Pld.TracesList({stateId:"traces_grid"})}));Pld.TracesPage.superclass.initComponent.apply(this,arguments)}});Pld.regPage(Pld.TracesPage);Pld.createUserTrace=function(a){loadContent(TRACES);Ext.getCmp("traces_user_search").setValue(a);Ext.get("traces_user_search").frame()};Pld.DumpInfoPanel=Ext.extend(Ext.iptego.Grid,{id:"dumps.info.grid",pageing:false,height:71,initComponent:function(){this.store=new Ext.data.JsonStore({url:"getDumpInfo",root:"data",fields:[{name:"nframes",type:"int"},{name:"size",type:"int"},{name:"maxsize",type:"int"},{name:"first_ts",type:"date",dateformat:JSON_FORMAT_DATETIME},{name:"last_ts",type:"date",dateformat:JSON_FORMAT_DATETIME}]}),this.refresher=new Ext.iptego.AutoRefresher({handlers:[function(){this.store.reload()}.createDelegate(this)],defaultInterval:10}),this.columns=[{width:150,dataIndex:"nframes"},{width:100,dataIndex:"size",renderer:bytesRenderer},{width:120,dataIndex:"maxsize",renderer:bytesRenderer},{width:110,dataIndex:"first_ts",renderer:datetimeRenderer},{width:110,dataIndex:"last_ts",renderer:datetimeRenderer}];this.bbar=["->",this.refresher];Pld.DumpInfoPanel.superclass.initComponent.call(this)}});Pld.PacketCaptureForm=Ext.extend(Ext.form.FormPanel,{layout:"table",autoHeight:true,layoutConfig:{columns:3},defaults:{height:90},buttonAlign:"right",bodyStyle:"padding: 4px; padding-left: 10px",intervals:[[0,"now"],[30,"30 seconds"],[60,"1 minute"],[300,"5 minutes"],[600,"10 minutes"],[1800,"30 minutes"],[3600,"1 hour"],[6*3600,"6 hours"],[12*3600,"12 hours"]],initComponent:function(){this.if_store=new Ext.data.SimpleStore({fields:["value","text"],data:[[255,"All interfaces"],[2,"PortA"],[3,"PortB"],[4,"PortC"],[5,"PortD"]]});this.traces_usersearchfield=new Pld.UserSearchField({id:"traces_user_search"});this.ip_mask=new Ext.form.TextField({fieldLabel:"IP filter",width:200,vtype:"ip"});this.ifmask=new Ext.form.ComboBox({fieldLabel:"Capture on",labelStyle:{width:"90px"},store:this.if_store,forceSelection:true,triggerAction:"all",editable:false,mode:"local",value:255,width:200,valueField:"value",displayField:"text"});this.from_radio1=new Ext.form.Radio({name:"from_radio",width:90,checked:true,boxLabel:"Relative:",hideLabel:true});this.from_radio2=new Ext.form.Radio({name:"from_radio",width:90,boxLabel:"By date:",hideLabel:true});this.from_combo=new Ext.form.ComboBox({mode:"local",store:new Ext.data.SimpleStore({fields:["value","text"],data:function(){var c=[];for(var b=0;b<this.intervals.length;b++){if(this.intervals[b][0]===0){c[b]=this.intervals[b]}else{c[b]=[this.intervals[b][0],this.intervals[b][1]+" ago"]}}return c}.call(this)}),value:300,displayField:"text",valueField:"value",forceSelection:true,triggerAction:"all",editable:false,width:160});this.from_date=new Ext.form.DateField({disabled:true,width:160});this.from_date.setValue(SrvTime.get());this.to_radio1=this.from_radio1.cloneConfig({name:"toradio"});this.to_radio2=this.from_radio2.cloneConfig({name:"toradio"});this.to_combo=this.from_combo.cloneConfig({store:new Ext.data.SimpleStore({fields:["value","text"],data:function(){var c=[];for(var b=0;b<this.intervals.length;b++){if(this.intervals[b][0]===0){c[b]=this.intervals[b]}else{c[b]=[this.intervals[b][0],this.intervals[b][1]+" from now"]}}return c}.call(this)}),value:60});this.to_date=this.from_date.cloneConfig();function a(d,c,b){if(d.getValue()){c.setDisabled(false);b.setDisabled(true)}else{c.setDisabled(true);b.setDisabled(false)}}this.from_radio1.on("check",function(){a(this.from_radio1,this.from_combo,this.from_date)}.createDelegate(this));this.to_radio1.on("check",function(){a(this.to_radio1,this.to_combo,this.to_date)}.createDelegate(this));this.items=[{xtype:"fieldset",title:"Start Time",width:380,layout:"absolute",items:[Ext.apply(this.from_radio1,{x:5,y:0}),Ext.apply(this.from_combo,{x:70,y:0}),Ext.apply(this.from_radio2,{x:5,y:30}),Ext.apply(this.from_date,{x:70,y:30})]},{width:10,border:false},{xtype:"fieldset",title:"End Time",layout:"absolute",width:380,items:[Ext.apply(this.to_radio1,{x:5,y:0}),Ext.apply(this.to_combo,{x:70,y:0}),Ext.apply(this.to_radio2,{x:5,y:30}),Ext.apply(this.to_date,{x:70,y:30})]},{xtype:"fieldset",colspan:3,title:"Filter",height:110,items:[this.traces_usersearchfield,this.ip_mask,this.ifmask]}];this.bbar=[{text:"Start capture",handler:function(){var b={user:this.traces_usersearchfield.getValue(),ip_mask:this.ip_mask.getValue(),ifmask:this.ifmask.getValue(),start_is_selected:this.from_radio1.getValue(),start_secs:this.from_combo.getValue(),end_is_selected:this.to_radio1.getValue(),end_secs:this.to_combo.getValue()};if(!this.from_radio1.getValue()){b.start_ts=datetimeRenderer(this.from_date.getValue())}if(!this.to_radio1.getValue()){b.end_ts=datetimeRenderer(this.to_date.getValue())}this.getForm().submit({url:"newDumpHandler",params:{dump:Ext.encode(b)},success:function(){var c=Ext.StoreMgr.get("dumps.store");if(!!c){c.reload()}},failure:formFailure})}.createDelegate(this)}];Pld.PacketCaptureForm.superclass.initComponent.call(this)}});Pld.TracesList=Ext.extend(Ext.iptego.Grid,{id:"traces.grid",selectionType:"checkbox",selectionMode:"multiple",pageing:false,dumpFileLocation:function(c,b){var a=50;if(b>a*1000000){Ext.Msg.confirm("Note","File size exceeds "+a+"MB - continue download?",function(d){if(d=="yes"){document.location.href=c}})}else{document.location.href=c}},startTimeRenderer:function(e,c,a){var d=datetimeRenderer(e);if(a.get("state")==0){var b=SrvTime.get().format("U")-e.format("U");if(b>0){d+="<br /> ("+formatTimeInterval(b)+" ago)"}}return d},endTimeRenderer:function(e,c,a){var d=datetimeRenderer(e);if(a.get("state")==0){var b=e.format("U")-SrvTime.get().format("U");if(b>0){d+="<br /> (in "+formatTimeInterval(b)+")"}}return d},stateRenderer:function(c,b,a){if(c==0){return'<span style="color:red;">Running</span>'}else{if(c==1){return'<span style="color:green;">Stopped</span>'}else{if(c==2){return'<span style="color:green;">Finished</span>'}else{if(c==3){return'<span style="color:red;font-weight: bold;">Error</span>'}else{if(c==4){return'<span style="color:orange;font-weight: bold;">Scheduled</span>'}}}}}},filterRenderer:function(g,d,a){var b=g;var c=a.get("ifmask");var f=a.get("ip_mask");if(b==""&&c==255&&f==""){return"All packets."}var e="";if(b!=""){e+=b}if(f!=""){if(e.length>0){e+="<br />"}e+=f}if(c!=255){if(e.length>0){e+="<br />"}e+="Interfaces:";for(i=0;i<6;i++){if(c&(1<<i)){e+=i}}}return e},initComponent:function(){this.store=new Ext.data.JsonStore({url:"getDumps",root:"dumps",storeId:"dumps.store",idProperty:"id",fields:["id","fname",{name:"start_ts",type:"date",dateformat:JSON_FORMAT_DATETIME},{name:"end_ts",type:"date",dateformat:JSON_FORMAT_DATETIME},"user","ip_mask",{name:"ifmask",type:"int"},"size","nframes","state"]});this.refresher=new Ext.iptego.AutoRefresher({defaultInterval:5,handlers:[function(){this.store.reload()}.createDelegate(this)]});this.columns=[{width:140,sortable:true,dataIndex:"fname"},{width:200,sortable:true,dataIndex:"user",renderer:this.filterRenderer},{width:110,sortable:true,dataIndex:"start_ts",renderer:this.startTimeRenderer},{width:110,sortable:true,dataIndex:"end_ts",renderer:this.endTimeRenderer},{width:60,sortable:true,dataIndex:"state",renderer:this.stateRenderer},{width:100,sortable:true,dataIndex:"nframes",renderer:largeValueRenderer,align:"right"},{width:50,sortable:true,dataIndex:"size",renderer:bytesRenderer,align:"right"}];this.topToolbar=[{name:"download",disabled:true,singleSelectionRequired:true,callback:this.onDownload.createDelegate(this)},{name:"delete",selectionRequired:true,confirmation:true,callback:this.actionOnDumps.createDelegate(this,["delete"])},{name:"stop",selectionRequired:true,callback:this.actionOnDumps.createDelegate(this,["stop"])},{name:"restart",selectionRequired:true,confirmation:true,callback:this.actionOnDumps.createDelegate(this,["restart"])},"->",this.refresher];if(Ext.isIE6){this.height=300}else{this.autoHeight=true}Pld.TracesList.superclass.initComponent.call(this)},onDownload:function(b){var a="files/"+b[0].fname+"?type="+TRACES+"&id="+b[0].id;console.log(a);this.dumpFileLocation(a,b.size)},actionOnDumps:function(b){var a=Ext.pluck(this.getSelection(),"id");Ext.Ajax.request({url:"actionOnDumps",params:{dumps_ids:a,action:b},success:function(){this.store.reload()}.createDelegate(this),failure:function(){error("Error contacting server.")}})}});
Pld.AuthenticationPage=Ext.extend(Ext.iptego.Page,{id:AUTHENTICATION,initComponent:function(){this.items=new Ext.iptego.StatefulPanel({title:"Authentication Monitor",info:"This module helps with the identification of brute force password guessing attacks. It presents a summary of the failed digest authentications per user and per IP address. A transaction is considered to have failed authentication if the response code is 401 or 407 and the request contained an (Proxy-)Authorization header.",topic:"68ui-auth.html",collapsible:false,items:new Pld.AuthenticationMonitor({stateId:"authmon.grid"})});Pld.AuthenticationPage.superclass.initComponent.apply(this,arguments)}});Pld.regPage(Pld.AuthenticationPage);Pld.AuthenticationMonitor=Ext.extend(Ext.iptego.Grid,{id:"authmonitor.grid",selectionType:"rowclick",selectionMode:"single",height:580,initComponent:function(){this.store=new Ext.data.JsonStore({url:AUTHENTICATION,root:"data",totalProperty:"totalCount",remoteSort:true,fields:["name","failures",{name:"since",type:"date",dateformat:JSON_FORMAT_DATETIME},{name:"last",type:"date",dateformat:JSON_FORMAT_DATETIME},"min_delay","avg_delay"]});this.columns=[{width:100,dataIndex:"name",sortable:true},{width:60,dataIndex:"failures",align:"right",sortable:true},{width:200,dataIndex:"min_delay",align:"right",sortable:true},{width:200,dataIndex:"avg_delay",align:"right",sortable:true},{width:110,dataIndex:"since",renderer:datetimeRenderer,sortable:true},{width:110,dataIndex:"last",renderer:datetimeRenderer,sortable:true}];this.refresher=new Ext.iptego.AutoRefresher({handlers:[function(){this.store.reload()}.createDelegate(this)]});this.topToolbar=["->",{text:"CSV export",iconCls:"icon_csv",tooltip:"CSV export of authentication incidents, filters apply if set",handler:this.onCsvExport.createDelegate(this)},this.refresher];Pld.AuthenticationMonitor.superclass.initComponent.call(this)},listeners:{rowdblclick:function(a,d,b){var c=this.getSelection();Pld.trackUser(c.name)}}});
Pld.DevicesPage=Ext.extend(Ext.iptego.Page,{id:DEVICES,initComponent:function(){var b=new Ext.data.JsonStore({url:"getDevicesView",baseParams:{gheight:200,gwidth:400},fields:["id","name","graph_url","inbound","outbound","users","width","height","users_active"],root:"data",idProperty:"id"});var c=new Ext.iptego.AutoRefresher({target:b});var d=new Pld.DeviceSelectionField({emptyText:"Filter for devices...",forceSelection:false,editable:true,typeAhead:false,enableKeyEvents:true,width:250,listeners:{focus:function(){Ext.getCmp("platform_device_clear_btn").enable();c.stopTask()},blur:function(){c.startTask()},keyup:function(h,i){var g=new RegExp(h.getRawValue());b.filter("name",g,true)},select:function(e,f){e.clearValue();loadContent("device_detail");Ext.getCmp("device_detail").setDevice(f.id)}}});var a=new Ext.Button({tooltip:"Clear the device filter to display all platform devices.",text:"Clear",disabled:true,id:"platform_device_clear_btn",handler:function(e){d.clearValue();c.startTask();e.disable()}});this.items=new Ext.iptego.StatefulPanel({title:"SIP Devices Overview",info:"This view collects status information for all configured platform devices. <b>Click on a device</b> to jump to the details page.",topic:"58ui-devs.html",collapsible:false,items:{autoHeight:true,bodyStyle:"background-color:#EBEBEA;",autoScroll:true,tbar:[d," ",a,"->",c],items:{id:"devices_view",xtype:"devices_view",store:b,refresher:c},listeners:{show:function(){Ext.getCmp("devices_view").onAfterShow()},hide:function(){Ext.getCmp("devices_view").onAfterHide()}}}});Pld.DevicesPage.superclass.initComponent.call(this,arguments)}});Pld.regPage(Pld.DevicesPage);Pld.DevicesView=Ext.extend(Ext.DataView,{refresher:null,autoWidth:true,itemSelector:"div.device-wrap",overClass:"device-wrap-over",singleSelect:true,trackOver:true,loadingText:"Loading device status...",updateCount:0,emptyTpl:new Ext.XTemplate('<div style="padding: 10px;">','<h1 style="text-align:center;">No {items} configured</h1>','<p style="text-align:center; padding-top: 10px;">','Please go to the <a href="#" onclick="Pld.SettingsDialog.jumpto(\'devices-settings\'); return false;">platform settings page</a> to configure {items}.',"</p>","</div>"),isForTrunks:false,initComponent:function(){var a=this.isForTrunks?"Egress":"Inbound";var b=this.isForTrunks?"Ingress":"Outbound";this.tpl=new Ext.XTemplate('<tpl for=".">','<div class="device-wrap">','<div class="device-header">Device: {name}</div>','<div class="graph-wrap"><img class="graph" src="{graph_url}" width={width} height={height}/></div>','<div class="device-info">',"<label>"+a+' calls:</label> <span class="val-inbound">{inbound}</span>',"<label>"+b+' calls:</label> <span class="val-outbound">{outbound}</span>','<tpl if="users_active === 1">','<label>Registered users:</label> <span class="val-users">{users}</span>',"</tpl>","</div>","</div>","</tpl>");this.emptyText=this.emptyTpl.apply({items:this.isForTrunks?"trunks":"devices"});this.store.baseParams.trunks=this.isForTrunks?1:0;this.store.on("load",this.onLoad,this);this.on("render",this.onAfterRender,this);Pld.DevicesView.superclass.initComponent.call(this)},listeners:{click:function(a,b,d,c){record=a.store.getAt(b);loadContent("device_detail");Ext.getCmp("device_detail").setDevice(record.id)}},onLoad:function(b,a,c){this.loadingText=null},resizeHandler:function(c){var d=420;var a=c.getSize().width-2;var b=Math.max(1,Math.floor(a/d));var e=Math.floor(a/b);this.store.baseParams.gwidth=e-24;this.update_graph=true},onAfterRender:function(a){this.resizeHandler(a);this.ownerCt.on("resize",this.resizeHandler,this);this.refresher.setInterval(30)},onAfterShow:function(a){this.update_graph=true;this.refresher.startTask()},onAfterHide:function(a){this.refresher.stopTask()},refresh:function(){var c=this.store.getRange();var b=this.getNodes();if(c.length==0||b.length!=c.length||this.update_graph){Pld.DevicesView.superclass.refresh.call(this);this.update_graph=false}else{this.updateCount=1+this.updateCount;if(this.updateCount%2==0){this.updateCount=0}for(var d=0;d<c.length;d++){var f=b[d];var e=Ext.fly(f).child(".device-info .val-inbound");e.update(c[d].get("inbound"));e=Ext.fly(f).child(".device-info .val-outbound");e.update(c[d].get("outbound"));e=Ext.fly(f).child(".device-info .val-users");if(e){e.update(c[d].get("users"))}if(this.updateCount==0){var e=Ext.fly(f).child(".graph-wrap");var a=Ext.DomHelper.append(e,{cls:"graph",tag:"img",src:c[d].get("graph_url"),width:c[d].get("width"),height:c[d].get("height"),style:{display:"none"}});a=Ext.get(a);a.setVisibilityMode(Ext.Element.DISPLAY);a.on("load",function(h,g,k){var j=Ext.fly(g).findParent(".graph-wrap");var i=Ext.fly(j).first("img.graph");i.remove();Ext.fly(g).setVisible(true)})}}}},onDetailsClicked:function(a){loadContent("device_detail");Ext.getCmp("device_detail").setDevice(a)},onSettingsLink:function(){var a=Ext.getCmp("settings_tabpanel");var b=Ext.getCmp("platform_settings_tab");loadContent(SETTINGS);a.setActiveTab(b)}});Ext.reg("devices_view",Pld.DevicesView);
Pld.DeviceDetailPage=Ext.extend(Ext.iptego.Page,{id:"device_detail",device:null,initComponent:function(){var a=[{text:"Save Selection",handler:this.onSaveSelection,scope:this},"-",{text:"Add the TCP metrics.",tooltip:"Add all the TCP related metrics for this device.",handler:this.onTcpAdd,scope:this},"->"];if(Pld.hasPermission("nav_main")&&Pld.hasPermission("set_dashboard")){a.push({iconCls:"icon_dashboard",tooltip:"Show in Dashboard",handler:function(){var c=this.countersLib.getChecked("id");Pld.Dashboard.configurePortlet({xtype:"device-counters-portlet",selected:c})}.createDelegate(this)})}this.countersLib=new Pld.CountersLibrary({title:"Metrics Library",region:"east",split:true,width:380,tbar:a,reduced:true,listeners:{load:function(e){if(!e.parentNode){var c=e.getOwnerTree();var d=c.getChecked("id");this.countersChart.setDevice(this.device,d)}}.createDelegate(this),checkchange:function(f,e){var d=e?"onSelectCounter":"onDeselectCounter";if(!this.countersChart[d](f.id)){var c=this.countersLib;c.suspendEvents();f.getUI().toggleCheck();c.resumeEvents()}}.createDelegate(this)}});this.countersChart=new Pld.CountersChart({id:"device_chart",region:"center",url:"deviceChart",baseParams:{device_id:0},updateInterval:30,bbar:[{xtype:"checkbox",boxLabel:"Show Min/Avg/Max",listeners:{check:function(e,c){var d=Ext.getCmp("device_chart");d.baseParams.aggregate=c;d.load()}}}],listeners:{beforeload:function(c){return(c.baseParams.device_id!==0)}}});this.items=[];this.items.push({xtype:"spanel",title:"Device Selection",info:"Select a device whose details you want to display.",topic:"59ui-devdet.html#device-selection-panel",collapsible:false,height:60,layout:"absolute",items:[{xtype:"label",text:"Device:",x:5,y:5},new Pld.DeviceSelectionField({x:60,id:"device_selection_field",listeners:{select:function(e,c,d){this.onDeviceChange(e,c.id,c.get("name"))}.createDelegate(this)}}),{xtype:"button",x:500,disabled:true,text:"Create Report",id:"create_report_btn",handler:function(){createTrunkReport(this.device,!Ext.isEmpty(this.countersLib.getChecked()))}.createDelegate(this)}]});this.items.push({xtype:"spanel",title:"Device Metrics Chart",info:"Create charts by combining the SIP metrics for this device. To fill the chart, <b>select a metric</b> from the metrics selection to the right",topic:"59ui-devdet.html#device-counters-chart",collapsible:false,layout:"border",height:400,items:[this.countersChart,this.countersLib]});this.device_callviewer=new Pld.CallsPanel({title:"Calls going through this device",stateId:"device_callviewer.grid",isForDevice:true,tabTip:"This table lists calls going through the current device.",topic:"59ui-devdet.html#calls-going-through-this-device-table"});this.indevice_callviewer=new Pld.CallsPanel({id:"indevice_callviewer",stateId:"indevice_callviewer.grid",title:"Terminated calls",isForInDevice:true,tabTip:"This table lists calls terminated by the current device.",topic:"59ui-devdet.html#terminated-calls-table"});this.outdevice_callviewer=new Pld.CallsPanel({id:"outdevice_callviewer",stateId:"outdevice_callviewer.grid",title:"Originated calls",isForOutDevice:true,tabTip:"This table lists calls created by the current device.",topic:"59ui-devdet.html#originated-calls-table"});this.registrations_grid=new Pld.RegsPanel({id:"dev_registrations.grid",stateId:"dev_registrations.grid",resourceid:"regevents.grid",title:"Registrations",isForDevice:true,tabTip:"This table lists registration events handled by the current device.",topic:"59ui-devdet.html#registrations-table"});this.device_status_grid=new Pld.DeviceStatusGrid({stateId:"dev_status.grid",tabTip:"This table shows information about the status of the current device.",topic:"59ui-devdet.html#device-status-table"});this.device_voice_quality_grid=new Pld.RTPStatsCallsPanel({stateId:"devicertpstatscalls.grid",title:"Voice Quality",tabTip:"This table shows voice quality information on the current device.",topic:"59ui-devdet.html",isForDevice:true});this.items.push({xtype:"iptego_tabpanel",id:"device_details_tabpanel",resizeTabs:false,height:500,shadow:true,plain:true,items:[this.device_callviewer,this.indevice_callviewer,this.outdevice_callviewer,this.registrations_grid,this.device_status_grid,this.device_voice_quality_grid]});Pld.DeviceDetailPage.superclass.initComponent.call(this);var b=Ext.getCmp("device_selection_field");b.store.on("load",this.onDeviceStoreLoad,this);b.on("afterrender",function(c){c.store.load()})},onSaveSelection:function(){var a=this.countersLib.getChecked("id");Ext.iptego.request({url:"saveDeviceCounterSelection",params:{device_id:this.device,selection:a}})},onTcpAdd:function(){Ext.iptego.request({url:"addTcpDeviceCounters",params:{device_id:this.device},successHandler:function(a){info("TCP metrics created.");this.countersLib.reload()}.createDelegate(this),waitMsg:"Creating TCP metrics..."})},onDeviceChange:function(g,f,c){this.device=f;this.countersLib.getLoader().baseParams.device=f;this.countersLib.getLoader().baseParams.device_detail=true;this.countersLib.root.setText(c);this.countersLib.reload();var e=Ext.getCmp("create_report_btn");var a=Ext.getCmp("device_details_tabpanel");this.device_callviewer.setDevice(f);this.indevice_callviewer.setInDevice(f);this.outdevice_callviewer.setOutDevice(f);this.registrations_grid.setDevice(f);this.device_status_grid.setDevice(f);this.device_voice_quality_grid.setDevice(f);switch(this.getDeviceType()){case"GW":this.device_callviewer.disable();this.indevice_callviewer.enable();this.outdevice_callviewer.enable();this.registrations_grid.disable();this.device_status_grid.enable();e.setDisabled(false);break;case"TRUNK":this.device_callviewer.disable();this.indevice_callviewer.enable();this.outdevice_callviewer.enable();this.registrations_grid.disable();this.device_status_grid.disable();e.setDisabled(false);break;default:this.device_callviewer.enable();this.indevice_callviewer.enable();this.outdevice_callviewer.enable();this.registrations_grid.enable();this.device_status_grid.enable();e.setDisabled(true);break}for(var d=0;d<a.items.getCount();d++){var b=a.getComponent(d);if(!b.disabled){a.setActiveTab(d);break}}},onDeviceStoreLoad:function(b,a,c){if(!a||!a.length){return}var d=Ext.getCmp("device_selection_field");if(Ext.isEmpty(this.device)){this.device=a[0].get("id")}d.setValue(this.device);this.onDeviceChange(d,this.device,a[0].get("name"))},setDevice:function(a){var b=Ext.getCmp("device_selection_field");this.device=a;b.store.reload()},getDeviceType:function(){var a=Ext.getCmp("device_selection_field");dev_record=a.store.getById(this.device);return dev_record.get("type")}});Pld.regPage(Pld.DeviceDetailPage);createTrunkReport=function(e,a){var i=[];var f=new Ext.form.DateField({fieldLabel:"Report start time and date",name:"start_ts",allowBlank:false});var c=new Ext.form.DateField({fieldLabel:"Report end time and date",name:"end_ts",allowBlank:false});var n=new Ext.form.FieldSet({title:"Select report time span",defaults:{width:420},items:[f,c]});var j=new Ext.form.Checkbox({name:"include_counters",checked:true,hideLabel:true,boxLabel:"Include SIP metrics data"});var d=new Ext.form.Checkbox({name:"include_calls",checked:true,hideLabel:true,boxLabel:"Include calls data"});var m=new Ext.form.Checkbox({name:"include_chart",checked:true,hideLabel:true,disabled:!a,boxLabel:"Include chart"});var l=new Ext.form.FieldSet({title:"Report sources",defaults:{width:420},items:[j,d,m]});var b=new Ext.form.TextArea({name:"comment",height:90,allowBlank:true,fieldLabel:"Report Comment (optional)"});var g=new Ext.form.FieldSet({title:"Additional info",defaults:{width:420},items:b});var h=new Ext.form.FormPanel({url:"createDeviceReport",fileUpload:true,frame:true,monitorValid:true,labelAlign:"top",labelWidth:120,bodyStyle:{padding:"5px"},waitMsgTarget:true,items:[{xtype:"hidden",name:"device_id",value:e},{xtype:"hidden",name:"reportType",value:"pdf"},n,l,g],buttons:[{formBind:true,text:"Create",handler:function(){if(!j.getValue()&&!d.getValue()&&!m.getValue()){Ext.Msg.alert("Warning","Nothing selected. Please choose at least one option to include.");return 0}h.getForm().submit();k.hide()}},{text:"Reset",handler:function(){h.getForm().reset()}},{text:"Cancel",handler:function(){k.hide()}}]});var k=new Ext.Window({title:"Create Report",layout:"fit",autoScroll:true,height:540,width:480,modal:true,items:h});k.show()};Pld.DeviceSelectionField=Ext.extend(Ext.form.ComboBox,{fieldLabel:"Device",displayField:"name",valueField:"id",mode:"local",triggerAction:"all",forceSelection:true,editable:false,minChars:0,width:400,blankValue:null,initComponent:function(){this.store=new Ext.data.JsonStore({url:"getSipDevicesComboStore",root:"data",fields:["name","id","type"],id:"id"});if(this.blankValue){this.store.on("load",function(a,c,b){var d=new a.recordType({name:this.blankValue},"");a.insert(0,d)},this)}Pld.DeviceSelectionField.superclass.initComponent.call(this)}});Pld.DeviceStatusGrid=Ext.extend(Ext.iptego.Grid,{id:"device_status_grid",resourceid:"device_status.grid",title:"Device status",pageing:false,autoExpandColumn:"value",columns:[{dataIndex:"title",width:150},{id:"value",dataIndex:"value"}],device:null,initComponent:function(){this.store=new Ext.data.JsonStore({url:"getDeviceStatus",fields:["name","title","value"],id:"name",root:"status"});this.store.on("beforeload",function(a,b){if(Ext.isEmpty(this.device)){return false}return true},this);Pld.DeviceStatusGrid.superclass.initComponent.call(this)},setDevice:function(a){this.device=a;this.store.baseParams.device_id=a;this.store.reload()}});
Pld.TrunksPage=Ext.extend(Ext.iptego.Page,{id:"trunks",initComponent:function(){var a=new Ext.data.JsonStore({url:"getDevicesView",baseParams:{gheight:200,gwidth:400},fields:["id","name","graph_url","inbound","outbound","users","width","height","users_active"],root:"data",idProperty:"id"});var b=new Ext.iptego.AutoRefresher({target:a});this.items=new Ext.iptego.StatefulPanel({title:"Trunks Overview",info:"This view collects status information for all configured trunks. <b>Click on a trunk</b> to jump to the corresponding device details page.",topic:"61ui-trunks.html",collapsible:false,items:{autoHeight:true,bodyStyle:"background-color:#EBEBEA;",autoScroll:true,bbar:["->",b],items:{id:"trunks_view",isForTrunks:true,xtype:"devices_view",store:a,refresher:b}}});Pld.DevicesPage.superclass.initComponent.call(this,arguments)},listeners:{show:function(){Ext.getCmp("trunks_view").onAfterShow()},hide:function(){Ext.getCmp("trunks_view").onAfterHide()}}});Pld.regPage(Pld.TrunksPage);
Pld.ServersPage=Ext.extend(Ext.iptego.Page,{id:SERVERS,initComponent:function(){var a=[new Pld.ServersPanel({stateId:"servers.grid",tabTip:"Availability status of the network elements (as configured in Settings - Platform Settings).",topic:"62ui-cleanbye.html#current-status-overview-table"}),new Pld.ObpHistPanel({stateId:"obphist.grid",tabTip:"Overbilling Protection history.",topic:"62ui-cleanbye.html#availability-and-cleanbye-history-table"}),new Pld.ObpLogsPanel({stateId:"obplogs.grid",tabTip:"Overbilling Protection logs.",topic:"62ui-cleanbye.html#bye-sending-logs-table"})];this.items=new Ext.iptego.TabPanel({height:500,plain:true,shadow:true,layoutOnTabChange:true,items:a});Pld.ServersPage.superclass.initComponent.apply(this,arguments)}});Pld.regPage(Pld.ServersPage);Pld.ServersPanel=Ext.extend(Ext.iptego.Grid,{id:"servers.grid",height:400,pageing:false,title:"Current Status Overview",fields:["device_id","device","obp_status","obp_events",{name:"since",type:"date",dateformat:JSON_FORMAT_DATETIME},"passive_status",{type:"int",name:"passive_pending"},{type:"int",name:"passive_timer_started"},{name:"passive_since",type:"date",dateformat:JSON_FORMAT_DATETIME},"options_status",{type:"float",name:"options_rtt"},{type:"int",name:"options_missed"},{name:"options_since",type:"date",dateformat:JSON_FORMAT_DATETIME},"icmp_status",{type:"float",name:"icmp_rtt"},{type:"int",name:"icmp_missed"},{name:"icmp_since",type:"date",dateformat:JSON_FORMAT_DATETIME},{type:"int",name:"incoming"},{type:"int",name:"outgoing"}],viewConfig:{forceFit:false},buildColumns:function(){this.columns=[{dataIndex:"device"},{dataIndex:"obp_status",width:150,renderer:this.obpStatusRenderer},{dataIndex:"passive_status",width:150,renderer:this.statusPassiveRenderer},{dataIndex:"passive_since",hidden:true,renderer:datetimeRenderer},{dataIndex:"options_status",width:150,renderer:this.statusRenderer.createDelegate(this,["options"],1)},{dataIndex:"options_since",hidden:true,renderer:datetimeRenderer},{dataIndex:"icmp_status",width:150,renderer:this.statusRenderer.createDelegate(this,["icmp"],1)},{dataIndex:"icmp_since",hidden:true,renderer:datetimeRenderer},{dataIndex:"incoming",align:"right"},{dataIndex:"outgoing",align:"right"}]},obpStatusRenderer:function(e,d,a){var b="";if(e=="OBP"){return'<span class="iptego-generic-red">CleanBye in progress</span>'}else{if(e==0){return"Disabled"}else{if(e==1||e==2){if(e==1){b='<span class="iptego-generic-orange">Logging</span>'}else{b='<span class="iptego-generic-green">Enabled</span>'}var c=a.get("obp_events");if(!Ext.isEmpty(c)){b+=" for "+c}}else{b=e}}}return b},statusRenderer:function(g,e,d,b){if(g=="OK"){var c='<span class="iptego-generic-green">OK</span>';var f=b.get(e+"_missed");if(typeof(f)=="number"&&f>0){c+=' <span class="iptego-generic-red">(Last ';if(f==1){c+="ping lost)</span>"}else{c+=f+" pings lost)</span>"}}else{var a=b.get(e+"_rtt");if(typeof(a)=="number"){c+=" (last RTT "+a+" ms)"}}return c}else{if(g=="Down"){return'<span class="iptego-generic-red">Down</span>'}else{return g}}},statusPassiveRenderer:function(e,b,c){if(e!="OK"&&e!="Down"){return e}var a;if(e=="OK"){a='<span class="iptego-generic-green">OK</span>'}else{if(e=="Down"){a='<span class="iptego-generic-red">Down</span>'}else{return e}}if(c.get("passive_timer_started")==1){a+='<span class="iptego-generic-red"> (Timer started)</span>'}var d=c.get("passive_pending")||0;a+=" ("+d+" pending)";return a},buildStore:function(){this.store=new Ext.data.JsonStore({idProperty:"device_id",url:"getDevicesOverview",root:"data",fields:this.fields})},buildRefresher:function(){this.refresher=new Ext.iptego.AutoRefresher({defaultInterval:2,handlers:[function(){this.store.reload()}.createDelegate(this)]})},initComponent:function(){this.buildColumns();this.buildStore();this.buildRefresher();this.topToolbar=["->",this.refresher];Pld.ServersPanel.superclass.initComponent.call(this)}});Pld.ObpHistPanel=Ext.extend(Ext.iptego.Grid,{id:"obphist.grid",height:400,title:"Availability and CleanBye History",fields:["id","device_id","device",{type:"date",name:"ts",dateformat:JSON_FORMAT_DATETIME},"event_type","reported_by","obp_active","details"],buildColumns:function(){var b=genericColorRenderer.createDelegate(this,[{Up:"iptego-generic-green",Down:"iptego-generic-red"}],1);var a=genericColorRenderer.createDelegate(this,[{Enabled:"iptego-generic-green"}],1);this.columns=[{dataIndex:"device"},{dataIndex:"ts",width:110,renderer:datetimeRenderer},{dataIndex:"event_type",renderer:b},{dataIndex:"reported_by"},{dataIndex:"obp_active",renderer:a},{id:"details",width:270,dataIndex:"details"}]},buildStore:function(){this.store=new Ext.data.JsonStore({idProperty:"id",url:"getObpHistory",root:"data",totalProperty:"totalCount",fields:this.fields})},buildRefresher:function(){this.refresher=new Ext.iptego.AutoRefresher({handlers:[function(){this.store.reload()}.createDelegate(this)]})},onCsvExport:function(){Ext.iptego.requestFile({url:"getObpHistoryCSV"})},initComponent:function(){this.buildColumns();this.buildStore();this.buildRefresher();this.topToolbar=["->",{tame:"CSV",iconCls:"icon_csv",tooltip:"Export as CSV file.",callback:this.onCsvExport.createDelegate(this)},this.refresher];Pld.ObpHistPanel.superclass.initComponent.call(this)}});Pld.ObpLogsPanel=Ext.extend(Ext.iptego.Grid,{id:"obplogs.grid",height:400,title:"BYE Sending Logs",selectionType:"checkbox",selectionMode:"multiple",fields:["file",{name:"size",type:"int"},{type:"date",name:"date",dateformat:JSON_FORMAT_DATETIME}],viewConfig:{forceFit:true},autoExpandColumn:"file",buildColumns:function(){this.columns=[{id:"file",width:250,dataIndex:"file"},{width:60,dataIndex:"size",align:"right",renderer:bytesRenderer},{width:150,dataIndex:"date",renderer:datetimeRenderer}]},buildStore:function(){this.store=new Ext.data.JsonStore({idProperty:"file",url:"getObpLogFiles",root:"data",totalProperty:"totalCount",fields:this.fields})},initComponent:function(){this.buildColumns();this.buildStore();this.topToolbar=[{name:"download",selectionRequired:true,callback:this.onDownload.createDelegate(this)},{name:"delete",selectionRequired:true,confirmation:true,callback:this.onDelete.createDelegate(this)},{name:"delete_all",confirmation:true,callback:this.onDeleteAll.createDelegate(this)}];Pld.ObpLogsPanel.superclass.initComponent.call(this)},onDownload:function(){var a=this.getSelection();if(a.length>0&&!Ext.isEmpty(a[0])){location.href="files/"+a[0].file+"?type="+OBP_COMP+"&file="+a[0].file}},onDelete:function(){var a=this.getSelection();var b=[];for(var d=0;d<a.length;d++){b.push(a[d].file)}Ext.iptego.request({url:"deleteObpFiles",params:{files:Ext.encode(b)},successHandler:function(){this.store.reload()}.createDelegate(this),waitMsg:"Deleting selected log files"})},onDeleteAll:function(){Ext.iptego.request({url:"deleteObpFiles",params:{all:"true"},successHandler:function(){this.store.reload()}.createDelegate(this),waitMsg:"Deleting all log files"})}});
Pld.INTERVAL_RADIO_CFG={xtype:"radiogroup",columns:1,fieldLabel:"Expire interval",items:[{boxLabel:"6 hours",name:"interval",inputValue:"6"},{boxLabel:"2 days",name:"interval",inputValue:"48",checked:true},{boxLabel:"1 week",name:"interval",inputValue:"168"},{boxLabel:"2 weeks",name:"interval",inputValue:"336"},{boxLabel:"1 month",name:"interval",inputValue:"720"}]};Pld.PingMonitorChartWindow=Ext.extend(Ext.Window,{width:600,ip:null,user:null,initComponent:function(){this.chartId=Ext.id();this.title="Ping Monitoring Chart for "+this.ip;this.items={id:this.chartId,xtype:"chart",updateInterval:10,timeSliderMin:2,timeSliderMax:8,height:350,timeSlider:4,baseParams:{ip:this.ip},url:"pingMonitoringChart",goToNow:true,plugins:[new Ext.iptego.HorizontalDrag()],bbar:[{xtype:"button",text:"Extend expire interval",handler:this.onExtend.createDelegate(this)}]};Pld.PingMonitorChartWindow.superclass.initComponent.apply(this,arguments)},listeners:{close:function(){Ext.each(this.findByType("chart"),function(a){a.onHide()})},resize:function(){var a=Ext.getCmp(this.chartId);a.onResize()},show:function(){Ext.each(this.findByType("chart"),function(a){a.load()})}},onExtend:function(){Pld.extendPingMonitoring({params:{addr:this.ip,user:this.user},handler:function(){var a=Ext.getCmp(this.chartId);a.onResize()}.createDelegate(this)})}});Pld.startPingMonitoring=function(b,a){Ext.iptego.request({url:"startPingMonitoring",params:{ip:b,user:a},successHandler:function(){new Pld.PingMonitorChartWindow({ip:b,user:a}).show()}})};Pld.extendPingMonitoring=function(a){var b=Ext.WindowMgr.get("wnd-extend-pinging-time");if(!b){b=new Ext.Window({id:"wnd-extend-pinging-time",title:"Extend the pinging time for the selected addresses with:",width:350,height:250,bodyStyle:"padding: 10px;background-color: white",items:{xtype:"form",border:false,labelWidth:120,items:Pld.INTERVAL_RADIO_CFG},buttons:[{text:"OK",scope:this,handler:function(){var c=b.findByType("form")[0];var d=c.getForm().getValues();Ext.apply(d,a.params);Ext.iptego.request({url:"extendPingMonitoring",params:d,successHandler:function(){b.destroy();a.handler()}.createDelegate(this)})}},{text:"Cancel",scope:this,handler:function(){b.destroy()}}]})}b.show()};Pld.PingMonitoringPage=Ext.extend(Ext.iptego.Page,{id:PING_MONITORING,initComponent:function(){this.items=new Ext.iptego.StatefulPanel({title:"Link Quality",info:"List of users who are being monitored for link quality.",topic:"64ui-linkq.html",collapsible:false,items:new Pld.PingMonitoring({stateId:"pingmonitoring.grid"})});Pld.PingMonitoringPage.superclass.initComponent.apply(this,arguments)}});Pld.regPage(Pld.PingMonitoringPage);Pld.PingMonitoring=Ext.extend(Ext.iptego.Grid,{id:PING_MONITORING+"_grid",selectionType:"checkbox",selectionMode:"multiple",frame:false,height:580,pageing:false,expiredRenderer:function(a){return a>0?a:"Expired"},initComponent:function(){this.store=new Ext.data.GroupingStore({url:"getPingedUsers",sortInfo:{field:"username",direction:"ASC"},groupField:"username",reader:new Ext.data.JsonReader({root:"users"},Ext.data.Record.create(["id","username","addr","is_static",{name:"avg",type:"float"},{name:"lost_rate",type:"int"},{name:"expires",type:"date",dateformat:JSON_FORMAT_DATETIME},{name:"ts",type:"date",dateformat:JSON_FORMAT_DATETIME},"expires_sec"]))});this.columns=[{width:100,dataIndex:"addr",sortable:true},{width:150,dataIndex:"username",sortable:true},{width:100,dataIndex:"expires_sec",renderer:this.expiredRenderer,align:"right"},{width:110,dataIndex:"expires",renderer:datetimeRenderer,sortable:true},{width:80,dataIndex:"avg",align:"right",sortable:true},{width:80,dataIndex:"lost_rate",align:"right",sortable:true},{width:110,dataIndex:"ts",renderer:datetimeRenderer,sortable:true}];this.refresher=new Ext.iptego.AutoRefresher({handlers:[function(){this.store.reload()}.createDelegate(this)]});this.topToolbar=[{name:"add",tooltip:"Start pinging another IP address.",callback:this.onAdd.createDelegate(this)},{name:"delete",tooltip:"Stop pinging the selected IP address.",selectionRequired:true,confirmation:true,callback:this.onDelete.createDelegate(this)},{name:"extend",tooltip:"Extend the pinging period",selectionRequired:true,callback:this.onExtend.createDelegate(this)},"->",this.refresher];this.on("rowdblclick",function(a,d,b){var c=a.getSelection();new Pld.PingMonitorChartWindow({ip:c[0].addr,user:c[0].username}).show()});Pld.PingMonitoring.superclass.initComponent.call(this)},onAdd:function(){var a=Ext.WindowMgr.get("wnd-add-pinged-address");if(!a){a=new Ext.Window({id:"wnd-add-pinged-address",title:"Add new pinged address",width:350,height:250,bodyStyle:"padding: 10px;background-color: white",items:{xtype:"form",border:false,labelWidth:120,items:[{xtype:"textfield",name:"ip",fieldLabel:"IP address to ping",vtype:"ip"},Pld.INTERVAL_RADIO_CFG]},buttons:[{text:"OK",scope:this,handler:function(){var b=a.findByType("form")[0];Ext.iptego.request({url:"startPingMonitoring",params:b.getForm().getValues(),successHandler:function(){this.store.reload()}.createDelegate(this)});a.destroy()}},{text:"Cancel",scope:this,handler:function(){this.store.reload();a.destroy()}}]})}a.show()},onDelete:function(a){var b=Ext.pluck(a,"id");Ext.iptego.request({url:"deletePingedUsers",params:{ids:Ext.encode(b)},successHandler:function(c){this.store.reload()}.createDelegate(this)})},onExtend:function(a){var b=Ext.pluck(a,"id");Pld.extendPingMonitoring({params:{ids:b},handler:function(){this.store.reload()}.createDelegate(this)})}});
Pld.VoiceQualityPage=Ext.extend(Ext.iptego.Page,{id:VOICE_QUALITY,initComponent:function(){var a=[];a.push({xtype:"spanel",collapsible:true,title:"Voice Quality: Distribution",info:"View voice quality statistics as reported by some SIP user devices. The statistics are based on the X-RTP-Stats SIP header that were captured in the last 3 days.",topic:"53ui-voiceq.html#distribution",items:new Pld.VoiceQualityChart({id:"voiceqchart"}),stateId:"voiceQualityChart"});a.push({xtype:"spanel",info:"Get an overview of several voice quality measures for each call. <b>Selecting a measure</b> from the box applies colors to calls according to the thresholds specified for the chart above.",topic:"53ui-voiceq.html#call-details",title:"Voice Quality: Call Details",items:new Pld.RTPStatsCallsPanel({stateId:"rtpstatscalls.grid"}),stateId:"rtpstatscallspanel"});this.items=a;Pld.VoiceQualityPage.superclass.initComponent.apply(this,arguments)}});Pld.regPage(Pld.VoiceQualityPage);SEVERITY_COLORS=[["green","Highest"],["moss","Higher"],["asparagus","High"],["orange","Medium"],["red","Low"],["maroon","Lower"],["plum","Lowest"]];Pld.RTPStatsCallsPanel=Ext.extend(Ext.iptego.Grid,{id:"rtpstats",height:500,isForDevice:false,fields:[{name:"ts",type:"date",dateformat:JSON_FORMAT_DATETIME},"pid","cid","lid","dir",{name:"first_ts",type:"date",dateformat:JSON_FORMAT_DATETIME},"last_ts","received","expected","pl_rate","max_burst","burst_cnt","total_jitter","max_jitter","latency","Ieeff","R","MOS","decoder","source","id","realms","nlegs","state_msg","state_details","setup_time","call_time","code","src_user","dst_user","rowid","groupid"],columns:[{id:"groupid",width:20,sortable:true,dataIndex:"groupid",hidden:true,header:"ID"},{width:120,sortable:true,dataIndex:"src_user",header:"Caller",hidden:true},{width:120,sortable:true,dataIndex:"dst_user",header:"Callee",hidden:true},{width:120,dataIndex:"first_ts",renderer:datetimeRenderer,header:"Start Time"},{width:100,sortable:true,dataIndex:"pl_rate",header:"Packet Loss Rate",tooltip:Resources.get("rtpstats.tooltip.pl_rate")},{width:100,sortable:true,dataIndex:"max_burst",header:"Burst Packet Loss",tooltip:Resources.get("rtpstats.tooltip.burst_loss")},{width:50,sortable:true,dataIndex:"max_jitter",renderer:floatRenderer,header:"Jitter",tooltip:Resources.get("rtpstats.tooltip.jitter")},{width:50,sortable:true,dataIndex:"latency",header:"Latency",tooltip:Resources.get("rtpstats.tooltip.latency")},{width:50,sortable:true,dataIndex:"Ieeff",renderer:floatRenderer,header:"Ie-eff",tooltip:Resources.get("rtpstats.tooltip.ieeff")},{width:50,sortable:true,dataIndex:"R",renderer:floatRenderer,header:"R",tooltip:Resources.get("rtpstats.tooltip.R")},{width:50,sortable:true,dataIndex:"MOS",renderer:floatRenderer,header:"MOScqe",tooltip:Resources.get("rtpstats.tooltip.MOScqe")},{width:100,sortable:true,dataIndex:"decoder",header:"Decoder",tooltip:Resources.get("rtpstats.tooltip.decoder")},{width:100,sortable:true,dataIndex:"source",header:"Source",id:"source",tooltip:Resources.get("rtpstats.tooltip.source")}],autoExpandColumn:"source",setUser:function(b){this.user=b;var a=this.getStore();a.baseParams.user=b;a.reload()},setDevice:function(b){this.device=b;var a=this.getStore();a.baseParams.device=b;a.reload()},onQuality:function(a,c,b){this.store.baseParams.quality=b;this.store.reload()},onMeasure:function(f,a,c){var e=f.getValue();var b=Pld.VOICEQ_MEASURES_CONFIG[e];var d=Pld.getVoiceMeasureSettings(e);this.thresholds=d.thresholds;this.reverseColoring=b[2];this.measure=e;this.store.baseParams.measure=e;this.store.baseParams.highlight=true;this.store.reload()},onUnMeasure:function(){this.thresholds=null;this.measure=null;Ext.getCmp("rtp.calls.measure").setValue("");Ext.getCmp("rtp.calls.quality").setValue("");var a=this.getStore();a.baseParams.highlight=false;delete a.baseParams.measure;delete a.baseParams.quality;a.reload()},onVoiceQualityDiagram:function(){var a=new Ext.Window({title:"Voice Quality Diagram",collapsible:true,width:600,items:new Pld.VoiceQualityChart({reduced:true,device:this.device})});a.show()},onCSVExport:function(){var a=this.getStore();var c={};Ext.applyIf(c,a.baseParams);if(this.filters){var b=this.filters.buildQuery(this.filters.getFilterData());if(b){Ext.apply(c,b)}}Ext.iptego.requestFile({url:"getVoiceqCallsCsv",params:c})},initComponent:function(){var b=Ext.data.Record.create(this.fields);var a=new Ext.data.JsonReader({root:"data",id:"rowid",totalProperty:"totalCount"},b);this.store=new Ext.data.GroupingStore({url:"getVoiceqCalls",groupField:"groupid",sortInfo:{field:"dst_user",direction:"DESC"},reader:a});this.store.on("beforeload",function(c,d){if(this.isForDevice&&Ext.isEmpty(this.device)){return false}return true},this);this.refresher=new Ext.iptego.AutoRefresher({handlers:[function(){this.getStore().reload()}.createDelegate(this)]});this.view=new Ext.grid.GroupingView({groupTextTpl:'{[values.rs[0].data.src_user + " - " + values.rs[0].data.dst_user]}',getRowClass:function(c,e,f,d){if(this.thresholds){var g=c.get(this.measure);if(g==null){return""}if(this.reverseColoring){for(i=0;i<this.thresholds.length;i++){if(g<this.thresholds[i]){return"row_"+SEVERITY_COLORS[this.thresholds.length-i][0]}}return"row_"+SEVERITY_COLORS[0][0]}else{for(i=0;i<this.thresholds.length;i++){if(g<this.thresholds[i]){return"row_"+SEVERITY_COLORS[i][0]}}return"row_"+SEVERITY_COLORS[this.thresholds.length][0]}}}.createDelegate(this)});this.topToolbar=[{xtype:"combo",store:Pld.VOICEQ_MEASURES,forceSelection:true,triggerAction:"all",editable:false,mode:"local",width:180,id:"rtp.calls.measure",emptyText:"Highlight by measure",listeners:{select:this.onMeasure.createDelegate(this)}},{xtype:"combo",store:SEVERITY_COLORS,forceSelection:true,triggerAction:"all",editable:false,mode:"local",width:120,id:"rtp.calls.quality",emptyText:"Filter by quality",listeners:{select:this.onQuality.createDelegate(this)}},{text:"Remove highlighting",handler:this.onUnMeasure.createDelegate(this)},"->"];if(this.isForDevice){this.topToolbar.push({text:"Voice Quality Diagram",handler:this.onVoiceQualityDiagram.createDelegate(this)})}this.topToolbar.push({tooltip:"CSV export",iconCls:"icon_csv",handler:this.onCSVExport.createDelegate(this)});this.filters=new Ext.iptego.GridFilters({filters:[{type:"string",dataIndex:"src_user"},{type:"string",dataIndex:"dst_user"},{type:"datetime",dataIndex:"first_ts"},{type:"numeric",dataIndex:"max_jitter"},{type:"numeric",dataIndex:"pl_rate"},{type:"numeric",dataIndex:"max_burst"},{type:"numeric",dataIndex:"latency"},{type:"numeric",dataIndex:"Ieeff"},{type:"numeric",dataIndex:"R"},{type:"numeric",dataIndex:"MOS"},{type:"string",dataIndex:"decoder"},{type:"list",dataIndex:"source",options:["PALLADION","P-RTP-STAT","RTP-RXSTAT","X-RTP-STAT","RTCPXR"]}]});Pld.RTPStatsCallsPanel.superclass.initComponent.call(this)},onRender:function(b,a){Pld.RTPStatsCallsPanel.superclass.onRender.call(this,b,a);this.on("rowdblclick",function(c,g,d){var f=this.getSelection(true);if(f){Pld.showCallDetailsWin(f.get("pid"),f.get("cid"),null)}},this)}});
Pld.RtpRecordingPage=Ext.extend(Ext.iptego.Page,{id:RTP_RECORDING,initComponent:function(){this.items=[{xtype:"spanel",info:"From this page you can track a set of subscribers/phone numbers for which PALLADION will store full RTP trace. You can then download the RTP streams for further analisys.",title:"RTP recording",items:new Pld.RtpRecordedUsersPanel({stateId:"rtp_recording.users_grid"})}];Pld.RtpRecordingPage.superclass.initComponent.apply(this,arguments)}});Pld.regPage(Pld.RtpRecordingPage);Pld.RtpRecordedUsersPanel=Ext.extend(Ext.iptego.Grid,{id:"rtp_recording_grid",height:500,selectionType:"checkbox",selectionMode:"multiple",fields:["user","start_ts"],columns:[{width:250,dataIndex:"user",header:"User"},{width:200,dataIndex:"start_ts",renderer:datetimeRenderer,header:"Tracked since"}],onAdd:function(){win=new Ext.Window({title:"Record RTP for a new user",width:350,height:200,bodyStyle:"padding: 10px;background-color: white",items:[{xtype:"panel",border:false,bodyStyle:"padding-bottom: 25px",html:"Please enter the username/phone number of the user to track. The matching is done from the end, and initial prefixes are ignored. Example: if you enter <i>123456</i>, then both <i>+49123456</i> and <i>0123456</i> will be matched."},{xtype:"form",border:false,labelWidth:120,items:[{xtype:"textfield",name:"user",fieldLabel:"User"}]}],buttons:[{text:"OK",scope:this,handler:function(){var a=win.findByType("form")[0];Ext.iptego.request({url:"rtp_recording_users_add",params:a.getForm().getValues(),successHandler:function(){this.store.reload()}.createDelegate(this)});win.destroy()}},{text:"Cancel",scope:this,handler:function(){this.store.reload();win.destroy()}}]});win.show()},onDelete:function(a){var b=Ext.pluck(a,"user");Ext.iptego.request({url:"rtp_recording_users_del",params:{users:Ext.encode(b)},successHandler:function(c){this.store.reload()}.createDelegate(this)})},initComponent:function(){this.store=new Ext.data.JsonStore({storeId:"user_ip_store",url:"rtp_recording_users",root:"users",totalProperty:"totalCount",idProperty:"user",fields:["user","start_ts"]});this.topToolbar=[{name:"add",tooltip:"Start tracking user",callback:this.onAdd.createDelegate(this)},{name:"delete",tooltip:"Stop tracking user",confirmation:true,selectionRequired:true,callback:this.onDelete.createDelegate(this)}];Pld.RtpRecordedUsersPanel.superclass.initComponent.call(this)}});
Pld.SpitPage=Ext.extend(Ext.iptego.Page,{id:SPIT,initComponent:function(){var a=[];a.push(new Pld.SpitIncidents({stateId:"spit.grid",tabTip:"View which users or IP addresses had a behaviour which might indicate platform abuse for fraud or for sending SPIT (SPAM over Internet Telephony). <b>Click on the status</b> to quickly mark an incident as read.",topic:"67ui-spit.html#ba-incidents-table"}));if(Pld.hasPermission("set_spit_config")){a.push(new Pld.SpitDefinitions({tabTip:"Configure the behavioral analysis.",topic:"67ui-spit.html#ba-definitions-panel"}))}this.items=new Ext.iptego.TabPanel({height:Math.min(Pld.getViewportDimensions(true).height,690),items:a});Pld.SpitPage.superclass.initComponent.apply(this,arguments)}});Pld.regPage(Pld.SpitPage);Pld.SpitDefinitions=Ext.extend(Ext.form.FormPanel,{title:"BA Configuration",border:false,width:700,bodyStyle:"background-color:transparent",cls:"transparentStyle",ctCls:"transparentContainer",build_fieldsets:function(){var c=[];var b=0;for(var a in SPIT_CASES){c[b++]=new Ext.form.FieldSet({title:SPIT_CASES[a].title,autoHeight:true,layout:"auto",defaults:{cls:"float-panel",xtype:"displayfield"},items:SPIT_CASES[a].cfgItems})}return c},reload_cfg:function(){this.load({url:"getSpitCfg",params:{dummy:"I am needed to workaround the missing Content-Length bug from Ext."},failure:formFailure})},onConfigureAlerts:function(){var b="Configure Alerts based on Behavioral Analysis";var a="Do you want PALLADION to create/update alert definitions based on this Behavioral Analysis configuration?";Ext.Msg.confirm(b,a,function(c){if(c=="yes"){Ext.iptego.request({url:"createSpitAlertDefinitions"})}})},onEditIgnored:function(){var a=new Pld.SpitIgnoredIpsEditor();a.show()},initComponent:function(){this.items=this.build_fieldsets();this.buttons=[{text:"Save",handler:function(){this.getForm().submit({url:"saveSpitCfg",success:function(){info("Behavioral Analysis configuration saved successfully.");this.reload_cfg()}.createDelegate(this),failure:formFailure})}.createDelegate(this),waitMsg:"Saving the configuration"},{text:"Reset/Reload",handler:this.reload_cfg.createDelegate(this)},{text:"Reset to defaults",handler:function(){this.getForm().reset()}.createDelegate(this)},{text:"Configure Alerts based on Behavioral Analysis",handler:this.onConfigureAlerts},{text:"Edit ignored IP addresses",handler:this.onEditIgnored}];Pld.SpitDefinitions.superclass.initComponent.call(this)},onRender:function(b,a){Pld.SpitDefinitions.superclass.onRender.call(this,b,a);this.reload_cfg()}});Pld.SpitIgnoredIpsEditor=Ext.extend(Ext.Window,{title:"Edit IPs ignored by BA",width:600,initComponent:function(){this.IgnoredIpRecord=Ext.data.Record.create([{name:"id",type:"int"},{name:"ip",type:"string"}]);this.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({api:{read:"getSpitIgnoredIps",create:"createSpitIgnoredIps",update:"updateSpitIgnoredIps",destroy:"deleteSpitIgnoredIps"},listeners:{exception:function(f,g,h,e,d,c){console.log(f,g,h,e,d,c);if(d.success===false&&!Ext.isEmpty(d.errorMsg)){Pld.SlideInMessage.msg("Warning",d.errorMsg,"red")}}}}),reader:new Ext.data.JsonReader({root:"data",idProperty:"id",totalProperty:"totalCount"},this.IgnoredIpRecord),writer:new Ext.data.JsonWriter({encode:true,writeAllFields:false}),autoSave:false});var b=new Ext.grid.CheckboxSelectionModel();var a=new Ext.grid.ColumnModel([b,{id:"ip",width:150,sortable:true,dataIndex:"ip",header:"IP Address",editor:new Ext.form.TextField({allowBlank:false})}]);this.grid=new Ext.grid.EditorGridPanel({height:500,store:this.store,sm:b,cm:a,tbar:[{text:"Add IP",handler:this.onAddIp.createDelegate(this)},{text:"Delete IPs",handler:this.onDeleteIps.createDelegate(this)},{text:"Save",handler:this.onSave.createDelegate(this)},{text:"Reset",handler:this.onReset.createDelegate(this)}],bbar:new Ext.PagingToolbar({pageSize:25,store:this.store,displayInfo:true,displayMsg:""})});this.items=this.grid;Pld.SpitIgnoredIpsEditor.superclass.initComponent.call(this);this.on("show",function(c){c.store.reload()})},onAddIp:function(){this.grid.stopEditing();this.store.insert(0,new this.IgnoredIpRecord({ip:""}));this.grid.startEditing(0,0)},onDeleteIps:function(){Ext.each(this.grid.getSelectionModel().getSelections(),function(a){this.store.remove(a)}.createDelegate(this))},onSave:function(){this.store.save()},onReset:function(){this.store.reload()}});Pld.SpitIncidents=Ext.extend(Ext.iptego.Grid,{title:"BA Incidents",id:"spit.grid",height:710,selectionType:"checkbox",selectionMode:"multiple",pageSize:25,autoExpandColumn:"details",initComponent:function(){this.spitCaseTitles={};this.spitCaseTitlesWithIds=[];for(var a in SPIT_CASES){var b=SPIT_CASES[a];this.spitCaseTitles["id"+b.id]=b.title;this.spitCaseTitlesWithIds.push([""+b.id,b.title])}this.store=new Ext.data.JsonStore({url:"getSpitIncidents",root:"incidents",totalProperty:"totalCount",fields:["spit_case","is_ip","isnew","name","user",{name:"ts",type:"date",dateformat:JSON_FORMAT_DATETIME},"description","value","details",{name:"raw_value",type:"int"},{name:"raw_total",type:"int"},{name:"id"}]});this.filters=new Ext.iptego.GridFilters({filters:[{type:"datetime",dataIndex:"ts"},{type:"string",dataIndex:"name"},{type:"string",dataIndex:"value"},{type:"list",dataIndex:"spit_case",options:this.spitCaseTitlesWithIds},{type:"list",dataIndex:"isnew",options:[["1","New"],["0","Read"]]}]});this.columns=[{width:40,dataIndex:"isnew",renderer:isNewRenderer,sortable:true},{width:120,dataIndex:"ts",renderer:datetimeRenderer,sortable:true},{id:"name",width:250,dataIndex:"name",sortable:true},{width:200,dataIndex:"spit_case",sortable:true,renderer:this.spitCaseRenderer.createDelegate(this)},{width:200,dataIndex:"value",sortable:true},{id:"details",width:200,dataIndex:"details"}];this.refresher=new Ext.iptego.AutoRefresher({target:this.store});this.topToolbar=[{name:"mark_all_read",confirmation:true,tooltip:"Mark all incidents as read. (Filters may apply if set.)",callback:this.onAction.createDelegate(this,["mark_all_read"])},{name:"delete",tooltip:"Delete incidents. (Filters may apply if set.)",menu:[{text:"selected",selectionRequired:true,confirmation:true,handler:this.onAction.createDelegate(this,["delete_selected"])},{text:"read",confirmation:true,handler:this.onAction.createDelegate(this,["delete_read"])},{text:"all",confirmation:true,handler:this.onAction.createDelegate(this,["delete_all"])}]},{name:"track",selectionRequired:true,callback:this.onUsertrack.createDelegate(this)},"->",{name:"csv",iconCls:"icon_csv",tooltip:"CSV export of incidents, filters apply if set",callback:this.onCsvExport.createDelegate(this)},"-",this.refresher];Pld.SpitIncidents.superclass.initComponent.call(this)},onUsertrack:function(a){if(!Ext.isEmpty(a[0]["user"])){Pld.trackUser(a[0]["user"])}},spitCaseRenderer:function(a){return this.spitCaseTitles["id"+a]},listeners:{cellclick:function(b,g,c){var f=b.getColumnModel().getDataIndex(c);if(f=="isnew"){var a=b.getStore().getAt(g);var e=a.get(f);var d=parseInt(e)?"mark_read":"mark_new";b.onAction(d)}}}});
Pld.AlertsPage=Ext.extend(Ext.iptego.Page,{id:ALERTS,initComponent:function(){var a=[];a.push(new Pld.Alerts({id:"alerts.grid",stateId:"alerts.grid",tabTip:"View alerts that are raised by the system. <b>Click on the status</b> to quickly mark an alert as read.",topic:"44ui-alerts.html#alerts-table",title:"Alerts"}));if(Pld.hasPermission("nav_spit","nav_monitor","nav_uastats")){a.push(new Pld.AlertDefinitions({stateId:"alert_defs.grid",tabTip:"Alerts are raised according to their definition. <b>Add/Edit</b> a definition to configure thresholds, priority, etc.",topic:"44ui-alerts.html#alert-definitions-tab"}))}this.items=new Ext.iptego.TabPanel({height:600,plain:true,shadow:true,layoutOnTabChange:true,items:a});Pld.AlertsPage.superclass.initComponent.apply(this,arguments)}});Pld.regPage(Pld.AlertsPage);
Pld.PhysicalPortNames=new Ext.data.JsonStore({url:"getPhysicalPortNames",root:"data",fields:["name"]});Pld.NetworkSettingsWizardItems=[{cardTitle:"Physical device selection",items:[{xtype:"wizq",html:"Select the physical port you want to configure."},{labelWidth:250,items:{xtype:"combo",width:100,name:"port",fieldLabel:"Physical Port",editable:false,mode:"remote",allowBlank:false,triggerAction:"all",forceSelection:"true",displayField:"name",valueField:"name",store:Pld.PhysicalPortNames}}],listeners:{beforeshow:function(){Pld.PhysicalPortNames.load()}}},{cardTitle:"VLAN specific options",items:[{xtype:"wizq",html:"If the new interface should be part of a VLAN, enter it's ID below. Let blank otherwise."},{items:{xtype:"textfield",vtype:"int",name:"vlanid",allowBlank:true,fieldLabel:"VLAN ID"}}],listeners:{beforeshow:function(){}}},{cardTitle:"Configuration method",items:[{xtype:"wizq",html:"Choose the IP configuration method for this interface:"},{defaults:{xtype:"radio",hideLabel:true,name:"method"},items:[{inputValue:"static",boxLabel:"Static"},{inputValue:"dhcp",boxLabel:"DHCP"},{inputValue:"noip",boxLabel:"No IP"}]}],sequenceControl:[{key:"method",values:{dhcp:5,noip:5}}]},{cardTitle:"Static configuration options",items:[{xtype:"wizq",html:"Enter the IP configuration for the interface:"},{defaults:{xtype:"textfield",vtype:"ip",allowBlank:false,invalidText:"Please enter the IP address in dotted notation. Example: 10.0.0.1"},items:[{xtype:"textarea",vtype:"iplist",allowBlank:false,name:"addresses",fieldLabel:"IP/Netmask addresses"},{name:"gateway",fieldLabel:"Default gateway",allowBlank:true}]}],listeners:{beforehide:function(a){var b=a.getWizardValue("addresses");if(b.indexOf("/")<0){warning("If no netmask prefix is given, 32 will be assumed, which might affect routing.")}}}},{cardTitle:"Static routes",items:[{xtype:"wizq",html:"Optionally, you can add static routes bound to the interface."},{layout:"column",defaults:{columnWidth:0.5,anchor:"95%",layout:"form",labelAlign:"top",bodyStyle:"padding:15px"},items:[{defaults:{xtype:"textfield",vtype:"ip",fieldLabel:"Target"},items:[{name:"target_0"},{name:"target_1"},{name:"target_2"},{name:"target_3"}]},{defaults:{xtype:"textfield",vtype:"ip",fieldLabel:"Gateway"},items:[{name:"gw_0"},{name:"gw_1"},{name:"gw_2"},{name:"gw_3"}]}]}]},{cardTitle:"Finish",xtype:"wizq",html:"Done. Press finish to commit changes."}];
Pld.VrrpWebPanel=Ext.extend(Ext.Panel,{border:false,buildForm:function(){this.form=new Ext.form.FormPanel({style:"padding-top: 30px",border:false,width:500,labelWidth:250,items:{xtype:"fieldset",id:"vrrp_conf_fieldset",border:true,title:"Configuration",height:180,defaults:{xtype:"textfield"},items:[{xtype:"displayfield",fieldLabel:"Current VRRP Status",name:"vrrp_status"},{fieldLabel:"Virtual IP address. If left blank, VRRP is disabled",name:"vrrp_vip",vtype:"ip"},{fieldLabel:"VRRP Id. Helps differentiate between multiple VRRP sessions",name:"vrrp_id"},{fieldLabel:"Peer IP address. If left blank, configuration replication is turned off",name:"peer",vtype:"ip"}]},buttons:[{text:"Save",handler:function(){this.form.getForm().submit({url:"setReplicationSettings",failure:formFailureMsg,waitMsg:"Applying changes",success:function(){this.reloadForm()},scope:this})}.createDelegate(this)},{text:"Reset/Refresh",handler:this.reloadForm.createDelegate(this)}],buttonAlign:"right"})},reloadForm:function(){this.form.load({url:"getReplicationSettings",params:{dummy:"dummy"}})},buildButtons:function(){this.actionsPanel=new Ext.form.FormPanel({style:"padding-top: 30px",border:false,width:500,items:{xtype:"fieldset",border:true,title:"Actions",height:130,defaults:{xtype:"button",minWidth:250,style:"padding: 5px; margin-left: 125px;",scope:this},items:[{text:"Yield master status",handler:this.onForceBecomeSlave},{text:"Replicate configuration to peer",handler:this.onReplicateTo},{text:"Test connection with peer",handler:this.onTestPeer}]}})},onForceBecomeSlave:function(){Ext.iptego.request({url:"forceBecomeSlave",params:{really:"yes"},confirmMsg:Resources.get("network_settings.vrrp.forceslave.confirmsg"),successHandler:function(){this.reloadForm()}},this)},onReplicateTo:function(){Ext.iptego.request({url:"replicateToPeer",params:{really:"yes"},confirmMsg:Resources.get("network_settings.vrrp.replicate_to.confirmsg"),waitMsg:"Exporting configuration",successHandler:function(){this.reloadForm()}},this)},onTestPeer:function(){Ext.iptego.request({url:"testPeerReachable",params:{really:"yes"},waitMsg:"Connecting to peer",successHandler:function(){info("Peer is reachable.")}},this)},initComponent:function(){this.buildForm();this.buildButtons();this.items=[this.form,this.actionsPanel];Pld.VrrpWebPanel.superclass.initComponent.call(this,arguments)},onRender:function(b,a){Pld.VrrpWebPanel.superclass.onRender.call(this,b,a);this.form.addClass("centered-panel");this.actionsPanel.addClass("centered-panel");this.reloadForm()}});Pld.VrrpIpipPanel=Ext.extend(Ext.Panel,{border:false,defaults:{style:"padding-top: 30px",bodyStyle:{"background-color":"#ffffff"},border:false,width:500},buildForm:function(){this.form=new Ext.form.FormPanel({style:"padding-top: 30px",border:false,width:500,labelWidth:250,items:{xtype:"fieldset",id:"vrrp_ipip_conf_fieldset",border:true,title:"Configuration",height:135,defaults:{xtype:"textfield"},items:[{xtype:"displayfield",fieldLabel:"Current VRRP Status",name:"vrrp_status"},{fieldLabel:"Virtual IP address. If left blank, VRRP is disabled",name:"vrrp_vip",vtype:"ip"},{fieldLabel:"VRRP Id. Helps differentiate between multiple VRRP sessions",name:"vrrp_id"}]},buttons:[{text:"Save",handler:function(){this.form.getForm().submit({url:"setReplicationSettingsIpip",failure:formFailureMsg,waitMsg:"Applying changes",success:function(){this.reloadForm()},scope:this})}.createDelegate(this)},{text:"Reset/Refresh",handler:this.reloadForm.createDelegate(this)}],buttonAlign:"right"})},reloadForm:function(){this.form.load({url:"getReplicationSettingsIpip",params:{dummy:"dummy"}})},buildButtons:function(){this.actionsPanel=new Ext.form.FormPanel({style:"padding-top: 30px",border:false,width:500,items:{xtype:"fieldset",border:true,title:"Actions",height:100,defaults:{xtype:"button",minWidth:250,style:"padding: 5px; margin-left: 125px;",scope:this},items:[{text:"Yield master status",handler:this.onForceBecomeSlave}]}})},onForceBecomeSlave:function(){Ext.iptego.request({url:"forceBecomeSlaveIpip",params:{really:"yes"},confirmMsg:Resources.get("network_settings.vrrp.forceslave.confirmsg"),successHandler:function(){this.reloadForm()}},this)},initComponent:function(){this.buildForm();this.buildButtons();this.items=[this.form,this.actionsPanel];Pld.VrrpIpipPanel.superclass.initComponent.call(this,arguments)},onRender:function(b,a){Pld.VrrpIpipPanel.superclass.onRender.call(this,b,a);this.form.addClass("centered-panel");this.actionsPanel.addClass("centered-panel");this.reloadForm()}});Pld.VRRP=Ext.extend(Ext.TabPanel,{deferredRender:false,activeItem:0,initComponent:function(){this.items=[{title:"WebServer",items:[new Pld.VrrpWebPanel()]},{title:"IPIP",items:[new Pld.VrrpIpipPanel()]}];Pld.VRRP.superclass.initComponent.call(this)}});Ext.reg("pld-network-vrrp-page",Pld.VRRP);
Pld.DNSSettings=Ext.extend(Ext.form.FormPanel,{style:"padding-top: 20px",bodyStyle:{"background-color":"#ffffff"},border:false,width:400,labelAlign:"top",method:"POST",cls:"centered-panel",loadDNSForm:function(){this.load({url:"getDNSConfig",params:{dummy:"dummy"},failure:formFailure})},initComponent:function(){this.items=[{xtype:"textarea",name:"search",fieldLabel:"Search domain(s)",width:400},{xtype:"textarea",name:"nameservers",fieldLabel:"Nameservers address(es)",vtype:"iplist",width:400},{xtype:"textarea",name:"options",inputType:"password",fieldLabel:"Resolver options(s)",width:400}];this.buttons=[{text:Resources.get("button.save"),handler:function(){this.getForm().submit({url:"setDNSConfig",waitMsg:Resources.get("messagebox.saving"),success:function(){info("Settings saved.")},failure:formFailure});this.loadDNSForm()}.createDelegate(this)},{text:Resources.get("button.reset"),handler:function(){this.getForm().findField("search").reset();this.getForm().findField("nameservers").reset();this.getForm().findField("options").reset()}.createDelegate(this)}];Pld.DNSSettings.superclass.initComponent.call(this,arguments)},onRender:function(b,a){Pld.DNSSettings.superclass.onRender.call(this,b,a);this.addClass("centered-panel");this.loadDNSForm();this.findParentByType("pld-network-dns-settings-page").on("activate",this.loadDNSForm,this)}});Ext.reg("pld-network-dns-settings",Pld.DNSSettings);Pld.DNSSettingsPage=Ext.extend(Ext.Panel,{initComponent:function(){this.items={xtype:"pld-network-dns-settings"};Pld.DNSSettingsPage.superclass.initComponent.call(this)}});Ext.reg("pld-network-dns-settings-page",Pld.DNSSettingsPage);Pld.DNSSettings=Ext.extend(Ext.form.FormPanel,{style:"padding-top: 20px",bodyStyle:{"background-color":"#ffffff"},border:false,width:400,labelAlign:"top",method:"POST",cls:"centered-panel",loadDNSForm:function(){this.load({url:"getDNSConfig",params:{dummy:"dummy"},failure:formFailure})},initComponent:function(){this.items=[{xtype:"textarea",name:"search",fieldLabel:"Search domain(s)",width:400},{xtype:"textarea",name:"nameservers",fieldLabel:"Nameservers address(es)",vtype:"iplist",width:400},{xtype:"textarea",name:"options",inputType:"password",fieldLabel:"Resolver options(s)",width:400}];this.buttons=[{text:Resources.get("button.save"),handler:function(){this.getForm().submit({url:"setDNSConfig",waitMsg:Resources.get("messagebox.saving"),success:function(){info("Settings saved.")},failure:formFailure});this.loadDNSForm()}.createDelegate(this)},{text:Resources.get("button.reset"),handler:function(){this.getForm().findField("search").reset();this.getForm().findField("nameservers").reset();this.getForm().findField("options").reset()}.createDelegate(this)}];Pld.DNSSettings.superclass.initComponent.call(this,arguments)},onRender:function(b,a){Pld.DNSSettings.superclass.onRender.call(this,b,a);this.addClass("centered-panel");this.loadDNSForm();this.findParentByType("pld-network-dns-settings-page").on("activate",this.loadDNSForm,this)}});Ext.reg("pld-network-dns-settings",Pld.DNSSettings);Pld.DNSSettingsPage=Ext.extend(Ext.Panel,{initComponent:function(){this.items={xtype:"pld-network-dns-settings"};Pld.DNSSettingsPage.superclass.initComponent.call(this)}});Ext.reg("pld-network-dns-settings-page",Pld.DNSSettingsPage);
Pld.LinkOperationModeWin=new Ext.extend(Ext.Window,{bodyStyle:{"background-color":"#ffffff"},layout:"fit",width:250,resizable:false,netdev:null,updatedFn:null,initComponent:function(){this.items=[{id:"network.ether_flows.panel",xtype:"panel",layout:"column",border:false,bodyStyle:{padding:"20px 0px 20px 10px"},defaults:{xtype:"panel",columnWidth:0.5,border:false},items:[{id:"network.ether_left.panel"},{id:"network.ether_right.panel"}]},{id:"network.ether_bottom.panel",xtype:"panel",border:false,bodyStyle:{padding:"20px 0px 10px 10px"}}];this.buttons=[{text:"Set",handler:function(){if(Ext.isEmpty(this.netdev)){this.close()}var a=[];Ext.select(".ether_link_mode_cls").each(function(b){if(Ext.getCmp(b.dom.id).getValue()){this.push(b.dom.id)}},a);Ext.iptego.request({url:"setLinkModes",params:{port:this.netdev,modes:Ext.encode(a)},successHandler:function(b){this.close();if(!Ext.isEmpty(this.updatedFn)){this.updatedFn.call()}}.createDelegate(this),failureHandler:function(){Ext.Msg.show({msg:"Failed to apply selected modes.",buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.Info})},waitMsg:"Applying link modes settings"})}.createDelegate(this)},{text:"Cancel",handler:function(){this.close()}.createDelegate(this)}];Ext.getCmp("network_link_modes_button").setDisabled(true);Pld.LinkOperationModeWin.superclass.initComponent.apply(this,arguments)},addLinkMode:function(d,b){if(Ext.isEmpty(d)){return}var e=null;var c=null;if(0<=(lowered=d.toLowerCase()).indexOf("half")){e=Ext.getCmp("network.ether_left.panel");c=false}else{if(0<=lowered.indexOf("full")){e=Ext.getCmp("network.ether_right.panel");c=false}else{e=Ext.getCmp("network.ether_bottom.panel");c=true}}if(Ext.isEmpty(e)){return}var a=new Ext.form.Checkbox({id:d,boxLabel:d,cls:"ether_link_mode_cls",checked:b});if(c){e.insert(0,a)}else{e.add(a)}},onDestroy:function(){Ext.getCmp("network_link_modes_button").setDisabled(false)},setPort:function(a){this.netdev=a;this.setTitle("Link operating modes for '"+a+"'")}});Pld.NetworkInterfaces=Ext.extend(Ext.iptego.Grid,{id:"network_settings.grid",resourceid:"network_settings.grid",selectionType:"rowclick",selectionMode:"single",frame:false,pageing:false,linksRefresher:null,linksRefreshing:false,initComponent:function(){this.store=new Ext.data.JsonStore({url:"getNetworkSettings",root:"data",fields:["port","vlanid","method","addresses","gateway","routes","monitored","link"]});this.columns=[{width:50,dataIndex:"port"},{width:50,dataIndex:"vlanid"},{width:50,dataIndex:"method"},{width:150,dataIndex:"addresses"},{width:100,dataIndex:"gateway"},{width:150,dataIndex:"routes"},{width:50,dataIndex:"monitored"},{width:70,dataIndex:"link",align:"center"}];this.topToolbar=[{name:"add",tooltip:"Create a new network configuration entry.",callback:this.onAdd.createDelegate(this)},{name:"edit",tooltip:"Change the selected network configuration.",selectionRequired:true,callback:this.onEdit.createDelegate(this)},{name:"delete",tooltip:"Remove the selected network configuration.",selectionRequired:true,confirmation:true,callback:this.onDelete.createDelegate(this)},"->",{name:"link",id:"network_link_modes_button",tooltip:"Allows setting the operation mode for the selected port",selectionRequired:true,callback:this.onLink.createDelegate(this)},{name:"monitored_toggle",tooltip:"Enables or disables PALLADION to sniff on selected port",selectionRequired:true,callback:this.onMonitoredToggle.createDelegate(this)}];this.linksRefresher=new Ext.iptego.AutoRefresher({handlers:[this.getLinksStates.createDelegate(this)],updateIntervals:[{name:Resources.get("interval.off"),value:0},{name:Resources.get("interval.0.5"),value:0.5},{name:Resources.get("interval.1"),value:1},{name:Resources.get("interval.2"),value:2},{name:Resources.get("interval.5"),value:5},{name:Resources.get("interval.10"),value:10}]});this.topToolbar.push(this.linksRefresher);this.on("rowdblclick",function(a,c,b){this.onEdit(this.getSelection(false))},this);Pld.NetworkInterfaces.superclass.initComponent.call(this)},getLinksStates:function(){if(this.linksRefreshing){return}else{this.linksRefreshing=true}Ext.iptego.request({url:"getLinkStates",successHandler:this.updateLinksState.createDelegate(this),failureHandler:function(){this.linksRefreshing=false}})},updateLinksState:function(b){if(b.states.length==this.store.getCount()){var a=0;Ext.each(b.states,function(c){matches=this.store.queryBy(function(d){if(d.get("port")!=this.port){return false}if(Ext.isEmpty(this.vlanid)!=Ext.isEmpty(d.get("vlanid"))){return false}if((!Ext.isEmpty(this.vlanid))&&(this.vlanid!=d.get("vlanid"))){return false}return true},c);if(matches.getCount()<=0){this.store.reload();return false}else{a+=matches.getCount();matches.each(function(f,d,e){if(f.get("link")!=c.state){f.set("link",c.state)}f.commit()},this)}},this);if(a!=this.store.getCount()){this.store.reload()}}else{this.store.reload()}this.linksRefreshing=false},submitWizard:function(b,a){Ext.iptego.request({url:"addOrModifyNetworkSettings",params:a,successHandler:function(c){this.store.reload();this.wizard.hide()}.createDelegate(this),connectErrHandler:function(){Ext.Msg.show({msg:"It appears that PALLADION's web interface is no longer accessible under the current URL. This is normal if you changed the IP address of its administrative network port. Please update the URL in your browser address bar or refresh the page.",buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.Info})},waitMsg:"Applying network configuration"})},getWizard:function(a,b){if(Ext.isEmpty(this.wizard)){this.wizard=new Ext.iptego.Wizard({cardItems:Pld.NetworkSettingsWizardItems,resetNextSlidesOnChange:false,listeners:{finished:this.submitWizard.createDelegate(this)}});if(!Ext.isEmpty(a)){this.wizard.setValues(a,false)}}else{if(!Ext.isEmpty(a)){this.wizard.setValues(a,true)}else{this.wizard.reset(true)}}if(!Ext.isEmpty(b)){this.wizard.setTitle(b)}return this.wizard},buildLinkForm:function(){},onAdd:function(){var a=this.getWizard({},"Add network configuration");a.setHiddenValues({action:"add"});a.show()},onEdit:function(){var b=this.getSelection(false);if(Ext.isEmpty(b)){return}if(!Ext.isEmpty(b.routes)){var c=b.routes.split(" ");for(i=0;i<c.length/3;i++){b["target_"+i.toString()]=c[3*i];b["gw_"+i.toString()]=c[3*i+2]}}var a=this.getWizard(b,"Edit "+b.port);a.setHiddenValues({action:"edit",old_port:b.port,old_vlanid:b.vlanid});a.show()},onDelete:function(){var a=this.getSelection(false);if(!Ext.isEmpty(a)){Ext.iptego.request({url:"deleteNetworkSettings",params:{port:a.port,vlanid:a.vlanid},successHandler:function(b){this.store.reload()}.createDelegate(this),waitMsg:"Deleting network configuration"})}},onLink:function(){var a=this.getSelection(false);if(Ext.isEmpty(a)){return}Ext.iptego.request({url:"getLinkModes",params:{port:a.port},waitMsg:"Loading link's operating modes",successHandler:function(c,b){var d=new Pld.LinkOperationModeWin();d.setPort(b);Ext.each(c.data,function(e){this.addLinkMode(e.mode,e.enabled)},d);d.updatedFn=function(){this.store.reload()}.createDelegate(this);d.show()}.createDelegate(this,[a.port],true)})},onMonitoredToggle:function(){var a=this.getSelection(false);if(Ext.isEmpty(a)){return}Ext.iptego.request({url:"monitoredToggle",params:{port:a.port,vlanid:a.vlanid},successHandler:function(b){this.store.reload()}.createDelegate(this),waitMsg:"Updating network configuration and sniffing component"})}});Ext.reg("pld-network-interfaces-page",Pld.NetworkInterfaces);Pld.SettingsDialog.registerSection("network-section","Network","72ui-network.html","panel",["set_appliance"]);Pld.SettingsDialog.registerPage("network-section","interfaces-settings","Interfaces","72ui-network.html","pld-network-interfaces-page");Pld.SettingsDialog.registerPage("network-section","vrrp-settings","VRRP","72ui-network.html#vrrp","pld-network-vrrp-page");Pld.SettingsDialog.registerPage("network-section","dns-settings","DNS","72ui-network.html","pld-network-dns-settings-page");
ipTag=function(c){var a=Ext.id();var b='<span id="'+a+'">'+c+"</span>";Ext.Ajax.request({url:"getIpTag",success:function(k){if(Ext.decode(k.responseText)["success"]&&Ext.decode(k.responseText)["data"]!=-1){try{var g=Ext.decode(k.responseText)["data"];var j=[];for(var d=0;d<g.length;d++){var f=g[d]["tag_id"];if(!d){Ext.get(f).update("")}j[d]=new Ext.Element(document.createElement("span"));if(!d){j[d].update('<span style="font-weight:inherit;font-style:inherit;text-decoration:none;color:black">'+String(c)+"</span> ("+g[d]["tag"]+")")}else{j[d].update(", ("+g[d]["tag"]+")")}Ext.get(f).appendChild(j[d]);var h={};h.color=g[d]["tag_color"];switch(g[d]["tag_style"]){case"bold":h["font-weight"]="bold";break;case"italic":h["font-style"]="italic";break;case"underline":h["text-decoration"]="underline";break;default:h="";break}j[d].setStyle(h)}}catch(j){}}},params:{ip:c,tagId:a}});return b};Pld.IpTagsPanel=function(a){Pld.IpTagsPanel.superclass.constructor.call(this,a)};addIpTag=function(a){var g=new Ext.form.TextField({allowBlank:false,name:"ipTags_ip",fieldLabel:"IP Address or Range"});var i=new Ext.form.TextField({allowBlank:false,name:"ipTags_tag",fieldLabel:"Tag"});var e=new Ext.form.Hidden({name:"ipTags_color",value:"#000000"});var b=new Ext.form.Hidden({name:"ipTags_style",value:"normal"});var c=new Ext.ColorPalette();var d=new Ext.form.Label({text:"Tag Preview",style:{color:"#000000","font-style":"normal"}});var l=new Ext.Button({text:"Set Color",menu:new Ext.menu.ColorMenu({listeners:{select:function(m,n){e.setValue("#"+n);d.getEl().setStyle({color:"#"+n})}}})});var h=new Ext.Button({text:"Set Style",menu:new Ext.menu.Menu({items:[new Ext.menu.Item({text:"Normal",handler:function(){b.setValue("normal");d.getEl().setStyle({"font-weight":"normal","font-style":"normal","text-decoration":"none"})}}),new Ext.menu.Item({text:"Bold",style:{"font-weight":"bold"},handler:function(){b.setValue("bold");d.getEl().setStyle({"font-weight":"bold","font-style":"normal","text-decoration":"none"})}}),new Ext.menu.Item({text:"Italic",style:{"font-style":"italic"},handler:function(){b.setValue("italic");d.getEl().setStyle({"font-weight":"normal","font-style":"italic","text-decoration":"none"})}}),new Ext.menu.Item({text:"Underline",style:{"text-decoration":"underline"},handler:function(){b.setValue("underline");d.getEl().setStyle({"font-weight":"normal","font-style":"normal","text-decoration":"underline"})}})]})});var k=new Ext.form.FieldSet({title:"Tag Style Options",autoHeight:true,items:{layout:"column",items:[{width:88,items:l},{width:88,items:h},{items:d}]}});var f=new Ext.form.FormPanel({url:"addIpTag",frame:true,monitorValid:true,labelAlign:"top",labelWidth:120,bodyStyle:{padding:"5px"},items:[{xtype:"fieldset",autoHeight:true,title:"New IP-Tag Definition",defaults:{width:280},items:[g,i,k,e,b]}],buttons:[{formBind:true,text:Resources.get("button.ok"),handler:function(){f.getForm().submit({success:function(m,n){var o="New IP-Tag definition added";info(o);j.hide();a.store.reload()},failure:function(m,n){var o="Connection error!";Ext.Msg.alert("Failure",o)}})}},{text:Resources.get("button.cancel"),handler:function(){j.hide()}}]});var j=new Ext.Window({title:"IP-Tag Management",width:350,autoHeight:true,items:[f]});j.show()};ipTagRenderer=function(a,b,c){style=c.data.tag_style;color=c.data.tag_color;switch(style){case"bold":tag_style="font-weight:bold;";break;case"italic":tag_style="font-style:italic;";break;case"underline":tag_style="text-decoration:underline;";break;default:tag_style="";break}tag_color="color:"+color+";";return'<span style="'+tag_color+tag_style+'">'+a+"</span>"};Pld.IpTagsPanel=Ext.extend(Ext.iptego.Grid,{id:"ip_tags_configs",resourceid:"ip_tags_configs",fields:["id","ip","tag","tag_color","tag_style"],columns:[{width:100,dataIndex:"id"},{width:200,dataIndex:"ip"},{width:350,dataIndex:"tag",renderer:ipTagRenderer}],pageing:false,autoHeight:true,selectionType:"rowclick",selectionMode:"single",initComponent:function(){this.store=new Ext.data.JsonStore({url:"getIpTags",idProperty:"id",root:"data",fields:this.fields});this.topToolbar=[{name:"add",callback:function(){addIpTag(this)}},{name:"delete",confirmation:false,selectionRequired:true,callback:function(a){this.erase(a)}.createDelegate(this)}];Pld.IpTagsPanel.superclass.initComponent.call(this)},erase:function(a){Ext.Ajax.request({url:"deleteIpTag",params:{id:a.id},success:function(c){var b=Ext.decode(c.responseText);if(!b.success){error(b.errorMsg)}this.store.reload()}.createDelegate(this),failure:function(b){error("Failed to delete - backend error")}})}});Ext.reg("pld-iptags-panel",Pld.IpTagsPanel);
Pld.SipDevicesComboStore=new Ext.data.JsonStore({url:"getSipDevicesComboStore",root:"data",fields:["id","name"]});Pld.IfaceNamesComboStore=new Ext.data.JsonStore({url:"getIfaceNamesComboStore",root:"data",fields:["name"]});Pld.PlatformDeviceMonitoringWizardItems=[{cardTitle:"Device to monitor",items:[{xtype:"wizq",html:"Choose the device to monitor"},{items:{xtype:"combo",name:"device",fieldLabel:"Device",editable:false,mode:"remote",allowBlank:false,triggerAction:"all",forceSelection:"true",displayField:"name",valueField:"name",store:Pld.SipDevicesComboStore}}],listeners:{beforeshow:function(){Pld.SipDevicesComboStore.load()}}},{cardTitle:"Pinging method",items:[{xtype:"wizq",html:"Please select the monitoring method you want to use"},{defaults:{xtype:"radio",name:"mtype",hideLabel:true},items:[{inputValue:"OPTIONS",boxLabel:"SIP OPTIONS requests"},{inputValue:"ICMP",boxLabel:"ICMP pings"},{inputValue:"PASSIVE",boxLabel:"Passive Monitoring"}]}],sequenceControl:[{key:"mtype",values:{OPTIONS:3,ICMP:2,PASSIVE:6}}]},{cardTitle:"ICMP monitoring",items:[{xtype:"wizq",html:"ICMP monitoring parameters"},{labelWidth:250,items:[{xtype:"textfield",name:"dest_ip",fieldLabel:"The target IP address for the ICMP pings.",vtype:"ip",allowBlank:false}]}],sequenceControl:function(){return 4}},{cardTitle:"SIP OPTIONS monitoring",items:[{xtype:"wizq",html:"SIP OPTIONS monitoring parameters"},{labelWidth:250,defaults:{xtype:"textfield"},items:[{name:"ruri",fieldLabel:"The Request-URI to be used in the OPTIONS messages",allowBlank:false},{name:"dest_ip",vtype:"ip",fieldLabel:"The target IP address for the requests. If left blank, the Request-URI will be resolved for finding the address"},{name:"from_uri",fieldLabel:"The From header URI to be used in the OPTIONS messages. If left blank, &lt;sip:palladion@[localip]&gt; will be used"},{name:"to_uri",fieldLabel:"The To header URI to be used in the OPTIONS messages. If left blank, the Request-URI is used"}]}]},{cardTitle:"Sending network port",items:[{xtype:"wizq",html:"Please select the interface used for sending the requests."},{labelWidth:250,items:{xtype:"combo",width:100,name:"iface_name",fieldLabel:"PALLADION Network Port",editable:false,mode:"remote",allowBlank:false,triggerAction:"all",forceSelection:"true",displayField:"name",valueField:"name",store:Pld.IfaceNamesComboStore}}],listeners:{beforeshow:function(){Pld.IfaceNamesComboStore.load()}}},{cardTitle:"Pinging Parameters",items:[{xtype:"wizq",html:"Please set the monitoring parameters"},{labelWidth:250,defaults:{xtype:"textfield",width:30},items:[{name:"send_period",fieldLabel:"Pinging interval. The time period in seconds (floats accepted) between sending two consecutive requests",allowBlank:false,value:"2"},{name:"max_wait",fieldLabel:"Expiry interval. The time in seconds (floats accepted) after which to declare a request as not answered",allowBlank:false,value:"1.5"},{name:"max_missed",fieldLabel:"The number of consecutive lost pings (requests) needed to declare the device as down",allowBlank:false,value:"5"}]}],sequenceControl:function(){return 7}},{cardTitle:"Passive Monitoring Parameters",items:[{xtype:"wizq",html:"Please set the Passive Monitoring parameters"},{labelWidth:400,defaults:{xtype:"textfield",width:30},items:[{name:"max_wait",fieldLabel:"Expiry interval. The time in seconds (floats accepted) after to declare a request as not answered",allowBlank:false,value:"5"},{name:"max_missed",fieldLabel:"The number of consecutive inbound requests marked as not answered needed to declare the device as down",allowBlank:false,value:"20"}]}]},{cardTitle:"Enable/Disable",items:[{xtype:"wizq",html:"Enable this monitoring configuration"},{labelWidth:400,items:[{xtype:"checkbox",name:"enabled",fieldLabel:"Select this checkbox if you want to enable monitoring now. You can toggle this option later without changing the other options"}]}]}];
Pld.DeviceMonitoring=Ext.extend(Ext.iptego.Grid,{id:"devices_monitoring",resourceid:"devices_monitoring",selectionType:"rowclick",selectionMode:"single",frame:false,height:580,pageing:false,enabledRenderer:function(a){if(a){return'<span style="color: green">Enabled</span>'}else{return'<span style="color: red">Disabled</span>'}},initComponent:function(){this.store=new Ext.data.JsonStore({url:"getDeviceMonitoring",root:"data",idProperty:"id",fields:["id","device","device_id","mtype","iface_name",{name:"send_period",type:"float"},{name:"max_missed",type:"float"},{name:"max_wait",type:"float"},"ruri","from_uri","to_uri","dest_ip","routes",{name:"enabled",type:"boolean"}]});this.columns=[{width:80,dataIndex:"device"},{width:80,dataIndex:"mtype"},{width:80,dataIndex:"iface_name"},{width:80,dataIndex:"send_period"},{width:80,dataIndex:"max_missed"},{width:80,dataIndex:"max_wait"},{width:100,dataIndex:"dest_ip"},{width:100,dataIndex:"ruri"},{width:100,dataIndex:"from_uri",hidden:true},{width:100,dataIndex:"to_uri",hidden:true},{width:100,dataIndex:"routes",hidden:true},{width:80,dataIndex:"enabled",renderer:this.enabledRenderer}];this.topToolbar=[{name:"add",tooltip:"Add new monitoring entry.",callback:this.onAdd.createDelegate(this)},{name:"edit",tooltip:"Change the options of the selected entry.",selectionRequired:true,callback:this.onEdit.createDelegate(this)},{name:"delete",tooltip:"Remove the selected monitoring entry.",selectionRequired:true,confirmation:true,callback:this.onDelete.createDelegate(this)},"->",{name:"toggle_enabled",tooltip:"Start/Stop monitoring the device.",selectionRequired:true,callback:this.onEnabledToggle.createDelegate(this)}];Pld.DeviceMonitoring.superclass.initComponent.call(this)},getWizard:function(a,b){if(Ext.isEmpty(this.wizard)){this.wizard=new Ext.iptego.Wizard({cardItems:Pld.PlatformDeviceMonitoringWizardItems,resetNextSlidesOnChange:false,listeners:{show:function(){Pld.SipDevicesComboStore.load()},finished:this.submitWizard.createDelegate(this)}});if(!Ext.isEmpty(a)){this.wizard.setValues(a,false)}}else{if(!Ext.isEmpty(a)){this.wizard.setValues(a,true)}else{this.wizard.reset(true)}}if(!Ext.isEmpty(b)){this.wizard.setTitle(b)}return this.wizard},submitWizard:function(b,a){Ext.iptego.request({url:"addOrModifyDeviceMonitoring",params:{data:Ext.encode(a)},successHandler:function(c){this.store.reload();this.wizard.hide()}.createDelegate(this),waitMsg:"Applying configuration changes..."})},onAdd:function(){var a=this.getWizard({},"Add new device monitoring entry");a.setHiddenValues({action:"add"});a.show()},onEdit:function(a){if(!Ext.isEmpty(a)){var b=this.getWizard(a,"Edit device monitoring entry");b.setHiddenValues({action:"edit",id:a.id});b.show()}},onDelete:function(a){Ext.iptego.request({url:"delDeviceMonitoring",params:{id:a.id},successHandler:function(b){this.store.reload()}.createDelegate(this),waitMsg:"Applying configuration changes"})},onEnabledToggle:function(a){Ext.iptego.request({url:"toggleDeviceMonitoring",params:{id:a.id},successHandler:function(b){this.store.reload()}.createDelegate(this)})},onRender:function(b,a){Pld.DeviceMonitoring.superclass.onRender.call(this,b,a);this.store.reload()}});Ext.reg("pld-device-monitoring",Pld.DeviceMonitoring);
Pld.OBPConfWizardItems=[{cardTitle:"Network ports for BYE sending",items:[{xtype:"wizq",html:"Default sending network port for BYE messages."},{labelWidth:200,items:{xtype:"combo",width:80,name:"def_iface",fieldLabel:"PALLADION Network Port",editable:false,mode:"remote",allowBlank:false,triggerAction:"all",forceSelection:"true",displayField:"name",valueField:"name",store:Pld.IfaceNamesComboStore}},{xtype:"wizq",html:"Optionally, you can define which PALLADION physical port to be choosen based on the source address of the BYE message."},{layout:"column",defaults:{columnWidth:0.5,anchor:"95%",layout:"form",labelAlign:"top",bodyStyle:"padding:15px",border:false,bodyStyle:"background-color: transparent;"},items:[{defaults:{xtype:"textfield",fieldLabel:"Source IP range(s)"},items:[{name:"ip_0"},{name:"ip_1"},{name:"ip_2"}]},{defaults:{xtype:"combo",width:80,fieldLabel:"PALLADION Network Port",editable:false,mode:"remote",allowBlank:true,triggerAction:"all",forceSelection:"true",displayField:"name",valueField:"name",store:Pld.IfaceNamesComboStore},items:[{name:"dest_iface0"},{name:"dest_iface1"},{name:"dest_iface2"}]}]},{xtype:"wizq",html:"If, instead of injecting the BYE messages in the network, you want to send them to a device, check the box below and enter the destination."},{layout:"column",items:[{columnWidth:0.1,xtype:"checkbox",name:"normal_send"},{columnWidth:0.9,border:false,layout:"form",labelWidth:150,items:{xtype:"textfield",name:"normal_send_destination",fieldLabel:"Destination (ip:port)",allowBlank:true}}]}],listeners:{beforeshow:function(){Pld.IfaceNamesComboStore.load()}}},{cardTitle:"Call ending parameters",items:[{xtype:"wizq",html:"You can limit the number of BYE messages to be sent by PALLADION per second."},{labelWidth:200,items:{xtype:"textfield",name:"msgs_per_sec",width:40,value:"100",allowBlank:false,fieldLabel:"Maximum number of BYE messages send per second"}}]},{cardTitle:"Trigger events",items:[{xtype:"wizq",html:"Choose for which events to launch the BYE sending sequence. Choosing more options creates a logical <em>or</em> between them. Tear calls when:"},{defaults:{xtype:"checkbox",hideLabel:true},items:[{boxLabel:"SIP OPTIONS monitoring reports the device as CRITICAL.",name:"events_options"},{boxLabel:"ICMP pinging reports the device as CRITICAL.",name:"events_icmp"},{boxLabel:"PASSIVE monitoring reports the device as CRITICAL.",name:"events_passive"},{boxLabel:"SIP OPTIONS <b>and</b> PASSIVE monitoring report the device as CRITICAL",name:"events_options_passive"},{boxLabel:"ICMP pinging <b>and</b> PASSIVE monitoring report the device as CRITICAL",name:"events_icmp_passive"}]}]},{cardTitle:"Enable CleanBye",items:[{xtype:"wizq",html:"Please choose the desired mode of operation:"},{defaults:{xtype:"radio",hideLabel:true,name:"enabled"},items:[{inputValue:"0",boxLabel:"Disabled"},{inputValue:"1",boxLabel:"Logging only (no BYE messages will be sent)"},{inputValue:"2",boxLabel:"Enabled"}]}]}];
Pld.DeviceVisibilityDialog=Ext.extend(Ext.Window,{device_id:null,title:"Select in which realms the device is visible",width:400,layout:"fit",initComponent:function(){this.addEvents("realmselectionchanged");this.store=new Ext.data.JsonStore({url:"getDeviceRealmSelection",baseParams:{device_id:this.device_id},idProperty:"id",root:"data",fields:["id","name","visibility"],listeners:{load:this.onLoad.createDelegate(this)}});this.grid=this.items=new Ext.iptego.Grid({id:"device_realms_selection",columns:[{id:"name",width:100,dataIndex:"name"}],store:this.store,selectionType:"checkbox",selectionMode:"multiple",autoExpandColumn:"name"});var a=this.grid.getSelectionModel();a.on("rowselect",this.onRowSelect,this);a.on("rowdeselect",this.onRowDeselect,this);this.buttons=[{text:"Close",handler:function(){this.close()}.createDelegate(this)}];Pld.DeviceVisibilityDialog.superclass.initComponent.call(this)},onLoad:function(b,a,c){var d=[];Ext.each(a,function(f){if(f.get("visibility")){d.push(f)}});var e=this.grid.getSelectionModel();e.suspendEvents(false);e.selectRecords(d);e.resumeEvents()},onRowSelect:function(c,b,a){Ext.iptego.request({url:"selectDeviceRealm",params:{device_id:this.device_id,realm_id:a.id},successHandler:function(d){this.store.reload();this.fireEvent("realmselectionchanged",this)}.createDelegate(this),failureHandler:function(d){warning("Changing device visibility failed");this.store.reload()}.createDelegate(this)})},onRowDeselect:function(c,b,a){Ext.iptego.request({url:"deselectDeviceRealm",params:{device_id:this.device_id,realm_id:a.id},successHandler:function(d){this.store.reload();this.fireEvent("realmselectionchanged",this)}.createDelegate(this),failureHandler:function(d){warning("Changing device visibility failed");this.store.reload()}.createDelegate(this)})}});
Pld.PlatformDevicesWizardItems=[{cardTitle:"Device Type",items:[{xtype:"wizq",html:"Select the device type you would like to add"},{defaults:{xtype:"radio",hideLabel:true,name:"type"},items:[{inputValue:"SBC",boxLabel:"B2BUA",plugins:new Ext.iptego.FieldTip({title:"B2BUA",topic:"73ui-platform.html#device-types",text:"<br/>Choose this option for devices that terminate an incomming leg and originate one or more independent outgoing legs in the context of the same call (so, at least two SIP sessions are created for this call).<br/><br/>Example of devices that can work in this mode: session border controllers (SBC), application servers (AS), private branch exchanges (PBX) etc.<br/><br/>If one device can work both in B2BUA - maybe for some calls only - and other mode, like proxy or gateway - for some other calls -, always use this option to configure it. However, keep in mind that this is the most expensive choice, in terms of call matching resources - only use it when needed."})},{inputValue:"PROXY",boxLabel:"Proxy",plugins:new Ext.iptego.FieldTip({title:"Proxy",topic:"73ui-platform.html#device-types",text:"<br/>Choose this option for devices that route or fork a call, but without terminating itself the call. Such devices usually keep the Call-ID and the tag in the 'From' SIP header field, as well as the URIs in 'From' and 'To' headers unchanged.<br/><br/>Examples of such devices are: call session control function (CSCF), call stateless redirects and registrars, non-transparent load balancers etc."})},{inputValue:"GW",boxLabel:"Gateway",plugins:new Ext.iptego.FieldTip({title:"Proxy",topic:"73ui-platform.html#device-types",text:"<br/>Choose this options for devices that either originate or terminate a call; this means that no two SIP sessions handled by this devices are associated with the same call.<br/><br/>Examples of such devices ASes (like voice message functions), media gateways or any protocol conversion node with a SIP adapter."})},{inputValue:"TRUNK",boxLabel:"Trunk",plugins:new Ext.iptego.FieldTip({title:"Trunk",topic:"73ui-platform.html#device-types",text:"<br/>This option is meant for peering points only. If you are having a PSTN breakout that you peer with over SIP or simply a peering agreement with a neighbour network, define the peering point as being of this type.<br/><br/>PSTN termination, DDI/DID or SIP traffic exchange are typlical scenarios associated with devices of this type."})},{inputValue:"L2LB",boxLabel:"L2 Balancer",plugins:new Ext.iptego.FieldTip({title:"L2 Load Balancer",topic:"73ui-platform.html#device-types",text:"<br/>Choose this option if you are monitorying load balancers/distributors operating at Ethernet level and are IP transparent."})}]}],sequenceControl:[{key:"type",values:{PROXY:-3,GW:-3,TRUNK:3,L2LB:-3}}]},{cardTitle:"SBC Options",items:[{xtype:"wizq",html:"Select the method by which the call legs of this SBC (B2Bua) can be matched."},{labelWidth:300,defaults:{xtype:"radio",hideLabel:true,name:"match_type"},items:[{inputValue:"M_GENERIC",boxLabel:"Use generic IPTEGO algorithm (recommended)"},{inputValue:"M_CALLID",boxLabel:"by Call-ID"},{xtype:"textfield",name:"callid_suffix",fieldLabel:"Match if a common suffix of this many characters exists (optional)",hideLabel:false,width:30},{inputValue:"M_FROM_USER",boxLabel:"by From username"},{xtype:"textfield",name:"from_suffix",fieldLabel:"Match if a common suffix of this many characters exists (optional)",hideLabel:false,width:30},{inputValue:"M_FROM_TO_USER",boxLabel:"by From and To username"},{xtype:"textfield",name:"from_to_suffix",fieldLabel:"Match if a common suffix of this many characters exists (optional)",hideLabel:false,width:30},{inputValue:"M_CUSTOM",boxLabel:"Use custom algorithm"}]}],sequenceControl:[{key:"match_type",values:{M_CALLID:-3,M_FROM_USER:-3,M_FROM_TO_USER:-3,M_GENERIC:-3}}]},{cardTitle:"Call matching script",items:[{xtype:"wizq",html:"Enter the call matching script."},{labelWidth:120,items:{xtype:"textarea",name:"match_script",allowBlank:false,fieldLabel:"Call matching script",value:SCRIPT_GENERIC,width:390,height:220}}],sequenceControl:-3},{cardTitle:"Device Identification Strategy",items:[{xtype:"wizq",html:"Select the device identification strategy."},{defaults:{xtype:"radio",hideLabel:true,name:"device_identification_strategy"},items:[{inputValue:0,boxLabel:"Use IP or hardware addresses"},{inputValue:1,boxLabel:"Use DTG/OTG URI parameters"}]}],sequenceControl:[{key:"device_identification_strategy",values:{0:-3,1:-2}}]},{cardTitle:"Device Identification",items:[{xtype:"wizq",html:"Select the identification addresses for this device."},{labelWidth:250,defaults:{xtype:"textarea",width:200},items:[{name:"ipranges",allowBlank:false,fieldLabel:'IP ranges used by this device (space separated). Example: "172.23.12.0/24 172.43.34.1 123.123.123.123/28"'},{name:"hw_addrs",fieldLabel:'Hardware addresses. Needed only if more devices share the same IP address (e.g an Layer 2 LB or VRRP is used). Example: "a1:a2:a3:b1:b2:b3 c1:c2:c3:d1:d2:d3"'}]}],sequenceControl:-1},{cardTitle:"Device Identification",items:[{xtype:"wizq",html:"Enter the DTG and OTG values for this device"},{defaults:{xtype:"textfield",allowBlank:false},items:[{name:"dtg",fieldLabel:"DTG value"},{name:"otg",fieldLabel:"OTG value"}]}]},{cardTitle:"Device Name",items:[{xtype:"wizq",html:"Select a name for this device and press Finish to apply"},{items:{xtype:"textfield",name:"name",allowBlank:false,fieldLabel:"Name"}}]}];
Pld.DevicesPanel=Ext.extend(Ext.iptego.Grid,{id:"devices_config_panel",resourceid:"device_configs",fields:["id","name","type","match","match_type","suffix","match_script","ipranges","hw_addrs","dtg","otg","obp_conf","obp_events",{name:"obp_enabled",type:"int"},"visibility",{name:"external",type:"int"}],useToolbarAsContextmenu:true,autoHeight:false,selectionType:"rowclick",selectionMode:"single",pageing:false,obpRestricted:null,enabledRenderer:function(a){if(a==0){return'<span style="color: red">Disabled</span>'}else{if(a==1){return'<span style="color: orange">Logging</span>'}else{return'<span style="color: green">Enabled</span>'}}},externalRenderer:function(a){if(a==0){return"internal"}else{return"external"}},build:function(){this.columns=[{width:100,dataIndex:"name",sortable:true},{width:80,dataIndex:"type",sortable:true},{width:100,dataIndex:"match",sortable:true},{width:100,dataIndex:"ipranges",sortable:true},{width:100,dataIndex:"hw_addrs",sortable:true},{width:100,dataIndex:"obp_events"},{width:80,dataIndex:"obp_enabled",renderer:this.enabledRenderer},{width:80,dataIndex:"visibility"},{width:80,dataIndex:"external",renderer:this.externalRenderer}];this.store=new Ext.data.GroupingStore({url:"getSipDevices",reader:new Ext.data.JsonReader({idProperty:"id",root:"devices",fields:this.fields}),groupField:"type",sortInfo:{field:"type",direction:"ASC"}});this.view=new Ext.grid.GroupingView({forceFit:true,hideGroupedColumn:true,groupTextTpl:"{group} devices"});this.filters=new Ext.iptego.GridFilters({filters:[{type:"string",dataIndex:"name"},{type:"list",dataIndex:"type",options:["GW","PROXY","SBC","TRUNK"]},{type:"string",dataIndex:"ipranges"},{type:"string",dataIndex:"hw_addrs"},{type:"list",dataIndex:"obp_enabled",options:[[0,"Disabled"],[1,"Logging"],[2,"Enabled"]]},{type:"list",dataIndex:"external",options:[[0,"internal"],[1,"external"]]}]});this.topToolbar=[{name:"add",callback:this.onAdd.createDelegate(this)},{name:"edit",selectionRequired:true,callback:this.onEdit.createDelegate(this)},{name:"delete",confirmation:true,selectionRequired:true,callback:this.onDelete.createDelegate(this)},"->",{name:"export",selectionRequired:false,callback:this.onExport.createDelegate(this)},{name:"import",selectionRequired:false,callback:this.onImport.createDelegate(this)},{name:"toggle_external",selectionRequired:true,callback:this.onToggleExternal.createDelegate(this)},{name:"configure_obp",selectionRequired:true,callback:this.onOBPConfigure.createDelegate(this)},"-",{name:"configure_visibility",selectionRequired:true,callback:this.onVisibility.createDelegate(this)}]},submitWizard:function(b,a){Ext.iptego.request({url:"addModifySipDevice",params:a,successHandler:function(c){this.store.reload();this.wizard.hide();Pld.getStore("getSipDevicesComboStore").reload()}.createDelegate(this),waitMsg:"Applying topology changes"})},getWizard:function(a,b){if(Ext.isEmpty(this.wizard)){this.wizard=new Ext.iptego.Wizard({height:420,cardItems:Pld.PlatformDevicesWizardItems,resetNextSlidesOnChange:false,listeners:{finished:this.submitWizard.createDelegate(this)}});if(!Ext.isEmpty(a)){this.wizard.setValues(a,false)}}else{if(!Ext.isEmpty(a)){this.wizard.setValues(a,true)}else{this.wizard.reset(true)}}if(!Ext.isEmpty(b)){this.wizard.setTitle(b)}return this.wizard},onAdd:function(){var a=this.getWizard({},"Add a new platform device");a.setHiddenValues({action:"add"});a.show()},onEdit:function(a){if(!Ext.isEmpty(a)){if(a.match_type=="M_CALLID"){a.callid_suffix=a.suffix}else{if(a.match_type=="M_FROM_USER"){a.from_suffix=a.suffix}else{if(a.match_type=="M_FROM_TO_USER"){a.from_to_suffix=a.suffix}}}if(!Ext.isEmpty(a.dtg)&&!Ext.isEmpty(a.otg)){a.device_identification_strategy=1}else{a.device_identification_strategy=0}if(Ext.isEmpty(a.match_script)){a.match_script=SCRIPT_GENERIC}var b=this.getWizard(a,"Edit platform device");b.setHiddenValues({action:"edit",id:a.id});b.show()}},onDelete:function(a){Ext.iptego.request({url:"deleteSipDevice",params:{id:a.id},successHandler:function(){this.store.reload();Pld.getStore("getSipDevicesComboStore").reload()},waitMsg:"Applying topology changes"},this)},queryOBP:function(a){Ext.iptego.request({url:"obpRestricted",successHandler:function(b){this.obpRestricted=b.restricted}},this)},submitOBPWizard:function(b,a){Ext.iptego.request({url:"configureOBP",params:a,successHandler:function(c){this.store.reload();this.obp_wizard.hide()}.createDelegate(this)})},getOBPWizard:function(a,b){if(Ext.isEmpty(this.obp_wizard)){this.obp_wizard=new Ext.iptego.Wizard({height:450,cardItems:Pld.OBPConfWizardItems,listeners:{finished:this.submitOBPWizard.createDelegate(this)}});if(!Ext.isEmpty(a)){this.obp_wizard.setValues(a,false)}}else{if(!Ext.isEmpty(a)){this.obp_wizard.setValues(a,true)}else{this.obp_wizard.reset(true)}}if(!Ext.isEmpty(b)){this.obp_wizard.setTitle(b)}return this.obp_wizard},onExport:function(){Ext.iptego.requestFile({url:"exportSipDevicesJSON",params:{dummy:"dummy"}})},onImport:function(){var b=new Ext.form.FormPanel({style:"padding: 10px;",border:false,fileUpload:true,method:"POST",url:"importSipDevicesJSON",items:[{xtype:"textfield",fieldLabel:"Devices configuration file",name:"json",inputType:"file",allowBlank:false}]});var a=new Ext.Window({bodyStyle:{"background-color":"#ffffff"},title:"Upload previously exported device configuration",width:470,items:b,buttons:[{text:"Cancel",handler:function(){a.close()}},{text:"Upload",handler:function(){console.log("Submitting...");b.getForm().submit({success:function(c,d){a.close();this.store.reload()}.createDelegate(this),failure:function(c,d){a.close();if(!Ext.isEmpty(d.result)&&!Ext.isEmpty(d.result.errorMsg)){error(d.result.errorMsg)}else{error("An unknown error happend, when uploading the file")}}.createDelegate(this)})}.createDelegate(this)}]});a.show()},onToggleExternal:function(a){Ext.iptego.request({url:"toggleDeviceExternal",params:{device_id:a.id},successHandler:function(b){this.store.reload()}.createDelegate(this)})},onOBPConfigure:function(b){var a={};if(!Ext.isEmpty(b.obp_conf)){a=Ext.decode(b.obp_conf)}var c=this.getOBPWizard(a,"CleanBye configuration for "+b.name);c.setHiddenValues({device_id:b.id});c.show()},onVisibility:function(b){var a=new Pld.DeviceVisibilityDialog({device_id:b.id});a.on("realmselectionchanged",function(c){this.store.reload()},this);a.show()},initComponent:function(){this.build();this.queryOBP();this.on("rowdblclick",function(a,c,b){this.onEdit(this.getSelection(false))},this);this.on("rowclick",function(a,c,b){this.topToolbar.items.each(function(d){if(d.name=="configure_obp"||d.name=="toggle_obp"){d.setDisabled(this.obpRestricted)}},this)},this);Pld.DevicesPanel.superclass.initComponent.call(this)},onRender:function(b,a){Pld.DevicesPanel.superclass.onRender.call(this,b,a);this.store.reload()}});Ext.reg("pld-devices-panel",Pld.DevicesPanel);
Pld.SettingsDialog.registerSection("platform-section","Platform","73ui-platform.html","panel",["set_platform"]);Pld.SettingsDialog.registerPage("platform-section","devices-settings",Resources.get("module.platform.devices"),"73ui-platform.html#platform-devices","pld-devices-panel");Pld.SettingsDialog.registerPage("platform-section","device-monitoring-settings",Resources.get("module.platform.devices_monitoring"),"73ui-platform.html#device-monitoring","pld-device-monitoring");Pld.SettingsDialog.registerPage("platform-section","realms-settings",Resources.get("module.platform.realms_title"),"73ui-platform.html#realms-definitions","pld-realms-panel");Pld.SettingsDialog.registerPage("platform-section","iptags-settings",Resources.get("module.platform.ip_tags"),"73ui-platform.html#ip-tags","pld-iptags-panel");
Pld.CrashHandlerPanel=Ext.extend(Ext.iptego.Grid,{id:"error_reports.grid",resourceid:"error_reports.grid",height:480,selectionType:"checkbox",selectionMode:"multiple",columns:[{width:100,dataIndex:"file",id:"file"},{width:40,dataIndex:"size",align:"right",renderer:bytesRenderer},{width:70,dataIndex:"date",renderer:datetimeRenderer}],autoExpandColumn:"file",frame:false,border:false,initComponent:function(){this.pattern=Ext.data.Record.create([{name:"date",type:"date",dateformat:JSON_FORMAT_DATETIME},"file",{name:"size",type:"int"}]);this.store=new Ext.data.JsonStore({url:"ErrorReports",root:"data",totalProperty:"totalCount",fields:this.pattern});this.refresher=new Ext.Toolbar.Button({id:"report-reload",iconCls:"x-tbar-loading",tooltip:"Refresh report list",handler:this.reloadReport.createDelegate(this)});this.topToolbar=[{name:"download",selectionRequired:true,callback:this.downloadReport.createDelegate(this)},{name:"delete",selectionRequired:true,callback:this.deleteReport.createDelegate(this)},{name:"newreport",callback:this.createReport.createDelegate(this)},"->",this.refresher];Pld.CrashHandlerPanel.superclass.initComponent.call(this)},reloadReport:function(){this.refresher.disable();this.store.reload({callback:function(){this.refresher.enable()}.createDelegate(this)})},downloadReport:function(){var a=this.getSelection();if(a.length>0&&!Ext.isEmpty(a[0])){location.href="files/"+a[0].file+"?type="+CRASH+"&file="+a[0].file}},createReport:function(){Ext.Ajax.request({url:"CreateReport",callback:function(d,c,b){if(c){var a=Ext.decode(b.responseText);if(a.success){info("Report has been created.");this.store.reload();return}else{error("Creation of report failed: "+a.errorMsg)}}else{error("Couldn't contact server")}}.createDelegate(this),scope:this})},deleteReport:function(){this._ids=[];var b=this.getSelection();for(var d=0;d<b.length;d++){this._ids.push(b[d].file)}if(this._ids.length>0){var a=this._ids.length>1?"s ":" ";Ext.MessageBox.show({title:Resources.get("messagebox.confirm.title"),msg:"Do you really want to delete the file"+a+this._ids.toString()+"?",animEl:"delete_btn",fn:function(c){if(c=="ok"){this.sendDeleteReports()}}.createDelegate(this),buttons:Ext.MessageBox.OKCANCEL,icon:Ext.MessageBox.WARNING})}this.sendDeleteReports=function(){Ext.Ajax.request({url:"DeleteReports",params:{data:Ext.util.JSON.encode(this._ids)},callback:function(f,e,c){if(e){answ=Ext.decode(c.responseText);if(answ.success){this.store.reload()}else{error("Deletion of reports failed: "+answ.errorMsg)}}else{error("Couldn't contact server")}},scope:this})}},onRender:function(b,a){Pld.CrashHandlerPanel.superclass.onRender.call(this,b,a);this.store.reload()}});Ext.reg("pld-crash-handler-panel",Pld.CrashHandlerPanel);Pld.SystemSettings=Ext.extend(Ext.iptego.Grid,{id:"systemsettings.grid",resourceid:"systemsettings.grid",selectionType:"rowclick",selectionMode:"single",frame:false,pageing:false,qtipRenderer:function(e,b,a,f,c,d){return'<div ext:qtip="'+a.get("description")+'">'+e+"</div>"},initComponent:function(){this.store=new Ext.data.JsonStore({url:"getSystemSettings",root:"data",fields:["id","name","description","status","type","value","default_value","max_value","help_topic"]});this.columns=[{width:250,dataIndex:"name",renderer:this.qtipRenderer},{width:70,dataIndex:"status"},{width:50,dataIndex:"type"},{width:500,dataIndex:"value"}];Pld.SystemSettings.superclass.initComponent.call(this)},listeners:{rowdblclick:function(a,d,b){var c=a.getSelection();a.showOptionManageWin(c.id,c.name,c.description,c.type,c.value,c.default_value,c.max_value,c.help_topic)}},showOptionManageWin:function(c,a,l,g,j,n,f,d){switch(g){case"string":var h=new Ext.form.TextArea({name:"value",allowBlank:false,height:50,width:350,value:j,hideLabel:true});break;case"integer":case"float":var h=new Ext.form.NumberField({name:"value",allowBlank:false,allowNegative:false,style:"text-align:left",height:25,width:50,value:j,hideLabel:true});break;case"boolean":var h=new Ext.form.Checkbox({name:"value",boxLabel:"Enabled",hideLabel:true,inputValue:"True",checked:j});break}var m=function(){var p={id:c};Ext.apply(p,b.getForm().getValues());Ext.iptego.request({url:"updateSettingsOption",params:p,successHandler:function(){this.getStore().reload();k.hide()}.createDelegate(this),failureHandler:function(q){Ext.MessageBox.show({title:"Error",msg:"Failed to set the value to '"+p.value+": "+q.errorMsg+" '. Would you like to switch to the default value of '"+n+"' ?",fn:i,buttons:Ext.MessageBox.OKCANCEL,icon:Ext.MessageBox.ERROR})}})}.createDelegate(this);var i=function(p){if(p=="cancel"){return}var q={id:c,value:n};Ext.iptego.request({url:"updateSettingsOption",params:q,successHandler:function(){this.getStore().reload();k.hide()}.createDelegate(this)})}.createDelegate(this);var o=function(){Ext.MessageBox.show({title:"Reset "+a,msg:"Are you sure you want to change the value to "+n,fn:i,buttons:Ext.MessageBox.OKCANCEL,icon:Ext.MessageBox.WARNING})}.createDelegate(this);var e=[];e.push({xtype:"panel",border:false,html:l});e.push({xtype:"panel",border:false,style:{"margin-top":"8px"},html:"Default value: "+n});if(g=="integer"||g=="float"){e.push({xtype:"panel",border:false,style:{"margin-top":"8px"},html:"Maximum value: "+f})}e.push(h);var b=new Ext.form.FormPanel({id:"systemsettings.formPanel",border:false,labelAlign:"top",labelWidth:120,bodyStyle:{padding:"5px"},items:[{xtype:"fieldset",autoHeight:true,title:a,items:e}],buttons:[{text:"Help",handler:function(){Pld.openHelpTopic(d)}},{formBind:true,text:"Update",handler:m},{text:"Reset to default",handler:o},{text:"Cancel",handler:function(){k.hide()}}]});var k=new Ext.Window({title:"Update System Option",layout:"fit",height:250,width:400,modal:true,items:b});k.show()}});Ext.reg("pld-system-settings",Pld.SystemSettings);Pld.SettingsDialog.registerSection("system-management-section","System Management","75ui-sysman.html","panel",["set_system_management"]);Pld.SettingsDialog.registerPage("system-management-section","system-settings","System Settings","75ui-sysman.html#system-settings","pld-system-settings");Pld.SettingsDialog.registerPage("system-management-section","error-reporting-settings","Error Reporting","75ui-sysman.html#error-reporting","pld-crash-handler-panel");
Pld.RadiusSettings=Ext.extend(Ext.form.FormPanel,{style:"padding-top: 20px",bodyStyle:{"background-color":"#ffffff"},border:false,width:400,labelAlign:"top",method:"POST",defaults:{xtype:"textfield",width:350},loadForm:function(){this.load({url:"getRadiusConfig",params:{dummy:"Content-Length bug fix."},failure:formFailure});this.updateEnabledItems()},onSave:function(){var a=this.getForm().getValues();if(a["vsp.radius.enabled"]&&!this.getForm().isValid()){Ext.Msg.show({title:"Error",msg:"The form is not correctly filed. Please check your input.",icon:Ext.MessageBox.ERROR,buttons:Ext.Msg.OK});return}this.getForm().submit({url:"setRadiusConfig",clientValidation:false,method:"POST",success:function(){info("RADIUS settings saved");this.loadForm()}.createDelegate(this)})},onReset:function(){this.loadForm()},buildItems:function(){this.items=[{xtype:"hidden",name:"group",value:"vsp.radius"},{xtype:"checkbox",name:"vsp.radius.enabled",hideLabel:true,boxLabel:"RADIUS authentication enabled",id:"set_radius_enabled"},{name:"vsp.radius.host",fieldLabel:"RADIUS server hostname",allowBlank:false,id:"set_radius_host"},{fieldLabel:"RADIUS server port number",name:"vsp.radius.port",vtype:"int",value:1812,allowBlank:true,id:"set_radius_port"},{fieldLabel:"RADIUS shared secret",name:"vsp.radius.secret",allowBlank:false,id:"set_radius_secret"},{name:"vsp.radius.nas_identifier",fieldLabel:"RADIUS NAS identifier",value:"PALLADION",allowBlank:true,id:"set_radius_nas_identifier"}]},buildButtons:function(){this.buttons=[{text:Resources.get("button.save"),handler:this.onSave.createDelegate(this)},{text:"Reset/Reload",handler:this.onReset.createDelegate(this)}]},updateEnabledItems:function(){var a=this.getComponent("set_radius_enabled").getValue();this.getComponent("set_radius_host").setDisabled(!a);this.getComponent("set_radius_port").setDisabled(!a);this.getComponent("set_radius_secret").setDisabled(!a);this.getComponent("set_radius_nas_identifier").setDisabled(!a)},initComponent:function(){this.buildButtons();this.buildItems();Pld.SnmpSettings.superclass.initComponent.call(this,arguments)},onRender:function(b,a){Pld.RadiusSettings.superclass.onRender.call(this,b,a);this.addClass("centered-panel");this.getComponent("set_radius_enabled").on("check",this.updateEnabledItems,this);this.findParentByType("pld-radius-settings-page").on("activate",this.loadForm,this);this.loadForm()}});Ext.reg("pld-radius-settings",Pld.RadiusSettings);Pld.RadiusSettingsPage=Ext.extend(Ext.Panel,{initComponent:function(){this.items=[new Pld.RadiusSettings()];Pld.RadiusSettingsPage.superclass.initComponent.call(this)}});Ext.reg("pld-radius-settings-page",Pld.RadiusSettingsPage);
Pld.MysqlSourcesPanel=Ext.extend(Ext.iptego.Grid,{id:"mysql_sources_grid",selectionType:"rowclick",selectionMode:"single",columns:[{width:100,dataIndex:"host"},{width:150,dataIndex:"db"},{width:150,dataIndex:"user"}],pageing:false,viewConfig:{forceFit:true},initComponent:function(){this.store=new Ext.data.JsonStore({storeId:"mysql_sources_store",url:"getMysqlSources",idProperty:"id",root:"data",fields:["id","source_info","host","user","password","port","db"]});this.topToolbar=[{name:"add",callback:this.onAdd.createDelegate(this)},{name:"edit",selectionRequired:true,callback:this.onEdit.createDelegate(this)},{name:"delete",confirmation:true,selectionRequired:true,callback:this.onDelete.createDelegate(this)}];Pld.MysqlSourcesPanel.superclass.initComponent.call(this)},onAdd:function(){this.showFormWindow();Ext.getCmp("mysql_sources_form").getForm().reset()},onEdit:function(){this.showFormWindow();Ext.getCmp("mysql_sources_form").getForm().loadRecord(this.getSelection(true))},showFormWindow:function(){if(!this.formWindow){this.formWindow=new Ext.Window({title:"MySQL Data Source",width:350,height:350,closeAction:"hide",layout:"fit",items:{xtype:"form",url:"saveMysqlSource",id:"mysql_sources_form",frame:true,monitorValid:true,labelAlign:"top",labelWidth:120,defaultType:"textfield",defaults:{anchor:"100%",allowBlank:false},bodyStyle:{padding:"5px"},items:[{name:"id",xtype:"hidden"},{name:"host",fieldLabel:"Host (Name or IP)"},{name:"port",fieldLabel:"Port",value:3306},{name:"db",fieldLabel:"Database"},{name:"user",fieldLabel:"Username"},{allowBlank:true,name:"password",fieldLabel:"Password",inputType:"password"}],buttons:[{formBind:true,text:Resources.get("button.ok"),handler:function(){var a=Ext.getCmp("mysql_sources_form").getForm();a.url="saveMysqlSource";a.submit({success:function(b,c){var d="MySQL Database Connection saved";info(d);this.formWindow.hide();this.getStore().reload()}.createDelegate(this),failure:formFailureMsg})}.createDelegate(this)},{formBind:true,text:"Test",handler:function(){var a=Ext.getCmp("mysql_sources_form").getForm();a.url="testMysqlConnection";a.submit({success:function(b,c){var d="Connection Success!";Ext.Msg.alert("Result",d)}.createDelegate(this),failure:formFailureMsg})}.createDelegate(this)},{text:Resources.get("button.cancel"),handler:function(){this.formWindow.hide()}.createDelegate(this)}]}})}this.formWindow.show()},onDelete:function(a){Ext.iptego.request({url:"deleteMysqlSource",params:{id:a.id},successHandler:function(){this.getStore().reload()}.createDelegate(this)})},reloadStore:function(){this.getStore().reload()},onRender:function(b,a){Pld.MysqlSourcesPanel.superclass.onRender.call(this,b,a);this.findParentByType("pld-data-sources").on("activate",this.reloadStore,this)}});Pld.MysqlQueriesPanel=Ext.extend(Ext.iptego.Grid,{id:"mysql_queries_grid",border:false,selectionType:"rowclick",selectionMode:"single",columns:[{width:150,dataIndex:"name"},{width:150,dataIndex:"source_info"},{width:250,dataIndex:"query"}],pageing:false,viewConfig:{forceFit:true},initComponent:function(){this.store=new Ext.data.JsonStore({url:"getMysqlQueries",idProperty:"id",root:"data",fields:["id","name","mysql_source","source_info","query"]});this.topToolbar=[{name:"add",callback:this.onAdd.createDelegate(this)},{name:"edit",selectionRequired:true,callback:this.onEdit.createDelegate(this)},{name:"delete",confirmation:true,selectionRequired:true,callback:this.onDelete.createDelegate(this)}];Pld.MysqlQueriesPanel.superclass.initComponent.call(this)},onAdd:function(){this.showFormWindow();Ext.getCmp("mysql_query_form").getForm().reset();Ext.get("consoleField").update("ready...")},onEdit:function(){this.showFormWindow();Ext.getCmp("mysql_query_form").getForm().loadRecord(this.getSelection(true));Ext.get("consoleField").update("ready...")},showFormWindow:function(){if(!this.formWindow){this.formWindow=new Ext.Window({title:"MySQL Query",closeAction:"hide",layout:"fit",width:470,height:545,items:{xtype:"form",id:"mysql_query_form",url:"saveMysqlQuery",frame:true,monitorValid:true,labelAlign:"top",labelWidth:120,bodyStyle:{padding:"5px"},defaults:{xtype:"fieldset",autoHeight:true,defaults:{width:400}},items:[{title:"MySQL Query Information",items:[{xtype:"combo",store:Ext.StoreMgr.get("mysql_sources_store"),fieldLabel:"MySQL Data Source",hiddenName:"mysql_source",triggerAction:"all",editable:false,valueField:"id",displayField:"source_info",forceSelection:true,mode:"remote",emptyText:"Please select"},{xtype:"textarea",allowBlank:false,id:"mysql_query",name:"query",plugins:new Ext.iptego.FieldTip({title:"SQL Query and usage of internal variables",text:"To insert and use variables to match user and domain queries, use <b>$USER</b> within the related SQL-statement.<br>Please test your query before you save."}),fieldLabel:"SQL Query",allowBlank:false},{xtype:"hidden",name:"id"},{xtype:"hidden",name:"test_query",id:"test_query_field"},{xtype:"textfield",name:"name",fieldLabel:"Name",allowBlank:false}]},{title:"Console",items:{xtype:"textarea",id:"consoleField",width:400,height:150,fieldLabel:"Output",readOnly:true,fieldClass:"form_console"}}],buttons:[{formBind:true,text:Resources.get("button.ok"),handler:function(){Ext.get("consoleField").update("");var a=Ext.getCmp("mysql_query_form").getForm();a.url="saveMysqlQuery";a.submit({success:function(b,c){var d="MySQL Query saved";info(d);this.formWindow.hide();this.getStore().reload()}.createDelegate(this),failure:formFailureMsg})}.createDelegate(this)},{text:"Test",handler:this.queryTest.createDelegate(this)},{text:Resources.get("button.cancel"),handler:function(){this.formWindow.hide()}.createDelegate(this)}]}})}this.formWindow.show()},onDelete:function(a){Ext.iptego.request({url:"deleteMysqlQuery",params:{id:a.id},successHandler:function(b){this.getStore().reload()}.createDelegate(this)})},reloadStore:function(){this.store.reload()},onRender:function(b,a){Pld.MysqlQueriesPanel.superclass.onRender.call(this,b,a);this.findParentByType("pld-data-sources").on("activate",this.reloadStore,this)},queryTest:function(){var e=Ext.get("mysql_query").getValue();var a=e.match(/\$\w*/g);if(a){var d=[];for(var c=0;c<a.length;c++){d.push({id:"mysqlQry_var_"+String(c),fieldLabel:a[c]})}if(a.length){var b=new Ext.Window({title:"User Defined Variables",id:"mysql_query_variables_window",width:400,layout:"fit",autoHeight:true,items:{xtype:"form",autoHeight:true,frame:true,monitorValid:true,labelAlign:"top",labelWidth:120,bodyStyle:{padding:"5px"},defaults:{xtype:"textfield",allowBlank:false,width:280},items:d},buttons:[{text:Resources.get("button.ok"),handler:function(){var j=Ext.get("mysql_query").getValue();var f=j.match(/\$\w*/g);for(var g=0;g<f.length;g++){var h=new RegExp("\\"+f[g],"g");j=j.replace(h,"'"+Ext.get("mysqlQry_var_"+String(g)).getValue()+"'")}Ext.getCmp("test_query_field").setValue(j);this.submitTestQuery();Ext.getCmp("mysql_query_variables_window").close()}.createDelegate(this)},{text:Resources.get("button.cancel"),handler:function(){Ext.getCmp("mysql_query_variables_window").close()}}]});b.show()}}else{Ext.getCmp("test_query_field").setValue(e);this.submitTestQuery()}},submitTestQuery:function(){Ext.get("consoleField").update("");var a=Ext.getCmp("mysql_query_form").getForm();a.url="testMysqlQuery";a.submit({success:function(b,c){Ext.getCmp("consoleField").setValue(Ext.decode(c.response.responseText)["result"])}.createDelegate(this),failure:function(b,c){formFailureMsg(b,c);Ext.get("consoleField").update("ready...")}})}});Pld.ExternalCsvImport=Ext.extend(Ext.iptego.Grid,{id:"csv_sources_grid",selectionType:"rowclick",selectionMode:"single",columns:[{width:100,dataIndex:"name"},{width:150,dataIndex:"success_nr"},{width:150,dataIndex:"failed_nr"},{width:150,dataIndex:"date_of_import"}],pageing:false,viewConfig:{forceFit:true},initComponent:function(){this.store=new Ext.data.JsonStore({storeId:"csv_sources_store",url:"getCsvSources",idProperty:"id",root:"data",fields:["id","name","success_nr","failed_nr","date_of_import"]});this.topToolbar=[{name:"add",callback:this.onAdd.createDelegate(this)},{name:"delete",confirmation:true,selectionRequired:true,callback:this.onDelete.createDelegate(this)}];this.uploadForm=new Ext.form.FormPanel({style:"padding: 20px 40px 40px 40px;",border:false,fileUpload:true,method:"POST",url:"uploadExternalCsvFile",items:[{xtype:"textfield",fieldLabel:"CSV file",name:"file",inputType:"file",allowBlank:false}]});this.uploadWin=new Ext.Window({bodyStyle:{"background-color":"#ffffff"},width:500,height:200,title:"Upload CSV file",items:[{xtype:"panel",style:"padding: 15px 15px 0 15px;",border:false,html:"Please upload a coma separated file that contains the user name as the first column. The first line from the file will be considered the column header. The first column must be named <b>user</b>."},this.uploadForm],buttons:[{text:"Cancel",handler:function(){this.uploadWin.hide()}.createDelegate(this)},{text:"Upload",handler:this.onUpload.createDelegate(this)}]});Pld.ExternalCsvImport.superclass.initComponent.call(this)},onAdd:function(){this.uploadWin.show()},onDelete:function(a){Ext.iptego.request({url:"deleteCsvSource",params:{id:a.id},successHandler:function(){this.getStore().reload()}.createDelegate(this)})},onUpload:function(){this.uploadForm.getForm().submit({waitMsg:"Please wait while the file is uploaded...",success:this.onCsvFileUploaded.createDelegate(this),failure:this.onUploadFailure.createDelegate(this),error:this.onUploadFailure.createDelegate(this)})},onCsvFileUploaded:function(a,b){this.uploadWin.hide();this.store.reload()},onUploadFailure:function(a,b){if(!Ext.isEmpty(b.result)&&!Ext.isEmpty(b.result.errorMsg)){Ext.iptego.defaultFailure(b.result)}else{error("An unknown error happend, when uploading the file")}},reloadStore:function(){this.getStore().reload()},onRender:function(b,a){Pld.ExternalCsvImport.superclass.onRender.call(this,b,a);this.findParentByType("pld-data-sources").on("activate",this.reloadStore,this)}});Pld.ExternalFiles=Ext.extend(Ext.iptego.Grid,{id:"external_files_grid",selectionType:"rowclick",selectionMode:"single",columns:[{width:100,dataIndex:"name"},{width:100,dataIndex:"size",align:"right",renderer:bytesRenderer},{width:100,dataIndex:"date",renderer:datetimeRenderer}],pageing:false,viewConfig:{forceFit:true},initComponent:function(){this.store=new Ext.data.JsonStore({storeId:"external_files_store",url:"getExternalFiles",idProperty:"name",root:"data",fields:["name",{name:"date",type:"date",dateformat:JSON_FORMAT_DATETIME},{name:"size",type:"int"}]});this.topToolbar=[{name:"add",callback:this.onAdd.createDelegate(this)},{name:"delete",confirmation:true,selectionRequired:true,callback:this.onDelete.createDelegate(this)}];this.uploadForm=new Ext.form.FormPanel({style:"padding: 20px 40px 40px 40px;",border:false,fileUpload:true,method:"POST",url:"uploadExternalFile",items:[{xtype:"textfield",fieldLabel:"File",name:"file",inputType:"file",allowBlank:false}]});this.uploadWin=new Ext.Window({bodyStyle:{"background-color":"#ffffff"},width:500,height:200,title:"Upload external file",items:[{xtype:"panel",style:"padding: 15px 15px 0 15px;",border:false,html:"Please select the file to upload"},this.uploadForm],buttons:[{text:"Cancel",handler:function(){this.uploadWin.hide()}.createDelegate(this)},{text:"Upload",handler:this.onUpload.createDelegate(this)}]});Pld.ExternalCsvImport.superclass.initComponent.call(this)},onAdd:function(){this.uploadWin.show()},onDelete:function(a){Ext.iptego.request({url:"deleteExternalFile",params:{name:a.name},successHandler:function(){this.getStore().reload()}.createDelegate(this)})},onUpload:function(){this.uploadForm.getForm().submit({waitMsg:"Please wait while the file is uploaded...",success:this.onFileUploaded.createDelegate(this),failure:this.onUploadFailure.createDelegate(this),error:this.onUploadFailure.createDelegate(this)})},onFileUploaded:function(a,b){this.uploadWin.hide();this.store.reload()},onUploadFailure:function(a,b){if(!Ext.isEmpty(b.result)&&!Ext.isEmpty(b.result.errorMsg)){Ext.iptego.defaultFailure(b.result)}else{error("An unknown error happend, when uploading the file")}},reloadStore:function(){this.getStore().reload()},onRender:function(b,a){Pld.ExternalCsvImport.superclass.onRender.call(this,b,a);this.findParentByType("pld-data-sources").on("activate",this.reloadStore,this)}});
Pld.FtpSettings=Ext.extend(Ext.form.FormPanel,{style:"padding-top: 20px",bodyStyle:{"background-color":"#ffffff"},border:false,width:400,labelAlign:"top",method:"POST",loadFtpForm:function(){this.load({url:"getFTPConfig",params:{dummy:"Content-Length bug fix."},success:function(){this.getForm().findField("vsp.ftp.password2").setValue(this.getForm().findField("vsp.ftp.password").getValue());this.setEnabledItems()}.createDelegate(this),failure:formFailure})},setEnabledItems:function(){if(this.getForm().findField("vsp.ftp.enabled").getValue()){this.getForm().findField("vsp.ftp.username").enable();this.getForm().findField("vsp.ftp.password").enable();this.getForm().findField("vsp.ftp.password2").enable()}else{this.getForm().findField("vsp.ftp.username").disable();this.getForm().findField("vsp.ftp.password").disable();this.getForm().findField("vsp.ftp.password2").disable()}},onSave:function(){_en=this.getForm().findField("vsp.ftp.enabled").getValue();_pw1=this.getForm().findField("vsp.ftp.password").getValue();_pw2=this.getForm().findField("vsp.ftp.password2").getValue();if(_en&&(_pw1!=_pw2)){Ext.Msg.alert("Error","Passwords do not match.");return 0}if((_pw1=="")&&(_en==true)){Ext.Msg.alert("Warning","No password specified.");return 0}this.getForm().submit({url:"setFTPConfig",method:"POST",clientValidation:false,waitMsg:Resources.get("messagebox.saving"),success:info.createCallback("Settings saved."),failure:formFailure})},initComponent:function(){this.items=[{xtype:"hidden",name:"group",value:"vsp.ftp"},{xtype:"checkbox",name:"vsp.ftp.enabled",hideLabel:true,boxLabel:"FTP access enabled",listeners:{check:function(b,a){if(a){this.getForm().findField("vsp.ftp.username").enable();this.getForm().findField("vsp.ftp.password").enable();this.getForm().findField("vsp.ftp.password2").enable()}else{this.getForm().findField("vsp.ftp.username").disable();this.getForm().findField("vsp.ftp.password").disable();this.getForm().findField("vsp.ftp.password2").disable()}}.createDelegate(this)}},{xtype:"textfield",name:"vsp.ftp.username",fieldLabel:"Username",width:400},{xtype:"textfield",name:"vsp.ftp.password",inputType:"password",fieldLabel:"Password",width:400},{xtype:"textfield",name:"vsp.ftp.password2",inputType:"password",fieldLabel:"Confirm Password",width:400}];this.buttons=[{text:Resources.get("button.save"),handler:this.onSave.createDelegate(this)},{text:Resources.get("button.reset"),handler:function(){}}];Pld.FtpSettings.superclass.initComponent.call(this,arguments)},onRender:function(b,a){Pld.FtpSettings.superclass.onRender.call(this,b,a);this.addClass("centered-panel");this.loadFtpForm();this.findParentByType("pld-ftp-settings-page").on("activate",this.loadFtpForm,this)}});Ext.reg("pld-ftp-settings",Pld.FtpSettings);Pld.FtpSettingsPage=Ext.extend(Ext.Panel,{initComponent:function(){this.items={xtype:"pld-ftp-settings"};Pld.FtpSettingsPage.superclass.initComponent.call(this)}});Ext.reg("pld-ftp-settings-page",Pld.FtpSettingsPage);
Pld.DefenceProSettings=Ext.extend(Ext.form.FormPanel,{style:"padding-top: 20px",bodyStyle:{"background-color":"#ffffff"},border:false,width:400,labelAlign:"top",method:"POST",cls:"centered-panel",loadDevicesForm:function(){this.load({url:"getDefenceProConfig",params:{dummy:"Content-Length bug fix."},failure:formFailure})},initComponent:function(){this.items=[{xtype:"hidden",name:"group",value:"vsp.defencepro"},{xtype:"checkbox",name:"vsp.defencepro.enabled",hideLabel:true,boxLabel:"DefensePro enabled",listeners:{check:function(b,a){if(a){this.getForm().findField("vsp.defencepro.ip").enable();this.getForm().findField("vsp.defencepro.username").enable();this.getForm().findField("vsp.defencepro.password").enable()}else{this.getForm().findField("vsp.defencepro.ip").disable();this.getForm().findField("vsp.defencepro.username").disable();this.getForm().findField("vsp.defencepro.password").disable()}}.createDelegate(this)}},{xtype:"textfield",name:"vsp.defencepro.ip",fieldLabel:"Url for blacklist",vtype:"url",width:400},{xtype:"textfield",name:"vsp.defencepro.username",fieldLabel:"Username",width:400},{xtype:"textfield",name:"vsp.defencepro.password",inputType:"password",fieldLabel:"Password",width:400}];this.buttons=[{text:Resources.get("button.save"),handler:function(){this.getForm().submit({url:"setDefenceProConfig",method:"POST",clientValidation:false,waitMsg:Resources.get("messagebox.saving"),success:function(){info("Settings saved.")},failure:formFailure})}.createDelegate(this)},{text:Resources.get("button.reset"),handler:function(){}}];Pld.DefenceProSettings.superclass.initComponent.call(this,arguments)},onRender:function(b,a){Pld.DefenceProSettings.superclass.onRender.call(this,b,a);this.addClass("centered-panel");this.loadDevicesForm();this.findParentByType("pld-defence-pro-settings-page").on("activate",this.loadDevicesForm,this)}});Ext.reg("pld-defence-pro-settings",Pld.DefenceProSettings);Pld.DefenceProSettingsPage=Ext.extend(Ext.Panel,{initComponent:function(){this.items={xtype:"pld-defence-pro-settings"};Pld.DefenceProSettingsPage.superclass.initComponent.call(this)}});Ext.reg("pld-defence-pro-settings-page",Pld.DefenceProSettingsPage);
Pld.MailSettings=Ext.extend(Ext.form.FormPanel,{style:"padding-top: 20px",bodyStyle:{"background-color":"#ffffff"},border:false,width:400,labelAlign:"top",method:"POST",loadDevicesForm:function(){this.load({url:"getSMTPConfig",params:{dummy:"Content-Length bug fix. Mail."},failure:formFailure,success:this.updateEnabledItems.createDelegate(this)})},onSave:function(){this.getForm().submit({url:"setSMTPConfig",method:"POST",clientValidation:false,waitMsg:Resources.get("messagebox.saving"),success:info.createCallback("Settings saved."),failure:formFailure})},onTest:function(){Ext.Msg.prompt("Test E-Mail","Please specify a recipient to send an test e-mail to.",function(a,b){if(a=="ok"&&b){Ext.Ajax.request({url:"sendTestMail",success:function(d){var c=Ext.decode(d.responseText);if(c.success){info("Success. Test mail sent to the recipient.")}else{error("Error: Mail could not be sent: "+c.errorMsg)}},failure:formFailure,params:{recipient:b}})}else{if(a=="ok"&&!b){Ext.Msg.alert("Warning","No recipient specified")}}}.createDelegate(this))},initComponent:function(){this.buttons=[{text:Resources.get("button.save"),handler:this.onSave.createDelegate(this)},{text:"Reset to the current saved settings",handler:function(){this.loadDevicesForm()}.createDelegate(this)},{id:"testMailBtn",text:"Send test mail",handler:this.onTest.createDelegate(this)}];this.items=[{xtype:"hidden",name:"group",value:"vsp.smtp"},{xtype:"checkbox",name:"vsp.smtp.enabled",hideLabel:true,boxLabel:"SMTP access enabled",listeners:{check:function(b,a){if(a){this.getForm().findField("vsp.smtp.server").enable();this.getForm().findField("vsp.smtp.auth_required").enable();this.getForm().findField("vsp.smtp.sender").enable();this.getForm().findField("vsp.smtp.subject").enable();if(this.getForm().findField("vsp.smtp.auth_required").getValue()){this.getForm().findField("vsp.smtp.username").enable();this.getForm().findField("vsp.smtp.password").enable()}this.getForm().findField("vsp.smtp.tls").enable();Ext.getCmp("testMailBtn").enable()}else{this.getForm().findField("vsp.smtp.server").disable();this.getForm().findField("vsp.smtp.sender").disable();this.getForm().findField("vsp.smtp.subject").disable();this.getForm().findField("vsp.smtp.tls").disable();this.getForm().findField("vsp.smtp.auth_required").disable();this.getForm().findField("vsp.smtp.username").disable();this.getForm().findField("vsp.smtp.password").disable();Ext.getCmp("testMailBtn").disable()}}.createDelegate(this)}},{xtype:"checkbox",name:"vsp.smtp.tls",hideLabel:true,boxLabel:"Secure SMTP (TLS)"},{xtype:"textfield",name:"vsp.smtp.server",fieldLabel:"SMTP-Server",allowBlank:false,width:400},{xtype:"textfield",name:"vsp.smtp.port",fieldLabel:"SMTP-Port",allowBlank:false,width:400},{xtype:"textfield",name:"vsp.smtp.sender",fieldLabel:"Mail sender",allowBlank:false,width:400},{xtype:"textfield",name:"vsp.smtp.subject",fieldLabel:"Subject prefix (optional)",width:400},{xtype:"checkbox",name:"vsp.smtp.auth_required",hideLabel:true,boxLabel:"Authentication required",listeners:{check:function(b,a){if(a){this.getForm().findField("vsp.smtp.username").enable();this.getForm().findField("vsp.smtp.password").enable()}else{this.getForm().findField("vsp.smtp.username").disable();this.getForm().findField("vsp.smtp.password").disable()}}.createDelegate(this)}},{xtype:"textfield",name:"vsp.smtp.username",fieldLabel:"Username",allowBlank:false,width:400},{xtype:"textfield",name:"vsp.smtp.password",inputType:"password",fieldLabel:"Password",allowBlank:false,width:400}];Pld.MailSettings.superclass.initComponent.call(this,arguments);this.on("show",this.loadDevicesForm,this)},updateEnabledItems:function(){this.getForm().findField("vsp.smtp.enabled").initValue();this.getForm().findField("vsp.smtp.server").initValue();this.getForm().findField("vsp.smtp.sender").initValue();this.getForm().findField("vsp.smtp.subject").initValue();this.getForm().findField("vsp.smtp.tls").initValue();this.getForm().findField("vsp.smtp.auth_required").initValue();this.getForm().findField("vsp.smtp.username").initValue();this.getForm().findField("vsp.smtp.password").initValue();if(this.getForm().findField("vsp.smtp.enabled").getValue()){this.getForm().findField("vsp.smtp.server").enable();this.getForm().findField("vsp.smtp.auth_required").enable();this.getForm().findField("vsp.smtp.sender").enable();this.getForm().findField("vsp.smtp.subject").enable();if(this.getForm().findField("vsp.smtp.auth_required").getValue()){this.getForm().findField("vsp.smtp.username").enable();this.getForm().findField("vsp.smtp.password").enable()}else{this.getForm().findField("vsp.smtp.username").disable();this.getForm().findField("vsp.smtp.password").disable()}this.getForm().findField("vsp.smtp.tls").enable();Ext.getCmp("testMailBtn").enable()}else{this.getForm().findField("vsp.smtp.server").disable();this.getForm().findField("vsp.smtp.sender").disable();this.getForm().findField("vsp.smtp.subject").disable();this.getForm().findField("vsp.smtp.tls").disable();this.getForm().findField("vsp.smtp.auth_required").disable();this.getForm().findField("vsp.smtp.username").disable();this.getForm().findField("vsp.smtp.password").disable();Ext.getCmp("testMailBtn").disable()}},onRender:function(b,a){Pld.MailSettings.superclass.onRender.call(this,b,a);this.addClass("centered-panel");this.findParentByType("pld-mail-settings-page").on("activate",this.loadDevicesForm,this);this.loadDevicesForm()}});Ext.reg("pld-mail-settings",Pld.MailSettings);Pld.MailSettingsPage=Ext.extend(Ext.Panel,{initComponent:function(){this.items={xtype:"pld-mail-settings"};Pld.MailSettingsPage.superclass.initComponent.call(this)}});Ext.reg("pld-mail-settings-page",Pld.MailSettingsPage);
Pld.SnmpSettings=Ext.extend(Ext.form.FormPanel,{style:"padding-top: 20px",bodyStyle:{"background-color":"#ffffff"},border:false,width:400,labelAlign:"top",method:"POST",defaults:{xtype:"textfield",width:350},loadForm:function(){this.load({url:"getSnmpConfig",params:{dummy:"Content-Length bug fix."},failure:formFailure});this.updateEnabledItems()},onSave:function(){var a=this.getForm().getValues();if((a["vsp.snmp.snmp_enabled"]||a["vsp.snmp.snmpd_enabled"])&&!this.getForm().isValid()){Ext.Msg.show({title:"Error",msg:"The form is not correctly filed. Please check your input.",icon:Ext.MessageBox.ERROR,buttons:Ext.Msg.OK});return}if(a["vsp.snmp.snmpd_enabled"]&&(!a["vsp.snmp.snmpd_community"]||!a["vsp.snmp.snmpd_port"])){Ext.Msg.show({title:"Error",msg:"The SNMP data is not correctly filed. Please check your input.",icon:Ext.MessageBox.ERROR,buttons:Ext.Msg.OK})}else{if(a["vsp.snmp.snmp_enabled"]&&(!a["vsp.snmp.snmp_community"]||!a["vsp.snmp.snmp_manager_ip"]||!a["vsp.snmp.snmp_manager_port"])){Ext.Msg.show({title:"Error",msg:"The SNMP trap data is not correctly filed. Please check your input.",icon:Ext.MessageBox.ERROR,buttons:Ext.Msg.OK})}else{this.getForm().submit({url:"setSnmpConfig",method:"POST",clientValidation:false,success:function(){info("SNMP settings applied.");this.loadForm()}.createDelegate(this)})}}},onReset:function(){this.loadForm()},onTest:function(){Ext.Msg.show({title:"Please confirm..",msg:"This will send a test trap to the SNMP manager using the current (saved) configuration. Do you want to continue?",icon:Ext.MessageBox.INFO,buttons:Ext.Msg.YESNO,fn:function(a){if(a=="yes"){Ext.iptego.request({url:"testSnmpConfig",successHandler:function(){info("SNMP trap sent succesfully.")},waitMsg:"Sending SNMP trap"})}}})},buildItems:function(){this.items=[{xtype:"hidden",name:"group",value:"vsp.snmp"},{xtype:"checkbox",name:"vsp.snmp.snmp_enabled",hideLabel:true,boxLabel:"SNMP traps enabled",id:"set_snmp_enabled"},{name:"vsp.snmp.snmp_community",fieldLabel:"SNMP community string",value:"public",allowBlank:true,id:"set_snmp_comunity"},{fieldLabel:"SNMP trap target IP address",name:"vsp.snmp.snmp_manager_ip",vtype:"ip",allowBlank:true,id:"set_snmp_trap_target"},{fieldLabel:"SNMP trap target UDP port number",name:"vsp.snmp.snmp_manager_port",vtype:"int",allowBlank:true,id:"set_snmp_trap_target_port"},{xtype:"checkbox",name:"vsp.snmp.snmpd_enabled",hideLabel:true,boxLabel:"SNMP daemon enabled",id:"set_snmpd_enabled"},{name:"vsp.snmp.snmpd_community",fieldLabel:"SNMP daemon community string",value:"public",allowBlank:true,id:"set_snmpd_community"},{fieldLabel:"SNMP daemon UDP port number to bind to",name:"vsp.snmp.snmpd_port",vtype:"int",allowBlank:true,id:"set_snmpd_port"},{fieldLabel:"MIB file for values exported by PALLADION via SNMP",html:'<a href="mibs/palladion.mib">Download MIB file</a>',xtype:"panel",border:false}]},buildButtons:function(){this.buttons=[{text:Resources.get("button.save"),handler:this.onSave.createDelegate(this)},{text:"Reset/Reload",handler:this.onReset.createDelegate(this)},{text:"Send test trap",handler:this.onTest.createDelegate(this)}]},updateEnabledItems:function(){var a=this.getComponent("set_snmpd_enabled").getValue();this.getComponent("set_snmpd_community").setDisabled(!a);this.getComponent("set_snmpd_port").setDisabled(!a);a=this.getComponent("set_snmp_enabled").getValue();this.getComponent("set_snmp_comunity").setDisabled(!a);this.getComponent("set_snmp_trap_target").setDisabled(!a);this.getComponent("set_snmp_trap_target_port").setDisabled(!a)},initComponent:function(){this.buildButtons();this.buildItems();Pld.SnmpSettings.superclass.initComponent.call(this,arguments)},onRender:function(b,a){Pld.SnmpSettings.superclass.onRender.call(this,b,a);this.getComponent("set_snmpd_enabled").on("check",this.updateEnabledItems,this);this.getComponent("set_snmp_enabled").on("check",this.updateEnabledItems,this);this.addClass("centered-panel");this.findParentByType("pld-snmp-settings-page").on("activate",this.loadForm,this);this.loadForm()}});Ext.reg("pld-snmp-settings",Pld.SnmpSettings);Pld.SnmpSettingsPage=Ext.extend(Ext.Panel,{initComponent:function(){this.items=[new Pld.SnmpSettings()];Pld.SnmpSettingsPage.superclass.initComponent.call(this)}});Ext.reg("pld-snmp-settings-page",Pld.SnmpSettingsPage);
Pld.CollectorSettings=Ext.extend(Ext.form.FormPanel,{style:"padding-top: 20px",bodyStyle:{"background-color":"#ffffff"},border:false,width:400,labelAlign:"top",method:"POST",defaults:{xtype:"textfield",width:350},loadForm:function(){this.load({url:"getCollectorConfig",params:{dummy:"Content-Length bug fix."},failure:formFailure});this.updateEnabledItems()},onSave:function(){var a=this.getForm().getValues();if(!this.getForm().isValid()){Ext.Msg.show({title:"Error",msg:"The form is not correctly filed. Please check your input.",icon:Ext.MessageBox.ERROR,buttons:Ext.Msg.OK});return}this.getForm().submit({url:"setCollectorConfig",method:"POST",clientValidation:false,success:function(){info("Collector settings applied.");this.loadForm()}.createDelegate(this)})},onReset:function(){this.loadForm()},buildItems:function(){this.items=[{xtype:"hidden",name:"group",value:"vsp.collector"},{xtype:"checkbox",name:"vsp.collector.collector_enabled",hideLabel:true,boxLabel:"VQ collector enabled",id:"set_collector_enabled"},{fieldLabel:"VQ Collector IP address",name:"vsp.collector.collector_ip",vtype:"ip",allowBlank:true,id:"set_collector_target"},{fieldLabel:"VQ Collector port number",name:"vsp.collector.collector_port",vtype:"int",allowBlank:true,id:"set_collector_target_port"}]},buildButtons:function(){this.buttons=[{text:Resources.get("button.save"),handler:this.onSave.createDelegate(this)},{text:"Reset/Reload",handler:this.onReset.createDelegate(this)}]},updateEnabledItems:function(){var a=this.getComponent("set_collector_enabled").getValue();this.getComponent("set_collector_target").setDisabled(!a);this.getComponent("set_collector_target_port").setDisabled(!a)},initComponent:function(){this.buildButtons();this.buildItems();Pld.CollectorSettings.superclass.initComponent.call(this,arguments)},onRender:function(b,a){Pld.CollectorSettings.superclass.onRender.call(this,b,a);this.getComponent("set_collector_enabled").on("check",this.updateEnabledItems,this);this.addClass("centered-panel");this.findParentByType("collector-settings-page").on("activate",this.loadForm,this);this.loadForm()}});Ext.reg("collector-settings",Pld.CollectorSettings);Pld.CollectorSettingsPage=Ext.extend(Ext.Panel,{initComponent:function(){this.items=[new Pld.CollectorSettings()];Pld.CollectorSettingsPage.superclass.initComponent.call(this)}});Ext.reg("collector-settings-page",Pld.CollectorSettingsPage);
Pld.DataSources=Ext.extend(Ext.TabPanel,{deferredRender:false,activeItem:0,initComponent:function(){this.items=[{title:"Import from CSV",items:[new Pld.ExternalCsvImport]},{title:"MySQL Data-Sources",items:[new Pld.MysqlSourcesPanel()]},{title:"SQL-Queries",items:[new Pld.MysqlQueriesPanel()]},{title:"Upload files",items:[new Pld.ExternalFiles()]}];Pld.DataSources.superclass.initComponent.call(this)}});Ext.reg("pld-data-sources",Pld.DataSources);Pld.SettingsDialog.registerSection("external-devices-section","External Devices","76ui-extdev.html","panel",["set_external_devices"]);Pld.SettingsDialog.registerPage("external-devices-section","radius-settings","RADIUS Authentication","76ui-extdev.html#radius-authentication","pld-radius-settings-page");Pld.SettingsDialog.registerPage("external-devices-section","snmp-settings","SNMP Options","76ui-extdev.html#snmp-options","pld-snmp-settings-page");Pld.SettingsDialog.registerPage("external-devices-section","mail-settings","SMTP Server","76ui-extdev.html#smtp-options","pld-mail-settings-page");Pld.SettingsDialog.registerPage("external-devices-section","ftp-settings","FTP Server","76ui-extdev.html#ftp-server","pld-ftp-settings-page");Pld.SettingsDialog.registerPage("external-devices-section","data-source-settings","External Data Sources","76ui-extdev.html#mysql-data-sources","pld-data-sources");Pld.SettingsDialog.registerPage("external-devices-section","collector-settings","VQ Collector","76ui-extdev.html#collector-options","collector-settings-page");
Pld.SavepointsPanel=Ext.extend(Ext.iptego.Grid,{autoExpandColumn:"name",resourceid:"savepoints.panel",initComponent:function(){this.store=new Ext.data.JsonStore({url:"listApplianceConfigurations",root:"configurations",fields:["name","version","date"],idProperty:"name"});this.columns=[{id:"name",dataIndex:"name"},{dataIndex:"date",width:180}];this.topToolbar=[];this.topToolbar.push({name:"createSavepoint",callback:function(){Ext.iptego.request({url:"saveApplianceConfiguration",waitMsg:"PALLADION is creating a configuration savepoint...",successHandler:function(a){this.store.reload()}.createDelegate(this)})}.createDelegate(this)});this.topToolbar.push({name:"restoreSavepoint",callback:function(a){Ext.Msg.confirm("Restore savepoint","Do you really restore the selected configuration savepoint? This will overwrite your current configuration.",function(b,c){if(b=="ok"){Ext.iptego.request({url:"restoreApplianceConfiguration",params:{configuration:a.name},waitMsg:"PALLADION is restoring the configuration..."})}}.createDelegate(this))}.createDelegate(this),selectionRequired:true});this.topToolbar.push("|");this.topToolbar.push({name:"downloadApplianceConfiguration",callback:function(a){Ext.iptego.requestFile({url:"downloadApplianceConfiguration",params:{name:a.name}})}.createDelegate(this),selectionRequired:true});this.topToolbar.push({name:"uploadApplianceConfiguration",callback:function(){var b=new Ext.form.FormPanel({style:"padding: 10px;",border:false,fileUpload:true,method:"POST",url:"uploadApplianceConfiguration",items:[{xtype:"textfield",fieldLabel:"Configuration file",name:"configuration",inputType:"file",allowBlank:false}]});var a=new Ext.Window({bodyStyle:{"background-color":"#ffffff"},title:"Upload saved configuration",width:470,items:b,buttons:[{text:"Cancel",handler:function(){a.close()}},{text:"Upload",handler:function(){console.log("Submitting...");b.getForm().submit({success:function(c,d){a.close();this.store.reload()}.createDelegate(this),failure:function(c,d){a.close();if(!Ext.isEmpty(d.result)&&!Ext.isEmpty(d.result.errorMsg)){error(d.result.errorMsg)}else{error("An unknown error happend, when uploading the file")}}.createDelegate(this)})}.createDelegate(this)}]});a.show()}.createDelegate(this)});this.topToolbar.push({name:"deleteApplianceConfiguration",callback:function(a){Ext.iptego.request({url:"deleteApplianceConfiguration",params:{name:a.name},successHandler:function(){this.store.reload()}.createDelegate(this)})}.createDelegate(this),selectionRequired:true});Pld.SavepointsPanel.superclass.initComponent.call(this)}});Ext.reg("pld-savepoints-panel",Pld.SavepointsPanel);Pld.SettingsDialog.registerSection("savepoints-section","Configuration Savepoints","80ui-savepoints.html","pld-savepoints-panel",["set_export_import"]);
Pld.SettingsDialog.registerSection("user-management-section",Resources.get("module.user_management.headline"),"79ui-userman.html","pld-user-management",["set_create_users"]);
Ext.namespace("Pld.User");Ext.override(Ext.Component,{stateful:false});Pld.Modules=[MAIN,USER_TRACKING,IP_TRACKING,MONITORING,SERVERS,TRACES,ALERTS,CALLVIEWER,REG_VIEWER,RESPONSE_TIMES,VOICE_QUALITY,RTP_RECORDING,USER_DEVICES,AUTHENTICATION,SPIT,PING_MONITORING,SCRIPTS,DEVICES,"device_detail","trunks"];Pld.init=function(){Ext.BLANK_IMAGE_URL="images/default/s.gif";Ext.QuickTips.init();Ext.apply(Ext.QuickTips.getQuickTip(),{dismissDelay:10000});Pld.CallFlowMessageMgr=new Ext.WindowGroup();Pld.CallFlowMessageMgr.zseed=9500;if(!authenticated){new Ext.iptego.LoginWindow({listeners:{loggedin:Pld.startup}}).show()}else{Pld.User.permissions=Permissions;Pld.User.options=Ext.decode(Options)||{};Pld.User.dashboardDefaults=Ext.decode(window.DashboardDefaults||{});Pld.User.id=UserId;Pld.startup()}delete Permissions;delete Options};Pld.startup=function(b){if(!Ext.isEmpty(b)){Ext.apply(Pld.User,b);Ext.get("topNavigation_user_label").update("Logged in as: ");Ext.get("topNavigation_userName").update(b.user_name);Ext.getBody().unmask()}showRestrictedContainers();var c=DEBUG&&getLocationHashmark();function d(){var g=Pld.Modules.length;var f=new Array(g);for(var h=0;h<g;h++){f[h]={xtype:Pld.Modules[h]+"_page"}}return f}Pld.Application=new Ext.Panel({id:"main_card_layout_panel",layout:"card",border:true,monitorResize:true,layoutConfig:{deferredRender:true},baseCls:"nostyle",items:d()});Pld.Application.render("content");loadContent(c||loadedModule);Pld.Traffic.init();Pld.Limits.init();Pld.ExportsIcon.init();Ext.QuickTips.init();var e="The connection to the server is interrupted. This can be due to a reboot, a slow connection or high load.";var a=Ext.get("connectionError").first("img");new Ext.QuickTip().register({target:a,text:e});setCustomLogo()};function shutdown(){Pld.Application.hide();traffic.stop();unmarkSelected()}function loadContent(a){Ext.WindowMgr.hideAll();Pld.Application.getLayout().setActiveItem(a+"_card");if((Ext.isIE||Ext.isChrome)&&Pld.Application.getLayout().activeItem){Pld.Application.getLayout().activeItem.doLayout()}this.loadedModule=a;markSelected();Ext.Ajax.request({url:"menu",params:{module:a},success:DEBUG?updateLocationHashmark.createCallback(a):Ext.emptyFn});return false}function unmarkSelected(){Ext.select("#menu li, #menu span").removeClass("selected")}function markSelected(){unmarkSelected();if(this.loadedModule!="admin"&&this.loadedModule!="test"){var a=Ext.get("nav_"+this.loadedModule);var b=a.child("span");a.addClass("selected");b.addClass("selected");var c=a.parent();if(c.hasClass("submenu")){a=c.parent();b=a.child("span");a.addClass("selected");b.addClass("selected")}}}function setCustomLogo(){var b=Ext.get("logo");var a=b.down("img");if(!a){a=b.createChild({tag:"img"})}a.dom.src="customLogo?nocache="+new Date().getTime()}function showRestrictedContainers(){var b=Pld.User.permissions;b.menuTop=Pld.hasPermission("nav_main","nav_dumps","nav_alerts","nav_utrack","nav_iptrack");b.menuHealth=Pld.hasPermission("nav_voiceq","nav_rtp_recording","nav_uastats","nav_callviewer","nav_regviewer");b.menuNetwork=Pld.hasPermission("nav_devices","nav_times","nav_servers","nav_ping_monitoring");b.menuAbuse=Pld.hasPermission("nav_spit","nav_authmon");b.menuBottom=Pld.hasPermission("menuHealth","menuAbuse","menuNetwork","nav_monitor");b.menuBar=Pld.hasPermission("menuTop","menuBottom");b.nav_admin=Pld.hasPermission("set_appliance","set_platform","set_create_users","set_external_devices","set_system_management");var a=[];Ext.select(".restricted, .restrictedBlock").each(function(c){Ext.each(c.dom.id.split(" "),function(d){if(b[d]){if(c.dom.className.indexOf("Block")>-1){c.dom.style.display="block"}else{c.dom.style.display="inline"}if(d.indexOf("nav_")==0){a.push(d.substring(4))}return}})});if(a.length==1){loadedModule=a[0];Ext.get("menu").setVisibilityMode(Ext.Element.DISPLAY).hide()}else{if(a.length==0){}else{Ext.each(module_nav_order,function(c){if(a.indexOf(c)>=0){loadedModule=c;return false}})}}}function InvalidateUser(){Ext.Msg.show({width:300,title:Resources.get("general.logout.title"),msg:Resources.get("general.logout"),buttons:Ext.Msg.YESNO,icon:Ext.MessageBox.WARNING,fn:function(a){if(a=="yes"){Ext.Msg.show({title:Resources.get("general.loggingout"),width:300,wait:true});Ext.Ajax.request({url:"logoutUser",success:function(){location.reload(true)}})}}})}Pld.Limits={warnIcon:null,warnTxt:null,qTip:null,url:"limits",interval:10000,init:function(){this.warnIcon=Ext.get("limitsWarn");this.warnIcon.enableDisplayMode("block");Ext.TaskMgr.start(this)},run:function(){Ext.iptego.request({url:this.url,successHandler:this.limitsSuccess,failureHandler:this.limitsFailure,connectErrHandler:Ext.emptyFn},this)},limitsSuccess:function(){if(this.warnIcon.isVisible()){if(this.qTip){this.qTip.unregister(this.warnIcon)}this.warnIcon.hide();this.warnTxt=null}if(Ext.getBody().isMasked()){Ext.getBody().unmask()}},limitsFailure:function(b){var c="";if(b.errorMsg.length){if(b.errorMsg=="Unauthorized"){return}toks=b.errorMsg.split("|");if(toks.length<4){c=b.errorMsg}else{for(var a=0;a<toks.length/4;a++){c+="The level of <b>"+toks[4*a+1]+"</b> ("+toks[4*a+3]+") is over the limit ("+toks[4*a+2]+"). <br />"}}}if(!this.warnIcon.isVisible()){this.warnIcon.show()}c="<h2>License error</h2><p>"+c+"</p>";c+='<p>Please contact IPTEGO or your systems integrator in order to refresh your license. You can install another license in the <a href="javascript:Pld.SettingsDialog.show();">settings dialog</a>.</p>';if(c.length&&c!=this.warnTxt){this.warnTxt=c;if(Ext.getBody().isMasked()){Ext.getBody().unmask()}Ext.getBody().mask(this.warnTxt)}}};Pld.ExportsIcon={exportsIcon:null,url:"exportsIconVisible",interval:10000,failureHandler:function(a){this.exportsIcon.hide()},connErrHandler:function(a){this.exportsIcon.hide()},run:function(){Ext.iptego.request({url:this.url,successHandler:function(a){if(a.visible){this.exportsIcon.show()}else{this.exportsIcon.hide()}},connectErrHandler:this.connErrHandler,failureHandler:this.failureHandler},this)},init:function(){this.exportsIcon=Ext.get("exportsIndicator");this.exportsIcon.enableDisplayMode("block");this.exportsIcon.on("click",Ext.iptego.ExportStatusWindow.show);this.scope=this;Ext.TaskMgr.start(this)}};Pld.Traffic={errorIcon:null,url:"traffic",interval:10000,failureHandler:function(a){this.container.hide();this.errorIcon.show();if(a.errorMsg=="Unauthorized"){Ext.Msg.alert("Session expired!","Your session expired. Please log in after PALLADION has reloaded.",function(b){if(b=="ok"){location.reload(true)}})}else{if(a.errorMsg){Ext.iptego.defaultFailure(a)}}},connErrHandler:function(a){this.container.hide();this.errorIcon.show()},run:function(){Ext.iptego.request({url:this.url,successHandler:this.updateDiodes,connectErrHandler:this.connErrHandler,failureHandler:this.failureHandler},this)},updateDiodes:function(f){if(this.errorIcon.isVisible()){this.errorIcon.hide()}var e=f.data;if(Ext.isEmpty(e)){this.container.hide();return}else{this.container.show()}var c={useDisplay:true};var b=Ext.get("traffic").select(".trafficItem");var h=null;for(var g=0;g<b.getCount();g++){var j=b.item(g);if(g<e.length){if(g==0){h=j.getViewSize()}var k=e[g];var d=k.speed<<3;d/=1000000;j.update(floatRenderer(d));Ext.QuickTips.register({target:j,text:k.name});var a=k.speed==0?"off":"on";if(!j.hasClass(a)){if(a=="off"){j.replaceClass("on","off")}else{j.replaceClass("off","on")}}if(!j.isVisible()){j.scale(h.width,h.height).fadeIn()}}else{if(Ext.isIE6){j.update(" ")}j.fadeOut().scale(0,0)}}},init:function(){Ext.get("traffic").on("click",this.toggle,this);this.errorIcon=Ext.get("connectionError");this.errorIcon.enableDisplayMode("block");this.container=Ext.get("trafficContainer");this.scope=this;Ext.TaskMgr.start(this)},toggle:function(){Ext.TaskMgr.stop(this);this.url=this.url=="traffic"?"traffic?all=false":"traffic";Ext.TaskMgr.start(this)}};logHandler=function(b,a){this.logData={type:a};if(typeof b=="object"){if(b.msg){this.logData.msg=b.msg}else{this.logData.msg="no message avaliable"}if(b.attributes){this.logData.attributes=b.attributes}if(b.instance){this.logData.instance=b.instance}if(b.prefix){this.logData.prefix=b.prefix}}if(typeof b=="string"){if(b){this.logData.msg=b}else{this.logData.msg="no message avaliable"}}Ext.Ajax.request({url:"log",params:{logData:Ext.util.JSON.encode(logData)}})};clearState=function(){Pld.Application.cascade(function(a){if(a.stateful){Ext.state.Manager.clear(a.stateId||a.id)}return true});location.reload(true)};
