Date.parseDate=function(date,today){if(typeof date=='number'){var ms_perday=1000*60*60*24;today=today||new Date();date=new Date(today.getTime()+date*ms_perday);}else if(typeof date=='string'){var d=date.trim();d=d.replace(/-/g,"/");d=d.replace(/(\d+)\.(\d+)/,"$2.$1").replace(/\./g,"/");d=new Date(d);if(isNaN(d.getTime()))date=new Date(Date.parse(d));else date=d;}else date=date;if(isNaN(date.getTime()))return false;return date;};function fillZero(num,width){width=width||2;num=''+num;for(var i=num.length;i<width;i++)num='0'+num;return num};Date.getStr=function(date,format){if(!format)format='%Y-%0M-%0D';date=Date.parseDate(date);if(format===true)format='%Y-%M-%D';format=format.replace(/%Y/g,date.getFullYear());format=format.replace(/%M/g,date.getMonth()+1);format=format.replace(/%D/g,date.getDate());format=format.replace(/%0M/g,fillZero(date.getMonth()+1));format=format.replace(/%0D/g,fillZero(date.getDate()));return format;};getStrFromDate=Date.dateToIsoDate=Date.getStrFromDate=Date.getStr;Date.isLeapYear=function(year){return(((year%4==0)&&(year%100!=0))||(year%400==0));};Date.parseTimeValue=function(val){if(typeof(val)=="string"){var midPos=val.indexOf(":");var hour=val.substr(0,midPos);var min=parseInt(val.substr(midPos+1),10)/60;if(isNaN(hour))hour=0;if(isNaN(min))min=0;return parseFloat(hour)+min;}else{val=parseFloat(val);if(val<0)val=0;if(val>24)val=24;var hour=parseInt(val);var min=Math.round((val-hour)*60);hour=hour.toString();if(hour.length==1)hour="0"+hour;min=min.toString();if(min.length==1)min="0"+min;return hour+":"+min;}};Date.isValidTime=function(hour,minute,second){if((hour<0)||(hour>24))return false;if((minute<0)||(minute>59))return false;if((second<0)||(second>59))return false;return true;};Date.timeToIsoTime=function(someTime){someTime=someTime.trim();if(someTime.length<5)return false;if(someTime.length>8){someTime=someTime.substr(0,8);}if(someTime.indexOf(':')>=0){var chunks=someTime.split(':');if(chunks.length!=3)return false;var hour=parseInt(chunks[0],10);var minute=parseInt(chunks[1],10);var second=parseInt(chunks[2],10);}else{return false;}if(!Date.isValidTime(hour,minute,second))return false;if(hour<10){hour='0'+hour;}if(minute<10){minute='0'+minute;}if(second<10){second='0'+second;}var ret='';ret+=hour+':';ret+=minute+':';ret+=second;return ret;};Date.parseTimeToNL=function(time){var _ms=time%1000;var _s=(time-_ms)%60000;var _min=(time-_s*1000-_ms)%3600000;var _hour=(time-_min*60000-_s*1000-_ms)%(24*3600000);var _day=(time-_hour*3600000-_min*60000-_s*1000-_ms)%(24*3600000);var utStr="";if(time<1000)utStr=time+System.language._MILLISECOND;else if(time<60000)utStr=parseInt(time/1000)+System.language._SECOND;else if(time<3600000)utStr=parseInt(time/60000)+System.language._MINUTE;else if(time<(24*3600000))utStr=parseInt(time/3600000)+System.language._HOUR;else if(time<(365*24*3600000))utStr=parseInt(time/(24*3600000))+System.language._DAY;else utStr=parseInt(time/(365*24*3600000))+System.language._YEAR;return utStr;};Date.parseTimeToNL2=function(time){var _ms=_s=_min=_hour=_day=0;if(time>0)_ms=time%1000;if(time>=1000)_s=((time-_ms)/1000)%60;if(time>=60000)_min=((time-_s*1000-_ms)/60000)%60;if(time>=3600000)_hour=((time-_min*60000-_s*1000-_ms)/3600000)%24;if(time>(24*3600000))_day=(time-_hour*3600000-_min*60000-_s*1000-_ms)%(24*3600000);var utStr="";if(_hour>0)utStr+=_hour+System.language._HOUR;if(_min>0)utStr+=_min+System.language._MINUTE;return utStr;};Date.getDays=function(year,month){if(year.constructor==Date){var month=year.getMonth();year=year.getFullYear();}switch(month){case 2:if(Date.isLeapYear(year))return 29;return 28;break;case 1:case 3:case 5:case 7:case 8:case 10:case 12:return 31;break;default:return 30;}};function getStrFromDate(date,noFill){date=date||new Date();var month=(date.getMonth()+1<10&& !noFill)?("0"+(date.getMonth()+1)):(date.getMonth()+1);var day=(date.getDate()<10&& !noFill)?("0"+date.getDate()):date.getDate();return date.getFullYear()+"-"+month+"-"+day;};Date.getStrFromDate=getStrFromDate;Date.getISODateFromDate=function(date,noFill){date=date||new Date();var month=(date.getMonth()+1<10&& !noFill)?("0"+(date.getMonth()+1)):(date.getMonth()+1);var day=(date.getDate()<10&& !noFill)?("0"+date.getDate()):date.getDate();return date.getFullYear()+"-"+month+"-"+day;};Date.addDay=function(now,days){return new Date(now.getTime()+days*24*60*60*1000);}
