function startSearch(A){var B=document.search.text.value.trim();if((B!="请输入搜索词")&&(B!=="")){if(A=="sub"){return true}else{document.search.submit()}}else{alert("请输入搜索词")}}function genPromoPortlet(D,H){var C=randomPick(D.length,H);var E="";for(var F=0;F<H;F++){var G=promo_items[C[F]];E+='<table cellspacing="0" cellpadding="2" width="100%" align="center" border="0"><tr><td width="100" align="center">';var B=G[1]+" - "+G[2]+" - "+G[3];E+='<a href="/itemview/'+G[0]+'">';var A=G[6]?"/imglib/thumb/"+G[6]+".jpg":"/img/nopic_small.gif";E+='<img src="'+A+'" alt="'+B+'" title="'+B+'" /></a>';E+='</td><td style="padding-right:5px;"><p><strong>'+G[1]+"</strong></p></td></tr>";if(G[5]){E+='<tr><td colspan="2"><div class="arrow">市场价：<span class="compare-price">&yen;'+G[5].toFixed(2)+"</span></div>"}E+='<div class="arrow">促销价：<span class="price">&yen;'+G[4].toFixed(2)+"/"+G[7]+"</span></div></td></tr></table>";if(F<H-1){E+='<div style="margin:5px 0px;" class="horiz_dot"></div>'}}return E}Ext.BLANK_IMAGE_URL="/css/images/default/s.gif";Ext.namespace("Ext.ux","Ext.ux.data","Ext.ux.form","Ext.ux.tree","Ext.ux.grid","Ext.ux.plugins");Ext.ux.data.Store=function(A){Ext.ux.data.Store.superclass.constructor.call(this,A);this.added=[];this.deleted=[];this.on("add",this.onAdd,this);this.on("remove",this.onRemove,this);this.on("clear",this.onClear,this);this.on("load",this.onLoad,this);this.on("update",this.onUpdate,this)};Ext.extend(Ext.ux.data.Store,Ext.data.Store,{commit:function(){this.commitChanges();this.added=[];this.deleted=[];this._modified=[]},onAdd:function(B,A,C){this.added=this.added.concat(A)},onClear:function(A){this.added=[];this.deleted=[];this._modified=[]},onLoad:function(B,A){this.added=[];this.deleted=[];this._modified=[]},onRemove:function(B,A,C){this._modified.remove(A);if(this.added.indexOf(A)!=-1){this.added.remove(A)}else{this.deleted.push(A)}},onUpdate:function(B,A){if(this._modified.indexOf(A)==-1&&this.added.indexOf(A)==-1){this._modified.push(A)}},getChanges:function(){var C=[],A=[],B=[];Ext.each(this.added,function(D){C.push(D.data)});Ext.each(this.deleted,function(D){A.push(D.data)});Ext.each(this._modified,function(D){B.push(D.data)});return{added:C,deleted:A,modified:B}}});Ext.ux.grid.ActionColumn=function(A){Ext.apply(this,A);this.renderer=this.renderer.createDelegate(this)};Ext.ux.grid.ActionColumn.prototype={header:"",width:23,sortable:false,fixed:true,dataIndex:"",id:"action",init:function(A){this.grid=A;this.klass="action-"+this.action;this.grid.on("render",function(){var B=this.grid.getView();B.mainBody.on("mousedown",this.onMouseDown,this);if(this.tooltip){B.on("refresh",function(){var D=Ext.QuickTips.getQuickTip();var C=Ext.select("#"+this.grid.id+" ."+this.klass);C.each(function(E){D.register({target:E,title:this.tooltip.title,text:this.tooltip.text})},this)},this)}},this)},onMouseDown:function(D,C){if(C.className=="x-grid3-action "+this.klass){D.stopEvent();var B=this.grid.getView().findRowIndex(C);var A=this.grid.store.getAt(B);if(this.handler){if(this.scope){this.handler.call(this.scope,this.grid,A,B)}else{this.handler(this.grid,A,B)}}}},renderer:function(B,C,A){return String.format('<div class="x-grid3-action {0}">{1}</div>',this.klass,this.text||"&#160")}};Ext.ux.grid.GridSummary=function(A){Ext.apply(this,A)};Ext.extend(Ext.ux.grid.GridSummary,Ext.util.Observable,{init:function(B){this.grid=B;this.cm=B.getColumnModel();this.view=B.getView();this.beforeInsert=false;var A=this.view;this.renderRowsBase=A.renderRows;A.renderRows=this.renderRows.createDelegate(this);A.on("rowsinserted",this.doUpdate,this);A.afterMethod("onColumnWidthUpdated",this.doWidth,this);A.afterMethod("onAllColumnWidthsUpdated",this.doAllWidths,this);A.afterMethod("onColumnHiddenUpdated",this.doHidden,this);A.afterMethod("onUpdate",this.doUpdate,this);A.afterMethod("onRemove",this.doRemove,this);if(!this.rowTpl){this.rowTpl=new Ext.Template('<div class="x-grid3-summary-row" style="{tstyle}">','<table class="x-grid3-summary-table" border="0" cellspacing="0" cellpadding="0" style="{tstyle}">',"<tbody><tr>{cells}</tr></tbody>","</table></div>");this.rowTpl.disableFormats=true}this.rowTpl.compile();if(!this.cellTpl){this.cellTpl=new Ext.Template('<td class="x-grid3-col x-grid3-cell x-grid3-td-{id} {css}" style="{style}">','<div class="x-grid3-cell-inner x-grid3-col-{id}" unselectable="on">{value}</div>',"</td>");this.cellTpl.disableFormats=true}this.cellTpl.compile()},toggleSummaries:function(B){var A=this.grid.getGridEl();if(A){if(B===undefined){B=A.hasClass("x-grid-hide-summary")}A[B?"removeClass":"addClass"]("x-grid-hide-summary")}},renderSummary:function(C,G){G=G||this.view.getColumnData();var H=this.cm.config;var D=[],I,A={},B,J=G.length-1;for(var E=0,F=G.length;E<F;E++){I=G[E];B=H[E];A.id=I.id;A.style=I.style;A.css=E===0?"x-grid3-cell-first ":(E==J?"x-grid3-cell-last ":"");if(B.summaryType||B.summaryRenderer){A.value=(B.summaryRenderer||I.renderer)(C.data[I.name],A,C)}else{A.value=""}if(A.value===undefined||A.value===""){A.value=" "}D[D.length]=this.cellTpl.apply(A)}return this.rowTpl.apply({tstyle:"width:"+this.view.getTotalWidth()+";",cells:D.join("")})},calculate:function(C,H){var F={},A,J,I=this.cm.config,B;for(var D=0,K=C.length;D<K;D++){A=C[D];for(var E=0,G=H.length;E<G;E++){J=H[E];B=I[E];if(B.summaryType){F[J.name]=Ext.ux.grid.GridSummary.Calculations[B.summaryType](F[J.name]||0,A,J.name,F)}}}return F},renderRows:function(C,B){var D=this.renderRowsBase.call(this.view,C,B);var F=this.grid,H=F.store,A=H.getRange();var E=this.view.getColumnData();var G=this.calculate(A,E);if((C>=0&&B>=0)||H.getCount()===0){return D}else{return D+this.renderSummary({data:G},E)}},doWidth:function(D,A,C){var B=this.view.getRows(),E;if(B.length>0){E=B[B.length-1];E.style.width=C;E.firstChild.style.width=C;E.firstChild.rows[0].childNodes[D].style.width=A}},doAllWidths:function(A,C){var B=this.view.getRows(),F,E,G=A.length;if(B.length>0){F=B[B.length-1];F.style.width=C;F.firstChild.style.width=C;E=F.firstChild.rows[0].childNodes;for(var D=0;D<G;D++){E[D].style.width=A[D]}}},doHidden:function(D,G,C){var B=this.view.getRows(),F,H=G?"none":"";for(var E=0,A=B.length;E<A;E++){F=B[E].childNodes[2];F.style.width=C;F.firstChild.style.width=C;F.firstChild.rows[0].childNodes[D].style.display=H}},getSummaryNode:function(){return this.view.el.child(".x-grid3-summary-row")},refreshSummary:function(){var C=[];this.grid.store.each(function(G){C[C.length]=G});var D=this.view.getColumnData();var F=this.calculate(C,D);var B=this.renderSummary({data:F},D);var A=this.view.el.child(".x-grid3-body").dom;var E=this.getSummaryNode();if(E){A.removeChild(E.dom)}Ext.DomHelper.append(A,B);return true},removeSummary:function(){var B=this.getSummaryNode();if(B){var A=this.view.el.child(".x-grid3-body").dom;A.removeChild(B.dom)}},doUpdate:function(B,A){this.refreshSummary()},doRemove:function(D,A,B,C){if(!C){if(D.getCount()===0){this.removeSummary()}else{this.refreshSummary()}}}});Ext.ux.grid.GridSummary.Calculations={sum:function(B,A,C){return B+(A.data[C]||0)},count:function(B,A,D,C){return C[D+"count"]?++C[D+"count"]:(C[D+"count"]=1)},max:function(C,B,E,D){C=B.data[E];var A=D[E+"max"]===undefined?(D[E+"max"]=C):D[E+"max"];return C>A?(D[E+"max"]=C):A},min:function(B,A,E,D){B=A.data[E];var C=D[E+"min"]===undefined?(D[E+"min"]=B):D[E+"min"];return B<C?(D[E+"min"]=B):C},average:function(B,A,E,D){var F=D[E+"count"]?++D[E+"count"]:(D[E+"count"]=1);var C=(D[E+"total"]=((D[E+"total"]||0)+(A.data[E]||0)));return C===0?0:C/F}};Ext.ux.InfoPanel=function(A){Ext.apply(this,A);this.collapsed=this.startHidden;if(this.html===""){if(this.icon){this.html='<div class="ux-ip-icon '+this.icon+'"></div>'}this.html+='<div class="ux-ip-content">'+this.msg+'</div><div class="x-clear"></div>'}Ext.ux.InfoPanel.superclass.constructor.call(this);if(this.startHidden){this.hide()}};Ext.apply(Ext.ux.InfoPanel,{WARNING:"ux-ip-warning",QUESTION:"ux-ip-question",INFO:"ux-ip-info",ERROR:"ux-ip-error",SUCCESS:"ux-ip-success"});Ext.extend(Ext.ux.InfoPanel,Ext.Panel,{cls:"ux-info-panel",border:true,frame:true,collapsed:true,startHidden:true,html:"",showInfo:function(B){if(B){var A="";if(typeof B=="object"){if(B.icon){A='<div class="ux-ip-icon '+B.icon+'"></div>'}A+='<div class="ux-ip-content">'+B.msg+'</div><div class="x-clear"></div>'}else{A=B}this.body.update(A)}this.show();this.expand();if(B.autoHide){this.hideInfo.defer(B.autoHide,this)}},hideInfo:function(){this.collapse();this.hide()}});Ext.reg("infopanel",Ext.ux.InfoPanel);Ext.ux.form.TreeComboBox=function(A){Ext.apply(this,A);Ext.ux.form.TreeComboBox.superclass.constructor.call(this,A)};Ext.extend(Ext.ux.form.TreeComboBox,Ext.form.TriggerField,{valueNotFoundText:"Item not found",defaultAutoCreate:{tag:"input",type:"text",size:"24",autocomplete:"off"},listClass:"",selectedClass:"x-combo-selected",triggerClass:"x-form-arrow-trigger",shadow:"sides",listAlign:"tl-bl?",maxHeight:300,resizable:false,handleHeight:8,minListWidth:70,lazyInit:false,initComponent:function(){Ext.ux.form.TreeComboBox.superclass.initComponent.call(this);this.addEvents({expand:true,collapse:true,beforeselect:true,select:true});this.selectedNode=-1;if(!this.tree){this.tree=new Ext.tree.TreePanel(Ext.apply({animate:false,rootVisible:this.allowBlank,autoScroll:false,border:false},this.treeConfig))}},onRender:function(B,A){Ext.ux.form.TreeComboBox.superclass.onRender.call(this,B,A);if(this.hiddenName){this.hiddenField=this.el.insertSibling({tag:"input",type:"hidden",name:this.hiddenName,id:(this.hiddenId||this.hiddenName)},"before",true);this.hiddenField.value=this.hiddenValue!==undefined?this.hiddenValue:this.value!==undefined?this.value:"";this.el.dom.removeAttribute("name")}this.el.on("keydown",this.keyFilter,this);if(!this.lazyInit){this.initList()}else{this.on("focus",this.initList,this,{single:true})}},keyFilter:function(C,B){var A=C.getKey();if(A!=Ext.EventObject.LEFT&&A!=Ext.EventObject.RIGHT&&A!=Ext.EventObject.HOME&&A!=Ext.EventObject.END){C.stopEvent()}},initList:function(){if(!this.list){var B="x-combo-list";this.list=new Ext.Layer({shadow:this.shadow,cls:[B,this.listClass].join(" "),constrain:false});var C=this.listWidth||Math.max(this.wrap.getWidth(),this.minListWidth);this.list.setWidth(C);this.assetHeight=0;if(this.title){this.header=this.list.createChild({cls:B+"-hd",html:this.title});this.assetHeight+=this.header.getHeight()}this.innerList=this.list.createChild({cls:B+"-inner"});this.innerList.setWidth(C-this.list.getFrameWidth("lr"));this.tree.render(this.innerList);this.tree.on("click",this.onSelect,this);this.tree.on("expandnode",this.onExpandNode,this);var A=new Ext.tree.TreeSorter(this.tree,{folderSort:true});this.restrictHeight();if(this.resizable){this.resizer=new Ext.Resizable(this.list,{pinned:true,handles:"se"});this.resizer.on("resize",function(F,D,E){this.maxHeight=E-this.handleHeight-this.list.getFrameWidth("tb")-this.assetHeight;this.listWidth=D;this.innerList.setWidth(D-this.list.getFrameWidth("lr"));this.restrictHeight()},this);this.innerList.setStyle("margin-bottom",this.handleHeight+"px")}}},initEvents:function(){Ext.ux.form.TreeComboBox.superclass.initEvents.call(this);this.keyNav=new Ext.KeyNav(this.el,{esc:function(A){this.collapse()},scope:this,doRelay:function(C,B,A){if(A=="down"||this.scope.isExpanded()){return Ext.KeyNav.prototype.doRelay.apply(this,arguments)}return true},forceKeyDown:true})},onDestroy:function(){if(this.view){this.view.el.removeAllListeners();this.view.el.remove();this.view.purgeListeners()}if(this.list){this.list.destroy()}Ext.ux.form.TreeComboBox.superclass.onDestroy.call(this)},onResize:function(A,B){Ext.ux.form.TreeComboBox.superclass.onResize.apply(this,arguments);if(this.list&&this.listWidth===undefined){var C=Math.max(A,this.minListWidth);this.list.setWidth(C);this.innerList.setWidth(C-this.list.getFrameWidth("lr"))}},onExpandNode:function(A){A.ensureVisible()},onDisable:function(){Ext.ux.form.TreeComboBox.superclass.onDisable.apply(this,arguments);if(this.hiddenField){this.hiddenField.disabled=this.disabled}},onSelect:function(A,B){if(this.fireEvent("beforeselect",this,A,B)!==false){this.setValue(A);this.collapse();this.fireEvent("select",this,A,B)}},getValue:function(){if(this.valueField){return typeof this.value!="undefined"?this.value:""}else{return Ext.ux.form.TreeComboBox.superclass.getValue.call(this)}},clearValue:function(){if(this.hiddenField){this.hiddenField.value=""}this.setRawValue("");this.applyEmptyText()},setValue:function(A){var B=null;if(A&&A.attributes){B=A;if(B.isRoot){A=null}else{A=B.attributes[this.valueField]}}this.rawValue=A;var C=A;if(this.valueField&&A){if(B){C=typeof this.renderer=="function"?this.renderer(B):B.attributes[this.displayField]||this.valueNotFoundText;this.selectNode(B)}else{C=typeof this.renderer=="function"?this.renderer(A):this.valueNotFoundText}}if(!A&&this.tree.rootVisible){this.selectNode(this.tree.root)}if(this.hiddenField){this.hiddenField.value=A}Ext.ux.form.TreeComboBox.superclass.setValue.call(this,C);this.el.dom.title=C;this.value=A},selectNode:function(A){if(A.parentNode){var B=A.parentNode.getPath();this.tree.collapseAll();this.tree.expandPath(B)}A.select()},restrictHeight:function(){var A=this.list.getFrameWidth("tb");this.innerList.setHeight(this.maxHeight);this.list.beginUpdate();this.list.setHeight(this.innerList.getHeight()+A+(this.resizable?this.handleHeight:0)+this.assetHeight);this.list.alignTo(this.el,this.listAlign);this.list.endUpdate()},isExpanded:function(){return this.list&&this.list.isVisible()},collapse:function(){if(!this.isExpanded()){return }this.list.hide();Ext.getDoc().un("mousewheel",this.collapseIf,this);Ext.getDoc().un("mousedown",this.collapseIf,this);this.fireEvent("collapse",this)},collapseIf:function(A){if(!A.within(this.wrap)&&!A.within(this.list)){this.collapse()}},expand:function(){if(this.isExpanded()||!this.hasFocus){return }this.list.alignTo(this.wrap,this.listAlign);this.list.show();Ext.getDoc().on("mousewheel",this.collapseIf,this);Ext.getDoc().on("mousedown",this.collapseIf,this);this.fireEvent("expand",this)},onTriggerClick:function(){if(this.disabled){return }if(this.isExpanded()){this.collapse();this.el.focus()}else{this.onFocus({});this.expand();this.el.focus()}}});Ext.reg("treecombo",Ext.ux.form.TreeComboBox);Ext.ux.form.StaticTextField=function(A){this.name=A.name||A.id;Ext.ux.form.StaticTextField.superclass.constructor.call(this,A)};Ext.extend(Ext.ux.form.StaticTextField,Ext.BoxComponent,{defaultAutoCreate:{tag:"div"},fieldClass:"x-form-text",isFormField:true,submitValue:false,value:undefined,disableReset:false,field:null,getName:function(){return this.name},onRender:function(C,A){Ext.ux.form.StaticTextField.superclass.onRender.call(this,C,A);if(!this.el){var B=this.getAutoCreate();this.el=C.createChild(B,A);if(this.submitValue){this.field=C.createChild({tag:"input",type:"hidden",name:this.getName(),id:""},A)}}this.el.addClass([this.fieldClass,this.cls,"ux-form-statictextfield"]);this.initValue()},afterRender:function(B,A){Ext.ux.form.StaticTextField.superclass.afterRender.call(this);this.initEvents()},initValue:function(){if(this.value!==undefined){this.setValue(this.value)}else{if(this.el.dom.innerHTML.length>0){this.setValue(this.el.dom.innerHTML)}}},isDirty:function(){return false},reset:function(A){if(!this.disableReset||A===true){this.setValue(this.originalValue)}},initEvents:function(){this.originalValue=this.getRawValue()},isValid:function(){return true},validate:function(){return true},processValue:function(A){return A},validateValue:function(A){return true},markInvalid:function(){return },clearInvalid:function(){return },getRawValue:function(){return(this.rendered)?this.value:null},getValue:function(){return this.getRawValue()},setValue:function(A){this.value=A;if(this.rendered){this.el.dom.innerHTML=this.renderer?this.renderer(A):Ext.util.Format.htmlEncode(A);if(this.field){this.field.dom.value=A}}}});Ext.reg("statictextfield",Ext.ux.form.StaticTextField);Ext.ux.form.SelectBox=function(A){this.searchResetDelay=1000;A=Ext.apply(A||{},{editable:false,forceSelection:true,rowHeight:false,lastSearchTerm:false,triggerAction:"all",mode:"local"});Ext.ux.form.SelectBox.superclass.constructor.apply(this,arguments);this.lastSelectedIndex=this.selectedIndex||0};Ext.extend(Ext.ux.form.SelectBox,Ext.form.ComboBox,{lazyInit:false,initEvents:function(){Ext.ux.form.SelectBox.superclass.initEvents.apply(this,arguments);this.el.on("keydown",this.keySearch,this,true);this.cshTask=new Ext.util.DelayedTask(this.clearSearchHistory,this)},keySearch:function(E,D,B){var A=E.getKey();var C=String.fromCharCode(A);var F=0;if(!this.store.getCount()){return }switch(A){case Ext.EventObject.HOME:E.stopEvent();this.selectFirst();return ;case Ext.EventObject.END:E.stopEvent();this.selectLast();return ;case Ext.EventObject.PAGEDOWN:this.selectNextPage();E.stopEvent();return ;case Ext.EventObject.PAGEUP:this.selectPrevPage();E.stopEvent();return }if((E.hasModifier()&&!E.shiftKey)||E.isNavKeyPress()||E.isSpecialKey()){return }if(this.lastSearchTerm==C){F=this.lastSelectedIndex}this.search(this.displayField,C,F);this.cshTask.delay(this.searchResetDelay)},onRender:function(B,A){this.store.on("load",this.calcRowsPerPage,this);Ext.ux.form.SelectBox.superclass.onRender.apply(this,arguments);if(this.mode=="local"){this.calcRowsPerPage()}},onSelect:function(A,C,B){if(this.fireEvent("beforeselect",this,A,C)!==false){this.setValue(A.data[this.valueField||this.displayField]);if(!B){this.collapse()}this.lastSelectedIndex=C+1;this.fireEvent("select",this,A,C)}},render:function(A){Ext.ux.form.SelectBox.superclass.render.apply(this,arguments);if(Ext.isSafari){this.el.swallowEvent("mousedown",true)}this.el.unselectable();this.innerList.unselectable();this.trigger.unselectable();this.innerList.on("mouseup",function(D,C,B){if(C.id&&C.id==this.innerList.id){return }this.onViewClick()},this);this.innerList.on("mouseover",function(D,C,B){if(C.id&&C.id==this.innerList.id){return }this.lastSelectedIndex=this.view.getSelectedIndexes()[0]+1;this.cshTask.delay(this.searchResetDelay)},this);this.trigger.un("click",this.onTriggerClick,this);this.trigger.on("mousedown",function(D,C,B){D.preventDefault();this.onTriggerClick()},this);this.on("collapse",function(D,C,B){Ext.getDoc().un("mouseup",this.collapseIf,this)},this,true);this.on("expand",function(D,C,B){Ext.getDoc().on("mouseup",this.collapseIf,this)},this,true)},clearSearchHistory:function(){this.lastSelectedIndex=0;this.lastSearchTerm=false},selectFirst:function(){this.focusAndSelect(this.store.data.first())},selectLast:function(){this.focusAndSelect(this.store.data.last())},selectPrevPage:function(){if(!this.rowHeight){return }var A=Math.max(this.selectedIndex-this.rowsPerPage,0);this.focusAndSelect(this.store.getAt(A))},selectNextPage:function(){if(!this.rowHeight){return }var A=Math.min(this.selectedIndex+this.rowsPerPage,this.store.getCount()-1);this.focusAndSelect(this.store.getAt(A))},search:function(C,B,D){C=C||this.displayField;this.lastSearchTerm=B;var A=this.store.find.apply(this.store,arguments);if(A!==-1){this.focusAndSelect(A)}},focusAndSelect:function(A){var B=typeof A==="number"?A:this.store.indexOf(A);this.select(B,this.isExpanded());this.onSelect(this.store.getAt(A),B,this.isExpanded())},calcRowsPerPage:function(){if(this.store.getCount()){this.rowHeight=Ext.fly(this.view.getNode(0)).getHeight();this.rowsPerPage=this.maxHeight/this.rowHeight}else{this.rowHeight=false}}});Ext.reg("selectbox",Ext.ux.form.SelectBox);Ext.ux.plugins.InfoPlugin=function(A){this.config=A};Ext.ux.plugins.InfoPlugin.prototype={init:function(B){var A={xtype:"infopanel"};Ext.apply(A,this.config);B._infoPanel=B.insert(0,A);B.showInfo=B._infoPanel.showInfo.createDelegate(B._infoPanel);B.hideInfo=B._infoPanel.hideInfo.createDelegate(B._infoPanel)}};Ext.ux.plugins.RemoteValidator={init:function(B){var A=B.isValid;var C=B.validate;Ext.apply(B,{remoteValid:false,isValid:function(D){if(this.disabled){return true}return A.call(this,D)&&this.remoteValid},validate:function(){var D=C.call(this);if(!this.disabled&&!D){return false}if(this.disabled||(D&&this.remoteValid)){this.clearInvalid();return true}if(!this.remoteValid){this.markInvalid(this.reason);return false}return false},validateRemote:function(){this.rvOptions.params=this.rvOptions.params||{};this.rvOptions.params.field=this.name;this.rvOptions.params.value=this.getValue();Ext.Ajax.request(this.rvOptions)},rvSuccess:function(D,E){var H;try{H=Ext.decode(D.responseText)}catch(G){throw this.cannotDecodeText}if("object"!==typeof H){throw this.notObjectText}if(true!==H.success){throw this.serverErrorText+": "+H.error}var F=this.rvOptions.paramNames;this.remoteValid=true===H[F.valid];this.reason=H[F.reason];this.validate()},rvFailure:function(D,E){throw this.requestFailText},filterRemoteValidation:function(D){if(!D.isNavKeyPress()){this.remoteValidationTask.delay(this.remoteValidationDelay)}}});Ext.applyIf(B,{remoteValidationDelay:500,reason:"Server has not yet validated the value",cannotDecodeText:"Cannot decode json object",notObjectText:"Server response is not an object",serverErrorText:"Server error",requestFailText:"Server request failed"});B.on({render:{single:true,scope:B,fn:function(){this.remoteValidationTask=new Ext.util.DelayedTask(this.validateRemote,this);this.el.on("keyup",this.filterRemoteValidation,this)}}});B.rvOptions=B.rvOptions||{};Ext.applyIf(B.rvOptions,{method:"post",scope:B,success:B.rvSuccess,failure:B.rvFailure,paramNames:{valid:"valid",reason:"reason"}})}};Ext.namespace("Ext.app","Ext.app.RT");Ext.app.RT.ShippingAddress=Ext.data.Record.create([{name:"shipping_address_id",type:"int"},{name:"party_name",type:"string"},{name:"region_code",type:"string"},{name:"street",type:"string"},{name:"postal_code",type:"string"},{name:"mobile",type:"string"},{name:"phone",type:"string"}]);Ext.app.LoginWindow=function(){this.loginForm=new Ext.FormPanel({id:"login-form",baseCls:"x-plain",labelAlign:"right",labelWidth:60,url:"/login.html",defaults:{msgTarget:"under",validationDelay:500},plugins:new Ext.ux.plugins.InfoPlugin(),items:[{xtype:"textfield",name:"login",fieldLabel:"用户名",allowBlank:false,emptyText:"请输入用户名",regex:/^[_a-zA-Z0-9\u4e00-\u9fa5]{2,20}$/,regexText:"用户名只能由字母、数字以及中文字符构成",minLength:2,minLengthText:"用户名长度为2-20个字符",maxLength:20,maxLengthText:"用户名长度为2-20个字符"},{xtype:"textfield",name:"password",fieldLabel:"密码",allowBlank:false,inputType:"password",minLength:6,minLengthText:"密码长度为6-12个字符",maxLength:12,maxLengthText:"密码长度为6-12个字符"},{xtype:"box",id:"forgot-passwd",style:"margin-top: 5px;",autoEl:{cn:"<p>尚未注册的用户请先注册。</p><p>忘记密码或用户名？点击下面的“忘记密码”按钮，可以通过邮件取回您的密码或用户名。<p>"}}],buttonAlign:"center",buttons:[{iconCls:"x-icon-login",text:"登录",handler:function(){this.login()},scope:this},{text:"取消",iconCls:"btn-cancel",handler:function(){this.loginForm.getForm().reset();this.loginForm.hideInfo();this.hide()},scope:this},{text:"免费注册",iconCls:"x-icon-signup",tooltip:"还没有用户名？立即注册。",handler:function(){this.hide();location="/@@signup.html"},scope:this},{text:"忘记密码",iconCls:"x-icon-help",handler:function(){this.getLayout().setActiveItem("password-form")},scope:this}],listeners:{render:{fn:function(){this.loginForm.el.addKeyListener(Ext.EventObject.ENTER,this.login,this)},scope:this}}});this.passwordForm=new Ext.FormPanel({id:"password-form",baseCls:"x-plain",labelWidth:60,url:"/login.html",defaults:{msgTarget:"under",validationDelay:500},items:[{xtype:"box",autoEl:{cn:"<p>填写说明：</p><ul><li>如果遗忘登录用户名，请填写邮件地址取回用户名。</li><li>如果遗忘登录密码，可填写用户名或邮件地址，我们会将您的登录密码发送到您的邮箱。</li><li>为了确保密码安全，请在收到密码后进入用户管理，更改您的密码。</li></ul>"}},{xtype:"textfield",name:"login",fieldLabel:"用户名",emptyText:"请输入用户名",regex:/^[_a-z0-9\u4e00-\u9fa5]{2,20}$/,regexText:"用户名只能由字母、数字以及中文字符构成",minLength:2,minLengthText:"用户名长度为2-20个字符",maxLength:20,maxLengthText:"用户名长度为2-20个字符"},{xtype:"textfield",name:"email",width:200,emptyText:"请输入注册时输入的电子邮件地址",fieldLabel:"E-Mail",vtype:"email"}],buttonAlign:"center",buttons:[{text:"取回密码",handler:this.retrievePassword,scope:this},{text:"取回用户名",handler:this.retrieveLogin,scope:this},{text:"返回登录",iconCls:"x-icon-previous",handler:function(){this.getLayout().setActiveItem("login-form")},scope:this},{text:"取消",iconCls:"btn-cancel",handler:function(){this.passwordForm.getForm().reset();this.hide()},scope:this}]});Ext.app.LoginWindow.superclass.constructor.call(this,{width:500,height:300,closable:true,closeAction:"hide",bodyStyle:"padding:5px;",iconCls:"x-icon-login",title:"用户登录",layout:"card",activeItem:0,modal:true,renderTo:Ext.getBody(),items:[this.loginForm,this.passwordForm]})};Ext.extend(Ext.app.LoginWindow,Ext.Window,{login:function(){this.loginForm.getForm().submit({success:function(A,B){Ext.app.loggedIn=true;this.hide();var C=Ext.urlDecode(location.search.slice(1)).camefrom;if(this.successAction=="reload"){location.reload()}else{if(typeof this.successAction=="function"){this.successAction.call(this.successActionScope)}else{if(typeof C=="string"){location=C}else{location="/"}}}},failure:function(A,B){this.loginForm.showInfo({icon:Ext.ux.InfoPanel.ERROR,msg:"登录错误，请核实用户名和密码！"})},scope:this})},show:function(B,A){if(B){this.successAction=B}else{this.successAction="reload"}this.successActionScope=A||this;this.getLayout().setActiveItem("login-form");Ext.app.LoginWindow.superclass.show.call(this);this.loginForm.getForm().findField("login").focus(false,true)},retrievePassword:function(){var A=this.passwordForm.getForm();if(!A.isValid()){return }if(!A.findField("login").getValue()&&!A.findField("email").getValue()){A.markInvalid({login:"必须输入用户名或邮件",email:"必须输入用户名或邮件"});return }A.doAction("jsonsubmit",{url:"/json",jsonmethod:"retrievePassword",success:function(B,C){if(C.result.success){Ext.MessageBox.show({title:"成功取回密码",msg:"密码已通过邮件发送给您，请查收。",buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.INFO})}},scope:this})},retrieveLogin:function(){var A=this.passwordForm.getForm();if(!A.isValid()){return }if(!A.findField("email").getValue()){A.markInvalid({email:"必须输入邮件地址才能取回登录名"});return }A.doAction("jsonsubmit",{url:"/json",jsonmethod:"retrieveLogin",success:function(B,C){if(C.result.success){Ext.MessageBox.show({title:"成功取回用户名",msg:"用户名已通过邮件发送给您，请查收。",buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.INFO})}},scope:this})}});Ext.app.NavMenu=function(){var D=null;function B(){if(D===null){Ext.app.NavMenu.initData()}}function A(H){var G="mg"+H;var E=Ext.menu.MenuMgr.get(G);if(E===undefined){B();var F=['<b class="menu-title">产品品牌</b>'];Ext.each(D[H],function(I){var K={text:I[0],href:"/products/"+I[1]};if(I[2] instanceof Array){var J=['<b class="menu-title">产品系列</b>'];Ext.each(I[2],function(L){J.push({text:L[0],href:"/products/"+L[1]})});K.menu={width:120,cls:"nav-menu",minWidth:120,items:J}}F.push(K)});E=new Ext.menu.Menu({id:G,width:120,cls:"nav-menu",minWidth:120,subMenuAlignOffset:[-5,-21],items:F})}return E}function C(G){var F=G.getTarget();var E=A(F.getAttribute("mg"));if(E){E.showAt(E.getEl().getAlignToXY(F,"tr?",[5,-21]))}}return{initData:function(){Ext.Ajax.request({url:"/navdata.js",method:"get",success:function(E){D=Ext.decode(E.responseText)},async:false})},initEvents:function(E){E.on("mouseover",C,E,{delay:250})}}}();Ext.app.Region=function(){var C,B;function D(){var H=[];var J=C;H["1"]={name:"root",code:"1",children:[]};for(var K in J){if(isNaN(parseInt(K,10))){continue}var I=J[K],L=I[1]||"1";H[K]={name:I[0],code:K,parent:I[1]};if(H[L]){if(!H[L].children){H[L].children=[]}H[L].children.push(K)}}C=H}function A(){if(!B){Ext.Ajax.request({url:"/scripts/regiondata.json",method:"get",success:function(E){C=Ext.decode(E.responseText);D();B=true},async:false,scope:this})}}return{getData:function(){if(!B){A()}return C},getRegionName:function(G){var E="";var H=this.getData();do{var F=H[G];E=F.name+E;G=F.parent}while(G!="1");return E}}}();Ext.app.RegionLoader=function(){return{load:function(D,J){var E=Ext.app.Region.getData();var B=E[D.id=="root"?1:D.id].children;D.beginUpdate();for(var F=0,G=B.length;F<G;F++){var A=E[B[F]];var I=(A.children===undefined);var H={id:A.code,text:A.name,leaf:I};var C=I?new Ext.tree.TreeNode(H):new Ext.tree.AsyncTreeNode(H);D.appendChild(C)}D.endUpdate();if(typeof J=="function"){J(this,D)}}}}();Ext.app.RegionSelector=function(A){this.treeConfig={singleExpand:true,loader:Ext.app.RegionLoader,root:new Ext.tree.AsyncTreeNode({id:"root",text:"Root",expanded:false})};Ext.apply(this,A);Ext.app.RegionSelector.superclass.constructor.call(this,A)};Ext.extend(Ext.app.RegionSelector,Ext.ux.form.TreeComboBox,{allowBlank:false,width:200,resizable:true,displayField:"text",valueField:"id",lazyInit:true,renderer:function(A){if(A.attributes){var B=A[this.displayField]||A.attributes[this.displayField];while(A.getDepth()>1){A=A.parentNode;B=(A[this.displayField]||A.attributes[this.displayField])+B}return B}else{return Ext.app.Region.getRegionName(A)}},validateValue:function(B){var A=Ext.app.Region.getData();var C=this.rawValue;if(!C){this.markInvalid(this.blankText);return false}if(A[C].parent=="1"&&C!=500100&&C!=110100&&C!=120100&&C!=310100&&C!=810000&&C!=820000){this.markInvalid("区域选择必须至少选择到城市一级");return false}return true}});Ext.reg("regionselector",Ext.app.RegionSelector);Ext.app.AddressForm=function(A){Ext.apply(this,{labelWidth:70,defaultType:"textfield",defaults:{msgTarget:"under",validationDelay:500},bodyStyle:"padding: 5px",items:[{xtype:"hidden",name:"shipping_address_id"},{fieldLabel:"收货人*",name:"party_name",emptyText:"请输入收货人姓名",allowBlank:false,itemCls:"required"},{xtype:"regionselector",name:"region_code",fieldLabel:"地区*",emptyText:"请从下拉框中选择一个地区",itemCls:"required"},{xtype:"textarea",name:"street",fieldLabel:"住址*",height:35,allowBlank:false,emptyText:"请仅输入街道地址，无须重复输入省市等地区信息",itemCls:"required",width:400},{xtype:"numberfield",name:"postal_code",width:70,minLength:6,maxLength:6,fieldLabel:"邮编"},{xtype:"fieldset",title:"收货联系电话*(需至少输入一个)",layout:"column",labelWidth:40,autoHeight:true,items:[{layout:"form",width:240,border:false,items:{xtype:"numberfield",name:"mobile",minLength:11,maxLength:11,fieldLabel:"手机",msgTarget:"under",validationDelay:500}},{layout:"form",columnWidth:1,border:false,items:{xtype:"textfield",name:"phone",fieldLabel:"电话",emptyText:"格式:区号-电话*分机",minLength:8,vtype:"phone",msgTarget:"under",validationDelay:500}}]}],plugins:new Ext.ux.plugins.InfoPlugin()});Ext.apply(this,A);Ext.app.AddressForm.superclass.constructor.call(this)};Ext.extend(Ext.app.AddressForm,Ext.form.FormPanel,{isValid:function(){var A=this.getForm();if(!A.isValid()){return false}if(!A.findField("phone").getValue()&&!A.findField("mobile").getValue()){A.markInvalid({mobile:"必须输入手机或电话",phone:"必须输入手机或电话"});return false}return true}});Ext.app.AddressGrid=function(B){Ext.apply(this,B);var A=[new Ext.grid.RowNumberer(),new Ext.grid.CheckboxSelectionModel({singleSelect:true}),{header:"收货人",width:100,dataIndex:"party_name"},{id:"address-col",header:"地址",width:250,dataIndex:"street",renderer:function(E,F,D){return Ext.app.Region.getRegionName(D.data.region_code)+D.data.street}},{header:"邮编",width:80,dataIndex:"postal_code"},{header:"手机",width:100,dataIndex:"mobile"},{header:"电话",width:100,dataIndex:"phone"}];if(this.actions){for(var C=0;C<this.actions.length;C++){A.push(this.actions[C])}}this.cm=new Ext.grid.ColumnModel(A);Ext.app.AddressGrid.superclass.constructor.call(this)};Ext.extend(Ext.app.AddressGrid,Ext.grid.GridPanel,{stripeRows:true,enableColumnMove:false,trackMouseOver:true,autoExpandColumn:"address-col"});Ext.onReady(function(){Ext.QuickTips.init()});