﻿
Ext.extend(EditForm=function(config)
{Ext.QuickTips.init();var wrapper=Ext.get('form-wrapper');this.loadInitialState(wrapper);this.backTo=this.initialState.backTo;this.store=this.getStore();config=config||{};this.labelWidth=config.labelWidth||130;this.form=new Ext.form.FormPanel(Ext.apply({renderTo:wrapper,bodyStyle:'padding-top:10px',border:false,labelWidth:this.labelWidth,items:this.processFormFields(this.getFieldConfig())},config));Ext.each(this.store.getRange(),function(record)
{this.getSchemaColumn(record.get('table'),record.get('column')).record=record;},this);if(!this.isNewItem())
{this.loadExistingItem();}},Ext.util.Observable,{saveIcon:'/fp/shared/images/ic_save.gif',spinnerIcon:'/fp/shared/images/fetching.gif',rpcObj:null,saveRpc:null,isNewItem:function(){return true;},getFieldConfig:Ext.emptyFn,loadInitialState:function(wrapper)
{this.initialState=JSON.parse(wrapper.dom.attributes.getNamedItem('intial-state').value);this.loadSchema();wrapper.dom.attributes.removeNamedItem('intial-state');},loadSchema:function()
{this.schema=new NPSL.Cms.CmsSchema(this.initialState.schema);},goBackTo:function()
{this.backTo?xsrf_nav(this.backTo):(Ext.isIE?history.go('-1'):history.back());},loadExistingItem:function()
{Ext.each(this.store.getRange(),function(rec)
{var value=this.initialState.itemDetails[rec.get('table')][rec.get('column')];rec.set('value',value);this.commitRecordToField(rec);},this);},getStore:function()
{return new Ext.data.Store({proxy:new Ext.data.MemoryProxy({}),reader:new Ext.data.JsonReader({root:'data'},Ext.data.Record.create([{name:'table'},{name:'column'},{name:'editable',defaultValue:true},{name:'requiredForSave',defaultValue:false},{name:'value'}])),listeners:{update:this.recordUpdated,scope:this}});},processFormFields:function(layout)
{var fields=[];Ext.each(layout,function(tableLayout)
{Ext.each(tableLayout.columns,function(colLayout)
{if(colLayout.name)
{this.store.loadData({data:[{table:tableLayout.table,column:colLayout.name,requiredForSave:colLayout.requiredForSave}]},true);var schemaCol=this.getSchemaColumn(tableLayout.table,colLayout.name);var gfv=(schemaCol.type==='DATE')?'getCheckerDateFieldValue':'getCheckerFieldValue';var config=Ext.apply({checkGetter:this[gfv].createDelegate(this,[tableLayout.table],true)},colLayout.config);config.id=NPSL.Cms.Form.getFieldName(schemaCol);var field=NPSL.Cms.Form.createEditField(schemaCol,config);fields.push(field);if(schemaCol.precision==1&&schemaCol.type=='NUMBER')
{field.on({check:(function(field,value,tableName,columnName)
{this.updateFieldRecord(field,(value?1:0),null,tableName,columnName);}).createDelegate(this,[tableLayout.table,colLayout.name],true),scope:this});}
else if(schemaCol.colType==NPSL.Cms.ColType.Html)
{field.on({change:(function(field,tableName,columnName)
{this.updateFieldRecord(field,field.getValue(),null,tableName,columnName);}).createDelegate(this,[tableLayout.table,colLayout.name],true),scope:this});}
else
{field.on({change:this.updateFieldRecord.createDelegate(this,[tableLayout.table,colLayout.name],true),scope:this});}
if(colLayout.validator)
{field.on({valid:colLayout.validator,scope:this});}
if((schemaCol.colType===NPSL.Cms.ColType.Enumerated||schemaCol.colType===NPSL.Cms.ColType.SearchEnum)&&colLayout.subFields)
{field.doShowSubFields=colLayout.doShowSubFields;field.doShowEditMsg=colLayout.doShowEditMsg;field.subFields=new Ext.Panel({startEditMsg:colLayout.subFields.startEditMsg,cancelEditMsg:colLayout.subFields.cancelEditMsg,border:false,layout:'form',style:'margin-top:4px;',hidden:true,items:this.processFormFields(colLayout.subFields.fields)});field.onItemSelect=colLayout.onItemSelect||Ext.emptyFn;if(schemaCol.colType===NPSL.Cms.ColType.Enumerated)
{field.on({select:function(field,record,value)
{field.fireEvent('change',field,value,null);},scope:this});}
field.on({change:this.onFieldChange,scope:this});if(colLayout.firstSelect)
{field.on({change:colLayout.firstSelect,scope:this,single:true});}
field.subFields.editLabel=new Ext.BoxComponent({style:'margin-left:136px; padding-bottom:3px;',hidden:this.isNewItem(),autoEl:{tag:'div',children:[{tag:'a',href:'#',html:colLayout.subFields.startEditMsg}]},listeners:{render:function(cmp)
{cmp.linkEl=Ext.get(cmp.el.dom.firstChild);new Ext.util.ClickRepeater(cmp.linkEl,{preventDefault:true,stopDefault:true,listeners:{mouseup:this.toggleSubFields.createDelegate(this,[cmp.linkEl,field.subFields],false),scope:this}});},scope:this}});fields.push(field.subFields.editLabel);fields.push(field.subFields);}}
else if(colLayout.html||colLayout.tag)
{var listeners=colLayout.listeners;delete colLayout.listeners;fields.push(new Ext.BoxComponent({listeners:listeners,autoEl:Ext.apply({tag:'div'},colLayout)}));}
else if(colLayout.tpl)
{fields.push(new Ext.DataView(colLayout));}},this);},this);return fields;},getCheckerDateFieldValue:function(columnName,tableName)
{var d=this.getCheckerFieldValue(columnName,tableName);return!d?0:d.valueOf();},getCheckerFieldValue:function(columnName,tableName)
{return this.getField(tableName,columnName).getValue();},makeFieldNullable:function(tableName,columnName)
{this.getField(tableName,columnName).allowBlank=true;},saveChanges:function()
{if(this.hasInvalidFields())
{Credit360.Page.showMessage(__tr('Please fix the errors on the form'));return;}
var modifiedRecords=this.store.getModifiedRecords();if(!modifiedRecords.length)
{Credit360.Page.showMessage(__tr('No changes made'));return;}
var requiredRecords=[];Ext.each(this.store.getRange(),function(rec)
{if(rec.get('requiredForSave'))
{requiredRecords.push(rec);}},this);var saveObj=this.buildSaveObj([].concat(modifiedRecords).concat(requiredRecords));var saveBtn=Ext.getCmp('save-button');this.setButtonEnable(saveBtn,false,this.spinnerIcon);this.beforeSave();this.rpcObj[this.saveRpc](saveObj,{success:this.onSaveSuccess.createDelegate(this,[[].concat(modifiedRecords)],true),error:this.onSaveError,failure:Credit360.Page.showMessage.createDelegate(Credit360.Page,[__tr('Unable to save - please try again')],false),andFinally:this.onAndFinally,scope:this});},beforeSave:Ext.emptyFn,setButtonEnable:function(button,enable,icon)
{if(icon)
{button.el.child(button.buttonSelector).setStyle('background-image','url('+icon+')');}
button[enable?'enable':'disable']();},hasInvalidFields:function()
{var invalidFields=false;Ext.each(this.store.getRange(),function(rec)
{if(rec.get('editable'))
{var result=this.getField(rec.get('table'),rec.get('column')).validate();invalidFields=!result||invalidFields;}},this);return invalidFields;},onAndFinally:function()
{var saveBtn=Ext.getCmp('save-button');this.setButtonEnable(saveBtn,true,this.saveIcon);},onSaveSuccess:function(result,modifiedRecords)
{Ext.each(modifiedRecords,function(rec)
{rec.commit();},this);Credit360.Page.showMessage(__tr('Saved'));},addToSearchComboStore:function(field,value,description)
{var data={};data[field.valueField]=value;data[field.displayField]=description;field.store.loadData({data:[data]},true);},commitRecordToField:function(rec)
{this.commitToField=true;rec.commit();this.commitToField=false;},onSaveError:function(msg,isClient,errObj)
{alert(msg);},buildSaveObj:function(records)
{var obj={};Ext.each(records,function(rec)
{var t=rec.get('table');obj[t]=obj[t]||{};obj[t][rec.get('column')]=rec.get('value')},this);return obj;},updateFieldRecord:function(field,newValue,oldValue,tableName,columnName)
{if(this.commitToField){return;}
this.getSchemaColumn(tableName,columnName).record.set('value',newValue);},onFieldChange:function(field,newValue,oldValue)
{var ssF=(typeof field.doShowSubFields==='function'&&field.doShowSubFields(newValue));if(ssF)
{field.subFields.show();}
else
{this.hideSubFields(field.subFields.editLabel.linkEl,field.subFields);}
field.onItemSelect(field,newValue,ssF,field.subFields);var ssEM=(typeof field.doShowEditMsg==='function'&&field.doShowEditMsg(newValue));if(ssEM)
{field.subFields.editLabel.show();}
else
{field.subFields.editLabel.hide();}},toggleSubFields:function(linkEl,subFields)
{subFields.isVisible()?this.hideSubFields(linkEl,subFields):this.showSubFields(linkEl,subFields);},showSubFields:function(linkEl,subFields)
{linkEl.dom.innerHTML=subFields.cancelEditMsg;subFields.show();},hideSubFields:function(linkEl,subFields)
{linkEl.dom.innerHTML=subFields.startEditMsg;subFields.hide();this.rollbackFieldRecords(subFields);},clearFieldRecords:function(subFields)
{Ext.each(subFields.items.items,function(item)
{if(item.col)
{var rec=this.getSchemaColumn(item.col.table.name,item.col.name).record;rec.set('value',null);this.commitRecordToField(rec);}},this);},rollbackFieldRecords:function(subFields)
{Ext.each(subFields.items.items,function(item)
{if(item.col)
{this.getSchemaColumn(item.col.table.name,item.col.name).record.reject();}},this);},recordUpdated:function(store,record,operation)
{if(operation===Ext.data.Record.EDIT)
{}
else if(operation===Ext.data.Record.REJECT)
{if(record.get('editable'))
{var field=this.getField(record.get('table'),record.get('column'));if(field)
{field.setValue(record.get('value'));}}}
else if(operation===Ext.data.Record.COMMIT)
{if(this.commitToField)
{var field=this.getField(record.get('table'),record.get('column'));if(field)
{field.setValue(record.get('value'));}}}},getField:function(table,columnName)
{var col=this.getSchemaColumn(table,columnName);return Ext.getCmp(String.format('_cms_{0}_{1}',col.table.sid,col.sid));},getSchemaColumn:function(tableName,columnName)
{return this.schema.tablesByNameLoose[tableName.toLowerCase()].columnsByName[columnName.toUpperCase()];},end_of_module:true});