function CalendarDate(Date) {
	this.Month = Date.getMonth() + 1;
	this.Day = Date.getDate();
	this.Year = ((Date.getYear() < 1000) ? Date.getYear() + 1900 : Date.getYear())
}

function AddMonth(Date, numberOfMonths){
	try {
		var numberOfDaysInMonth;
		var leapDays;
	
		Date.Month = parseFloat(Date.Month) + parseFloat(numberOfMonths);
		if (Date.Month > 12) {
			//we still have a problem here.
			Date.Month = Date.Month - 12;
			Date.Year = parseFloat(Date.Year) + 1;
		}
	
		leapDays = 28;
		if (Date.Year % 100 == 0) {
			if (Date.Year % 400 == 0) {
				leapDays = 29;
			}
		} else {
			if(Date.Year % 4 == 0) {
				leapDays = 29;
			}
		}
			
		numberOfDaysInMonth = new Array(0,31,leapDays,31,30,31,30,31,31,30,31,30,31);
		if (Date.Day > numberOfDaysInMonth[Date.Month]) {
			Date.Day = numberOfDaysInMonth[Date.Month];
		}
	} catch(er) {
		alert("Error Occurred in module (AddMonth) with message: " + er.message);
	}
}

function SubtractMonth(Date, numberOfMonths){
	try {
		var numberOfDaysInMonth;
		var leapDays;
	
		Date.Month = parseFloat(Date.Month) - parseFloat(numberOfMonths);
		if (Date.Month < 12) {
			Date.Month = 12 + parseFloat(Date.Month);
			Date.Year = parseFloat(Date.Year) - 1;
		}
	
		leapDays = 28;
		if (Date.Year % 100 == 0) {
			if (Date.Year % 400 == 0) {
				leapDays = 29;
			}
		} else {
			if(Date.Year % 4 == 0) {
				leapDays = 29;
			}
		}
			
		numberOfDaysInMonth = new Array(0,31,leapDays,31,30,31,30,31,31,30,31,30,31);
		if (Date.Day > numberOfDaysInMonth[Date.Month]) {
			Date.Day = numberOfDaysInMonth[Date.Month];
		}
	} catch(er) {
		alert("Error Occurred in module (SubtractMonth) with message: " + er.message);
	}
}

function FormatDateMMDDYYYY(DateObj) {
	try {
	    return padLeft(DateObj.Month,"0",2) + "/" + padLeft(DateObj.Day,"0",2) + "/" + padLeft(DateObj.Year,"0",4);
	} catch(er) {
		alert("Error Occurred in module (FormatDateMMDDYYYY) with message: " + er.message);
	}
}

function parseDate(date) {
	try {
		var dateArray;
		var returnDate;
	
		//create a new date object
		returnDate = new CalendarDate(new Date());

		dateArray = date.split("/");
		if (dateArray.length == 3) {
			returnDate.Month = dateArray[0];
			returnDate.Day = dateArray[1];
			returnDate.Year = dateArray[2];
		} else {
			returnDate.Month = 0;
			returnDate.Day = 0;
			returnDate.Year = 0;
		}
		return returnDate;
	} catch(er) {
		alert("Error Occurred in module (parseDate) with message: " + er.message);
	}
}

function validDate(tempDate) {
	try {
		var result = false;
		var leapDays = 28;	
		var tempEffectiveDate;
		var numberOfDaysInMonth;
		var month = 0;
	
		tempEffectiveDate = parseDate(tempDate);

		if (parseFloat(tempEffectiveDate.Month) > 0 && parseFloat(tempEffectiveDate.Month) < 13) {
			result = true;

		}
	
		if (result == true) {
			result = false
			if (parseFloat(tempEffectiveDate.Year) > 1900) {
				result = true
			} 
		}
	
		if (result == true) {
			result = false
			if (tempEffectiveDate.Year % 100 == 0) {
				if (tempEffectiveDate.Year % 400 == 0) {
					leapDays = 29;
				}
			} else {
				if(tempEffectiveDate.Year % 4 == 0) {
					leapDays = 29;
				}
			}
	
			numberOfDaysInMonth = new Array(0,31,leapDays,31,30,31,30,31,31,30,31,30,31);
			
			month = parseFloat(tempEffectiveDate.Month);
			if (tempEffectiveDate.Day <= numberOfDaysInMonth[month]) {
				result = true;
			}
		}

		return result;
	} catch(er) {
		alert("Error Occurred in module (validDate) with message: " + er.message);
	}
}


function compareDate(date1, date2) {
	try {
		var result = 0;
	
		if (parseFloat(date1.Year) > parseFloat(date2.Year)) {
			result = 1;
		} else if(parseFloat(date1.Year) < parseFloat(date2.Year)) {
			result =2;
		} else {
			if (parseFloat(date1.Month) > parseFloat(date2.Month)) {
				result = 1;
			} else if (parseFloat(date1.Month) < parseFloat(date2.Month)) {
				result =2;
			} else {
				if (parseFloat(date1.Day) > parseFloat(date2.Day)) {
					result = 1;
				} else if (parseFloat(date1.Day) < parseFloat(date2.Day)) {
					result =2;
				}
			}
		}
	
		return result;
	} catch(er) {
		alert("Error Occurred in module (compareDate) with message: " + er.message);
	}
}


function isDate(date) {
	try {
	    var testVar = date.Year;
	    return true
	} catch(er) {
		return false
	}
}