﻿
__trGroup('CMS Form');Ext.override(Ext.QuickTip,{showAt:function(xy){var t=this.activeTarget;if(t){if(!this.rendered){this.render(Ext.getBody());this.activeTarget=t;}
if(t.width){this.setWidth(t.width);this.body.setWidth(this.adjustBodyWidth(t.width-this.getFrameWidth()));this.measureWidth=false;}else{this.measureWidth=true;}
this.setTitle(t.title||'');this.body.update(t.text);this.autoHide=t.autoHide;this.dismissDelay=typeof(t.dismissDelay!=="undefined")?t.dismissDelay:this.dismissDelay;if(this.lastCls){this.el.removeClass(this.lastCls);delete this.lastCls;}
if(t.cls){this.el.addClass(t.cls);this.lastCls=t.cls;}
if(t.align){xy=this.el.getAlignToXY(t.el,t.align);this.constrainPosition=false;}else{this.constrainPosition=true;}}
Ext.QuickTip.superclass.showAt.call(this,xy);}});Ext.override(Ext.layout.FormLayout,{renderItem:function(c,position,target){if(c&&!c.rendered&&c.isFormField&&c.inputType!='hidden'){var args=[c.id,c.fieldLabel,c.labelStyle||this.labelStyle||'',this.elementStyle||'',typeof c.labelSeparator=='undefined'?this.labelSeparator:c.labelSeparator,(c.itemCls||this.container.itemCls||'')+(c.hideLabel?' x-hide-label':''),c.clearCls||'x-form-clear-left'];if(typeof position=='number'){position=target.dom.childNodes[position]||null;}
if(position){c.formItem=this.fieldTpl.insertBefore(position,args,true);}else{c.formItem=this.fieldTpl.append(target,args,true);}
c.actionMode='formItem';c.render('x-form-el-'+c.id);c.container=c.formItem;c.actionMode='container';}else{Ext.layout.FormLayout.superclass.renderItem.apply(this,arguments);}}});Ext.override(Ext.form.TriggerField,{actionMode:'wrap',onShow:Ext.form.TriggerField.superclass.onShow,onHide:Ext.form.TriggerField.superclass.onHide});Ext.override(Ext.form.Checkbox,{actionMode:'wrap',getActionEl:Ext.form.Checkbox.superclass.getActionEl});Ext.override(Ext.form.HtmlEditor,{actionMode:'wrap'});Ext.override(Ext.form.RadioGroup,{afterRender:function(){var group=this;this.items.each(function(field){field.on("check",function(self,checked){if(checked){group.fireEvent('change',group,self.getRawValue());}});});Ext.form.RadioGroup.superclass.afterRender.call(this)}});if(Ext.isIE8){Ext.override(Ext.form.Radio,{adjustWidth:Ext.emptyFn});}
Ext.override(Ext.DataView,{onRemove:function(ds,record,index){if(ds.getCount()==0){this.refresh();}else{this.deselect(index);this.all.removeElement(index,true);this.updateIndexes(index);}}});Ext.override(Ext.form.NumberField,{setValue:function(v){v=typeof v=='number'?v:parseFloat(String(v).replace(this.decimalSeparator,"."));v=this.fixPrecision(v);v=isNaN(v)?'':String(v).replace(".",this.decimalSeparator);Ext.form.NumberField.superclass.setValue.call(this,v);},fixPrecision:function(value){var nan=isNaN(value);if(!this.allowDecimals){return nan?'':parseFloat(parseFloat(value).toFixed(0));}
if(this.decimalPrecision==-1||nan||!value){return nan?'':value;}
return parseFloat(parseFloat(value).toFixed(this.decimalPrecision));}});Ext.namespace('NPSL','NPSL.Cms','NPSL.Cms.Form','Ext.ux');var g_schema;(function(){var Cms=NPSL.Cms,Form=Cms.Form,ColType=Cms.ColType,MimeTypes=Cms.MimeTypes;Form.getInheritableAttribute=function(cmp,attrib){var v=cmp[attrib];var c=cmp.ownerCt;while(!v&&c){v=c[attrib];c=c.ownerCt;}
return v;};Form.LayoutMode=false;Ext.ux.ComboBox=function(config){Ext.ux.ComboBox.superclass.constructor.call(this,config);}
Ext.extend(Ext.ux.ComboBox,Ext.form.ComboBox,{setValues:function(v,text){this.lastSelectionText=text;if(this.hiddenField){this.hiddenField.value=v;}
Ext.form.ComboBox.superclass.setValue.call(this,text);this.value=v;}});Ext.ux.Hidden=function(config){Ext.ux.Hidden.superclass.constructor.call(this,config);}
Ext.extend(Ext.ux.Hidden,Ext.form.Hidden,{setValue:function(v){Ext.ux.Hidden.superclass.setValue.call(this,v);var v=this.getValue();if(String(v)!==String(this.startValue)){this.fireEvent('change',this,v,this.startValue);}}});Form.FkPicker=function(config){Form.FkPicker.superclass.constructor.call(this,config);if(typeof(this.value)==="undefined"){this.value=null;}
this.addEvents("change");this.on("afterlayout",this.afterLayout,this);if(this.template){this.setTemplate(this.template);}}
Ext.extend(Form.FkPicker,Ext.Panel,{isFormField:true,invalidClass:'x-form-invalid-msg',blankText:__tr('This field is required'),invalidText:__tr('The value in this field is invalid'),msgTarget:'qtip',renderItem:function(tpl,values,tag){return Form.renderItemTemplate(this.col.table,tpl,values,tag);},setTemplate:function(tpl){this.template=new Ext.ux.DomTemplate({tpl:XML.Node.getDom(tpl),handlers:{replaceText:this.renderItem,replaceAttribute:this.renderItem,scope:this}});},renderValue:function(){if(!this.rendered){return;}
var descEl=this.childDescription.getEl();if(!this.value){descEl.dom.innerHTML=__tr('(choose)');return;}
if(this.template){var values={};values[this.fk.parent.columns[0].name]=this.value;this.template.overwrite(descEl,values);}else{descEl.dom.innerHTML="";descEl.dom.appendChild(document.createTextNode(this.value.value));}},afterLayout:function(){this.renderValue();},onRender:function(ct,pos){Form.FkPicker.superclass.onRender.call(this,ct,pos);this.childDescription=new Ext.BoxComponent({autoEl:{tag:"div"}});this.add(this.childDescription);var viewConfig={showExport:false,showFilterInitially:true,hideFilterOnSearch:true,showFilterSaveLoad:false,table:this.fk.parent.table,singleSelect:true};if(this.searchFormConfig){viewConfig.showFilterInline=this.searchFormConfig.filterInline;viewConfig.fields=this.searchFormConfig.fields;}
this.searchForm=new Form.CmsView(viewConfig);this.searchForm.on("selectionchange",function(view,selected){if(selected.getCount()!=0){var r=selected.get(0);var oldValue=this.value,value=r.get(this.fk.parent.columns[0].name);var data=[];var cols=this.fk.parent.table.columns;for(var i=0;i<cols.length;++i){data[i]=r.get(cols[i].name);}
this.value={value:value,parent:this.fk.parent.table.sid,data:data};this.renderValue();this.fireEvent("change",this,this.value,oldValue);}},this);if(!this.searchFormConfig||this.searchFormConfig.inline){this.add(this.searchForm);}else{this.searchWindow=new Ext.Window({el:Ext.get(document.body).createChild(),title:__tr('Choose item'),modal:true,width:700,height:400,closable:false,minWidth:300,minHeight:300,layout:'fit',items:[this.searchForm],bodyBorder:false,bodyStyle:'padding:5px;background:#fff;',buttons:[{iconCls:'tick-icon',text:__tr('Ok'),handler:function(){this.searchWindow.hide();},scope:this},{text:__tr('Cancel'),cls:'x-btn-text',handler:function(){this.searchWindow.hide();},scope:this}],keys:[{key:27,handler:function(){this.searchWindow.hide();},scope:this}]});this.add(new Ext.Button({cls:"x-btn-text",text:__tr('Choose...'),handler:function(){this.searchWindow.show();},scope:this}));}},getValue:function(){return this.value;},setValue:function(v){this.value=v;this.renderValue();},setRawValue:function(v){this.setValue();return this.value;},getRawValue:function(v){return this.value;},clearInvalid:function(){if(!this.rendered){return;}
this.childDescription.removeClass(this.invalidClass);},markInvalid:function(msg){if(!this.rendered||this.preventMark){return;}
var el=this.childDescription.getEl();el.addClass(this.invalidClass);msg=msg||this.invalidText;switch(this.msgTarget){case'qtip':el.dom.qtip=msg;el.dom.qclass='x-form-invalid-tip';if(Ext.QuickTips){Ext.QuickTips.enable();}
break;case'title':el.dom.title=msg;break;case'under':if(!this.errorEl){var elp=this.getErrorCt();if(!elp){el.dom.title=msg;break;}
this.errorEl=elp.createChild({cls:'x-form-invalid-msg'});this.errorEl.setWidth(elp.getWidth(true)-20);}
this.errorEl.update(msg);Ext.form.Field.msgFx[this.msgFx].show(this.errorEl,this);break;case'side':if(!this.errorIcon){var elp=this.getErrorCt();if(!elp){el.dom.title=msg;break;}
this.errorIcon=elp.createChild({cls:'x-form-invalid-icon'});}
this.alignErrorIcon();this.errorIcon.dom.qtip=msg;this.errorIcon.dom.qclass='x-form-invalid-tip';this.errorIcon.show();this.on('resize',this.alignErrorIcon,this);break;default:var t=Ext.getDom(this.msgTarget);t.innerHTML=msg;t.style.display=this.msgDisplay;break;}
this.fireEvent('invalid',this,msg);},validate:function(){if(this.disabled||this.validateValue(this.processValue(this.getRawValue()))){this.clearInvalid();return true;}
return false;},processValue:function(value){return value;},validateValue:function(){var value=this.getValue();if(!this.allowBlank&&!value){this.markInvalid(this.blankText);return false;}
return true;},isValid:function(preventMark){if(this.disabled){return true;}
var restore=this.preventMark;this.preventMark=preventMark===true;var v=this.validateValue(this.processValue(this.getRawValue()));this.preventMark=restore;return v;}});Form.CmsUploadField=function(config){config.url="/fp/cms/upload/upload.ashx";Form.CmsUploadField.superclass.constructor.call(this,config);this.ownerRecord.on({storeready:function(ownerRecord,store){store.on({update:this.recordUpdated,scope:this});},scope:this,single:true});}
Ext.extend(Form.CmsUploadField,Ext.ux.UploadButton,{blankText:__tr('Please choose a file'),filePresent:false,fileName:'',mimeType:'',tempUploadId:'',validationDelay:250,afterRender:function(){Form.CmsUploadField.superclass.afterRender.call(this);this.validationTask=new Ext.util.DelayedTask(this.validate,this);},onAddFile:function(bb){Form.CmsUploadField.superclass.onAddFile.call(this,bb);var info=this.getInfo();if(!this.hasFile()){Ext.Msg.show({title:__tr('Errors on form'),msg:__tr('Please choose a file to upload.'),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.ERROR});return;}
var cancelled=false;Ext.MessageBox.show({msg:__tr('Uploading the document, please wait...'),progressText:__tr('Uploading...'),width:300,progress:true,icon:'ext-mb-download',animEl:'mb7',buttons:Ext.MessageBox.CANCEL,fn:function(){cancelled=true;this.cancel();},scope:this});if(!this._handlerAttached){this.on('allfinished',function(o){if(cancelled)
return;var r=o.store.getAt(0);var err=r.get('error');if(err){Ext.MessageBox.show({title:__tr('Error'),msg:__tr('An error occurred uploading the document: {0}',err),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.ERROR});return;}
var info=this.getInfo();this.setValues(true,info.fileName,info.mimeType,info.tempUploadId);this.fireEvent("change",this,info.tempUploadId,info.fileName,info.mimeType);this.validationTask.delay(this.validationDelay);Ext.MessageBox.hide();},this);this._handlerAttached=true;}
this.upload();},recordUpdated:function(store,record,action){if(action!=Ext.data.Record.COMMIT){return;}
if(record.id!==this.ownerRecord.record.id){return;}
var info=this.getInfo();if(info){delete info.tempUploadId;}
this.setValue();},setValue:function(value){if(value){var fileName=this.ownerRecord.record.get(this.col.nameColumn.name);var fileMime=this.ownerRecord.record.get(this.col.mimeColumn.name);this.setLabel(fileName,this.getIconClass(fileMime,fileName))}},setValues:function(filePresent,fileName,fileMime,tempUploadId){this.filePresent=filePresent;this.fileName=fileName;this.fileMime=fileMime;this.tempUploadId=typeof(tempUploadId)!=="undefined"?tempUploadId:null;this.setLabel();},setLabel:function(text,fileClass){if(this.label&&this.filePresent){var newLabel=Ext.DomHelper.insertBefore(this.label,{tag:'div',style:'margin-bottom:2px',cls:this.getIconClass(this.fileMime,this.fileName),html:this.getDownloadLink(this.fileName)},true);this.label.dom.parentNode.removeChild(this.label.dom);this.label=newLabel;}},getDownloadLink:function(text){var retVal=text;if(!this.tempUploadId){retVal=Ext.DomHelper.markup({tag:'a',href:String.format('/fp/cms/upload/download.ashx?tab={0}&col={1}&id={2}',this.col.table.sid,this.col.sid,this.ownerRecord.record.get(this.col.table.pk.columns[0].name)),html:text});}else{retVal=Ext.DomHelper.markup({tag:'a',href:'/fp/cms/upload/downloadTemp.ashx?id='+this.tempUploadId,html:text});}
return retVal;},getIconClass:function(mimeType,fileName){if(!fileName){return'';}
var fileIconCls=MimeTypes.getIconClass(mimeType);if(fileIconCls==='file'&&fileName.lastIndexOf('.')>-1){fileIconCls=MimeTypes.getIconClass(fileName.substr(fileName.lastIndexOf('.')+1));}
return(fileIconCls)?fileIconCls='ux-upload-doc-'+fileIconCls:fileIconCls;},getInfo:function(){if(this.store.getCount()==0)
return;var r=this.store.getAt(0);var i=r.get("info");return i?i.info:null;},getValue:function(){return this.filePresent;},getFormFileName:function(){return this.fileName;},getMimeType:function(){return this.mimeType;},markInvalid:function(msg){if(this.label){this.label.addClass('x-form-invalid-msg');this.label.dom.innerHTML=Ext.util.Format.htmlEncode(msg);}},validate:function(){var value=this.getValue();if(!this.allowBlank&&!value){this.markInvalid(this.blankText);return false;}
var result=true;if(typeof(this.validateValue)!=='undefined'){result=this.validateValue(value);}
if(result===true){this.clearInvalid();}
return result;},clearInvalid:function(){if(this.label){this.label.removeClass('x-form-invalid-msg');var msg=this.getFormFileName();if(!msg){msg=__tr('Please choose a file');}
this.label.dom.innerHTML=Ext.util.Format.htmlEncode(msg);}}});Form.types={};Form.makeStoreId=function(table,keys){var storeId=encodeURIComponent(table.qname());var tableKeys=keys?keys.data[table.qname()]:{};for(var colKey in tableKeys){storeId+="&"+encodeURIComponent(colKey)+"&"+encodeURIComponent(tableKeys[colKey]);}
return storeId;};Form.reg=function(cls,xmltype,xtype){if(xtype){Ext.reg(xtype,cls);}
Form.types[xmltype]=cls;};Form.getStoreChanges=function(store){function flattenRecordData(data){for(var n in data){if(!data.hasOwnProperty(n)){continue;}
var v=data[n];if(typeof(v)==="object"&&v!==null){if(v.sid){v=v.sid;}else if(v.value){v=v.value;}
data[n]=v;}}
return data;}
var storeChanges={data:[],records:[]};store.each(function(record){if(record.dirty){var nullCount=0;var pkc=store.table.pk.columns;for(var i=0;i<pkc.length;++i){if(record.get(pkc[i].name)===null){++nullCount;}}
var data;if(nullCount==pkc.length){data=Ext.apply({},record.data);}else{var data={};for(var i=0;i<pkc.length;++i){var n=pkc[i].name;data[n]=record.get(n);}
Ext.apply(data,record.getChanges());}
storeChanges.data.push(flattenRecordData(data));storeChanges.records.push(record);}
return true;});return storeChanges;};Form.setStoreIds=function(store,storeChanges,ids){var table=store.table;var pkc=table.pk.columns;for(var i=0;i<storeChanges.records.length;++i){var idChanged=false;for(var j=0;j<pkc.length;++j){if(storeChanges.records[i].get(pkc[j].name)!==ids[i][j]){if(!idChanged){idChanged=true;storeChanges.records[i].beginEdit();}
storeChanges.records[i].set(pkc[j].name,ids[i][j]);}}
if(idChanged){storeChanges.records[i].setId(Cms.Megastore.makeGlobalId(table,storeChanges.records[i].data));storeChanges.records[i].endEdit();}}
store.commitChanges();}
Form.insertOffset=function(panel,newcomp,comp,offset){if(!panel.items){panel.initItems();}
var i=panel.items.indexOf(comp);if(i==-1){alert('Placeholder component is not in this container!');return;}
panel.insert(i+offset,newcomp);};Form.initDragZone=function(el,cmp){el.dragZone=new Ext.dd.DragZone(el,{ddGroup:'layout',getDragData:function(e){var sourceEl=e.getTarget('.layout-item');if(sourceEl){var d=sourceEl.cloneNode(true);d.id=Ext.id();return el.dragData={sourceEl:sourceEl,repairXY:Ext.fly(sourceEl).getXY(),ddel:d,cmp:cmp};}},getRepairXY:function(){return this.dragData.repairXY;}});};Form.initDragZoneFE=function(cmp){var wrapper=cmp.getEl().up('.x-form-item');wrapper.addClass('layout-item layout-target');Form.initDragZone(wrapper,cmp.id);};Form.copyIntAttribute=function(to,n,att,toAtt){var v=n.getAttribute(att);if(v!==null){var i=parseInt(v,10);if(!isNaN(i)){to[toAtt||att]=i;}}};Form.copyBoolAttribute=function(to,n,att,toAtt){var v=null;if(Ext.isArray(att)){for(var i=0;i<att.length;++i){v=n.getAttribute(att[i]);if(v){toAtt=toAtt||att[i];break;}}}else{v=n.getAttribute(att);toAtt=toAtt||att;}
if(v!==null){var s=v.toLowerCase().trim();if(s!=""){to[toAtt]=(s=="yes"||s=="true"||s=="1");}}};Form.getFieldName=function(col){return'_cms_'+col.table.sid+'_'+col.sid;};Form.getFormValues=function(form,asString){if(asString){throw"asString not implemented";}
var values={};for(var i=0;i<form.elements.length;i++){var el=form.elements[i];var disabled=form.elements[i].disabled;var name=form.elements[i].name;var id=form.elements[i].id;if(!disabled&&name&&id){var cmp=Ext.getCmp(id);if(cmp){values[name]=cmp.getValue();}}}
return values;};var quotedListRe=new RegExp("(,|^)(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|([^\",]*))","g");Form.parseQuotedList=function(lst){var r=[];while(m=quotedListRe.exec(lst)){r.push(m[2]||m[3]);}
return r;};Form.renderItemGeneral=function(column,getValue){var value=getValue(column.name);if(typeof(value)==="object"&&value!==null&&value.hasOwnProperty("value")){value=value.value;}
if(column.type=="DATE"){return value?NPSL.Locale.formatLongDate(value):null;}
if(column.colType==ColType.Enumerated){return value===null?__tr('n/a'):column.enumeratedById[value];}
if(column.colType==ColType.Boolean){return value===null?null:value?__tr('Yes'):__tr('No');}
if(column.colType==ColType.FileData){if(getValue(column.nameColumn.name)==null){return null;}
var img=document.createElement("img");var mime="";if(column.mimeColumn){mime=getValue(column.mimeColumn.name);}
img.src=MimeTypes.getIconImage(mime);img.qtip=__tr('Click to download the document');Ext.get(img).on("click",function(){if(this.value>0){xsrf_nav("/fp/cms/upload/downloadTemp.ashx?id="+this.value);}else{xsrf_nav("/fp/cms/upload/download.ashx?tab="+this.tableSid+"&col="+
this.columnSid+"&id="+this.getPk());}},{tableSid:column.table.sid,columnSid:column.sid,getPk:function(){var id='';var pkc=column.table.pk.columns;for(var i=0;i<pkc.length;++i){if(id){id+=',';}
var val=getValue(pkc[i].name);if(val&&typeof(val)=="object"){val=val.value;}
id+=encodeURIComponent(val);}
return id;},fileData:value});return img;}
if(column.colType==ColType.FileName){return value;}
if(column.colType==ColType.Html){var div=document.createElement("div");div.innerHTML=value;return div;}
if((column.colType==ColType.Indicator||column.colType==ColType.Region)&&typeof(value)==="object"){return value?value.description:null;}
if(column.colType==ColType.User&&typeof(value)==="object"){return value?value.fullName:null;}
if(column.colType==ColType.Document&&typeof(value)==="object"){return value?value.filename:null;}
return value;};Form.renderItem=function(column,values){return Form.renderItemGeneral(column,function(name){return values?(values.hasOwnProperty(name)?values[name]:null):"";});}
Form.renderItemWithSperlunkedFks=function(tab,values,tag){var tn=Cms.parseDotted(tag);for(var i=0;i<tn.length-1;++i){var parentRow=values[tn[i]];if(typeof(parentRow)!=="object"||parentRow===null){return;}
var newValues={};tab=g_schema.tablesBySid[parentRow.parent];for(var j=0;j<tab.columns.length;++j){var pc=tab.columns[j];var v=parentRow.data[j];if(pc.type=="DATE"&&v){newValues[pc.name]=Date.parseISO(v);}else{newValues[pc.name]=v;}}
values=newValues;}
var c=tab.columnsByName[tn[tn.length-1]];if(!c){return;}
return Form.renderItem(c,values);}
Form.renderItemRecord=function(column,record){return Form.renderItemGeneral(column,function(name){return record.get(name);});}
Form.renderItemTemplate=function(tab,tpl,values,tag){var tn=Cms.parseDotted(tag);for(var i=0;i<tn.length-1;++i){var parentRow=values[tn[i]];if(typeof(parentRow)!=="object"||parentRow===null){return;}
var newValues={};tab=g_schema.tablesBySid[parentRow.parent];for(var j=0;j<tab.columns.length;++j){var pc=tab.columns[j];var v=parentRow.data[j];if(pc.type=="DATE"&&v){newValues[pc.name]=Date.parseISO(v);}else{newValues[pc.name]=v;}}
values=newValues;}
var c=tab.columnsByName[tn[tn.length-1]];if(!c){return;}
return Form.renderItem(c,values);};Form.createForceField=function(config){Ext.apply(config,{initValue:function(){this.el.dom.value=this.forceValue;this.originalValue=this.forceValue;},setValue:function(){}});return new Ext.ux.Hidden(config);};Form.createEditField=function(col,config){config=config||{};config.col=col;config.allowBlank=col.nullable;if(!config.fieldLabel){config.fieldLabel=col.description||col.name;}
if(col.checks&&!config.checkGetter){throw"column "+col.name+" has checks but no checkgetter";}
if(col.checks&&config.checkGetter){config.dependentFields=[];config.validateValue=function(value){if(typeof(value)==="undefined"||value===null){value="";}
var result=null;if(result===null&&(value.length<1||value===this.emptyText)){if(!this.allowBlank){this.markInvalid(this.blankText);result=false;}}
if(result===null&&value.length<this.minLength){this.markInvalid(String.format(this.minLengthText,this.minLength));result=false;}
if(result===null&&value.length>this.maxLength){this.markInvalid(String.format(this.maxLengthText,this.maxLength));result=false;}
if(result===null&&this.vtype){var vt=Ext.form.VTypes;if(!vt[this.vtype](value,this)){this.markInvalid(this.vtypeText||vt[this.vtype+'Text']);result=false;}}
if(result===null){for(var i=0;i<this.col.checks.length;++i){var chk=this.col.checks[i];var chkResult=chk.check(this.checkGetter,this.col.checkMessage||__tr('The value in this field is invalid.'));if(chkResult!==true){this.markInvalid(chkResult);result=false;}}}
if(result===null&&this.regex&&!this.regex.test(value)){this.markInvalid(this.regexText);result=false;}
this._validationInProgress=true;var toCheck=[];for(var i=0;i<this.dependentFields.length;++i){var depFld=this.dependentFields[i];if(!depFld._validationInProgress){toCheck.push(depFld);depFld._validationInProgress=true;}}
for(var i=0;i<toCheck.length;++i){toCheck[i].validate();}
for(var i=0;i<toCheck.length;++i){toCheck[i]._validationInProgress=false;}
this._validationInProgress=false;return result===null?true:false;};config._validationInProgress=false;}
if(config.valueTrigger){config.listeners=config.listeners||{};if(col.colType==ColType.Enumerated&&config.type!=="radio"){config.listeners["select"]=function(fld,rec,index){Form.ValueTrigger.run(fld.valueTrigger,fld,rec.get("value"));}}else if(col.type=="NUMBER"&&col.precision==1&&col.scale==0){config.listeners["check"]=function(fld,checked){Form.ValueTrigger.run(fld.valueTrigger,fld,checked?1:0);}}else if(col.colType==ColType.Region){config.listeners["select"]=function(value,description,fld){Form.ValueTrigger.run(fld.valueTrigger,fld,value);};}else{config.listeners["change"]=function(fld,newValue,oldValue){Form.ValueTrigger.run(fld.valueTrigger,fld,newValue,oldValue);};}}
return Form.createFieldByType(col,config);}
Form.createFieldByType=function(col,config){config=config||{};if(config.hasOwnProperty("forceValue")){return Form.createForceField(config);}
var fld=null;if(!(col.colType==ColType.Indicator||col.colType==ColType.Region||col.colType==ColType.User||col.colType==ColType.Enumerated||col.colType==ColType.Document||col.colType==ColType.SearchEnum)){var tab=col.table;for(var i=0;i<tab.fks.length;++i){var fk=tab.fks[i],fkc=fk.columns;for(var j=0;j<fkc.length;++j){if(fkc[j].sid==col.sid){config.fk=fk;return new Form.FkPicker(config);}}}}
switch(col.colType){case ColType.FileMime:case ColType.FileName:return null;case ColType.FileData:return new Form.CmsUploadField(config);case ColType.Html:if(col.length>0){config.maxLength=col.length;}
config.height=180;config.width=550;if(config.lightHtml){return new Ext.ux.LightHtmlEditor(Ext.apply({slideToolbar:false},config));}else{return new Ext.ux.HtmlEditor(config);}
case ColType.User:config.store=new Ext.data.JayrockStore({prepareRpcParams:function(params){return[params.query];},rpc:GridHandler.getUserList,fields:['sid','fullName','email']});Ext.apply(config,{loadingText:__tr('Loading...'),mode:"remote",typeAhead:true,forceSelection:true,displayField:"fullName",triggerAction:"all",valueField:"sid",width:200,listWidth:200,queryDelay:10,minChars:1});return new Ext.ux.ComboBox(config);case ColType.Region:case ColType.Indicator:if(!g_csr){throw"global csr configuration is not available";}
if(col.colType==ColType.Region&&config.regionOwner){config.store=new Ext.data.JayrockStore({rpc:GridHandler.getRegionOwnerList,fields:['sid','description']});config.store.load();Ext.apply(config,{lazyRender:true,loadingText:__tr('Loading...'),mode:"local",editable:false,triggerAction:'all',forceSelection:true,listClass:'x-combo-list',displayField:"description",valueField:"sid",width:300,listWidth:300});return new Ext.ux.ComboBox(config);}
config.treeViewRootSid=col.colType==ColType.Region?g_csr.regionRootSid:g_csr.indRootSid;config.treeViewHandler=col.colType==ColType.Region?TreeViewRegionHandler:TreeViewIndicatorHandler;return new Ext.ux.TreeViewPicker(config);case ColType.Document:if(!g_csr||!g_csr.docLibSid){throw"global csr configuration is not available";}
config.librarySid=g_csr.docLibSid;return new Credit360.DocLibPickerField(config);case ColType.MeasureSid:return null;case ColType.Measure:throw"todo: measure not implemented";break;}
switch(col.type){case"DATE":if(col.colType==ColType.Time){fld=new Ext.form.TimeField(config);}else{Ext.applyIf(config,{width:140});fld=new Ext.form.DateField(config);}
break;default:if(config.type=="value-combo"){config.otherText=config.otherText||__tr('Enter a number');fld=new Credit360.ValueCombo(config);break;}
if(col.colType==ColType.Enumerated){if(config.type==="radio"){fld=new Form.CmsRadioGroup(config);}else{fld=new Form.CmsComboBox(config);}
break;}else if(col.colType==ColType.SearchEnum){fld=new Form.CmsSearchField(config);break;}
if(col.colType==ColType.Boolean){config.boxLabel=config.fieldLabel;config.fieldLabel=null;config.labelSeparator="";fld=new Ext.form.Checkbox(config);break;}
if(col.length>0){config.maxLength=col.length;}
if(config.maxLength>1000){Ext.applyIf(config,{width:300});fld=new Form.CmsTextArea(config);}else if(col.type=="NUMBER"){fld=new Form.CmsNumberField(config);}else if(config.autoComplete){config.store=new Ext.data.JayrockStore({prepareRpcParams:function(params){return[this.column.table.sid,this.column.sid,params.query];},column:col,rpc:GridHandler.autoCompleteField,fields:['value']});Ext.applyIf(config,{loadingText:__tr('Loading...'),mode:"remote",typeAhead:true,forceSelection:false,displayField:"value",hideTrigger:true,width:200,listWidth:config.width||200,queryDelay:10,minChars:5});fld=new Ext.ux.ComboBox(config);}else{fld=new Form.CmsTextField(config);}
break;}
return fld;};Form.HtmlEditor=function(config){config=config||{};Ext.applyIf(config,{fieldLabel:'test?'});Form.HtmlEditor.superclass.constructor.call(this,config);}
Form.HtmlEditor.fromXML=function(n,ownerForm,ownerRecord){return new Form.HtmlEditor({fieldLabel:n.getAttribute("label"),ownerForm:ownerForm,ownerRecord:ownerRecord});};Ext.extend(Form.HtmlEditor,Ext.ux.HtmlEditor,{});Form.reg(Form.HtmlEditor,'dhtmleditor');Form.Css={};Form.Css.fromXML=function(n,ownerForm,ownerRecord){var url=n.getAttribute("href");if(!url)
throw"css node is missing an href attribute";if(document.body==null){try{document.write("<link rel='stylesheet' href='"+url+"' type='text/css'/>");return;}catch(e){}}
var link=document.createElement("link");link.setAttribute("rel","stylesheet");link.setAttribute("type","text/css");link.setAttribute("href",url);document.getElementsByTagName("head")[0].appendChild(link);return null;};Form.reg(Form.Css,'css');Form.Checkbox=function(config){config=config||{};Ext.applyIf(config,{fieldLabel:'test2'});Form.Checkbox.superclass.constructor.call(this,config);}
Form.Checkbox.fromXML=function(n,ownerForm,ownerRecord){return new Form.Checkbox({fieldLabel:n.getAttribute("label"),ownerForm:ownerForm,ownerRecord:ownerRecord});};Ext.extend(Form.Checkbox,Ext.form.Checkbox,{});Form.reg(Form.Checkbox,'dcheckbox');Form.TextField=function(config){config=config||{};Ext.applyIf(config,{fieldLabel:"test"});Form.TextField.superclass.constructor.call(this,config);}
Form.TextField.fromXML=function(n,ownerForm,ownerRecord){return new Form.TextField({fieldLabel:n.getAttribute("label"),ownerForm:ownerForm,ownerRecord:ownerRecord});};Ext.extend(Form.TextField,Ext.form.TextField,{});Form.reg(Form.TextField,'dtextfield');Form.Text=function(config){Form.Text.superclass.constructor.call(this,config);}
Form.Text.fromXML=function(n,ownerForm,ownerRecord){var t=n.getFirstChild();var txt='';if(t.getName()=='text'){txt=n.getNodeText();}
return new Form.Text({text:txt,ownerForm:ownerForm,ownerRecord:ownerRecord});};Ext.extend(Form.Text,Ext.BoxComponent,{onRender:function(ct,position){var el=this.el=ct.createChild({id:this.id,cls:'layout-item layout-target x-unselectable text-region',html:this.text||__tr('Double click to edit text')},position);Form.Text.superclass.onRender.call(this,ct,position);}});Form.reg(Form.Text,'text-region');Form.Image=function(config){Form.Image.superclass.constructor.call(this,config);}
Ext.extend(Form.Image,Ext.BoxComponent,{onRender:function(ct,position){var el=this.el=ct.createChild({id:this.id,cls:'layout-item layout-target x-unselectable',html:__tr('A picture region')});Form.Image.superclass.onRender.call(this,ct,position);}});Form.reg(Form.Image,'picture-region');Form.ComboBox=function(config){Ext.applyIf(config,{lazyRender:true,mode:'local',editable:false,triggerAction:'all',forceSelection:true,valueField:'value',displayField:'description',listClass:'x-combo-list'});Form.ComboBox.superclass.constructor.call(this,config);}
Ext.extend(Form.ComboBox,Ext.form.ComboBox,{validate:function(){if(!this.allowBlank&&this.value==null){this.markInvalid(this.blankText);return false;}
return Form.ComboBox.superclass.validate.call(this);}});Form.CmsRadioGroup=function(config){var groupId=Ext.id();config.items=[];var data=config.col.enumeratedValues;for(var i=0;i<data.length;++i){config.items.push(new Ext.form.Radio({boxLabel:data[i].description||data[i].value,inputValue:data[i].value,name:groupId}));}
Form.CmsRadioGroup.superclass.constructor.call(this,config);};Ext.extend(Form.CmsRadioGroup,Ext.form.RadioGroup,{setValue:function(value){var found=false;this.items.each(function(item){if(item.getRawValue()==value){item.setValue(true);}else{item.setValue(false);}});},getValue:function(){var value=null;this.items.each(function(item){if(item.getValue()){value=item.getRawValue();return false;}});return value;},validate:function(){if(this.disabled||this.validateValue(this.getValue())){this.clearInvalid();return true;}
return false;}});Form.CmsComboBox=function(config){if(config.blankAtTop){this.defaultData=[{description:"\u00A0",value:null}];}else if(!config.col.nullable){this.defaultData=[{description:config.chooseText||("-- "+__tr('choose')+" --"),value:config.chooseValue||null}];}
if(config.autoComplete){Ext.apply(config,{editable:true,typeAhead:true,emptyText:config.chooseText||("-- "+__tr('choose')+" --")});}
var data=this.prepareData(config.col.enumeratedValues);config.width=config.width||(config.listWidth=this.getOptimalWidth(data,'description'));config.store=this.createComboStore(data);Form.CmsComboBox.superclass.constructor.call(this,config);}
Ext.extend(Form.CmsComboBox,Form.ComboBox,{createComboStore:function(data){var rdr=new Ext.data.JsonReader({root:"data",id:"value"},Ext.data.Record.create([{name:"value"},{name:"description"}]));var store=new Ext.data.Store({proxy:new Ext.data.MemoryProxy({data:data}),reader:rdr});store.load();return store;},getOptimalWidth:function(dataArray,attrib){var el=Ext.get(document.body).createChild({tag:"div",cls:"x-form-text x-combo-list-item ext-strict x-hidden"});var w=40;for(var i=0;i<dataArray.length;++i){if(dataArray[i]&&dataArray[i][attrib])
{w=el.getTextWidth(dataArray[i][attrib],w);}}
el.remove();return w+6+2+17+4;},setListWidth:function(width){if(this.list){this.list.setWidth(width);this.innerList.setWidth(width);}else{this.listWidth=width;}},prepareData:function(dataArray){var data=[];if(this.defaultData){data=data.concat(this.defaultData);}
return dataArray?data.concat(dataArray):data;}});Form.CmsTextField=function(config){Form.CmsTextField.superclass.constructor.call(this,config);}
Ext.extend(Form.CmsTextField,Ext.form.TextField,{});Form.reg(Form.CmsTextField,'cms-text-field');Form.CmsNumberField=function(config){Form.CmsNumberField.superclass.constructor.call(this,config);}
Ext.extend(Form.CmsNumberField,Ext.form.NumberField,{});Form.reg(Form.CmsNumberField,'cms-number-field');Form.CmsTextArea=function(config){Form.CmsTextArea.superclass.constructor.call(this,config);}
Ext.extend(Form.CmsTextArea,Ext.form.TextArea,{});Form.reg(Form.CmsTextArea,'cms-text-area');Form.CmsGrid=function(config){config=config||{};Form.CmsGrid.superclass.constructor.call(this,config);this.fields={};}
Form.CmsGrid.fromXML=function(n,ownerForm,ownerRecord){if(ownerRecord){throw"cms-data-view / cms-grid nodes cannot be nested";}
var tableName=n.getAttribute("table");if(!tableName){throw"cms-grid is missing a table attribute";}
var config={ownerForm:ownerForm,keys:this.keys,storeId:n.getAttribute("store")};if(!(config.table=g_schema.findTable(tableName))){throw"The table "+tableName+" is missing from the schema";}
Form.copyIntAttribute(config,n,"height");Form.copyIntAttribute(config,n,"width");var cmsGrid=new Cms.Grid.GridPanel(config);ownerForm.records[cmsGrid.id]=cmsGrid;return cmsGrid;};Form.reg(Form.CmsGrid,'cms-grid');Form.BasicForm=function(el,config){Form.BasicForm.superclass.constructor.call(this,el,config);}
Ext.extend(Form.BasicForm,Ext.form.BasicForm,{getValues:function(asString){return Form.getFormValues(this.el.dom,asString);}});}());