﻿
__trGroup('Period picker');Ext.namespace("Credit360");Credit360.PeriodSpanPicker=function(config){Credit360.PeriodSpanPicker.superclass.constructor.call(this,config);};Ext.extend(Credit360.PeriodSpanPicker,Ext.form.Field,{showInterval:true,showUpToNow:true,allowOverOneYear:true,itemCls:"ux-period-span-picker",allowIntervalToBeChanged:true,reasonIntervalCanNotBeChanged:null,maxStartDtm:null,minEndDtm:null,minMaxDatesAreValid:true,value:null,startDtm:null,endDtm:null,interval:"y",ctype:"Credit360.PeriodSpanPicker",initComponent:function(){this.addEvents('change');},updateErrorMsg:function(value){this.minMaxDatesAreValid=true;var errorMsg='';if(this.maxStartDtm&&value.startDtm>this.maxStartDtm){this.minMaxDatesAreValid=false;errorMsg+=__tr('The start date must not be after {0}',this.maxStartDtm);}
if(this.minEndDtm&&value.endDtm&&value.endDtm<this.minEndDtm){this.minMaxDatesAreValid=false;errorMsg+=__tr('The end date must not be before {0}',this.minEndDtm);}
this.errorMsgDiv.dom.innerHTML=errorMsg;},datesEqual:function(a,b){if(a==null||b==null){return a==b;}
return a.valueOf()==b.valueOf();},fireChangeEvent:function(){var value=this.getValue();this.updateErrorMsg(value);var isValid=this.isValid();if(this.oldValue){if(this.datesEqual(this.oldValue.startDtm,value.startDtm)&&this.datesEqual(this.oldValue.endDtm,value.endDtm)&&this.oldValue.interval==value.interval&&this.oldIsValid==isValid){return;}}
this.oldValue=value;this.oldIsValid=isValid;this.fireEvent("change",this,value,isValid);},initValue:function(){},initEvents:function(){},getName:function(){},getRawValue:function(){},setRawValue:function(v){},validateValue:function(){if(!this.isValid()){this.markInvalid(this.invalidText);return false;}
this.clearInvalid();return true;},isValid:function(){if(this.disabled){return true;}
return this.minMaxDatesAreValid&&(this.durationTextField.hidden||this.durationTextField.isValid(true));},onRender:function(container,position){var t=this.tpl||new Ext.XTemplate('<div><table border="0" cellpadding="0" cellspacing="0">','<tr valign="middle">','<td>'+__tr('From')+'&#160;</td>','<td class="ux-psp-start-dtm"/>','<td>&#160;</td>','<td class="ux-psp-duration"/>','<td class="ux-psp-duration-other"/>','<tpl if="values.showInterval">','<td>&#160;'+__tr('Interval')+'&#160;</td>','<td class="ux-psp-interval"/>','</tpl>','</tr>','</table>','<div class = "ux-psp-errorMsg"/></div>');var el=document.createElement("div");el.className=this.itemCls;t.overwrite(el,this);container.dom.insertBefore(el,position);this.el=Ext.get(el);this.errorMsgDiv=this.el.child("div.ux-psp-errorMsg");this.startDtmPicker=new Credit360.MonthYearPicker({renderTo:this.el.child("td.ux-psp-start-dtm",true),value:this.startDtm});this.startDtmPicker.on("change",this.fireChangeEvent,this);var monthsBetween=((this.startDtm&&this.endDtm)?Date.monthsBetween(this.startDtm,this.endDtm):null);this.durationTextField=new Ext.form.NumberField({renderTo:this.el.child("td.ux-psp-duration-other",true),width:80,selectOnFocus:true,minValue:1,maxValue:100,allowBlank:false,value:(monthsBetween?Math.floor(monthsBetween/12):null)});this.durationList=[];if(this.showUpToNow){this.durationList.push([null,__tr('up to now')]);}
this.durationList.push([3,__tr('for 3 months')]);this.durationList.push([6,__tr('for 6 months')]);this.durationList.push([12,__tr('for 1 year')]);if(this.allowOverOneYear){this.durationList.push([36,__tr('for 3 years')]);this.durationList.push([-1,__tr('Specify years...')]);}
var durationComboValue=null;if(this.isInDurationList(monthsBetween)){durationComboValue=monthsBetween;this.durationTextField.hide();this.durationTextField.setValue(null);}else{if(monthsBetween==null||!this.allowOverOneYear){this.durationTextField.hide();this.durationTextField.setValue(null);durationComboValue=12;}else{durationComboValue=-1;this.durationTextField.setValue(Math.floor(monthsBetween/12));this.durationTextField.show();}}
this.durationCombo=new Ext.form.ComboBox({value:durationComboValue,renderTo:this.el.child("td.ux-psp-duration",true),store:new Ext.data.SimpleStore({fields:['value','label'],data:this.durationList}),width:120,mode:'local',forceSelection:true,triggerAction:'all',displayField:'label',valueField:'value',editable:false});this.durationCombo.on("select",this.onDurationComboSelect,this);if(this.showInterval){var intervalList=[["m",__tr('Monthly')],["q",__tr('Quarterly')],["h",__tr('Half-yearly')],["y",__tr('Annual')]];this.intervalCombo=new Ext.form.ComboBox({value:this.interval||"y",renderTo:this.el.child("td.ux-psp-interval",true),store:new Ext.data.SimpleStore({fields:['value','label'],data:intervalList}),width:100,mode:'local',forceSelection:true,triggerAction:'all',displayField:'label',valueField:'value',fieldLabel:__tr('Interval'),editable:false,disabled:!this.allowIntervalToBeChanged});this.intervalCombo.on("select",this.fireChangeEvent,this);if(!this.allowIntervalToBeChanged&&this.reasonIntervalCanNotBeChanged){this.intervalCombo.getEl().dom.title=this.reasonIntervalCanNotBeChanged;}}
this.durationTextField.on("change",this.fireChangeEvent,this);this.durationTextField.on("invalid",this.fireChangeEvent,this);this.durationTextField.on("valid",this.fireChangeEvent,this);if(this.value){this.setValue(this.value);}
this.oldValue=this.getValue();this.updateErrorMsg(this.oldValue);this.oldIsValid=this.isValid();},onDurationComboSelect:function(cb,r,idx){if(r.get("value")==-1){this.durationTextField.show();this.durationTextField.focus.defer(100,this.durationTextField);this.fireChangeEvent();}else{this.durationTextField.hide();this.durationTextField.setValue(null);this.fireChangeEvent();}},setValue:function(startDtm,endDtm,interval){if(startDtm&&(startDtm instanceof Credit360.PeriodSpan||startDtm.startDtm||startDtm.endDtm||startDtm.interval)){var o=startDtm;startDtm=o.startDtm;endDtm=o.endDtm;interval=o.interval;}
this.startDtm=this.endDtm=this.interval=null;if(this.rendered){if(startDtm){this.startDtmPicker.setValue(startDtm);this.startDtm=startDtm;if(endDtm){var months=Date.monthsBetween(startDtm,endDtm);if(this.isInDurationList(months)){this.durationCombo.setValue(months);this.durationTextField.hide();this.durationTextField.setValue(null);}else{this.durationCombo.setValue(-1);this.durationTextField.setValue(Math.floor(months/12));this.durationTextField.show();}
this.endDtm=endDtm;}else{this.durationCombo.setValue(null);this.durationTextField.hide();}}
if(this.intervalCombo&&interval!=null){this.setInterval(o.interval);this.intervalCombo.setValue(this.interval);}
this.value=null;}else{this.value=new Credit360.PeriodSpan(startDtm,endDtm,interval);}},isInDurationList:function(months){for(var i=0;i<this.durationList.length;i++){var item=this.durationList[i];if(item[0]==months){return true;}}
return false;},getValue:function(){var startDtm=this.startDtmPicker.getValue();var months=this.durationCombo.getValue();if(months==-1){months=this.durationTextField.getValue()*12;}
var endDtm=null;if(months&&!isNaN(months)){endDtm=startDtm.add(Date.MONTH,months);}
var interval=null;if(this.intervalCombo){interval=this.intervalCombo.getValue();if((String("mqhy").indexOf(interval)==-1)){interval=null;}}
return{startDtm:startDtm,endDtm:endDtm,interval:interval}},getPeriodSpan:function(){var intervalLookup={"m":Credit360.PeriodInterval.MONTH,"q":Credit360.PeriodInterval.QUARTER,"h":Credit360.PeriodInterval.HALF_YEAR,"y":Credit360.PeriodInterval.YEAR};var o=this.getValue();if(o.startDtm&&o.interval!=null){return new Credit360.PeriodSpan(o.startDtm,o.endDtm,intervalLookup[o.interval]);}else{return null;}},setInterval:function(interval){if(interval==null){this.interval=null;}else if(typeof(interval)=="string"){if(String("mqhy").indexOf(interval)==-1){throw"Unknown interval";}
this.interval=interval;}else{switch(interval){case Credit360.PeriodInterval.MONTH:this.interval="m";break;case Credit360.PeriodInterval.QUARTER:this.interval="q";break;case Credit360.PeriodInterval.HALF_YEAR:this.interval="h";break;case Credit360.PeriodInterval.YEAR:this.interval="y";break;default:throw"Unknown interval";}}},beforeDestroy:function(){if(this.intervalCombo){this.intervalCombo.destroy();}
Ext.destroy(this.startDtmPicker,this.durationCombo,this.durationTextField);this.purgeListeners();}});Ext.reg('PeriodSpanPicker',Credit360.PeriodSpanPicker);