/*
 * Tine 2.0 USER CLIENT
 * 
 * license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * copyright   Copyright (c) 2007-2009 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 * FOR MORE DETAILED LICENSE AND COPYRIGHT INFORMATION PLEASE CONSULT THE LICENSE FILE 
 * LOCATED AT: <YOUR TINE 2.0 URL>/LICENSE OR VISIT THE TINE 2.0 HOMEPAGE AT http://www.tine20.org
 */
Ext.apply(Ext.form.VTypes,{emailFixed:/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i,email:function(a){return this.emailFixed.test(a)}});Ext.form.DateField.prototype.setValue=function(a){this.fullDateTime=a;Ext.form.DateField.superclass.setValue.call(this,this.formatDate(this.parseDate(a)))};Ext.form.DateField.prototype.getValue=function(){value=this.fullDateTime;return value||""};Date.parseIso=function(a){return Date.parseDate(a.replace(/\+\d{2}\d{2}/,""),"Y-m-d\\Th:i:s")};Ext.Window.prototype.rename=function(a){this.manager.unregister(this);this.id=a;this.manager.register(this)};Ext.ButtonToggleMgr=function(){var a={};function b(f,j){if(j){var h=a[f.toggleGroup];for(var d=0,c=h.length;d<c;d++){if(h[d]!=f){h[d].toggle(false)}}}}return{register:function(c){if(!c.toggleGroup){return}var d=a[c.toggleGroup];if(!d){d=a[c.toggleGroup]=[]}d.push(c);c.on("toggle",b)},unregister:function(c){if(!c.toggleGroup){return}var d=a[c.toggleGroup];if(d){d.remove(c);c.un("toggle",b)}},getSelected:function(f,j,h){var k=a[f];for(var d=0,c=k.length;d<c;d++){if(k[d].pressed===true){if(j){j.call(h||k[d],k[d])}return k[d]}}return}}}();(function(){if(window.google&&google.gears){return}var a=null;if(typeof GearsFactory!="undefined"){a=new GearsFactory()}else{try{a=new ActiveXObject("Gears.Factory");if(a.getBuildInfo().indexOf("ie_mobile")!=-1){a.privateSetGlobalObject(this)}}catch(b){if((typeof navigator.mimeTypes!="undefined")&&navigator.mimeTypes["application/x-googlegears"]){a=document.createElement("object");a.style.display="none";a.width=0;a.height=0;a.type="application/x-googlegears";document.documentElement.appendChild(a)}}}if(!a){return}if(!window.google){google={}}if(!google.gears){google.gears={factory:a}}})();if(!window.console){window.console={}}for(fn in {log:null,debug:null,info:null,warn:null,error:null,assert:null,dir:null,dirxml:null,group:null,groupEnd:null,time:null,timeEnd:null,count:null,trace:null,profile:null,profileEnd:null}){window.console[fn]=window.console[fn]||function(){}}if(window.google&&google.gears){var permission=google.gears.factory.getPermission("Tine 2.0","images/oxygen/32x32/actions/dialog-information.png","Tine 2.0 detected that gears is installed on your computer. Permitting Tine 2.0 to store information on your computer, will increase speed of the software.");if(permission){try{google.gears.localServer=google.gears.factory.create("beta.localserver");google.gears.localServer.store=google.gears.localServer.createManagedStore("tine20-store");google.gears.localServer.store.manifestUrl="Tinebase/js/tine20-manifest.js";google.gears.localServer.store.checkForUpdate();if(google.gears.localServer.store.updateStatus==3){console.info("gears localserver store failure: "+google.gears.localServer.store.lastErrorMessage);google.gears.localServer.removeManagedStore("tine20-store")}}catch(e){console.info("can't initialize gears: "+e)}}}Ext.BLANK_IMAGE_URL="library/ExtJS/resources/images/default/s.gif";Ext.QuickTips.init();Ext.grid.ColumnModel.defaultRenderer=Ext.util.Format.htmlEncode;Ext.grid.Column.prototype.renderer=Ext.util.Format.htmlEncode;Ext.apply(Ext.data.JsonStore.prototype,{url:"index.php",root:"results",idProperty:"id",totalProperty:"totalcount"});Ext.form.ComboBox.prototype.initComponent=Ext.form.ComboBox.prototype.initComponent.createSequence(function(){if(this.expandOnFocus){this.lazyInit=false;this.on("focus",function(){this.onTriggerClick()})}if(this.blurOnSelect){this.on("select",function(){this.blur(true);this.fireEvent("blur",this)},this)}});Ext.form.ComboBox.prototype.triggerAction="all";Date.patterns={ISO8601Long:"Y-m-d H:i:s",ISO8601Short:"Y-m-d",ISO8601Time:"H:i:s",ShortDate:"n/j/Y",LongDate:"l, F d, Y",FullDateTime:"l, F d, Y g:i:s A",MonthDay:"F d",ShortTime:"g:i A",LongTime:"g:i:s A",SortableDateTime:"Y-m-d\\TH:i:s",UniversalSortableDateTime:"Y-m-d H:i:sO",YearMonth:"F, Y"};Ext.util.JSON.encodeDate=function(b){var a=function(c){return c<10?"0"+c:c};return'"'+b.getFullYear()+"-"+a(b.getMonth()+1)+"-"+a(b.getDate())+" "+a(b.getHours())+":"+a(b.getMinutes())+":"+a(b.getSeconds())+'"'};Ext.util.Format=Ext.apply(Ext.util.Format,{euMoney:function(a){a.toString().replace(/,/,".");a=(Math.round(parseFloat(a)*100))/100;a=(a==Math.floor(a))?a+".00":((a*10==Math.floor(a*10))?a+"0":a);a=String(a);var f=a.split(".");var d=f[0];var b=f[1]?"."+f[1]:".00";var c=/(\d+)(\d{3})/;while(c.test(d)){d=d.replace(c,"$1.$2")}a=d+b;if(a.charAt(0)=="-"){return a.substr(1)+" -€"}return a+" €"},percentage:function(a){if(a===null){return"none"}if(!isNaN(a)){return a+" %"}},pad:function(b,a,f){if(!f){f="&nbsp;"}var d=a-b.length;for(var c=0;c<d;c++){b+=f}return b}});if(typeof Locale=="undefined"){var Locale=function(b,a){this._instance=true;this.LC_ALL="C";this.LC_COLLATE="C";this.LC_CTYPE="C";this.LC_MESSAGES="C";this.LC_MONETARY="C";this.LC_NUMERIC="C";this.LC_TIME="C";this.setlocale(b,a)}}Locale.VERSION="0.0.3";Locale.EXPORT=["LC_ALL","LC_COLLATE","LC_CTYPE","LC_MESSAGES","LC_MONETARY","LC_NUMERIC","LC_TIME"];Locale.EXPORT_OK=["setlocale"];Locale.EXPORT_TAGS={":common":Locale.EXPORT,":all":Locale.EXPORT.concat(Locale.EXPORT_OK)};Locale.prototype.TranslationLists={};Locale.LC_ALL="LC_ALL";Locale.LC_COLLATE="LC_COLLATE";Locale.LC_CTYPE="LC_CTYPE";Locale.LC_MESSAGES="LC_MESSAGES";Locale.LC_MONETARY="LC_MONETARY";Locale.LC_NUMERIC="LC_NUMERIC";Locale.LC_TIME="LC_TIME";Locale.setlocale=Locale.prototype.setlocale=function(b,a){return function(){if(a===null||typeof a=="undefined"){return this[b]}if(a==""){a=(window.navigator.browserLanguage||window.navigator.language||"C").replace(/^(.{2}).?(.{2})?.*$/,function(c,d,f){return d.toLowerCase()+(f?"_"+f.toUpperCase():"")})}switch(b){case Locale.LC_ALL:this.LC_ALL=a;this.LC_COLLATE=a;this.LC_CTYPE=a;this.LC_MESSAGES=a;this.LC_MONETARY=a;this.LC_NUMERIC=a;this.LC_TIME=a;break;case Locale.LC_COLLATE:case Locale.LC_CTYPE:case Locale.LC_MESSAGES:case Locale.LC_MONETARY:case Locale.LC_NUMERIC:case Locale.LC_TIME:this[b]=a;break;default:return false}return a}.call(this._instance?this:arguments.callee)};Locale.setlocale.LC_ALL="C";Locale.setlocale.LC_COLLATE="C";Locale.setlocale.LC_CTYPE="C";Locale.setlocale.LC_MESSAGES="C";Locale.setlocale.LC_MONETARY="C";Locale.setlocale.LC_NUMERIC="C";Locale.setlocale.LC_TIME="C";Locale.getTranslationData=function(b,a){var c="";if(Locale.prototype.TranslationLists[b]&&Locale.prototype.TranslationLists[b][a]){c=Locale.prototype.TranslationLists[b][a]}return c};Locale.getTranslationList=function(a){return Locale.prototype.TranslationLists[a]};Locale.Gettext=function(a){this.locale=typeof a=="string"?new Locale(Locale.LC_ALL,a):a||Locale;this.domain="messages";this.category=Locale.LC_MESSAGES;this.suffix="po";this.dir="."};Locale.Gettext.prototype.bindtextdomain=function(b,a){this.dir=a;this.domain=b};Locale.Gettext.prototype.textdomain=function(a){this.domain=a};Locale.Gettext.prototype.getmsg=function(d,c,b){var a=this._getkey(c,d);return Locale.Gettext.prototype._msgs[a]};Locale.Gettext.prototype._msgs={};Locale.Gettext.prototype._getkey=function(a,b){return this.dir+"/"+a+"/"+b};Locale.Gettext.prototype.dcgettext=function(c,b,a){var d=this.getmsg(c,a);return d?d.get(b)||b:b};Locale.Gettext.prototype.dcngettext=function(d,c,a,g,b){var f=this.getmsg(d,b);if(f){return(f.get(c,a)||[c,a])[f.plural(g)]}else{return g>1?a:c}};Locale.Gettext.prototype.dgettext=function(b,a){return this.dcgettext(b,a,this.category)};Locale.Gettext.prototype.dngettext=function(c,b,a,d){return this.dcngettext(c,b,a,d,this.category)};Locale.Gettext.prototype.gettext=Locale.Gettext.prototype._=Locale.Gettext.prototype._hidden=function(a){return this.dcgettext(this.domain,a,this.category)};Locale.Gettext.prototype.ngettext=Locale.Gettext.prototype.n_=Locale.Gettext.prototype.n_hidden=function(b,a,c){return this.dcngettext(this.domain,b,a,c,this.category)};Locale.Gettext.prototype.gettext_noop=Locale.Gettext.prototype.N_=function(a){return a};(function(){for(var a in Locale.Gettext.prototype){Locale.Gettext[a]=function(b){return function(){return b.apply(Locale.Gettext,arguments)}}(Locale.Gettext.prototype[a])}})();if(typeof Locale.Gettext.PO=="undefined"){Locale.Gettext.PO=function(a){if(typeof a=="string"||a instanceof String){this.msg=Locale.Gettext.PO.po2object(a)}else{if(a instanceof Object){this.msg=a}else{this.msg={}}}}}Locale.Gettext.PO.prototype.get=function(b,a){return typeof a!="undefined"?this.msg[b+", "+a]:this.msg[b]};Locale.Gettext.PO.prototype.plural=function(n){var nplurals,plural;eval((this.msg[""]+"Plural-Forms: nplurals=2; plural=n != 1\n").match(/Plural-Forms:(.*)\n/)[1]);return plural===true?1:plural===false?0:plural};Locale.Gettext.prototype._msgs.emptyDomain=new Locale.Gettext.PO(({}));Ext.namespace("Ext.ux");Ext.ux.ConnectionStatus=function(a){Ext.apply(this,a);Ext.ux.ConnectionStatus.superclass.constructor.call(this)};Ext.extend(Ext.ux.ConnectionStatus,Ext.Button,{status:"unknown",iconCls:"x-ux-connectionstatus-unknown",isSuppoeted:null,handler:function(){if(this.isSuppoeted){this.toggleStatus()}},initComponent:function(){Ext.ux.ConnectionStatus.superclass.initComponent.call(this);this.onlineText="("+_("online")+")";this.offlineText="("+_("offline")+")";this.unknownText="("+_("unknown")+")";if(Ext.isIE6||Ext.isIE7||!window.navigator||window.navigator.onLine===undefined){this.setStatus("unknown");this.isSupported=false}else{this.setStatus(window.navigator.onLine?"online":"offline");this.isSupported=true}Ext.getBody().on("offline",function(){this.setStatus("offline",true)},this);Ext.getBody().on("online",function(){this.setStatus("online",true)},this)},toggleStatus:function(){this.setStatus(this.status=="online"?"offline":"online")},setStatus:function(a){switch(a){case"online":this.status=a;this.setText(this.onlineText);this.setIconClass("x-ux-connectionstatus-online");break;case"offline":this.status=a;this.setText(this.offlineText);this.setIconClass("x-ux-connectionstatus-offline");break;case"unknown":this.status=a;this.setText(this.unknownText);this.setIconClass("x-ux-connectionstatus-unknown");this.hide();break;default:console.error('no such status:"'+a+'"');break}}});Ext.ns("Ext.ux","Ext.ux.direct");Ext.ux.direct.ZendFrameworkProvider=Ext.extend(Ext.direct.RemotingProvider,{initAPI:function(){for(var c in this.services){var a=c.split(".");var b=this.namespace[a[0]]||(this.namespace[a[0]]={});b[a[1]]=this.createMethod(a[0],Ext.apply(this.services[c],{name:a[1],len:this.services[c].parameters.length}))}},doCall:function(g,a,b){if(b[b.length-1].paramsAsHash){var f=b.shift();for(var d=0;d<a.parameters.length;d++){b.splice(d,0,f[a.parameters[d].name])}}return Ext.ux.direct.ZendFrameworkProvider.superclass.doCall.call(this,g,a,b)},getCallData:function(a){return{jsonrpc:"2.0",method:a.action+"."+a.method,params:a.data,id:a.tid}},onData:function(a,d,c){var b=Ext.decode(c.responseText);c.responseText={type:b.result?"rpc":"exception",result:b.result,tid:b.id};return Ext.ux.direct.ZendFrameworkProvider.superclass.onData.apply(this,arguments)}});Ext.Direct.PROVIDERS.zfprovider=Ext.ux.direct.ZendFrameworkProvider;Ext.ns("Ext.ux");Ext.ux.DatePickerWeekPlugin=function(a){Ext.apply(this,a||{})};Ext.ux.DatePickerWeekPlugin.prototype={weekHeaderString:"WK",init:function(a){a.onRender=a.onRender.createSequence(this.onRender,a);a.update=a.update.createSequence(this.update,a);a.handleDateClick=a.handleDateClick.createSequence(this.handleDateClick,a);a.showMonthPicker=a.showMonthPicker.createInterceptor(this.inspectMonthPickerClick,a);a.weekHeaderString=this.weekHeaderString;a.getRowEl=this.getRowEl.createDelegate(a);a.selectWeek=this.selectWeek.createDelegate(a);a.clearSelection=this.clearSelection.createDelegate(a)},onRender:function(){var b=Ext.DomQuery.selectNode("table[class=x-date-inner]",this.getEl().dom);var a=Ext.DomQuery.select("tr",b);for(var c=0;c<a.length;c++){Ext.DomHelper.insertFirst(a[c],c==0?'<th class="x-date-picker-wk-hd">'+this.weekHeaderString+"</th>":'<td class="x-date-picker-wk"><a class="x-date-date" tabindex="1" hidefocus="on" href="#"><em><span>'+c+"</span></em></td>")}this.update(this.value)},update:function(g,l,a){var d=g.getFirstDateOfMonth();var j=d.getDay()-this.startDay;if(j<=this.startDay){j+=7}var f=d.add(Date.DAY,-1*j+1);var b=Ext.DomQuery.select("td[class=x-date-picker-wk]",this.getEl().dom);for(var h=0,c;h<b.length;h++){c=Ext.id()+":"+f.add(Date.DAY,h*7).format("Y-m-d");b[h].firstChild.firstChild.innerHTML='<span id="'+c+'">'+f.add(Date.DAY,h*7).getWeekOfYear()+"</span>"}if(a){this.clearSelection();if(!Ext.isArray(a)){a=[a]}for(var h=0,k;h<a.length;h++){k=this.getRowEl(a[h]);this.selectWeek(k)}}},handleDateClick:function(c){target=c.getTarget("td[class=x-date-picker-wk]");if(target){var d=target.parentNode;var a=target.firstChild.firstChild.firstChild.innerHTML;if(Ext.DomQuery.select("td[class=x-date-prevday]",d).length>3){this.showPrevMonth()}else{if(Ext.DomQuery.select("td[class=x-date-nextday]",d).length>4){this.showNextMonth()}}d=this.getRowEl(a);var b=Date.parseDate(d.firstChild.firstChild.firstChild.firstChild.id.split(":")[1],"Y-m-d");this.setValue(b);this.clearSelection();this.selectWeek(d);this.fireEvent("select",this,this.value,a)}},getRowEl:function(a){var b=Ext.DomQuery.select("td[class=x-date-picker-wk]",this.getEl().dom);for(var d=0;d<b.length;d++){if(b[d].firstChild.firstChild.firstChild.innerHTML==a){var c=b[d].parentNode;break}}return c},clearSelection:function(){var a=Ext.DomQuery.selectNode("table[class=x-date-inner]",this.getEl().dom);var c=Ext.DomQuery.select("td",a);for(var b=0;b<c.length;b++){Ext.fly(c[b]).removeClass("x-date-selected")}},inspectMonthPickerClick:Ext.emptyFn,selectWeek:function(b){if(b){for(var a=1;a<b.childNodes.length;a++){Ext.fly(b.childNodes[a]).addClass("x-date-selected")}}}};Ext.namespace("Ext.ux");Ext.ux.ButtonLockedToggle=Ext.extend(Ext.Button,{enableToggle:true,toggle:function(a){if(a===undefined&&this.pressed){return}a=a===undefined?!this.pressed:a;if(a!=this.pressed){if(a){this.el.addClass("x-btn-pressed");this.pressed=true;this.fireEvent("toggle",this,true)}else{this.el.removeClass("x-btn-pressed");this.pressed=false;this.fireEvent("toggle",this,false)}if(this.toggleHandler){this.toggleHandler.call(this.scope||this,this,a)}}}});Ext.reg("btnlockedtoggle",Ext.ux.ButtonLockedToggle);Ext.reg("tbbtnlockedtoggle",Ext.ux.ButtonLockedToggle);if(Ext.grid.GridView.prototype.cellSelectorDepth<6){Ext.grid.GridView.prototype.cellSelectorDepth=6}Ext.namespace("Ext.ux");Ext.ux.PercentCombo=Ext.extend(Ext.form.ComboBox,{autoExpand:false,blurOnSelect:false,displayField:"value",valueField:"key",mode:"local",triggerAction:"all",emptyText:"percent ...",lazyInit:false,initComponent:function(){Ext.ux.PercentCombo.superclass.initComponent.call(this);if(!this.value){this.value=0}this.store=new Ext.data.SimpleStore({fields:["key","value"],data:[["0","0%"],["10","10%"],["20","20%"],["30","30%"],["40","40%"],["50","50%"],["60","60%"],["70","70%"],["80","80%"],["90","90%"],["100","100%"]]});if(this.autoExpand){this.lazyInit=false;this.on("focus",function(){this.selectByValue(this.getValue());this.onTriggerClick()})}if(this.blurOnSelect){this.on("select",function(){this.fireEvent("blur",this)},this)}},setValue:function(a){a=a?a:0;Ext.ux.PercentCombo.superclass.setValue.call(this,a)}});Ext.reg("extuxpercentcombo",Ext.ux.PercentCombo);Ext.ux.PercentRenderer=function(a){if(!Ext.ux.PercentRenderer.template){Ext.ux.PercentRenderer.template=new Ext.XTemplate('<div class="x-progress-wrap PercentRenderer">','<div class="x-progress-inner PercentRenderer">','<div class="x-progress-bar PercentRenderer" style="width:{percent}%">','<div class="PercentRendererText PercentRenderer">',"<div>{percent}%</div>","</div>","</div>",'<div class="x-progress-text x-progress-text-back PercentRenderer">',"<div>&#160;</div>","</div>","</div>","</div>").compile()}return Ext.ux.PercentRenderer.template.apply({percent:a})};Ext.namespace("Ext.ux");Ext.ux.PopupWindow=function(a){Ext.apply(this,a);Ext.ux.PopupWindow.superclass.constructor.call(this)};Ext.extend(Ext.ux.PopupWindow,Ext.Component,{url:null,name:"new window",width:500,height:500,modal:false,layout:"fit",title:null,contentPanelConstructor:null,contentPanelConstructorConfig:{},popup:null,windowManager:null,initComponent:function(){if(!this.title){this.title=Tine.title}this.windowManager=Ext.ux.PopupWindowMgr;Ext.ux.PopupWindow.superclass.initComponent.call(this);this.popup=Tine.Tinebase.common.openWindow(this.name,this.url,this.width,this.height);this.windowManager.register(this);this.addEvents({beforeclose:true,render:true,close:true})},rename:function(a){this.windowManager.unregister(this);this.name=this.popup.name=a;this.windowManager.register(this)},setTitle:function(b,a){if(this.popup&&this.popup.document){this.popup.document.title=b}},close:function(){if(this.fireEvent("beforeclose",this)!==false){this.fireEvent("close",this);this.purgeListeners();this.popup.close()}},onLoad:function(){this.Ext.onReady(function(){},this)},onClose:function(){}});Ext.ux.PopupWindowGroup=function(){var c={};var a=[];var b=null;var d=function(){var g;for(var h in c){try{g=c[h].popup.document;if(Ext.isChrome&&!g.defaultView){g=false}}catch(f){g=false}if(!g){a.remove(c[h]);delete c[h]}}};return{register:function(f){d();if(!f.popup){console.error("pure window instead of Ext.ux.PopupWindow got registered")}c[f.name]=f;a.push(f)},unregister:function(f){delete c[f.name];a.remove(f)},get:function(f){d();f=typeof f=="object"?f.name:f;return c[f]},bringToFront:function(f){f=this.get(f);if(f!=b){f._lastAccess=new Date().getTime();f.popup.focus();return true}return false},getBy:function(h,g){d();var j=[];for(var f=a.length-1;f>=0;--f){var k=a[f];if(h.call(g||k,k)!==false){j.push(k)}}return j},each:function(g,f){d();for(var h in c){if(c[h]&&typeof c[h]!="function"){if(g.call(f||c[h],c[h])===false){return}}}}}};Ext.ux.PopupWindowGroup.MainWindowName="MainWindow";Ext.ux.PopupWindowGroup.getMainWindow=function(){var a=window;try{while(a.name!=Ext.ux.PopupWindowGroup.MainWindowName){a=a.opener;if(!a){return false}}}catch(b){a.name=Ext.ux.PopupWindowGroup.MainWindowName;return false}return a};var mainWindow=Ext.ux.PopupWindowGroup.getMainWindow();if(!mainWindow||mainWindow==window){Ext.ux.PopupWindowMgr=new Ext.ux.PopupWindowGroup();window.name=Ext.ux.PopupWindowGroup.MainWindowName;window.isMainWindow=true}else{Ext.ux.PopupWindowMgr=Ext.ux.PopupWindowGroup.getMainWindow().Ext.ux.PopupWindowMgr;window.isMainWindow=false}Ext.namespace("Ext.ux.Notification");Ext.ux.Notification=function(){return{show:function(c,b){var a=window.location.href.replace(/#+.*/,"")+"/images/tine_logo.png";if(window.jetpack!==undefined){jetpack.notifications.show({title:c,body:b,icon:a})}else{if(window.callout!==undefined){callout.notify(c,b,{icon:a,href:document.location.href})}else{}}}}}();Ext.namespace("Ext.ux");Ext.ux.WindowFactory=function(a){Ext.apply(this,a);switch(this.windowType){case"Browser":this.windowClass=Ext.ux.PopupWindow;this.windowManager=Ext.ux.PopupWindowMgr;break;case"Ext":this.windowClass=Ext.Window;this.windowManager=Ext.WindowMgr;break;case"Air":this.windowClass=Ext.air.NativeWindow;this.windowManager=Ext.air.NativeWindowManager;break;default:console.error("No such windowType: "+this.windowType);break}};Ext.ux.WindowFactory.prototype={windowClass:null,windowManager:null,getBrowserWindow:function(a){var b=Ext.ux.PopupWindowMgr.get(a.name);if(!b){b=new this.windowClass(a)}Ext.ux.PopupWindowMgr.bringToFront(b);return b},getExtWindow:function(b){b.height=b.height+20;b.layout=b.layout||"fit";b.items=this.getContentPanel(b);b.modal=true;var a=new Ext.Window(b);b.items.window=a;a.show();return a},getContentPanel:function(c){var b;if(c.contentPanelConstructor){c.contentPanelConstructorConfig=c.contentPanelConstructorConfig||{};var a=c.contentPanelConstructorConfig.listeners;if(a){var f={};for(var j in a){if(a.hasOwnProperty(j)){if(a[j].fn){f[j]=function(){a[j].fn.call(a[j].scope,arguments[0],arguments[1],arguments[2],arguments[3],arguments[4])}}else{f[j]=function(){a[j].call(a.scope,arguments[0],arguments[1],arguments[2],arguments[3],arguments[4])}}}}c.contentPanelConstructorConfig.listeners=f}c.contentPanelConstructorConfig.window=c;var h=c.contentPanelConstructor.split(".");var g=window;for(var d=0;d<h.length;d++){g=g[h[d]]}var b=new g(c.contentPanelConstructorConfig)}else{b=c.items?c.items:{}}return b},getWindow:function(a){var b=(a.modal)?"Ext":this.windowType;a.name=Ext.isString(a.name)?a.name.replace(/[^a-zA-Z0-9_]/g,""):a.name;switch(b){case"Browser":return this.getBrowserWindow(a);break;case"Ext":return this.getExtWindow(a);break;case"Air":return this.getAirWindow(a);break;default:console.error("No such windowType: "+this.windowType);break}}};Ext.ux.SliderTip=Ext.extend(Ext.Tip,{minWidth:10,offsets:[0,-10],init:function(a){a.on("dragstart",this.onSlide,this);a.on("drag",this.onSlide,this);a.on("dragend",this.hide,this);a.on("destroy",this.destroy,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.namespace("Ext.ux");Ext.ux.Wizard=function(a){var b=Ext.apply({layout:"card",activeItem:0,bodyStyle:"paddingTop:15px",defaults:{border:false},buttons:[{text:"Previous",handler:this.movePrevious,scope:this,disabled:true},{text:"Next",handler:this.moveNext,scope:this},{text:"Finish",handler:this.finishHanlder,scope:this,disabled:true},{text:"Cancel",handler:this.hideHanlder,scope:this}]},a||{});this.currentItem=0;this.template=new Ext.Template("Step {current} of {count}");this.mandatorySteps=b.mandatorySteps;Ext.ux.Wizard.superclass.constructor.call(this,b);this.addEvents("leave","activate","finish","cancel");this.on("render",function(){this.footer.addClass("x-panel-footer-wizard");this.footer.insertFirst({html:'<div class="x-panel-footer-wizard-status">&nbsp;</div>'});this.setStatus();return true})};Ext.extend(Ext.ux.Wizard,Ext.Panel,{getCurrentStep:function(){return this.currentItem+1},getStepCount:function(){return this.items.items.length},setCurrentStep:function(a){this.move(a-1)},beforeMove:function(c,a,b){return this.fireEvent("leave",c,a,b)},setStatus:function(){var f=0;var c=1;var h=2;var a=3;var g=(this.getCurrentStep()==1);var b=(this.getCurrentStep()==this.getStepCount());var d=isNaN(parseInt(this.mandatorySteps))?this.getStepCount():Math.min(Math.max(parseInt(this.mandatorySteps),1),this.getStepCount());this.buttons[f].setDisabled(g);this.buttons[c].setDisabled(b);this.buttons[h].setDisabled(!(b||(d<this.getCurrentStep())));this.footer.first("div div",true).firstChild.innerHTML=this.template.applyTemplate({current:this.getCurrentStep(),count:this.getStepCount()})},move:function(a){if(a>=0&&a<this.items.items.length){if(this.beforeMove(this.layout.activeItem,this.items.items[a],a>this.currentItem)){this.layout.setActiveItem(a);this.currentItem=a;this.setStatus();this.fireEvent("activate",this.layout.activeItem)}}},moveNext:function(a,b){this.move(this.currentItem+1)},movePrevious:function(a,b){this.move(this.currentItem-1)},hideHanlder:function(){if(this.fireEvent("cancel")){this.hide()}},finishHanlder:function(){if(this.fireEvent("finish")){this.hide()}}});Ext.namespace("Ext.ux");Ext.ux.SearchField=Ext.extend(Ext.form.TwinTriggerField,{paramName:"query",selectOnFocus:true,emptyText:"",validationEvent:false,validateOnBlur:false,trigger1Class:"x-form-clear-trigger",trigger2Class:"x-form-search-trigger",hideTrigger1:true,width:180,hasSearch:false,initComponent:function(){this.emptyText=_("enter searchfilter");Ext.ux.SearchField.superclass.initComponent.call(this);this.on("specialkey",function(a,b){if(b.getKey()==b.ENTER){this.onTrigger2Click()}},this)},onTrigger1Click:function(){if(this.hasSearch){this.el.dom.value="";this.fireEvent("change",this,this.getRawValue(),this.startValue);this.startValue=this.getRawValue();this.triggers[0].hide();this.hasSearch=false}},onTrigger2Click:function(){var a=this.getRawValue();this.fireEvent("change",this,this.getRawValue(),this.startValue);this.startValue=this.getRawValue();this.hasSearch=true;this.triggers[0][a.length<1?"hide":"show"]()}});Ext.namespace("Ext.ux.form");Ext.ux.BrowseButton=Ext.extend(Ext.Button,{initComponent:function(){this.plugins=this.plugins||[];this.plugins.push(new Ext.ux.file.BrowsePlugin({}));Ext.ux.BrowseButton.superclass.initComponent.call(this)}});Ext.reg("browsebutton",Ext.ux.BrowseButton);Ext.namespace("Ext.ux","Ext.ux.grid");Ext.ux.grid.CheckColumn=function(a){Ext.apply(this,a);if(!this.id){this.id=Ext.id()}this.renderer=this.renderer.createDelegate(this)};Ext.ux.grid.CheckColumn.prototype={init:function(a){this.grid=a;this.grid.on("render",function(){var b=this.grid.getView();b.mainBody.on("mousedown",this.onMouseDown,this)},this)},onMouseDown:function(d,c){if(c.className&&c.className.indexOf("x-grid3-cc-"+this.id)!=-1){d.stopEvent();var b=this.grid.getView().findRowIndex(c);var a=this.grid.store.getAt(b);a.set(this.dataIndex,!a.data[this.dataIndex])}},renderer:function(b,c,a){c.css+=" x-grid3-check-col-td";return'<div class="x-grid3-check-col'+(b?"-on":"")+" x-grid3-cc-"+this.id+'">&#160;</div>'}};Ext.namespace("Ext.ux","Ext.ux.grid");Ext.ux.grid.QuickaddGridPanel=Ext.extend(Ext.grid.EditorGridPanel,{quickaddMandatory:false,resetAllOnNew:false,adding:false,initComponent:function(){this.idPrefix=Ext.id();Ext.ux.grid.QuickaddGridPanel.superclass.initComponent.call(this);this.addEvents("newentry");this.cls="x-grid3-quickadd";this.initTemplates();this.getView().afterRender=this.getView().afterRender.createSequence(this.renderQuickAddFields,this);this.quickaddHandlers={scope:this,blur:function(){this.doBlur.defer(250,this)},specialkey:function(a,b){if(b.getKey()==b.ENTER){b.stopEvent();a.el.blur();if(a.triggerBlur){a.triggerBlur()}}}}},renderQuickAddFields:function(){Ext.each(this.getVisibleCols(),function(a){if(a.quickaddField){a.quickaddField.render(this.idPrefix+a.id);a.quickaddField.setDisabled(a.id!=this.quickaddMandatory);a.quickaddField.on(this.quickaddHandlers)}},this);this.colModel.on("widthchange",this.syncFields,this);this.colModel.on("hiddenchange",this.syncFields,this);this.on("resize",this.syncFields);this.on("columnresize",this.syncFields);this.syncFields();this.colModel.getColumnById(this.quickaddMandatory).quickaddField.on("focus",this.onMandatoryFocus,this)},doBlur:function(){var f;Ext.each(this.getVisibleCols(),function(g){if(g.quickaddField&&g.quickaddField.hasFocus){f=true}},this);if(!f){var d={};Ext.each(this.getVisibleCols(),function(g){if(g.quickaddField){d[g.id]=g.quickaddField.getValue();g.quickaddField.setDisabled(g.id!=this.quickaddMandatory)}},this);if(this.colModel.getColumnById(this.quickaddMandatory).quickaddField.getValue()!=""){if(this.fireEvent("newentry",d)){this.colModel.getColumnById(this.quickaddMandatory).quickaddField.setValue("");if(this.resetAllOnNew){var c=this.colModel.config;for(var b=0,a=c.length;b<a;b++){if(c[b].quickaddField!=undefined){c[b].quickaddField.setValue("")}}}}}this.adding=false}},getVisibleCols:function(){var b=[];var a=this.colModel;var f=a.getColumnCount();for(var c=0;c<f;c++){if(!a.isHidden(c)){var d=a.getColumnId(c);b.push(a.getColumnById(d))}}return b},initTemplates:function(){this.getView().templates=this.getView().templates?this.getView().templates:{};var f=this.getView().templates;var c="";var a=this.colModel;var g=a.getColumnCount();for(var b=0;b<g;b++){var d=a.getColumnId(b);c+='<td><div class="x-small-editor" id="'+this.idPrefix+d+'"></div></td>'}f.header=new Ext.Template('<table border="0" cellspacing="0" cellpadding="0" style="{tstyle}">','<thead><tr class="x-grid3-hd-row">{cells}</tr></thead>','<tbody><tr class="new-row">',c,"</tr></tbody>","</table>")},syncFields:function(){var b=2;if(Ext.isSafari){b=11}var a=this.colModel;var c=this.getVisibleCols();var f=Ext.DomQuery.selectNode("tr[class=new-row]",this.getView().mainHd.dom);var h=a.getColumnCount();for(var d,g=0;g<h;g++){d=a.getColumnAt(g);if(c.indexOf(d)<0){f.childNodes[g].style.display="none"}else{f.childNodes[g].style.display="";if(d.quickaddField){d.quickaddField.setSize(a.getColumnWidth(a.getIndexById(d.id))-b)}}}},onMandatoryFocus:function(){this.adding=true;Ext.each(this.getVisibleCols(),function(a){if(a.quickaddField){a.quickaddField.setDisabled(false)}},this)}});Ext.ux.grid.RowExpander=function(a){Ext.apply(this,a);this.addEvents({beforeexpand:true,expand:true,beforecollapse:true,collapse:true});Ext.ux.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.ux.grid.RowExpander,Ext.util.Observable,{header:"",width:20,sortable:false,fixed:true,dataIndex:"",id:"expander",lazyRender:true,enableCaching:false,getRowClass:function(a,f,d,c){d.cols=d.cols-1;var b=this.bodyContent[a.id];if(!b&&!this.lazyRender){b=this.getBodyContent(a,f)}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("beforexpand",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)}}});Ext.ns("Ext.ux.grid");Ext.ux.grid.PagingToolbar=Ext.extend(Ext.PagingToolbar,{displayPageInfo:false,displaySelectionHelper:false,sm:null,initComponent:function(){this.selHelperText={main:_("{0} selected"),deselect:_("Unselect all"),selectvisible:_("Select all visible ({0} records)"),selectall:_("Select all pages ({0} records)"),toggle:_("Toggle selection")};Ext.ux.grid.PagingToolbar.superclass.initComponent.call(this)},onRender:function(b,a){Ext.ux.grid.PagingToolbar.superclass.onRender.call(this,b,a);if(this.displaySelectionHelper){this.renderSelHelper()}},renderSelHelper:function(){this.deselectBtn=new Ext.Action({iconCls:"x-ux-pagingtb-deselect",text:this.getSelHelperText("deselect"),scope:this,handler:function(){this.sm.clearSelections()}});this.selectAllPages=new Ext.Action({iconCls:"x-ux-pagingtb-selectall",text:this.getSelHelperText("selectall"),scope:this,handler:function(){this.sm.selectAll()}});this.selectVisibleBtn=new Ext.Action({iconCls:"x-ux-pagingtb-selectvisible",text:this.getSelHelperText("selectvisible"),scope:this,handler:function(){this.sm.selectAll(true)}});this.toggleSelectionBtn=new Ext.Action({iconCls:"x-ux-pagingtb-toggle",text:this.getSelHelperText("toggle"),scope:this,handler:function(){this.sm.toggleSelection()}});this.addSeparator();this.selHelperBtn=new Ext.Action({xtype:"tbsplit",text:this.getSelHelperText("main"),iconCls:"x-ux-pagingtb-main",menu:new Ext.menu.Menu({items:[this.deselectBtn,this.selectAllPages,this.selectVisibleBtn,this.toggleSelectionBtn]})});this.add(this.selHelperBtn);this.sm.on("selectionchange",this.updateSelHelper,this);this.store.on("load",this.updateSelHelper,this)},updateSelHelper:function(){this.selHelperBtn.setText(this.getSelHelperText("main"));this.selectVisibleBtn.setText(this.getSelHelperText("selectvisible"));this.selectAllPages.setText(this.getSelHelperText("selectall"))},getSelHelperText:function(b){var a;switch(b){case"main":a=this.sm.getCount();break;case"selectvisible":a=this.store.getCount();break;case"selectall":a=this.store.getTotalCount();break;default:return this.selHelperText[b];break}return String.format(this.selHelperText[b],a)}});Ext.namespace("Ext.ux.grid");Ext.ux.grid.GridViewMenuPlugin=Ext.extend(Object,{_view:null,_menuBtn:null,colMenu:null,cm:null,init:function(b){if(b.enableHdMenu===true){throw ('Ext.ux.grid.GridViewMenuPlugin - grid\'s "enableHdMenu" property has to be set to "false"')}var a=this._view=b.getView();a.afterMethod("initElements",this.initElements,this);a.afterMethod("initData",this.initData,this);a.afterMethod("onLayout",this._onLayout,this);a.beforeMethod("destroy",this._destroy,this);this.colMenu=new Ext.menu.Menu({listeners:{scope:this,beforeshow:this._beforeColMenuShow,itemclick:this._handleHdMenuClick}});this.colMenu.override({show:function(d,f,c){this.parentMenu=c;if(!this.el){this.render()}this.fireEvent("beforeshow",this);this.showAt(this.el.getAlignToXY(d,f||this.defaultAlign,[Ext.isSafari?2:1,0]),c,true)}})},_handleHdMenuClick:function(a,b){return this._view.handleHdMenuClick(a,b)},_beforeColMenuShow:function(a){this._view.beforeColMenuShow.call(this,a);this.colMenu.insert(0,new Ext.menu.Separator());this.colMenu.insert(0,new Ext.menu.TextItem({text:String.format('<img src="{0}" class="x-menu-item-icon x-cols-icon" />{1}',Ext.BLANK_IMAGE_URL,this._view.columnsText),style:"line-height:16px;padding:3px 21px 3px 27px;"}))},_handleHdDown:function(b,a){if(Ext.fly(a).hasClass("x-grid3-hd-btn")){b.stopEvent();this.colMenu.show(a,"tr-br?")}},_getMenuButton:function(){var b=document.createElement("a");b.className="ext-ux-grid-gridviewmenuplugin-menuBtn x-grid3-hd-btn";b.href="#";return new Ext.Element(b)},initData:function(){this.cm=this._view.cm},initElements:function(){this.menuBtn=this._getMenuButton();this._view.mainHd.dom.appendChild(this.menuBtn.dom);this.menuBtn.on("click",this._handleHdDown,this)},_onLayout:function(){if(this._view.mainHd.dom.offsetHeight>1){this.menuBtn.dom.style.height=(this._view.mainHd.dom.offsetHeight-1)+"px"}},_destroy:function(){if(this.colMenu){this.colMenu.removeAll();Ext.menu.MenuMgr.unregister(this.colMenu);if(this.colMenu.getEl()){this.colMenu.getEl().remove()}delete this.colMenu}if(this._menuBtn){this._menuBtn.remove();delete this._menuBtn}}});Ext.namespace("Ext.ux.file");Ext.ux.file.Uploader=function(a){Ext.apply(this,a);Ext.ux.file.Uploader.superclass.constructor.apply(this,arguments);this.addEvents("uploadcomplete","uploadfailure")};Ext.extend(Ext.ux.file.Uploader,Ext.util.Observable,{maxFileSize:2097152,url:"index.php",createForm:function(){var a=Ext.getBody().createChild({tag:"form",action:this.url,method:"post",cls:"x-hidden",id:Ext.id(),cn:[{tag:"input",type:"hidden",name:"MAX_FILE_SIZE",value:this.maxFileSize}]});return a},upload:function(){var b=this.createForm();b.appendChild(this.input);this.record=new Ext.ux.file.Uploader.file({input:this.input,form:b,status:"uploading"});var a=Ext.Ajax.request({isUpload:true,method:"post",form:b,scope:this,success:this.onUploadSuccess,params:{method:"Tinebase.uploadTempFile",requestType:"HTTP"}});this.record.set("request",a);return this},getRecord:function(){return this.record},onUploadSuccess:function(a,b){a=Ext.util.JSON.decode(a.responseText);if(a.status&&a.status!=="success"){this.onUploadFail()}else{this.record.set("status","complete");this.record.set("tempFile",a.tempFile);this.fireEvent("uploadcomplete",this,this.record)}},onUploadFail:function(a,b){this.record.set("status","failure");this.fireEvent("uploadfailure",this,this.record)},getFileName:function(){return this.input.getValue().split(/[\/\\]/).pop()},getFilePath:function(){return this.input.getValue().replace(/[^\/\\]+$/,"")},getFileCls:function(){var a=this.getFileName().split(".");if(a.length===1){return""}else{return a.pop().toLowerCase()}},isImage:function(){var a=this.getFileCls();return(a=="jpg"||a=="gif"||a=="png"||a=="jpeg")}});Ext.ux.file.Uploader.file=Ext.data.Record.create([{name:"id",type:"text",system:true},{name:"status",type:"text",system:true},{name:"tempFile",system:true},{name:"form",system:true},{name:"input",system:true},{name:"request",system:true}]);Ext.namespace("Ext.ux.file");Ext.ux.file.BrowsePlugin=function(a){Ext.apply(this,a)};Ext.ux.file.BrowsePlugin.prototype={inputFileName:"file",input_file:null,originalHandler:null,originalScope:null,init:function(a){this.originalHandler=a.handler||null;this.originalScope=a.scope||window;this.handler=null;this.scope=null;this.component=a;a.on("render",this.onRender,this);if(typeof a.setDisabled=="function"){a.setDisabled=a.setDisabled.createSequence(function(b){if(this.input_file){this.input_file.dom.disabled=b}},this)}if(typeof a.enable=="function"){a.enable=a.enable.createSequence(function(){if(this.input_file){this.input_file.dom.disabled=false}},this)}if(typeof a.disable=="function"){a.disable=a.disable.createSequence(function(){if(this.input_file){this.input_file.dom.disabled=true}},this)}if(typeof a.destroy=="function"){a.destroy=a.destroy.createSequence(function(){var b=this.detachInputFile(true);b.remove();b=null},this)}},onRender:function(){this.button_container=this.buttonCt||this.component.el.child("tbody")||this.component.el;this.button_container.position("relative");this.wrap=this.component.el.wrap({cls:"tbody"});this.createInputFile()},createInputFile:function(){this.input_file=this.wrap.createChild({tag:"input",type:"file",size:1,name:this.inputFileName||Ext.id(this.component.el),style:"position: absolute; display: block; border: none; cursor: pointer"});var b=this.button_container.getBox();this.input_file.setStyle("font-size",Math.max(b.height,b.width)+"px");var c=this.input_file.getBox();var a={x:3,y:3};if(Ext.isIE){a={x:0,y:3}}this.input_file.setLeft(b.width-c.width+a.x+"px");this.input_file.setTop(b.height-c.height+a.y+"px");this.input_file.setOpacity(0);if(this.component.handleMouseEvents){this.input_file.on("mouseover",this.component.onMouseOver||Ext.emptyFn,this.component);this.input_file.on("mousedown",this.component.onMouseDown||Ext.emptyFn,this.component);this.input_file.on("contextmenu",this.component.onContextMenu||Ext.emptyFn,this.component)}if(this.component.tooltip){if(typeof this.component.tooltip=="object"){Ext.QuickTips.register(Ext.apply({target:this.input_file},this.component.tooltip))}else{this.input_file.dom[this.component.tooltipType]=this.component.tooltip}}this.input_file.on("change",this.onInputFileChange,this);this.input_file.on("click",function(d){d.stopPropagation()})},onInputFileChange:function(){if(this.originalHandler){this.originalHandler.call(this.originalScope,this)}},detachInputFile:function(b){var a=this.input_file;b=b||false;if(typeof this.component.tooltip=="object"){Ext.QuickTips.unregister(this.input_file)}else{this.input_file.dom[this.component.tooltipType]=null}this.input_file.removeAllListeners();this.input_file=null;if(!b){this.createInputFile()}return a},getInputFile:function(){return this.input_file}};Ext.namespace("Ext.ux.file");Ext.ux.file.Download=function(a){a=a||{};Ext.apply(this,a);Ext.ux.file.Download.superclass.constructor.call(this);this.addEvents({success:true,fail:true,abort:true})};Ext.extend(Ext.ux.file.Download,Ext.util.Observable,{url:null,method:"POST",params:null,form:null,transactionId:null,start:function(){this.form=Ext.getBody().createChild({tag:"form",method:this.method,cls:"x-hidden"});var a=new Ext.data.Connection({debugUploads:Ext.isGecko});this.transactionId=a.request({isUpload:true,form:this.form,params:this.params,scope:this,success:this.onSuccess,failure:this.onFailure,url:"index.php"})},abort:function(){Ext.Ajax.abort(this.transactionId);this.form.remove();this.fireEvent("abort",this)},onSuccess:function(){this.form.remove();this.fireEvent("success",this)},onFailure:function(){this.form.remove();this.fireEvent("fail",this)}});Ext.namespace("Ext.ux","Ext.ux.form");Ext.ux.form.ColorField=Ext.extend(Ext.form.TriggerField,{listWidth:150,editable:false,initComponent:function(){Ext.ux.form.ColorField.superclass.initComponent.call(this);this.store=new Ext.data.Store({});this.addEvents("select")},onDestroy:function(){Ext.destroy(this.menu);Ext.ux.form.ColorField.superclass.onDestroy.call(this)},onTriggerClick:function(){if(this.disabled){return}if(this.menu==null){this.menu=new Ext.menu.ColorMenu({hideOnClick:false})}this.onFocus();this.menu.show(this.el,"tl-bl?");this.menuEvents("on")},setValue:function(a){Ext.ux.form.ColorField.superclass.setValue.call(this,a);this.el.setStyle("background",a);this.el.setStyle("color",a)},menuEvents:function(a){this.menu[a]("select",this.onSelect,this);this.menu[a]("hide",this.onMenuHide,this);this.menu[a]("show",this.onFocus,this)},onSelect:function(a,b){this.setValue("#"+b);this.fireEvent("select",this,"#"+b);this.menu.hide()},onMenuHide:function(){this.focus(false,60);this.menuEvents("un")}});Ext.reg("colorfield",Ext.ux.form.ColorField);Ext.namespace("Ext.ux","Ext.ux.form");Ext.ux.form.IconTextField=Ext.extend(Ext.form.TextField,{labelIcon:"",initComponent:function(){Ext.ux.form.IconTextField.superclass.initComponent.call(this);if(this.labelIcon.length>0){this.fieldLabel='<img src="'+this.labelIcon+'" class="x-ux-form-icontextfield-labelicon">'+this.fieldLabel}}});Ext.reg("icontextfield",Ext.ux.form.IconTextField);Ext.namespace("Ext.ux","Ext.ux.form");Ext.ux.form.MirrorTextField=Ext.extend(Ext.ux.form.IconTextField,{initComponent:function(){Ext.ux.form.MirrorTextField.superclass.initComponent.call(this);Ext.ux.form.MirrorTextFieldManager.register(this)},setValue:function(a){Ext.ux.form.MirrorTextFieldManager.setAll(this,a)},onDestroy:function(){if(this.rendered){Ext.ux.form.MirrorTextFieldManager.unregister(this)}}});Ext.reg("mirrortextfield",Ext.ux.form.MirrorTextField);Ext.ux.form.MirrorTextFieldManager=function(){var b={};function a(j,h,f){var c=b[j.name];for(var g=0,d=c.length;g<d;g++){c[g].setRawValue(h)}return true}return{register:function(d){var c=b[d.name];if(!c){c=b[d.name]=[]}c.push(d);d.on("change",a)},unregister:function(d){var c=b[d.name];if(c){c.remove(d);d.un("change",a)}},setAll:function(f,d){var c=b[f.name];if(c){a(f,d)}}}}();Ext.namespace("Ext.ux","Ext.ux.form");Ext.ux.form.ColumnFormPanel=Ext.extend(Ext.Panel,{formDefaults:{xtype:"icontextfield",anchor:"100%",labelSeparator:"",columnWidth:0.333},layout:"hfit",labelAlign:"top",initComponent:function(){var h=[];for(var g=0,f=this.items.length;g<f;g++){var l=this.items[g];var d={border:false,layout:"column",items:[]};for(var a=0,b=l.length;a<b;a++){var c=l[a];var k=d.items.push({columnWidth:c.columnWidth?c.columnWidth:this.formDefaults.columnWidth,layout:"form",labelAlign:this.labelAlign,defaults:this.formDefaults,bodyStyle:"padding-right: 5px;",border:false,items:c});if(c.width){d.items[k-1].width=c.width;delete d.items[k-1].columnWidth}}h.push(d)}this.items=h;Ext.ux.form.ColumnFormPanel.superclass.initComponent.call(this)}});Ext.reg("columnform",Ext.ux.form.ColumnFormPanel);Ext.namespace("Ext.ux","Ext.ux.form");Ext.ux.form.ExpandFieldSet=Ext.extend(Ext.form.FieldSet,{initComponent:function(){Ext.ux.form.ExpandFieldSet.superclass.initComponent.call(this);var a=0;this.items.each(function(b){if(a>0){b.collapsed=true;b.on("expand",function(){var c=this.getInnerWidth();b.setWidth(c)},this)}a++},this)},onRender:function(b,a){Ext.ux.form.ExpandFieldSet.superclass.onRender.call(this,b,a);this.el.addClass("x-tool-expand")},expand:function(a){var b=0;this.items.each(function(c){if(b>0){c.expand(a)}b++},this);this.el.removeClass("x-tool-expand");this.el.addClass("x-tool-collapse");this.collapsed=false},collapse:function(a){var b=0;this.items.each(function(c){if(b>0){c.collapse(a)}b++},this);this.el.removeClass("x-tool-collapse");this.el.addClass("x-tool-expand");this.collapsed=true}});Ext.reg("expanderfieldset",Ext.ux.form.ExpandFieldSet);Ext.namespace("Ext.ux","Ext.ux.form");Ext.ux.form.ClearableComboBox=Ext.extend(Ext.form.ComboBox,{initComponent:function(){Ext.ux.form.ClearableComboBox.superclass.initComponent.call(this);this.triggerConfig={tag:"span",cls:"x-form-twin-triggers",style:"padding-right:2px",cn:[{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger x-form-clear-trigger"},{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger"}]}},getTrigger:function(a){return this.triggers[a]},initTrigger:function(){var a=this.trigger.select(".x-form-trigger",true);this.wrap.setStyle("overflow","hidden");var b=this;a.each(function(d,g,c){d.hide=function(){var h=b.wrap.getWidth();this.dom.style.display="none";b.el.setWidth(h-b.trigger.getWidth())};d.show=function(){var h=b.wrap.getWidth();this.dom.style.display="";b.el.setWidth(h-b.trigger.getWidth())};var f="Trigger"+(c+1);if(this["hide"+f]){d.dom.style.display="none"}d.on("click",this["on"+f+"Click"],this,{preventDefault:true});d.addClassOnOver("x-form-trigger-over");d.addClassOnClick("x-form-trigger-click")},this);this.triggers=a.elements;this.triggers[0].hide()},onTrigger1Click:function(){this.clearValue();this.fireEvent("select",this,this.getRawValue(),this.startValue);this.startValue=this.getRawValue();this.triggers[0].hide()},onTrigger2Click:function(){this.onTriggerClick()},onSelect:function(c,a,b){Ext.ux.form.ClearableComboBox.superclass.onSelect.call(this,c,a,b);this.startValue=this.getValue();this.triggers[0].show()},setValue:function(a){Ext.ux.form.ClearableComboBox.superclass.setValue.call(this,a);if(a){this.triggers[0].show()}}});Ext.ns("Ext.ux.form");Ext.ux.form.ClearableTextField=Ext.extend(Ext.form.TriggerField,{enableKeyEvents:true,triggerClass:"x-form-clear-trigger",checkTrigger:function(){if(this.getValue()){this.el.setWidth(this.wrap.getWidth()-this.trigger.getWidth());this.trigger.show()}else{this.trigger.hide();this.el.setWidth(this.wrap.getWidth())}},initComponent:function(){this.supr().initComponent.call(this);this.on("keyup",this.checkTrigger,this)},afterRender:function(){this.supr().afterRender.call(this);this.checkTrigger()},onTriggerClick:function(){var a=this.getValue();this.setValue("");if(a){this.fireEvent("change",this,"",a)}this.checkTrigger();this.el.focus()},onDestroy:function(){this.un("keyup",this.checkTrigger)},setValue:function(b){var a=this.supr().setValue.call(this,b);this.checkTrigger();return a}});Ext.namespace("Ext.ux.form");Ext.ux.form.RecordsComboBox=Ext.extend(Ext.form.ComboBox,{triggerAction:"all",editable:false,forceSelection:true,valueField:"id",setValue:function(a){var b=a;if(typeof a==="object"&&Object.prototype.toString.call(a)==="[object Object]"){if(a.records!==undefined){this.mode="local";this.store.loadData(a.records)}b=a.value}Ext.ux.form.RecordsComboBox.superclass.setValue.call(this,b)}});Ext.reg("reccombo",Ext.ux.form.RecordsComboBox);Ext.namespace("Ext.ux","Ext.ux.form");Ext.ux.form.DateTimeField=Ext.extend(Ext.form.Field,{autoEl:"div",value:"",initComponent:function(){Ext.ux.form.DateTimeField.superclass.initComponent.call(this);this.lastValues=[]},clearInvalid:function(){this.dateField.clearInvalid();this.timeField.clearInvalid()},clearTime:function(){var a=this.getValue();if(Ext.isDate(a)){this.setValue(this.getValue().clearTime(true))}else{this.timeField.setValue(new Date().clearTime())}},getName:function(){return this.name},getValue:function(){var a=this.dateField.getValue();var b=Date.parseDate(this.timeField.getValue(),this.timeField.format);if(Ext.isDate(a)&&Ext.isDate(b)){a=a.clone();a.clearTime();a=a.add(Date.HOUR,b.getHours());a=a.add(Date.MINUTE,b.getMinutes())}return a},markInvalid:function(a){this.dateField.markInvalid(a);this.timeField.markInvalid(a)},onRender:function(b,a){this.el=document.createElement(this.autoEl);this.el.id=this.getId();this.el=Ext.get(this.el);b.dom.insertBefore(this.el.dom,a);this.dateField=new Ext.form.DateField({renderTo:this.el,readOnly:this.readOnly,hideTrigger:this.hideTrigger,disabled:this.disabled,tabIndex:this.tabIndex==-1?this.tabIndex:false,listeners:{scope:this,change:this.onDateChange}});this.timeField=new Ext.form.TimeField({renderTo:this.el,readOnly:this.readOnly,hideTrigger:this.hideTrigger,disabled:this.disabled,tabIndex:this.tabIndex==-1?this.tabIndex:false,listeners:{scope:this,change:this.onTimeChange}})},onDateChange:function(){var a=this.getValue();this.setValue(a);this.fireEvent("change",this,a,this.lastValues.length>1?this.lastValues[this.lastValues.length-2]:"")},onResize:function(a,b){Ext.ux.form.DateTimeField.superclass.onResize.apply(this,arguments);this.el.setHeight(15);this.el.setStyle({position:"relative"});this.dateField.wrap.setStyle({position:"absolute"});this.dateField.setWidth(a*0.55-5);this.timeField.wrap.setStyle({position:"absolute"});this.timeField.setWidth(a*0.45);this.timeField.wrap.setLeft(this.dateField.getWidth()+5)},onTimeChange:function(){var a=this.getValue();this.setValue(a);this.fireEvent("change",this,a,this.lastValues.length>1?this.lastValues[this.lastValues.length-2]:"")},setDisabled:function(a,b){if(b!=="time"){this.dateField.setDisabled(a)}if(b!=="date"){this.timeField.setDisabled(a)}},setRawValue:Ext.EmptyFn,setValue:function(a,b){if(!b){this.lastValues.push(a)}this.dateField.setValue(a);this.timeField.setValue(a)},undo:function(){if(this.lastValues.length>1){this.lastValues.pop();this.setValue(this.lastValues[this.lastValues.length-1],true)}else{this.reset()}}});Ext.reg("datetimefield",Ext.ux.form.DateTimeField);Ext.namespace("Ext.ux","Ext.ux.form");Ext.ux.form.ClearableDateField=Ext.extend(Ext.form.DateField,{initComponent:function(){Ext.ux.form.ClearableDateField.superclass.initComponent.call(this);this.triggerConfig={tag:"span",cls:"x-form-twin-triggers",cn:[{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger x-form-clear-trigger"},{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger x-form-date-trigger"}]}},getTrigger:function(a){return this.triggers[a]},initTrigger:function(){var a=this.trigger.select(".x-form-trigger",true);this.wrap.setStyle("overflow","hidden");var b=this;a.each(function(d,g,c){d.hide=function(){var h=b.wrap.getWidth();this.dom.style.display="none";b.el.setWidth(h-b.trigger.getWidth())};d.show=function(){var h=b.wrap.getWidth();this.dom.style.display="";b.el.setWidth(h-b.trigger.getWidth())};var f="Trigger"+(c+1);if(this["hide"+f]){d.dom.style.display="none"}d.on("click",this["on"+f+"Click"],this,{preventDefault:true});d.addClassOnOver("x-form-trigger-over");d.addClassOnClick("x-form-trigger-click")},this);this.triggers=a.elements;this.triggers[0].hide()},validateValue:function(a){if(a!==this.emptyText&&a!==undefined&&a.length>"1"){this.triggers[0].show()}return true},onTrigger1Click:function(){this.reset();this.fireEvent("select",this,"","");this.triggers[0].hide()},onTrigger2Click:function(){this.onTriggerClick()}});Ext.reg("extuxclearabledatefield",Ext.ux.form.ClearableDateField);Ext.namespace("Ext.ux.form");Ext.ux.form.ImageField=Ext.extend(Ext.form.Field,{border:true,defaultImage:"images/empty_photo.png",defaultAutoCreate:{tag:"input",type:"hidden"},handleMouseEvents:true,initComponent:function(){this.plugins=this.plugins||[];this.scope=this;this.handler=this.onFileSelect;this.browsePlugin=new Ext.ux.file.BrowsePlugin({});this.plugins.push(this.browsePlugin);Ext.ux.form.ImageField.superclass.initComponent.call(this);this.imageSrc=this.defaultImage;if(this.border===true){this.width=this.width;this.height=this.height}},onRender:function(c,a){Ext.ux.form.ImageField.superclass.onRender.call(this,c,a);this.buttonCt=Ext.DomHelper.insertFirst(c,"<div>&nbsp;</div>",true);this.buttonCt.applyStyles({border:this.border===true?"1px solid #B5B8C8":"0"});this.buttonCt.setSize(this.width,this.height);this.loadMask=new Ext.LoadMask(this.buttonCt,{msg:_("Loading"),msgCls:"x-mask-loading"});var d=_("click to edit");this.textCt=Ext.DomHelper.insertFirst(this.buttonCt,'<div class="x-ux-from-imagefield-text">'+d+"</div>",true);this.textCt.setSize(this.width,this.height);var b=Ext.util.TextMetrics.createInstance(this.textCt);b.setFixedWidth(this.width);this.textCt.setStyle({top:((this.height-b.getHeight(d))/2)+"px"});this.imageCt=Ext.DomHelper.insertFirst(this.buttonCt,'<img src="'+this.imageSrc+'"/>',true);this.imageCt.setOpacity(0.2);this.imageCt.setStyle({position:"absolute",top:"18px"});Ext.apply(this.browsePlugin,{buttonCt:this.buttonCt,renderTo:this.buttonCt})},getValue:function(){var a=Ext.ux.form.ImageField.superclass.getValue.call(this);return a},setValue:function(a){Ext.ux.form.ImageField.superclass.setValue.call(this,a);if(!a||a==this.defaultImage){this.imageSrc=this.defaultImage}else{this.imageSrc=Ext.ux.util.ImageURL.prototype.parseURL(a);this.imageSrc.width=this.width;this.imageSrc.height=this.height;this.imageSrc.ratiomode=0}this.updateImage()},onFileSelect:function(c){var a=c.detachInputFile();var b=new Ext.ux.file.Uploader({input:a});if(!b.isImage()){Ext.MessageBox.alert(_("Not An Image"),_("Plase select an image file (gif/png/jpeg)")).setIcon(Ext.MessageBox.ERROR);return}b.on("uploadcomplete",function(f,d){this.imageSrc=new Ext.ux.util.ImageURL({id:d.get("tempFile").id,width:this.width,height:this.height,ratiomode:0});this.setValue(this.imageSrc);this.updateImage()},this);b.on("uploadfailure",this.onUploadFail,this);this.loadMask.show();b.upload();if(this.ctxMenu){this.ctxMenu.hide()}},onUploadFail:function(){Ext.MessageBox.alert(_("Upload Failed"),_("Could not upload image. Please notify your Administrator")).setIcon(Ext.MessageBox.ERROR)},onContextMenu:function(d,a){d.preventDefault();var c=Ext.DomHelper.append(this.buttonCt,"<div>&nbsp;</div>",true);var b=new Ext.menu.Item({text:_("Change Image"),iconCls:"action_uploadImage",handler:this.onFileSelect,scope:this,plugins:[new Ext.ux.file.BrowsePlugin({})]});this.ctxMenu=new Ext.menu.Menu({items:[b,{text:_("Crop Image"),iconCls:"action_cropImage",scope:this,disabled:true,handler:function(){var f=new Ext.ux.form.ImageCropper({imageURL:this.imageSrc});var h=new Tine.widgets.dialog.EditRecord({handlerScope:this,handlerCancle:this.close,items:f});var g=new Ext.Window({width:320,height:320,title:_("Crop Image"),layout:"fit",items:h});g.show()}},{text:_("Delete Image"),iconCls:"action_delete",disabled:this.imageSrc==this.defaultImage,scope:this,handler:function(){this.setValue("")}},{text:_("Show Original Image"),iconCls:"action_originalImage",disabled:this.imageSrc==this.defaultImage,scope:this,handler:this.downloadImage}]});this.ctxMenu.showAt(d.getXY())},downloadImage:function(){var a=Ext.apply(this.imageSrc,{height:-1,width:-1}).toString();Tine.Tinebase.common.openWindow("showImage",a,800,600)},updateImage:function(){if(this.imageCt.dom.src.substr(-1*this.imageSrc.length)!=this.imageSrc){var b=this.imageCt.up("div");var a=Ext.DomHelper.insertAfter(this.imageCt,'<img src="'+this.imageSrc+'"/>',true);a.on("load",function(){this.imageCt.remove();this.imageCt=a;this.textCt.setVisible(this.imageSrc==this.defaultImage);this.imageCt.setOpacity(this.imageSrc==this.defaultImage?0.2:1);this.loadMask.hide()},this);a.on("error",function(){Ext.MessageBox.alert(_("Image Failed"),_("Could not load image. Please notify your Administrator")).setIcon(Ext.MessageBox.ERROR);this.loadMask.hide()},this)}}});Ext.namespace("Ext.ux.util");Ext.ux.util.ImageURL=function(a){Ext.apply(this,a,{url:"index.php",method:"Tinebase.getImage",application:"Tinebase",location:"tempFile",width:90,height:120,ratiomode:0})};Ext.ux.util.ImageURL.prototype.toString=function(){return this.url+"?method="+this.method+"&application="+this.application+"&location="+this.location+"&id="+this.id+"&width="+this.width+"&height="+this.height+"&ratiomode="+this.ratiomode};Ext.ux.util.ImageURL.prototype.parseURL=function(b){var b=b.toString();var g={};var d=b.substr(b.indexOf("?")+1).split("&");for(var c=0,a=d.length;c<a;c++){var f=d[c].split("=");g[f[0]]=Ext.util.Format.htmlEncode(f[1])}return new Ext.ux.util.ImageURL(g)};Ext.namespace("Ext.ux.form");Ext.ux.form.ImageCropper=function(a){Ext.apply(this,a);Ext.ux.form.ImageCropper.superclass.constructor.apply(this,arguments);this.addEvents("imagecropped")};Ext.extend(Ext.ux.form.ImageCropper,Ext.Component,{imageSize:false,width:320,height:320,initComponent:function(){this.imageURL.width=290;this.imageURL.height=240;this.imageURL.ratiomode=1;Ext.ux.form.ImageCropper.superclass.initComponent.call(this)},onRender:function(d,a){Ext.ux.form.ImageCropper.superclass.onRender.call(this,d,a);this.wrapEl=Ext.DomHelper.insertFirst(d,{tag:"div"},true);this.bgImageEl=Ext.DomHelper.insertFirst(this.wrapEl,{tag:"img",id:"yui_img",src:this.imageURL},true);this.bgImageEl.setOpacity(0.5);this.fgImageEl=Ext.DomHelper.insertFirst(this.wrapEl,{tag:"div",style:{width:"100px",height:"100px",position:"absolute",top:"30px",left:"30px","background-image":"url("+this.imageURL+")","background-repeat":"no-repeat"}},true);this.resizeable=new Ext.Resizable(this.fgImageEl,{wrap:true,pinned:true,handles:"s e se",draggable:true,dynamic:true});this.resizeable.dd.fgImageEl=this.fgImageEl;this.resizeable.dd.bgImageEl=this.bgImageEl;this.resizeable.dd.onDrag=this.syncImageEls;var f=this.resizeable.getEl().query("div.x-resizable-handle");for(var c=0,b=f.length;c<b;c++){Ext.get(f[c]).setOpacity(1)}this.syncImageEls()},syncImageEls:function(){var b=this.bgImageEl.getX()-this.fgImageEl.getX();var a=this.bgImageEl.getY()-this.fgImageEl.getY();this.fgImageEl.setStyle("background-position",b+"px "+a+"px")}});Ext.namespace("Ext.ux.form");Ext.ux.form.Spinner=function(a){Ext.ux.form.Spinner.superclass.constructor.call(this,a);this.addEvents({spin:true,spinup:true,spindown:true})};Ext.extend(Ext.ux.form.Spinner,Ext.form.TriggerField,{triggerClass:"x-form-spinner-trigger",splitterClass:"x-form-spinner-splitter",alternateKey:Ext.EventObject.shiftKey,strategy:undefined,onRender:function(b,a){Ext.ux.form.Spinner.superclass.onRender.call(this,b,a);this.splitter=this.wrap.createChild({tag:"div",cls:this.splitterClass,style:"width:13px; height:2px;"});this.splitter.show().setRight((Ext.isIE)?1:2);this.splitter.show().setTop(8);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.initSpinner()},initTrigger:function(){this.trigger.addClassOnOver("x-form-trigger-over");this.trigger.addClassOnClick("x-form-trigger-click")},initSpinner:function(){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);this.repeater.on("click",this.onTriggerClick,this,{preventDefault:true});this.trigger.on("mouseover",this.onMouseOver,this,{preventDefault:true});this.trigger.on("mouseout",this.onMouseOut,this,{preventDefault:true});this.trigger.on("mousemove",this.onMouseMove,this,{preventDefault:true});this.trigger.on("mousedown",this.onMouseDown,this,{preventDefault:true});this.trigger.on("mouseup",this.onMouseUp,this,{preventDefault:true});this.wrap.on("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);if("object"==typeof this.strategy&&this.strategy.xtype){switch(this.strategy.xtype){case"number":this.strategy=new Ext.ux.form.Spinner.NumberStrategy(this.strategy);break;case"date":this.strategy=new Ext.ux.form.Spinner.DateStrategy(this.strategy);break;case"time":this.strategy=new Ext.ux.form.Spinner.TimeStrategy(this.strategy);break;default:delete (this.strategy);break}delete (this.strategy.xtype)}if(this.strategy==undefined){this.strategy=new Ext.ux.form.Spinner.NumberStrategy()}},onMouseOver:function(){if(this.disabled){return}var a=this.getMiddle();this.__tmphcls=(Ext.EventObject.getPageY()<a)?"x-form-spinner-overup":"x-form-spinner-overdown";this.trigger.addClass(this.__tmphcls)},onMouseOut:function(){this.trigger.removeClass(this.__tmphcls)},onMouseMove:function(){if(this.disabled){return}var a=this.getMiddle();if(((Ext.EventObject.getPageY()>a)&&this.__tmphcls=="x-form-spinner-overup")||((Ext.EventObject.getPageY()<a)&&this.__tmphcls=="x-form-spinner-overdown")){}},onMouseDown:function(){if(this.disabled){return}var a=this.getMiddle();this.__tmpccls=(Ext.EventObject.getPageY()<a)?"x-form-spinner-clickup":"x-form-spinner-clickdown";this.trigger.addClass(this.__tmpccls)},onMouseUp:function(){this.trigger.removeClass(this.__tmpccls)},onTriggerClick:function(){if(this.disabled||this.getEl().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.getEl().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{this.strategy.onSpinUp(this)}this.fireEvent("spin",this);this.fireEvent("spinup",this)},onSpinDown:function(){if(this.isSpinnable()==false){return}if(Ext.EventObject.shiftKey==true){this.onSpinDownAlternate();return}else{this.strategy.onSpinDown(this)}this.fireEvent("spin",this);this.fireEvent("spindown",this)},onSpinUpAlternate:function(){if(this.isSpinnable()==false){return}this.strategy.onSpinUpAlternate(this);this.fireEvent("spin",this);this.fireEvent("spinup",this)},onSpinDownAlternate:function(){if(this.isSpinnable()==false){return}this.strategy.onSpinDownAlternate(this);this.fireEvent("spin",this);this.fireEvent("spindown",this)}});Ext.reg("uxspinner",Ext.ux.form.Spinner);Ext.ux.form.Spinner.Strategy=function(a){Ext.apply(this,a)};Ext.extend(Ext.ux.form.Spinner.Strategy,Ext.util.Observable,{defaultValue:0,minValue:undefined,maxValue:undefined,incrementValue:1,alternateIncrementValue:5,validationTask:new Ext.util.DelayedTask(),onSpinUp:function(a){this.spin(a,false,false)},onSpinDown:function(a){this.spin(a,true,false)},onSpinUpAlternate:function(a){this.spin(a,false,true)},onSpinDownAlternate:function(a){this.spin(a,true,true)},spin:function(a,c,b){this.validationTask.delay(500,function(){a.validate()})},fixBoundries:function(a){return a}});Ext.ux.form.Spinner.NumberStrategy=function(a){Ext.ux.form.Spinner.NumberStrategy.superclass.constructor.call(this,a)};Ext.extend(Ext.ux.form.Spinner.NumberStrategy,Ext.ux.form.Spinner.Strategy,{allowDecimals:true,decimalPrecision:2,spin:function(b,f,c){Ext.ux.form.Spinner.NumberStrategy.superclass.spin.call(this,b,f,c);var a=parseFloat(b.getValue());var d=(c==true)?this.alternateIncrementValue:this.incrementValue;(f==true)?a-=d:a+=d;a=(isNaN(a))?this.defaultValue:a;a=this.fixBoundries(a);b.setRawValue(a)},fixBoundries:function(b){var a=b;if(this.minValue!=undefined&&a<this.minValue){a=this.minValue}if(this.maxValue!=undefined&&a>this.maxValue){a=this.maxValue}return this.fixPrecision(a)},fixPrecision:function(b){var a=isNaN(b);if(!this.allowDecimals||this.decimalPrecision==-1||a||!b){return a?"":b}return parseFloat(parseFloat(b).toFixed(this.decimalPrecision))}});Ext.ux.form.Spinner.DateStrategy=function(a){Ext.ux.form.Spinner.DateStrategy.superclass.constructor.call(this,a)};Ext.extend(Ext.ux.form.Spinner.DateStrategy,Ext.ux.form.Spinner.Strategy,{defaultValue:new Date(),format:"Y-m-d",incrementValue:1,incrementConstant:Date.DAY,alternateIncrementValue:1,alternateIncrementConstant:Date.MONTH,spin:function(d,h,f){Ext.ux.form.Spinner.DateStrategy.superclass.spin.call(this,d,h,f);var a=d.getRawValue();a=Date.parseDate(a,this.format);var c=(h==true)?-1:1;var g=(f==true)?this.alternateIncrementValue:this.incrementValue;var b=(f==true)?this.alternateIncrementConstant:this.incrementConstant;if(typeof this.defaultValue=="string"){this.defaultValue=Date.parseDate(this.defaultValue,this.format)}a=(a)?a.add(b,c*g):this.defaultValue;a=this.fixBoundries(a);d.setRawValue(Ext.util.Format.date(a,this.format))},fixBoundries:function(b){var d=b;var c=(typeof this.minValue=="string")?Date.parseDate(this.minValue,this.format):this.minValue;var a=(typeof this.maxValue=="string")?Date.parseDate(this.maxValue,this.format):this.maxValue;if(this.minValue!=undefined&&d<c){d=c}if(this.maxValue!=undefined&&d>a){d=a}return d}});Ext.ux.form.Spinner.TimeStrategy=function(a){Ext.ux.form.Spinner.TimeStrategy.superclass.constructor.call(this,a)};Ext.extend(Ext.ux.form.Spinner.TimeStrategy,Ext.ux.form.Spinner.DateStrategy,{format:"H:i",incrementValue:1,incrementConstant:Date.MINUTE,alternateIncrementValue:1,alternateIncrementConstant:Date.HOUR});Ext.namespace("Ext.ux","Ext.ux.form");Ext.ux.form.LockCombo=Ext.extend(Ext.form.ComboBox,{paramName:"query",selectOnFocus:true,emptyText:"select entry...",hiddenFieldId:"",hiddenFieldData:"",validationEvent:false,validateOnBlur:false,trigger1Class:"x-form-trigger",trigger2ClassLocked:"x-form-locked-trigger",trigger2ClassUnlocked:"x-form-unlocked-trigger",hideTrigger1:false,width:180,hasSearch:false,initComponent:function(){Ext.ux.form.LockCombo.superclass.initComponent.call(this);if(!this.hiddenFieldData){this.hiddenFieldData="1"}this.triggerConfig={tag:"span",cls:"x-form-twin-triggers",cn:[{tag:"img",id:"trigger1",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.trigger1Class},{tag:"img",id:"trigger2",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "}]}},getTrigger:function(a){return this.triggers[a]},initTrigger:function(){var a=this.trigger.select(".x-form-trigger",true);this.wrap.setStyle("overflow","hidden");var b=this;a.each(function(f,h,d){f.hide=function(){var i=b.wrap.getWidth();this.dom.style.display="none";b.el.setWidth(i-b.trigger.getWidth())};f.show=function(){var i=b.wrap.getWidth();this.dom.style.display="";b.el.setWidth(i-b.trigger.getWidth())};var g="Trigger"+(d+1);if(this["hide"+g]){f.dom.style.display="none"}f.on("click",this["on"+g+"Click"],this,{preventDefault:true});if(f.id=="trigger2"){if(this.hiddenFieldData=="0"){var c=this.trigger2ClassLocked.toString();f.addClass(c)}if(this.hiddenFieldData=="1"||!this.hiddenFieldData){var c=this.trigger2ClassUnlocked.toString();f.addClass(c)}}f.addClassOnOver("x-form-trigger-over");f.addClassOnClick("x-form-trigger-click")},this);this.triggers=a.elements},onRender:function(b,a){Ext.ux.form.LockCombo.superclass.onRender.call(this,b,a);this.hiddenBox=b.parent().createChild({tag:"input",type:"hidden",name:this.hiddenFieldId,id:this.hiddenFieldId,value:this.hiddenFieldData});Ext.ComponentMgr.register(this.hiddenBox)},onTrigger1Click:function(){if(this.disabled){return}if(this.isExpanded()){this.collapse();this.el.focus()}else{this.onFocus({});if(this.triggerAction=="all"){this.doQuery(this.allQuery,true)}else{this.doQuery(this.getRawValue())}this.el.focus()}},onTrigger2Click:function(){var c=Ext.getCmp(this.hiddenFieldId).getValue();var b=this.trigger.select(".x-form-trigger",true);if(c=="0"){Ext.getCmp(this.hiddenFieldId).dom.value="1";var a=this.trigger2ClassUnlocked.toString();b.each(function(f,g,d){if(f.id=="trigger2"){f.dom.className="x-form-trigger "+a}})}else{Ext.getCmp(this.hiddenFieldId).dom.value="0";var a=this.trigger2ClassLocked.toString();b.each(function(f,g,d){if(f.id=="trigger2"){f.dom.className="x-form-trigger "+a}})}}});Ext.reg("lockCombo",Ext.ux.form.LockCombo);Ext.namespace("Ext.ux","Ext.ux.form");Ext.ux.form.LockTextfield=Ext.extend(Ext.form.TriggerField,{hiddenFieldId:"",hiddenFieldData:"",triggerClassLocked:"x-form-trigger x-form-locked-trigger",triggerClassUnlocked:"x-form-trigger x-form-unlocked-trigger",initComponent:function(){this.triggerClass=(this.hiddenFieldData=="1")?this.triggerClassUnlocked:this.triggerClassLocked;Ext.ux.form.LockTextfield.superclass.initComponent.call(this)},onRender:function(b,a){Ext.ux.form.LockTextfield.superclass.onRender.call(this,b,a);this.hiddenBox=b.parent().createChild({tag:"input",type:"hidden",name:this.hiddenFieldId,id:this.hiddenFieldId,value:this.hiddenFieldData});Ext.ComponentMgr.register(this.hiddenBox)},onTriggerClick:function(){var a=Ext.getCmp(this.hiddenFieldId).getValue();if(a=="0"){Ext.getCmp(this.hiddenFieldId).dom.value="1";this.trigger.removeClass(this.triggerClassLocked);this.trigger.addClass(this.triggerClassUnlocked)}else{Ext.getCmp(this.hiddenFieldId).dom.value="0";this.trigger.removeClass(this.triggerClassUnlocked);this.trigger.addClass(this.triggerClassLocked)}}});Ext.reg("lockTextfield",Ext.ux.form.LockTextfield);Ext.namespace("Ext.ux","Ext.ux.layout");Ext.ux.layout.HorizontalFitLayout=Ext.extend(Ext.layout.ContainerLayout,{containsScrollbar:false,monitorResize:true,onLayout:function(b,c){Ext.layout.FitLayout.superclass.onLayout.call(this,b,c);if(!this.container.collapsed){var a=c.getStyleSize();a.width=b.containsScrollbar?a.width-16:a.width;b.items.each(function(d){this.setItemSize(d,a)},this)}},setItemSize:function(b,a){if(b&&a.height>0){b.setWidth(a.width)}}});Ext.Container.LAYOUTS.hfit=Ext.ux.layout.HorizontalFitLayout;Ext.ns("Ext.ux.layout");Ext.ux.layout.CenterLayout=Ext.extend(Ext.layout.FitLayout,{setItemSize:function(b,a){this.container.addClass("ux-layout-center");b.addClass("ux-layout-center-item");if(b&&a.height>0){if(b.width){a.width=b.width}b.setSize(a)}}});Ext.Container.LAYOUTS["ux.center"]=Ext.ux.layout.CenterLayout;Ext.ns("Ext.ux.layout");Ext.ux.layout.RowLayout=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:true,isValidParent:function(b,a){return b.getEl().dom.parentNode==this.innerCt.dom},onLayout:function(g,k){var b=g.items.items,j=b.length,a,c;if(!this.innerCt){k.addClass("ux-row-layout-ct");this.innerCt=k.createChild({cls:"x-row-inner"})}this.renderAll(g,this.innerCt);var l=k.getViewSize();if(l.width<1&&l.height<1){return}var d=l.height-k.getPadding("tb"),f=d;this.innerCt.setSize({height:d});for(c=0;c<j;c++){a=b[c];if(!a.rowHeight){f-=(a.getSize().height+a.getEl().getMargins("tb"))}}f=f<0?0:f;for(c=0;c<j;c++){a=b[c];if(a.rowHeight){a.setSize({height:Math.floor(a.rowHeight*f)-a.getEl().getMargins("tb")})}}}});Ext.Container.LAYOUTS["ux.row"]=Ext.ux.layout.RowLayout;Ext.namespace("Ext.ux");Ext.ux.GMapPanel=Ext.extend(Ext.Panel,{initComponent:function(){var a={plain:true,zoomLevel:3,yaw:180,pitch:0,zoom:0,gmapType:"map",border:false};Ext.applyIf(this,a);Ext.ux.GMapPanel.superclass.initComponent.call(this)},afterRender:function(){var b=this.ownerCt.getSize();Ext.applyIf(this,b);Ext.ux.GMapPanel.superclass.afterRender.call(this);if(this.gmapType==="map"){this.gmap=new GMap2(this.body.dom)}if(this.gmapType==="panorama"){this.gmap=new GStreetviewPanorama(this.body.dom)}if(typeof this.addControl==="object"&&this.gmapType==="map"){this.gmap.addControl(this.addControl)}if(typeof this.setCenter==="object"){if(typeof this.setCenter.geoCodeAddr==="string"){this.geoCodeLookup(this.setCenter.geoCodeAddr)}else{if(this.gmapType==="map"){var a=new GLatLng(this.setCenter.lat,this.setCenter["long"]);this.gmap.setCenter(a,this.zoomLevel)}if(typeof this.setCenter.marker==="object"&&typeof a==="object"){this.addMarker(a,this.setCenter.marker,this.setCenter.marker.clear)}}if(this.gmapType==="panorama"){this.gmap.setLocationAndPOV(new GLatLng(this.setCenter.lat,this.setCenter["long"]),{yaw:this.yaw,pitch:this.pitch,zoom:this.zoom})}}var c=new Ext.util.DelayedTask();c.delay(300,function(){this.addMarkers(this.markers)},this)},onResize:function(a,b){if(typeof this.gmap=="object"){this.gmap.checkResize()}Ext.ux.GMapPanel.superclass.onResize.call(this,a,b)},setSize:function(c,a,b){if(typeof this.gmap=="object"){this.gmap.checkResize()}Ext.ux.GMapPanel.superclass.setSize.call(this,c,a,b)},getMap:function(){return this.gmap},addMarkers:function(c){if(Ext.isArray(c)){for(var b=0;b<c.length;b++){var a=new GLatLng(c[b].lat,c[b]["long"]);this.addMarker(a,c[b].marker,false,c[b].setCenter)}}},addMarker:function(c,d,b,a){Ext.applyIf(d,G_DEFAULT_ICON);if(b===true){this.gmap.clearOverlays()}if(a===true){this.gmap.setCenter(c,this.zoomLevel)}var f=new GMarker(c,d);this.gmap.addOverlay(f)},geoCodeLookup:function(a){this.geocoder=new GClientGeocoder();this.geocoder.getLocations(a,this.addAddressToMap.createDelegate(this))},addAddressToMap:function(a){if(!a||a.Status.code!=200){Ext.MessageBox.alert("Error","Code "+a.Status.code+" Error Returned")}else{place=a.Placemark[0];addressinfo=place.AddressDetails;accuracy=addressinfo.Accuracy;if(accuracy===0){Ext.MessageBox.alert("Unable to Locate Address","Unable to Locate the Address you provided")}else{if(accuracy<7){Ext.MessageBox.alert("Address Accuracy","The address provided has a low accuracy.<br><br>Level "+accuracy+" Accuracy (8 = Exact Match, 1 = Vague Match)")}else{point=new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]);if(typeof this.setCenter.marker==="object"&&typeof point==="object"){this.addMarker(point,this.setCenter.marker,this.setCenter.marker.clear,true)}}}}}});Ext.reg("gmappanel",Ext.ux.GMapPanel);Ext.namespace("Ext.ux");Date.prototype.getFirstDateOfWeek=function(){var a=this.clearTime();var b=this.getWeekOfYear();while(b==a.getWeekOfYear()){a=a.add(Date.DAY,-1)}a=a.add(Date.DAY,1);return a};Ext.ux.DatePickerRange=Ext.extend(Ext.DatePicker,{selectionMode:"month",setSelectionMode:function(a){this.selectionMode=a;this.setValue(this.value)},getSelectionMode:function(){return this.selectionMode()},update:function(C){var a=this.activeDate;this.activeDate=C;if(a&&this.el){var l=C.getTime();if(a.getMonth()==C.getMonth()&&a.getFullYear()==C.getFullYear()){this.cells.removeClass("x-date-selected");this.cells.each(function(d){if(this.isSelected(d.dom.firstChild.dateValue)){d.addClass("x-date-selected")}},this);return}}var h=C.getDaysInMonth();var m=C.getFirstDateOfMonth();var c=m.getDay()-this.startDay;if(c<=this.startDay){c+=7}var y=C.add("mo",-1);var f=y.getDaysInMonth()-c;var b=this.cells.elements;var n=this.textNodes;h+=c;var u=86400000;var A=(new Date(y.getFullYear(),y.getMonth(),f)).clearTime();var z=new Date().clearTime().getTime();var r=C.clearTime().getTime();var q=this.minDate?this.minDate.clearTime():Number.NEGATIVE_INFINITY;var v=this.maxDate?this.maxDate.clearTime():Number.POSITIVE_INFINITY;var D=this.disabledDatesRE;var o=this.disabledDatesText;var F=this.disabledDays?this.disabledDays.join(""):false;var B=this.disabledDaysText;var x=this.format;var j=function(G,d){d.title="";var i=A.getTime();d.firstChild.dateValue=i;if(i==z){d.className+=" x-date-today";d.title=G.todayText}if(G.isSelected(d.firstChild.dateValue)){d.className+=" x-date-selected"}if(i<q){d.className=" x-date-disabled";d.title=G.minText;return}if(i>v){d.className=" x-date-disabled";d.title=G.maxText;return}if(F){if(F.indexOf(A.getDay())!=-1){d.title=B;d.className=" x-date-disabled"}}if(D&&x){var w=A.dateFormat(x);if(D.test(w)){d.title=o.replace("%0",w);d.className=" x-date-disabled"}}};var s=0;for(;s<c;s++){n[s].innerHTML=(++f);A.setDate(A.getDate()+1);b[s].className="x-date-prevday";j(this,b[s])}for(;s<h;s++){intDay=s-c+1;n[s].innerHTML=(intDay);A.setDate(A.getDate()+1);b[s].className="x-date-active";j(this,b[s])}var E=0;for(;s<42;s++){n[s].innerHTML=(++E);A.setDate(A.getDate()+1);b[s].className="x-date-nextday";j(this,b[s])}this.mbtn.setText(this.monthNames[C.getMonth()]+" "+C.getFullYear());if(!this.internalRender){var g=this.el.dom.firstChild;var k=g.offsetWidth;this.el.setWidth(k+this.el.getBorderWidth("lr"));Ext.fly(g).setWidth(k);this.internalRender=true;if(Ext.isOpera&&!this.secondPass){g.rows[0].cells[1].style.width=(k-(g.rows[0].cells[0].offsetWidth+g.rows[0].cells[2].offsetWidth))+"px";this.secondPass=true;this.update.defer(10,this,[C])}}},isSelected:function(a){a=new Date(a);switch(this.selectionMode){case"day":return a.clearTime().getTime()==this.value.clearTime().getTime();break;case"month":return a.getFirstDateOfMonth().clearTime().getTime()==this.value.getFirstDateOfMonth().clearTime().getTime();break;case"week":return a.getFirstDateOfWeek().clearTime().getTime()==this.value.getFirstDateOfWeek().clearTime().getTime();break;default:throw"Illegal selection mode";break}}});Ext.reg("datepickerrange",Ext.ux.DatePickerRange);Ext.ns("Ext.ux","Ext.ux.tree");Ext.ux.tree.CheckboxSelectionModel=function(a){this.addEvents("beforeselect","selectionchange");Ext.apply(this,a);Ext.ux.tree.CheckboxSelectionModel.superclass.constructor.call(this)};Ext.ux.tree.CheckboxSelectionModel=Ext.extend(Ext.ux.tree.CheckboxSelectionModel,Ext.util.Observable,{activateLeafNodesOnly:false,optimizeSelection:false,activeNode:null,activate:function(a){if(!a){return}if(this.activateLeafNodesOnly&&!a.isLeaf()){return false}if(this.activeNode){this.activeNode.ui.onSelectedChange(false)}this.activeNode=a;a.ui.onSelectedChange(true)},clearSelections:function(b){this.suspendEvents(false);var d=this.tree.getChecked();if(d.length>0){for(var c=0,a=d.length;c<a;c++){d[c].ui.toggleCheck(false)}}this.resumeEvents()},getActiveNode:function(){return this.activeNode},getSelectedNodes:function(){return this.tree.getChecked()},init:function(a){this.tree=a;a.getTreeEl().on("keydown",this.onKeyDown,this);a.on("click",this.onNodeClick,this);a.on("beforeappend",this.onBeforeAppend,this);a.on("checkchange",this.onCheckChange,this)},isSelected:function(a){if(a&&a.ui){return a.ui.isChecked()}},onBeforeAppend:function(a,b,c){c.attributes.checked=false},onCheckChange:function(b,a){if(a){this.activate(b);if(this.optimizeSelection){this.optimize(b)}}else{}this.fireEvent("selectionchange",this,this.tree.getChecked())},onNodeClick:function(a){this.select(a);this.activate(a)},select:function(a,c,b){if(!a.ui.isChecked()&&this.fireEvent("beforeselect",this,a)!==false){a.ui.toggleCheck(true)}return a},unselect:function(a){a.ui.toggleCheck(false)},optimize:function(a){this.suspendEvents();this.unselectChildNodes(a);while(a=a.parentNode){if(this.isSelected(a)){a.unselect()}}this.resumeEvents()},unselectChildNodes:function(b){if(b.isExpandable()&&b.isExpanded()){for(var a=0;a<b.childNodes.length;a++){if(b.childNodes[a].isExpandable()){this.unselectChildNodes(b.childNodes[a])}b.childNodes[a].unselect()}}},onKeyDown:Ext.tree.DefaultSelectionModel.prototype.onKeyDown,selectNext:Ext.tree.DefaultSelectionModel.prototype.selectNext,selectPrevious:Ext.tree.DefaultSelectionModel.prototype.selectPrevious});Ext.ns("Ext.ux.display");Ext.ux.display.DisplayPanel=Ext.extend(Ext.form.FormPanel,{cls:"x-ux-display",layout:"ux.display",loadRecord:function(a){return this.getForm().loadRecord(a)},onRender:function(){this.supr().onRender.apply(this,arguments)}});Ext.reg("ux.displaypanel",Ext.ux.display.DisplayPanel);Ext.ns("Ext.ux.display");Ext.ux.display.DisplayField=Ext.extend(Ext.form.DisplayField,{htmlEncode:true,nl2br:false,renderer:function(a){return a},setRawValue:function(b){var a=this.renderer(b);if(this.htmlEncode){a=Ext.util.Format.htmlEncode(a)}if(this.nl2br){a=Ext.util.Format.nl2br(a)}return this.rendered?(this.el.dom.innerHTML=(Ext.isEmpty(a)?"":a)):(this.value=a)}});Ext.reg("ux.displayfield",Ext.ux.display.DisplayField);Ext.ux.display.DisplayTextArea=Ext.extend(Ext.form.TextArea,{readOnly:true,cls:"x-ux-display-textarea"});Ext.reg("ux.displaytextarea",Ext.ux.display.DisplayTextArea);Ext.ns("Ext.ux.layout");Ext.ux.layout.DisplayLayout=Ext.extend(Ext.layout.FormLayout,{background:"none",onLayout:function(a,b){Ext.ux.layout.DisplayLayout.superclass.onLayout.apply(this,arguments);b.addClass("x-ux-display-background-"+this.background);if(this.declaration&&!this.declEl){this.declEl=b.createChild({dom:"div",html:this.declaration,"class":"x-ux-display-declaration x-ux-display-background-declaration"})}},destroy:function(){if(this.declEl){this.declEl.remove()}Ext.ux.layout.DisplayLayout.superclass.destroy.call(this)}});Ext.Container.LAYOUTS["ux.display"]=Ext.ux.layout.DisplayLayout;Ext.namespace("Tine.widgets");Tine.widgets.LangChooser=Ext.extend(Ext.form.ComboBox,{fieldLabel:null,displayField:"language",valueField:"locale",triggerAction:"all",width:100,listWidth:200,initComponent:function(){this.value=Tine.Tinebase.registry.get("locale").language;this.fieldLabel=this.fieldLabel?this.fieldLabel:_("Language");this.tpl=new Ext.XTemplate('<tpl for="."><div class="x-combo-list-item">{language} <tpl if="region.length &gt; 1">{region}</tpl> [{locale}]</div></tpl>',{encode:function(a){return Ext.util.Format.htmlEncode(a)}});this.store=new Ext.data.JsonStore({id:"locale",root:"results",totalProperty:"totalcount",fields:Tine.Tinebase.Model.Language,baseParams:{method:"Tinebase.getAvailableTranslations"}});Tine.widgets.LangChooser.superclass.initComponent.call(this);this.on("select",this.onLangSelect,this)},onLangSelect:function(d,c,a){var f=Tine.Tinebase.registry.get("locale").locale;var b=c.get("locale");if(b!=f){Ext.MessageBox.wait(_("setting new language..."),_("Please Wait"));Ext.Ajax.request({scope:this,params:{method:"Tinebase.setLocale",localeString:b,saveaspreference:true,setcookie:true},success:function(g,i){if(window.google&&google.gears&&google.gears.localServer){var h=google.gears.localServer.openStore("tine20-package-store");if(h){google.gears.localServer.removeStore("tine20-package-store")}}window.location=window.location.href.replace(/#+.*/,"")}})}}});Ext.namespace("Tine","Tine.widgets");Tine.widgets.ActionUpdater=function(a){var b=a.actions||[];delete (a.actions);Ext.apply(this,a);this.addActions(b)};Tine.widgets.ActionUpdater.prototype={actions:[],grantsProperty:"account_grants",containerProperty:"container_id",addActions:function(c){switch(typeof(c)){case"object":if(typeof(c.each)=="function"){c.each(this.addAction,this)}else{for(var b in c){this.addAction(c[b])}}break;case"array":for(var a=0;a<c.length;a++){this.addAction(c[a])}break}},addAction:function(a){if(a.initialConfig){if(a.requiredGrant){Ext.applyIf(a.initialConfig,{requiredGrant:a.requiredGrant,actionUpdater:a.actionUpdater,allowMultiple:a.allowMultiple,singularText:a.singularText,pluralText:a.pluralText,translationObject:a.translationObject})}this.actions.push(a)}},updateActions:function(b){if(typeof(b.getSelections)=="function"){b=b.getSelections()}else{if(typeof(b.beginEdit)=="function"){b=[b]}}var a=this.getGrantsSum(b);this.each(function(c){if(typeof(c.actionUpdater)=="function"){c.actionUpdater.call(c.scope||c,a,b)}else{this.defaultUpdater(c,a,b)}},this)},defaultUpdater:function(d,b,c){var a=c.length!=0&&(c.length>1?d.initialConfig.allowMultiple:true);if(d.initialConfig.requiredGrant){d.setDisabled(!(b[d.initialConfig.requiredGrant]&&a))}if(d.initialConfig.singularText&&d.initialConfig.pluralText&&d.initialConfig.translationObject){var f=d.initialConfig.translationObject.n_(d.initialConfig.singularText,d.initialConfig.pluralText,c.length);d.setText(f)}},each:function(c,b){for(var a=0;a<this.actions.length;a++){if(c.call(b||this.actions[a],this.actions[a])===false){break}}},getGrantsSum:function(c){var g=c.length==0?false:true;var a={addGrant:g,adminGrant:g,deleteGrant:g,editGrant:g,readGrant:g};var f;for(var d=0;d<c.length;d++){f=this.containerProperty?c[d].get(this.containerProperty)[this.grantsProperty]:this.grantsProperty?c[d].get(this.grantsProperty):c[d].data;for(var b in a){if(a.hasOwnProperty(b)){a[b]=a[b]&f[b]}}}return a}};Tine.widgets.actionUpdater=function(b,f,g,h){if(!g){g="container_id"}if(typeof(b.getSelections)=="function"){b=b.getSelections()}else{if(typeof(b.beginEdit)=="function"){b=[b]}}var k=b.length==0?false:true;var l={addGrant:k,adminGrant:k,deleteGrant:k,editGrant:k,readGrant:k};for(var j=0;j<b.length;j++){var m=b[j].get(g)?b[j].get(g).account_grants:{};for(var a in l){l[a]=l[a]&m[a]}}var d=function(n){var q=n.initialConfig;if(q){if(n.requiredGrant){q={requiredGrant:n.requiredGrant,allowMultiple:n.allowMultiple,singularText:n.singularText,pluralText:n.pluralText,translationObject:n.translationObject}}var o=q.requiredGrant;if(o&&o!="addGrant"){var i=h||l[o];if(b.length>1&&!q.allowMultiple){i=false}if(b.length==0){i=false}n.setDisabled(!i);if(q.singularText&&q.pluralText&&q.translationObject){var r=q.translationObject.n_(q.singularText,q.pluralText,b.length);n.setText(r)}}}};switch(typeof(f)){case"object":if(typeof(f.each)=="function"){f.each(d,this)}else{for(var c in f){d(f[c])}}break;case"array":for(var j=0;j<f.length;j++){d(f[j])}break}};Ext.namespace("Tine.widgets");Ext.namespace("Tine.widgets.dialog");Tine.widgets.dialog.EditRecord=Ext.extend(Ext.FormPanel,{tbarItems:false,appName:null,containerName:"container",containersName:"containers",containerProperty:"container_id",showContainerSelector:false,handlerScope:null,handlerSaveAndClose:null,handlerApplyChanges:null,handlerCancel:null,windowLayout:"border",window:null,bodyStyle:"padding:5px",anchor:"100% 100%",region:"center",deferredRender:false,buttonAlign:"right",cls:"tw-editdialog",initComponent:function(){this.addEvents("cancel","saveAndClose","update","apply");this.initHandlers();this.action_saveAndClose=new Ext.Action({requiredGrant:"editGrant",text:_("Ok"),minWidth:70,handler:this.handlerSaveAndClose,iconCls:"action_saveAndClose",scope:this.handlerScope});this.action_applyChanges=new Ext.Action({requiredGrant:"editGrant",text:_("Apply"),minWidth:70,handler:this.handlerApplyChanges,iconCls:"action_applyChanges",scope:this.handlerScope});this.action_cancel=new Ext.Action({text:_("Cancel"),minWidth:70,handler:this.handlerCancel,iconCls:"action_cancel",scope:this.handlerScope});this.action_delete=new Ext.Action({requiredGrant:"deleteGrant",text:_("delete"),minWidth:70,handler:this.handlerDelete,iconCls:"action_delete",scope:this.handlerScope,disabled:true});var a=[this.action_delete];this.buttons=[this.action_cancel,this.action_saveAndClose];if(this.tbarItems){this.tbar=new Ext.Toolbar({items:this.tbarItems})}Tine.widgets.dialog.EditRecord.superclass.initComponent.call(this)},onRender:function(b,a){Tine.widgets.dialog.EditRecord.superclass.onRender.call(this,b,a);if(this.showContainerSelector){this.recordContainerEl=this.footer.first().insertFirst({tag:"div",style:{position:"relative",top:"4px","float":"left"}});var c=new Tine.widgets.container.selectionComboBox({id:this.appName+"EditRecordContainerSelector",fieldLabel:_("Saved in"),width:300,name:this.containerProperty,containerName:this.containerName,containersName:this.containersName,appName:this.appName});this.getForm().add(c);var d=new Ext.Panel({layout:"form",border:false,renderTo:this.recordContainerEl,bodyStyle:{"background-color":"#F0F0F0"},items:c})}},initHandlers:function(){this.handlerScope=this.handlerScope?this.handlerScope:this;this.handlerSaveAndClose=this.handlerSaveAndClose?this.handlerSaveAndClose:function(b,a){this.handlerApplyChanges(b,a,true)};this.handlerCancel=this.handlerCancel?this.handlerCancel:this.closeWindow},updateToolbars:function(a,c){var b=[this.action_saveAndClose,this.action_applyChanges,this.action_delete,this.action_cancel];Tine.widgets.actionUpdater(a,b,c);Tine.widgets.actionUpdater(a,this.tbarItems,c)},getToolbar:function(){return this.getTopToolbar()},onCancel:function(){this.fireEvent("cancel");this.purgeListeners()},onSaveAndClose:function(){this.fireEvent("saveAndClose")},onApply:function(){this.fireEvent("apply")},closeWindow:function(){this.window.close()}});Ext.reg("tineeditrecord",Tine.widgets.dialog.EditRecord);Ext.namespace("Tine.widgets");Ext.namespace("Tine.widgets.Priority");Tine.widgets.Priority.getStore=function(){if(!Tine.widgets.Priority.store){Tine.widgets.Priority.store=new Ext.data.SimpleStore({storeId:"Priorities",id:"key",fields:["key","value","icon"],data:[["0",_("low"),""],["1",_("normal"),""],["2",_("high"),""],["3",_("urgent"),""]]})}return Tine.widgets.Priority.store};Tine.widgets.Priority.Combo=Ext.extend(Ext.form.ComboBox,{autoExpand:false,blurOnSelect:false,displayField:"value",valueField:"key",mode:"local",triggerAction:"all",editable:false,lazyInit:false,initComponent:function(){Tine.widgets.Priority.Combo.superclass.initComponent.call(this);if(!this.value){this.value=1}this.store=Tine.widgets.Priority.getStore();if(this.autoExpand){this.lazyInit=false;this.on("focus",function(){this.onTriggerClick()})}if(this.blurOnSelect){this.on("select",function(){this.fireEvent("blur",this)},this)}},setValue:function(a){a=a||1;Tine.widgets.Priority.Combo.superclass.setValue.call(this,a)}});Ext.reg("tineprioritycombo",Tine.widgets.Priority.Combo);Tine.widgets.Priority.renderer=function(b){var c=Tine.widgets.Priority.getStore();var a=c.find("key",b);return(a!==undefined&&a>=0)?c.getAt(a).data.value:b};Ext.namespace("Tine.widgets");Tine.widgets.VersionCheck=function(){var a=new Ext.data.Store({proxy:new Ext.data.ScriptTagProxy({url:"https://versioncheck.officespot20.com/versionCheck/versionCheck.php"}),reader:new Ext.data.JsonReader({root:"version"},["codeName","packageString","releaseTime","critical","build"])});a.on("load",function(f,d){if(!Tine.Tinebase.registry.get("version")){return false}var b=d[0];var g=Date.parseDate(Tine.Tinebase.registry.get("version").releasetime,Date.patterns.ISO8601Long);var c=Date.parseDate(b.get("releasetime"),Date.patterns.ISO8601Long);if(c>g&&Tine.Tinebase.common.hasRight("run","Tinebase")){if(b.get("critical")==true){Ext.MessageBox.show({title:_("New version of Tine 2.0 available"),msg:String.format(_('Version "{0}" of Tine 2.0 is available.'),b.get("codeName"))+"\n"+_("It's a critical update and must be installed as soon as possible!"),width:500,buttons:Ext.Msg.OK,icon:Ext.MessageBox.ERROR})}else{Ext.MessageBox.show({title:_("New version of Tine 2.0 available"),msg:String.format(_('Version "{0}" of Tine 2.0 is available.'),b.get("codeName"))+"\n"+_("Please consider updating!"),width:400,buttons:Ext.Msg.OK,icon:Ext.MessageBox.INFO})}}},this);a.load({params:{version:Ext.util.JSON.encode(Tine.Tinebase.registry.get("version"))}})};Ext.namespace("Tine.widgets.account");Tine.widgets.account.PickerGridPanel=Ext.extend(Ext.grid.GridPanel,{selectType:"user",selectTypeDefault:"user",selectAnyone:true,enableBbar:true,store:null,recordClass:null,userStatus:"enabled",contextMenu:null,hasAccountPrefix:false,recordPrefix:"",autoExpandColumn:"name",configColumns:null,contextMenuItems:null,initComponent:function(){this.recordPrefix=(this.hasAccountPrefix)?"account_":"";this.recordClass=(this.recordClass!==null)?this.recordClass:Tine.Tinebase.Model.Account;this.configColumns=(this.configColumns!==null)?this.configColumns:[];this.contextMenuItems=(this.contextMenuItems!==null)?this.contextMenuItems:[];this.initStore();this.initActionsAndToolbars();this.initGrid();Tine.widgets.account.PickerGridPanel.superclass.initComponent.call(this)},initStore:function(){if(this.store===null){this.store=new Ext.data.SimpleStore({fields:this.recordClass})}this.store.on("add",function(b,a,c){(function(){if(this.rendered){this.getView().focusRow(c);this.getSelectionModel().selectRow(c)}}).defer(300,this)},this)},initActionsAndToolbars:function(){this.actionRemove=new Ext.Action({text:_("Remove account"),disabled:true,scope:this,handler:this.onRemove,iconCls:"action_deleteContact"});var b=[this.actionRemove];this.contextMenu=new Ext.menu.Menu({items:b.concat(this.contextMenuItems)});this.accountTypeSelector=this.getAccountTypeSelector();this.contactSearchCombo=this.getContactSearchCombo();this.groupSearchCombo=this.getGroupSearchCombo();var a=[];switch(this.selectType){case"both":a=a.concat([this.contactSearchCombo,this.groupSearchCombo]);if(this.selectTypeDefault=="user"){this.groupSearchCombo.hide()}else{this.contactSearchCombo.hide()}break;case"user":a=this.contactSearchCombo;break;case"group":a=this.groupSearchCombo;break}this.comboPanel=new Ext.Panel({layout:"hfit",border:false,items:a,columnWidth:1});this.tbar=new Ext.Toolbar({items:[this.accountTypeSelector,this.comboPanel],layout:"column"});if(this.enableBbar){this.bbar=new Ext.Toolbar({items:[this.actionRemove]})}},getAccountTypeSelector:function(){var a={text:_("Search User"),scope:this,iconCls:"tinebase-accounttype-user",handler:this.onSwitchCombo.createDelegate(this,["contact","tinebase-accounttype-user"])};var d={text:_("Search Group"),scope:this,iconCls:"tinebase-accounttype-group",handler:this.onSwitchCombo.createDelegate(this,["group","tinebase-accounttype-group"])};var c={text:_("Add Anyone"),scope:this,newRecordClass:this.recordClass,iconCls:"tinebase-accounttype-addanyone",handler:function(){var g={};g[this.recordPrefix+"type"]="anyone";g[this.recordPrefix+"name"]=_("Anyone");g[this.recordPrefix+"id"]=0;var f=new this.recordClass(g,0);if(!this.store.getById(f.id)){this.store.add([f])}}};var b=[];switch(this.selectType){case"both":b=b.concat([a,d]);if(this.selectAnyone){b.push(c)}break;case"user":b=a;break;case"group":b=d;break}return new Ext.Action({width:20,text:"",disabled:false,iconCls:(this.selectTypeDefault)?"tinebase-accounttype-user":"tinebase-accounttype-group",menu:new Ext.menu.Menu({items:b}),scope:this})},getContactSearchCombo:function(){return new Tine.Addressbook.SearchCombo({accountsStore:this.store,emptyText:_("Search for users ..."),newRecordClass:this.recordClass,recordPrefix:this.recordPrefix,internalContactsOnly:true,additionalFilters:[{field:"user_status",operator:"equals",value:this.userStatus}],onSelect:this.onAddRecordFromCombo})},getGroupSearchCombo:function(){return new Tine.Tinebase.widgets.form.RecordPickerComboBox({accountsStore:this.store,blurOnSelect:true,recordClass:Tine.Tinebase.Model.Group,newRecordClass:this.recordClass,recordPrefix:this.recordPrefix,emptyText:_("Search for groups ..."),onSelect:this.onAddRecordFromCombo})},initGrid:function(){this.cm=this.getColumnModel();this.selModel=new Ext.grid.RowSelectionModel({multiSelect:true});var b=[];for(var a=0;a<this.configColumns.length;a++){if(!this.configColumns[a].init||typeof(this.configColumns[a].init)!="function"){b.push(this.configColumns[a])}}for(var a=0;a<b.length;a++){this.configColumns.remove(b[a])}this.plugins=this.configColumns;this.selModel.on("selectionchange",function(d){var c=d.getCount();this.actionRemove.setDisabled(c==0)},this);this.on("rowcontextmenu",function(d,g,f){f.stopEvent();var c=d.getSelectionModel();if(!c.isSelected(g)){c.selectRow(g)}this.contextMenu.showAt(f.getXY())},this)},getColumnModel:function(){return new Ext.grid.ColumnModel({defaults:{sortable:true},columns:[{id:"name",header:_("Name"),dataIndex:this.recordPrefix+"name",renderer:Tine.Tinebase.common.accountRenderer}].concat(this.configColumns)})},onRemove:function(b,c){var d=this.getSelectionModel().getSelections();for(var a=0;a<d.length;++a){this.store.remove(d[a])}},onKeyDown:function(a){if(a.ctrlKey){switch(a.getKey()){case a.A:this.getSelectionModel().selectAll(true);a.preventDefault();break}}else{switch(a.getKey()){case a.DELETE:this.onRemove();break}}},onAddRecordFromCombo:function(c){var b={};if(c.data.account_id){b[this.recordPrefix+"id"]=c.data.account_id;b[this.recordPrefix+"type"]="user";b[this.recordPrefix+"name"]=c.data.n_fileas;b[this.recordPrefix+"data"]=c.data;var a=new this.newRecordClass(b,c.data.account_id)}else{if(c.data.name){b[this.recordPrefix+"id"]=c.id;b[this.recordPrefix+"type"]="group";b[this.recordPrefix+"name"]=c.data.name;b[this.recordPrefix+"data"]=c.data;var a=new this.newRecordClass(b,c.id)}}if(!this.accountsStore.getById(a.id)){this.accountsStore.add([a])}this.collapse();this.clearValue();this.reset()},onSwitchCombo:function(a,b){var d=(a=="contact")?this.contactSearchCombo:this.groupSearchCombo;var f=(a=="contact")?this.groupSearchCombo:this.contactSearchCombo;if(!d.isVisible()){var c=f.getWidth();f.hide();d.show();d.setWidth(c-1);d.setWidth(d.getWidth()+1);this.accountTypeSelector.setIconClass(b)}}});Ext.ns("Tine.widgets","Tine.widgets.dialog");Tine.widgets.dialog.AlarmPanel=Ext.extend(Ext.Panel,{layout:"form",border:true,frame:true,labelAlign:"top",autoScroll:true,defaults:{anchor:"100%",labelSeparator:""},initComponent:function(){this.title=_("Alarms");this.items=this.getFormItems();Tine.widgets.dialog.AlarmPanel.superclass.initComponent.call(this)},getFormItems:function(){this.alarmCombo=new Ext.form.ComboBox({columnWidth:0.33,fieldLabel:_("Send Alarm"),name:"alarm_time_before",typeAhead:false,triggerAction:"all",lazyRender:true,editable:false,mode:"local",forceSelection:true,value:"none",store:[["none",_("None")],["0",_("0 minutes before")],["15",_("15 minutes before")],["30",_("30 minutes before")],["60",_("1 hour before")],["120",_("2 hours before")],["1440",_("1 day before")]]});return{layout:"column",style:"padding-top: 5px;",items:this.alarmCombo}},onRecordLoad:function(a){this.record=a;if(a.get("alarms")&&a.get("alarms").length>0){var b=a.get("alarms")[0];this.alarmCombo.setValue(b.minutes_before)}},onRecordUpdate:function(b){var a=this.alarmCombo.getValue();var c=null;if(a!="none"){c=(b.get("alarms")&&b.get("alarms").length>0)?b.get("alarms")[0]:{};c.minutes_before=a}b.set("alarms","");if(c!=null){b.set("alarms",[c])}}});Ext.namespace("Tine.widgets");Ext.namespace("Tine.widgets.dialog");Tine.widgets.dialog.EditDialog=Ext.extend(Ext.FormPanel,{app:null,mode:"remote",tbarItems:false,appName:null,recordClass:null,recordProxy:null,showContainerSelector:false,evalGrants:true,record:null,getDefaultsAgain:true,saveAndCloseButtonText:"",bodyStyle:"padding:5px",layout:"fit",border:false,cls:"tw-editdialog",anchor:"100% 100%",deferredRender:false,buttonAlign:"right",bufferResize:500,initComponent:function(){this.addEvents("cancel","saveAndClose","update","apply","load");if(this.recordClass){this.appName=this.appName?this.appName:this.recordClass.getMeta("appName");this.modelName=this.modelName?this.modelName:this.recordClass.getMeta("modelName")}if(!this.app){this.app=Tine.Tinebase.appMgr.get(this.appName)}if(this.app.i18n&&this.recordClass!==null){this.i18nRecordName=this.app.i18n.n_hidden(this.recordClass.getMeta("recordName"),this.recordClass.getMeta("recordsName"),1);this.i18nRecordsName=this.app.i18n._hidden(this.recordClass.getMeta("recordsName"))}if(!this.recordProxy&&this.recordClass){this.recordProxy=new Tine.Tinebase.data.RecordProxy({recordClass:this.recordClass})}this.initActions();this.initButtons();this.initRecord();this.items=this.getFormItems();Tine.widgets.dialog.EditDialog.superclass.initComponent.call(this)},initActions:function(){this.action_saveAndClose=new Ext.Action({requiredGrant:"editGrant",text:(this.saveAndCloseButtonText!="")?this.app.i18n._(this.saveAndCloseButtonText):_("Ok"),minWidth:70,scope:this,handler:this.onSaveAndClose,iconCls:"action_saveAndClose"});this.action_applyChanges=new Ext.Action({requiredGrant:"editGrant",text:_("Apply"),minWidth:70,scope:this,handler:this.onApplyChanges,iconCls:"action_applyChanges"});this.action_cancel=new Ext.Action({text:_("Cancel"),minWidth:70,scope:this,handler:this.onCancel,iconCls:"action_cancel"});this.action_delete=new Ext.Action({requiredGrant:"deleteGrant",text:_("delete"),minWidth:70,scope:this,handler:this.onDelete,iconCls:"action_delete",disabled:true})},initButtons:function(){var a=[this.action_delete];this.buttons=[this.action_cancel,this.action_saveAndClose];if(this.tbarItems){this.tbar=new Ext.Toolbar({items:this.tbarItems})}},initRecord:function(){if(this.mode!=="local"){if(this.record&&this.record.id){this.loadRequest=this.recordProxy.loadRecord(this.record,{scope:this,success:function(a){this.record=a;this.onRecordLoad()}})}else{if(this.getDefaultsAgain){this.record=new this.recordClass(this.recordClass.getDefaultData(),0)}this.onRecordLoad()}}else{if(!typeof this.record.beginEdit!="function"){this.record=this.recordProxy.recordReader({responseText:this.record})}this.onRecordLoad()}},onRecordLoad:function(){if(!this.rendered){this.onRecordLoad.defer(250,this);return}if(!this.record.id){this.window.setTitle(String.format(_("Add New {0}"),this.i18nRecordName))}else{this.window.setTitle(String.format(_('Edit {0} "{1}"'),this.i18nRecordName,this.record.getTitle()))}if(this.fireEvent("load",this)!==false){this.getForm().loadRecord(this.record);this.updateToolbars(this.record,this.recordClass.getMeta("containerProperty"));this.loadMask.hide()}},onRecordUpdate:function(){var a=this.getForm();a.updateRecord(this.record)},onRender:function(b,a){Tine.widgets.dialog.EditDialog.superclass.onRender.call(this,b,a);var f=new Ext.KeyMap(this.el,[{key:[10,13],ctrl:true,fn:this.onSaveAndClose,scope:this}]);if(this.showContainerSelector){this.recordContainerEl=this.footer.first().insertFirst({tag:"div",style:{position:"relative",top:"4px","float":"left"}});var c=new Tine.widgets.container.selectionComboBox({id:this.app.appName+"EditDialogContainerSelector",fieldLabel:_("Saved in"),width:300,name:this.recordClass.getMeta("containerProperty"),containerName:this.app.i18n.n_hidden(this.recordClass.getMeta("containerName"),this.recordClass.getMeta("containersName"),1),containersName:this.app.i18n._hidden(this.recordClass.getMeta("containersName")),appName:this.app.appName,requiredGrant:this.evalGrants?"addGrant":false});this.getForm().add(c);var d=new Ext.Panel({layout:"form",border:false,renderTo:this.recordContainerEl,bodyStyle:{"background-color":"#F0F0F0"},items:c})}this.loadMask=new Ext.LoadMask(b,{msg:String.format(_("Transfering {0}..."),this.i18nRecordName)});if(this.recordProxy!==null&&this.recordProxy.isLoading(this.loadRequest)){this.loadMask.show()}},updateToolbars:function(a,c){if(!this.evalGrants){return}var b=[this.action_saveAndClose,this.action_applyChanges,this.action_delete,this.action_cancel];Tine.widgets.actionUpdater(a,b,c);Tine.widgets.actionUpdater(a,this.tbarItems,c)},getToolbar:function(){return this.getTopToolbar()},isValid:function(){return this.getForm().isValid()},onCancel:function(){this.fireEvent("cancel");this.purgeListeners();this.window.close()},onSaveAndClose:function(a,b){this.onApplyChanges(a,b,true);this.fireEvent("saveAndClose")},onApplyChanges:function(a,c,b){if(this.isValid()){this.loadMask.show();this.onRecordUpdate();if(this.mode!=="local"){this.recordProxy.saveRecord(this.record,{scope:this,success:function(d){this.record=d;this.onRecordLoad();this.fireEvent("update",Ext.util.JSON.encode(this.record.data));this.window.rename(this.windowNamePrefix+this.record.id);if(b){this.purgeListeners();this.window.close()}},failure:this.onRequestFailed,timeout:150000})}else{this.onRecordLoad();this.fireEvent("update",Ext.util.JSON.encode(this.record.data));this.window.rename(this.windowNamePrefix+this.record.id);if(b){this.purgeListeners();this.window.close()}}}else{Ext.MessageBox.alert(_("Errors"),_("Please fix the errors noted."))}},onDelete:function(a,b){Ext.MessageBox.confirm(_("Confirm"),String.format(_("Do you really want to delete this {0}?"),this.i18nRecordName),function(c){if(a=="yes"){var d=new Ext.LoadMask(this.getEl(),{msg:String.format(_("Deleting {0}"),this.i18nRecordName)});d.show();this.recordProxy.deleteRecords(this.record,{scope:this,success:function(){this.purgeListeners();this.window.close()},failure:function(){Ext.MessageBox.alert(_("Failed"),String.format(_("Could not delete {0}."),this.i18nRecordName));Ext.MessageBox.hide()}})}})},onRequestFailed:function(a){Tine.Tinebase.ExceptionHandler.handleRequestException(a)}});Ext.namespace("Tine.widgets","Tine.widgets.dialog");Tine.widgets.dialog.CredentialsDialog=Ext.extend(Tine.widgets.dialog.EditDialog,{windowTitle:"",credentialsId:null,windowNamePrefix:"CredentialsWindow_",loadRecord:false,tbarItems:[],evalGrants:false,sendRequest:true,initRecord:function(){},onRender:function(){this.supr().onRender.apply(this,arguments);this.window.setTitle(this.windowTitle)},getFormItems:function(){return{bodyStyle:"padding:5px;",buttonAlign:"right",labelAlign:"top",border:false,layout:"form",defaults:{xtype:"textfield",anchor:"90%",listeners:{scope:this,specialkey:function(b,a){if(a.getKey()==a.ENTER){this.onApplyChanges({},a,true)}}}},items:[{fieldLabel:_("Username"),name:"username",allowBlank:false},{fieldLabel:_("Password"),name:"password",inputType:"password"}]}},onApplyChanges:function(b,f,d){var c=this.getForm();if(c.isValid()){var a=c.getValues();if(this.sendRequest){this.loadMask.show();var g={method:this.appName+".changeCredentials",password:a.password,username:a.username,id:this.credentialsId};Ext.Ajax.request({params:g,scope:this,success:function(i,h){this.loadMask.hide();this.fireEvent("update",i);if(d){this.purgeListeners();this.window.close()}}})}else{this.fireEvent("update",a);this.window.close()}}else{Ext.MessageBox.alert(_("Errors"),_("Please fix the errors noted."))}}});Tine.widgets.dialog.CredentialsDialog.openWindow=function(a){var b=Tine.WindowFactory.getWindow({width:240,height:180,name:Tine.widgets.dialog.CredentialsDialog.windowNamePrefix+Ext.id(),contentPanelConstructor:"Tine.widgets.dialog.CredentialsDialog",contentPanelConstructorConfig:a,modal:true});return b};Ext.namespace("Tine.widgets");Ext.namespace("Tine.widgets.dialog");Tine.widgets.dialog.Preferences=Ext.extend(Ext.FormPanel,{i18n:null,prefsCardPanel:null,treePanel:null,prefPanels:{},adminMode:false,adminPrefPanels:{},bodyStyle:"padding:5px",layout:"fit",cls:"tw-editdialog",anchor:"100% 100%",buttonAlign:"right",initComponent:function(){this.addEvents("cancel","saveAndClose","update");this.i18n=new Locale.Gettext();this.i18n.textdomain("Tinebase");this.initActions();this.initButtons();this.items=this.getItems();Tine.widgets.dialog.Preferences.superclass.initComponent.call(this)},initActions:function(){this.action_saveAndClose=new Ext.Action({text:_("Ok"),minWidth:70,scope:this,handler:this.onSaveAndClose,iconCls:"action_saveAndClose"});this.action_cancel=new Ext.Action({text:_("Cancel"),minWidth:70,scope:this,handler:this.onCancel,iconCls:"action_cancel"});this.action_switchAdminMode=new Ext.Action({text:_("Admin Mode"),minWidth:70,scope:this,handler:this.onSwitchAdminMode,iconCls:"action_adminMode",enableToggle:true})},initButtons:function(){this.buttons=[this.action_cancel,this.action_saveAndClose];this.tbar=new Ext.Toolbar({items:[this.action_switchAdminMode]})},getItems:function(){this.prefsCardPanel=new Tine.widgets.dialog.PreferencesCardPanel({region:"center"});this.treePanel=new Tine.widgets.dialog.PreferencesTreePanel({title:_("Applications"),region:"west",width:200,frame:true});return[{xtype:"panel",autoScroll:true,border:true,frame:true,layout:"border",items:[this.treePanel,this.prefsCardPanel]}]},onRender:function(b,a){Tine.widgets.dialog.Preferences.superclass.onRender.call(this,b,a);this.setHeight(Ext.fly(this.el.dom.parentNode).getHeight());this.window.setTitle(this.i18n._("Edit Preferences"));this.loadMask=new Ext.LoadMask(b,{msg:_("Loading ...")})},onCancel:function(){this.fireEvent("cancel");this.purgeListeners();this.window.close()},onDestroy:function(){for(var a in this.adminPrefPanels){if(this.adminPrefPanels.hasOwnProperty(a)){if(this.adminPrefPanels[a]!==null){this.adminPrefPanels[a].destroy();this.adminPrefPanels[a]=null}}}for(a in this.prefPanels){if(this.prefPanels.hasOwnProperty(a)){if(this.prefPanels[a]!==null){this.prefPanels[a].destroy();this.prefPanels[a]=null}}}this.prefsCardPanel.destroy();this.prefsCardPanel=null;Tine.widgets.dialog.Preferences.superclass.onDestroy.apply(this,arguments)},onSaveAndClose:function(a,b){this.onApplyChanges(a,b,true);this.fireEvent("saveAndClose")},onApplyChanges:function(a,c,b){this.loadMask.show();var d=this.getValuesFromPanels();Ext.Ajax.request({scope:this,params:{method:"Tinebase.savePreferences",data:Ext.util.JSON.encode(d),adminMode:(this.adminMode)?1:0},success:function(f){this.loadMask.hide();this.updateRegistry(Ext.util.JSON.decode(f.responseText).results);if(b){this.purgeListeners();this.window.close()}},failure:function(f){Ext.MessageBox.alert(_("Errors"),_("Saving of preferences failed."))}})},getValuesFromPanels:function(){var a,f={};var c=(this.adminMode)?this.adminPrefPanels:this.prefPanels;for(panelName in c){if(c.hasOwnProperty(panelName)){a=c[panelName];if(a!==null){f[a.appName]={};for(var b=0;b<a.items.length;b++){var d=a.items.items[b];if(d&&d.name){if(this.adminMode){f[a.appName][d.prefId]={value:d.getValue(),name:d.name};f[a.appName][d.prefId].type=(Ext.getCmp(d.name+"_writable").getValue()==1)?"default":"forced"}else{f[a.appName][d.name]={value:d.getValue()}}}}}}}return f},updateRegistry:function(b){for(application in b){if(b.hasOwnProperty(application)){appPrefs=b[application];var d=Tine[application].registry.get("preferences");var c=false;for(var a=0;a<appPrefs.length;a++){if(d.get(appPrefs[a].name)!=appPrefs[a].value){d.replace(appPrefs[a].name,appPrefs[a].value);c=true}}if(c){Tine[application].registry.replace("preferences",d)}}}},onSwitchAdminMode:function(a,b){this.adminMode=(!this.adminMode);if(this.adminMode){this.prefsCardPanel.addClass("prefpanel_adminMode")}else{this.prefsCardPanel.removeClass("prefpanel_adminMode")}var c=this.treePanel.getSelectionModel().getSelectedNode();if(c){this.showPrefsForApp(this.treePanel.getSelectionModel().getSelectedNode().id)}this.treePanel.checkGrants(this.adminMode)},initPrefStore:function(a){this.loadMask.show();var c=(this.adminMode)?[{field:"account",operator:"equals",value:{accountId:0,accountType:"anyone"}}]:"";var b=new Ext.data.JsonStore({fields:Tine.Tinebase.Model.Preference,baseParams:{method:"Tinebase.searchPreferencesForApplication",applicationName:a,filter:Ext.util.JSON.encode(c)},listeners:{load:this.onStoreLoad,scope:this},root:"results",totalProperty:"totalcount",id:"id",remoteSort:false});b.load()},onStoreLoad:function(c,b,f){var a=c.baseParams.applicationName;var d=new Tine.widgets.dialog.PreferencesPanel({prefStore:c,appName:a,adminMode:this.adminMode});d.on("change",function(g){var h=this.treePanel.getNodeById(g);h.setText(h.text+"*")},this);if(this.adminMode){this.adminPrefPanels[a]=d}else{this.prefPanels[a]=d}this.activateCard(d,false);this.loadMask.hide()},activateCard:function(a,b){if(!b){this.prefsCardPanel.add(a);this.prefsCardPanel.layout.container.add(a)}this.prefsCardPanel.layout.setActiveItem(a.id);a.doLayout()},showPrefsForApp:function(a){var b=(this.adminMode)?this.adminPrefPanels[a]:this.prefPanels[a];if(!this.adminMode){this.action_switchAdminMode.setDisabled(!Tine.Tinebase.common.hasRight("admin",a))}if(!b){this.initPrefStore(a)}else{this.activateCard(b,true)}}});Tine.widgets.dialog.Preferences.openWindow=function(a){var b=Tine.WindowFactory.getWindow({width:800,height:470,name:"Preferences",contentPanelConstructor:"Tine.widgets.dialog.Preferences",contentPanelConstructorConfig:a});return b};Ext.namespace("Tine.widgets");Ext.namespace("Tine.widgets.dialog");Tine.widgets.dialog.PreferencesTreePanel=Ext.extend(Ext.tree.TreePanel,{iconCls:"x-new-application",rootVisible:true,border:false,autoScroll:true,initComponent:function(){Tine.widgets.dialog.PreferencesTreePanel.superclass.initComponent.call(this);this.initTreeNodes();this.initHandlers();this.selectRoot.defer(200,this)},selectRoot:function(){this.fireEvent("click",this.getRootNode())},initTreeNodes:function(){var a=new Ext.tree.TreeNode({text:_("General Preferences"),id:"Tinebase",draggable:false,allowDrop:false,expanded:true});this.setRootNode(a);var b=Tine.Tinebase.appMgr.getAll();b.each(function(d){var c=new Ext.tree.TreeNode({text:d.getTitle(),cls:"file",id:d.appName,leaf:null});a.appendChild(c)},this)},initHandlers:function(){this.on("click",function(b){b.getOwnerTree().selectPath(b.getPath());b.expand();var a=this.findParentByType(Tine.widgets.dialog.Preferences);a.showPrefsForApp(b.id)},this);this.on("beforeexpand",function(a){if(a.getSelectionModel().getSelectedNode()===null){a.expandPath("/Tinebase");a.selectPath("/Tinebase")}a.fireEvent("click",a.getSelectionModel().getSelectedNode())},this)},checkGrants:function(b){var a=this.getRootNode();a.eachChild(function(c){if(!Tine.Tinebase.common.hasRight("admin",c.id)&&b){c.disable()}else{c.enable()}})}});Ext.namespace("Tine.widgets");Ext.namespace("Tine.widgets.dialog");Tine.widgets.dialog.PreferencesCardPanel=Ext.extend(Ext.Panel,{layout:"card",border:false,frame:true,labelAlign:"top",autoScroll:true,defaults:{anchor:"100%"},initComponent:function(){this.title=_("Preferences");Tine.widgets.dialog.PreferencesCardPanel.superclass.initComponent.call(this)}});Tine.widgets.dialog.PreferencesPanel=Ext.extend(Ext.Panel,{prefStore:null,appName:"Tinebase",adminMode:false,layout:"form",border:true,labelAlign:"top",autoScroll:true,defaults:{anchor:"95%",labelSeparator:""},bodyStyle:"padding:5px",initComponent:function(){this.addEvents("change");if(this.prefStore&&this.prefStore.getCount()>0){this.items=[];this.prefStore.each(function(a){var b={fieldLabel:a.get("label"),name:a.get("name"),value:a.get("value"),listeners:{scope:this,change:function(i,h,g){this.fireEvent("change",this.appName)}},prefId:a.id,description:a.get("description")};var f=(a.get("options")&&a.get("options").length>0)?"combo":"textfield";if(f=="combo"&&this.adminMode){f="lockCombo"}else{if(f=="textfield"&&this.adminMode){f="lockTextfield"}}b.xtype=f;if(a.get("options")&&a.get("options").length>0){b.store=a.get("options");b.mode="local";b.forceSelection=true;b.triggerAction="all"}if(this.adminMode){b.hiddenFieldData=(a.get("type")=="default")?"1":"0";b.hiddenFieldId=a.get("name")+"_writable"}else{b.disabled=(a.get("type")=="forced")}try{var c=Ext.ComponentMgr.create(b);this.items.push(c);a.fieldObj=c}catch(d){console.error('Unable to create preference field "'+a.get("name")+'". Check definition!');this.prefStore.remove(a)}},this)}else{this.html='<div class="x-grid-empty">'+_("There are no preferences for this application.")+"</div>"}Ext.QuickTips.init();Tine.widgets.dialog.PreferencesPanel.superclass.initComponent.call(this)},afterRender:function(){Tine.widgets.dialog.PreferencesPanel.superclass.afterRender.call(this);if(this.items&&this.items.items){for(var a=0;a<this.items.items.length;a++){var b=this.items.items[a];Ext.QuickTips.register({target:b,title:b.fieldLabel,text:b.description,width:200})}}}});Ext.ns("Tine.widgets","Tine.widgets.dialog");Tine.widgets.dialog.LinkPanel=Ext.extend(Ext.Panel,{frame:true,border:true,autoScroll:true,relatedRecords:null,initComponent:function(){this.title=_("Links");this.store=new Ext.data.JsonStore({id:"id",fields:Tine.Tinebase.Model.Relation,sortInfo:{field:"related_model",direction:"DESC"}});this.initLinksDataView();this.items=[this.linksDataView];Tine.widgets.dialog.LinkPanel.superclass.initComponent.call(this)},afterRender:function(){Tine.widgets.dialog.LinkPanel.superclass.afterRender.apply(this,arguments);this.body.on("click",this.onClick,this)},onRecordLoad:function(a){this.record=a;if(a.get("relations")){this.store.loadData(a.get("relations"),true)}},initLinksDataView:function(){var a=new Ext.XTemplate('<tpl for=".">','<div class="x-widget-links-linkitem" id="{id}">','<div class="x-widget-links-linkitem-text">',"{[this.render(values.related_record, values.related_model, values.type, values.id)]}<br/>","</div>","</div>","</tpl>",{relatedRecords:this.relatedRecords,render:function(g,d,f,h){var c=new this.relatedRecords[d].recordClass(g);var b=c.modelName+" ( <i>"+f+'</i> ): <a class="tinebase-relation-link" href="#" id="'+h+":"+d+'">'+c.getTitle()+"</a>";return b}});this.linksDataView=new Ext.DataView({anchor:"100% 100%",tpl:a,store:this.store,overClass:"x-view-over",itemSelector:"activities-item-small"})},onClick:function(d){target=d.getTarget("a[class=tinebase-relation-link]");if(target){var b=target.id.split(":");var a=this.store.getById(b[0]).get("related_record");var c=this.relatedRecords[b[1]].dlgOpener({record:new this.relatedRecords[b[1]].recordClass(a)})}}});Ext.ns("Tine.Tinebase","Tine.Tinebase.widgets","Tine.Tinebase.widgets.customfields");Tine.Tinebase.widgets.customfields.CustomfieldsPanel=Ext.extend(Ext.Panel,{recordClass:null,fieldset:null,layout:"form",border:true,frame:true,labelAlign:"top",autoScroll:true,fieldset:null,defaults:{anchor:"100%",labelSeparator:""},initComponent:function(){this.title=_("Custom Fields");this.fieldset=[];var b=this.getCustomFieldDefinition();var a=1;if(b){this.items=[];this.getFieldSet(_("General"));b.each(function(f){var c={fieldLabel:f.get("label"),name:"customfield_"+f.get("name"),xtype:f.get("type"),width:"90%"};try{var d=Ext.ComponentMgr.create(c);a=(f.get("order"))?f.get("order"):a++;if(!f.get("group")||f.get("group")==""){this.getFieldSet(_("General")).insert(a,d)}else{this.getFieldSet(f.get("group")).insert(a,d)}f.fieldObj=d}catch(g){console.error('unable to create custom field "'+f.get("name")+'". Check definition!');b.remove(f)}},this);this.formField=new Tine.Tinebase.widgets.customfields.CustomfieldsPanelFormField({cfStore:b});this.items.push(this.formField)}else{this.html='<div class="x-grid-empty">'+_("There are no custom fields yet")+"</div>"}Tine.Tinebase.widgets.customfields.CustomfieldsPanel.superclass.initComponent.call(this);this.on("render",function(){this.setAllCfValues(this.quickHack.record.get("customfields"))},this)},getFieldSet:function(b){reg=/\s+/;var a=b.replace(reg,"_");if(!this.fieldset[a]){this.fieldset[a]=new Ext.form.FieldSet({title:b,autoHeight:true,autoWidth:true,labelAlign:"top",labelWidth:"90%",collapsible:true,name:a,id:Ext.id()+a});this.items.push(this.fieldset[a])}return this.fieldset[a]},getCustomFieldDefinition:function(){var a=this.recordClass.getMeta("appName");var c=this.recordClass.getMeta("modelName");if(Tine[a].registry.containsKey("customfields")){var d=Tine[a].registry.get("customfields");var b=new Ext.data.JsonStore({fields:Tine.Tinebase.Model.Customfield,data:d});b.filter("model",a+"_Model_"+c);if(b.getCount()>0){return b}}},setAllCfValues:function(a){var b=false;this.items.each(function(c){b|=c.rendered},this);if(!b){this.setAllCfValues.defer(100,this,[a])}else{this.formField.setValue(a)}}});Tine.Tinebase.widgets.customfields.CustomfieldsPanelFormField=Ext.extend(Ext.form.Field,{cfStore:null,name:"customfields",hidden:true,labelSeparator:"",getValue:function(){var a=new Tine.Tinebase.widgets.customfields.Cftransport();this.cfStore.each(function(b){a[b.get("name")]=b.fieldObj.getValue()},this);return a},setValue:function(a){if(a){this.cfStore.each(function(b){b.fieldObj.setValue(a[b.get("name")])})}}});Tine.Tinebase.widgets.customfields.Cftransport=Ext.extend(Object,{toString:function(){return Ext.util.JSON.encode(this)}});Ext.ns("Tine.widgets","Tine.widgets.customfields");Tine.widgets.customfields.CustomfieldsCombo=Ext.extend(Ext.form.ComboBox,{typeAhead:false,forceSelection:true,mode:"local",triggerAction:"all",initComponent:function(){Tine.widgets.customfields.CustomfieldsCombo.superclass.initComponent.call(this)},stateEvents:["select"],getState:function(){return this.getValue()},applyState:function(a){this.setValue(a)}});Ext.namespace("Tine.widgets","Tine.widgets.tree");Tine.widgets.tree.Loader=Ext.extend(Ext.tree.TreeLoader,{displayLength:25,app:null,method:null,filter:null,url:true,requestData:function(b,c,a){if(this.fireEvent("beforeload",this,b,c)!==false){this.transId=Ext.Ajax.request({params:{method:this.method,filter:Ext.util.JSON.encode(this.filter)},success:this.handleResponse,failure:this.handleFailure,scope:this,argument:{callback:c,node:b,scope:a}})}else{this.runCallback(c,a||b,[])}},processResponse:function(d,c,k){var f=Ext.util.JSON.decode(d.responseText);var a=f.results;try{c.beginUpdate();for(var g=0,h=a.length;g<h;g++){var b=this.createNode(a[g]);if(b){c.appendChild(b)}}c.endUpdate();if(typeof k=="function"){k(this,c)}}catch(j){this.handleFailure(d)}}});Ext.namespace("Tine.widgets","Tine.widgets.tree");Tine.widgets.tree.ContextMenu={getMenu:function(b){var d={addNode:function(){Ext.MessageBox.prompt(String.format(_("New {0}"),b.nodeName),String.format(_("Please enter the name of the new {0}:"),b.nodeName),function(h,i){if(this.ctxNode&&h=="ok"){if(!i){Ext.Msg.alert(String.format(_("No {0} added"),b.nodeName),String.format(_("You have to supply a {0} name!"),b.nodeName));return}Ext.MessageBox.wait(_("Please wait"),String.format(_("Creating {0}..."),b.nodeName));var g=this.ctxNode;var j={method:b.backend+".add"+b.backendModel,name:i};if(b.backendModel=="Container"){j.application=this.appName;j.containerType=g.attributes.containerType}else{if(b.backendModel=="Folder"){j.parent=g.attributes.globalname;j.accountId=g.attributes.account_id}}Ext.Ajax.request({params:j,scope:this,success:function(n,l){var k=Ext.util.JSON.decode(n.responseText);var m=this.loader.createNode(k);g.appendChild(m);if(b.backendModel=="Container"){this.fireEvent("containeradd",k)}Ext.MessageBox.hide()}})}},this)},deleteNode:function(){if(this.ctxNode){var g=this.ctxNode;Ext.MessageBox.confirm(_("Confirm"),String.format(_('Do you really want to delete the {0} "{1}"?'),b.nodeName,g.text),function(h){if(h=="yes"){Ext.MessageBox.wait(_("Please wait"),String.format(_('Deleting {0} "{1}"'),b.nodeName,g.text));var i={method:b.backend+".delete"+b.backendModel};if(b.backendModel=="Container"){i.containerId=g.attributes.container.id}else{if(b.backendModel=="Folder"){i.folder=g.attributes.globalname;i.accountId=g.attributes.account_id}else{i.ids=[g.id];i.method=i.method+"s"}}Ext.Ajax.request({params:i,scope:this,success:function(k,j){if(g.isSelected()){this.getSelectionModel().select(g.parentNode);this.fireEvent("click",g.parentNode,Ext.EventObject.setEvent())}g.remove();if(b.backendModel=="Container"){this.fireEvent("containerdelete",g.attributes.container)}Ext.MessageBox.hide()}})}},this)}},renameNode:function(){if(this.ctxNode){var g=this.ctxNode;Ext.MessageBox.show({title:"Rename "+b.nodeName,msg:String.format(_("Please enter the new name of the {0}:"),b.nodeName),buttons:Ext.MessageBox.OKCANCEL,value:g.text,fn:function(h,i){if(h=="ok"){if(!i){Ext.Msg.alert(String.format(_("Not renamed {0}"),b.nodeName),String.format(_("You have to supply a {0} name!"),b.nodeName));return}Ext.MessageBox.wait(_("Please wait"),String.format(_('Updating {0} "{1}"'),b.nodeName,g.text));var j={method:b.backend+".rename"+b.backendModel,newName:i};if(b.backendModel=="Container"){j.containerId=g.attributes.container.id}else{if(b.backendModel=="Folder"){j.oldGlobalName=g.attributes.globalname;j.accountId=g.attributes.account_id}}Ext.Ajax.request({params:j,scope:this,success:function(m,l){var k=Ext.util.JSON.decode(m.responseText);g.setText(i);if(b.backendModel=="Container"){this.fireEvent("containerrename",k)}Ext.MessageBox.hide()}})}},scope:this,prompt:true,icon:Ext.MessageBox.QUESTION})}},managePermissions:function(){if(this.ctxNode){var h=this.ctxNode;var g=Tine.widgets.container.GrantsDialog.openWindow({windowTitle:String.format(_('Manage Permissions for {0} "{1}"'),b.nodeName,Ext.util.Format.htmlEncode(h.attributes.container.name)),containerName:b.nodeName,grantContainer:h.attributes.container})}},reloadNode:function(){if(this.ctxNode){var g=this;this.ctxNode.reload(function(h){h.expand();h.select();g.filterPlugin.onFilterChange()})}}};var a=[];for(var c=0;c<b.actions.length;c++){switch(b.actions[c]){case"add":a.push(new Ext.Action({text:String.format(_("Add {0}"),b.nodeName),iconCls:"action_add",handler:d.addNode,scope:b.scope}));break;case"delete":var f=new Locale.Gettext();f.textdomain("Tinebase");a.push(new Ext.Action({text:String.format(f.n_("Delete {0}","Delete {0}",1),b.nodeName),iconCls:"action_delete",handler:d.deleteNode,scope:b.scope}));break;case"rename":a.push(new Ext.Action({text:String.format(_("Rename {0}"),b.nodeName),iconCls:"action_rename",handler:d.renameNode,scope:b.scope}));break;case"grants":a.push(new Ext.Action({text:_("Manage permissions"),iconCls:"action_managePermissions",handler:d.managePermissions,scope:b.scope}));break;case"reload":a.push(new Ext.Action({text:String.format(_("Reload {0}"),b.nodeName),iconCls:"x-tbar-loading",handler:d.reloadNode,scope:b.scope}));break;default:a.push(new Ext.Action(b.actions[c]))}}return new Ext.menu.Menu({items:a})}};Ext.namespace("Tine.Tinebase.widgets","Tine.Tinebase.widgets.grid");Tine.Tinebase.widgets.grid.DetailsPanel=Ext.extend(Ext.Panel,{defaultHeight:125,grid:null,record:null,border:false,autoScroll:true,layout:"fit",updateDetails:function(b,a){this.tpl.overwrite(a,b.data)},showDefault:function(a){if(this.defaultTpl){this.defaultTpl.overwrite(a)}},showMulti:function(b,a){if(this.multiTpl){this.multiTpl.overwrite(a)}},doBind:function(a){this.grid=a;a.store.on("load",function(b){this.onDetailsUpdate(a.getSelectionModel())},this)},onDetailsUpdate:function(b){var a=b.getCount();if(a===0||b.isFilterSelect){this.showDefault(this.body);this.record=null}else{if(a===1){this.record=b.getSelected();this.updateDetails(this.record,this.body)}else{if(a>1){this.record=b.getSelected();this.showMulti(b,this.body)}}}},getLoadMask:function(){if(!this.loadMask){this.loadMask=new Ext.LoadMask(this.el)}return this.loadMask}});Ext.namespace("Tine.widgets","Tine.widgets.grid");Tine.widgets.grid.FilterModel=function(a){Ext.apply(this,a);Tine.widgets.grid.FilterModel.superclass.constructor.call(this);this.addEvents("filtertrigger")};Ext.extend(Tine.widgets.grid.FilterModel,Ext.Component,{label:"",field:"",valueType:"string",defaultValue:null,operators:null,defaultOperator:null,store:null,displayField:null,valueField:null,initComponent:function(){Tine.widgets.grid.FilterModel.superclass.initComponent.call(this);this.isFilterModel=true;if(!this.operators){this.operators=[]}if(this.defaultOperator===null){switch(this.valueType){case"date":this.defaultOperator="within";break;case"account":case"group":case"user":case"bool":case"number":case"percentage":case"combo":this.defaultOperator="equals";break;case"string":default:this.defaultOperator="contains";break}}if(this.defaultValue===null){switch(this.valueType){case"string":this.defaultValue="";break;case"bool":this.defaultValue="1";break;case"percentage":this.defaultValue="0";break;case"date":case"account":case"group":case"user":case"number":default:break}}},operatorRenderer:function(c,b){var d=new Ext.data.JsonStore({fields:["operator","label"],data:[{operator:"contains",label:_("contains")},{operator:"equals",label:_("is equal to")},{operator:"greater",label:_("is greater than")},{operator:"less",label:_("is less than")},{operator:"not",label:_("is not")},{operator:"in",label:_("is in")},{operator:"before",label:_("is before")},{operator:"after",label:_("is after")},{operator:"within",label:_("is within")},{operator:"inweek",label:_("is in week no.")},{operator:"startswith",label:_("starts with")},{operator:"endswith",label:_("ends with")},{operator:"oneof",label:_("one of")}]});if(this.operators.length==0){switch(this.valueType){case"string":this.operators.push("contains","equals","startswith","endswith","not","oneof");break;case"date":this.operators.push("equals","before","after","within","inweek");break;case"number":case"percentage":this.operators.push("equals","greater","less");break;default:this.operators.push(this.defaultOperator);break}}if(this.operators.length>0){d.each(function(f){if(this.operators.indexOf(f.get("operator"))<0){d.remove(f)}},this)}if(d.getCount()>1){var a=new Ext.form.ComboBox({filter:c,width:80,id:"tw-ftb-frow-operatorcombo-"+c.id,mode:"local",lazyInit:false,emptyText:_("select a operator"),forceSelection:true,typeAhead:true,triggerAction:"all",store:d,displayField:"label",valueField:"operator",value:c.get("operator")?c.get("operator"):this.defaultOperator,renderTo:b});a.on("select",function(g,f,h){if(g.value!=g.filter.get("operator")){this.onOperatorChange(g.filter,g.value)}},this)}else{var a=new Ext.form.Label({filter:c,width:100,style:{margin:"0px 10px"},getValue:function(){return d.getAt(0).get("operator")},text:d.getAt(0).get("label"),renderTo:b})}return a},onOperatorChange:function(a,b){a.set("operator",b);a.set("value","");if(this.valueType=="date"){switch(b){case"within":a.numberfield.hide();a.datePicker.hide();a.withinCombo.show();a.formFields.value=a.withinCombo;break;case"inweek":a.withinCombo.hide();a.datePicker.hide();a.numberfield.show();a.formFields.value=a.numberfield;break;default:a.withinCombo.hide();a.numberfield.hide();a.datePicker.show();a.formFields.value=a.datePicker}}},valueRenderer:function(c,b){var f;var a=200;switch(this.valueType){case"date":f=this.dateValueRenderer(c,b);break;case"percentage":f=new Ext.ux.PercentCombo({filter:c,width:a,id:"tw-ftb-frow-valuefield-"+c.id,value:c.data.value?c.data.value:this.defaultValue,renderTo:b});break;case"user":f=new Tine.Addressbook.SearchCombo({width:a,listWidth:350,id:"tw-ftb-frow-valuefield-"+c.id,value:c.data.value?c.data.value:this.defaultValue,emptyText:_("Search Account ..."),internalContactsOnly:true,name:"organizer",nameField:"n_fileas",useAccountRecord:true,filter:c,renderTo:b,listeners:{specialkey:function(h,g){if(g.getKey()==g.ENTER){this.onFiltertrigger()}},select:this.onFiltertrigger,scope:this}});break;case"bool":f=new Ext.form.ComboBox({filter:c,width:a,id:"tw-ftb-frow-valuefield-"+c.id,value:c.data.value?c.data.value:this.defaultValue,renderTo:b,mode:"local",forceSelection:true,triggerAction:"all",store:[[0,Locale.getTranslationData("Question","no").replace(/:.*/,"")],[1,Locale.getTranslationData("Question","yes").replace(/:.*/,"")]]});break;case"combo":var d={filter:c,width:a,id:"tw-ftb-frow-valuefield-"+c.id,value:c.data.value?c.data.value:this.defaultValue,renderTo:b,mode:"local",forceSelection:true,triggerAction:"all",store:this.store,listeners:{specialkey:function(h,g){if(g.getKey()==g.ENTER){this.onFiltertrigger()}},select:this.onFiltertrigger,scope:this}};if(this.displayField!==null&&this.valueField!==null){d.displayField=this.displayField;d.valueField=this.valueField}f=new Ext.form.ComboBox(d);break;case"string":case"number":default:f=new Ext.ux.form.ClearableTextField({filter:c,width:a,id:"tw-ftb-frow-valuefield-"+c.id,value:c.data.value?c.data.value:this.defaultValue,renderTo:b,listeners:{scope:this,specialkey:function(h,g){if(g.getKey()==g.ENTER){this.onFiltertrigger()}}}});break}return f},onValueChange:function(a,b){a.set("value",b)},dateValueRenderer:function(a,b){var c=a.get("operator")?a.get("operator"):this.defaultOperator;var d="datePicker";switch(c){case"within":d="withinCombo";break;case"inweek":d="numberfield";break}var f=[["dayThis",_("today")],["dayLast",_("yesterday")],["weekThis",_("this week")],["weekLast",_("last week")],["weekBeforeLast",_("the week before last")],["monthThis",_("this month")],["monthLast",_("last month")],["quarterThis",_("this quarter")],["quarterLast",_("last quarter")],["yearThis",_("this year")],["yearLast",_("last year")]];var j=[["dayNext",_("tomorrow")],["weekNext",_("next week")],["monthNext",_("next month")],["quarterNext",_("next quarter")],["yearNext",_("next year")]];var g=this.pastOnly?f:j.concat(f);var i="weekThis";if(a.data.value&&a.data.value.toString().match(/^[a-zA-Z]+$/)){i=a.data.value.toString()}else{if(this.defaultValue&&this.defaultValue.toString().match(/^[a-zA-Z]+$/)){i=this.defaultValue.toString()}}a.withinCombo=new Ext.form.ComboBox({hidden:d!="withinCombo",filter:a,width:200,value:i,renderTo:b,mode:"local",lazyInit:false,forceSelection:true,typeAhead:true,triggerAction:"all",store:g});var h="";if(Ext.isDate(a.data.value)){h=a.data.value}else{if(Ext.isDate(Date.parseDate(a.data.value,Date.patterns.ISO8601Long))){h=Date.parseDate(a.data.value,Date.patterns.ISO8601Long)}else{if(Ext.isDate(this.defaultValue)){h=this.defaultValue}}}a.datePicker=new Ext.form.DateField({hidden:d!="datePicker",filter:a,width:200,value:h,renderTo:b});a.numberfield=new Ext.form.NumberField({hidden:d!="numberfield",filter:a,width:200,value:h,renderTo:b,minValue:1,maxValue:52,maxLength:2,allowDecimals:false,allowNegative:false});return a[d]},onFiltertrigger:function(){this.fireEvent("filtertrigger",this)}});Ext.namespace("Tine.widgets","Tine.widgets.grid");Tine.widgets.grid.FilterPlugin=function(a){a=a||{};Ext.apply(this,a);this.addEvents("change");Tine.widgets.grid.FilterPlugin.superclass.constructor.call(this)};Ext.extend(Tine.widgets.grid.FilterPlugin,Ext.util.Observable,{store:null,xtype:"filterplugin",getValue:Ext.emptyFn,setValue:Ext.emptyFn,init:function(a){this.store=a.store;this.doBind()},doBind:function(){this.store.on("beforeload",this.onBeforeLoad,this);this.store.on("load",this.onLoad,this)},onFilterChange:function(){if(this.store){this.store.load({})}this.fireEvent("change",this)},onBeforeLoad:function(a,b){b=b||{};b.params=b.params||{};b.params.filter=b.params.filter?b.params.filter:[];var d=this.getValue();if(d&&Ext.isArray(b.params.filter)){d=Ext.isArray(d)?d:[d];for(var c=0;c<d.length;c++){b.params.filter.push(d[c])}}},onLoad:function(a,b){if(Ext.isArray(a.proxy.jsonReader.jsonData.filter)){this.setValue(a.proxy.jsonReader.jsonData.filter)}}});Ext.namespace("Tine.widgets","Tine.widgets.grid");Tine.widgets.grid.FilterButton=function(a){a=a||{};Ext.apply(this,a);Tine.widgets.grid.FilterButton.superclass.constructor.call(this);Ext.applyIf(this,new Tine.widgets.grid.FilterPlugin())};Ext.extend(Tine.widgets.grid.FilterButton,Ext.Button,{field:null,operator:"equals",invert:false,enableToggle:true,getValue:function(){return{field:this.field,operator:this.operator,value:this.invert?!this.pressed:this.pressed}},setValue:function(b){for(var a=0;a<b.length;a++){if(b[a].field==this.field){this.toggle(this.invert?!b[a].value:!!b[a].value);break}}},handler:function(){this.onFilterChange()}});Ext.reg("wdgt.filterbutton",Tine.widgets.grid.FilterButton);Ext.namespace("Tine.widgets","Tine.widgets.grid");Tine.widgets.grid.ExportButton=function(a){a=a||{};Ext.apply(this,a);a.handler=this.doExport.createDelegate(this);Tine.widgets.grid.ExportButton.superclass.constructor.call(this,a)};Ext.extend(Tine.widgets.grid.ExportButton,Ext.Action,{iconCls:"action_export",format:"csv",exportFunction:null,sm:null,gridPanel:null,doExport:function(){if(!this.sm){this.sm=this.gridPanel.grid.getSelectionModel()}if(this.sm.getCount()===0){return false}var a=this.sm.getSelectionFilter();var b=new Ext.ux.file.Download({params:{method:this.exportFunction,requestType:"HTTP",_filter:Ext.util.JSON.encode(a),_format:this.format}}).start()}});Ext.namespace("Tine.widgets","Tine.widgets.grid");Tine.widgets.grid.FilterToolbar=function(a){Ext.apply(this,a);Tine.widgets.grid.FilterToolbar.superclass.constructor.call(this);Ext.applyIf(this,new Tine.widgets.grid.FilterPlugin())};Tine.widgets.grid.FilterToolbar.FILTERS={};Ext.extend(Tine.widgets.grid.FilterToolbar,Ext.Panel,{filterModels:null,defaultFilter:null,allowSaving:false,border:false,monitorResize:true,region:"north",layout:"fit",record:Ext.data.Record.create([{name:"field"},{name:"operator"},{name:"value"}]),frowIdPrefix:"tw-ftb-frowid-",initTemplates:function(){var c=this.templates||{};if(!c.master){c.master=new Ext.Template('<div class="tw-filtertoolbar x-toolbar x-small-editor" hidefocus="true">','<table style="width: auto;" border="0" cellpadding="0" cellspacing="0">',"{tbody}","</table>","</div>")}if(!c.filterrow){c.filterrow=new Ext.Template('<tr id="{id}" class="fw-ftb-frow">','<td class="tw-ftb-frow-pbutton"></td>','<td class="tw-ftb-frow-mbutton"></td>','<td class="tw-ftb-frow-prefix">{prefix}</td>','<td class="tw-ftb-frow-field" width="240px">{field}</td>','<td class="tw-ftb-frow-operator" width="90px" >{operator}</td>','<td class="tw-ftb-frow-value" width="200px">{value}</td>','<td class="tw-ftb-frow-searchbutton"></td>',"</tr>")}for(var a in c){var b=c[a];if(b&&typeof b.compile=="function"&&!b.compiled){b.disableFormats=true;b.compile()}}this.templates=c},initActions:function(){this.actions={addFilterRow:new Ext.Button({tooltip:_("add new filter"),iconCls:"action_addFilter",scope:this,handler:this.addFilter}),removeAllFilters:new Ext.Button({tooltip:_("reset all filters"),iconCls:"action_delAllFilter",scope:this,handler:this.deleteAllFilters}),startSearch:new Ext.Button({text:_("start search"),iconCls:"action_startFilter",scope:this,handler:function(){this.onFiltertrigger()}}),saveFilter:new Ext.Button({tooltip:_("save filter"),iconCls:"action_saveFilter",scope:this,handler:this.onSaveFilter})}},onRender:function(b,a){Tine.widgets.grid.FilterToolbar.superclass.onRender.call(this,b,a);if(!this.app&&this.store){this.app=Tine.Tinebase.appMgr.get(this.store.proxy.recordClass.getMeta("appName"))}if(this.app&&this.app.getMainScreen().filterPanel){this.allowSaving=true}this.renderTable();this.filterStore.each(function(c){this.renderFilterRow(c)},this);for(action in this.actions){this.actions[action].hidden=true;this.actions[action].render(this.el)}this.searchButtonWrap=this.actions.startSearch.getEl().wrap();this.searchButtonWrap.addClass("x-btn-over");this.onFilterRowsChange()},renderTable:function(){var b=this.templates;var a="";this.filterStore.each(function(c){a+=b.filterrow.apply({id:this.frowIdPrefix+c.id})},this);this.tableEl=b.master.overwrite(this.bwrap,{tbody:a},true)},renderFilterRow:function(a){a.formFields={};var b=this.getFilterModel(a.get("field"));var c=this.el.child("tr[id="+this.frowIdPrefix+a.id+"]");a.formFields.field=new Ext.form.ComboBox({filter:a,width:240,id:"tw-ftb-frow-fieldcombo-"+a.id,mode:"local",lazyInit:false,emptyText:_("select a field"),forceSelection:true,typeAhead:true,triggerAction:"all",store:this.fieldStore,displayField:"label",valueField:"field",value:b.field,renderTo:c.child("td[class=tw-ftb-frow-field]"),validator:this.validateFilter.createDelegate(this)});a.formFields.field.on("select",function(f,d,g){if(f.value!=f.filter.get("field")){this.onFieldChange(f.filter,f.value)}},this);a.formFields.operator=b.operatorRenderer(a,c.child("td[class=tw-ftb-frow-operator]"));a.formFields.value=b.valueRenderer(a,c.child("td[class=tw-ftb-frow-value]"));a.deleteRowButton=new Ext.Button({id:"tw-ftb-frow-deletebutton-"+a.id,tooltip:_("Delete this filter"),filter:a,iconCls:"action_delThisFilter",renderTo:c.child("td[class=tw-ftb-frow-mbutton]"),scope:this,handler:function(d){this.deleteFilter(d.filter)}})},validateFilter:function(a){return this.fieldStore.query("label",a).getCount()!=0},arrangeButtons:function(){var b=this.filterStore.getCount();var a=this.filterStore.getAt(0).id;var c=this.filterStore.getAt(b-1).id;this.filterStore.each(function(d){var f=this.el.child("tr[id="+this.frowIdPrefix+d.id+"]");f.child("td[class=tw-ftb-frow-prefix]").dom.innerHTML=_("and");if(d.id==c){f.child("td[class=tw-ftb-frow-pbutton]").insertFirst(this.actions.addFilterRow.getEl());this.actions.addFilterRow.show();f.child("td[class=tw-ftb-frow-searchbutton]").insertFirst(this.searchButtonWrap);this.actions.startSearch.show();this.actions.removeAllFilters.setVisible(b>1);this.actions.saveFilter.setVisible(this.allowSaving&&b>1)}if(d.id==a){f.child("td[class=tw-ftb-frow-prefix]").dom.innerHTML=_("Show");this.actions.removeAllFilters.getEl().applyStyles("float: left");f.child("td[class=tw-ftb-frow-searchbutton]").insertFirst(this.actions.saveFilter.getEl());f.child("td[class=tw-ftb-frow-searchbutton]").insertFirst(this.actions.removeAllFilters.getEl())}},this)},onFiltertrigger:function(){if(!this.supressEvents){this.onFilterChange()}},onFieldChange:function(c,b){var i=c.formFields.operator.getValue();var a=c.formFields.value.getValue();var j=c.formFields.value;if(typeof j.selectText!="function"||typeof j.doQuery=="function"){a=""}c.formFields.operator.destroy();c.formFields.value.destroy();var g=this.getFilterModel(b);var h=this.el.child("tr[id="+this.frowIdPrefix+c.id+"]");var k=h.child("td[class=tw-ftb-frow-operator]");var d=h.child("td[class=tw-ftb-frow-value]");c.set("field",b);c.set("operator","");c.set("value","");c.formFields.operator=g.operatorRenderer(c,k);c.formFields.value=g.valueRenderer(c,d);var j=c.formFields.value;if(a&&typeof j.selectText=="function"&&typeof j.doQuery!="function"){if(typeof c.formFields.operator.setValue=="function"){c.formFields.operator.setValue(i)}c.formFields.value.setValue(a);c.formFields.value.selectText.defer(50,c.formFields.value)}},initComponent:function(){Tine.widgets.grid.FilterToolbar.superclass.initComponent.call(this);this.initTemplates();this.initActions();if(this.filters.length<1){this.filters=[{field:this.defaultFilter}]}this.filterStore=new Ext.data.JsonStore({fields:this.record,data:this.filters});this.filterModelMap={};var a=[];for(var c=0;c<this.filterModels.length;c++){var b=this.filterModels[c];var f=this.createFilterModel(b);if(f.isForeignFilter){f.field=f.ownField+":"+f.foreignField}this.filterModelMap[f.field]=f;a.push(f);f.on("filtertrigger",this.onFiltertrigger,this);if(typeof f.getSubFilters=="function"){var d=f.getSubFilters();Ext.each(d,function(g){g.isSubfilter=true;g.field=f.ownField+":"+g.field;g.label=f.label+" - "+g.label;this.filterModelMap[g.field]=g;a.push(g);g.on("filtertrigger",this.onFiltertrigger,this)},this)}}this.fieldStore=new Ext.data.JsonStore({fields:["field","label"],data:a})},onFilterRowsChange:function(){this.arrangeButtons();if(!this.supressEvents){this.ownerCt.layout.layout()}},createFilterModel:function(a){if(a.isFilterModel){return a}if(a.filtertype){return new Tine.widgets.grid.FilterToolbar.FILTERS[a.filtertype](a)}else{return new Tine.widgets.grid.FilterModel(a)}},getFilterModel:function(a){return this.filterModelMap[a]},addFilter:function(a){if(!a||arguments[1]){a=new this.record({field:this.defaultFilter})}this.filterStore.add(a);this.show();var b=this.templates.filterrow.insertAfter(this.el.child("tr[class=fw-ftb-frow]:last"),{id:"tw-ftb-frowid-"+a.id},true);this.renderFilterRow(a);this.onFilterRowsChange();return a},resetFilter:function(a){},deleteFilter:function(a){var c=this.el.child("tr[id=tw-ftb-frowid-"+a.id+"]");var b=this.filterStore.getCount()==1;this.filterStore.remove(this.filterStore.getById(a.id));a.formFields.field.destroy();a.formFields.operator.destroy();a.formFields.value.destroy();if(b){var d=this.addFilter();for(action in this.actions){this.actions[action].hide();this.el.insertFirst(action=="startSearch"?this.searchButtonWrap:this.actions[action].getEl())}}c.remove();if(!this.supressEvents){this.onFilterRowsChange();this.onFiltertrigger()}},deleteAllFilters:function(){this.supressEvents=true;this.filterStore.each(function(a){this.deleteFilter(a)},this);this.supressEvents=false;this.onFiltertrigger();this.onFilterRowsChange()},getValue:function(){var b=[];var c={};this.filterStore.each(function(i){var f={};for(var d in i.formFields){f[d]=i.formFields[d].getValue()}if(f.field&&f.field.match(/:/)){var j=f.field.split(":");var g=j[0];var h=j[1];f.field=h;c[g]=c[g]||[];c[g].push(f)}else{b.push(f)}},this);for(var a in c){if(c.hasOwnProperty(a)){b.push({field:a,operator:"AND",value:c[a]})}}return b},setValue:function(b){this.supressEvents=true;var c=this.filterStore.getCount();var k=[];var l,a,h,d;for(var g=0;g<b.length;g++){l=b[g];if(l.operator=="AND"||l.operator=="OR"){var m=l.value;for(var f=m.length-1;f>=0;f--){m[f].field=l.field+":"+m[f].field;b.splice(g+1,0,m[f])}}}for(var g=0;g<b.length;g++){l=b[g];if(this.filterModelMap[l.field]){a=new this.record(l);h=this.filterStore.find("field",l.field);d=h>=0?this.filterStore.getAt(h):null;if(d&&d.formFields.operator.getValue()==a.get("operator")&&d.formFields.value.getValue()==a.get("value")){k.push(h)}else{this.addFilter(a)}}}for(var g=c-1;g>=0;g--){if(k.indexOf(g)<0){this.deleteFilter(this.filterStore.getAt(g))}}this.supressEvents=false;this.onFilterRowsChange()},onSaveFilter:function(){var a="";Ext.MessageBox.prompt(_("save filter"),_("Please enter a name for the filter"),function(c,d){if(c=="ok"){if(!d){Ext.Msg.alert(_("Filter not Saved"),_("You have to supply a name for the filter!"));return}else{if(d.length>40){Ext.Msg.alert(_("Filter not Saved"),_("You have to supply a shorter name! Names of saved filters can only be up to 40 characters long."));return}}Ext.Msg.wait(_("Please Wait"),_("Saving filter"));var b=this.store.reader.recordType.getMeta("appName")+"_Model_"+this.store.reader.recordType.getMeta("modelName");Ext.Ajax.request({params:{method:"Tinebase_PersistentFilter.save",filterData:Ext.util.JSON.encode(this.getAllFilterData()),name:d,model:b},scope:this,success:function(f){if(typeof this.app.getMainScreen().getTreePanel().getPersistentFilterNode=="function"){var i=this.app.getMainScreen().getTreePanel().getPersistentFilterNode();if(i&&i.isExpanded()){var h=Ext.util.JSON.decode(f.responseText);if(!i.findChild("id",h.id)){var g=i.getOwnerTree().loader.createNode(h);i.appendChild(g)}}}Ext.Msg.hide();this.onFilterChange()}})}},this,false,a)},getAllFilterData:function(){this.store.on("beforeload",this.storeOnBeforeload,this);this.store.load();this.store.un("beforeload",this.storeOnBeforeload,this);return this.allFilterData},storeOnBeforeload:function(a,b){this.allFilterData=b.params.filter;this.store.fireEvent("exception");return false}});Ext.reg("tinewidgetsfiltertoolbar",Tine.widgets.grid.FilterToolbar);Ext.namespace("Tine.widgets","Tine.widgets.grid");Tine.widgets.grid.FilterToolbarQuickFilterPlugin=function(a){a=a||{};Ext.apply(this,a)};Tine.widgets.grid.FilterToolbarQuickFilterPlugin.prototype={quickFilterField:"query",ftb:null,quickFilter:null,quickFilterRow:null,bind:function(){this.quickFilterRow.formFields.value.on("keyup",this.syncField,this);this.quickFilterRow.formFields.value.on("change",this.syncField,this)},getQuickFilterField:function(){if(!this.quickFilter){this.quickFilter=new Ext.ux.SearchField({enableKeyEvents:true});this.quickFilter.onTrigger1Click=this.quickFilter.onTrigger1Click.createSequence(this.onQuickFilterClear,this);this.quickFilter.onTrigger2Click=this.quickFilter.onTrigger2Click.createSequence(this.onQuickFilterTrigger,this);this.quickFilter.on("keyup",this.syncField,this);this.quickFilter.on("change",this.syncField,this);this.alwaysBtn=new Ext.Button({xtype:"button",enableToggle:true,text:"...",tooltip:_("Always show advanced filters"),handler:this.ftb.onFilterRowsChange.createDelegate(this.ftb)})}return[this.quickFilter,this.alwaysBtn]},getQuickFilterRowField:function(){if(!this.quickFilterRow){var a=new this.ftb.record({field:this.quickFilterField,value:this.quickFilter.getValue()});this.ftb.addFilter(a)}return this.quickFilterRow},init:function(a){this.ftb=a;this.ftb.renderFilterRow=this.ftb.renderFilterRow.createSequence(this.onAddFilter,this);this.ftb.onFieldChange=this.ftb.onFieldChange.createSequence(this.onFieldChange,this);this.ftb.deleteFilter=this.ftb.deleteFilter.createInterceptor(this.onBeforeDeleteFilter,this);this.ftb.onFilterRowsChange=this.ftb.onFilterRowsChange.createInterceptor(this.onFilterRowsChange,this);this.ftb.getQuickFilterField=this.getQuickFilterField.createDelegate(this)},onAddFilter:function(a){if(a.get("field")==this.quickFilterField&&!this.quickFilterRow){this.quickFilterRow=a;this.bind();this.syncField(a.formFields.value)}},onFieldChange:function(a,b){if(a==this.quickFilterRow){this.onBeforeDeleteFilter(a)}if(b==this.quickFilterField){this.onAddFilter(a)}},onFilterRowsChange:function(){this.ftb.searchButtonWrap.removeClass("x-btn-over");if(this.ftb.filterStore.getCount()<=1&&this.ftb.filterStore.getAt(0).get("field")==this.quickFilterField&&!this.ftb.filterStore.getAt(0).formFields.value.getValue()&&!this.alwaysBtn.pressed){this.ftb.hide()}else{this.ftb.show()}},onBeforeDeleteFilter:function(a){if(a==this.quickFilterRow){this.quickFilter.setValue("");this.unbind();delete this.quickFilterRow;this.ftb.filterStore.each(function(b){if(b!=a&&b.get("field")==this.quickFilterField){this.onAddFilter(b);return false}},this)}},onQuickFilterClear:function(){this.ftb.deleteAllFilters.call(this.ftb)},onQuickFilterTrigger:function(){this.ftb.onFiltertrigger.call(this.ftb);this.ftb.onFilterRowsChange.call(this.ftb)},syncField:function(a){if(a==this.quickFilter){this.getQuickFilterRowField().formFields.value.setValue(this.quickFilter.getValue())}else{this.quickFilter.setValue(this.quickFilterRow.formFields.value.getValue())}},unbind:function(){this.quickFilterRow.formFields.value.un("keyup",this.syncField,this);this.quickFilterRow.formFields.value.un("change",this.syncField,this)}};Ext.namespace("Tine.Tinebase.widgets.grid");Tine.Tinebase.widgets.grid.FilterSelectionModel=Ext.extend(Ext.grid.RowSelectionModel,{store:null,isFilterSelect:false,getSelectionFilter:function(){if(!this.isFilterSelect){return this.getFilterOfRowSelection()}else{var a=this.getAllFilterData();return a}},getAllFilterData:function(){this.store.on("beforeload",this.storeOnBeforeload,this);this.store.load();this.store.un("beforeload",this.storeOnBeforeload,this);return this.allFilterData},storeOnBeforeload:function(a,b){this.allFilterData=b.params.filter;this.store.fireEvent("exception");return false},selectAll:function(a){this.isFilterSelect=!a;Tine.Tinebase.widgets.grid.FilterSelectionModel.superclass.selectAll.call(this)},onRefresh:function(){this.clearSelections(true);Tine.Tinebase.widgets.grid.FilterSelectionModel.superclass.onRefresh.call(this)},onRemove:function(a,b,c){this.clearSelections(true);Tine.Tinebase.widgets.grid.FilterSelectionModel.superclass.onRemove.call(this,a,b,c)},deselectRow:function(b,a){this.isFilterSelect=false;Tine.Tinebase.widgets.grid.FilterSelectionModel.superclass.deselectRow.call(this,b,a)},clearSelections:function(a){this.suspendEvents();this.isFilterSelect=false;Tine.Tinebase.widgets.grid.FilterSelectionModel.superclass.clearSelections.call(this);this.resumeEvents();if(!a){this.fireEvent("selectionchange",this)}},toggleSelection:function(){if(this.isFilterSelect){this.clearSelections()}else{this.suspendEvents();var a;this.store.each(function(b){a=this.store.indexOf(b);if(this.isSelected(a)){this.deselectRow(a)}else{this.selectRow(a,true)}},this);this.resumeEvents();this.fireEvent("selectionchange",this)}},getCount:function(){if(!this.isFilterSelect){return Tine.Tinebase.widgets.grid.FilterSelectionModel.superclass.getCount.call(this)}else{return this.store.getTotalCount()}},getFilterOfRowSelection:function(){var a=this.store.reader.meta.id;var b=[];this.each(function(c){b.push(c.id)});return[{field:a,operator:"in",value:b}]}});Ext.namespace("Tine.widgets.grid");Tine.widgets.grid.ForeignRecordFilter=Ext.extend(Tine.widgets.grid.FilterModel,{app:null,foreignRecordClass:null,ownField:null,isForeignFilter:true,initComponent:function(){this.foreignField=this.foreignRecordClass.getMeta("idProperty");this.label=Tine.Tinebase.appMgr.get(this.foreignRecordClass.getMeta("appName")).i18n.n_(this.foreignRecordClass.getMeta("recordName"),this.foreignRecordClass.getMeta("recordsName"),1);this.subFilterModels=[];this.operators=["equals"];Tine.widgets.grid.ForeignRecordFilter.superclass.initComponent.call(this)},getSubFilters:function(){var a=this.foreignRecordClass.getFilterModel();Ext.each(a,function(b){this.subFilterModels.push(Tine.widgets.grid.FilterToolbar.prototype.createFilterModel.call(this,b))},this);return this.subFilterModels},valueRenderer:function(b,a){var c=new Tine.Tinebase.widgets.form.RecordPickerComboBox({recordClass:this.foreignRecordClass,filter:b,blurOnSelect:true,width:200,listWidth:500,listAlign:"tr-br",id:"tw-ftb-frow-valuefield-"+b.id,value:b.data.value?b.data.value:this.defaultValue,renderTo:a});c.on("specialkey",function(f,d){if(d.getKey()==d.ENTER){this.onFiltertrigger()}},this);return c}});Tine.widgets.grid.FilterToolbar.FILTERS.foreignrecord=Tine.widgets.grid.ForeignRecordFilter;Ext.namespace("Tine.widgets","Tine.widgets.grid");Tine.widgets.grid.PersistentFilterPicker=Ext.extend(Ext.tree.TreePanel,{app:null,filterMountId:"/",autoScroll:true,border:false,rootVisible:false,getPersistentFilterNode:function(){return this.filterNode},initComponent:function(){this.loader=new Tine.widgets.grid.PersistentFilterLoader({app:this.app,filter:this.filter});if(!this.root){this.root=new Ext.tree.TreeNode({id:"/",leaf:false,expanded:true})}Tine.widgets.grid.PersistentFilterPicker.superclass.initComponent.call(this);this.on("click",function(a){if(a.attributes.isPersistentFilter){a.select();this.onFilterSelect()}else{if(a.id=="_persistentFilters"){a.expand();return false}}},this);this.on("contextmenu",this.onContextMenu,this)},afterRender:function(){Tine.widgets.grid.PersistentFilterPicker.superclass.afterRender.call(this);this.filterNode=new Ext.tree.AsyncTreeNode({text:_("My saved filters"),id:"_persistentFilters",leaf:false,expanded:false});this.getNodeById(this.filterMountId).appendChild(this.filterNode)},onFilterSelect:function(){var a=this.app.getMainScreen().getContentPanel().store;a.on("beforeload",this.storeOnBeforeload,this);a.load();if(typeof this.app.getMainScreen().getTreePanel().activate=="function"){this.app.getMainScreen().getTreePanel().activate(0)}},storeOnBeforeload:function(a,b){b.params.filter=this.getSelectionModel().getSelectedNode().id;a.un("beforeload",this.storeOnBeforeload,this)},onContextMenu:function(a,b){if(!a.attributes.isPersistentFilter){return}var c=new Ext.menu.Menu({items:[{text:_("Delete Filter"),iconCls:"action_delete",scope:this,handler:function(){Ext.MessageBox.confirm(_("Confirm"),String.format(_('Do you really want to delete the Filter "{0}"?'),a.text),function(d){if(d=="yes"){Ext.MessageBox.wait(_("Please wait"),String.format(_('Deleting Filter "{0}"'),this.containerName,a.text));Ext.Ajax.request({params:{method:"Tinebase_PersistentFilter.delete",filterId:a.id},scope:this,success:function(){a.unselect();a.remove();Ext.MessageBox.hide()}})}},this)}}]});c.showAt(b.getXY())}});Tine.widgets.grid.PersistentFilterLoader=Ext.extend(Tine.widgets.tree.Loader,{method:"Tinebase_PersistentFilter.search",createNode:function(a){var b=!!a.model&&!!a.filters,c=b?{isPersistentFilter:b,text:a.name,id:a.id,leaf:a.leaf===false?a.leaf:true,filter:a}:a;return Tine.widgets.grid.PersistentFilterLoader.superclass.createNode.call(this,c)}});Ext.namespace("Tine.Tinebase.widgets","Tine.Tinebase.widgets.grid");Tine.Tinebase.widgets.grid.QuickaddGridPanel=Ext.extend(Ext.ux.grid.QuickaddGridPanel,{recordClass:null,dataField:null,clicksToEdit:"auto",frame:true,initComponent:function(){this.initGrid();this.initActions();if(!this.store){this.store=new Ext.data.Store({reader:new Ext.data.ArrayReader({idIndex:0},this.recordClass)})}Tine.Tinebase.widgets.grid.QuickaddGridPanel.superclass.initComponent.call(this);this.on("newentry",this.onNewentry,this)},initGrid:function(){this.enableHdMenu=false;this.plugins=this.plugins||[];this.plugins.push(new Ext.ux.grid.GridViewMenuPlugin({}));this.sm=new Ext.grid.RowSelectionModel({multiSelect:true});this.sm.on("selectionchange",function(b){var a=b.getCount();this.deleteAction.setDisabled(a==0)},this);this.cm=(!this.cm)?this.getColumnModel():this.cm},initActions:function(){this.deleteAction=new Ext.Action({text:_("Remove"),iconCls:"actionDelete",handler:this.onDelete,scope:this,disabled:true});this.tbar=[this.deleteAction]},getColumnModel:function(){return new Ext.grid.ColumnModel([])},onNewentry:function(a){a.id=this.getNextId();var b=new this.recordClass(a);this.store.insert(0,b);return true},onDelete:function(){var b=this.getSelectionModel().getSelections();for(var a=0;a<b.length;++a){this.store.remove(b[a])}},getNextId:function(){var a=this.store.getCount()+1;while(this.store.getById(a)){a++}return a},setStoreFromArray:function(c){for(var b=0;b<c.length;++b){if(this.dataField===null){var a=c[b]}else{var a={};a[this.dataField]=c[b]}this.store.insert(0,new this.recordClass(a))}},getFromStoreAsArray:function(){var a=[];this.store.each(function(b){a.push((this.dataField===null)?b.data:b.get(this.dataField))},this);return a}});Ext.namespace("Tine.widgets","Tine.widgets.container");Tine.widgets.container.selectionComboBox=Ext.extend(Ext.form.ComboBox,{defaultContainer:false,displayLength:25,container:null,listWidth:400,containerName:"container",containersName:"containers",hideTrigger2:true,startNode:"all",requiredGrant:"readGrant",trigger2width:100,allowBlank:false,triggerAction:"all",forceAll:true,lazyInit:false,readOnly:true,stateful:true,mode:"local",valueField:"id",displayField:"name",initComponent:function(){if(!this.hideTrigger2){if(this.triggerClass=="x-form-arrow-trigger"){this.triggerClass="x-form-arrow-trigger-rectangle"}this.triggerConfig={tag:"span",cls:"x-form-twin-triggers",cn:[{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.triggerClass},{tag:"span",cls:"tw-containerselect-trigger2",cn:[{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger tw-containerselect-trigger2-bg"},{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger tw-containerselect-trigger2"},{tag:"div",style:{position:"absolute",top:0,left:"5px"}}]}]}}this.store=new Ext.data.JsonStore({id:"id",fields:Tine.Tinebase.Model.Container,baseParams:{method:"Tinebase_Container.getContainer",application:this.appName,containerType:Tine.Tinebase.container.TYPE_PERSONAL},listeners:{scope:this,beforeload:function(a,b){if(!this.owner){b.params.owner=this.store.getAt(0).get("account_grants").account_id}else{b.params.owner=this.owner}}}});this.otherRecord=new Tine.Tinebase.Model.Container({id:"other",name:String.format(_("choose other {0}..."),this.containerName)},"other");Tine.widgets.container.selectionComboBox.superclass.initComponent.call(this);if(this.defaultContainer){this.container=this.defaultContainer;this.value=this.defaultContainer.name}this.on("beforequery",this.onBeforeQuery,this)},onBeforeQuery:function(a){a.query=new Date().getTime();this.mode=this.startNode=="all"?"local":"remote"},initTrigger:function(){if(!this.hideTrigger2){var b=this.trigger.first();var a=this.trigger.last();this.trigger2=a;b.on("click",this.onTriggerClick,this,{preventDefault:true});a.on("click",this.onTrigger2Click,this,{preventDefault:true});b.addClassOnOver("x-form-trigger-over");b.addClassOnClick("x-form-trigger-click");a.addClassOnOver("x-form-trigger-over");a.addClassOnClick("x-form-trigger-click")}else{Tine.widgets.container.selectionComboBox.superclass.initTrigger.call(this)}},setTrigger2Text:function(b){var a=this.trigger.last().last().update(b)},setTrigger2Disabled:function(a){if(a){this.trigger2.setOpacity(0.5);this.trigger2.un("click",this.onTrigger2Click,this,{preventDefault:true})}else{this.trigger2.setOpacity(1);this.trigger2.on("click",this.onTrigger2Click,this,{preventDefault:true})}},getTrigger2:function(){return this.trigger2},onTrigger2Click:Ext.emptyFn,onBlur:function(){if(!this.dlg){return Tine.widgets.container.selectionComboBox.superclass.onBlur.apply(this,arguments)}},onSelect:function(a,b){if(a==this.otherRecord){this.onChoseOther()}else{Tine.widgets.container.selectionComboBox.superclass.onSelect.apply(this,arguments)}},onChoseOther:function(){this.collapse();this.dlg=new Tine.widgets.container.selectionDialog({containerName:this.containerName,containersName:this.containersName,requiredGrant:this.requiredGrant,TriggerField:this})},onRender2:function(c,a){Tine.widgets.container.selectionComboBox.superclass.onRender.call(this,c,a);var b="x-combo-list";this.footer=this.list.createChild({cls:b+"-ft"});this.button=new Ext.Button({text:String.format(_("choose other {0}..."),this.containerName),scope:this,handler:this.onChoseOther,renderTo:this.footer});this.assetHeight+=this.footer.getHeight();this.getEl().on("mouseover",function(f,d){this.qtip=new Ext.QuickTip({target:d,targetXY:f.getXY(),html:Ext.util.Format.htmlEncode(this.container.name)+"<i> ("+(this.container.type==Tine.Tinebase.container.TYPE_PERSONAL?_("personal"):_("shared"))+")</i>"}).show()},this)},getValue:function(){return this.container.id},setValue:function(b){if(typeof(b)=="string"&&this.store.getById(b)){b=this.store.getById(b).data}if(!this.store.getById(b.id)){this.store.add(new Tine.Tinebase.Model.Container(b,b.id))}this.container=b;var a=this.store.getById("other");if(a){this.store.remove(a)}this.store.add(this.otherRecord);Tine.widgets.container.selectionComboBox.superclass.setValue.call(this,b.id);if(b.account_grants){this.setDisabled(!b.account_grants.deleteGrant)}if(this.qtip){this.qtip.remove()}if(!Ext.isIE){this.saveState()}},getState:function(){var a=[];this.store.each(function(b){if(b.get("type")!="internal"){a.push(b.data)}},this);return a},applyState:function(c,b){for(var a in c){if(c.hasOwnProperty(a)){this.store.add(new Tine.Tinebase.Model.Container(c[a],c[a].id))}}}});Ext.reg("tinewidgetscontainerselectcombo",Tine.widgets.container.selectionComboBox);Tine.widgets.container.selectionDialog=Ext.extend(Ext.Component,{containerName:"container",containersName:"containers",title:null,windowHeight:400,win:null,tree:null,requiredGrant:"readGrant",initComponent:function(){Tine.widgets.container.selectionDialog.superclass.initComponent.call(this);this.title=this.title?this.title:String.format(_("please select a {0}"),this.containerName);this.cancleAction=new Ext.Action({text:_("Cancel"),iconCls:"action_cancel",minWidth:70,handler:this.onCancel,scope:this});this.okAction=new Ext.Action({disabled:true,text:_("Ok"),iconCls:"action_saveAndClose",minWidth:70,handler:this.onOk,scope:this});if(Ext.getBody().getHeight(true)*0.7<this.windowHeight){this.windowHeight=Ext.getBody().getHeight(true)*0.7}this.win=new Ext.Window({title:this.title,closeAction:"close",modal:true,width:375,height:this.windowHeight,minWidth:375,minHeight:this.windowHeight,layout:"fit",plain:true,bodyStyle:"padding:5px;",buttonAlign:"right",buttons:[this.cancleAction,this.okAction]});this.tree=new Tine.widgets.container.TreePanel({containerName:this.TriggerField.containerName,containersName:this.TriggerField.containersName,appName:this.TriggerField.appName,defaultContainer:this.TriggerField.defaultContainer,requiredGrant:this.requiredGrant});this.tree.on("click",this.onTreeNodeClick,this);this.tree.on("dblclick",this.onTreeNoceDblClick,this);this.win.add(this.tree);this.win.show()},onTreeNodeClick:function(a){this.okAction.setDisabled(a.attributes.containerType!="singleContainer");if(!a.leaf){a.expand()}},onTreeNoceDblClick:function(a){if(!this.okAction.isDisabled()){this.onOk()}},onCancel:function(){this.onClose()},onClose:function(){this.win.close()},onOk:function(){var a=this.tree.getSelectionModel().getSelectedNode();if(a){this.TriggerField.setValue(a.attributes.container);this.TriggerField.fireEvent("select",this.TriggerField,a.attributes.container);if(this.TriggerField.blurOnSelect){this.TriggerField.fireEvent("blur",this.TriggerField)}this.onClose()}}});Ext.namespace("Tine.widgets","Tine.widgets.container");Tine.widgets.container.GrantsDialog=Ext.extend(Tine.widgets.dialog.EditDialog,{grantContainer:null,containerName:null,grantsStore:null,windowNamePrefix:"ContainerGrantsWindow_",loadRecord:false,tbarItems:[],evalGrants:false,initComponent:function(){this.containerName=this.containerName?this.containerName:_("Folder");this.grantsStore=new Ext.data.JsonStore({baseParams:{method:"Tinebase_Container.getContainerGrants",containerId:this.grantContainer.id},root:"results",totalProperty:"totalcount",id:"account_id",fields:Tine.Tinebase.Model.Grant});this.grantsStore.load();Tine.widgets.container.GrantsDialog.superclass.initComponent.call(this)},onRender:function(){this.supr().onRender.apply(this,arguments);this.window.setTitle(this.windowTitle)},initRecord:function(){},getFormItems:function(){var a=[new Ext.ux.grid.CheckColumn({header:_("Read"),dataIndex:"readGrant",width:55}),new Ext.ux.grid.CheckColumn({header:_("Add"),dataIndex:"addGrant",width:55}),new Ext.ux.grid.CheckColumn({header:_("Edit"),dataIndex:"editGrant",width:55}),new Ext.ux.grid.CheckColumn({header:_("Delete"),dataIndex:"deleteGrant",width:55})];if(this.grantContainer.type=="shared"){a.push(new Ext.ux.grid.CheckColumn({header:_("Admin"),dataIndex:"adminGrant",width:55}))}this.grantsGrid=new Tine.widgets.account.PickerGridPanel({selectType:"both",store:this.grantsStore,hasAccountPrefix:true,configColumns:a,recordClass:Tine.Tinebase.Model.Grant});return this.grantsGrid},onApplyChanges:function(b,d,c){Ext.MessageBox.wait(_("Please wait"),_("Updating Grants"));var a=[];this.grantsStore.each(function(f){a.push(f.data)});Ext.Ajax.request({params:{method:"Tinebase_Container.setContainerGrants",containerId:this.grantContainer.id,grants:Ext.util.JSON.encode(a)},scope:this,success:function(h,g){var f=Ext.util.JSON.decode(h.responseText);this.grantsStore.loadData(f,false);Ext.MessageBox.hide();if(c){this.purgeListeners();this.window.close()}},failure:function(f,g){var i=Ext.util.JSON.decode(f.responseText);if(i.data.code==505){Ext.Msg.show({title:_("Error"),msg:_("You are not allowed to remove all admins for this container!"),icon:Ext.MessageBox.ERROR,buttons:Ext.Msg.OK})}else{var h=i.data?i.data:i;Tine.Tinebase.ExceptionHandler.handleRequestException(h)}}})}});Tine.widgets.container.GrantsDialog.openWindow=function(a){var b=Tine.WindowFactory.getWindow({width:700,height:450,name:Tine.widgets.container.GrantsDialog.windowNamePrefix+Ext.id(),contentPanelConstructor:"Tine.widgets.container.GrantsDialog",contentPanelConstructorConfig:a,modal:true});return b};Ext.namespace("Tine.widgets","Tine.widgets.container");Tine.widgets.container.TreePanel=function(a){Ext.apply(this,a);if(this.app){this.appName=this.app.appName;if(this.recordClass){this.containerName=this.app.i18n.n_hidden(this.recordClass.getMeta("containerName"),this.recordClass.getMeta("containersName"),1);this.containersName=this.app.i18n._hidden(this.recordClass.getMeta("containersName"))}}Tine.widgets.container.TreePanel.superclass.constructor.call(this)};Ext.extend(Tine.widgets.container.TreePanel,Ext.tree.TreePanel,{appName:"",requiredGrant:"readGrant",containerName:"container",containersName:"containers",extraItems:null,iconCls:"x-new-application",rootVisible:false,border:false,autoScroll:true,ctxNode:null,initComponent:function(){var d=new Locale.Gettext();d.textdomain("Tinebase");if(!this.loader){this.loader=new Tine.widgets.container.TreeLoader({appName:this.appName})}Tine.widgets.container.TreePanel.superclass.initComponent.call(this);this.addEvents("containeradd","containerdelete","containerrename","containerpermissionchange");var a=new Ext.tree.TreeNode({text:"root",draggable:false,allowDrop:false,id:"root"});var c=[{text:String.format(d._("All {0}"),this.containersName),cls:"treemain",containerType:"all",id:"all",children:[{text:String.format(d._("My {0}"),this.containersName),cls:"file",containerType:Tine.Tinebase.container.TYPE_PERSONAL,id:"user",leaf:null,owner:Tine.Tinebase.registry.get("currentAccount")},{text:String.format(d._("Shared {0}"),this.containersName),cls:"file",containerType:Tine.Tinebase.container.TYPE_SHARED,id:"shared",children:null,leaf:null,owner:null},{text:String.format(d._("Other Users {0}"),this.containersName),cls:"file",containerType:"otherUsers",id:"otherUsers",children:null,leaf:null,owner:null}]}];if(this.extraItems!==null){Ext.each(this.extraItems,function(f){c[0].children.push(f)})}this.initContextMenu();this.getSelectionModel().on("beforeselect",function(i,f,g){if(this.requiredGrant&&f.isLeaf()){var h=f.attributes.container.account_grants||{};if(!h[this.requiredGrant]){Ext.Msg.alert(_("Permission Denied"),String.format(d._("You don't have the required grant to select this {0}"),this.containerName));return false}}},this);this.on("click",function(f,g){f.expand()},this);this.on("contextmenu",function(i,h){this.ctxNode=i;var g=i.attributes.container;var f=i.attributes.owner;switch(i.attributes.containerType){case"singleContainer":if(g.account_grants.adminGrant){this.contextMenuSingleContainer.showAt(h.getXY())}break;case Tine.Tinebase.container.TYPE_PERSONAL:if(f.accountId==Tine.Tinebase.registry.get("currentAccount").accountId){this.contextMenuUserFolder.showAt(h.getXY())}break;case Tine.Tinebase.container.TYPE_SHARED:if(Tine.Tinebase.common.hasRight("admin",this.appName)||Tine.Tinebase.common.hasRight("manage_shared_folders",this.appName)){this.contextMenuUserFolder.showAt(h.getXY())}break}},this);this.setRootNode(a);for(var b=0;b<c.length;b++){a.appendChild(new Ext.tree.AsyncTreeNode(c[b]))}},getFilterPlugin:function(){if(!this.filterPlugin){this.filterPlugin=new Tine.widgets.container.TreeFilterPlugin({scope:this});this.getSelectionModel().on("selectionchange",function(b,a){this.filterPlugin.onFilterChange()},this)}return this.filterPlugin},getSelectedContainer:function(){var a=null;var b=this.getSelectionModel().getSelectedNode();var c=b.attributes&&b.attributes.containerType;if(c=="singleContainer"&&b.attributes.container){a=b.attributes.container}return a},afterRender:function(){Tine.widgets.container.TreePanel.superclass.afterRender.call(this);this.getEl().first().first().applyStyles("overflow-x: hidden");this.expandPath("/root/all");this.selectPath("/root/all")},initContextMenu:function(){this.contextMenuUserFolder=Tine.widgets.tree.ContextMenu.getMenu({nodeName:this.containerName,actions:["add"],scope:this,backend:"Tinebase_Container",backendModel:"Container"});this.contextMenuSingleContainer=Tine.widgets.tree.ContextMenu.getMenu({nodeName:this.containerName,actions:["delete","rename","grants"],scope:this,backend:"Tinebase_Container",backendModel:"Container"})},hasGrant:function(c,b){var a=c.attributes;return(a.containerType=="singleContainer"&&a.container.account_grants[b])}});Tine.widgets.container.TreeFilterPlugin=Ext.extend(Tine.widgets.grid.FilterPlugin,{getValue:function(){var c=this.scope.getSelectionModel();var a=typeof c.getSelectedNodes=="function"?c.getSelectedNodes():[c.getSelectedNode()];var b=[];Ext.each(a,function(d){b.push(this.node2Filter(d))},this);if(b.length==0){return{field:"container_id",operator:"equals",value:""}}else{if(b.length==1){return b[0]}else{return{condition:"OR",filters:b}}}},node2Filter:function(b){var a={field:"container_id"};switch(b.attributes.containerType){case"singleContainer":a.operator="equals";a.value=b.attributes.container.id;break;case"personal":a.operator="personalNode";a.value=b.attributes.owner.accountId;break;default:a.operator="specialNode";a.value=b.attributes.containerType;break}return a},setValue:function(d){for(var c=0;c<d.length;c++){if(d[c].field=="container_id"){switch(d[c].operator){case"equals":var f=d[c].value.path.replace(/^\//,"").split("/");var b,a;switch(f[0]){case"personal":b=f[1];a=f[2];if(b==Tine.Tinebase.registry.get("currentAccount").accountId){this.scope.selectPath("/root/all/user/"+a)}else{this.scope.selectPath("/root/all/otherUsers/"+a)}break;case"shared":a=f[1];this.scope.selectPath("/root/all/shared/"+a);break;default:console.error("no such container type");break}break;case"specialNode":switch(d[c].value){case"all":this.scope.selectPath("/root/all");break;case"shared":case"otherUsers":case"internal":this.scope.selectPath("/root/all"+d[c].value);break;default:console.error("no such container_id spechial node");break}break;case"personalNode":if(d[c].value==Tine.Tinebase.registry.get("currentAccount").accountId){this.scope.selectPath("/root/all/user")}else{this.scope.selectPath("/root/all/otherUsers/"+d[c].value)}break;default:console.error("no such container_id filter operator");break}}}}});Tine.widgets.container.TreeLoader=function(a){Tine.widgets.container.TreeLoader.superclass.constructor.call(this,a);this.on("beforeload",this.onBeforeLoad,this)};Ext.extend(Tine.widgets.container.TreeLoader,Ext.tree.TreeLoader,{paramsAsHash:true,directFn:function(c,b,a){Ext.Ajax.request({params:b,success:function(d){a(d.responseText,d)}})},createNode:function(attr){if(attr.name){if(!attr.account_grants.account_id){attr.account_grants=Ext.util.JSON.decode(attr.account_grants)}attr={containerType:"singleContainer",container:attr,text:attr.name,id:attr.id,cls:"file",leaf:true}}else{if(attr.accountDisplayName){attr={containerType:Tine.Tinebase.container.TYPE_PERSONAL,text:attr.accountDisplayName,id:attr.accountId,cls:"folder",leaf:false,owner:attr}}}attr.qtip=Ext.util.Format.htmlEncode(attr.text);attr.text=Ext.util.Format.htmlEncode(attr.text);this.inspectCreateNode(attr);if(this.baseAttrs){Ext.applyIf(attr,this.baseAttrs)}if(this.applyLoader!==false){attr.loader=this}if(typeof attr.uiProvider=="string"){attr.uiProvider=this.uiProviders[attr.uiProvider]||eval(attr.uiProvider)}return(attr.leaf?new Ext.tree.TreeNode(attr):new Ext.tree.AsyncTreeNode(attr))},inspectCreateNode:Ext.emptyFn,onBeforeLoad:function(a,b){a.baseParams.method="Tinebase_Container.getContainer";a.baseParams.application=this.appName;a.baseParams.containerType=b.attributes.containerType;a.baseParams.owner=b.attributes.owner?b.attributes.owner.accountId:null}});Ext.namespace("Tine.widgets","Tine.widgets.tags");Tine.widgets.tags.TagPanel=Ext.extend(Ext.Panel,{app:"",recordId:"",tags:[],recordTagsStore:null,availableTagsStore:false,searchField:null,iconCls:"action_tag",layout:"fit",bodyStyle:"padding: 2px 2px 2px 2px",collapsible:true,border:false,initComponent:function(){this.title=_("Tags");this.tags=[];this.recordTagsStore=new Ext.data.JsonStore({id:"id",fields:Tine.Tinebase.Model.Tag,data:this.tags});this.availableTagsStore=new Ext.data.JsonStore({id:"id",root:"results",totalProperty:"totalCount",fields:Tine.Tinebase.Model.Tag,baseParams:{method:"Tinebase.searchTags",filter:Ext.util.JSON.encode({application:this.app,grant:"use"}),paging:Ext.util.JSON.encode({})}});this.initSearchField();this.bottomBar=new Ext.Container({layout:"column",items:[Ext.apply(this.searchField,{columnWidth:0.99}),new Ext.Button({text:"",width:16,iconCls:"action_add",tooltip:_("Add a new personal tag"),scope:this,handler:function(){Ext.Msg.prompt(_("Add New Personal Tag"),_("Please note: You create a personal tag. Only you can see it!")+" <br />"+_("Enter tag name:"),function(b,c){if(b=="ok"){this.onTagAdd(c)}},this,false,this.searchField.lastQuery)}})]});var a=new Ext.XTemplate('<tpl for=".">','<div class="x-widget-tag-tagitem" id="{id}">','<div class="x-widget-tag-tagitem-color" style="background-color: {color};">&#160;</div>','<div class="x-widget-tag-tagitem-text" ext:qtip="',"{[this.encode(values.name)]}","<tpl if=\"type == 'personal' \">&nbsp;<i>("+_("personal")+")</i></tpl>","</i>&nbsp;[{occurrence}]",'<tpl if="description != null && description.length &gt; 1"><hr>{[this.encode(values.description)]}</tpl>" >',"&nbsp;{[this.encode(values.name)]}","</div>","</div>","</tpl>",{encode:function(b){return Ext.util.Format.htmlEncode(b)}});this.dataView=new Ext.DataView({store:this.recordTagsStore,tpl:a,autoHeight:true,multiSelect:true,overClass:"x-widget-tag-tagitem-over",selectedClass:"x-widget-tag-tagitem-selected",itemSelector:"div.x-widget-tag-tagitem",emptyText:_("No Tags to display")});this.dataView.on("contextmenu",function(l,g,d,b){if(!this.dataView.isSelected(g)){this.dataView.clearSelections();this.dataView.select(g)}b.preventDefault();var f=this.dataView.getSelectedRecords();var k=f.length==1?f[0]:null;var j=true;for(var h=0;h<f.length;h++){if(f[h].get("type")=="shared"){j=false}}var c=new Ext.menu.Menu({items:[new Ext.Action({scope:this,text:Tine.Tinebase.translation.ngettext("Detach tag","Detach tags",f.length),iconCls:"x-widget-tag-action-detach",handler:function(){for(var n=0,m=f.length;n<m;n++){this.recordTagsStore.remove(f[n])}}}),"-",{text:_("Edit tag"),disabled:!(k&&j),menu:{items:[new Ext.Action({text:_("Rename Tag"),selectedTag:k,scope:this,handler:function(m){var i=m.selectedTag;Ext.Msg.prompt(_("Rename Tag")+' "'+i.get("name")+'"',_("Please enter a new name:"),function(n,o){if(n=="ok"){i.set("name",o);this.onTagUpdate(i)}},this,false,i.get("name"))}}),new Ext.Action({text:_("Edit Description"),selectedTag:k,scope:this,handler:function(m){var i=m.selectedTag;Ext.Msg.prompt(_("Description for tag")+' "'+i.get("name")+'"',_("Please enter new description:"),function(n,o){if(n=="ok"){i.set("description",o);this.onTagUpdate(i)}},this,30,i.get("description"))}}),new Ext.Action({text:_("Change Color"),scope:this,menu:new Ext.menu.ColorMenu({scope:this,listeners:{select:function(m,i){i="#"+i;if(k.get("color")!=i){k.set("color",i);this.onTagUpdate(k)}},scope:this}})})]}},new Ext.Action({disabled:!j,scope:this,text:Tine.Tinebase.translation.ngettext("Delete Tag","Delete Tags",f.length),iconCls:"action_delete",handler:function(){var o=[];for(var n=0,m=f.length;n<m;n++){if(f[n].id.length>20){o.push(f[n].id)}}Ext.MessageBox.confirm(Tine.Tinebase.translation.ngettext("Realy Delete Selected Tag?","Realy Delete Selected Tags?",f.length),Tine.Tinebase.translation.ngettext("the selected tag will be deleted and disapear for all entries","The selected tags will be removed and disapear for all entries",f.length),function(i){if(i=="yes"){Ext.MessageBox.wait(_("Please wait a moment..."),Tine.Tinebase.translation.ngettext("Deleting Tag","Deleting Tags",f.length));Ext.Ajax.request({params:{method:"Tinebase.deleteTags",ids:Ext.util.JSON.encode(o)},success:function(t,r){this.availableTagsStore.lastOptions=null;for(var s=0,q=f.length;s<q;s++){this.recordTagsStore.remove(f[s])}Ext.MessageBox.hide()},failure:function(q,r){Ext.MessageBox.alert(_("Failed"),_("Could not delete Tag(s)."))},scope:this})}},this)}})]});c.showAt(b.getXY())},this);this.formField={layout:"form",items:new Tine.widgets.tags.TagFormField({recordTagsStore:this.recordTagsStore})};this.items=[{xtype:"panel",layout:"fit",bbar:this.bottomBar,items:[this.dataView,this.formField]}];Tine.widgets.tags.TagPanel.superclass.initComponent.call(this)},onRender:function(b,a){Tine.widgets.tags.TagPanel.superclass.onRender.call(this,b,a)},onTagAdd:function(b){if(b.length<3){Ext.Msg.show({title:_("Notice"),msg:_("The minimum tag length is three."),buttons:Ext.Msg.OK,animEl:"elId",icon:Ext.MessageBox.INFO})}else{var a=false;this.recordTagsStore.each(function(d){if(d.data.name==b){a=true}},this);if(!a){var c=false;this.availableTagsStore.each(function(d){if(d.data.name==b){c=d}},this);if(!c){c=new Tine.Tinebase.Model.Tag({name:b,type:"personal",description:"",color:"#FFFFFF"});if(!Ext.isIE){this.el.mask()}Ext.Ajax.request({params:{method:"Tinebase.saveTag",tag:Ext.util.JSON.encode(c.data)},success:function(f,d){var h=Ext.util.JSON.decode(f.responseText);var g=new Tine.Tinebase.Model.Tag(h,h.id);this.recordTagsStore.add(g);this.availableTagsStore.lastOptions=null;this.el.unmask()},failure:function(d,f){Ext.MessageBox.alert(_("Failed"),_("Could not create tag."));this.el.unmask()},scope:this})}else{this.recordTagsStore.add(c)}}}},onTagUpdate:function(a){if(a.get("name").length<3){Ext.Msg.show({title:_("Notice"),msg:_("The minimum tag length is three."),buttons:Ext.Msg.OK,animEl:"elId",icon:Ext.MessageBox.INFO})}else{this.el.mask();Ext.Ajax.request({params:{method:"Tinebase.saveTag",tag:Ext.util.JSON.encode(a.data)},success:function(c,b){this.availableTagsStore.lastOptions=null;this.el.unmask()},failure:function(b,c){Ext.MessageBox.alert(_("Failed"),_("Could not update tag."));this.el.unmask()},scope:this})}},initSearchField:function(){var a=new Ext.XTemplate('<tpl for="."><div class="x-combo-list-item" ext:qtip="',"{[this.encode(values.name)]}","<tpl if=\"type == 'personal' \">&nbsp;<i>("+_("personal")+")</i></tpl>","</i>&nbsp;[{occurrence}]",'<tpl if="description != null && description.length &gt; 1"><hr>{[this.encode(values.description)]}</tpl>">',"{[this.encode(values.name)]} <tpl if=\"type == 'personal' \"><i>("+_("personal")+")</i></tpl>","</div></tpl>",{encode:function(b){return Ext.util.Format.htmlEncode(b)}});this.searchField=new Ext.form.ComboBox({store:this.availableTagsStore,mode:"local",enableKeyEvents:true,displayField:"name",typeAhead:true,emptyText:_("Enter tag name"),loadingText:_("Searching..."),typeAheadDelay:10,minChars:1,hideTrigger:false,triggerAction:"all",forceSelection:true,tpl:a});this.searchField.on("focus",function(b){if(!b.store.lastOptions){b.hasFocus=false;this.availableTagsStore.load({scope:this,callback:function(){b.hasFocus=true}})}},this);this.searchField.on("select",function(c,b){if(this.recordTagsStore.getById(b.id)===undefined){this.recordTagsStore.add(b)}c.emptyText="";c.clearValue()},this);this.searchField.on("blur",function(b){b.emptyText=_("Enter tag name");b.clearValue()},this)}});Tine.widgets.tags.TagFormField=Ext.extend(Ext.form.Field,{recordTagsStore:null,name:"tags",hidden:true,labelSeparator:"",initComponent:function(){Tine.widgets.tags.TagFormField.superclass.initComponent.call(this)},getValue:function(){var a=[];this.recordTagsStore.each(function(b){if(b.id.length>5){a.push(b.id)}else{a.push(b.data)}});return a},setValue:function(a){this.recordTagsStore.loadData(a)}});Tine.widgets.tags.TagEditDialog=Ext.extend(Ext.Window,{width:200,height:300,layout:"fit",margins:"0px 5px 0px 5px",initComponent:function(){this.items=new Ext.form.FormPanel({defaults:{xtype:"textfield",anchor:"100%"},labelAlign:"top",items:[{name:"name",fieldLabel:"Name"},{name:"description",fieldLabel:_("Description")},{name:"color",fieldLabel:_("Color")}]});Tine.widgets.tags.TagEditDialog.superclass.initComponent.call(this)}});Tine.widgets.tags.EditDialog=Ext.extend(Ext.Window,{layout:"border",width:640,heigh:480,initComponent:function(){this.items=[{region:"west",split:true},{region:"center",split:true}];Tine.widgets.tags.EditDialog.superclass.call(this)}});Ext.namespace("Tine.widgets","Tine.widgets.tags");Tine.widgets.tags.TagCombo=Ext.extend(Ext.ux.form.ClearableComboBox,{app:null,findGlobalTags:true,onlyUsableTags:false,id:"TagCombo",emptyText:null,typeAhead:true,mode:"remote",triggerAction:"all",displayField:"name",valueField:"id",width:100,minChars:3,initComponent:function(){this.emptyText=this.emptyText?this.emptyText:_("tag name");this.store=new Ext.data.JsonStore({id:"id",root:"results",totalProperty:"totalCount",fields:Tine.Tinebase.Model.Tag,baseParams:{method:"Tinebase.searchTags",paging:Ext.util.JSON.encode({})}});Tine.widgets.tags.TagCombo.superclass.initComponent.call(this);this.on("select",function(){var a=this.getValue();if(String(a)!==String(this.startValue)){this.fireEvent("change",this,a,this.startValue)}},this);this.on("beforequery",this.onBeforeQuery,this)},onBeforeQuery:function(b){var a={name:(b.query&&b.query!="")?"%"+b.query+"%":"",application:this.app?this.app.appName:"",grant:(this.onlyUsableTags)?"use":"view"};this.store.baseParams.filter=Ext.util.JSON.encode(a)},setValue:function(a){if(typeof a==="object"&&Object.prototype.toString.call(a)==="[object Object]"){this.store.loadData({results:[a]});a=a.id}Tine.widgets.tags.TagCombo.superclass.setValue.call(this,a)}});Ext.namespace("Tine.widgets","Tine.widgets.tags");Tine.widgets.tags.TagFilter=Ext.extend(Tine.widgets.grid.FilterModel,{app:null,field:"tag",defaultOperator:"equals",initComponent:function(){Tine.widgets.tags.TagFilter.superclass.initComponent.call(this);this.operators=["equals","not"];this.label=_("Tag")},valueRenderer:function(b,a){var c=new Tine.widgets.tags.TagCombo({app:this.app,filter:b,width:200,id:"tw-ftb-frow-valuefield-"+b.id,value:b.data.value?b.data.value:this.defaultValue,renderTo:a});c.on("specialkey",function(f,d){if(d.getKey()==d.ENTER){this.onFiltertrigger()}},this);return c}});Tine.widgets.grid.FilterToolbar.FILTERS["tinebase.tag"]=Tine.widgets.tags.TagFilter;Ext.namespace("Tine.widgets","Tine.widgets.tags");Tine.widgets.tags.TagsMassAttachAction=function(a){a.text=a.text?a.text:_("Add Tag");a.iconCls="action_tag";a.handler=this.handleClick.createDelegate(this);Ext.apply(this,a);Tine.widgets.tags.TagsMassAttachAction.superclass.constructor.call(this,a)};Ext.extend(Tine.widgets.tags.TagsMassAttachAction,Ext.Action,{updateHandler:Ext.emptyFn,updateHandlerScope:null,selectionModel:null,recordClass:null,getFormItems:function(){this.tagSelect=new Tine.widgets.tags.TagCombo({hideLabel:true,anchor:"100%",onlyUsableTags:true});return[{xtype:"label",text:_("Attach the following tag to all selected items:")},this.tagSelect]},handleClick:function(){this.win=new Ext.Window({layout:"fit",width:300,height:150,modal:true,title:_("Select Tag"),items:[{xtype:"form",buttonAlign:"right",items:this.getFormItems(),buttons:[{text:_("Cancel"),minWidth:70,scope:this,handler:this.onCancel,iconCls:"action_cancel"},{text:_("Ok"),minWidth:70,scope:this,handler:this.onOk,iconCls:"action_saveAndClose"}]}]});this.win.show()},onCancel:function(){this.win.close()},onOk:function(){var a=this.tagSelect.getValue();var b=this.selectionModel.getSelectionFilter();var c=this.recordClass.getMeta("appName")+"_Model_"+this.recordClass.getMeta("modelName")+"Filter";Tine.Tinebase.attachTagToMultipleRecords(b,c,a,this.onSuccess.createDelegate(this))},onSuccess:function(){this.updateHandler.call(this.updateHandlerScope||this);this.win.close()}});Ext.ns("Tine.Tinebase.widgets.app");Tine.Tinebase.widgets.app.MainScreen=function(a){Ext.apply(this,a);this.addEvents("beforeshow","show");Tine.Tinebase.widgets.app.MainScreen.superclass.constructor.call(this)};Ext.extend(Tine.Tinebase.widgets.app.MainScreen,Ext.util.Observable,{app:null,show:function(){if(this.fireEvent("beforeshow",this)!==false){this.setTreePanel();this.setContentPanel();this.setToolbar();this.updateMainToolbar();this.fireEvent("show",this)}return this},onHide:function(){},setTreePanel:function(){if(!this.treePanel){this.treePanel=new Tine[this.app.appName].TreePanel({app:this.app})}if(!this.filterPanel&&Tine[this.app.appName].FilterPanel){this.filterPanel=new Tine[this.app.appName].FilterPanel({app:this.app,treePanel:this.treePanel})}if(this.filterPanel){var a="not found";if(this.treePanel.recordClass){var a=this.app.i18n.n_hidden(this.treePanel.recordClass.getMeta("containerName"),this.treePanel.recordClass.getMeta("containersName"),50)}this.leftTabPanel=new Ext.TabPanel({border:false,activeItem:0,layoutOnTabChange:true,autoScroll:true,items:[{title:a,layout:"fit",items:this.treePanel,autoScroll:true},{title:_("Saved filter"),layout:"fit",items:this.filterPanel,autoScroll:true}],getPersistentFilterNode:this.filterPanel.getPersistentFilterNode.createDelegate(this.filterPanel)});Tine.Tinebase.MainScreen.setActiveTreePanel(this.leftTabPanel,true)}else{Tine.Tinebase.MainScreen.setActiveTreePanel(this.treePanel,true)}},getTreePanel:function(){if(this.leftTabPanel){return this.leftTabPanel}else{return this.treePanel}},setContentPanel:function(){if(!this.gridPanel){var a=[];if(typeof(this.treePanel.getFilterPlugin)=="function"){a.push(this.treePanel.getFilterPlugin())}this.gridPanel=new Tine[this.app.appName].GridPanel({app:this.app,plugins:a})}Tine.Tinebase.MainScreen.setActiveContentPanel(this.gridPanel,true);this.gridPanel.store.load()},getContentPanel:function(){return this.gridPanel},setToolbar:function(){if(!this.actionToolbar){this.actionToolbar=this.gridPanel.actionToolbar}Tine.Tinebase.MainScreen.setActiveToolbar(this.actionToolbar,true)},updateMainToolbar:function(){}});Ext.namespace("Tine.Tinebase.widgets.app");Tine.Tinebase.widgets.app.GridPanel=function(a){Ext.apply(this,a);this.gridConfig=this.gridConfig||{};this.defaultSortInfo=this.defaultSortInfo||{};this.defaultPaging=this.defaultPaging||{start:0,limit:50};this.actionToolbarItems=this.actionToolbarItems||[];this.contextMenuItems=this.contextMenuItems||[];if(this.stateful!==false&&!this.stateId){this.stateId=this.recordClass.getMeta("appName")+"-"+this.recordClass.getMeta("recordName")+"-GridPanel"}Tine.Tinebase.widgets.app.GridPanel.superclass.constructor.call(this)};Ext.extend(Tine.Tinebase.widgets.app.GridPanel,Ext.Panel,{app:null,gridConfig:null,recordClass:null,recordProxy:null,actionToolbarItems:null,filterToolbar:null,contextMenuItems:null,evalGrants:true,filterSelectionDelete:false,defaultSortInfo:null,defaultPaging:null,detailsPanel:null,i18nDeleteQuestion:null,i18nAddActionText:null,i18nEditActionText:null,i18nDeleteActionText:null,newRecordIcon:null,updateDetailsPanelOnCtxMenu:true,updateOnSelectionChange:true,showDeleteMask:true,actionToolbar:null,contextMenu:null,getViewRowClass:null,layout:"border",border:false,stateful:true,initComponent:function(){this.i18nRecordName=this.app.i18n.n_hidden(this.recordClass.getMeta("recordName"),this.recordClass.getMeta("recordsName"),1);this.i18nRecordsName=this.app.i18n._hidden(this.recordClass.getMeta("recordsName"));this.i18nContainerName=this.app.i18n.n_hidden(this.recordClass.getMeta("containerName"),this.recordClass.getMeta("containersName"),1);this.i18nContainersName=this.app.i18n._hidden(this.recordClass.getMeta("containersName"));this.initStore();this.initGrid();this.initActions();this.initLayout();if(Ext.isIE6||Ext.isIE7){this.on("show",function(){if(this.layout.rendered&&this.detailsPanel){var a=this.detailsPanel.getSize().height;this.layout.south.split.setCurrentSize(a)}},this)}Tine.Tinebase.widgets.app.GridPanel.superclass.initComponent.call(this)},initLayout:function(){this.items=[{region:"center",xtype:"panel",layout:"fit",border:false,tbar:this.pagingToolbar,items:this.grid}];if(this.detailsPanel){this.items.push({region:"south",border:false,collapsible:true,collapseMode:"mini",split:true,layout:"fit",height:this.detailsPanel.defaultHeight?this.detailsPanel.defaultHeight:125,items:this.detailsPanel});this.detailsPanel.doBind(this.grid)}if(this.filterToolbar){this.items.push({region:"north",border:false,items:this.filterToolbar,listeners:{scope:this,afterlayout:function(a){a.setHeight(this.filterToolbar.getHeight());a.ownerCt.layout.layout()}}})}},initActions:function(){this.action_editInNewWindow=new Ext.Action({requiredGrant:"readGrant",text:this.i18nEditActionText?this.app.i18n._hidden(this.i18nEditActionText):String.format(_("Edit {0}"),this.i18nRecordName),disabled:true,actionType:"edit",handler:this.onEditInNewWindow,iconCls:"action_edit",scope:this});this.action_addInNewWindow=new Ext.Action({requiredGrant:"addGrant",actionType:"add",text:this.i18nAddActionText?this.app.i18n._hidden(this.i18nAddActionText):String.format(_("Add {0}"),this.i18nRecordName),handler:this.onEditInNewWindow,iconCls:(this.newRecordIcon!==null)?this.newRecordIcon:this.app.appName+"IconCls",scope:this});this.action_deleteRecord=new Ext.Action({requiredGrant:"deleteGrant",allowMultiple:true,singularText:this.i18nDeleteActionText?this.i18nDeleteActionText[0]:String.format(Tine.Tinebase.translation.ngettext("Delete {0}","Delete {0}",1),this.i18nRecordName),pluralText:this.i18nDeleteActionText?this.i18nDeleteActionText[1]:String.format(Tine.Tinebase.translation.ngettext("Delete {0}","Delete {0}",1),this.i18nRecordsName),translationObject:this.i18nDeleteActionText?this.app.i18n:Tine.Tinebase.translation,text:this.i18nDeleteActionText?this.i18nDeleteActionText[0]:String.format(Tine.Tinebase.translation.ngettext("Delete {0}","Delete {0}",1),this.i18nRecordName),handler:this.onDeleteRecords,disabled:true,iconCls:"action_delete",scope:this});this.actions=[this.action_addInNewWindow,this.action_editInNewWindow,this.action_deleteRecord];if(this.recordClass.getField("tags")){this.action_tagsMassAttach=new Tine.widgets.tags.TagsMassAttachAction({selectionModel:this.grid.getSelectionModel(),recordClass:this.recordClass,updateHandler:this.loadData.createDelegate(this,[true])});this.contextMenuItems.push("-",this.action_tagsMassAttach)}var a=this.actions.concat(this.actionToolbarItems);if(this.filterToolbar&&typeof this.filterToolbar.getQuickFilterField=="function"){a.push("->");a.push(this.filterToolbar.getQuickFilterField())}this.actionToolbar=new Ext.Toolbar({split:false,height:26,items:a});this.contextMenu=new Ext.menu.Menu({items:this.actions.concat(this.contextMenuItems)});for(var c=this.actionToolbarItems.concat(this.contextMenuItems),b=0;b<c.length;b++){if(this.actions.indexOf(c[b])==-1){this.actions.push(c[b])}}},initStore:function(){if(this.recordProxy){this.store=new Ext.data.Store({fields:this.recordClass,proxy:this.recordProxy,reader:this.recordProxy.getReader(),remoteSort:true,sortInfo:this.defaultSortInfo,listeners:{scope:this,update:this.onStoreUpdate,beforeload:this.onStoreBeforeload,load:this.onStoreLoad}})}else{this.store=new Tine.Tinebase.data.RecordStore({autoLoad:true,recordClass:this.recordClass})}},initGrid:function(){this.selectionModel=new Tine.Tinebase.widgets.grid.FilterSelectionModel({store:this.store});this.selectionModel.on("selectionchange",function(c){Tine.widgets.actionUpdater(c,this.actions,this.recordClass.getMeta("containerProperty"),!this.evalGrants);if(this.updateOnSelectionChange&&this.detailsPanel){this.detailsPanel.onDetailsUpdate(c)}},this);this.pagingToolbar=new Ext.ux.grid.PagingToolbar({pageSize:50,store:this.store,displayInfo:true,displayMsg:Tine.Tinebase.translation._("Displaying records {0} - {1} of {2}").replace(/records/,this.i18nRecordsName),emptyMsg:String.format(Tine.Tinebase.translation._("No {0} to display"),this.i18nRecordsName),displaySelectionHelper:true,sm:this.selectionModel});this.pagingToolbar.on("beforechange",function(){this.grid.getView().isPagingRefresh=true},this);this.pagingToolbar.on("render",function(){},this);var b=new Ext.grid.GridView({getRowClass:this.getViewRowClass,autoFill:true,forceFit:true,ignoreAdd:true,emptyText:String.format(Tine.Tinebase.translation._("No {0} where found. Please try to change your filter-criteria, view-options or the {1} you search in."),this.i18nRecordsName,this.i18nContainersName),onLoad:Ext.emptyFn,listeners:{beforerefresh:function(c){c.scrollTop=c.scroller.dom.scrollTop},refresh:function(c){if(c.isPagingRefresh){c.scrollToTop();c.isPagingRefresh=false}else{c.scroller.dom.scrollTop=c.scrollTop}}}});var a=this.gridConfig.quickaddMandatory?Ext.ux.grid.QuickaddGridPanel:Ext.grid.GridPanel;this.gridConfig.store=this.store;this.gridConfig.plugins=this.gridConfig.plugins?this.gridConfig.plugins:[];this.gridConfig.plugins.push(new Ext.ux.grid.GridViewMenuPlugin({}));this.gridConfig.enableHdMenu=false;if(this.stateful){this.gridConfig.stateful=true;this.gridConfig.stateId=this.stateId+"-Grid"}this.grid=new a(Ext.applyIf(this.gridConfig,{border:false,store:this.store,sm:this.selectionModel,view:b}));this.grid.on("keydown",this.onKeyDown,this);this.grid.on("rowclick",this.onRowClick,this);this.grid.on("rowdblclick",this.onRowDblClick,this);this.grid.on("rowcontextmenu",function(d,g,f){f.stopEvent();var c=d.getSelectionModel();if(!c.isSelected(g)){this.updateOnSelectionChange=this.updateDetailsPanelOnCtxMenu;c.selectRow(g)}this.contextMenu.showAt(f.getXY());this.updateOnSelectionChange=true},this)},loadData:function(b){var a={};if(b){a.params={start:this.pagingToolbar.cursor}}this.store.load(a)},onStoreUpdate:function(c,a,b){switch(b){case Ext.data.Record.EDIT:this.recordProxy.saveRecord(a,{scope:this,success:function(d){c.commitChanges();a.data=d.data}});break;case Ext.data.Record.COMMIT:break}},onStoreBeforeload:function(a,b){b.params=b.params||{};b.params.filter=[];Ext.applyIf(b.params,this.defaultPaging)},onStoreLoad:function(b,a,c){if(this.store.getCount()>0){}},onKeyDown:function(a){if(a.ctrlKey){switch(a.getKey()){case a.A:this.grid.getSelectionModel().selectAll(true);a.preventDefault();break;case a.E:if(this.action_editInNewWindow&&!this.action_editInNewWindow.isDisabled()){this.onEditInNewWindow.call(this,{actionType:"edit"});a.preventDefault()}break;case a.N:if(this.action_addInNewWindow&&!this.action_addInNewWindow.isDisabled()){this.onEditInNewWindow.call(this,{actionType:"add"});a.preventDefault()}break}}else{if(a.getKey()==a.DELETE){if(!this.grid.editing&&!this.grid.adding&&!this.action_deleteRecord.isDisabled()){this.onDeleteRecords.call(this)}}}},onRowClick:function(a,c,b){if(b.button===0&&!b.shiftKey&&!b.ctrlKey){var d=a.getSelectionModel();if(d.getCount()==1&&d.isSelected(c)){return}d.clearSelections();d.selectRow(c,false);a.view.focusRow(c)}},onRowDblClick:function(a,c,b){this.onEditInNewWindow.call(this,{actionType:"edit"})},onEditInNewWindow:function(c,d){var a;if(c.actionType=="edit"){if(!this.action_editInNewWindow||this.action_editInNewWindow.isDisabled()){return false}var f=this.grid.getSelectionModel().getSelections();a=f[0]}else{a=new this.recordClass(this.recordClass.getDefaultData(),0)}var b=Tine[this.app.appName][this.recordClass.getMeta("modelName")+"EditDialog"].openWindow({record:a,listeners:{scope:this,update:function(g){this.loadData(true)}}})},onDeleteRecords:function(c,d){var g=this.grid.getSelectionModel();if(g.isFilterSelect&&!this.filterSelectionDelete){Ext.MessageBox.show({title:_("Not Allowed"),msg:_("You are not allowed to delete all pages at once"),buttons:Ext.Msg.OK,icon:Ext.MessageBox.INFO});return}var b=g.getSelections();var a=this.app.i18n.n_hidden(this.recordClass.getMeta("recordName"),this.recordClass.getMeta("recordsName"),b.length);var f=this.i18nDeleteQuestion?this.app.i18n.n_hidden(this.i18nDeleteQuestion[0],this.i18nDeleteQuestion[1],b.length):Tine.Tinebase.translation.ngettext("Do you really want to delete the selected record","Do you really want to delete the selected records",b.length);Ext.MessageBox.confirm(_("Confirm"),f,function(i){if(i=="yes"){if(this.recordProxy){if(this.showDeleteMask){if(!this.deleteMask){var j=String.format(_("Deleting {0}"),a);if(g.isFilterSelect){j=j+_(" ... This may take a long time!")}this.deleteMask=new Ext.LoadMask(this.grid.getEl(),{msg:j})}this.deleteMask.show()}var h={scope:this,success:function(){if(this.showDeleteMask){this.deleteMask.hide()}this.onAfterDelete()},failure:function(){if(this.showDeleteMask){this.deleteMask.hide()}Ext.MessageBox.alert(_("Failed"),String.format(_("Could not delete {0}."),a))}};if(g.isFilterSelect&&this.filterSelectionDelete){this.recordProxy.deleteRecordsByFilter(g.getSelectionFilter(),h)}else{this.recordProxy.deleteRecords(b,h)}}else{Ext.each(b,function(k){this.store.remove(k)})}}},this)},onAfterDelete:function(){this.loadData(true)}});Ext.namespace("Tine.widgets","Tine.widgets.group");Tine.widgets.group.selectionComboBox=Ext.extend(Ext.form.ComboBox,{group:null,valueField:"id",displayField:"name",triggerAction:"all",allowBlank:false,editable:false,initComponent:function(){this.group=new Tine.Tinebase.Model.Group({},0);this.store=new Ext.data.JsonStore({baseParams:{method:"Admin.getGroups",filter:"",sort:"name",dir:"asc",start:0,limit:50},root:"results",totalProperty:"totalcount",id:"id",fields:Tine.Tinebase.Model.Group});Tine.widgets.group.selectionComboBox.superclass.initComponent.call(this,arguments)},getValue:function(){return this.group.id},setValue:function(b){if(b.hasOwnProperty("id")&&typeof b.get!="function"){var a=new Tine.Tinebase.Model.Group(b,b.id)}else{var a=this.store.getById(b)}if(a){this.group=a;this.value=a.id;this.setRawValue(a.get("name"))}else{this.setRawValue(b)}}});Tine.widgets.group.selectionDialog=Ext.extend(Ext.Component,{title:null,initComponent:function(){this.title=this.title?this.title:_("Please Select a Group");Tine.widgets.group.selectionDialog.superclass.initComponent.call(this);var b=400;if(Ext.getBody().getHeight(true)*0.7<b){b=Ext.getBody().getHeight(true)*0.7}var a=new Ext.Window({title:this.title,modal:true,width:375,height:b,minWidth:375,minHeight:b,layout:"fit",plain:true,bodyStyle:"padding:5px;",buttonAlign:"center",items:groupsGridPanel});a.show()}});Ext.namespace("Tine.Admin.Model");Tine.Admin.Model.Group=Ext.data.Record.create([{name:"id"},{name:"name"},{name:"description"}]);Ext.namespace("Tine.widgets");Tine.widgets.CountryCombo=Ext.extend(Ext.form.ComboBox,{fieldLabel:"Country",displayField:"translatedName",valueField:"shortName",typeAhead:true,forceSelection:true,mode:"local",triggerAction:"all",emptyText:"Select a country...",selectOnFocus:true,initComponent:function(){this.store=this.getCountryStore();Tine.widgets.CountryCombo.superclass.initComponent.call(this);this.on("focus",function(a){if(this.getCountryStore().getCount()==0){a.hasFocus=false;this.getCountryStore().load({scope:this,callback:function(){a.hasFocus=true}})}},this);this.on("select",function(a){a.selectText()},this)},getCountryStore:function(){var c=Ext.StoreMgr.get("Countries");if(!c){c=new Ext.data.JsonStore({baseParams:{method:"Tinebase.getCountryList"},root:"results",id:"shortName",fields:["shortName","translatedName"],remoteSort:false,sortInfo:{field:"translatedName",direction:"ASC"}});Ext.StoreMgr.add("Countries",c)}var b=Locale.getTranslationList("CountryList");if(b){var d={results:[]};for(var a in b){d.results.push({shortName:a,translatedName:b[a]})}c.loadData(d)}return c},onTriggerClick:function(){if(this.getCountryStore().getCount()==0){this.getCountryStore().load({scope:this,callback:function(){Tine.widgets.CountryCombo.superclass.onTriggerClick.call(this)}})}else{Tine.widgets.CountryCombo.superclass.onTriggerClick.call(this)}}});Ext.reg("widget-countrycombo",Tine.widgets.CountryCombo);Ext.namespace("Tine.widgets");Tine.widgets.GridPicker=Ext.extend(Ext.Panel,{pickerWidth:200,pickerType:"contact",pickerTypeDefault:"contact",autoExpand:"n_fileas",recordListTitle:"",gridStore:null,columnModel:null,bbarItems:[],configColumns:[],picker:null,gridPanel:null,layout:"border",border:false,initComponent:function(){this.action_removeRecord=new Ext.Action({text:_("remove record"),disabled:true,scope:this,handler:this.removeRecord,iconCls:"action_deleteContact"});this.gridStore.sort(this.recordPrefix+"name","asc");this.picker=new Tine.widgets.PickerPanel({selectType:this.pickerType,selectTypeDefault:this.pickerTypeDefault,enableBbar:true});this.picker.on("recorddblclick",function(c){this.addRecord(c)},this);var a=new Ext.grid.RowSelectionModel({multiSelect:true});a.on("selectionchange",function(c){this.action_removeRecord.setDisabled(c.getCount()<1)},this);var b=[this.action_removeRecord];b.push(this.bbarItems);this.gridPanel=new Ext.grid.EditorGridPanel({title:this.recordListTitle,store:this.gridStore,cm:this.columnModel,autoSizeColumns:false,selModel:a,enableColLock:false,loadMask:true,plugins:this.configColumns,autoExpandColumn:this.autoExpand,bbar:b,border:false});this.items=this.getGridLayout();Tine.widgets.GridPicker.superclass.initComponent.call(this)},getGridLayout:function(){return[{layout:"fit",region:"west",border:false,split:true,width:this.pickerWidth,items:this.picker},{layout:"fit",region:"center",border:false,items:this.gridPanel}]},addRecord:function(a){var c=this.getRecordIndex(a);if(c===-1){var b={};b=a.data.data;b.relation_type="customer";var d=[b];this.gridStore.loadData(d,true)}this.gridPanel.getSelectionModel().selectRow(this.getRecordIndex(a))},removeRecord:function(){var b=this.gridPanel.getSelectionModel().getSelections();for(var a=0;a<b.length;++a){this.gridStore.remove(b[a])}},getRecordIndex:function(a){return id?this.gridStore.indexOfId(a.data.id):false}});Tine.widgets.PickerPanel=Ext.extend(Ext.TabPanel,{selectType:"contact",selectAction:false,multiSelect:false,enableBbar:true,bbar:null,requestMethod:"Addressbook.searchContacts",displayField:"n_fileas",activeTab:0,defaults:{autoScroll:true},border:true,split:true,width:300,height:300,collapsible:false,initComponent:function(){this.addEvents("recorddblclick","recordselectionchange");this.actions={addRecord:new Ext.Action({text:"add record",disabled:false,scope:this,handler:function(){var b=this.searchPanel.getSelectionModel().getSelected();this.fireEvent("recorddblclick",b)},iconCls:"action_addContact"})};this.ugStore=new Ext.data.SimpleStore({fields:Tine.Tinebase.PickerRecord});this.ugStore.setDefaultSort(this.displayField,"asc");this.loadData=function(){var b=Ext.getCmp("Tinebase_Records_SearchField").getRawValue();if(this.requestParams&&this.requestParams.filter.query==b||b.length<1){return}this.requestParams={method:this.requestMethod,filter:Ext.util.JSON.encode([{operator:"contains",field:"query",value:b},{field:"containerType",operator:"equals",value:"all"}]),paging:Ext.util.JSON.encode({dir:"asc",start:0,limit:50,sort:this.displayField})};Ext.getCmp("Tinebase_Records_Grid").getStore().removeAll();Ext.Ajax.request({params:this.requestParams,success:function(c,d){var k=Ext.util.JSON.decode(c.responseText);var j=[];for(var g=0;g<k.results.length;g++){var h=(k.results[g]);j.push(new Tine.Tinebase.PickerRecord({id:h.id,name:h.n_fileas,data:h}))}if(j.length>0){var f=Ext.getCmp("Tinebase_Records_Grid");f.getStore().add(j);f.getSelectionModel().selectFirstRow();f.getView().focusRow(0)}}})};var a=new Ext.grid.ColumnModel([{resizable:false,sortable:false,id:"name",header:"Name",dataIndex:"name",width:70}]);this.quickSearchField=new Ext.ux.SearchField({id:"Tinebase_Records_SearchField",emptyText:_("enter searchfilter")});this.quickSearchField.on("change",function(){this.loadData()},this);this.Toolbar=new Ext.Toolbar({items:[this.quickSearchField]});if(this.enableBbar&&!this.bbar){this.bbar=new Ext.Toolbar({items:[this.actions.addRecord]})}this.searchPanel=new Ext.grid.GridPanel({title:_("Search"),id:"Tinebase_Records_Grid",store:this.ugStore,cm:a,enableColumnHide:false,enableColumnMove:false,autoSizeColumns:false,selModel:new Ext.grid.RowSelectionModel({multiSelect:this.multiSelect}),enableColLock:false,loadMask:true,autoExpandColumn:"name",tbar:this.Toolbar,border:false});this.searchPanel.on("rowdblclick",function(c,f,d){var b=this.searchPanel.getSelectionModel().getSelected();this.fireEvent("recorddblclick",b)},this);this.searchPanel.on("keydown",function(c){if(c.getKey()==c.ENTER){var b=this.searchPanel.getSelectionModel().getSelected();this.fireEvent("recorddblclick",b)}},this);this.items=[this.searchPanel,{title:_("Browse"),html:_("Browse"),disabled:true}];Tine.widgets.PickerPanel.superclass.initComponent.call(this)}});Ext.namespace("Tine.widgets","Tine.widgets.activities");Tine.widgets.activities.ActivitiesPanel=Ext.extend(Ext.Panel,{app:"",showAddNoteForm:true,notes:[],translation:null,recordNotesStore:null,title:null,iconCls:"notes_noteIcon",layout:"hfit",bodyStyle:"padding: 2px 2px 2px 2px",autoScroll:true,handlers:{addNote:function(g,a){var f=g.typeId;var c=Ext.getCmp("note_textarea");var d=c.getValue();if(f&&d){notesStore=Ext.StoreMgr.lookup("NotesStore");var b=new Tine.Tinebase.Model.Note({note_type_id:f,note:d});notesStore.insert(0,b);c.setValue("");c.emptyText=c.emptyText}}},initActivitiesDataView:function(){var a=new Ext.XTemplate('<tpl for=".">','<div class="x-widget-activities-activitiesitem" id="{id}">','<div class="x-widget-activities-activitiesitem-text"','   ext:qtip="{[this.encode(values.note)]} - {[this.render(values.creation_time, "timefull")]} - {[this.render(values.created_by, "user")]}" >','{[this.render(values.note_type_id, "icon")]}&nbsp;{[this.render(values.creation_time, "timefull")]}<br/>','{[this.encode(values.note, true)]}<hr color="#aaaaaa">',"</div>","</div>","</tpl>",{encode:function(d,c){var b=Ext.util.Format.nl2br(Ext.util.Format.htmlEncode(d));return(c)?Ext.util.Format.ellipsis(b,300):b},render:function(c,b){switch(b){case"icon":return Tine.widgets.activities.getTypeIcon(c);case"user":if(!c){c=Tine.Tinebase.registry.map.currentAccount.accountDisplayName}var d=c;return"<i>"+d+"</i>";case"time":if(!c){return""}return c.format(Locale.getTranslationData("Date","medium"));case"timefull":if(!c){return""}return c.format(Locale.getTranslationData("Date","medium"))+" "+c.format(Locale.getTranslationData("Time","medium"))}}});this.activities=new Ext.DataView({tpl:a,id:"grid_activities_limited",store:this.recordNotesStore,overClass:"x-view-over",itemSelector:"activities-item-small"})},initNoteForm:function(){var c=new Ext.form.TextArea({id:"note_textarea",emptyText:this.translation._("Add a Note..."),grow:false,preventScrollbars:false,anchor:"100%",height:55,hideLabel:true});var b=[];var f=Tine.widgets.activities.getTypesStore();var a=f.getAt(f.find("is_user_type","1"));f.each(function(g){if(g.data.is_user_type==1){var h=new Ext.Action({text:this.translation._("Add")+" "+this.translation._(g.data.name)+" "+this.translation._("Note"),tooltip:this.translation._(g.data.description),handler:this.handlers.addNote,iconCls:"notes_"+g.data.name+"Icon",typeId:g.data.id,scope:this});b.push(h)}},this);var d=new Ext.SplitButton({text:this.translation._("Add"),tooltip:this.translation._("Add new note"),iconCls:"action_saveAndClose",menu:{items:b},handler:this.handlers.addNote,typeId:a.data.id});this.formFields={layout:"form",items:[c],bbar:["->",d]}},initComponent:function(){this.translation=new Locale.Gettext();this.translation.textdomain("Tinebase");this.title=this.translation._("Notes");this.notes=[];this.recordNotesStore=new Ext.data.JsonStore({id:"id",fields:Tine.Tinebase.Model.Note,data:this.notes,sortInfo:{field:"creation_time",direction:"DESC"}});Ext.StoreMgr.add("NotesStore",this.recordNotesStore);this.initActivitiesDataView();if(this.showAddNoteForm){this.initNoteForm();this.items=[this.formFields,new Tine.widgets.activities.NotesFormField({recordNotesStore:this.recordNotesStore}),this.activities]}else{this.items=[new Tine.widgets.activities.NotesFormField({recordNotesStore:this.recordNotesStore}),this.activities]}Tine.widgets.activities.ActivitiesPanel.superclass.initComponent.call(this)}});Tine.widgets.activities.ActivitiesAddButton=Ext.extend(Ext.SplitButton,{iconCls:"notes_noteIcon",handlers:{addNote:function(b,a){Ext.Msg.prompt(this.translation._("Add Note"),this.translation._("Enter new note:"),function(c,d){if(c=="ok"){this.handlers.onNoteAdd(d,b.typeId)}},this,40)},onNoteAdd:function(b,c){if(b&&c){notesStore=Ext.StoreMgr.lookup("NotesStore");var a=new Tine.Tinebase.Model.Note({note_type_id:c,note:b});notesStore.insert(0,a)}}},initComponent:function(){this.translation=new Locale.Gettext();this.translation.textdomain("Tinebase");var b=[];var c=Tine.widgets.activities.getTypesStore();var a=c.getAt(c.find("is_user_type","1"));c.each(function(d){if(d.data.is_user_type==1){var f=new Ext.Action({requiredGrant:"editGrant",text:String.format(this.translation._("Add a {0} Note"),d.data.name),tooltip:this.translation._(d.data.description),handler:this.handlers.addNote,iconCls:d.data.icon_class,typeId:d.data.id,scope:this});b.push(f)}},this);this.requiredGrant="editGrant";this.text=this.translation._("Add Note");this.tooltip=this.translation._("Add new note");this.menu={items:b};this.handler=this.handlers.addNote;this.typeId=a.data.id;Tine.widgets.activities.ActivitiesAddButton.superclass.initComponent.call(this)}});Ext.reg("widget-activitiesaddbutton",Tine.widgets.activities.ActivitiesAddButton);Tine.widgets.activities.ActivitiesTabPanel=Ext.extend(Ext.Panel,{app:"",store:null,translation:null,paging:{start:0,limit:20,sort:"creation_time",dir:"DESC"},record_id:null,record_model:null,title:null,layout:"fit",getActivitiesGrid:function(){var c=new Ext.grid.ColumnModel([{resizable:true,id:"note_type_id",header:this.translation._("Type"),dataIndex:"note_type_id",width:15,renderer:Tine.widgets.activities.getTypeIcon},{resizable:true,id:"note",header:this.translation._("Note"),dataIndex:"note"},{resizable:true,id:"created_by",header:this.translation._("Created By"),dataIndex:"created_by",width:70},{resizable:true,id:"creation_time",header:this.translation._("Timestamp"),dataIndex:"creation_time",width:50,renderer:Tine.Tinebase.common.dateTimeRenderer}]);c.defaultSortable=true;var b=new Ext.grid.RowSelectionModel({multiSelect:true});var d=new Ext.PagingToolbar({pageSize:20,store:this.store,displayInfo:true,displayMsg:this.translation._("Displaying history records {0} - {1} of {2}"),emptyMsg:this.translation._("No history to display")});var a=new Ext.grid.GridPanel({id:"Activities_Grid",store:this.store,cm:c,tbar:d,selModel:b,border:false,view:new Ext.grid.GridView({autoFill:true,forceFit:true,ignoreAdd:true,autoScroll:true})});return a},initStore:function(){this.store=new Ext.data.JsonStore({id:"id",autoLoad:false,root:"results",totalProperty:"totalcount",fields:Tine.Tinebase.Model.Note,remoteSort:true,baseParams:{method:"Tinebase.searchNotes"},sortInfo:{field:this.paging.sort,direction:this.paging.dir}});Ext.StoreMgr.add("NotesGridStore",this.store);this.store.on("beforeload",function(b,c){if(!c.params){c.params={}}c.params.sort=b.getSortState()?b.getSortState().field:this.paging.sort;c.params.dir=b.getSortState()?b.getSortState().direction:this.paging.dir;c.params.start=c.params.start?c.params.start:this.paging.start;c.params.limit=c.params.limit?c.params.limit:this.paging.limit;c.params.paging=Ext.util.JSON.encode(c.params);var a=Ext.getCmp("activitiesFilterToolbar");var d=a?a.getValue():[];d.push({field:"record_model",operator:"equals",value:this.record_model},{field:"record_id",operator:"equals",value:(this.record_id)?this.record_id:0},{field:"record_backend",operator:"equals",value:"Sql"});c.params.filter=Ext.util.JSON.encode(d)},this);this.store.on("load",function(b,a){notesStore=Ext.StoreMgr.lookup("NotesStore");notesStore.each(function(c){if(!c.data.creation_time){b.insert(0,c)}})},this)},initComponent:function(){this.translation=new Locale.Gettext();this.translation.textdomain("Tinebase");this.title=this.translation._("History");this.initStore();this.activitiesGrid=this.getActivitiesGrid();var a=new Tine.widgets.grid.FilterToolbar({id:"activitiesFilterToolbar",filterModels:[{label:_("Quick search"),field:"query",operators:["contains"]},{label:this.translation._("Time"),field:"creation_time",valueType:"date",pastOnly:true}],defaultFilter:"query",filters:[]});a.on("change",function(){this.store.load({})},this);this.items=[new Ext.Panel({layout:"border",items:[{region:"center",xtype:"panel",layout:"fit",border:false,items:this.activitiesGrid},{region:"north",border:false,items:a,listeners:{scope:this,afterlayout:function(b){b.setHeight(a.getHeight());b.ownerCt.layout.layout()}}}]})];this.on("activate",function(b){b.store.load({})});Tine.widgets.activities.ActivitiesTabPanel.superclass.initComponent.call(this)}});Tine.widgets.activities.NotesFormField=Ext.extend(Ext.form.Field,{recordNotesStore:null,name:"notes",hidden:true,hideLabel:true,initComponent:function(){Tine.widgets.activities.NotesFormField.superclass.initComponent.call(this);this.hide()},getValue:function(){var a=[];this.recordNotesStore.each(function(b){a.push(b.data)});return a},setValue:function(a){this.recordNotesStore.loadData(a)}});Tine.widgets.activities.getTypesStore=function(){var a=Ext.StoreMgr.get("noteTypesStore");if(!a){a=new Ext.data.JsonStore({fields:Tine.Tinebase.Model.NoteType,baseParams:{method:"Tinebase.getNoteTypes"},root:"results",totalProperty:"totalcount",id:"id",remoteSort:false});if(Tine.Tinebase.registry.get("NoteTypes")){a.loadData(Tine.Tinebase.registry.get("NoteTypes"))}Ext.StoreMgr.add("noteTypesStore",a)}return a};Tine.widgets.activities.getTypeIcon=function(c){var b=Tine.widgets.activities.getTypesStore();var a=b.getById(c);if(a){return'<img src="'+a.data.icon+'" ext:qtip="'+a.data.description+'"/>'}else{return""}};Ext.ns("Tine.Tinebase.widgets.form");Tine.Tinebase.widgets.form.RecordPickerComboBox=Ext.extend(Ext.form.ComboBox,{blurOnSelect:false,recordClass:null,selectedRecord:null,triggerAction:"all",pageSize:10,minChars:3,forceSelection:true,initComponent:function(){this.displayField=this.recordClass.getMeta("titleProperty");this.valueField=this.recordClass.getMeta("idProperty");this.loadingText=_("Searching...");this.store=new Tine.Tinebase.data.RecordStore(Ext.copyTo({readOnly:true},this,"totalProperty,root,recordClass"));this.on("beforequery",this.onBeforeQuery,this);this.supr().initComponent.call(this)},onBeforeLoad:function(a,b){b.params.paging={start:b.params.start,limit:b.params.limit}},onBeforeQuery:function(a){this.store.baseParams.filter=[{field:"query",operator:"contains",value:a.query}]},onSelect:function(a,b){this.selectedRecord=a;return this.supr().onSelect.call(this,a,b)},onSpecialkey:function(c,b){if(b.getKey()==b.ENTER){var d=c.getValue();var a=this.store.getById(d);this.onSelect(a)}}});Ext.namespace("Tine.Tinebase.widgets.form");Tine.Tinebase.widgets.form.ConfigPanel=Ext.extend(Ext.FormPanel,{saveMethod:"",registryKey:"",actionToolbarItems:[],border:false,bodyStyle:"padding:5px 5px 0",labelAlign:"left",labelSeparator:":",labelWidth:150,autoScroll:true,app:null,onSaveConfig:function(){if(this.isValid()){var a=this.form2config();this.loadMask.show();Ext.Ajax.request({scope:this,params:{method:this.saveMethod,data:Ext.util.JSON.encode(a)},success:function(b){var c=Ext.util.JSON.decode(b.responseText);for(key in c){if(key!="status"){Tine.Setup.registry.replace(key,c[key])}}this.loadMask.hide()}})}else{Ext.Msg.alert(this.app.i18n._("Invalid configuration"),this.app.i18n._("You need to correct the red marked fields before config could be saved"))}},initComponent:function(){this.initActions();this.items=this.getFormItems();Tine.Tinebase.widgets.form.ConfigPanel.superclass.initComponent.call(this)},onRender:function(b,a){Tine.Tinebase.widgets.form.ConfigPanel.superclass.onRender.call(this,b,a);var c=this.config2form.defer(250,this,[Tine.Setup.registry.get(this.registryKey)]);Tine.Setup.registry.on("replace",this.applyRegistryState,this);this.loadMask=new Ext.LoadMask(b,{msg:this.app.i18n._("Transfering Configuration...")})},applyRegistryState:function(){},getFormItems:function(){return[]},form2config:function(){var d={};this.getForm().items.each(function(h){d[h.name]=h.getValue()});var a={};var g,c,f,b;for(key in d){g=key.split("_");b=a;while(c=g.shift()){if(g.length==0){b[c]=d[key]}else{if(!b[c]){b[c]={};f=Ext.getCmp("setup-"+c+"-group");if(f&&f.checkboxToggle){b[c].active=!f.collapsed}}b=b[c]}}}return a},config2form:function(b){var c=arguments[1]?arguments[1]:{};var a=arguments[2]?arguments[2]:"";var d;for(key in b){if(typeof b[key]=="object"){this.config2form(b[key],c,a?a+"_"+key:key)}else{c[a+"_"+key]=b[key];d=Ext.getCmp("setup-"+a+"-group");if(d&&key=="active"&&b.active){d.expand()}}}if(!a){this.getForm().setValues(c);this.applyRegistryState()}},initActions:function(){this.action_saveConfig=new Ext.Action({text:this.app.i18n._("Save config"),iconCls:"setup_action_save_config",scope:this,handler:this.onSaveConfig,disabled:true});this.actions=[this.action_saveConfig];this.actionToolbar=new Ext.Toolbar({items:this.actions.concat(this.actionToolbarItems)})},isValid:function(){var a=this.getForm();return a.isValid()}});Ext.ns("Tine.Tinebase","Tine.Tinebase.data");Tine.Tinebase.data.Record=function(a,b){if(b||b===0){this.id=b}else{if(a[this.idProperty]){this.id=a[this.idProperty]}else{this.id=++Ext.data.Record.AUTO_ID}}this.data=a};Ext.extend(Tine.Tinebase.data.Record,Ext.data.Record,{appName:null,modelName:null,idProperty:"id",titleProperty:null,recordName:"record",recordsName:"records",containerProperty:"container_id",containerName:"container",containersName:"containers",getTitle:function(){return this.titleProperty?this.get(this.titleProperty):""},toString:function(){return Ext.encode(this.data)}});Tine.Tinebase.data.Record.create=function(h,g){var c=Ext.extend(Tine.Tinebase.data.Record,{});var d=c.prototype;Ext.apply(d,g);d.fields=new Ext.util.MixedCollection(false,function(f){return f.name});for(var b=0,a=h.length;b<a;b++){d.fields.add(new Ext.data.Field(h[b]))}c.getField=function(f){return d.fields.get(f)};c.getMeta=function(f){return d[f]};c.getDefaultData=function(){return{}};c.getFieldDefinitions=function(){return d.fields.items};return c};Tine.Tinebase.data.RecordStore=function(a){a.batchTransactions=false;a.appName=a.recordClass.getMeta("appName");a.modelName=a.recordClass.getMeta("modelName");if(typeof(a.reader)=="undefined"){a.reader=new Ext.data.JsonReader({root:a.root||"results",totalProperty:a.totalProperty||"totalcount",id:a.recordClass.getMeta("idProperty")},a.recordClass)}if(typeof(a.writer)=="undefined"&&!a.readOnly){a.writer=new Ext.data.JsonWriter({})}if(typeof(a.proxy)=="undefined"){a.proxy=new Tine.Tinebase.data.RecordProxy({recordClass:a.recordClass})}Tine.Tinebase.data.RecordStore.superclass.constructor.call(this,a)};Ext.extend(Tine.Tinebase.data.RecordStore,Ext.data.Store,{});Ext.reg("tinerecordstore",Tine.Tinebase.data.RecordStore);Ext.namespace("Tine.Tinebase.data");Tine.Tinebase.data.RecordProxy=function(a){a.api={read:true,create:true,update:true,destroy:true};Tine.Tinebase.data.RecordProxy.superclass.constructor.call(this,a);Ext.apply(this,a);this.appName=this.appName?this.appName:a.recordClass.getMeta("appName");this.modelName=this.modelName?this.modelName:a.recordClass.getMeta("modelName");this.idProperty=this.idProperty?this.idProperty:a.recordClass.getMeta("idProperty");this.jsonReader=new Ext.data.JsonReader({id:this.idProperty,root:"results",totalProperty:"totalcount"},this.recordClass)};Ext.extend(Tine.Tinebase.data.RecordProxy,Ext.data.DataProxy,{recordClass:null,appName:null,idProperty:null,modelName:null,loadRecord:function(a,b){b=b||{};b.params=b.params||{};b.beforeSuccess=function(d){return[this.recordReader(d)]};var c=b.params;c.method=this.appName+".get"+this.modelName;c.id=a.get(this.idProperty);return this.doXHTTPRequest(b)},searchRecords:function(c,a,b){b=b||{};b.params=b.params||{};var d=b.params;d.method=this.appName+".search"+this.modelName+"s";d.filter=Ext.util.JSON.encode(c);d.paging=Ext.util.JSON.encode(a);b.beforeSuccess=function(f){return[this.jsonReader.read(f)]};b.timeout=60000;return this.doXHTTPRequest(b)},saveRecord:function(a,c,b){c=c||{};c.params=c.params||{};c.beforeSuccess=function(f){return[this.recordReader(f)]};var d=c.params;d.method=this.appName+".save"+this.modelName;d.recordData=Ext.util.JSON.encode(a.data);if(b){Ext.apply(d,b)}c.timeout=300000;return this.doXHTTPRequest(c)},deleteRecords:function(a,b){b=b||{};b.params=b.params||{};b.params.method=this.appName+".delete"+this.modelName+"s";b.params.ids=Ext.util.JSON.encode(this.getRecordIds(a));return this.doXHTTPRequest(b)},deleteRecordsByFilter:function(b,a){a=a||{};a.params=a.params||{};a.params.method=this.appName+".delete"+this.modelName+"sByFilter";a.params.filter=Ext.util.JSON.encode(b);a.timeout=300000;return this.doXHTTPRequest(a)},updateRecords:function(b,c,a){a=a||{};a.params=a.params||{};a.params.method=this.appName+".updateMultiple"+this.modelName+"s";a.params.filter=Ext.util.JSON.encode(b);a.params.values=Ext.util.JSON.encode(c);a.beforeSuccess=function(d){return[Ext.util.JSON.decode(d.responseText)]};return this.doXHTTPRequest(a)},getRecordIds:function(a){var c=[];if(!Ext.isArray(a)){a=[a]}for(var b=0;b<a.length;b++){c.push(a[b].id?a[b].id:a.id)}return c},load:function(f,b,g,d,a){if(this.fireEvent("beforeload",this,f)!==false){var c={sort:f.sort,dir:f.dir,start:f.start,limit:f.limit};this.searchRecords(f.filter,c,{scope:this,success:function(h){g.call(d||this,h,a,true)}})}else{g.call(d||this,null,a,false)}},doRequest:function(g,b,h,a,i,d,c){var f={params:h,callback:i,scope:d};switch(g){case Ext.data.Api.actions.create:this.saveRecord(b,f);break;case Ext.data.Api.actions.read:this.load(h,a,i,d,c);break;case Ext.data.Api.actions.update:this.saveRecord(b,f);break;case Ext.data.Api.actions.destroy:this.deleteRecords(b,f);break}},getReader:function(){return this.jsonReader},recordReader:function(c){var b=Ext.util.JSON.decode("{results: ["+c.responseText+"]}");var f=this.jsonReader.readRecords(b);var a=f.records[0];var d=a.get(a.idProperty);a.id=d?d:0;return a},isLoading:function(a){return Ext.Ajax.isLoading(a)},doXHTTPRequest:function(b){var a={scope:this,params:b.params,success:function(c){if(typeof b.success=="function"){var d=[];if(typeof b.beforeSuccess=="function"){d=b.beforeSuccess.call(this,c)}b.success.apply(b.scope,d)}},failure:function(d,c){if(typeof b.failure=="function"){var f=[];if(typeof b.beforeFailure=="function"){f=b.beforeFailure.call(this,d)}else{var h=Ext.decode(d.responseText);f=[h.data?h.data:h]}b.failure.apply(b.scope,f)}else{var h=Ext.decode(d.responseText);var g=h.data?h.data:h;g.request=c.jsonData;g.response=d.responseText;Tine.Tinebase.ExceptionHandler.handleRequestException(g)}}};if(b.timeout){a.timeout=b.timeout}return Ext.Ajax.request(a)}});Ext.namespace("Tine.Tinebase.data");Tine.Tinebase.data.AbstractBackend=function(a){Tine.Tinebase.data.AbstractBackend.superclass.constructor.call(this);Ext.apply(this,a)};Ext.extend(Tine.Tinebase.data.AbstractBackend,Ext.data.DataProxy,{appName:null,modelName:null,recordClass:null,idProperty:"id",loadRecord:function(a,b){b.success.defer(1000,b.scope,a)},searchRecords:function(c,a,b){b.success.defer(1000,b.scope,[{records:[],success:1,totalRecords:0}])},saveRecord:function(a,b){a.commit(true);b.success.defer(1000,b.scope,[a])},deleteRecords:function(a,b){b.success.defer(1000,b.scope)},updateRecords:function(b,c,a){a.success.defer(1000,a.scope,[])},getRecordIds:function(a){var c=[];if(!Ext.isArray(a)){a=[a]}for(var b=0;b<a.length;b++){c.push(a[b].id?a[b].id:a.id)}return c},load:function(f,b,g,d,a){if(this.fireEvent("beforeload",this,f)!==false){var c={sort:f.sort,dir:f.dir,start:f.start,limit:f.limit};this.searchRecords(f.filter,c,{scope:this,success:function(h){g.call(d||this,h,a,true)}})}else{g.call(d||this,null,a,false)}},getReader:function(){},isLoading:function(a){}});Ext.namespace("Tine.Tinebase");Tine.Tinebase.StateProvider=function(a){Tine.Tinebase.StateProvider.superclass.constructor.call(this);Ext.apply(this,a);this.state=this.readRegistry()};Ext.extend(Tine.Tinebase.StateProvider,Ext.state.Provider,{clear:function(b){Tine.Tinebase.clearState(b);var a=Tine.Tinebase.registry.get("stateInfo");delete a[b];Tine.Tinebase.StateProvider.superclass.clear.call(this,b)},readRegistry:function(){var b={};var a=Tine.Tinebase.registry.get("stateInfo");for(var c in a){b[c]=this.decodeValue(a[c])}return b},set:function(c,d){if(typeof d=="undefined"||d===null){this.clear(c);return}var b=this.encodeValue(d);Tine.Tinebase.setState(c,b);var a=Tine.Tinebase.registry.get("stateInfo");a[c]=b;Tine.Tinebase.StateProvider.superclass.set.call(this,c,d)}});Ext.namespace("Tine","Tine.Tinebase");Tine.Tinebase.ExceptionHandler=function(){var c=function(){var f=a.apply(this,arguments);var d="<table>";for(p in f){if(f.hasOwnProperty(p)){d+="<tr><td><b>"+p+"</b></td><td>"+f[p]+"</td></tr>"}}d+="</table>";if(d.match(/versioncheck/)){return true}if(d.match(/chrome/)){return true}if(d.match(/swf\.setDataProvider/)){return true}var g={message:"js exception: "+f.message,code:f.number,traceHTML:d};var h=400;if(Ext.getBody().getHeight(true)*0.7<h){h=Ext.getBody().getHeight(true)*0.7}if(!Tine.Tinebase.exceptionDlg){Tine.Tinebase.exceptionDlg=new Tine.Tinebase.ExceptionDialog({height:h,exception:g,listeners:{close:function(){Tine.Tinebase.exceptionDlg=null}}});Tine.Tinebase.exceptionDlg.show(Tine.Tinebase.exceptionDlg)}return true};var a=function(){var g={name:"unknown error",message:"unknown",number:"unknown",description:"unknown",url:"unknown",line:"unknown"};var f=[];for(var h=0;h<arguments.length;h++){f[h]=arguments[h]}if(f[0] instanceof Error){g.name=f[0].name;g.message=f[0].message;g.number=f[0].number&65535;g.description=f[0].description}else{if((f.length==3)&&(typeof(f[2])=="number")){g.name="catchable exception";g.message=f[0];g.url=f[1];g.line=f[2]}else{g.message="An unknown JS error has occured.";g.description="The following information may be useful:\n";for(var d=0;d<f.length;d++){g.description+=(Ext.encode(f[d])+"\n")}}}return g};var b=function(d){switch(d.code){case 510:alert(_("Connection lost, please check your network!"));break;case 401:Ext.MessageBox.show({title:_("Authorisation Required"),msg:_("Your session timed out. You need to login again."),buttons:Ext.Msg.OK,icon:Ext.MessageBox.WARNING,fn:function(){var g=(Tine.Tinebase.registry.get("redirectUrl"));if(g&&g!=""){window.location=Tine.Tinebase.registry.get("redirectUrl")}else{window.location=window.location.href.replace(/#+.*/,"")}}});break;case 403:Ext.MessageBox.show({title:_("Insufficient Rights"),msg:_("Sorry, you are not permitted to perform this action"),buttons:Ext.Msg.OK,icon:Ext.MessageBox.ERROR});break;case 404:Ext.MessageBox.show({title:_("Not Found"),msg:_("Sorry, your request could not be completed because the required data could not be found. In most cases this means that someone already deleted the data. Please refresh your current view."),buttons:Ext.Msg.OK,icon:Ext.MessageBox.ERROR});break;case 409:Ext.MessageBox.show({title:_("Concurrent Updates"),msg:_("Someone else saved this record while you where editing the data. You need to reload and make your changes again."),buttons:Ext.Msg.OK,icon:Ext.MessageBox.WARNING});break;case 520:Ext.MessageBox.show({title:_("Timeout"),msg:_("Sorry, some timeout occured while processing your request. Please reload your browser, try again or contact your administrator."),buttons:Ext.Msg.OK,icon:Ext.MessageBox.WARNING});break;default:var f=400;if(Ext.getBody().getHeight(true)*0.7<f){f=Ext.getBody().getHeight(true)*0.7}if(!Tine.Tinebase.exceptionDlg){Tine.Tinebase.exceptionDlg=new Tine.Tinebase.ExceptionDialog({height:f,exception:d,listeners:{close:function(){Tine.Tinebase.exceptionDlg=null}}});Tine.Tinebase.exceptionDlg.show()}break}};window.onerror=!window.onerror?c:window.onerror.createSequence(c);return{handleRequestException:b}}();Ext.namespace("Tine","Tine.Tinebase");Tine.Tinebase.ExceptionDialog=Ext.extend(Ext.Window,{width:400,height:600,xtype:"panel",layout:"fit",plain:true,closeAction:"close",autoScroll:true,releaseMode:true,initComponent:function(){this.currentAccount=Tine.Tinebase.registry.get("currentAccount");if(!Tine.Tinebase.registry.get("version")||Tine.Tinebase.registry.get("version").buildType!="RELEASE"){this.releaseMode=false;this.width=800}var c="";if(Ext.isArray(this.exception.trace)){for(var b=0,a=this.exception.trace.length;b<a;b++){c+=(this.exception.trace[b].file?this.exception.trace[b].file:"[internal function]")+(this.exception.trace[b].line?"("+this.exception.trace[b].line+")":"")+": "+(this.exception.trace[b]["class"]?"<b>"+this.exception.trace[b]["class"]+this.exception.trace[b].type+"</b>":"")+"<b>"+this.exception.trace[b]["function"]+"</b>("+((this.exception.trace[b].args&&this.exception.trace[b].args[0])?this.exception.trace[b].args[0]:"")+")<br/>"}this.exception.traceHTML=c}this.title=_("Abnormal End");this.items=new Ext.FormPanel({id:"tb-exceptiondialog-frompanel",bodyStyle:"padding:5px;",buttonAlign:"right",labelAlign:"top",autoScroll:true,buttons:[{text:_("Cancel"),iconCls:"action_cancel",scope:this,enabled:Tine.Tinebase.common.hasRight("report_bugs","Tinebase"),handler:function(){this.close()}},{text:_("Send Report"),iconCls:"action_saveAndClose",scope:this,handler:this.onSendReport}],items:[{xtype:"panel",border:false,html:'<div class="tb-exceptiondialog-text"><p>'+_("An error occurred, the program ended abnormal.")+"</p><p>"+_("The last action you made was potentially not performed correctly.")+"</p><p>"+_("Please help improving this software and notify the vendor. Include a brief description of what you where doing when the error occurred.")+"</p></div>"},{id:"tb-exceptiondialog-description",height:60,xtype:"textarea",fieldLabel:_("Description"),name:"description",anchor:"95%",readOnly:false},{xtype:"fieldset",id:"tb-exceptiondialog-send-contact",anchor:"95%",title:_("Send Contact Information"),autoHeight:true,checkboxToggle:true,items:[{id:"tb-exceptiondialog-contact",xtype:"textfield",hideLabel:true,anchor:"100%",name:"contact",value:this.currentAccount.accountFullName+" "+this.currentAccount.accountEmailAddress}]},{xtype:"panel",width:"95%",layout:"form",collapsible:true,collapsed:this.releaseMode,title:_("Details:"),defaults:{xtype:"textfield",readOnly:true,anchor:"95%"},html:'<div class="tb-exceptiondialog-details"><p class="tb-exceptiondialog-msg">'+this.exception.message+'</p><p class="tb-exceptiondialog-trace">'+this.exception.traceHTML+"</p></div>"}]});Tine.Tinebase.ExceptionDialog.superclass.initComponent.call(this)},onSendReport:function(){Ext.MessageBox.wait(_("Sending report..."),_("Please wait a moment"));var f="http://www.tine20.org/bugreport.php";var h=this.generateHash();this.exception.msg=this.exception.message;this.exception.description=Ext.getCmp("tb-exceptiondialog-description").getValue();this.exception.clientVersion=Tine.clientVersion;this.exception.serverVersion=(Tine.Tinebase.registry.get("version"))?Tine.Tinebase.registry.get("version"):{};Ext.each(Tine.Tinebase.registry.get("userApplications"),function(i){if(i.name=="Tinebase"){this.exception.tinebaseVersion=i;return false}},this);if(!Ext.getCmp("tb-exceptiondialog-send-contact").collapsed){this.exception.contact=Ext.getCmp("tb-exceptiondialog-contact").getValue()}var j=this.strChunk(Ext.util.JSON.encode(this.exception),600);var a=[];for(var d=0;d<j.length;d++){var c=d+1+"/"+j.length;var g={data:this.base64encode("hash="+h+"&part="+c+"&data="+j[d])};var b=f+"?"+Ext.urlEncode(g);a.push(Ext.DomHelper.insertFirst(this.el,{tag:"img",src:b,hidden:true},true))}window.setTimeout(this.showTransmissionCompleted,4000);this.close()},showTransmissionCompleted:function(){Ext.MessageBox.show({title:_("Transmission Completed"),msg:_("Your report has been sent. Thanks for your contribution")+"<br /><b>"+_("Please restart your browser now!")+"</b>",buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.INFO})},strChunk:function(c,b){var f=[];var d=Math.ceil(c.length/b);for(var a=0;a<c.length;a+=b){f.push(c.substr(a,b))}return f},generateHash:function(){var b=String(new Date().getTime()).substr(4);var c="ABCDEFGHIJKLMNOPQRSTUVWXYZ";for(var a=0;a<4;a++){b+=c.charAt(Math.floor(Math.random()*26))}return b},base64encode:function(d){var b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var a="";var m,k,h,l,j,g,f;var c=0;while(c<d.length){m=d.charCodeAt(c++);k=d.charCodeAt(c++);h=d.charCodeAt(c++);l=m>>2;j=((m&3)<<4)|(k>>4);g=((k&15)<<2)|(h>>6);f=h&63;if(isNaN(k)){g=f=64}else{if(isNaN(h)){f=64}}a=a+b.charAt(l)+b.charAt(j)+b.charAt(g)+b.charAt(f)}return a}});Ext.namespace("Tine.Tinebase.container");Tine.Tinebase.container={GRANT_NONE:0,GRANT_READ:1,GRANT_ADD:2,GRANT_EDIT:4,GRANT_DELETE:8,GRANT_ADMIN:16,GRANT_ANY:31,TYPE_INTERNAL:"internal",TYPE_PERSONAL:"personal",TYPE_SHARED:"shared"};Ext.namespace("Tine","Tine.Tinebase","Tine.Tinebase.Model");Tine.Tinebase.Model.genericFields=[{name:"container_id",header:"Container"},{name:"creation_time",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"created_by",type:"int"},{name:"last_modified_time",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"last_modified_by",type:"int"},{name:"is_deleted",type:"boolean"},{name:"deleted_time",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"deleted_by",type:"int"}];Tine.Tinebase.Model.User=Ext.data.Record.create([{name:"accountId"},{name:"accountDisplayName"},{name:"accountLastName"},{name:"accountFirstName"},{name:"accountFullName"},{name:"contact_id"}]);Tine.Tinebase.Model.Language=Ext.data.Record.create([{name:"locale"},{name:"language"},{name:"region"}]);Tine.Tinebase.Model.Timezone=Ext.data.Record.create([{name:"timezone"},{name:"timezoneTranslation"}]);Tine.Tinebase.Model.Group=Tine.Tinebase.data.Record.create([{name:"id"},{name:"name"},{name:"description"}],{appName:"Tinebase",modelName:"Group",idProperty:"id",titleProperty:"name",recordName:"Group",recordsName:"Groups",containerProperty:null});Tine.Tinebase.Model.Role=Ext.data.Record.create([{name:"id"},{name:"name"},{name:"description"}]);Tine.Tinebase.Model.Account=Ext.data.Record.create([{name:"id"},{name:"type"},{name:"name"},{name:"data"}]);Tine.Tinebase.Model.Container=Ext.data.Record.create([{name:"id"},{name:"name"},{name:"type"},{name:"backend"},{name:"application_id"},{name:"account_grants"}]);Tine.Tinebase.Model.Grant=Ext.data.Record.create([{name:"id"},{name:"account_id"},{name:"account_type"},{name:"account_name"},{name:"readGrant",type:"boolean"},{name:"addGrant",type:"boolean"},{name:"editGrant",type:"boolean"},{name:"deleteGrant",type:"boolean"},{name:"adminGrant",type:"boolean"}]);Tine.Tinebase.Model.Tag=Ext.data.Record.create([{name:"id"},{name:"app"},{name:"owner"},{name:"name"},{name:"type"},{name:"description"},{name:"color"},{name:"occurrence"},{name:"rights"},{name:"contexts"}]);Tine.Tinebase.PickerRecord=Ext.data.Record.create([{name:"id"},{name:"name"},{name:"data"}]);Tine.Tinebase.Model.Note=Ext.data.Record.create([{name:"id"},{name:"note_type_id"},{name:"note"},{name:"creation_time",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"created_by"}]);Tine.Tinebase.Model.NoteType=Ext.data.Record.create([{name:"id"},{name:"name"},{name:"icon"},{name:"icon_class"},{name:"description"},{name:"is_user_type"}]);Tine.Tinebase.Model.Customfield=Ext.data.Record.create([{name:"application_id"},{name:"id"},{name:"model"},{name:"name"},{name:"label"},{name:"type"},{name:"length"},{name:"group"},{name:"order"}]);Tine.Tinebase.Model.Preference=Ext.data.Record.create([{name:"id"},{name:"name"},{name:"value"},{name:"type"},{name:"label"},{name:"description"},{name:"options"}]);Tine.Tinebase.Model.Alarm=Ext.data.Record.create([{name:"id"},{name:"record_id"},{name:"model"},{name:"alarm_time"},{name:"minutes_before"},{name:"sent_time"},{name:"sent_status"},{name:"sent_message"},{name:"options"}]);Tine.Tinebase.Model.Credentials=Tine.Tinebase.data.Record.create([{name:"id"},{name:"username"},{name:"password"}],{appName:"Tinebase",modelName:"Credentials",idProperty:"id",titleProperty:"username",recordName:"Credentials",recordsName:"Credentials",containerProperty:null});Tine.Tinebase.Model.Relation=Tine.Tinebase.data.Record.create([{name:"id"},{name:"own_model"},{name:"own_id"},{name:"related_model"},{name:"related_id"},{name:"type"},{name:"remark"},{name:"related_record"}],{appName:"Tinebase",modelName:"Relation",idProperty:"id",titleProperty:"related_model",recordName:"Relation",recordsName:"Relations",containerProperty:null});Ext.ns("Tine.Tinebase");Tine.Tinebase.Application=function(a){a=a||{};Ext.apply(this,a);Tine.Tinebase.Application.superclass.constructor.call(this);this.i18n=new Locale.Gettext();this.i18n.textdomain(this.appName)};Ext.extend(Tine.Tinebase.Application,Ext.util.Observable,{appName:null,i18n:null,getTitle:function(){return this.i18n._(this.appName)},getIconCls:function(){return this.appName+"IconCls"},getMainScreen:function(){if(!this.mainScreen){this.mainScreen=new Tine[this.appName].MainScreen({app:this})}return this.mainScreen}});Ext.ns("Tine.Tinebase");Tine.Tinebase.AppManager=function(){this.apps=new Ext.util.MixedCollection({});var a=Tine.Tinebase.registry.get("userApplications");var c;for(var b=0;b<a.length;b++){c=a[b];if(Tine[c.name]&&!c.name.match(/(Tinebase|ActiveSync)/)){c.appName=c.name;c.isInitialised=false;this.apps.add(c.appName,c)}}};Ext.apply(Tine.Tinebase.AppManager.prototype,{get:function(a){if(!this.isEnabled(a)){return false}var c=this.apps.get(a);if(!c.isInitialised){var b=this.getAppObj(c);b.isInitialised=true;Ext.applyIf(b,c);this.apps.replace(a,b)}return this.apps.get(a)},getAll:function(){this.initAll();return this.apps},isEnabled:function(a){var b=this.apps.get(a);return b?b.status=="enabled":false},initAll:function(){this.apps.each(function(a){this.get(a.appName)},this)},getAppObj:function(b){try{if(typeof(Tine[b.appName].getPanel)=="function"){return this.getLegacyApp(b)}return typeof(Tine[b.appName].Application)=="function"?new Tine[b.appName].Application(b):new Tine.Tinebase.Application(b)}catch(a){console.error('Initialising of Application "'+b.appName+'" failed with the following message:'+a);console.warn(a);return false}},getLegacyApp:function(d){var a=Tine[d.appName].getPanel();var b=new Tine.Tinebase.Application(d);var c=new Tine.Tinebase.widgets.app.MainScreen(b);Ext.apply(c,{appPanel:a,show:function(){Tine.Tinebase.MainScreen.setActiveTreePanel(a,true);a.fireEvent("beforeexpand",a)}});Ext.apply(b,{mainScreen:c});a.on("render",function(f){f.header.remove();f.header=false;f.doLayout()});return b}});Ext.namespace("Tine.Tinebase");Tine.Tinebase.AppPicker=Ext.extend(Ext.Panel,{apps:null,defaultAppName:"",layout:"border",border:false,initComponent:function(){this.appTitle=this.apps.get(this.defaultAppName).getTitle();this.initLayout();Tine.Tinebase.AppPicker.superclass.initComponent.call(this)},initLayout:function(){this.items=[{region:"north",layout:"fit",border:false,height:40,baseCls:"x-panel-header",html:'<div class ="app-panel-title">'+this.getAppTitle()+"</div>"},{region:"center",layout:"card",border:false},new Tine.Tinebase.AppPile({split:true,width:200,collapsible:true,collapseMode:"mini",region:"south",apps:this.apps,defaultAppName:this.defaultAppName,scope:this,handler:function(a){this.setAppTitle(a.getTitle());a.getMainScreen().show()}})]},setAppTitle:function(a){this.appTitle=a;var b=(Tine.Tinebase.registry.get("titlePostfix"))?Tine.Tinebase.registry.get("titlePostfix"):"";document.title=Tine.title+b+" - "+a;this.items.get(0).body.dom.innerHTML='<div class ="app-panel-title">'+a+"</div>"},getAppTitle:function(){return this.appTitle},getTreeCardPanel:function(){return this.items.get(1)}});Tine.Tinebase.AppPile=Ext.extend(Ext.Panel,{apps:null,defaultAppName:"",scope:null,handler:null,els:{},border:false,layout:"fit",autoScroll:true,initComponent:function(){Tine.Tinebase.AppPile.superclass.initComponent.call(this);this.tpl=new Ext.XTemplate('<div class="x-panel-header x-panel-header-noborder x-unselectable x-accordion-hd">','<img class="x-panel-inline-icon {iconCls}" src="'+Ext.BLANK_IMAGE_URL+'"/>','<span class="x-panel-header-text app-panel-apptitle-text">{title}</span>',"</div>").compile()},onRender:function(b,a){Tine.Tinebase.AppPile.superclass.onRender.call(this,b,a);this.apps.sort("ASC",function(d,c){return parseInt(d.order,10)<parseInt(c.order,10)?1:-1});this.apps.each(function(c){this.els[c.appName]=this.tpl.insertFirst(this.body,{title:c.getTitle(),iconCls:c.getIconCls()},true);this.els[c.appName].setStyle("cursor","pointer");this.els[c.appName].addClassOnOver("app-panel-header-over");this.els[c.appName].on("click",this.onAppTitleClick,this,c)},this);this.on("resize",function(){var f=Ext.DomQuery.select("div[class^=x-panel-header]",this.el.dom);for(var d=0,c=0;d<f.length;d++){c+=Ext.fly(f[d]).getHeight()}if(arguments[2]&&arguments[2]>c){this.setHeight(c)}});this.setActiveItem(this.els[this.defaultAppName])},onAppTitleClick:function(a,c,b){this.setActiveItem(Ext.get(c));this.handler.call(this.scope||this,b)},setActiveItem:function(b){for(var a in this.els){if(b==this.els[a]||b.parent()==this.els[a]){this.els[a].addClass("app-panel-header-active")}else{this.els[a].removeClass("app-panel-header-active")}}}});Tine.Tinebase.MainMenu=function(a){this.isPrism="platform" in window;Ext.apply(this,a);this.menu=new Ext.Toolbar({id:this.id,height:this.height,items:this.items});return this.menu};Ext.namespace("Tine","Tine.Tinebase");Tine.Tinebase.MainScreen=Ext.extend(Ext.Panel,{defaultAppName:"Addressbook",layout:"border",border:false,initComponent:function(){this.onlineStatus=new Ext.ux.ConnectionStatus({});this.initActions();this.tineMenu=new Tine.Tinebase.MainMenu({id:"tineMenu",height:26,items:[{text:Tine.title,menu:{id:"Tinebase_System_Menu",items:[this.action_aboutTine,"-",this.action_changePassword,this.action_installGoogleGears,"-",{text:_("Debug Console (Ctrl + F11)"),handler:Tine.Tinebase.common.showDebugConsole,hidden:!Tine.Tinebase.registry.get("version").buildType.match(/(DEVELOPMENT|DEBUG)/)},this.action_logout]}},{text:_("Preferences"),id:"Tinebase_System_PreferencesButton",disabled:false,handler:this.onEditPreferences},"->",this.action_logout]});var a=new Ext.Toolbar({id:"tineFooter",height:26,items:[String.format(_("User: {0}"),Tine.Tinebase.registry.get("currentAccount").accountDisplayName),"->",this.onlineStatus]});this.defaultAppName=(Tine.Tinebase.registry.get("preferences")&&Tine.Tinebase.registry.get("preferences").get("defaultapp"))?Tine.Tinebase.registry.get("preferences").get("defaultapp"):this.defaultAppName;var b=Tine.Tinebase.appMgr.getAll();if(!Tine.Tinebase.appMgr.get(this.defaultAppName)){var c=b.first();if(c){this.defaultAppName=c.appName}else{Ext.Msg.alert(_("Sorry"),_("There are no applications enabled for you. Please contact your administrator."))}}this.appPicker=new Tine.Tinebase.AppPicker({apps:b,defaultAppName:this.defaultAppName});var d=[{region:"north",id:"north-panel",split:false,height:52,border:false,layout:"border",items:[{region:"north",height:26,border:false,id:"north-panel-1",items:[this.tineMenu]},{region:"center",layout:"card",activeItem:0,height:26,border:false,id:"north-panel-2",items:[]}]},{region:"south",id:"south",border:false,split:false,height:26,initialSize:26,items:[a]},{region:"center",id:"center-panel",animate:true,useShim:true,border:false,layout:"card"},{region:"west",id:"west",split:true,width:200,minSize:100,maxSize:300,border:false,collapsible:true,collapseMode:"mini",layout:"fit",items:this.appPicker}];this.items=[{region:"north",border:false,cls:"tine-mainscreen-topbox",html:'<div class="tine-mainscreen-topbox-left"></div><div class="tine-mainscreen-topbox-middle"></div><div class="tine-mainscreen-topbox-right"></div>'},{region:"center",border:false,layout:"border",items:d}];Tine.Tinebase.MainScreen.superclass.initComponent.call(this)},initActions:function(){this.action_aboutTine=new Ext.Action({text:String.format(_("About {0}"),Tine.title),handler:this.onAboutTine20,iconCls:"action_about"});this.action_changePassword=new Ext.Action({text:_("Change password"),handler:this.onChangePassword,disabled:(Tine.Tinebase.registry.get("changepw")=="0"),iconCls:"action_password"});this.action_installGoogleGears=new Ext.Action({text:_("Install Google Gears"),handler:this.onInstallGoogleGears,disabled:(window.google&&google.gears)});this.action_logout=new Ext.Action({text:_("Logout"),tooltip:String.format(_("Logout from {0}"),Tine.title),iconCls:"action_logOut",handler:this.onLogout})},onRender:function(b,a){Tine.Tinebase.MainScreen.superclass.onRender.call(this,b,a);Tine.Tinebase.MainScreen=this;this.activateDefaultApp();if(Tine.Tinebase.common.hasRight("check_version","Tinebase")){Tine.widgets.VersionCheck()}},activateDefaultApp:function(){if(this.appPicker.getTreeCardPanel().rendered){var b=Tine.Tinebase.appMgr.get(this.defaultAppName);b.getMainScreen().show();var a=(Tine.Tinebase.registry.get("titlePostfix"))?Tine.Tinebase.registry.get("titlePostfix"):"";document.title=Tine.title+a+" - "+b.getTitle()}else{this.activateDefaultApp.defer(10,this)}},setActiveContentPanel:function(d,b){var a=Ext.getCmp("center-panel");d.keep=b;var c,f;if(a.items){for(c=0;c<a.items.length;c++){f=a.items.get(c);if(!f.keep){a.remove(f)}}}if(d.keep&&d.rendered){a.layout.setActiveItem(d.id)}else{a.add(d);a.layout.setActiveItem(d.id);a.doLayout()}},setActiveTreePanel:function(a,b){var d=this.appPicker.getTreeCardPanel();a.keep=b;var c,f;if(d.items){for(c=0;c<d.items.length;c++){f=d.items.get(c);if(!f.keep){d.remove(f)}}}if(a.keep&&a.rendered){d.layout.setActiveItem(a.id)}else{d.add(a);d.layout.setActiveItem(a.id);d.doLayout()}},getActiveToolbar:function(){var a=Ext.getCmp("north-panel-2");if(a.layout.activeItem&&a.layout.activeItem.el){return a.layout.activeItem.el}else{return false}},setActiveToolbar:function(b,a){var f=Ext.getCmp("north-panel-2");b.keep=a;var d,c;if(f.items){for(d=0;d<f.items.length;d++){c=f.items.get(d);if(!c.keep){f.remove(c)}}}if(b.keep&&b.rendered){f.layout.setActiveItem(b.id)}else{f.add(b);f.layout.setActiveItem(b.id);f.doLayout()}},onAboutTine20:function(){var a=(Tine.Tinebase.registry.get("version"))?Tine.Tinebase.registry.get("version"):{codeName:"unknown",packageString:"unknown"};Ext.Msg.show({title:String.format(_("About {0}"),Tine.title),msg:'<div class="tb-about-dlg"><div class="tb-about-img"><a href="http://www.tine20.org" target="_blank"><img src="'+Tine.Tinebase.LoginPanel.prototype.loginLogo+'" /></a></div><div class="tb-about-version">Version: '+a.codeName+'</div><div class="tb-about-build">( '+a.packageString+' )</div><div class="tb-about-copyright">Copyright: 2007-'+new Date().getFullYear()+'&nbsp;<a href="http://www.metaways.de" target="_blank">Metaways Infosystems GmbH</a></div></div>',width:400,buttons:Ext.Msg.OK,animEl:"elId"})},onChangePassword:function(){var a=new Ext.Window({title:String.format(_('Change Password For "{0}"'),Tine.Tinebase.registry.get("currentAccount").accountDisplayName),id:"changePassword_window",closeAction:"close",modal:true,width:350,height:230,minWidth:350,minHeight:230,layout:"fit",plain:true,items:new Ext.FormPanel({bodyStyle:"padding:5px;",buttonAlign:"right",labelAlign:"top",anchor:"100%",id:"changePasswordPanel",defaults:{xtype:"textfield",inputType:"password",anchor:"100%",allowBlank:false},items:[{id:"oldPassword",fieldLabel:_("Old Password"),name:"oldPassword"},{id:"newPassword",fieldLabel:_("New Password"),name:"newPassword"},{id:"newPasswordSecondTime",fieldLabel:_("Repeat new Password"),name:"newPasswordSecondTime"}],buttons:[{text:_("Cancel"),iconCls:"action_cancel",handler:function(){Ext.getCmp("changePassword_window").close()}},{text:_("Ok"),iconCls:"action_saveAndClose",handler:function(){var c=Ext.getCmp("changePasswordPanel").getForm();var b;if(c.isValid()){b=c.getValues();if(b.newPassword==b.newPasswordSecondTime){Ext.Ajax.request({waitTitle:_("Please Wait!"),waitMsg:_("changing password..."),params:{method:"Tinebase.changePassword",oldPassword:b.oldPassword,newPassword:b.newPassword},success:function(g,f){var d=Ext.util.JSON.decode(g.responseText);if(d.success){Ext.getCmp("changePassword_window").close();Ext.MessageBox.show({title:_("Success"),msg:_("Your password has been changed."),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.INFO})}else{Ext.MessageBox.show({title:_("Failure"),msg:d.errorMessage,buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.ERROR})}}})}else{Ext.MessageBox.show({title:_("Failure"),msg:_("The new passwords mismatch, please correct them."),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.ERROR})}}}}]})});a.show()},onInstallGoogleGears:function(){var a=_("Installing Gears will improve the performance of Tine 2.0 by caching all needed files locally on this computer.");Tine.WindowFactory.getWindow({width:800,height:400,url:"http://gears.google.com/?action=install&message="+a})},onEditPreferences:function(){Tine.widgets.dialog.Preferences.openWindow({})},onLogout:function(){Ext.MessageBox.confirm(_("Confirm"),_("Are you sure you want to logout?"),function(a,b){if(a=="yes"){Ext.MessageBox.wait(_("Logging you out..."),_("Please wait!"));Ext.Ajax.request({params:{method:"Tinebase.logout"},callback:function(d,f,c){var g=(Tine.Tinebase.registry.get("redirectUrl"));if(g&&g!=""){window.location=Tine.Tinebase.registry.get("redirectUrl")}else{window.location=window.location.href.replace(/#+.*/,"")}}})}})}});Ext.namespace("Tine.Tinebase");Tine.Tinebase.LoginPanel=Ext.extend(Ext.Panel,{defaultUsername:"",defaultPassword:"",loginMethod:"Tinebase.login",loginLogo:"images/tine_logo.png",onLogin:Ext.emptyFn,showInfoBox:true,scope:null,layout:"fit",border:false,getLoginPanel:function(){if(!this.loginPanel){this.loginPanel=new Ext.FormPanel({width:460,height:270,frame:true,labelWidth:90,cls:"tb-login-panel",items:[{cls:"tb-login-lobobox",border:false,html:'<a target="_blank" href="http://www.tine20.org/" border="0"><img src="'+this.loginLogo+'" /></a>'},{xtype:"label",cls:"tb-login-big-label",text:_("Login")},new Tine.widgets.LangChooser({width:170,tabindex:1}),{xtype:"textfield",tabindex:2,width:170,fieldLabel:_("Username"),id:"username",name:"username",selectOnFocus:true,value:this.defaultUsername,listeners:{render:function(a){a.focus(false,250)}}},{xtype:"textfield",tabindex:3,width:170,inputType:"password",fieldLabel:_("Password"),id:"password",name:"password",selectOnFocus:true,value:this.defaultPassword},{cls:"tb-login-button-spacer",border:false,html:""},{xtype:"button",width:120,text:_("Login"),scope:this,handler:this.onLoginPress}]})}return this.loginPanel},getTinePanel:function(){if(!this.tinePanel){this.tinePanel=new Ext.Panel({layout:"fit",cls:"tb-login-tinepanel",border:false,defaults:{xtype:"label"},items:[{cls:"tb-login-big-label",html:_("Tine 2.0 is made for you")},{html:"<p>"+_("Tine 2.0 wants to make business collaboration easier and more enjoyable - for your needs! So you are warmly welcome to discuss with us, bring in ideas and get help.")+"</p>"},{cls:"tb-login-big-label-spacer",html:"&nbsp;"},{html:'<ul><li><a target="_blank" href="http://www.tine20.org/" border="0">'+_("Tine 2.0 Homepage")+'</a></li><li><a target="_blank" href="http://www.tine20.org/forum/" border="0">'+_("Tine 2.0 Forum")+"</a></li></ul>"}]})}return this.tinePanel},getSurveyData:function(a){var b=new Ext.data.Store({proxy:new Ext.data.ScriptTagProxy({url:"https://versioncheck.officespot20.com/surveyCheck/surveyCheck.php"}),reader:new Ext.data.JsonReader({root:"survey"},["title","subtitle","duration","langs","link","enddate","htmlmessage"])});b.on("load",function(d,c){var f=c[0];a.call(this,f)},this);b.load({params:{lang:Tine.Tinebase.registry.get("locale").locale}})},getSurveyPanel:function(){if(!this.surveyPanel){this.surveyPanel=new Ext.Panel({layout:"fit",cls:"tb-login-surveypanel",border:false,defaults:{xtype:"label"},items:[]});if(!Tine.Tinebase.registry.get("denySurveys")){this.getSurveyData(function(b){if(typeof b.get=="function"){var a=Date.parseDate(b.get("enddate"),Date.patterns.ISO8601Long);if(Ext.isDate(a)&&a.getTime()>new Date().getTime()){b.data.lang_duration=String.format(_("about {0} minutes"),b.data.duration);b.data.link="https://versioncheck.officespot20.com/surveyCheck/surveyCheck.php?participate";this.surveyPanel.add([{cls:"tb-login-big-label",html:_("Tine 2.0 needs your help")},{html:"<p>"+_("We regularly need your feedback to make the next Tine 2.0 releases fit your needs even better. Help us and yourself by participating:")+"</p>"},{html:this.getSurveyTemplate().apply(b.data)},{xtype:"button",width:120,text:_("participate!"),handler:function(){window.open(b.data.link)}}]);this.surveyPanel.doLayout()}}})}}return this.surveyPanel},getSurveyTemplate:function(){if(!this.surveyTemplate){this.surveyTemplate=new Ext.XTemplate("<br/ >","<p><b>{title}</b></p>",'<p><a target="_blank" href="{link}" border="0">{subtitle}</a></p>',"<br/>","<p>",_("Languages"),": {langs}</p>","<p>",_("Duration"),": {lang_duration}</p>","<br/>").compile()}return this.surveyTemplate},initComponent:function(){this.initLayout();this.supr().initComponent.call(this)},initLayout:function(){var a=(this.showInfoBox)?[this.getTinePanel(),this.getSurveyPanel()]:[];this.infoPanel=new Ext.Panel({layout:"fit",cls:"tb-login-infosection",border:false,width:300,height:460,layout:"vbox",layoutConfig:{align:"stretch"},items:a});this.items=[{layout:"absolute",border:false,items:[{border:false,items:this.getLoginPanel()},{border:false,items:this.infoPanel}]}]},onLoginPress:function(){var b=this.getLoginPanel().getForm();var a=b.getValues();if(b.isValid()){Ext.MessageBox.wait(_("Logging you in..."),_("Please wait"));Ext.Ajax.request({scope:this,params:{method:this.loginMethod,username:a.username,password:a.password},callback:function(g,d,c){var f=Ext.util.JSON.decode(c.responseText);if(f.success===true){Ext.MessageBox.wait(String.format(_("Login successful. Loading {0}..."),Tine.title),_("Please wait!"));window.document.title=this.originalTitle;this.onLogin.call(this.scope)}else{Ext.MessageBox.show({title:_("Login failure"),msg:_("Your username and/or your password are wrong!!!"),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.ERROR,fn:function(){this.getLoginPanel().getForm().findField("password").focus(true)}.createDelegate(this)})}}})}},onRender:function(b,a){this.supr().onRender.apply(this,arguments);this.map=new Ext.KeyMap(this.el,[{key:[10,13],scope:this,fn:this.onLoginPress}]);this.originalTitle=window.document.title;var c=(Tine.Tinebase.registry.get("titlePostfix"))?Tine.Tinebase.registry.get("titlePostfix"):"";window.document.title=Tine.title+c+" - "+_("Please enter your login data")},onResize:function(){this.supr().onResize.apply(this,arguments);var c=this.getBox();var a=this.getLoginPanel().getBox();var d=this.infoPanel.getBox();var f=(c.height-a.height)/2;if(c.height-f<d.height){f=c.height-d.height}var b=(c.width-a.width)/2;if(b+a.width+d.width>c.width){b=c.width-a.width-d.width}this.getLoginPanel().ownerCt.setPosition(b,f);this.infoPanel.ownerCt.setPosition(b+a.width,f)},renderSurveyPanel:function(b){console.log(b);var a=[{cls:"tb-login-big-label",html:_("Tine 2.0 needs your help")},{html:"<p>"+_("We regularly need your feedback to make the next Tine 2.0 releases fit your needs even better. Help us and yourself by participating:")+"</p>"}]}});Ext.namespace("Tine","Tine.Tinebase");Tine.Tinebase.common={openWindow:function(b,c,d,g){if(Ext.isIE){g=g+20}var n=Ext.isString(b)?b.replace(/[^a-zA-Z0-9_]/g,""):b;var m,j,l,k,f,i,a;if(document.all){m=document.body.clientWidth;j=document.body.clientHeight;l=window.screenTop;k=window.screenLeft}else{if(window.innerWidth){m=window.innerWidth;j=window.innerHeight;l=window.screenX;k=window.screenY}}f=((m-d)/2)+k;i=((j-g)/2)+l;a=window.open(c,n,"width="+d+",height="+g+",top="+i+",left="+f+",directories=no,toolbar=no,location=no,menubar=no,scrollbars=no,status=no,resizable=yes,dependent=no");return a},showDebugConsole:function(){if(!Ext.debug){var a=document.getElementsByTagName("head")[0];var c=document.createElement("script");c.setAttribute("src","library/ExtJS/src/debug.js");c.setAttribute("type","text/javascript");a.appendChild(c);var b=Ext.get(c);b.on("load",function(){Ext.log("debug console initialised")});b.on("fail",function(){Ext.msg.alert("could not activate debug console")})}else{Ext.log("debug console reactivated")}},dateTimeRenderer:function(a){return Ext.util.Format.date(a,Locale.getTranslationData("Date","medium")+" "+Locale.getTranslationData("Time","medium"))},dateRenderer:function(a){return Ext.util.Format.date(a,Locale.getTranslationData("Date","medium"))},timeRenderer:function(a){return Ext.util.Format.date(a,Locale.getTranslationData("Time","medium"))},tagsRenderer:function(c){var a="";if(c){for(var d=0;d<c.length;d++){var b=c[d].name;if(c[d].description){b+=" | "+c[d].description}a+='<div ext:qtip="'+b+'" style="width: 8px; height: 8px; background-color:'+c[d].color+'; border: 1px solid black; float: left; margin-right: 2px; margin-bottom: 1px;">&#160;</div>'}}return a},minutesRenderer:function(c){var b=c%60;var a=Math.floor(c/60);var d=String.format(Tine.Tinebase.translation.ngettext("{0} minute","{0} minutes",b),b);var f=String.format(Tine.Tinebase.translation.ngettext("{0} hour","{0} hours",a),a);if(b==0){d=f}else{d=a?f+", "+d:d}return d},usernameRenderer:function(f,d,c,a,b,g){return Ext.util.Format.htmlEncode(f.accountDisplayName)},accountRenderer:function(a,d,h,f,i,j){if(!a){return""}var b,g,c;if(a.accountDisplayName){b="user";c=a.accountDisplayName}else{if(a.name){b="group";c=a.name}else{if(h.data.name){b=h.data.type;c=h.data.name}else{if(h.data.account_name){b=h.data.account_type;c=h.data.account_name}}}}g=b=="user"?"renderer renderer_accountUserIcon":"renderer renderer_accountGroupIcon";return'<div class="'+g+'">&#160;</div>'+Ext.util.Format.htmlEncode(c)},accountTypeRenderer:function(a){iconCls=(a)=="user"?"renderer_accountUserIcon":"renderer_accountGroupIcon";return'<div style="background-position: 0px" class="'+iconCls+'">&#160;</div>'},booleanRenderer:function(a){var b=String.format("{0}",(a==1)?Locale.getTranslationData("Question","yes"):Locale.getTranslationData("Question","no"));return b.substr(0,b.indexOf(":"))},getJSONdata:function(a){if(Ext.isEmpty(a)){return false}var g=a.data;var d=g.getCount();var c=[];var f;for(var b=0;b<d;b++){f=g.itemAt(b).data;c.push(f)}return Ext.util.JSON.encode(c)},getJSONdataSKeys:function(a,b){if(Ext.isEmpty(a)||Ext.isEmpty(b)){return false}var h=a.data,f=h.getCount();var d=[];var j=b.length;if(j<1){return false}var g;for(var c=0;c<f;c++){g=[];g[0]={};g[0][b[0]]=h.itemAt(c).data.key;g[0][b[1]]=h.itemAt(c).data.value;d.push(g[0])}return Ext.util.JSON.encode(d)},hasRight:function(g,f,c){var d=[];if(!(Tine&&Tine[f]&&Tine[f].registry&&Tine[f].registry.get("rights"))){if(!Tine.Tinebase.appMgr){console.error("Tine.Tinebase.appMgr not yet available")}else{if(Tine.Tinebase.appMgr.get(f)){console.error("Tine."+f+".rights is not available, initialisation Error!")}}return false}d=Tine[f].registry.get("rights");var a=false;for(var b=0;b<d.length;b++){if(d[b]=="admin"){a=true;break}if(g=="view"&&(d[b]=="view_"+c||d[b]=="manage_"+c)){a=true;break}if(g=="manage"&&d[b]=="manage_"+c){a=true;break}if(g==d[b]){a=true;break}}return a}};Ext.onReady(function(){Tine.Tinebase.tineInit.initWindow();Tine.Tinebase.tineInit.initDebugConsole();Tine.Tinebase.tineInit.initBootSplash();Tine.Tinebase.tineInit.initLocale();Tine.Tinebase.tineInit.initAjax();Tine.Tinebase.tineInit.initRegistry();var a=function(){if(!Tine.Tinebase.tineInit.initList.initRegistry){a.defer(100)}else{Tine.Tinebase.tineInit.initExtDirect();Tine.Tinebase.tineInit.initWindowMgr();Tine.Tinebase.tineInit.onLangFilesLoad();Tine.Tinebase.tineInit.checkSelfUpdate();Tine.Tinebase.tineInit.renderWindow()}};a()});Ext.namespace("Tine","Tine.Tinebase","Tine.Calendar");Tine.clientVersion={};Tine.clientVersion.codeName="August (2009/11)";Tine.clientVersion.buildType="RELEASE";Tine.clientVersion.buildDate="2009-12-09 12:02:32";Tine.clientVersion.packageString="2009-11-1";Tine.clientVersion.releaseTime="none";Tine.title="Tine 2.0";Ext.namespace("Tine.Tinebase");Tine.Tinebase.tineInit={getAllRegistryDataMethod:"Tinebase.getAllRegistryData",stateful:true,requestUrl:"index.php",initList:{initWindow:false,initViewport:false,initRegistry:false},initWindow:function(){Ext.getBody().on("keydown",function(a){if(a.ctrlKey&&a.getKey()==a.A){a.preventDefault()}else{if(!window.isMainWindow&&a.ctrlKey&&a.getKey()==a.T){a.preventDefault()}}});this.initList.initWindow=true},initDebugConsole:function(){var a=new Ext.KeyMap(Ext.getDoc(),[{key:[122],ctrl:true,fn:Tine.Tinebase.common.showDebugConsole}])},initBootSplash:function(){centerSplash=function(){var a=Ext.getBody().getSize();var d=Ext.get("tine-viewport-waitcycle");d.moveTo(a.width/2-this.splash.width/2,a.height/2-this.splash.height/2);var c=Ext.get("tine-viewport-poweredby");if(c){var b=c.getSize();c.setTop(a.height/2-b.height);c.setLeft(a.width/2-b.width);c.setStyle({"z-index":100000})}};this.splash={id:"tine-viewport-waitcycle",border:false,layout:"fit",width:16,height:16,html:'<div class="loading-indicator" width="16px" height="16px">&#160;</div><div id="tine-viewport-poweredby" class="tine-viewport-poweredby" style="position: absolute;">Powered by: <a target="_blank" href="http://www.tine20.org">Tine 2.0</a></div>',listeners:{scope:this,render:centerSplash,resize:centerSplash}};Tine.Tinebase.viewport=new Ext.Viewport({layout:"fit",border:false,items:{id:"tine-viewport-maincardpanel",layout:"card",border:false,activeItem:0,items:this.splash},listeners:{scope:this,render:function(a){this.initList.initViewport=true}}})},renderWindow:function(){var b=Ext.getCmp("tine-viewport-maincardpanel");if(!Tine.Tinebase.registry.get("currentAccount")){if(!Tine.loginPanel){Tine.loginPanel=new Tine.Tinebase.LoginPanel({defaultUsername:Tine.Tinebase.registry.get("defaultUsername"),defaultPassword:Tine.Tinebase.registry.get("defaultPassword"),scope:this,onLogin:function(c){Tine.Tinebase.tineInit.initList.initRegistry=false;Tine.Tinebase.tineInit.initRegistry();var f=function(){if(Tine.Tinebase.tineInit.initList.initRegistry){Ext.MessageBox.hide();Tine.Tinebase.tineInit.initExtDirect();Tine.Tinebase.tineInit.renderWindow()}else{f.defer(100)}};f()}});b.layout.container.add(Tine.loginPanel)}b.layout.setActiveItem(Tine.loginPanel.id);Tine.loginPanel.doLayout();return}Tine.Tinebase.tineInit.initAppMgr();if(typeof(Tine.onReady)=="function"){Tine.Tinebase.viewport.destroy();Tine.onReady();return}var d=Ext.ux.PopupWindowMgr.get(window)||{};window.document.title=d.title?d.title:window.document.title;var a=Tine.WindowFactory.getContentPanel(d);b.layout.container.add(a);b.layout.setActiveItem(a.id);a.doLayout()},initAjax:function(){Ext.Ajax.url=Tine.Tinebase.tineInit.requestUrl;Ext.Ajax.method="POST";Ext.Ajax.defaultHeaders={"X-Tine20-Request-Type":"JSON"};Ext.Ajax.requestId=0;Ext.Ajax.on("beforerequest",function(a,b){b.headers=b.headers||{};b.headers["X-Tine20-JsonKey"]=Tine.Tinebase.registry&&Tine.Tinebase.registry.get?Tine.Tinebase.registry.get("jsonKey"):"";if(b.params&&!b.isUpload){var g={};var d=Tine.Tinebase.registry.get?Tine.Tinebase.registry.get("serviceMap").services[b.params.method]:false;if(d){for(var c=0,f;c<d.parameters.length;c++){f=d.parameters[c].name;g[f]=b.params[f]}}else{for(param in b.params){if(b.params.hasOwnProperty(param)&&param!="method"){g[param]=b.params[param]}}}b.jsonData=Ext.encode({jsonrpc:"2.0",method:b.params.method,params:g,id:++Ext.Ajax.requestId});b.cbs={};b.cbs.success=b.success||null;b.cbs.failure=b.failure||null;b.cbs.callback=b.callback||null;b.isImplicitJsonRpc=true;delete b.params;delete b.success;delete b.failure;delete b.callback}});Ext.Ajax.on("requestcomplete",function(c,b,d){if(!d.isUpload&&!b.responseText.match(/^([{\[])|(<\?xml)+/)){var g={code:1,message:"illegal json data in response",traceHTML:b.responseText,request:d.jsonData,response:b.responseText};var a=Ext.decode(d.jsonData);b.responseText=Ext.encode({jsonrpc:a.jsonrpc,id:a.id,error:{code:-32000,message:g.message,data:g}})}if(d.isImplicitJsonRpc){var f=Ext.decode(b.responseText);if(f.result){b.responseText=Ext.encode(f.result);if(d.cbs.success){d.cbs.success.call(d.scope,b,d)}if(d.cbs.callback){d.cbs.callback.call(d.scope,d,true,b)}}else{b.responseText=Ext.encode(f.error);if(d.cbs.failure){d.cbs.failure.call(d.scope,b,d)}else{if(d.cbs.callback){d.cbs.callback.call(d.scope,d,false,b)}else{var h=Ext.decode(b.responseText);var g=h.data?h.data:h;g.request=d.jsonData;g.response=b.responseText;Tine.Tinebase.ExceptionHandler.handleRequestException(g)}}}}});Ext.Ajax.on("requestexception",function(c,b,d){var i=b.status>0?b.status:(b.status==0?510:520);if(!d.isUpload){var g={code:i,message:"request exception: "+b.statusText,traceHTML:b.responseText,request:d.jsonData,response:b.responseText};var a=Ext.decode(d.jsonData);b.responseText=Ext.encode({jsonrpc:a.jsonrpc,id:a.id,error:{code:-32000,message:g.message,data:g}})}if(d.isImplicitJsonRpc){var f=Ext.decode(b.responseText);b.responseText=Ext.encode(f.error);if(d.cbs.failure){d.cbs.failure.call(d.scope,b,d)}else{if(d.cbs.callback){d.cbs.callback.call(d.scope,d,false,b)}else{var h=Ext.decode(b.responseText);var g=h.data?h.data:h;Tine.Tinebase.ExceptionHandler.handleRequestException(g)}}}else{if(!d.failure&&!d.callback){Tine.Tinebase.ExceptionHandler.handleRequestException(g)}}})},initRegistry:function(){Ext.namespace("Tine.Tinebase.registry");if(window.isMainWindow){Ext.Ajax.request({params:{method:Tine.Tinebase.tineInit.getAllRegistryDataMethod},success:function(c,d){var g=Ext.util.JSON.decode(c.responseText);for(var b in g){if(g.hasOwnProperty(b)){var i=g[b];if(Tine[b]){Tine[b].registry=new Ext.util.MixedCollection();for(var h in i){if(i.hasOwnProperty(h)){if(h=="preferences"){var j=new Ext.util.MixedCollection();for(var k in i[h]){if(i[h].hasOwnProperty(k)){j.add(k,i[h][k])}}j.on("replace",Tine.Tinebase.tineInit.onPreferenceChange);Tine[b].registry.add(h,j)}else{Tine[b].registry.add(h,i[h])}}}}}}if(Tine.Tinebase.registry&&Tine.Tinebase.registry.get("preferences")){var f=Tine.Tinebase.registry.get("preferences").get("windowtype");if(Tine.WindowFactory&&Tine.WindowFactory.windowType!=f){Tine.WindowFactory.windowType=f}}if(Tine.Tinebase.tineInit.stateful===true){Tine.Tinebase.tineInit.initState()}Tine.Tinebase.tineInit.initList.initRegistry=true}})}else{var a=Ext.ux.PopupWindowGroup.getMainWindow();for(p in a.Tine){if(a.Tine[p].hasOwnProperty("registry")&&Tine.hasOwnProperty(p)){Tine[p].registry=a.Tine[p].registry}}Tine.Tinebase.tineInit.initList.initRegistry=true}},onPreferenceChange:function(c,b,d){switch(c){case"windowtype":case"timezone":case"locale":if(window.google&&google.gears&&google.gears.localServer){var a=google.gears.localServer.openStore("tine20-package-store");if(a){google.gears.localServer.removeStore("tine20-package-store")}}window.location=window.location.href.replace(/#+.*/,"");break}},checkSelfUpdate:function(){if(!Tine.Tinebase.registry.get("version")){return false}var d,a=Tine.Tinebase.registry.get("version"),c=Tine.clientVersion;if(c.codeName.match(/^\$HeadURL/)){return}var g=new Ext.state.CookieProvider({});if(a.packageString!="none"){d=(a.packageString!==c.packageString)}else{d=(a.codeName!==c.codeName)}if(d){if(window.google&&google.gears&&google.gears.localServer){google.gears.localServer.removeManagedStore("tine20-store");google.gears.localServer.removeStore("tine20-package-store")}if(g.get("clientreload","0")=="0"){g.set("clientreload","1");window.location=window.location.href.replace(/#+.*/,"");return}else{new Ext.LoadMask(Ext.getBody(),{msg:_("Fatal Error: Client self-update failed, please contact your administrator and/or restart/reload your browser."),msgCls:""}).show()}}else{g.clear("clientreload");if(window.google&&google.gears&&google.gears.localServer){if(a.buildType=="RELEASE"){var b=google.gears.localServer.createStore("tine20-package-store");var f=["","index.php","Tinebase/js/Locale/build/"+Tine.Tinebase.registry.get("locale").locale+"-all.js"];Ext.each(f,function(h){if(!b.isCaptured(h)){b.capture(f,function(){})}},this)}else{google.gears.localServer.removeStore("tine20-package-store")}}}},initWindowMgr:function(){Ext.ux.PopupWindow.prototype.url="index.php";var a=(Tine.Tinebase.registry.get("preferences")&&Tine.Tinebase.registry.get("preferences").get("windowtype"))?Tine.Tinebase.registry.get("preferences").get("windowtype"):"Browser";Tine.WindowFactory=new Ext.ux.WindowFactory({windowType:a});if(window.isMainWindow){Ext.ux.PopupWindowMgr.register({name:window.name,popup:window,contentPanelConstructor:"Tine.Tinebase.MainScreen"})}},initExtDirect:function(){var a=Tine.Tinebase.registry.get("serviceMap");Ext.Direct.addProvider(Ext.apply(a,{type:"zfprovider",namespace:"Tine",url:a.target}))},initState:function(){Ext.state.Manager.setProvider(new Tine.Tinebase.StateProvider())},initAppMgr:function(){Tine.Tinebase.appMgr=new Tine.Tinebase.AppManager()},initLocale:function(){Tine.Tinebase.translation=new Locale.Gettext();Tine.Tinebase.translation.textdomain("Tinebase");window._=function(a){return Tine.Tinebase.translation.dgettext("Tinebase",a)}},onLangFilesLoad:function(){}};Ext.ns("Tine.Voipmanager","Tine.Voipmanager.Model");Tine.Voipmanager.Model.SnomPhoneArray=Tine.Tinebase.Model.genericFields.concat([{name:"id"},{name:"macaddress"},{name:"description"},{name:"location_id"},{name:"template_id"},{name:"settings_id"},{name:"ipaddress"},{name:"last_modified_time",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"current_software"},{name:"current_model"},{name:"settings_loaded_at",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"firmware_checked_at",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"location"},{name:"template"},{name:"redirect_event"},{name:"redirect_number"},{name:"redirect_time"},{name:"http_client_info_sent"},{name:"http_client_user"},{name:"http_client_pass"},{name:"setting_id"},{name:"web_language"},{name:"language"},{name:"display_method"},{name:"mwi_notification"},{name:"mwi_dialtone"},{name:"headset_device"},{name:"message_led_other"},{name:"global_missed_counter"},{name:"scroll_outgoing"},{name:"show_local_line"},{name:"show_call_status"},{name:"call_waiting"},{name:"web_language_writable"},{name:"language_writable"},{name:"display_method_writable"},{name:"call_waiting_writable"},{name:"mwi_notification_writable"},{name:"mwi_dialtone_writable"},{name:"headset_device_writable"},{name:"message_led_other_writable"},{name:"global_missed_counter_writable"},{name:"scroll_outgoing_writable"},{name:"show_local_line_writable"},{name:"show_call_status_writable"},{name:"lines"},{name:"rights"}]);Tine.Voipmanager.Model.SnomPhone=Tine.Tinebase.data.Record.create(Tine.Voipmanager.Model.SnomPhoneArray,{appName:"Voipmanager",modelName:"SnomPhone",idProperty:"id",titleProperty:"description",recordName:"SnomPhone",recordsName:"SnomPhones",containerProperty:"phone_id",containerName:"phones list",containersName:"phones lists",getTitle:function(){return this.get("description")?(this.get("description")+" "+this.get("macaddress")):false}});Tine.Voipmanager.Model.SnomPhone.getDefaultData=function(){return{}};Tine.Voipmanager.Model.SnomLocationArray=Tine.Tinebase.Model.genericFields.concat([{name:"id"},{name:"name"},{name:"description"},{name:"firmware_interval"},{name:"update_policy"},{name:"registrar"},{name:"base_download_url"},{name:"admin_mode"},{name:"admin_mode_password"},{name:"ntp_server"},{name:"ntp_refresh"},{name:"timezone"},{name:"webserver_type"},{name:"http_port"},{name:"https_port"},{name:"http_user"},{name:"http_pass"},{name:"tone_scheme"},{name:"date_us_format"},{name:"time_24_format"}]);Tine.Voipmanager.Model.SnomLocation=Tine.Tinebase.data.Record.create(Tine.Voipmanager.Model.SnomLocationArray,{appName:"Voipmanager",modelName:"SnomLocation",idProperty:"id",titleProperty:"name",recordName:"SnomLocation",recordsName:"SnomLocations",containerProperty:"location_id",containerName:"locations list",containersName:"locations lists",getTitle:function(){return this.get("name")?this.get("name"):false}});Tine.Voipmanager.Model.SnomLocation.getDefaultData=function(){return{}};Tine.Voipmanager.Model.SnomTemplateArray=Tine.Tinebase.Model.genericFields.concat([{name:"id"},{name:"name"},{name:"description"},{name:"keylayout_id"},{name:"setting_id"},{name:"software_id"}]);Tine.Voipmanager.Model.SnomTemplate=Tine.Tinebase.data.Record.create(Tine.Voipmanager.Model.SnomTemplateArray,{appName:"Voipmanager",modelName:"SnomTemplate",idProperty:"id",titleProperty:"name",recordName:"SnomTemplate",recordsName:"SnomTemplates",containerProperty:"template_id",containerName:"templates list",containersName:"templates lists",getTitle:function(){return this.get("name")?this.get("name"):false}});Tine.Voipmanager.Model.SnomTemplate.getDefaultData=function(){return{}};Tine.Voipmanager.Model.SnomSoftwareArray=Tine.Tinebase.Model.genericFields.concat([{name:"id"},{name:"name"},{name:"description"},{name:"softwareimage_snom300"},{name:"softwareimage_snom320"},{name:"softwareimage_snom360"},{name:"softwareimage_snom370"}]);Tine.Voipmanager.Model.SnomSoftware=Tine.Tinebase.data.Record.create(Tine.Voipmanager.Model.SnomSoftwareArray,{appName:"Voipmanager",modelName:"SnomSoftware",idProperty:"id",titleProperty:"name",recordName:"SnomSoftware",recordsName:"SnomSoftwares",containerProperty:"software_id",containerName:"softwares list",containersName:"softwares lists",getTitle:function(){return this.get("name")?this.get("name"):false}});Tine.Voipmanager.Model.SnomSoftware.getDefaultData=function(){return{}};Tine.Voipmanager.Model.SnomSoftwareImageArray=Tine.Tinebase.Model.genericFields.concat([{name:"model"},{name:"softwareimage"}]);Tine.Voipmanager.Model.SnomSoftwareImage=Tine.Tinebase.data.Record.create(Tine.Voipmanager.Model.SnomSoftwareImageArray,{appName:"Voipmanager",modelName:"SnomSoftwareImage",idProperty:"model",titleProperty:"softwareimage",recordName:"SnomSoftwareImage",recordsName:"SnomSoftwareImages",containerProperty:"softwareImage_model",containerName:"softwareImages list",containersName:"softwareImages lists",getTitle:function(){return this.get("name")?this.get("name"):false}});Tine.Voipmanager.Model.SnomSoftwareImage.getDefaultData=function(){return{}};Tine.Voipmanager.Model.SnomLineArray=Tine.Tinebase.Model.genericFields.concat([{name:"asteriskline_id"},{name:"id"},{name:"idletext"},{name:"lineactive"},{name:"linenumber"},{name:"snomphone_id"},{name:"name"}]);Tine.Voipmanager.Model.SnomLine=Tine.Tinebase.data.Record.create(Tine.Voipmanager.Model.SnomLineArray,{appName:"Voipmanager",modelName:"SnomLine",idProperty:"id",titleProperty:"linenumber",recordName:"SnomLine",recordsName:"SnomLines",containerProperty:"line_id",containerName:"lines list",containersName:"lines lists",getTitle:function(){return this.get("name")?this.get("name"):false}});Tine.Voipmanager.Model.SnomLine.getDefaultData=function(){return{}};Tine.Voipmanager.Model.SnomSettingArray=Tine.Tinebase.Model.genericFields.concat([{name:"id"},{name:"name"},{name:"description"},{name:"web_language"},{name:"language"},{name:"display_method"},{name:"mwi_notification"},{name:"mwi_dialtone"},{name:"headset_device"},{name:"message_led_other"},{name:"global_missed_counter"},{name:"scroll_outgoing"},{name:"show_local_line"},{name:"show_call_status"},{name:"call_waiting"},{name:"web_language_writable"},{name:"language_writable"},{name:"display_method_writable"},{name:"call_waiting_writable"},{name:"mwi_notification_writable"},{name:"mwi_dialtone_writable"},{name:"headset_device_writable"},{name:"message_led_other_writable"},{name:"global_missed_counter_writable"},{name:"scroll_outgoing_writable"},{name:"show_local_line_writable"},{name:"show_call_status_writable"}]);Tine.Voipmanager.Model.SnomSetting=Tine.Tinebase.data.Record.create(Tine.Voipmanager.Model.SnomSettingArray,{appName:"Voipmanager",modelName:"SnomSetting",idProperty:"id",titleProperty:"name",recordName:"SnomSetting",recordsName:"SnomSettings",containerProperty:"setting_id",containerName:"setting list",containersName:"setting lists",getTitle:function(){return this.get("name")?this.get("name"):false}});Tine.Voipmanager.Model.SnomSetting.getDefaultData=function(){return{}};Tine.Voipmanager.Model.SnomPhoneRight=Ext.data.Record.create([{name:"id"},{name:"account_id"},{name:"account_type"},{name:"account_name"}]);Tine.Voipmanager.Model.AsteriskSipPeerArray=Tine.Tinebase.Model.genericFields.concat([{name:"id"},{name:"name"},{name:"accountcode"},{name:"amaflags"},{name:"callgroup"},{name:"callerid"},{name:"canreinvite"},{name:"context_id"},{name:"context"},{name:"defaultip"},{name:"dtmfmode"},{name:"fromuser"},{name:"fromdomain"},{name:"fullcontact"},{name:"host"},{name:"insecure"},{name:"language"},{name:"mailbox"},{name:"md5secret"},{name:"nat"},{name:"deny"},{name:"permit"},{name:"mask"},{name:"pickupgroup"},{name:"port"},{name:"qualify"},{name:"restrictcid"},{name:"rtptimeout"},{name:"rtpholdtimeout"},{name:"secret"},{name:"type"},{name:"defaultuser"},{name:"disallow"},{name:"allow"},{name:"musiconhold"},{name:"regseconds",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"ipaddr"},{name:"regexten"},{name:"cancallforward"},{name:"setvar"},{name:"notifyringing"},{name:"useclientcode"},{name:"authuser"},{name:"call-limit"},{name:"busy-level"}]);Tine.Voipmanager.Model.AsteriskSipPeer=Tine.Tinebase.data.Record.create(Tine.Voipmanager.Model.AsteriskSipPeerArray,{appName:"Voipmanager",modelName:"AsteriskSipPeer",idProperty:"id",titleProperty:"name",recordName:"AsteriskSipPeer",recordsName:"AsteriskSipPeers",containerProperty:"sipPeer_id",containerName:"sipPeers list",containersName:"sipPeers lists",getTitle:function(){return this.get("name")?this.get("name"):false}});Tine.Voipmanager.Model.AsteriskSipPeer.getDefaultData=function(){return{}};Tine.Voipmanager.Model.AsteriskContextArray=Tine.Tinebase.Model.genericFields.concat([{name:"id"},{name:"name"},{name:"description"}]);Tine.Voipmanager.Model.AsteriskContext=Tine.Tinebase.data.Record.create(Tine.Voipmanager.Model.AsteriskContextArray,{appName:"Voipmanager",modelName:"AsteriskContext",idProperty:"id",titleProperty:"name",recordName:"AsteriskContext",recordsName:"AsteriskContexts",containerProperty:"context_id",containerName:"contexts list",containersName:"contexts lists",getTitle:function(){return this.get("name")?this.get("name"):false}});Tine.Voipmanager.Model.AsteriskContext.getDefaultData=function(){return{}};Tine.Voipmanager.Model.AsteriskVoicemailArray=Tine.Tinebase.Model.genericFields.concat([{name:"id"},{name:"context_id"},{name:"context"},{name:"mailbox"},{name:"password"},{name:"fullname"},{name:"email"},{name:"pager"},{name:"tz"},{name:"attach"},{name:"saycid"},{name:"dialout"},{name:"callback"},{name:"review"},{name:"operator"},{name:"envelope"},{name:"sayduration"},{name:"saydurationm"},{name:"sendvoicemail"},{name:"delete"},{name:"nextaftercmd"},{name:"forcename"},{name:"forcegreetings"},{name:"hidefromdir"}]);Tine.Voipmanager.Model.AsteriskVoicemail=Tine.Tinebase.data.Record.create(Tine.Voipmanager.Model.AsteriskVoicemailArray,{appName:"Voipmanager",modelName:"AsteriskVoicemail",idProperty:"id",titleProperty:"mailbox",recordName:"AsteriskVoicemail",recordsName:"AsteriskVoicemails",containerProperty:"voicemail_id",containerName:"voicemails list",containersName:"voicemails lists",getTitle:function(){return this.get("mailbox")?this.get("mailbox"):false}});Tine.Voipmanager.Model.AsteriskVoicemail.getDefaultData=function(){return{}};Tine.Voipmanager.Model.AsteriskMeetmeArray=Tine.Tinebase.Model.genericFields.concat([{name:"id"},{name:"confno"},{name:"pin"},{name:"adminpin"}]);Tine.Voipmanager.Model.AsteriskMeetme=Tine.Tinebase.data.Record.create(Tine.Voipmanager.Model.AsteriskMeetmeArray,{appName:"Voipmanager",modelName:"AsteriskMeetme",idProperty:"id",titleProperty:"confno",recordName:"AsteriskMeetme",recordsName:"AsteriskMeetmes",containerProperty:"meetme_id",containerName:"meetmes list",containersName:"meetmes lists",getTitle:function(){return this.get("number")?(this.get("number")+" "+this.get("confno")):false}});Tine.Voipmanager.Model.AsteriskMeetme.getDefaultData=function(){return{}};Ext.namespace("Tine.Voipmanager","Tine.Voipmanager.widgets");Tine.Voipmanager.widgets.ContextCombo=Ext.extend(Ext.ux.form.ClearableComboBox,{id:"ContextCombo",emptyText:"context",typeAhead:true,editable:false,mode:"remote",triggerAction:"all",displayField:"name",valueField:"id",width:100,initComponent:function(){this.store=new Ext.data.JsonStore({id:"id",root:"results",totalProperty:"totalCount",fields:["id","name","description"],baseParams:{method:"Voipmanager.getAsteriskContexts",sort:"",dir:"ASC",query:""}});Tine.Voipmanager.widgets.ContextCombo.superclass.initComponent.call(this);this.on("select",function(){var a=this.getValue();if(String(a)!==String(this.startValue)){this.fireEvent("change",this,a,this.startValue)}},this)}});Ext.namespace("Tine.Voipmanager");Tine.Voipmanager.TreePanel=Ext.extend(Ext.tree.TreePanel,{rootVisible:false,border:false,initComponent:function(){this.root={id:"root",children:[{text:this.app.i18n._("Asterisk"),cls:"treemain",allowDrag:false,allowDrop:true,id:"Asterisk",icon:false,children:[{text:this.app.i18n._("SipPeer"),cls:"treemain",allowDrag:false,allowDrop:true,id:"SipPeer",icon:false,children:[],leaf:true,expanded:true},{text:this.app.i18n._("Dialplan"),cls:"treemain",allowDrag:false,allowDrop:true,id:"Dialplan",icon:false,children:[],leaf:true,disabled:true,expanded:true},{text:this.app.i18n._("Context"),cls:"treemain",allowDrag:false,allowDrop:true,id:"Context",icon:false,children:[],leaf:true,expanded:true},{text:this.app.i18n._("Voicemail"),cls:"treemain",allowDrag:false,allowDrop:true,id:"Voicemail",icon:false,children:[],leaf:true,expanded:true},{text:this.app.i18n._("Meetme"),cls:"treemain",allowDrag:false,allowDrop:true,id:"Meetme",icon:false,children:[],leaf:true,expanded:true},{text:this.app.i18n._("Queues"),cls:"treemain",allowDrag:false,allowDrop:true,id:"Queues",icon:false,disabled:true,children:[],leaf:true,expanded:true}],leaf:null,expanded:true,dataPanelType:"asterisk",viewRight:"asterisk"},{text:this.app.i18n._("Snom"),cls:"treemain",allowDrag:false,allowDrop:true,id:"Snom",icon:false,children:[{text:this.app.i18n._("Phones"),cls:"treemain",allowDrag:false,allowDrop:true,id:"Phone",icon:false,children:[],leaf:true,expanded:true},{text:this.app.i18n._("Location"),cls:"treemain",allowDrag:false,allowDrop:true,id:"Location",icon:false,children:[],leaf:true,expanded:true},{text:this.app.i18n._("Templates"),cls:"treemain",allowDrag:false,allowDrop:true,id:"Template",icon:false,children:[],leaf:null,expanded:true},{text:this.app.i18n._("Keylayout"),cls:"treemain",allowDrag:false,allowDrop:true,id:"Keylayout",icon:false,children:[],leaf:null,expanded:true,disabled:true},{text:this.app.i18n._("Setting"),cls:"treemain",allowDrag:false,allowDrop:true,id:"Setting",icon:false,children:[],leaf:null,expanded:true},{text:this.app.i18n._("Software"),cls:"treemain",allowDrag:false,allowDrop:true,id:"Software",icon:false,children:[],leaf:null,expanded:true}],leaf:null,expanded:true,dataPanelType:"snom",viewRight:"snom"}]};Tine.Voipmanager.TreePanel.superclass.initComponent.call(this);this.on("click",function(b){if(b.disabled){return false}var c=b.getPath().split("/")[3];var a=b.getPath().split("/")[2];this.app.getMainScreen().activeContentType=c;this.app.getMainScreen().activeContentGroup=a;this.app.getMainScreen().show()},this)},afterRender:function(){Tine.Voipmanager.TreePanel.superclass.afterRender.call(this);var a=this.app.getMainScreen().activeContentType;this.expandPath("/root/snom");this.selectPath("/root/snom/phones")},getFilterPlugin:function(){if(!this.filterPlugin){var a=this;this.filterPlugin=new Tine.widgets.grid.FilterPlugin({getValue:function(){var b=a.getSelectionModel().getSelectedNode().attributes||{};return[{field:"containerType",operator:"equals",value:b.containerType?b.containerType:"all"},{field:"container",operator:"equals",value:b.container?b.container.id:null},{field:"owner",operator:"equals",value:b.owner?b.owner.accountId:null}]}})}return this.filterPlugin}});Tine.Voipmanager.AsteriskContextBackend=new Tine.Tinebase.data.RecordProxy({appName:"Voipmanager",modelName:"AsteriskContext",recordClass:Tine.Voipmanager.Model.AsteriskContext});Tine.Voipmanager.AsteriskSipPeerBackend=new Tine.Tinebase.data.RecordProxy({appName:"Voipmanager",modelName:"AsteriskSipPeer",recordClass:Tine.Voipmanager.Model.AsteriskSipPeer});Tine.Voipmanager.AsteriskVoicemailBackend=new Tine.Tinebase.data.RecordProxy({appName:"Voipmanager",modelName:"AsteriskVoicemail",recordClass:Tine.Voipmanager.Model.AsteriskVoicemail});Tine.Voipmanager.AsteriskMeetmeBackend=new Tine.Tinebase.data.RecordProxy({appName:"Voipmanager",modelName:"AsteriskMeetme",recordClass:Tine.Voipmanager.Model.AsteriskMeetme});Tine.Voipmanager.SnomPhoneBackend=new Tine.Tinebase.data.RecordProxy({appName:"Voipmanager",modelName:"SnomPhone",recordClass:Tine.Voipmanager.Model.SnomPhone});Tine.Voipmanager.SnomLocationBackend=new Tine.Tinebase.data.RecordProxy({appName:"Voipmanager",modelName:"SnomLocation",recordClass:Tine.Voipmanager.Model.SnomLocation});Tine.Voipmanager.SnomTemplateBackend=new Tine.Tinebase.data.RecordProxy({appName:"Voipmanager",modelName:"SnomTemplate",recordClass:Tine.Voipmanager.Model.SnomTemplate});Tine.Voipmanager.SnomSoftwareBackend=new Tine.Tinebase.data.RecordProxy({appName:"Voipmanager",modelName:"SnomSoftware",recordClass:Tine.Voipmanager.Model.SnomSoftware});Tine.Voipmanager.SnomSoftwareImageBackend=new Tine.Tinebase.data.RecordProxy({appName:"Voipmanager",modelName:"SnomSoftwareImage",recordClass:Tine.Voipmanager.Model.SnomSoftwareImage});Tine.Voipmanager.SnomLineBackend=new Tine.Tinebase.data.RecordProxy({appName:"Voipmanager",modelName:"SnomLine",recordClass:Tine.Voipmanager.Model.SnomLine});Tine.Voipmanager.SnomSettingBackend=new Tine.Tinebase.data.RecordProxy({appName:"Voipmanager",modelName:"SnomSetting",recordClass:Tine.Voipmanager.Model.SnomSetting});Tine.Voipmanager.Data={loadPhoneModelData:function(b){var c=new Ext.data.SimpleStore({autoLoad:true,id:"model",fields:["id","model","lines"],data:[["snom300","Snom 300","4"],["snom320","Snom 320","12"],["snom360","Snom 360","12"],["snom370","Snom 370","12"]]});if(b){var a=c.find("model",b);return c.getAt(a)}return c},loadTimezoneData:function(){var a=new Ext.data.SimpleStore({autoLoad:true,fields:["key","timezone"],data:[["USA-10","-10 Vereinigte Staaten - Hawaii-Aleutian"],["USA-9","-9 Vereinigte Staaten - Alaska Time"],["CAN-8","-8 Kanada (Vancouver, Whitehorse)"],["MEX-8","-8 Mexiko (Tijuana, Mexicali)"],["USA-8","-8 Vereinigte Staaten - Pacific Time"],["CAN-7","-7 Kanada (Edmonton, Calgary)"],["MEX-7","-7 Mexiko (Mazatlan, Chihuahua)"],["USA-7","-7 Vereinigte Staaten - Mountain Time"],["USA2-7","-7 Vereinigte Staaten - Mountain Time"],["CAN-6","-6 Kanada - Manitoba (Winnipeg)"],["CHL-6","-6 Chile (Easter Islands)"],["MEX-6","-6 Mexiko (Mexiko City, Acapulco)"],["USA-6","-6 Vereinigte Staaten - Central Time"],["BHS-5","-5 Bahamas (Nassau)"],["CAN-5","-5 Kanada (Montreal, Ottawa, Quebec)"],["CUB-5","-5 Kuba (Havana)"],["USA-5","-5 Vereinigte Staaten - Eastern Time"],["CAN-4","-4 Kanada (Halifax, Saint John)"],["CHL-4","-4 Chile (Santiago)"],["PRY-4","-4 Paraguay (Asunçion)"],["BMU-4","-4 Großbritannien (Bermuda)"],["FLK-4","-4 Großbritannien (Falkland Inseln)"],["TTB-4","-4 Trinidad&amp;Tobago"],["CAN-3.5","-3.5 Kanada - Neufundland (St. Johns)"],["GRL-3","-3 Dänemark - Grönland (Nuuk)"],["ARG-3","-3 Argentinien (Buenos Aires)"],["BRA2-3","-3 Brasilien (keine SZ)"],["BRA1-3","-3 Brasilien (SZ)"],["BRA-2","-2 Brasilien (keine SZ)"],["PRT-1","-1 Portugal (Azoren)"],["FRO-0","0 Dänemark - Faroer Inseln (Torshaven)"],["IRL-0","0 Irland (Dublin)"],["PRT-0","0 Portugal (Lissabon, Porto, Funchal)"],["ESP-0","0 Spanien - Canary Islands (Las Palmas)"],["GBR-0","0 Großbritannien (London)"],["ALB+1","+1 Albanien (Tirana)"],["AUT+1","+1 Österreich (Wien)"],["BEL+1","+1 Belgien (Brüssel)"],["CAI+1","+1 Caicos"],["CHA+1","+1 Chatam"],["HRV+1","+1 Hrvska (Zagreb)"],["CZE+1","+1 Czech Republic (Prague)"],["DNK+1","+1 Dänemark (Kopenhagen)"],["FRA+1","+1 Frankreich (Nizza)"],["GER+1","+1 Deutschland (Berlin)"],["HUN+1","+1 Ungarn (Budapest)"],["ITA+1","+1 Italien (Rom)"],["LUX+1","+1 Luxemburg (Luxenburg)"],["MAK+1","+1 Mazedonien (Skopje)"],["NLD+1","+1 Niederlande (Amsterdam)"],["NAM+1","+1 Namibia (Windhoek)"],["NOR+1","+1 Norwegen (Oslo)"],["POL+1","+1 Polen (Warszawa)"],["SVK+1","+1 Slovakei (Breslau)"],["ESP+1","+1 Spanien (Madrid)"],["SWE+1","+1 Schweden (Stockholm)"],["CHE+1","+1 Schweiz (Bern)"],["GIB+1","+1 Großbritannien (Gibraltar)"],["YUG+1","+1 Serbien Montenegro (Belgrad)"],["WAT+1","+1 West Afrika"],["BLR+2","+2 Weissrussland (Minsk)"],["BGR+2","+2 Bulgarien (Sofia)"],["CYP+2","+2 Zypern (Nicosia)"],["CAT+2","+2 Zentral Afrika"],["EGY+2","+2 Ägypten (Kairo)"],["EST+2","+2 Estland (Tallin)"],["FIN+2","+2 Finnland (Helsinki)"],["GAZ+2","+2 Gazastreifen (Gaza)"],["GRC+2","+2 Griechenland (Athen)"],["ISR+2","+2 Israel (Tel Aviv)"],["JOR+2","+2 Jordanien (Amman)"],["LVA+2","+2 Litauen (Riga)"],["LBN+2","+2 Libanon (Beirut)"],["MDA+2","+2 Moldavien (Kishinev)"],["RUS+2","+2 Russland (Kaliningrad)"],["ROU+2","+2 Rumänien (Bucharest)"],["SYR+2","+2 Syrien (Damascus)"],["TUR+2","+2 Tärkei (Ankara)"],["UKR+2","+2 Ukraine (Kiev, Odessa)"],["EAT+3","+3 Ost Afrika"],["IRQ+3","+3 Irak (Baghdad)"],["RUS+3","+3 Russland (Moscow)"],["IRN+3.5","+3.5 Iran (Teheran)"],["ARM+4","+4 Armenien (Yerevan)"],["AZE+4","+4 Azerbaijan (Baku)"],["GEO+4","+4 Georgien (Tbilisi)"],["KAZ+4","+4 Kazastan (Aqtau)"],["RUS+4","+4 Russland (Samara)"],["KAZ+5","+5 Kazastan (Aqtobe)"],["KGZ+5","+5 Kyrgyzien (Bishkek)"],["PAK+5","+5 Pakistan (Islamabad)"],["RUS+5","+5 Russland (Chelyabinsk)"],["IND+5.5","+5.5 Indien (Kalkutta)"],["KAZ+6","+6 Kazastan (Astana, Almaty)"],["RUS+6","+6 Russland (Novosibirsk, Omsk)"],["RUS+7","+7 Russland (Krasnoyarsk)"],["THA+7","+7 Thailand (Bangkok)"],["CHN+7","+8 China (Peking)"],["SGP+8","+8 Singapur (Singapur)"],["KOR+8","+8 Korea (Seoul)"],["AUS+8","+8 Australien (Perth)"],["JPN+9","+9 Japan (Tokyo)"],["AUS+9.5","+9.5 Australien (Adelaide)"],["AUS2+9.5","+9.5 Australien (Darwin)"],["AUS+10","+10 Australien (Sydney, Melbourne, Canberra)"],["AUS2+10","+10 Australien (Brisbane)"],["AUS3+10","+10 Australien (Hobart)"],["RUS+10","+10 Russland (Vladivostok)"],["AUS+10.5","+10.5 Australien (Lord Howe Islands)"],["NZL+12","+12 Neuseeland (Wellington, Auckland)"],["RUS+12","+12 Russland (Anadyr, Kamchatka)"],["NZL+12.75","+12.75 Neuseeland (Chatham Islands)"],["TON+13","+13 Tonga (Nukualofa)"]]});return a},loadTemplateData:function(){var a=new Ext.data.JsonStore({baseParams:{method:"Voipmanager.getSnomTemplates",sort:"name",dir:"ASC",query:""},root:"results",totalProperty:"totalcount",id:"id",fields:[{name:"id"},{name:"name"}],remoteSort:true});a.setDefaultSort("name","asc");return a},loadLocationData:function(){var a=new Ext.data.JsonStore({baseParams:{method:"Voipmanager.getSnomLocations",sort:"name",dir:"ASC",query:""},root:"results",totalProperty:"totalcount",id:"id",fields:[{name:"id"},{name:"name"}],remoteSort:true});a.setDefaultSort("name","asc");return a},loadSoftwareData:function(){var a=new Ext.data.JsonStore({baseParams:{method:"Voipmanager.searchSnomSoftware",sort:"description",dir:"ASC"},root:"results",totalProperty:"totalcount",id:"id",fields:[{name:"id"},{name:"model"},{name:"description"}],remoteSort:true});a.setDefaultSort("description","asc");return a},loadKeylayoutData:function(){var a=new Ext.data.JsonStore({baseParams:{method:"Voipmanager.getSnomKeylayouts",sort:"description",dir:"ASC"},root:"results",totalProperty:"totalcount",id:"id",fields:[{name:"id"},{name:"model"},{name:"description"}],remoteSort:true});a.setDefaultSort("description","asc");return a},loadSettingsData:function(a){var b=new Ext.data.JsonStore({baseParams:{method:"Voipmanager.getSnomSettings",sort:"description",dir:"ASC"},root:"results",totalProperty:"totalcount",id:"id",fields:[{name:"id"},{name:"model"},{name:"description"}],remoteSort:true});b.setDefaultSort("description","asc");return b}};Ext.namespace("Tine.Voipmanager");Tine.Voipmanager.SnomSoftwareGridPanel=Ext.extend(Tine.Tinebase.widgets.app.GridPanel,{recordClass:Tine.Voipmanager.Model.SnomSoftware,evalGrants:false,defaultSortInfo:{field:"description",direction:"ASC"},gridConfig:{loadMask:true,autoExpandColumn:"description"},initComponent:function(){this.recordProxy=Tine.Voipmanager.SnomSoftwareBackend;this.gridConfig.columns=this.getColumns();this.initFilterToolbar();this.actionToolbarItems=this.getToolbarItems();this.plugins=this.plugins||[];this.plugins.push(this.filterToolbar);Tine.Voipmanager.SnomSoftwareGridPanel.superclass.initComponent.call(this)},initFilterToolbar:function(){this.filterToolbar=new Tine.widgets.grid.FilterToolbar({filterModels:[{label:_("Quick search"),field:"query",operators:["contains"]}],defaultFilter:"query",filters:[],plugins:[new Tine.widgets.grid.FilterToolbarQuickFilterPlugin()]})},getColumns:function(){return[{id:"id",header:this.app.i18n._("id"),dataIndex:"id",width:20,sortable:true,hidden:true},{id:"name",header:this.app.i18n._("name"),dataIndex:"name",width:150,sortable:true},{id:"description",header:this.app.i18n._("Description"),dataIndex:"description",width:250,sortable:true}]},initDetailsPanel:function(){return false},getToolbarItems:function(){return[]}});Ext.namespace("Tine.Voipmanager");Tine.Voipmanager.SnomSoftwareEditDialog=Ext.extend(Tine.widgets.dialog.EditDialog,{windowNamePrefix:"SnomSoftwareEditWindow_",appName:"Voipmanager",recordClass:Tine.Voipmanager.Model.SnomSoftware,recordProxy:Tine.Voipmanager.SnomSoftwareBackend,evalGrants:false,getSoftwareVersion:function(){var a=[];var b=Tine.Voipmanager.Data.loadPhoneModelData();b.each(function(c){a.push(new Ext.form.TextField({fieldLabel:c.data.model,name:"softwareimage_"+c.data.id,id:"softwareimage_"+c.data.id,anchor:"100%",maxLength:128,hideLabel:false}))});return a},getFormItems:function(){return{layout:"form",border:false,items:[{xtype:"textfield",name:"name",fieldLabel:this.app.i18n._("name"),anchor:"100%"},{xtype:"textarea",name:"description",fieldLabel:this.app.i18n._("Description"),grow:false,preventScrollbars:false,anchor:"100%",height:60},{layout:"form",border:false,anchor:"100%",items:this.getSoftwareVersion()}]}}});Tine.Voipmanager.SnomSoftwareEditDialog.openWindow=function(a){var c=(a.record&&a.record.id)?a.record.id:0;var b=Tine.WindowFactory.getWindow({width:500,height:300,name:Tine.Voipmanager.SnomSoftwareEditDialog.prototype.windowNamePrefix+c,contentPanelConstructor:"Tine.Voipmanager.SnomSoftwareEditDialog",contentPanelConstructorConfig:a});return b};Ext.namespace("Tine.Voipmanager");Tine.Voipmanager.SnomTemplateGridPanel=Ext.extend(Tine.Tinebase.widgets.app.GridPanel,{recordClass:Tine.Voipmanager.Model.SnomTemplate,evalGrants:false,defaultSortInfo:{field:"description",direction:"ASC"},gridConfig:{loadMask:true,autoExpandColumn:"description"},initComponent:function(){this.recordProxy=Tine.Voipmanager.SnomTemplateBackend;this.gridConfig.columns=this.getColumns();this.initFilterToolbar();this.actionToolbarItems=this.getToolbarItems();this.plugins=this.plugins||[];this.plugins.push(this.filterToolbar);Tine.Voipmanager.SnomTemplateGridPanel.superclass.initComponent.call(this)},initFilterToolbar:function(){this.filterToolbar=new Tine.widgets.grid.FilterToolbar({filterModels:[{label:_("Quick search"),field:"query",operators:["contains"]}],defaultFilter:"query",filters:[],plugins:[new Tine.widgets.grid.FilterToolbarQuickFilterPlugin()]})},getColumns:function(){return[{id:"id",header:this.app.i18n._("id"),dataIndex:"id",width:10,sortable:true,hidden:true},{id:"name",header:this.app.i18n._("name"),dataIndex:"name",width:100,sortable:true},{id:"description",header:this.app.i18n._("Description"),dataIndex:"description",width:350,sortable:true},{id:"keylayout_id",header:this.app.i18n._("Keylayout Id"),dataIndex:"keylayout_id",width:10,sortable:true,hidden:true},{id:"setting_id",header:this.app.i18n._("Settings Id"),dataIndex:"setting_id",width:10,sortable:true,hidden:true},{id:"software_id",header:this.app.i18n._("Software Id"),dataIndex:"software_id",width:10,sortable:true,hidden:true}]},initDetailsPanel:function(){return false},getToolbarItems:function(){return[]}});Ext.namespace("Tine.Voipmanager");Tine.Voipmanager.SnomTemplateEditDialog=Ext.extend(Tine.widgets.dialog.EditDialog,{windowNamePrefix:"SnomTemplateEditWindow_",appName:"Voipmanager",recordClass:Tine.Voipmanager.Model.SnomTemplate,recordProxy:Tine.Voipmanager.SnomTemplateBackend,evalGrants:false,getFormItems:function(){return{layout:"form",border:false,defaults:{anchor:"100%"},items:[{xtype:"textfield",fieldLabel:this.app.i18n._("Name"),name:"name",maxLength:80,allowBlank:false},{xtype:"textarea",name:"description",fieldLabel:this.app.i18n._("Description"),grow:false,preventScrollbars:false,height:40},{xtype:"reccombo",name:"software_id",fieldLabel:this.app.i18n._("Software Version"),displayField:"name",store:new Ext.data.Store({fields:Tine.Voipmanager.Model.SnomSoftware,proxy:Tine.Voipmanager.SnomSoftwareBackend,reader:Tine.Voipmanager.SnomSoftwareBackend.getReader(),remoteSort:true,sortInfo:{field:"name",dir:"ASC"}})},{xtype:"reccombo",name:"setting_id",fieldLabel:this.app.i18n._("Settings"),displayField:"name",store:new Ext.data.Store({fields:Tine.Voipmanager.Model.SnomSetting,proxy:Tine.Voipmanager.SnomSettingBackend,reader:Tine.Voipmanager.SnomSettingBackend.getReader(),remoteSort:true,sortInfo:{field:"name",dir:"ASC"}})},{xtype:"combo",fieldLabel:this.app.i18n._("Keylayout"),name:"keylayout_id",mode:"local",disabled:true,displayField:"description",valueField:"id",triggerAction:"all",editable:false,forceSelection:true,store:new Ext.data.JsonStore({storeId:"Voipmanger_EditTemplate_Keylayout",id:"id",fields:["id","model","description"]})}]}}});Tine.Voipmanager.SnomTemplateEditDialog.openWindow=function(a){var c=(a.record&&a.record.id)?a.record.id:0;var b=Tine.WindowFactory.getWindow({width:500,height:350,name:Tine.Voipmanager.SnomTemplateEditDialog.prototype.windowNamePrefix+c,contentPanelConstructor:"Tine.Voipmanager.SnomTemplateEditDialog",contentPanelConstructorConfig:a});return b};Ext.namespace("Tine.Voipmanager");Tine.Voipmanager.SnomPhoneGridPanel=Ext.extend(Tine.Tinebase.widgets.app.GridPanel,{recordClass:Tine.Voipmanager.Model.SnomPhone,evalGrants:false,defaultSortInfo:{field:"description",direction:"ASC"},gridConfig:{loadMask:true,autoExpandColumn:"description"},initComponent:function(){this.recordProxy=Tine.Voipmanager.SnomPhoneBackend;this.gridConfig.columns=this.getColumns();this.initFilterToolbar();this.actionToolbarItems=this.getToolbarItems();this.plugins=this.plugins||[];this.plugins.push(this.filterToolbar);var a=new Ext.Action({text:this.app.i18n._("reset phones HTTP authentication"),handler:this.resetHttpClientInfo,iconCls:"action_resetHttpClientInfo",scope:this});var b=new Ext.Action({text:this.app.i18n._("Open phones web gui"),handler:this.openPhonesWebGui,iconCls:"action_openPhonesWebGui",scope:this});this.contextMenuItems=[a,b];Tine.Voipmanager.SnomPhoneGridPanel.superclass.initComponent.call(this)},initFilterToolbar:function(){this.filterToolbar=new Tine.widgets.grid.FilterToolbar({filterModels:[{label:_("Quick search"),field:"query",operators:["contains"]}],defaultFilter:"query",filters:[],plugins:[new Tine.widgets.grid.FilterToolbarQuickFilterPlugin()]})},getColumns:function(){return[{id:"id",header:this.app.i18n._("Id"),dataIndex:"id",width:30,sortable:true,hidden:true},{id:"macaddress",header:this.app.i18n._("MAC address"),dataIndex:"macaddress",width:50,sortable:true},{id:"description",header:this.app.i18n._("description"),dataIndex:"description",sortable:true},{id:"location_id",header:this.app.i18n._("Location"),dataIndex:"location_id",width:70,sortable:true,renderer:function(a,b,c){return c.data.location}},{id:"template_id",header:this.app.i18n._("Template"),dataIndex:"template_id",width:70,sortable:true,renderer:function(a,b,c){return c.data.template}},{id:"ipaddress",header:this.app.i18n._("IP Address"),dataIndex:"ipaddress",width:50,sortable:true},{id:"current_software",header:this.app.i18n._("Software"),dataIndex:"current_software",width:50,sortable:true},{id:"current_model",header:this.app.i18n._("current model"),dataIndex:"current_model",width:70,sortable:true,hidden:true},{id:"redirect_event",header:this.app.i18n._("redirect event"),dataIndex:"redirect_event",width:70,sortable:true,hidden:true},{id:"redirect_number",header:this.app.i18n._("redirect number"),dataIndex:"redirect_number",width:100,sortable:true,hidden:true},{id:"redirect_time",header:this.app.i18n._("redirect time"),dataIndex:"redirect_time",width:25,sortable:true,hidden:true},{id:"settings_loaded_at",header:this.app.i18n._("settings loaded at"),dataIndex:"settings_loaded_at",width:100,sortable:true,hidden:true,renderer:Tine.Tinebase.common.dateTimeRenderer},{id:"last_modified_time",header:this.app.i18n._("last modified"),dataIndex:"last_modified_time",width:100,sortable:true,hidden:true,renderer:Tine.Tinebase.common.dateTimeRenderer}]},initDetailsPanel:function(){return false},getToolbarItems:function(){return[]},resetHttpClientInfo:function(b,a){Ext.MessageBox.confirm("Confirm","Do you really want to send HTTP Client Info again?",function(g){if(g=="yes"){var d=[];var f=this.selectionModel.getSelections();for(var c=0;c<f.length;++c){d.push(f[c].id)}d=Ext.util.JSON.encode(d);Ext.Ajax.request({url:"index.php",params:{method:"Voipmanager.resetHttpClientInfo",_phoneIds:d},text:"sending HTTP Client Info to phone(s)...",success:function(i,h){},failure:function(h,i){Ext.MessageBox.alert("Failed","Some error occured while trying to send HTTP Client Info to the phone(s).")}})}},this)},openPhonesWebGui:function(f,a){var b;var d=this.selectionModel.getSelections();for(var c=0;c<d.length;++c){b=d[c].get("ipaddress");if(b&&b.length>=7){window.open("http://"+b,"_blank","width=1024,height=768,scrollbars=1")}}}});Ext.namespace("Tine.Voipmanager");Tine.Voipmanager.SnomPhoneEditDialog=Ext.extend(Tine.widgets.dialog.EditDialog,{windowNamePrefix:"SnomPhoneEditWindow_",appName:"Voipmanager",recordClass:Tine.Voipmanager.Model.SnomPhone,recordProxy:Tine.Voipmanager.SnomPhoneBackend,evalGrants:false,rightsStore:null,linesStore:null,maxLines:4,writeableFields:null,initComponent:function(){this.rightsStore=new Ext.data.JsonStore({root:"results",totalProperty:"totalcount",id:"id",fields:Tine.Voipmanager.Model.SnomPhoneRight});this.linesStore=new Ext.data.JsonStore({root:"results",totalProperty:"totalcount",id:"id",fields:Tine.Voipmanager.Model.SnomLine});Tine.Voipmanager.SnomPhoneEditDialog.superclass.initComponent.call(this)},onRecordLoad:function(){var b=this.record.get("rights")||[];this.rightsStore.loadData({results:b});var a=this.record.get("lines")||[];this.linesStore.loadData({results:a});if(this.record.get("current_model")){this.addEmptyLines(this.getMaxLines(this.record.get("current_model")))}if(this.record.get("setting_id")){this.getWriteableFields(this.record.get("setting_id"))}Tine.Voipmanager.SnomPhoneEditDialog.superclass.onRecordLoad.call(this)},onRecordUpdate:function(){Tine.Voipmanager.SnomPhoneEditDialog.superclass.onRecordUpdate.call(this);this.record.set("rights","");this.record.set("lines","");var b=[];this.rightsStore.each(function(c){b.push(c.data)});this.record.set("rights",b);var a=[];this.linesStore.each(function(c){if(c.data.asteriskline_id){a.push(c.data)}});this.record.set("lines",a)},getMaxLines:function(b){var a=new Object();a.snom300="4";a.snom320="12";a.snom360="12";a.snom370="12";if(!b){return a}return a[b]},addEmptyLines:function(a){while(this.linesStore.getCount()<a){_snomRecord=new Tine.Voipmanager.Model.SnomLine({asteriskline_id:"",id:"",idletext:"",lineactive:0,linenumber:this.linesStore.getCount()+1,snomphone_id:"",name:""});this.linesStore.add(_snomRecord)}},getWriteableFields:function(a){Ext.Ajax.request({params:{method:"Voipmanager.getSnomSetting",id:a},success:function(c,b){_data=Ext.util.JSON.decode(c.responseText);_writableFields=new Array("web_language","language","display_method","mwi_notification","mwi_dialtone","headset_device","message_led_other","global_missed_counter","scroll_outgoing","show_local_line","show_call_status","call_waiting");this.writeableFields=new Object();var d=new Object();Ext.each(_writableFields,function(f,h,g){_rwField=f.toString()+"_writable";if(_data[_rwField]=="0"||!this.record.get(f)){this.record.set(f,_data[f])}this.getForm().findField(f).setDisabled(_data[_rwField]=="0");this.getForm().findField(f).setValue(this.record.get(f))},this)},failure:function(b,c){Ext.MessageBox.alert("Failed","No settings data found.")},scope:this})},onTemplateChange:function(a,b,c){var d=false;if(b.data&&b.data.setting_id){d=b.data.setting_id}if(!d&&this.getForm().findField("template_id").store.getById(this.getForm().findField("template_id").getValue())){d=this.getForm().findField("template_id").store.getById(this.getForm().findField("template_id").getValue()).data.setting_id}if(d){this.getWriteableFields(d)}},onModelChange:function(a,c,d){while(this.linesStore.getCount()>this.getMaxLines(c.data.id)){var b=this.linesStore.getCount();this.linesStore.remove(this.linesStore.getAt((b-1)))}this.addEmptyLines(this.getMaxLines(c.data.id))},getFormItems:function(){return{xtype:"tabpanel",border:false,plain:true,activeTab:0,deferredRender:false,items:[this.getPhonePanel(),this.getSettingsPanel(),this.getLinesPanel(),this.getRightsPanel()]}},getPhonePanel:function(){return{title:this.app.i18n._("Phone"),layout:"hfit",frame:true,border:false,items:[{xtype:"columnform",formDefaults:{columnWidth:0.5,anchor:"100%",labelSeparator:""},items:[[{xtype:"textfield",name:"description",fieldLabel:this.app.i18n._("Name"),allowBlank:false},{xtype:"combo",fieldLabel:this.app.i18n._("Phone Model"),name:"current_model",mode:"local",displayField:"model",valueField:"id",triggerAction:"all",editable:false,forceSelection:true,listeners:{scope:this,select:this.onModelChange},store:Tine.Voipmanager.Data.loadPhoneModelData()}],[{xtype:"textfield",fieldLabel:this.app.i18n._("MAC Address"),name:"macaddress",maxLength:12,allowBlank:false},{xtype:"reccombo",name:"template_id",fieldLabel:this.app.i18n.n_("Template","Templates",1),displayField:"name",store:new Ext.data.Store({fields:Tine.Voipmanager.Model.SnomTemplate,proxy:Tine.Voipmanager.SnomTemplateBackend,reader:Tine.Voipmanager.SnomTemplateBackend.getReader(),remoteSort:true,sortInfo:{field:"name",dir:"ASC"}}),listeners:{scope:this,select:this.onTemplateChange}}],[{xtype:"reccombo",name:"location_id",fieldLabel:this.app.i18n.n_("Location","Locations",1),displayField:"name",store:new Ext.data.Store({fields:Tine.Voipmanager.Model.SnomLocation,proxy:Tine.Voipmanager.SnomLocationBackend,reader:Tine.Voipmanager.SnomLocationBackend.getReader(),remoteSort:true,sortInfo:{field:"name",dir:"ASC"}})}]]},{title:this.app.i18n._("infos"),autoHeight:true,xtype:"fieldset",checkboxToggle:false,items:[{xtype:"columnform",border:false,formDefaults:{columnWidth:0.5,anchor:"100%",labelSeparator:""},items:[[{xtype:"textfield",fieldLabel:this.app.i18n._("Current IP Address"),name:"ipaddress",maxLength:20,anchor:"98%",readOnly:true},{xtype:"datetimefield",fieldLabel:this.app.i18n._("Firmware last checked at"),name:"firmware_checked_at",anchor:"100%",emptyText:"never",hideTrigger:true,readOnly:true}],[{xtype:"textfield",fieldLabel:this.app.i18n._("Current Software Version"),name:"current_software",maxLength:20,anchor:"98%",readOnly:true},{xtype:"datetimefield",fieldLabel:this.app.i18n._("Settings Loaded at"),name:"settings_loaded_at",anchor:"100%",emptyText:"never",hideTrigger:true,readOnly:true}]]}]},{title:this.app.i18n._("redirection"),xtype:"fieldset",checkboxToggle:false,autoHeight:true,items:[{xtype:"columnform",border:false,formDefaults:{columnWidth:0.333,anchor:"100%",labelSeparator:""},items:[[{xtype:"combo",fieldLabel:this.app.i18n._("redirect_event"),name:"redirect_event",mode:"local",triggerAction:"all",editable:false,forceSelection:true,value:"all",listeners:{select:function(a,b,c){if(b.data.id=="time"){Ext.getCmp("redirect_time").enable()}if(b.data.id!="time"){Ext.getCmp("redirect_time").disable()}}},store:[["all",this.app.i18n._("all")],["busy",this.app.i18n._("busy")],["none",this.app.i18n._("none")],["time",this.app.i18n._("time")]]},{xtype:"textfield",fieldLabel:this.app.i18n._("redirect_number"),name:"redirect_number"},{xtype:"numberfield",fieldLabel:this.app.i18n._("redirect_time"),name:"redirect_time",id:"redirect_time",anchor:"100%"}]]}]}]}},getSettingsPanel:function(){return{title:this.app.i18n._("Settings"),id:"settingsBorderLayout",frame:true,border:false,xtype:"columnform",formDefaults:{xtype:"combo",anchor:"100%",labelSeparator:"",columnWidth:0.333,mode:"local",triggerAction:"all",editable:false,forceSelection:true,value:null},items:[[{fieldLabel:this.app.i18n._("web_language"),name:"web_language",disabled:(this.writeableFields)?this.writeableFields.web_language:true,store:[[null,this.app.i18n._("- factory default -")],["English",Locale.getTranslationData("Language","en")],["Deutsch",Locale.getTranslationData("Language","de")],["Espanol",Locale.getTranslationData("Language","es")],["Francais",Locale.getTranslationData("Language","fr")],["Italiano",Locale.getTranslationData("Language","it")],["Nederlands",Locale.getTranslationData("Language","nl")],["Portugues",Locale.getTranslationData("Language","pt")],["Suomi",Locale.getTranslationData("Language","fi")],["Svenska",Locale.getTranslationData("Language","sv")],["Dansk",Locale.getTranslationData("Language","da")],["Norsk",Locale.getTranslationData("Language","no")]]},{fieldLabel:this.app.i18n._("language"),name:"language",disabled:(this.writeableFields)?this.writeableFields.language:true,store:[[null,this.app.i18n._("- factory default -")],["English",Locale.getTranslationData("Language","en")],["English(UK)",Locale.getTranslationData("Language","en_GB")],["Deutsch",Locale.getTranslationData("Language","de")],["Espanol",Locale.getTranslationData("Language","es")],["Francais",Locale.getTranslationData("Language","fr")],["Italiano",Locale.getTranslationData("Language","it")],["Cestina",Locale.getTranslationData("Language","cs")],["Nederlands",Locale.getTranslationData("Language","nl")],["Polski",Locale.getTranslationData("Language","pl")],["Portugues",Locale.getTranslationData("Language","pt")],["Slovencina",Locale.getTranslationData("Language","sl")],["Suomi",Locale.getTranslationData("Language","fi")],["Svenska",Locale.getTranslationData("Language","sv")],["Dansk",Locale.getTranslationData("Language","da")],["Norsk",Locale.getTranslationData("Language","no")],["Japanese",Locale.getTranslationData("Language","ja")],["Chinese",Locale.getTranslationData("Language","zh")]]},{fieldLabel:this.app.i18n._("display_method"),name:"display_method",disabled:(this.writeableFields)?this.writeableFields.display_method:true,store:[[null,this.app.i18n._("- factory default -")],["full_contact",this.app.i18n._("whole url")],["display_name",this.app.i18n._("name")],["display_number",this.app.i18n._("number")],["display_name_number",this.app.i18n._("name + number")],["display_number_name",this.app.i18n._("number + name")]]}],[{fieldLabel:this.app.i18n._("call_waiting"),name:"call_waiting",disabled:(this.writeableFields)?this.writeableFields.call_waiting:true,store:[[null,this.app.i18n._("- factory default -")],["on",this.app.i18n._("on")],["visual",this.app.i18n._("visual")],["ringer",this.app.i18n._("ringer")],["off",this.app.i18n._("off")]]},{fieldLabel:this.app.i18n._("mwi_notification"),name:"mwi_notification",disabled:(this.writeableFields)?this.writeableFields.mwi_notification:true,store:[[null,this.app.i18n._("- factory default -")],["silent",this.app.i18n._("silent")],["beep",this.app.i18n._("beep")],["reminder",this.app.i18n._("reminder")]]},{fieldLabel:this.app.i18n._("mwi_dialtone"),name:"mwi_dialtone",disabled:(this.writeableFields)?this.writeableFields.mwi_dialtone:true,store:[[null,this.app.i18n._("- factory default -")],["normal",this.app.i18n._("normal")],["stutter",this.app.i18n._("stutter")]]}],[{fieldLabel:this.app.i18n._("headset_device"),name:"headset_device",disabled:(this.writeableFields)?this.writeableFields.headset_device:true,store:[[null,this.app.i18n._("- factory default -")],["none",this.app.i18n._("none")],["headset_rj",this.app.i18n._("headset_rj")]]},{fieldLabel:this.app.i18n._("message_led_other"),name:"message_led_other",disabled:(this.writeableFields)?this.writeableFields.message_led_other:true,store:[[null,this.app.i18n._("- factory default -")],["1",this.app.i18n._("on")],["0",this.app.i18n._("off")]]},{fieldLabel:this.app.i18n._("global_missed_counter"),name:"global_missed_counter",disabled:(this.writeableFields)?this.writeableFields.global_missed_counter:true,store:[[null,this.app.i18n._("- factory default -")],["1",this.app.i18n._("on")],["0",this.app.i18n._("off")]]}],[{fieldLabel:this.app.i18n._("scroll_outgoing"),name:"scroll_outgoing",disabled:(this.writeableFields)?this.writeableFields.scroll_outgoing:true,store:[[null,this.app.i18n._("- factory default -")],["1",this.app.i18n._("on")],["0",this.app.i18n._("off")]]},{fieldLabel:this.app.i18n._("show_local_line"),name:"show_local_line",disabled:(this.writeableFields)?this.writeableFields.show_local_line:true,store:[[null,this.app.i18n._("- factory default -")],["1",this.app.i18n._("on")],["0",this.app.i18n._("off")]]},{fieldLabel:this.app.i18n._("show_call_status"),name:"show_call_status",disabled:(this.writeableFields)?this.writeableFields.show_call_status:true,store:[[null,this.app.i18n._("- factory default -")],["1",this.app.i18n._("on")],["0",this.app.i18n._("off")]]}]]}},getLinesPanel:function(){var d=[];var a=[];var c=[];var b=[];var i=new Ext.ux.grid.CheckColumn({header:this.app.i18n._("lineactive"),dataIndex:"lineactive",width:25});var h=new Ext.form.ComboBox({typeAhead:true,triggerAction:"all",lazyRender:true,displayField:"name",valueField:"id",anchor:"98%",triggerAction:"all",allowBlank:false,editable:false,store:new Ext.data.Store({fields:Tine.Voipmanager.Model.AsteriskSipPeer,proxy:Tine.Voipmanager.AsteriskSipPeerBackend,remoteSort:true,sortInfo:{field:"name",dir:"ASC"}})});var g=new Ext.grid.ColumnModel([{resizable:true,id:"id",header:"line",dataIndex:"id",width:20,hidden:true},{resizable:true,id:"sipCombo",header:this.app.i18n._("sipCombo"),dataIndex:"asteriskline_id",width:80,editor:h,renderer:function(l,j,k){if(k.data&&k.data.name){return k.data.name}else{if(h.store.getById(l)){return h.store.getById(l).get("name")}else{return""}}}},{resizable:true,id:"idletext",header:this.app.i18n._("Idle Text"),dataIndex:"idletext",width:40,editor:new Ext.form.TextField({allowBlank:false,allowNegative:false,maxLength:60})},i]);var f=new Ext.grid.EditorGridPanel({region:"center",id:"Voipmanager_PhoneLines_Grid",store:this.linesStore,cm:g,autoSizeColumns:false,plugins:i,clicksToEdit:1,enableColLock:false,loadMask:true,autoExpandColumn:"idleText",border:false,view:new Ext.grid.GridView({autoFill:true,forceFit:true,ignoreAdd:true,emptyText:"No software to display"})});return{title:this.app.i18n._("Lines"),layout:"fit",items:[f]}},getRightsPanel:function(){return{title:this.app.i18n._("Users"),layout:"fit",items:new Tine.widgets.account.PickerGridPanel({accountPickerType:"both",store:this.rightsStore,hasAccountPrefix:true})}}});Tine.Voipmanager.SnomPhoneEditDialog.openWindow=function(a){var c=(a.record&&a.record.id)?a.record.id:0;var b=Tine.WindowFactory.getWindow({width:700,height:450,name:Tine.Voipmanager.SnomPhoneEditDialog.prototype.windowNamePrefix+c,contentPanelConstructor:"Tine.Voipmanager.SnomPhoneEditDialog",contentPanelConstructorConfig:a});return b};Ext.namespace("Tine.Voipmanager");Tine.Voipmanager.SnomLocationGridPanel=Ext.extend(Tine.Tinebase.widgets.app.GridPanel,{recordClass:Tine.Voipmanager.Model.SnomLocation,evalGrants:false,defaultSortInfo:{field:"description",direction:"ASC"},gridConfig:{loadMask:true,autoExpandColumn:"description"},initComponent:function(){this.recordProxy=Tine.Voipmanager.SnomLocationBackend;this.gridConfig.columns=this.getColumns();this.initFilterToolbar();this.actionToolbarItems=this.getToolbarItems();this.plugins=this.plugins||[];this.plugins.push(this.filterToolbar);Tine.Voipmanager.SnomLocationGridPanel.superclass.initComponent.call(this)},initFilterToolbar:function(){this.filterToolbar=new Tine.widgets.grid.FilterToolbar({filterModels:[{label:_("Quick search"),field:"query",operators:["contains"]}],defaultFilter:"query",filters:[],plugins:[new Tine.widgets.grid.FilterToolbarQuickFilterPlugin()]})},getColumns:function(){return[{id:"firmware_interval",header:this.app.i18n._("FW Interval"),dataIndex:"firmware_interval",width:10,sortable:true,hidden:true},{id:"update_policy",header:this.app.i18n._("Update Policy"),dataIndex:"update_policy",width:30,sortable:true,hidden:true},{id:"registrar",header:this.app.i18n._("Registrar"),dataIndex:"registrar",width:100,sortable:true,hidden:true},{id:"admin_mode",header:this.app.i18n._("Admin Mode"),dataIndex:"admin_mode",width:10,sortable:true,hidden:true},{id:"ntp_server",header:this.app.i18n._("NTP Server"),dataIndex:"ntp_server",width:50,sortable:true,hidden:true},{id:"webserver_type",header:this.app.i18n._("Webserver Type"),dataIndex:"webserver_type",width:30,sortable:true,hidden:true},{id:"https_port",header:this.app.i18n._("HTTPS Port"),dataIndex:"https_port",width:10,sortable:true,hidden:true},{id:"http_user",header:this.app.i18n._("HTTP User"),dataIndex:"http_user",width:15,sortable:true,hidden:true},{id:"id",header:this.app.i18n._("id"),dataIndex:"id",width:10,sortable:true,hidden:true},{id:"name",header:this.app.i18n._("Name"),dataIndex:"name",width:80,sortable:true},{id:"description",header:this.app.i18n._("Description"),dataIndex:"description",width:350,sortable:true},{id:"filter_registrar",header:this.app.i18n._("Filter Registrar"),dataIndex:"filter_registrar",width:10,sortable:true,hidden:true},{id:"callpickup_dialoginfo",header:this.app.i18n._("CP Dialoginfo"),dataIndex:"callpickup_dialoginfo",width:10,sortable:true,hidden:true},{id:"pickup_indication",header:this.app.i18n._("Pickup Indic."),dataIndex:"pickup_indication",width:10,sortable:true,hidden:true}]},initDetailsPanel:function(){return false},getToolbarItems:function(){return[]}});Ext.namespace("Tine.Voipmanager");Tine.Voipmanager.SnomLocationEditDialog=Ext.extend(Tine.widgets.dialog.EditDialog,{windowNamePrefix:"SnomLocationEditWindow_",appName:"Voipmanager",recordClass:Tine.Voipmanager.Model.SnomLocation,recordProxy:Tine.Voipmanager.SnomLocationBackend,evalGrants:false,getFormItems:function(){return{layout:"form",border:false,defaults:{anchor:"100%"},items:[{xtype:"textfield",fieldLabel:this.app.i18n._("Name"),name:"name",maxLength:80,allowBlank:false},{xtype:"textarea",name:"description",fieldLabel:this.app.i18n._("Description"),grow:false,preventScrollbars:false,height:30},{xtype:"textfield",fieldLabel:this.app.i18n._("Registrar"),name:"registrar",maxLength:255,allowBlank:false},{xtype:"textfield",vtype:"url",fieldLabel:this.app.i18n._("Base Download URL"),name:"base_download_url",maxLength:255,allowBlank:false},{layout:"column",border:false,anchor:"100%",items:[{columnWidth:0.5,layout:"form",border:false,anchor:"100%",items:[{xtype:"combo",fieldLabel:this.app.i18n._("Update Policy"),name:"update_policy",mode:"local",displayField:"policy",valueField:"key",anchor:"98%",triggerAction:"all",allowBlank:false,editable:false,store:new Ext.data.SimpleStore({fields:["key","policy"],data:[["auto_update","auto update"],["ask_for_update","ask for update"],["never_update_firm","never update firm"],["never_update_boot","never update boot"],["settings_only","settings only"],["never_update","never update"]]})}]},{columnWidth:0.5,layout:"form",border:false,anchor:"100%",items:[{xtype:"numberfield",fieldLabel:this.app.i18n._("Firmware Interval"),name:"firmware_interval",maxLength:11,anchor:"100%",allowBlank:false}]}]},{layout:"column",border:false,anchor:"100%",items:[{columnWidth:0.33,layout:"form",border:false,anchor:"100%",items:[{xtype:"combo",fieldLabel:this.app.i18n._("tone_scheme"),name:"tone_scheme",id:"tone_scheme",mode:"local",anchor:"98%",triggerAction:"all",editable:false,forceSelection:true,value:"GER",store:[["AUS",Locale.getTranslationData("CountryList","AU")],["AUT",Locale.getTranslationData("CountryList","AT")],["CHN",Locale.getTranslationData("CountryList","CN")],["DNK",Locale.getTranslationData("CountryList","DK")],["FRA",Locale.getTranslationData("CountryList","FR")],["GER",Locale.getTranslationData("CountryList","DE")],["GBR",Locale.getTranslationData("CountryList","GB")],["IND",Locale.getTranslationData("CountryList","IN")],["ITA",Locale.getTranslationData("CountryList","IT")],["JPN",Locale.getTranslationData("CountryList","JP")],["MEX",Locale.getTranslationData("CountryList","MX")],["NLD",Locale.getTranslationData("CountryList","NL")],["NOR",Locale.getTranslationData("CountryList","NO")],["NZL",Locale.getTranslationData("CountryList","NZ")],["ESP",Locale.getTranslationData("CountryList","ES")],["SWE",Locale.getTranslationData("CountryList","SE")],["SWI",Locale.getTranslationData("CountryList","CH")],["USA",Locale.getTranslationData("CountryList","US")]]}]},{columnWidth:0.33,layout:"form",border:false,anchor:"100%",items:[{xtype:"combo",fieldLabel:this.app.i18n._("date_us_format"),name:"date_us_format",id:"date_us_format",mode:"local",anchor:"98%",triggerAction:"all",editable:false,forceSelection:true,value:"1",store:[["1",this.app.i18n._("on")],["0",this.app.i18n._("off")]]}]},{columnWidth:0.33,layout:"form",border:false,anchor:"100%",items:[{xtype:"combo",fieldLabel:this.app.i18n._("time_24_format"),name:"time_24_format",id:"time_24_format",mode:"local",anchor:"100%",triggerAction:"all",editable:false,forceSelection:true,value:"1",store:[["1",this.app.i18n._("on")],["0",this.app.i18n._("off")]]}]}]},{xtype:"fieldset",checkboxToggle:false,checkboxName:"ntpSetting",id:"ntp_setting",title:this.app.i18n._("NTP Server"),autoHeight:true,anchor:"100%",defaults:{anchor:"100%"},items:[{layout:"column",border:false,anchor:"100%",items:[{columnWidth:0.7,layout:"form",border:false,anchor:"100%",items:[{xtype:"textfield",fieldLabel:this.app.i18n._("NTP Server Address"),name:"ntp_server",maxLength:255,anchor:"98%",allowBlank:false}]},{columnWidth:0.3,layout:"form",border:false,anchor:"100%",items:[{xtype:"numberfield",fieldLabel:this.app.i18n._("NTP Refresh"),name:"ntp_refresh",maxLength:20,anchor:"100%"}]}]},new Ext.form.ComboBox({fieldLabel:this.app.i18n._("Timezone"),id:"timezone",name:"timezone",mode:"local",displayField:"timezone",valueField:"key",anchor:"98%",triggerAction:"all",allowBlank:false,editable:false,store:Tine.Voipmanager.Data.loadTimezoneData()})]},{xtype:"fieldset",checkboxToggle:true,checkboxName:"admin_mode",id:"admin_mode_switch",listeners:{expand:function(){Ext.getCmp("admin_mode").setValue("true")},collapse:function(){Ext.getCmp("admin_mode").setValue("false")}},title:this.app.i18n._("Enable admin mode"),autoHeight:true,anchor:"100%",defaults:{anchor:"100%"},items:[{xtype:"hidden",name:"admin_mode",id:"admin_mode"},{xtype:"numberfield",fieldLabel:this.app.i18n._("Admin Mode Password"),name:"admin_mode_password",maxLength:20,anchor:"100%"}]},{xtype:"fieldset",checkboxToggle:true,checkboxName:"enableWebserver",title:this.app.i18n._("Enable webserver"),autoHeight:true,id:"enable_webserver_switch",listeners:{collapse:function(){Ext.getCmp("webserver_type").setValue("off")},expand:function(){if(Ext.getCmp("webserver_type").getValue()=="off"){Ext.getCmp("webserver_type").setValue("http_https")}}},defaults:{anchor:"100%"},items:[{layout:"column",border:false,anchor:"100%",items:[{columnWidth:0.5,layout:"form",border:false,anchor:"100%",items:[{xtype:"combo",fieldLabel:this.app.i18n._("Webserver Type"),name:"webserver_type",id:"webserver_type",mode:"local",displayField:"wwwtype",valueField:"key",listeners:{select:function(a,c,b){if(c.data.key=="https"){Ext.getCmp("http_port").disable();Ext.getCmp("https_port").enable()}if(c.data.key=="http"){Ext.getCmp("http_port").enable();Ext.getCmp("https_port").disable()}if(c.data.key=="http_https"){Ext.getCmp("http_port").enable();Ext.getCmp("https_port").enable()}}},anchor:"98%",triggerAction:"all",allowBlank:false,editable:false,store:new Ext.data.SimpleStore({fields:["key","wwwtype"],data:[["https","https"],["http","http"],["http_https","http https"]]})}]},{columnWidth:0.5,layout:"form",border:false,anchor:"100%",items:[{layout:"column",border:false,anchor:"100%",items:[{columnWidth:0.5,layout:"form",border:false,anchor:"100%",items:[{xtype:"textfield",fieldLabel:this.app.i18n._("HTTP Port"),name:"http_port",id:"http_port",maxLength:6,anchor:"98%",allowBlank:true}]},{columnWidth:0.5,layout:"form",border:false,anchor:"100%",items:[{xtype:"textfield",fieldLabel:this.app.i18n._("HTTPS Port"),name:"https_port",id:"https_port",maxLength:6,anchor:"100%",allowBlank:true}]}]}]}]},{layout:"column",border:false,anchor:"100%",items:[{columnWidth:0.5,layout:"form",border:false,anchor:"100%",items:[{xtype:"textfield",fieldLabel:this.app.i18n._("HTTP User"),name:"http_user",maxLength:20,anchor:"98%"}]},{columnWidth:0.5,layout:"form",border:false,anchor:"100%",items:[{xtype:"textfield",fieldLabel:this.app.i18n._("HTTP Password"),name:"http_pass",inputType:"textfield",maxLength:20,anchor:"100%"}]}]}]}]}}});Tine.Voipmanager.SnomLocationEditDialog.openWindow=function(a){var c=(a.record&&a.record.id)?a.record.id:0;var b=Tine.WindowFactory.getWindow({width:800,height:470,name:Tine.Voipmanager.SnomLocationEditDialog.prototype.windowNamePrefix+c,contentPanelConstructor:"Tine.Voipmanager.SnomLocationEditDialog",contentPanelConstructorConfig:a});return b};Ext.namespace("Tine.Voipmanager");Tine.Voipmanager.SnomSettingGridPanel=Ext.extend(Tine.Tinebase.widgets.app.GridPanel,{recordClass:Tine.Voipmanager.Model.SnomSetting,evalGrants:false,defaultSortInfo:{field:"description",direction:"ASC"},gridConfig:{loadMask:true,autoExpandColumn:"description"},initComponent:function(){this.recordProxy=Tine.Voipmanager.SnomSettingBackend;this.gridConfig.columns=this.getColumns();this.initFilterToolbar();this.actionToolbarItems=this.getToolbarItems();this.plugins=this.plugins||[];this.plugins.push(this.filterToolbar);Tine.Voipmanager.SnomSettingGridPanel.superclass.initComponent.call(this)},initFilterToolbar:function(){this.filterToolbar=new Tine.widgets.grid.FilterToolbar({filterModels:[{label:_("Quick search"),field:"query",operators:["contains"]}],defaultFilter:"query",filters:[],plugins:[new Tine.widgets.grid.FilterToolbarQuickFilterPlugin()]})},getColumns:function(){return[{id:"id",header:this.app.i18n._("Id"),dataIndex:"id",width:30,sortable:true,hidden:true},{id:"name",header:this.app.i18n._("name"),dataIndex:"name",width:150,sortable:true},{id:"description",header:this.app.i18n._("description"),dataIndex:"description",width:200,sortable:true},{id:"web_language",header:this.app.i18n._("web_language"),dataIndex:"web_language",width:10,sortable:true,hidden:true},{id:"language",header:this.app.i18n._("language"),dataIndex:"language",width:10,sortable:true,hidden:true},{id:"display_method",header:this.app.i18n._("display_method"),dataIndex:"display_method",width:10,sortable:true,hidden:true},{id:"mwi_notification",header:this.app.i18n._("mwi_notification"),dataIndex:"mwi_notification",width:10,sortable:true,hidden:true},{id:"mwi_dialtone",header:this.app.i18n._("mwi_dialtone"),dataIndex:"mwi_dialtone",width:10,sortable:true,hidden:true},{id:"headset_device",header:this.app.i18n._("headset_device"),dataIndex:"headset_device",width:10,sortable:true,hidden:true},{id:"message_led_other",header:this.app.i18n._("message_led_other"),dataIndex:"message_led_other",width:10,sortable:true,hidden:true},{id:"global_missed_counter",header:this.app.i18n._("global_missed_counter"),dataIndex:"global_missed_counter",width:10,sortable:true,hidden:true},{id:"scroll_outgoing",header:this.app.i18n._("scroll_outgoing"),dataIndex:"scroll_outgoing",width:10,sortable:true,hidden:true},{id:"show_local_line",header:this.app.i18n._("show_local_line"),dataIndex:"show_local_line",width:10,sortable:true,hidden:true},{id:"show_call_status",header:this.app.i18n._("show_call_status"),dataIndex:"show_call_status",width:10,sortable:true,hidden:true},{id:"call_waiting",header:this.app.i18n._("call_waiting"),dataIndex:"call_waiting",width:25,sortable:true,hidden:true}]},initDetailsPanel:function(){return false},getToolbarItems:function(){return[]}});Ext.namespace("Tine.Voipmanager");Tine.Voipmanager.SnomSettingEditDialog=Ext.extend(Tine.widgets.dialog.EditDialog,{windowNamePrefix:"SnomSettingEditWindow_",appName:"Voipmanager",recordClass:Tine.Voipmanager.Model.SnomSetting,recordProxy:Tine.Voipmanager.SnomSettingBackend,evalGrants:false,writableFields:["web_language_writable","language_writable","display_method_writable","call_waiting_writable","mwi_notification_writable","mwi_dialtone_writable","headset_device_writable","message_led_other_writable","global_missed_counter_writable","scroll_outgoing_writable","show_local_line_writable","show_call_status_writable"],onRecordLoad:function(){Ext.each(this.writableFields,function(a,d,b){var c=a;c=c.replace(/_writable/,"");if(this.record.get(a)=="0"){this.getForm().findField(c).onTrigger2Click()}},this);Tine.Voipmanager.SnomPhoneEditDialog.superclass.onRecordLoad.call(this)},onRecordUpdate:function(){Tine.Voipmanager.SnomPhoneEditDialog.superclass.onRecordUpdate.call(this);Ext.each(this.writableFields,function(a,d,b){if(Ext.getCmp(a)){var c=Ext.getCmp(a).getValue()}this.record.set(a,c)},this)},getFormItems:function(){return{xtype:"tabpanel",border:false,plain:true,activeTab:0,items:[{title:this.app.i18n._("Settings"),frame:true,border:false,xtype:"columnform",formDefaults:{columnWidth:0.333,labelSeparator:"",xtype:"lockCombo",mode:"local",displayField:"name",valueField:"id",anchor:"100%",triggerAction:"all",editable:false,forceSelection:true},items:[[{columnWidth:0.35,xtype:"textfield",fieldLabel:this.app.i18n._("name"),name:"name",maxLength:150,allowBlank:false,editable:true},{columnWidth:0.65,xtype:"textfield",name:"description",fieldLabel:this.app.i18n._("Description"),maxLength:255,editable:true}],[{fieldLabel:this.app.i18n._("web_language"),name:"web_language",hiddenFieldId:"web_language_writable",store:new Ext.data.SimpleStore({id:"id",fields:["id","name"],data:[[null,this.app.i18n._("- factory default -")],["English",Locale.getTranslationData("Language","en")],["Deutsch",Locale.getTranslationData("Language","de")],["Espanol",Locale.getTranslationData("Language","es")],["Francais",Locale.getTranslationData("Language","fr")],["Italiano",Locale.getTranslationData("Language","it")],["Nederlands",Locale.getTranslationData("Language","nl")],["Portugues",Locale.getTranslationData("Language","pt")],["Suomi",Locale.getTranslationData("Language","fi")],["Svenska",Locale.getTranslationData("Language","sv")],["Dansk",Locale.getTranslationData("Language","da")],["Norsk",Locale.getTranslationData("Language","no")]]})},{fieldLabel:this.app.i18n._("language"),name:"language",hiddenFieldId:"language_writable",store:new Ext.data.SimpleStore({id:"id",fields:["id","name"],data:[[null,this.app.i18n._("- factory default -")],["English",Locale.getTranslationData("Language","en")],["English(UK)",Locale.getTranslationData("Language","en_GB")],["Deutsch",Locale.getTranslationData("Language","de")],["Espanol",Locale.getTranslationData("Language","es")],["Francais",Locale.getTranslationData("Language","fr")],["Italiano",Locale.getTranslationData("Language","it")],["Cestina",Locale.getTranslationData("Language","cs")],["Nederlands",Locale.getTranslationData("Language","nl")],["Polski",Locale.getTranslationData("Language","pl")],["Portugues",Locale.getTranslationData("Language","pt")],["Slovencina",Locale.getTranslationData("Language","sl")],["Suomi",Locale.getTranslationData("Language","fi")],["Svenska",Locale.getTranslationData("Language","sv")],["Dansk",Locale.getTranslationData("Language","da")],["Norsk",Locale.getTranslationData("Language","no")],["Japanese",Locale.getTranslationData("Language","ja")],["Chinese",Locale.getTranslationData("Language","zh")]]})},{fieldLabel:this.app.i18n._("display_method"),name:"display_method",hiddenFieldId:"display_method_writable",store:new Ext.data.SimpleStore({id:"id",fields:["id","name"],data:[[null,this.app.i18n._("- factory default -")],["full_contact",this.app.i18n._("whole url")],["display_name",this.app.i18n._("name")],["display_number",this.app.i18n._("number")],["display_name_number",this.app.i18n._("name + number")],["display_number_name",this.app.i18n._("number + name")]]})}],[{fieldLabel:this.app.i18n._("call_waiting"),name:"call_waiting",hiddenFieldId:"call_waiting_writable",store:new Ext.data.SimpleStore({id:"id",fields:["id","name"],data:[[null,this.app.i18n._("- factory default -")],["on",this.app.i18n._("on")],["visual",this.app.i18n._("visual")],["ringer",this.app.i18n._("ringer")],["off",this.app.i18n._("off")]]})},{fieldLabel:this.app.i18n._("mwi_notification"),name:"mwi_notification",hiddenFieldId:"mwi_notification_writable",store:new Ext.data.SimpleStore({id:"id",fields:["id","name"],data:[[null,this.app.i18n._("- factory default -")],["silent",this.app.i18n._("silent")],["beep",this.app.i18n._("beep")],["reminder",this.app.i18n._("reminder")]]})},{fieldLabel:this.app.i18n._("mwi_dialtone"),name:"mwi_dialtone",hiddenFieldId:"mwi_dialtone_writable",store:new Ext.data.SimpleStore({id:"id",fields:["id","name"],data:[[null,this.app.i18n._("- factory default -")],["normal",this.app.i18n._("normal")],["stutter",this.app.i18n._("stutter")]]})}],[{fieldLabel:this.app.i18n._("headset_device"),name:"headset_device",hiddenFieldId:"headset_device_writable",store:new Ext.data.SimpleStore({id:"id",fields:["id","name"],data:[[null,this.app.i18n._("- factory default -")],["none",this.app.i18n._("none")],["headset_rj",this.app.i18n._("headset_rj")]]})},{fieldLabel:this.app.i18n._("message_led_other"),name:"message_led_other",hiddenFieldId:"message_led_other_writable",store:new Ext.data.SimpleStore({id:"id",fields:["id","name"],data:[[null,this.app.i18n._("- factory default -")],["1",this.app.i18n._("on")],["0",this.app.i18n._("off")]]})},{fieldLabel:this.app.i18n._("global_missed_counter"),name:"global_missed_counter",hiddenFieldId:"global_missed_counter_writable",store:new Ext.data.SimpleStore({id:"id",fields:["id","name"],data:[[null,this.app.i18n._("- factory default -")],["1",this.app.i18n._("on")],["0",this.app.i18n._("off")]]})}],[{fieldLabel:this.app.i18n._("scroll_outgoing"),name:"scroll_outgoing",hiddenFieldId:"scroll_outgoing_writable",store:new Ext.data.SimpleStore({id:"id",fields:["id","name"],data:[[null,this.app.i18n._("- factory default -")],["1",this.app.i18n._("on")],["0",this.app.i18n._("off")]]})},{fieldLabel:this.app.i18n._("show_local_line"),name:"show_local_line",hiddenFieldId:"show_local_line_writable",store:new Ext.data.SimpleStore({id:"id",fields:["id","name"],data:[[null,this.app.i18n._("- factory default -")],["1",this.app.i18n._("on")],["0",this.app.i18n._("off")]]})},{fieldLabel:this.app.i18n._("show_call_status"),name:"show_call_status",hiddenFieldId:"show_call_status_writable",store:new Ext.data.SimpleStore({id:"id",fields:["id","name"],data:[[null,this.app.i18n._("- factory default -")],["1",this.app.i18n._("on")],["0",this.app.i18n._("off")]]})}]]}]}}});Tine.Voipmanager.SnomSettingEditDialog.openWindow=function(a){var c=(a.record&&a.record.id)?a.record.id:0;var b=Tine.WindowFactory.getWindow({width:800,height:470,name:Tine.Voipmanager.SnomSettingEditDialog.prototype.windowNamePrefix+c,contentPanelConstructor:"Tine.Voipmanager.SnomSettingEditDialog",contentPanelConstructorConfig:a});return b};Ext.namespace("Tine.Voipmanager");Tine.Voipmanager.AsteriskSipPeerGridPanel=Ext.extend(Tine.Tinebase.widgets.app.GridPanel,{recordClass:Tine.Voipmanager.Model.AsteriskSipPeer,evalGrants:false,defaultSortInfo:{field:"name",direction:"ASC"},gridConfig:{loadMask:true,autoExpandColumn:"callerid"},initComponent:function(){this.recordProxy=Tine.Voipmanager.AsteriskSipPeerBackend;this.gridConfig.columns=this.getColumns();this.initFilterToolbar();this.actionToolbarItems=this.getToolbarItems();this.plugins=this.plugins||[];this.plugins.push(this.filterToolbar);Tine.Voipmanager.AsteriskSipPeerGridPanel.superclass.initComponent.call(this)},initFilterToolbar:function(){this.filterToolbar=new Tine.widgets.grid.FilterToolbar({filterModels:[{label:_("Quick search"),field:"query",operators:["contains"]},{label:this.app.i18n._("Name"),field:"name"}],defaultFilter:"query",filters:[],plugins:[new Tine.widgets.grid.FilterToolbarQuickFilterPlugin()]})},getColumns:function(){return[{id:"id",header:this.app.i18n._("Id"),dataIndex:"id",width:30,sortable:true,hidden:true},{id:"name",header:this.app.i18n._("name"),dataIndex:"name",width:50,sortable:true},{id:"accountcode",header:this.app.i18n._("account code"),dataIndex:"accountcode",width:30,sortable:true,hidden:true},{id:"amaflags",header:this.app.i18n._("ama flags"),dataIndex:"amaflags",width:30,sortable:true,hidden:true},{id:"callgroup",header:this.app.i18n._("call group"),dataIndex:"callgroup",width:30,sortable:true,hidden:true},{id:"callerid",header:this.app.i18n._("caller id"),dataIndex:"callerid",width:80,sortable:true},{id:"canreinvite",header:this.app.i18n._("can reinvite"),dataIndex:"canreinvite",width:30,sortable:true,hidden:true},{id:"context",header:this.app.i18n._("context"),dataIndex:"context",width:50,sortable:true},{id:"defaultip",header:this.app.i18n._("default ip"),dataIndex:"defaultip",width:30,sortable:true,hidden:true},{id:"dtmfmode",header:this.app.i18n._("dtmf mode"),dataIndex:"dtmfmode",width:30,sortable:true,hidden:true},{id:"fromuser",header:this.app.i18n._("from user"),dataIndex:"fromuser",width:30,sortable:true,hidden:true},{id:"fromdomain",header:this.app.i18n._("from domain"),dataIndex:"fromdomain",width:30,sortable:true,hidden:true},{id:"fullcontact",header:this.app.i18n._("full contact"),dataIndex:"fullcontact",width:200,sortable:true,hidden:true},{id:"host",header:this.app.i18n._("host"),dataIndex:"host",width:30,sortable:true,hidden:true},{id:"insecure",header:this.app.i18n._("insecure"),dataIndex:"insecure",width:30,sortable:true,hidden:true},{id:"language",header:this.app.i18n._("language"),dataIndex:"language",width:30,sortable:true,hidden:true},{id:"mailbox",header:this.app.i18n._("mailbox"),dataIndex:"mailbox",width:30,sortable:true},{id:"md5secret",header:this.app.i18n._("md5 secret"),dataIndex:"md5secret",width:30,sortable:true,hidden:true},{id:"nat",header:this.app.i18n._("nat"),dataIndex:"nat",width:30,sortable:true,hidden:true},{id:"deny",header:this.app.i18n._("deny"),dataIndex:"deny",width:30,sortable:true,hidden:true},{id:"permit",header:this.app.i18n._("permit"),dataIndex:"permit",width:30,sortable:true,hidden:true},{id:"mask",header:this.app.i18n._("mask"),dataIndex:"mask",width:30,sortable:true,hidden:true},{id:"pickupgroup",header:this.app.i18n._("pickup group"),dataIndex:"pickupgroup",width:40,sortable:true},{id:"port",header:this.app.i18n._("port"),dataIndex:"port",width:30,sortable:true,hidden:true},{id:"qualify",header:this.app.i18n._("qualify"),dataIndex:"qualify",width:30,sortable:true,hidden:true},{id:"restrictcid",header:this.app.i18n._("restrict cid"),dataIndex:"restrictcid",width:30,sortable:true,hidden:true},{id:"rtptimeout",header:this.app.i18n._("rtp timeout"),dataIndex:"rtptimeout",width:30,sortable:true,hidden:true},{id:"rtpholdtimeout",header:this.app.i18n._("rtp hold timeout"),dataIndex:"rtpholdtimeout",width:30,sortable:true,hidden:true},{id:"secret",header:this.app.i18n._("secret"),dataIndex:"secret",width:30,sortable:true,hidden:true},{id:"type",header:this.app.i18n._("type"),dataIndex:"type",width:30,sortable:true},{id:"defaultuser",header:this.app.i18n._("defaultuser"),dataIndex:"defaultuser",width:30,sortable:true,hidden:true},{id:"disallow",header:this.app.i18n._("disallow"),dataIndex:"disallow",width:30,sortable:true,hidden:true},{id:"allow",header:this.app.i18n._("allow"),dataIndex:"allow",width:30,sortable:true,hidden:true},{id:"musiconhold",header:this.app.i18n._("music on hold"),dataIndex:"musiconhold",width:30,sortable:true,hidden:true},{id:"regseconds",header:this.app.i18n._("reg seconds"),dataIndex:"regseconds",width:50,sortable:true,renderer:Tine.Tinebase.common.dateTimeRenderer},{id:"ipaddr",header:this.app.i18n._("ip address"),dataIndex:"ipaddr",width:30,sortable:true,hidden:true},{id:"regexten",header:this.app.i18n._("reg exten"),dataIndex:"regexten",width:30,sortable:true,hidden:true},{id:"cancallforward",header:this.app.i18n._("can call forward"),dataIndex:"cancallforward",width:30,sortable:true,hidden:true},{id:"setvar",header:this.app.i18n._("set var"),dataIndex:"setvar",width:30,sortable:true,hidden:true},{id:"notifyringing",header:this.app.i18n._("notify ringing"),dataIndex:"notifyringing",width:30,sortable:true,hidden:true},{id:"useclientcode",header:this.app.i18n._("use client code"),dataIndex:"useclientcode",width:30,sortable:true,hidden:true},{id:"authuser",header:this.app.i18n._("auth user"),dataIndex:"authuser",width:30,sortable:true,hidden:true},{id:"call-limit",header:this.app.i18n._("call limit"),dataIndex:"call-limit",width:30,sortable:true,hidden:true},{id:"busy-level",header:this.app.i18n._("busy level"),dataIndex:"busy-level",width:30,sortable:true,hidden:true}]},initDetailsPanel:function(){return false},getToolbarItems:function(){return[]}});Ext.namespace("Tine.Voipmanager");Tine.Voipmanager.AsteriskSipPeerEditDialog=Ext.extend(Tine.widgets.dialog.EditDialog,{windowNamePrefix:"AsteriskSipPeerEditWindow_",appName:"Voipmanager",recordClass:Tine.Voipmanager.Model.AsteriskSipPeer,recordProxy:Tine.Voipmanager.AsteriskSipPeerBackend,evalGrants:false,getFormItems:function(){return{xtype:"tabpanel",border:false,plain:true,activeTab:0,items:[{title:this.app.i18n._("General"),border:false,frame:true,anchor:"100%",xtype:"columnform",items:[[{xtype:"textfield",fieldLabel:this.app.i18n._("Name"),name:"name",maxLength:80,anchor:"98%",allowBlank:false},{xtype:"reccombo",name:"context_id",fieldLabel:this.app.i18n._("Context"),valueField:"id",displayField:"name",store:new Ext.data.Store({fields:Tine.Voipmanager.Model.AsteriskContext,proxy:Tine.Voipmanager.AsteriskContextBackend,reader:Tine.Voipmanager.AsteriskContextBackend.getReader(),remoteSort:true,sortInfo:{field:"name",dir:"ASC"}})},{xtype:"combo",fieldLabel:this.app.i18n._("Type"),name:"type",mode:"local",anchor:"98%",triggerAction:"all",editable:false,forceSelection:true,value:"peer",store:[["friend",this.app.i18n._("friend")],["user",this.app.i18n._("user")],["peer",this.app.i18n._("peer")]]}],[{xtype:"textfield",fieldLabel:this.app.i18n._("Secret"),name:"secret",maxLength:80,anchor:"98%",allowBlank:false},{xtype:"textfield",fieldLabel:this.app.i18n._("Callerid"),name:"callerid",maxLength:80,anchor:"100%",allowBlank:true},{xtype:"textfield",fieldLabel:this.app.i18n._("Mailbox"),name:"mailbox",maxLength:50,anchor:"98%",allowBlank:true}],[{xtype:"textfield",fieldLabel:this.app.i18n._("Callgroup"),name:"callgroup",maxLength:10,anchor:"98%",allowBlank:true},{xtype:"textfield",fieldLabel:this.app.i18n._("Pickup group"),name:"pickupgroup",maxLength:10,anchor:"98%",allowBlank:true},{xtype:"textfield",fieldLabel:this.app.i18n._("Accountcode"),name:"accountcode",maxLength:20,anchor:"98%",allowBlank:true}],[{xtype:"textfield",fieldLabel:this.app.i18n._("Language"),name:"language",maxLength:2,anchor:"98%",allowBlank:true},{xtype:"combo",fieldLabel:this.app.i18n._("NAT"),name:"nat",mode:"local",anchor:"98%",triggerAction:"all",editable:false,forceSelection:true,value:"no",store:[["no",this.app.i18n._("off")],["yes",this.app.i18n._("on")]]},{xtype:"combo",fieldLabel:this.app.i18n._("Qualify"),name:"qualify",mode:"local",anchor:"98%",triggerAction:"all",editable:false,forceSelection:true,value:"no",store:[["no",this.app.i18n._("off")],["yes",this.app.i18n._("on")]]}]]}]}}});Tine.Voipmanager.AsteriskSipPeerEditDialog.openWindow=function(a){var c=(a.record&&a.record.id)?a.record.id:0;var b=Tine.WindowFactory.getWindow({width:800,height:470,name:Tine.Voipmanager.AsteriskSipPeerEditDialog.prototype.windowNamePrefix+c,contentPanelConstructor:"Tine.Voipmanager.AsteriskSipPeerEditDialog",contentPanelConstructorConfig:a});return b};Ext.namespace("Tine.Voipmanager");Tine.Voipmanager.AsteriskContextGridPanel=Ext.extend(Tine.Tinebase.widgets.app.GridPanel,{recordClass:Tine.Voipmanager.Model.AsteriskContext,evalGrants:false,defaultSortInfo:{field:"name",direction:"ASC"},gridConfig:{loadMask:true,autoExpandColumn:"description"},initComponent:function(){this.recordProxy=Tine.Voipmanager.AsteriskContextBackend;this.gridConfig.columns=this.getColumns();this.initFilterToolbar();this.actionToolbarItems=this.getToolbarItems();this.plugins=this.plugins||[];this.plugins.push(this.filterToolbar);Tine.Voipmanager.AsteriskContextGridPanel.superclass.initComponent.call(this)},initFilterToolbar:function(){this.filterToolbar=new Tine.widgets.grid.FilterToolbar({filterModels:[{label:_("Quick search"),field:"query",operators:["contains"]}],defaultFilter:"query",filters:[],plugins:[new Tine.widgets.grid.FilterToolbarQuickFilterPlugin()]})},getColumns:function(){return[{id:"id",header:this.app.i18n._("id"),width:10,sortable:true,hidden:true,dataIndex:"id"},{id:"name",header:this.app.i18n._("Name"),width:100,sortable:true,dataIndex:"name",renderer:function(a){return Ext.util.Format.htmlEncode(a)}},{id:"description",header:this.app.i18n._("Description"),width:350,sortable:true,dataIndex:"description",renderer:function(a){return Ext.util.Format.htmlEncode(a)}}]},initDetailsPanel:function(){return false},getToolbarItems:function(){return[]}});Ext.namespace("Tine.Voipmanager");Tine.Voipmanager.AsteriskContextEditDialog=Ext.extend(Tine.widgets.dialog.EditDialog,{windowNamePrefix:"AsteriskContextEditWindow_",appName:"Voipmanager",recordClass:Tine.Voipmanager.Model.AsteriskContext,recordProxy:Tine.Voipmanager.AsteriskContextBackend,evalGrants:false,getFormItems:function(){return{layout:"form",border:false,items:[{xtype:"textfield",fieldLabel:this.app.i18n._("Name"),name:"name",maxLength:80,anchor:"100%",allowBlank:false},{xtype:"textarea",name:"description",fieldLabel:this.app.i18n._("Description"),grow:false,preventScrollbars:false,anchor:"100%",height:40}]}}});Tine.Voipmanager.AsteriskContextEditDialog.openWindow=function(a){var c=(a.record&&a.record.id)?a.record.id:0;var b=Tine.WindowFactory.getWindow({width:500,height:300,name:Tine.Voipmanager.AsteriskContextEditDialog.prototype.windowNamePrefix+c,contentPanelConstructor:"Tine.Voipmanager.AsteriskContextEditDialog",contentPanelConstructorConfig:a});return b};Ext.namespace("Tine.Voipmanager");Tine.Voipmanager.AsteriskVoicemailGridPanel=Ext.extend(Tine.Tinebase.widgets.app.GridPanel,{recordClass:Tine.Voipmanager.Model.AsteriskVoicemail,evalGrants:false,defaultSortInfo:{field:"fullname",direction:"ASC"},gridConfig:{loadMask:true,autoExpandColumn:"fullname"},initComponent:function(){this.recordProxy=Tine.Voipmanager.AsteriskVoicemailBackend;this.gridConfig.columns=this.getColumns();this.initFilterToolbar();this.actionToolbarItems=this.getToolbarItems();this.plugins=this.plugins||[];this.plugins.push(this.filterToolbar);Tine.Voipmanager.AsteriskVoicemailGridPanel.superclass.initComponent.call(this)},initFilterToolbar:function(){this.filterToolbar=new Tine.widgets.grid.FilterToolbar({filterModels:[{label:_("Quick search"),field:"query",operators:["contains"]}],defaultFilter:"query",filters:[],plugins:[new Tine.widgets.grid.FilterToolbarQuickFilterPlugin()]})},getColumns:function(){return[{id:"id",header:this.app.i18n._("id"),dataIndex:"id",width:10,sortable:true,hidden:true},{id:"mailbox",header:this.app.i18n._("mailbox"),dataIndex:"mailbox",width:50,sortable:true},{id:"context",header:this.app.i18n._("context"),dataIndex:"context",width:70,sortable:true},{id:"fullname",header:this.app.i18n._("fullname"),dataIndex:"fullname",width:180,sortable:true},{id:"email",header:this.app.i18n._("email"),dataIndex:"email",width:120,sortable:true},{id:"pager",header:this.app.i18n._("pager"),dataIndex:"pager",width:120,sortable:true},{id:"tz",header:this.app.i18n._("tz"),dataIndex:"tz",width:10,sortable:true,hidden:true},{id:"attach",header:this.app.i18n._("attach"),dataIndex:"attach",width:10,sortable:true,hidden:true},{id:"saycid",header:this.app.i18n._("saycid"),dataIndex:"saycid",width:10,sortable:true,hidden:true},{id:"dialout",header:this.app.i18n._("dialout"),dataIndex:"dialout",width:10,sortable:true,hidden:true},{id:"callback",header:this.app.i18n._("callback"),dataIndex:"callback",width:10,sortable:true,hidden:true},{id:"review",header:this.app.i18n._("review"),dataIndex:"review",width:10,sortable:true,hidden:true},{id:"operator",header:this.app.i18n._("operator"),dataIndex:"operator",width:10,sortable:true,hidden:true},{id:"envelope",header:this.app.i18n._("envelope"),dataIndex:"envelope",width:10,sortable:true,hidden:true},{id:"sayduration",header:this.app.i18n._("sayduration"),dataIndex:"sayduration",width:10,sortable:true,hidden:true},{id:"saydurationm",header:this.app.i18n._("saydurationm"),dataIndex:"saydurationm",width:10,sortable:true,hidden:true},{id:"sendvoicemail",header:this.app.i18n._("sendvoicemail"),dataIndex:"sendvoicemail",width:10,sortable:true,hidden:true},{id:"delete",header:this.app.i18n._("delete"),dataIndex:"delete",width:10,sortable:true,hidden:true},{id:"nextaftercmd",header:this.app.i18n._("nextaftercmd"),dataIndex:"nextaftercmd",width:10,sortable:true,hidden:true},{id:"forcename",header:this.app.i18n._("forcename"),dataIndex:"forcename",width:10,sortable:true,hidden:true},{id:"forcegreetings",header:this.app.i18n._("forcegreetings"),dataIndex:"forcegreetings",width:10,sortable:true,hidden:true},{id:"hidefromdir",header:this.app.i18n._("hidefromdir"),dataIndex:"hidefromdir",width:10,sortable:true,hidden:true}]},initDetailsPanel:function(){return false},getToolbarItems:function(){return[]}});Ext.namespace("Tine.Voipmanager");Tine.Voipmanager.AsteriskVoicemailEditDialog=Ext.extend(Tine.widgets.dialog.EditDialog,{windowNamePrefix:"AsteriskVoicemailEditWindow_",appName:"Voipmanager",recordClass:Tine.Voipmanager.Model.AsteriskVoicemail,recordProxy:Tine.Voipmanager.AsteriskVoicemailBackend,evalGrants:false,getFormItems:function(){return{xtype:"tabpanel",border:false,plain:true,activeTab:0,deferredRender:false,items:[{title:this.app.i18n._("General"),frame:true,border:false,layout:"form",items:[{xtype:"textfield",fieldLabel:this.app.i18n._("Mailbox"),name:"mailbox",maxLength:11,anchor:"100%",allowBlank:false},{xtype:"reccombo",name:"context_id",fieldLabel:this.app.i18n._("Context"),displayField:"name",anchor:"100%",store:new Ext.data.Store({fields:Tine.Voipmanager.Model.AsteriskContext,proxy:Tine.Voipmanager.AsteriskContextBackend,reader:Tine.Voipmanager.AsteriskContextBackend.getReader(),remoteSort:true,sortInfo:{field:"name",dir:"ASC"}})},{xtype:"textfield",fieldLabel:this.app.i18n._("Name"),name:"fullname",maxLength:150,anchor:"100%",allowBlank:false},{xtype:"numberfield",fieldLabel:this.app.i18n._("Password"),name:"password",maxLength:5,anchor:"100%",allowBlank:false},{xtype:"textfield",vtype:"email",fieldLabel:this.app.i18n._("email"),name:"email",maxLength:50,anchor:"100%"},{xtype:"textfield",fieldLabel:this.app.i18n._("pager"),name:"pager",maxLength:50,anchor:"100%"}]},{title:this.app.i18n._("Additional"),frame:true,border:false,xtype:"columnform",formDefaults:{xtype:"combo",anchor:"100%",labelSeparator:"",columnWidth:0.333,mode:"local",displayField:"value",valueField:"id",triggerAction:"all",editable:false,forceSelection:true,value:"1",store:[["1",this.app.i18n._("on")],["0",this.app.i18n._("off")]]},items:[[{xtype:"textfield",fieldLabel:this.app.i18n._("tz"),name:"tz",maxLength:10,editable:true},{xtype:"textfield",fieldLabel:this.app.i18n._("dialout"),name:"dialout",maxLength:10,editable:true},{xtype:"textfield",fieldLabel:this.app.i18n._("callback"),name:"callback",maxLength:10,editable:true}],[{xtype:"combo",fieldLabel:this.app.i18n._("sayduration"),name:"sayduration"},{xtype:"numberfield",fieldLabel:this.app.i18n._("saydurationm"),name:"saydurationm",maxLength:4},{xtype:"combo",fieldLabel:this.app.i18n._("attach"),name:"attach"}],[{xtype:"combo",fieldLabel:this.app.i18n._("saycid"),name:"saycid"},{xtype:"combo",fieldLabel:this.app.i18n._("review"),name:"review"},{xtype:"combo",fieldLabel:this.app.i18n._("operator"),name:"operator"}],[{xtype:"combo",fieldLabel:this.app.i18n._("envelope"),name:"envelope"},{xtype:"combo",fieldLabel:this.app.i18n._("sendvoicemail"),name:"sendvoicemail"},{xtype:"combo",fieldLabel:this.app.i18n._("delete"),name:"delete"}],[{xtype:"combo",fieldLabel:this.app.i18n._("nextaftercmd"),name:"nextaftercmd"},{xtype:"combo",fieldLabel:this.app.i18n._("forcename"),name:"forcename"},{xtype:"combo",fieldLabel:this.app.i18n._("forcegreetings"),name:"forcegreetings"}],[{xtype:"combo",fieldLabel:this.app.i18n._("hidefromdir"),name:"hidefromdir"}]]}]}}});Tine.Voipmanager.AsteriskVoicemailEditDialog.openWindow=function(a){var c=(a.record&&a.record.id)?a.record.id:0;var b=Tine.WindowFactory.getWindow({width:800,height:470,name:Tine.Voipmanager.AsteriskVoicemailEditDialog.prototype.windowNamePrefix+c,contentPanelConstructor:"Tine.Voipmanager.AsteriskVoicemailEditDialog",contentPanelConstructorConfig:a});return b};Ext.namespace("Tine.Voipmanager");Tine.Voipmanager.AsteriskMeetmeGridPanel=Ext.extend(Tine.Tinebase.widgets.app.GridPanel,{recordClass:Tine.Voipmanager.Model.AsteriskMeetme,evalGrants:false,defaultSortInfo:{field:"confno",direction:"ASC"},gridConfig:{loadMask:true,autoExpandColumn:"confno"},initComponent:function(){this.recordProxy=Tine.Voipmanager.AsteriskMeetmeBackend;this.gridConfig.columns=this.getColumns();this.initFilterToolbar();this.actionToolbarItems=this.getToolbarItems();this.plugins=this.plugins||[];this.plugins.push(this.filterToolbar);Tine.Voipmanager.AsteriskMeetmeGridPanel.superclass.initComponent.call(this)},initFilterToolbar:function(){this.filterToolbar=new Tine.widgets.grid.FilterToolbar({filterModels:[{label:_("Quick search"),field:"query",operators:["contains"]}],defaultFilter:"query",filters:[],plugins:[new Tine.widgets.grid.FilterToolbarQuickFilterPlugin()]})},getColumns:function(){return[{id:"id",header:this.app.i18n._("id"),width:10,sortable:true,hidden:true,dataIndex:"id"},{id:"confno",header:this.app.i18n._("confno"),width:80,sortable:true,dataIndex:"confno",renderer:function(a){return Ext.util.Format.htmlEncode(a)}},{id:"pin",header:this.app.i18n._("pin"),width:80,sortable:true,dataIndex:"pin",renderer:function(a){return Ext.util.Format.htmlEncode(a)}},{id:"adminpin",header:this.app.i18n._("adminpin"),width:80,sortable:true,dataIndex:"adminpin",renderer:function(a){return Ext.util.Format.htmlEncode(a)}}]},initDetailsPanel:function(){return false},getToolbarItems:function(){return[]}});Ext.namespace("Tine.Voipmanager");Tine.Voipmanager.AsteriskMeetmeEditDialog=Ext.extend(Tine.widgets.dialog.EditDialog,{windowNamePrefix:"AsteriskMeetmeEditWindow_",appName:"Voipmanager",recordClass:Tine.Voipmanager.Model.AsteriskMeetme,recordProxy:Tine.Voipmanager.AsteriskMeetmeBackend,evalGrants:false,getFormItems:function(){return{layout:"form",border:false,width:440,height:280,items:[{xtype:"numberfield",fieldLabel:this.app.i18n._("confno"),name:"confno",id:"confno",maxLength:80,anchor:"100%",allowBlank:false},{xtype:"numberfield",fieldLabel:this.app.i18n._("pin"),name:"pin",id:"pin",maxLength:80,anchor:"100%",allowBlank:false},{xtype:"numberfield",fieldLabel:this.app.i18n._("adminpin"),name:"adminpin",id:"adminpin",maxLength:80,anchor:"100%",allowBlank:false}]}}});Tine.Voipmanager.AsteriskMeetmeEditDialog.openWindow=function(a){var c=(a.record&&a.record.id)?a.record.id:0;var b=Tine.WindowFactory.getWindow({width:500,height:300,name:Tine.Voipmanager.AsteriskMeetmeEditDialog.prototype.windowNamePrefix+c,contentPanelConstructor:"Tine.Voipmanager.AsteriskMeetmeEditDialog",contentPanelConstructorConfig:a});return b};Ext.ns("Tine.Voipmanager");Tine.Voipmanager.MainScreen=Ext.extend(Tine.Tinebase.widgets.app.MainScreen,{activeContentType:"Phone",activeContentGroup:"Snom",show:function(){if(this.fireEvent("beforeshow",this)!==false){this.setTreePanel();this.setContentPanel();this.setToolbar();this.updateMainToolbar();this.fireEvent("show",this)}return this},setContentPanel:function(){var a=this.activeContentType;var b=this.activeContentGroup;if(!this[b+a+"GridPanel"]){this[b+a+"GridPanel"]=new Tine[this.app.appName][b+a+"GridPanel"]({app:this.app})}Tine.Tinebase.MainScreen.setActiveContentPanel(this[b+a+"GridPanel"],true);this[b+a+"GridPanel"].store.load()},setToolbar:function(){var a=this.activeContentType;var b=this.activeContentGroup;if(!this[b+a+"ActionToolbar"]){this[b+a+"ActionToolbar"]=this[b+a+"GridPanel"].actionToolbar}Tine.Tinebase.MainScreen.setActiveToolbar(this[b+a+"ActionToolbar"],true)}});Ext.namespace("Tine.Sales","Tine.Sales.Model");Tine.Sales.Model.ProductArray=[{name:"id",type:"string"},{name:"name",type:"string"},{name:"description",type:"string"},{name:"price",type:"float"},{name:"manufacturer",type:"string"},{name:"category",type:"string"},{name:"tags"},{name:"notes"},{name:"relations"}];Tine.Sales.Model.Product=Tine.Tinebase.data.Record.create(Tine.Sales.Model.ProductArray,{appName:"Sales",modelName:"Product",idProperty:"id",titleProperty:"name",recordName:"Product",recordsName:"Products",containerProperty:"container_id",containerName:"Products",containersName:"Products",getTitle:function(){return this.get("name")?this.get("name"):false}});Tine.Sales.Model.Product.getDefaultData=function(){var a={};return a};Tine.Sales.Model.Product.getFilterModel=function(){var a=Tine.Tinebase.appMgr.get("Sales");return[{label:_("Quick search"),field:"query",operators:["contains"]},{label:a.i18n._("Product name"),field:"name"},{filtertype:"tinebase.tag",app:a}]};Tine.Sales.Model.ContractArray=Tine.Tinebase.Model.genericFields.concat([{name:"id"},{name:"number"},{name:"title"},{name:"description"},{name:"status"},{name:"notes"},{name:"customers"},{name:"accounts"}]);Tine.Sales.Model.Contract=Tine.Tinebase.data.Record.create(Tine.Sales.Model.ContractArray,{appName:"Sales",modelName:"Contract",idProperty:"id",titleProperty:"title",recordName:"Contracts",recordsName:"Contracts",containerProperty:"container_id",containerName:"contracts list",containersName:"contracts lists"});Tine.Sales.Model.Contract.getDefaultData=function(){return{container_id:Tine.Sales.registry.get("DefaultContainer")}};Ext.namespace("Tine.Sales");Tine.Sales.MainScreen=Ext.extend(Tine.Tinebase.widgets.app.MainScreen,{activeContentType:"Product",setContentPanel:function(){var a=this.activeContentType;if(!this[a+"GridPanel"]){this[a+"GridPanel"]=new Tine[this.app.appName][a+"GridPanel"]({app:this.app,plugins:[this.treePanel.getFilterPlugin()]})}Tine.Tinebase.MainScreen.setActiveContentPanel(this[a+"GridPanel"],true);this[a+"GridPanel"].store.load()},getContentPanel:function(){return this["ProductGridPanel"]},setToolbar:function(){var a=this.activeContentType;if(!this[a+"ActionToolbar"]){this[a+"ActionToolbar"]=this[a+"GridPanel"].actionToolbar}Tine.Tinebase.MainScreen.setActiveToolbar(this[a+"ActionToolbar"],true)}});Tine.Sales.TreePanel=Ext.extend(Tine.widgets.grid.PersistentFilterPicker,{filter:[{field:"model",operator:"equals",value:"Sales_Model_ProductFilter"}],initComponent:function(){this.filterMountId="Product";this.root={id:"root",leaf:false,expanded:true,children:[{text:this.app.i18n._("Products"),id:"Product",iconCls:"SalesProduct",expanded:true,children:[{text:this.app.i18n._("All Products"),id:"allproducts",leaf:true}]},{text:this.app.i18n._("Contracts"),id:"Contract",iconCls:"SalesContracts",expanded:true,children:[{text:this.app.i18n._("All Contracts"),id:"allcontracts",leaf:true}]}]};Tine.Sales.TreePanel.superclass.initComponent.call(this);this.on("click",function(a){if(a.attributes.isPersistentFilter!=true){var b=a.getPath().split("/")[2];this.app.getMainScreen().activeContentType=b;this.app.getMainScreen().show()}},this)},afterRender:function(){Tine.Sales.TreePanel.superclass.afterRender.call(this);var a=this.app.getMainScreen().activeContentType;this.expandPath("/root/"+a+"/allproducts");this.selectPath("/root/"+a+"/allproducts")},getFilterPlugin:function(){if(!this.filterPlugin){var a=this;this.filterPlugin=new Tine.widgets.grid.FilterPlugin({getValue:function(){return[]}})}return this.filterPlugin}});Tine.Sales.contractBackend=new Tine.Tinebase.data.RecordProxy({appName:"Sales",modelName:"Contract",recordClass:Tine.Sales.Model.Contract});Tine.Sales.productBackend=new Tine.Tinebase.data.RecordProxy({appName:"Sales",modelName:"Product",recordClass:Tine.Sales.Model.Product});Ext.namespace("Tine.Sales");Tine.Sales.ContractGridPanel=Ext.extend(Tine.Tinebase.widgets.app.GridPanel,{recordClass:Tine.Sales.Model.Contract,defaultSortInfo:{field:"title",dir:"ASC"},gridConfig:{loadMask:true,autoExpandColumn:"title"},initComponent:function(){this.recordProxy=Tine.Sales.contractBackend;this.gridConfig.columns=this.getColumns();this.initFilterToolbar();this.plugins.push(this.filterToolbar);Tine.Sales.ContractGridPanel.superclass.initComponent.call(this)},initFilterToolbar:function(){this.filterToolbar=new Tine.widgets.grid.FilterToolbar({filterModels:[{label:_("Quick search"),field:"query",operators:["contains"]}],defaultFilter:"query",filters:[],plugins:[new Tine.widgets.grid.FilterToolbarQuickFilterPlugin()]})},onEditInNewWindow:function(g,c){if(g.actionType=="edit"){var f=this.grid.getSelectionModel().getSelections();var b=f[0]}else{var b={}}var a=Tine.Sales.registry.get("containerId");var d=Tine.Sales.ContractEditDialog.openWindow({record:b,containerId:a,listeners:{scope:this,update:function(h){this.store.load({})}}})},getColumns:function(){return[{id:"number",header:this.app.i18n._("Contract number"),width:100,sortable:true,dataIndex:"number"},{id:"title",header:this.app.i18n._("Title"),width:200,sortable:true,dataIndex:"title"},{id:"status",header:this.app.i18n._("Status"),width:100,sortable:true,dataIndex:"status"}]}});Ext.namespace("Tine.Sales");Tine.Sales.ContractEditDialog=Ext.extend(Tine.widgets.dialog.EditDialog,{containerId:-1,labelAlign:"side",windowNamePrefix:"ContractEditWindow_",appName:"Sales",recordClass:Tine.Sales.Model.Contract,recordProxy:Tine.Sales.contractBackend,tbarItems:[{xtype:"widget-activitiesaddbutton"}],requestData:function(){this.loadRequest=Ext.Ajax.request({scope:this,success:function(a){this.record=this.recordProxy.recordReader(a);this.onRecordLoad()},params:{method:"Sales.getContract",id:this.record.id}})},getFormItems:function(){return{xtype:"tabpanel",border:false,plain:true,activeTab:0,border:false,items:[{title:this.app.i18n.n_("Contract","Contract",1),autoScroll:true,border:false,frame:true,layout:"border",items:[{region:"center",xtype:"columnform",labelAlign:"top",formDefaults:{xtype:"textfield",anchor:"100%",labelSeparator:"",columnWidth:0.333},items:[[{columnWidth:1,fieldLabel:this.app.i18n._("Title"),name:"title",allowBlank:false}],[{columnWidth:1,fieldLabel:this.app.i18n._("Description"),emptyText:this.app.i18n._("Enter description..."),name:"description",xtype:"textarea",height:200}]]},{layout:"accordion",animate:true,region:"east",width:210,split:true,collapsible:true,collapseMode:"mini",margins:"0 5 0 5",border:true,items:[new Tine.widgets.activities.ActivitiesPanel({app:"Sales",showAddNoteForm:false,border:false,bodyStyle:"border:1px solid #B5B8C8;"}),new Tine.widgets.tags.TagPanel({app:"Sales",border:false,bodyStyle:"border:1px solid #B5B8C8;"})]}]},new Tine.widgets.activities.ActivitiesTabPanel({app:this.appName,record_id:this.record.id,record_model:this.appName+"_Model_"+this.recordClass.getMeta("modelName")})]}}});Tine.Sales.ContractEditDialog.openWindow=function(a){var c=(a.record&&a.record.id)?a.record.id:0;var b=Tine.WindowFactory.getWindow({width:800,height:470,name:Tine.Sales.ContractEditDialog.prototype.windowNamePrefix+c,contentPanelConstructor:"Tine.Sales.ContractEditDialog",contentPanelConstructorConfig:a});return b};Ext.namespace("Tine.Sales");Tine.Sales.ProductGridPanel=Ext.extend(Tine.Tinebase.widgets.app.GridPanel,{recordClass:Tine.Sales.Model.Product,evalGrants:false,defaultSortInfo:{field:"name",direction:"DESC"},gridConfig:{loadMask:true,autoExpandColumn:"name"},initComponent:function(){this.recordProxy=Tine.Sales.productBackend;this.actionToolbarItems=this.getToolbarItems();this.contextMenuItems=[];this.gridConfig.cm=this.getColumnModel();this.filterToolbar=this.getFilterToolbar();this.plugins=this.plugins||[];this.plugins.push(this.filterToolbar);Tine.Sales.ProductGridPanel.superclass.initComponent.call(this);this.selectionModel.on("selectionchange",function(b){var a=Tine.Tinebase.common.hasRight("manage","Sales","products");if(a){Tine.widgets.actionUpdater(b,this.actions,this.recordClass.getMeta("containerProperty"),!this.evalGrants);if(this.updateOnSelectionChange&&this.detailsPanel){this.detailsPanel.onDetailsUpdate(b)}}else{this.action_editInNewWindow.setDisabled(true);this.action_deleteRecord.setDisabled(true);this.action_tagsMassAttach.setDisabled(true)}},this);this.action_addInNewWindow.setDisabled(!Tine.Tinebase.common.hasRight("manage","Sales","products"))},getFilterToolbar:function(){return new Tine.widgets.grid.FilterToolbar({filterModels:Tine.Sales.Model.Product.getFilterModel(),defaultFilter:"query",filters:[],plugins:[new Tine.widgets.grid.FilterToolbarQuickFilterPlugin()]})},getColumnModel:function(){return new Ext.grid.ColumnModel({defaults:{sortable:true},columns:[{header:this.app.i18n._("Tags"),id:"tags",dataIndex:"tags",width:50,renderer:Tine.Tinebase.common.tagsRenderer,sortable:false},{header:this.app.i18n._("Name"),id:"name",dataIndex:"name",width:200},{header:this.app.i18n._("Manufacturer"),id:"manufacturer",dataIndex:"manufacturer",width:100},{header:this.app.i18n._("Category"),id:"category",dataIndex:"category",width:100},{header:this.app.i18n._("Description"),id:"description",dataIndex:"description",width:150,sortable:false,hidden:true},{header:this.app.i18n._("Price"),id:"price",dataIndex:"price",width:75,renderer:Ext.util.Format.euMoney}]})},getToolbarItems:function(){return[]}});Ext.namespace("Tine.Sales");Tine.Sales.ProductEditDialog=Ext.extend(Tine.widgets.dialog.EditDialog,{windowNamePrefix:"ProductEditWindow_",appName:"Sales",recordClass:Tine.Sales.Model.Product,recordProxy:Tine.Sales.productBackend,tbarItems:[{xtype:"widget-activitiesaddbutton"}],evalGrants:false,initComponent:function(){this.linkPanel=new Tine.widgets.dialog.LinkPanel({relatedRecords:{Crm_Model_Lead:{recordClass:Tine.Crm.Model.Lead,dlgOpener:Tine.Crm.LeadEditDialog.openWindow}}});Tine.Sales.ProductEditDialog.superclass.initComponent.call(this)},onRecordLoad:function(){Tine.Sales.ProductEditDialog.superclass.onRecordLoad.call(this);this.linkPanel.onRecordLoad(this.record)},getFormItems:function(){return{xtype:"tabpanel",border:false,plain:true,activeTab:0,border:false,items:[{title:this.app.i18n.n_("Product","Product",1),autoScroll:true,border:false,frame:true,layout:"border",items:[{region:"center",xtype:"columnform",labelAlign:"top",formDefaults:{xtype:"textfield",anchor:"100%",labelSeparator:"",columnWidth:0.333},items:[[{columnWidth:1,fieldLabel:this.app.i18n._("Name"),name:"name",allowBlank:false}],[{columnWidth:1,xtype:"numberfield",fieldLabel:this.app.i18n._("Price"),name:"price",allowNegative:false,allowBlank:false}],[{columnWidth:1,fieldLabel:this.app.i18n._("Manufacturer"),name:"manufacturer"}],[{columnWidth:1,fieldLabel:this.app.i18n._("Category"),name:"category"}],[{columnWidth:1,fieldLabel:this.app.i18n._("Description"),emptyText:this.app.i18n._("Enter description..."),name:"description",xtype:"textarea",height:150}]]},{layout:"accordion",animate:true,region:"east",width:210,split:true,collapsible:true,collapseMode:"mini",margins:"0 5 0 5",border:true,items:[new Tine.widgets.activities.ActivitiesPanel({app:"Sales",showAddNoteForm:false,border:false,bodyStyle:"border:1px solid #B5B8C8;"}),new Tine.widgets.tags.TagPanel({app:"Sales",border:false,bodyStyle:"border:1px solid #B5B8C8;"})]}]},new Tine.widgets.activities.ActivitiesTabPanel({app:this.appName,record_id:this.record.id,record_model:this.appName+"_Model_"+this.recordClass.getMeta("modelName")}),this.linkPanel]}}});Tine.Sales.ProductEditDialog.openWindow=function(a){var c=(a.record&&a.record.id)?a.record.id:0;var b=Tine.WindowFactory.getWindow({width:600,height:500,name:Tine.Sales.ProductEditDialog.prototype.windowNamePrefix+c,contentPanelConstructor:"Tine.Sales.ProductEditDialog",contentPanelConstructorConfig:a});return b};Ext.namespace("Tine.Phone");Tine.Phone.getPanel=function(){var f=new Locale.Gettext();f.textdomain("Phone");var b=new Ext.Action({text:f._("Edit phone settings"),iconCls:"PhoneIconCls",handler:function(){var g=Tine.Phone.MyPhoneEditDialog.openWindow({record:this.ctxNode.attributes.record,listeners:{scope:this,update:function(j){var i=Ext.StoreMgr.get("UserPhonesStore");var h=new Tine.Voipmanager.Model.SnomPhone(Ext.util.JSON.decode(j));i.add([h]);Tine.Phone.updatePhoneTree(i)}}})},scope:this});var c=new Ext.menu.Menu({items:[b]});var d=new Ext.tree.TreePanel({title:f.gettext("Phone"),id:"phone-tree",iconCls:"PhoneIconCls",rootVisible:true,border:false,collapsible:true});var a=new Ext.tree.TreeNode({text:f._("Phones"),cls:"treemain",allowDrag:false,allowDrop:true,id:"root",icon:false});d.setRootNode(a);Tine.Phone.loadPhoneStore();d.on("click",function(h,g){Tine.Phone.Main.show(h)},this);d.on("contextmenu",function(h,g){this.ctxNode=h;if(h.id!="root"){c.showAt(g.getXY())}},this);d.on("beforeexpand",function(g){if(g.getSelectionModel().getSelectedNode()===null){var h=g.getRootNode();h.select();h.expand()}else{g.getSelectionModel().fireEvent("selectionchange",g.getSelectionModel())}},this);d.getSelectionModel().on("selectionchange",function(i){var h=i.getSelectedNode();var g=Ext.getCmp("phone-settings-button");if(g){if(h&&h.id!="root"){g.setDisabled(false)}else{g.setDisabled(true)}}Tine.Phone.Main.show(h)},this);return d};Tine.Phone.updatePhoneTree=function(b){var c=new Locale.Gettext();c.textdomain("Phone");var a=Ext.getCmp("phone-tree").getRootNode();a.eachChild(function(d){a.removeChild(d)});b.each(function(d){var f=(d.data.description=="")?d.data.macaddress:Ext.util.Format.ellipsis(d.data.description,30);var g=new Ext.tree.TreeNode({id:d.id,record:d,text:f,qtip:d.data.description,leaf:true});a.appendChild(g)})};Tine.Phone.dialPhoneNumber=function(d){var b=Tine.Phone.loadPhoneStore();var a=b.getAt(0).data.lines;if(b.getTotalCount()==1&&a.length==1&&d){Ext.Ajax.request({url:"index.php",params:{method:"Phone.dialNumber",number:d,phoneId:b.getAt(0).id,lineId:a[0].id},success:function(h,g){},failure:function(g,h){}})}else{var f=new Tine.Phone.DialerPanel({number:(d)?d:null});var c=new Ext.Window({title:"Dial phone number",id:"dialerWindow",modal:true,width:400,height:150,layout:"hfit",plain:true,bodyStyle:"padding:5px;",closeAction:"close",items:[f]});c.show()}};Tine.Phone.DialerPanel=Ext.extend(Ext.form.FormPanel,{id:"dialerPanel",translation:null,number:null,defaults:{xtype:"textfield",anchor:"100%",allowBlank:false},bodyStyle:"padding:5px;",buttonAlign:"right",phoneStore:null,linesStore:null,initComponent:function(){this.translation=new Locale.Gettext();this.translation.textdomain("Phone");this.phoneStore=Tine.Phone.loadPhoneStore();this.setLineStore(null);this.items=[new Tine.widgets.customfields.CustomfieldsCombo({fieldLabel:this.translation._("Phone"),store:this.phoneStore,mode:"local",editable:false,stateful:true,stateEvents:["select"],displayField:"description",valueField:"id",id:"phoneId",name:"phoneId",triggerAction:"all",listeners:{scope:this,select:function(c,b,a){this.setLineStore(b.data.id)}}}),{xtype:"combo",fieldLabel:this.translation._("Line"),name:"lineId",displayField:"linenumber",valueField:"id",mode:"local",store:this.linesStore,triggerAction:"all",disabled:(this.linesStore.getCount()<=1)},{fieldLabel:this.translation._("Number"),name:"phoneNumber"}];this.cancelAction=new Ext.Action({text:this.translation._("Cancel"),iconCls:"action_cancel",handler:function(){Ext.getCmp("dialerWindow").close()}});this.dialAction=new Ext.Action({scope:this,text:this.translation._("Dial"),iconCls:"action_DialNumber",handler:function(){var a=this.getForm();if(a.isValid()){Ext.Ajax.request({url:"index.php",params:{method:"Phone.dialNumber",number:a.findField("phoneNumber").getValue(),phoneId:a.findField("phoneId").getValue(),lineId:a.findField("lineId").getValue()},success:function(c,b){Ext.getCmp("dialerWindow").close()},failure:function(b,c){}})}}});this.buttons=[this.cancelAction,this.dialAction];this.initMyFields.defer(300,this);Tine.Phone.DialerPanel.superclass.initComponent.call(this)},initMyFields:function(){if(this.number!=null){this.getForm().findField("phoneNumber").setValue(this.number)}else{this.getForm().findField("phoneNumber").focus()}var c=this.getForm().findField("phoneId");var b=this.getForm().findField("lineId");if(!c.getState()){c.setValue(this.phoneStore.getAt(0).id)}else{this.setLineStore(c.getValue())}var a=this.linesStore.getAt(0);if(a){this.getForm().findField("lineId").setValue(a.id)}},setLineStore:function(d){if(this.linesStore==null){this.linesStore=new Ext.data.Store({})}else{this.linesStore.removeAll()}var g=this.getForm();if(d==null){if(g){d=g.findField("phoneId").getValue()}else{d=this.phoneStore.getAt(0).id}}var a=this.phoneStore.getById(d);for(var c=0;c<a.data.lines.length;c++){var f=new Tine.Voipmanager.Model.SnomLine(a.data.lines[c],a.data.lines[c].id);this.linesStore.add(f)}if(g){var b=g.findField("lineId");b.setDisabled((this.linesStore.getCount()<=1));b.setValue(this.linesStore.getAt(0).id)}}});Tine.Phone.Main={translation:null,store:null,paging:{start:0,limit:50,sort:"start",dir:"DESC"},actions:{dialNumber:null,editPhoneSettings:null},initComponent:function(){this.translation=new Locale.Gettext();this.translation.textdomain("Phone");this.actions.dialNumber=new Ext.Action({text:this.translation._("Dial number"),tooltip:this.translation._("Initiate a new outgoing call"),handler:this.handlers.dialNumber,iconCls:"action_DialNumber",scope:this});this.actions.editPhoneSettings=new Ext.Action({id:"phone-settings-button",text:this.translation._("Edit phone settings"),iconCls:"PhoneIconCls",handler:function(){var b=Ext.getCmp("phone-tree").getSelectionModel().getSelectedNode();var a=Tine.Phone.MyPhoneEditDialog.openWindow({record:b.attributes.record,listeners:{scope:this,update:function(f){var d=Ext.StoreMgr.get("UserPhonesStore");var c=new Tine.Voipmanager.Model.SnomPhone(Ext.util.JSON.decode(f));d.add([c]);Tine.Phone.updatePhoneTree(d)}}})},scope:this,disabled:true});this.initStore()},handlers:{dialNumber:function(d,a){var c="";var b=Ext.getCmp("Phone_Callhistory_Grid");if(b){record=b.getSelectionModel().getSelected();if(record){c=record.data.destination}}Tine.Phone.dialPhoneNumber(c)}},renderer:{direction:function(d,g,c,a,b,f){var h=new Locale.Gettext();h.textdomain("Phone");switch(d){case"in":return"<img src='images/call-incoming.png' width='12' height='12' alt='contact' ext:qtip='"+h._("Incoming call")+"'/>";break;case"out":return"<img src='images/call-outgoing.png' width='12' height='12' alt='contact' ext:qtip='"+h._("Outgoing call")+"'/>";break}},destination:function(d,g,c,a,b,f){if(d.toString().toLowerCase()=="unknown"){var h=new Locale.Gettext();h.textdomain("Phone");d=h.gettext("unknown number")}return d}},displayToolbar:function(){var b=new Ext.ux.SearchField({id:"callhistoryQuickSearchField",width:240,emptyText:Tine.Tinebase.translation._hidden("enter searchfilter")});b.on("change",function(){this.store.load({})},this);var a=new Ext.Toolbar({id:"Phone_Toolbar",split:false,height:26,items:[this.actions.dialNumber,this.actions.editPhoneSettings,"->",this.translation._("Search:")," ",b]});Tine.Tinebase.MainScreen.setActiveToolbar(a)},initStore:function(){this.store=new Ext.data.JsonStore({id:"id",root:"results",totalProperty:"totalcount",fields:Tine.Phone.Model.Call,remoteSort:true,baseParams:{method:"Phone.searchCalls"},sortInfo:{field:this.paging.sort,direction:this.paging.dir}});Ext.StoreMgr.add("CallsGridStore",this.store);this.store.on("beforeload",function(a,b){if(!b.params){b.params={}}b.params.sort=a.getSortState()?a.getSortState().field:this.paging.sort;b.params.dir=a.getSortState()?a.getSortState().direction:this.paging.dir;b.params.start=b.params.start?b.params.start:this.paging.start;b.params.limit=b.params.limit?b.params.limit:this.paging.limit;b.params.paging=Ext.util.JSON.encode(b.params);var f=Ext.getCmp("callhistoryQuickSearchField");var d=Ext.getCmp("phone-tree").getSelectionModel().getSelectedNode()||null;var c=[{field:"query",operator:"contains",value:f.getValue()}];if(d!==null&&d.id!="root"){c.push({field:"phone_id",operator:"equals",value:d.id})}b.params.filter=Ext.util.JSON.encode(c)},this)},displayGrid:function(){var d=new Ext.PagingToolbar({pageSize:50,store:this.store,displayInfo:true,displayMsg:this.translation._("Displaying calls {0} - {1} of {2}"),emptyMsg:this.translation._("No calls to display")});var c=new Ext.grid.ColumnModel({defaults:{sortable:true,resizable:true},columns:[{id:"direction",header:this.translation._("Direction"),dataIndex:"direction",width:20,renderer:this.renderer.direction},{id:"source",header:this.translation._("Source"),dataIndex:"source",hidden:true},{id:"callerid",header:this.translation._("Caller Id"),dataIndex:"callerid"},{id:"destination",header:this.translation._("Destination"),dataIndex:"destination",renderer:this.renderer.destination},{id:"start",header:this.translation._("Start"),dataIndex:"start",renderer:Tine.Tinebase.common.dateTimeRenderer},{id:"connected",header:this.translation._("Connected"),dataIndex:"connected",renderer:Tine.Tinebase.common.dateTimeRenderer,hidden:true},{id:"disconnected",header:this.translation._("Disconnected"),dataIndex:"disconnected",renderer:Tine.Tinebase.common.dateTimeRenderer,hidden:true},{id:"duration",header:this.translation._("Duration"),dataIndex:"duration",width:40},{id:"ringing",header:this.translation._("Ringing"),dataIndex:"ringing",width:40,hidden:true},{id:"id",header:this.translation._("Call ID"),dataIndex:"id",hidden:true}]});c.defaultSortable=true;var b=new Ext.grid.RowSelectionModel({multiSelect:true});var a=new Ext.grid.GridPanel({id:"Phone_Callhistory_Grid",store:this.store,cm:c,tbar:d,autoSizeColumns:false,selModel:b,enableColLock:false,loadMask:true,autoExpandColumn:"destination",border:false,view:new Ext.grid.GridView({autoFill:true,forceFit:true,ignoreAdd:true,emptyText:this.translation._("No calls to display")})});b.on("selectionchange",function(h){this.actions.dialNumber.setDisabled(h.getCount()>1);if(h.getCount()==1){var f=h.getSelected();var g=f?f.get("destination"):false;this.actions.dialNumber.setDisabled(!Tine.Phone.utils.isCallable(g))}},this);a.on("rowcontextmenu",function(g,f,i){i.stopEvent();if(!g.getSelectionModel().isSelected(f)){g.getSelectionModel().selectRow(f)}var h=new Ext.menu.Menu({id:"ctxMenuCall",items:[this.actions.dialNumber]});h.showAt(i.getXY())},this);a.on("rowdblclick",function(g,h,j){var f=g.getStore().getAt(h);var i=f.data.destination;Tine.Phone.dialPhoneNumber(i)},this);Tine.Tinebase.MainScreen.setActiveContentPanel(a)},updateMainToolbar:function(){},show:function(a){var b=Tine.Tinebase.MainScreen.getActiveToolbar();if(b===false||b.id!="Phone_Toolbar"){this.initComponent();this.displayToolbar();this.store.load({});this.displayGrid();this.updateMainToolbar()}else{this.store.load({})}}};Tine.Phone.loadPhoneStore=function(b){var a=Ext.StoreMgr.get("UserPhonesStore");if(!a){a=new Ext.data.JsonStore({fields:Tine.Voipmanager.Model.SnomPhone,data:Tine.Phone.registry.get("Phones"),autoLoad:true,id:"id"});Ext.StoreMgr.add("UserPhonesStore",a);Tine.Phone.updatePhoneTree(a)}return a};Ext.namespace("Tine.Phone.Model");Tine.Phone.Model.Call=Ext.data.Record.create([{name:"id"},{name:"line_id"},{name:"phone_id"},{name:"callerid"},{name:"start",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"connected",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"disconnected",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"duration"},{name:"ringing"},{name:"direction"},{name:"source"},{name:"destination"}]);Ext.namespace("Tine.Phone.utils");Tine.Phone.utils.isCallable=function(a){return !a.toString().replace(/^\+|[ \-\/]/g,"").match(/[^0-9]/)};Ext.namespace("Tine.Voipmanager");Tine.Phone.MyPhoneEditDialog=Ext.extend(Tine.widgets.dialog.EditDialog,{windowNamePrefix:"SnomPhoneEditWindow_",appName:"Phone",evalGrants:false,rightsStore:null,linesStore:null,maxLines:4,writeableFields:null,initComponent:function(){this.rightsStore=new Ext.data.JsonStore({root:"results",totalProperty:"totalcount",id:"id",fields:Tine.Voipmanager.Model.SnomPhoneRight});this.linesStore=new Ext.data.JsonStore({root:"results",totalProperty:"totalcount",id:"id",fields:Tine.Voipmanager.Model.SnomLine});this.recordClass=Tine.Voipmanager.Model.SnomPhone;this.recordProxy=Tine.Voipmanager.SnomPhoneBackend;Tine.Phone.MyPhoneEditDialog.superclass.initComponent.call(this)},onRecordLoad:function(){var b=this.record.get("rights")||[];this.rightsStore.loadData({results:b});var a=this.record.get("lines")||[];this.linesStore.loadData({results:a});if(this.record.get("current_model")){this.addEmptyLines(this.getMaxLines(this.record.get("current_model")))}if(this.record.get("setting_id")){this.getWriteableFields(this.record.get("setting_id"))}Tine.Phone.MyPhoneEditDialog.superclass.onRecordLoad.call(this)},onRecordUpdate:function(){Tine.Phone.MyPhoneEditDialog.superclass.onRecordUpdate.call(this);this.record.set("rights","");this.record.set("lines","");var b=[];this.rightsStore.each(function(c){b.push(c.data)});this.record.set("rights",b);var a=[];this.linesStore.each(function(c){if(c.data.asteriskline_id){a.push(c.data)}});this.record.set("lines",a)},getMaxLines:function(b){var a=new Object();a.snom300="4";a.snom320="12";a.snom360="12";a.snom370="12";if(!b){return a}return a[b]},addEmptyLines:function(a){while(this.linesStore.getCount()<a){_snomRecord=new Tine.Voipmanager.Model.SnomLine({asteriskline_id:"",id:"",idletext:"",lineactive:0,linenumber:this.linesStore.getCount()+1,snomphone_id:"",name:""});this.linesStore.add(_snomRecord)}},getWriteableFields:function(a){Ext.Ajax.request({params:{method:"Voipmanager.getSnomSetting",id:a},success:function(c,b){_data=Ext.util.JSON.decode(c.responseText);_writableFields=new Array("web_language","language","display_method","mwi_notification","mwi_dialtone","headset_device","message_led_other","global_missed_counter","scroll_outgoing","show_local_line","show_call_status","call_waiting");this.writeableFields=new Object();var d=new Object();Ext.each(_writableFields,function(f,h,g){_rwField=f.toString()+"_writable";if(_data[_rwField]=="0"||!this.record.get(f)){this.record.set(f,_data[f])}this.getForm().findField(f).setDisabled(_data[_rwField]=="0");this.getForm().findField(f).setValue(this.record.get(f))},this)},failure:function(b,c){Ext.MessageBox.alert("Failed","No settings data found.")},scope:this})},onTemplateChange:function(a,b,c){var d=false;if(b.data&&b.data.setting_id){d=b.data.setting_id}if(!d&&this.getForm().findField("template_id").store.getById(this.getForm().findField("template_id").getValue())){d=this.getForm().findField("template_id").store.getById(this.getForm().findField("template_id").getValue()).data.setting_id}if(d){this.getWriteableFields(d)}},onModelChange:function(a,c,d){while(this.linesStore.getCount()>this.getMaxLines(c.data.id)){var b=this.linesStore.getCount();this.linesStore.remove(this.linesStore.getAt((b-1)))}this.addEmptyLines(this.getMaxLines(c.data.id))},getFormItems:function(){return{xtype:"tabpanel",border:false,plain:true,activeTab:0,deferredRender:false,items:[this.getPhonePanel(),this.getSettingsPanel(),this.getLinesPanel(),this.getRightsPanel()]}},getPhonePanel:function(){return{title:this.app.i18n._("Phone"),layout:"hfit",frame:true,border:false,items:[{xtype:"columnform",formDefaults:{columnWidth:0.5,anchor:"100%",labelSeparator:""},items:[[{xtype:"textfield",name:"description",fieldLabel:this.app.i18n._("Name"),allowBlank:false},{xtype:"combo",fieldLabel:this.app.i18n._("Phone Model"),name:"current_model",mode:"local",displayField:"model",valueField:"id",triggerAction:"all",editable:false,forceSelection:true,listeners:{scope:this,select:this.onModelChange},store:Tine.Voipmanager.Data.loadPhoneModelData()}],[{xtype:"textfield",fieldLabel:this.app.i18n._("MAC Address"),name:"macaddress",maxLength:12,allowBlank:false},{xtype:"reccombo",name:"template_id",fieldLabel:this.app.i18n.n_("Template","Templates",1),displayField:"name",store:new Ext.data.Store({fields:Tine.Voipmanager.Model.SnomTemplate,proxy:Tine.Voipmanager.SnomTemplateBackend,reader:Tine.Voipmanager.SnomTemplateBackend.getReader(),remoteSort:true,sortInfo:{field:"name",dir:"ASC"}}),listeners:{scope:this,select:this.onTemplateChange}}],[{xtype:"reccombo",name:"location_id",fieldLabel:this.app.i18n.n_("Location","Locations",1),displayField:"name",store:new Ext.data.Store({fields:Tine.Voipmanager.Model.SnomLocation,proxy:Tine.Voipmanager.SnomLocationBackend,reader:Tine.Voipmanager.SnomLocationBackend.getReader(),remoteSort:true,sortInfo:{field:"name",dir:"ASC"}})}]]},{title:this.app.i18n._("infos"),autoHeight:true,xtype:"fieldset",checkboxToggle:false,items:[{xtype:"columnform",border:false,formDefaults:{columnWidth:0.5,anchor:"100%",labelSeparator:""},items:[[{xtype:"textfield",fieldLabel:this.app.i18n._("Current IP Address"),name:"ipaddress",maxLength:20,anchor:"98%",readOnly:true},{xtype:"datetimefield",fieldLabel:this.app.i18n._("Firmware last checked at"),name:"firmware_checked_at",anchor:"100%",emptyText:"never",hideTrigger:true,readOnly:true}],[{xtype:"textfield",fieldLabel:this.app.i18n._("Current Software Version"),name:"current_software",maxLength:20,anchor:"98%",readOnly:true},{xtype:"datetimefield",fieldLabel:this.app.i18n._("Settings Loaded at"),name:"settings_loaded_at",anchor:"100%",emptyText:"never",hideTrigger:true,readOnly:true}]]}]},{title:this.app.i18n._("redirection"),xtype:"fieldset",checkboxToggle:false,autoHeight:true,items:[{xtype:"columnform",border:false,formDefaults:{columnWidth:0.333,anchor:"100%",labelSeparator:""},items:[[{xtype:"combo",fieldLabel:this.app.i18n._("redirect_event"),name:"redirect_event",mode:"local",triggerAction:"all",editable:false,forceSelection:true,value:"all",listeners:{select:function(a,b,c){if(b.data.id=="time"){Ext.getCmp("redirect_time").enable()}if(b.data.id!="time"){Ext.getCmp("redirect_time").disable()}}},store:[["all",this.app.i18n._("all")],["busy",this.app.i18n._("busy")],["none",this.app.i18n._("none")],["time",this.app.i18n._("time")]]},{xtype:"textfield",fieldLabel:this.app.i18n._("redirect_number"),name:"redirect_number"},{xtype:"numberfield",fieldLabel:this.app.i18n._("redirect_time"),name:"redirect_time",id:"redirect_time",anchor:"100%"}]]}]}]}},getSettingsPanel:function(){return{title:this.app.i18n._("Settings"),id:"settingsBorderLayout",frame:true,border:false,xtype:"columnform",formDefaults:{xtype:"combo",anchor:"100%",labelSeparator:"",columnWidth:0.333,mode:"local",triggerAction:"all",editable:false,forceSelection:true,value:null},items:[[{fieldLabel:this.app.i18n._("web_language"),name:"web_language",disabled:(this.writeableFields)?this.writeableFields.web_language:true,store:[[null,this.app.i18n._("- factory default -")],["English",Locale.getTranslationData("Language","en")],["Deutsch",Locale.getTranslationData("Language","de")],["Espanol",Locale.getTranslationData("Language","es")],["Francais",Locale.getTranslationData("Language","fr")],["Italiano",Locale.getTranslationData("Language","it")],["Nederlands",Locale.getTranslationData("Language","nl")],["Portugues",Locale.getTranslationData("Language","pt")],["Suomi",Locale.getTranslationData("Language","fi")],["Svenska",Locale.getTranslationData("Language","sv")],["Dansk",Locale.getTranslationData("Language","da")],["Norsk",Locale.getTranslationData("Language","no")]]},{fieldLabel:this.app.i18n._("language"),name:"language",disabled:(this.writeableFields)?this.writeableFields.language:true,store:[[null,this.app.i18n._("- factory default -")],["English",Locale.getTranslationData("Language","en")],["English(UK)",Locale.getTranslationData("Language","en_GB")],["Deutsch",Locale.getTranslationData("Language","de")],["Espanol",Locale.getTranslationData("Language","es")],["Francais",Locale.getTranslationData("Language","fr")],["Italiano",Locale.getTranslationData("Language","it")],["Cestina",Locale.getTranslationData("Language","cs")],["Nederlands",Locale.getTranslationData("Language","nl")],["Polski",Locale.getTranslationData("Language","pl")],["Portugues",Locale.getTranslationData("Language","pt")],["Slovencina",Locale.getTranslationData("Language","sl")],["Suomi",Locale.getTranslationData("Language","fi")],["Svenska",Locale.getTranslationData("Language","sv")],["Dansk",Locale.getTranslationData("Language","da")],["Norsk",Locale.getTranslationData("Language","no")],["Japanese",Locale.getTranslationData("Language","ja")],["Chinese",Locale.getTranslationData("Language","zh")]]},{fieldLabel:this.app.i18n._("display_method"),name:"display_method",disabled:(this.writeableFields)?this.writeableFields.display_method:true,store:[[null,this.app.i18n._("- factory default -")],["full_contact",this.app.i18n._("whole url")],["display_name",this.app.i18n._("name")],["display_number",this.app.i18n._("number")],["display_name_number",this.app.i18n._("name + number")],["display_number_name",this.app.i18n._("number + name")]]}],[{fieldLabel:this.app.i18n._("call_waiting"),name:"call_waiting",disabled:(this.writeableFields)?this.writeableFields.call_waiting:true,store:[[null,this.app.i18n._("- factory default -")],["on",this.app.i18n._("on")],["visual",this.app.i18n._("visual")],["ringer",this.app.i18n._("ringer")],["off",this.app.i18n._("off")]]},{fieldLabel:this.app.i18n._("mwi_notification"),name:"mwi_notification",disabled:(this.writeableFields)?this.writeableFields.mwi_notification:true,store:[[null,this.app.i18n._("- factory default -")],["silent",this.app.i18n._("silent")],["beep",this.app.i18n._("beep")],["reminder",this.app.i18n._("reminder")]]},{fieldLabel:this.app.i18n._("mwi_dialtone"),name:"mwi_dialtone",disabled:(this.writeableFields)?this.writeableFields.mwi_dialtone:true,store:[[null,this.app.i18n._("- factory default -")],["normal",this.app.i18n._("normal")],["stutter",this.app.i18n._("stutter")]]}],[{fieldLabel:this.app.i18n._("headset_device"),name:"headset_device",disabled:(this.writeableFields)?this.writeableFields.headset_device:true,store:[[null,this.app.i18n._("- factory default -")],["none",this.app.i18n._("none")],["headset_rj",this.app.i18n._("headset_rj")]]},{fieldLabel:this.app.i18n._("message_led_other"),name:"message_led_other",disabled:(this.writeableFields)?this.writeableFields.message_led_other:true,store:[[null,this.app.i18n._("- factory default -")],["1",this.app.i18n._("on")],["0",this.app.i18n._("off")]]},{fieldLabel:this.app.i18n._("global_missed_counter"),name:"global_missed_counter",disabled:(this.writeableFields)?this.writeableFields.global_missed_counter:true,store:[[null,this.app.i18n._("- factory default -")],["1",this.app.i18n._("on")],["0",this.app.i18n._("off")]]}],[{fieldLabel:this.app.i18n._("scroll_outgoing"),name:"scroll_outgoing",disabled:(this.writeableFields)?this.writeableFields.scroll_outgoing:true,store:[[null,this.app.i18n._("- factory default -")],["1",this.app.i18n._("on")],["0",this.app.i18n._("off")]]},{fieldLabel:this.app.i18n._("show_local_line"),name:"show_local_line",disabled:(this.writeableFields)?this.writeableFields.show_local_line:true,store:[[null,this.app.i18n._("- factory default -")],["1",this.app.i18n._("on")],["0",this.app.i18n._("off")]]},{fieldLabel:this.app.i18n._("show_call_status"),name:"show_call_status",disabled:(this.writeableFields)?this.writeableFields.show_call_status:true,store:[[null,this.app.i18n._("- factory default -")],["1",this.app.i18n._("on")],["0",this.app.i18n._("off")]]}]]}},getLinesPanel:function(){var d=[];var a=[];var c=[];var b=[];var i=new Ext.ux.grid.CheckColumn({header:this.app.i18n._("lineactive"),dataIndex:"lineactive",width:25});var h=new Ext.form.ComboBox({typeAhead:true,triggerAction:"all",lazyRender:true,displayField:"name",valueField:"id",anchor:"98%",triggerAction:"all",allowBlank:false,editable:false,store:new Ext.data.Store({fields:Tine.Voipmanager.Model.AsteriskSipPeer,proxy:Tine.Voipmanager.AsteriskSipPeerBackend,remoteSort:true,sortInfo:{field:"name",dir:"ASC"}})});var g=new Ext.grid.ColumnModel([{resizable:true,id:"id",header:"line",dataIndex:"id",width:20,hidden:true},{resizable:true,id:"sipCombo",header:this.app.i18n._("sipCombo"),dataIndex:"asteriskline_id",width:80,editor:h,renderer:function(l,j,k){if(k.data&&k.data.name){return k.data.name}else{if(h.store.getById(l)){return h.store.getById(l).get("name")}else{return""}}}},{resizable:true,id:"idletext",header:this.app.i18n._("Idle Text"),dataIndex:"idletext",width:40,editor:new Ext.form.TextField({allowBlank:false,allowNegative:false,maxLength:60})},i]);var f=new Ext.grid.EditorGridPanel({region:"center",id:"Voipmanager_PhoneLines_Grid",store:this.linesStore,cm:g,autoSizeColumns:false,plugins:i,clicksToEdit:1,enableColLock:false,loadMask:true,autoExpandColumn:"idleText",border:false,view:new Ext.grid.GridView({autoFill:true,forceFit:true,ignoreAdd:true,emptyText:"No software to display"})});return{title:this.app.i18n._("Lines"),layout:"fit",items:[f]}},getRightsPanel:function(){return{title:this.app.i18n._("Users"),layout:"fit",items:new Tine.widgets.account.PickerGridPanel({selectType:"both",store:this.rightsStore,hasAccountPrefix:true})}}});Tine.Phone.MyPhoneEditDialog.openWindow=function(a){var c=(a.record&&a.record.id)?a.record.id:0;var b=Tine.WindowFactory.getWindow({width:700,height:450,name:Tine.Phone.MyPhoneEditDialog.prototype.windowNamePrefix+c,contentPanelConstructor:"Tine.Phone.MyPhoneEditDialog",contentPanelConstructorConfig:a});return b};Ext.ns("Tine.Timetracker");Tine.Timetracker.DurationSpinner=Ext.extend(Ext.ux.form.Spinner,{initComponent:function(){this.preventMark=false;this.strategy=new Ext.ux.form.Spinner.TimeStrategy({incrementValue:15});this.format=this.strategy.format},setValue:function(c){if(!c.toString().match(/:/)){var d=new Date(0);var a=Math.floor(c/60);var b=c-a*60;d.setHours(a);d.setMinutes(b);c=Ext.util.Format.date(d,this.format)}Tine.Timetracker.DurationSpinner.superclass.setValue.call(this,c)},validateValue:function(a){var b=Date.parseDate(a,this.format);return Ext.isDate(b)},getValue:function(){var a=Tine.Timetracker.DurationSpinner.superclass.getValue.call(this);a=a.replace(",",".");if(a&&typeof a=="string"){if(a.search(/:/)!=-1){var c=a.split(":");c[0]=c[0].length==1?"0"+c[0]:c[0];c[1]=c[1].length==1?"0"+c[1]:c[1];a=c.join(":");var b=Date.parseDate(a,this.format);if(!b){this.markInvalid(_("Not a valid time"));return}else{a=b.getHours()*60+b.getMinutes()}}else{if(a>0){if(a<24){a=a*60}}else{this.markInvalid(_("Not a valid time"));return}}}this.setValue(a);return a}});Ext.reg("tinedurationspinner",Tine.Timetracker.DurationSpinner);Ext.ns("Tine.Timetracker","Tine.Timetracker.Model");Tine.Timetracker.Model.TimesheetArray=Tine.Tinebase.Model.genericFields.concat([{name:"id"},{name:"account_id"},{name:"timeaccount_id"},{name:"start_date",type:"date",dateFormat:Date.patterns.ISO8601Short},{name:"start_time",type:"date",dateFormat:Date.patterns.ISO8601Time},{name:"duration"},{name:"description"},{name:"is_billable"},{name:"is_billable_combined"},{name:"is_cleared"},{name:"is_cleared_combined"},{name:"billed_in"},{name:"notes"},{name:"tags"},{name:"customfields"}]);Tine.Timetracker.Model.Timesheet=Tine.Tinebase.data.Record.create(Tine.Timetracker.Model.TimesheetArray,{appName:"Timetracker",modelName:"Timesheet",idProperty:"id",titleProperty:null,recordName:"Timesheet",recordsName:"Timesheets",containerProperty:"timeaccount_id",containerName:"timesheets list",containersName:"timesheets lists",getTitle:function(){var a=this.get("timeaccount_id");if(a){if(typeof(a.get)!=="function"){a=new Tine.Timetracker.Model.Timeaccount(a)}return a.getTitle()}}});Tine.Timetracker.Model.Timesheet.getDefaultData=function(){return{account_id:Tine.Tinebase.registry.get("currentAccount"),duration:"00:30",start_date:new Date(),is_billable:true,timeaccount_id:{account_grants:{editGrant:true}}}};Tine.Timetracker.Model.TimeaccountArray=Tine.Tinebase.Model.genericFields.concat([{name:"id"},{name:"container_id"},{name:"title"},{name:"number"},{name:"description"},{name:"budget"},{name:"budget_unit"},{name:"price"},{name:"price_unit"},{name:"is_open"},{name:"is_billable"},{name:"billed_in"},{name:"status"},{name:"account_grants"},{name:"grants"},{name:"notes"},{name:"tags"}]);Tine.Timetracker.Model.Timeaccount=Tine.Tinebase.data.Record.create(Tine.Timetracker.Model.TimeaccountArray,{appName:"Timetracker",modelName:"Timeaccount",idProperty:"id",titleProperty:"title",recordName:"Time Account",recordsName:"Time Accounts",containerProperty:"container_id",containerName:"timeaccount list",containersName:"timeaccount lists",getTitle:function(){return this.get("number")?(this.get("number")+" "+this.get("title")):false}});Tine.Timetracker.Model.Timeaccount.getDefaultData=function(){return{is_open:1,is_billable:true}};Tine.Timetracker.Model.Timeaccount.getFilterModel=function(){var a=Tine.Tinebase.appMgr.get("Timetracker");return[{label:_("Quick search"),field:"query",operators:["contains"]},{label:a.i18n._("Number"),field:"number"},{label:a.i18n._("Title"),field:"title"},{label:a.i18n._("Description"),field:"description",operators:["contains"]},{label:a.i18n._("Created By"),field:"created_by",valueType:"user"},{label:a.i18n._("Status"),field:"status",filtertype:"timetracker.timeaccountstatus"},{filtertype:"tinebase.tag",app:a}]};Tine.Timetracker.Model.TimeaccountGrant=Ext.data.Record.create([{name:"id"},{name:"account_id"},{name:"account_type"},{name:"account_name"},{name:"book_own",type:"boolean"},{name:"view_all",type:"boolean"},{name:"book_all",type:"boolean"},{name:"manage_billable",type:"boolean"},{name:"manage_all",type:"boolean"}]);Ext.namespace("Tine.Timetracker");Tine.Timetracker.TreePanel=Ext.extend(Tine.widgets.grid.PersistentFilterPicker,{filter:[{field:"model",operator:"equals",value:"Timetracker_Model_TimesheetFilter"}],initComponent:function(){this.filterMountId="Timesheet";this.root={id:"root",leaf:false,expanded:true,children:[{text:this.app.i18n._("Timesheets"),id:"Timesheet",iconCls:"TimetrackerTimesheet",expanded:true,children:[{text:this.app.i18n._("All Timesheets"),id:"alltimesheets",leaf:true}]},{text:this.app.i18n._("Timeaccounts"),id:"Timeaccount",iconCls:"TimetrackerTimeaccount",expanded:true,children:[{text:this.app.i18n._("All Timeaccounts"),id:"alltimeaccounts",leaf:true}]}]};Tine.Timetracker.TreePanel.superclass.initComponent.call(this);this.on("click",function(a){if(a.attributes.isPersistentFilter!=true){var b=a.getPath().split("/")[2];this.app.getMainScreen().activeContentType=b;this.app.getMainScreen().show()}},this)},afterRender:function(){Tine.Timetracker.TreePanel.superclass.afterRender.call(this);var a=this.app.getMainScreen().activeContentType;this.expandPath("/root/"+a+"/alltimesheets");this.selectPath("/root/"+a+"/alltimesheets")},getFilterPlugin:function(){if(!this.filterPlugin){var a=this;this.filterPlugin=new Tine.widgets.grid.FilterPlugin({getValue:function(){return[]}})}return this.filterPlugin}});Tine.Timetracker.timesheetBackend=new Tine.Tinebase.data.RecordProxy({appName:"Timetracker",modelName:"Timesheet",recordClass:Tine.Timetracker.Model.Timesheet});Tine.Timetracker.timeaccountBackend=new Tine.Tinebase.data.RecordProxy({appName:"Timetracker",modelName:"Timeaccount",recordClass:Tine.Timetracker.Model.Timeaccount});Ext.ns("Tine.Timetracker");Tine.Timetracker.MainScreen=Ext.extend(Tine.Tinebase.widgets.app.MainScreen,{activeContentType:"Timesheet",setContentPanel:function(){var a=this.activeContentType;if(!this[a+"GridPanel"]){this[a+"GridPanel"]=new Tine[this.app.appName][a+"GridPanel"]({app:this.app,plugins:[this.treePanel.getFilterPlugin()]})}Tine.Tinebase.MainScreen.setActiveContentPanel(this[a+"GridPanel"],true);this[a+"GridPanel"].store.load()},getContentPanel:function(){return this["TimesheetGridPanel"]},setToolbar:function(){var a=this.activeContentType;if(!this[a+"ActionToolbar"]){this[a+"ActionToolbar"]=this[a+"GridPanel"].actionToolbar}Tine.Tinebase.MainScreen.setActiveToolbar(this[a+"ActionToolbar"],true)}});Ext.ns("Tine.Timetracker");Tine.Timetracker.TimeAccountSelect=Ext.extend(Ext.form.ComboBox,{recordProxy:Tine.Timetracker.timeaccountBackend,onlyBookable:true,showClosed:false,blurOnSelect:false,defaultPaging:{start:0,limit:50},record:null,itemSelector:"div.search-item",typeAhead:false,minChars:3,pageSize:10,forceSelection:true,displayField:"displaytitle",triggerAction:"all",selectOnFocus:true,initComponent:function(){this.app=Tine.Tinebase.appMgr.get("Timetracker");this.store=new Ext.data.Store({fields:Tine.Timetracker.Model.TimeaccountArray.concat({name:"displaytitle"}),proxy:this.recordProxy,reader:this.recordProxy.getReader(),remoteSort:true,sortInfo:{field:"number",dir:"ASC"},listeners:{scope:this,beforeload:this.onStoreBeforeload}});this.tpl=new Ext.XTemplate('<tpl for="."><div class="search-item">','<span>{[this.encode(values.number)]} - {[this.encode(values.title)]}<tpl if="is_open != 1 ">&nbsp;<i>('+this.app.i18n._("closed")+")</i></tpl>","</span></div></tpl>",{encode:function(a){if(a){return Ext.util.Format.htmlEncode(a)}else{return""}}});Tine.Timetracker.TimeAccountSelect.superclass.initComponent.call(this);if(this.blurOnSelect){this.on("select",function(){this.fireEvent("blur",this)},this)}},getValue:function(){return this.record?this.record.get("id"):null},setValue:function(a){if(a){if(typeof(a.get)=="function"){this.record=a}else{if(typeof(a)=="string"){}else{this.record=new Tine.Timetracker.Model.Timeaccount(a,a.id)}}var b=this.record.getTitle();if(b){Tine.Timetracker.TimeAccountSelect.superclass.setValue.call(this,b)}}},onSelect:function(a){a.set("displaytitle",a.getTitle());this.record=a;Tine.Timetracker.TimeAccountSelect.superclass.onSelect.call(this,a)},onStoreBeforeload:function(a,b){b.params=b.params||{};b.params.filter=[{field:"query",operator:"contains",value:a.baseParams.query}];if(this.onlyBookable){b.params.filter.push({field:"isBookable",operator:"equals",value:1})}if(this.showClosed){b.params.filter.push({field:"showClosed",operator:"equals",value:1})}}});Tine.Timetracker.TimeAccountGridFilter=Ext.extend(Tine.widgets.grid.FilterModel,{isForeignFilter:true,foreignField:"id",ownField:"timeaccount_id",initComponent:function(){Tine.widgets.tags.TagFilter.superclass.initComponent.call(this);this.subFilterModels=[];this.app=Tine.Tinebase.appMgr.get("Timetracker");this.label=this.app.i18n._("Time Account");this.operators=["equals"]},getSubFilters:function(){var a=Tine.Timetracker.Model.Timeaccount.getFilterModel();Ext.each(a,function(b){if(b.field!="query"){this.subFilterModels.push(Tine.widgets.grid.FilterToolbar.prototype.createFilterModel.call(this,b))}},this);return this.subFilterModels},valueRenderer:function(b,a){var c=new Tine.Timetracker.TimeAccountSelect({filter:b,onlyBookable:false,showClosed:true,blurOnSelect:true,width:200,listWidth:500,id:"tw-ftb-frow-valuefield-"+b.id,value:b.data.value?b.data.value:this.defaultValue,renderTo:a});c.on("specialkey",function(f,d){if(d.getKey()==d.ENTER){this.onFiltertrigger()}},this);return c}});Tine.widgets.grid.FilterToolbar.FILTERS["timetracker.timeaccount"]=Tine.Timetracker.TimeAccountGridFilter;Tine.Timetracker.TimeAccountStatusGridFilter=Ext.extend(Tine.widgets.grid.FilterModel,{field:"timeaccount_status",valueType:"string",defaultValue:"to bill",initComponent:function(){Tine.widgets.tags.TagFilter.superclass.initComponent.call(this);this.app=Tine.Tinebase.appMgr.get("Timetracker");this.label=this.label?this.label:this.app.i18n._("Time Account - Status");this.operators=["equals"]},valueRenderer:function(b,a){var c=new Ext.form.ComboBox({filter:b,width:200,id:"tw-ftb-frow-valuefield-"+b.id,value:b.data.value?b.data.value:this.defaultValue,renderTo:a,mode:"local",forceSelection:true,blurOnSelect:true,triggerAction:"all",store:[["not yet billed",this.app.i18n._("not yet billed")],["to bill",this.app.i18n._("to bill")],["billed",this.app.i18n._("billed")]]});c.on("specialkey",function(f,d){if(d.getKey()==d.ENTER){this.onFiltertrigger()}},this);return c}});Tine.widgets.grid.FilterToolbar.FILTERS["timetracker.timeaccountstatus"]=Tine.Timetracker.TimeAccountStatusGridFilter;Ext.namespace("Tine.Timetracker");Tine.Timetracker.TimeaccountGridPanel=Ext.extend(Tine.Tinebase.widgets.app.GridPanel,{recordClass:Tine.Timetracker.Model.Timeaccount,defaultSortInfo:{field:"creation_time",direction:"DESC"},gridConfig:{loadMask:true,autoExpandColumn:"title"},initComponent:function(){this.recordProxy=Tine.Timetracker.timeaccountBackend;this.actionToolbarItems=this.getToolbarItems();this.gridConfig.cm=this.getColumnModel();this.initFilterToolbar();this.plugins=this.plugins||[];this.plugins.push(this.action_showClosedToggle,this.filterToolbar);Tine.Timetracker.TimeaccountGridPanel.superclass.initComponent.call(this);this.action_addInNewWindow.setDisabled(!Tine.Tinebase.common.hasRight("manage","Timetracker","timeaccounts"));this.action_editInNewWindow.requiredGrant="editGrant"},initFilterToolbar:function(){this.filterToolbar=new Tine.widgets.grid.FilterToolbar({filterModels:Tine.Timetracker.Model.Timeaccount.getFilterModel(),defaultFilter:"query",filters:[],plugins:[new Tine.widgets.grid.FilterToolbarQuickFilterPlugin()]})},getColumnModel:function(){return new Ext.grid.ColumnModel({defaults:{sortable:true,resizable:true},columns:[{id:"tags",header:this.app.i18n._("Tags"),width:50,dataIndex:"tags",sortable:false,renderer:Tine.Tinebase.common.tagsRenderer},{id:"number",header:this.app.i18n._("Number"),width:100,dataIndex:"number"},{id:"title",header:this.app.i18n._("Title"),width:350,dataIndex:"title"},{id:"status",header:this.app.i18n._("Status"),width:150,dataIndex:"status",renderer:this.statusRenderer.createDelegate(this)},{id:"budget",header:this.app.i18n._("Budget"),width:100,dataIndex:"budget"},{id:"billed_in",hidden:true,header:this.app.i18n._("Cleared in"),width:150,dataIndex:"billed_in"}]})},statusRenderer:function(a){return this.app.i18n._hidden(a)},getToolbarItems:function(){this.exportButton=new Ext.Action({text:_("Export"),iconCls:"action_export",scope:this,requiredGrant:"readGrant",disabled:true,allowMultiple:true,menu:{items:[new Tine.widgets.grid.ExportButton({text:this.app.i18n._("Export as ODS"),format:"ods",exportFunction:"Timetracker.exportTimeaccounts",gridPanel:this})]}});this.action_showClosedToggle=new Tine.widgets.grid.FilterButton({text:this.app.i18n._("Show closed"),iconCls:"action_showArchived",field:"showClosed"});return[new Ext.Toolbar.Separator(),this.action_showClosedToggle,this.exportButton]}});Ext.namespace("Tine.Timetracker");Tine.Timetracker.TimeaccountEditDialog=Ext.extend(Tine.widgets.dialog.EditDialog,{windowNamePrefix:"TimeaccountEditWindow_",appName:"Timetracker",recordClass:Tine.Timetracker.Model.Timeaccount,recordProxy:Tine.Timetracker.timeaccountBackend,loadRecord:false,tbarItems:[{xtype:"widget-activitiesaddbutton"}],updateToolbars:function(){},onRecordLoad:function(){this.getGrantsGrid();var a=this.record.get("grants")||[];this.grantsStore.loadData({results:a});Tine.Timetracker.TimeaccountEditDialog.superclass.onRecordLoad.call(this)},onRecordUpdate:function(){Tine.Timetracker.TimeaccountEditDialog.superclass.onRecordUpdate.call(this);this.record.set("grants","");var a=[];this.grantsStore.each(function(b){a.push(b.data)});this.record.set("grants",a)},getFormItems:function(){return{xtype:"tabpanel",border:false,plain:true,activeTab:0,items:[{title:this.app.i18n._("Time Account"),autoScroll:true,border:false,frame:true,layout:"border",items:[{region:"center",xtype:"columnform",labelAlign:"top",formDefaults:{xtype:"textfield",anchor:"100%",labelSeparator:"",columnWidth:0.333},items:[[{fieldLabel:this.app.i18n._("Number"),name:"number",allowBlank:false},{columnWidth:0.666,fieldLabel:this.app.i18n._("Title"),name:"title",allowBlank:false}],[{columnWidth:1,fieldLabel:this.app.i18n._("Description"),xtype:"textarea",name:"description",height:150}],[{fieldLabel:this.app.i18n._("Unit"),name:"price_unit"},{xtype:"numberfield",fieldLabel:this.app.i18n._("Unit Price"),name:"price",allowNegative:false},{fieldLabel:this.app.i18n._("Budget"),name:"budget"},{fieldLabel:this.app.i18n._("Status"),name:"is_open",xtype:"combo",mode:"local",forceSelection:true,triggerAction:"all",store:[[0,this.app.i18n._("closed")],[1,this.app.i18n._("open")]]},{fieldLabel:this.app.i18n._("Billed"),name:"status",xtype:"combo",mode:"local",forceSelection:true,triggerAction:"all",value:"not yet billed",store:[["not yet billed",this.app.i18n._("not yet billed")],["to bill",this.app.i18n._("to bill")],["billed",this.app.i18n._("billed")]]},{fieldLabel:this.app.i18n._("Cleared In"),name:"billed_in",xtype:"textfield"},{hideLabel:true,boxLabel:this.app.i18n._("Timesheets are billable"),name:"is_billable",xtype:"checkbox"}]]},{layout:"accordion",animate:true,region:"east",width:210,split:true,collapsible:true,collapseMode:"mini",margins:"0 5 0 5",border:true,items:[new Tine.widgets.activities.ActivitiesPanel({app:"Timetracker",showAddNoteForm:false,border:false,bodyStyle:"border:1px solid #B5B8C8;"}),new Tine.widgets.tags.TagPanel({app:"Timetracker",border:false,bodyStyle:"border:1px solid #B5B8C8;"})]}]},{title:this.app.i18n._("Access"),layout:"fit",items:[this.getGrantsGrid()]},new Tine.widgets.activities.ActivitiesTabPanel({app:this.appName,record_id:this.record.id,record_model:this.appName+"_Model_"+this.recordClass.getMeta("modelName")})]}},getGrantsGrid:function(){if(!this.grantsGrid){this.grantsStore=new Ext.data.JsonStore({root:"results",totalProperty:"totalcount",id:"account_id",fields:Tine.Timetracker.Model.TimeaccountGrant});var a=[new Ext.ux.grid.CheckColumn({header:this.app.i18n._("Book Own"),dataIndex:"book_own",width:55}),new Ext.ux.grid.CheckColumn({header:this.app.i18n._("View All"),dataIndex:"view_all",width:55}),new Ext.ux.grid.CheckColumn({header:this.app.i18n._("Book All"),dataIndex:"book_all",width:55}),new Ext.ux.grid.CheckColumn({header:this.app.i18n._("Manage Clearing"),dataIndex:"manage_billable",width:55}),new Ext.ux.grid.CheckColumn({header:this.app.i18n._("Manage All"),dataIndex:"manage_all",width:55})];this.grantsGrid=new Tine.widgets.account.PickerGridPanel({selectType:"both",title:this.app.i18n._("Permissions"),store:this.grantsStore,hasAccountPrefix:true,configColumns:a,selectAnyone:false,recordClass:Tine.Tinebase.Model.Grant})}return this.grantsGrid}});Tine.Timetracker.TimeaccountEditDialog.openWindow=function(a){var c=(a.record&&a.record.id)?a.record.id:0;var b=Tine.WindowFactory.getWindow({width:800,height:470,name:Tine.Timetracker.TimeaccountEditDialog.prototype.windowNamePrefix+c,contentPanelConstructor:"Tine.Timetracker.TimeaccountEditDialog",contentPanelConstructorConfig:a});return b};Ext.namespace("Tine.Timetracker");Tine.Timetracker.TimesheetGridPanel=Ext.extend(Tine.Tinebase.widgets.app.GridPanel,{recordClass:Tine.Timetracker.Model.Timesheet,defaultSortInfo:{field:"start_date",direction:"DESC"},gridConfig:{loadMask:true,autoExpandColumn:"description"},initComponent:function(){this.recordProxy=Tine.Timetracker.timesheetBackend;this.gridConfig.cm=this.getColumnModel();this.initFilterToolbar();this.actionToolbarItems=this.getToolbarItems();this.initDetailsPanel();this.contextMenuItems=["-",this.exportButton,"-",{text:_("Mass Update"),iconCls:"action_edit",disabled:!Tine.Tinebase.common.hasRight("manage","Timetracker","timeaccounts"),scope:this,menu:{items:['<b class="x-ux-menu-title">'+_("Update field:")+"</b>",{text:this.app.i18n._("Billable"),field:"is_billable",scope:this,handler:this.onMassUpdate},{text:this.app.i18n._("Cleared"),field:"is_cleared",scope:this,handler:this.onMassUpdate},{text:this.app.i18n._("Cleared in"),field:"billed_in",scope:this,handler:this.onMassUpdate}]}}];this.plugins=this.plugins||[];this.plugins.push(this.filterToolbar);Tine.Timetracker.TimesheetGridPanel.superclass.initComponent.call(this)},onMassUpdate:function(c,g){var b;switch(c.field){case"is_billable":case"is_cleared":b=new Ext.form.Checkbox({hideLabel:true,boxLabel:c.text,name:c.field});break;default:b=new Ext.form.TextField({fieldLabel:c.text,name:c.field})}var h=this.grid.getSelectionModel();var d=h.getSelectionFilter();var a=new Ext.FormPanel({border:false,labelAlign:"top",buttonAlign:"right",items:b,defaults:{anchor:"90%"}});var f=new Ext.Window({title:String.format(_("Update {0} records"),h.getCount()),width:300,height:150,layout:"fit",plain:true,closeAction:"close",autoScroll:true,items:a,buttons:[{text:_("Cancel"),iconCls:"action_cancel",handler:function(){f.close()}},{text:_("Ok"),iconCls:"action_saveAndClose",scope:this,handler:function(){f.close();this.grid.loadMask.show();var i={};i[b.name]=b.getValue();if(b.name=="is_cleared"&&!i[b.name]){i.billed_in=""}if(b.name=="billed_in"&&i[b.name].length>0){i.is_cleared=true}this.recordProxy.updateRecords(d,i,{scope:this,success:function(j){this.store.load();Ext.Msg.show({title:_("Success"),msg:String.format(_("Updated {0} records"),j.count),buttons:Ext.Msg.OK,animEl:"elId",icon:Ext.MessageBox.INFO})}})}}]});f.show()},initFilterToolbar:function(){this.filterToolbar=new Tine.widgets.grid.FilterToolbar({allowSaving:true,filterModels:[{label:this.app.i18n._("Account"),field:"account_id",valueType:"user"},{label:this.app.i18n._("Date"),field:"start_date",valueType:"date",pastOnly:true},{label:this.app.i18n._("Description"),field:"description",defaultOperator:"contains"},{label:this.app.i18n._("Billable"),field:"is_billable",valueType:"bool",defaultValue:true},{label:this.app.i18n._("Cleared"),field:"is_cleared",valueType:"bool",defaultValue:false},{filtertype:"tinebase.tag",app:this.app},{filtertype:"timetracker.timeaccount"}],defaultFilter:"start_date",filters:[{field:"start_date",operator:"within",value:"weekThis"},{field:"account_id",operator:"equals",value:Tine.Tinebase.registry.get("currentAccount")}]})},getColumnModel:function(){return new Ext.grid.ColumnModel({defaults:{sortable:true,resizable:true},columns:[{id:"tags",header:this.app.i18n._("Tags"),width:50,dataIndex:"tags",sortable:false,renderer:Tine.Tinebase.common.tagsRenderer},{id:"start_date",header:this.app.i18n._("Date"),width:120,dataIndex:"start_date",renderer:Tine.Tinebase.common.dateRenderer},{id:"start_time",header:this.app.i18n._("Start time"),width:100,dataIndex:"start_time",hidden:true,renderer:Tine.Tinebase.common.timeRenderer},{id:"timeaccount_id",header:this.app.i18n._("Time Account"),width:500,dataIndex:"timeaccount_id",renderer:this.rendererTimeaccountId},{id:"timeaccount_closed",header:this.app.i18n._("Time Account closed"),width:100,dataIndex:"timeaccount_closed",hidden:true,renderer:this.rendererTimeaccountClosed},{id:"description",header:this.app.i18n._("Description"),width:400,dataIndex:"description",hidden:true},{id:"is_billable",header:this.app.i18n._("Billable"),width:100,dataIndex:"is_billable_combined",renderer:Tine.Tinebase.common.booleanRenderer},{id:"is_cleared",header:this.app.i18n._("Cleared"),width:100,dataIndex:"is_cleared_combined",hidden:true,renderer:Tine.Tinebase.common.booleanRenderer},{id:"billed_in",header:this.app.i18n._("Cleared in"),width:150,dataIndex:"billed_in",hidden:true},{id:"account_id",header:this.app.i18n._("Account"),width:350,dataIndex:"account_id",renderer:Tine.Tinebase.common.usernameRenderer},{id:"duration",header:this.app.i18n._("Duration"),width:150,dataIndex:"duration",renderer:Tine.Tinebase.common.minutesRenderer}]})},rendererTimeaccountId:function(a){return new Tine.Timetracker.Model.Timeaccount(a).getTitle()},rendererTimeaccountClosed:function(f,c,d){var g=(d.data.timeaccount_id.is_open=="1");return Tine.Tinebase.common.booleanRenderer(!g)},initDetailsPanel:function(){this.detailsPanel=new Tine.Tinebase.widgets.grid.DetailsPanel({gridpanel:this,defaultTpl:new Ext.XTemplate('<div class="preview-panel-timesheet-nobreak">',"<!-- Preview timeframe -->",'<div class="preview-panel preview-panel-timesheet-left">','<div class="bordercorner_1"></div>','<div class="bordercorner_2"></div>','<div class="bordercorner_3"></div>','<div class="bordercorner_4"></div>','<div class="preview-panel-declaration"></div>','<div class="preview-panel-timesheet-leftside preview-panel-left">','<span class="preview-panel-bold">',"<br/>","<br/>","<br/>","<br/>","</span>","</div>",'<div class="preview-panel-timesheet-rightside preview-panel-left">','<span class="preview-panel-nonbold">',"<br/>","<br/>","<br/>","<br/>","</span>","</div>","</div>","<!-- Preview summary -->",'<div class="preview-panel-timesheet-right">','<div class="bordercorner_gray_1"></div>','<div class="bordercorner_gray_2"></div>','<div class="bordercorner_gray_3"></div>','<div class="bordercorner_gray_4"></div>','<div class="preview-panel-declaration"></div>','<div class="preview-panel-timesheet-leftside preview-panel-left">','<span class="preview-panel-bold">',this.app.i18n._("Total Timesheets")+"<br/>",this.app.i18n._("Billable Timesheets")+"<br/>",this.app.i18n._("Total Time")+"<br/>",this.app.i18n._("Time of Billable Timesheets")+"<br/>","</span>","</div>",'<div class="preview-panel-timesheet-rightside preview-panel-left">','<span class="preview-panel-nonbold">',"{count}<br/>","{countbillable}<br/>","{sum}<br/>","{sumbillable}<br/>","</span>","</div>","</div>","</div>"),showDefault:function(a){var b={count:this.gridpanel.store.proxy.jsonReader.jsonData.totalcount,countbillable:(this.gridpanel.store.proxy.jsonReader.jsonData.totalcountbillable)?this.gridpanel.store.proxy.jsonReader.jsonData.totalcountbillable:0,sum:Tine.Tinebase.common.minutesRenderer(this.gridpanel.store.proxy.jsonReader.jsonData.totalsum),sumbillable:Tine.Tinebase.common.minutesRenderer(this.gridpanel.store.proxy.jsonReader.jsonData.totalsumbillable)};this.defaultTpl.overwrite(a,b)},showMulti:function(c,a){var b={count:c.getCount(),countbillable:0,sum:0,sumbillable:0};c.each(function(d){b.sum=b.sum+parseInt(d.data.duration);if(d.data.is_billable_combined=="1"){b.countbillable++;b.sumbillable=b.sumbillable+parseInt(d.data.duration)}});b.sum=Tine.Tinebase.common.minutesRenderer(b.sum);b.sumbillable=Tine.Tinebase.common.minutesRenderer(b.sumbillable);this.defaultTpl.overwrite(a,b)},tpl:new Ext.XTemplate('<div class="preview-panel-timesheet-nobreak">',"<!-- Preview beschreibung -->",'<div class="preview-panel preview-panel-timesheet-left">','<div class="bordercorner_1"></div>','<div class="bordercorner_2"></div>','<div class="bordercorner_3"></div>','<div class="bordercorner_4"></div>','<div class="preview-panel-declaration"></div>','<div class="preview-panel-timesheet-description preview-panel-left" ext:qtip="{[this.encode(values.description)]}">','<span class="preview-panel-nonbold">','{[this.encode(values.description, "longtext")]}',"<br/>","</span>","</div>","</div>","<!-- Preview detail-->",'<div class="preview-panel-timesheet-right">','<div class="bordercorner_gray_1"></div>','<div class="bordercorner_gray_2"></div>','<div class="bordercorner_gray_3"></div>','<div class="bordercorner_gray_4"></div>','<div class="preview-panel-declaration"></div>','<div class="preview-panel-timesheet-leftside preview-panel-left">',"</div>",'<div class="preview-panel-timesheet-rightside preview-panel-left">','<span class="preview-panel-nonbold">',"<br/>","<br/>","<br/>","<br/>","</span>","</div>","</div>","</div>",{encode:function(c,a,b){if(c){if(a){switch(a){case"longtext":c=Ext.util.Format.ellipsis(c,150);break;default:c+=a}}var d=Ext.util.Format.htmlEncode(c);d=Ext.util.Format.nl2br(d);return d}else{return""}}})})},getToolbarItems:function(){this.exportButton=new Ext.Action({text:_("Export"),iconCls:"action_export",scope:this,requiredGrant:"readGrant",disabled:true,allowMultiple:true,menu:{items:[new Tine.widgets.grid.ExportButton({text:this.app.i18n._("Export as ODS"),format:"ods",iconCls:"tinebase-action-export-ods",exportFunction:"Timetracker.exportTimesheets",gridPanel:this}),new Tine.widgets.grid.ExportButton({text:this.app.i18n._("Export as CSV"),format:"csv",iconCls:"tinebase-action-export-csv",exportFunction:"Timetracker.exportTimesheets",gridPanel:this})]}});return["-",this.exportButton]}});Ext.namespace("Tine.Timetracker");Tine.Timetracker.TimesheetEditDialog=Ext.extend(Tine.widgets.dialog.EditDialog,{windowNamePrefix:"TimesheetEditWindow_",appName:"Timetracker",recordClass:Tine.Timetracker.Model.Timesheet,recordProxy:Tine.Timetracker.timesheetBackend,loadRecord:false,tbarItems:[{xtype:"widget-activitiesaddbutton"}],updateToolbars:function(a){this.onTimeaccountUpdate();Tine.Timetracker.TimesheetEditDialog.superclass.updateToolbars.call(this,a,"timeaccount_id")},onTimeaccountUpdate:function(g,c){var d=Tine.Tinebase.common.hasRight("manage","Timetracker","timeaccounts");var f=false;var b=false;var a=c?c.get("account_grants"):(this.record.get("timeaccount_id")?this.record.get("timeaccount_id").account_grants:{});if(a){this.getForm().findField("account_id").setDisabled(!(a.book_all||a.manage_all||d));f=!(a.manage_billable||a.manage_all||d);b=!(a.manage_all||d);this.getForm().findField("billed_in").setDisabled(!(a.manage_all||d))}if(c){f=f||c.data.is_billable=="0"||this.record.get("timeaccount_id").is_billable=="0";b=b||c.data.is_billable=="0"||this.record.get("timeaccount_id").is_billable=="0"}this.getForm().findField("is_billable").setDisabled(f);this.getForm().findField("is_cleared").setDisabled(b);if(this.record.id==0&&c){this.getForm().findField("is_billable").setValue(c.data.is_billable)}},onClearedUpdate:function(b,a){this.getForm().findField("billed_in").setDisabled(!a)},getFormItems:function(){return{xtype:"tabpanel",border:false,plain:true,activeTab:0,items:[{title:this.app.i18n._("Timesheet"),autoScroll:true,border:false,frame:true,layout:"border",items:[{region:"center",xtype:"columnform",labelAlign:"top",formDefaults:{xtype:"textfield",anchor:"100%",labelSeparator:"",columnWidth:0.333},items:[[new Tine.Timetracker.TimeAccountSelect({columnWidth:1,fieldLabel:this.app.i18n._("Time Account"),emptyText:this.app.i18n._("Select Time Account..."),loadingText:this.app.i18n._("Searching..."),allowBlank:false,name:"timeaccount_id",listeners:{scope:this,select:this.onTimeaccountUpdate}})],[{fieldLabel:this.app.i18n._("Duration"),name:"duration",allowBlank:false,xtype:"tinedurationspinner"},{fieldLabel:this.app.i18n._("Date"),name:"start_date",allowBlank:false,xtype:"datefield"},{fieldLabel:this.app.i18n._("Start"),emptyText:this.app.i18n._("not set"),name:"start_time",xtype:"timefield"}],[{columnWidth:1,fieldLabel:this.app.i18n._("Description"),emptyText:this.app.i18n._("Enter description..."),name:"description",allowBlank:false,xtype:"textarea",height:150}],[new Tine.Addressbook.SearchCombo({allowBlank:false,columnWidth:1,disabled:true,useAccountRecord:true,internalContactsOnly:true,nameField:"n_fileas",fieldLabel:this.app.i18n._("Account"),name:"account_id"}),{columnWidth:0.25,disabled:true,boxLabel:this.app.i18n._("Billable"),name:"is_billable",xtype:"checkbox"},{columnWidth:0.25,disabled:true,boxLabel:this.app.i18n._("Cleared"),name:"is_cleared",xtype:"checkbox",listeners:{scope:this,check:this.onClearedUpdate}},{columnWidth:0.5,disabled:true,fieldLabel:this.app.i18n._("Cleared In"),name:"billed_in",xtype:"textfield"}]]},{layout:"accordion",animate:true,region:"east",width:210,split:true,collapsible:true,collapseMode:"mini",margins:"0 5 0 5",border:true,items:[new Tine.widgets.activities.ActivitiesPanel({app:"Timetracker",showAddNoteForm:false,border:false,bodyStyle:"border:1px solid #B5B8C8;"}),new Tine.widgets.tags.TagPanel({app:"Timetracker",border:false,bodyStyle:"border:1px solid #B5B8C8;"})]}]},new Tine.Tinebase.widgets.customfields.CustomfieldsPanel({recordClass:this.recordClass,disabled:(Tine[this.appName].registry.get("customfields").length==0),quickHack:this}),new Tine.widgets.activities.ActivitiesTabPanel({app:this.appName,record_id:this.record.id,record_model:this.appName+"_Model_"+this.recordClass.getMeta("modelName")})]}}});Tine.Timetracker.TimesheetEditDialog.openWindow=function(a){var c=(a.record&&a.record.id)?a.record.id:0;var b=Tine.WindowFactory.getWindow({width:800,height:470,name:Tine.Timetracker.TimesheetEditDialog.prototype.windowNamePrefix+c,contentPanelConstructor:"Tine.Timetracker.TimesheetEditDialog",contentPanelConstructorConfig:a});return b};Ext.namespace("Tine.Admin");Tine.Admin=function(){var a=function(c){return[{text:c.gettext("User"),cls:"treemain",iconCls:"admin-node-user",allowDrag:false,allowDrop:true,id:"accounts",icon:false,children:[],leaf:null,expanded:true,dataPanelType:"accounts",viewRight:"accounts"},{text:c.gettext("Groups"),cls:"treemain",iconCls:"admin-node-groups",allowDrag:false,allowDrop:true,id:"groups",icon:false,children:[],leaf:null,expanded:true,dataPanelType:"groups",viewRight:"accounts"},{text:c.gettext("Computers"),cls:"treemain",iconCls:"admin-node-computers",allowDrag:false,allowDrop:true,id:"computers",icon:false,children:[],leaf:null,expanded:true,dataPanelType:"computers",viewRight:"computers"},{text:c.gettext("Applications"),cls:"treemain",iconCls:"admin-node-applications",allowDrag:false,allowDrop:true,id:"applications",icon:false,children:[],leaf:null,expanded:true,dataPanelType:"applications",viewRight:"apps"},{text:c.gettext("Access Log"),cls:"treemain",iconCls:"admin-node-accesslog",allowDrag:false,allowDrop:true,id:"accesslog",icon:false,children:[],leaf:null,expanded:true,dataPanelType:"accesslog",viewRight:"access_log"},{text:c.gettext("Shared Tags"),cls:"treemain",iconCls:"action_tag",allowDrag:false,allowDrop:true,id:"sharedtags",children:[],leaf:null,expanded:true,dataPanelType:"sharedtags",viewRight:"shared_tags"},{text:c.gettext("Roles"),cls:"treemain",iconCls:"action_permissions",allowDrag:false,allowDrop:true,id:"roles",children:[],leaf:null,expanded:true,dataPanelType:"roles",viewRight:"roles"}]};var b=function(){var k=new Locale.Gettext();k.textdomain("Admin");var j=new Ext.tree.TreeLoader({dataUrl:"index.php",baseParams:{jsonKey:Tine.Tinebase.registry.get("jsonKey"),method:"Admin.getSubTree",location:"mainTree"}});j.on("beforeload",function(l,i){l.baseParams.node=i.id},this);var h=new Ext.tree.TreePanel({title:k.gettext("Admin"),id:"admin-tree",iconCls:"AdminIconCls",loader:j,rootVisible:false,border:false,autoScroll:true});var c=new Ext.tree.TreeNode({text:"root",draggable:false,allowDrop:false,id:"root"});h.setRootNode(c);var f=a(k);for(var d=0;d<f.length;d++){var g=new Ext.tree.AsyncTreeNode(f[d]);if(f[d].viewRight&&!Tine.Tinebase.common.hasRight("view","Admin",f[d].viewRight)){g.disabled=true}c.appendChild(g)}h.on("click",function(l,i){if(l.disabled){return false}var m=Tine.Tinebase.MainScreen.getActiveToolbar();switch(l.attributes.dataPanelType){case"accesslog":if(m!==false&&m.id=="toolbarAdminAccessLog"){Ext.getCmp("gridAdminAccessLog").getStore().load({params:{start:0,limit:50}})}else{Tine.Admin.AccessLog.Main.show()}break;case"accounts":if(m!==false&&m.id=="AdminUserToolbar"){Ext.getCmp("AdminUserGrid").getStore().load({params:{start:0,limit:50}})}else{Tine.Admin.Users.Main.show()}break;case"groups":if(m!==false&&m.id=="AdminGroupsToolbar"){Ext.getCmp("AdminGroupsGrid").getStore().load({params:{start:0,limit:50}})}else{Tine.Admin.Groups.Main.show()}break;case"computers":Tine.Admin.sambaMachine.show();break;case"applications":if(m!==false&&m.id=="toolbarAdminApplications"){Ext.getCmp("gridAdminApplications").getStore().load({params:{start:0,limit:50}})}else{Tine.Admin.Applications.Main.show()}break;case"sharedtags":if(m!==false&&m.id=="AdminTagsToolbar"){Ext.getCmp("AdminTagsGrid").getStore().load({params:{start:0,limit:50}})}else{Tine.Admin.Tags.Main.show()}break;case"roles":if(m!==false&&m.id=="AdminRolesToolbar"){Ext.getCmp("AdminRolesGrid").getStore().load({params:{start:0,limit:50}})}else{Tine.Admin.Roles.Main.show()}break}},this);h.on("beforeexpand",function(i){if(i.getSelectionModel().getSelectedNode()===null){i.expandPath("/root");if(Tine.Tinebase.common.hasRight("manage","Admin","accounts")){i.selectPath("/root/accounts")}else{c.eachChild(function(l){if(Tine.Tinebase.common.hasRight("manage","Admin",l.attributes.viewRight)){i.selectPath("/root/"+l.id);return}},this)}}i.fireEvent("click",i.getSelectionModel().getSelectedNode())},this);h.on("contextmenu",function(l,i){i.stopEvent()});return h};return{getPanel:b}}();Ext.namespace("Tine.Admin.AccessLog");Tine.Admin.AccessLog.Main=function(){var i=function(l,k){Ext.MessageBox.confirm(this.translation.gettext("Confirm"),this.translation.gettext("Do you really want to delete the selected access log entries?"),function(o){if(o=="yes"){var q=new Array();var n=Ext.getCmp("gridAdminAccessLog").getSelectionModel().getSelections();for(var m=0;m<n.length;++m){q.push(n[m].data.id)}Ext.Ajax.request({params:{method:"Admin.deleteAccessLogEntries",logIds:Ext.util.JSON.encode(q)},callback:function(s,u,t){if(u===true){var r=Ext.util.JSON.decode(t.responseText);if(r.status=="success"){Ext.getCmp("gridAdminAccessLog").getStore().reload()}}}})}})};var d=function(l,k){Ext.getCmp("gridAdminAccessLog").getSelectionModel().selectAll()};var c=new Ext.Action({text:"delete entry",disabled:true,handler:i,iconCls:"action_delete",scope:this});var b=new Ext.Action({text:"select all",handler:d});var h=new Ext.menu.Menu({items:[c,"-",b]});var a=function(){var k=new Ext.data.JsonStore({url:"index.php",baseParams:{method:"Admin.getAccessLogEntries"},root:"results",totalProperty:"totalcount",storeId:"adminApplications_accesslogStore",fields:[{name:"sessionid"},{name:"login_name"},{name:"accountObject"},{name:"ip"},{name:"li",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"lo",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"id"},{name:"account_id"},{name:"result"}],remoteSort:true});k.setDefaultSort("li","desc");k.on("beforeload",function(n,m){if(!m.params){m.params={}}n.baseParams.filter=Ext.getCmp("AccessLogQuickSearchField").getValue();var l={sort:n.getSortState()?n.getSortState().field:Tine.Admin.AccessLog.Main.paging.sort,dir:n.getSortState()?n.getSortState().direction:Tine.Admin.AccessLog.Main.paging.dir,start:m.params.start?m.params.start:Tine.Admin.AccessLog.Main.paging.start,limit:m.params.limit?m.params.limit:Tine.Admin.AccessLog.Main.paging.limit};n.baseParams.paging=Ext.util.JSON.encode(l);var q=Date.parseDate(Ext.getCmp("adminApplications_dateFrom").getRawValue(),Ext.getCmp("adminApplications_dateFrom").format);n.baseParams.from=q.format("Y-m-d\\T00:00:00");var o=Date.parseDate(Ext.getCmp("adminApplications_dateTo").getRawValue(),Ext.getCmp("adminApplications_dateTo").format);n.baseParams.to=o.format("Y-m-d\\T23:59:59")},this);k.load({params:{start:0,limit:50}});return k};var f=function(){this.translation=new Locale.Gettext();this.translation.textdomain("Admin");c.setText(this.translation.gettext("delete entry"));b.setText(this.translation.gettext("select all"));var n=new Ext.ux.SearchField({id:"AccessLogQuickSearchField",width:200,emptyText:Tine.Tinebase.translation._hidden("enter searchfilter")});n.on("change",function(){Ext.getCmp("gridAdminAccessLog").getStore().load({params:{start:0,limit:50}})});var l=new Date();var k=new Date(l.getTime()-604800000);var q=new Ext.form.DateField({id:"adminApplications_dateFrom",allowBlank:false,validateOnBlur:false,format:Locale.getTranslationData("Date","medium"),value:k});var o=new Ext.form.DateField({id:"adminApplications_dateTo",allowBlank:false,validateOnBlur:false,format:Locale.getTranslationData("Date","medium"),value:l});var m=new Ext.Toolbar({id:"toolbarAdminAccessLog",split:false,height:26,items:[c,"->",this.translation.gettext("Display from:")+" "," ",q,new Ext.Toolbar.Spacer(),this.translation.gettext("to:")+" "," ",o,new Ext.Toolbar.Spacer(),"-",this.translation.gettext("Search:")," "," ",n]});Tine.Tinebase.MainScreen.setActiveToolbar(m);q.on("valid",function(s){var r=Ext.StoreMgr.get("adminApplications_accesslogStore").baseParams.from;var u=Date.parseDate(Ext.getCmp("adminApplications_dateFrom").getRawValue(),Ext.getCmp("adminApplications_dateFrom").format);var t=Date.parseDate(Ext.getCmp("adminApplications_dateTo").getRawValue(),Ext.getCmp("adminApplications_dateTo").format);if(u.getTime()>t.getTime()){Ext.getCmp("adminApplications_dateTo").setRawValue(Ext.getCmp("adminApplications_dateFrom").getRawValue())}if(r!=u.format("Y-m-d\\T00:00:00")){Ext.getCmp("gridAdminAccessLog").getStore().load({params:{start:0,limit:50}})}});o.on("valid",function(r){var s=Ext.StoreMgr.get("adminApplications_accesslogStore").baseParams.to;var u=Date.parseDate(Ext.getCmp("adminApplications_dateFrom").getRawValue(),Ext.getCmp("adminApplications_dateFrom").format);var t=Date.parseDate(Ext.getCmp("adminApplications_dateTo").getRawValue(),Ext.getCmp("adminApplications_dateTo").format);if(u.getTime()>t.getTime()){Ext.getCmp("adminApplications_dateFrom").setRawValue(Ext.getCmp("adminApplications_dateTo").getRawValue())}if(s!=t.format("Y-m-d\\T23:59:59")){Ext.getCmp("gridAdminAccessLog").getStore().load({params:{start:0,limit:50}})}})};var j=function(l,s,o,k,m,n){var r=new Locale.Gettext();r.textdomain("Admin");var q;switch(l){case"-3":q=r.gettext("invalid password");break;case"-2":q=r.gettext("ambiguous username");break;case"-1":q=r.gettext("user not found");break;case"0":q=r.gettext("failure");break;case"1":q=r.gettext("success");break}return q};var g=function(){c.setDisabled(true);var k=a();var o=new Ext.PagingToolbar({pageSize:50,store:k,displayInfo:true,displayMsg:this.translation.gettext("Displaying access log entries {0} - {1} of {2}"),emptyMsg:this.translation.gettext("No access log entries to display")});var n=new Ext.grid.ColumnModel({defaults:{sortable:true,resizable:true},columns:[{header:this.translation.gettext("Session ID"),id:"sessionid",dataIndex:"sessionid",width:200,hidden:true},{header:this.translation.gettext("Login Name"),id:"login_name",dataIndex:"login_name"},{header:this.translation.gettext("Name"),id:"accountObject",dataIndex:"accountObject",width:170,sortable:false,renderer:Tine.Tinebase.common.usernameRenderer},{header:this.translation.gettext("IP Address"),id:"ip",dataIndex:"ip",width:150},{header:this.translation.gettext("Login Time"),id:"li",dataIndex:"li",width:130,renderer:Tine.Tinebase.common.dateTimeRenderer},{header:this.translation.gettext("Logout Time"),id:"lo",dataIndex:"lo",width:130,renderer:Tine.Tinebase.common.dateTimeRenderer},{header:this.translation.gettext("Account ID"),id:"account_id",dataIndex:"account_id",width:70,hidden:true},{header:this.translation.gettext("Result"),id:"result",dataIndex:"result",width:110,renderer:j}]});var m=new Ext.grid.RowSelectionModel({multiSelect:true});m.on("selectionchange",function(r){var q=r.getCount();if(q<1){c.setDisabled(true)}else{if(Tine.Tinebase.common.hasRight("manage","Admin","access_log")){c.setDisabled(false)}}});var l=new Ext.grid.GridPanel({id:"gridAdminAccessLog",store:k,cm:n,tbar:o,autoSizeColumns:false,selModel:m,enableColLock:false,loadMask:true,autoExpandColumn:"login_name",border:false});Tine.Tinebase.MainScreen.setActiveContentPanel(l);l.on("rowcontextmenu",function(r,q,s){s.stopEvent();if(!r.getSelectionModel().isSelected(q)){r.getSelectionModel().selectRow(q);c.setDisabled(false)}h.showAt(s.getXY())})};return{show:function(){f();g();this.updateMainToolbar()},paging:{start:0,limit:50,sort:"li",dir:"DESC"},updateMainToolbar:function(){}}}();Ext.ns("Tine.Admin.Model");Tine.Admin.Model.TagRight=Ext.data.Record.create([{name:"account_id"},{name:"account_type"},{name:"account_name"},{name:"account_data"},{name:"view_right",type:"boolean"},{name:"use_right",type:"boolean"}]);Ext.namespace("Tine.Admin");Ext.namespace("Tine.Admin.Applications");Tine.Admin.Applications.Main=function(){var d=function(n,l){var m=Ext.getCmp("gridAdminApplications").getSelectionModel().getSelections();var k=m[0].data.name;Tine[k].AdminPanel.openWindow({record:(Tine[m[0].data.name].Model.Settings)?new Tine[m[0].data.name].Model.Settings(m[0].data.name):null,windowTitle:String.format(_("{0} Settings"),k)})};var b=function(m){var l=new Array();var n=Ext.getCmp("gridAdminApplications").getSelectionModel().getSelections();for(var k=0;k<n.length;++k){l.push(n[k].id)}Ext.Ajax.request({url:"index.php",method:"post",params:{method:"Admin.setApplicationState",applicationIds:Ext.util.JSON.encode(l),state:m},callback:function(q,s,r){if(s===true){var o=Ext.util.JSON.decode(r.responseText);if(o.success===true){Ext.getCmp("gridAdminApplications").getStore().reload()}}}})};var c=new Ext.Action({text:"enable application",disabled:true,handler:b.createDelegate(this,["enabled"]),iconCls:"action_enable"});var h=new Ext.Action({text:"disable application",disabled:true,handler:b.createDelegate(this,["disabled"]),iconCls:"action_disable"});var g=new Ext.Action({text:"settings",disabled:true,handler:d,iconCls:"action_settings"});var i=function(){var k=new Ext.data.JsonStore({url:"index.php",baseParams:{method:"Admin.getApplications"},root:"results",totalProperty:"totalcount",id:"id",fields:[{name:"id"},{name:"name"},{name:"status"},{name:"order"},{name:"app_tables"},{name:"version"}],remoteSort:true});k.setDefaultSort("name","asc");k.on("beforeload",function(l){l.baseParams.filter=Ext.getCmp("ApplicationsAdminQuickSearchField").getValue()});k.load({params:{start:0,limit:50}});return k};var j=function(){this.translation=new Locale.Gettext();this.translation.textdomain("Admin");c.setText(this.translation.gettext("enable application"));h.setText(this.translation.gettext("disable application"));var l=new Ext.ux.SearchField({id:"ApplicationsAdminQuickSearchField",width:240,emptyText:Tine.Tinebase.translation._hidden("enter searchfilter")});l.on("change",function(){Ext.getCmp("gridAdminApplications").getStore().load({params:{start:0,limit:50}})});var k=new Ext.Toolbar({id:"toolbarAdminApplications",split:false,height:26,items:[c,h,"-",g,"->",this.translation.gettext("Search:")," "," ",l]});Tine.Tinebase.MainScreen.setActiveToolbar(k)};var a=function(l,s,o,k,m,n){var r=new Locale.Gettext();r.textdomain("Admin");var q;switch(l){case"disabled":q=r.gettext("disabled");break;case"enabled":q=r.gettext("enabled");break;default:q=String.format(r.gettext("unknown status ({0})"),value);break}return q};var f=function(){var m=new Ext.menu.Menu({items:[c,h,g]});var k=i();var o=new Ext.PagingToolbar({pageSize:50,store:k,displayInfo:true,displayMsg:this.translation.gettext("Displaying application {0} - {1} of {2}"),emptyMsg:this.translation.gettext("No applications to display")});var q=new Ext.grid.ColumnModel({defaults:{sortable:true,resizable:true},columns:[{header:this.translation.gettext("Order"),id:"order",dataIndex:"order",width:50},{header:this.translation.gettext("Name"),id:"name",dataIndex:"name"},{header:this.translation.gettext("Status"),id:"status",dataIndex:"status",width:150,renderer:a},{header:this.translation.gettext("Version"),id:"version",dataIndex:"version",width:70}]});var l=new Ext.grid.RowSelectionModel({multiSelect:true});l.on("selectionchange",function(u){var r=u.getCount();var t=u.getSelections();if(Tine.Tinebase.common.hasRight("manage","Admin","apps")){if(r<1){c.setDisabled(true);h.setDisabled(true);g.setDisabled(true)}else{if(r>1){c.setDisabled(false);h.setDisabled(false);g.setDisabled(true)}else{c.setDisabled(false);h.setDisabled(false);if(Tine[t[0].data.name].AdminPanel){g.setDisabled(false)}}}for(var s=0;s<t.length;s++){if(typeof t[s].get=="function"&&t[s].get("name").toString().match(/Tinebase|Admin|Addressbook/)){c.setDisabled(true);h.setDisabled(true);break}}}});var n=new Ext.grid.GridPanel({id:"gridAdminApplications",store:k,cm:q,tbar:o,autoSizeColumns:false,selModel:l,enableColLock:false,loadMask:true,autoExpandColumn:"name",border:false,viewConfig:{getRowClass:function(r,s){var t="";switch(r.get("status")){case"disabled":t="grid_row_disabled";break;case"enabled":t="grid_row_enabled";break}return t}}});Tine.Tinebase.MainScreen.setActiveContentPanel(n);n.on("rowcontextmenu",function(s,r,t){t.stopEvent();if(!s.getSelectionModel().isSelected(r)){s.getSelectionModel().selectRow(r);if(Tine.Tinebase.common.hasRight("manage","Admin","apps")){c.setDisabled(false);h.setDisabled(false)}}m.showAt(t.getXY())},this);return};return{show:function(){j();f();this.updateMainToolbar()},updateMainToolbar:function(){}}}();Ext.namespace("Tine.Admin.Users");Tine.Admin.Users.Main=function(){var a=function(){var c=new Ext.data.DirectStore({directFn:Tine.Admin.getUsers,reader:new Ext.data.JsonReader({root:"results",totalProperty:"totalcount",id:"accountId"},Tine.Admin.Model.User),remoteSort:true});c.setDefaultSort("accountLoginName","asc");c.on("beforeload",function(d){d.baseParams.filter=Ext.getCmp("UserAdminQuickSearchField").getValue()});c.load({params:{start:0,limit:50}});return c};var b=function(d,j,h,c,f,g){var i;switch(d){case"enabled":i="<img src='images/oxygen/16x16/actions/dialog-apply.png' width='12' height='12'/>";break;case"disabled":i="<img src='images/oxygen/16x16/actions/dialog-cancel.png' width='12' height='12'/>";break;case"expired":i="<img src='images/oxygen/16x16/status/user-away.png' width='12' height='12'/>";break;default:i=d;break}return i};return{show:function(){this.initComponent();this.showToolbar();this.showMainGrid();this.updateMainToolbar()},updateMainToolbar:function(){},addButtonHandler:function(d,c){Tine.Admin.Users.EditDialog.openWindow({record:new Tine.Admin.Model.User({}),listeners:{scope:this,update:function(f){Ext.getCmp("AdminUserGrid").getStore().reload()}}})},editButtonHandler:function(g,c){var f=Ext.getCmp("AdminUserGrid").getSelectionModel().getSelections();var d=f[0];Tine.Admin.Users.EditDialog.openWindow({record:d,listeners:{scope:this,update:function(h){Ext.getCmp("AdminUserGrid").getStore().reload()}}})},enableDisableButtonHandler:function(j,d){var c="disabled";if(j.id=="Admin_User_Action_Enable"){c="enabled"}var f=new Array();var h=Ext.getCmp("AdminUserGrid").getSelectionModel().getSelections();for(var g=0;g<h.length;++g){f.push(h[g].id)}Ext.Ajax.request({url:"index.php",method:"post",params:{method:"Admin.setAccountState",accountIds:Ext.util.JSON.encode(f),status:c},callback:function(k,m,l){if(m===true){var i=Ext.util.JSON.decode(l.responseText);if(i.success===true){Ext.getCmp("AdminUserGrid").getStore().reload()}}}})},resetPasswordHandler:function(d,c){Ext.MessageBox.prompt(this.translation.gettext("Set new password"),this.translation.gettext("Please enter the new password:"),function(h,g){if(h=="ok"){var f=Ext.util.JSON.encode(Ext.getCmp("AdminUserGrid").getSelectionModel().getSelected().data);Ext.Ajax.request({params:{method:"Admin.resetPassword",account:f,password:g,mustChange:false},callback:function(j,l,k){if(l===true){var i=Ext.util.JSON.decode(k.responseText);if(i.success===true){Ext.getCmp("AdminUserGrid").getStore().reload()}}}})}})},deleteButtonHandler:function(d,c){Ext.MessageBox.confirm(this.translation.gettext("Confirm"),this.translation.gettext("Do you really want to delete the selected account(s)?"),function(h){if(h=="yes"){var f=new Array();var j=Ext.getCmp("AdminUserGrid").getSelectionModel().getSelections();for(var g=0;g<j.length;++g){f.push(j[g].id)}Ext.Ajax.request({url:"index.php",params:{method:"Admin.deleteUsers",accountIds:Ext.util.JSON.encode(f)},text:this.translation.gettext("Deleting account(s)..."),success:function(k,i){Ext.getCmp("AdminUserGrid").getStore().reload()},failure:function(i,k){Ext.MessageBox.alert(this.translation.gettext("Failed"),this.translation.gettext("Some error occurred while trying to delete the account(s)."))},scope:this})}},this)},actionEnable:null,actionDisable:null,actionResetPassword:null,actionAddAccount:null,actionEditAccount:null,actionDeleteAccount:null,showToolbar:function(){var d=new Ext.ux.SearchField({id:"UserAdminQuickSearchField",width:240,emptyText:Tine.Tinebase.translation._hidden("enter searchfilter")});d.on("change",function(){Ext.getCmp("AdminUserGrid").getStore().load({params:{start:0,limit:50}})});var c=new Ext.Toolbar({id:"AdminUserToolbar",split:false,height:26,items:[this.actionAddAccount,this.actionEditAccount,this.actionDeleteAccount,"->",this.translation.gettext("Search:")," "," ",d]});Tine.Tinebase.MainScreen.setActiveToolbar(c)},showMainGrid:function(){if(Tine.Tinebase.common.hasRight("manage","Admin","accounts")){this.actionAddAccount.setDisabled(false)}var j=new Ext.menu.Menu({items:[this.actionEditAccount,this.actionDeleteAccount,"-",this.actionEnable,this.actionDisable,this.actionResetPassword,"-",this.actionAddAccount]});var d=a();var k=new Ext.PagingToolbar({pageSize:50,store:d,displayInfo:true,displayMsg:this.translation.gettext("Displaying accounts {0} - {1} of {2}"),emptyMsg:this.translation.gettext("No accounts to display")});var c=Tine.Tinebase.registry.get("accountBackend");var i=(c=="Ldap");var h=new Ext.grid.ColumnModel({defaults:{sortable:true,resizable:true},columns:[{header:this.translation.gettext("ID"),id:"accountId",dataIndex:"accountId",hidden:true,width:50},{header:this.translation.gettext("Status"),id:"accountStatus",dataIndex:"accountStatus",hidden:i,width:50,renderer:b},{header:this.translation.gettext("Displayname"),id:"accountDisplayName",dataIndex:"accountDisplayName"},{header:this.translation.gettext("Loginname"),id:"accountLoginName",dataIndex:"accountLoginName",width:200},{header:this.translation.gettext("Last name"),id:"accountLastName",dataIndex:"accountLastName",hidden:true},{header:this.translation.gettext("First name"),id:"accountFirstName",dataIndex:"accountFirstName",hidden:true},{header:this.translation.gettext("Email"),id:"accountEmailAddress",dataIndex:"accountEmailAddress",width:200},{header:this.translation.gettext("OpenID"),id:"openid",dataIndex:"openid",width:200,hidden:true},{header:this.translation.gettext("Last login at"),id:"accountLastLogin",dataIndex:"accountLastLogin",hidden:i,width:130,renderer:Tine.Tinebase.common.dateTimeRenderer},{header:this.translation.gettext("Last login from"),id:"accountLastLoginfrom",hidden:i,dataIndex:"accountLastLoginfrom"},{header:this.translation.gettext("Password changed"),id:"accountLastPasswordChange",dataIndex:"accountLastPasswordChange",width:130,renderer:Tine.Tinebase.common.dateTimeRenderer},{header:this.translation.gettext("Expires"),id:"accountExpires",dataIndex:"accountExpires",width:130,renderer:Tine.Tinebase.common.dateTimeRenderer}]});var g=new Ext.grid.RowSelectionModel({multiSelect:true});g.on("selectionchange",function(m){var l=m.getCount();if(Tine.Tinebase.common.hasRight("manage","Admin","accounts")){if(l<1){this.actionEditAccount.setDisabled(true);this.actionDeleteAccount.setDisabled(true);this.actionEnable.setDisabled(true);this.actionDisable.setDisabled(true);this.actionResetPassword.setDisabled(true)}else{if(l>1){this.actionEditAccount.setDisabled(true);this.actionDeleteAccount.setDisabled(false);this.actionEnable.setDisabled(false);this.actionDisable.setDisabled(false);this.actionResetPassword.setDisabled(true)}else{this.actionEditAccount.setDisabled(false);this.actionDeleteAccount.setDisabled(false);this.actionEnable.setDisabled(false);this.actionDisable.setDisabled(false);this.actionResetPassword.setDisabled(false)}}}},this);var f=new Ext.grid.GridPanel({id:"AdminUserGrid",store:d,cm:h,tbar:k,autoSizeColumns:false,selModel:g,enableColLock:false,loadMask:true,autoExpandColumn:"accountDisplayName",border:false});Tine.Tinebase.MainScreen.setActiveContentPanel(f);f.on("rowcontextmenu",function(m,l,n){n.stopEvent();if(!m.getSelectionModel().isSelected(l)){m.getSelectionModel().selectRow(l);this.actionEnable.setDisabled(false);this.actionDisable.setDisabled(false)}j.showAt(n.getXY())},this);f.on("rowdblclick",function(m,n,o){var l=m.getStore().getAt(n);Tine.Admin.Users.EditDialog.openWindow({record:l,listeners:{scope:this,update:function(q){Ext.getCmp("AdminUserGrid").getStore().reload()}}})});f.on("keydown",function(l){if(l.getKey()==l.DELETE&&Ext.getCmp("AdminUserGrid").getSelectionModel().getCount()>0){this.deleteButtonHandler()}},this)},initComponent:function(){this.translation=new Locale.Gettext();this.translation.textdomain("Admin");this.actionAddAccount=new Ext.Action({text:this.translation.gettext("add account"),disabled:true,handler:this.addButtonHandler,iconCls:"action_addContact",scope:this});this.actionEditAccount=new Ext.Action({text:this.translation.gettext("edit account"),disabled:true,handler:this.editButtonHandler,iconCls:"action_edit",scope:this});this.actionDeleteAccount=new Ext.Action({text:this.translation.gettext("delete account"),disabled:true,handler:this.deleteButtonHandler,iconCls:"action_delete",scope:this});this.actionEnable=new Ext.Action({text:this.translation.gettext("enable account"),disabled:true,handler:this.enableDisableButtonHandler,iconCls:"action_enable",id:"Admin_User_Action_Enable",scope:this});this.actionDisable=new Ext.Action({text:this.translation.gettext("disable account"),disabled:true,handler:this.enableDisableButtonHandler,iconCls:"action_disable",id:"Admin_User_Action_Disable",scope:this});this.actionResetPassword=new Ext.Action({text:this.translation.gettext("reset password"),disabled:true,handler:this.resetPasswordHandler,iconCls:"action_password",id:"Admin_User_Action_resetPassword",scope:this})},reload:function(){if(Ext.ComponentMgr.all.containsKey("AdminUserGrid")){setTimeout("Ext.getCmp('AdminUserGrid').getStore().reload()",200)}}}}();Ext.ns("Tine.Admin.Model");Tine.Admin.Model.UserArray=[{name:"accountId"},{name:"accountFirstName"},{name:"accountLastName"},{name:"accountLoginName"},{name:"accountPassword"},{name:"accountDisplayName"},{name:"accountFullName"},{name:"accountStatus"},{name:"accountPrimaryGroup"},{name:"accountExpires",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"accountLastLogin",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"accountLastPasswordChange",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"accountLastLoginfrom"},{name:"accountEmailAddress"},{name:"accountHomeDirectory"},{name:"accountLoginShell"},{name:"openid"},{name:"visibility"},{name:"sambaSAM"},{name:"emailUser"}];Tine.Admin.Model.User=Tine.Tinebase.data.Record.create(Tine.Admin.Model.UserArray,{appName:"Admin",modelName:"User",idProperty:"accountId",titleProperty:"accountDisplayName",recordName:"User",recordsName:"Users"});Tine.Admin.Model.SAMUserArray=[{name:"sid"},{name:"primaryGroupSID"},{name:"acctFlags"},{name:"homeDrive"},{name:"homePath"},{name:"profilePath"},{name:"logonScript"},{name:"logonTime",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"logoffTime",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"kickoffTime",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"pwdLastSet",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"pwdCanChange",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"pwdMustChange",type:"date",dateFormat:Date.patterns.ISO8601Long}];Tine.Admin.Model.SAMUser=Tine.Tinebase.data.Record.create(Tine.Admin.Model.SAMUserArray,{appName:"Admin",modelName:"SAMUser",idProperty:"sid",titleProperty:null,recordName:"Samba User",recordsName:"Samba Users"});Tine.Admin.Model.EmailUserArray=[{name:"emailUID"},{name:"emailGID"},{name:"emailMailQuota"},{name:"emailMailSize"},{name:"emailSieveQuota"},{name:"emailSieveSize"},{name:"emailLastLogin",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"emailUserId"},{name:"emailAliases"},{name:"emailForwards"},{name:"emailForwardOnly"},{name:"emailAddress"}];Tine.Admin.Model.EmailUser=Tine.Tinebase.data.Record.create(Tine.Admin.Model.EmailUserArray,{appName:"Admin",modelName:"EmailUser",idProperty:"sid",titleProperty:null,recordName:"Email User",recordsName:"Email Users"});Tine.Admin.userBackend=new Tine.Tinebase.data.RecordProxy({appName:"Admin",modelName:"User",recordClass:Tine.Admin.Model.User,idProperty:"accountId"});Tine.Admin.samUserBackend=new Tine.Tinebase.data.RecordProxy({appName:"Admin",modelName:"SAMUser",recordClass:Tine.Admin.Model.SAMUser,idProperty:"sid"});Tine.Admin.emailUserBackend=new Tine.Tinebase.data.RecordProxy({appName:"Admin",modelName:"EmailUser",recordClass:Tine.Admin.Model.EmailUser,idProperty:"emailUID"});Ext.namespace("Tine.Admin","Tine.Admin.Users");Tine.Admin.Users.EditDialog=Ext.extend(Tine.widgets.dialog.EditDialog,{windowNamePrefix:"userEditWindow_",appName:"Admin",recordClass:Tine.Admin.Model.User,recordProxy:Tine.Admin.userBackend,evalGrants:false,initComponent:function(){var a=Tine.Tinebase.registry.get("accountBackend");this.ldapBackend=(a=="Ldap");Tine.Admin.Users.EditDialog.superclass.initComponent.call(this)},onRecordLoad:function(){var a={responseText:Ext.util.JSON.encode(this.record.get("sambaSAM"))};this.samRecord=Tine.Admin.samUserBackend.recordReader(a);this.getForm().loadRecord(this.samRecord);var b={responseText:Ext.util.JSON.encode(this.record.get("emailUser"))};this.emailRecord=Tine.Admin.emailUserBackend.recordReader(b);this.getForm().loadRecord(this.emailRecord);this.record.set("accountLastLogin",Tine.Tinebase.common.dateTimeRenderer(this.record.get("accountLastLogin")));this.record.set("accountLastPasswordChange",Tine.Tinebase.common.dateTimeRenderer(this.record.get("accountLastPasswordChange")));if(Tine.Admin.registry.get("manageSmtpEmailUser")){this.aliasesGrid.setStoreFromArray(this.emailRecord.get("emailAliases"));this.forwardsGrid.setStoreFromArray(this.emailRecord.get("emailForwards"))}Tine.Admin.Users.EditDialog.superclass.onRecordLoad.call(this)},onRecordUpdate:function(){Tine.Admin.Users.EditDialog.superclass.onRecordUpdate.call(this);var a=this.getForm();a.updateRecord(this.samRecord);this.record.set("sambaSAM","");this.record.set("sambaSAM",this.samRecord.data);a.updateRecord(this.emailRecord);if(Tine.Admin.registry.get("manageSmtpEmailUser")){this.emailRecord.set("emailAliases",this.aliasesGrid.getFromStoreAsArray());this.emailRecord.set("emailForwards",this.forwardsGrid.getFromStoreAsArray())}this.record.set("emailUser","");this.record.set("emailUser",this.emailRecord.data)},onPasswordConfirm:function(){var a=this.passwordConfirmWindow.items.first().getForm();var c=a.getValues();var b=this.getForm().findField("accountPassword");if(!b){return}if(c.passwordRepeat!=b.getValue()){b.markInvalid(this.app.i18n._("Passwords do not match!"));b.passwordsMatch=false}else{b.passwordsMatch=true;b.clearInvalid();this.getForm().findField("accountEmailAddress").focus(true,100)}this.passwordConfirmWindow.hide();a.reset()},initEmailGrids:function(){var a={autoExpandColumn:"email",quickaddMandatory:"email",dataField:"email",height:200,columnWidth:0.5,recordClass:Ext.data.Record.create([{name:"email"}])};this.aliasesGrid=new Tine.Tinebase.widgets.grid.QuickaddGridPanel(Ext.apply(a,{title:this.app.i18n._("Aliases"),cm:new Ext.grid.ColumnModel([{id:"email",header:this.app.i18n._("Email Alias"),dataIndex:"email",width:300,hideable:false,sortable:true,quickaddField:new Ext.form.TextField({emptyText:this.app.i18n._("Add an alias address..."),vtype:"email"}),editor:new Ext.form.TextField({allowBlank:false})}])}));this.forwardsGrid=new Tine.Tinebase.widgets.grid.QuickaddGridPanel(Ext.apply(a,{title:this.app.i18n._("Forwards"),cm:new Ext.grid.ColumnModel([{id:"email",header:this.app.i18n._("Email Forward"),dataIndex:"email",width:300,hideable:false,sortable:true,quickaddField:new Ext.form.TextField({emptyText:this.app.i18n._("Add a forward address..."),vtype:"email"}),editor:new Ext.form.TextField({allowBlank:false})}])}))},getFormItems:function(){var a={border:"silver 1px solid",padding:"3px",height:"11px"};this.initEmailGrids();this.passwordConfirmWindow=new Ext.Window({title:this.app.i18n._("Password confirmation"),closeAction:"hide",modal:true,width:300,height:130,layout:"fit",plain:true,items:new Ext.FormPanel({bodyStyle:"padding:5px;",buttonAlign:"right",labelAlign:"top",anchor:"100%",items:[{xtype:"textfield",inputType:"password",anchor:"100%",id:"passwordRepeat",fieldLabel:this.app.i18n._("Repeat password"),name:"passwordRepeat",listeners:{scope:this,specialkey:function(c,b){if(b.getKey()==b.ENTER){this.onPasswordConfirm()}}}}],buttons:[{text:_("Cancel"),iconCls:"action_cancel",handler:function(){this.passwordConfirmWindow.hide()},scope:this},{text:_("Ok"),iconCls:"action_saveAndClose",handler:this.onPasswordConfirm,scope:this}]}),listeners:{scope:this,show:function(d){var b=this.passwordConfirmWindow.items.first().getForm();var c=b.findField("passwordRepeat");c.focus(true,500)}}});this.passwordConfirmWindow.render(document.body);return{xtype:"tabpanel",deferredRender:false,border:false,plain:true,activeTab:0,border:false,items:[{title:this.app.i18n._("Account"),autoScroll:true,border:false,frame:true,layout:"hfit",items:[{xtype:"columnform",labelAlign:"top",formDefaults:{xtype:"textfield",anchor:"100%",labelSeparator:"",columnWidth:0.333},items:[[{fieldLabel:this.app.i18n._("First Name"),name:"accountFirstName",columnWidth:0.5,listeners:{render:function(b){b.focus(false,250);b.selectText()}}},{fieldLabel:this.app.i18n._("Last Name"),name:"accountLastName",allowBlank:false,columnWidth:0.5}],[{fieldLabel:this.app.i18n._("Login Name"),name:"accountLoginName",allowBlank:false,columnWidth:0.5},{fieldLabel:this.app.i18n._("Password"),id:"accountPassword",name:"accountPassword",inputType:"password",emptyText:this.app.i18n._("no password set"),columnWidth:0.5,passwordsMatch:true,listeners:{scope:this,blur:function(c){var b=c.getValue();if(b!=""){this.passwordConfirmWindow.show.defer(100,this.passwordConfirmWindow)}}},validateValue:function(b){return this.passwordsMatch}}],[{vtype:"email",fieldLabel:this.app.i18n._("Emailaddress"),name:"accountEmailAddress",id:"accountEmailAddress",columnWidth:0.5},{fieldLabel:this.app.i18n._("OpenID"),name:"openid",columnWidth:0.5}],[new Tine.widgets.group.selectionComboBox({fieldLabel:this.app.i18n._("Primary group"),name:"accountPrimaryGroup",displayField:"name",valueField:"id"}),{xtype:"combo",fieldLabel:this.app.i18n._("Status"),name:"accountStatus",mode:"local",triggerAction:"all",allowBlank:false,editable:false,store:[["enabled",this.app.i18n._("enabled")],["disabled",this.app.i18n._("disabled")],["expired",this.app.i18n._("expired")]],disabled:this.ldapBackend},new Ext.ux.form.ClearableDateField({fieldLabel:this.app.i18n._("Expires"),name:"accountExpires",emptyText:this.app.i18n._("never")})],[{xtype:"combo",fieldLabel:this.app.i18n._("Visibility"),name:"visibility",mode:"local",triggerAction:"all",allowBlank:false,editable:false,store:[["displayed",this.app.i18n._("Display in addressbook")],["hidden",this.app.i18n._("Hide from addressbook")]]}]]},{title:this.app.i18n._("Information"),autoHeight:true,xtype:"fieldset",checkboxToggle:false,layout:"hfit",items:[{xtype:"columnform",labelAlign:"top",formDefaults:{xtype:"displayfield",anchor:"100%",labelSeparator:"",columnWidth:0.333,style:a},items:[[{fieldLabel:this.app.i18n._("Last login at"),name:"accountLastLogin",emptyText:this.ldapBackend?this.app.i18n._("don't know"):this.app.i18n._("never logged in")},{fieldLabel:this.app.i18n._("Last login from"),name:"accountLastLoginfrom",emptyText:this.ldapBackend?this.app.i18n._("don't know"):this.app.i18n._("never logged in")},{fieldLabel:this.app.i18n._("Password set"),name:"accountLastPasswordChange",emptyText:this.app.i18n._("never")}]]}]}]},{title:this.app.i18n._("Fileserver"),disabled:!this.ldapBackend,border:false,frame:true,items:[{title:this.app.i18n._("Unix"),autoHeight:true,xtype:"fieldset",checkboxToggle:false,layout:"hfit",items:[{xtype:"columnform",labelAlign:"top",formDefaults:{xtype:"textfield",anchor:"100%",labelSeparator:"",columnWidth:0.333},items:[[{fieldLabel:this.app.i18n._("Home Directory"),name:"accountHomeDirectory",columnWidth:0.666},{fieldLabel:this.app.i18n._("Login Shell"),name:"accountLoginShell"}]]}]},{title:this.app.i18n._("Windows"),autoHeight:true,xtype:"fieldset",checkboxToggle:false,layout:"hfit",items:[{xtype:"columnform",labelAlign:"top",formDefaults:{xtype:"textfield",anchor:"100%",labelSeparator:"",columnWidth:0.333},items:[[{fieldLabel:this.app.i18n._("Home Drive"),name:"homeDrive",columnWidth:0.666},{xtype:"displayfield",fieldLabel:this.app.i18n._("Logon Time"),name:"logonTime",emptyText:this.app.i18n._("never logged in"),style:a}],[{fieldLabel:this.app.i18n._("Home Path"),name:"homePath",columnWidth:0.666},{xtype:"displayfield",fieldLabel:this.app.i18n._("Logoff Time"),name:"logoffTime",emptyText:this.app.i18n._("never logged off"),style:a}],[{fieldLabel:this.app.i18n._("Profile Path"),name:"profilePath",columnWidth:0.666},{xtype:"displayfield",fieldLabel:this.app.i18n._("Password Last Set"),name:"pwdLastSet",emptyText:this.app.i18n._("never"),style:a}],[{fieldLabel:this.app.i18n._("Logon Script"),name:"logonScript",columnWidth:0.666}],[new Ext.ux.form.ClearableDateField({fieldLabel:this.app.i18n._("Password Can Change"),name:"pwdCanChange",emptyText:this.app.i18n._("not set")}),new Ext.ux.form.ClearableDateField({fieldLabel:this.app.i18n._("Password Must Change"),name:"pwdMustChange",emptyText:this.app.i18n._("not set")}),new Ext.ux.form.ClearableDateField({fieldLabel:this.app.i18n._("Kick Off Time"),name:"kickoffTime",emptyText:this.app.i18n._("not set")})]]}]}]},{title:this.app.i18n._("IMAP"),disabled:!Tine.Admin.registry.get("manageImapEmailUser"),border:false,frame:true,xtype:"columnform",labelAlign:"top",formDefaults:{xtype:"textfield",anchor:"100%",labelSeparator:"",columnWidth:0.333,readOnly:true},items:[[{fieldLabel:this.app.i18n._("Email UID"),name:"emailUID",columnWidth:0.666}],[{fieldLabel:this.app.i18n._("Email GID"),name:"emailGID",columnWidth:0.666}],[{fieldLabel:this.app.i18n._("Email Username"),name:"emailUserId",columnWidth:0.666}],[{fieldLabel:this.app.i18n._("Quota"),name:"emailMailQuota",xtype:"numberfield",columnWidth:0.666,readOnly:false}],[{fieldLabel:this.app.i18n._("Current Mail Size"),name:"emailMailSize",xtype:"numberfield",columnWidth:0.666}],[{fieldLabel:this.app.i18n._("Sieve Quota"),name:"emailSieveQuota",xtype:"numberfield",columnWidth:0.666}],[{fieldLabel:this.app.i18n._("Current Sieve Size"),name:"emailSieveSize",xtype:"numberfield",columnWidth:0.666}],[{fieldLabel:this.app.i18n._("Last Login"),name:"emailLastLogin",columnWidth:0.666}]]},{title:this.app.i18n._("SMTP"),disabled:!Tine.Admin.registry.get("manageSmtpEmailUser"),border:false,frame:true,xtype:"columnform",labelAlign:"top",formDefaults:{xtype:"textfield",anchor:"100%",labelSeparator:"",columnWidth:0.333,readOnly:true},items:[[this.aliasesGrid,this.forwardsGrid],[{fieldLabel:this.app.i18n._("Forward Only"),name:"emailForwardOnly",xtype:"checkbox",columnWidth:0.666,readOnly:false}]]}]}}});Tine.Admin.Users.EditDialog.openWindow=function(a){var c=(a.record&&a.record.id)?a.record.id:0;var b=Tine.WindowFactory.getWindow({width:600,height:400,name:Tine.Admin.Users.EditDialog.prototype.windowNamePrefix+c,contentPanelConstructor:"Tine.Admin.Users.EditDialog",contentPanelConstructorConfig:a});return b};Ext.namespace("Tine.Admin.Groups");Tine.Admin.Groups.Main={actions:{addGroup:null,editGroup:null,deleteGroup:null},handlers:{addGroup:function(b,a){this.openEditWindow(null)},editGroup:function(c,a){var b=Ext.getCmp("AdminGroupsGrid").getSelectionModel().getSelections();this.openEditWindow(b[0])},deleteGroup:function(b,a){Ext.MessageBox.confirm(this.translation.gettext("Confirm"),this.translation.gettext("Do you really want to delete the selected groups?"),function(g){if(g=="yes"){var c=new Array();var f=Ext.getCmp("AdminGroupsGrid").getSelectionModel().getSelections();for(var d=0;d<f.length;++d){c.push(f[d].id)}c=Ext.util.JSON.encode(c);Ext.Ajax.request({url:"index.php",params:{method:"Admin.deleteGroups",groupIds:c},scope:this,text:this.translation.gettext("Deleting group(s)..."),success:function(i,h){Ext.getCmp("AdminGroupsGrid").getStore().reload()},failure:function(h,i){Ext.MessageBox.alert(this.translation.gettext("Failed"),this.translation.gettext("Some error occurred while trying to delete the group."))}})}},this)}},openEditWindow:function(a){var b=Tine.Admin.Groups.EditDialog.openWindow({group:a,listeners:{scope:this,update:function(c){this.reload()}}})},initComponent:function(){this.translation=new Locale.Gettext();this.translation.textdomain("Admin");this.actions.addGroup=new Ext.Action({text:this.translation.gettext("add group"),disabled:true,handler:this.handlers.addGroup,iconCls:"action_addGroup",scope:this});this.actions.editGroup=new Ext.Action({text:this.translation.gettext("edit group"),disabled:true,handler:this.handlers.editGroup,iconCls:"action_edit",scope:this});this.actions.deleteGroup=new Ext.Action({text:this.translation.gettext("delete group"),disabled:true,handler:this.handlers.deleteGroup,iconCls:"action_delete",scope:this})},displayGroupsToolbar:function(){var b=new Ext.ux.SearchField({id:"GroupsAdminQuickSearchField",width:240,emptyText:Tine.Tinebase.translation._hidden("enter searchfilter")});b.on("change",function(){Ext.getCmp("AdminGroupsGrid").getStore().load({params:{start:0,limit:50}})},this);var a=new Ext.Toolbar({id:"AdminGroupsToolbar",split:false,height:26,items:[this.actions.addGroup,this.actions.editGroup,this.actions.deleteGroup,"->",this.translation.gettext("Search:")," ",b]});Tine.Tinebase.MainScreen.setActiveToolbar(a)},displayGroupsGrid:function(){if(Tine.Tinebase.common.hasRight("manage","Admin","accounts")){this.actions.addGroup.setDisabled(false)}var a=new Ext.data.JsonStore({baseParams:{method:"Admin.getGroups"},root:"results",totalProperty:"totalcount",id:"id",fields:Tine.Tinebase.Model.Group,remoteSort:true});a.setDefaultSort("id","asc");a.on("beforeload",function(g){g.baseParams.filter=Ext.getCmp("GroupsAdminQuickSearchField").getValue()},this);var f=new Ext.PagingToolbar({pageSize:25,store:a,displayInfo:true,displayMsg:this.translation.gettext("Displaying groups {0} - {1} of {2}"),emptyMsg:this.translation.gettext("No groups to display")});var d=new Ext.grid.ColumnModel({defaults:{sortable:true,resizable:true},columns:[{id:"id",header:this.translation.gettext("ID"),dataIndex:"id",width:10,hidden:true},{id:"name",header:this.translation.gettext("Name"),dataIndex:"name",width:50},{id:"description",header:this.translation.gettext("Description"),dataIndex:"description"}]});var c=new Ext.grid.RowSelectionModel({multiSelect:true});c.on("selectionchange",function(h){var g=h.getCount();if(Tine.Tinebase.common.hasRight("manage","Admin","accounts")){if(g<1){this.actions.deleteGroup.setDisabled(true);this.actions.editGroup.setDisabled(true)}else{if(g>1){this.actions.deleteGroup.setDisabled(false);this.actions.editGroup.setDisabled(true)}else{this.actions.deleteGroup.setDisabled(false);this.actions.editGroup.setDisabled(false)}}}},this);var b=new Ext.grid.GridPanel({id:"AdminGroupsGrid",store:a,cm:d,tbar:f,autoSizeColumns:false,selModel:c,enableColLock:false,loadMask:true,autoExpandColumn:"n_family",border:false,view:new Ext.grid.GridView({autoFill:true,forceFit:true,ignoreAdd:true,emptyText:this.translation.gettext("No groups to display")})});b.on("rowcontextmenu",function(h,g,j){j.stopEvent();if(!h.getSelectionModel().isSelected(g)){h.getSelectionModel().selectRow(g)}var i=new Ext.menu.Menu({id:"ctxMenuGroups",items:[this.actions.editGroup,this.actions.deleteGroup,"-",this.actions.addGroup]});i.showAt(j.getXY())},this);b.on("rowdblclick",function(h,i,j){if(Tine.Tinebase.common.hasRight("manage","Admin","accounts")){var g=h.getStore().getAt(i);this.openEditWindow(g)}},this);Tine.Tinebase.MainScreen.setActiveContentPanel(b)},loadData:function(){var a=Ext.getCmp("AdminGroupsGrid").getStore();a.load({params:{start:0,limit:50}})},show:function(){this.initComponent();var a=Tine.Tinebase.MainScreen.getActiveToolbar();if(a===false||a.id!="AdminGroupsToolbar"){this.displayGroupsToolbar();this.displayGroupsGrid()}this.loadData()},reload:function(){if(Ext.ComponentMgr.all.containsKey("AdminGroupsGrid")){setTimeout("Ext.getCmp('AdminGroupsGrid').getStore().reload()",200)}}};Tine.Admin.Groups.EditDialog=Ext.extend(Tine.widgets.dialog.EditRecord,{group:null,windowNamePrefix:"groupEditWindow_",id:"groupDialog",layout:"fit",labelWidth:120,labelAlign:"top",handlerApplyChanges:function(f,b,a){var d=this.getForm();if(d.isValid()){Ext.MessageBox.wait(this.translation.gettext("Please wait"),this.translation.gettext("Updating Memberships"));var c=[];this.membersStore.each(function(g){c.push(g.id)});d.updateRecord(this.group);Ext.Ajax.request({params:{method:"Admin.saveGroup",groupData:Ext.util.JSON.encode(this.group.data),groupMembers:Ext.util.JSON.encode(c)},success:function(g){this.fireEvent("update",Ext.util.JSON.encode(this.group.data));if(a===true){this.window.close()}else{this.onRecordLoad(g)}Ext.MessageBox.hide()},failure:function(g,h){Ext.MessageBox.alert(this.translation.gettext("Failed"),this.translation.gettext("Could not save group."))},scope:this})}else{Ext.MessageBox.alert(this.translation.gettext("Errors"),this.translation.gettext("Please fix the errors noted."))}},handlerDelete:function(c,a){var b=Ext.util.JSON.encode([Tine.Admin.Groups.EditDialog.group.data.id]);Ext.Ajax.request({url:"index.php",params:{method:"Admin.deleteGroups",groupIds:b},text:this.translation.gettext("Deleting group..."),success:function(f,d){if(window.opener.Tine.Admin.Groups){window.opener.Tine.Admin.Groups.Main.reload()}window.close()},failure:function(d,f){Ext.MessageBox.alert(this.translation.gettext("Failed"),this.translation.gettext("Some error occurred while trying to delete the group."))}})},updateRecord:function(a){if(a.length===0){a={}}this.group=new Tine.Tinebase.Model.Group(a,a.id?a.id:0);this.membersStore.loadData(this.group.get("groupMembers"))},updateToolbarButtons:function(a){},getFormContents:function(){var b=new Tine.widgets.account.PickerGridPanel({title:this.translation.gettext("Group Members"),store:this.membersStore,region:"center",anchor:"100% 100%"});var a={layout:"border",border:false,width:600,height:500,items:[{region:"north",layout:"column",border:false,autoHeight:true,items:[{columnWidth:1,layout:"form",border:false,items:[{xtype:"textfield",fieldLabel:this.translation.gettext("Group Name"),name:"name",anchor:"100%",allowBlank:false},{xtype:"textarea",name:"description",fieldLabel:this.translation.gettext("Description"),grow:false,preventScrollbars:false,anchor:"100%",height:60}]}]},b]};return a},initComponent:function(){this.group=this.group?this.group:new Tine.Tinebase.Model.Group({},0);Ext.Ajax.request({scope:this,success:this.onRecordLoad,params:{method:"Admin.getGroup",groupId:this.group.id}});this.membersStore=new Ext.data.JsonStore({root:"results",totalProperty:"totalcount",id:"id",fields:Tine.Tinebase.Model.Account});this.translation=new Locale.Gettext();this.translation.textdomain("Admin");this.items=this.getFormContents();Tine.Admin.Groups.EditDialog.superclass.initComponent.call(this)},onRecordLoad:function(b){this.getForm().findField("name").focus(false,250);var a=Ext.util.JSON.decode(b.responseText);this.updateRecord(a);if(!this.group.id){window.document.title=this.translation.gettext("Add new group")}else{window.document.title=String.format(this.translation.gettext('Edit Group "{0}"'),this.group.get("name"))}this.getForm().loadRecord(this.group);this.updateToolbarButtons()}});Tine.Admin.Groups.EditDialog.openWindow=function(a){a.group=a.group?a.group:new Tine.Tinebase.Model.Group({},0);var b=Tine.WindowFactory.getWindow({width:400,height:600,name:Tine.Admin.Groups.EditDialog.prototype.windowNamePrefix+a.group.id,layout:Tine.Admin.Groups.EditDialog.prototype.windowLayout,contentPanelConstructor:"Tine.Admin.Groups.EditDialog",contentPanelConstructorConfig:a});return b};Ext.namespace("Tine.Admin.Model");Tine.Admin.Model.sambaMachineArray=[{name:"accountId"},{name:"accountLoginName"},{name:"accountLastName"},{name:"accountFullName"},{name:"accountDisplayName"},{name:"accountPrimaryGroup"},{name:"accountHomeDirectory"},{name:"accountLoginShell"},{name:"sid"},{name:"primaryGroupSID"},{name:"acctFlags"},{name:"pwdMustChange",type:"date",dateFormat:Date.patterns.ISO8601Long}];Tine.Admin.Model.SambaMachine=Tine.Tinebase.data.Record.create(Tine.Admin.Model.sambaMachineArray,{appName:"Admin",modelName:"SambaMachine",idProperty:"accountId",titleProperty:"accountDisplayName",recordName:"Computer",recordsName:"Computers"});Tine.Admin.sambaMachineBackend=new Tine.Tinebase.data.RecordProxy({appName:"Admin",modelName:"SambaMachine",recordClass:Tine.Admin.Model.SambaMachine,idProperty:"accountId"});Ext.namespace("Tine.Admin.sambaMachine");Tine.Admin.sambaMachine.show=function(){var a=Tine.Tinebase.appMgr.get("Admin");if(!Tine.Admin.sambaMachine.gridPanel){Tine.Admin.sambaMachine.gridPanel=new Tine.Admin.SambaMachineGridPanel({app:a})}Tine.Tinebase.MainScreen.setActiveContentPanel(Tine.Admin.sambaMachine.gridPanel,true);Tine.Tinebase.MainScreen.setActiveToolbar(Tine.Admin.sambaMachine.gridPanel.actionToolbar,true);Tine.Admin.sambaMachine.gridPanel.store.load()};Tine.Admin.SambaMachineGridPanel=Ext.extend(Tine.Tinebase.widgets.app.GridPanel,{recordClass:Tine.Admin.Model.SambaMachine,recordProxy:Tine.Admin.sambaMachineBackend,defaultSortInfo:{field:"accountLoginName",direction:"ASC"},evalGrants:false,gridConfig:{loadMask:true,autoExpandColumn:"accountDisplayName"},initComponent:function(){this.gridConfig.columns=this.getColumns();this.initFilterToolbar();this.plugins=this.plugins||[];this.plugins.push(this.filterToolbar);Tine.Admin.SambaMachineGridPanel.superclass.initComponent.call(this)},initFilterToolbar:function(){this.filterToolbar=new Tine.widgets.grid.FilterToolbar({filterModels:[{label:this.app.i18n._("Computer Name"),field:"query",operators:["contains"]}],defaultFilter:"query",filters:[],plugins:[new Tine.widgets.grid.FilterToolbarQuickFilterPlugin()]})},getColumns:function(){return[{id:"accountId",header:this.app.i18n._("ID"),width:100,sortable:true,dataIndex:"accountId",hidden:true},{id:"accountLoginName",header:this.app.i18n._("Name"),width:350,sortable:true,dataIndex:"accountLoginName"},{id:"accountDisplayName",header:this.app.i18n._("Description"),width:350,sortable:true,dataIndex:"accountDisplayName"}]}});Ext.namespace("Tine.Admin.sambaMachine");Tine.Admin.SambaMachineEditDialog=Ext.extend(Tine.widgets.dialog.EditDialog,{windowNamePrefix:"sambaMachineEditWindow_",appName:"Admin",recordClass:Tine.Admin.Model.SambaMachine,recordProxy:Tine.Admin.sambaMachineBackend,evalGrants:false,getFormItems:function(){return{xtype:"columnform",labelAlign:"top",border:false,formDefaults:{xtype:"textfield",anchor:"100%",labelSeparator:"",columnWidth:1},items:[[{fieldLabel:this.app.i18n._("Computer Name"),name:"accountLoginName"}]]}}});Tine.Admin.SambaMachineEditDialog.openWindow=function(a){var c=(a.record&&a.record.id)?a.record.id:0;var b=Tine.WindowFactory.getWindow({width:300,height:70,name:Tine.Admin.SambaMachineEditDialog.windowNamePrefix+c,contentPanelConstructor:"Tine.Admin.SambaMachineEditDialog",contentPanelConstructorConfig:a});return b};Ext.namespace("Tine.Admin.Tags");Tine.Admin.Tags.Main={actions:{addTag:null,editTag:null,deleteTag:null},handlers:{addTag:function(b,a){Tine.Admin.Tags.EditDialog.openWindow({tag:null,listeners:{scope:this,update:function(c){this.reload()}}})},editTag:function(c,a){var b=Ext.getCmp("AdminTagsGrid").getSelectionModel().getSelections();Tine.Admin.Tags.EditDialog.openWindow({tag:b[0],listeners:{scope:this,update:function(d){this.reload()}}})},deleteTag:function(b,a){Ext.MessageBox.confirm(this.translation.gettext("Confirm"),this.translation.gettext("Do you really want to delete the selected tags?"),function(g){if(g=="yes"){var d=new Array();var f=Ext.getCmp("AdminTagsGrid").getSelectionModel().getSelections();for(var c=0;c<f.length;++c){d.push(f[c].id)}d=Ext.util.JSON.encode(d);Ext.Ajax.request({url:"index.php",params:{method:"Admin.deleteTags",tagIds:d},text:this.translation.gettext("Deleting tag(s)..."),success:function(i,h){Ext.getCmp("AdminTagsGrid").getStore().reload()}})}},this)}},initComponent:function(){this.translation=new Locale.Gettext();this.translation.textdomain("Admin");this.actions.addTag=new Ext.Action({text:this.translation.gettext("add tag"),handler:this.handlers.addTag,iconCls:"action_tag",scope:this,disabled:!(Tine.Tinebase.common.hasRight("manage","Admin","shared_tags"))});this.actions.editTag=new Ext.Action({text:this.translation.gettext("edit tag"),disabled:true,handler:this.handlers.editTag,iconCls:"action_edit",scope:this});this.actions.deleteTag=new Ext.Action({text:this.translation.gettext("delete tag"),disabled:true,handler:this.handlers.deleteTag,iconCls:"action_delete",scope:this})},displayTagsToolbar:function(){var b=new Ext.ux.SearchField({id:"TagsQuickSearchField",width:240,emptyText:Tine.Tinebase.translation._hidden("enter searchfilter")});b.on("change",function(){Ext.getCmp("AdminTagsGrid").getStore().load({params:{start:0,limit:50}})},this);var a=new Ext.Toolbar({id:"AdminTagsToolbar",split:false,height:26,items:[this.actions.addTag,this.actions.editTag,this.actions.deleteTag,"->",this.translation.gettext("Search:")," ",b]});Tine.Tinebase.MainScreen.setActiveToolbar(a)},displayTagsGrid:function(){var a=new Ext.data.JsonStore({baseParams:{method:"Admin.getTags"},root:"results",totalProperty:"totalcount",id:"id",fields:Tine.Tinebase.Model.Tag,remoteSort:true});a.setDefaultSort("name","asc");a.on("beforeload",function(g){g.baseParams.query=Ext.getCmp("TagsQuickSearchField").getRawValue()},this);var f=new Ext.PagingToolbar({pageSize:25,store:a,displayInfo:true,displayMsg:this.translation.gettext("Displaying tags {0} - {1} of {2}"),emptyMsg:this.translation.gettext("No tags to display")});var d=new Ext.grid.ColumnModel({defaults:{sortable:true,resizable:true},columns:[{id:"color",header:this.translation.gettext("Color"),dataIndex:"color",width:25,renderer:function(g){return'<div style="width: 8px; height: 8px; background-color:'+g+'; border: 1px solid black;">&#160;</div>'}},{id:"name",header:this.translation.gettext("Name"),dataIndex:"name",width:200},{id:"description",header:this.translation.gettext("Description"),dataIndex:"description",width:500}]});var c=new Ext.grid.RowSelectionModel({multiSelect:true});c.on("selectionchange",function(h){var g=h.getCount();if(Tine.Tinebase.common.hasRight("manage","Admin","shared_tags")){if(g<1){this.actions.deleteTag.setDisabled(true);this.actions.editTag.setDisabled(true)}else{if(g>1){this.actions.deleteTag.setDisabled(false);this.actions.editTag.setDisabled(true)}else{this.actions.deleteTag.setDisabled(false);this.actions.editTag.setDisabled(false)}}}},this);var b=new Ext.grid.GridPanel({id:"AdminTagsGrid",store:a,cm:d,tbar:f,autoSizeColumns:false,selModel:c,enableColLock:false,loadMask:true,autoExpandColumn:"description",border:false,view:new Ext.grid.GridView({autoFill:true,forceFit:true,ignoreAdd:true,emptyText:this.translation.gettext("No tags to display")})});b.on("rowcontextmenu",function(h,g,j){j.stopEvent();if(!h.getSelectionModel().isSelected(g)){h.getSelectionModel().selectRow(g)}var i=new Ext.menu.Menu({id:"ctxMenuTags",items:[this.actions.editTag,this.actions.deleteTag,"-",this.actions.addTag]});i.showAt(j.getXY())},this);b.on("rowdblclick",function(h,i,j){var g=h.getStore().getAt(i);Tine.Admin.Tags.EditDialog.openWindow({tag:g,listeners:{scope:this,update:function(k){this.reload()}}})},this);Tine.Tinebase.MainScreen.setActiveContentPanel(b)},loadData:function(){var a=Ext.getCmp("AdminTagsGrid").getStore();a.load({params:{start:0,limit:50}})},show:function(){this.initComponent();var a=Tine.Tinebase.MainScreen.getActiveToolbar();if(a===false||a.id!="AdminTagsToolbar"){this.displayTagsToolbar();this.displayTagsGrid()}this.loadData()},reload:function(){if(Ext.ComponentMgr.all.containsKey("AdminTagsGrid")){setTimeout("Ext.getCmp('AdminTagsGrid').getStore().reload()",200)}}};Tine.Admin.Tags.EditDialog=Ext.extend(Tine.widgets.dialog.EditRecord,{tag:null,windowNamePrefix:"AdminTagEditDialog_",id:"tagDialog",layout:"hfit",labelWidth:120,labelAlign:"top",handlerApplyChanges:function(g,c,b){var d=this.getForm();if(d.isValid()){Ext.MessageBox.wait(this.translation.gettext("Please wait"),this.translation.gettext("Updating Tag"));var a=this.tag;a.data.rights=[];this.rightsStore.each(function(i){a.data.rights.push(i.data)});a.data.contexts=[];var f=true;var h=Ext.getCmp("adminSharedTagsConfinePanel");h.getRootNode().eachChild(function(i){if(i.attributes.checked){a.data.contexts.push(i.id)}else{f=false}});if(f){a.data.contexts=["any"]}d.updateRecord(a);Ext.Ajax.request({params:{method:"Admin.saveTag",tagData:Ext.util.JSON.encode(a.data)},success:function(i){this.fireEvent("update",Ext.util.JSON.encode(this.tag.data));Ext.MessageBox.hide();if(b===true){this.window.close()}else{this.onRecordLoad(i)}},failure:function(i,j){Ext.MessageBox.alert(this.translation.gettext("Failed"),this.translation.gettext("Could not save tag."))},scope:this})}else{Ext.MessageBox.alert(this.translation.gettext("Errors"),this.translation.gettext("Please fix the errors noted."))}},updateRecord:function(a){if(a.length===0){a={}}this.tag=new Tine.Tinebase.Model.Tag(a,a.id?a.id:0);if(!a.rights){a.rights=[{tag_id:"",account_name:"Anyone",account_id:0,account_type:"anyone",view_right:true,use_right:true}]}this.rightsStore.loadData({results:a.rights,totalcount:a.rights.length});this.anyContext=!a.contexts||a.contexts.indexOf("any")>-1;this.createTreeNodes(a.appList);this.getForm().loadRecord(this.tag)},updateToolbarButtons:function(a){},createTreeNodes:function(a){var d=[];this.rootNode.eachChild(function(g){d.push(g)});for(var c=0,b=a.length;c<b;c++){d[c]?d[c].remove():null;var f=a[c];if(f.name=="Tinebase"){continue}this.rootNode.appendChild(new Ext.tree.TreeNode({text:f.name,id:f.id,checked:this.anyContext||this.tag.get("contexts").indexOf(f.id)>-1,leaf:true,icon:"s.gif"}))}},getFormContents:function(){this.rootNode=new Ext.tree.TreeNode({text:this.translation.gettext("Allowed Contexts"),expanded:true,draggable:false,allowDrop:false});var b=new Ext.tree.TreePanel({title:this.translation.gettext("Context"),id:"adminSharedTagsConfinePanel",rootVisible:true,border:false,root:this.rootNode});this.rightsPanel=new Tine.widgets.account.PickerGridPanel({title:this.translation.gettext("Account Rights"),store:this.rightsStore,recordClass:Tine.Admin.Model.TagRight,hasAccountPrefix:true,selectType:"both",configColumns:[new Ext.ux.grid.CheckColumn({header:this.translation.gettext("View"),dataIndex:"view_right",width:55}),new Ext.ux.grid.CheckColumn({header:this.translation.gettext("Use"),dataIndex:"use_right",width:55})]});var a={layout:"hfit",border:false,width:600,height:350,items:[{xtype:"columnform",border:false,autoHeight:true,items:[[{columnWidth:0.3,fieldLabel:this.translation.gettext("Tag Name"),name:"name",allowBlank:false,maxLength:40},{columnWidth:0.6,name:"description",fieldLabel:this.translation.gettext("Description"),anchor:"100%",maxLength:50},{xtype:"colorfield",columnWidth:0.1,fieldLabel:this.translation.gettext("Color"),name:"color"}]]},{xtype:"tabpanel",height:300,activeTab:0,deferredRender:false,defaults:{autoScroll:true},border:true,plain:true,items:[this.rightsPanel,b]}]};return a},initComponent:function(){this.tag=this.tag?this.tag:new Tine.Tinebase.Model.Tag({},0);this.translation=new Locale.Gettext();this.translation.textdomain("Admin");Ext.MessageBox.wait(this.translation._("Loading Tag..."),this.translation._("Please Wait"));Ext.Ajax.request({scope:this,success:this.onRecordLoad,params:{method:"Admin.getTag",tagId:this.tag.id}});this.rightsStore=new Ext.data.JsonStore({root:"results",totalProperty:"totalcount",id:"account_id",fields:Tine.Admin.Model.TagRight});this.items=this.getFormContents();Tine.Admin.Tags.EditDialog.superclass.initComponent.call(this)},onRecordLoad:function(b){this.getForm().findField("name").focus(false,250);var a=Ext.util.JSON.decode(b.responseText);this.updateRecord(a);if(!this.tag.id){window.document.title=this.translation.gettext("Add New Tag")}else{window.document.title=String.format(this.translation._('Edit Tag "{0}"'),this.tag.get("name"))}Ext.MessageBox.hide()}});Tine.Admin.Tags.EditDialog.openWindow=function(a){a.tag=a.tag?a.tag:new Tine.Tinebase.Model.Tag({},0);var b=Tine.WindowFactory.getWindow({width:650,height:400,name:Tine.Admin.Tags.EditDialog.prototype.windowNamePrefix+a.tag.id,layout:Tine.Admin.Tags.EditDialog.prototype.windowLayout,contentPanelConstructor:"Tine.Admin.Tags.EditDialog",contentPanelConstructorConfig:a});return b};Ext.namespace("Tine.Admin.Roles");Tine.Admin.Roles.Main={actions:{addRole:null,editRole:null,deleteRole:null},handlers:{addRole:function(b,a){this.openEditWindow(null)},editRole:function(c,a){var b=Ext.getCmp("AdminRolesGrid").getSelectionModel().getSelections();this.openEditWindow(b[0])},deleteRole:function(b,a){Ext.MessageBox.confirm(this.translation.gettext("Confirm"),this.translation.gettext("Do you really want to delete the selected roles?"),function(f){if(f=="yes"){var g=new Array();var d=Ext.getCmp("AdminRolesGrid").getSelectionModel().getSelections();for(var c=0;c<d.length;++c){g.push(d[c].id)}g=Ext.util.JSON.encode(g);Ext.Ajax.request({url:"index.php",params:{method:"Admin.deleteRoles",roleIds:g},text:this.translation.gettext("Deleting role(s)..."),success:function(i,h){Ext.getCmp("AdminRolesGrid").getStore().reload()},failure:function(h,i){Ext.MessageBox.alert(this.translation.gettext("Failed"),this.translation.gettext("Some error occurred while trying to delete the role."))}})}},this)}},openEditWindow:function(a){var b=Tine.Admin.Roles.EditDialog.openWindow({role:a,listeners:{scope:this,update:function(c){this.reload()}}})},initComponent:function(){this.translation=new Locale.Gettext();this.translation.textdomain("Admin");this.actions.addRole=new Ext.Action({text:this.translation.gettext("add role"),disabled:true,handler:this.handlers.addRole,iconCls:"action_permissions",scope:this});this.actions.editRole=new Ext.Action({text:this.translation.gettext("edit role"),disabled:true,handler:this.handlers.editRole,iconCls:"action_edit",scope:this});this.actions.deleteRole=new Ext.Action({text:this.translation.gettext("delete role"),disabled:true,handler:this.handlers.deleteRole,iconCls:"action_delete",scope:this})},displayRolesToolbar:function(){var a=new Ext.ux.SearchField({id:"RolesQuickSearchField",width:240,emptyText:Tine.Tinebase.translation._hidden("enter searchfilter")});a.on("change",function(){Ext.getCmp("AdminRolesGrid").getStore().load({params:{start:0,limit:50}})},this);var b=new Ext.Toolbar({id:"AdminRolesToolbar",split:false,height:26,items:[this.actions.addRole,this.actions.editRole,this.actions.deleteRole,"->",this.translation.gettext("Search:")," ",a]});Tine.Tinebase.MainScreen.setActiveToolbar(b)},displayRolesGrid:function(){if(Tine.Tinebase.common.hasRight("manage","Admin","roles")){this.actions.addRole.setDisabled(false)}var a=new Ext.data.DirectStore({api:{read:Tine.Admin.getRoles},reader:new Ext.data.JsonReader({root:"results",idProperty:"id",totalProperty:"totalcount"},Tine.Tinebase.Model.Role),remoteSort:true});a.setDefaultSort("id","asc");a.on("beforeload",function(g){g.baseParams.query=Ext.getCmp("RolesQuickSearchField").getValue()},this);var f=new Ext.PagingToolbar({pageSize:25,store:a,displayInfo:true,displayMsg:this.translation.gettext("Displaying roles {0} - {1} of {2}"),emptyMsg:this.translation.gettext("No roles to display")});var d=new Ext.grid.ColumnModel({defaults:{sortable:true,resizable:true},columns:[{id:"id",header:this.translation.gettext("ID"),dataIndex:"id",hidden:true,width:10},{id:"name",header:this.translation.gettext("Name"),dataIndex:"name",width:50},{id:"description",header:this.translation.gettext("Description"),dataIndex:"description"}]});var c=new Ext.grid.RowSelectionModel({multiSelect:true});c.on("selectionchange",function(h){var g=h.getCount();if(Tine.Tinebase.common.hasRight("manage","Admin","roles")){if(g<1){this.actions.deleteRole.setDisabled(true);this.actions.editRole.setDisabled(true)}else{if(g>1){this.actions.deleteRole.setDisabled(false);this.actions.editRole.setDisabled(true)}else{this.actions.deleteRole.setDisabled(false);this.actions.editRole.setDisabled(false)}}}},this);var b=new Ext.grid.GridPanel({id:"AdminRolesGrid",store:a,cm:d,tbar:f,autoSizeColumns:false,selModel:c,enableColLock:false,loadMask:true,autoExpandColumn:"n_family",border:false,view:new Ext.grid.GridView({autoFill:true,forceFit:true,ignoreAdd:true,emptyText:this.translation.gettext("No roles to display")})});b.on("rowcontextmenu",function(h,g,j){j.stopEvent();if(!h.getSelectionModel().isSelected(g)){h.getSelectionModel().selectRow(g)}var i=new Ext.menu.Menu({id:"ctxMenuRoles",items:[this.actions.editRole,this.actions.deleteRole,"-",this.actions.addRole]});i.showAt(j.getXY())},this);b.on("rowdblclick",function(h,i,j){if(Tine.Tinebase.common.hasRight("manage","Admin","roles")){var g=h.getStore().getAt(i);this.openEditWindow(g)}},this);Tine.Tinebase.MainScreen.setActiveContentPanel(b)},loadData:function(){var a=Ext.getCmp("AdminRolesGrid").getStore();a.load({params:{start:0,limit:50}})},show:function(){this.initComponent();var a=Tine.Tinebase.MainScreen.getActiveToolbar();if(a===false||a.id!="AdminRolesToolbar"){this.displayRolesToolbar();this.displayRolesGrid()}this.loadData()},reload:function(){if(Ext.ComponentMgr.all.containsKey("AdminRolesGrid")){setTimeout("Ext.getCmp('AdminRolesGrid').getStore().reload()",200)}}};Tine.Admin.Roles.Right=Ext.data.Record.create([{name:"application_id"},{name:"right"}]);Ext.ns("Tine.Admin.Roles");Tine.Admin.Roles.EditDialog=Ext.extend(Tine.widgets.dialog.EditRecord,{role:null,allRights:null,rightsTreePanel:null,windowNamePrefix:"rolesEditWindow_",layout:"fit",id:"roleDialog",labelWidth:120,labelAlign:"top",getRightId:function(d,b){var c=false;var a=null;this.rightsDataStore.each(function(f){if(f.data.application_id==d&&f.data.right==b){a=f.id;return}});return a},handlerApplyChanges:function(i,c,a){var g=this.getForm();if(g.isValid()){var b=Ext.getCmp("roleMembersGrid");Ext.MessageBox.wait(this.translation.gettext("Please wait"),this.translation.gettext("Updating Memberships"));var f=[];this.membersStore.each(function(j){f.push(j.data)});var d=[];var h=Ext.StoreMgr.get("RoleRightsStore");h.each(function(j){d.push(j.data)});g.updateRecord(this.role);Ext.Ajax.request({params:{method:"Admin.saveRole",roleData:Ext.util.JSON.encode(this.role.data),roleMembers:Ext.util.JSON.encode(f),roleRights:Ext.util.JSON.encode(d)},success:function(j){this.fireEvent("update",Ext.util.JSON.encode(this.role.data));Ext.MessageBox.hide();if(a===true){this.window.close()}else{this.onRecordLoad(j)}},failure:function(j,k){Ext.MessageBox.alert(this.translation.gettext("Failed"),this.translation.gettext("Could not save role."))},scope:this})}else{Ext.MessageBox.alert(this.translation.gettext("Errors"),this.translation.gettext("Please fix the errors noted."))}},handlerDelete:function(b,a){var c=Ext.util.JSON.encode([this.role.id]);Ext.Ajax.request({url:"index.php",params:{method:"Admin.deleteRoles",roleIds:c},text:this.translation.gettext("Deleting role..."),success:function(f,d){if(window.opener.Tine.Admin.Roles){window.opener.Tine.Admin.Roles.Main.reload()}window.close()},failure:function(d,f){Ext.MessageBox.alert(this.translation.gettext("Failed"),this.translation.gettext("Some error occurred while trying to delete the role."))}})},rightsDataStore:null,updateRecord:function(a){if(a.length===0){a={}}this.role=new Tine.Tinebase.Model.Role(a,a.id?a.id:0);this.membersStore.loadData(this.role.get("roleMembers"));this.rightsDataStore.loadData(this.role.get("roleRights"));this.allRights=this.role.get("allRights");this.createRightsTreeNodes()},initRightsTree:function(){this.rightsTreePanel=new Ext.tree.TreePanel({id:"rightsTree",iconCls:"AdminTreePanel",rootVisible:false,border:false});var a=new Ext.tree.TreeNode({text:"root",draggable:false,allowDrop:false,id:"root"});this.rightsTreePanel.setRootNode(a)},createRightsTreeNodes:function(){var b=this.rightsTreePanel.getRootNode();var g=[];b.eachChild(function(i){g.push(i)});var a=(this.allRights.length>5)?false:true;for(var d=0;d<this.allRights.length;d++){g[d]?g[d].remove():null;var h=new Ext.tree.TreeNode(this.allRights[d]);h.attributes.application_id=this.allRights[d].application_id;h.expanded=a;b.appendChild(h);if(this.allRights[d].children){for(var c=0;c<this.allRights[d].children.length;c++){var f=this.allRights[d].children[c];f.leaf=true;f.icon="library/ExtJS/resources/images/default/s.gif";f.checked=!!this.getRightId(this.allRights[d].application_id,f.right);f.iconCls="x-tree-node-leaf-roles";var k=new Ext.tree.TreeNode(f);k.attributes.right=f.right;k.on("checkchange",function(j,i){var m=j.parentNode.attributes.application_id;if(i){this.rightsDataStore.add(new Ext.data.Record({right:j.attributes.right,application_id:m}))}else{var l=this.getRightId(m,j.attributes.right);this.rightsDataStore.remove(this.rightsDataStore.getById(l))}},this);h.appendChild(k)}}}return this.rightsTreePanel},getFormContents:function(){this.initRightsTree();this.accountPickerGridPanel=new Tine.widgets.account.PickerGridPanel({title:this.translation.gettext("Members"),store:this.membersStore,anchor:"100% 100%",selectType:"both",selectAnyone:false});var a={title:this.translation.gettext("Rights"),layout:"form",layoutOnTabChange:true,deferredRender:false,autoScroll:true,anchor:"100% 100%",border:false,items:[this.rightsTreePanel]};var b={layout:"border",border:false,width:600,height:500,items:[{region:"north",layout:"column",border:false,autoHeight:true,items:[{columnWidth:1,layout:"form",border:false,items:[{xtype:"textfield",fieldLabel:this.translation.gettext("Role Name"),name:"name",anchor:"100%",allowBlank:false,maxLength:128},{xtype:"textarea",name:"description",fieldLabel:this.translation.gettext("Description"),grow:false,preventScrollbars:false,anchor:"100%",height:60}]}]},new Ext.TabPanel({plain:true,region:"center",activeTab:0,id:"editMainTabPanel",layoutOnTabChange:true,items:[this.accountPickerGridPanel,a]})]};return b},initComponent:function(){this.role=this.role?this.role:new Tine.Tinebase.Model.Role({},0);this.translation=new Locale.Gettext();this.translation.textdomain("Admin");Ext.MessageBox.wait(this.translation._("Loading Role..."),this.translation._("Please Wait"));Ext.Ajax.request({scope:this,success:this.onRecordLoad,params:{method:"Admin.getRole",roleId:this.role.id}});this.membersStore=new Ext.data.JsonStore({root:"results",totalProperty:"totalcount",id:"id",fields:Tine.Tinebase.Model.Account});this.rightsDataStore=new Ext.data.JsonStore({root:"results",totalProperty:"totalcount",fields:Tine.Admin.Roles.Right});Ext.StoreMgr.add("RoleRightsStore",this.rightsDataStore);this.items=this.getFormContents();Tine.Admin.Groups.EditDialog.superclass.initComponent.call(this)},onRecordLoad:function(b){this.getForm().findField("name").focus(false,250);var a=Ext.util.JSON.decode(b.responseText);this.updateRecord(a);if(!this.role.id){window.document.title=this.translation.gettext("Add New Role")}else{window.document.title=String.format(this.translation.gettext('Edit Role "{0}"'),this.role.get("name"))}this.getForm().loadRecord(this.role);Ext.MessageBox.hide()}});Tine.Admin.Roles.EditDialog.openWindow=function(a){a.role=a.role?a.role:new Tine.Tinebase.Model.Role({},0);var b=Tine.WindowFactory.getWindow({width:400,height:600,name:Tine.Admin.Roles.EditDialog.prototype.windowNamePrefix+a.role.id,layout:Tine.Admin.Roles.EditDialog.prototype.windowLayout,contentPanelConstructor:"Tine.Admin.Roles.EditDialog",contentPanelConstructorConfig:a});return b};Ext.ns("Tine.Calendar");Tine.Calendar.ParallelEventsRegistry=function(a){Ext.apply(this,a);this.dtStartTs=this.dtStart.getTime();this.dtEndTs=this.dtEnd.getTime();this.dt=this.granularity*Date.msMINUTE;var b=Math.ceil((this.dtEndTs-this.dtStartTs)/this.dt);this.map=new Array(b)};Tine.Calendar.ParallelEventsRegistry.prototype={dtStart:null,dtEnd:null,granularity:5,dtStartProperty:"dtstart",dtEndProperty:"dtend",map:null,dtStartTs:null,dtEndTs:null,dt:null,register:function(a,f){var h=a.get(this.dtStartProperty);var k=h.getTime();var d=a.get(this.dtEndProperty);var g=d.getTime()-1000;a.duration=g-k;var j=this.tsToIdx(h);var b=this.tsToIdx(g);for(var c=Math.max(j,0);c<=Math.min(b,this.map.length-1);c++){if(!Ext.isArray(this.map[c])){this.map[c]=[]}this.map[c].push(a)}if(f){return this.getEvents(h,d)}},unregister:function(b){for(var a=0;a<this.map.length;a++){if(Ext.isArray(this.map[a])){this.map[a].remove(b)}}},getEvents:function(h,g,f){var a=h.getTime();var b=g.getTime()-1000;var d=this.tsToIdx(h);var c=this.tsToIdx(b);return this.getEventsFromIdx(d,c,f)},getEventsFromIdx:function(h,g,f){var d=[];var a=1;for(var c=h;c<=g;c++){if(Ext.isArray(this.map[c])){a=this.map[c].length>a?this.map[c].length:a;for(var b=0;b<this.map[c].length;b++){if(d.indexOf(this.map[c][b])===-1){d.push(this.map[c][b])}}}}var k=this;d.sort(function(j,i){var m=i.duration-j.duration;var l=j.get(k.dtStartProperty).getTime()-i.get(k.dtStartProperty).getTime();return f?l?l:m:m?m:l});for(var c=0;c<d.length;c++){d[c].parallels=a}return d},tsToIdx:function(a){return Math.floor((a-this.dtStartTs)/this.dt)}};Ext.ns("Tine.Calendar","Tine.Calendar.Model");Tine.Calendar.Model.Event=Tine.Tinebase.data.Record.create(Tine.Tinebase.Model.genericFields.concat([{name:"id"},{name:"dtend",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"transp"},{name:"class_id"},{name:"description"},{name:"geo"},{name:"location"},{name:"organizer"},{name:"priority"},{name:"status_id"},{name:"summary"},{name:"url"},{name:"uid"},{name:"attendee"},{name:"alarms"},{name:"tags"},{name:"notes"},{name:"dtstart",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"recurid"},{name:"exdate"},{name:"rrule"},{name:"is_all_day_event",type:"bool"},{name:"rrule_until",type:"date",dateFormat:Date.patterns.ISO8601Long},{name:"originator_tz"},{name:"readGrant",type:"bool"},{name:"editGrant",type:"bool"},{name:"deleteGrant",type:"bool"},{name:"editGrant",type:"bool"}]),{appName:"Calendar",modelName:"Event",idProperty:"id",titleProperty:"summary",recordName:"Event",recordsName:"Events",containerProperty:"container_id",containerName:"Calendar",containersName:"Calendars",getDisplayContainer:function(){var a=this.get("container_id");var c=Tine.Tinebase.registry.get("currentAccount").accountId;var b=Tine.Calendar.Model.Attender.getAttendeeStore(this.get("attendee"));b.each(function(g){var f=g.getUserAccountId();if(f==c){var d=g.get("displaycontainer_id");if(d){a=d}return false}},this);return a},isRecurBase:function(){return !!this.get("rrule")&&!this.get("recurid")},isRecurException:function(){return !!this.get("recurid")&&!(this.idProperty&&this.id.match(/^fakeid/))},isRecurInstance:function(){return this.id&&this.id.match(/^fakeid/)}});Tine.Calendar.Model.Event.getDefaultData=function(){var f=Tine.Tinebase.appMgr.get("Calendar");var a=new Date().clearTime().add(Date.HOUR,(new Date().getHours()+1));var c=f.getMainScreen().getContentPanel();var d=c.getCalendarPanel(c.activeView).getView().getPeriod();if(d.from.getTime()>a.getTime()||d.until.getTime()<a.getTime()){a=d.from.clearTime(true).add(Date.HOUR,9)}var b={summary:"",dtstart:a,dtend:a.add(Date.HOUR,1),container_id:f.getMainScreen().getTreePanel().getAddCalendar(),transp:"OPAQUE",editGrant:true,organizer:Tine.Tinebase.registry.get("userContact"),attendee:[Ext.apply(Tine.Calendar.Model.Attender.getDefaultData(),{user_type:"user",user_id:Tine.Tinebase.registry.get("currentAccount"),status:"ACCEPTED"})]};return b};Tine.Calendar.Model.EventJsonBackend=Ext.extend(Tine.Tinebase.data.RecordProxy,{createRecurException:function(c,f,b,a){a=a||{};a.params=a.params||{};a.beforeSuccess=function(g){return[this.recordReader(g)]};var d=a.params;d.method=this.appName+".createRecurException";d.recordData=Ext.util.JSON.encode(c.data);d.deleteInstance=f?1:0;d.deleteAllFollowing=b?1:0;return this.doXHTTPRequest(a)},deleteRecurSeries:function(b,a){a=a||{};a.params=a.params||{};var c=a.params;c.method=this.appName+".deleteRecurSeries";c.recordData=Ext.util.JSON.encode(b.data);return this.doXHTTPRequest(a)},updateRecurSeries:function(b,a){a=a||{};a.params=a.params||{};a.beforeSuccess=function(d){return[this.recordReader(d)]};var c=a.params;c.method=this.appName+".updateRecurSeries";c.recordData=Ext.util.JSON.encode(b.data);return this.doXHTTPRequest(a)}});if(Tine.Tinebase.widgets){Tine.Calendar.backend=new Tine.Calendar.Model.EventJsonBackend({appName:"Calendar",modelName:"Event",recordClass:Tine.Calendar.Model.Event})}else{Tine.Calendar.backend=new Tine.Tinebase.data.MemoryBackend({appName:"Calendar",modelName:"Event",recordClass:Tine.Calendar.Model.Event})}Tine.Calendar.Model.Attender=Tine.Tinebase.data.Record.create([{name:"id"},{name:"cal_event_id"},{name:"user_id",sortType:function(a){if(a&&a.n_fn){return a.n_fn}else{if(a&&a.name){return a.name}else{return a}}}},{name:"user_type"},{name:"role"},{name:"quantity"},{name:"status"},{name:"displaycontainer_id"}],{appName:"Calendar",modelName:"Attender",idProperty:"id",titleProperty:"name",recordName:"Attender",recordsName:"Attendee",containerProperty:"cal_event_id",containerName:"Event",containersName:"Events",getUserAccountId:function(){var b=this.get("user_type");if(b=="user"||b=="groupmember"){var a=this.get("user_id");if(!a){return null}if(typeof a.get=="function"){if(a.get("contact_id")){return a.get("accountId")}else{return a.get("account_id")}}else{if(a.hasOwnProperty("contact_id")){return a.accountId}else{if(a.hasOwnProperty("account_id")){return a.account_id}}}return a}return null},getUserId:function(){var b=this.get("user_id");if(!b){return null}var a=(typeof b.get=="function")?b.data:b;if(!a){return null}if(typeof a!="object"){return a}switch(this.get("user_type")){case"user":if(a.hasOwnProperty("contact_id")){return a.contact_id}else{if(a.hasOwnProperty("account_id")){return a.id}}break;default:return a.id;break}}});Tine.Calendar.Model.Attender.getDefaultData=function(){return{user_type:"user",role:"REQ",quantity:1,status:"NEEDS-ACTION"}};Tine.Calendar.Model.Attender.getAttendeeStore=function(a){var b=new Ext.data.SimpleStore({fields:Tine.Calendar.Model.Attender.getFieldDefinitions(),sortInfo:{field:"user_id",direction:"ASC"}});Ext.each(a,function(d){var c=new Tine.Calendar.Model.Attender(d,d.id);b.addSorted(c)});return b};Tine.Calendar.Model.Resource=Tine.Tinebase.data.Record.create(Tine.Tinebase.Model.genericFields.concat([{name:"id"},{name:"name"},{name:"description"},{name:"email"},{name:"is_location",type:"bool"},{name:"tags"},{name:"notes"}]),{appName:"Calendar",modelName:"Resource",idProperty:"id",titleProperty:"name",recordName:"Resource",recordsName:"Resources",containerProperty:null});Ext.namespace("Tine.Calendar");Tine.Calendar.AdminPanel=Ext.extend(Ext.TabPanel,{activeTab:0,initComponent:function(){this.app=Tine.Tinebase.appMgr.get("Calendar");this.items=[new Tine.Calendar.ResourcesGridPanel({title:this.app.i18n._("Manage Resources"),disabled:!Tine.Tinebase.common.hasRight("manage_resources","Calendar")})];Tine.Calendar.AdminPanel.superclass.initComponent.call(this)},onRender:function(){this.supr().onRender.apply(this,arguments);this.window.setTitle(this.windowTitle)}});Tine.Calendar.AdminPanel.openWindow=function(a){var b=Tine.WindowFactory.getWindow({width:500,height:470,name:"cal-mange-resources",contentPanelConstructor:"Tine.Calendar.AdminPanel",contentPanelConstructorConfig:a})};Date.msSECOND=1000;Date.msMINUTE=60*Date.msSECOND;Date.msHOUR=60*Date.msMINUTE;Date.msDAY=24*Date.msHOUR;Date.msWEEK=7*Date.msDAY;Ext.ns("Tine.Calendar");Tine.Calendar.CalendarPanel=Ext.extend(Ext.Panel,{view:null,store:null,border:false,loadMaskText:"Loading events, please wait...",initComponent:function(){Tine.Calendar.CalendarPanel.superclass.initComponent.call(this);this.app=Tine.Tinebase.appMgr.get("Calendar");this.loadMaskText=this.app.i18n._hidden(this.loadMaskText);this.selModel=this.selModel||new Tine.Calendar.EventSelectionModel();this.autoScroll=false;this.autoWidth=false;this.relayEvents(this.view,["changeView","changePeriod","click","dblclick","contextmenu"]);this.store.on("beforeload",this.onBeforeLoad,this);this.store.on("load",this.onLoad,this)},getSelectionModel:function(){return this.selModel},getStore:function(){return this.store},getView:function(){return this.view},onAddEvent:function(a,b){this.setLoading(true);if(a.get("id").match(/new/)){a.set("id","")}if(a.isRecurBase()){this.loadMask.show()}Tine.Calendar.backend.saveRecord(a,{scope:this,success:function(c){if(c.isRecurBase()){this.store.load({refresh:true})}else{this.store.remove(a);this.store.add(c);this.setLoading(false);this.view.getSelectionModel().select(c)}},failure:this.onProxyFail.createDelegate(this,[a],true)},{checkBusyConficts:b===false?0:1})},onBeforeLoad:function(a,b){if(!b.refresh){if(this.rendered){this.loadMask.show()}this.store.each(this.view.removeEvent,this.view)}b.params=b.params||{};var c=b.params.filter?b.params.filter:[];c.push({field:"period",operator:"within",value:this.getView().getPeriod()})},onLoad:function(){if(this.rendered){this.loadMask.hide()}},onProxyFail:function(d,f){this.setLoading(false);if(d.code==901){var b=[];var a={};var g=Tine.Calendar.Model.Attender.getAttendeeStore(f.get("attendee"));Ext.each(d.freebusyinfo,function(h){g.each(function(i){if(i.get("user_type")==h.user_type&&i.getUserId()==h.user_id){if(b.indexOf(i)<0){b.push(i);a[i.id]=[]}a[i.id].push(h)}})},this);var c="";Ext.each(b,function(j){var i=Tine.Calendar.AttendeeGridPanel.prototype.renderAttenderName.call(Tine.Calendar.AttendeeGridPanel.prototype,j.get("user_id"),false,j);c+='<div class="cal-conflict-attendername">'+i+"</div>";var h=[];Ext.each(a[j.id],function(n){var m="H:i";var k=Ext.form.DateField.prototype.format;if(f.get("dtstart").format(k)!=f.get("dtend").format(k)||Date.parseDate(n.dtstart,Date.patterns.ISO8601Long).format(k)!=Date.parseDate(n.dtend,Date.patterns.ISO8601Long).format(k)){m=k+" "+m}var l=Date.parseDate(n.dtstart,Date.patterns.ISO8601Long).format(m)+" - "+Date.parseDate(n.dtend,Date.patterns.ISO8601Long).format(m);if(n.event&&n.event.summary){l+=" : "+n.event.summary}h.push(l)},this);c+='<div class="cal-conflict-eventinfos">'+h.join(", <br />")+"</div>"});this.conflictConfirmWin=new Ext.Window({modal:true,width:Ext.isIE?350:"auto",cls:"x-window-dlg",closable:false,title:this.app.i18n._("Scheduling Conflict"),html:'<div class="ext-mb-icon ext-mb-question"></div><div class="ext-mb-content"><span class="ext-mb-text"></span><div class = "cal-conflict-heading">'+this.app.i18n._("The following attendee are busy at the requested time:")+"</div>"+c+'<br /><div class="ext-mb-fix-cursor"></div></div>',buttons:[{text:this.app.i18n._("Ignore Conflict"),scope:this,handler:function(){this.onAddEvent(f,false);this.conflictConfirmWin.close()}},{text:this.app.i18n._("Edit Event"),scope:this,handler:function(){this.view.getSelectionModel().select(f);this.view.fireEvent("dblclick",this.view,f);this.conflictConfirmWin.close()}}]});this.conflictConfirmWin.show()}else{Tine.Tinebase.ExceptionHandler.handleRequestException(d)}},onUpdateEvent:function(a){this.setLoading(true);if(a.isRecurBase()){this.loadMask.show()}if(a.isRecurBase()&&!a.get("rrule").newrule){Ext.MessageBox.confirm(this.app.i18n._("Confirm Update of Series"),this.app.i18n._("Do you really want to update all events of this recurring event series?"),function(b){if(b=="yes"){this.loadMask.show();this.onUpdateEventAction(a);this.store.load({refresh:true})}else{this.loadMask.show();this.store.load({refresh:true})}},this)}else{if(a.isRecurInstance()){this.updateeMethodWin=new Ext.Window({modal:true,cls:"x-window-dlg",closable:false,title:this.app.i18n._("Update Event"),html:'<div class="ext-mb-icon ext-mb-question"></div><div class="ext-mb-content"><span class="ext-mb-text"></span>'+this.app.i18n._("Do you want to update the whole series, or just this event")+'<br /><div class="ext-mb-fix-cursor"></div></div>',buttons:[{text:this.app.i18n._("Update nothing"),scope:this,handler:function(){this.loadMask.show();this.store.load({refresh:true});this.updateeMethodWin.close()}},{text:this.app.i18n._("Update whole series"),scope:this,handler:function(){this.loadMask.show();var b={scope:this,success:function(){this.store.load({refresh:true})},failure:this.onProxyFail.createDelegate(this,[a],true)};Tine.Calendar.backend.updateRecurSeries(a,b);this.updateeMethodWin.close()}},{text:this.app.i18n._("Update this event only"),scope:this,handler:function(){var b={scope:this,success:function(c){a=this.store.indexOf(a)!=-1?a:this.store.getById(a.id);this.store.remove(a);this.store.add(c);this.setLoading(false);this.view.getSelectionModel().select(c)},failure:this.onProxyFail.createDelegate(this,[a],true)};Tine.Calendar.backend.createRecurException(a,false,false,b);this.updateeMethodWin.close()}}]});this.updateeMethodWin.show()}else{this.onUpdateEventAction(a)}}},onUpdateEventAction:function(a){Tine.Calendar.backend.saveRecord(a,{scope:this,success:function(b){if(b.isRecurBase()){this.store.load({refresh:true})}else{a=this.store.indexOf(a)!=-1?a:this.store.getById(a.id);this.store.remove(a);this.store.add(b);this.setLoading(false);this.view.getSelectionModel().select(b)}},failure:this.onProxyFail.createDelegate(this,[a],true)},{checkBusyConficts:1})},setLoading:function(a){var b=this.getTopToolbar();if(b&&b.loading){b.loading[a?"disable":"enable"]()}},onRender:function(b,a){Tine.Calendar.CalendarPanel.superclass.onRender.apply(this,arguments);var d=this.body;this.el.addClass("cal-panel");this.view.init(this);this.view.on("addEvent",this.onAddEvent,this);this.view.on("updateEvent",this.onUpdateEvent,this);this.view.on("click",this.onClick,this);this.view.on("dblclick",this.onDblClick,this);this.view.on("contextmenu",this.onContextMenu,this);d.on("keydown",this.onKeyDown,this);this.view.render()},afterRender:function(){Tine.Calendar.CalendarPanel.superclass.afterRender.call(this);this.loadMask=new Ext.LoadMask(this.body,{msg:this.loadMaskText});this.view.layout();this.view.afterRender();this.viewReady=true},onResize:function(b,a){Tine.Calendar.CalendarPanel.superclass.onResize.apply(this,arguments);if(this.viewReady){this.view.layout()}},processEvent:function(a,b){},onClick:function(a,b){this.processEvent("click",a)},onContextMenu:function(a,b){this.processEvent("contextmenu",a)},onDblClick:function(a,b){this.processEvent("dblclick",a)},onKeyDown:function(a){this.fireEvent("keydown",a)}});Ext.ns("Tine.Calendar");Tine.Calendar.EventUI=function(a){this.event=a;this.domIds=[];this.init()};Tine.Calendar.EventUI.prototype={addClass:function(a){Ext.each(this.getEls(),function(b){b.addClass(a)})},blur:function(){Ext.each(this.getEls(),function(a){a.blur()})},clearDirty:function(){Ext.each(this.getEls(),function(a){a.setOpacity(1,1)})},focus:function(){Ext.each(this.getEls(),function(a){a.focus()})},getEls:function(){var c=[];for(var a=0;a<this.domIds.length;a++){var b=Ext.get(this.domIds[a]);if(b){c.push(b)}}return c},init:function(){},markDirty:function(){Ext.each(this.getEls(),function(a){a.setOpacity(0.5,1)})},onSelectedChange:function(a){if(a){this.addClass("cal-event-active");this.setStyle({"z-index":1000})}else{this.removeClass("cal-event-active");this.setStyle({"z-index":100})}},remove:function(){var a=this.getEls();for(var b=0;b<a.length;b++){if(a[b]&&typeof a[b].remove=="function"){a[b].remove()}}this.domIds=[]},removeClass:function(a){Ext.each(this.getEls(),function(b){b.removeClass(a)})},render:function(){},setOpacity:function(a){Ext.each(this.getEls(),function(b){b.setStyle(a)})},setStyle:function(a){Ext.each(this.getEls(),function(b){b.setStyle(a)})}};Tine.Calendar.DaysViewEventUI=Ext.extend(Tine.Calendar.EventUI,{clearDirty:function(){Tine.Calendar.DaysViewEventUI.superclass.clearDirty.call(this);Ext.each(this.getEls(),function(a){a.setStyle({"border-style":"solid"})})},markDirty:function(){Tine.Calendar.DaysViewEventUI.superclass.markDirty.call(this);Ext.each(this.getEls(),function(a){a.setStyle({"border-style":"dashed"})})},onSelectedChange:function(a){Tine.Calendar.DaysViewEventUI.superclass.onSelectedChange.call(this,a);if(a){this.addClass("cal-daysviewpanel-event-active")}else{this.removeClass("cal-daysviewpanel-event-active")}},render:function(b){this.colorSet=Tine.Calendar.colorMgr.getColor(this.event);this.dtStart=this.event.get("dtstart");this.startColNum=b.getColumnNumber(this.dtStart);this.dtEnd=this.event.get("dtend");if(this.dtEnd.format("H:i")=="00:00"){this.dtEnd=this.dtEnd.add(Date.MINUTE,-1)}this.endColNum=b.getColumnNumber(this.dtEnd);if(this.endColNum<0||this.startColNum>b.numOfDays-1){return}var c=this.event.get("is_all_day_event")?b.parallelWholeDayEventsRegistry:b.parallelScrollerEventsRegistry;this.parallelEvents=c.getEvents(this.dtStart,this.dtEnd);var a=Math.max(1,this.parallelEvents.length);var d=Math.max(0,this.parallelEvents.indexOf(this.event));if(this.event.get("is_all_day_event")){this.renderAllDayEvent(b,a,d)}else{this.renderScrollerEvent(b,a,d)}if(this.event.dirty){this.onSelectedChange(true)}},renderAllDayEvent:function(j,f,i){var g=this.extraCls;var h=Ext.fly(j.wholeDayArea).getWidth();var b=Math.round(h*(this.dtEnd.getTime()-this.dtStart.getTime())/(j.numOfDays*Date.msDAY))-5;var c=Math.round(h*(this.dtStart.getTime()-j.startDate.getTime())/(j.numOfDays*Date.msDAY));if(this.startColNum<0){b=b-Math.abs(this.startColNum)*(h/j.numOfDays);c=0;g=g+" cal-daysviewpanel-event-cropleft"}if(this.endColNum>j.numOfDays){b=b-Math.abs(this.endColNum-j.numOfDays)*(h/j.numOfDays);g=g+" cal-daysviewpanel-event-cropright"}var d=Ext.id()+"-event:"+this.event.get("id");this.domIds.push(d);var a=j.templates.wholeDayEvent.insertFirst(j.wholeDayArea,{id:d,summary:this.event.get("summary"),startTime:this.dtStart.format("H:i"),extraCls:g,color:this.colorSet.color,bgColor:this.colorSet.light,zIndex:100,width:b+"px",height:"15px",left:c+"px",top:i*18+"px"},true);if(this.event.dirty){a.setStyle({"border-style":"dashed"});a.setOpacity(0.5)}if(!(this.endColNum>j.numOfDays)&&this.event.get("editGrant")){this.resizeable=new Ext.Resizable(a,{handles:"e",disableTrackOver:true,widthIncrement:Math.round(h/j.numOfDays),minWidth:Math.round(h/j.numOfDays),listeners:{scope:j,resize:j.onEventResize,beforeresize:j.onBeforeEventResize}})}},renderScrollerEvent:function(i,c,g){var d=i.granularityUnitHeights*((24*60)/i.timeGranularity);for(var k=this.startColNum;k<=this.endColNum;k++){var f=this.extraCls;if(k<0||k>=i.numOfDays){continue}var h=i.getTimeOffset(this.dtStart);var j=this.startColNum==this.endColNum?i.getTimeHeight(this.dtStart,this.dtEnd):i.getTimeOffset(this.dtEnd);if(k!=this.startColNum){h=0;f=f+" cal-daysviewpanel-event-croptop"}if(this.endColNum!=k){j=i.getTimeHeight(this.dtStart,this.dtStart.add(Date.DAY,1));f=f+" cal-daysviewpanel-event-cropbottom"}var b=Ext.id()+"-event:"+this.event.get("id");this.domIds.push(b);if(j<=12){j=12}if(h>d-12){h=d-12}var a=i.templates.event.append(i.getDateColumnEl(k),{id:b,summary:j>=24?this.event.get("summary"):"",startTime:(j>=24&&h<=d-24)?this.dtStart.format("H:i"):this.dtStart.format("H:i")+" "+this.event.get("summary"),extraCls:f,color:this.colorSet.color,bgColor:this.colorSet.light,zIndex:100,width:Math.round(90*1/c)+"%",height:j+"px",left:Math.round(g*90*1/c)+"%",top:h+"px"},true);if(this.event.dirty){a.setStyle({"border-style":"dashed"});a.setOpacity(0.5)}if(k==this.endColNum&&this.event.get("editGrant")){this.resizeable=new Ext.Resizable(a,{handles:"s",disableTrackOver:true,dynamic:!!this.event.isRangeAdd,heightIncrement:i.granularityUnitHeights/2,listeners:{scope:i,resize:i.onEventResize,beforeresize:i.onBeforeEventResize}})}}}});Tine.Calendar.MonthViewEventUI=Ext.extend(Tine.Calendar.EventUI,{onSelectedChange:function(a){Tine.Calendar.MonthViewEventUI.superclass.onSelectedChange.call(this,a);if(a){this.addClass("cal-monthview-active");this.setStyle({"background-color":this.color,color:"#FFFFFF"})}else{this.removeClass("cal-monthview-active");this.setStyle({"background-color":this.is_all_day_event?this.bgColor:"",color:this.is_all_day_event?"#000000":this.color})}}});Ext.ns("Tine.Calendar");Tine.Calendar.EventSelectionModel=Ext.extend(Ext.tree.MultiSelectionModel,{init:function(a){a.getTreeEl=function(){return a.el};Tine.Calendar.EventSelectionModel.superclass.init.call(this,a)},getCount:function(){return this.getSelectedNodes().length},getSelected:function(){var a=this.getSelectedEvents();return a.length>0?a[0]:null},getSelectedEvents:function(){return this.getSelectedNodes()},select:function(a,c,b){if(!a||!a.ui){return a}Tine.Calendar.EventSelectionModel.superclass.select.apply(this,arguments)},onKeyDown:Ext.emptyFn});Ext.ns("Tine.Calendar");Tine.Calendar.DaysView=function(a){Ext.apply(this,a);Tine.Calendar.DaysView.superclass.constructor.call(this);this.addEvents("click","contextmenu","dblclick","changeView","changePeriod","addEvent","updateEvent")};Ext.extend(Tine.Calendar.DaysView,Ext.util.Observable,{startDate:new Date(),numOfDays:4,newEventSummary:"New Event",dayFormatString:"{0}, the {1}. of {2}",timeGranularity:30,granularityUnitHeights:18,denyDragOnMissingEditGrant:true,timeScale:null,scrollOffset:19,editing:false,activeEvent:null,ds:null,updatePeriod:function(a){this.toDay=new Date().clearTime();this.startDate=a.from;var b=this.calPanel.getTopToolbar();if(b){b.periodPicker.update(this.startDate);this.startDate=b.periodPicker.getPeriod().from}this.endDate=this.startDate.add(Date.DAY,this.numOfDays+1);this.updateDayHeaders();this.fireEvent("changePeriod",a)},init:function(a){this.calPanel=a;this.app=Tine.Tinebase.appMgr.get("Calendar");this.newEventSummary=this.app.i18n._hidden(this.newEventSummary);this.dayFormatString=this.app.i18n._hidden(this.dayFormatString);this.startDate.setHours(0);this.startDate.setMinutes(0);this.startDate.setSeconds(0);this.endDate=this.startDate.add(Date.DAY,this.numOfDays+1);this.parallelScrollerEventsRegistry=new Tine.Calendar.ParallelEventsRegistry({dtStart:this.startDate,dtEnd:this.endDate});this.parallelWholeDayEventsRegistry=new Tine.Calendar.ParallelEventsRegistry({dtStart:this.startDate,dtEnd:this.endDate});this.initData(a.store);this.initTimeScale();this.initTemplates()},initData:function(a){if(this.ds){this.ds.un("load",this.onLoad,this);this.ds.un("datachanged",this.onDataChange,this);this.ds.un("add",this.onAdd,this);this.ds.un("remove",this.onRemove,this);this.ds.un("update",this.onUpdate,this);this.ds.un("clear",this.onClear,this)}if(a){a.on("load",this.onLoad,this);a.on("datachanged",this.onDataChange,this);a.on("add",this.onAdd,this);a.on("remove",this.onRemove,this);a.on("update",this.onUpdate,this);a.on("clear",this.onClear,this)}this.ds=a},initTimeScale:function(){var f=[];var a=Date.msDAY/(this.timeGranularity*Date.msMINUTE);var d=this.startDate.clone();var c;for(var b=0;b<a;b++){c=b*this.timeGranularity;f.push([b,c,c*Date.msMINUTE,d.add(Date.MINUTE,c).format("H:i")])}this.timeScale=new Ext.data.SimpleStore({fields:["index","minutes","milliseconds","time"],data:f,id:"index"})},initDropZone:function(){this.dd=new Ext.dd.DropZone(this.mainWrap.dom,{ddGroup:"cal-event",notifyOver:function(a,g,f){var b=Ext.fly(f.sourceEl);b.setStyle({"border-style":"dashed"});b.setOpacity(0.5);if(f.event){var d=f.event;f.scope.getSelectionModel().select(d);var c=Tine.Calendar.DaysView.prototype.getTargetDateTime.call(f.scope,g);if(c&&d.get("editGrant")){return Math.abs(c.getTime()-d.get("dtstart").getTime())<Date.msMINUTE?"cal-daysviewpanel-event-drop-nodrop":"cal-daysviewpanel-event-drop-ok"}}return"cal-daysviewpanel-event-drop-nodrop"},notifyOut:function(){},notifyDrop:function(a,h,g){var c=g.scope;var d=c.getTargetDateTime(h);if(d){var f=g.event;if(!f.get("editGrant")||Math.abs(d.getTime()-f.get("dtstart").getTime())<Date.msMINUTE){return false}f.beginEdit();var b=(f.get("dtend").getTime()-f.get("dtstart").getTime())/Date.msMINUTE;f.set("dtstart",d);if(!f.get("is_all_day_event")&&d.is_all_day_event&&f.duration<Date.msDAY){f.set("dtend",d.add(Date.DAY,1))}else{if(f.get("is_all_day_event")&&!d.is_all_day_event){f.set("dtend",d.add(Date.HOUR,1))}else{f.set("dtend",d.add(Date.MINUTE,b))}}f.set("is_all_day_event",d.is_all_day_event);f.endEdit();c.fireEvent("updateEvent",f)}return !!d}})},initDragZone:function(){this.scroller.ddScrollConfig={vthresh:50,hthresh:-1,frequency:100,increment:100};Ext.dd.ScrollManager.register(this.scroller);this.dragZone=new Ext.dd.DragZone(this.el,{ddGroup:"cal-event",daysView:this,scroll:false,containerScroll:true,getDragData:functi