function dateInput(htmlElement,userLocale){this.adjustLocaleSettings=function(){if(this.userLocale=="en_GB"){this.fieldOrder="DMY";}else{if(this.userLocale=="es_US"){this.yearMask="aaaa";}else{if(this.userLocale.substring(0,2)=="es"){this.fieldOrder="DMY";this.yearMask="aaaa";}else{if(this.userLocale=="pt_BR"){this.fieldOrder="DMY";this.yearMask="aaaa";}}}}};this.generateDateFormat=function(param){var dateMask=new Object();dateMask.D=((param&&param.datepicker)?"dd":this.dayMask);dateMask.M=((param&&param.datepicker)?"mm":this.monthMask);dateMask.Y=((param&&param.datepicker)?"yy":this.yearMask);var i=0;var format="";for(;i<this.fieldOrder.length;i++){format+=((i==0)?"":this.separator)+dateMask[this.fieldOrder.charAt(i)];}return format;};this.generateDatePattern=function(){var now=new Date();var regexPattern=new Object();regexPattern.D="(|[012]|0?[1-9]|1[0-9]|2[0-9]|3[01])";regexPattern.M="(|[01]|0?[1-9]|1[0-2])";regexPattern.Y="(|1|2|(19|20)[0-9]?[0-9]?)";var i=0;var pattern="^";for(;i<3;i++){pattern+=((i==0)?"":"(|"+this.patternSeparator+"")+regexPattern[this.fieldOrder.charAt(i)];}pattern+="))$";return new RegExp(pattern);};this.textToComponents=function(){var text=this.htmlElement.value;var array=text.split(this.separator);var dateComponents=new Object();var i=0;for(;i<array.length;i++){dateComponents[this.fieldOrder.charAt(i)]=array[i];}return dateComponents;};this.ComponentsToText=function(dateComponents){var text=this.htmlElement.value;var i=0;var array=text.split(this.separator);for(;i<this.fieldOrder.length;i++){if(dateComponents[this.fieldOrder.charAt(i)]){array[i]=dateComponents[this.fieldOrder.charAt(i)];}else{break;}}return array.join(this.separator);};this.getDate=function(param){var date=null;try{var dateComponents=this.textToComponents();var year=parseInt(dateComponents.Y,10);var month=parseInt(dateComponents.M,10);var day=parseInt(dateComponents.D,10);date=new Date(year,month-1,day);this.yearLength=(""+year).length;if(dateComponents.Y.length!=4||date.getFullYear()!=year||date.getMonth()!=(month-1)||date.getDate()!=day){if(param&&param.adjustDate){}else{date=null;}}}catch(ex){date=null;}return date;};this.keyPress=function(event){if(this.keyWasReleased){this.keyWasReleased=((event.charCode==0)||(event.charCode!=this.charCode));if(this.htmlElement.value==""){this.previousValue="";}else{if(this.htmlElement.value.substring(this.htmlElement.value.length-1)==this.separator&&String.fromCharCode(event.charCode)==this.separator){event.preventDefault();}}this.charCode=event.charCode;}else{event.preventDefault();}};this.checkDelayedValitation=function(){this.delayedValidation=false;if(this.htmlElement.value.match(this.datePattern)&&this.getDate()!=null){this.delayedValidation=true;var di=this;setTimeout(function(){if(di.delayedValidation){di.editMode=false;di.processEvent({event:new Object(),fullValidation:false});}},this.VALIDATIONDELAY);}return this.delayedValidation;};this.processEvent=function(param){this.keyWasReleased=true;if(param.fullValidation){if(this.getDate()==null){this.delayedValidation=false;this.htmlElement.value="";}else{if(this.htmlElement.value.length<10||this.delayedValidation){this.delayedValidation=false;jQuery(this.htmlElement).datepicker("setDate",this.getDate());this.htmlElement.focus();}}}else{this.delayedValidation=false;if(param.event.keyCode==this.BACKSPACE||param.event.keyCode==this.DELETE){this.checkDelayedValitation();this.editMode=true;}else{if(this.editMode){if(param.event.type=="keyup"){this.checkDelayedValitation();this.editMode=false;}}else{if(this.htmlElement.value.match(this.datePattern)){if((this.htmlElement.value+this.separator).match(this.datePattern)&&this.htmlElement.value.match(/\d\d$/)){this.htmlElement.value+=this.separator;}if(this.getDate()!=null||this.yearLength==4){if(this.previousValue!=this.htmlElement.value){this.previousDate=this.getDate();this.htmlElement.style.visibility="hidden";jQuery(this.htmlElement).datepicker("setDate",this.getDate());if(this.getDate()==null||this.previousDate.getTime()!=this.getDate().getTime()){jQuery(this.htmlElement).datepicker("setDate",null);}this.htmlElement.style.visibility="visible";this.htmlElement.focus();}}}else{this.htmlElement.value=this.previousValue;}this.previousValue=this.htmlElement.value;}}}};this.BACKSPACE=8;this.DELETE=46;this.VALIDATIONDELAY=2000;this.htmlElement=htmlElement;this.htmlElement.dateInput=this;this.userLocale=userLocale;if(!this.userLocale){this.userLocale="en_US";}this.fieldOrder="MDY";this.separator="/";this.dayMask="dd";this.monthMask="mm";this.yearMask="yyyy";this.adjustLocaleSettings();this.yearLength=0;this.patternSeparator=((this.separator=="."||this.separator=="/")?"\\":"")+this.separator;this.dateFormat=this.generateDateFormat();this.datePattern=this.generateDatePattern();this.charCode=null;this.previousValue="";this.previousDate=null;this.keyWasReleased=true;this.editMode=false;this.delayedValidation=false;jQuery(this.htmlElement).datepicker("option","dateFormat",this.generateDateFormat({datepicker:true}));jQuery(this.htmlElement).focus(function(event){if(this.value==this.dateInput.dateFormat){this.value="";}});jQuery(this.htmlElement).keypress(function(event){this.dateInput.keyPress(event);});jQuery(this.htmlElement).keyup(function(event){this.dateInput.processEvent({event:event,fullValidation:false});});jQuery(this.htmlElement).blur(function(event){this.dateInput.processEvent({event:event,fullValidation:true});if(this.dateInput.getDate()==null){this.value=this.dateInput.dateFormat;}});if(this.getDate()==null){jQuery(this.htmlElement).datepicker("setDate",null);this.htmlElement.value=this.dateFormat;}}jQuery.fn.aaDateInput=function(param,aux){var i=0;if(typeof param=="object"&&param!=null){for(;i<this.length;i++){var di=new dateInput(this[i],param.userLocale);}}else{if(typeof param=="string"){var retVal=null;for(;i<this.length;i++){switch(param){case"getDate":return this[i].dateInput.getDate();break;case"setDateFormat":this[i].dateInput.dateFormat=aux;default:retVal=null;}}return retVal;}}};
