/*
 * YellowPages (NCE Subsea Directory)
 * Copyright(c) 2008-2009, MaritimeColours as.
 * 
 * Developed by Stefan Bruvik.
 */


Ext.ns('Ext.ux.grid');Ext.ux.grid.RowActions=function(config){Ext.apply(this,config);this.addEvents('beforeaction','action','beforegroupaction','groupaction');Ext.ux.grid.RowActions.superclass.constructor.call(this);};Ext.extend(Ext.ux.grid.RowActions,Ext.util.Observable,{actionEvent:'click',autoWidth:true,header:'',menuDisabled:true,sortable:false,tplGroup:'<tpl for="actions">'
+'<div class="ux-grow-action-item<tpl if="\'right\'===align"> ux-action-right</tpl> '
+'{cls}" style="{style}" qtip="{qtip}">{text}</div>'
+'</tpl>',tplRow:'<div class="ux-row-action">'
+'<tpl for="actions">'
+'<div class="ux-row-action-item {cls} <tpl if="text">'
+'ux-row-action-text</tpl>" style="{hide}{style}" qtip="{qtip}">'
+'<tpl if="text"><span qtip="{qtip}">{text}</span></tpl></div>'
+'</tpl>'
+'</div>',widthIntercept:4,widthSlope:21,init:function(grid){this.grid=grid;if(!this.tpl){this.tpl=this.processActions(this.actions);}
if(this.autoWidth){this.width=this.widthSlope*this.actions.length+this.widthIntercept;this.fixed=true;}
var view=grid.getView();var cfg={scope:this};cfg[this.actionEvent]=this.onClick;grid.on({render:{scope:this,fn:function(){view.mainBody.on(cfg);}}});if(!this.renderer){this.renderer=function(value,cell,record,row,col,store){cell.css+=(cell.css?' ':'')+'ux-row-action-cell';return this.tpl.apply(this.getData(value,cell,record,row,col,store));}.createDelegate(this);}
if(view.groupTextTpl&&this.groupActions){view.interceptMouse=view.interceptMouse.createInterceptor(function(e){if(e.getTarget('.ux-grow-action-item')){return false;}});view.groupTextTpl='<div class="ux-grow-action-text">'+view.groupTextTpl+'</div>'
+this.processActions(this.groupActions,this.tplGroup).apply();}},getData:function(value,cell,record,row,col,store){return record.data||{};},processActions:function(actions,template){var acts=[];Ext.each(actions,function(a,i){if(a.iconCls&&'function'===typeof(a.callback||a.cb)){this.callbacks=this.callbacks||{};this.callbacks[a.iconCls]=a.callback||a.cb;}
var o={cls:a.iconIndex?'{'+a.iconIndex+'}':(a.iconCls?a.iconCls:''),qtip:a.qtipIndex?'{'+a.qtipIndex+'}':(a.tooltip||a.qtip?a.tooltip||a.qtip:''),text:a.textIndex?'{'+a.textIndex+'}':(a.text?a.text:''),hide:a.hideIndex?'<tpl if="'+a.hideIndex+'">visibility:hidden;</tpl>':(a.hide?'visibility:hidden;':''),align:a.align||'right',style:a.style?a.style:''};acts.push(o);},this);var xt=new Ext.XTemplate(template||this.tplRow);return new Ext.XTemplate(xt.apply({actions:acts}));},onClick:function(e,target){var view=this.grid.getView();var action=false;var row=e.getTarget('.x-grid3-row');var col=view.findCellIndex(target.parentNode.parentNode);var t=e.getTarget('.ux-row-action-item');if(t){action=t.className.replace(/ux-row-action-item /,'');if(action){action=action.replace(/ ux-row-action-text/,'');action=action.trim();}}
if(false!==row&&false!==col&&false!==action){var record=this.grid.store.getAt(row.rowIndex);if(this.callbacks&&'function'===typeof this.callbacks[action]){this.callbacks[action](this.grid,record,action,row.rowIndex,col);}
if(true!==this.eventsSuspended&&false===this.fireEvent('beforeaction',this.grid,record,action,row.rowIndex,col)){return;}
else if(true!==this.eventsSuspended){this.fireEvent('action',this.grid,record,action,row.rowIndex,col);}}
t=e.getTarget('.ux-grow-action-item');if(t){var group=view.findGroup(target);var groupId=group?group.id.replace(/ext-gen[0-9]+-gp-/,''):null;var records;if(groupId){var re=new RegExp(groupId);records=this.grid.store.queryBy(function(r){return r._groupId.match(re);});records=records?records.items:[];}
action=t.className.replace(/ux-grow-action-item (ux-action-right )*/,'');if('function'===typeof this.callbacks[action]){this.callbacks[action](this.grid,records,action,groupId);}
if(true!==this.eventsSuspended&&false===this.fireEvent('beforegroupaction',this.grid,records,action,groupId)){return false;}
this.fireEvent('groupaction',this.grid,records,action,groupId);}}});Ext.reg('rowactions',Ext.ux.grid.RowActions);

