﻿function DateValidator(departDayDropdown, departMonthYearDropdown, returnDayDropdown, returnMonthYearDropdown) {
	this.DepartDayDropdown = departDayDropdown;
	this.DepartMonthYearDropdown = departMonthYearDropdown;
	this.ReturnDayDropdown = returnDayDropdown;
	this.ReturnMonthYearDropdown = returnMonthYearDropdown;
}

// Instance methods for the DateValidator class
function DateInPast_Validate() {
	var now = new Date();
	var day = now.getDate();
	var month = now.getMonth();
	var year = now.getFullYear();
    
	var todayDate  = new Date(now.getFullYear(),now.getMonth(),now.getDate());    
	var departDate = DateValidator.TravelDate(this.DepartDayDropdown, this.DepartMonthYearDropdown);
	var returnDate = DateValidator.TravelDate(this.ReturnDayDropdown, this.ReturnMonthYearDropdown);

	return (departDate >= todayDate && returnDate >= todayDate);
}

function DateOrder_Validate() {
	var departDate = DateValidator.TravelDate(this.DepartDayDropdown, this.DepartMonthYearDropdown);
	var returnDate = DateValidator.TravelDate(this.ReturnDayDropdown, this.ReturnMonthYearDropdown);

	return (departDate < returnDate);
}

function DateDepart_Validate() {
	return DateValidator.Date_Validate(this.DepartDayDropdown, this.DepartMonthYearDropdown);
}

function DateReturn_Validate() {
	return DateValidator.Date_Validate(this.ReturnDayDropdown, this.ReturnMonthYearDropdown);
}

function HolidayDuration_Validate() {
	var departDate = DateValidator.TravelDate(this.DepartDayDropdown, this.DepartMonthYearDropdown);
	var returnDate = DateValidator.TravelDate(this.ReturnDayDropdown, this.ReturnMonthYearDropdown);

	var futureDate  = new Date(departDate.getFullYear(),departDate.getMonth(),departDate.getDate() + 30);    

	return (futureDate > returnDate);
}

// Assign the instance methods to the DateValidator
new DateValidator('', '', '', '');

DateValidator.prototype.DateInPast_Validate = DateInPast_Validate;
DateValidator.prototype.DateOrder_Validate = DateOrder_Validate;
DateValidator.prototype.DateDepart_Validate = DateDepart_Validate;
DateValidator.prototype.DateReturn_Validate = DateReturn_Validate;
DateValidator.prototype.HolidayDuration_Validate = HolidayDuration_Validate;

// Static class methods of DateValidator
function TravelDate(dayControl, monthYearControl) {
	departDay = new getObj(dayControl);
	departMonthYear = new getObj(monthYearControl);
	
	var monthYear = departMonthYear.obj.options[departMonthYear.obj.selectedIndex].value;
	var day = departDay.obj.options[departDay.obj.selectedIndex].value;
	var month = Number(monthYear.substring(0, 2)) - 1;
	var year = monthYear.substr(2);
	
	return new Date(year, month, day);
}

function Date_Validate(dayControl, monthYearControl)
{
	var date = this.TravelDate(dayControl, monthYearControl);

	departDay = new getObj(dayControl);
	departMonthYear = new getObj(monthYearControl);
	
	var monthYear = departMonthYear.obj.options[departMonthYear.obj.selectedIndex].value;
	var day = departDay.obj.options[departDay.obj.selectedIndex].value;
	var month = Number(monthYear.substring(0, 2)) - 1;
	var year = monthYear.substr(2);

	return (Number(day) == Number(date.getDate()) && Number(month) == Number(date.getMonth()) && Number(year) == Number(date.getFullYear()));
}

// Assign the static class methods to the DateValidator class
DateValidator.TravelDate = TravelDate;
DateValidator.Date_Validate = Date_Validate;
