function isDate(p_Expression){return!isNaN(new Date(p_Expression))}function dateAdd2(p_Interval,p_Number,p_Date){if(!isDate(p_Date)){return"invalid date: '"+p_Date+"'"}if(isNaN(p_Number)){return"invalid number: '"+p_Number+"'"}p_Number=new Number(p_Number);var dt=new Date(p_Date);switch(p_Interval.toLowerCase()){case"yyyy":{dt.setFullYear(dt.getFullYear()+p_Number);break}case"q":{dt.setMonth(dt.getMonth()+(p_Number*3));break}case"m":{dt.setMonth(dt.getMonth()+p_Number);break}case"y":case"d":case"w":{dt.setDate(dt.getDate()+p_Number);break}case"ww":{dt.setDate(dt.getDate()+(p_Number*7));break}case"h":{dt.setHours(dt.getHours()+p_Number);break}case"n":{dt.setMinutes(dt.getMinutes()+p_Number);break}case"s":{dt.setSeconds(dt.getSeconds()+p_Number);break}case"ms":{dt.setMilliseconds(dt.getMilliseconds()+p_Number);break}default:{return"invalid interval: '"+p_Interval+"'"}}return dt}function dateDiff(p_Interval,p_Date1,p_Date2,p_firstdayofweek,p_firstweekofyear){if(!isDate(p_Date1)){return"invalid date: '"+p_Date1+"'"}if(!isDate(p_Date2)){return"invalid date: '"+p_Date2+"'"}var dt1=new Date(p_Date1);var dt2=new Date(p_Date2);var iDiffMS=dt2.valueOf()-dt1.valueOf();var dtDiff=new Date(iDiffMS);var nYears=dt2.getUTCFullYear()-dt1.getUTCFullYear();var nMonths=dt2.getUTCMonth()-dt1.getUTCMonth()+(nYears!=0?nYears*12:0);var nQuarters=parseInt(nMonths/3);var nMilliseconds=iDiffMS;var nSeconds=parseInt(iDiffMS/1000);var nMinutes=parseInt(nSeconds/60);var nHours=parseInt(nMinutes/60);var nDays=parseInt(nHours/24);var nWeeks=parseInt(nDays/7);var iDiff=0;switch(p_Interval.toLowerCase()){case"yyyy":return nYears;case"q":return nQuarters;case"m":return nMonths;case"y":case"d":return nDays;case"w":return nDays;case"ww":return nWeeks;case"h":return nHours;case"n":return nMinutes;case"s":return nSeconds;case"ms":return nMilliseconds;default:return"invalid interval: '"+p_Interval+"'"}}function datePart(p_Interval,p_Date,p_firstdayofweek,p_firstweekofyear){if(!isDate(p_Date)){return"invalid date: '"+p_Date+"'"}var dtPart=new Date(p_Date);switch(p_Interval.toLowerCase()){case"yyyy":return dtPart.getFullYear();case"q":return parseInt(dtPart.getMonth()/3)+1;case"m":return dtPart.getMonth()+1;case"y":return dateDiff("y","1/1/"+dtPart.getFullYear(),dtPart);case"d":return dtPart.getDate();case"w":return dtPart.getDay();case"ww":return dateDiff("ww","1/1/"+dtPart.getFullYear(),dtPart);case"h":return dtPart.getHours();case"n":return dtPart.getMinutes();case"s":return dtPart.getSeconds();case"ms":return dtPart.getMilliseconds();default:return"invalid interval: '"+p_Interval+"'"}}function weekdayName(p_Date,p_abbreviate){if(!isDate(p_Date)){return"invalid date: '"+p_Date+"'"}var dt=new Date(p_Date);var retVal=dt.toString().split(' ')[0];var retVal=Array('Sun','Mon','Tue','Wed','Thur','Fri','Sat')[dt.getDay()];if(p_abbreviate==true){retVal=retVal.substring(0,3)}return retVal}function monthName(p_Date,p_abbreviate){if(!isDate(p_Date)){return"invalid date: '"+p_Date+"'"}var dt=new Date(p_Date);var retVal=Array('January','Feb','March','Apr','May','June','July','Aug','Sept','Oct','Nov','Dec')[dt.getMonth()];if(p_abbreviate==true){retVal=retVal.substring(0,3)}return retVal}function IsDate(p_Expression){return isDate(p_Expression)}function DateAdd(p_Interval,p_Number,p_Date){return dateAdd(p_Interval,p_Number,p_Date)}function DateDiff(p_interval,p_date1,p_date2,p_firstdayofweek,p_firstweekofyear){return dateDiff(p_interval,p_date1,p_date2,p_firstdayofweek,p_firstweekofyear)}function DatePart(p_Interval,p_Date,p_firstdayofweek,p_firstweekofyear){return datePart(p_Interval,p_Date,p_firstdayofweek,p_firstweekofyear)}function WeekdayName(p_Date){return weekdayName(p_Date)}function MonthName(p_Date){return monthName(p_Date)}