YellowPages.CategoryComboBox=Ext.extend(Ext.form.ComboBox,{categoryStore:new Ext.data.Store({reader:new Ext.data.JsonReader({id:'id'},[{name:'id'},{name:'name'}])}),initComponent:function(){Ext.apply(this,{fieldLabel:'Category',hideLabel:true,hiddenName:'data[Company][category_id]',store:this.categoryStore,valueField:'id',displayField:'name',typeAhead:false,triggerAction:'all',mode:'local',emptyText:'Please select a category...',selectOnFocus:true,allowBlank:true,editable:false,forceSelection:false});YellowPages.CategoryComboBox.superclass.initComponent.apply(this,arguments);this.on({select:function(combo,record,index){var subcatCombo=Ext.getCmp('subcategory_id');subcatCombo.enable();subcatCombo.clearValue();subcatCombo.store.filter('category_id',combo.getValue());}});}});Ext.reg('yp_category_combo',YellowPages.CategoryComboBox);

YellowPages.SubcategoryComboBox=Ext.extend(Ext.form.ComboBox,{subcategoryStore:new Ext.data.Store({reader:new Ext.data.JsonReader({id:'id'},[{name:'id'},{name:'category_id'},{name:'name'},{name:'category_name'}])}),initComponent:function(){Ext.apply(this,{fieldLabel:'Subcategory',hideLabel:true,hiddenName:'data[Company][subcategory_id]',store:this.subcategoryStore,valueField:'id',disabled:true,displayField:'name',typeAhead:false,triggerAction:'all',mode:'local',emptyText:'Please select a subcategory...',selectOnFocus:true,allowBlank:true,editable:false,forceSelection:false,lastQuery:''});YellowPages.SubcategoryComboBox.superclass.initComponent.apply(this,arguments);}});Ext.reg('yp_subcategory_combo',YellowPages.SubcategoryComboBox);

