/*
 * Zipwhip Web 2.0 Messaging Product 1.0.
 * Copyright(c) 2008-2011, Zipwhip.
 * 
 * 
 * This product is not currently available for public release. Only Zipwhip employees and authorized Carriers, and their customers are permitted to access this product during the authorized beta.
 */


(function(){var ua=navigator.userAgent.toLowerCase(),check=function(r){return r.test(ua);},docMode=document.documentMode;Ext.isOpera=check(/opera/);Ext.isChrome=check(/\bchrome\b/);Ext.isWebKit=check(/webkit/);Ext.isSafari=!Ext.isChrome&&check(/safari/);Ext.isSafari2=Ext.isSafari&&check(/applewebkit\/4/);Ext.isSafari3=Ext.isSafari&&check(/version\/3/);Ext.isSafari4=Ext.isSafari&&check(/version\/4/);Ext.isIE=!Ext.isOpera&&check(/msie/);Ext.isIE7=Ext.isIE&&(check(/msie 7/)||docMode==7);Ext.isIE8=Ext.isIE&&(check(/msie 8/)&&docMode!=7&&docMode!=9||docMode==8);Ext.isIE9=Ext.isIE&&(check(/msie 9/)&&docMode!=7&&docMode!=8||docMode==9);Ext.isIE6=Ext.isIE&&check(/msie 6/);var E=Ext.lib.Event;var btnMap=Ext.isIE?{0:0,1:0,4:1,2:2}:((Ext.isWebKit&&!Ext.isChrome&&!Ext.isSafari)?{1:0,2:1,3:2}:{0:0,1:1,2:2});Ext.apply(Ext.EventObject,{setEvent:function(e){if(e==this||(e&&e.browserEvent)){return e;}
this.browserEvent=e;if(e){this.button=e.button!==undefined?btnMap[e.button]:(e.which?e.which-1:-1);if(e.type=='click'&&this.button==-1){this.button=0;}
this.type=e.type;this.shiftKey=e.shiftKey;this.ctrlKey=e.ctrlKey||e.metaKey;this.altKey=e.altKey;this.keyCode=e.keyCode;this.charCode=e.charCode;this.target=E.getTarget(e);this.xy=E.getXY(e);}else{this.button=-1;this.shiftKey=false;this.ctrlKey=false;this.altKey=false;this.keyCode=0;this.charCode=0;this.target=null;this.xy=[0,0];}
return this;}});})();Ext.apply(Ext.EventObject,{within:function(el,related,allowEl){try{var t=this[related?"getRelatedTarget":"getTarget"]();return t&&((allowEl?(t===Ext.getDom(el)):false)||Ext.fly(el).contains(t));}catch(e){}}});Ext.override(Ext.data.Store,{changeIdOfRecord:function(oldId,newId){this.data.map[newId]=this.data.map[oldId];delete this.data.map[oldId];var keys=this.data.keys;for(var i=0;i<keys.length;i++){if(keys[i]==oldId){keys[i]=newId;}}}});Ext.override(Ext.util.Event,{exceptionManager:null,fire:function(){var ls=this.listeners,scope,len=ls.length;var errorHandler=null;if(window.Zw&&window.Zw.Application&&window.Zw.Application.Context)
errorHandler=Zw.Application.Context.errorHandler;if(len>0){this.firing=true;var args=Array.prototype.slice.call(arguments,0);for(var i=0;i<len;i++){var l=ls[i];if(Zw.Application.debug){if(l&&l.fireFn){if(l.fireFn.apply(l.scope||this.obj||window,arguments)===false){this.firing=false;return false;}}}else{try{if(l&&l.fireFn){if(l.fireFn.apply(l.scope||this.obj||window,arguments)===false){this.firing=false;return false;}}}catch(ex){if(errorHandler&&errorHandler.handler&&errorHandler.handler.call){errorHandler.handler.call(errorHandler.scope||this,this,arguments,ex);}else{throw ex;}}}}
this.firing=false;}
return true;}});Ext.Element.prototype.addClassOnOver=function(className,force){if(!Zw.capabilities.mouseOverCss&&!force)return this;this.hover(function(){Ext.fly(this,'_internal').addClass(className);},function(){Ext.fly(this,'_internal').removeClass(className);});return this;}
Ext.Element.prototype.addClassOnFocus=function(className,force){if(!Zw.capabilities.mouseFocusCss&&!force)return this;this.on("focus",function(){Ext.fly(this,'_internal').addClass(className);},this.dom);this.on("blur",function(){Ext.fly(this,'_internal').removeClass(className);},this.dom);return this;}
Ext.Element.prototype.addClassOnClick=function(className,force){if(!Zw.capabilities.mouseClickCss&&!force)return this;var dom=this.dom;this.on("mousedown",function(){Ext.fly(dom,'_internal').addClass(className);var d=Ext.getDoc();var fn=function(){Ext.fly(dom,'_internal').removeClass(className);d.removeListener("mouseup",fn);};d.on("mouseup",fn);});return this;}
Ext.KeyNav=function(el,config){this.el=Ext.get(el);Ext.apply(this,config);if(!this.disabled){this.disabled=true;this.enable();}};Ext.KeyNav.prototype={disabled:false,defaultEventAction:"stopEvent",forceKeyDown:false,prepareEvent:function(e){var k=e.getKey();var h=this.keyToHandler[k];if(Ext.isSafari2&&h&&k>=37&&k<=40){e.stopEvent();}},relay:function(e){var k=e.getKey();var h=this.keyToHandler[k];if(h&&this[h]){if(this.doRelay(e,this[h],h)!==true){e[this.defaultEventAction]();}}},doRelay:function(e,h,hname){return h.call(this.scope||this,e);},enter:false,left:false,right:false,up:false,down:false,tab:false,esc:false,pageUp:false,pageDown:false,del:false,home:false,end:false,keyToHandler:{37:"left",39:"right",38:"up",40:"down",33:"pageUp",34:"pageDown",46:"del",36:"home",35:"end",13:"enter",27:"esc",9:"tab"},enable:function(){if(this.disabled){if(this.forceKeyDown||Ext.isIE||Ext.isSafari3||Ext.isAir){this.el.on("keydown",this.relay,this);}else{this.el.on("keydown",this.prepareEvent,this);this.el.on("keypress",this.relay,this);}
this.disabled=false;}},disable:function(){if(!this.disabled){if(this.forceKeyDown||Ext.isIE||Ext.isSafari3||Ext.isAir){this.el.un("keydown",this.relay,this);}else{this.el.un("keydown",this.prepareEvent,this);this.el.un("keypress",this.relay,this);}
this.disabled=true;}}};Ext.DomHelper.insertHtml=(function(){var insertHtmlOld=Ext.DomHelper.insertHtml;function isAttached($element){var $body=$element.ownerDocument.body;while($element!=null&&$element!=$body){$element=$element.parentNode;}
return $element!=null;}
function isHackApplicable($element){if(!Ext.isSafari){return false;}
if(isAttached($element)){return false;}
return true;}
return function($where,$element,$html){if(isHackApplicable($element)){var $div=document.createElement("DIV");$div.innerHTML=$html;switch($where.toLowerCase()){case"beforebegin":while($div.childNodes.length>0){$element.parentNode.insertBefore($div.childNodes[0],$element);}
return $element.previousSibling;case"beforeend":while($div.childNodes.length>0){$element.appendChild($div.childNodes[0]);}
return $element.lastChild;}}
return insertHtmlOld.apply(Ext.DomHelper,arguments);};})();Array.prototype.removeByIndex=function(from,to){var rest=this.slice((to||from)+1||this.length);var L=from<0?this.length+from:from;;this.length=L;return this.push.apply(this,rest);};

if(!Ext.ux.util){Ext.ux.util={};}
Ext.ux.util.clone=function(o){if(!o||'object'!==typeof o){return o;}
if('function'===typeof o.clone){return o.clone();}
var c='[object Array]'===Object.prototype.toString.call(o)?[]:{};var p,v;for(p in o){if(o.hasOwnProperty(p)){v=o[p];if(v&&'object'===typeof v){c[p]=Ext.ux.util.clone(v);}
else{c[p]=v;}}}
return c;};Ext.ux.util.getUrlParam=function(name){name=name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");var regexS="[\\?&]"+name+"=([^&#]*)";var regex=new RegExp(regexS);var results=regex.exec(window.location.href);var value='';if(results!=null)
value=decodeURIComponent(results[1].replace(/\+/g," "));return value;}

Ext.namespace("Ext.v3");Ext.v3.Button=Ext.extend(Ext.Component,{hidden:false,disabled:false,pressed:false,enableToggle:false,menuAlign:"tl-bl?",type:'button',menuClassTarget:'tr',clickEvent:'click',handleMouseEvents:true,tooltipType:'qtip',buttonSelector:"button:first",scale:'small',iconAlign:'left',arrowAlign:'right',initComponent:function(){Ext.v3.Button.superclass.initComponent.call(this);this.addEvents("click","toggle",'mouseover','mouseout','menushow','menuhide','menutriggerover','menutriggerout');if(this.menu){this.menu=Ext.menu.MenuMgr.get(this.menu);}
if(typeof this.toggleGroup==='string'){this.enableToggle=true;}},getTemplateArgs:function(){var cls=(this.cls||'');cls+=this.iconCls?(this.text?' x-btn-text-icon':' x-btn-icon'):' x-btn-noicon';if(this.pressed){cls+=' x-btn-pressed';}
return[this.text||'&#160;',this.type,this.iconCls||'',cls,'x-btn-'+this.scale+' x-btn-icon-'+this.scale+'-'+this.iconAlign,this.getMenuClass()];},getMenuClass:function(){return this.menu?(this.arrowAlign!='bottom'?'x-btn-arrow':'x-btn-arrow-bottom'):'';},onRender:function(ct,position){if(!this.template){if(!Ext.v3.Button.buttonTemplate){Ext.v3.Button.buttonTemplate=new Ext.Template('<table cellspacing="0" class="x-btn {3}"><tbody class="{4}">','<tr><td class="x-btn-tl"><i>&#160;</i></td><td class="x-btn-tc"></td><td class="x-btn-tr"><i>&#160;</i></td></tr>','<tr><td class="x-btn-ml"><i>&#160;</i></td><td class="x-btn-mc"><em class="{5}" unselectable="on"><button class="x-btn-text {2}" type="{1}">{0}</button></em></td><td class="x-btn-mr"><i>&#160;</i></td></tr>','<tr><td class="x-btn-bl"><i>&#160;</i></td><td class="x-btn-bc"></td><td class="x-btn-br"><i>&#160;</i></td></tr>',"</tbody></table>");Ext.v3.Button.buttonTemplate.compile();}
this.template=Ext.v3.Button.buttonTemplate;}
var btn,targs=this.getTemplateArgs();if(position){btn=this.template.insertBefore(position,targs,true);}else{btn=this.template.append(ct,targs,true);}
var btnEl=btn.child(this.buttonSelector);btnEl.on('focus',this.onFocus,this);btnEl.on('blur',this.onBlur,this);this.initButtonEl(btn,btnEl);Ext.ButtonToggleMgr.register(this);},initButtonEl:function(btn,btnEl){this.el=btn;if(this.icon){btnEl.setStyle('background-image','url('+this.icon+')');}
if(this.tabIndex!==undefined){btnEl.dom.tabIndex=this.tabIndex;}
if(this.tooltip){if(typeof this.tooltip=='object'){Ext.QuickTips.register(Ext.apply({target:btnEl.id},this.tooltip));}else{btnEl.dom[this.tooltipType]=this.tooltip;}}
if(this.handleMouseEvents){btn.on("mouseover",this.onMouseOver,this);btn.on("mousedown",this.onMouseDown,this);}
if(this.menu){this.menu.on("show",this.onMenuShow,this);this.menu.on("hide",this.onMenuHide,this);}
if(this.id){this.el.dom.id=this.el.id=this.id;}
if(this.repeat){var repeater=new Ext.util.ClickRepeater(btn,typeof this.repeat=="object"?this.repeat:{});repeater.on("click",this.onClick,this);}
btn.on(this.clickEvent,this.onClick,this);},afterRender:function(){Ext.v3.Button.superclass.afterRender.call(this);if(Ext.isIE6){this.autoWidth.defer(1,this);}else{this.autoWidth();}},setIconClass:function(cls){if(this.el){this.el.child(this.buttonSelector).replaceClass(this.iconCls,cls);}
this.iconCls=cls;},beforeDestroy:function(){if(this.rendered){var btn=this.el.child(this.buttonSelector);if(btn){btn.removeAllListeners();}}
if(this.menu){Ext.destroy(this.menu);}},onDestroy:function(){if(this.rendered){Ext.ButtonToggleMgr.unregister(this);}},autoWidth:function(){if(this.el&&this.text){this.el.setWidth("auto");if(Ext.isIE7&&Ext.isStrict){var ib=this.el.child(this.buttonSelector);if(ib&&ib.getWidth()>20){ib.clip();ib.setWidth(Ext.util.TextMetrics.measure(ib,this.text).width+ib.getFrameWidth('lr'));}}
if(this.minWidth){if(this.el.getWidth()<this.minWidth){this.el.setWidth(this.minWidth);}}}},setHandler:function(handler,scope){this.handler=handler;this.scope=scope;},setText:function(text){this.text=text;if(this.el){this.el.child("td.x-btn-mc "+this.buttonSelector).update(text);}
this.autoWidth();},getText:function(){return this.text;},toggle:function(state){state=state===undefined?!this.pressed:state;if(state!=this.pressed){if(state){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,state);}}},focus:function(){this.el.child(this.buttonSelector).focus();},onDisable:function(){if(this.el){if(!Ext.isIE6||!this.text){this.el.addClass(this.disabledClass);}
this.el.dom.disabled=true;}
this.disabled=true;},onEnable:function(){if(this.el){if(!Ext.isIE6||!this.text){this.el.removeClass(this.disabledClass);}
this.el.dom.disabled=false;}
this.disabled=false;},showMenu:function(){if(this.menu){this.menu.show(this.el,this.menuAlign);}
return this;},hideMenu:function(){if(this.menu){this.menu.hide();}
return this;},hasVisibleMenu:function(){return this.menu&&this.menu.isVisible();},onClick:function(e){if(e){e.preventDefault();}
if(e.button!=0){return;}
if(!this.disabled){if(this.enableToggle&&(this.allowDepress!==false||!this.pressed)){this.toggle();}
if(this.menu&&!this.menu.isVisible()&&!this.ignoreNextClick){this.showMenu();}
this.fireEvent("click",this,e);if(this.handler){this.handler.call(this.scope||this,this,e);}}},isMenuTriggerOver:function(e,internal){return this.menu&&!internal;},isMenuTriggerOut:function(e,internal){return this.menu&&!internal;},onMouseOver:function(e){if(!this.disabled){var internal=e.within(this.el,true);if(!internal){this.el.addClass("x-btn-over");if(!this.monitoringMouseOver){Ext.getDoc().on('mouseover',this.monitorMouseOver,this);this.monitoringMouseOver=true;}
this.fireEvent('mouseover',this,e);}
if(this.isMenuTriggerOver(e,internal)){this.fireEvent('menutriggerover',this,this.menu,e);}}},monitorMouseOver:function(e){if(e.target!=this.el.dom&&!e.within(this.el)){if(this.monitoringMouseOver){Ext.getDoc().un('mouseover',this.monitorMouseOver,this);this.monitoringMouseOver=false;}
this.onMouseOut(e);}},onMouseOut:function(e){var internal=e.within(this.el)&&e.target!=this.el.dom;this.el.removeClass("x-btn-over");this.fireEvent('mouseout',this,e);if(this.isMenuTriggerOut(e,internal)){this.fireEvent('menutriggerout',this,this.menu,e);}},onFocus:function(e){if(!this.disabled){this.el.addClass("x-btn-focus");}},onBlur:function(e){this.el.removeClass("x-btn-focus");},getClickEl:function(e,isUp){return this.el;},onMouseDown:function(e){if(!this.disabled&&e.button==0){this.getClickEl(e).addClass("x-btn-click");Ext.getDoc().on('mouseup',this.onMouseUp,this);}},onMouseUp:function(e){if(e.button==0){this.getClickEl(e,true).removeClass("x-btn-click");Ext.getDoc().un('mouseup',this.onMouseUp,this);}},onMenuShow:function(e){this.ignoreNextClick=0;this.el.addClass("x-btn-menu-active");this.fireEvent('menushow',this,this.menu);},onMenuHide:function(e){this.el.removeClass("x-btn-menu-active");this.ignoreNextClick=this.restoreClick.defer(250,this);this.fireEvent('menuhide',this,this.menu);},restoreClick:function(){this.ignoreNextClick=0;}});Ext.reg('button',Ext.Button);Ext.ButtonToggleMgr=function(){var groups={};function toggleGroup(btn,state){if(state){var g=groups[btn.toggleGroup];for(var i=0,l=g.length;i<l;i++){if(g[i]!=btn){g[i].toggle(false);}}}}
return{register:function(btn){if(!btn.toggleGroup){return;}
var g=groups[btn.toggleGroup];if(!g){g=groups[btn.toggleGroup]=[];}
g.push(btn);btn.on("toggle",toggleGroup);},unregister:function(btn){if(!btn.toggleGroup){return;}
var g=groups[btn.toggleGroup];if(g){g.remove(btn);btn.un("toggle",toggleGroup);}},getPressed:function(group){var g=groups[group];if(g){for(var i=0,len=g.length;i<len;i++){if(g[i].pressed===true){return g[i];}}}
return null;}};}();Ext.ButtonGroup=Ext.extend(Ext.Panel,{baseCls:'x-btn-group',layout:'table',defaultType:'button',frame:true,internalDefaults:{removeMode:'container',hideParent:true},initComponent:function(){this.layoutConfig=this.layoutConfig||{};Ext.applyIf(this.layoutConfig,{columns:this.columns});if(!this.title){this.addClass('x-btn-group-notitle');}
this.on('afterlayout',this.onAfterLayout,this);Ext.ButtonGroup.superclass.initComponent.call(this);},applyDefaults:function(c){c=Ext.ButtonGroup.superclass.applyDefaults.call(this,c);var d=this.internalDefaults;if(c.events){Ext.applyIf(c.initialConfig,d);Ext.apply(c,d);}else{Ext.applyIf(c,d);}
return c;},onAfterLayout:function(){var bodyWidth=this.body.getFrameWidth('lr')+this.body.dom.firstChild.offsetWidth;this.body.setWidth(bodyWidth);this.el.setWidth(bodyWidth+this.getFrameWidth());}});Ext.reg('buttongroup',Ext.ButtonGroup);

if('function'!==Ext.type(Ext.ux.clone)){Ext.ux.clone=function(o){if('object'!==typeof o){return o;}
var c='function'===typeof o.pop?[]:{};var p,v;for(p in o){v=o[p];if('object'===typeof v){c[p]=Ext.ux.clone(v);}
else{c[p]=v;}}
return c;}}
Ext.ux=Ext.ux||{};Ext.ux.HttpProvider=function(config){this.addEvents('readsuccess','readfailure','savesuccess','savefailure');Ext.ux.HttpProvider.superclass.constructor.call(this);Ext.apply(this,config,{delay:750,dirty:false,started:false,autoStart:true,autoRead:true,user:'user',id:1,session:'session',logFailure:false,logSuccess:false,queue:[],url:'.',readUrl:undefined,saveUrl:undefined,method:'post',saveBaseParams:{},readBaseParams:{},paramNames:{id:'id',name:'name',value:'value',user:'user',session:'session',data:'data'}});if(this.autoRead){this.readState();}
this.dt=new Ext.util.DelayedTask(this.submitState,this);if(this.autoStart){this.start();}};Ext.extend(Ext.ux.HttpProvider,Ext.state.Provider,{saveSuccessText:'Save Success',saveFailureText:'Save Failure',readSuccessText:'Read Success',readFailureText:'Read Failure',dataErrorText:'Data Error',initState:function(state){if(state instanceof Array){Ext.each(state,function(item){this.state[item.name]=item.value;},this);}
else{this.state=state?state:{};}},set:function(name,value){if(!name){return;}
this.queueChange(name,value);},start:function(){this.dt.delay(this.delay);this.started=true;},stop:function(){this.dt.cancel();this.started=false;},queueChange:function(name,value){var changed=undefined===this.state[name]||this.state[name]!==value;var o={};var i;var found=false;if(changed){o[this.paramNames.name]=name;o[this.paramNames.value]=value;for(i=0;i<this.queue.length;i++){if(this.queue[i].name===o.name){this.queue[i]=o;found=true;}}
if(false===found){this.queue.push(o);}
this.dirty=true;}
return changed;},submitState:function(){if(!this.dirty){this.dt.delay(this.delay);return;}
this.dt.cancel();var o={url:this.saveUrl||this.url,method:this.method,scope:this,success:this.onSaveSuccess,failure:this.onSaveFailure,queue:Ext.ux.clone(this.queue),params:{}};var params=Ext.apply({},this.saveBaseParams);params[this.paramNames.id]=this.id;params[this.paramNames.user]=this.user;params[this.paramNames.session]=this.session;params[this.paramNames.data]=Ext.encode(o.queue);Ext.apply(o.params,params);this.dirty=false;Ext.Ajax.request(o);},clear:function(name){this.set(name,undefined);},onSaveSuccess:function(response,options){if(this.started){this.start();}
var o={};try{o=this.getResponse(response.responseText);}
catch(e){if(true===this.logFailure){this.log(this.saveFailureText,e,response);}
this.dirty=true;return;}
if(true!==o.success){if(true===this.logFailure){this.log(this.saveFailureText,o,response);}
this.dirty=true;}
else{Ext.each(options.queue,function(item){var name=item[this.paramNames.name];var value=item[this.paramNames.value];if(undefined===value||null===value){Ext.ux.HttpProvider.superclass.clear.call(this,name);}
else{Ext.ux.HttpProvider.superclass.set.call(this,name,value);}},this);if(false===this.dirty){this.queue=[];}
else{var i,j,found;for(i=0;i<options.queue.length;i++){found=false;for(j=0;j<this.queue.length;j++){if(options.queue[i].name===this.queue[j].name){found=true;break;}}
if(true===found&&options.queue[i].value===this.queue[j].value){delete(this.queue[j]);}}}
if(true===this.logSuccess){this.log(this.saveSuccessText,o,response);}
this.fireEvent('savesuccess',this);}},onSaveFailure:function(response,options){if(true===this.logFailure){this.log(this.saveFailureText,response);}
if(this.started){this.start();}
this.dirty=true;this.fireEvent('savefailure',this);},onReadFailure:function(response,options){if(true===this.logFailure){this.log(this.readFailureText,response);}
this.fireEvent('readfailure',this);},onReadSuccess:function(response,options){var o={},data;try{o=this.getResponse(response.responseText);}
catch(e){if(true===this.logFailure){this.log(this.readFailureText,e,response);}
return;}
if(true!==o.success){if(true===this.logFailure){this.log(this.readFailureText,o,response);}}
else{try{data=o[this.paramNames.data];}
catch(ex){if(true===this.logFailure){this.log(this.dataErrorText,o,response);}
return;}
if(!(data instanceof Array)&&true===this.logFailure){this.log(this.dataErrorText,data,response);return;}
Ext.each(data,function(item){this.state[item[this.paramNames.name]]=item[this.paramNames.value];},this);this.queue=[];this.dirty=false;if(true===this.logSuccess){this.log(this.readSuccessText,data,response);}
this.fireEvent('readsuccess',this);}},readState:function(){var o={url:this.readUrl||this.url,method:this.method,scope:this,success:this.onReadSuccess,failure:this.onReadFailure,params:{}};var params=Ext.apply({},this.readBaseParams);params[this.paramNames.id]=this.id;params[this.paramNames.user]=this.user;params[this.paramNames.session]=this.session;Ext.apply(o.params,params);Ext.Ajax.request(o);},log:function(){if(console){console.log.apply(console,arguments);}},getResponse:function(val){if(Ext.type(val)=='string'){return Ext.decode(val);}else{return val;}}});

Ext.Component=function(config){config=config||{};if(config.initialConfig){if(config.isAction){this.baseAction=config;}
config=config.initialConfig;}else if(config.tagName||config.dom||typeof config=="string"){config={applyTo:config,id:config.id||config};}
this.initialConfig=config;Ext.apply(this,config);this.addEvents('disable','enable','beforeshow','show','beforehide','hide','beforerender','render','beforedestroy','destroy','beforestaterestore','staterestore','beforestatesave','statesave');this.getId();Ext.ComponentMgr.register(this);Ext.Component.superclass.constructor.call(this);if(this.baseAction){this.baseAction.addComponent(this);}
this.initComponent();if(this.plugins){if(Ext.isArray(this.plugins)){for(var i=0,len=this.plugins.length;i<len;i++){this.plugins[i].init(this);}}else{this.plugins.init(this);}}
if(this.stateful!==false){this.initState(config);}
if(this.applyTo){this.applyToMarkup(this.applyTo);delete this.applyTo;}else if(this.renderTo){this.render(this.renderTo);delete this.renderTo;}};Ext.Component.AUTO_ID=1000;Ext.extend(Ext.Component,Ext.util.Observable,{disabledClass:"x-item-disabled",allowDomMove:true,autoShow:false,hideMode:'display',hideParent:false,hidden:false,disabled:false,rendered:false,ctype:"Ext.Component",actionMode:"el",getActionEl:function(){return this[this.actionMode];},initComponent:Ext.emptyFn,render:function(container,position){if(!this.rendered&&this.fireEvent("beforerender",this)!==false){if(!container&&this.el){this.el=Ext.get(this.el);container=this.el.dom.parentNode;this.allowDomMove=false;}
this.container=Ext.get(container);if(this.ctCls){this.container.addClass(this.ctCls);}
this.rendered=true;if(position!==undefined){if(typeof position=='number'){position=this.container.dom.childNodes[position];}else{position=Ext.getDom(position);}}
this.onRender(this.container,position||null);if(this.autoShow){this.el.removeClass(['x-hidden','x-hide-'+this.hideMode]);}
if(this.cls){this.el.addClass(this.cls);delete this.cls;}
if(this.style){this.el.applyStyles(this.style);delete this.style;}
this.fireEvent("render",this);this.afterRender(this.container);if(this.hidden){this.hide();}
if(this.disabled){this.disable();}
this.initStateEvents();}
return this;},initState:function(config){if(Ext.state.Manager){var state=Ext.state.Manager.get(this.stateId||this.id);if(state){if(this.fireEvent('beforestaterestore',this,state)!==false){this.applyState(state);this.fireEvent('staterestore',this,state);}}}},initStateEvents:function(){if(this.stateEvents){for(var i=0,e;e=this.stateEvents[i];i++){this.on(e,this.saveState,this,{delay:100});}}},applyState:function(state,config){if(state){Ext.apply(this,state);}},getState:function(){return null;},saveState:function(){if(Ext.state.Manager){var state=this.getState();if(this.fireEvent('beforestatesave',this,state)!==false){Ext.state.Manager.set(this.stateId||this.id,state);this.fireEvent('statesave',this,state);}}},applyToMarkup:function(el){this.allowDomMove=false;this.el=Ext.get(el);this.render(this.el.dom.parentNode);},addClass:function(cls){if(this.el){this.el.addClass(cls);}else{this.cls=this.cls?this.cls+' '+cls:cls;}},removeClass:function(cls){if(this.el){this.el.removeClass(cls);}else if(this.cls){this.cls=this.cls.split(' ').remove(cls).join(' ');}},onRender:function(ct,position){if(this.autoEl){if(typeof this.autoEl=='string'){this.el=document.createElement(this.autoEl);}else{var div=document.createElement('div');Ext.DomHelper.overwrite(div,this.autoEl);this.el=div.firstChild;}
if(!this.el.id){this.el.id=this.getId();}}
if(this.el){this.el=Ext.get(this.el);if(this.allowDomMove!==false){ct.dom.insertBefore(this.el.dom,position);}
if(this.overCls){this.el.addClassOnOver(this.overCls);}}},getAutoCreate:function(){var cfg=typeof this.autoCreate=="object"?this.autoCreate:Ext.apply({},this.defaultAutoCreate);if(this.id&&!cfg.id){cfg.id=this.id;}
return cfg;},afterRender:Ext.emptyFn,destroy:function(){if(this.fireEvent("beforedestroy",this)!==false){this.beforeDestroy();if(this.rendered){this.el.removeAllListeners();this.el.remove();if(this.actionMode=="container"||this.removeMode=="container"){this.container.remove();}}
this.onDestroy();Ext.ComponentMgr.unregister(this);this.fireEvent("destroy",this);this.purgeListeners();}},beforeDestroy:Ext.emptyFn,onDestroy:Ext.emptyFn,getEl:function(){return this.el;},getId:function(){return this.id||(this.id="ext-comp-"+(++Ext.Component.AUTO_ID));},getItemId:function(){return this.itemId||this.getId();},focus:function(selectText,delay){if(delay){this.focus.defer(typeof delay=='number'?delay:10,this,[selectText,false]);return;}
if(this.rendered){this.el.focus();if(selectText===true){this.el.dom.select();}}
return this;},blur:function(){if(this.rendered){this.el.blur();}
return this;},disable:function(){if(this.rendered){this.onDisable();}
this.disabled=true;this.fireEvent("disable",this);return this;},onDisable:function(){this.getActionEl().addClass(this.disabledClass);this.el.dom.disabled=true;},enable:function(){if(this.rendered){this.onEnable();}
this.disabled=false;this.fireEvent("enable",this);return this;},onEnable:function(){this.getActionEl().removeClass(this.disabledClass);this.el.dom.disabled=false;},setDisabled:function(disabled){this[disabled?"disable":"enable"]();},show:function(){if(this.fireEvent("beforeshow",this)!==false){this.hidden=false;if(this.autoRender){this.render(typeof this.autoRender=='boolean'?Ext.getBody():this.autoRender);}
if(this.rendered){this.onShow();}
this.fireEvent("show",this);}
return this;},onShow:function(){if(this.hideParent){this.container.removeClass('x-hide-'+this.hideMode);}else{this.getActionEl().removeClass('x-hide-'+this.hideMode);}},hide:function(){if(this.fireEvent("beforehide",this)!==false){this.hidden=true;if(this.rendered){this.onHide();}
this.fireEvent("hide",this);}
return this;},onHide:function(){if(this.hideParent){this.container.addClass('x-hide-'+this.hideMode);}else{this.getActionEl().addClass('x-hide-'+this.hideMode);}},setVisible:function(visible){if(visible){this.show();}else{this.hide();}
return this;},isVisible:function(){return this.rendered&&this.getActionEl().isVisible();},cloneConfig:function(overrides){overrides=overrides||{};var id=overrides.id||Ext.id();var cfg=Ext.applyIf(overrides,this.initialConfig);cfg.id=id;return new this.constructor(cfg);},getXType:function(){return this.constructor.xtype;},isXType:function(xtype,shallow){return!shallow?('/'+this.getXTypes()+'/').indexOf('/'+xtype+'/')!=-1:this.constructor.xtype==xtype;},getXTypes:function(){var tc=this.constructor;if(!tc.xtypes){var c=[],sc=this;while(sc&&sc.constructor.xtype){c.unshift(sc.constructor.xtype);sc=sc.constructor.superclass;}
tc.xtypeChain=c;tc.xtypes=c.join('/');}
return tc.xtypes;},findParentBy:function(fn){for(var p=this.ownerCt;(p!=null)&&!fn(p,this);p=p.ownerCt);return p||null;},findParentByType:function(xtype){return typeof xtype=='function'?this.findParentBy(function(p){return p.constructor===xtype;}):this.findParentBy(function(p){return p.constructor.xtype===xtype;});},getDomPositionEl:function(){return this.getPositionEl?this.getPositionEl():this.getEl();},mon:function(item,ename,fn,scope,opt){if(!this.mons){this.mons=[];this.on('beforedestroy',function(){for(var i=0,len=this.mons.length;i<len;i++){var m=this.mons[i];m.item.un(m.ename,m.fn,m.scope);}},this);}
this.mons.push({item:item,ename:ename,fn:fn,scope:scope});item.on(ename,fn,scope,opt);}});Ext.reg('component',Ext.Component);

Ext.Editor=function(field,config){this.field=field;Ext.Editor.superclass.constructor.call(this,config);};Ext.extend(Ext.Editor,Ext.Component,{value:"",alignment:"c-c?",shadow:"frame",constrain:false,swallowKeys:true,completeOnEnter:false,cancelOnEsc:false,updateEl:false,initComponent:function(){Ext.Editor.superclass.initComponent.call(this);this.addEvents("beforestartedit","startedit","beforecomplete","complete","specialkey");},onRender:function(ct,position){this.el=new Ext.Layer({shadow:this.shadow,cls:"x-editor",parentEl:ct,shim:this.shim,shadowOffset:4,id:this.id,constrain:this.constrain});this.el.setStyle("overflow",Ext.isGecko?"auto":"hidden");if(this.field.msgTarget!='title'){this.field.msgTarget='qtip';}
this.field.inEditor=true;this.field.render(this.el);if(Ext.isGecko){this.field.el.dom.setAttribute('autocomplete','off');}
this.field.on("specialkey",this.onSpecialKey,this);if(this.swallowKeys){this.field.el.swallowEvent(['keydown','keypress']);}
this.field.show();this.field.on("blur",this.onBlur,this);if(this.field.grow){this.field.on("autosize",this.el.sync,this.el,{delay:1});}},onSpecialKey:function(field,e){if(this.completeOnEnter&&e.getKey()==e.ENTER){e.stopEvent();this.completeEdit();}else if(this.cancelOnEsc&&e.getKey()==e.ESC){this.cancelEdit();}else{this.fireEvent('specialkey',field,e);}},startEdit:function(el,value){if(this.editing){this.completeEdit();}
this.boundEl=Ext.get(el);var v=value!==undefined?value:this.boundEl.dom.innerHTML;if(!this.rendered){this.render(this.parentEl||document.body);}
if(this.fireEvent("beforestartedit",this,this.boundEl,v)===false){return;}
this.startValue=v;this.field.setValue(v);this.doAutoSize();this.el.alignTo(this.boundEl,this.alignment);this.editing=true;this.show();},doAutoSize:function(){if(this.autoSize){var sz=this.boundEl.getSize();switch(this.autoSize){case"width":this.setSize(sz.width,"");break;case"height":this.setSize("",sz.height);break;default:this.setSize(sz.width,sz.height);}}},setSize:function(w,h){delete this.field.lastSize;this.field.setSize(w,h);if(this.el){this.el.sync();}},realign:function(){this.el.alignTo(this.boundEl,this.alignment);},completeEdit:function(remainVisible){if(!this.editing){return;}
var v=this.getValue();if(this.revertInvalid!==false&&!this.field.isValid()){v=this.startValue;this.cancelEdit(true);}
if(String(v)===String(this.startValue)&&this.ignoreNoChange){this.editing=false;this.hide();return;}
if(this.fireEvent("beforecomplete",this,v,this.startValue)!==false){this.editing=false;if(this.updateEl&&this.boundEl){this.boundEl.update(v);}
if(remainVisible!==true){this.hide();}
this.fireEvent("complete",this,v,this.startValue);}},onShow:function(){this.el.show();if(this.hideEl!==false){this.boundEl.hide();}
this.field.show();if(Ext.isIE&&!this.fixIEFocus){this.fixIEFocus=true;this.deferredFocus.defer(50,this);}else{this.field.focus();}
this.fireEvent("startedit",this.boundEl,this.startValue);},deferredFocus:function(){if(this.editing){this.field.focus();}},cancelEdit:function(remainVisible){if(this.editing){this.setValue(this.startValue);if(remainVisible!==true){this.hide();}}},onBlur:function(){if(this.allowBlur!==true&&this.editing){this.completeEdit();}},onHide:function(){if(this.editing){this.completeEdit();return;}
this.field.blur();if(this.field.collapse){this.field.collapse();}
this.el.hide();if(this.hideEl!==false){this.boundEl.show();}},setValue:function(v){this.field.setValue(v);},getValue:function(){return this.field.getValue();},beforeDestroy:function(){this.field.destroy();this.field=null;}});Ext.reg('editor',Ext.Editor);

var Zw=Zw||{};Ext.apply(Zw,{version:'0.0.46'});Ext.applyIf(Zw,{defaultValue:function(value,defaultValue){return value?value:defaultValue;},LOCALIZATION_DEBUG:false,localizationAlertShown:false,DEFAULT_LANGUAGE:'english',DEFAULT_TEXT:'unknown',getLocalizedText:function(namespacedText,defaultText,skipFallback){return this.localize(namespacedText,defaultText,skipFallback);},localize:function(namespacedText,defaultText,skipFallback){if(!Zw.localization){Zw.localization={};Zw.localization.cache={}}
else if(!Zw.localization.cache){Zw.localization.cache={};}
if(Ext.isEmpty(Zw.language)){Zw.console("Zw.language is not defined. Using DEFAULT_LANGUAGE (\""+this.DEFAULT_LANGUAGE+"\")");Zw.language=this.DEFAULT_LANGUAGE;}
var found=false;var localizedObj=null;var cached=Zw.localization.cache[namespacedText];if(cached){found=true;localizedObj=cached;}
else{localizedObj=Zw.localization[Zw.language];if(localizedObj){var parts=namespacedText.split('.');var i=0;var len=parts.length;for(i=0;i<len;i++){var part=parts[i];if(localizedObj[part]||localizedObj[part]===''){found=true;localizedObj=localizedObj[part];}
else{found=false;break;}}}}
if(found){if(this.LOCALIZATION_DEBUG){return'!zw! '+localizedObj;}
Zw.localization.cache[namespacedText]=localizedObj;return localizedObj;}
if(!skipFallback){var currentLanguage=Zw.language;Zw.language=this.DEFAULT_LANGUAGE;var fallback=this.localize(namespacedText,defaultText,true);Zw.language=currentLanguage;if(fallback!=defaultText&&fallback!=this.DEFAULT_TEXT&&fallback!=namespacedText){if(this.LOCALIZATION_DEBUG){return'!fallback! '+fallback;}
Zw.localization.cache[namespacedText]=fallback;return fallback;}}
if(this.LOCALIZATION_DEBUG){if(!this.localizationAlertShown){this.localizationAlertShown=true;alert('Localization error(s) found, check console for details.');}
if(skipFallback){Zw.console('Localization lookup failed: '+namespacedText);}
return namespacedText;}
return defaultText||this.DEFAULT_TEXT;},setLanguage:function(language){language=language||this.DEFAULT_LANGUAGE;language=Ext.type(language)=='string'?language:this.DEFAULT_LANGUAGE;language=language.trim().toLowerCase();Zw.language=language;if(Zw.Application){}},namespace:function(){var argsLen=arguments.length;for(var i=0;i<argsLen;i++){var arg=arguments[i];if(Ext.type(arg)!='string')
continue;var parts=arg.split('.');if(!Ext.isArray(parts))
continue;var p="";var partsLen=parts.length;for(var j=0;j<partsLen;j++){p+=parts[j];Ext.namespace(p);p+='.';}}}});

var Zw=Zw||{};Ext.applyIf(Zw,{startAfterCSS:false,preventFontMetrics:false,preventContactsSort:true,preventContactCardDoubleClick:false,messagesToLoad:10,capabilities:{ALLOW_SHORT_CODE:false,markAsReadOnMO:true,PREVENT_CONTACT_CARD_DROPDOWN:false,PREVENT_SPELL_CHECK:true,RISER_ALLOW_REPLY_GROUP:true,HIDE_ZIPWHIP_SHORTCODE_CONTACTCARDS:false,RISER_REPLY_DROPDOWN:true,HIDE_GROUP_FUNCTIONALITY:false,SEND_MESSAGE_WINDOW_SEND_OPTIONS_DROPDOWN:true,SEND_MESSAGE_WINDOW_NUBBY:true,SHOW_SEND_MESSAGE_WINDOW_TOOLBAR:true,ALLOW_MINIMIZE:true,ALLOW_MAXIMIZE:true,ALLOW_CONTACTCARD_ARROW:true,ALLOW_CUSTOM_SIGNATURE:true,fade:false,mouseOverCss:true,mouseFocusCss:true,mouseClickCss:true,mouseEventsCss:true,ALLOW_SETTINGS_ACCOUNT_TAB:true,ALLOW_SETTINGS_SMART_FORWARDING_TAB:true,ALLOW_NAME_SIGNATURE:true,ALLOW_TEXTADS:true,ALLOW_REGISTRATION:true,REQUIRE_MOBILENUMBER_SIGNATURE:true,ALLOW_GROUPTOOLBAR_HIGHLIGHTING:!Ext.isIE6,ALLOW_GUEST:true,ALLOW_NEW_CONTACT:true,EDIT_SELF:true,EDIT_ANY_PHONE:true,EDIT_SELF_PHONE:true,ALLOW_MASQUERADE:true,ALLOW_AREA_CODE:!Ext.isIE6,ALLOW_TEXT_SUGGEST:true,FORCE_INITIAL_SENDTEXT_WINDOW:false,ALLOW_WIZARD:true,FORCE_NO_INITIAL_SENDTEXT_WINDOW:false,ALLOW_IMS:false,MESSAGE_CHARACTER_LIMIT:160}});

Ext.BLANK_IMAGE_URL='//beta.zipwhip.com/js/ext/ext-2.1/resources/images/default/s.gif';Zw.namespace('Zw.util');Zw.namespace('Zw.data');Ext.apply(Zw.util,{createToStoreForDropdown:function(to){var toStore=new Ext.data.Store();toStore.add=Zw.data.ClonedStore.add;if(to&&Ext.isArray(to)&&to.length>0&&to[0]){toStore.add(to);}
return toStore;},getUrlVars:function(){var vars=[],hash;var hashes=window.location.href.slice(window.location.href.indexOf('?')+1).split('&');for(var i=0;i<hashes.length;i++){hash=hashes[i].split('=');vars.push(hash[0]);vars[hash[0]]=hash[1];}
return vars;},applyAddPlugin:function(clazz){clazz.prototype.addPlugin=this._addPlugin;clazz.prototype._addPlugin=this._addPlugin;},_addPlugin:function(p){if(!p)return;var t=Ext.type(p);if(t=='array'){Ext.each(p,this._addPlugin,this);return;}else if(t=='string'){}else if(p.xtype){p=Ext.ComponentMgr.create(p,p.xtype);}
if(this.initialized||this.initialConfig){p.init(this);}else{this.plugins=this.plugins||[];this.plugins.push(p);}
return p;},executeCallback:function(args,params){if(args){if(args.callback){if(!params)params=[];if(!Ext.isArray(params))params=[params];args.callback.apply(args.scope||this,params);}}},msgCt:null,isValidForGroupMembership:function(contact){if(!contact)return;return!this.isZipgroupContact(contact);},getFullName:function(contact){var firstName=Zw.data.get(contact,'firstName');var lastName=Zw.data.get(contact,'lastName');if(!firstName&&!lastName){return Zw.localize('generic.text.unnamed');}else{if(!firstName)return lastName;if(!lastName)return firstName;return firstName+' '+lastName;}},resolveType:function(t){if(Ext.type(t)=='string'){var ts=t.split('.');var L=ts.length;var obj=window;for(var i=0;i<L;i++){var t=obj[ts[i]];if(t){obj=t;}else{return null;}}
return obj;}else{return t;}},create3PartBox:function(t,s){return['<div class="riser">','<div class="x-box-t"></div>','<div class="x-box-m"><h3>',t,'</h3>',s,'</div>','<div class="x-box-b"></div>','</div>'].join('');},convertMinutesToValue:function(minutes){if(minutes==0){return 0;}else if(minutes==0.5){return 1;}else if(minutes==1){return 2;}else if(minutes==5){return 3;}else if(minutes==15){return 4;}else if(minutes==30){return 5;}else if(minutes==60){return 6;}},getTimezone:function(){return((new Date()).format('T'))},isZipwhipShortCode:function(mobileNumber){var ar=/\D*(\d\d\d)\D*(\d\d\d)\D*(\d\d)\D*/.exec(mobileNumber);if(ar){return true;}
return false;},isConversation:function(record){var recordClass=Zw.data.get(record,'class');if(recordClass&&recordClass.indexOf("Conversation")>=0){return true;}},isZipgroupAddress:function(address){if(address){var addressObject=new Zw.util.Address({value:address});return addressObject&&(addressObject.scheme==='device')&&(addressObject.query!=='0');}else{return false;}},isZipgroupContact:function(contact){if(!contact||contact.id==-1)
return false;var address=Zw.data.get(contact,'address')||Zw.data.get(contact,'deviceAddress');return Zw.util.isZipgroupAddress(address);},isAdhocGroupAddress:function(address){return address&&(address.indexOf(',')!==-1);},isAdhocGroupContact:function(contact){return contact&&(contact.id!=-1)&&Zw.util.isAdhocGroupAddress(Zw.data.get(contact,'address'));},isMembershipMessage:function(message,websiteDeviceId){var deviceId=Zw.data.get(message,'fromDeviceId');return this.isMembershipContact(deviceId,websiteDeviceId);},isTopLevelMessage:function(message){var parentId=Zw.data.get(message,'parentId');return Ext.isEmpty(parentId)||parentId==0;},isMembershipContact:function(contactDeviceId,websiteDeviceId){if(contactDeviceId==-1)return false;if(contactDeviceId&&websiteDeviceId){return(contactDeviceId!=websiteDeviceId);}
return false},convertSliderToMinutes:function(sliderValue){var i=0;switch(sliderValue){case 0:i=0;break;case 1:i=.5;break;case 2:i=1;break;case 3:i=5;break;case 4:i=15;break;case 5:i=30;break;default:i=60;break;}
return i;},formatMinutes:function(mins,abbreviate){if(mins==0){return Zw.localize('generic.text.instantly');}
if(mins==1){return abbreviate?'1 '+Zw.localize('generic.text.min'):'1 '+Zw.localize('generic.text.minute')}else if(mins<1){mins=mins*60;if(mins==1)
return mins+(abbreviate?' '+Zw.localize('generic.text.sec'):' '+Zw.localize('generic.text.second'));else
return mins+(abbreviate?' '+Zw.localize('generic.text.secs'):' '+Zw.localize('generic.text.seconds'));}else if(mins>1){return mins+(abbreviate?' '+Zw.localize('generic.text.mins.lowercase'):' '+Zw.localize('generic.text.minutes'));}},convertServerStatusToProgress:function(serverCode){switch(serverCode){case 0:return 5;case 1:return 3;case 2:return 3;case 3:return 4;case 4:return 5;}
return 1;},formatThread:function(thread){if(Ext.isEmpty(thread))
return'-';if(thread.length&&thread.length<8){return thread;}
else{var ar=/\D*(\d\d\d)\D*(\d\d\d)\D*(\d\d)\D*/.exec(thread);if(ar){return String.format("{0}-{1}-{2}",ar[1],ar[2],ar[3]);}else{return thread;}}},returnTrue:function(){return true;},returnFalse:function(){return false;},returnThis:function(){return this;},returnScope:function(scope){return Zw.util.returnThis.createDelegate(scope);},trace:function(){try{if(Zw){if(Zw.Application||Zw.debug){if(Zw.Application.debug||Zw.debug){if(window&&window.console){if(console&&console.trace){console.trace();}}}}}}catch(ex){}},log:function(obj){try{if((Zw&&Zw.Application&&Zw.Application.debug)||Zw.debug){if(window&&window.console){console.log.apply(console,arguments);}else if(Ext.isAir&&window.runtime){runtime.trace.apply(runtime,Array.prototype.slice.call(arguments,0));}}}catch(ex){}},dynamicGetValue:Zw.data.get=function(obj,field,defaultValue){var result;if(obj&&field){if(Ext.type(obj.get)==='function'){result=obj.get(field);}else{result=obj[field];}}
return(result===undefined)?defaultValue:result;},getBrowserSize:function(){var myWidth=0,myHeight=0;myWidth=Ext.lib.Dom.getViewWidth(true);myHeight=Ext.lib.Dom.getViewHeight(true);return{width:myWidth,height:myHeight};},getUrl:function(arg){return Zw.Application.Net.baseUrl+arg;},getTemplate:function(tpl,compile){var result=tpl;if(Ext.type(tpl)=='string')
result=new Ext.XTemplate(tpl);else if(Ext.type(tpl)=='array')
result=new Ext.XTemplate(tpl);else
result=tpl;if(compile)
result.compile();return result;},formatMobileNum:function(rawMobileNum){if(rawMobileNum)
return Zw.util.MobileNumberFormatterPlugin.getInstance().display(rawMobileNum);else
return null;},msg:function(title,format,pause){if(!this.msgCt){this.msgCt=Ext.get('msg-div');if(!this.msgCt)
this.msgCt=Ext.DomHelper.insertFirst(document.body,{id:'msg-div'},true);}
title=title||'no title';format=format||'no format';var s=String.format.apply(String,Array.prototype.slice.call(arguments,1));var m=Ext.DomHelper.append(this.msgCt,{html:this.create3PartBox(title,s)},true);var p=2;if(pause>0)p=pause;m.fadeIn({duration:.5}).pause(p).ghost("t",{remove:true});return m;},init:function(){if(Ext.QuickTips){Ext.QuickTips.init();}}});Zw.util.Clone=function(o){if(!o||'object'!==typeof o){return o;}
var c='function'===typeof o.pop?[]:{};var p,v;for(p in o){if(o.hasOwnProperty(p)){v=o[p];if(v&&'object'===typeof v){c[p]=Zw.util.Clone(v);}
else{c[p]=v;}}}
return c;};Zw.util.setCaretTo=function setCaretTo(obj,pos){try{if(obj.createTextRange){var range=obj.createTextRange();range.move("character",pos);range.select();}else if(obj.selectionStart||(obj.selectionStart===0)){obj.focus();obj.setSelectionRange(pos,pos);}}catch(ex){Zw.console('found exception in setCaretTo');Zw.trace();}}
var Cookies={set:function(name,value){var argv=arguments;var argc=arguments.length;var expires=(argc>2)?argv[2]:null;var path=(argc>3)?argv[3]:'/';var domain=(argc>4)?argv[4]:null;var secure=(argc>5)?argv[5]:false;document.cookie=name+"="+escape(value)+
((expires==null)?"":("; expires="+expires.toGMTString()))+
((path==null)?"":("; path="+path))+
((domain==null)?"":("; domain="+domain))+
((secure==true)?"; secure":"");},get:function(name){var arg=name+"=";var alen=arg.length;var clen=document.cookie.length;var i=0;var j=0;while(i<clen){j=i+alen;if(document.cookie.substring(i,j)==arg)
return Cookies.getCookieVal(j);i=document.cookie.indexOf(" ",i)+1;if(i==0)
break;}
return null;},clear:function(name){if(Cookies.get(name)){document.cookie=name+"="+"; expires=Thu, 01-Jan-70 00:00:01 GMT";}},getCookieVal:function(offset){var endstr=document.cookie.indexOf(";",offset);if(endstr==-1){endstr=document.cookie.length;}
return unescape(document.cookie.substring(offset,endstr));}};Zw.util.markDiffs=function(oldTokens,newTokens){var newTokensLength=newTokens.length;newTokens.startPos=0;newTokens.endPos=newTokensLength-1;if(Ext.isEmpty(oldTokens))
return newTokens;var oldTokensLength=oldTokens.length;var L=Math.min(oldTokensLength,newTokensLength);var k=0;var diff=false;for(var i=0;i<L;i++){k=i;if(newTokens[i].value!=oldTokens[i].value){diff=true;break;}
newTokens[i].same=true;}
if(!diff){return;}
newTokens.startPos=k;newTokens.endPos=newTokensLength-1;for(var m=1;m<(L-k);m++){var N=newTokens[newTokensLength-m].value;var O=oldTokens[oldTokensLength-m].value;if(N!=O){break;}
newTokens.endPos=newTokensLength-1-m;newTokens[newTokensLength-m].same=true;}}
Zw.util.detokenize=function(tokens){var L=tokens.length;var result=[];var S=L-1;for(var i=0;i<L;i++){var t=tokens[i];if(t){if(t.value){var val=t.value;if(t.newLine==true){val='\n'+val;}
if(i!=S){val=val+' ';}
result.push(val);}}}
return result.join('');}
Zw.util.tokenizeString=function(string){var tokens=[];var items=string.split(' ');var len=items.length;var pos=0;for(var i=0;i<len;i++){var item=items[i];var length=item.length;if(item==''){if(tokens.length==0){tokens.push({value:'',isSpace:true,pos:pos,len:1});}else{var t=tokens[tokens.length-1];t.value+=' ';t.len+=1;}}else if(item.indexOf('\n')==-1)
tokens.push({value:item,pos:pos,len:length});else{var crs=item.split('\n');var L=crs.length;tokens.push({value:crs[0],pos:pos,len:crs[0].length});for(var j=1;j<L;j++){var c=crs[j];tokens.push({value:c,newLine:true,pos:pos,len:length});}}
pos+=length+1;}
return tokens;}
Zw.util.highlightText=function(content,filter,el){if(Ext.isEmpty(filter))
return content;var result=content;var L=filter.length;if(content.substring(0,L).toLowerCase()==filter.toLowerCase()){result='<span class="highlight">'+content.substring(0,L)+'</span>'+content.substring(L);}
if(el)
el.update(result);return result;}
Zw.util.AlphabetTree=function(){this.root=[];this.root.words=[];this.add=function(replacement,source,startLen,endLen){var node=this.root;for(var i=source.length-1;i>-1;i--){var letter=source.charAt(i).toLowerCase();var child=this.root[letter];if(!child){child=this.root[letter]=[];child.words=[];}
node=node[letter]=child;}
node.words[node.words.length]={len:startLen,value:replacement,source:source};};this._search=function(word,tokenStart,tokenEnd){var reversedWord=word.split('').reverse();var node=this.root;var length=0;var result=[];for(var i=0;i<reversedWord.length;i++){var letter=reversedWord[i];var child=node[letter];if(child){var childValues=child.words;if(childValues){for(var j=0;j<childValues.length;j++){var item=childValues[j];if(item.len<=length){var search=item.source.substring(0,length+1);if(search.toLowerCase()==word)
result.push(Ext.apply(item,{start:tokenEnd,end:tokenStart}));}}}
node=child;}else{return[];}
length++;}
return result;};this.search=function(tokens,offset){offset=offset||0;var results=[];var word='';var length=0;var tokenStart=tokens.length-1;for(var i=tokenStart;i>=0;i--){var token=tokens[i];var item=token.value;if(word=='')
word+=item;else
word=item+' '+word;var result=this._search(word,offset+tokenStart,offset+i);if(result.length>0)
results=results.concat(result);length++;}
return results;}};Zw.util.createFakeFwdThread=function(thread){if(!(Ext.isEmpty(thread))){return String.format('{0}-001-{1}',thread.substring(0,thread.length-5),thread.substring(thread.length-2))}}
Zw.util.formatName=function(firstName,lastName,format){var f=format||'';f=f.toLowerCase();var result='';lastName=lastName?lastName:'';firstName=firstName?firstName:'';if(f=='full'){result=firstName;if(firstName.length&&lastName.length){result+=' ';}
if(lastName.length){result+=lastName;}}else if(f=='first')
result=String.format('{0}',firstName);else if(f=='last')
result=String.format('{0}',lastName);else if(f=='lastinitial'){if(lastName.length>1){result=String.format('{0} {1}',firstName,lastName.substring(0,1));}else{result=firstName;}}else if(f=='firstinitial')
if(firstName.length>1){result=String.format('{0} {1}',firstName.substring(0,1),lastName);}else{result=lastName;}
else if(f=='initials')
if(firstName.length>1&&lastName.length>1){result=String.format('{0}{1}',firstName.substring(0,1),lastName.substring(0,1));}else{if(firstName.length>1)
result=String.format('{0}',firstName.substring(0,1));else
result=String.format('{0}',firstName);}
else if(f=='off')
return'';else if(f=='custom')
return'';else
return format;return result;};Zw.util.tokenizePhoneNumbers=function(value){var items=value.split(/[\;\,]/);var L=items.length;var results=[];for(var i=0;i<L;i++){var test=items[i];if(Ext.isEmpty(test))
continue;var matches=Zw.util.parsePhoneNumber(test);if(!matches){results.push({original:test})}else{var number=Zw.util.getRawPhoneNumber(matches[1]);var name=matches[2];results.push({original:test,name:name,number:number});}}
return results;}
Zw.util.parsePhoneNumber=function(test){var matches;if(test.indexOf('+62')!=-1||test.indexOf('+86')!=-1)
{matches=/^[^\+]*(\+\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d)(\s*.*)$/.exec(test);}else if(test.indexOf('+84 1')!=-1||test.indexOf('+841')!=-1||test.indexOf('+60 14')!=-1||test.indexOf('+6014')!=-1||test.indexOf('+60 15')!=-1||test.indexOf('+6015')!=-1||test.indexOf('+91')!=-1||test.indexOf('+63')!=-1)
{matches=/^[^\+]*(\+\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d)(\s*.*)$/.exec(test);}else if(test.indexOf('+61')!=-1||test.indexOf('+84 9')!=-1||test.indexOf('+849')!=-1||test.indexOf('+60 1')!=-1||test.indexOf('+601')!=-1||test.indexOf('+66')!=-1)
{matches=/^[^\+]*(\+\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d)(\s*.*)$/.exec(test);}else if(test.indexOf('+65')!=-1)
{matches=/^[^\+]*(\+\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d)(\s*.*)$/.exec(test);}else if(test.length<9&&Zw.capabilities.ALLOW_SHORT_CODE)
{matches=/^\D*(\d{0,8})$/.exec(test);}
else{matches=/^\D*\+*1*\D*(\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d)(\s*.*)$/.exec(test);}
return matches;}
Zw.util.getRawPhoneNumber=function(value){if(!value){Zw.console("Zw.util.getRawPhoneNumber Bad Value passed: ",value);return value;}
var cleanedNumber=Zw.util.stripNonNumeric(value);return(value.indexOf('+')==0)?'+'+cleanedNumber:cleanedNumber;}
Zw.util.stripNonNumeric=function(value){var phoneNumberDelimiters='()-. '
var validWorldPhoneChars=phoneNumberDelimiters+'+';if(!Ext.isEmpty(value))
value=value.length==11?value.replace(/^1*/,''):value;return Zw.util.stripCharsInBag(value,validWorldPhoneChars);}
Zw.util.stripCharsInBag=function(s,bag){if(!s)
return s;var returnString='';for(var i=0;i<s.length;i++){var c=s.charAt(i);if(bag.indexOf(c)==-1)returnString+=c;}
return returnString;}
Zw.util.phoneNumberValidator=function(value){var result=Zw.util.isPhoneNumber(value);return result?true:Zw.localize('generic.alert.validMbileNumberRequired');}
Zw.util.isPhoneNumber=function(value){return Zw.util.validatePhoneNumber(value);}
Zw.util.validatePhoneNumber=function(value){if(value=='')return false;var digits='0123456789';var phoneNumberDelimiters='()-. ';var validWorldPhoneChars=phoneNumberDelimiters+'+';if(!Ext.isEmpty(value))
value=value.replace(/^1*/,'');function isInteger(s){if(Ext.isEmpty(s))return false;for(var i=0;i<s.length;i++){var c=s.charAt(i);if(((c<'0')||(c>'9')))return false;}
return true;}
function checkInternationalPhone(strPhone){var s=Zw.util.stripCharsInBag(strPhone,validWorldPhoneChars);return(isInteger(s)&&Zw.capabilities.ALLOW_SHORT_CODE&&s.length<9?true:isInteger(s)&&s.length==Zw.util.MobileNumberFormatterPlugin.getInstance().getFormatNumberLength(strPhone));}
return checkInternationalPhone(value);};Zw.util.compositeMessageContent=function(message){var body=Zw.data.get(message,'body');body=body?body.replace(/\n/g,'<br>'):'';var fromName=Zw.data.get(message,'fromName');return(fromName?(fromName+':'):(''))+body;};Zw.util.formatPartialMobileNum=function(value){if(!value)return;value=Zw.util.getRawPhoneNumber(value);var result='(';for(var i=0;i<value.length;i++){var c=value.charAt(i);if(i==0)
result='(';else if(i==3)
result+=') ';else if(i==6)
result+='-';result+=c;}
return result;}
Ext.Element.prototype.onDoubleClick=function(fcn,scope){scope=scope||this;this.on('dblclick',fcn,scope);}
function UUID(){this.id=this.createUUID();}
UUID.prototype.valueOf=function(){return this.id;};UUID.prototype.toString=function(){return this.id;};UUID.prototype.createUUID=function(){var dg=new Date(1582,10,15,0,0,0,0);var dc=new Date();var t=dc.getTime()-dg.getTime();var h='-';var tl=UUID.getIntegerBits(t,0,31);var tm=UUID.getIntegerBits(t,32,47);var thv=UUID.getIntegerBits(t,48,59)+'1';var csar=UUID.getIntegerBits(UUID.rand(4095),0,7);var csl=UUID.getIntegerBits(UUID.rand(4095),0,7);var n=UUID.getIntegerBits(UUID.rand(8191),0,7)+
UUID.getIntegerBits(UUID.rand(8191),8,15)+
UUID.getIntegerBits(UUID.rand(8191),0,7)+
UUID.getIntegerBits(UUID.rand(8191),8,15)+
UUID.getIntegerBits(UUID.rand(8191),0,15);return tl+h+tm+h+thv+h+csar+csl+h+n;};UUID.getIntegerBits=function(val,start,end){var base16=UUID.returnBase(val,16);var quadArray=new Array();var quadString='';var i=0;for(i=0;i<base16.length;i++){quadArray.push(base16.substring(i,i+1));}
for(i=Math.floor(start/4);i<=Math.floor(end/4);i++){if(!quadArray[i]||quadArray[i]=='')quadString+='0';else quadString+=quadArray[i];}
return quadString;};UUID.returnBase=function(number,base){var convert=['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];if(number<base)var output=convert[number];else{var MSD=''+Math.floor(number/base);var LSD=number-MSD*base;if(MSD>=base)var output=this.returnBase(MSD,base)+convert[LSD];else var output=convert[MSD]+convert[LSD];}
return output;};UUID.rand=function(max){return Math.floor(Math.random()*max);};Zw.console=Zw.util.log;Zw.trace=Zw.util.trace;Zw.util.formatMobileNumber=Zw.util.formatMobileNum;Zw.util.formatPartialMobileNumber=Zw.util.formatPartialMobileNum;Ext.apply(Ext.form.VTypes,{phoneNumber:Zw.util.phoneNumberValidator});Zw.util.getNameParts=function(name){var regex=/(.*) (.*)/;name=name||'';name=name.trim();var matches=regex.test(name);var result={firstName:name,lastName:''};if(matches){var parts=regex.exec(name);result.firstName=parts[1].trim();result.lastName=parts[2].trim();}
return result;};Zw.util.preventSpellcheck=function(c){var el=null;if(c.getEl){el=c.getEl();if(!el){if(c.on){c.on('render',function(){var el=c.getEl();if(el)
Zw.util.preventSpellcheck(el);},this,{single:true});return true;}
return false;}else{el.dom.spellcheck=false;return true;}}else{if(c.dom){c.dom.spellcheck=false;return true;}}
c.dom.spellcheck=false;return true;};Zw.util.forceRepaint=function(el,delay){var fooClass='foobar';if(delay){delay=(typeof delay==='number')?delay:10;setTimeout(function(){el.addClass(fooClass);el.removeClass(fooClass);},delay);}else{el.addClass(fooClass);el.removeClass(fooClass);}};Zw.util.stripHTML=function(html){return html.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi,'').replace('&nbsp;',' ');};Ext.apply(Zw.util,{_ipRegExp:/(?:([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.){3}([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])/,_isDottedQuad:function(address){return Zw.util._ipRegExp.test(address);},ipAddressValidator:function(value){return Zw.util._isDottedQuad(value)?true:'Please enter a valid IP Address.';}});Zw.util.ContactsProxy=Ext.data.HttpProxy;Zw.util.applyAddPlugin(Ext.BoxComponent);Zw.preventContactsSort=Zw.util.getUrlVars()['preventContactsSort'];

Ext.namespace('Zw.util');Zw.util.StringUtil=Ext.extend(Object,{getUTF8Length:function(value){var escapedStr=encodeURI(value);if(escapedStr.indexOf("%")!=-1){var count=escapedStr.split("%").length-1;if(count==0){count++;}
var tmp=escapedStr.length-(count*3);count=count+tmp;}else{count=escapedStr.length;}
return count;}});Zw.util.StringUtil.getInstance=function(){if(!Zw.util.StringUtil.instance){Zw.util.StringUtil.instance=new Zw.util.StringUtil({});}
return Zw.util.StringUtil.instance;};

Zw.namespace('Zw.util');Zw.util.StagedLoadingProxy=Ext.extend(Ext.data.DataProxy,{constructor:function(conn){Zw.util.StagedLoadingProxy.superclass.constructor.call(this);this.conn=conn;this.useAjax=!conn||!conn.events;},load:function(params,reader,callback,scope,arg){if(this.fireEvent("beforeload",this,params)!==false){var o={params:params||{},request:{callback:callback,scope:scope,arg:arg},reader:reader,callback:this.loadResponse,scope:this};this.executeTask(o);}else{callback.call(scope||this,null,arg,false);}},executeTask:function(o){if(this.useAjax){Ext.applyIf(o,this.conn);if(this.activeRequest){Ext.Ajax.abort(this.activeRequest);}
this.activeRequest=Ext.Ajax.request(o);}else{this.conn.request(o);}},loadResponse:function(o,success,response){delete this.activeRequest;if(!success){this.fireEvent("loadexception",this,o,response);o.request.callback.call(o.request.scope,null,o.request.arg,false);return;}
var result;try{var responseText=response.responseText;var json=Ext.decode(responseText);var total=json.total;var page=json.page;var pages=json.pages;this.announceStep(page,pages,total);result=o.reader.read(response);if(o.interm==null){o.interm=result;o.records=new Array();}
var array=result.records;var records=o.records=o.records.concat(array);var shouldContinue=!(page===pages);if(shouldContinue){page++;o.params.page=page;this.executeTask.defer(100,this,[o]);}else{result=o.interm;if(result){result.records=o.records;result.totalRecords=result.records.length;}
this.fireEvent("load",this,o,o.request.arg);o.request.callback.call(o.request.scope,result,o.request.arg,true);}}catch(e){Zw.console('exc',e);this.fireEvent("loadexception",this,o,response,e);o.request.callback.call(o.request.scope,null,o.request.arg,false);return;}},announceStep:function(page,pages,total){this.fireEvent('step',this,page,pages,total);}});

Zw.namespace('Zw.util');Zw.util.ControlCache=Ext.extend(Object,{collisionAction:'prevent',constructor:function(args){Ext.apply(this,args);this._list=new Ext.util.MixedCollection();},get:function(key,peek){if(!this._list)
return null;var result=this._list.get(key);if(!peek){this._list.removeKey(key);}
return result;},getCount:function(){if(!this._list)
return 0;return this._list.getCount();},each:function(fn,scope){if(!this._list)
return;this._list.each(fn,scope);},getCacheDiv:function(){if(!this.cacheDiv){this.cacheDiv=document.createElement('div');}
return this.cacheDiv},_hideNode:function(control){if(control){if(control.el){if(control.el.dom){var dom=control.el.dom;this.getCacheDiv().appendChild(dom);}}}},onBeforeDestroy:function(control){Ext.destroy(control);},put:function(key,control){var collision=this._list.get(key);if(collision){var action=this.collisionAction;if(action=='prevent'){Zw.util.log("Collision on key ",key,' action: ',action);return false;}else if(action=='destroy'){Zw.util.log("Collision on key ",key,' action: ',action);Ext.destroy(collision);}else if(action=='crash'){throw String.format('ControlCache caching collision on PUT({0}, control)',key);}else if(action=='overwrite'){Zw.util.log("Collision on key ",key,' action: ',action);}}
this._list.add(key,control);this._hideNode(control);return true;},destroy:function(){if(this._list){this._list.each(this.onBeforeDestroy,this);this._list.clear();delete this._list;}
if(this.cacheDiv){Ext.removeNode(this.cacheDiv);delete this.cacheDiv;}}});Ext.reg('Zw.util.ControlCache',Zw.util.ControlCache);Zw.util.NullControlCache=Ext.extend(Zw.util.ControlCache,{put:Ext.emptyFn,each:Ext.emptyFn});Ext.reg('Zw.util.NullControlCache',Zw.util.NullControlCache);

Zw.namespace('Zw.util');Zw.util.PubSub={apply:function(clazz){Ext.override(clazz,{publish:function(name,data){if(Zw.Application&&Zw.Application.debug){this._publish(name,data);}else{try{this._publish(name,data);}catch(er){this._publish('/app/error',{name:name,data:data,err:er});}}},_publish:function(name,data){Zw.console("PubSub _publish: ",name,data);if(this.eventsSuspended===true)
return true;if(!this.events)
return false;var glob=this.events['*'];if(glob){try{if(glob.fire.call(glob,data,name)===false)
return true;}catch(er){if(Zw&&Zw.Application&&!Zw.Application.debug)
this.publish('/app/error',{name:name,data:data,err:er,culprit:'global'});else
throw er;}}
if(name.substr(0,1)=='/'&&name.length>1){var chans=name.substr(1).split('/');var matched=false;for(var i=0,len=chans.length;i<=len;i++){var fn=this.events['/'+chans.slice(0,i).join('/').toLowerCase()];if(fn){matched=true;try{if(fn.fire.call(fn,data,name)===false)
return true;}catch(er){if(Zw&&Zw.Application&&!Zw.Application.debug)
this.publish('/app/error',{name:name,data:data,err:er});else
throw er;}}}
return matched;}else{var fn=this.events[name.toLowerCase()];try{if(fn){fn.fire.call(fn,data,name);return true;}}catch(er){if(Zw&&Zw.Application&&!Zw.Application.debug){this.publish('/app/error',{name:name,data:data,err:er});}else{throw er;}}}
return false;},subscribe:function(name,fn,scope,o){if(Ext.isArray(name)){Ext.each(name,function(n){this.subscribe(n,fn,scope,o);},this);return;}
this.addEvents(name);this.on(name,fn,scope,o);},unsubscribe:function(name,fn,scope){if(Ext.isArray(name)){Ext.each(name,function(n){this.unsubscribe(n,fn,scope);},this);return;}
this.un(name,fn,scope);},removeSubscribers:function(eventName){for(var evt in this.events){if((evt==eventName)||(!eventName)){var fn=this.events[evt];if(fn)
this.events[fn].clearListeners();}}}});}};

Ext.Element.prototype.slideOutOffset=function(anchor,o){var el=this.getFxEl();o=o||{};o.offset=o.offset||0;var result={o:o};var undoFn;el.queueFx(o,function(){anchor=anchor||"t";var r=result.r=this.getFxRestore();var b=this.getBox();this.setSize(b);var wrap=result.wrap=this.fxWrap(r.pos,o,"visible");var st=this.dom.style;st.visibility="visible";st.position="absolute";wrap.setSize(b);var after=function(){st.width=r.width;st.height=r.height;el.afterFx(o);};undoFn=function(_o){el.fxUnwrap(wrap,r.pos,o);if(_o.undoFn)
_o.undoFn();el.slideIn(anchor,_o);}
var a,zero={to:0};switch(anchor.toLowerCase()){case"t":st.left=st.bottom="0";a={height:zero};break;case"l":st.right=st.top="0";a={width:zero};break;case"r":st.left=st.top="0";a={width:zero,points:{to:[b.right,b.y]}};break;case"b":st.left=st.top="0";a={height:{to:o.offset},points:{to:[b.x,b.bottom-o.offset]}};break;case"tl":st.right=st.bottom="0";a={width:zero,height:zero};break;case"bl":st.right=st.top="0";a={width:zero,height:zero,points:{to:[b.x,b.bottom]}};break;case"br":st.left=st.top="0";a={width:zero,height:zero,points:{to:[b.x+b.width,b.bottom]}};break;case"tr":st.left=st.bottom="0";a={width:zero,height:zero,points:{to:[b.right,b.y]}};break;}
arguments.callee.anim=wrap.fxanim(a,o,'motion',.5,"easeOut",after);});return{el:this,wrap:result.wrap,undo:undoFn};}

if(!Array.prototype.filter){Array.prototype.filter=function(fun){'use strict';if(this===void 0||this===null){throw new TypeError();}
if(typeof fun!=='function'){throw new TypeError();}
var t=Object(this),len=t.length>>>0,res=[],thisp=arguments[1];for(var i=0;i<len;i++){if(i in t){var val=t[i];if(fun.call(thisp,val,i,t)){res.push(val);}}}
return res;}}
if((typeof Range!=="undefined")&&!Range.prototype.createContextualFragment)
{Range.prototype.createContextualFragment=function(html)
{var frag=document.createDocumentFragment(),div=document.createElement("div");frag.appendChild(div);div.outerHTML=html;return frag;};}

Zw.namespace('Zw.util');Zw.util.BatchFactory=Ext.extend(Object,{m_types:null,init:function(){this.m_types=[];},register:function(thing){this.m_types.push(thing);},remove:function(oldThing){this.replace(oldThing,'Zw.features.app.NullFeature');},replace:function(oldThing,newThing){var oldString=this.resolveXtype(oldThing);var oldType=Zw.util.resolveType(oldThing);var found=false;for(var i=0,L=this.m_types.length;i<L;i++){var f=this.m_types[i];var t=Ext.type(f);var isString=(t=='string');if(isString){if(oldString==f){this.m_types[i]=newThing;found=true;}}else{if(oldType==f){this.m_types[i]=newThing;found=true;}}}
if(!found){this.register(newThing);}},resolveXtype:function(t){return(Ext.type(t)=='string')?t:t.xtype;},createAll:function(args){var result=[];for(var i=0,L=this.m_types.length;i<L;i++){var f=this.m_types[i];var thing=this.create(f,args);if(thing){result.push(thing);}}
return result;},create:function(factory,args){var t=Ext.type(factory);var thing=null;if(t=='function'){thing=new factory(args);}else if(t=='string'){var type=Zw.util.resolveType(factory);thing=new type(args);}else{thing=new factory(args);}
return thing;}});

Zw.util.ProxyBatchFactory=Ext.extend(Zw.util.BatchFactory,{create:function(factory,args){var t=Ext.type(factory);var thing=null;if(t=='function'){thing=factory(args);}else if(t=='string'){var type=Zw.util.resolveType(factory);thing=new type(args);}else{thing=factory.create(args);}
return thing;}});

Zw.util.NamespacedFactory=Ext.extend(Object,{namespaces:null,init:function(){this.namespaces=new Ext.util.MixedCollection();},register:function(namespace,factory){if(Ext.type(namespace)=='string'){this._register(namespace,factory);}else{Ext.each(namespace,function(n){this._register(n,factory);},this);}},_register:function(namespace,factory){var factories=this.namespaces.get(namespace);if(!factories){factories=new Zw.util.ProxyBatchFactory();factories.init();this.namespaces.add(namespace,factories);}
factories.register(factory);},create:function(namespace,args){var factories=this.namespaces.key(namespace);var result=null;if(factories){result=factories.createAll(args);}
return result;},replace:function(namespace,oldFactory,newFactory){if(Ext.type(namespace)=='string'){this._replace(namespace,oldFactory,newFactory);}else{Ext.each(namespace,function(n){this._replace(n,oldFactory,newFactory);},this);}},_replace:function(namespace,oldFactory,newFactory){var factories=this.namespaces.get(namespace);if(factories){factories.replace(oldFactory,newFactory);}}});

Zw.namespace('Zw.features');Zw.namespace('Zw.app');Zw.features.Factory=new Zw.util.BatchFactory();Zw.features.Factory.init();Zw.features.PluginFactory=new Zw.util.NamespacedFactory();Zw.features.PluginFactory.init();Zw.app.PluginFactory=new Zw.util.NamespacedFactory();Zw.app.PluginFactory.init();

Zw.namespace('Zw.data');Zw.data.Message=Ext.data.Record.create([{name:'id',mapping:'id'},{name:'uuid',mapping:'uuid'},{name:'from',mapping:'contactId'},{name:'fromDeviceId',mapping:'contactDeviceId'},{name:'isSelf',mapping:'isSelf'},{name:'fromName',mapping:'fromName'},{name:'fromAddress',mapping:'fromAddress'},{name:'firstName',mapping:'firstName'},{name:'lastName',mapping:'lastName'},{name:'fullName',mapping:'fullName'},{name:'scheduledDate',mapping:'scheduledDate',type:'date',dateFormat:'c'},{name:'phoneIcon',mapping:'phone'},{name:'phoneKey',mapping:'phoneKey'},{name:'body',mapping:'body'},{name:'tsSent',mapping:'dateCreated',type:'date',dateFormat:'c'},{name:'thread',mapping:'thread'},{name:'threadFwd',mapping:'threadFwd'},{name:'channel',mapping:'channel'},{name:'mobileNumber',mapping:'mobileNumber'},{name:'address',mapping:'address'},{name:'carrier',mapping:'carrier'},{name:'carrierId',mapping:'carrierId'},{name:'type',mapping:'type'},{name:'fwd',mapping:'fwd'},{name:'isRead',mapping:'isRead'},{name:'latlong',mapping:'latlong'},{name:'loc',mapping:'loc'},{name:'deleted',mapping:'deleted'},{name:'statusCode',mapping:'statusCode'},{name:'carbonedMessageId',mapping:'carbonedMessageId'},{name:'parentId',mapping:'parentId'},{name:'deviceId',mapping:'deviceId'},{name:'visible',mapping:'visible'},{name:'subject',mapping:'subject'},{name:'cc',mapping:'cc'},{name:'bcc',mapping:'bcc'},{name:'fingerprint',mapping:'fingerprint'},{name:'sourceAddress',mapping:'sourceAddress'},{name:'destAddress',mapping:'destAddress'}]);

Zw.namespace('Zw.data');Zw.data.Contact=Ext.extend(Ext.data.Record,{firstName:null,lastName:null,mobileNumber:null,email:null,birthday:null,channel:null,phone:null,city:null,state:null,zipcode:null,notes:null,latlong:null,loc:null,thread:null,fwdThread:null,carrier:null,carrierId:null,isRead:null,phoneMake:null,phoneKey:null,phoneModel:null,phoneDesc:null,deleted:null,ZOCount:null,MOCount:null,key:null,tag:null,keywords:null});Zw.data.Contact=Ext.data.Record.create([{name:'firstName',mapping:'firstName',sortType:Ext.data.SortTypes.asUCString},{name:'lastName',mapping:'lastName',sortType:Ext.data.SortTypes.asUCString},{name:'mobileNumber',mapping:'mobileNumber'},{name:'address',mapping:'address'},{name:'email',mapping:'email'},{name:'birthday',mapping:'birthday'},{name:'channel',mapping:'channel',sortType:Ext.data.SortTypes.asInt},{name:'phone',mapping:'phone'},{name:'city',mapping:'city'},{name:'state',mapping:'state'},{name:'zipcode',mapping:'zipcode'},{name:'notes',mapping:'notes'},{name:'latlong',mapping:'latlong'},{name:'loc',mapping:'loc'},{name:'thread',mapping:'thread'},{name:'fwdThread',mapping:'fwd'},{name:'carrier',mapping:'carrier'},{name:'carrierId',mapping:'carrierId'},{name:'isRead',mapping:'isRead'},{name:'phoneMake',mapping:'phoneMake'},{name:'phoneKey',mapping:'phoneKey'},{name:'phoneModel',mapping:'phoneModel'},{name:'phoneDesc',mapping:'phoneDesc'},{name:'deleted',mapping:'deleted'},{name:'ZOCount',mapping:'ZOCount'},{name:'MOCount',mapping:'MOCount'},{name:'key',mapping:'key'},{name:'tag',mapping:'tag'},{name:'keywords',mapping:'keywords'},{name:'targetGroupDevice',mapping:'targetGroupDevice'},{name:'deviceId',mapping:'deviceId'},{name:'memberCount',mapping:'memberCount',type:'int'},{name:'faceUrl',mapping:'faceUrl'}]);

Zw.namespace('Zw.data');Zw.data.CarrierListArray=Ext.data.Record.create([{name:'carrier_id',mapping:0},{name:'name',mapping:1},{name:'formal_name',mapping:2},{name:'is_supported',mapping:3}]);Zw.data.GetCarrierList=function(){Zw.console("Creating carrier list data store");var carriers=[['AUS','Australia','Australia',true],['Alltel','Alltel','Alltel',true],['ATT','AT&amp;T','AT&amp;T Wireless',true],['Boost','Boost Mobile','Boost Mobile',false],['CellSouth','C Spire','C Spire',true],['Centennial','Centennial','Centennial Wireless',false],['Cricket','Cricket','Cricket Communications',false],['Farmers','Farmers','Farmers Wireless',false],['Metro','MetroPCS','MetroPCS',false],['Midwest','Midwest','Midwest Wireless',false],['nTelos','nTelos','nTelos',false],['Rural','Rural','Rural Cellular',false],['Sprint','Sprint','Sprint Nextel',true],['Nextel','Nextel','Sprint Nextel',true],['Suncom','Suncom','Suncom',false],['Tmo','T-Mobile','T-Mobile USA',true],['Union','Union Telephone','Union Telephone',false],['USCell','U.S. Cellular','U.S. Cellular',true],['Virgin','Virgin','Virgin Mobile',false],['Vzw','Verizon','Verizon Wireless',true],['WestCentral','West Central','West Central Wireless',false],['Other','Other','Other',false]];var ds=new Ext.data.Store({proxy:new Ext.data.MemoryProxy(carriers),reader:new Ext.data.ArrayReader({id:0},Zw.data.CarrierListArray)});ds.load();return ds;}
Zw.data.getCarrierRecordByCarrierId=function(carrierId){var carriersStore=Zw.data.Carrier.CarrierList;var carrierRecordIndex=carriersStore.find('carrier_id',carrierId,0,false,true);var carrierRecord=carriersStore.getAt(carrierRecordIndex);return carrierRecord;};Zw.data.isCarrierSupported=function(carrierId){var result;if(carrierId&&(carrierId!=='Carrier')){var carrierRecord=Zw.data.getCarrierRecordByCarrierId(carrierId);if(carrierRecord){result=Zw.data.get(carrierRecord,'is_supported');}else{result=false;}}else{result=undefined;}
return result;};Zw.data.getCarrierFormalName=function(carrierId){var carrierRecord=Zw.data.getCarrierRecordByCarrierId(carrierId);if(carrierRecord){return Zw.data.get(carrierRecord,'formal_name');}};Zw.data.Carrier={CarrierList:new Zw.data.GetCarrierList()};

Zw.data.AreaCode=Ext.data.Record.create([{name:'code'},{name:'state'},{name:'x'},{name:'y'}]);Zw.data.AreaCode.codes=[[201,'N New Jersey: Jersey City, Hackensack',62,13],[202,'Washington, D.C.',59,16],[203,'Connecticut: Fairfield New Haven counties',63,12],[205,'Central Alabama: Birmingham',48,26],[206,'W Washington state: Seattle & Bainbridge Isl&',12,1],[207,"Maine (lobster country's only area code)",66,6],[208,'Idaho (more than just potatoes)',20,7],[209,'Central California: Stockton',14,18],[210,'S Texas: San Antonio',37,33],[212,'New York City, New York (the Big Apple)',62,13],[213,'S California: Los Angeles (city of angels)',16,25],[214,'Texas: Dallas Metro ',38,27],[215,'SE Pennsylvania: Philadelphia (city of brotherly love)',61,14],[216,'Cleveland',54,12],[217,'Cent. Illinois: Springfield',46,14],[218,'N Minnesota: Duluth',41,2],[219,'NW Indiana: Gary',48,12],[224,'Northern NE Illinois',47,10],[225,'Louisiana: Baton Rouge Region',44,31],[228,'S Mississippi (coastal areas, Biloxi, Gulfport)',46,31],[229,'SW Georgia: Albany',52,29],[231,'W Michigan: Traverse City region',50,7],[234,'NE Ohio: Canton, Akron',54,12],[239,'Florida: Lee, Collier, & Monroe Counties',54,38],[240,'W Maryland: Silver Spring, Frederick, Gaithersburg',59,16],[248,'Michigan: Oakland County, Pontiac',52,10],[251,'S Alabama: Mobile & coastal areas',47,30],[252,'E North Carolina: Rocky Mount',59,22],[253,'Washington: Tacoma, Federal Way',12,1],[254,'Central Texas: Waco, Stephenville',38,29],[256,'E & N Alabama: Huntsville, Florence, Gadsden',49,24],[260,'NE Indiana: Fort Wayne',50,12],[262,'SE Wisconsin',47,9],[267,'SE Pennsylvania: Philadelphia (city of brotherly love)',61,14],[269,'SW Michigan: Kalamazoo, Battle Creek, Sturgis to Lake Michigan',50,10],[270,'W Kentucky: Bowling Green, Paducah',48,19],[276,'S & SW Virginia: Bristol, Stuart, Martinsville',54,20],[281,'Texas: Houston Metro',40,32],[301,"W Maryland: Silver Spring, Frederick, Prince George's County",59,16],[302,'Delaware',60,15],[303,'Central Colorado: Denver',30,15],[304,'West Virginia',55,16],[305,'SE Florida: Miami, the Keys',55,39],[307,'Wyoming',28,9],[308,'W Nebraska: North Platte',35,12],[309,'W Cent. Illinois: Peoria',46,13],[310,'S California: Beverly Hills, W Hollywood, W Los Angeles',16,25],[312,'Illinois: Chicago (downtown only -- in the loop)',48,11],[313,'Michigan: Detroit & suburbs (motor city)',52,10],[314,'SE Missouri: St Louis city & metro area',45,16],[315,'N Central New York: Syracuse',60,8],[316,'S Kansas: Wichita',38,18],[317,'Central Indiana: Indianapolis',49,14],[318,'N Louisiana: Shreveport, Monroe, Alexandria',42,28],[319,'E Iowa: Cedar Rapids',44,11],[320,'Central Minnesota: Saint Cloud ',41,5],[321,'Florida: Brevard County, Cape Canaveral, Metro Orlando',55,34],[323,'S California: Los Angeles ',16,25],[325,'Central Texas: Abilene, Sweetwater, Snyder, San Angelo',35,28],[330,'NE Ohio: Akron, Canton, Youngstown ',54,12],[334,'S Alabama: Auburn/Opelika, Montgomery & coastal areas',49,28],[336,'Central North Carolina: Greensboro, Winston-Salem',56,21],[337,'SW Louisiana: Lake Charles, Lafayette',43,31],[339,'Massachusetts: Boston suburbs',65,10],[347,'New York: Brooklyn, Manhattan, Queens, Staten Island',62,13],[351,'Massachusetts: north of Boston',65,10],[352,'Florida: Gainesville area, Ocala',53,33],[360,'W Washington State: Olympia, Bellingham ',12,1],[361,'S Texas: Corpus Christi',38,35],[386,'N central Florida: Lake City',54,33],[401,'Rhode Island',64,11],[402,'E Nebraska: Omaha, Lincoln',38,12],[404,'N Georgia: Atlanta & suburbs',51,25],[405,'Oklahoma City area',38,22],[406,'Montana',25,2],[407,'Central Florida: Metro Orlando',54,34],[408,'Cent. Coastal California: San Jose',13,19],[409,'SE Texas: Galveston, Port Arthur, Beaumont',41,32],[410,'E Maryland: Baltimore, Annapolis, Chesapeake Bay area, Ocean City',59,16],[412,'W Pennsylvania: Pittsburgh',56,13],[413,'W Massachusetts: Springfield',63,10],[414,'SE Wisconsin: Milwaukee County',47,9],[415,'San Francisco County & Marin County, north side of Golden Gate Bridge',12,18],[417,'SW Missouri: Springfield',42,19],[419,'NW Ohio: Toledo',52,12],[423,'E Tennessee: Chattanooga, Bristol, Johnson City',52,21],[425,'Washington: North Tier - Everett, Bellevue',12,1],[430,'NE Texas: Tyler',40,27],[432,'W Texas: Big Spring, Midland, Odessa',33,29],[434,'E Virginia: Charlottesville, Lynchburg, Danville',57,19],[435,'Rural Utah outside Salt Lake City metro',23,15],[440,'Ohio: Cleveland metro area, excluding Cleveland',54,11],[443,'E Maryland: Baltimore, Annapolis, Chesapeake Bay area',59,15],[469,'Texas: Dallas Metro',38,27],[478,'Central Georgia: Macon',52,27],[479,'NW Arkansas: Fort Smith, Fayetteville, Springdale',41,22],[480,'Arizona: East Phoenix',23,26],[484,'SE Pennsylvania: Allentown, Bethlehem, Reading, West Chester',60,14],[501,'Central Arkansas: Little Rock, Hot Springs, Conway',43,23],[502,'N Central Kentucky: Louisville',50,17],[503,'Oregon',12,5],[504,'E Louisiana: New Orleans metro area',45,32],[505,'New Mexico',29,23],[507,'S Minnesota: Rochester, Mankato, Worthington',41,7],[508,'Cent. Massachusetts: Framingham; Cape Cod',65,11],[509,'E and Central Washington:  Spokane, Yakima, Walla Walla',16,2],[510,'California: Oakland, East Bay',12,18],[512,'S Texas: Austin',37,31],[513,'SW Ohio: Cincinnati',51,16],[515,'Cent. Iowa: Des Moines',41,11],[516,'New York: Nassau County, Long Island; Hempstead',62,13],[517,'Cent. Michigan: Lansing',51,10],[518,'NE New York: Albany',62,9],[520,'SE Arizona: Tucson area',24,28],[530,'NE California: Eldorado County area, ',13,15],[540,'W & SW Virginia: Shen&oah & Roanoke valley areas',57,18],[541,'Oregon: Eugene, Medford',12,7],[551,'N New Jersey: Jersey City, Hackensack',62,13],[559,'Central California: Fresno',15,20],[561,'S. Central Florida: West Palm Beach, Boca Raton, Vero Beach',56,38],[562,'California: Long Beach',16,25],[563,'E Iowa: Davenport, Dubuque',44,10],[567,'NW Ohio: Toledo',52,12],[570,'NE & N Central Pennsylvania: Wilkes-Barre, Scranton',60,12],[571,'Northern Virginia: Arlington, McLean, Tysons Corner',58,16],[573,'SE Missouri:  area between St. Louis & Kansas City',44,18],[574,'N Indiana: Elkhart, South Bend',49,12],[575,'New Mexico: Las Cruces, Alamogordo, Roswell',28,28],[580,'W Oklahoma: areas outside Oklahoma City',37,22],[585,'NW New York: Rochester',58,9],[586,'Michigan: Macomb County',53,10],[601,'Mississippi: Meridian, Jackson area',46,28],[602,'Arizona: Phoenix',23,25],[603,'New Hampshire',64,8],[605,'South Dakota',36,7],[606,'E Kentucky: area east of Frankfort: Ashland',52,18],[607,'S Central New York: Ithaca, Binghamton; Catskills',59,10],[608,'SW Wisconsin: Madison',45,9],[609,'S New Jersey: Trenton',61,14],[610,'SE Pennsylvania: Allentown, Bethlehem, Reading, West Chester',60,14],[612,'Cent. Minnesota: Minneapolis',42,5],[614,'SE Ohio: Columbus',53,14],[615,'Northern Middle Tennessee: Nashville metro area',49,21],[616,'W Michigan: Holland, Grand Haven, Greenville, Grand Rapids',50,9],[617,'Massachusetts: greater Boston',65,10],[618,'S Illinois: Centralia',46,17],[619,'S California: San Diego',18,27],[620,'S Kansas: Wichita',38,18],[623,'Arizona: West Phoenix',23,25],[626,'E S California: Pasadena',17,24],[630,'W NE Illinois, western suburbs of Chicago',47,11],[631,'New York: Suffolk County, Long Island areas',63,13],[636,'Missouri: W St. Louis metro area ',45,17],[641,'Iowa: Mason City, Marshalltown, Creston, Ottumwa',42,11],[646,'New York NYC: Manhattan only',62,13],[647,'Canada: S Cent. Ontario: Toronto',56,8],[650,'California: San Mateo County, parts of Santa Clara County',12,18],[651,'Cent. Minnesota: St. Paul',42,5],[660,'N Missouri',42,15],[661,'California: N Los Angeles, Mckittrick, Mojave, Newhall, Oildale, Palmdale',16,23],[662,'N Mississippi: Tupelo, Grenada',46,25],[678,'N Georgia: metropolitan Atlanta',51,25],[682,'Texas: Fort Worth areas',38,27],[701,'North Dakota',35,1],[702,'S. Nevada: Clark County, incl Las Vegas',20,21],[703,'Northern Virginia: Arlington, McLean, Tysons Corner',58,16],[704,'W North Carolina: Charlotte',55,22],[706,'N Georgia: Columbus, Augusta',52,25],[707,'NW California: Santa Rosa, Napa, Vallejo, American Canyon, Fairfield',12,16],[708,'Illinois: southern & western suburbs of Chicago',48,11],[712,'W Iowa: Council Bluffs',40,10],[713,'Mid SE Texas: central Houston',40,32],[714,'North & Central Orange County',17,25],[715,'N Wisconsin: Eau Claire, Wausau, Superior',45,5],[716,'NW New York: Buffalo',57,9],[717,'E Pennsylvania: Harrisburg',59,14],[718,'New York: Queens, Staten Island, The Bronx, & Brooklyn',62,13],[719,'SE Colorado: Pueblo, Colorado Springs',30,17],[720,'Central Colorado: Denver',30,15],[724,'SW Pennsylvania ',56,13],[727,'Florida Tampa Metro: Saint Petersburg, Clearwater ',53,35],[731,'W Tennessee: outside Memphis metro area',47,21],[732,'Central New Jersey: Toms River, New Brunswick, Bound Brook',61,13],[734,'SE Michigan: west & south of Detroit -- Ann Arbor, Monroe',52,10],[740,'SE Ohio: areas outside Columbus',53,15],[754,'Florida: Broward County area, incl Ft. Lauderdale',55,38],[757,'E Virginia:  Norfolk, Virginia Beach, Chesapeake, Newport News',59,19],[760,'California: San Diego North County to Sierra Nevada',18,25],[763,'Minnesota: Minneapolis NW',42,5],[765,'Indiana: outside Indianapolis',49,14],[769,'Mississippi: Meridian, Jackson area',45,28],[770,'Georgia: Atlanta suburbs',51,25],[772,'S. Central Florida: St. Lucie, Martin, & Indian River counties',55,36],[773,'Illinois: city of Chicago, outside the loop',48,11],[774,'Cent. Massachusetts: Framingham; Cape Cod',65,11],[775,'N. Nevada: Reno & most of the state',16,15],[781,'Massachusetts: Boston surburbs, to the north & west',65,10],[785,'N & W Kansas: Topeka',38,16],[786,'SE Florida: Monroe County, Miami',55,39],[787,'Puerto Rico',70,52],[801,'Utah: Salt Lake City Metro',23,13],[802,'Vermont',63,7],[803,'South Carolina: Columbia, Aiken, Sumter',55,25],[804,'E Virginia: Richmond',58,18],[805,'S Cent California: Ventura County, Santa Barbara County',15,24],[806,'Panhandle Texas: Amarillo, Lubbock',33,24],[808,'Hawaii (the most most beautiful place on earth)',-24,47],[810,'E Michigan: Flint, Pontiac',52,9],[812,'S Indiana: Evansville,  Columbus, Bloomington ',49,16],[813,'SW Florida: Tampa Metro',53,35],[814,'Cent. Pennsylvania: Erie',57,12],[815,'NW Illinois: Rockford, Kankakee',47,11],[816,'N Missouri: Kansas City',41,16],[817,'N Cent. Texas: Fort Worth area',38,27],[818,'S California: Los Angeles, San Fernando Valley',16,24],[828,'W North Carolina: Asheville',53,22],[830,'Texas: region surrounding San Antonio',36,33],[831,'California: central coast area from Santa Cruz through Monterey County',13,20],[832,'Texas: Houston',40,32],[843,'South Carolina, coastal area: Charleston, Beaufort, Myrtle Beach',56,26],[845,'New York: Lower Hudson Valley & Catskills, NY',62,12],[847,'Northern NE Illinois: northwestern suburbs of chicago ',47,10],[848,'Central New Jersey: Toms River, New Brunswick, Bound Brook',61,14],[850,'Northern Florida & the Florida Panhandle',50,31],[856,'SW New Jersey: greater Camden area, Mt Laurel',61,14],[857,'Massachusetts: greater Boston',65,10],[858,'S California: San Diego',17,27],[859,'N & Central Kentucky: Lexington',51,17],[860,'Connecticut: areas outside of Fairfield & New Haven Counties',63,11],[862,'N New Jersey: Newark Paterson Morristown',61,13],[863,'Florida: Lakeland, Polk County',54,36],[864,'South Carolina, upstate area: Greenville, Spartanburg',53,23],[865,'E Tennessee: Knoxville, Knox & adjacent counties',52,21],[870,'Arkansas: areas outside of west/central AR: Jonesboro, etc',43,23],[878,'Pittsburgh, New Castle',56,14],[901,'W Tennessee: Memphis metro area',45,23],[903,'NE Texas: Tyler',40,27],[904,'N Florida: Jacksonville',54,31],[906,'Upper Peninsula Michigan: Sault Ste. Marie, Escanaba, Marquette',48,3],[907,'Alaska',-17,-23],[908,'Central New Jersey: New Brunswick',61,13],[909,'California:San Bernardino , Riverside',17,25],[910,'S Central North Carolina: Fayetteville, Wilmington',57,23],[912,'SE Georgia: Savannah',54,28],[913,'Kansas: Kansas City area',40,16],[914,'S New York: Westchester County',62,12],[915,'W Texas: El Paso',29,29],[916,'NE California: Sacramento, Newcastle & El Dorado Hills',13,17],[917,'New York: Brooklyn, Manhattan, Queens, Staten Island',62,13],[918,'E Oklahoma: Tulsa',39,21],[919,'E North Carolina: Raleigh',57,21],[920,'NE Wisconsin: Appleton, Green Bay, Sheboygan',47,7],[925,'East Bay, California - Eastern Contra Costa & Alameda Counties',12,18],[928,'Central & Northern Arizona: Prescott, Flagstaff, Yuma',23,24],[931,'Middle Tennessee: semi-circular ring around Nashville',49,22],[936,'SE Texas: Conroe, Lufkin, Nacogdoches, Crockett',40,30],[937,'SW Ohio: Dayton',51,14],[939,'Puerto Rico',69,51],[940,'N Cent. Texas: Denton, Wichita Falls',37,26],[941,'SW Florida: Sarasota & Manatee counties',53,36],[947,'Michigan: Oakland County',52,10],[949,'California: S Coastal Orange County',17,25],[951,'California: W Riverside County',259,25],[952,'Minnesota: Minneapolis SW, Bloomington',42,6],[954,'Florida: Broward County area, incl Ft. Lauderdale',55,38],[956,'Texas: Valley of Texas area; Harlingen, Laredo',37,38],[970,'N & W Colorado',29,15],[971,'Oregon: Metropolitan Portland, Salem/Keizer area',12,5],[972,'Texas: Dallas Metro',38,27],[973,'N New Jersey: Newark, Paterson, Morristown',61,13],[978,'Massachusetts: north of Boston to NH',65,10],[979,'SE Texas: Bryan, College Station, Bay City',39,32],[980,'North Carolina:',55,22],[985,'SE Louisiana: Lake Pontchartrain',45,31],[989,'Upper central Michigan: Mt Pleasant, Saginaw',51,8]];

Zw.namespace('Zw.data');Zw.data.Conversation=Ext.extend(Ext.data.Record,{lastContactId:null,lastContactFirstName:null,lastContactLastName:null,lastContactMobileNumber:null,lastContactDeviceId:null,lastMessageBody:null,unreadCount:null,bcc:null,lastUpdated:null,lastMessageDate:null,'class':null,deleted:null,version:null,dtoParentId:null,id:null,fingerprint:null,address:null,dateCreated:null,cc:null,deviceId:null,deviceAddress:null});Zw.data.Conversation=Ext.data.Record.create([{name:'lastContactId',mapping:'lastContactId'},{name:'lastContactFirstName',mapping:'lastContactFirstName'},{name:'lastContactLastName',mapping:'lastContactLastName'},{name:'lastContactMobileNumber',mapping:'lastContactMobileNumber'},{name:'lastContactDeviceId',mapping:'lastContactDeviceId'},{name:'lastMessageBody',mapping:'lastMessageBody'},{name:'unreadCount',mapping:'unreadCount'},{name:'bcc',mapping:'bcc'},{name:'lastUpdated',mapping:'lastUpdated'},{name:'lastMessageDate',mapping:'lastMessageDate'},{name:'class',mapping:'class'},{name:'deleted',mapping:'deleted'},{name:'version',mapping:'version'},{name:'dtoParentId',mapping:'dtoParentId'},{name:'id',mapping:'id'},{name:'fingerprint',mapping:'fingerprint'},{name:'address',mapping:'address'},{name:'dateCreated',mapping:'dateCreated'},{name:'cc',mapping:'cc'},{name:'deviceId',mapping:'deviceId'},{name:'deviceAddress',mapping:'deviceAddress'}]);

Zw.data.ClonedStore=Ext.extend(Ext.data.Store,{suspended:false,debug:false,alias:'Zw.data.ClonedStore',filterFn:function(){return true;},scope:this,_log:Zw.console,log:function(msg){if(this.debug){var args=[];args.push(this.alias);for(var i=0;i<arguments.length;i++){args.push(arguments[i]);}
this._log.apply(this,args);}},syncData:function(){if(this.fireEvent('beforesync')!==false){this.snapshot=this.store.data;Zw.console('ClonedStore - filtering by query',this.filterFn);this.data=this.queryBy(this.filterFn,this.scope||this);this.log(String.format("{0} snapshot / {1} data",this.snapshot.getCount(),this.data.getCount()),this.filterFn);}},getTotalCount:function(){return this.snapshot.getCount();},clearFilter:function(){this.syncData();this.fireEvent('datachanged',this);},filterBy:function(fn,scope){this.snapshot=this.snapshot||this.data;this.data=this.queryBy(fn,scope||this);this.data=this.data.filterBy(this.filterFn,this.scope||this);this.fireEvent("datachanged",this);},queryBy:function(fn,scope){return this.filterDataBy(this.snapshot||this.data,fn,scope||this);},filterDataBy:function(data,fn,scope){return data.filterBy(fn,scope||this);},findRecordIndex:function(record){return this.data.indexOf(record);},afterEdit:function(record){if(!this.dirty)return;if(this.modified.indexOf(record)==-1){this.modified.push(record);}
this.fireEvent("update",this,record,Ext.data.Record.EDIT);},isInOurFilter:function(record){return this.filterFn.apply(this.scope||this,[record]);},onStoreAdd:function(store,records){if(this.suspend)
return;this.log("Detected store changed");var somethingAdded=false;Ext.each(records,function(record){if(this.isInOurFilter(record)){somethingAdded=true;}},this);if(!somethingAdded)
return;this.syncData();var index=this.findRecordIndex(records[0]);Zw.console("Determing the findRecordIndex of the change",index);if(index!=-1){if(somethingAdded){Zw.console("Something was added!");this.fireEvent('add',this,records,index);}}},onStoreBeforeLoad:function(store,options){this.log("firing beforeload");this.fireEvent('beforeload',this,options);},onStoreClear:function(){this.syncData();},onStoreDataChanged:function(store){this.syncData();this.log("firing datachanged");this.fireEvent('datachanged',this);},refresh:function(){this.syncData();this.fireEvent('datachanged',this);},onStoreLoad:function(sender,records,options){this.syncData();this.log("firing load");this.fireEvent('load',this,this.data.getRange());this.log("firing datachanged");},onStoreLoadException:function(){this.log("ignoring loadexception");},onStoreMetaChange:function(){this.log("ignoring metachange");},onStoreRemove:function(store,record){this.log("processing remove request");var index=this.findRecordIndex(record);if(index!=-1){this.data.remove(record);this.fireEvent('remove',this,record,index);}},onStoreUpdate:function(store,record){this.log('detected store update');var index=this.findRecordIndex(record);if(index!=-1){if(this.isInOurFilter(record)){this.log("firing update");this.fireEvent('update',this,record,index);}else{this.data.remove(record);this.log("firing load");this.fireEvent('remove',this,record,index);}}else{if(this.isInOurFilter(record)){this.log("firing add");var idx=this.data.getCount();this.data.add(record);this.fireEvent('add',this,[record],idx);}else{this.log('updated record not found... skipping..');}}},onStoreSuspendEvents:function(){this.suspended=true;this.detach();},onStoreResumeEvents:function(){if(this.suspended)
this.attach();this.suspended=false;},attach:function(){var s=this._store;s.on('add',this.onStoreAdd,this);s.on('beforeload',this.onStoreBeforeLoad,this);s.on('clear',this.onStoreClear,this);s.on('datachanged',this.onStoreDataChanged,this);s.on('load',this.onStoreLoad,this);s.on('loadexception',this.onStoreLoadException,this);s.on('metachange',this.onStoreMetaChange,this);s.on('remove',this.onStoreRemove,this);s.on('update',this.onStoreUpdate,this);},detach:function(){var s=this._store;s.un('add',this.onStoreAdd,this);s.un('beforeload',this.onStoreBeforeLoad,this);s.un('clear',this.onStoreClear,this);s.un('datachanged',this.onStoreDataChanged,this);s.un('load',this.onStoreLoad,this);s.un('loadexception',this.onStoreLoadException,this);s.un('metachange',this.onStoreMetaChange,this);s.un('remove',this.onStoreRemove,this);s.un('update',this.onStoreUpdate,this);},constructor:function(args){Zw.data.ClonedStore.superclass.constructor.apply(this,[args]);this._store=args.store;this.attach();args.store.on('suspend',this.onStoreSuspendEvents,this);args.store.on('resume',this.onStoreResumeEvents,this);this.onMetaChanged=args.store.onMetaChanged;this.fields=args.store.fields;this.syncData();},destroy:function(){}});Zw.data.ClonedStore.add=function(records){records=[].concat(records);if(records.length<1){return;}
var index=this.data.length;this.data.addAll(records);if(this.snapshot){this.snapshot.addAll(records);}
this.fireEvent("add",this,records,index);};

Zw.namespace('Zw.data');Zw.data.PhoneRecord=Ext.data.Record.create([{name:'phoneKey',mapping:0},{name:'make',mapping:1},{name:'model',mapping:2},{name:'sub_model',mapping:3},{name:'has_flip',mapping:4},{name:'normal_flip_h',mapping:5},{name:'ec_flip_h',mapping:6},{name:'zoom_front_h',mapping:7},{name:'zoom_flip_h',mapping:8},{name:'zoom_front_w',mapping:9},{name:'zoom_flip_w',mapping:10}]);Zw.data.PhoneListStore=function(){var phones=[['appleiPhone','Apple','iPhone','',0,0,0,400,0,212,0],['appleiPhone3GBlack','Apple','iPhone 3G','Black',1,35,134,400,400,211,216],['appleiPhone3GWhite','Apple','iPhone 3G','White',1,35,134,400,400,212,217],['attQuickfireLimegreen','AT&T','Quickfire','Limegreen',1,24,134,216,400,112,312],['attQuickfireOrange','AT&T','Quickfire','Orange',0,0,0,296,0,151,0],['attQuickfireSilver','AT&T','Quickfire','Silver',1,31,134,215,400,143,311],['audCDM-120','Audiovox','CDM-120','',1,54,199,400,589,175,175],['audCDM-8450','Audiovox','CDM-8450','',0,0,0,400,0,154,0],['audCDM-8900','Audiovox','CDM-8900','',1,50,190,400,571,183,183],['audCDM-8910','Audiovox','CDM-8910','',1,52,188,400,564,174,174],['audCDM-8940','Audiovox','CDM-8940','',1,52,198,400,595,183,183],['audCDM-8945','Audiovox','CDM-8945','',1,52,200,400,593,172,172],['audCDM-9500','Audiovox','CDM-9500','',1,53,199,400,593,167,167],['audCDM-9900','Audiovox','CDM-9900','',1,58,212,400,629,172,172],['audPM-8912','Audiovox','PM-8912','',1,52,193,400,574,178,178],['audPM-8920','Audiovox','PM-8920','',1,52,200,400,596,182,182],['audSMT5600','Audiovox','SMT 5600','',0,0,0,400,0,174,0],['audVI600','Audiovox','VI 600','',0,0,0,400,0,150,0],['bb8820Black',null,null,'',0,0,0,400,0,237,0],['bbBoldBlack','Rim','Blackberry Bold','Black',0,0,0,400,0,237,0],['bbCurve8310Red','Rim','Blackberry Curve 8310','Red',0,0,0,400,0,248,0],['bbCurve8310Titanium','Rim','Blackberry Curve 8310','Titanium',0,0,0,264,0,155,0],['bbCurve8320SapphireBlue','Rim','Blackberry Curve 8320','Sapphire Blue',0,0,0,250,0,147,0],['bbPearl8110Black','Rim','Blackberry Pearl 8110','Black',0,0,0,400,0,193,0],['bbPearl8110Pink','Rim','Blackberry Pearl 8110','Pink',0,0,0,348,0,168,0],['bbPearl8110Red','Rim','Blackberry Pearl 8110','Red',0,0,0,366,0,174,0],['bbPearl8110Titanium','Rim','Blackberry Pearl 8110','Titanium',1,23,134,291,400,140,293],['htc2125','HTC','2125','',0,0,0,400,0,164,0],['htc3125','HTC','3125','',1,68,259,400,774,215,215],['htc6800','HTC','6800','',1,23,134,400,400,213,332],['htcFuze','HTC','Fuze','',1,21,134,400,400,204,345],['htcMogul','HTC','Mogul','',1,23,134,400,400,214,336],['htcP4350','HTC','P4350','',0,0,0,400,0,231,0],['htcS620','HTC','S5620','',0,0,0,400,0,226,0],['htcSDA','HTC','SDA','',0,0,0,400,0,170,0],['htcShadow','HTC','Shadow','',1,46,170,400,509,221,221],['htcTouch6900','HTC','Touch 6900','',0,0,0,400,0,246,0],['htcTouchDiamond6950','HTC','Touch Diamond 6950','',1,28,134,400,400,207,274],['htcTouchPro','HTC','Touch Pro','',1,21,134,400,400,205,340],['ky2325','Kyocera','2325','',0,0,0,400,0,143,0],['kyE2000','Kyocera','E2000','',1,68,251,400,750,233,233],['kyK404','Kyocera','K404','',0,0,0,400,0,147,0],['kyK612','Kyocera','K612','',1,22,134,400,400,199,331],['kyKX1V','Kyocera','KX10','',1,51,188,400,563,165,165],['kyKX414','Kyocera','KX414','',0,0,0,400,0,150,0],['kyKX444','Kyocera','KX444','',0,0,0,235,0,90,0],['kyKX9D','Kyocera','KX9D','',1,53,197,400,588,176,176],['kyKXs','Kyocera','KXs','',1,55,205,400,614,180,180],['kyoK127','Kyocera','K127','',1,66,254,387,729,198,198],['kyoK323','Kyocera','K323','',1,68,253,400,758,213,213],['kyoK325','Kyocera','K325','',1,69,253,348,654,181,181],['kyoKX10','Kyocera','KX10','',0,0,0,400,0,148,0],['kyoKX5-5C1','Kyocera','KX5-5C1','',1,42,158,400,472,170,170],['kySE47','Kyocera','SE47','',1,43,160,400,478,188,188],['lg260Gold','LG','260','Gold',1,24,134,400,400,187,278],['lg300','LG','300','',1,68,250,400,745,209,209],['lg380','LG','380','',1,66,239,214,381,110,110],['lg830','LG','830','',1,50,183,400,545,206,206],['lgA7110','LG','A7110','',1,42,157,400,469,179,179],['lgAX140','LG','AX140','',0,0,0,378,0,211,0],['lgC1300','LG','C1300','',1,56,212,400,636,183,183],['lgC1500','LG','C1500','',1,53,200,400,599,171,171],['lgC2000','LG','C2000','',1,56,206,400,612,175,175],['lgCE110','LG','CE110','',1,65,240,266,473,138,138],['lgCE500','LG','CE500','',1,58,209,400,628,174,174],['lgCF360','LG','CF360','',1,48,179,400,537,192,192],['lgCU320','LG','CU320','',1,47,176,400,529,192,192],['lgCU400','LG','CU400','',1,58,211,400,632,186,186],['lgCU515Plum','LG','CU515','Plum',0,0,0,400,0,113,0],['lgCU575','LG','CU575','',1,69,253,379,719,199,199],['lgF9100','LG','F9100','',0,0,0,400,0,193,0],['lgF9200','LG','F9200','',1,23,134,400,400,181,279],['lgG4011','LG','G4011','',1,51,191,400,572,180,180],['lgIncite','LG','Incite','',1,37,134,400,403,207,207],['lgInvision','LG','Invision','',1,36,134,400,400,209,210],['lgL1400','LG','L1400','',1,55,211,400,626,193,193],['lgLotusBlack','LG','Lotus','',1,67,250,294,547,221,221],['lgLotusPurple','LG','Lotus','',1,68,255,295,561,222,222],['lgLX1200','LG','L1200','',1,56,203,400,613,175,175],['lgLX400','LG','LX 400','',1,67,250,400,742,211,211],['lgLX550','LG','LX550','',1,57,214,400,635,178,178],['lgMM-535','LG','MM-535','',1,42,155,400,461,163,163],['lgMuziqPink','LG','Muziq','',1,70,261,375,727,198,198],['lgPM-225','LG','PM-225','',1,66,244,400,731,210,210],['lgPM-325','LG','PM-325','',1,45,165,400,496,189,189],['lgRumorBlack','LG','Rumor','',1,24,134,400,400,185,283],['lgRumorGreen','LG','Rumor','',0,0,0,400,0,185,0],['lgRumorWhite','LG','Rumor','',1,24,134,400,400,186,283],['lgShineBlack','LG','Shine','Black',1,49,186,211,292,107,107],['lgShineRed','LG','Shine','Red',1,52,192,277,394,144,144],['lgShineSilver','LG','Shine','Silver',1,51,186,400,554,206,206],['lgVI-125','LG','VI-125','',1,65,245,378,685,199,199],['lgVI-5225','LG','VI-5225','',1,67,246,400,731,217,217],['lgVUBlack','LG','VU','Black',1,34,134,391,400,198,211],['lgVuWine','LG','VU','Wine',0,0,0,393,0,201,0],['lgVX10000','LG','VX10000','',0,0,0,400,0,220,0],['lgvx3100','LG','VX3100','',1,54,207,400,614,181,181],['lgVX3200','LG','VX3200','',1,48,185,400,549,172,172],['lgVX3300','LG','VX3300','',1,54,197,400,589,176,176],['lgVX4400','LG','VX4400','',1,51,194,400,579,182,182],['lgVX4500','LG','VX4500','',1,53,198,400,590,179,179],['lgVX4650','LG','VX4650','',1,53,191,400,573,183,183],['lgVX4700','LG','VX4700','',1,51,192,400,580,181,181],['lgVX5200','LG','VX5200','',1,53,198,400,594,180,180],['lgVX6000','LG','VX6000','',1,50,184,400,549,185,185],['lgVX6100','LG','VX6100','',1,53,200,400,594,181,181],['lgVX7000','LG','VX7000','',1,53,197,400,591,177,177],['lgVX8000','LG','VX8000','',1,54,196,400,585,173,173],['lgVX8100','LG','VX8100','',1,56,209,400,624,191,191],['lgVX8300','LG','VX8300','',1,54,201,400,599,176,176],['lgVX8500','LG','VX8500','',1,48,179,400,535,200,200],['lgVX8550','LG','VX8550','',1,45,173,400,517,194,194],['lgVX9100Black','LG','VX9100','Black',1,20,134,400,400,213,387],['lgVX9400','LG','VX9400','',1,25,134,400,400,194,274],['lgVX9800','LG','VX9800','',1,21,134,400,400,184,320],['motA630','Motorola','A630','',1,21,134,400,400,211,355],['motA845','Motorola','A845','',0,0,0,400,0,166,0],['motBuzzic502','Motorola','Buzz ic502 ','',1,51,196,384,558,174,174],['motC139','Motorola','C139','',0,0,0,400,0,185,0],['motC290','Motorola','C290','',1,54,195,400,584,174,174],['motC650','Motorola','C650','',0,0,0,400,0,175,0],['motE815','Motorola','E815','',1,53,198,400,594,180,180],['moti265','Motorola','i265','',0,0,0,400,0,152,0],['moti335','Motorola','i335','',1,35,134,400,400,157,162],['moti355','Motorola','i355','',0,0,0,310,0,133,0],['moti365','Motorola','i365','',0,0,0,400,0,136,0],['moti560','Motorola','i560','',1,53,198,400,589,190,190],['moti576','Motorola','i576','',1,53,194,400,575,175,175],['moti580','Motorola','i580','',0,0,0,342,0,154,0],['moti615','Motorola','i615','',1,55,199,258,385,120,120],['moti670','Motorola','i670','',0,0,0,297,0,143,0],['moti730','Motorola','i730','',1,55,201,400,601,185,185],['moti760','Motorola','i760','',0,0,0,400,0,187,0],['moti776','Motorola','i776','',1,55,204,363,551,159,159],['moti830','Motorola','i830','',1,57,211,400,626,187,187],['moti850','Motorola','i850','',1,54,197,400,592,186,186],['moti860','Motorola','i860','',1,55,204,400,606,187,187],['moti870','Motorola','i870','',1,54,204,400,610,191,191],['moti880','Motorola','i880','',0,0,0,344,0,156,0],['moti920','Motorola','i920','',0,0,0,286,0,138,0],['motKRZRK1m','Motorola','KRZR K1m','',0,0,0,400,0,174,0],['motL7089','Motorola','L7089','',0,0,0,400,0,127,0],['motMOTOZ9','Motorola','MOTOZ9','',0,0,0,370,0,179,0],['motMPx220','Motorola','MPx220','',1,61,226,400,677,201,201],['motoQ','Motorola','Q','',0,0,0,400,0,225,0],['motoSLVRL7c','Motorola','SLVR L7c','',0,0,0,400,0,177,0],['motPEBLU6','Motorola','PEBL U6','',1,66,253,391,738,222,222],['motQ9c','Motorola','Q9c','',1,35,134,367,400,207,227],['motQ9H','Motorola','Global ','',0,0,0,400,0,267,0],['motQglobal','Motorola','Q Global','',1,36,134,400,401,234,234],['motRAZR2V9m','Motorola','RAZR2 V9m','',1,66,244,400,730,209,209],['motRAZR2V9XBlack','Motorola','RAZR2 V9X','Black',0,0,0,399,0,210,0],['motRAZRV3Pink','Motorola','RAZR V3','Pink',1,63,233,400,695,221,221],['motRAZRV3aBlack','Motorola','RAZR V3a','Black',1,64,237,400,703,220,220],['motRAZRV3aGray','Motorola','RAZR V3a','Pearl Gray',0,0,0,400,0,221,0],['motRAZRV3aRed',null,null,'',0,0,0,400,0,218,0],['motRAZRV3c','Motorola','RAZR V3c','',1,61,228,382,650,214,214],['motRAZRV3mRed','Motorola','RAZR V3m','Red',1,63,230,400,690,219,219],['motRAZRV3mSilver','Motorola','RAZR V3m','Silver',1,63,231,400,692,219,219],['motRAZRV3xx','Motorola','RAZR V3xx','',1,62,228,387,658,202,202],['motRAZRV3XXGrey','Motorola','RAZR V3XX','Grey',1,62,232,271,468,143,143],['motRAZRV3XXLavender','Motorola','RAZR V3XX','Lavender',0,0,0,399,0,209,0],['motRAZRV3XXPink','Motorola','RAZR V3XX','Pink',0,0,0,279,0,145,0],['motRAZRV3XXPlatinum','Motorola','RAZR V3XX','Platinum',1,58,215,400,640,208,208],['motRAZRV3XXRed','Motorola','RAZR V3XX','Red',1,61,223,400,664,208,208],['motRAZRVE20','Motorola','RAZR VE20','',1,54,206,400,612,205,205],['motRenegadev950','Motorola','Renegade v950','',1,63,238,400,714,216,216],['motRIZRZ3','Motorola','RIZR Z3','',1,50,181,400,542,174,174],['motROKRE1','Motorola','ROKR E1','',0,0,0,400,0,173,0],['motROKRZ6m','Motorola','ROKR Z6m','',1,50,189,387,542,172,172],['motT720','Motorola','T720','',1,57,209,400,622,187,187],['motTundra','Motorola','Tundra','',1,56,209,400,626,189,189],['motV173','Motorola','V173','',1,54,201,400,601,167,167],['motV180','Motorola','V180','',1,53,200,400,595,170,170],['motV188','Motorola','V188','',1,52,191,400,566,175,175],['motV190','Motorola','V190','',1,54,205,400,612,182,182],['motV195','Motorola','V195','',1,62,233,394,691,213,213],['motV220','Motorola','V220','',1,53,199,400,594,179,179],['motV265','Motorola','V265','',1,46,179,400,530,172,172],['motV276','Motorola','V276','',1,56,206,400,614,185,185],['motV300','Motorola','V300','',1,52,200,400,594,193,193],['motV360','Motorola','V360','',1,62,236,400,707,216,216],['motV365','Motorola','V365','',1,69,254,345,653,180,180],['motV400','Motorola','V400','',1,56,201,400,607,184,184],['motV505','Motorola','V505','',1,53,202,400,606,183,183],['motV551','Motorola','V551','',1,54,203,400,605,191,191],['motV555','Motorola','V555','',1,54,201,400,606,190,190],['motV557','Motorola','V557','',1,56,208,400,620,188,188],['motV600','Motorola','V600','',1,56,205,400,608,184,184],['motV60i','Motorola','V60i','',1,55,203,400,605,176,176],['motV60p','Motorola','V60p','',1,57,206,400,615,173,173],['motV60t','Motorola','V60t','',1,51,192,400,571,167,167],['motV65p','Motorola','V65p','',1,50,191,400,567,169,169],['motV66','Motorola','V66','',1,51,192,400,573,170,170],['motV710','Motorola','V710','',0,0,0,400,0,180,0],['motW315Black','Motorola','W315','Black',1,55,201,318,476,147,147],['motW315Red','Motorola','W315','Red',1,56,203,343,518,158,158],['motW385Blue','Motorola','W385','Blue',1,63,230,400,686,185,185],['motW385Gray','Motorola','W385','Gray',1,63,230,395,679,183,183],['motW490','Motorola','W490','',1,61,221,400,664,186,186],['nok1606','Nokia','1606','',1,69,256,340,650,180,180],['nok2135','Nokia','2135','',0,0,0,400,0,166,0],['nok2600Black','Nokia','2600','Black',0,0,0,392,0,170,0],['nok2600Red','Nokia','2600','Red',0,0,0,337,0,143,0],['nok2610Black','Nokia','2610','Black',0,0,0,294,0,123,0],['nok2610Gray-and-Black','Nokia','2610','Gray and Black',0,0,0,400,0,167,0],['nok2865','Nokia','2865','',1,34,134,400,400,159,162],['nok3100','Nokia','3100','',0,0,0,400,0,167,0],['nok3120Red','Nokia','3120','Red',1,35,134,389,400,161,171],['nok3120b','Nokia','3120b','',0,0,0,400,0,168,0],['nok3200b','Nokia','3200b','',0,0,0,400,0,167,0],['nok3220','Nokia','3220','',0,0,0,400,0,188,0],['nok3300','Nokia','3300','',0,0,0,400,0,222,0],['nok3390','Nokia','3390','',0,0,0,400,0,173,0],['nok3555','Nokia','3555','',1,64,244,400,733,183,183],['nok3588i','Nokia','3588i','',0,0,0,400,0,168,0],['nok3595','Nokia','3595','',0,0,0,400,0,169,0],['nok3620','Nokia','3620','',0,0,0,400,0,179,0],['nok3650','Nokia','3650','',0,0,0,400,0,181,0],['nok5300','Nokia','5300','',1,50,191,380,544,205,205],['nok5310','Nokia','5310','',0,0,0,400,0,208,0],['nok6010','Nokia','6010','',0,0,0,400,0,169,0],['nok6015i','Nokia','6015i','',0,0,0,400,0,181,0],['nok6016i','Nokia','6016i','',0,0,0,400,0,185,0],['nok6030','Nokia','6030','',0,0,0,400,0,173,0],['nok6061','Nokia','6061','',1,58,219,400,649,178,178],['nok6085Black','Nokia','6085','Black',0,0,0,309,0,158,0],['nok6085Pink','Nokia','6085','Pink',1,62,234,245,429,132,132],['nok6102','Nokia','6102','',1,53,203,400,602,181,181],['nok6103','Nokia','6103','',1,58,212,400,637,186,186],['nok6133','Nokia','6133','',1,64,239,400,710,211,211],['nok6200','Nokia','6200','',0,0,0,400,0,173,0],['nok6225','Nokia','PM-6225','',0,0,0,400,0,174,0],['nok6230','Nokia','6230','',0,0,0,400,0,175,0],['nok6235','Nokia','6235','',0,0,0,400,0,162,0],['nok6255','Nokia','6255','',0,0,0,400,0,175,0],['nok6310i','Nokia','6310i','',0,0,0,400,0,148,0],['nok6600','Nokia','6600','',0,0,0,400,0,218,0],['nok6610','Nokia','6610','',0,0,0,400,0,170,0],['nok6620','Nokia','6620','',0,0,0,400,0,217,0],['nok6650Red','Nokia','6050','Red',0,0,0,203,0,99,0],['nok6650Silver','Nokia','6650','Silver',1,65,243,400,728,189,189],['nok6682','Nokia','6682','',0,0,0,400,0,200,0],['nok6800','Nokia','6800','',1,51,193,400,579,192,192],['nok6820','Nokia','6820','',1,52,193,400,580,177,177],['nok7210','Nokia','7210','',0,0,0,400,0,170,0],['nok7610','Nokia','7610','',0,0,0,400,0,198,0],['nok8290','Nokia','8290','',0,0,0,400,0,180,0],['nok8801','Nokia','8801','',1,45,171,400,510,170,170],['nokE62','Nokia','E62','',0,0,0,400,0,247,0],['nokN75','Nokia','N75','',1,68,252,400,752,221,221],['nokNGAGE','Nokia','N-Gage','',0,0,0,400,0,232,0],['nokNGageQD','Nokia','N-Gage QD','',0,0,0,400,0,231,0],['palmCentroBlack','Palm','Centro','',0,0,0,400,0,196,0],['PalmCentroElectricBlue','Palm','Centro','Electric Blue',0,0,0,400,0,198,0],['palmCentroGlacierWhite','Palm','Centro','Glacier White',0,0,0,400,0,206,0],['palmCentroObsidianBlack','Palm','Centro','Obsidian Black',1,36,136,400,403,202,202],['palmCentroOnyxblack','Palm','Centro','',1,36,134,400,402,201,201],['palmCentroPink','Palm','Centro','',0,0,0,375,0,187,0],['palmCentroRed','Palm','Centro','',0,0,0,400,0,200,0],['palmCentroVibrantrose','Palm','Centro','',0,0,0,400,0,199,0],['palmTreo650','Palm','Treo 650','',0,0,0,400,0,194,0],['palmTreo800w','Palm','Treo 800w','',0,0,0,400,0,224,0],['panBreeze','Pantech','Breeze','',1,68,248,356,657,175,175],['panC120','Pantech','C120','',0,0,0,400,0,170,0],['panC300','Pantech','C300','',1,53,193,400,580,198,198],['panC610FlameRed','Pantech','C610','Flame Red',1,68,253,286,537,142,142],['panDuoBlack','Pantech','Duo','Black',1,25,134,400,400,197,284],['panDuoRed','Pantech','Duo','Red',1,25,134,295,400,146,283],['panMatrixGreen','Pantech','Matrix','Green',1,25,134,298,400,146,286],['panMatrixNavyBlue','Pantech','Matrix','Navy Blue',1,24,134,226,400,109,282],['panMatrixRed','Pantech','Matrix','Red',0,0,0,300,0,148,0],['panSlateC530','Pantech','Slate C530','',0,0,0,400,0,239,0],['rim7100','RIM','Blackberry 7100','',0,0,0,400,0,197,0],['rim7130','RIM','Blackberry 7130','',0,0,0,400,0,196,0],['rim7290','RIM','BlackBerry 7290','',0,0,0,400,0,265,0],['rim8100g','RIM','BlackBerry 8100g','',0,0,0,400,0,188,0],['rim8320','RIM','BlackBerry 8320','',0,0,0,400,0,233,0],['rim8330Titanium','RIM','BlackBerry 8330','',0,0,0,400,0,235,0],['rim8700g','RIM','BlackBerry 8700g','',0,0,0,400,0,252,0],['rim8703e','RIM','BlackBerry 8703e','',0,0,0,400,0,253,0],['rim8800','RIM','BlackBerry 8800','',0,0,0,400,0,224,0],['rim8820','RIM','BlackBerry 8820','',0,0,0,400,0,237,0],['rimBlackberry7100iSilver','Rim','Blackberry 7100i','',1,38,137,400,410,173,173],['rimBlackberryCurveRed','Rim','Blackberry Curve','',0,0,0,400,0,232,0],['rimBlackberryCurveTitanium','Rim','Blackberry Curve','',1,37,136,400,409,234,234],['rimBlackberryCurve8350i','Rim','Blackberry Curve 8350i','',0,0,0,400,0,229,0],['rimBlackberryPearl8130Red','Rim','Blackberry Pearl 8130','',0,0,0,400,0,188,0],['rimPearl8130Amethyst','RIM','BlackBerry Pearl 8130','Amethyst',0,0,0,400,0,192,0],['rimWorld8830','RIM','BlackBerry World 8830','',0,0,0,380,0,229,0],['samA237Black','Samsung','A237','Black',1,64,242,299,538,160,160],['samA237Blue','Samsung','A237','Blue',1,64,242,232,417,124,124],['samA237Red','Samsung','A237','Red',1,64,242,310,558,166,166],['samA437Red','Samsung','A437','Red',1,69,254,215,410,113,113],['samA437Slate','Samsung','A437','Slate',1,65,240,280,500,146,146],['samA530','Samsung','SCH-A530','',1,58,210,400,629,186,186],['samA637','Samsung','A637','',1,37,136,371,377,164,164],['samA767PropelBlue','Samsung','A767','Blue',1,50,188,270,379,167,167],['samA767PropelGreen','Samsung','A767','Green',1,50,185,327,448,199,199],['samA767PropelRed','Samsung','A767','Red',1,50,182,343,468,206,206],['samA767PropelWhite','Samsung','A767','White',0,0,0,336,0,200,0],['samAccess','Samsung','Access','',0,0,0,400,0,207,0],['samAce','Samsung','Ace','',0,0,0,400,0,201,0],['samBlackJackIIBlue','Samsung','BlackJack II','Blue',1,37,138,400,411,221,221],['samBlackJackIIPink','Samsung','BlackJack II','Pink',1,36,136,400,405,224,224],['samBlackJackIIRed','Samsung','BlackJack II','Red',0,0,0,400,0,213,0],['samEPIX','Samsung','EPIX','',1,35,134,364,365,196,196],['samEternity','Samsung','Eternity','',0,0,0,310,0,162,0],['samHighnoteBlue','Samsung','Highnote','',0,0,0,400,0,197,0],['samHighnoteRed','Samsung','Highnote','',1,46,174,375,489,191,191],['samInstinctBlack','Samsung','Instinct','',1,34,134,374,400,179,202],['samInstinctPink','Samsung','Instinct','',0,0,0,400,0,192,0],['samM220','Samsung','M220','',1,68,248,400,743,207,207],['samM300Red','Samsung','M300','',0,0,0,400,0,208,0],['samM300Silver','Samsung','M300','',0,0,0,318,0,165,0],['samM520','Samsung','M520','',1,48,180,374,499,189,189],['samR300','Samsung','R300','',1,61,234,400,695,205,205],['samR430','Samsung','R430','',1,67,248,400,737,208,208],['samR500Red','Samsung','R500','Red',1,62,231,400,694,213,213],['samRantBlack','Samsung','Rant','',1,23,134,400,400,191,299],['samRantBrightRed','Samsung','Rant','',1,24,134,400,400,185,278],['samRantPurple','Samsung','Rant','',1,22,134,400,400,178,292],['samRugbyA837Black','Samsung','Rugby A837','Black',1,72,264,280,554,147,147],['samRugbyA837Burgundy','Samsung','Rugby A837','Burgundy',1,65,238,400,714,210,210],['samRugbyA837Yellow','Samsung','Rugby A837','Yellow',1,65,238,400,711,209,209],['samSCH-650','Samsung','SCH-A650','',1,55,201,400,599,197,197],['samSCH-A310','Samsung','SCH-A310','',1,56,205,400,607,184,184],['samSCH-a630','Samsung','SCH-A630','',1,59,217,390,627,214,214],['samSCH-a670','Samsung','SCH-A670','',1,55,207,400,615,178,178],['samSCH-a870','Samsung','SCH-a870','',0,0,0,228,0,120,0],['samSCH-A970','Samsung','SCH-A970','',1,63,239,400,713,227,227],['samSCH-i500','Samsung','SCH-i500','',1,52,198,400,589,226,226],['samSCH-i600','Samsung','SCH-i600','',1,58,210,400,630,207,207],['samSCH-n330','Samsung','SCH-N330','',1,42,161,400,478,205,205],['samSGH-A707','Samsung','SGH-AZ07','',1,67,248,400,742,209,209],['samSGH-A740','Samsung','PM-A740','',1,52,194,400,582,189,189],['samSGH-c207','Samsung','SGH-C207','',0,0,0,400,0,166,0],['samSGH-C225','Samsung','SGH-C225','',0,0,0,400,0,149,0],['samSGH-C417','Samsung','SGH-C417','',1,59,215,400,644,186,186],['samSGH-d307','Samsung','SGH-D307','',1,68,257,400,767,224,224],['samSGH-D357','Samsung','SGH-D357','',1,60,220,400,659,198,198],['samSGH-D407','Samsung','SGH-D407','',1,58,218,400,646,190,190],['samSGH-d415','Samsung','SGH-D415','',1,43,157,400,472,177,177],['samSGH-D807','Samsung','SGH-D807','',1,47,179,400,533,215,215],['samSGH-E105','Samsung','SGH-E105','',1,53,201,400,604,192,192],['samSGH-e315','Samsung','SGH-E315','',1,55,205,400,610,188,188],['samSGH-e317','Samsung','SGH-E317','',1,57,209,400,621,196,196],['samSGH-e335','Samsung','SGH-E335','',1,60,231,351,601,190,190],['samSGH-E635','Samsung','SGH-E635','',1,50,192,400,571,205,205],['samSGH-E715','Samsung','SGH-E715','',1,66,242,400,718,208,208],['samSGH-i617','Samsung','SGH-i617','',0,0,0,400,0,218,0],['samSGH-p207','Samsung','SGH-P207','',1,58,213,400,635,185,185],['samSGH-p735','Samsung','SGH-P735','',1,52,198,400,591,182,182],['samSGH-T639','Samsung','SGH-T639','',1,62,236,400,702,238,238],['samSGH-T729','Samsung','SGH-T729','',1,47,182,400,540,205,205],['samSLMBlue','Samsung','SLM','Blue',1,63,237,400,703,202,202],['samZ400','Samsung','Z400','',1,48,176,372,487,194,194],['sanKatanaEclipseXBlack','Sanyo','Katana Eclipse X','',0,0,0,400,0,199,0],['sanKatanaEclipseXPink','Sanyo','Katana Eclipse X','',0,0,0,248,0,129,0],['sanKatanaLXBlack','Sanyo','Katana LX','',0,0,0,400,0,209,0],['sanKatanaLXElegant-Pink','Sanyo','Katana LX','',0,0,0,251,0,131,0],['sanKatanaLXPacific-Blue','Sanyo','Katana LX','',0,0,0,254,0,135,0],['sanPro200','Sanyo','Pro 200','',1,32,134,400,400,180,198],['sanPro700','Sanyo','Pro 700','',0,0,0,389,0,216,0],['shaTM150','Sharp','TM150','',1,61,221,400,660,185,185],['siemC61','Siemens','C61','',0,0,0,400,0,171,0],['siemCF62T','Siemens','CF62T','',1,59,219,400,653,200,200],['siemCT66','Siemens','CT66','',0,0,0,400,0,183,0],['siemM56','Siemens','M56','',0,0,0,400,0,185,0],['siemS56','Siemens','S56','',0,0,0,400,0,187,0],['siemS66','Siemens','S66','',0,0,0,400,0,181,0],['sonEricssonW300i','Sony Ericsson','W300i','',1,62,233,322,558,170,170],['sonEricssonW350ElectricBlack','Sony Ericsson','W350','Electric Black',1,48,183,354,485,151,151],['sonEricssonW350IceBlue','Sony Ericsson','W350','Ice Blue',1,48,183,400,542,169,169],['sonEricssonW350white','Sony Ericsson','W350','White',1,49,180,280,373,114,114],['sonEricssonW580Silver','Sony Ericsson','W580','Silver',1,47,174,400,522,189,189],['sonEricssonW760aRed','Sony Ericsson','W760a','Red',1,47,174,400,522,189,189],['sonEricssonZ310aJetBlack','Sony Ericsson','Z310a','Jet Black',0,0,0,280,0,147,0],['sonEricssonZ750a','Sony Ericsson','Z750a','',1,60,226,383,650,195,195],['sonerP900','Sony Ericsson','P900','',1,47,174,400,519,209,209],['sonerS710a','Sony Ericsson','S710a','',1,55,199,400,594,185,185],['sonerT226','Sony Ericsson','T226','',0,0,0,400,0,174,0],['sonerT237','Sony Ericsson','T237','',0,0,0,400,0,176,0],['sonerT290a','Sony Ericsson','T290a','',0,0,0,400,0,175,0],['sonerT306','Sony Ericsson','T306','',0,0,0,400,0,185,0],['sonerT610','Sony Ericsson','T610','',0,0,0,400,0,175,0],['sonerT637','Sony Ericsson','T637','',0,0,0,400,0,174,0],['sonerT68i','Sony Ericsson','T68i','',0,0,0,400,0,190,0],['sonerW300i','Sony Ericsson','W300i','',1,62,237,400,703,214,214],['sonerW600i','Sony Ericsson','W600i','',1,51,189,400,568,189,189],['sonerW810i','Sony Ericsson','W810i','',0,0,0,400,0,190,0],['sonerZ300a','Sony Ericsson','Z300a','',1,65,248,397,736,214,214],['sonerZ500a','Sony Ericsson','Z500a','',1,65,247,400,742,216,216],['sonerZ520A','Sony Ericsson','Z520a','',1,62,227,400,678,209,209],['toshVM-4050','Toshiba','CDM-9950SP','',1,55,201,400,600,176,176],['ut8932','UTStarcom','8932','',1,55,199,400,596,174,174],['ut8955','UTStarcom','8932','',0,0,0,296,0,133,0],['utCDM-8915','UTStarcom','CDM-8915','',1,53,197,400,589,179,179],['utPCS1400vm','UTStarcom','PCS-1400vm','',0,0,0,400,0,172,0],['utPCS1450VM','UTStarcom','PCS-1450vm','',0,0,0,400,0,177,0],['htcHero','htcHero','htcHero','',1,32,144,415,415,190,180]];var ds=new Ext.data.Store({proxy:new Ext.data.MemoryProxy(phones),reader:new Ext.data.ArrayReader({id:0},Zw.data.PhoneRecord)});ds.load();Zw.util.log("INFO: Loading PhoneRecords into store. count of records:"+ds.getCount());return ds;}
Zw.data.Phone={phoneKey:null,make:null,model:null,sub_model:null,has_flip:null,normal_flip_h:null,ec_flip_h:null,zoom_front_h:null,zoom_front_w:null,zoom_flip_w:null,PhoneList:null,_makeList:null,PathNormalBase:'',PathNormalMouseover:'',PathNormalMousedown:'',phoneIconPath:"//beta.zipwhip.com/phones/Base",generic_phoneIconImg:"motRIZRZ3_fp.png",generic_phoneIconPath:"../../images/phone/small/front/base",generic_phoneIconHoverPath:"../../images/phone/small/front/hover",generic_phoneIconDownPath:"../../images/phone/small/front/down",GetMakeList:function(){if(!this._makeList){this._makeList=new Ext.data.SimpleStore({fields:['make_key','make'],id:0,data:[['','('+Zw.localize('generic.text.removeFilter')+')'],['apple','Apple'],['aud','Audiovox'],['htc','HTC'],['kyo','Kyocera'],['lg','LG'],['mot','Motorola'],['nok','Nokia'],['palm','Palm'],['pan','Pantech'],['rim','RIM'],['sam','Samsung'],['san','Sanyo'],['sha','Sharp'],['siem','Siemens'],['soner','Sony Ericsson'],['tosh','Toshiba'],['ut','UTStarcom']]});}
return this._makeList;},GetBaseSprite:Ext.emptyFn,GetEditContactSprite:Ext.emptyFn,GetZoomSprite:Ext.emptyFn,GetBasePhoneIconClass:Ext.emptyFn,GetEditPhoneIconClass:Ext.emptyFn,GetZoomPhoneIconClass:Ext.emptyFn,applyLargePhoneStyle:function(phoneKey,el){var url=this.GetEditContactSprite(phoneKey);el.setStyle('background-image',String.format("url('{0}')",url));}}
Zw.data.Phone.PhoneList=new Zw.data.PhoneListStore();

Zw.Plugin=Ext.extend(Ext.util.Observable,{_autoInitsPlugins:true,initialized:false,clonePluginArray:true,requireClient:false,client:null,log:Ext.emptyFn,autoDestroy:true,identifier:null,destroyEvent:'beforeDestroy',autoInit:false,constructor:function(config){Ext.apply(this,config);this.events=[];this.initialConfig=config||{};if(this.autoInit){this.init(this.client);}},init:function(client){this._init(client);this.initialized=true;var c=this.client;if(this.requireClient&&!c)
return;this.onInit(c);},_init:function(client){this.client=client;if(this.requireClient&&!this.client)
return;this.destroyables=[];if(this.identifier){this.log=Zw.console;}
if(this.client&&this.autoDestroy){if(this.client.on&&!Ext.isEmpty(this.destroyEvent)){this.client.on(this.destroyEvent,this.beforeDestroy,this,{single:true});}}
if(this.plugins){this.initPlugins();}},destroyDestroyable:function(fn,scope,tag,thing){fn.call(scope,thing);if(tag)
delete this[tag];},destroyDestroyables:function(){Ext.each(this.destroyables,function(args){var fn,scope,tag,thing;fn=args.fn||Ext.destroy;scope=args.scope||Ext;tag=args.tag;thing=args.target||this[tag];this.destroyDestroyable(fn,scope,tag,thing);delete args.target;},this);delete this.destroyables;},addDestroyable:function(args){this.destroyables.push(args);},addPlugin:function(p){if(Ext.isArray(p)){Ext.each(p,function(pl){this.addPlugin(pl);},this);return;}
this.plugins=this.plugins||[];if(Ext.type(this.plugins)!='array')
this.plugins=[this.plugins];if(this.initialized){p.init(this);}else{this.plugins.push(p);}
return p;},initPlugins:function(){if(!this.pluginConfig){if(this.client){this.pluginConfig=this.client.pluginConfig;}}
if(this.clonePluginArray){var p=[];for(var i=0;i<this.plugins.length;i++){p[i]=this.plugins[i];}
this.plugins=p;}
Ext.each(this.plugins,this.initChildPlugin,this);},initChildPlugin:function(plugin,index){if(Ext.type(plugin)=='string')
plugin=Ext.ComponentMgr.create({},plugin);if(Ext.type(plugin.xtype)=='string')
plugin=Ext.ComponentMgr.create(plugin,plugin.xtype);this.plugins[index]=plugin;plugin.init(this);},getContext:function(){var context=this.context;if(!context)context=this.client.context;if(!context)context=this.client.factory?this.client.factory.context:null;this.context=context;return context;},onInit:Ext.emptyFn,beforeDestroy:function(){Ext.destroy(this);},destroy:function(){if(!this.destroyed){this.onDestroy();this._destroy();return;}
if(Zw.Application.debug){Zw.console("Plugin.js - You tried to destroy me twice.",this);console.trace();}},onDestroy:Ext.emptyFn,_destroy:function(){this.fireEvent('beforeDestroy',this);this.destroyed=true;if(this.client&&this.client.un&&!Ext.isEmpty(this.destroyEvent)){this.client.un(this.destroyEvent,this.beforeDestroy,this,{single:true});}
delete this.initialConfig;delete this.client;delete this.pluginConfig;if(this.plugins){Ext.each(this.plugins,function(plugin){if(!plugin.destroyed){plugin.destroyed=true;Ext.destroy(plugin);}},this);}
this.fireEvent('destroy',this);this.destroyDestroyables();this.purgeListeners();this.suspendEvents();}});Zw.Plugin.initEarlyPlugins=function(){if(this.plugins){if(Ext.isArray(this.plugins)){var plugin,i;for(i=0;((plugin=this.plugins[i]));i++){if(plugin.earlyInit){plugin.earlyInitialized=false;plugin.init(this);plugin.earlyInitialized=true;}}}else{var plugin=this.plugins;if(plugin.earlyInit){plugin.earlyInitialized=false;plugin.init(this);plugin.earlyInitialized=true;}}}};

Zw.namespace('Zw.app');Zw.app.ContextModule=Ext.extend(Zw.Plugin,{requireClient:true,_init:function(client){this.context=client;Zw.app.ContextModule.superclass._init.call(this,client);this.initEvents();delete this.initEvents;},initEvents:function(){var params={single:true};if(this.onInitLevel3)
this.context.on('initLevel3',this.onInitLevel3,this,params);if(this.onInitLevel4)
this.context.on('initLevel4',this.onInitLevel4,this,params);if(this.onInitLevel5)
this.context.on('initLevel5',this.onInitLevel5,this,params);if(this.onStart)
this.context.on('start',this.onStart,this,params);if(this.onRegistered)
this.context.on('registered',this.onRegistered,this,params);if(this.onActivate)
this.context.on('activate',this.onActivate,this);if(this.onDeactivate)
this.context.on('deactivate',this.onDeactivate,this);},publish:function(){var context=this.context;if(context){context.publish.apply(context,arguments);}},subscribe:function(){var context=this.context;if(context){context.subscribe.apply(context,arguments);}},destroyEvents:function(){if(this.onActivate)
this.context.un('activate',this.onActivate,this);if(this.onDeactivate)
this.context.un('deactivate',this.onDeactivate,this);},_destroy:function(){this.destroyEvents();delete this.destroyEvents;Zw.app.ContextModule.superclass._destroy.call(this);delete this.context;}});

Zw.namespace('Zw.app');Zw.app.Device=Ext.extend(Zw.app.ContextModule,{CONVERSATIONS_LIMIT:500,CONTACT_LIMIT:500,cachedContactsCount:null,device:null,contacts:null,messages:null,conversations:null,saved:true,delayMessageList:false,messagesLoading:false,messagesLoaded:false,conversationsLoading:false,conversationsLoaded:false,delayContactList:false,contactsLoading:false,contactsLoaded:false,url:'contact/list',isWebsiteDevice:false,onInit:function(){this.url=Zw.util.getUrl(this.url);if(this.client){this.register();}
this._createContactStore();this._createConversationStore();this._createMessageStore();if(this.client){if(!this.client.authenticated){this.client.subscribe('/account/authenticated',this.onAuthenticated,this);}else{this.load();}}
this.client.subscribe('/signal/message/deleted',this.onMessageDeletedSignal,this);},_createContactStore:function(){var contactsProxy=this.contactsProxy;if(this.contactData&&!contactsProxy){contactsProxy=new Ext.data.MemoryProxy(this.contactData);}else if(!contactsProxy&&(contactsProxy!==false)){contactsProxy=this.contactsProxy=new Ext.data.HttpProxy({url:Zw.util.getUrl('group/members'),method:'GET'});}
if(!this.contacts){this.contacts=new Ext.data.Store({remoteSort:false,sortInfo:{field:'firstName',direction:'ASC'},proxy:contactsProxy,reader:new Ext.data.JsonReader({totalProperty:"pages",root:"response",id:"id"},Zw.data.Contact)});}},_createMessageStore:function(){var messagesProxy=null;if(!this.saved){messagesProxy=new Ext.data.MemoryProxy();}else{messagesProxy=new Ext.data.HttpProxy({url:Zw.util.getUrl('message/list'),method:'GET'});}
this.messages=new Ext.data.Store({remoteSort:false,listeners:{scope:this,'update':this.__onMessageStoreRecordUpdate},sortInfo:{field:'tsSent',direction:'DESC'},proxy:messagesProxy,reader:new Ext.data.JsonReader({totalProperty:'size',root:'response',id:'id'},Zw.data.Message)});},_createConversationStore:function(){var conversationsProxy=null;if(!this.saved){conversationsProxy=new Ext.data.MemoryProxy();}else{conversationsProxy=new Ext.data.HttpProxy({url:Zw.util.getUrl('conversation/list'),method:'GET'});}
this.conversations=new Ext.data.Store({remoteSort:false,listeners:{scope:this,'update':this.__onConversationStoreUpdate},baseParams:{start:0,limit:this.CONVERSATIONS_LIMIT,session:this.getSessionKey()},sortInfo:{field:'lastMessageDate',direction:'DESC'},proxy:conversationsProxy,reader:new Ext.data.JsonReader({totalProperty:'total',root:'response',id:'id'},Zw.data.Conversation)});},getName:function(){var contact=this.contact;if(!contact){contact=this.contact=this.client.context.getContactManager().findContactByAddress(this.getAddress());}
return Zw.util.getFullName(contact);},getAddress:function(){if(!this.address){var mobileNumber=Zw.data.get(this.client.identity,'mobileNumber');this.address=Zw.util.Address.encode({scheme:'device',mobileNumber:mobileNumber,deviceNumber:this.deviceId});}
return this.address;},register:function(){this.client.devices.add(this.getAddress(),this);},setAddress:function(address){this.client.devices.remove(this);this.client.devices.add(this.address=address,this);},setDeviceId:function(deviceId){this.deviceId=deviceId;},getSessionKey:function(){return this.client.getSessionKey();},onAuthenticated:function(){this.load();},load:function(){if(!this.delayContactList)
this.loadContactsFromServer();if(!this.delayMessageList)
this.loadMessagesFromServer();},loadContactsFromServer:function(){if(!this.saved)return;if(this.contactsLoaded)return;if(this.contactsLoading)return;if(!this.contacts.proxy)return;this.contactsLoading=true;this.contacts.load({params:{address:this.getAddress(),session:this.getSessionKey(),page:1,pageSize:this.CONTACT_LIMIT},callback:this.onContactsLoaded,scope:this});},getContacts:function(resolve){if(resolve)
this.loadContactsFromServer();return this.contacts;},onContactsLoaded:function(){this.contactsLoading=false;this.contactsLoaded=true;if(this.context){this.context.publish('/account/device/contacts/loaded',{device:this});}},getMessages:function(){return this.messages;},loadMessagesFromServer:function(){if(!this.saved)return;if(this.messagesLoading){return;}
if(this.messagesLoaded){return;}
this.messagesLoading=true;this.messages.load({params:{session:this.getSessionKey(),total:Zw.messagesToLoad},callback:this.onMessagesLoaded,scope:this});},getConversations:function(){return this.conversations;},loadConversationsFromServer:function(params){if(this.conversationsLoading){return;}
if(!params){params={start:0,limit:this.CONVERSATIONS_LIMIT,session:this.getSessionKey()}}
this.conversations.load({params:params,callback:this.onConversationsLoaded,scope:this});this.conversationsLoading=true;return this.conversations;},onConversationsLoaded:function(){this.conversationsLoaded=true;this.conversationsLoading=false;this.publish('/account/conversations/load',{device:this,conversations:this.conversations});},onMessagesLoaded:function(){this.messagesLoading=false;this.messagesLoaded=true;this.publish('/account/messages/load',{device:this});},onMessageDeletedSignal:function(messages){Ext.each(messages,function(id){var msg=null;if(Ext.type(id)=='string'){msg=this.messages.getById(id);}else{msg=id;}
if(msg){this.messages.remove(msg);}else{}},this);},__onConversationStoreUpdate:function(store,record){this.context.publish(String.format('/account/conversation/update/{0}',record.id),record);},__onMessageStoreRecordUpdate:function(store,record){this.context.publish(String.format('/account/message/update/{0}',record.id),record);},getContactsCount:function(){var count=this.contacts.getCount();if(!this.contacts||(this.cachedContactsCount&&(!this.contactsLoaded))){return this.cachedContactsCount;}else{return count;}},onDestroy:function(){this.client.devices.remove(this.getAddress());delete this.address;}});

Zw.namespace('Zw.app');Zw.app.Account=Ext.extend(Zw.app.ContextModule,{validated:false,sessionKey:null,m_defaultNumber:'5555555555',oldSessionKey:null,identity:null,account:null,authenticated:false,devices:null,onInit:function(){var identity=this.identity=new Zw.data.Contact({mobileNumber:'555-555-5555',lastName:'',firstName:'',phoneKey:'',phoneModel:'',phoneDesc:'',notes:'',channel:'01',thread:'20000001',loc:'',MOCount:0,ZOCount:0},-1);this.devices=new Ext.util.MixedCollection();var account=this.account;if(account){if(account.groups){this.initDevices(account.groups);}
this.useLocalData=this.account.useLocalData;this.sessionKey=account.session||this.sessionKey;this.validated=account.validated||this.validated;this.oldSessionKey=account.oldSession;identity.endEdit();}
if(this.isGuest()){identity.set('firstName',Zw.localize('generic.text.unnamed'));identity.set('lastName','');identity.set('phone','zw-masq-phone1');}
this.websiteDevice=new Zw.app.Device({deviceId:0,contactsProxy:new Zw.util.ContactsProxy({url:Zw.util.getUrl('contact/list'),method:'GET'}),isWebsiteDevice:true});this.websiteDevice.contactsProxy.on('step',function(sender,page,pages,total){this.context.publish('/account/device/contacts/loading',{device:this.websiteDevice,sender:sender,page:page,pages:pages,total:total});},this);this.addPlugin(this.websiteDevice);this.addPlugin(new Zw.app.AccountDevicePlugin({}));this.addPlugin(new Zw.app.AccountSignalPlugin({}));this.subscribe('/account/user/upgraded',this._ensureIdentityCardPresent,this);this.subscribe('/account/user/data',this._ensureIdentityCardPresent,this);this.subscribe('/account/contacts/loaded',this.onContactsLoaded,this);this.subscribe('/account/data/save',this.saveContact,this);this.subscribe('/signal/messageProgress/update',this.onMessageProgressUpdate,this);this.addPlugin(new Zw.util.ProxyPlugin({namespace:'/account'}));},onStart:function(){if(this.sessionKey&&!this.validated){this._authenticateSession();}else if(this.sessionKey&&this.validated){this._finalizeSession(this.sessionKey,this.oldSessionKey);}else{this._authenticateSession();}},onMessageProgressUpdate:function(item){var code=Zw.util.convertServerStatusToProgress(item.value);if('5'==code){this.context.publish('/account/message/sendComplete',item);}},initDevices:function(spec){if(spec&&Ext.type(spec)=='array'){Ext.each(spec,this.addDevice,this);}else{this.addDevice(spec);}},isWebsiteAddress:function(addressToCheck){if(!addressToCheck){return false;}
var identityMobileNumber=null;if(this.identity){identityMobileNumber=Zw.data.get(this.identity,'mobileNumber');}
else if(this.account&&this.account.user){identityMobileNumber=this.account.user.mobileNumber;}
if(identityMobileNumber&&"device:/"+identityMobileNumber+"/0"==addressToCheck){return true;}
return false;},isDeviceOwned:function(addressToCheck){if(!addressToCheck){return true;}
if(addressToCheck.indexOf('device')==-1){return true;}
var identityMobileNumber=null;if(this.identity){identityMobileNumber=Zw.data.get(this.identity,'mobileNumber');}
else if(this.account&&this.account.user){identityMobileNumber=this.account.user.mobileNumber;}
if(identityMobileNumber&&addressToCheck.indexOf(identityMobileNumber)==-1){return false;}
return true;},addDevice:function(device){var existing=null;if(device&&!device.init){if(device.address){existing=this.getDeviceByAddress(device.address);}
if(this.isDeviceOwned(device.address)&&!existing&&device.deviceId){existing=this.getDeviceById(device.deviceId);}
if(!existing){device=new Zw.app.Device(Ext.apply(device,{delayContactList:true,delayMessageList:true}));}}
if(!existing)
this.addPlugin(device);},getDevice:function(mixed){var t=Ext.type(mixed);if(t=='string'){return this.getDeviceByAddress(mixed);}else if(t=='number'){return this.getDeviceById(mixed);}
return mixed;},onContactsLoaded:function(){this._ensureIdentityCardPresent();},onValidateSessionFailure:function(){Zw.Application.publish('/network/failure',arguments[2]);},onRegistered:function(){var context=this.context;if(context){context.subscribe('/signal/session/invalid',this._authenticateSession,this);}},updateUserData:function(reason){Zw.Application.Net.getUserData({success:this.updateUserDataSuccess.createDelegate(this,[reason],true),session:this.getSessionKey(),scope:this});},updateUserDataSuccess:function(response,opts,WHATTHEDUCK,reason){this._handleUserData(response,opts,undefined,reason);},getWebsiteDeviceId:function(){return Zw.data.get(this.identity,'websiteDeviceId');},parseContactData:function(data){var store=this.getWebsiteDevice().contacts;var r=store.reader.readRecords({response:data,total:data.length});return r.records;},parseConversationData:function(data){var store=this.getWebsiteDevice().conversations;var r=store.reader.readRecords({response:data,total:data.length});return r.records;},parseMessageData:function(data){var store=this.getWebsiteDevice().messages;var r=store.reader.readRecords({response:data,total:data.length});return r.records;},saveContact:function(args){var contact=args.contact;var success=args.success||Ext.emptyFn;var failure=args.failure||Ext.emptyFn;var scope=args.scope||this;Zw.console("IdentityManager saveContact called");Zw.Application.Net.saveUserData({contact:args.contact.data,session:this.sessionKey,success:success.createInterceptor(function(a,b){this._handleUserData(a,b,undefined,'identityUpdate');return true;},this),failure:failure,scope:scope});},parseIdentity:function(user){var identity=this.identity;if(user){identity.beginEdit();identity.set('firstName',user.firstName);identity.set('lastName',user.lastName);identity.set('phoneKey',user.phoneKey);identity.set('loc',user.loc||user.zipcode);identity.set('notes',user.notes);identity.set('carrier',user.carrier);identity.set('email',user.email);identity.set('zipcode',user.zipcode);identity.set('birthday',user.birthday);identity.set('thread',user.thread||'20000001');identity.set('fwd',user.fwd);var identityMobileNumber=Ext.isEmpty(user.mobileNumber)?this.m_defaultNumber:user.mobileNumber;var identityAddress=Zw.util.Address.encode({mobileNumber:identityMobileNumber,scheme:'websitedevice'});identity.set('address',identityAddress);identity.set('mobileNumber',identityMobileNumber);if(user.websiteDeviceId){var deviceId=-1;deviceId=user.websiteDeviceId;Zw.console("Account - Discovered websiteDeviceId: ",deviceId);this.websiteDevice.deviceId=deviceId;identity.set('websiteDeviceId',deviceId);}
if(user.websiteDeviceKey){identity.set('websiteDeviceKey',user.websiteDeviceKey);}
this.websiteDevice.setAddress(identityAddress);identity.set('ZOCount',user.ZOCount);identity.set('MOCount',user.MOCount);identity.endEdit();}else{identity.beginEdit();identity.set('firstName',Zw.localize('generic.text.unnamed'));identity.set('lastName','');identity.set('mobileNumber','5555555555');identity.endEdit();}},_handleUserData:function(sender,result,useLocal,reason){if(!this.context)
return;var identity=this.identity;var user=null;var settings=null;var groups=null;if(useLocal){user=result.user;settings=result.settings;groups=result.groups;}else{user=result.response.user;settings=result.response.settings;groups=result.response.groups;}
if(groups)
this.initDevices(groups);this.parseIdentity(user);this.context.Desktop.setName(identity.get('firstName'));this.fireEvent('userData',this,user,settings);this.context.publish('/account/user/data',{user:user,settings:settings,reason:reason});},_finalizeSession:function(key,oldKey){var k=this.sessionKey;if(arguments.length==2){k=oldKey;}
this.sessionKey=key;if(this.useLocalData){this._handleUserData(null,this.account,true,'sessionAuthenticated');}else{this.updateUserData('sessionAuthenticated');}
try{this.fireEvent('authenticated',this,this.sessionKey,k);}catch(ex){Zw.console('>>>> exception',ex);}
this.publish(String.format('/account/unauthenticated/{0}',k),k);this.publish(String.format('/account/authenticated/{0}',this.sessionKey),this.sessionKey);this.authenticated=true;},_authenticateSession:function(){Zw.Application.Net.authenticateSession({session:this.sessionKey,success:this._authenticateSession_success,failure:this.onValidateSessionFailure,scope:this});},_authenticateSession_success:function(sender,result){if(!result.success){this.client.publish('/account/authentication/failure',result);}else{this._finalizeSession(result.response);}},onInitLevel4:function(){this.context.getIdentityManager=Zw.util.returnScope(this);},isGuest:function(force){if(!this.authenticated&&!force)
return false;var m=this.getMobileNumber();return Ext.isEmpty(m)||(m==this.m_defaultNumber);},getSessionKey:function(){return this.sessionKey;},getName:function(){if(this.identity){return Zw.data.get(this.identity,'firstName');}else{return Zw.localize('generic.text.guest');}},getAllNames:function(){var identity=this.identity;return{fullName:Zw.util.formatName(identity.get('firstName'),identity.get('lastName'),'full'),firstName:identity.get('firstName'),lastName:identity.get('lastName')};},getMessages:function(){return this.getWebsiteDevice().getMessages();},getContacts:function(){return this.getWebsiteDevice().getContacts();},getConversations:function(){return this.getWebsiteDevice().getConversations();},getDevices:function(){return this.devices;},getWebsiteDevice:function(){return this.websiteDevice;},getPhoneKey:function(){return Zw.data.get(this.identity,'phoneKey');},getDeviceByAddress:function(address){return this.devices.get(address);},getDeviceById:function(id){if(id==this.getWebsiteDeviceId()){return this.getWebsiteDevice();}
var result=null;this.devices.each(function(device){if(device.deviceId==id||device.id==id){result=device;return false;}},this);return result;},_ensureIdentityCardPresent:function(){if(!this.isGuest()){var contacts=this.getWebsiteDevice().getContacts();if(!contacts.getById(-1)){contacts.fireEvent('suspend',contacts);contacts.suspendEvents();contacts.addSorted(this.identity);contacts.resumeEvents();contacts.fireEvent('resume',contacts);}}},getMobileNumber:function(){if(this.identity){return Zw.util.getRawPhoneNumber(Zw.data.get(this.identity,'mobileNumber'));}else{return'5555555555';}},onDestroy:function(){Zw.Application.Settings.removeSession({context:this.context,session:this.sessionKey});delete this.creationManager;}});

Zw.app.InterlinksPlugin=Ext.extend(Zw.Plugin,{onInit:function(){this.activateInterlinks();this.addPlugin(new Zw.util.ProxyPlugin({scope:'app',namespace:'/app/interlinks'}));},activateInterlinks:function(){Ext.getBody().on('click',this.interlinkClick,this);},interlinkClick:function(e,node){if(Ext.fly(node).hasClass('interlink')){e.preventDefault();if(!Ext.fly(node).hasClass('x-item-disabled')){this.handleLink(node);}}},handleLink:function(node){Zw.console(">>>handle");var parts=this.parseIntoParts(node.href);if(parts){var key=parts.key;var queryObject=parts.queryObject;this.publishInterlink(key,queryObject,node);}else{}
Zw.console(">>>handle",node.href,parts);},parseIntoParts:function(url){var match=url.match(/#(\S+)/);var link=(match)?match[1]:null;if(link){var queryObject=null;var parsedLink=link.split('?');var key=parsedLink[0];var queryString=parsedLink[1];if(queryString!==undefined){var pairs=queryString.split('&');var pair,i,parsedPair;queryObject={};for(i=0;((pair=pairs[i]));i+=1){parsedPair=pair.split('=');queryObject[parsedPair[0]]=parsedPair[1];}}
return{key:key,queryObject:queryObject};}
return null;},publishInterlink:function(key,queryObject,node){var context=Zw.Application.Context;context.publish('/desktop/interlink/'+key,{queryObject:queryObject,node:node});Zw.Application.publish('/desktop/interlink/'+key,{queryObject:queryObject,node:node});}});Zw.app.PluginFactory.register('/application/desktop','Zw.app.InterlinksPlugin');

Ext.namespace('Zw');Zw.Application=Ext.extend(Zw.Plugin,{_log:null,m_activeContext:null,m_contexts:null,m_isReady:false,onInit:function(args){this.m_contexts=[];args=args||{};this.addEvents({'ActiveContextChanged':true});this.addPlugin(new Zw.util.ProxyPlugin({scope:'app',namespace:'/application'}));this._setActiveContext(this._loadAndGetDefaultContext(args.contexts),'load');Zw.Application.on('integrated-login',this.onIntegratedLogin,this);},removeContext:function(context,justRemoveDontDoAnythingElse){if(!context)return;Zw.console('Remove Context: ',this.m_contexts,this.m_contexts.length==1);if(this.m_contexts.length==1&&!justRemoveDontDoAnythingElse){Zw.Application.createContext({makeActive:true});}
if(context){if(context.Account.isGuest()){Zw.Application.Net.logout({context:context});}}
Zw.console("Shutting down context",context);this.m_contexts.remove(context);this.publish('/desktop/context/unregister',context);if(context){context.destroy();}
var currentContext=this.m_activeContext;if(currentContext==context){this.m_activeContext=null;Zw.Application.Context=null;if(!justRemoveDontDoAnythingElse){var c=this.m_contexts[this.m_contexts.length-1];this._setActiveContext(c,'switch');}}else{}},_createContext:function(args){args=args||{};Ext.applyIf(args,{contexts:{}});args=Ext.applyIf(args,{log:Zw.Application.Log});var result=new Zw.app.Context(args);this.m_contexts.push(result);result.features=Zw.features.Factory.createAll();this.addPlugin(result);this.publish('/desktop/context/register',result);return result;},_setActiveContext:function(context,reason){if(this.m_activeContext===context)
return;if(this.m_activeContext){this.publish('/app/context/deactivated',this.m_activeContext);this.m_activeContext.deactivate(reason);}
if(!context)
return;var currentContext=this.m_activeContext;if(currentContext&&currentContext.Account.isGuest()){var contacts=currentContext.Account.getContacts();var count=contacts.getCount();if(count==0||count==1){this.removeContext(currentContext,true);currentContext=null;}else{Zw.console("We did not autoremove this context because it has contacts",contacts,contacts.getCount());}}
if(!Zw.capabilities.ALLOW_MASQUERADE){if(currentContext&&!currentContext.revoked){Zw.console("Removing existing context "+this.m_activeContext.Account.getSessionKey());Zw.console("We shutdown the previously active context because we are in SingleContextMode");this.removeContext(this.m_activeContext,true);}}
this.m_activeContext=context;Zw.Application.Context=this.m_activeContext;this.m_activeContext.init();if(this.m_isReady&&context.started){this.m_activeContext.activate(reason);}else if(this.m_isReady&&!context.started){this.m_activeContext.started=true;this.m_activeContext.start(reason);}
this.fireEvent('ActiveContextChanged',this.m_activeContext);this.publish('/app/context/activated',this.m_activeContext);},_loadAndGetDefaultContext:function(contexts){var defaultContext;if(contexts){if(Ext.isArray(contexts)){for(var i=0;i<contexts.length;i++){defaultContext=this._createContext(contexts[i]);}}else{if(Zw.app.Context.isContext(contexts))
defaultContext=contexts;else
defaultContext=this._createContext(contexts);}}else{defaultContext=this._createContext({});}
return defaultContext;},onIntegratedLogin:function(sender,key){if(Zw.Application.debug)
alert("Someone wants an integrated login with key "+key);if(key=='security'){}
this.createContext({active:true,account:{session:key}});},start:function(){this.publish('/app/start');Zw.Application.started=true;this.m_isReady=true;this.m_activeContext.started=true;this.m_activeContext.start();},stop:function(){this._setActiveContext(null);},setActiveContext:function(context,reason){this._setActiveContext(context,reason);},createContext:function(args){var c=this._createContext(args);var makeActive=args.active;if(makeActive)
this._setActiveContext(c,'create');},isActiveContext:function(context){return this.Context==context;},getContextCount:function(){return this.m_contexts.length;},findContextByMobileNumber:function(mobileNumber){mobileNumber=Zw.util.getRawPhoneNumber(mobileNumber);var result=null;Ext.each(this.m_contexts,function(context){var m=context.Account.identity.get('mobileNumber');if(m==mobileNumber){result=context;return false;}});return result;},shouldPromptToLeave:function(){return this.getCurrentContext().shouldPromptToLeave();},getCurrentContext:function(){return this.Context;},Context:null,debug:false});Zw.util.PubSub.apply(Zw.Application);Zw.Application=new Zw.Application();

Ext.namespace('Zw','Zw.app');Zw.app.Context=Ext.extend(Zw.Plugin,{features:null,m_isReady:false,constructor:function(args){this.initialConfig=args;this.features=args.features||[];if(!Zw.Application.debug)
this.errorHandler={scope:this,handler:this.onError};},onInit:function(){if(this.m_isReady)
return;this.subscribe('/net/ajax/request',function(args){if(args){if(args.session===true){if(args.params){args.params.session=this.Account.getSessionKey();}else{args.params={session:this.Account.getSessionKey()}}}}
Zw.Application.Net.request(args);});this.addEvents({'Ready':true,'Start':true,'AfterStart':true,'Activate':true,'Deactivate':true,'BeforeNavigateAway':true,'initLevel0':true,'initLevel1':true,'initLevel2':true,'initLevel3':true,'initLevel4':true,'initLevel5':true});this.fireEvent('initlevel0');var args=this.initialConfig;this.Account=new Zw.app.Account(args);this.Desktop=new Zw.app.ContextDesktop(args);this.Settings=new Zw.app.ContextSettings(args);this.Signals=new Zw.app.ContextSignals(args);if(Zw.app.Adverts){this.Adverts=new Zw.app.Adverts(args);}
this.fireEvent('initlevel2');this.addPlugin(new Zw.util.ProxyPlugin({namespace:'/context'}));this._registerComponents(this.Signals,this.Account,this.Desktop,this.Settings,this.Adverts);this.fireEvent('initlevel3');this.fireEvent('registered');this._loadFeatures();this.fireEvent('initlevel4');this.m_isReady=true;this.fireEvent('initlevel5');this.fireEvent('Ready');},onError:function(event,args,ex){var data=args[0];var name=args[1];Zw.console("Experienced an exception",ex," in ",name," so we are publishing it to the error manager");this.publish('/app/error',{name:name,data:data,err:ex});},start:function(){this.log('Context - Context start');this.fireEvent('Start');this.activate();this.publish('/app/context/start');this.fireEvent('AfterStart');},deactivate:function(){this.log('Context - Context deactivate');this.fireEvent('Deactivate');this.Desktop.deactivate();},activate:function(reason){this.log('Context - Context activate');this.fireEvent('Activate',reason);this.Desktop.activate();},shutdown:function(){this.deactivate();this.log('Context shutdown');this.fireEvent('Shutdown');},log:Zw.console,shouldPromptToLeave:function(){var result=this.fireEvent('BeforeNavigateAway',this);if(result===false){return true;}else{var e={cancel:false};this.publish('/app/exit/before',e);if(e.cancel===true){return true;}
return undefined;}},iAmAContext:true,getIdentityManager:function(){return this.Account.getWebsiteDevice();},getContactManager:Ext.emptyFn,getMessageManager:Ext.emptyFn,_registerComponents:function(){var components=arguments;for(var i=0;i<arguments.length;i++){var thing=arguments[i];if(thing&&thing.init){thing.init(this);}}
this.on('ApplicationShutdown',function(){for(var i=0;i<components.length;i++){var thing2=components[i];if(thing2&&components[i].destroy)
components[i].destroy();}},{single:true});},_loadFeatures:function(){var f=this.features;if(f){if(f.loaded)
return;f.loaded=true;for(var i=0;i<f.length;i++){this.addPlugin(f[i]);}}},onDestroy:function(){if(this.Desktop.active){this.deactivate();}}});Zw.app.Context.isContext=function(c){return(c.iAmAContext===true);};Zw.util.PubSub.apply(Zw.app.Context);

Zw.namespace('Zw.app');Zw.app.ApplicationSettings=Ext.extend(Zw.Plugin,{m_cookieProvider:null,onInit:function(){this.client.Settings=this;this.m_cookieProvider=window.cookieProvider;if(!this.m_cookieProvider){this.m_cookieProvider=new Ext.state.CookieProvider({path:'/',domain:Zw.cookieDomain||'zipwhip.com'});}},set:function(args){var provider=this.getProvider(args);if(provider)provider.set(args.key,args.value);},get:function(args){var provider=this.getProvider(args);if(provider)return provider.get(args.key);},getProvider:function(args){return args.provider||this.m_cookieProvider;},setSession:function(args){args=args||{};var oldKey=args.oldSession;var newKey=args.session;if(!newKey)
return;var keys=this.get({key:'sessions'});if(keys){if(oldKey){var keysLength=keys.length;var found=false;for(var i=0;i<keysLength;i++){var key=keys[i];if(key==oldKey){keys[i]=newKey;found=true;break;}else if(key==newKey){found=true;break;}}
if(!found){keys.push(newKey);}}else{keys.push(newKey);}}else{keys=[newKey];}
this.set({key:'sessions',value:keys});},removeSession:function(args){args=args||{};var newKey=args.session;if(!newKey)return;var keys=this.get({key:'sessions'});if(keys){var keysLength=keys.length;for(var i=0;i<keysLength;i++){var key=keys[i];if(!key||key==newKey){keys.splice(i,1);}}
this.set({key:"sessions",value:keys});}}});Zw.app.PluginFactory.register('/application','Zw.app.ApplicationSettings');

Zw.app.ApplicationNet=Ext.extend(Zw.Plugin,{baseUrl:'',GET_SESSION_URL:'session/get',getBaseUrl:function(){return this.baseUrl;},getFullUrl:function(url,proxy){var result;var baseUrl=this.getBaseUrl();if(url[0]==='/'){result=baseUrl+url.slice(1);}else{result=baseUrl+url;}
if(proxy){result=gadgets.io.getProxyUrl(result,{REFRESH_INTERVAL:1}).replace('www.','');}
return result;},_createCallback:function(callback,success,_scope,eventSource){return function(response,options){var json=null;if(response.data){json=response.data;}else{try{var responseText=Ext.isAir?response.responseText.replace(/new Date\((\d+)\)/g,'$1'):response.responseText;json=Ext.decode(responseText);}catch(err){Zw.console("Zw.app.ApplicationNet had a problem parsing this json: ",err,json,response);}}
try{eventSource.fireEvent('after',eventSource,options,success,response,json);}catch(err){Zw.console("Zw.app.ApplicationNet have experienced a technical difficulty",err);Zw.trace();}
if(_scope&&callback)
callback.call(_scope,this,json,response);};},_request:function(args){this.fireEvent('before',this,args);Ext.apply(args,{success:this._createCallback(args.success||Ext.emptyFn,true,args.scope||this,this),failure:this._createCallback(args.failure||Ext.emptyFn,false,args.scope||this,this)});args.url=this.baseUrl+args.url;if(args.delayInvoke){return{invoke:Ext.Ajax.request.createDelegate(Ext.Ajax,[args])};}else{Ext.Ajax.request(args);}},onInit:function(){this.sessions=new Ext.util.MixedCollection();this.addEvents({'before':true,'after':true});this.client.Net=this;Zw.Application.subscribe('/net/ajax/request',this.request,this);},reportMissingPhone:function(args){return this._request(Ext.apply(args,{url:'phone/missing',params:{make:args.make,model:args.model,color:args.color,email:args.email}}));},logout:function(args){return this._request(Ext.apply(args,{url:'user/logout',params:{session:args.context.Account.getSessionKey()}}));},deleteUser:function(args){return this._request(Ext.apply(args,{url:'user/delete',params:{session:args.context.Account.getSessionKey()}}));},resolvePhone:function(args){return this._request({delayInvoke:args.delayInvoke,url:'phone/resolve',success:args.success,failure:args.failure,scope:args.scope,params:{mobileNumber:args.mobileNumber}});},saveMember:function(args){var sessionKey=args.session;if(!sessionKey){sessionKey=args.context.Account.getSessionKey();}
return this._request({delayInvoke:args.delayInvoke,success:args.success,failure:args.failure,scope:args.scope,url:'group/addMember',params:Ext.apply({group:args.group,session:sessionKey},args.contact)});},addGroupMember:function(args){var sessionKey=args.session;if(!sessionKey){sessionKey=args.context.Account.getSessionKey();}
return this._request({delayInvoke:args.delayInvoke,success:args.success,failure:args.failure,scope:args.scope,url:'group/addMember',params:Ext.apply({group:args.group,session:sessionKey},args.member)});},removeGroupMember:function(args){return this._request({delayInvoke:args.delayInvoke,success:args.success,failure:args.failure,scope:args.scope,url:'group/removeMember',params:{group:args.group,session:args.context.Account.getSessionKey(),member:args.member.mobileNumber}});},resolveMembers:function(args){return this._request({delayInvoke:args.delayInvoke,success:args.success,failure:args.failure,scope:args.scope,url:'group/members',params:Ext.apply({session:args.context.Account.getSessionKey()},args.group)});},saveGroup:function(args){return this._request({delayInvoke:args.delayInvoke,success:args.success,failure:args.failure,scope:args.scope,url:'group/save',params:Ext.apply({session:args.context.Account.getSessionKey()},args.group)});},upgradeAccount:function(args){return this._request({delayInvoke:args.delayInvoke,success:args.success,failure:args.failure,scope:args.scope,url:'user/upgrade',params:Ext.apply(args,{session:args.context.Account.getSessionKey()})});},enterRegistrationVerification:function(args){return this._request(Ext.applyIf(args,{url:'user/verify',params:{attempt:args.attempt,session:args.context.Account.getSessionKey()}}));},sendRegistrationVerification:function(args){return this._request(Ext.apply(args,{url:'user/verify',params:{strategy:args.strategy,mobileNumber:args.mobileNumber,session:args.context.Account.getSessionKey()}}));},sendComment:function(args){return this._request({delayInvoke:args.delayInvoke,url:'comment/send',success:args.success,failure:args.failure,scope:args.scope,params:{session:args.context?args.context.Account.getSessionKey():'',portal:Zw.portal,comment:args.comment,email:args.email,topic:args.topic,name:args.name,metaData:args.metaData}});},changePassword:function(args){return this._request(Ext.apply(args,{url:'password/change',params:{session:args.context.Account.getSessionKey(),currentPassword:args.currentPassword,password:args.password}}));},forgotPassword:function(args){return this._request(Ext.apply(args,{url:'password/forgot',params:{session:args.context.Account.getSessionKey(),statusKey:args.statusKey,mobileNumber:args.mobileNumber,toEmail:args.toEmail,toMobile:args.toMobile}}));},forgotMobileNumber:function(args){return this._request(Ext.apply(args,{url:'mobileNumber/forgot',params:{session:args.context.Account.getSessionKey(),email:args.email}}));},cancelAccount:function(args){return this._request(Ext.apply(args,{url:'user/cancel',params:{session:args.context.Account.getSessionKey()}}));},login:function(args){return this._request(Ext.apply(args,{url:'user/login',params:{userName:args.mobileNumber,mobileNumber:args.mobileNumber,password:args.password,remember:args.remember}}));},heartbeat:function(args){return this._request(Ext.apply(args,{url:'session/update',params:{sessions:args.sessions},method:"GET"}));},createContact:function(args){if(!args)return;if(!args.params)args.params={};Ext.apply(args.params,{way:'create'})
return this._request(Ext.apply(args,{url:'contact/save',method:"POST"}));},resolveContact:function(args){if(!args)return;return this._request(Ext.apply(args,{params:{mobileNumber:args.mobileNumber,session:args.session},url:'contact/resolve',method:'post'}));},getContact:function(args){return this._request(Ext.apply(args,{params:{mobileNumber:args.mobileNumber,session:args.session},url:'contact/get',method:'post'}));},deviceCarbonPing:function(args){return this._request(Ext.apply(args,{params:{session:args.session},url:'carbon/installed',method:'post'}));},sendMessage:function(args){var message=args.message;var to=[];if(Ext.isArray(message.to)){for(var i=0;i<message.to.length;i++){to.push(Zw.data.get(message.to[i],'address'));}}else if(Ext.type(message.to)=='string'){to=message.to;}
var result=Ext.apply(this._request(Ext.apply(args,{url:'message/send',params:{session:args.session||args.context.Account.getSessionKey(),contacts:to,body:message.body,fromAddress:message.fromAddress,fromName:message.fromName,scheduledDate:message.deliveryDate||-1}})));if(!result){result={contacts:to}}
return result;},authenticateSession:function(args){return this._request({url:this.GET_SESSION_URL,method:'GET',scope:args.scope,success:args.success,failure:args.failure,params:{portal:Zw.portal,session:args.session,sessions:args.sessions}});},getUserData:function(args){return this._request(Ext.apply(args,{url:'user/get',method:'GET',params:{session:args.session,sessions:args.sessions}}));},saveUserData:function(args){return this._request(Ext.apply(args,{url:'user/save',method:'POST',params:Ext.apply({sessions:args.sessions,session:args.session},args.contact)}));},markMessagesAsRead:function(args){return this._request(Ext.apply(args,{url:'message/read',method:'POST',params:{session:args.session,messages:args.messages}}));},saveContact:function(args){return this._request(Ext.apply(args,{url:'contact/save',method:'POST',params:Ext.apply(Ext.apply({sessions:args.sessions,session:args.session,way:'save'},args.contact),{tag:args.session})}));},deleteContact:function(args){return this._request(Ext.apply(args,{url:'contact/delete',method:'POST',params:{sessions:args.sessions,session:args.session,contact:args.contact,forceDelete:args.forceDelete}}));},deleteConversation:function(args){return this._request(Ext.apply(args,{url:'conversation/delete',method:'POST',params:{id:args.conversation.id,session:args.session,fingerprint:args.conversation.fingerprint}}));},deleteMessages:function(args){return this._request(Ext.apply(args,{url:'message/delete',method:'POST',params:{sessions:args.sessions,session:args.session,messages:args.messages}}));},deleteMessage:function(args){return this._request(Ext.apply(args,{url:'message/delete',method:'POST',params:{sessions:args.sessions,session:args.session,messages:args.messages}}));},reportError:function(args){return this._request(Ext.apply(args,{url:'error/report',method:'POST',params:{report:args.err,name:args.name,data:args.data,session:args.session}}));},verifyWhitelist:function(args){return this._request(Ext.apply(args,{url:'whitelist/verify',method:'POST',params:{portal:Zw.portal,mobileNumber:args.mobileNumber,session:args.context.Account.getSessionKey()}}));},checkMessageProgress:function(args){return this._request(Ext.apply(args,{url:'session/messageProgress',method:'POST',params:{keys:args.keys,session:args.session}}));},advertRecord:function(args){return this._request(Ext.apply(args,{url:'advert/record',method:'POST'}));},errorResolve:function(args){return this._request(Ext.apply(args,{url:'error/resolve',method:'POST'}));},corporateBeta:function(args){return this._request(Ext.apply(args,{url:'corporate/beta',method:'POST'}));},commentSend:function(args){return this._request(Ext.apply(args,{url:'comment/send',method:'POST'}));},request:function(args){Zw.console(">>/net/ajax/request",args);this._request(Ext.applyIf(args,{method:'POST'}));},shareSend:function(args){return this._request(Ext.apply(args,{url:'share/send',method:'POST'}));},getUpgradeFor:function(args){return this._request(Ext.apply(args,{url:'/sprint/getUpgradeFor',method:'POST'}));},getIndividualUsageFor:function(args){return this._request(Ext.apply(args,{url:'/sprint/getIndividualUsageFor',method:'POST'}));},getAccountInfo:function(args){return this._request(Ext.apply(args,{url:'/sprint/getAccountInfo',method:'POST'}));}});Zw.app.PluginFactory.register('/application','Zw.app.ApplicationNet');

Ext.namespace('Zw','Zw.app');Zw.app.ApplicationDesktop=Ext.extend(Zw.Plugin,{m_tabPanel:null,m_previousContext:null,m_riser:null,m_state:null,m_tabTpl:null,_showTabs:function(){if(!Zw.capabilities.ALLOW_MASQUERADE)return;var e=Ext.fly('logout').parent().select('.x-tab');e.setStyle('position','relative');e.show(Zw.capabilities.fade);this.m_state=true;},_hideTabs:function(){if(!Zw.capabilities.ALLOW_MASQUERADE)return;var e=Ext.fly('logout').parent().select('.x-tab');if(Zw.capabilities.fade){e.fadeOut({callback:function(){e.setStyle('position','absolute');if(Zw.Application.getContextCount()>1)
this._showTabs();}});}else{e.hide();e.setStyle('position','absolute');if(Zw.Application.getContextCount()>1)
this._showTabs();}
this.m_state=false;},_updateTabStatus:function(onlyLookForShowState){if(!Zw.capabilities.ALLOW_MASQUERADE)return;var count=Zw.Application.getContextCount();if((1<count)||onlyLookForShowState){if(!this.m_state){this._showTabs();}}else{this._hideTabs.defer(1000,this);}},_blink:function(context){var classOn='x-tab-strip-over';var hover;var restore;var i=1000;function _hoverGraphics(){context.tab.addClass(classOn);if(restore)
restore.delay(i);else
_regularGraphics();}
function _regularGraphics(){context.tab.removeClass(classOn);if(hover)
hover.delay(i);}
hover=new Ext.util.DelayedTask(_hoverGraphics,this);restore=new Ext.util.DelayedTask(_regularGraphics,this);function _in(){}
function _out(){}
context.tab.on('mouseover',_in);context.tab.on('mouseout',_out);context.tab.on('click',function(){hover=null;restore=null;context.un('mouseover',_in);context.un('mouseout',_out);},this);hover.delay(1);},_addTab:function(context){if(!context)return;var title=context.Account.getName();var icon=context.Account.getPhoneKey();context.tab=Ext.get(this.m_tabTpl.insertBefore('logout',{title:title,icon:icon},true));if(context.tab){context.tab.addClassOnOver('x-tab-strip-over');var query=context.tab.query('.x-tab-strip-close');if(query){var close=Ext.get(query[0]);if(close)
close.addClassOnOver('x-tab-strip-close-over');}
context.tab.on('click',function(evt,e,l){Zw.console("ContextTab.Click: ",evt,e,l,close,Ext.get(e)==close);if(Ext.get(e)==close)
Zw.Application.removeContext(context);else
Zw.Application.setActiveContext(context,'switch');});}
if(Zw.Application.started){this._updateTabStatus(true);}else{this._updateTabStatus.defer(1000,this,[false]);}},_setActiveContext:function(context){this.m_tabPanel.layout.setActiveItem(context.Desktop.getPanel());var cls='x-tab-strip-active';if(this.m_previousContext&&this.m_previousContext.tab)
this.m_previousContext.tab.removeClass(cls);this.m_previousContext=context;if(this.m_previousContext&&this.m_previousContext.tab)
this.m_previousContext.tab.addClass(cls);if(context.Account.isGuest(true))
Ext.fly('welcome').update(Zw.localize('zw.welcome.guest'));else{var name=context.Account.getName();if(name){Ext.fly('welcome').update(String.format(Zw.localize('zw.welcome.loggedIn'),name));}else{Ext.fly('welcome').update(Zw.localize('zw.welcome.guest'));}}},onInit:function(client){this.m_tabTpl=new Ext.XTemplate('<li class="x-tab-strip-closable x-tab x-tab-with-icon"><a onclick="return false;" class="x-tab-strip-close"/><a onclick="return false;" href="#" class="x-tab-right"><em class="x-tab-left"><span class="x-tab-strip-inner"><span class="x-tab-strip-text icon-cmp {icon}">{title}</span></span></em></a></li>');client.Desktop=this;this.addPlugin(new Zw.util.ProxyPlugin({scope:'app',namespace:'/application/desktop'}));this.m_tabPanel=new Zw.controls.ContextToolbar({renderTo:'toolbar'});Zw.Application.subscribe('/desktop/context/register',this.registerContext,this);Zw.Application.subscribe('/desktop/context/unregister',this.unregisterContext,this);Zw.Application.subscribe('/desktop/name/set',this.setName,this);Zw.Application.subscribe('/network/failure',this.onNetworkFailure,this);this.logout=this._createLogoutButton();this.login=this._createLoginButton();Zw.Application.on('ActiveContextChanged',this._setActiveContext,this);},_createLogoutButton:function(){return new Zw.controls.ActionButton({text:Zw.localize('generic.btn.logout'),iconCls:'zw-button-icon-logout',tabIndex:2,renderTo:Ext.fly('logout'),handler:this.handleLogout,scope:this});},_createLoginButton:function(){return new Zw.controls.ActionButton({text:Zw.localize('generic.btn.login'),iconCls:'zw-button-icon-login',tabIndex:1,renderTo:Ext.fly('login'),handler:this.handleLogin});},handleLogout:function(){Zw.Application.Context.fireEvent('logout');Zw.Application.removeContext(Zw.Application.Context);},handleLogin:function(sender,e){Zw.Application.Context.fireEvent('login');},unmask:function(){Ext.getBody().unmask();},mask:function(msg){Ext.getBody().mask(msg);},registerContext:function(context){var panel=context.Desktop.getPanel();this.m_tabPanel.add(panel);context.panel=panel;if(Zw.capabilities.ALLOW_MASQUERADE)
this._addTab(context);this.m_tabPanel.doLayout();},unregisterContext:function(context){if(context.tab)
context.tab.ghost('b',{remove:true});this._updateTabStatus();},setName:function(args){if(args.context.tab)
args.context.tab.child('.x-tab-strip-text').update(args.name);},setActiveContext:function(context){this._setActiveContext(context);},showError:function(title,message){Ext.Msg.alert(title,message);},onNetworkFailure:function(){Ext.Msg.show({modal:true,msg:Zw.localize('generic.alert.communicationError.text'),title:Zw.localize('generic.alert.communicationError.title'),closable:false,buttons:[]});},showNotification:function(args){if(!args.context)
return Zw.localize('generic.alert.noContext');if(!Zw.Application.isActiveContext(args.context)){_blink(args.context);return null;}else{if(!this.m_riser)
this.m_riser=new Zw.controls.Riser();var _factory=args.context.getContactCardFactory();var adapter=args.adapter||new Zw.controls.Riser.TearOffBoxComponentAdapter({item:{context:args.context,contactCardFactory:_factory},factory:this._createRiserBubblePanel(),autoDestroy:true,timeout:5000});this.m_riser.add(adapter);return adapter;}},_createRiserBubblePanel:function(config){if(!config){config={};}
return new Zw.controls.RiserBubblePanel(config);}});Zw.app.PluginFactory.register('/application','Zw.app.ApplicationDesktop');

Zw.app.ContextDesktop=Ext.extend(Zw.app.ContextModule,{m_groups:null,m_toolbar:null,m_panel:null,m_windows:null,m_root:1,active:false,onInit:function(){this.addPlugin(new Zw.util.ProxyPlugin({namespace:'/desktop/context/init'}));this.initDesktop();},initDesktop:function(){this.initPanels();this.m_groups=[];this.m_windows=[];this.context.subscribe('/desktop/riser/show',this.showIncomingMessageNotification,this);this.context.subscribe('/desktop/window/register',this.registerWindow,this);},getNextTabRoot:function(){var result=this.m_root*10;this.m_root++;return result;},_createToolbarGroup:function(key,defaults){if(Ext.type(defaults)=='string')
defaults=Ext.ComponentMgr.create({},defaults);this.m_toolbar.push(defaults);this.m_groups[key]=defaults;return defaults;},_getToolbarGroup:function(key){return this.m_groups[key];},unmask:function(){Zw.Application.Desktop.unmask();},mask:function(){Zw.Application.Desktop.mask();},initPanels:function(){this.m_panel=new Ext.Panel({html:'',autoHeight:true,border:false,tbar:[]});this.m_toolbar=this.m_panel.getTopToolbar();},setName:function(name){if(Ext.isEmpty(name))
name=Zw.localize('generic.text.guest');else if(name==' ')
name=Zw.localize('generic.text.guest');Zw.Application.publish('/desktop/name/set',{context:this.context,name:name});},setActive:function(window){window.manager.bringToFront(window);},newWindow:function(args){Ext.applyIf(args,{hideMode:'hide',closeAction:'hide',tabRoot:this.getNextTabRoot()});var w=new Zw.controls.Window(args);this.registerWindow(w);return w;},unregisterWindow:function(w){w.un('destroy',this.onWindowDestroy,this,{single:true});w.un('minimize',this.onWindowMinimize,this);w.un('beforeshow',this.onWindowBeforeShow,this);delete w.context;this.m_windows.remove(w);return w;},registerWindow:function(w){w.context=this.context;w.on('destroy',this.onWindowDestroy,this,{single:true});w.on('minimize',this.onWindowMinimize,this);w.on('attention',this.onWindowAttention,this);w.on('beforeshow',this.onWindowBeforeShow,this);this.m_windows.push(w);return w;},onWindowAttention:function(win){this.context.publish('/desktop/window/attention',{'window':win});},onWindowMinimize:function(win){this.context.publish('/app/service/run',{pkg:'window.services',service:'Zw.features.taskbar.TaskbarService',uri:'/desktop/window/minimize',args:{window:win}});},onWindowBeforeShow:function(sender,e){var window=sender;if(window.preventCascade){return;}
var xy=window.el.getCenterXY();var range=30;var offset=10;var L=this.m_windows.length;var offsetXY=[0,0];for(var j=0;j<10;j++){var o=offset*j;offsetXY=[xy[0]+o,xy[1]+o];var conflicts=false;for(var i=0;i<L;i++){var w=this.m_windows[i];if(w==window)
continue;var existingXY=w.getPosition();var x1=existingXY[0];var y1=existingXY[1];var x2=offsetXY[0];var y2=offsetXY[1];var dx=Math.abs(x1-x2);var dy=Math.abs(y1-y2);var distance=Math.sqrt(dx*dx+dy*dy);if(distance<range){conflicts=true;break;}else{}}
if(!conflicts){break;}}
if(offsetXY[1]<0)
offsetXY[1]=0;window.setPagePosition(offsetXY[0],offsetXY[1]);},onWindowDestroy:function(window){this.unregisterWindow(window);},getToolbar:function(){return this.m_toolbar;},getToolbarGroup:function(key,defaults){var result=this._getToolbarGroup(key);if(!result)
result=this._createToolbarGroup(key,defaults);return result;},deactivate:function(){this.active=false;Ext.each(this.m_windows,function(w){if(w.isVisible()){w.changed=true;w.wasHidden=!w.isVisible();Ext.get(w.el).fadeOut({callback:function(){w.hide();}});}});},activate:function(){this.active=true;for(var i=0;i<this.m_windows.length;i++){var w=this.m_windows[i];if(w.el)
Ext.get(w.el).stopFx();if(!w.wasHidden&&w.changed){w.show();w.changed=false;}}},getPanel:function(){return this.m_panel;},showIncomingMessageNotification:function(args){Zw.Packages.get('riser.all',this._showIncomingMessageNotification,this,[args]);},_showIncomingMessageNotification:function(args){var message=args;var cfg=null;if(args.message){message=args.message;cfg=args.cfg;}
if(!this.functions){this.functions={scope:this,'replyGroupClick':function(riser){this.context.publish('/desktop/message/replyGroup',riser.message);riser.stop();},'reply':function(riser){this.context.publish('/desktop/message/reply',riser.message);riser.stop();},'forward':function(riser){this.context.publish('/desktop/message/fwd',riser.message);},'trash':function(riser){this.context.publish('/desktop/message/delete',riser.message);riser.stop();},'volume':function(sender,pl,el,ev,state){var vol=state*33;switch(state){case 0:vol=0;break;case 1:vol=10;break;case 2:vol=50;break;case 3:vol=100;break;}
Zw.console("SAVING SETTING VOLUME ",vol);this.context.Settings.set({riser_volume:vol});this.context.publish('/app/sound/play',{sound:'incomingMessage',volume:vol});}};}
var Adapter=args.adapter||Zw.controls.Riser.TearOffBoxComponentAdapter;var adapter=Zw.Application.Desktop.showNotification({context:this.context,adapter:new Adapter({item:Ext.apply({message:message,allowReplyGroup:Zw.util.isMembershipMessage(message,this.context.Account.getWebsiteDeviceId()),contactCardFactory:this.context.getContactCardFactory(),context:this.context,volume:this.context.Settings.get('riser_volume'),listeners:this.functions},cfg),factory:function(config){return new Zw.controls.RiserBubblePanel(config);},autoDestroy:true,timeout:15000})});this.context.publish('/desktop/riser/adapter/created',adapter);if(args.handler){args.handler.call(args.scope||this,adapter);}},showNotification:function(title,message){var args={};if((Ext.type(title)=='string')&&!(Ext.type(message))){message=title;title='Notification';}else if(Ext.type(title)=='object'){args=title;title=args.title;message=args.message;}
Zw.Application.Desktop.showNotification(Ext.apply(args,{context:this.context,title:title,message:message}));},onDestroy:function(){Ext.destroy(this.m_panel);delete this.m_panel;}});

Zw.app.ContextSignals=Ext.extend(Zw.app.ContextModule,{m_messageStatusRoutes:null,identifier:'ContextSignals',log:Zw.console,onInit:function(){this.m_messageStatusRoutes=new Ext.util.MixedCollection(true);this.context.subscribe('/account/authenticated',this.onAuthenticated,this,{single:true});this.context.subscribe('/account/unauthenticated',this.onUnAuthenticated,this,{single:true});this.context.subscribe('/account/user/data',this.onUserData,this);},enrolled_website_device:false,onUserData:function(){var deviceKey=this.context.Account.identity.get('websiteDeviceKey');if(deviceKey&&!this.enrolled_website_device){this.enrolled_website_device=true;Zw.Application.publish('/signals/device/add',{session:this.context.Account.getSessionKey(),device:deviceKey,handler:this.incomingSignal,scope:this});}},onAuthenticated:function(key){if(key){Zw.Application.publish('/signals/session/add',{session:key,handler:this.incomingSignal,scope:this});}},onUnAuthenticated:function(key){if(key){Zw.Application.publish('/signals/session/remove',{session:key,handler:this.incomingSignal,scope:this});}},_parseSettings:function(signal){var settings=signal.settings;if(settings&&settings.length>0){if(settings.length==1)
this.fireEvent('settings',this,settings[0]);else
this.fireEvent('settings',this,settings);}},_parseContacts:function(signal){var contacts=signal.contact;if(contacts&&contacts.length>0){this.log('Received contact signals from server. ',contacts.length,' contacts.');this.publish('/signal/contact/change',contacts);this.fireEvent('contact',this,contacts);}},_parseCredential:function(signal){var keys=signal.credential;if(keys&&keys.length>0){this.context.publish('/signal/credential/change',keys);}},_parseDevices:function(signal){var devices=signal.device;if(devices&&devices.length>0){this.log('Received devices signals from server.',devices.length,' devices.');this.fireEvent('device',this,devices);this.context.publish('/signal/device/change',devices);}},_parseConversations:function(signal){var conversations=signal.conversation;if(conversations&&conversations.length>0){this.log('Received conversation signals from server.',conversations.length,' conversations.');this.fireEvent('conversation',this,conversations);this.context.publish('/signal/conversation/change',conversations);}},_parseMessagesDeleted:function(signal){var keys=signal.messageDeleted;if(keys&&keys.length>0){this.log('Received messageDeleted signals from server.',keys.length,'messages.');this.fireEvent('messageDeleted',this,keys);this.context.publish('/signal/message/deleted',keys);}},_parseMessages:function(signal){var messages=signal.message;if(messages&&messages.length>0){this.log('Received message signals from server.',messages.length,' messages.');this.fireEvent('message',this,messages);this.context.publish('/signal/message/receive',messages);}},_parseMessageStatus:function(signal){var messages=signal.messageProgress;if(messages){this.log("Received messageProgress signal. Going to route each message.");Ext.each(messages,this.__parseMessageStatus_eachMsg,this);}},__parseMessageStatus_eachMsg:function(item){var key=item.key;var value=item.value;this.log("Routing messageProgress with key ",key,"and value",value,"to any listeners");var route=this.m_messageStatusRoutes.get(key);if(route)
route(this,key,value);this.context.publish('/signal/messageProgress/update/'+item.key,item);},incomingSignal:function(signal){this.log(signal);if(signal.valid===false){Zw.Application.createContext({active:true});Zw.Application.removeContext(this.context);}else{this._parseDevices(signal);this._parseMessageStatus(signal);this._parseContacts(signal);this._parseConversations(signal);this._parseMessages(signal);this._parseSettings(signal);this._parseMessagesDeleted(signal);this._parseCredential(signal);for(N in signal){this.context.publish('/signal/receive/'+N,signal[N]);}}},addMessageStatusRoute:function(key,fcn,scope){Zw.util.log('ContextSignals - adding message route',key);this.m_messageStatusRoutes.add(key,fcn.createDelegate(scope||this));},removeMessageStatusRoute:function(key,fcn,scope){Zw.util.log('ContextSignals - removing message route',key);this.m_messageStatusRoutes.removeKey(key);},enterCriticalRegion:function(){Zw.console('ContextSignals - entering critical region');Zw.Application.publish('/signals/critical/enter');},exitCriticalRegion:function(){Zw.console('ContextSignals - exiting critical region');Zw.Application.publish('/signals/critical/exit');},onDestroy:function(){Zw.Application.publish('/signals/session/remove',{session:this.context.Account.getSessionKey(),handler:this.incomingSignal,scope:this});Zw.Application.publish('/signals/device/remove',{session:this.context.Account.getSessionKey(),device:this.context.Account.identity.get('websiteDeviceKey'),handler:this.incomingSignal,scope:this});}});

Zw.app.ContextServices=Ext.extend(Zw.app.ContextModule,{_downloaded:{},onInit:function(){this._running={};this.context.Services=this;this.context.subscribe('/app/service/register',this.onRegisterService,this);this.context.subscribe('/app/service/run',this.onRunService,this);this.addPlugin(new Zw.util.ProxyPlugin({namespace:'/app/context/services'}));},isCached:function(key){return this._downloaded[key];},cache:function(key,value){this._downloaded[key]=value;},isDownloaded:function(key){return this._downloaded[key];},isRunning:function(key){return this._running[key];},cacheDownloaded:function(key){this._downloaded[key]=true;},cacheRunning:function(key){this._running[key]=true;},onRunService:function(args){this.process(args,true);},onRegisterService:function(args){this.process(args,false);},process:function(args,run){var pkg=args.pkg;if(pkg&&!this.isDownloaded(args.service)){Zw.Packages.get(pkg,this.downloadedService,this,[args,run]);}else{this.initializeService(args,run);}},downloadedService:function(args,run){this.cacheDownloaded(args.service);this.initializeService(args,run);},initializeService:function(args,run){var service=args.service;if(Ext.type(service)=='string'&&!this.isRunning(service)){var ctor=Zw.util.resolveType(service);service=new ctor(args.serviceArgs);this.cacheRunning(args.service);service.init(this.context);}
if(run){this.context.publish(args.uri,args.args);}},onDestroy:function(){this.context.unsubscribe('/app/service/register',this.onRegisterService,this);delete this.client.Services;}});Zw.features.PluginFactory.register('/context','Zw.app.ContextServices');

Zw.app.SignalProvider=Ext.extend(Zw.Plugin,{scope:'session',autoConnect:true,_init:function(client){this.subscribers=new Ext.util.MixedCollection(true);if(this.scope=='session'||this.scope=='all'){client.subscribe('/signals/session/add',this.onAddSession,this);client.subscribe('/signals/session/remove',this.onRemoveSession,this);}
if(this.scope=='device'||this.scope=='all'){client.subscribe('/signals/device/add',this.onAddDevice,this);client.subscribe('/signals/device/remove',this.onRemoveDevice,this);}
client.subscribe('/signals/signal/route',this.routeSignals,this);Zw.app.SignalProvider.superclass._init.call(this,client);this.client.Signals=this;if(this.autoConnect)
client.subscribe('/app/start',this.connect,this);},disconnect:function(){if(!this.connected)return;this.attemptDisconnect();},connect:function(){if(this.connected){return;}
this.attemptConnect();},attemptDisconnect:function(){this.connected=false;this.onDisconnected();},attemptConnect:function(){this.connected=true;this.onConnected();},onConnected:Ext.emptyFn,onDisconnected:Ext.emptyFn,getSubscriptionKeys:function(){var result=[];this.subscribers.eachKey(function(key){result.push(key);});return result;},onAddSession:function(args){this.subscribers.add(args.session,args);},onRemoveSession:function(args){this.subscribers.removeKey(args.session);},onAddDevice:function(args){this.subscribers.add(args.device,args);},onRemoveDevice:function(args){this.subscribers.remove(args.device,args);},routeSignals:function(signals){if(Ext.type(signals)!='array')
signals=[signals];if(signals&&signals.length>0){Ext.each(signals,this._routeSignal,this);}},_routeSignal:function(signal){if(signal){if(signal.session){this.routeSignal(signal.session,signal)}else if(signal.device){this.routeSignal(signal.device,signal)}}},routeSignal:function(key,signal){var args=this.subscribers.get(key);if(args){args.handler.call(args.scope||this,signal);}}});

Ext.namespace('Zw','Zw.app');Zw.app.ShortPollingSignalProvider=Ext.extend(Zw.app.SignalProvider,{m_subscribers:null,scope:'session',criticals:0,delay:10000,criticalDelay:2000,normalDelay:10000,heartbeat:null,started:false,onInit:function(){this.heartbeat=new Ext.util.DelayedTask(this._executeHeartbeat,this);Zw.Application.Net.on('after',this._parseResponse,this);this.client.subscribe('/signals/connect',this.connect,this);this.client.subscribe('/signals/critical/enter',this.enterCriticalRegion,this);this.client.subscribe('/signals/critical/exit',this.exitCriticalRegion,this);this.client.subscribe('/signals/session/add',this._executeHeartbeat,this);},attemptDisconnect:function(){this.heartbeat.cancel();Zw.app.ShortPollingSignalProvider.superclass.attemptDisconnect.call(this);},attemptConnect:function(){this.tick();Zw.app.ShortPollingSignalProvider.superclass.attemptConnect.call(this);},_executeHeartbeat:function(){if(!this.connected)return;var s=this.getSubscriptionKeys();if(s){if(s.length>0){if(!this.started){Zw.Application.publish('/signals/bind');this.started=true;}
this.client.publish('/net/ajax/request',{url:'session/update',method:"GET",scope:this,success:this.tick,failure:this.tick,params:{sessions:this.getSubscriptionKeys()}});}}},enterCriticalRegion:function(){this.criticals++;this.delay=this.criticalDelay;this.heartbeat.cancel();this._executeHeartbeat();},exitCriticalRegion:function(){if(this.criticals>0)
this.criticals--;if(this.criticals==0)
this.delay=this.normalDelay;},_parseResponse:function(sender,options,success,response,json){Zw.console("ShortPollingSignalProvider - _parseResponse(",sender,options,success,response,json,")");if(!json)
return;Zw.Application.publish('/signals/rx');this.routeSignals(json.sessions);},tick:function(){this.heartbeat.delay(this.delay);}});Zw.app.PluginFactory.register('/application','Zw.app.ShortPollingSignalProvider');

Zw.app.ContextSettings=Ext.extend(Zw.app.ContextModule,{m_settingletList:null,m_provider:null,onInit:function(){this.m_settingletList=new Ext.util.MixedCollection();this.m_provider=new Ext.ux.HttpProvider({url:Zw.Application.Net.getFullUrl('settings/save'),session:'undefined',readBaseParams:{cmd:'readState'},saveBaseParams:{cmd:'saveState'},autoRead:false});this.m_provider.on('statechange',this.onStateChange,this,{buffer:true});this.context.Account.on("userData",this.onUserData,this);this.context.Signals.on("settings",this.onSettingsSignal,this);this.context.Account.on('authenticated',this.onAuthenticated,this);},onStateChange:function(){var sessionKey=this.context.Account.getSessionKey();if(this.m_provider.get('tag')==sessionKey){Zw.console("Ignored settings change because we spawned the changed signal");}else{this.fireEvent('changed',this);}},onAuthenticated:function(sender,key,oldKey){Zw.Application.Settings.setSession({context:this.context,oldSession:oldKey,session:key});this.authenticated=true;this.m_provider.session=this.context.Account.getSessionKey();},readSettings:function(settings){if(settings){if(settings.tag!=this.context.Account.getSessionKey()){this.m_provider.initState(settings);this.fireEvent('changed',this);}else{Zw.console("Ignored settings change because we spawned the changed signal");}}},onSettingsSignal:function(sender,signal){this.readSettings(signal);},onUserData:function(sender,user,settings){this.readSettings(settings);},set:function(args,value){if(Ext.type(value)!=false){Zw.Application.Settings.set({context:this.context,provider:this.m_provider,key:args,value:value});}else{for(var key in args){value=args[key];Zw.Application.Settings.set({context:this.context,provider:this.m_provider,key:key,value:value});}}},get:function(key,defaultValue){return Zw.Application.Settings.get({context:this.context,provider:this.m_provider,key:key,defaultValue:defaultValue});},remove:function(key){Zw.Application.Settings.remove({context:this.context,provider:this.m_provider,key:key});},registerSettinglet:function(key,settinglet){this.m_settingletList.add(key,settinglet);},unregisterSettinglet:function(key){if(this.m_settingletList)
this.m_settingletList.removeKey(key);},getSettingletList:function(){var result=[];this.m_settingletList.each(function(settinglet){settinglet=Zw.settings.Settinglet.createSettinglet(settinglet);result.push(settinglet);},this);return result;},onDestroy:function(){this.context.Account.un("userData",this.onUserData,this);this.context.Signals.un("settings",this.onSettingsSignal,this);this.context.Account.un('authenticated',this.onAuthenticated,this,{single:true});this.m_provider.un('statechange',this.onStateChange,this);delete this.provider;if(this.m_settingletList){this.m_settingletList.clear();delete this.m_settingletList;}
if(this.authenticated){var key=this.context.Account.getSessionKey();Zw.Application.Settings.removeSession({context:this.context,session:key});}}});

Zw.namespace('Zw');Zw.Packages=Ext.extend(Object,{_downloading:false,_queue:null,downloaded:{},log:Ext.emptyFn,prefix:'',get:function(args,fn,scope,functionArgs){var t=Ext.type(args);if(t=='string')
args={pkg:args,success:fn||Ext.emptyFn,scope:scope,fnArgs:functionArgs};if(t=='array'){args={pkg:args,success:fn||Ext.emptyFn,scope:scope,fnArgs:functionArgs};}
if(!this._queue){this._queue=[];}
if(this._downloading){this._queue.push(args);}
else{this._get(args);}},_get:function(args){var type=Ext.type(args.pkg);if(args){if(type=='array'){var pkg=args.pkg;var scs=args.success;var s=args.onDownloadStart;var e=args.onDownloadComplete;args.onDownloadStart=null;args.onDownloadComplete=null;var that=this;var index=0;var length=args.pkg.length;function after(){index++;args.pkg=pkg[index];if(index==(length-1)){args.success=scs;args.onDownloadStart=s;args.onDownloadComplete=e;that.get(args);}else{next.call(that);}}
function next(){args.pkg=pkg[index];args.success=after;that.get(args);}
next.call(this);return;}}
this.log("getting package "+args.pkg);args.scope=args.scope||this;if(this.exists(args)){var _args=args.fnArgs;if(!_args){_args=[];}
if(Ext.type(_args)!='array'){_args=[_args];}
var _scope=args.scope||this;args.success.apply(_scope,_args);}else{this.download(args);}},downloadCss:function(path){var f=document.createElement("link")
f.setAttribute("rel","stylesheet");f.setAttribute("type","text/css");f.setAttribute("href",path);if(typeof f!="undefined")
document.getElementsByTagName("head")[0].appendChild(f);},download:function(args){if(args.onDownloadStart){args.onDownloadStart.call(args.scope||this,args);}
var scope=args.scope=args.scope||this;var finalSuccess=args.success;var files=this.discoverFiles(args);var filesLength=files.length;var attempts=[];var _prefix=this.prefix;if(files.files){if(files.prefix!=null){if(files.preventDefaultPrefix)
_prefix=files.prefix;else
_prefix=this.prefix+'/'+files.prefix;}
files=files.files;filesLength=files.length;}
var results=new Ext.util.MixedCollection();var compiledIndex=0;var _files=[];Ext.each(files,function(file,index,length){if(file.prefix){if(file.prefix===true){file=file.file;}else{file=file.prefix+'/'+file.file;}}else{file=_prefix+'/'+file;}
var type='js';if(file.indexOf('.css')!=-1){type='css';}else{if(file.substring(file.length-3)!='.js'){file+='.js';}}
_files[index]=file;this.log("downloading path: "+file);results.add({id:file,result:null,compiled:false});if(type=='css'){this.downloadCss(file);attempts.push('css');compiledIndex++;results.replace({id:file,result:'',css:true,compiled:false,downloaded:true});}else if(type=='js'){this._downloading=true;Ext.Ajax.request({scope:this,url:file,jsHack:true,failure:function(){this._downloading=false;if(this._queue.length>0){this._get(this._queue.shift());}},success:function(response,options){attempts.push(arguments[1]);var result=arguments[0].responseText;results.replace({id:file,result:result,compiled:false,downloaded:true});this.log('success downloading package: '+file+'');var compiledIndexResult=results.itemAt(compiledIndex);this.log('The last item we compiled was '+compiledIndex);if(compiledIndexResult){if(compiledIndexResult.result){this.log("We've already downloaded the item at "+compiledIndex);for(var i=compiledIndex;i<results.getCount();i++){var key=_files[i];var result=results.get(key);if(result){if(result.downloaded){if(!result.compiled){this.log('compiling: '+key,i,compiledIndex,attempts,attempts.length,filesLength);if(!result.css)
this.globalEval(result.result,true);result.compiled=true;}
compiledIndex=i+1;}else{break;}}}}}else{this.log('interesting error, the next compile index was null '+compiledIndex);this.log(results);}
if(attempts.length==filesLength){this.downloaded[this.encode(args)]=true;this.log('calling success fn');if(args.onDownloadComplete){args.onDownloadComplete.call(args.scope||this,args);}
if(args.fnArgs){finalSuccess.apply(scope,args.fnArgs);}else{finalSuccess.call(scope);}}
this._downloading=false;if(this._queue.length>0){this._get(this._queue.shift());}}});}},this);},discoverFiles:function(args){var defaultReturn=[args.pkg+'.js'];if(this.customPackage){args=args.pkg.split('.');var x=this.source;Ext.each(args,function(arg){if(x[arg]){x=x[arg];}else{x=defaultReturn;return false;}},this);return x;}else{return defaultReturn;}},encode:function(args){return args.pkg.replace('.','_');},exists:function(args){if(this.disabled)
return true;var encoded=this.encode(args);var result=this.downloaded[encoded];return result;},globalEval:function(data,forceScriptTag){if(!forceScriptTag){with(window){window.eval(data);}}else{var script=document.createElement("script");script.type="text/javascript";if(Ext.isIE)
script.text=data;else
script.appendChild(document.createTextNode(data));var head=document.getElementsByTagName("head")[0]||document.documentElement;head.appendChild(script);}},set:function(packages){this.customPackage=true;this.prefix=packages.prefix;this.source=packages;}});Zw.Packages=new Zw.Packages();

Zw.Packages.LIVE={prefix:'/js/Zw/Packages',phone:{icons:{preventDefaultPrefix:true,prefix:'/css/zw',files:['zw-phoneicons.css']},icons_ie6:{preventDefaultPrefix:true,prefix:'/css/zw',files:['zw-phoneicons_ie6.css']}}}
Zw.Packages.set(Zw.Packages.LIVE);

Zw.namespace('Zw.util');Zw.util.FieldinatorPlugin=Ext.extend(Zw.Plugin,{map:null,easyWireups:true,backupFieldProvider:Ext.emptyFn,_init:function(client){Zw.util.FieldinatorPlugin.superclass._init.call(this,client);this.map=new Ext.util.MixedCollection();if(this.easyWireups){this.client.field=this.findField.createDelegate(this);this.client.value=this.getValue.createDelegate(this);}else{this.client.fieldinator=this;}},getEl:function(){if(!this.el){this.el=this.client;}
return this.el;},findField:function(code){var field=this.map.get(code);if(!field){var fields=this.getEl().find('code',code);if(fields&&fields.length>0){field=fields[0];}else{field=this.backupFieldProvider.call(this.scope,code);}
this.map.add(code,field);}
return field;},field:function(code){return this.findField(code);},value:function(code){return this.getValue(code);},getValue:function(code){return this.findField(code).getValue();},_destroy:function(){if(this.easyWireups&&this.client){delete this.client.field;delete this.client.value;}
delete this.map;Zw.util.FieldinatorPlugin.superclass._destroy.call(this);}});

Zw.util.TabinatorPlugin=Ext.extend(Zw.util.FieldinatorPlugin,{listenEvent:'show',bufferListener:false,enabled:true,autoFocus:true,fields:null,_init:function(client){if(!this.plugins)
this.plugins=[new Zw.util.TabinatorFocusFirstTabStrategyPlugin()];Zw.util.TabinatorPlugin.superclass._init.call(this,client);},onInit:function(){if(!this.fields)
this.fields=[];this.addEvents({'render':true,'beforeChange':true,'change':true});this.client.on(this.listenEvent,this.onClientRender,this,{single:true,buffer:this.bufferListener});},_addEachField:function(code,index){var field=this.findField(code);if(!field){return;}
field.__index=index;var el=this.findField(code).el;this.compositeEl.add(el);},onClientActivate:function(){this.keyNav.enable();},onClientDeactivate:function(){this.keyNav.disable();},onClientRender:function(){this.compositeEl=new Ext.CompositeElementLite();Ext.each(this.fields,this._addEachField,this);this.initKeyNav();this.attachListeners();this.fireEvent('render',this);},onTab:function(e){if(!e.ctrlKey){e.preventDefault();}
if(!e.shiftKey){this.focusNextField();}else{this.focusPrevField();}},initKeyNav:function(){this.keyNav=new Ext.KeyNav(this.compositeEl,Ext.apply({scope:this,'tab':this.onTab},this.keyNavArgs));},enable:function(){this.enabeld=true;this.attachListeners();this.keyNav.enable();},disable:function(){this.enabled=false;this.detachListeners();this.keyNav.disable();},focusPrevField:function(){var currentFocusedField=this.findCurrentFocusedField();if(!currentFocusedField){this.focusFieldByIndex(0);}else{var index=this.findFieldIndex(currentFocusedField);if(index<=0){this.focusFieldByIndex(this.fields.length-1);}else{this.focusFieldByIndex(index-1);}
if(this.findCurrentFocusedField().disabled){this.focusPrevField();}}},focusNextField:function(){var currentFocusedField=this.findCurrentFocusedField();if(!currentFocusedField){Zw.console("Nothing is focused, so starting at zero");this.focusFieldByIndex(0);}else{var index=this.findFieldIndex(currentFocusedField);if(index>=this.fields.length-1){Zw.console("Starting over at zero because index ",index,'was greater than length',this.fields.length-1);this.focusFieldByIndex(0);}else{Zw.console('Focusing next');this.focusFieldByIndex(index+1);}
if(this.findCurrentFocusedField().disabled){this.focusNextField();}}},findCurrentFocusedField:function(){return this.focusField;},findFieldIndex:function(){return this.focusField.__index;},focusFieldByIndex:function(index){Zw.console("TabinatorPlugin - FocusFieldByIndex",index);var code=this.fields[index];this.focusFieldByCode(code);},focusFieldByCode:function(code){var field=this.findField(code);this.setFocusField(field);},onFieldBlur:function(sender){if(this.focusField==sender){Zw.console("TabinatorPlugin - Field blur, so setting to null");this.setFocusField(null);}},setFocusField:function(field){var old=this.focusField;if(this.fireEvent('beforeChange',this,old,field)){this.focusField=field;if(field)
field.focus();this.fireEvent('change',this,old,this.focusField);}},onFieldFocus:function(sender){if(sender){this.setFocusField(sender);Zw.console("TabinatorPlugin - Field focus, so setting field to ",this.focusField,arguments);}else{Zw.console("TabinatorPlugin - Field focus, but it was undefined, so we are ignoring it.")}},onDestroy:function(){delete this.focusField;delete this.fields;},addField:function(code){this.fields.push(code);},attachListeners:function(){Ext.each(this.fields,this._attachListener,this);this.fireEvent('attach',this);},_attachListener:function(field){field=this.findField(field);if(!field){return;}
field.on('blur',this.onFieldBlur,this);field.on('focus',this.onFieldFocus,this);},detachListeners:function(){Ext.each(this.fields,this._detachListener,this);this.fireEvent('detach',this);},_detachListener:function(field){field=this.findField(field);if(!field){return;}
field.on('blur',this.onFieldBlur,this);field.on('focus',this.onFieldFocus,this);}});

Zw.util.TabinatorFocusFirstTabStrategyPlugin=Ext.extend(Zw.Plugin,{firstIndex:0,onInit:function(){this.client.on('attach',this.attach,this);this.client.on('detach',this.detach,this);this.client.on('render',this.onRender,this,{single:true,buffer:true});},onRender:function(){if(this.client&&(this.autoFocus||this.client.autoFocus))
this.client.focusFieldByIndex(this.firstIndex);},attach:function(){this.client.client.on('activate',this.onClientActivate,this);this.client.client.on('deactivate',this.onClientDeactivate,this);},detach:function(){this.client.client.on('activate',this.onClientActivate,this);this.client.client.on('deactivate',this.onClientDeactivate,this);},onClientDeactivate:Ext.emptyFn,onClientActivate:function(){this.client.focusFieldByIndex(0);},onDestroy:function(){this.detach();this.client.un('attach',this.attach,this);this.client.un('detach',this.detach,this);this.client.un('render',this.onRender,this);}});

Zw.util.TabinatorFocusPreviousTabStrategyPlugin=Ext.extend(Zw.Plugin,{firstIndex:0,onInit:function(){var client=this.client;if(client){this.client.on('attach',this.attach,this);this.client.on('detach',this.detach,this);this.client.on('render',this.onRender,this,{single:true,buffer:true});this.client.on('change',this.saveCurrentFocusedField,this);if(client.client){this.client.client.focus=this.client.client.focus.createInterceptor(this.setTabToPreviousFocusField,this.client);}}},setTabToPreviousFocusField:function(){if(this.previouslyFocusedField){this.setFocusField(this.previouslyFocusedField);return false;}
else{this.focusFieldByIndex(0);}},onRender:function(){var client=this.client;if(client&&(this.autoFocus||client.autoFocus))
this.client.focusFieldByIndex(this.firstIndex);},attach:function(){var client=this.client;if(client&&client.client){this.client.client.on('activate',this.onClientActivate,this);this.client.client.on('deactivate',this.onClientDeactivate,this);}},detach:function(){var client=this.client;if(client&&client.client){this.client.client.on('activate',this.onClientActivate,this);this.client.client.on('deactivate',this.onClientDeactivate,this);}},onClientDeactivate:Ext.emptyFn,onClientActivate:function(){var client=this.client;if(client)
this.client.setFocusField(this.client.previouslyFocusedField);},saveCurrentFocusedField:function(sender,oldField,newField){if(newField){this.client.previouslyFocusedField=newField;}},onDestroy:function(){var client=this.client;if(client){this.detach();this.client.un('attach',this.attach,this);this.client.un('detach',this.detach,this);this.client.un('render',this.onRender,this);this.client.un('change',this.saveCurrentFocusedField,this);}}});

Ext.namespace('Zw.controls');Zw.controls.Button=Ext.extend(Ext.v3.Button,{handleMouseEvents:Zw.capabilities.mouseEventsCss,genre:Zw.controls.BUTTON_GENRE_WINDOW_TOOLBAR,name:null,getTemplateArgs:function(){var cls=(this.cls||'');cls+=this.iconCls?(this.text?' x-btn-text-icon':' x-btn-icon'):' x-btn-noicon';if(this.pressed){cls+=' x-btn-pressed';}
return[this.text||'&#160;',this.type,this.iconCls||'',cls,'x-btn-'+this.scale+' x-btn-icon-'+this.scale+'-'+this.iconAlign+' '+this.cls+'-wrap',this.getMenuClass()];},initComponent:function(){Zw.controls.Button.superclass.initComponent.call(this);if(!this.name)
this.name=this.text;},onRender:function(ct,pos){if(!this.template){if(!Zw.controls.Button.template){Zw.controls.Button.template=new Ext.Template('<table cellspacing="0" class="x-btn {3}"><tbody class="{4}">','<tr class="x-btn-row">','<td class="x-btn-ml"></td>','<td class="x-btn-mc">','<em class="{5}" unselectable="on">','<button class="x-btn-text {2}" type="{1}">{0}</button>','</em>','</td>','<td class="x-btn-mr"><i>&#160;</i></td>','</tr>',"</tbody></table>");Zw.controls.Button.template.compile();}
this.template=Zw.controls.Button.template;}
Zw.controls.Button.superclass.onRender.call(this,ct,pos);},afterRender:function(){Ext.v3.Button.superclass.afterRender.call(this);this.autoWidth();}});Zw.controls.BUTTON_GENRE_TOPTOOLBAR=1;Zw.controls.BUTTON_GENRE_WINDOW_TOOLBAR=2;Zw.controls.BUTTON_GENRE_MENU_RIGHTCLICK=3;Zw.controls.BUTTON_GENRE_SENDMSG_COMPOSE=4;Zw.controls.BUTTON_GENRE_SENDMSG_POSTSEND=5;

Ext.namespace('Zw.controls');Zw.controls.ActionButton=Ext.extend(Ext.Button,{name:null,splitButton:false,splitButtonHandler:undefined,autoWidth:Ext.emptyFn,cls:'zw-action-button',disabledClass:'x-item-disabled zw-action-button-disabled',initComponent:function(){Zw.controls.ActionButton.superclass.initComponent.call(this);if(this.splitButton){this.cls+=' zw-action-button-split';}
if(this.iconCls){this.cls+=' x-btn-text-icon';}
var tpl=null;if(this.splitButton){tpl=this.splitTpl;}else{tpl=this.tpl;}
if(!tpl){tpl=new Ext.Template("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"x-btn-wrap\"><tbody><tr>","<td class=\"x-btn-left\"><i>&#160;</i></td><td class=\"x-btn-center\">","<em unselectable=\"on\" class=\"x-btn-main\"><button class=\"x-btn-text x-btn-main\" type=\"{1}\">{0}</button></em>","<em class=\"x-btn-split\"></em>",(this.splitButton?"<em unselectable=\"on\" class=\"x-btn-side\"><button class=\"x-btn-side\" type=\"button\"></button></em>":""),"</td><td class=\"x-btn-right\"><i>&#160;</i></td>","</tr></tbody></table>");tpl.compile();}
this.template=tpl;if(!this.name)
this.name=this.text;},activateSplitButtonMouseEventsClasses:function(el,baseCls,mo,md){if(mo){el.on('mouseover',function(){el.addClass(baseCls+'-mo');},this);el.on('mouseout',function(){el.removeClass(baseCls+'-mo');},this);}
if(md){el.on('mousedown',function(e){e.stopPropagation();el.addClass(baseCls+'-md');},this);el.on('mouseup',function(e){e.stopPropagation();el.removeClass(baseCls+'-md');},this);}else{el.on('mousedown',function(){el.removeClass(baseCls+'-mo');},this);}},onRender:function(ct,position){Zw.controls.ActionButton.superclass.onRender.call(this,ct,position);if(this.splitButton){var mainButtonWrapper=this.el.child('em.x-btn-main');var sideButtonWrapper=this.el.child('em.x-btn-side');var mainButton=this.el.child('button.x-btn-main');var sideButton=this.el.child('button.x-btn-side');this.activateSplitButtonMouseEventsClasses(mainButtonWrapper,'x-btn-main',true,false);this.activateSplitButtonMouseEventsClasses(sideButtonWrapper,'x-btn-side',true,true);mainButton.addClass('zw-button-icon-send');sideButton.on('click',this.sideButtonClick,this);}
var el=Ext.get(this.el);if(el){el.addClassOnOver('zw-action-button-mo');el.addClassOnFocus('zw-action-button-mf');el.addClassOnClick('zw-action-button-md');}},sideButtonClick:function(e,el){if(this.splitButtonHandler&&!this.disabled){var sideButtonClickArgs=Array.prototype.slice.call(arguments);this.splitButtonHandler.apply((this.scope||this),sideButtonClickArgs);}},onDisable:function(){if(this.el){this.el.addClass(this.disabledClass);this.el.dom.disabled=true;}
this.disabled=true;},onEnable:function(){if(this.el){this.el.removeClass(this.disabledClass);this.el.dom.disabled=false;}
this.disabled=false;},setSize:function(){},getSize:function(){return this.el.getSize();},garbage:""});Ext.reg('Zw.controls.ActionButton',Zw.controls.ActionButton);

Zw.namespace('Zw.controls');Zw.controls.ButtonGroup=Ext.extend(Ext.ButtonGroup,{handleMouseEvents:Ext.isIE7?false:true,monitorChildrenClicks:true,bubbleEvent:function(e){this.fireEvent('click',this,e);},initComponent:function(){this.addEvents('click','mouseover','mouseout');Ext.applyIf(this,{title:this.name});Zw.controls.ButtonGroup.superclass.initComponent.call(this);this.on('render',this.onAfterRender,this);},onAfterRender:function(){this.wrapEl=this.el.child("div.x-btn-group-bwrap");if(this.handleMouseEvents){this.el.on("mouseover",this.onMouseOver,this);if(Zw.capabilities.ALLOW_GROUPTOOLBAR_HIGHLIGHTING){this.on("mouseover",this.animFadeIn,this);this.on("mouseout",this.animFadeOut,this);}}
if(this.monitorChildrenClicks){if(this.items){this.items.each(function(item){if(Ext.type(item.on)=='function')
item.on('click',this.bubbleEvent,this);},this);}}},onMouseOver:function(e){if(this.inMouseOver)
return;if(!this.inMouseOver)
this.inMouseOver=true;if(!this.disabled){var internal=e.within(this.el,true);if(!internal){if(!this.monitoringMouseOver){Ext.getDoc().on('mouseover',this.monitorMouseOver,this);this.monitoringMouseOver=true;}
this.fireEvent('mouseover',this,e);}}
this.inMouseOver=false;},monitorMouseOver:function(e){if(e.target!=this.el.dom&&!e.within(this.el)){if(this.monitoringMouseOver){Ext.getDoc().un('mouseover',this.monitorMouseOver,this);this.monitoringMouseOver=false;}
this.onMouseOut(e);}},onMouseOut:function(e){this.fireEvent('mouseout',this,e);},animFadeIn:function(){if(this.el.hasActiveFx()){this.el.stopFx();}
Ext.fly(this.wrapEl).addClass("zw-panel-over");},animFadeOut:function(){this.el.shift({duration:0.1,callback:function(){Ext.fly(this.wrapEl).replaceClass("zw-panel-over","zw-panel-over-75pctfade");},scope:this});this.el.shift({duration:0.003,callback:function(){Ext.fly(this.wrapEl).replaceClass("zw-panel-over-75pctfade","zw-panel-over-50pctfade");},scope:this});this.el.shift({duration:0.003,callback:function(){Ext.fly(this.wrapEl).replaceClass("zw-panel-over-50pctfade","zw-panel-over-25pctfade");},scope:this});this.el.shift({duration:0.003,callback:function(){Ext.fly(this.wrapEl).removeClass("zw-panel-over-25pctfade");},scope:this});}});

Zw.namespace('Zw.controls');Zw.controls.LargeButton=Ext.extend(Zw.controls.Button,{genre:Zw.controls.BUTTON_GENRE_TOPTOOLBAR,height:54,minWidth:50,cls:"zw-toptoolbar-btn",scale:'large',iconAlign:'top'});Ext.reg('Zw.controls.LargeButton',Zw.controls.LargeButton);

Zw.controls.LargeButtonGroup=Ext.extend(Zw.controls.ButtonGroup,{initComponent:function(){Zw.controls.LargeButtonGroup.superclass.initComponent.call(this);},cls:'zw-toptoolbar-btn-group'});

Zw.namespace('Zw.controls');Zw.controls.WindowToolbarButton=Ext.extend(Zw.controls.Button,{genre:Zw.controls.BUTTON_GENRE_WINDOW_TOOLBAR,height:40,minWidth:20,cls:"zw-windowtbar-btn",scale:'medium',iconAlign:'top'});Ext.reg('Zw.controls.WindowToolbarButton',Zw.controls.WindowToolbarButton);

Zw.controls.WindowToolbarButtonGroup=Ext.extend(Ext.ButtonGroup,{cls:'zw-windowtbar-btn-group',handler:Ext.emptyFn,initComponent:function(){if(this.clsAddl&&this.clsAddl!='')
this.cls+=" "+this.clsAddl;Zw.controls.WindowToolbarButtonGroup.superclass.initComponent.call(this);},_enableButton:function(item){item.enable();},_disableButton:function(item){item.disable();},enableButton:function(code){Ext.each(this.find('code',code),function(c){c.enable();},this);},disableButton:function(code){Ext.each(this.find('code',code),function(c){c.disable();},this);},enableButtons:function(){this.items.each(this._enableButton,this);},disableButtons:function(){this.items.each(this._disableButton,this);},setDefaults:function(d){this.defaults=Ext.applyIf(this.defaults||{},d);this.defaults=Ext.applyIf(this.defaults,{xtype:"Zw.controls.WindowToolbarButton",handler:this.handler,scope:this.scope||this});},onAfterRender:function(){Zw.controls.WindowToolbarButtonGroup.superclass.onAfterRender.call(this);},garbage:""});Ext.reg('Zw.controls.WindowToolbarButtonGroup',Zw.controls.WindowToolbarButtonGroup);

Zw.namespace('Zw.controls');Zw.controls.ContextToolbar=Ext.extend(Ext.Panel,{layout:'card',border:false,monitorResize:true});

Ext.namespace('Zw.controls')
Zw.controls.ToolbarDetail=Ext.extend(Ext.BoxComponent,{cls:"zw-toptoolbar-detail-wrap",startHidden:true,styleHide:"position: static; visibility: hidden; left: auto; top: auto; z-index: auto;",styleShow:"position: static; visibility: visible; left: auto; top: auto; z-index: auto;",initComponent:function(){Zw.controls.ToolbarDetail.superclass.initComponent.call(this);},getTemplateArgs:function(){var cls=(this.cls||'');var hiddenCls="";if(this.startHidden){}
return{cls:cls,hiddenCls:hiddenCls,style:this.style};},onRender:function(ct,position){Zw.controls.ToolbarDetail.superclass.onRender.call(this,ct,position);if(!this.template){this.template=new Ext.Template('<div class="zw-toptoolbar-detail {hiddenCls}" style="{style}">','<div class="zw-toptoolbar-detail-wrap">','<div class="{cls}">','</div>','</div>','</div>');}
var targs=this.getTemplateArgs();if(position){this.el=this.template.insertBefore(position,targs,true);}else{this.el=this.template.append(ct,targs,true);}}});

Zw.namespace('Zw.controls');Zw.controls.Window=Ext.extend(Ext.Window,{constrain:false,xtype:'Zw.controls.Window',monitorResize:false,modal:false,constrainHeader:false,context:null,cls:'zw-window',targetTaskbar:'desktop',minimizable:true,maximizable:true,focus:Ext.emptyFn,shadow:"sides",shadowOffset:7,border:false,plain:true,alignToEl:null,alignToPosition:'tl-tl',alignToXOffset:0,alignToYOffset:0,showIcon:true,onEsc:Ext.emptyFn,alreadyPositioned:false,initComponent:function(){if(this.targetTaskbar===null){this.minimizable=false;}
if(!Zw.capabilities.ALLOW_MINIMIZE){this.minimizable=false;}
if(!Zw.capabilities.ALLOW_MAXIMIZE){this.maximizable=false;}
this.addPlugin(new Zw.util.ProxyPlugin({namespace:'/desktop/window'}));if(!this.bbar){if(!this.preventStatusBar){this.bbar=new Zw.controls.StatusBar({statusAlign:'left',defaultText:'',defaultIconCls:'default-icon',text:this.statusBarText,iconCls:'ready-icon'});}}
if(this.getItems){this.items=this.getItems();}
this.onInit();Zw.controls.Window.superclass.initComponent.call(this);if(!this.title||this.title=="")
this.title=Zw.localize('window.title.newText');this.on("render",this.getDefaultPosition,this);},onInit:Ext.emptyFn,initEvents:function(){Zw.controls.Window.superclass.initEvents.call(this);this.on("activate",this.onActivate,this);this.on("deactivate",this.onDeactivate,this);this.on("close",this.onClose,this);},createToolHandler:function(t,tc,overCls,panel){return function(e){t.removeClass(overCls);if(tc.handler){tc.handler.call(tc.scope||t,e,t,panel);}};},afterRender:function(){Zw.controls.Window.superclass.afterRender.call(this);var hdrEl=this.el.child("div.x-window-header");if(this.showIcon){var tpl=new Ext.Template('<div class="zw-window-icon" />');var hdrTxtEl=hdrEl.child("span.x-window-header-text");tpl.insertBefore(hdrTxtEl);}
if(this.closable){var closeEl=hdrEl.child("div.x-tool-close");closeEl.addClassOnClick("x-tool-close-down");}
var minEl;var maxEl;if(this.maximizable){maxEl=hdrEl.child("div.x-tool-maximize");maxEl.addClassOnClick("x-tool-maximize-down");var restoreEl=hdrEl.child("div.x-tool-restore");restoreEl.addClassOnClick("x-tool-restore-down");}
if(this.minimizable){minEl=hdrEl.child("div.x-tool-minimize");minEl.addClassOnClick("x-tool-minimize-down");}},onActivate:function(){if(!this.topHdrEl)
this.topHdrEl=this.el.child("div.x-window-tl");this.topHdrEl.removeClass("zw-window-inactive");this.el.removeClass("zw-window-inactive-wrap");},onClose:Ext.emptyFn,onDeactivate:function(){if(!this.topHdrEl)
this.topHdrEl=this.el.child("div.x-window-tl");this.topHdrEl.addClass("zw-window-inactive");this.el.addClass("zw-window-inactive-wrap");},ghost:function(cls){return Zw.controls.Window.superclass.ghost.call(this,this.cls);},maximize:function(){Zw.controls.Window.superclass.maximize.call(this);},restore:function(){Zw.controls.Window.superclass.restore.call(this);},attention:function(){this.fireEvent('attention',this);},setActive:function(active){if(active){if(!this.maximized){this.showActiveShadow();}
this.fireEvent('activate',this);}else{this.showInactiveShadow();this.fireEvent('deactivate',this);}},showActiveShadow:function(){if(this.el){if(!this.destroyed){this.el.enableShadow(true);}}},showInactiveShadow:function(){this.el.disableShadow();},disableShadow:function(){if(this.shadow){this.shadowDisabled=true;this.shadow.hide();this.lastShadowOffset=this.shadowOffset;this.shadowOffset=0;}},enableShadow:function(show){if(this.shadow){this.shadowDisabled=false;this.shadowOffset=this.lastShadowOffset;delete this.lastShadowOffset;if(show){this.sync(true);}}},getDefaultPosition:function(){if(this.alignToEl){this.getEl().setWidth(this.width);var position=this.getEl().getAlignToXY(this.alignToEl,this.alignToPosition);this.x=this.x||(position[0]+this.alignToXOffset);this.y=this.y||(position[1]+this.alignToYOffset);}},destroy:function(){this.destroyed=true;delete this.context;Zw.controls.Window.superclass.destroy.call(this);}});Ext.reg('zwWindow',Zw.controls.Window);Ext.reg('Zw.controls.Window',Zw.controls.Window);

Zw.namespace('Zw.controls.plugins');Zw.controls.plugins.WindowKeyMapPlugin=Ext.extend(Zw.Plugin,{keyMapConfig:undefined,onInit:function(client){if(this.keyMapConfig){this.keyMap=new Ext.KeyMap(document,this.keyMapConfig);this.client.on('activate',this.startKeyNav,this);this.client.on('deactivate',this.stopKeyNav,this);this.client.on('suspendkeys',this.stopKeyNav,this);this.client.on('resumekeys',this.startKeyNav,this);}},startKeyNav:function(){if(this.keyMap){this.keyMap.enable();}},stopKeyNav:function(){if(this.keyMap){this.keyMap.disable();}},destroyKeyNav:function(){if(this.keyMap){this.keyMap.disable();Ext.destroy(this.keyMap);delete this.keyMap;}
var client=this.client;if(client){client.un('activate',this.startKeyNav,this);client.un('deactivate',this.stopKeyNav,this);client.un('suspendkeys',this.stopKeyNav,this);client.un('resumekeys',this.startKeyNav,this);}},onDestroy:function(){this.destroyKeyNav();}});

Zw.namespace('Zw.templates');Zw.templates.HighlighterStrategy=function(strategies){this.process=function(tplArgs,filter){Ext.each(strategies,function(strategy){strategy(tplArgs,filter);});return tplArgs;}}
Zw.templates.HighlighterStrategy.process=function(strategies,tplArgs,filter){if(!strategies)return tplArgs;if(Ext.type(strategies)=='function'){if(Ext.type(strategies.process)=='function')
strategies.process(tplArgs,filter);else
strategies(tplArgs,filter);}else{Ext.each(strategies,function(strategy){if(Ext.type(strategy.process)=='function')
strategy.process(tplArgs,filter);else
strategy(tplArgs,filter);},this);}
return tplArgs;}
Zw.templates.nullHighlighterStrategy=function(tplArgs,filter){return tplArgs;}
Zw.templates.nameHighlighterStrategy=function(tplArgs,filter){if(!filter)return tplArgs;filter=filter.toLowerCase();var parts=tplArgs.displayName.split(/ /g);var L=parts.length;var spanStart='<span class="highlight">';var spanEnd='</span>';var found=false;for(var i=0;i<L;i++){var part=parts[i];var index=part.toLowerCase().indexOf(filter);if(index!=-1){found=true;var firstPart=part.substring(0,index);var foundRegion=part.substring(index,index+filter.length);var lastPart=part.substring(index+filter.length);part=firstPart+spanStart+foundRegion+spanEnd+lastPart;parts[i]=part;}}
if(!found){var part=tplArgs.displayName;var index=part.toLowerCase().indexOf(filter);if(index!=-1){found=true;var firstPart=part.substring(0,index);var foundRegion=part.substring(index,index+filter.length);var lastPart=part.substring(index+filter.length);tplArgs.displayName=firstPart+spanStart+foundRegion+spanEnd+lastPart;}}else{tplArgs.displayName=parts.join(' ');}
return tplArgs;}
Zw.templates.mobileNumberHighlighterStrategy=function(tplArgs,filter){if(!filter)return tplArgs;var spanStart='<span class="highlight">';var spanEnd='</span>';var number=tplArgs.rawMobileNumber;var format=Zw.util.MobileNumberFormatterPlugin.getInstance().getFormat(number);if(!number)
return;var index=number.indexOf(filter);var part=number;var found=false;if(index!=-1){found=true;var firstPart=part.substring(0,index);var foundRegion=filter;var lastPart=part.substring(index+filter.length);tplArgs.mobileNumber=Zw.templates.fancyFormatMobileNumber(firstPart,spanStart,foundRegion,spanEnd,lastPart,format);}
if(!found){filter=Zw.util.getRawPhoneNumber(filter);index=number.indexOf(filter);if(index!=-1){found=true;var firstPart=part.substring(0,index);var foundRegion=filter;var lastPart=part.substring(index+filter.length);tplArgs.mobileNumber=Zw.templates.fancyFormatMobileNumber(firstPart,spanStart,foundRegion,spanEnd,lastPart,format);}}}
Zw.templates.channelHighlighterStrategy=function(tplArgs,filter){var part=tplArgs.channel;if(!part){return;}
var spanStart='<span class="highlight">';var spanEnd='</span>';var index=part.indexOf(filter);var found=false;if(index!=-1){found=true;var firstPart=part.substring(0,index);var foundRegion=filter;var lastPart=part.substring(index+filter.length);tplArgs.channel=firstPart+spanStart+foundRegion+spanEnd+lastPart;}}
Zw.templates.fancyFormatMobileNumber=function(firstPart,spanStart,foundRegion,spanEnd,lastPart,format){var counter=0;var result=Zw.util.MobileNumberFormatterPlugin.getInstance().display(firstPart,format,counter);counter+=result.length;result+=spanStart;var found=Zw.util.MobileNumberFormatterPlugin.getInstance().display(foundRegion,format,counter);counter+=found.length;result+=found;result+=spanEnd;var last=Zw.util.MobileNumberFormatterPlugin.getInstance().display(lastPart,format,counter);counter+=last.length;result+=last;return result;}

Zw.namespace('Zw.controls.plugins');Zw.controls.plugins.ContactCardExtendedViewPlugin=Ext.extend(Zw.Plugin,{miniTpl:'<div class="mini-extended"><div class="l"><div class="r"><div class="c">'+'<div class=""><span class="{[values.manufacturer === "Make" ? "undef" : ""]} manufacturer">{values.manufacturer}</span><div class="{[ values.carrier === "Carrier" ? "undef" : ""]} carrier">{values.carrier}</div></div>'+'<div class=""><span class="{[values.phone === "Model" ? "undef" : ""]} model">{values.phone}</span><div class="plan">{values.plan}</div></div>'+'</div></div></div></div>',onInit:function(){this.addPlugin(new Zw.util.ProxyPlugin({namespace:'/desktop/contactcard/extended'}));this.client.on('click',this.onClick,this);this.client.toggleExtendedView=this.showExtendedView.createDelegate(this);if(this.integrate){this.client.on('BeforeRender',this.onBeforeRender_integrate,this,{single:true});this.client.on('Update',this.onUpdate,this);}},onClick:function(sender,e){if(e.ctrlKey){this.showExtendedView();e.stopEvent();}},onShow:Ext.emptyFn,onBeforeRender_integrate:function(){this.client.additionalTemplate=Zw.util.getTemplate(this.miniTpl).apply(this.client);},onUpdate_integrate:function(){this.publish('/desktop/contact/extend/integrate/update');},onUpdate:function(){this.publish('/desktop/contact/extend/update');},showExtendedView:function(){this.publish('/desktop/contact/extend/show');},publish:function(uri,args){args=args||{};var card=this.client;var contact=card.__unsafeResolveContactGlobally()||card.contact;var plugin=this;this.getContext().publish('/app/service/run',{pkg:'contact.services',service:'Zw.services.ContactCardExtendedViewService',uri:uri,args:Ext.apply(args,{contact:contact,card:card,plugin:plugin,onShow:this.onShow})});},onDestroy:function(){this.client.un('click',this.onClick,this);this.client.un('Update',this.onUpdate,this);}});

Zw.namespace('Zw.controls.plugins');Zw.controls.plugins.ContactCardEditContactWindowPlugin=Ext.extend(Zw.Plugin,{onInit:function(){this.client.on('edit',this.edit,this);},edit:function(){this.client.factory.context.publish('/desktop/contact/edit',{contact:this.client.getContact()});},onDestroy:function(){this.client.un('edit',this.edit,this);}});Zw.controls.plugins.ContactCardEditIdentityWindowPlugin=Ext.extend(Zw.Plugin,{onInit:function(){this.client.on('edit',this.edit,this);},edit:function(){this.client.factory.identityManager.editIdentity();},onDestroy:function(){this.client.un('edit',this.edit,this);}});Zw.features.PluginFactory.register('/desktop/contact/card',function(args){if(args&&!args.preventEditContact){return new Zw.controls.plugins.ContactCardEditContactWindowPlugin();}});

Zw.namespace('Zw.controls.plugins');Zw.controls.plugins.ContactCardEditNamePlugin=Ext.extend(Zw.Plugin,{context:null,cls:'x-selected',doubleClickProtectionTimeout:75,delay:10000,onInit:function(){var card=this.client;card.showEditor=this.showEditor;card.getEditor=this.getEditor;card.on('nameClick',this.onNameClick,this);card.addEvents("nameEditing");card.addEvents("showEditor");card.addEvents("nameChanged");card.___editNamePlugin=this;},onNameClick:function(){if(!this.client)return;if(this.client.contact){var context=this.getContext();var isDeviceOwned=context.Account.isDeviceOwned(Zw.data.get(this.client.contact,'address'));if((this.client.contact.id==-1&&!Zw.capabilities.EDIT_SELF)||!isDeviceOwned){return;}}
var el=this.client.els.name;var cls=this.cls;if(this.inDoubleClickProtection()){el.removeClass(cls);return;}
if(this.client.determineSize()=='normal'){if(el.hasClass(cls)){el.removeClass(cls);this.showEditor.call(this.client,['name click']);}else{el.addClass(cls);if(!this.unselectTask){this.unselectTask=new Ext.util.DelayedTask(this.__unselectTask,this);}
this.startDoubleClickProtection();this.unselectTask.delay(this.delay);}}},__unselectTask:function(){if(this.client)
this.client.els.name.removeClass(this.cls);},onBeforeStartEdit:function(sender,boundEl){if(!this.popup){boundEl.parent().appendChild(sender.el);}},__doubleClickTask:function(){this.m_i_hate_double_clicks=false;},startDoubleClickProtection:function(){if(!this.doubleClickProtectionTask)
this.doubleClickProtectionTask=new Ext.util.DelayedTask(this.__doubleClickTask,this);this.m_i_hate_double_clicks=true;this.doubleClickProtectionTask.delay(this.doubleClickProtectionTimeout);},inDoubleClickProtection:function(){return this.m_i_hate_double_clicks===true;},getEditor:function(){if(!this.editor){this.editor=new Ext.Editor(new Ext.form.TextField({selectOnFocus:true,cls:'x-menu x-menu-undo-textarea'}),{completeOnEnter:true,cancelOnEsc:true,ignoreNoChange:true,alignment:'c-c',autoSize:true});this.editor.on('beforestartedit',this.___editNamePlugin.onBeforeStartEdit,this);}
return this.editor;},showEditor:function(reason){if(reason)
Zw.util.log('showing editor: '+reason);if(reason!='name click'){if(this.determineSize()!='normal'){var menu=this.factory.showContactCardPopupMenu(this);menu.card.showEditor.defer(100,menu.card,['redirect '+reason]);return;}}
this.editor=this.getEditor();this.fireEvent('showEditor');this.editor.on('complete',this.___editNamePlugin.onEditComplete,this.___editNamePlugin,{single:true});if(!this.nameEl)
this.nameEl=this.getEl().child('.zw-contactcard-name');this.displayName=(this.displayName||'').replace(/undefined/g,'');this.displayName=(this.displayName||'').replace(/null/g,'');var f=this.fullName;if(f==Zw.localize('generic.text.unnamed')||f==Zw.localize('generic.text.unnamedGroup'))
f='';Zw.util.log('Showing name: '+f);this.editor.startEdit(this.els.name,f);this.editor.el.setZIndex(25000);},getContactCardRecord:function(){return this.client.__unsafeResolveContactGlobally();},onEditComplete:function(editor,value,startValue){var values=value.split(/ /g);var contact=this.getContactCardRecord();contact.beginEdit();if(values.length==2){contact.set('firstName',values[0].trim());contact.set('lastName',values[1].trim());}else if(values.length==1){contact.set('firstName',value.trim());contact.set('lastName','');}else if(values.length>2){contact.set('firstName',values[0].trim());values=values.slice(1);contact.set('lastName',values.join(' ').trim());}else{contact.set('firstName','');contact.set('lastName','');value='';}
contact.set('fullName',value);if(contact.modified){var context=this.getContext();if(context){context.publish('/account/contact/save',{contact:contact,doSubmit:true});}}},getContext:function(){if(!this.context)
this.context=this.client.context;if(!this.context)
this.context=Zw.Application.Context;return this.context;},onDestroy:function(){this.client.un('nameclick',this.onNameClick,this);if(this.editor){this.editor.un('complete',this.onEditComplete,this);this.editor.un('beforestartedit',this.___editNamePlugin.onBeforeStartEdit,this);Ext.destroy(this.editor);delete this.editor;}
if(this.unselectTask){this.unselectTask.cancel();delete this.unselectTask;}
if(this.doubleClickProtectionTask){this.doubleClickProtectionTask.cancel();delete this.doubleClickProtectionTask;}}});

Zw.namespace('Zw.controls.plugins');Zw.controls.plugins.ContactCardDropdownPlugin=Ext.extend(Zw.Plugin,{onInit:function(card){this.card=card;this.card.on('arrowclick',this.toggleDropdown,this);this.card.onRightClick=this.toggleDropdown.createDelegate(this);},toggleDropdown:function(){this.context.publish('/desktop/contact/dropdown/toggle',{contact:this.card.getContact(),contactCard:this.card});},onDestroy:function(){this.card.un('arrowclick',this.toggleDropdown,this);}});

Zw.namespace('Zw.controls');Zw.controls.plugins.ContactCardPhoneIconPlugin=Ext.extend(Zw.Plugin,{onInit:function(){this.client.on('phoneclick',this.onPhoneClick,this);this.client.flipPhone=this.onPhoneClick.createDelegate(this);},onDestroy:function(){var client=this.client;if(client){client.un('phoneclick',this.onPhoneClick,this);}},getPhoneIconHoverImgPath:function(){return Zw.data.Phone.phoneIconHoverPath+"/"+Zw.data.Phone.phoneIconImg;},onFlipViewHide:function(){this.isFlipOn=false;var client=this.client;if(client){this.client.els.phone.removeClass('flip');}},onPhoneClick:function(){Zw.util.log('phone click');if(!this.client.contact)
return;if(Zw.data.get(this.client.contact,'mobileNumber')=='5555555555'){return;}
var m_card=this.client;var that=this;var size=m_card.determineSize();if(size=='small'||size=='tiny'||size=='medium'){Zw.util.log("we are "+size+", which is too small. We need to popup a mimmic phone.")}else{Zw.util.log("we are "+size+", which is ok. We can show the flip on this size.")}
if(m_card.phoneRecord){if(that.isFlipOn){that.onFlipViewHide();}else{m_card.els.phone.addClass('flip');that.isFlipOn=true;m_card.factory.flipPhoneBy({el:m_card.els.phone,phoneRecord:m_card.phoneRecord,size:size,scope:that,card:m_card,callback:that.onFlipViewHide});}}else if(!m_card.phoneRecord){if(this.client.contact.id==-1&&!Zw.capabilities.EDIT_SELF_PHONE)
return;if(!Zw.capabilities.EDIT_ANY_PHONE)
return;m_card.factory.contactManager.choosePhone({isIdentity:m_card.isIdentityCard,phoneKey:m_card.get('phoneKey'),scope:that,callback:function(w,e){var key=e.phoneKey;var contact=m_card.getContact();Zw.util.log('phone key: '+key);contact.beginEdit();contact.set('phoneKey',key);m_card.factory.contactManager.saveContact({contact:contact,doSubmit:true});Zw.util.log('saved in local contactcard contact');m_card.update();}});}}});

Zw.namespace('Zw.controls.plugins');Zw.controls.plugins.ContactCardErrorPlugin=Ext.extend(Zw.Plugin,{errorDescription:undefined,onInit:function(){this.client.on('show',this.showError,this);},showError:function(){var clientEl=this.client.el;clientEl.addClass('zw-contactcard-error');clientEl.addClassOnOver('zw-contactcard-error-mo');var contactCardWrapper=this.client.els.number.parent();var carrierUnsupportedIconElement=contactCardWrapper.createChild({tag:'span',cls:'zw-contactcard-errorIcon'});carrierUnsupportedIconElement.addClassOnOver('zw-contactcard-errorIcon-mo');carrierUnsupportedIconElement.on('click',this.showErrorDescription,this);},showErrorDescription:function(){this.context.publish('/app/service/run',{pkg:'contact.services',service:'Zw.services.ContactCardErrorService',uri:'/desktop/contact/error/show',args:{contactCard:this.client,errorDescription:this.errorDescription}});},onDestroy:function(){this.client.un('render',this.setupContactCard,this);}});

Zw.namespace('Zw.controls.plugins');Zw.controls.plugins.ContactCardZipgroupPlugin=Ext.extend(Zw.Plugin,{onInit:function(){this.client.type='zipgroup';this.client.getMobileNumberAreaText=this.getMobileNumberAreaText;this.client.on('render',this.setupContactCard,this,{single:true});this.address=Zw.data.get(this.client,'address');},setupContactCard:function(){this.client.el.addClass('zw-groupContactCard');},getMobileNumberAreaText:function(previewStore){var contact=this.getContact();var count=Zw.data.get(contact,'memberCount');if(!count&&this.factory){var address=Zw.data.get(contact,'address');if(address){var device=this.factory.context.Account.getDeviceByAddress(address);if(device){count=device.getContactsCount();}}}
var postText=' '+(count==1?Zw.localize('generic.text.member'):Zw.localize('generic.text.members'));if(typeof count==='number'){return count+postText;}
return'1'+postText;},onDestroy:function(){delete this.contacts;delete this.address;delete this.context;}});

Zw.namespace('Zw.controls');Zw.controls.ContactCard=Ext.extend(Ext.SplitButton,{contact:null,overCls:'',isIdentityCard:false,isGroupCard:false,groupStore:undefined,preventRemove:false,isUnnamed:false,baseCls:'zw-contactcard',preventGlobalAccess:false,preventEditName:false,log:Ext.emptyFn,onAfterCloseBoxClick:Ext.emptyFn,closebox:true,arrow:true,autoWidth:Ext.emptyFn,cssUnnamed:'zw-contactcard-unnamed',get:function(field){if(this.contact){if(this.contact.get){return this.contact.get(field);}else{return this.contact[field];}}
return this[field];},set:function(field,value){if(this.contact){if(this.contact.set){this.contact.set(field,value);}else{this.contact[field]=value;}}else{this[field]=value;}},initComponent:function(){Zw.controls.ContactCard.superclass.initComponent.call(this);if(!this.contact){if(this.contactId){if(this.factory){this.setContact(this.factory.contactManager.getContact(this.contactId));}}}else{this.setContact(this.contact);}},highlighterStrategy:Zw.util.nullHighlighterStrategy,_applyHighlighterStrategy:function(tplArgs){return Zw.templates.HighlighterStrategy.process(this.highlighterStrategy,tplArgs,this.filter);},applyHighlighterStrategy:function(){this.getTemplateArgs();if(this.highlighterStrategy){this.args=Zw.templates.HighlighterStrategy.process(this.highlighterStrategy,this.args,this.filter);}else{}
var args=this.args;var els=this.els;if(args&&els){els.name.update(args.displayName);els.number.update(args.mobileNumber);els.channel.update(args.channel);}},setData:function(record){this.contact=record;this.contact=this.__unsafeResolveContactGlobally();this.update();},determineSize:function(){var parent=this.el.up('.zw-contactcard-size');if(parent){if(parent.is('.zw-contactcard-size-large')){return'large';}else if(parent.is('.zw-contactcard-size-medium')){return'medium';}else if(parent.is('.zw-contactcard-size-tiny')){return'tiny';}else if(parent.is('.zw-contactcard-size-small')){return'small';}else{return'normal';}}
return'normal';},__unsafeResolveContactGlobally:function(){if(this.contact&&this.contact.get){return this.contact;}
var result;if(this.preventGlobalAccess){return this.getContact();}
if(!this.globalContact&&this.factory){var mobileNumber=this.get('mobileNumber');var deviceId=this.get('deviceId')||this.get('contactDeviceId');result=this.factory.contactManager.findContactByMobileNumberOrCreateContact(mobileNumber,{deviceId:deviceId});}
result=result||this.getContact();return result;},getContact:function(){if(!this.contact){this.autogeneratedContact=true;this.contact=new Zw.data.Contact({firstName:this.firstName,lastName:this.lastName,channel:this.channel,carrier:this.carrier,thread:this.thread,mobileNumber:this.mobileNumber||this.mobileNum,address:this.address,phoneKey:this.phoneKey,phone:this.phone,deviceId:this.deviceId||this.contactDeviceId},this.isIdentityCard?-1:undefined);}
return this.contact;},setContact:function(record){if(this.listening){if(this.contact){if(this.contact.store){this.contact.store.un('update',this.onContactUpdate,this);this.log('stop listening to old contact');}}}
if(record){if(record.resolveContact){if(this.factory){var r=this.factory.contactManager.getContact(record.contactId);if(r){record=r;}}}}
this.contact=record;this.listening=false;if(this.contact){if(this.contact.store){this.listening=true;this.contact.store.on('update',this.onContactUpdate,this);this.log("Listening to contact updates");}}
if(this.rendered){this.update();}
return this.contact;},onContactUpdate:function(store,record){var good=false;if(this.contact){if(this.contact.id==record.id){good=true;this.log("it WAS our contact!");}}
if(!good){return;}
this.update();},initEvents:function(){this.addEvents("closeboxclick");this.addEvents("phoneclick");this.addEvents("phonechanged");this.addEvents("nameclick");this.addEvents("edit");},isUnnamedCalc:function(){var F=this.get('firstName');var L=this.get('lastName');var Fe=Ext.isEmpty(F);var Le=Ext.isEmpty(L);if(!Fe||!Le){return(F==Zw.localize('generic.text.unnamed'));}else{return true;}},determineName:function(){this.isUnnamed=this.isUnnamedCalc();if(this.isUnnamed){this.fullName=Zw.localize('generic.text.unnamed');}else{var f=this.get('firstName');var l=this.get('lastName');if(!Ext.isEmpty(f)&&!Ext.isEmpty(l)){this.fullName=f+' '+l;}else if(!Ext.isEmpty(f)){this.fullName=f;}else{this.fullName=l;}}
this.displayName=this.getNameThatFitsWidth(this.fullName);this.text=this.displayName;},getPhoneRecord:function(){if(!this.phoneRecord){this.phoneRecord=Zw.data.Phone.PhoneList.getById(this.get('phoneKey'));}
return this.phoneRecord;},getPhoneManufacturer:function(key){return this.phoneRecord?this.phoneRecord.get('make'):Zw.localize('generic.text.make');},getPhoneModel:function(key){return this.phoneRecord?this.phoneRecord.get('model'):Zw.localize('generic.text.model');},getCarrier:function(carrier){this.carrierRecord=Zw.data.Carrier.CarrierList.getById(carrier);if(this.carrierRecord){carrier=this.carrierRecord.get('name');}else{carrier=carrier||Zw.localize('generic.text.carrier');}
return carrier;},formatChannelNumber:function(channel){if(channel=='NaN')
channel='';if(Ext.isEmpty(channel))
channel='';var ch=channel+'';if(ch.length==1&&ch!=' '){ch="0"+ch;}
if(!ch)
ch=' ';return ch;},findAPhoneNameThatFits:function(phoneName){if(!Ext.get('zw-contactcard-phone-measure')){Ext.getBody().createChild('<div id="zw-contactcard-phone-measure" style="font-size:10px;"></div>');}
return this.getTextThatFitsWidth('zw-contactcard-phone-measure',phoneName,75);},getNameThatFitsWidth:function(name,tbl){if(Zw.preventFontMetrics)
return name;if(!tbl){tbl=Ext.get('zw-contactcard-text-metrics');if(!tbl){tbl=Ext.getBody().createChild({tag:'div',id:'zw-contactcard-text-metrics',html:''});}
this.widthNameMax=tbl.getWidth(true)+2;}
var td=tbl;return this.getTextThatFitsWidth(td,name,this.widthNameMax);},getTextThatFitsWidth:function(el,initialText,widthMax){var text=initialText;var changed=false;var newWidth=Ext.util.TextMetrics.measure(el,text+"...").width;while(newWidth>widthMax){text=text.substr(0,text.length-1);changed=true;newWidth=Ext.util.TextMetrics.measure(el,text+"...").width;if(text==""){return initialText.substr(0,newWidth-1);}
if(newWidth<=0){Zw.util.msg(Zw.localize('generic.alert.error.title'),Zw.localize('generic.alert.contactCardWidthError')+initialText,5);return name;}}
return changed?text.trim()+"...":initialText;},setPhoneIcon:function(record,flipped){if(!record)return{};var phoneKey=record.get('phoneKey');var p,pOver,pDown='';var style='';var phoneCls='';var addlCls='';var removeCls="";var styleTopVal=0;if(flipped){styleTopVal=-1*(record.get('normal_flip_h')-28);}
else{styleTopVal=3;}
if(phoneKey){p=Zw.data.Phone.GetBaseSprite(phoneKey);style="background-image:url('"+p+"');top:"+styleTopVal+"px;";phoneCls=Zw.data.Phone.GetBasePhoneIconClass(phoneKey);addlCls='defined_phone';}else{removeCls="defined_phone";Zw.util.log('removing phone icon');p=Zw.data.Phone.generic_phoneIconPath+"/"+Zw.data.Phone.generic_phoneIconImg;}
return{base:p,over:pOver,down:pDown,styleTag:style,phoneCls:phoneCls,addlCls:addlCls,removeCls:removeCls};},update:function(){if(!this.updateTask){this.updateTask=new Ext.util.DelayedTask(this._update,this);}
this.updateTask.delay(100);},_update:function(){this.log('update card');this.determineName();if(this.els){var nameEl=this.els.name;var phone=this.els.phone;var mobileEl=this.els.number;var channelEl=this.els.channel;if(this.isUnnamed){nameEl.addClass(this.cssUnnamed);}else{nameEl.removeClass(this.cssUnnamed);}
nameEl.update(this.displayName);channelEl.update(this.formatChannelNumber(this.get('channel')));mobileEl.update(this.getMobileNumberAreaText());this.phoneRecord=Zw.data.Phone.PhoneList.getById(this.get('phoneKey'));if(this.phoneRecord){var pIcon=this.setPhoneIcon(this.getPhoneRecord());phone.addClass(pIcon.phoneCls);phone.applyStyles(pIcon.styleTag);if(pIcon.addlCls)this.el.addClass(pIcon.addlCls);if(pIcon.removeCls)this.el.removeClass(pIcon.removeCls);}else{phone.setStyle('background-image','');this.el.removeClass('defined_phone');}
this.applyHighlighterStrategy();}
this.fireEvent("Update",this);this.log("Contact card updated",this.contact);},initExpando:function(){var el=this.el.child('.extended');if(!el)return;var e=this.exp={};e.thread=el.child('.thread.text');e.fwd=el.child('.fwd.text');e.manufacturer=el.child('.manufacturer');e.phone=el.child('.phone');e.carrier=el.child('.carrier');e.rx=el.child('.rx .text');e.tx=el.child('.tx .text');},getMobileNumberAreaText:function(previewStore){var text="";text=this.get('mobileNumber')||'5555555555';text=Zw.util.formatMobileNum(text);return text;},getTemplateArgs:function(){this.determineName();var p=this.setPhoneIcon(this.getPhoneRecord());this.phoneStyle=p.styleTag;this.phoneCls=p.phoneCls;this.addCls=p.addlCls;var n=this.get('mobileNumber')||'5555555555';delete this.args;this.args={mobileNumber:this.getMobileNumberAreaText(),rawMobileNumber:n,channel:this.isIdentityCard?'01':this.formatChannelNumber(this.get('channel')),phoneStyle:this.phoneStyle,phoneCls:this.phoneCls,addCls:this.addCls,displayName:this.displayName,unnamedCls:this.isUnnamed?this.cssUnnamed:'',closebox:this.closebox,showDropdownArrowCls:(this.arrow&&Zw.capabilities.ALLOW_CONTACTCARD_ARROW)?'':'x-hidden',MOCount:this.get('MOCount'),ZOCount:this.get('ZOCount'),additionalTemplate:this.additionalTemplate,additionalTemplateBefore:this.additionalTemplateBefore};return this;},getExtendedViewTpl:function(){if(!this.extendedViewTpl){if(!Zw.controls.ContactCard.extendedViewTpl){Zw.controls.ContactCard.extendedViewTplSrc=[''];Zw.controls.extendedViewTpl=new Ext.XTemplate(Zw.controls.ContactCard.extendedViewTplSrc);}
this.extendedViewTpl=Zw.controls.ContactCard.extendedViewTpl;}
return this.extendedViewTpl;},getTemplate:function(){this.template=Zw.util.getTemplate(this.template);if(!this.template){if(!Zw.controls.ContactCard.template){Zw.controls.ContactCard.template=Zw.util.getTemplate(Zw.controls.ContactCard.tpl,true);}
this.template=Zw.controls.ContactCard.template;}
return this.template;},onRender:function(ct,position){var btn=this.el;if(!this.el){this.getTemplate();var tpl=this.template;tpl.filter=this.filter;tpl.filterByNumber=this.filterByNumber;var targs=this._applyHighlighterStrategy(this.getTemplateArgs());if(position){btn=tpl.insertBefore(position,targs,true);}else{btn=tpl.append(ct,targs,true);}}
this.initButtonEl(btn,btn.child(this.buttonSelector));this.initContactCardEl();if(!Zw.preventContactCardDoubleClick)
this.el.onDoubleClick(this.onDoubleClick,this);},onDoubleClick:function(e){if(e.getTarget('.arrow')||e.getTarget('.phone')){}else{e.stopEvent();if(this.factory){var contact=this.__unsafeResolveContactGlobally();var isZipgroupContact=Zw.util.isZipgroupContact(contact);if(isZipgroupContact&&!this.factory.context.getContactManager().getContact(contact.id)){}else{this.factory.context.publish('/desktop/message/new',{contacts:contact});}}
if(Zw.controls.plugins.ContactCardEditNamePlugin.cardMenu){Zw.controls.plugins.ContactCardEditNamePlugin.cardMenu.hide();}}},initContactCardEl:function(){var e=this.els={};e.close=this.el.child('.zw-contactcard-close');e.name=this.el.child('.zw-contactcard-name');e.arrow=this.el.child('.zw-contactcard-arrow');e.number=this.el.child('.zw-contactcard-number');e.channel=this.el.child('.zw-contactcard-channel');e.phone=this.el.child('.zw-contactcard-phone');},getClickEl:function(e,isUp){if(e.getTarget('.zw-contactcard-phone'))
return this.els.phone;else if(e.getTarget('.zw-contactcard-close'))
return this.els.close;else if(e.getTarget('.zw-contactcard-arrow'))
return this.els.arrow;return this.el;},onArrowClick:Ext.emptyFn,onNameClick:Ext.emptyFn,onPhoneClick:Ext.emptyFn,onRightClick:Ext.emptyFn,beginRemoveFromDom:function(){if(Zw.capabilities.fade)
this.el.fadeOut({remove:true,duration:1,callback:this.onAfterCloseBoxClick,scope:this});else{this.el.remove();this.onAfterCloseClick();}},onCloseClick:function(){if(this.fireEvent('beforeclose',this)){if(!this.preventRemove)
this.beginRemoveFromDom();}},onAfterCloseClick:function(){Ext.destroy(this);},edit:function(){this.fireEvent('edit');},onClick:function(e){Zw.controls.ContactCard.superclass.onClick.call(this,e);if(e.altKey){this.edit();}
if(e.getTarget('.zw-contactcard-arrow')){if(this.fireEvent('arrowclick',this,e))
this.onArrowClick(this,e);}else if(e.getTarget('.zw-contactcard-close',this,e)){this.onCloseClick(this,e);}else if(e.getTarget('.zw-contactcard-name')){if(this.fireEvent('nameclick',this,e))
this.onNameClick(this,e);}else if(e.getTarget('.zw-contactcard-phone')){this.log('clicked a phone, firing event');if(this.fireEvent('phoneclick',this,e)){this.onPhoneClick(this,e);}}},onMouseDown:function(e){Zw.controls.ContactCard.superclass.onMouseDown.call(this,e);var el=null;var cls='';if(e.getTarget('.zw-contactcard-close')){el=this.els.close;cls="zw-contactcard-close-down";}else if(e.getTarget('.zw-contactcard-arrow')){cls="zw-contactcard-arrow-down";el=this.els.arrow;}else if(e.getTarget('.zw-contactcard-phone')){cls="zw-contactcard-phone-down";el=this.els.phone;}
if(el){if(Zw.capabilities.mouseClickCss){el.addClass(cls);}
this.mdEl=el;}
Ext.getBody().on('mouseup',this.onMouseUp,this);},onMouseUp:function(e){Zw.controls.ContactCard.superclass.onMouseUp.call(this,e);var el=null;var cls='';if(e.getTarget('.zw-contactcard-close')){el=this.els.close;cls='zw-contactcard-close-down';}else if(e.getTarget('.zw-contactcard-arrow')){el=this.els.arrow;cls='zw-contactcard-arrow-down';}else if(e.getTarget('.zw-contactcard-phone')){el=this.els.phone;cls='zw-contactcard-phone-down';}
if(Zw.capabilities.mouseClickCss){if(el){el.removeClass(cls);}}
var button=e.button;if(e.within(this.el)){if(button==2||(Ext.isSafari&&(button==1))){this.onRightClick(this,e);}}
if(this.mdEl){if(Zw.capabilities.mouseClickCss){this.mdEl.removeClass('md');}
delete this.mdEl;}
Ext.getBody().un('mouseup',this.onMouseUp,this);},onMouseOut:function(e){var internal=e.within(this.el)&&e.target!=this.el.dom;this.el.removeClass("zw-contactcard-over");this.fireEvent('mouseout',this,e);if(this.isMenuTriggerOut(e,internal)){this.fireEvent('menutriggerout',this,this.menu,e);}},_revisedBase_onMouseOver:function(e){if(!this.disabled){var internal=e.within(this.el,true);if(!internal){this.el.addClass("zw-contactcard-over");if(!this.monitoringMouseOver){Ext.getDoc().on('mouseover',this.monitorMouseOver,this);this.monitoringMouseOver=true;}
this.fireEvent('mouseover',this,e);}
if(this.isMenuTriggerOver(e,internal)){this.fireEvent('menutriggerover',this,this.menu,e);}}},onMouseOver:function(e){if(Zw.capabilities.mouseOverCss)
this._revisedBase_onMouseOver(e);if(Zw.capabilities.mouseOverCss){var el=null;var cls='';if(e.getTarget('.zw-contactcard-close')){el=this.els.close;cls='zw-contactcard-close-over';}else if(e.getTarget('.zw-contactcard-phone')){el=this.els.phone;cls='zw-contactcard-phone-over';}else if(e.getTarget('.zw-contactcard-arrow')){el=this.els.arrow;cls='zw-contactcard-arrow-over';}
if(el){el.addClass(cls);el.on('mouseout',this.onButtonMouseOut,this);}}},onButtonMouseOut:function(e){var el=null;var cls='';if(e.getTarget('.zw-contactcard-close')){el=this.els.close;cls='zw-contactcard-close-over';}else if(e.getTarget('.zw-contactcard-phone')){el=this.els.phone;cls='zw-contactcard-phone-over';}else if(e.getTarget('.zw-contactcard-arrow')){el=this.els.arrow;cls='zw-contactcard-arrow-over';}
if(el){el.un('mouseout',this.onMouseOut,this);el.removeClass(cls);}},additionalTemplate:'',additionalTemplateBefore:''});Ext.reg('Zw.controls.ContactCard',Zw.controls.ContactCard);Zw.controls.ContactCard.generateHighlighterFilterFn_testFn=function(attempt,compare){return attempt?(attempt.indexOf(compare)!=-1):false;};Zw.controls.ContactCard.generateHighlighterFilterFn=function(highlighterLookup,blacklist,filter,fieldsMapping){var defaultFieldsMapping={mobileNumber:'mobileNumber',firstName:'firstName',lastName:'lastName',channel:'channel',targetGroupDevice:'targetGroupDevice'};fieldsMapping=Ext.apply(defaultFieldsMapping,fieldsMapping);var test=Zw.controls.ContactCard.generateHighlighterFilterFn_testFn;var rawPhoneNumber=Zw.util.getRawPhoneNumber(filter)||filter;return function(record,id){var mobileNumber=record.get(fieldsMapping.mobileNumber);var firstName=record.get(fieldsMapping.firstName);var lastName=record.get(fieldsMapping.lastName);var channel=record.get(fieldsMapping.channel);var targetGroupDevice=record.get(fieldsMapping.targetGroupDevice);if(blacklist){if(blacklist.strategy=='id'){if(blacklist.store.getById(id)){return false;}}
if(blacklist.strategy=='mobileNumber'){if(blacklist.store.find(fieldsMapping.mobileNumber,mobileNumber)!=-1){return false;}}
if(Ext.type(blacklist.strategy)=='function'){if(!blacklist.strategy(blacklist.store,record)){return false;}}}
if(filter==''){highlighterLookup.add(id,Zw.templates.nullHighlighterStrategy);return false;}
if(!targetGroupDevice||(targetGroupDevice==-1)){if(test(Zw.util.getRawPhoneNumber(mobileNumber),rawPhoneNumber)){highlighterLookup.add(id,Zw.templates.mobileNumberHighlighterStrategy);return true;}}
if(test((firstName+(lastName?(' '+lastName):'')).toLowerCase(),filter)){highlighterLookup.add(id,Zw.templates.nameHighlighterStrategy);return true;}
if(test((firstName+(lastName?(''+lastName):'')).toLowerCase(),filter)){highlighterLookup.add(id,Zw.templates.nameHighlighterStrategy);return true;}
if(!Ext.isEmpty(lastName)){if(test((lastName.toLowerCase()),filter)){highlighterLookup.add(id,Zw.templates.nameHighlighterStrategy);return true;}}
if(test(channel,filter)){highlighterLookup.add(record.id,Zw.templates.channelHighlighterStrategy);return true;}
return false;};};Zw.controls.ContactCard.tpl=['<tpl for=".">','<div class="zw-contactcard {values.args.addCls}" oncontextmenu="return false;" style="{values.style}">','{values.args.additionalTemplateBefore}','<div class="zw-contactcard-wrap" style="position:relative;zoom:1;">','<div class="zw-contactcard-name {values.args.unnamedCls}">{values.args.displayName}</div>','<div class="zw-contactcard-number">{values.args.mobileNumber}</div>','<div class="zw-contactcard-channel">{values.args.channel}</div>','<div class="zw-contactcard-phone {values.args.phoneCls}" style="{values.args.phoneStyle}"></div>','<tpl if="values.closebox"><div class="zw-contactcard-button zw-contactcard-close"></div></tpl>','<button class="x-menu zw-contactcard-button zw-contactcard-arrow {values.args.showDropdownArrowCls}"></button>','</div>','{values.args.additionalTemplate}','</div>','</tpl>'].join('');Zw.util.applyAddPlugin(Zw.controls.ContactCard);

Zw.namespace('Zw.controls');Zw.controls.ControlDataView=Ext.extend(Ext.DataView,{controls:null,cardIdToValsId:null,valsIdToCardId:null,cache:'Zw.util.ControlCache',overrideTpl:null,updateAction:'reuse',initComponent:function(){this.cardIdToValsId=new Ext.util.MixedCollection();this.valsIdToCardId=new Ext.util.MixedCollection();if(Ext.type(this.cache)==='string'){this.cache=Ext.ComponentMgr.create({},this.cache);}
this.controls=new Ext.util.MixedCollection();if(this.overrideTpl)
this.tpl=this.overrideTpl;var t=Ext.type(this.tpl);if(t=='string'||t=='array'){this.tpl=new Zw.util.SuperXTemplate(this.tpl);}
this.tpl.placeControl=this.placeControl.createDelegate(this);this.tpl.afterOverwriteHandler=this.afterOverwriteHandler.createDelegate(this);Zw.controls.ControlDataView.superclass.initComponent.call(this);},createControl:Ext.emptyFn,getSelectedControls:function(){var records=this.getSelectedRecords();var controls=[];if(records){var L=records.length;for(var i=0;i<L;i++){controls.push(this.getControlByRecord(records[i]));}}
return controls;},getControlByRecord:function(record){var vals=record.data;var valsId=this.getUniqueId(vals);var cardId=this.valsIdToCardId.get(valsId);return this.controls.get(cardId);},getControl:function(vals){var key=this.getUniqueId(vals);var control=this.cache.get(key);if(control){this.reuseControl(vals,control);}else{control=this.createControl(vals);this.fireEvent('createcontrol',this,vals,control);}
return control;},getUniqueId:function(record){var uniqueId=Zw.data.get(record,'id');if(!uniqueId){uniqueId=record.id;}
return uniqueId;},placeControl:function(vals){var valsId=this.getUniqueId(vals);var control=this.getControl(vals);if(control){var id=control.getId();this.controls.add(id,control);this.cardIdToValsId.add(id,valsId);this.valsIdToCardId.add(valsId,id);if(!valsId){alert(Zw.localize('generic.alert.controlPlacementFailed')+vals+vals.mobileNumber+vals.id);}
else
return id;}else{throw'Zw.controls.ControlDataView: createControl did not create a control';}},reuseControl:Ext.emptyFn,afterOverwriteHandler:function(tpl,el){var itemSelector=this.itemSelectorForSwap;el=Ext.fly(el);var items=el.query(itemSelector);Ext.each(items,function(itemEl){itemEl=Ext.get(itemEl);var cardId=itemEl.dom.innerHTML;var ccard=this.controls.get(cardId);if(!ccard.rendered){ccard.render(itemEl.parent());itemEl.remove();}else{itemEl.replaceWith(ccard.el);ccard.show();}},this);},collectData:function(records,startIndex){var r=[];for(var i=0,len=records.length;i<len;i++){var L=r.length;r[L]=this.prepareData(records[i].data,startIndex+i,records[i]);r[L].id=records[i].id;}
return r;},onAdd:function(a,b,c){Zw.controls.ControlDataView.superclass.onAdd.call(this,a,b,c);this.repaintControls();},repaintControls:function(){if(Ext.isIE){this.controls.each(function(control){if(control.repaint){control.repaint()}else{control.el.addClass('x-foobar');control.el.removeClass('x-foobar');}},this);}},onRemove:function(ds,record,index){this.destroyControl(record.data);Zw.controls.ControlDataView.superclass.onRemove.call(this,ds,record,index);this.repaintControls();},onUpdate:function(ds,record,index){if(this.updateAction=='reuse'){var control=this.getControlByRecord(record);var vals=record.data;if(control){this.reuseControl(vals,control);}else{this.destroyControl(record.data);Zw.controls.ControlDataView.superclass.onUpdate.call(this,ds,record,index);}}else{this.destroyControl(record.data);Zw.controls.ControlDataView.superclass.onUpdate.call(this,ds,record,index);}},destroyControl:function(vals){var valsId=this.getUniqueId(vals);var cardId=this.valsIdToCardId.get(valsId);var control=this.controls.get(cardId);if(control){this.controls.remove(control);this.valsIdToCardId.removeKey(valsId);this.cardIdToValsId.removeKey(cardId);Ext.destroy(control);}else{Zw.console('Zw.controls.ControlDataView: Unfortunate bug, control is null: Vals',vals,' ValsId',valsId,' CardId: ',cardId,' Control',control,this);}},refresh:function(){var destrCount=0;var cacheCount=0;this.controls.eachKey(function(cardId,index,length){var control=this.controls.get(cardId);var valsId=this.cardIdToValsId.get(cardId);if(this.cache.put(valsId,control)){control.hide();cacheCount++;}else{Zw.console('destroying control',control);Ext.destroy(control);destrCount++;}},this);this.cardIdToValsId.clear();this.valsIdToCardId.clear();this.controls.clear();Zw.controls.ControlDataView.superclass.refresh.call(this);if(this.el){this.el.addClass('x-foobar');this.el.removeClass('x-foobar');}},destroy:function(){if(this.controls){this.controls.each(function(item){Ext.destroy(item);},this);this.controls.clear();delete this.controls;}
if(this.cache){if(this.cache.each)
this.cache.each(function(item){Ext.destroy(item);},this);if(this.cache.destroy)
this.cache.destroy();delete this.cache;}
Zw.controls.ControlDataView.superclass.destroy.call(this);}});

Zw.controls.ContactCardDataView=Ext.extend(Zw.controls.ControlDataView,{itemSelectorForSwap:"div.zw-swapper",itemSelector:'div.contacts-wrap',tpl:['<tpl for=".">','<div class="contacts-wrap" id="{FullName}">','<div class="zw-swapper">{[ this.placeControl(values) ]}</div>','</div>','</tpl>','<div class="x-clear"></div>'],reuseControl:function(vals,control){if(this.highlighterStrategyLookup){control.filter=this.filter;control.highlighterStrategy=this.highlighterStrategyLookup.key(vals.id);control.applyHighlighterStrategy();}else{}
if(control.setData){control.setData(vals);}else{Zw.console("ContactCardDataView - CRITICAL ERROR: CONTROL.SETDATA IS NULL!!!",control);}},createControl:function(vals){if(!this.contactCardFactory)
return null;if(!this.contactCardFactory.contactManager)
return null;var strategy;if(this.highlighterStrategyLookup){strategy=this.highlighterStrategyLookup.get(vals.id);}
var id=vals.id;var deviceId=vals.deviceId;var contact=this.contactCardFactory.contactManager.getContactByIdAndDeviceId(id,deviceId);if(!contact){contact=this.store.getById(id);}
if(!contact){var index=this.store.find('mobileNumber',vals.mobileNumber);contact=this.store.getAt(index);}
if(!contact){contact=vals;}
var card=this.contactCardFactory.createContactCard(Ext.apply({highlighterStrategy:strategy,contact:contact,cls:'floatLeft',closebox:this.closebox,preventEditName:this.preventEditName,preventPopup:this.preventPopup,arrow:this.arrow,filter:this.filter},this.contactCardFactoryConfig));card.on('beforeclose',this.onBeforeClose,this);card.render(Ext.getBody());card.hide();return card;},getUniqueId:function(record){return Zw.data.get(record,'mobileNumber')||Zw.data.get(record,'id');},onBeforeClose:function(card){this.fireEvent('BeforeContactCloseClick',this,card);if(Zw.capabilities.fade){card.el.fadeOut({scope:this,callback:function(){var record=this.getRecord(this.findItemFromChild(card.el));this.store.remove(record);Ext.destroy(card);}});}else{var record=this.getRecord(this.findItemFromChild(card.el));this.store.remove(record);Ext.destroy(card);}
return false;}})
Ext.reg('Zw.controls.ContactCardDataView',Zw.controls.ContactCardDataView);

Zw.controls.DetailSeparator=Ext.extend(Zw.controls.ToolbarDetail,{cls:'zw-toptoolbar-sep zw-toolbar-sep',startHidden:false});Ext.reg('Zw.controls.DetailSeparator',Zw.controls.DetailSeparator);

Zw.namespace('Zw.controls');Zw.controls.StatusBar=Ext.extend(Ext.StatusBar,{ctCls:"zw-statusbar",showResizer:true,afterRender:function(){Zw.controls.StatusBar.superclass.afterRender.call(this);var tpl=new Ext.Template('<td class="zw-window-resizer-td">','<div class="zw-window-resizer-wrap">','<div class="zw-window-resizer-div"/>','</div>','</td>');var trEl=Ext.get(this.tr);var lastTdEl=trEl.child("td:last");this.resizerEl=tpl.insertAfter(lastTdEl,null,true);}});Ext.reg('zwStatusBar',Zw.controls.StatusBar);

Zw.namespace('Zw.controls');Zw.controls.Div=Ext.extend(Ext.Container,{cls:'zw-div',styleX:'',tooltip:'',addMouseClasses:false,initEvents:Ext.emptyFn,layout:'auto',initComponent:function(){this.onBeforeInit();Zw.controls.Div.superclass.initComponent.call(this);if(this.delayedItems)
this.items=this.delayedItems;delete this.delayedItems;this.onAfterInit();},onBeforeInit:Ext.emptyFn,onAfterInit:Ext.emptyFn,beforeDestroy:function(){Ext.destroy(this.el);Zw.controls.Div.superclass.beforeDestroy.call(this);},onRender:function(ct,position){Zw.controls.Div.superclass.onRender.call(this,ct,position);this.fixHtml();if(this.tpl){if(Ext.type(this.tpl)=='string'){this.tpl=new Ext.XTemplate(this.tpl);this.tpl.compile();}}else{if(Ext.type(Zw.controls.Div.tpl)=='string'){Zw.controls.Div.tpl=new Ext.XTemplate(Zw.controls.Div.tpl);Zw.controls.Div.tpl.compile();}
this.tpl=Zw.controls.Div.tpl;}
if(this.el&&this.elementHack){this.el.remove();delete this.el;}
if(!this.el){if(position){this.el=this.tpl.insertBefore(position,this,true);}else{this.el=this.tpl.append(ct,this,true);}
this.initDiv(this.el);}
this.el.id=this.getId();if(this.forId){this.el.setAttribute('htmlFor',this.forId);}
if(this.addMouseClasses){var e=Ext.fly(this.el);e.addClassOnOver('mo');e.addClassOnFocus('mf');e.addClassOnClick('md');if(this.baseMouseCls){e.addClassOnOver(this.baseMouseCls+'-mo');e.addClassOnFocus(this.baseMouseCls+'-mf');e.addClassOnClick(this.baseMouseCls+'-md');}}
var e=Ext.get(this.el);if(this.handler||this.addMouseEvents||this.listenClick||this.enableMouseEvents||this.onClick){e.on('click',this.onClick,this);}
if(this.addMouseEvents||this.enableMouseEvents){e.on('mouseover',this.onMouseOver,this);e.on('mousedown',this.onMouseDown,this);e.on('mouseup',this.onMouseUp,this);e.on('mouseout',this.onMouseOut,this);}
if(this.tooltip&&this.tooltip!=''){this.tooltipEl=new Ext.ToolTip({target:this.el,dismissDelay:0,mouseOffset:[1,10],html:this.tooltip});}
this.initEvents();},initDiv:Ext.emptyFn,fixHtml:function(){if(!this.preventIEHack&&Ext.isIE&&this.items&&this.html){this.html='<span></span>'+this.html;}
return this.html;},onMouseDown:function(sender,e){this.fireEvent('mousedown',this,e,sender);},onMouseOver:function(sender,e){this.fireEvent('mouseover',this,e,sender);},onMouseUp:function(sender,e){this.fireEvent('mouseup',this,e,sender);},onMouseOut:function(sender,e){this.fireEvent('mouseout',this,e,sender);},onClick:function(sender,e){if(this.handler)
this.handler.call(this.scope||this,sender,e);this.fireEvent('click',this,e,sender);},onRenderCustomTemplate:Ext.emptyFn,close:function(){this.destroy();}});Zw.controls.Div.tpl='<div class="{cls} {clsX}" style="{styleX} {style}">{html}</div>';Ext.reg('Zw.controls.Div',Zw.controls.Div);Ext.reg('div',Zw.controls.Div);Zw.controls.Link=Ext.extend(Zw.controls.Div,{href:'#',tpl:'<a class="{cls} {clsX}" style="{styleX} {style}" href="{href}">{html}</a>',listenClick:true});Ext.reg('link',Zw.controls.Link);Ext.reg('Zw.controls.Link',Zw.controls.Link);Zw.controls.Span=Ext.extend(Zw.controls.Div,{tpl:'<span class="{cls} {clsX}" style="{styleX} {style}">{html}</span>'});Ext.reg('span',Zw.controls.Span);Ext.reg('Zw.controls.Span',Zw.controls.Span);

Zw.namespace('Zw.controls');Zw.controls.Label=Ext.extend(Zw.controls.Div,{tpl:'<div class="zw-label">{html}</div>'});Ext.reg('Zw.controls.Label',Zw.controls.Label);Ext.reg('label',Zw.controls.Label);

Zw.namespace('Zw.controls');Zw.controls.Span=Ext.extend(Ext.BoxComponent,{beforeDestroy:function(){Ext.destroy(this.el);Zw.controls.Span.superclass.beforeDestroy.call(this);},onRender:function(ct,position){this.fixHtml();if(!this.tpl){if(!Zw.controls.Span.tpl){Zw.controls.Span.tpl=new Ext.Template('<span class="{1}">{0}</span>');Zw.controls.Span.tpl.compile();}
this.tpl=Zw.controls.Span.tpl;}
var btn,targs=[this.html||this.text,"zw-span"];if(position){this.el=this.tpl.insertBefore(position,targs,true);}else{this.el=this.tpl.append(ct,targs,true);}},fixHtml:function(){if(!this.preventIEHack){if(Ext.isIE){if(this.html){this.html='<span></span>'+this.html;}
if(this.text){this.text='<span></span>'+this.text;}}}}});Ext.reg('Zw.controls.Span',Zw.controls.Span);Ext.reg('span',Zw.controls.Span);

Zw.namespace('Zw.controls');Zw.controls.Text=Ext.extend(Ext.Component,{onRender:function(ct,position){if(!this.el){this.el=document.createElement('span');this.el.id=this.getId();this.el.innerHTML=this.text?Ext.util.Format.htmlEncode(this.text):(this.html||'');if(this.forId){this.el.setAttribute('htmlFor',this.forId);}}
Zw.controls.Text.superclass.onRender.call(this,ct,position);}});Ext.reg('Zw.controls.Text',Zw.controls.Text);Ext.reg('text',Zw.controls.Text);

Ext.namespace('Zw','Zw.util');Zw.util.XTemplate=Ext.extend(Ext.XTemplate,{})

Zw.namespace('Zw.util');Zw.util.SuperXTemplate=Ext.extend(Ext.XTemplate,{constructor:function(args){Zw.util.SuperXTemplate.superclass.constructor.apply(this,[args]);this.init();},cmpArray:[],init:function(){this.initTemplate();},initTemplate:function(){this.cmpArray=[];},overwrite:function(el,values,returnElement){this.onBeforeOverwrite(this,el,values,returnElement);var newEl=Zw.util.SuperXTemplate.superclass.overwrite.call(this,el,values,returnElement);this.onAfterOverwrite(el);return newEl;},onBeforeOverwrite:function(el){if(this.beforeOverwriteHandler){this.beforeOverwriteHandler.call(this.scope||this,this,el);}},onAfterOverwrite:function(el){if(this.afterOverwriteHandler){this.afterOverwriteHandler.call(this.scope||this,this,el);}}});

Zw.Feature=Ext.extend(Zw.app.ContextModule,{monitorGuestState:false,disableGroupIfGuest:false,proxy:null,pkg:null,_init:function(client){Zw.Feature.superclass._init.call(this,client);this.initGroup();if(this.monitorGuestState){this.context.subscribe('/account/user/data',this.onUserData,this);}},initGroup:function(){if(!this.group){return;}
if(Ext.type(this.group)=='string'){this.group=this.context.Desktop.getToolbarGroup(this.group,this.group);}else{if(this.group.key){this.group=this.context.Desktop.getToolbarGroup(this.group.key,this.group.defaultValue);}}
if(this.group.on){this.group.on('click',this.onGroupClick,this);}
this.setupGroupListeners(this.group);if(this.getValueOfProperty(this.disableGroupIfGuest)){this.setupGroupEnableListeners();}},setupGroupListeners:Ext.emptyFn,getValueOfProperty:function(thing){if(Ext.type(thing)=='function')return thing();return thing;},setupGroupEnableListeners:function(){this.onAuthenticatedAsGuest=function(){this.setGroupEnabledState(false);};this.onAuthenticatedAsUser=function(){this.setGroupEnabledState(true);};},setGroupEnabledState:function(enable){if(!this.group){return;}
if(this.group.items){this.group.items.each(function(item){if(item){if(enable){item.enable();}else{item.disable();}}},this);}},setSettinglet:function(settinglet){if(settinglet){var t=Ext.type(settinglet);if(t=='string'){settinglet={xtype:settinglet};}else if(t=='array'){settinglet={xtype:'Zw.settings.CompositeSettinglet',settinglet:settinglet};}
Ext.apply(settinglet,{context:this.context,creator:this});var key=this.settingletKey||settinglet.key||settinglet.xtype;this.log("Registering settinglet : "+key,settinglet);this.context.Settings.registerSettinglet(key,settinglet);this.settinglet=settinglet;}},downloadPackage:function(){Zw.console("Going to download some packages");var a=arguments;if(a){a=[a[0]];}else{a=[];}
if(Ext.isEmpty(this.pkg)){this.onDownloadPackageComplete.apply(this,a);return;}
this.context.publish('/app/packages/get',{pkg:this.pkg,fn:this.onDownloadPackageComplete,scope:this,params:a,proxy:this.proxy});},onDownloadPackageComplete:Ext.emptyFn,onGroupClick:Ext.emptyFn,onUserData:function(args){var isGuest=this.context.Account.isGuest(true);if(isGuest){this.onAuthenticatedAsGuest(args);}else{this.onAuthenticatedAsUser(args);}},onAuthenticatedAsUser:Ext.emptyFn,onAuthenticatedAsGuest:Ext.emptyFn,_destroy:function(){if(this.settinglet){this.context.unsubscribe('/account/user/data',this.onUserData,this);this.context.Settings.unregisterSettinglet(this.settingletKey);delete this.settinglet.context;delete this.settinglet.creator;delete this.settinglet;delete this.settingletKey;}
Zw.Feature.superclass._destroy.call(this);}});

Zw.namespace('Zw.features.app');Zw.features.app.NullFeature=Ext.extend(Zw.Feature,{});

Zw.namespace('Zw.services');Zw.Service=Ext.extend(Zw.Plugin,{_init:function(client){this.context=client;Zw.Service.superclass._init.call(this,client);},publish:function(){this.context.publish.apply(this.context,arguments);},subscribe:function(){this.context.subscribe.apply(this.context,arguments);}});

Zw.services.ServiceProxyPlugin=Ext.extend(Zw.Plugin,{onInit:function(){this.client.context.subscribe('/app/service/proxy',this.registerProxy,this);},doProxy:function(args,uri,proxyArgs){var uri=proxyArgs.uri,pkg=proxyArgs.pkg,service=proxyArgs.service,serviceArgs=proxyArgs.serviceArgs;if(!this.client.isCached(proxyArgs.service)){Zw.console(">>doproxy",args,uri,pkg,service,serviceArgs);this.client.context.publish('/app/service/run',{uri:uri,pkg:pkg,args:args,serviceArgs:serviceArgs,service:service});}else{}},registerProxy:function(args){if(!this.client.isCached(args.service)){this.client.context.subscribe(args.uri,this.doProxy.createDelegate(this,[args],true),this,{single:true});}},onDestroy:function(){var client=this.client;var context=this.client.context;if(context){context.unsubscribe('/app/service/proxy',this.registerProxy,this);}}});Zw.features.PluginFactory.register('/app/context/services','Zw.services.ServiceProxyPlugin');

Zw.namespace('Zw.services');Zw.services.ServiceFactory={manifests:[],add:function(manifest){this.manifests=this.manifests.concat(manifest);},createAll:function(context){Ext.each(this.manifests,function(item){context.publish('/app/service/proxy',item);},this);}};Zw.features.PluginFactory.register('/app/context/services',function(args){return{init:function(client){Zw.services.ServiceFactory.createAll(client);}}});

Zw.namespace('Zw.services');Zw.services.DevelopmentServiceManifest=[{service:'Zw.features.help.VideoService',pkg:'video.services',uri:'/desktop/interlink/video'},{service:'Zw.services.ContactCardDropdownService',pkg:'contact.services',uri:'/desktop/contact/dropdown/toggle'},{service:'Zw.services.TexterPlusContactCardDropdownService',pkg:'conversation.services',uri:'/desktop/conversation/dropdown/toggle'},{service:'Zw.features.app.ErrorInterlinksAdapterService',pkg:'error.services',uri:'/desktop/interlink/error'},{service:'Zw.features.app.SoundService',pkg:'sound.services',uri:'/app/sound/play'},{service:'Zw.features.mms.MmsService',pkg:'mms.all',uri:'/desktop/interlink/mms'},{service:'Zw.features.felix.FelixService',pkg:'felix.all',uri:'/desktop/interlink/datapreservation'}];Zw.services.ServiceFactory.add(Zw.services.DevelopmentServiceManifest);

Zw.namespace('Zw.features.contacts');Zw.features.contacts.ContactManagerFeature=Ext.extend(Zw.Feature,{onInit:function(){this.context.getContactManager=Zw.util.returnScope(this);this.context.subscribe('/desktop/contact/find',this.targetContact,this);this.context.subscribe('/desktop/contact/delete',this.deleteContact,this);this.context.subscribe('/account/contact/save',this.saveContact,this);this.context.subscribe('/desktop/contacts/delete',this.deleteContacts,this);},isContactListLoaded:function(){return this.context.Account.getWebsiteDevice().contactsLoaded;},expandContactsFromGroup:function(contact){var addressString=Zw.data.get(contact,'address');var addresses=addressString.split(',');var result=[];Ext.each(addresses,function(address){var c=this.findContactByAddressOrCreateContact(address);if(c){result.push(c);}},this);return result;},isLocalDeviceId:function(deviceId){var isLocal=false;if(!deviceId){isLocal=true;}else if(deviceId==-1){isLocal=true;}else if(deviceId==this.context.Account.getWebsiteDeviceId()){isLocal=true;}
return isLocal;},getContactByIdAndDeviceId:function(contactId,deviceId){var isLocal=this.isLocalDeviceId(deviceId);if(isLocal){return this.getContact(contactId);}else{var device=this.context.Account.getDeviceById(deviceId);if(device){return device.contacts.getById(contactId);}}},_doSomethingToList:function(args,param,eachFn,previewFn){if(Ext.isEmpty(args))return false;args=args||{};var failure=args.failure||function(){return false;}
var scope=args.scope||this;if(Ext.isEmpty(args.contacts))return failure.call(scope,'empty');var success=args.success||function(){return true;}
var things=args[param];var preview=previewFn.call(scope,things);if(!preview){Ext.each(things,function(value){return eachFn.call(scope,{success:args.success,failure:failure,scope:args.scope,value:value});});}else{return failure.call(scope,preview);}
return success.call(scope,'all');},deleteContact:function(args){if(args.contact){if(args.contact.id==-1)
return;}
this.deleteContacts(Ext.apply(args,{contacts:args.contact}));},_deleteContacts:function(btn,text){if(btn!='yes')
return;var args=Ext.Msg.__tag;delete Ext.Msg.__tag;var request=[];Ext.each(args.contacts,function(contact){if(contact.id==-1){return;}
var targetGroupDevice=Zw.data.get(contact,'targetGroupDevice');if(targetGroupDevice>1){var device=this.context.Account.getDeviceById(targetGroupDevice);if(!(device&&!device.saved)){request[request.length]=contact.id;}}else{request[request.length]=contact.id;}
this.context.Account.getContacts().remove(contact);},this);if(request.length>0){Zw.Application.Net.deleteContact(Ext.apply(args,{session:this.context.Account.getSessionKey(),contact:request}));}},targetContact:Ext.emptyFn,_getContactDescriptor:function(contacts){var contact=null;if(Ext.type(contacts)=='array'){if(contacts.length==1){contact=contacts[0];}else{return Zw.localize('generic.alert.confirmDelete.selectedContacts.text1')+contacts.length+Zw.localize('generic.alert.confirmDelete.selectedContacts.text2');}}else{contact=contacts;}
if(contact){var f=Zw.data.get(contact,'firstName');if(f){return f;}else if(Zw.data.get(contact,'targetGroupDevice')>-1){return Zw.localize('generic.text.thisZipgroup')}else{return Zw.util.formatMobileNumber(Zw.data.get(contact,'mobileNumber'));}}
return Zw.localize('generic.alert.confirmDelete.selectedContacts.text3');},deleteContacts:function(args){if((args.contacts.length!==1)||(args.contacts[0].id!=-1)){var text=Zw.localize('generic.alert.confirmDelete.text1');if(args&&args.forceDelete){text=Zw.localize('generic.alert.confirmDelete.text2');}
Ext.Msg.__tag=args;if(args&&args.silent){this._deleteContacts('yes');}else{Ext.Msg.confirm(Zw.localize('generic.alert.confirmDelete.title'),String.format(text,this._getContactDescriptor(args.contacts)),this._deleteContacts,this);}}},resolveContactFromMessage:function(message){var from=Zw.data.get(message,'from');var isSelf=Zw.data.get(message,'isSelf');if(isSelf){return this.getContact(-1);}else{return this.getContact(from);}},getContact:function(id){var c=this.context.Account.getContacts();return c.getById(id);},getContactFromMessage:function(message){if(!message)return null;if(message.to){return message.to;}else{var contactId=Zw.data.get(message,'from');var contact=this.getContact(contactId);if(contact){return contact;}else{var result=[];var identity=this.context.Account.getMobileNumber();var contactList=Zw.data.get(message,'address');if(contactList){var contacts=contactList.split(',');Ext.each(contacts,function(address){if(address){address=Zw.util.Address.get(address);if(address.isIdentity(identity)){result.push(this.getContact(-1));}else{var contact=this.findContactByAddressOrCreateContact(address);if(contact){result.push(contact);}}}},this);}
return result;}}},findContactByAddressOrCreateContact:function(address,args){args=args||{};if(address){var contact=this.findContactByAddress(address);if(!contact){contact=this.createContact({scope:this,contact:Ext.apply(args,{address:Zw.util.Address.decode(address),channel:' '})});}}
return contact;},findContactByMobileNumberOrCreateContact:function(mobileNumber,contactArgs,args){if(!mobileNumber)
return;var contact=this.findContactByMobileNumberAndDeviceId(mobileNumber,contactArgs.deviceId||this.context.Account.getWebsiteDeviceId());if(contact){return contact;}else{if(!args){args={};}
var scope=args.scope||this;var success=args.success||Ext.emptyFn;var failure=args.failure||Ext.emptyFn;contact=this.createContact({contact:Ext.apply({mobileNumber:Zw.util.getRawPhoneNumber(mobileNumber),channel:' '},contactArgs),scope:scope,success:success,failure:failure});return contact;}},findContactByPropertyAndDeviceId:function(property,value,deviceId){var isLocal=this.isLocalDeviceId(deviceId);var store=null;if(isLocal){store=this.context.Account.getContacts();}else{var device=this.context.Account.getDeviceById(deviceId);if(!device){alert(Zw.localize('generic.alert.deviceUndefined')+deviceId);}
Zw.console('Going to search for device',isLocal,device,this.context.Account,this.context.Account.devices);store=device.getContacts();}
var index=store.findBy(function(record){return record.get(property)==value;});return store.getAt(index);},findContactByAddress:function(address){return this.findContactByAddressAndDeviceId(address,this.context.Account.getWebsiteDeviceId());},findContactByAddressAndDeviceId:function(address,deviceId){if(!address){return null;}
if(address=='-1'){return this.context.Account.getContacts().getById(-1);}else{return this.findContactByPropertyAndDeviceId('address',Zw.util.Address.decode(address),deviceId);}},findContactByMobileNumberAndDeviceId:function(number,deviceId){if(!deviceId||deviceId===this.context.Account.getWebsiteDeviceId()){if(number===this.context.Account.getMobileNumber()){return this.context.Account.identity;}}
return this.findContactByPropertyAndDeviceId('mobileNumber',number,deviceId);},findContactByMobileNumber:function(number){return this.findContactByMobileNumberAndDeviceId(number,this.context.Account.getWebsiteDeviceId());},getContacts:function(args){if(Ext.isEmpty(args)&&this.context)
return this.context.Account.getContacts();else{return this.getContactsByFilter(function(){return true;},args);}},getContactsByFilter:function(filterFn,args){if(!this.context)return;args=args||{};if(args.debug){Zw.console("Creating ClonedStore with the following args",args);}
return new Zw.data.ClonedStore(Ext.apply(args,{store:this.context.Account.getContacts(),filterFn:filterFn}));},saveContact:function(args){var contact=args.contact;var success=args.success||Ext.emptyFn;var failure=args.failure||Ext.emptyFn;var scope=args.scope||this;if(contact.id==-1){this.context.getIdentityManager().saveContact(args);return;}
var contacts=this.context.Account.getContacts();var method=Zw.Application.Net.saveContact;var extraParams=null;var targetGroupDevice=Zw.data.get(contact,'targetGroupDevice');var membershipContact=false;var groupContact=targetGroupDevice!=-1;var deviceId=Zw.data.get(contact,'deviceId');Zw.console('ContactMangerFeature - saveContact',contact,deviceId,'x',this.context.Account.getWebsiteDeviceId());if(deviceId){if(deviceId!=-1){var websiteDeviceId=this.context.Account.getWebsiteDeviceId();if(websiteDeviceId!=deviceId){membershipContact=true;var device=this.context.Account.getDeviceById(deviceId);if(device){contacts=device.contacts;extraParams={group:device.getAddress()};}
method=Zw.Application.Net.saveMember;}}}
var index=-1;index=contacts.find('mobileNumber',contact.get('mobileNumber'));if(index!=-1){if(contacts!=contact.store){Zw.console('Saving contact. Stores are not same',contacts,contact.store,'so fixing before endEdit');args.contact.store=contacts;}
if(args.doSubmit){args.contact.endEdit();}}else{contacts.add(contact);success=success.createInterceptor(function(sender,res){if(res){if(res.success){if(res.response){var r=new Zw.data.Contact(res.response,res.response.id);Zw.console("Calling update contact on this scope",this,contact,r);this.updateContact(contact,r);}}}
return true;},this);}
if(groupContact){var device=this.context.Account.getDevice(targetGroupDevice);if(device&&!device.saved){this.context.publish('/account/device/save',{address:'',name:Zw.util.getFullName(args.contact),contact:args.contact,device:device,scope:this});return;}}
method.call(Zw.Application.Net,Ext.apply({contact:args.contact.data,session:this.context.Account.getSessionKey(),success:success,failure:failure,scope:scope},extraParams));},updateContact:function(oldRecord,newRecord){if(Ext.isEmpty(oldRecord)||Ext.isEmpty(newRecord))
return;function set(field){oldRecord.set(field,newRecord.get(field));}
oldRecord.beginEdit();set('id');set('channel');set('mobileNumber');set('address');set('firstName');set('lastName');set('email');set('notes');set('city');set('state');set('zipcode');set('thread');set('fwd');set('channel');set('deleted');set('carrier');set('isGroupCard');set('phoneKey');if(oldRecord.id!=newRecord.id){if(oldRecord.store){var store=oldRecord.store;var oldId=oldRecord.id;store.data.map[newRecord.id]=oldRecord;delete store.data.map[oldId];var keys=store.data.keys;var result=-1;Ext.each(keys,function(key,index){if(key==oldId){result=index;return false;}});if(result!=-1){store.data.keys[result]=newRecord.id;}}}
oldRecord.id=newRecord.id;oldRecord.endEdit();},editContact:function(args){if(!args)
return;var contact=args.contact;var failure=args.failure||Ext.emptyFn;var success=args.success;var scope=args.scope||this;failure.call(scope,this,args);},editContacts:function(args){return this._doSomethingToList(args,'contacts',function(args){this.editContact(Ext.apply(args,{contact:args.value}));},function(contacts){var max=10;if(contacts.length>=max||(contacts.getCount?contacts.getCount()>3:false)){if(Ext.MessageBox.alert(Zw.localize('generic.alert.openWindowsFailed.title'),Zw.localize('generic.alert.openWindowsFailed.text'))){return'cancel';}}
return null;});},createContact:function(fArgs){var c=this.context.Account.getContacts();if(!fArgs)return;var contact=fArgs.contact;var failure=fArgs.failure||Ext.emptyFn;var success=fArgs.success||Ext.emptyFn;var scope=fArgs.scope||this;var cArgs=Ext.applyIf(fArgs.contact,{});cArgs=Ext.apply(cArgs,{session:this.context.Account.getSessionKey()});var contactRecord;var isNew=false;var index;var mobileNumber=cArgs.mobileNumber;index=c.findBy(function(record){var isMatch=record.get('mobileNumber')==mobileNumber;return isMatch;},this);if(index==-1){index=c.find('mobileNumber',mobileNumber);}
if(index!=-1){contactRecord=c.getAt(index);}else{contactRecord=new Zw.data.Contact(cArgs);isNew=true;contactRecord._pendingCreation=true;}
var sender=this;var errorReason=Zw.localize('generic.alert.zwServerCommunicationFailed');Zw.Application.Net.createContact({context:this,scope:this,success:function(sScope,json){var successful=json.success;if(json&&json.response)json=json.response;if(successful){var index=c.findBy(function(contact){return contact.id==json.id;});if(index!=-1){contactRecord=c.getAt(index);var r=c.reader.readRecords({response:json,total:1});sender.updateContact(contactRecord,r.records[0]);}else{contactRecord.store=c;contactRecord.id=json.id;c.addSorted(contactRecord);this.publish('/signal/contact/change',[json]);if(this.context){Zw.console("Adding record",contactRecord,this.context.Account.getContacts());}}
success.createDelegate(scope,[sender,contactRecord,fArgs,json])();}else{if(json&&json.reason)
errorReason=json.reason;failure.createDelegate(scope,[sender,contactRecord,fArgs,errorReason])();}},failure:function(sScope,json){if(json&&json.response)json=json.response;if(json&&json.reason)
errorReason=json.reason;failure.createDelegate(scope,[sender,contactRecord,fArgs,errorReason])();},params:cArgs});return contactRecord;},choosePhone:function(args){var isSelf=args.isIdentity;var allowSelf=Zw.capabilities.EDIT_SELF_PHONE;if(isSelf&&!allowSelf){Zw.console("Capabilities prevent choosePhone.",isSelf,allowSelf);return;}
if(args.isIdentity&&this.context.Account.isGuest()){Zw.console("We cannot allow choosePhone because you are a guest.");return;}
if(!Zw.capabilities.EDIT_ANY_PHONE)
return;Zw.Packages.get('phone.edit',this.__choosePhone,this,[args]);},__choosePhone:function(args){var phoneKey=args.phoneKey;var callback=args.callback;Zw.util.log("ContactManager: Showing choose phone window for:"+phoneKey);this._choosePhoneWnd=new Zw.features.phone.ChoosePhoneWindow({listeners:{'phonesaved':callback,scope:args.scope||this},phoneKey:phoneKey});this._choosePhoneWnd.show();},onDestroy:function(){this.context.unsubscribe('/desktop/contact/find',this.targetContact,this);this.context.unsubscribe('/desktop/contact/delete',this.deleteContact,this);this.context.unsubscribe('/account/contact/save',this.saveContact,this);this.context.unsubscribe('/desktop/contacts/delete',this.deleteContacts,this);}});Zw.features.Factory.register(Zw.features.contacts.ContactManagerFeature);

Zw.namespace('Zw.features.messages');Zw.features.messages.MessageManagerFeature=Ext.extend(Zw.Feature,{onInit:function(){this.messagesToMarkRead=[];this.context.getMessageManager=Zw.util.returnScope(this);this.context.subscribe('/desktop/message/delete',this.deleteMessagesWithPrompt,this);this.context.subscribe('/account/message/delete',this.deleteMessage,this);this.context.subscribe('/account/messsage/read',this.markMessageAsReadPubSubAdapter,this);this.context.Account.getMessages().on('remove',this.markDeletedMessageAsRead,this);},markDeletedMessageAsRead:function(message){if(!message.read){this.markMessageAsRead(message,true)}},getMessageById:function(id,deviceId){if(!deviceId){deviceId=this.context.Account.getWebsiteDeviceId();}
return this.context.Account.getDeviceById(deviceId).messages.getById(id);},resolveMessage:function(message){var key=Zw.data.get(message,'uuid');var index=this.context.Account.getMessages().findBy(function(msg){return key==Zw.data.get(msg,'uuid');});return this.context.Account.getMessages().getAt(index);},getMessages:function(args){return this.context.Account.getWebsiteDevice().messages;},updateMessage:function(oldRecord,newRecord){oldRecord.beginEdit();oldRecord.set('isRead',newRecord.get('isRead'));oldRecord.endEdit();},getMessagesByFilter:function(filterFn,args){args=args||{};if(args.debug){Zw.util.log("MessageManagerFeature - Creationg ClonedStore with the following args",args);}
return new Zw.data.ClonedStore(Ext.apply(args,{store:this.context.Account.getMessages(),filterFn:filterFn}));},markMessageAsReadPubSubAdapter:function(args){this.markMessageAsRead(args.message,args.value);},markMessageAsRead:function(message,value){if(Ext.isEmpty(value))
value=true;else
value=(Ext.type(value)=='boolean')?value:true;if(message.id&&!message.beginEdit){message=this.context.Account.getMessages().getById(message.id);}
Zw.console("MessageManagerFeature - Marking message as read",message);if(message&&message.beginEdit){message.beginEdit();message.set('isRead',value);message.endEdit();var id=message.id;if(!id){id=message.get('id');}
if(!id){return;}
this.messagesToMarkRead.push(id);if(!this.markMsgsTask){this.markMsgsTask=new Ext.util.DelayedTask(this.doMarkMessagesAsRead,this);}
this.markMsgsTask.delay(1000);}},doMarkMessagesAsRead:function(){var messages=this.messagesToMarkRead;this.messagesToMarkRead=[];Zw.Application.Net.markMessagesAsRead({messages:messages,session:this.context.Account.getSessionKey()});},messagesToMarkRead:null,openMessage:Ext.emptyFn,replyMessage:Ext.emptyFn,fwdMessage:Ext.emptyFn,newMessage:Ext.emptyFn,deleteMessagesWithPrompt:function(messages){if(!messages)return;if(Ext.type(messages)!='array'){messages=[messages];}
var text=(messages.length>1?String.format(Zw.localize('generic.alert.confirmDeleteMessage.text2'),messages.length):String.format(Zw.localize('generic.alert.confirmDeleteMessage.text1'),messages.length));var deleteMessagesDelegate=this._deleteMessagesWithPrompt.createDelegate(this,[messages],1);Ext.Msg.confirm(Zw.localize('generic.alert.confirmDeleteMessage.title'),text,deleteMessagesDelegate,this);},_deleteMessagesWithPrompt:function(btn,messages){if(btn==='yes'){this.deleteMessages(messages);}},deleteMessage:function(messages){if(!Ext.isArray(messages)){messages=[messages];}
var messageIdentifiers=[];Ext.each(messages,function(record){var id=Zw.data.get(record,'id');if(!id){id=record.id;}
if(!Ext.isEmpty(id)){messageIdentifiers.push(id);}},this);if(messageIdentifiers.length>0){Zw.Application.Net.deleteMessages({messages:messageIdentifiers,session:this.context.Account.getSessionKey()});}},deleteMessages:function(messages){var records=[];Ext.each(messages,function(message){var deviceId=Zw.data.get(message,'deviceId');if(Ext.isEmpty(deviceId)){deviceId=this.context.Account.getWebsiteDeviceId();}
var device=this.context.Account.getDevice(deviceId);if(!device){device=this.context.Account.getWebsiteDevice();}
var centralStore=device.getMessages();var id=message.id;var record;if(centralStore){record=centralStore.getById(id);if(record){centralStore.remove(record);}else{record=message;}}else{record=message;}
if(!record){return;}
records.push(record);},this);this.context.publish('/account/message/delete',records);},_deleteSingleMessage:function(message){Zw.console('message',message);this.context.Account.getMessages().remove(message);Zw.Application.Net.deleteMessage({key:message.get('key'),session:this.context.Account.getSessionKey()});},resendMessage:Ext.emptyFn});Zw.features.Factory.register('Zw.features.messages.MessageManagerFeature');

Zw.namespace('Zw.features.app');Zw.features.app.SoundService=Ext.extend(Zw.Service,{browserSupportsSound:null,pkg:'sound.all',uri:'/app/sound/play',onDownloadComplete:'/app/packages/download/complete',registered:false,registering:false,onInit:function(){this.context.subscribe(this.uri,this.handlePlayEvent,this);this.context.subscribe(this.onDownloadComplete,this.onDownloadPackageComplete,this);},handlePlayEvent:function(args){if(!args)args={};args.pkg=this.pkg;args.fn=this.onDownloadPackageComplete;args.params=[{sound:args.sound,volume:args.volume}];args.scope=this;this.context.publish('/app/packages/get',args);},onDownloadPackageComplete:function(args){if(args.fnArgs)
args=args.fnArgs;if(!this.registered){if(!this.registering){this.registering=true;this.registerSounds(this.playSound,args[0]);}}else{this.playSound(args);}},afterSoundManagerInit:function(callback,args){soundManager.createSound('incomingMessage','sounds/slideup.mp3');soundManager.createSound('outgoingMessage','sounds/SWOOSH_fade_out.mp3');this.registered=true;callback.apply(this,args);},registerSounds:function(callback,args){try{this.browserSupportsSound=FlashDetect.versionAtLeast(9);}catch(ex){this.browserSupportsSound=false;}
if(this.browserSupportsSound){soundManager.url='/js/lib/soundmanagerv276a-20080808';soundManager.debugMode=false;soundManager.onload=this.afterSoundManagerInit.createDelegate(this,[callback,[args]]);soundManager.beginDelayedInit();}},getArgs:function(args){var sound;var volume;if(Ext.type(args)=='string'){sound=args;volume=50;}else{sound=args.sound;volume=args.volume;}
if(!volume&&0!=volume){volume=50;}
return{volume:volume,sound:sound};},_playSound:function(args){if(args.volume!=0){soundManager.play(args.sound,{volume:args.volume});}},playSound:function(args){if(!this.browserSupportsSound)
return;args=this.getArgs(args);try{this._playSound(args);}catch(ex){Zw.console("Unable to play sound: ",ex);}},onDestroy:function(){this.context.unsubscribe(this.uri,this.handlePlayEvent);}});

Zw.namespace('Zw.features.app');Zw.features.app.EventsToSoundFeature=Ext.extend(Zw.Feature,{onInit:function(){this.context.subscribe('/account/message/receive',this.onMessageReceive,this);this.context.subscribe('/account/message/sendComplete',this.onMessageSend,this);},onMessageReceive:function(){if(this.context.Settings.get('riser_volume')){this.context.publish('/app/sound/play',{sound:'incomingMessage',volume:this.context.Settings.get('riser_volume')});}},onMessageSend:function(){var allowDing=this.context.Settings.get('sendMessage_ding');if(allowDing){this.context.publish('/app/sound/play',{sound:'outgoingMessage',volume:this.context.Settings.get('riser_volume')});}}});Zw.features.Factory.register(Zw.features.app.EventsToSoundFeature);

Zw.namespace('Zw.features.app');Zw.features.app.PackageDownloaderFeature=Ext.extend(Zw.Feature,{onInit:function(){var context=this.context;if(context){context.subscribe('/app/packages/get',this.onPackageDownload,this);}},onPackageDownload:function(args,name){var type=Ext.type(args);if(type=='string'||type=='array'){args={pkg:args,fn:Ext.emptyFn};}
var fn=args.fn;var scope=args.scope||this;var params=args.params||[];var pkg=args.pkg;Zw.Packages.get({pkg:pkg,fnArgs:params,proxy:args.proxy,scope:scope,success:fn,onDownloadStart:this.onDownloadStart,onDownloadComplete:this.onDownloadComplete});},onDownloadStart:function(args){var context=this.context;if(context)
context.publish('/app/packages/download/start',args);},onDownloadComplete:function(args){var context=this.context;if(context)
context.publish('/app/packages/download/complete',args);},onDestroy:function(){var context=this.context;if(context)
context.unsubscribe('/app/packages/get',this.onPackageDownload,this);}});Zw.features.Factory.register(Zw.features.app.PackageDownloaderFeature);

Zw.features.app.BackgroundSwappingFeature=Ext.extend(Zw.Feature,{onActivate:function(){Ext.onReady(this.onWindowResize,this,{buffer:true,single:true});Ext.EventManager.on(window,'resize',this.onWindowResize,this,{buffer:true});},sizes:[{w:1280,h:1024,cls:'zw-windowsize-regular'},{w:1920,h:1080,cls:'zw-windowsize-large'}],onWindowResize:function(){var size=this.determineSize();this.removeAllPreviousClassesExcept(size);},removeAllPreviousClassesExcept:function(cls){var body=Ext.getBody();var len=this.sizes.length;for(var i=0;i<len;i++){var size=this.sizes[i].cls;if(size==cls){body.addClass(cls);}else{if(body.hasClass(size)){body.removeClass(size);}}}},determineSize:function(){var len=this.sizes.length;var measuredWidth=Ext.getBody().getWidth();var measuredHeight=Ext.getBody().getHeight();var size=this.sizes[len-1].cls;for(var i=0;i<len;i++){var s=this.sizes[i];var width=s.w;var height=s.h;if((measuredWidth<width)&&(measuredHeight<height)){size=s.cls;break;}}
return size;},onDeactivate:function(){Ext.EventManager.un(window,'resize',this.onWindowResize,this);},onDestroy:function(){}});Zw.features.Factory.register('Zw.features.app.BackgroundSwappingFeature',Zw.features.app.BackgroundSwappingFeature);

Zw.namespace('Zw.features.app');Zw.features.app.MOZOCountingFeature=Ext.extend(Zw.Feature,{receiveChannel:'/account/message/receive',sendChannel:'/account/message/send',onInit:function(){this.context.subscribe(this.sendChannel,this.onMessage,this);this.context.subscribe(this.receiveChannel,this.onMessage,this);},onMessage:function(message){try{var contactId=message.get('from');var contact=this.context.getContactManager().getContact(contactId);if(contact){var isMO=message.get('type')=='MO';if(isMO){contact.set('MOCount',contact.get('MOCount')+1);}else{contact.set('ZOCount',contact.get('ZOCount')+1);}}}catch(er){if(Zw.Application.debug){throw er;}else{this.context.publish('/app/error',{name:'MOZOCountingFeature.onMessage',data:'',err:er,culprit:'/account/message/receive'});}}},onDestroy:function(){this.context.unsubscribe(this.sendChannel,this.onMessage,this);this.context.unsubscribe(this.receiveChannel,this.onMessage,this);}});Zw.features.Factory.register(Zw.features.app.MOZOCountingFeature);

Zw.features.app.BrowserAlertFeature=Ext.extend(Zw.Feature,{focused:false,i:0,onInit:function(){this.i=0;this.context.subscribe('/account/message/receive',this.onIncomingMessage,this);this.context.subscribe('/account/message/update',this.onMessageUpdate,this);if(document.title){this.title=document.title;}else{this.title=Zw.localize('zw.title');if(Zw.portalDisplayName)
this.title=Zw.portalDisplayName;}},onIncomingMessage:function(obj,channel){Ext.each(Ext.isArray(obj)?obj:[obj],function(item){this.showAlertForMessage(item);},this);},onMessageUpdate:function(data){if(data.modified.isRead==false&&Zw.data.get(data,'isRead')){this.stopBrowserAlert();}},showAlertForMessage:function(message){if(message){if((!Zw.data.get(message,'isRead'))&&(Zw.data.get(message,'type')=='MO')){var firstName=Zw.data.get(message,'firstName');var lastName=Zw.data.get(message,'lastName');var n=(firstName+' '+lastName+'').trim();if(n){if(n.toLowerCase()!=Zw.localize('generic.text.unnamed').toLowerCase()){this.startBrowserAlert([this.title,Zw.localize('generic.alert.incomingMessageFrom'),n]);}}else{n=Zw.util.formatMobileNumber(message.get('mobileNumber'));this.startBrowserAlert([this.title,Zw.localize('generic.alert.incomingMessageFrom'),n]);}}}else{this.startBrowserAlert([this.title,Zw.localize('generic.alert.incomingMessage')]);}},onBlur:function(){this.focused=false;},onDeactivate:function(){this.stopBrowserAlert();},setTitle:function(title){document.title=title;},onActivate:function(){this.stopBrowserAlert();},startBrowserAlert:function(titles){this.titles=titles;if(!this._swapTitleTask){this._swapTitleTask=new Ext.util.TaskRunner();}
this.i=0;this._browserAlertTask.scope=this;this._swapTitleTask.stopAll();this._swapTitleTask.start(this._browserAlertTask);},_browserAlertTask:{interval:1000,run:function(){if(++this.i>=this.titles.length){this.i=0;}
this.setTitle(this.titles[this.i]);}},stopBrowserAlert:function(){if(this._swapTitleTask)
this._swapTitleTask.stopAll();this.setTitle(this.title);},onDestroy:function(){this.context.unsubscribe('/account/message/receive',this.onIncomingMessage,this);this.context.unsubscribe('/account/message/update',this.onMessageUpdate,this);}});Zw.features.Factory.register('Zw.features.app.BrowserAlertFeature');

Zw.util.ProxyPlugin=Ext.extend(Zw.Plugin,{args:null,scope:'features',namespace:'',deep:false,onInit:function(){if(!this.namespace){return;}
var plugins=Zw[this.scope].PluginFactory.create(this.namespace,this.args);if(this.noisy){alert("init plugins on channel "+this.scope+":"+this.namespace+": "+plugins);}
if(plugins&&plugins.length===0){return;}
if(plugins&&this.client){if(this.deep||(!this.client.addPlugin)){Ext.each(plugins,this.addPlugin,this);}else if(this.client._autoInitsPlugins){Ext.each(plugins,this.client.addPlugin,this.client);}else{Ext.each(plugins,this.addAndInitPlugin,this);}}},addAndInitPlugin:function(plugin){if(Ext.isArray(plugin)){Ext.each(plugin,this.addAndInitPlugin,this);}else{this.client.addPlugin(plugin);}},onDestroy:function(){delete this.args;}});Ext.reg('Zw.util.ProxyPlugin',Zw.util.ProxyPlugin);

Ext.ux.PanelBlind=Ext.extend(Ext.Panel,{allowMask:false,alignEl:'body',constructor:function(config){config=Ext.applyIf(config,{autoHeight:true,frame:true,baseCls:'x-blind',buttonAlign:'center',buttons:[{text:'Dismiss',handler:this.dismiss,scope:this}]});Ext.ux.PanelBlind.superclass.constructor.call(this,config);},init:function(client){this.client=client;if(!this.client.blinds){this.client.blinds=new Ext.util.MixedCollection();}
client.blinds.add(this);this.client.constructor.prototype.showBlind=this.clientShowBlind;this.client.constructor.prototype.dismissBlind=this.clientDismissBlind;this.client.on({destroy:this.destroy,resize:function(){if(this.undoObj){var body=this.client[this.alignEl];if(body){this.undoObj.wrap.setWidth(body.getSize(true).width);this.el.setWidth(body.getSize(true).width);}
this.undoObj.wrap.alignTo(this.client[this.alignEl],'bl-bl');}else{this.syncSizeWithClient();}},scope:this});},syncSizeWithClient:function(){var body=this.client[this.alignEl];if(body){this.setWidth(body.getSize(true).width);}
if(this.el)
this.el.alignTo(this.client[this.alignEl],'bl-bl');},clientShowBlind:function(id){var b=this.blinds.get(id);if(b){b.show();}},clientDismissBlind:function(id){var b=this.blinds.get(id);if(b){b.dismiss();}},show:function(){if(this.fireEvent('beforeShow')){if(!this.rendered){this.render(this.client.getEl());}
if(this.allowMask)this.maskClient();if(this.allowMask)this.el.setZIndex(Number(this.maskel.getStyle('z-index'))+1);this.el.disableShadow();this.syncSizeWithClient();this.setHeight(this.initialConfig.height);this.el.alignTo(this.client[this.alignEl],'bl-bl');this.el.visible=true;this.el.slideIn('b',{duration:1,easing:'easeOut',callback:function(){this.el.visible=true;this.el.enableShadow(true);this.fireEvent('show');},scope:this});}},dismiss:function(){if(this.destroyOnDismiss){this.destroy();delete this.client.blinds[this.id];}else{this.el.disableShadow();this.el.slideOut('b');this.unmaskClient();}},maskClient:function(){if(this.allowMask)
this.maskel=this.client.getEl().unmask();},unmaskClient:function(){if(this.maskel){this.client.getEl().unmask();delete this.maskel;}}});

(function(){var addListener=function(){if(window.addEventListener){return function(el,eventName,fn,capture){el.addEventListener(eventName,fn,!!capture);};}else if(window.attachEvent){return function(el,eventName,fn,capture){el.attachEvent("on"+eventName,fn);};}else{return function(){};}}(),removeListener=function(){if(window.removeEventListener){return function(el,eventName,fn,capture){el.removeEventListener(eventName,fn,(capture));};}else if(window.detachEvent){return function(el,eventName,fn){el.detachEvent("on"+eventName,fn);};}else{return function(){};}}();var EV=Ext.lib.Event;var MIM;var MASK_TARGET='x-frame-mask-target';Ext.ux.ManagedIFrame=function(){var args=Array.prototype.slice.call(arguments,0),el=Ext.get(args[0]),config=args[0];if(el&&el.dom&&el.dom.tagName=='IFRAME'){config=args[1]||{};}else{config=args[0]||args[1]||{};el=config.autoCreate?Ext.get(Ext.DomHelper.append(config.autoCreate.parent||Ext.getBody(),Ext.apply({tag:'iframe',frameborder:0,src:(Ext.isIE&&Ext.isSecure)?Ext.SSL_SECURE_URL:'about:blank'},config.autoCreate))):null;if(el&&this.unsupportedText){Ext.DomHelper.append(el.dom.parentNode,{tag:'noframes',html:this.unsupportedText});}}
if(!el||el.dom.tagName!='IFRAME'){return el;}
el.dom.name||(el.dom.name=el.dom.id);el.dom.ownerEl=el;this.addEvents({"focus":true,"blur":true,"unload":true,"domready":true,"documentloaded":true,"exception":true,"message":true});if(config.listeners){this.listeners=config.listeners;Ext.ux.ManagedIFrame.superclass.constructor.call(this);}
Ext.apply(el,this);el.addClass('x-managed-iframe');if(config.style){el.applyStyles(config.style);}
Ext.apply(el,{disableMessaging:config.disableMessaging===true,loadMask:!!config.loadMask?Ext.apply({msg:'Loading..',maskEl:null,hideOnReady:false,disabled:false},config.loadMask):false,_windowContext:null,eventsFollowFrameLinks:typeof config.eventsFollowFrameLinks=='undefined'?true:config.eventsFollowFrameLinks});if(el.loadMask){el.loadMask.maskEl||(el.loadMask.maskEl=el.parent('.'+MASK_TARGET)||el.parent());el.loadMask.maskEl.addClass(MASK_TARGET);}
var um=el.updateManager=new Ext.UpdateManager(el,true);um.showLoadIndicator=config.showLoadIndicator||false;Ext.ux.ManagedIFrame.Manager.register(el);if(config.src){el.setSrc(config.src);}else{var content=config.html||config.content||false;if(content){el.reset(null,function(frame){frame.update.apply(el,[].concat(content));});}}
return el;};Ext.extend(Ext.ux.ManagedIFrame,Ext.util.Observable,{src:null,CSS:null,manager:null,disableMessaging:true,domReadyRetries:7500,resetUrl:(function(){if(Ext.isIE&&Ext.isSecure){return Ext.SSL_SECURE_URL;}else{return'about:blank';}})(),unsupportedText:'Inline frames are NOT enabled\/supported by your browser.',setSrc:function(url,discardUrl,callback,scope){if(url&&typeof url=='object'){callback=url.callback||false;discardUrl=url.discardUrl||false;url=url.url||false;scope=url.scope||null;}
var src=url||this.src||this.resetUrl;this._windowContext=null;this._unHook();this._frameAction=this.frameInit=this._domReady=false;this.showMask();var s=this._targetURI=typeof src=='function'?src()||'':src;try{this._frameAction=true;this._callBack=typeof callback=='function'?callback.createDelegate(scope):null;this.dom.src=s;this.frameInit=true;this.checkDOM();}catch(ex){this.fireEvent('exception',this,ex);}
if(discardUrl!==true){this.src=src;}
return this;},setLocation:function(url,discardUrl,callback,scope){if(url&&typeof url=='object'){callback=url.callback||false;discardUrl=url.discardUrl||false;url=url.url||false;scope=url.scope||null;}
var src=url||this.src||this.resetUrl;this._windowContext=null;this._unHook();this._frameAction=this.frameInit=this._domReady=false;this.showMask();var s=this._targetURI=typeof src=='function'?src()||'':src;try{this._frameAction=true;this._callBack=typeof callback=='function'?callback.createDelegate(scope):null;this.getWindow().location.replace(s);this.frameInit=true;this.checkDOM();}catch(ex){this.fireEvent('exception',this,ex);}
if(discardUrl!==true){this.src=src;}
return this;},reset:function(src,callback,scope){this._unHook();var loadMaskOff=false;if(this.loadMask){loadMaskOff=this.loadMask.disabled;this.loadMask.disabled=false;}
this._callBack=function(frame){if(frame.loadMask){frame.loadMask.disabled=loadMaskOff;};frame._frameAction=false;frame.frameInit=true;this._isReset=false;if(callback){callback.call(scope||window,frame);}};this.hideMask(true);this._frameAction=false;this.frameInit=true
this._isReset=true;var s=src;if(typeof src=='function'){s=src();}
s=this._targetURI=Ext.isEmpty(s,true)?this.resetUrl:s;this.getWindow().location.href=s;return this;},scriptRE:/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/gi,update:function(content,loadScripts,callback,scope){loadScripts=loadScripts||this.getUpdateManager().loadScripts||false;content=Ext.DomHelper.markup(content||'');content=loadScripts===true?content:content.replace(this.scriptRE,"");var doc;if((doc=this.getDocument())&&!!content.length){this._unHook();this._windowContext=this.src=null;this._targetURI=location.href;this.src=null;this.frameInit=true;this.showMask();this._callBack=typeof callback=='function'?callback.createDelegate(scope):null;doc.open();this._frameAction=true;doc.write(content);doc.close();this.checkDOM();}else{this.hideMask(true);if(callback){callback.call(scope,this);}}
return this;},disableMessaging:true,_XFrameMessaging:function(){var tagStack={'$':[]};var isEmpty=function(v,allowBlank){return v===null||v===undefined||(!allowBlank?v==='':false);};var apply=function(o,c,defaults){if(defaults){apply(o,defaults);}
if(o&&c&&typeof c=='object'){for(var p in c){o[p]=c[p];}}
return o;};window.sendMessage=function(message,tag,origin){var MIF;if(MIF=arguments.callee.manager){if(message._fromHost){var fn,result;var compTag=message.tag||tag||null;var mstack=!isEmpty(compTag)?tagStack[compTag.toLowerCase()]||[]:tagStack["$"];for(var i=0,l=mstack.length;i<l;i++){if(fn=mstack[i]){result=fn.apply(fn.__scope,arguments)===false?false:result;if(fn.__single){mstack[i]=null;}
if(result===false){break;}}}
return result;}else{message={type:isEmpty(tag)?'message':'message:'
+tag.toLowerCase().replace(/^\s+|\s+$/g,''),data:message,domain:origin||document.domain,uri:document.documentURI,source:window,tag:isEmpty(tag)?null:tag.toLowerCase()};try{return MIF.disableMessaging!==true?MIF.fireEvent.call(MIF,message.type,MIF,message):null;}catch(ex){}
return null;}}};window.onhostmessage=function(fn,scope,single,tag){if(typeof fn=='function'){if(!isEmpty(fn.__index)){throw"onhostmessage: duplicate handler definition"
+(tag?" for tag:"+tag:'');}
var k=isEmpty(tag)?"$":tag.toLowerCase();tagStack[k]||(tagStack[k]=[]);apply(fn,{__tag:k,__single:single||false,__scope:scope||window,__index:tagStack[k].length});tagStack[k].push(fn);}else{throw"onhostmessage: function required";}};window.unhostmessage=function(fn){if(typeof fn=='function'&&typeof fn.__index!='undefined'){var k=fn.__tag||"$";tagStack[k][fn.__index]=null;}};},getHistory:function(){var h=null;try{h=this.getWindow().history;}catch(eh){}
return h;},get:function(el){return MIM.El.get(this,el);},fly:function(el,named){named=named||'_global';el=this.getDom(el);if(!el){return null;}
if(!MIM._flyweights[named]){MIM._flyweights[named]=new Ext.Element.Flyweight();}
MIM._flyweights[named].dom=el;return MIM._flyweights[named];},getDom:function(el){var d;if(!el||!(d=this.getDocument())){return null;}
return el.dom?el.dom:(typeof el=='string'?d.getElementById(el):el);},select:function(selector,unique){var d;return(d=this.getDocument())?Ext.Element.select(selector,unique,d):null;},query:function(selector){var d;return(d=this.getDocument())?Ext.DomQuery.select(selector,d):null;},getDoc:function(){return this.get(this.getDocument());},removeNode:function(node){MIM.removeNode(this,this.getDom(node));},_unHook:function(){var elcache,h=MIM.getFrameHash(this)||{};if(this._hooked){if(h&&(elcache=h.elCache)){for(var id in elcache){var el=elcache[id];if(el.removeAllListeners){el.removeAllListeners();}
delete elcache[id];}
if(h.docEl){h.docEl.removeAllListeners();h.docEl=null;delete h.docEl;}}
var w;if(this._frameProxy&&(w=this.getWindow())){removeListener(w,'focus',this._frameProxy);removeListener(w,'blur',this._frameProxy);removeListener(w,'resize',this._frameProxy);removeListener(w,'unload',this._frameProxy);}}
this._hooked=this._domReady=this._domFired=this._frameAction=false;MIM._flyweights={};this.CSS=this.CSS?this.CSS.destroy():null;},_renderHook:function(){this._windowContext=null;this.CSS=this.CSS?this.CSS.destroy():null;this._hooked=false;try{if(this.writeScript('(function(){(window.hostMIF = parent.Ext.get("'
+this.dom.id
+'"))._windowContext='
+(Ext.isIE?'window':'{eval:function(s){return eval(s);}}')
+';})();')){this._frameProxy||(this._frameProxy=MIM.eventProxy.createDelegate(this));var w;if(w=this.getWindow()){addListener(w,'focus',this._frameProxy);addListener(w,'blur',this._frameProxy);addListener(w,'resize',this._frameProxy);addListener(w,'unload',this._frameProxy);}
if(this.disableMessaging!==true){this.loadFunction({name:'XMessage',fn:this._XFrameMessaging},false,true);var sm;if(sm=w.sendMessage){sm.manager=this;}}
this.CSS=new CSSInterface(this.getDocument());}}catch(ex){console.warn(ex);}
return(this._hooked=this.domWritable());},sendMessage:function(message,tag,origin){var win;if(this.disableMessaging!==true&&(win=this.getWindow())){tag||(tag=message.tag||'');tag=tag.toLowerCase();message=Ext.applyIf(message.data?message:{data:message},{type:Ext.isEmpty(tag)?'message':'message:'
+tag,domain:origin||document.domain,uri:document.documentURI,source:window,tag:tag||null,_fromHost:this});return win.sendMessage?win.sendMessage.call(null,message,tag,origin):null;}
return null;},_windowContext:null,getDocument:function(){var win=this.getWindow(),doc=null;try{doc=(Ext.isIE&&win?win.document:null)||this.dom.contentDocument||window.frames[this.id].document||null;}catch(gdEx){return false;}
return doc;},getBody:function(){var d;return(d=this.getDocument())?d.body:null;},getDocumentURI:function(){var URI,d;try{URI=this.src&&(d=this.getDocument())?d.location.href:null;}catch(ex){}
return URI||(typeof this.src=='function'?this.src():this.src);},getWindowURI:function(){var URI,w;try{URI=(w=this.getWindow())?w.location.href:null;}catch(ex){}
return URI||(typeof this.src=='function'?this.src():this.src);},getWindow:function(){var dom=this.dom,win=null;try{win=dom.contentWindow||window.frames[dom.name]||null;}catch(gwEx){}
return win;},print:function(){var win;try{if(win=this.getWindow()){if(Ext.isIE){win.focus();}
win.print();}}catch(ex){throw'print exception: '+(ex.description||ex.message||ex);}},destroy:function(){this.removeAllListeners();if(this.loadMask){this.hideMask(true);Ext.apply(this.loadMask,{masker:null,maskEl:null});}
if(this.dom){Ext.ux.ManagedIFrame.Manager.deRegister(this);this.dom.ownerEl=this._windowContext=null;if(Ext.isIE&&this.dom.src){this.dom.src='javascript:false';}
this._maskEl=null;this.remove();}},domWritable:function(){return!!this._windowContext;},execScript:function(block,useDOM){try{if(this.domWritable()){if(useDOM){this.writeScript(block);}else{return this._windowContext.eval(block);}}else{throw'execScript:non-secure context'}}catch(ex){this.fireEvent('exception',this,ex);return false;}
return true;},writeScript:function(block,attributes){attributes=Ext.apply({},attributes||{},{type:"text/javascript",text:block});try{var head,script,doc=this.getDocument();if(doc&&typeof doc.getElementsByTagName!='undefined'){if(!(head=doc.getElementsByTagName("head")[0])){head=doc.createElement("head");doc.getElementsByTagName("html")[0].appendChild(head);}
if(head&&(script=doc.createElement("script"))){for(var attrib in attributes){if(attributes.hasOwnProperty(attrib)&&attrib in script){script[attrib]=attributes[attrib];}}
return!!head.appendChild(script);}}}catch(ex){this.fireEvent('exception',this,ex);}
return false;},loadFunction:function(fn,useDOM,invokeIt){var name=fn.name||fn;var fn=fn.fn||window[fn];this.execScript(name+'='+fn,useDOM);if(invokeIt){this.execScript(name+'()');}},mask:function(msg,msgCls,maskCls){this._mask&&this.unmask();var p=this.parent('.'+MASK_TARGET)||this.parent();if(p.getStyle("position")=="static"&&!p.select('iframe,frame,object,embed').elements.length){p.addClass("x-masked-relative");}
p.addClass("x-masked");this._mask=Ext.DomHelper.append(p,{cls:maskCls||"ext-el-mask"},true);this._mask.setDisplayed(true);this._mask._agent=p;var delay=(this.loadMask?this.loadMask.delay:0)||10;if(typeof msg=='string'){this._maskMsg=Ext.DomHelper.append(p,{cls:msgCls||'ext-el-mask-msg x-mask-loading',style:{visibility:'hidden'},cn:{tag:'div',html:msg}},true);this._maskMsg.setVisibilityMode(Ext.Element.VISIBILITY);(function(){this._mask&&this._maskMsg&&this._maskMsg.center(p).setVisible(true);}).defer(delay,this);}
if(Ext.isIE&&!(Ext.isIE7&&Ext.isStrict)&&this.getStyle('height')=='auto'){this._mask.setSize(undefined,this._mask.getHeight());}
return this._mask;},unmask:function(){var a;if(this._mask){(a=this._mask._agent)&&a.removeClass(["x-masked-relative","x-masked"]);if(this._maskMsg){this._maskMsg.remove();delete this._maskMsg;}
this._mask.remove();delete this._mask;}},showMask:function(msg,msgCls,maskCls){var lmask=this.loadMask;if(lmask&&!lmask.disabled&&!this._mask){this.mask(msg||lmask.msg,msgCls||lmask.msgCls,maskCls||lmask.maskCls);}},hideMask:function(forced){var tlm=this.loadMask;if(tlm&&!!this._mask){if(forced||(tlm.hideOnReady&&this._domReady)){this.unmask();}}},submitAsTarget:function(submitCfg){var opt=submitCfg||{},D=document;var form=opt.form||Ext.DomHelper.append(D.body,{tag:'form',cls:'x-hidden'});form=Ext.getDom(form.form||form);form.target=this.dom.name;form.method=opt.method||'POST';opt.encoding&&(form.enctype=form.encoding=String(opt.encoding));opt.url&&(form.action=opt.url);var hiddens,hd;if(opt.params){hiddens=[];var ps=typeof opt.params=='string'?Ext.urlDecode(params,false):opt.params;for(var k in ps){if(ps.hasOwnProperty(k)){hd=D.createElement('input');hd.type='hidden';hd.name=k;hd.value=ps[k];form.appendChild(hd);hiddens.push(hd);}}}
this._callBack=typeof opt.callback=='function'?opt.callback.createDelegate(opt.scope):null;this._frameAction=this.frameInit=true;this._targetURI=location.href;this.showMask();(function(){form.submit();hiddens&&Ext.each(hiddens,Ext.removeNode,Ext);Ext.fly(form,'_dynaForm').hasClass('x-hidden')&&Ext.removeNode(form);this.hideMask(true);}).defer(100,this);},loadHandler:function(e,target){target||(target={});var rstatus=(e&&typeof e.type!=='undefined'?e.type:this.dom.readyState);if(!this.frameInit||(!this._frameAction&&!this.eventsFollowFrameLinks)){return;}
switch(rstatus){case'domready':var M;try{M=this.getWindow()?this.getWindow().hostMIF:null;}catch(access){}
if(this._frameAction&&!M){this.frameInit&&this._renderHook()&&this.fireEvent.defer(1,this,["domready",this]);this._domFired=this._hooked;}
case'domfail':this._domReady=true;this.hideMask();break;case'load':case'complete':if(!this._domFired){this.loadHandler({type:'domready',id:this.id},this.dom);}
Ext.isIE&&this.getWindow()&&this.getWindow().focus();if(this._frameAction||this.eventsFollowFrameLinks){this.fireEvent.defer(1,this,["documentloaded",this]);if(this._callBack){this._callBack.defer(1,null,[this]);}}
this._frameAction=this.frameInit=false;if(this.eventsFollowFrameLinks){this._domFired=this._domReady=false;}
this.hideMask(true);break;default:}
this.frameState=rstatus;},checkDOM:function(win){if(Ext.isOpera||Ext.isGecko||!this._frameAction){return;}
var n=0,manager=this,domReady=false,b,l,d,max=this.domReadyRetries,polling=false,startLocation=(this.getDocument()||{location:{}}).location.href;(function(){d=manager.getDocument()||{location:{}};polling=(d.location.href!==startLocation||d.location.href===manager._targetURI);if(!manager._frameAction||manager._domReady){return;}
domReady=polling&&((b=manager.getBody())&&!!(b.innerHTML||'').length)||false;if(d.location.href&&!domReady&&(++n<max)){setTimeout(arguments.callee,2);return;}
manager.loadHandler({type:domReady?'domready':'domfail'});})();}});var styleCamelRe=/(-[a-z])/gi;var styleCamelFn=function(m,a){return a.charAt(1).toUpperCase();};var CSSInterface=function(hostDocument){var doc;if(hostDocument){doc=hostDocument;return{rules:null,destroy:function(){return doc=null;},createStyleSheet:function(cssText,id){var ss;if(!doc)
return;var head=doc.getElementsByTagName("head")[0];var rules=doc.createElement("style");rules.setAttribute("type","text/css");if(id){rules.setAttribute("id",id);}
if(Ext.isIE){head.appendChild(rules);ss=rules.styleSheet;ss.cssText=cssText;}else{try{rules.appendChild(doc.createTextNode(cssText));}catch(e){rules.cssText=cssText;}
head.appendChild(rules);ss=rules.styleSheet?rules.styleSheet:(rules.sheet||doc.styleSheets[doc.styleSheets.length
-1]);}
this.cacheStyleSheet(ss);return ss;},removeStyleSheet:function(id){if(!doc)
return;var existing=doc.getElementById(id);if(existing){existing.parentNode.removeChild(existing);}},swapStyleSheet:function(id,url){this.removeStyleSheet(id);if(!doc)
return;var ss=doc.createElement("link");ss.setAttribute("rel","stylesheet");ss.setAttribute("type","text/css");ss.setAttribute("id",id);ss.setAttribute("href",url);doc.getElementsByTagName("head")[0].appendChild(ss);},refreshCache:function(){return this.getRules(true);},cacheStyleSheet:function(ss){if(this.rules){this.rules={};}
try{var ssRules=ss.cssRules||ss.rules;for(var j=ssRules.length-1;j>=0;--j){this.rules[ssRules[j].selectorText]=ssRules[j];}}catch(e){}},getRules:function(refreshCache){if(this.rules==null||refreshCache){this.rules={};if(doc){var ds=doc.styleSheets;for(var i=0,len=ds.length;i<len;i++){try{this.cacheStyleSheet(ds[i]);}catch(e){}}}}
return this.rules;},getRule:function(selector,refreshCache){var rs=this.getRules(refreshCache);if(!Ext.isArray(selector)){return rs[selector];}
for(var i=0;i<selector.length;i++){if(rs[selector[i]]){return rs[selector[i]];}}
return null;},updateRule:function(selector,property,value){if(!Ext.isArray(selector)){var rule=this.getRule(selector);if(rule){rule.style[property.replace(styleCamelRe,styleCamelFn)]=value;return true;}}else{for(var i=0;i<selector.length;i++){if(this.updateRule(selector[i],property,value)){return true;}}}
return false;}};}};Ext.ux.ManagedIframePanel=Ext.extend(Ext.Panel,{defaultSrc:null,bodyStyle:{position:'relative'},frameStyle:{overflow:'auto'},frameConfig:null,hideMode:!Ext.isIE?'nosize':'display',shimCls:'x-frame-shim',shimUrl:null,loadMask:false,stateful:false,animCollapse:Ext.isIE&&Ext.enableFx,autoScroll:false,closable:true,ctype:"Ext.ux.ManagedIframePanel",showLoadIndicator:false,unsupportedText:'Inline frames are NOT enabled\/supported by your browser.',initComponent:function(){var f=this.frameConfig?this.frameConfig.autoCreate||this.frameConfig:{};var frCfg=Ext.apply(f,{id:f.id||Ext.id()});frCfg.name=f.name||frCfg.id;if(Ext.isIE&&Ext.isSecure){frCfg.src=Ext.SSL_SECURE_URL;}
var frameTag=Ext.apply({tag:'iframe',frameborder:0,cls:'x-managed-iframe',style:this.frameStyle||f.style||{}},frCfg);var unsup=this.unsupportedText?{tag:'noframes',html:this.unsupportedText}:[];this.bodyCfg||(this.bodyCfg={cls:this.baseCls+'-body',children:this.contentEl?[]:[frameTag].concat(unsup)});this.autoScroll=false;this.items=null;if(this.stateful!==false){this.stateEvents||(this.stateEvents=['documentloaded']);}
Ext.ux.ManagedIframePanel.superclass.initComponent.call(this);this.monitorResize||(this.monitorResize=!!this.fitToParent);this.addEvents({documentloaded:true,domready:true,message:true,exception:true,blur:true,focus:true});this.addListener=this.on;},doLayout:function(){if(this.fitToParent&&!this.ownerCt){var pos=this.getPosition(),size=(Ext.get(this.fitToParent)||this.getEl().parent()).getViewSize();this.setSize(size.width-pos[0],size.height-pos[1]);}
Ext.ux.ManagedIframePanel.superclass.doLayout.apply(this,arguments);},beforeDestroy:function(){if(this.rendered){if(this.tools){for(var k in this.tools){Ext.destroy(this.tools[k]);}}
if(this.header&&this.headerAsText){var s;if(s=this.header.child('span'))s.remove(true,true);this.header.update('');}
Ext.each(['iframe','shim','header','topToolbar','bottomToolbar','footer','loadMask','body','bwrap'],function(elName){if(this[elName]){if(typeof this[elName].destroy=='function'){this[elName].destroy();}else{Ext.destroy(this[elName]);}
this[elName]=null;delete this[elName];}},this);}
Ext.ux.ManagedIframePanel.superclass.beforeDestroy.call(this);},onDestroy:function(){Ext.Panel.superclass.onDestroy.call(this);},afterRender:function(container){var html=this.html;delete this.html;Ext.ux.ManagedIframePanel.superclass.afterRender.apply(this,arguments);if(this.iframe=this.body.child('iframe')){this.iframe.ownerCt=this;if(this.loadMask){var mEl;if(mEl=this.loadMask.maskEl){(this[mEl]||mEl||this.body).addClass(MASK_TARGET);}
this.loadMask=Ext.apply({disabled:false,hideOnReady:false},this.loadMask);}
this.getUpdater().showLoadIndicator=this.showLoadIndicator||false;var ownerCt=this.ownerCt;while(ownerCt){ownerCt.on('afterlayout',function(container,layout){var MIM=Ext.ux.ManagedIFrame.Manager,st=false;Ext.each(['north','south','east','west'],function(region){var reg;if((reg=layout[region])&&reg.splitEl){st=true;if(!reg.split._splitTrapped){reg.split.on('beforeresize',MIM.showShims,MIM);reg.split._splitTrapped=true;}}},this);if(st&&!this._splitTrapped){this.on('resize',MIM.hideShims,MIM);this._splitTrapped=true;}},this,{single:true});ownerCt=ownerCt.ownerCt;}
this.shim=Ext.get(this.body.child('.'+this.shimCls))||Ext.DomHelper.append(this.body,{tag:'img',src:this.shimUrl||Ext.BLANK_IMAGE_URL,cls:this.shimCls,galleryimg:"no"},true);var El=Ext.Element;var mode=El[this.hideMode.toUpperCase()]||'x-hide-nosize';Ext.each([this[this.collapseEl],this.floating?null:this.getActionEl(),this.iframe],function(el){if(el)
el.setVisibilityMode(mode);},this);if(this.iframe=new Ext.ux.ManagedIFrame(this.iframe,{loadMask:this.loadMask,showLoadIndicator:this.showLoadIndicator,disableMessaging:this.disableMessaging,style:this.frameStyle,src:this.defaultSrc,html:html}))
{this.loadMask=this.iframe.loadMask;this.iframe.ownerCt=this;this.relayEvents(this.iframe,["blur","focus","unload","documentloaded","domready","exception","message"].concat(this._msgTagHandlers||[]));delete this._msgTagHandlers;}}},sendMessage:function(){if(this.iframe){this.iframe.sendMessage.apply(this.iframe,arguments);}},filterOptRe:/^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/,on:function(name){var tagRE=/^message\:/i,n=null;if(typeof name=='object'){for(var na in name){if(!this.filterOptRe.test(na)&&tagRE.test(na)){n||(n=[]);n.push(na.toLowerCase());}}}else if(tagRE.test(name)){n=[name.toLowerCase()];}
if(this.getFrame()&&n){this.relayEvents(this.iframe,n);}else{this._msgTagHandlers||(this._msgTagHandlers=[]);if(n)
this._msgTagHandlers=this._msgTagHandlers.concat(n);}
Ext.ux.ManagedIframePanel.superclass.on.apply(this,arguments);},setSrc:function(url,discardUrl,callback,scope){url=url||this.defaultSrc||false;if(url&&this.rendered&&this.iframe){this.iframe.setSrc.call(this.iframe,url,discardUrl,callback,scope);}
return this;},setLocation:function(url,discardUrl,callback,scope){url=url||this.defaultSrc||false;if(url&&this.rendered&&this.iframe){this.iframe.setLocation.call(this.iframe,url,discardUrl,callback,scope);}
return this;},getState:function(){var URI=this.iframe?this.iframe.getDocumentURI()||null:null;return Ext.apply(Ext.ux.ManagedIframePanel.superclass.getState.call(this)||{},URI?{defaultSrc:typeof URI=='function'?URI():URI}:null);},getUpdater:function(){return this.rendered?(this.iframe||this.body).getUpdater():null;},getFrame:function(){return this.rendered?this.iframe:null},getFrameWindow:function(){return this.rendered&&this.iframe?this.iframe.getWindow():null;},getFrameDocument:function(){return this.rendered&&this.iframe?this.iframe.getDocument():null;},getFrameDoc:function(){return this.rendered&&this.iframe?this.iframe.getDoc():null;},getFrameBody:function(){return this.rendered&&this.iframe?this.iframe.getBody():null;},load:function(loadCfg){var um;if(um=this.getUpdater()){if(loadCfg&&loadCfg.renderer){um.setRenderer(loadCfg.renderer);delete loadCfg.renderer;}
um.update.apply(um,arguments);}
return this;},doAutoLoad:function(){this.load(typeof this.autoLoad=='object'?this.autoLoad:{url:this.autoLoad});}});Ext.ux.ManagedIFrame.Manager=MIM=function(){var frames={};var implementation={readyHandler:function(e){try{var $frame=e.target.ownerEl;if($frame&&$frame._frameAction){$frame.loadHandler.call($frame,{type:'domready'});}}catch(rhEx){return}},shimCls:'x-frame-shim',register:function(frame){frame.manager=this;frames[frame.id]=frames[frame.dom.name]={ref:frame,elCache:{}};frame.dom[Ext.isIE?'onreadystatechange':'onload']=frame.loadHandler.createDelegate(frame);return frame;},deRegister:function(frame){frame._unHook();frame.dom.onload=frame.dom.onreadystatechange=null;delete frames[frame.id];delete frames[frame.dom.name];},hideShims:function(){if(!this.shimApplied)
return;Ext.select('.'+this.shimCls,true).removeClass(this.shimCls
+'-on');this.shimApplied=false;},showShims:function(){if(!this.shimApplied){this.shimApplied=true;Ext.select('.'+this.shimCls,true).addClass(this.shimCls
+'-on');}},getFrameById:function(id){return typeof id=='string'?(frames[id]?frames[id].ref||null:null):null;},getFrameByName:function(name){return this.getFrameById(name);},getFrameHash:function(frame){return frame.id?frames[frame.id]:null;},eventProxy:function(e){if(!e)return;e=Ext.EventObject.setEvent(e);var be=e.browserEvent||e;(e.type=='unload')&&this._unHook();if(!be['eventPhase']||(be['eventPhase']==(be['AT_TARGET']||2))){return this.fireEvent(e.type,e);}},_flyweights:{},destroy:function(){if(document.addEventListener){window.removeEventListener("DOMFrameContentLoaded",this.readyHandler,true);}
delete this._flyweights;},removeNode:Ext.isIE?function(frame,n){frame=MIM.getFrameHash(frame);if(frame&&n&&n.tagName!='BODY'){d=frame.scratchDiv||(frame.scratchDiv=frame.getDocument().createElement('div'));d.appendChild(n);d.innerHTML='';}}:function(frame,n){if(n&&n.parentNode&&n.tagName!='BODY'){n.parentNode.removeChild(n);}}};if(document.addEventListener){window.addEventListener("DOMFrameContentLoaded",implementation.readyHandler,true);}
Ext.EventManager.on(window,'beforeunload',implementation.destroy,implementation);return implementation;}();MIM.showDragMask=MIM.showShims;MIM.hideDragMask=MIM.hideShims;MIM.El=function(frame,el,forceNew){var frameObj;frame=(frameObj=MIM.getFrameHash(frame))?frameObj.ref:null;if(!frame){return null;}
var elCache=frameObj.elCache||(frameObj.elCache={});var dom=frame.getDom(el);if(!dom){return null;}
var id=dom.id;if(forceNew!==true&&id&&elCache[id]){return elCache[id];}
this.dom=dom;this.id=id||Ext.id(dom);};MIM.El.get=function(frame,el){var ex,elm,id,doc;if(!frame||!el){return null;}
var frameObj;frame=(frameObj=MIM.getFrameHash(frame))?frameObj.ref:null;if(!frame){return null;}
var elCache=frameObj.elCache||(frameObj.elCache={});if(!(doc=frame.getDocument())){return null;}
if(typeof el=="string"){if(!(elm=frame.getDom(el))){return null;}
if(ex=elCache[el]){ex.dom=elm;}else{ex=elCache[el]=new MIM.El(frame,elm);}
return ex;}else if(el.tagName){if(!(id=el.id)){id=Ext.id(el);}
if(ex=elCache[id]){ex.dom=el;}else{ex=elCache[id]=new MIM.El(frame,el);}
return ex;}else if(el instanceof MIM.El){if(el!=frameObj.docEl){el.dom=frame.getDom(el.id)||el.dom;elCache[el.id]=el;}
return el;}else if(el.isComposite){return el;}else if(Ext.isArray(el)){return frame.select(el);}else if(el==doc){if(!frameObj.docEl){var f=function(){};f.prototype=MIM.El.prototype;frameObj.docEl=new f();frameObj.docEl.dom=doc;}
return frameObj.docEl;}
return null;};Ext.apply(MIM.El.prototype,Ext.Element.prototype);Ext.ns('Ext.ux.panel','Ext.ux.portlet');Ext.reg('iframepanel',Ext.ux.panel.ManagedIframe=Ext.ux.ManagedIframePanel);Ext.ux.ManagedIframePortlet=Ext.extend(Ext.ux.ManagedIframePanel,{anchor:'100%',frame:true,collapseEl:'bwrap',collapsible:true,draggable:true,cls:'x-portlet'});Ext.reg('iframeportlet',Ext.ux.portlet.ManagedIframe=Ext.ux.ManagedIframePortlet);Ext.apply(Ext.Element.prototype,{setVisible:function(visible,animate){if(!animate||!Ext.lib.Anim){if(this.visibilityMode==Ext.Element.DISPLAY){this.setDisplayed(visible);}else if(this.visibilityMode==Ext.Element.VISIBILITY){this.fixDisplay();this.dom.style.visibility=visible?"visible":"hidden";}else{this[visible?'removeClass':'addClass'](String(this.visibilityMode));}}else{var dom=this.dom;var visMode=this.visibilityMode;if(visible){this.setOpacity(.01);this.setVisible(true);}
this.anim({opacity:{to:(visible?1:0)}},this.preanim(arguments,1),null,.35,'easeIn',function(){if(!visible){if(visMode==Ext.Element.DISPLAY){dom.style.display="none";}else if(visMode==Ext.Element.VISIBILITY){dom.style.visibility="hidden";}else{Ext.get(dom).addClass(String(visMode));}
Ext.get(dom).setOpacity(1);}});}
return this;},isVisible:function(deep){var vis=!(this.hasClass(this.visibilityMode)||this.getStyle("visibility")=="hidden"||this.getStyle("display")=="none");if(deep!==true||!vis){return vis;}
var p=this.dom.parentNode;while(p&&p.tagName.toLowerCase()!="body"){if(!Ext.fly(p,'_isVisible').isVisible()){return false;}
p=p.parentNode;}
return true;}});})();if(Ext.provide){Ext.provide('miframe');}

Ext.namespace('Ext.ux');Ext.ux.GMapPanel=Ext.extend(Ext.Panel,{initComponent:function(){var defConfig={plain:true,zoomLevel:3,yaw:180,pitch:0,zoom:0,gmapType:'map',border:false}
Ext.applyIf(this,defConfig);Ext.ux.GMapPanel.superclass.initComponent.call(this);},afterRender:function(){var wh=this.ownerCt.getSize();Ext.applyIf(this,wh);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(!this.disableEvents){GEvent.bind(this.gmap,'click',this,function(){this.fireEvent('click',this,arguments);});}
this.customizeMap(this.gmap);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 point=new GLatLng(this.setCenter.lat,this.setCenter['long']);this.gmap.setCenter(point,this.zoomLevel);}
if(typeof this.setCenter.marker==='object'&&typeof point==='object'){this.addMarker(point,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 dt=new Ext.util.DelayedTask();dt.delay(300,function(){this.addMarkers(this.markers);},this);},onResize:function(w,h){if(typeof this.gmap=='object'){this.gmap.checkResize();}
Ext.ux.GMapPanel.superclass.onResize.call(this,w,h);},setSize:function(width,height,animate){if(typeof this.gmap=='object'){this.gmap.checkResize();}
Ext.ux.GMapPanel.superclass.setSize.call(this,width,height,animate);},getMap:function(){return this.gmap;},customizeMap:Ext.emptyFn,addMarkers:function(markers){if(Ext.isArray(markers)){for(var i=0;i<markers.length;i++){var mkr_point=new GLatLng(markers[i].lat,markers[i]['long']);this.addMarker(mkr_point,markers[i].marker,false,markers[i].setCenter);}}},addMarker:function(point,marker,clear,center){Ext.applyIf(marker,G_DEFAULT_ICON);if(clear===true){this.gmap.clearOverlays();}
if(center===true){this.gmap.setCenter(point,this.zoomLevel);}
var mark=new GMarker(point,marker);this.gmap.addOverlay(mark);},geoCodeLookup:function(addr){this.geocoder=new GClientGeocoder();this.geocoder.getLocations(addr,this.addAddressToMap.createDelegate(this));},addAddressToMap:function(response){if(!response||response.Status.code!=200){}else{place=response.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{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);

Zw.namespace('Zw.features.messages');Zw.features.messages.WindowWidthPlugin=Ext.extend(Zw.Plugin,{});Ext.reg('Zw.features.messages.WindowWidthPlugin',Zw.features.messages.WindowWidthPlugin);

Zw.controls.SendProgressBar=Ext.extend(Zw.controls.Div,{cls:'zw-send-progress-bar stage1',oldStage:'stage1',multiple:null,value:1,setSuccessCount:Ext.emptyFn,error:false,initComponent:function(){this.errors=[];if(this.preventReceipt){this.receiptCls='x-hidden';}
this.plugins=this.plugins||[];if(!this.preventBlink){this.plugins.push(new Zw.controls.plugins.SendProgressBarBlinkingPlugin({stopBlinkingOnError:true}));}
Zw.controls.SendProgressBar.superclass.initComponent.call(this);if(this.contact){this.setContact(this.contact);}
if(Ext.type(this.multiple)=='boolean'){this.initDescriptionPlugins(this.multiple);}
this.addEvents({'statusUpdate':true});},initDescriptionPlugins:function(multiple){var plugin=multiple?new Zw.controls.plugins.SendProgressBarMultipleDescriptionPlugin():new Zw.controls.plugins.SendProgressBarSimpleDescriptionPlugin();plugin.init(this);},setContact:function(contact){this.contact=contact;this.fireEvent('contactchanged',this,this.contact);},statusCls:'',activeStage:'stage1',doneCls:'',tpl:'<div class="{activeStage} {doneCls}">'+'<div class="zw-send-progress-bar-wrapper">'+'<div class="stage stage1 {stage1error}"></div>'+'<div class="stage stage2 {stage2error}"></div>'+'<div class="stage stage3 {stage3error}"></div>'+'<div class="stage stage4 {stage4error}"></div>'+'<div class="stage stage5 {stage5error}"></div>'+'</div>'+'<div class="receipt {receiptCls}"></div>'+'<div class="status {statusCls}"></div>'+'</div>',receiptCls:'',onRender:function(ct,position){Zw.controls.SendProgressBar.superclass.onRender.call(this,ct,position);if(this.status){if(this.status.rendered){this.activateStatusErrorHandlers();}else{this.status.on('render',this.activateStatusErrorHandlers,this,{single:true});}}else{this.status=this.getEl().down('.status');this.activateStatusErrorHandlers();}
if(this.text){this.setStatus(this.text);}
this.oldStage='stage1';},activateStatusErrorHandlers:function(){var el=this.status.el||this.status;if(el&&el.on){el.on('mouseover',this.statusMouseOverHandler,this);el.on('mouseout',this.statusMouseOutHandler,this);el.on('click',this.statusClickHandler,this);}},statusMouseOverHandler:function(e,el){el=Ext.get(el);if(this.error){if((this.multiple&&el.hasClass('error-status'))||!this.multiple){el.addClass('error-status-mo');}}},statusMouseOutHandler:function(e,el){Ext.fly(el).removeClass('error-status-mo');},statusClickHandler:function(){if(this.error&&!this.multiple){Zw.Application.Net.errorResolve({scope:this,success:this.showDetailedErrorDescriptionWindow,params:{code:this.errorCode}});}},showDetailedErrorDescriptionWindow:function(scope,json,response){this.context.publish('/desktop/error/show',{title:Zw.localize('generic.alert.messageSendingError.title'),msg:response.responseText});},setValue:function(value,how){var newStage=String.format('stage{0}',value);this.activeStage=newStage;var el=this.getEl();if(el){try{if(el.hasClass(this.oldStage)){var children=el.child('.'+this.oldStage);if(children){children.removeClass(this.oldStage+"-blink");}
el.replaceClass(this.oldStage,newStage);}else{el.addClass(newStage);}}catch(err){Zw.console('Exception in SendProgressBar.unsafeSetProgress! ',err);}}
this.oldStage=this.value;this.value=value;if(this.multiple&&this.error){this.updateBarErrors();}
this.fireEvent('valuechanged',this,value,this.oldStage);},updateBarErrors:function(){var value=this.value;Ext.each(this.errors,function(error){if(value>=error.value){var el=this.getStepEl(error.value);if(el){var white=String.format('stage{0}-multiple-white-error',error.value);var blue=String.format('stage{0}-multiple-blue-error',error.value);if(el.hasClass(white)){el.replaceClass(white,blue);}else{el.addClass(blue);}}}},this);},getStepEl:function(value){var el=this.getEl();if(el){el=el.child('.stage'+value);return el;}else{return null;}},setError:function(args){this.error=true;this.errors.push(args);var e=this.getEl();var multiple='';var stage=args.value;var cls='';if(this.multiple){if(this.value>=stage){multiple='-multiple-blue';}else{multiple='-multiple-white';}
if(e)
e.addClass(['error','multiple']);}else{if(e)
e.addClass('error');}
cls="stage"+stage+multiple+"-error";if(e){var ch=e.child(".stage.stage"+stage);if(ch){ch.addClass(cls);}}
this['stage'+stage+'error']=cls;this.setStatus(args.desc);if(!this.multiple){this.setValue(stage,'setError()');}
this.errorCode=args.code;this.fireEvent('error',this,args);},setStatus:function(text){this.text=text;this.syncStatus();},syncStatus:function(){var text=this.text;var s=this.status;if(s){if(s.getEl){var el=s.getEl();if(el){el.update(text);this.fireEvent('statusUpdate',text,s);if(this.error){el.addClass('error-status');}else{el.removeClass('error-status');}}else{if(s.on&&!this.listeningForStatusRender){this.listeningForStatusRender=true;s.on('render',this.syncStatus,this,{single:true});}}}else{s.update(text);this.fireEvent('statusUpdate',text,s);}}},setComplete:function(){if(!this.completed){this.completed=true;var el=this.getEl();if(el){el.addClass('done');}
this.doneCls='done';this.fireEvent('complete');return true;}},onDestroy:function(){delete this.status;delete this.contact;delete this.errors;delete this.plugins;Zw.controls.SendProgressBar.superclass.onDestroy.call(this);}});Ext.reg('Zw.controls.SendProgressBar',Zw.controls.SendProgressBar);

Zw.namespace('Zw.features.messages');Zw.features.messages.TextSuggestPlugin=Ext.extend(Zw.Plugin,{onInit:function(){var client=this.client;if(!client)return;client.getField().on('render',this.onClientRender,this,{single:true});if(!this.dictionary){if(!Zw.features.messages.TextSuggestPlugin.dictionary){var d=Zw.features.messages.TextSuggestPlugin.dictionary=new Zw.util.AlphabetTree();d.add("UR","You're",3,5);d.add("UR","Your",2,4);d.add("1","One",1,2);d.add("2","Too",1,2);d.add("2","To",1,1);d.add("4","For",1,2);d.add("911","Emergency",2,8);d.add("#-o","Doh!",0,2);d.add("$_$","Greedy",0,2);d.add("%-(","Confused",0,2);d.add("(((H)))","Big hugs",0,6);d.add("()","Football",0,1);d.add("(:|","Tired",0,2);d.add("(:-D ","Blabbermouth",0,3);d.add("*-*","Dazed",2,4);d.add("*-*","Dazed",0,2);d.add("**==","United States Flag",0,3);d.add(":-!","Foot in mouth",1,2);d.add(":-#","Braces",1,2);d.add(":-& ","Tongue-tied",1,2);d.add(":(","Sad",1,2);d.add(":(","Sad",0,1);d.add(":'(","Sad",1,2);d.add(":'-(","Crying",1,5);d.add(":'-(","Crying",1,3);d.add(":-(","Sad with nose",1,12);d.add(":-( )","Shocked",1,4);d.add(":)","Smile",2,4);d.add(":)","Smile",0,1);d.add(":'-)","Happy cry",1,3);d.add(":-)","Smile with nose",1,2);d.add(":-----)","Long nose liar",1,6);d.add(":-)(-:","Married",1,6);d.add(":-*","Kiss",1,3);d.add(":-*","Kiss",1,2);d.add(":*)","Drunk",1,4);d.add(":@","Oh my god!",1,8);d.add(":-@","Screaming",2,8);d.add(":-\\","Undecided",1,8);d.add(":^)","Shmrrr",1,5);d.add(":_ (","Crying",1,5);d.add(":-{ }","Talking",2,6);d.add(":-{(I like)","Borat",2,4);d.add(":-|","Indifferent",2,10);d.add(":-<","Cheated",1,6);d.add(":-<","Sad",1,2);d.add(":-<>","Surprised",2,8);d.add(":->","Grin",1,3);d.add(":-0","Yell",1,2);d.add(":-7","Sarcastic",1,2);d.add(":-B","Nerd",1,3);d.add(":D","Laughter",2,7);d.add(":D","Laughing",2,7);d.add(":-D","Laughter",1,2);d.add(":-E","Bucktooth ",1,2);d.add(":-I","Apathetic",1,2);d.add(":-J","Tongue in Cheek",1,2);d.add(":-O","Wow",1,2);d.add(":-o","Bored",1,2);d.add(":-o zz","Bored",2,4);d.add(":O)","Clown",2,4);d.add(":P","Sticking Tongue Out",2,11);d.add(":-P","Lick",1,3);d.add(":-Q","Smoking",1,6);d.add(":-S","Confused",2,7);d.add(":-t","Angry",2,4);d.add(":-X","Not saying a word",9,13);d.add(";)","Wink",2,3);d.add(";)",";)",0,1);d.add(";)","Wink",2,3);d.add(";-)","Wink with nose",1,2);d.add("@","at",1,1);d.add("-@--@-","Glasses",2,6);d.add("@-}---","Rose",1,3);d.add("@>--;--","Rose with thorn",0,6);d.add("\\%%%/","Queen",0,4);d.add("\\&&&/","Princess",0,4);d.add("\\&&&/","Princess",2,7);d.add("\\^/","Raise the Roof (whoo-whoo)",2,13);d.add("\\D/ ","Put Your Hands Up For Detroit",7,20);d.add("\\o/","Worshipping",2,10);d.add("\\VVV/","King",2,3);d.add("^_^","Overjoyed",2,8);d.add("`:-)","Eyebrow raise",4,10);d.add("{ }","Hug",1,3);d.add("|-O","Yawning",2,6);d.add("~,~","Napping",2,6);d.add("~:0","Baby",2,3);d.add("</3","Broken Heart",2,9);d.add("<:3 )~","Mouse",2,4);d.add("<3","Heart",2,4);d.add("<J>","Joking",1,5);d.add("<l:0","Partying",2,7);d.add("=(","Sad",1,2);d.add("=)","Happy",2,4);d.add("=/","Mad",1,2);d.add("=^.^=","Kitty cat",2,8);d.add("=8)","Pig",1,2);d.add("=P","Hungry",2,5);d.add(">-)","Evil",2,3);d.add(">:-@!","Angry and swearing",2,12);d.add("2DAY","Today",1,4);d.add("2MORO","Tomorrow",2,7);d.add("2NITE","Tonight",2,6);d.add("A3","Anytime, anywhere, anyhow",3,11);d.add("AFAIK","As far as I know",3,12);d.add("ASAP ","As soon as possible",1,13);d.add("ATB","All the best",2,10);d.add("ATM","At the moment",3,12);d.add("B","Be",0,1);d.add("B-)","Sunglasses",2,7);d.add("B-)","Cool",2,3);d.add("B4","Before",2,5);d.add("BBL","Be back later",3,9);d.add("BBS","Be back soon",3,12);d.add("BCNU","Be seeing you",4,12);d.add("BFN","Bye for now",1,9);d.add("BHL","Be home late",3,10);d.add("BIL","Boss is listening",2,15);d.add("BO4**==","Barack Obama for President",3,14);d.add("BRB","Be right back",3,11);d.add("BRT","Be right there",3,12);d.add("BTDT","Been there done that",2,18);d.add("BTW","By the way",3,8);d.add("C","See",1,2);d.add("C=:-)","Chef",2,3);d.add("CU","See you",1,6);d.add("CUB L8R","Call you back later",2,16);d.add("CUL8R ","CUL8R",1,4);d.add("CUL8R ","See you later",2,10);d.add("CW2CU","Can't wait to see you",2,19);d.add("CYR","Call your",2,7);d.add("CYR BOS","Call your boss",2,12);d.add("CYR BRO","Call your brother",2,12);d.add("CYR MA","Call your mother",2,13);d.add("CYR PA","Call your father",3,13);d.add("CYR SIS","Call your sister",2,12);d.add("doN","Doing",2,4);d.add("F2T","Free to talk",2,10);d.add("FC","Fingers crossed",2,12);d.add("FWD","Forward",2,6);d.add("FYI","For your information",2,15);d.add("GAL","Get a life",2,9);d.add("GUDLUK","Good luck",2,7);d.add("H8","Hate",1,3);d.add("IC","I see",2,4);d.add("ICQ","I seek you",3,8);d.add("ILU","I love you",2,8);d.add("IMO","In my opinion",3,12);d.add("IOW","In other words",3,11);d.add("IRL","In real life",3,9);d.add("JM4**==","John McCain for President",3,14);d.add("L8","Late",1,3);d.add("L8R","Later",1,4);d.add("LOL","Laughing out loud",2,10);d.add("LOL","Funny",2,4);d.add("LOL","LOL",1,2);d.add("LTNS","Long time no see",2,13);d.add("LUV","Love",1,3);d.add("lyN","lying",1,4);d.add("MOB ","Mobile",2,4);d.add("MSG","Message",2,5);d.add("MTE","My thoughts exactly",3,15);d.add("N2","Into",1,3);d.add("NE","Any",1,2);d.add("NE1","Anyone",1,4);d.add("NO1","No-one",1,5);d.add("NRN","No reply necessary",3,13);d.add("O.o","Huh",1,3);d.add("O:-) ","Angel",2,4);d.add("O-\\-<]:","Skateboarder",2,9);d.add("OIC","Oh, I see",2,8);d.add("PCME","Please call me",2,13);d.add("PLZ","Please",2,5);d.add("PPL ","People",2,5);d.add("PRW","Parents are watching",2,16);d.add("QL","Cool",1,3);d.add("R ","Are",1,2);d.add("RNGL8","Running late",2,10);d.add("ROTFL","Rolling on the floor laughing",2,22);d.add("ROR","Raughing out roud",2,14);d.add("RUOK","Are you okay?",2,9);d.add("shopN","Shopping",2,6);d.add("SPK","Speak",1,4);d.add("SUM1","Someone",2,6);d.add("SUP","What's up?",2,8);d.add("THK","Thanks",2,5);d.add("THNQ ","Thank you",2,7);d.add("TLK","Talk",1,3);d.add("TTYL","Talk to you later",2,13);d.add("TXT","Text",1,3);d.add("U","You",1,2);d.add("U R GRT","You are great",2,11);d.add("U2","You too",1,6);d.add("W ","With",1,3);d.add("W/O","Without",1,6);d.add("W8","Wait",1,3);d.add("W84M","Wait for me",2,9);d.add("W8N","Waiting",1,5);d.add("WAN2","Want to?",2,6);d.add("WKND","Weekend",2,6);d.add("WTG","Way to go",1,7);d.add("XLNT","Excellent",1,7);d.add("XOXO","Hugs and kisses",1,14);d.add("X-p","Joking",1,4);d.add(":-!",":-! Foot in mouth",0,2);d.add(":-#",":-# Braces",0,2);d.add(":-& ",":-& Tongue-tied",0,3);d.add(":(",":( Sad",0,1);d.add(":'(",":'( Sad",0,2);d.add(":'-(",":'-( Crying",0,3);d.add(":-(",":-( Sad with nose",0,2);d.add(":-( )",":-( ) Shocked",0,4);d.add(":)",":) Smile",0,1);d.add(":'-)",":'-) Happy cry",0,3);d.add(":-)",":-) Smile with nose",0,2);d.add(":-----)",":-----) Long nose liar",0,6);d.add(":-)(-:",":-)(-: Married",0,5);d.add(":-*",":-* Kiss",0,2);}
this.dictionary=Zw.features.messages.TextSuggestPlugin.dictionary;}},onClientRender:function(){var client=this.client;if(client){this.field=client.getField();this.setEnabled(true);}},setEnabled:function(en){if(this.enabled!=en){var client=this.client;if(client){if(en){client.on('textchange',this.tick,this);}else{client.un('textchange',this.tick,this);}}}},selectPrev:function(){var idx=this.dv.getSelectedIndexes()[0];if(idx-1>=0)
this.dv.select(idx-1);},selectNext:function(){var idx=this.dv.getSelectedIndexes()[0];if(idx+1<this.dv.store.getCount())
this.dv.select(idx+1);},doSubstitution:function(record){record=record.json;for(var i=record.start;i<=record.end;i++){var d=this.tokens[i];if(d)
d.value=null;}
var backup=this.tokens[record.start];this.tokens[record.start]=record;if(backup){if(backup.newLine)
this.tokens[record.start].newLine=true;}
this.field.setValue(Zw.util.detokenize(this.tokens));var client=this.client;if(client){client.fireTextChange();}
this.stop();},onSuggestionClick:function(dv,index,node){this.doSubstitution(dv.getRecord(node));},_fixWidth:function(){this.panel.getEl().setStyle("width","auto");this.panel.getEl().setStyle("width",this.panel.getEl().child("table",true).offsetWidth+this.panel.getFrameWidth()+"px");this.panel.addClass("dummy");this.panel.removeClass("dummy");},start:function(){if(!this.listening){this.listening=true;this.panel.show();this.panel.setPagePosition(this.x,this.y);this.dv.on('click',this.onSuggestionClick,this);this.keyNav.enable();Ext.getDoc().on('click',this.handleClick,this);}
this._fixWidth();},stop:function(){this.listening=false;if(!this.destroyed){if(this.panel){this.panel.hide();}
if(this.dv){this.dv.un('click',this.onSuggestionClick,this);}
if(this.keyNav)
this.keyNav.disable();Ext.getDoc().un('click',this.handleClick,this);}},handleClick:function(e){if(!e.getTarget(".zw-text-suggest")){this.stop();}},getPanel:function(){if(!this.panel){var source=Zw.features.messages.TextSuggestPlugin;if(!source.panel){source.dv=new Ext.DataView({tpl:new Ext.XTemplate('<table cellpadding=0 cellspacing=0 unselectable="on" class=""><tpl for="."><tr class="clickable x-unselectable suggestion"><td class="rl" style=""><i></i></td><td nowrap class="rc">{value}</td><td class="rr"><i/></td><td class="sl"></td><td class="sc" nowrap>{source}</td><td class="sr"></td></tr></tpl></table>'),itemSelector:'tr.suggestion',singleSelect:true,trackOver:true,overClass:'x-view-over',store:new Ext.data.Store({reader:new Ext.data.JsonReader({},Ext.data.Record.create([{name:'value'},{name:'start'},{name:'end'},{name:'source'}]))})});source.panel=new Ext.Panel({hidden:true,frame:true,baseCls:'zw-text-suggest',floating:{shadow:false,shim:true,useDisplay:true,constrain:false},items:source.dv,renderTo:Ext.getBody()});}
this.panel=source.panel;this.panel.dv=this.dv=source.dv;}
return this.panel;},isDisabledBySettings:function(){if(this.setting){if(this.setting.enabled){return false;}else{return true;}}
return false;},tick:function(field,text,tokens){if(!tokens)
return;if(this.isDisabledBySettings())
return;if(tokens&&tokens[0]){if(!tokens[0].w){if(!this.metrics){this.addPlugin(this.metrics=new Zw.util.FontMetricsPlugin({el:this.field.el}));}
var w=this.field.el.getWidth(true);if(Ext.isIE){this.metrics.augmentTokens(tokens,w+2);}else{this.metrics.augmentTokens(tokens,w);}}}
var client=this.client;if(!client||client.hidden)
return;var lastNew=tokens.endPos;if(lastNew>=tokens.length)
return;var max=1;var search=tokens.slice(tokens.startPos-1,tokens.endPos+1);var results=this.dictionary.search(search,tokens.startPos-1);if(results.length>0){this.tokens=tokens;var panel=this.getPanel();var dv=panel.dv;dv.store.loadData(results);if(dv.getSelectionCount()==0)
dv.select(0);var token=tokens[lastNew];var xy=field.getPosition();this.x=token.x+xy[0];this.y=token.y+xy[1]+20;if(!panel.visible){if(!this.keyNav){this.keyNav=new Ext.KeyNav(field.el,{'enter':this.__onEnter,'down':this.__onDown,'up':this.__onUp,'esc':this.__onEsc,'tab':this.__onTab,disabled:true,scope:this});}
this.start();}}else{if(this.listening){this.stop();}}},__onEnter:function(e){if(e.ctrlKey)
this.stop();else
this.doSubstitution(this.dv.getSelectedRecords()[0]);},__onDown:function(e){if(e.shiftKey)
return true;this.selectNext();},__onUp:function(e){this.selectPrev();},__onEsc:function(e){this.stop();},__onTab:function(e){this.doSubstitution(this.dv.getSelectedRecords()[0]);},onDestroy:function(){var client=this.client;if(client){client.un('textchange',this.tick,this);}
this.stop();delete this.dictionary;delete this.field;delete this.panel;delete this.keyNav;delete this.metrics;}});

Zw.namespace('Zw.features.messages');Zw.features.messages.AreaCodePanel=Ext.extend(Ext.Panel,{baseCls:'zw-areacode',floating:{shadow:false,shim:true,useDisplay:false,constrain:false},hidden:true,frame:false,descriptionMatched:Zw.localize('generic.alert.areaCode.text1'),descriptionUnknown:Zw.localize('generic.alert.areaCode.text2'),descriptionEmpty:Zw.localize('generic.alert.areaCode.text3'),log:Ext.emptyFn,pinTpl:new Ext.XTemplate('<tpl for="."><div class="pin" style="position: absolute; visibility:hidden; left: {x}px; top: {y}px;"></div></tpl>'),tpl:new Ext.XTemplate('<tpl for=".">','<tpl if="xcount == 1">','{state}','</tpl>','<tpl if="xindex &lt; 4 &amp; xcount != 1">','<span class="entry">{[this.encode(values.code)]}{[ xindex < 3 ? xindex == xcount ? "" : ", " : ""]}</span>','</tpl>','</tpl>',{encode:function(code){var s=(''+code);var s1=s.substring(0,1);var s2=s.substring(0,2);if(s1==this.filter){return'<span cls="">'+s1+'</span>'+s.substring(1);}else if(s2==this.filter){return'<span cls="">'+s2+'</span>'+s.substring(2);}else if(s==this.filter){return'<span cls="">'+s+'</span>';}
return code;}}),onRender:function(el,pos){Zw.features.messages.AreaCodePanel.superclass.onRender.call(this,el,pos);var body=this.getEl().child('.zw-areacode-body');this.number=body.createChild({tag:'span',cls:'number',html:'9'});this.description=body.createChild({tag:'span',cls:'description',html:this.descriptionMatched});this.matches=body.createChild({tag:'span',cls:'matches'});this.map=body.createChild({tag:'div',cls:'map'});this.dv=new Ext.DataView({itemSelector:'.entry',applyTo:this.matches,tpl:this.tpl});this.map.dv=new Ext.DataView({itemSelector:'.pin',applyTo:this.map,tpl:this.pinTpl});},setFilter:function(filter){filter=filter.substring(0,3);if(this.filter==filter)
return;this.filter=filter;var existingItems=this.map.select('.pin',true);if(existingItems){existingItems.stopFx();}
this.tpl.filter=filter;this.store.filter('code',filter);var count=this.store.getCount();this.number.update(count);if(count==0){this.description.removeClass('x-hidden');this.description.update(this.descriptionUnknown);}else if(count==1){this.description.addClass('x-hidden');this.number.addClass('x-hidden');}else if(filter==''){this.number.addClass('x-hidden');this.matches.addClass('x-hidden');this.description.removeClass('x-hidden');this.description.update(this.descriptionEmpty);}else{this.description.removeClass('x-hidden');this.description.update(this.descriptionMatched);this.number.removeClass('x-hidden');this.matches.removeClass('x-hidden');}
if(filter!=''){var x=this.map.select('.pin');x.syncFx();x.each(function(el,th,index){el=Ext.get(el);var y=el.getY();el.show();el.setY(10);el.shift({y:y,duration:.5,callback:function(obj,id,q){obj.setStyle('background-position','-79px -1px');obj.setStyle.defer(100,obj,['background-position','-87px -1px']);obj.setStyle.defer(100,obj,['background-position','-79px -1px']);obj.setStyle.defer(100,obj,['background-position','-71px -1px']);}});});}},setNumbers:function(numbers){this.store=numbers;this.dv.setStore(numbers);this.map.dv.setStore(numbers);}});Zw.features.messages.AreaCodeAnalysisPlugin=Ext.extend(Zw.Plugin,{minWidth:100,numbers:new Ext.data.Store({data:Zw.data.AreaCode.codes,reader:new Ext.data.ArrayReader({},Zw.data.AreaCode)}),hidePopup:function(){this.removeHideHandlers();if(this.popup){this.popup.hide();}},onInit:function(){this.task=new Ext.util.DelayedTask(this.doPopup,this);var client=this.client;if(client){client.enableKeyEvents=true;client.on('keydown',this.onKeyDown,this,{buffer:true});client.on('focus',this.onFocus,this,{buffer:true});}},maybeHidePopup:function(e){if(this.client&&this.popup&&e&&!e.getTarget('input')){this.hidePopup();}},addHideHandlers:function(){if(!this.listening){this.log('ADDING HANDLERS');this.listening=true;var client=this.client;if(client){client.on('blur',this.hidePopup,this);client.on('destroy',this.hidePopup,this);}
Ext.getDoc().on('click',this.maybeHidePopup,this);}},removeHideHandlers:function(){if(this.listening){this.log('removing handlers');delete this.listening;var client=this.client;if(client){client.un('blur',this.hidePopup,this);client.un('destroy',this.hidePopup,this);}
Ext.getDoc().un('click',this.maybeHidePopup,this);}},doPopup:function(){var client=this.client;if(!client){return;}
var value=client.getRawValue();var cleanValue='';for(var i=0;i<value.length;i+=1){var c=value.charAt(i);if(isFinite(parseInt(c))){cleanValue+=c;}}
var text=cleanValue.substring(0,3);if(value.indexOf('+')==0){this.hidePopup();return;}else if((text=='')||(!isFinite(text.charAt(0)))){this.hidePopup();return;}else if((text!='')&&(!isFinite(text.charAt(0)))){this.hidePopup();return;}else if(value.length>10){this.hidePopup();return;}
if(!this.popup){if(!Zw.features.messages.AreaCodeAnalysisPlugin.popup){Zw.features.messages.AreaCodeAnalysisPlugin.popup=new Zw.features.messages.AreaCodePanel({hideMode:'offsets'});}
this.popup=Zw.features.messages.AreaCodeAnalysisPlugin.popup;if(!this.popup.rendered)
this.popup.render(Ext.getBody());this.popup.setNumbers(this.numbers);}
if(!this.popup.hidden){this.___show.defer(300,this,[text]);}else{this.___show.defer(0,this,[text]);}},___show:function(text){this.addHideHandlers();var client=this.client;if(!client)return;if(!client.hasFocus)
return;if(!client.getValue().length)
return;var a=this.getPopupPositioning();if(a){if(this.popup){this.popup.show();this.popup.setPosition(a.x,a.y);this.popup.getEl().setWidth(a.width);this.popup.setFilter(text);}}},getPopupPositioning:function(){var client=this.client;if(!client)return;var width,xy;var clientEl=client.getEl();var popupEl=this.popup.getEl();if(this.initialConfig&&this.initialConfig.position=='el'){width=clientEl.getWidth();}else{width=clientEl.up('div').getComputedWidth();}
xy=popupEl.getAlignToXY(clientEl,'bl-tl',[-2,0]);return{width:width,x:xy[0],y:xy[1]};},onKeyDown:function(sender,e){var isTab=(e.getKey()==Ext.EventObject.TAB);var isEnter=(e.getKey()==Ext.EventObject.ENTER);var isEsc=(e.getKey()==e.ESC);if(isEsc||isEnter){this.hidePopup();}else{if((!isTab)&&(!isEnter)){this.task.delay.createDelegate(this.task,[100])();}}},onFocus:function(sender,hack){if(hack!=='hack'){this.task.delay.createDelegate(this.task,[100])();}},onDestroy:function(){this.hidePopup();delete this.popup;this.removeHideHandlers();var client=this.client;if(client){client.un('keydown',this.onKeyDown,this);client.un('focus',this.onFocus,this);}}});

Zw.namespace('Zw.features.messages');Zw.features.messages.SendMessageTextBox=Ext.extend(Ext.Panel,{cls:'zw-textarea',layout:'anchor',frame:true,border:false,disableKeyFilter:true,title:'',onTextChanged:function(e){var value=this.getField().getValue();if(this.lastValue==value)
return;this.lastValue=value;var newTokens=Zw.util.tokenizeString(value);Zw.util.markDiffs(this.oldTokens,newTokens);this.fireEvent('TextChange',this,value,newTokens);this.oldTokens=newTokens;},onTextareaResize:function(){var value=this.getField().getValue();if(!Zw.preventFontMetrics)
this.fireEvent('TextChange',this,value,Zw.util.tokenizeString(value));},getText:function(){return this.getField().getValue();},setText:function(body){this.getField().setRawValue(body);},getFromName:Ext.emptyFn,getFromAddress:function(){return 0;},focus_fn:function(selectAll){if(this.destroyed)
return;var field=this.getField();field.focus(selectAll);Zw.util.setCaretTo(field.getEl().dom,field.getValue().length);},focus:function(selectAll,delay){if(Ext.type(delay)=='number'){this.focus_fn.defer(delay,this,[selectAll]);}else if(delay){this.focus_fn.defer(100,this,[selectAll]);}else{this.focus_fn.call(this,selectAll);}},getField:function(){return this.getComponent(0);},fireTextChange:function(){this.onTextChanged();},initComponent:function(){this.items=[{xtype:'textarea',anchor:'-17',grow:true,code:'body',enableKeyEvents:true,value:this.text,tabIndex:2+this.tabRoot}];this.addEvents({'TextChange':true,'Submit':true,'keypress':true});Zw.features.messages.SendMessageTextBox.superclass.initComponent.call(this);},onKeyPress:function(sender,e){this.fireEvent('keypress',this,e);},_onKeyDown:function(sender,e){var k=e.getKey();if(!e.isNavKeyPress()){this.task.delay(10);}},onResize:function(){Zw.features.messages.SendMessageTextBox.superclass.onResize.apply(this,arguments);this.delayAutosize();},doAutoSize:function(){if(Ext.isAir){this.textarea.growMin=this.getEl().getHeight()-30;}else{this.textarea.growMin=this.getEl().getHeight()-(Ext.isSafari?13:10);}
this.textarea.autoSizeDelayed();},delayAutosize:function(){if(!this.autoSizeTask)
this.autoSizeTask=new Ext.util.DelayedTask(this.doAutoSize,this);this.autoSizeTask.delay(10);},onTextareaRender:function(){if(Zw.capabilities.PREVENT_SPELL_CHECK&&this.textarea){Zw.util.preventSpellcheck(this.textarea.getEl());}
this.delayAutosize();},onRender:function(el,p){Zw.features.messages.SendMessageTextBox.superclass.onRender.call(this,el,p);var textarea=this.textarea=this.getField();this.task=new Ext.util.DelayedTask(this.onTextChanged,this);textarea.on('keydown',this._onKeyDown,this);textarea.on('keypress',this.onKeyPress,this);textarea.autoSizeDelayed=this.textarea.autoSize;Zw.console("swapping functions");textarea.autoSize=this.delayAutosize.createDelegate(this);if(!Ext.isSafari){this.getEl().child('.x-panel-body').setStyle('padding','0px 3px');}
textarea.on('render',this.onTextareaRender,this);textarea.on('resize',this.onTextareaResize,this);},beforeDestroy:function(){this.destroyed=true;Zw.features.messages.SendMessageTextBox.superclass.beforeDestroy.call(this);}});Ext.reg('Zw.features.messages.SendMessageTextBox',Zw.features.messages.SendMessageTextBox);

Zw.util.FontMetricsPlugin=Ext.extend(Zw.Plugin,{el:null,asciiStartIndex:32,asciiEndIndex:127,cacheCallbackProvider:Ext.emptyFn,alphabet:null,onInit:function(){},getAlphabetMetrics:function(){var coll=new Ext.util.MixedCollection();for(var i=this.asciiStartIndex;i<=this.asciiEndIndex;i++){var h=i.toString(16);if(h.length==1)
h="0"+h;h="%"+h;h=unescape(h);if(h==' ')
h='&nbsp;';var wh=Ext.util.TextMetrics.measure(this.el||Ext.getBody(),h);if(!this.height){this.height=wh.height;}
var width=wh.width;if(h=='&nbsp;'){h=' ';}
coll.add(h,width);}
return coll;},augmentTokens:function(tokens,width){var L=tokens.length;var numberOfLines=0;var previousX=0;var previousW=0;var S=L-1;for(var i=0;i<L;i++){var token=tokens[i];var text=token.value;if(i!=S)
token.w=this.getMeasurement(text+' ');else
token.w=this.getMeasurement(text);token.h=this.height
if(width){var x=previousX+previousW;if(token.newLine){x=0;numberOfLines++;}else if((x+token.w)>width){numberOfLines++;x=0;}
token.x=x;token.y=this.height*numberOfLines;previousX=token.x;previousW=token.w;}}},getMeasurement:function(text){var totalWidth=0;if(!this.alphabet)this.alphabet=this.getAlphabetMetrics();var L=text.length;for(var i=0;i<L;i++){var a=this.alphabet.key(text.substring(i,i+1));totalWidth+=a;}
return totalWidth;},onDestroy:function(){delete this.alphabet;}});

Zw.namespace('Zw.controls');Zw.controls.StylizedTextField=Ext.extend(Ext.form.TextField,{enableKeyEvents:true,keyDelay:10,onDelay:function(e){var wasDeleteKey=e&&(e.getKey()===e.DELETE);if(this.getValue().length||wasDeleteKey){this.emptyTextEl.hide();}else{this.emptyTextEl.show();}},getDelayedTask:function(){if(!this.delayedTask)
this.delayedTask=new Ext.util.DelayedTask();return this.delayedTask;},onKeyDown:function(e){Zw.controls.StylizedTextField.superclass.onKeyDown.call(this,e);this.getDelayedTask().delay(this.keyDelay,this.onDelay,this,[e]);},initComponent:function(){Zw.controls.StylizedTextField.superclass.initComponent.call(this);},onRender:function(ct,pos){Zw.controls.StylizedTextField.superclass.onRender.call(this,ct,pos);if(!this.emptyTextOffset){var p=this.findParentByType('form');if(p){this.emptyTextOffset=p.labelWidth+10;}}
this.emptyTextEl=this.el.insertSibling({tag:'div',style:'left: '+this.emptyTextOffset+'px',cls:'zw-stylized-emptytext x-form-empty-field '+(Ext.isEmpty(this.value)?'':'x-hidden'),html:this.emptyText},'after');this.emptyTextEl.on('click',this._onClick,this);this.el.on('blur',this.onDelay,this);},_onClick:function(){this.focus();},determineEmptyTextVisibilityState:function(){var valueLength=this.getValue();var isShown=this.isShown;Zw.util.log('determining state',isShown,valueLength);if(valueLength==0){if(!isShown){this.emptyTextEl.show();this.isShown=true;}}else{if(isShown){this.emptyTextEl.hide();this.isShown=false;}}},applyEmptyText:Ext.emptyFn,preFocus:function(){if(this.selectOnFocus){this.el.dom.select();}}});Ext.reg('Zw.controls.StylizedTextField',Zw.controls.StylizedTextField);

Zw.controls.AjaxProcessBase={startProcessing:function(){this.setProcessing(true);},stopProcessing:function(){this.setProcessing(false);},setProcessing:function(value){this.processing=value;if(this.processing){this.onStartProcessing();}else{this.onStopProcessing();}},enableField:function(field){this.getField(field).enable();},disableField:function(field){this.getField(field).disable();},onStartProcessing:function(){this.fields.each(this.disableField,this);this.clickables.each(this.disableField,this);if(this.maskMsg&&this.body){if(!this._maskTask){this._maskTask=new Ext.util.DelayedTask(this.body.mask,this.body,['&nbsp;&nbsp;&nbsp;'+this.maskMsg]);}
this._maskTask.cancel();this._maskTask.delay(this.maskDelay||500);}},onStopProcessing:function(){this.fields.each(this.enableField,this);this.clickables.each(this.enableField,this);if(this.body){if(this._maskTask){this._maskTask.cancel();}
if(this.body.isMasked()){this.body.unmask();}}},setValue:function(field,value){this.getField(field).setValue(value);},getValue:function(field){return this.getField(field).getValue();},clearValue:function(field){this.setValue(field,'');},_clearInvalid:function(field){this.getField(field).clearInvalid();},clearInvalid:function(){this.fields.each(this._clearInvalid,this);},getField:function(code){if(Ext.type(code)!='string')
return code;var prop="_"+code;if(!this[prop]){this[prop]=this.find('code',code)[0];}
return this[prop];},registerSubmit:function(field){field=this.getField(field);field.handler=this.submit;field.scope=this;this.clickables.add(field);},registerReset:function(field){field=this.getField(field);field.handler=this.reset;field.scope=this;this.clickables.add(field);},registerField:function(field,submitOnEnter){field=this.getField(field);this.fields.add(field);if(submitOnEnter)
field.on('specialkey',this.onSpecialKey,this);},registerClickable:function(field){this.clickables.add(this.getField(field));},onSpecialKey:function(sender,e){if(e.getKey()==Ext.EventObject.ENTER){this.submit();}},setupFields:function(){this.fields=new Ext.util.MixedCollection();this.clickables=new Ext.util.MixedCollection();if(this.autoWireup){Ext.each(this.find('autoWireup',true),function(item){if(!item.code){Zw.console('UNINTENDED AUTOWIREUP? code NOT DEFINED. item:',item);return;}
if(item.wireupType&&item.wireupType=='submit')
this.registerSubmit(item.code);else if(item.wireupType&&item.wireupType=='reset')
this.registerReset(item.code);else
this.registerField(item.code);},this);}},validate:function(){var v=true;this.fields.each(function(field){v=v&&field.validate();},this);if(v){v=v&&this.onValidate();}
Zw.console('Validation result: ',v);return v;},onValidate:Zw.util.returnTrue,onComplete:function(){this.stopProcessing();},onFailure:Ext.emptyFn,onSuccess:Ext.emptyFn,onReset:Ext.emptyFn,parseSuccess:function(sender,args,res){this.stopProcessing();Zw.console('parseSuccess: ',arguments);this.onComplete(sender,args,res);if(!args||!args.success){Zw.console('parsing success: failure');this.onFailure.call(this.scope||this,sender,args,res);}else{Zw.console('parsing success: success');this.onSuccess.call(this.scope||this,sender,args,res);if(this.closeOnSuccess)
this.close();}},parseFailure:function(sender,args,res){this.stopProcessing();Zw.console('parseFailure: ',arguments);this.onComplete(sender,args,res);this.onFailure.call(this.scope||this,sender,args,res);},reset:function(){this.fields.each(this.clearValue,this);this.onReset();},submit:function(){if(this.validate()!=false){if(this.onSubmit(Ext.apply(this.getSubmitArgs(),this.extraSubmitArgs))){this.startProcessing();}}},onSubmit:function(args){if(this.ajax){Ext.applyIf(args,{success:this.parseSuccess,failure:this.parseFailure,scope:this});var w=this.ajax.call(this.ajaxScope||Zw.Application.Net,args);if(w){if(w.invoke){w.invoke();}}}else{Zw.console('NO AJAX DEFINED for this AjaxProcess form');}
return true;},getSubmitArgs:function(){var args=this.args()||{};return args;},args:Ext.emptyFn};Zw.controls.AjaxProcessPanel=Ext.extend(Ext.Panel,{initComponent:function(){if(this.getItems)
this.items=this.getItems();Zw.controls.AjaxProcessPanel.superclass.initComponent.call(this);this.setupFields();},onDestroy:function(){delete this.field;Ext.destroy(this.fields);delete this.fields;Ext.destroy(this.clickables);delete this.clickables;Zw.controls.AjaxProcessPanel.superclass.onDestroy.call(this);}});Ext.applyIf(Zw.controls.AjaxProcessPanel.prototype,Zw.controls.AjaxProcessBase);

Zw.controls.AjaxProcessWindow=Ext.extend(Zw.controls.Window,{getStatusBar:function(){return this.getField('statusbar')},initComponent:function(){this.bbar=new Zw.controls.StatusBar({statusAlign:"left",defaultText:'',defaultIconCls:'default-icon',text:'',code:'statusbar',iconCls:'ready-icon'});Zw.controls.AjaxProcessWindow.superclass.initComponent.call(this);this.setupFields();}});Ext.applyIf(Zw.controls.AjaxProcessWindow.prototype,Zw.controls.AjaxProcessBase);

Zw.namespace('Zw.features.login');Zw.features.login.LoginFeature=Ext.extend(Zw.Feature,{m_extraWindowArgs:{closable:Zw.capabilities.ALLOW_GUEST},settingletKey:'login',m_package:'login.all',onInit:function(){this.context.on('login',this.onLogin,this);this.context.Account.on('userData',this.onUserDetails,this);this.setSettinglet({pkg:'login.settings',tab:Zw.localize('generic.tab.account'),settinglet:['Zw.features.login.ChangePasswordSettinglet','Zw.features.login.CancelAccountSettinglet']});},onStart:Ext.emptyFn,onUserDetails:function(){var isGuest=this.context.Account.isGuest(true);if(!isGuest){if(this.window){this.window.close();this.window=null;}}
var forbid=(!Zw.capabilities.ALLOW_GUEST&&isGuest);Ext.apply(this.m_extraWindowArgs,{closable:!forbid});Zw.console('LoginFeature - User details updated',this.m_extraWindowArgs);if(isGuest&&forbid)
this.onLogin();},onLogin:function(){if(Zw.Application.isActiveContext(this.context)){Zw.Packages.get(this.m_package,this.onLoginPackagesComplete,this);}},onLoginPackagesComplete:function(){this.doLogin();},getWindowArgs:function(){return({xtype:'Zw.features.login.LoginWindow',scope:this,ajax:Zw.Application.Net.login,onToolbarClick:this.login_onToolbarClick,onSuccess:this.login_onSuccess,onFailure:this.login_onFailure,onSubmit:this.login_onSubmit.createDelegate(this)});},login_onSuccess:function(sender,args){if(this.window)
this.window.close();Zw.Application.createContext({account:{session:args.response,validated:true},active:true});},login_onFailure:function(sender,args){if(args){var msg=args.response.desc||Zw.localize('generic.alert.loginFailed.text2');Ext.Msg.alert(Zw.localize('generic.alert.loginFailed.title'),msg);}
this.window.clearValue('pw');},login_onToolbarClick:function(sender){var whatDidYouForget=sender.code
if(whatDidYouForget=='forgotp'){this.doForgotPassword();}},login_onSubmit:function(args){var context=Zw.Application.findContextByMobileNumber(args.mobileNumber);if(context){Zw.util.log("that context is already loaded. Activating.");Zw.Application.setActiveContext(context,'login');return false;}else{return Zw.features.login.LoginWindow.superclass.onSubmit.call(this.window,args);}},login_deleteWindow:function(){delete this.window;},forgotMobileNumber_deleteWindow:function(){delete this.m_forgotMobileNumber;},forgotPassword_deleteWindow:function(){delete this.m_forgotPassword;},forgotPassword_onFailure:function(sender,args){Ext.Msg.alert(Zw.localize('generic.alert.passwordRequestFailed'),args.response.desc);},forgotPassword_onSuccess:function(sender,args){Ext.Msg.alert(Zw.localize('generic.alert.passwordRequest.title'),Zw.localize('generic.alert.passwordRequest.text2'));this.m_forgotPassword.close();},onEscapeAttempt:function(sender){if(this.context.Account.isGuest()&&!Zw.capabilities.ALLOW_GUEST){return false;}},doLogin:function(){if(this.destroyed)return;if(!this.window){var a=this.getWindowArgs();this.processWindowArgs(a);Zw.console("Creating window with these args",a);var w=Ext.ComponentMgr.create(a);this.processWindow(w);this.window=w;}
if(!this.destroyed)
this.window.show();},processWindow:function(w){if(!Zw.capabilities.ALLOW_GUEST)
w.on('beforeclose',this.onEscapeAttempt,this);w.on('destroy',this.login_deleteWindow,this);w.on('register',this.onRegister,this);if(this.context)
this.context.Desktop.registerWindow(w);},onRegister:function(){this.context.publish('/desktop/user/register');},processWindowArgs:function(args){if(this.m_extraWindowArgs){Ext.apply(args,this.m_extraWindowArgs);}
var isGuest=false;try{isGuest=this.context.Account.isGuest();}catch(err){}
Ext.apply(args,{allowRegister:isGuest});},getMobileNumber:function(){var value='';if(this.window){if(this.window.getField){var field=this.window.getField('mn');if(field){value=field.getValue();}}}
return value;},doForgotPassword:function(){if(!this.m_forgotPassword&&Zw.features.login.ForgotPasswordWindow){this.m_forgotPassword=this.context.Desktop.registerWindow(new Zw.features.login.ForgotPasswordWindow({scope:this,ajax:Zw.Application.Net.forgotPassword,mobileNumber:this.getMobileNumber(),onSuccess:this.forgotPassword_onSuccess,onFailure:this.forgotPassword_onFailure,extraSubmitArgs:{statusKey:(new UUID()).toString(),context:this.context}}));this.m_forgotPassword.on('destroy',this.forgotPassword_deleteWindow,this,{single:true});}
if(this.m_forgotPassword)
this.m_forgotPassword.show();},doForgotMobileNumber:function(){if(!this.m_forgotMobileNumber){this.m_forgotMobileNumber=this.context.Desktop.registerWindow(new Zw.features.login.ForgotMobileNumberWindow({scope:this,ajax:Zw.Application.Net.forgotMobileNumber,onSuccess:this.forgotMobileNumber_onSuccess,onFailure:this.forgotMobileNumber_onFailure,extraSubmitArgs:{statusKey:(new UUID()).toString(),context:this.context}}));this.m_forgotMobileNumber.on('destroy',this.forgotMobileNumber_deleteWindow,this,{single:true});}
this.m_forgotMobileNumber.show();},forgotMobileNumber_onSuccess:function(sender,args){Ext.Msg.alert(Zw.localize('generic.alert.passwordRequest.title'),Zw.localize('generic.alert.passwordRequest.text1'));this.m_forgotMobileNumber.close();},forgotMobileNumber_onFailure:function(sender,args){Ext.Msg.alert("Failure",args.response);},onDestroy:function(){var window=this.window;if(window){window.close();Ext.destroy(this.window);delete this.window;}
this.context.un('login',this.onLogin,this);this.context.Account.un('userData',this.onUserDetails,this);}});Zw.features.Factory.register('Zw.features.login.LoginFeature');

Zw.namespace('Zw.features.login');Zw.features.login.ChangePasswordFeature=Ext.extend(Zw.Feature,{onStart:function(){Zw.Application.on('ChangePassword',this.onChangePassword,this);},onChangePassword:function(){if(Zw.Application.isActiveContext(this.context)){this.doChangePassword();}},doChangePassword:function(){if(!this.window){this.window=new Zw.features.login.ChangePasswordWindow({scope:this,onSubmit:function(args){Zw.Application.Net.changePassword({context:this.context,currentPassword:args.currentPassword,password:args.password,scope:this,failure:function(){alert(Zw.localize('generic.alert.subcomponentFailed.title')+' '+Zw.localize('generic.alert.subcomponentFailed.text'))},success:function(sender,args){var success=args.success;if(this.window)
this.window.stopProcessing();if(!success){Ext.Msg.alert(Zw.localize('generic.alert.changePassword.title'),Zw.localize('generic.alert.changePassword.text4'));}else{if(this.window)
this.window.close();Ext.Msg.alert(Zw.localize('window.title.done'),Zw.localize('generic.alert.passwordChanged'));}}});return true;}});this.context.Desktop.registerWindow(this.window);}
this.window.on('destroy',function(){delete this.window;},this);this.window.show();},onGroupClick:function(sender,e){if(e.name==Zw.localize('generic.btn.changePassword')){this.doChangePassword();}}});Zw.features.Factory.register(Zw.features.login.ChangePasswordFeature);

Zw.namespace("Zw.features.registration");Zw.features.registration.RegistrationFeature=Ext.extend(Zw.Feature,{packages:['wizard.all','registration.all'],onStart:function(){this.context.subscribe('/desktop/user/register',this.onRegistrationRequest,this);},onDestroy:function(){this.context.unsubscribe('/desktop/user/register',this.onRegistrationRequest,this);},onRegistrationRequest:function(){Zw.Packages.get(this.packages,this.onPackagesReady,this);},onPackagesReady:function(){if(!this.w){this.w=this.context.Desktop.registerWindow(this.createWindow());this.w.on('destroy',this.onWindowDestroy,this);}
this.w.show();},onWindowDestroy:function(){delete this.w;},createWindow:function(){return new Zw.features.registration.RegistrationWindow({context:this.context,plugins:[this.createWizardController()]});},createWizardController:function(){return new Zw.features.registration.ZipwhipRegistrationWizardControllerPlugin({context:this.context,modal:!Zw.capabilities.ALLOW_GUEST});}});Zw.features.Factory.register('Zw.features.registration.RegistrationFeature');

Zw.namespace('Zw.features.app');Zw.features.app.ErrorReportingFeature=Ext.extend(Zw.Feature,{onInit:function(){this.context.subscribe('/app/error',this.onError,this);},onError:function(ex){try{var context=this.context;if((!ex)||(!context)){return;}
var data=null;var name=null;var err=null;try{data=ex.data;}catch(err){}
try{name=ex.name;}catch(err){}
try{err=err=err.name+': '+err.message;}catch(err){}
Zw.console("ERROR",ex);Zw.Application.Net.reportError({session:context.Account.getSessionKey(),err:err,name:name,data:data});}catch(err){Zw.console('Unable to transmit error report : '+err);throw err;}}});Zw.features.Factory.register(Zw.features.app.ErrorReportingFeature);

Zw.namespace('Zw.features.app');Zw.features.app.ErrorNotifyingFeature=Ext.extend(Zw.Feature,{showing:false,errorWindow:null,onInit:function(){this.context.subscribe('/desktop/error/show',this.onErrorShow,this);},onWindowClose:function(sender){this.context.Desktop.unregisterWindow(sender);},onClose:function(){this.showing=false;},closeWindow:function(){this.showing=false;this.errorWindow.close();},getWindow:function(args){if(this.showing){return;}
var okButton=new Zw.controls.ActionButton({cls:'zw-action-button ok_button',code:'close',text:Zw.localize('generic.btn.ok')});var errorWindow=new Zw.controls.Window({title:args.title,cls:'error_notify',minimizable:false,maximizable:false,preventStatusBar:true,footer:false,resizable:false,width:args.width||350,shadow:Ext.util.Format.defaultValue(args.shadow,true),items:[{xtype:'div',cls:'error_notify-icon'},{xtype:'div',cls:'msg',html:args.msg},{xtype:'div',cls:'ok',items:okButton}]});okButton.setHandler(this.closeWindow,this);this.errorWindow=errorWindow;this.errorWindow.on('close',this.onClose,this);this.showing=true;return errorWindow;},onErrorShow:function(args){var window=this.getWindow(args);if(window)window.show();}});Zw.features.Factory.register(Zw.features.app.ErrorNotifyingFeature);

Zw.util.Address=Ext.extend(Zw.Plugin,{options:null,query:null,authority:null,fragment:null,scheme:null,value:null,autoInit:true,onInit:function(){if(this.value){this.parse(this.value);}},parse:function(value){this.value=value;var regex=/^(?=[^&])(?:([^:\/?]+):)?(?:\/([^\/?]*))?\/?([^?]*)(?:\?([^#]*))?/;var results=regex.exec(value);if(results){var length=results.length;if(length>3){this.scheme=results[1];this.authority=results[2];this.query=results[3];}}},toString:function(){var result=this.scheme+':/'+this.authority;if(this.query){result+='/'+this.query;}
return result;},isIdentity:function(mobileNumber){return(this.value=='-1')||((this.authority==mobileNumber)&&(this.query==0));}});Zw.util.Address.get=function(value){if(!value){return null;}
if(value.value){return value;}else if(value==-1){return new Zw.util.Address({value:-1});}else if(Ext.type(value)==='string'){return new Zw.util.Address({value:value});}};Zw.util.Address.decode=function(value){if(!value)
return;if(Ext.type(value)=='string'){return value;}else{var v=Zw.util.Address.get(value);if(v&&!Ext.isEmpty(v.toString)){return v.toString();}else{return null;}}};Zw.util.Address.encode=function(args){var result='';switch(args.scheme){case'websitedevice':result='device:/'+args.mobileNumber+'/0';break;case'device':result='device:/'+args.mobileNumber+'/'+args.deviceNumber;break;}
return result;};

Zw.app.AccountDevicePlugin=Ext.extend(Zw.Plugin,{onInit:function(){var context=this.getContext();if(context){context.subscribe('/account/device/delete',this.onDeleteGroup,this);context.subscribe('/account/device/save',this.onSaveGroup,this);context.subscribe('/net/device/save',this.onSaveGroupToServer,this);context.subscribe('/account/device/member/add',this.onDeviceMemberAdd,this);context.subscribe('/account/device/members/add',this.onDeviceMembersAdd,this);context.subscribe('/account/device/member/remove',this.onDeviceMemberRemove,this);context.subscribe('/account/device/contacts/loaded',this.onContactsLoaded,this);context.subscribe('/account/device/contacts/load',this.loadContacts,this,{buffer:true});}},onDeleteGroup:function(args){var device=this.client.getDevice(args.device);if(!device.saved){var contact=this.context.getContactManager().findContactByAddress(device.getAddress());if(contact){this.context.Account.getContacts().remove(contact);}
this.client.devices.remove(device);device.destroy();}},loadContacts:function(args){var device=this.client.getDevice(args.device);device.loadContactsFromServer();},onContactsLoaded:function(args){if(args.device.isWebsiteDevice){this.client.context.publish('/account/contacts/loaded',args);}},onDeviceMembersAdd:function(args){var members=args.members;var device=this.getDevice(args.device);if(!device)return;device.contacts.add(members);Ext.each(members,function(member){this.context.publish('/account/device/member/add',{device:device,member:member});},this);Zw.util.executeCallback(args,[this,args]);},onDeviceMemberRemove:function(args){var device=this.getDevice(args.device);var member=args.member;if(device){this._updateGroupContactCountForDevice(device.getAddress());Zw.Application.Net.removeGroupMember({context:this.context,group:device.getAddress(),member:member.data});}},_updateGroupContactCountForDevice:function(deviceAddress){var device=this.getDevice(deviceAddress);if(device){var contact=this.getContext().getContactManager().findContactByAddress(deviceAddress);if(contact){contact.set('memberCount',device.getContactsCount());}}},onDeviceMemberAdd:function(args){var member=args.member;var device=this.getDevice(args.device);if(device){var address=device.getAddress();if(!device.saved){this.context.publish('/account/device/save',{device:device,contact:this.context.getContactManager().findContactByAddress(address),scope:this,callback:function(sender,result){args.device=result.device;this.context.publish('/account/device/member/add',args);}});return;}
if(!args.preventStore){if(device.contacts.find('mobileNumber',Zw.data.get(member,'mobileNumber'))==-1){device.contacts.add(member);Zw.console("Account.js > Adding member to device.contacts",device.contacts);}}
this._updateGroupContactCountForDevice(address);Zw.Application.Net.addGroupMember({context:this.context,group:address,member:member.data,scope:this,success:function(scope,e){var successful=e.success;if(e&&e.response)e=e.response;var json=e;var store=device.contacts;var contactRecord=member;if(successful){var index=store.findBy(function(contact){return contact.id==json.id;});if(index==-1){contactRecord.store=store;Zw.console("Setting the record id to ",json.id,'from',contactRecord.id);var oldId=contactRecord.id;var newId=contactRecord.id=json.id;store.changeIdOfRecord(oldId,newId);contactRecord.beginEdit();contactRecord.set('channel',json.channel);contactRecord.set('thread',json.thread);contactRecord.set('fwdThread',json.fwd);contactRecord.set('deviceId',json.deviceId);contactRecord.set('phoneKey',json.phoneKey);if(!Ext.isEmpty(json.phoneKey))
Zw.util.log('trying to update the phone key: '+json.phoneKey);contactRecord.set('carrier',json.carrier);contactRecord.endEdit();}
if(args.callback)
args.callback.call(args.scope||this,contactRecord);}else{if(json&&json.reason)
errorReason=json.reason;if(!failure&&args.failure){failure=args.failure;}
if(failure)
failure.createDelegate(scope,[sender,contactRecord,fArgs,errorReason])();}}});}},_onSaveGroup:function(sender,e,args){var groupType="Group";if(args.device&&args.device.type){groupType=args.device.type;}
if(args.type){groupType=args.type;}
var _contacts=null;var _contact=args.contact;if(args.contacts){_contacts=args.contacts;Zw.console("Using this store for contactList",_contacts);}
if(!e){alert(Zw.localize('generic.alert.saveGroupFailed'));return;}
var contactData=e.response;var contacts=this.context.Account.parseContactData([contactData]);var contact=this.contact=contacts[0];var mobileNumber=Zw.data.get(contact,'mobileNumber');var targetGroupDevice=Zw.data.get(contact,'targetGroupDevice');var device=null;if(args.device){device=args.device;device.saved=true;device.deviceId=targetGroupDevice;device.setAddress(mobileNumber);}else{device=new Zw.app.Device({address:mobileNumber,contacts:_contacts,type:groupType,contactsProxy:false,delayMessageList:true,delayContactList:true,deviceId:targetGroupDevice});this.client.addPlugin(device);}
if(_contact){this.context.getContactManager().updateContact(_contact,contact);_contact.beginEdit();_contact.set('targetGroupDevice',targetGroupDevice);_contact.set('deviceId',this.context.Account.getWebsiteDeviceId());_contact.endEdit();contact=this.contact=_contact;}else{this.client.getContacts().addSorted(contact);}
var result={device:device,contact:contact,type:groupType};Zw.console("Returning",result);return result;},onSaveGroup:function(args){var groupType="Group";if(args.device&&args.device.type){groupType=args.device.type;}
if(args.type){groupType=args.type;}
var lazySave=args.lazySave;if(lazySave){var contact=new Zw.data.Contact({});var deviceId=Math.floor(Math.random()*50000);var address=Zw.util.Address.encode({scheme:'device',mobileNumber:this.client.identity.get('mobileNumber'),deviceNumber:deviceId});contact.beginEdit();contact.set('targetGroupDevice',deviceId);contact.set('deviceId',this.client.getWebsiteDeviceId());contact.set('address',address);contact.endEdit();this.client.getContacts().addSorted(contact);var device=new Zw.app.Device({address:address,deviceId:deviceId,type:groupType,saved:false});this.client.addPlugin(device);var result={device:device,contact:contact,type:groupType};if(args.callback){args.callback.call(args.scope||this,this,result);}}else{this.context.publish('/net/device/save',{name:args.name,address:args.address,type:groupType,scope:this,success:function(sender,e){var result=this._onSaveGroup(sender,e,args);if(args.contactsSeed){var members=[];Ext.each(args.contactsSeed,function(contact){if(Zw.util.isValidForGroupMembership(contact))
members.push(contact);});this.context.publish('/account/device/members/add',{device:result.device,members:members,callback:function(){args.callback.call(args.scope||this,this,result);}});}else{if(args.callback){args.callback.call(args.scope||this,this,result);}}}});}},onSaveGroupToServer:function(args){var groupType="Group";if(args.device&&args.device.type){groupType=args.device.type;}
if(args.type){groupType=args.type;}
this._ajax({method:'saveGroup',group:{name:args.name,address:args.address,type:groupType}},args);},_ajax:function(params,args){Zw.Application.Net[params.method].call(Zw.Application.Net,this._wrapArgs(params,args));},_wrapArgs:function(output,args){args=this._parseArgs(args);return Ext.apply(output,{context:this.getContext(),scope:args.scope,success:args.success,failure:args.failure});},_parseArgs:function(args){args=args||{};args.scope=args.scope||this;args.success=args.success||Ext.emptyFn;args.failure=args.failure||Ext.emptyFn;return args;},getContext:function(){if(!this.context){this.context=this.client.context;}
return this.context;},getDevice:function(mixed){return this.client.getDevice(mixed);},publish:function(){var context=this.getContext();if(context){context.publish.apply(context,arguments);}},subscribe:function(){var context=this.getContext();if(context){context.subscribe.apply(context,arguments);}},onDestroy:function(){var context=this.getContext();if(context){delete this.context;context.unsubscribe('/account/device/delete',this.onDeleteGroup,this);context.unsubscribe('/account/device/save',this.onSaveGroup,this);context.unsubscribe('/net/device/save',this.onSaveGroupToServer,this);context.unsubscribe('/account/device/member/add',this.onDeviceMemberAdd,this);context.unsubscribe('/account/device/members/add',this.onDeviceMembersAdd,this);context.unsubscribe('/account/device/member/remove',this.onDeviceMemberRemove,this);context.unsubscribe('/account/device/contacts/loaded',this.onContactsLoaded,this);context.unsubscribe('/account/device/contacts/load',this.loadContacts,this,{buffer:true});}}});

Zw.app.AccountSignalPlugin=Ext.extend(Zw.Plugin,{onInit:function(){this.addPlugin(new Zw.util.ProxyPlugin({namespace:'/account/signal'}));var context=this.getContext();context.subscribe('/signal/contact/change',this.onIncomingContactSignal,this);context.subscribe('/signal/credential/change',this.onCredentialChange,this);context.subscribe('/signal/message/receive',this.onIncomingMessageSignal,this);context.subscribe('/signal/device/change',this.onIncomingDeviceSignal,this);context.subscribe('/signal/messageProgress/update',this.onMessageProgressUpdate,this);},onCredentialChange:function(signals){Ext.each(signals,function(signal){var account=this.client;account.parseIdentity(signal);},this);},onIncomingContactSignal:function(c){var records=this.client.parseContactData(c);this._genericallyProcessItems(records,this._getStoreForContact,'id',this.onIncomingContactSignal_processUpdate,Ext.emptyFn,this._genericallyInspectDeleted_fn);},_getStoreForContact:function(record){var websiteDeviceId=this.client.getWebsiteDeviceId();if(websiteDeviceId){var itemDeviceId=Zw.data.get(record,'deviceId');if(itemDeviceId){if(websiteDeviceId!=itemDeviceId){var device=this.client.getDevice(itemDeviceId);if(device){return device.contacts;}else{return null;}}}else{return null;}}
return this.client.getWebsiteDevice().contacts;},onIncomingContactSignal_processUpdate:function(oldRecord,newRecord){this.getContext().getContactManager().updateContact(oldRecord,newRecord);if(oldRecord.get('deleted')){this.client.getWebsiteDevice().contacts.remove(oldRecord);}},onIncomingDeviceSignal:function(deviceSignal){if(deviceSignal){this.client.initDevices(deviceSignal);}},onIncomingMessageSignal_getStore:function(record){var websiteDevice=this.client.getWebsiteDevice();var result=websiteDevice.messages;var deviceId=this.client.getWebsiteDeviceId();if(deviceId){var itemDeviceId=Zw.data.get(record,'deviceId');if(itemDeviceId){if(deviceId!=itemDeviceId){var device=this.client.getDevice(itemDeviceId);if(device)
return device.messages;else
return null;}}}
return result;},onIncomingMessageSignal:function(m){var records=this.client.parseMessageData(m);this._genericallyProcessItems(records,this.onIncomingMessageSignal_getStore,'id',this.onIncomingMessageSignal_processUpdate,this.onIncomingMessageSignal_afterNewStuff,this.onIncomingMessageSignal_processNewStuff);},onIncomingMessageSignal_processUpdate:function(oldRecord,newRecord){this.getContext().getMessageManager().updateMessage(oldRecord,newRecord);},onIncomingMessageSignal_afterNewStuff:function(){},onIncomingMessageSignal_processNewStuff:function(newMessage){if(newMessage==null){return true;}
if(newMessage.get("deleted")){return true;}
if(newMessage.get('isSelf')===true)
newMessage.set('from',-1);var type=newMessage.get('type');if(type=='MO')
this.getContext().publish('/account/message/receive',newMessage);else if(type=='ZO'){this.getContext().publish('/account/message/send',newMessage);}},_genericallyProcessItems:function(records,storeFn,param,processUpdate,afterNewStuff,processNewStuff){var paramFn;if('id'==param){paramFn=this._genericallyProcessItems_idFn;}else{paramFn=function(record){return record.get(param);};}
var newStuff=[];Ext.each(records,function(record){var key=paramFn(record);var _store=storeFn.call(this,record);if(_store){var index=_store.findBy(function(thing){return paramFn(thing)==key;});if(index!=-1){processUpdate.call(this,_store.getAt(index),record);}else{var prevent=processNewStuff.call(this,record);if(!prevent){newStuff[newStuff.length]=record;}}}else{}},this);if(newStuff.length>0){for(var i=0;i<newStuff.length;i++){var _store=storeFn.call(this,newStuff[i]);if(_store){_store.addSorted(newStuff[i]);}}
afterNewStuff.call(this);}},_genericallyInspectDeleted_fn:function(record){var result=Zw.data.get(record,'deleted');return result;},_genericallyProcessItems_idFn:function(record){return record.id;},getContext:function(){if(!this.context){this.context=this.client.context;}
return this.context;},onMessageProgressUpdate:function(){},onDestroy:function(){delete this.context;}});

var _gaq=_gaq||[];function initGoogleAnalytic(){var GA_ACCOUNTS={Sprint:{id:'UA-24958618-6',domain:'sprint.zipwhip.com'},Quicktext:{id:'UA-24958618-7',domain:'zipwhip.sprint.com'},iGoogleWidget:{id:'UA-24958618-8',domain:'widget.sprint.com'},FacebookWidget:{id:'UA-24958618-10',domain:'widget-test.sprintpcs.com'},sprintWebTexter:{id:'UA-24958618-9',domain:'sprint.zipwhip.com'},Bobsled:{id:'UA-24958618-2',domain:'cloudtext.letsbobsled.com'},Cloudtext:{id:'UA-24958618-4',domain:'cloudtext.sidekick.com'}};var portalData=null;if(typeof Zw.portal!=='undefined'&&Zw.portal){portalData=GA_ACCOUNTS[Zw.portal];}
if(!portalData&&(typeof window!=='undefined'&&typeof window.Zw_appId!=='undefined'&&window.Zw_appId)){Zw.portal=window.Zw_appId;portalData=GA_ACCOUNTS[Zw.portal];}
var debug=Ext.ux.util.getUrlParam('debug');var trackPortal=Zw.portal&&!Ext.isEmpty(Zw.portal)&&!Zw.Application.debug&&debug!='true';if(trackPortal&&portalData){_gaq.push(['_setAccount',portalData.id]);_gaq.push(['_setDomainName',portalData.domain]);}
else{_gaq.push(['_setAccount','UA-24958618-5']);_gaq.push(['_setDomainName','.zipwhip.com']);}
_gaq.push(['_trackPageview']);var ga=document.createElement('script');ga.type='text/javascript';ga.async=true;ga.src=('https:'==document.location.protocol?'https://ssl':'http://www')+'.google-analytics.com/ga.js';var s=document.getElementsByTagName('script')[0];s.parentNode.insertBefore(ga,s);}
initGoogleAnalytic();Zw.namespace('Zw.app.plugins');Zw.app.plugins.GoogleAnalyticsPubSubPlugin=Ext.extend(Zw.Plugin,{SESSION_UPDATE_TRACK_INTERVAL:10,session_update_counter:0,ajaxIgnoreEventList:null,ajaxModifyEventList:null,pubsubIgnoreEventList:null,pubsubModifyEventList:null,onInit:function(){if(typeof _gaq!=='undefined'){this.ajaxIgnoreEventList={};this.ajaxModifyEventList={};this.pubsubIgnoreEventList={};this.pubsubModifyEventList={};this.client._publish=this.client._publish.createSequence(this.trackPublish,this);this.initAjaxIgnoreEventList();this.initAjaxModifyEventList();this.initPubsubIgnoreEventList();this.initPubsubModifyEventList();}
else{Zw.console("Google Analytics Code not included. Pubsub Analytics Plugin Disabled.");}},initAjaxIgnoreEventList:function(){var list=this.ajaxIgnoreEventList;if(Zw.portal=='iGoogleWidget'){list['http://widget-test.sprintpcs.com/oauth/v1/request/session/update']=true;}},initAjaxModifyEventList:function(){var list=this.ajaxModifyEventList;},initPubsubIgnoreEventList:function(){var list=this.pubsubIgnoreEventList;if(Zw.portal=='iGoogleWidget'){list['/net/ajax/requested']=true;list['/desktop/loading/show']=true;list['/desktop/loading/hide']=true;list['/net/ajax/completed/failure']=true;list['/net/ajax/completed/success']=true;list['/signals/rx']=true;}},initPubsubModifyEventList:function(){var list=this.pubsubModifyEventList;list['/signal/messageProgress/update']='/signal/messageProgress/update';list['/account/authenticated']='/account/authenticated';list['/account/unauthenticated']='/account/unauthenticated';list['/account/message/update']='/account/message/update';list['/account/conversation/update']='/account/conversation/update';list['/account/message/read']='/account/message/read';},trackPublish:function(pubSubUri,extraArgs){if(!pubSubUri){return;}
if(typeof _gaq==='undefined'){return;}
if(this.ignoreSpecialEvent(pubSubUri,extraArgs)){return;}
if(this.pubsubIgnoreEventList[pubSubUri]){return;}
var portalName="";if(Zw.portal){portalName=Zw.portal+'_';}
switch(pubSubUri){case'/net/ajax/request':this.trackAjaxPublish(portalName,pubSubUri,extraArgs);break;case'/app/error':this.trackAppErrorPublish(portalName,pubSubUri,extraArgs);break;case'/desktop/error/show':this.trackDesktopErrorPublish(portalName,pubSubUri,extraArgs);break;case'/desktop/error/show/':this.trackDesktopErrorPublish(portalName,pubSubUri,extraArgs);break;case'/desktop/interlink/error':this.trackDesktopErrorPublish(portalName,pubSubUri,extraArgs);break;case'/desktop/contact/error/show':this.trackContactErrorPublish(portalName,pubSubUri,extraArgs);break;default:this.trackPubsubPublish(portalName,pubSubUri,extraArgs);}},trackPubsubPublish:function(portalName,pubSubUri,extraArgs){var category=portalName+'pubsub';for(var e in this.pubsubModifyEventList){if(pubSubUri.indexOf(e)!=-1){this._trackEvent(category,this.pubsubModifyEventList[e]);return;}}
this._trackEvent(category,pubSubUri);},trackAjaxPublish:function(portalName,pubSubUri,extraArgs){if(extraArgs&&extraArgs.url){if(this.ajaxIgnoreEventList[extraArgs.url]){return;}
if(extraArgs.url=='session/update'){this.session_update_counter++;if(this.session_update_counter<this.SESSION_UPDATE_TRACK_INTERVAL){return;}
this.session_update_counter=0;}
var category=portalName+'ajax_cloud_request';this._trackEvent(category,extraArgs.url);}
else{this._trackEvent(category,pubSubUri);}},trackAppErrorPublish:function(portalName,pubSubUri,extraArgs){var name='';var data='';var err='';if(extraArgs&&extraArgs.name){name=extraArgs.name;name=this._processErrorString(name);}
if(extraArgs&&extraArgs.data){data=extraArgs.data;data=this._processErrorString(data);}
if(extraArgs&&extraArgs.err){err=extraArgs.err;err=this._processErrorString(err);}
var category=portalName+'error';this._trackEvent(category,pubSubUri,name,err+'::'+data);},trackContactErrorPublish:function(portalName,pubSubUri,extraArgs){if(extraArgs&&extraArgs.contactCard){var contactCard=extraArgs.contactCard;contactCard=this._processErrorString(contactCard);}
if(extraArgs&&extraArgs.errorDescription){var errorDescription=extraArgs.errorDescription;errorDescription=this._processErrorString(errorDescription);}
var category=portalName+'error';this._trackEvent(category,pubSubUri,errorDescription,contactCard);},trackDesktopErrorPublish:function(portalName,pubSubUri,extraArgs){var title='';var msg='';if(extraArgs&&extraArgs.title){title=extraArgs.title;title=this._processErrorString(title);}
if(extraArgs&&extraArgs.msg){msg=extraArgs.msg;msg=this._processErrorString(msg);}
var category=portalName+'error';this._trackEvent(category,pubSubUri,title,msg);},_trackEvent:function(category,action,opt_label,opt_value){var functionName='_trackEvent';if(!Ext.isEmpty(opt_label)&&!Ext.isEmpty(opt_value)){_gaq.push([functionName,category,action,opt_label,opt_value]);}
else{_gaq.push([functionName,category,action]);}},ignoreSpecialEvent:function(pubSubUri,extraArgs){var val=null;if(extraArgs&&extraArgs.session){if((typeof extraArgs.session=='boolean')&&extraArgs.session&&Zw.Application&&Zw.Application.Context&&Zw.Application.Context.Account){val=Zw.Application.Context.Account.getSessionKey();}
if(!val&&extraArgs.session.indexOf){val=extraArgs.session;}}
if(!val){val=pubSubUri;}
if(val&&val.indexOf(':fake')!=-1){return true;}
return false;},_processErrorString:function(o){var maxLen=64;if(Ext.type(o)!='string'){if(o.length>maxLen){o=o.substr(0,maxLen);}
return o;}
var parse=function(_o){var a=[],t;for(var p in _o){if(_o.hasOwnProperty(p)){t=_o[p];if(t){if(typeof t=="object"){a[a.length]=p+":{ "+arguments.callee(t).join(", ")+"}";}
else{if(t.toString){if(typeof t=="string"){a[a.length]=[p+": \""+t.toString()+"\""];}
else{a[a.length]=[p+": "+t.toString()];}}}}}}
return a;};var objStr="{"+parse(o).join(", ")+"}";if(objStr.length>maxLen){return objStr.substr(0,maxLen);}
return objStr;}});Zw.features.PluginFactory.register('/context','Zw.app.plugins.GoogleAnalyticsPubSubPlugin');Zw.app.PluginFactory.register('/application','Zw.app.plugins.GoogleAnalyticsPubSubPlugin');

Zw.util.PaginationPlugin=Ext.extend(Zw.Plugin,{page:0,pageSize:10,totalContacts:null,onInit:function(){this.client.store.filterDataBy=this.filterDataBy.createDelegate(this);if(this.client.store.syncData)
this.client.store.syncData();if(this.client.paginationSettings&&this.client.paginationSettings.buttons){this.client.on('beforerender',this.onRender,this);this.client.store.on('datachanged',this.onDatachanged,this);}},onDatachanged:function(){if(this.client.filter&&this.client.filter!=""){this.totalContacts=this.client.store.getCount();}
else{var client=this.client;if(client){var store=client.store;if(store&&store._store&&store._store.data&&store._store.data.length){this.totalContacts=store._store.data.length;}
else if(store.getCount){this.totalContacts=store.getCount();}}}
this.updatePagination();},getMaxPages:function(){return Math.floor(this.totalContacts/this.pageSize);},filterDataBy:function(data,fn,scope){var count=1;var pageSize=this.pageSize;var r=new Ext.util.MixedCollection();r.getKey=data.getKey;var k=data.keys,it=data.items;for(var i=this.page*pageSize,len=it.length;i<len;i++){if(fn.call(scope||this,it[i],k[i])){r.add(k[i],it[i]);count++;}
if(count>pageSize){Zw.console("Because ",count," is larger than ",pageSize," we are stopping.");break;}}
return r;},setPage:function(page){var maxPages=this.getMaxPages();if(page<0)page=0;if(page>maxPages)page=maxPages;this.page=page;this.updateUI();},getPaginationPosition:function(){return Zw.localize('generic.status.nowViewing')+' '+(this.page+1)+' '+Zw.localize('generic.text.of')+' '+(this.getMaxPages()+1);},updatePagination:function(){var el=this.div.field('label').el;if(el){el.update(this.getPaginationPosition());}},refilterDateView:function(){if(this.client.filter&&this.client.filter!=""){var dataView=this.client;dataView.store.filterBy(Zw.controls.ContactCard.generateHighlighterFilterFn(dataView.highlighterStrategyLookup,null,dataView.filter));this.totalContacts=dataView.store.getCount();}else{Zw.console('No Filter found.');}},updateUI:function(){Zw.console("Update UI",this);if(this.client.store.syncData)
this.client.store.syncData();this.refilterDateView();this.updatePagination();Zw.console("this.getMaxPages()",this.getMaxPages());Zw.console("this.getPaginationPosition()",this.getPaginationPosition());this.client.refresh();},onRender:function(){var el=this.client.ownerCt.insert(0,this.div=new Zw.controls.Div({plugins:[new Zw.util.FieldinatorPlugin()],cls:'paginationContainer',items:[{xtype:'Zw.controls.ActionButton',text:Zw.localize('generic.btn.back'),cls:'paginationBackButton zw-wizard-nav next zw-action-button',scope:this,handler:function(){this.setPage(this.page-=1);}},{xtype:'Zw.controls.ActionButton',text:Zw.localize('generic.btn.next'),cls:'paginationNextButton zw-wizard-nav next zw-action-button',scope:this,handler:function(){this.setPage(this.page+=1);}},{xtype:'label',code:'label',cls:'paginationLabel',html:this.getPaginationPosition()}]}));var el=this.client.ownerCt.el;Ext.DomHelper.append(el,{html:'',tag:'html'});}});Zw.features.PluginFactory.register('/desktop/dataview/contacts/tobox',function(args){return new Zw.util.PaginationPlugin(args);});

try{document.domain=document.domain;}catch(ex){}
window.onload=(function(){if(this.loaded)
return;if(Ext.isIE9){setBrowserClass('ext-ie9');}else if(Ext.isIE8){setBrowserClass('ext-ie8');}else if(Ext.isIE7){setBrowserClass('ext-ie7');}else if(Ext.isChrome){setBrowserClass('ext-chrome');}else if(Ext.isSafari){setBrowserClass('ext-safari');}else if(Ext.isOpera){setBrowserClass('ext-opera');}else if(Ext.isGecko){setBrowserClass('ext-gecko');}
function setBrowserClass(cls){Ext.getBody().removeClass('ext-ie6');Ext.getBody().removeClass('ext-ie7');Ext.getBody().removeClass('ext-ie8');Ext.getBody().removeClass('ext-ie9');Ext.getBody().removeClass('ext-chrome');Ext.getBody().removeClass('ext-safari');Ext.getBody().removeClass('ext-opera');Ext.getBody().removeClass('ext-gecko');Ext.getBody().addClass(cls);}
function resolveContext(key){Zw.console("Resolving context by key: ",key);if(!key)return null;var accounts=window.accounts;var result=null;if(accounts){result=accounts[key];}
if(!Zw.capabilities.ALLOW_GUEST){if(result&&result.account){if(result.account.user){Zw.console("Found user: ",result,result.account,result.account.user,result.account.user.isGuest);if(result.account.user.isGuest){Zw.console("This is a guest, so we're going to return null");return null;}}}}
Zw.console("Resolved the context to be: ",result);return result;}
this.loaded=true;var contexts=[];var provider=window.cookieProvider=new Ext.state.CookieProvider({path:'/',domain:Zw.cookieDomain||'zipwhip.com'});var sessions=provider.get('sessions');if(sessions&&sessions.length>0){for(var i=0;i<sessions.length;i++){var s=sessions[i];if(!Ext.isEmpty(s)){var context=resolveContext(s);if(!context)
context={account:{session:s}};contexts.push(context);}}}
function setSecurityCredential(){var ONE_HOUR=1000*60*60;Zw.inSecurityMode=true;Zw.securityTimeout=new Date(new Date().getTime()+(ONE_HOUR));provider.set('timeout',true);provider.set('securityTimeout',Zw.securityTimeout);}
var integratedLogin=provider.get('integrated-login');Zw.integratedLogin=integratedLogin;if(integratedLogin&&(integratedLogin!='security'&&integratedLogin!='crash')){if(Zw.portal=='Sprint'){Zw.console('Setting security credential countdown');setSecurityCredential();}
provider.clear('sessions');contexts=[];var context=resolveContext(integratedLogin);if(context){contexts.push(context);}else{contexts.push({account:{session:integratedLogin}});}
Zw.console(String.format("Integrated login cookie: ({0})",integratedLogin));provider.clear('integrated-login');provider.set('sessions',null);provider.clear('sessions');}
if(contexts&&contexts.length>0){Zw.Application.init({contexts:contexts});}else{Zw.Application.init();}
if(Zw.startAfterCSS){var div=Ext.get(Ext.DomHelper.append(Ext.getBody(),{tag:'div',cls:'zw-quicktext-css-loaded'}));var task={interval:1000,run:function(){var w=div.getWidth();if(w===100){Ext.TaskMgr.stop(task);Zw.Application.start();}}};Ext.TaskMgr.start(task);}else{Zw.Application.start();}
Zw.util.init.call(Zw.util);});

