// Date Object Extensions
// Author RJ Wallace, NYC, rjw@bway.net

Date.prototype.getFullYear=
	function () { // Y2K Compliant
		var y = this.getYear();
		return ((y<=1900)?(y+=1900):y);};
Date.prototype.Help=
	function () {
		var sHelpMsg='Method DateDadd() syntax: DateAdd( Days [,Months] [,Years])';
		alert(sHelpMsg);
		return false;};
Date.prototype.DateAdd=
	function () {
		if (arguments.length==0) return this.Help();

		var numDays=0, numMonths=0, numYears=0;

		numDays=arguments[0];
		if (arguments.length>1) numMonths=arguments[1];
		if (arguments.length>2) numYears=arguments[2];

		var yearsToAdd = numYears;
		var month = this.getMonth() + numMonths;
		if (month > 11) {
			yearsToAdd = Math.floor((month+1)/12);
			month -= 12*yearsToAdd;
			yearsToAdd += numYears; };

		this.setMonth(month);
		this.setFullYear(this.getFullYear()	+ yearsToAdd);
		this.setTime(this.getTime()+60000*60*24*numDays);
		return this;};
Date.prototype.AsInteger=
	function (){
		// returns an Integer in format 'yyyymmdd'
		// for unabiguous numeric date comparisons
		var d = this.getDate();
		var m = this.getMonth() + 1;
		var y = this.getFullYear(); // Y2K Compliant
		return (y*10000) + (m*100) + d;};
Date.prototype.FromString=function(s) {
	// takes (unvalidated) string and converts to date from format: m/d/yyyy hh:mm
	var dt=s.split(' ');
	var d=dt[0].split('/');
	if (dt.length>1) { // Time included
		var t=dt[1].split(':');
		return new Date(d[2],d[0]-1,d[1],t[0],t[1]);
	}
	// Date Only
	return new Date(d[2],d[0]-1,d[1]);
}
Date.prototype.IsValid=function(s) {
	// MM/DD/YYYY format: USA only. Separators: ./-
	var r = /^([1-9]|0[1-9]|1[0-2])([-.\/])([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])\2(\d{2}|\d{4})/;
	if (r.test(s)) {
		var ele = s.split(/[-.\/]/);
		for (var i=0;i<ele.length;i++) ele[i]-=0; // convert to integers
		if (ele[2]<100) ele[2]+=(ele[2]<51)?2000:1900; // make 4-digit year
		var td = new Date(ele[2],ele[0]-1,ele[1],0,0,0,0);
		// Compare new date with old, if different, then the date is invalid.
		return ( td.getDate()==ele[1] && td.getMonth()==ele[0]-1 && td.getFullYear()==ele[2] );
	}
	return false;
}