YellowPages.SubcategoryGridPanel=Ext.extend(Ext.grid.GridPanel,{selectedSubcategoriesStore:new Ext.data.Store({reader:new Ext.data.JsonReader({id:'id'},[{name:'id'},{name:'category_id'},{name:'name'},{name:'category_name'},{name:'action_remove',type:'string'}])}),initComponent:function(){this.iconAction=new Ext.ux.grid.RowActions({header:'&nbsp;',autoWidth:false,width:80,actions:[{iconCls:'icon-delete',tooltip:'Remove',text:'Remove'}]});Ext.apply(this,{id:'subcatgrid',xtype:'grid',cls:'list-table',store:this.selectedSubcategoriesStore,enableHdMenu:false,enableColumnResize:false,enableColumnMove:false,stripeRows:true,plugins:[this.iconAction],columns:[{header:'Category',dataIndex:'category_name',sortable:true,width:269},{header:'Subcategory',dataIndex:'name',sortable:true,width:269},this.iconAction],viewConfig:{forceFit:true,emptyText:'No categories have yet been added. To start assigning categories, select a main category from the left drop-down menu above, then select a subcategory from the right drop-down menu. Complete by clicking the Add button.'},sm:new Ext.grid.RowSelectionModel({singleSelect:true}),width:538,height:180,frame:false,border:true,style:'padding-bottom: 5px;',tbar:[{xtype:'tbspacer'},new YellowPages.CategoryComboBox({id:'category_id',width:170}),{xtype:'tbspacer'},new YellowPages.SubcategoryComboBox({id:'subcategory_id',width:170,listeners:{select:function(combo,record,index){this.selectedSubcategory=record;var addButton=Ext.getCmp('addButton');addButton.setDisabled(false);},scope:this}}),{xtype:'tbfill'},{xtype:'button',text:'Add',id:'addButton',cls:'x-btn-text-icon',iconCls:'sprite-add',scope:this,disabled:true,handler:function(button){var grid=Ext.getCmp('subcatgrid');var SubCategory=this.selectedSubcategory;var existing=grid.store.getById(SubCategory.data.id);if(!existing){grid.store.add(SubCategory);}
Ext.getCmp('subcategory_id').clearValue();button.setDisabled(true);}}]});YellowPages.SubcategoryGridPanel.superclass.initComponent.apply(this,arguments);this.iconAction.on({action:function(grid,record,action,row,col){grid.store.remove(record);}});this.selectedSubcategoriesStore.on({add:function(store,records,index){var formPanel=Ext.getCmp('companyFormPanel');formPanel.add({xtype:'hidden',name:'data[Subcategory][Subcategory][]',inputValue:records[0].data.id,value:records[0].data.id});formPanel.doLayout();},load:function(store,records,options){var formPanel=Ext.getCmp('companyFormPanel');Ext.each(records,function(item){formPanel.add({xtype:'hidden',name:'data[Subcategory][Subcategory][]',inputValue:item.data.id,value:item.data.id});});formPanel.doLayout();},remove:function(store,record,index){var formPanel=Ext.getCmp('companyFormPanel');var field=formPanel.find('value',record.data.id);Ext.each(field,function(item){if(item.getXType()==='hidden'){formPanel.remove(item);}});formPanel.doLayout();}});}});Ext.reg('yp_subcategory_grid',YellowPages.SubcategoryGridPanel);

YellowPages.CompanyFormPanel=Ext.extend(Ext.form.FormPanel,{standardSubmit:!YellowPages.currentID,selectedCountry:{data:{name:''}},selectedSubcategory:{data:{id:0,name:'',category_id:0,category_name:''}},countryStore:new Ext.data.Store({reader:new Ext.data.JsonReader({id:'id'},[{name:'id'},{name:'name'}])}),statusStore:new Ext.data.SimpleStore({fields:['status','name'],data:[['none','None'],['member','Member of NCE Subsea'],['partner','Partner of NCE Subsea']]}),initComponent:function(){Ext.apply(this,{border:false,url:YellowPages.baseUrl+'/companies/addEdit/'+YellowPages.currentID,fileUpload:true,standardSubmit:this.standardSubmit,border:false,bodyStyle:'padding: 20px',buttonAlign:'center',items:[{border:false,layout:'table',layoutConfig:{columns:3,width:'100%'},items:[{width:280,autoHeight:true,autoWidth:false,layout:'form',defaultType:'textfield',border:false,labelAlign:'top',items:[{name:'data[Company][id]',xtype:'hidden',id:'id'},{name:'data[Company][name]',fieldLabel:'Company Name (*)',id:'name',allowBlank:false},{name:'data[Company][address]',fieldLabel:'Address',id:'address',xtype:'textarea',width:'250px',height:'70px'},new Ext.form.ComboBox({id:'country_id',fieldLabel:'Country (*)',hiddenName:'data[Company][country_id]',store:this.countryStore,valueField:'id',displayField:'name',typeAhead:true,triggerAction:'all',mode:'local',emptyText:'Select a country...',allowBlank:false,loadingText:'Loading countries...',forceSelection:true,style:'width: 234px'}),new Ext.form.ComboBox({id:'status',fieldLabel:'Status',hiddenName:'data[Company][status]',store:this.statusStore,valueField:'status',displayField:'name',typeAhead:false,triggerAction:'all',mode:'local',emptyText:'None',allowBlank:true,forceSelection:false,style:'width: 234px'}),{name:'data[Company][employees]',fieldLabel:'Number of employees',id:'employees',style:'text-align: right',width:120}]},{width:280,height:294,layout:'form',defaultType:'textfield',border:false,labelAlign:'top',autoWidth:false,items:[{name:'logo',fieldLabel:'Logo',id:'logo',inputType:'file'},{name:'data[Company][web]',fieldLabel:'Website (*)',id:'web',allowBlank:false,vtype:'url2'},{name:'data[Company][email]',fieldLabel:'Company E-mail',id:'email',vtype:'email'},{layout:'column',xtype:'panel',border:false,items:[{columnWidth:.5,border:false,layout:'form',labelAlign:'top',items:[{xtype:'textfield',id:'phone',fieldLabel:'Company Phone',width:118,name:'data[Company][phone]'}]},{columnWidth:.5,border:false,layout:'form',labelAlign:'top',items:[{xtype:'textfield',id:'fax',fieldLabel:'Company Fax',width:118,name:'data[Company][fax]'}]}]},{name:'data[Company][contact]',fieldLabel:'Contact Person',id:'contact'},{layout:'column',xtype:'panel',border:false,items:[{columnWidth:.6,border:false,layout:'form',labelAlign:'top',items:[{xtype:'textfield',id:'contact_email',fieldLabel:'Contact E-mail',width:148,name:'data[Company][contact_email]',vtype:'email'}]},{columnWidth:.4,border:false,layout:'form',labelAlign:'top',items:[{xtype:'textfield',id:'contact_phone',fieldLabel:'Contact Phone',width:88,name:'data[Company][contact_phone]'}]}]}]},{border:false,id:'logoPlaceholder',html:'',width:280},{colspan:2,layout:'form',defaultType:'textfield',border:false,labelAlign:'top',items:[{xtype:'htmleditor',name:'data[Company][description]',fieldLabel:'Company information, products and services',id:'description',autoWidth:false,width:'536px',height:'150px',enableColors:false,enableFont:false,enableFontSize:false}]},{layout:'form',border:false,html:''},{colspan:2,layout:'form',border:false,labelAlign:'top',items:[{id:'subcatgrid',xtype:'yp_subcategory_grid'}]},{layout:'form',border:false,html:''},{colspan:2,layout:'form',border:false,labelAlign:'top',items:[{layout:'column',xtype:'panel',border:false,items:[{columnWidth:.5,border:false,layout:'form',labelAlign:'top',items:[{xtype:'textfield',id:'submitted_by',fieldLabel:'Submitted by (e-mail) (*)',name:'data[Company][submitted_by]',vtype:'email',allowBlank:false}]},{columnWidth:.5,border:false,layout:'form',labelAlign:'top',items:[{xtype:'textarea',id:'submitted_message',fieldLabel:'Message to administrator',name:'data[Company][submitted_message]',width:258}]}]}]},{layout:'form',border:false,html:''},{colspan:3,layout:'table',layoutConfig:{columns:2},border:false,labelAlign:'top',items:[{id:'save-button',xtype:'button',text:'Save',scope:this,tooltip:'Saves the Company',handler:this.onSubmitClick,style:'padding-top: 10px; padding-right: 10px;'},{id:'confirmandsave',xtype:'button',cls:'x-hidden',text:'Save and confirm',scope:this,tooltip:'Saves the Company and sets its status to confirmed',handler:this.onSubmitClick.createDelegate(this,['confirm'],true),style:'padding-top: 10px'}]}]}]});YellowPages.CompanyFormPanel.superclass.initComponent.apply(this,arguments);var showConfirmButton=(YellowPages.namedParams.option&&YellowPages.namedParams.option==='confirmed')?1:0;if(showConfirmButton){Ext.getCmp('confirmandsave').removeClass('x-hidden');}
Ext.getCmp('description').on({'render':function(){this.iframe.id='editor-iframe'
var editorIframe=Ext.get('editor-iframe');editorIframe.setWidth(536);}});var deleteButton=Ext.get('delete-company');if(deleteButton){deleteButton.on({'click':this.buttonDeleteClick.createDelegate(this)});}},buttonDeleteClick:function(event){event.preventDefault();var hardDelete=(YellowPages.namedParams.option&&YellowPages.namedParams.option==='deleted')?1:0;var msg=String.format('Do you really want to {0} delete this Company?',(hardDelete?'permanently':''));Ext.Msg.confirm('Delete?',msg,function(answer){if(answer==='yes'){Ext.Msg.wait(String.format('{0} Deleting Company...',(hardDelete?'Permanently':'')),'Please wait');YellowPages.main.redirect('companies','delete',YellowPages.currentID,hardDelete);}},this);},onSubmitClick:function(button,event,confirm){var confirm=confirm?1:0;this.onSuccess=function(form,action){var loc=window.location.toString();if(loc.search('submit')!==-1){window.location=YellowPages.baseWebUrl+'/companies/thankYouVeryMuch';return;}
var msgTitle='Updated';if(YellowPages.currentID==0&&YellowPages.main){YellowPages.main.updateCount('companies_index',1);msgTitle='Saved';}
YellowPages.currentID=action.result.data.id;Ext.getCmp('id').setValue(YellowPages.currentID);var fileName=action.result.data.logo_filename,html='(No logo uploaded)';var beforeDate=new Date('1/1/2000 00:00:00');var milli=beforeDate.getElapsed();if(fileName){html='<img src="'+YellowPages.baseWebUrl+'/files/'+fileName+'?_t='+milli+'" />';}
var logoPanel=Ext.getCmp('logoPanel');var logoPlaceholder=Ext.getCmp('logoPlaceholder');if(logoPanel){logoPlaceholder.remove(logoPanel);}
logoPlaceholder.insert(0,{id:'logoPanel',xtype:'panel',layout:'fit',width:450,height:240,autoScroll:true,border:false,html:html});Ext.getCmp('companyFormPanel').doLayout();if(confirm){YellowPages.main.updateCount('companies_confirmed',-1);YellowPages.main.updateCount('companies_index',1);Ext.getCmp('confirmandsave').setVisible(false);Ext.get('submenu_companies_confirmed').removeClass('submenu-selected');Ext.get('submenu_companies_index').addClass('submenu-selected');YellowPages.namedParams.option='';}
YellowPages.InfoBox.show({title:msgTitle,message:action.result.message});}
this.onFailure=function(form,action){if(action.result&&action.result.message){YellowPages.InfoBox.show({title:'Error',message:action.result.message,type:'error'});}else{YellowPages.InfoBox.show({title:'Error',message:'Please provide all required fields',type:'error'});}}
var form=this.getForm();this.getForm().submit({url:YellowPages.baseUrl+'/companies/addEdit/'+YellowPages.currentID+'/'+YellowPages.ticket,success:this.onSuccess,failure:this.onFailure,waitMsg:'Saving...',scope:this,params:{'form-save':true,'confirm':confirm}});}});Ext.reg('yp_company_form',YellowPages.CompanyFormPanel);

YellowPages.companiesSubmit=function(){return{init:function(){var hidden=!YellowPages.currentID;this.mainPanel=new Ext.Panel({id:'mainPanel',renderTo:'main',layout:'table',autoWidth:true,autoHeight:true,extraCls:'main_panel',layoutConfig:{columns:1},border:true,items:[{id:'companyFormPanel',xtype:'yp_company_form',autoLoad:false,autoHeight:true,width:927}]});var companyFormPanel=Ext.getCmp('companyFormPanel');Ext.Ajax.request({scope:this,url:YellowPages.baseUrl+'/companies/addEdit/'+YellowPages.currentID+'/'+YellowPages.ticket,success:function(response,options){var json=Ext.decode(response.responseText);Ext.getCmp('country_id').store.loadData(json.countries);Ext.getCmp('category_id').store.loadData(json.categories);Ext.getCmp('subcategory_id').store.loadData(json.subcategories);if(!json.add){Ext.getCmp('companyFormPanel').getForm().setValues(json.data);Ext.getCmp('subcatgrid').store.loadData(json.selected);var fileName=json.data.logo_filename,html='(No logo uploaded)';if(fileName){html='<img src="'+YellowPages.baseWebUrl+'/files/'+fileName+'" />';}
Ext.getCmp('logoPlaceholder').insert(0,{id:'logoPanel',xtype:'panel',layout:'fit',width:450,height:240,autoScroll:true,border:false,html:html});Ext.getCmp('companyFormPanel').doLayout();}}});}};}();Ext.onReady(YellowPages.companiesSubmit.init,YellowPages.companiesSubmit);
