﻿// Room Validator Constructor
function RoomValidator(roomControl) {
	this.RoomControl = roomControl;
}

// Instance methods for the RoomValidator class
function DisplayRooms() {
	tbl = new getObj(this.RoomControl + '_Rooms_Table');
	from = new getObj(this.RoomControl + '_Rooms_DropDownList');
	
	var len = tbl.obj.rows.length;
	var hide = parseInt(from.obj.options[from.obj.selectedIndex].value) + 1;
	// Rows to show

	for (var i=2; i<hide; i++) {
		tbl.obj.rows[i].style.display = "";
	}
	
	// rows to hide
	for(i=hide; i<len; i++){
		tbl.obj.rows[i].style.display = "none";
	}
}

function Rooms_Validate(args) {
	var valid = true;
	var rooms = args.Value;
	
	var occupantType = new OccupantType();

	var adults = OccupantCount(1, occupantType.ADULT);
	var children = OccupantCount(1, occupantType.CHILD);
	var infants = OccupantCount(1, occupantType.INFANT);

	valid = ValidateRoom(1);

	if (valid && rooms >= 2)
	{
		valid = ValidateRoom(2);
		
		adults += OccupantCount(2, occupantType.ADULT);
		children += OccupantCount(2, occupantType.CHILD);
		infants += OccupantCount(2, occupantType.INFANT);
	}
	if (valid && rooms >= 3)
	{
		valid = ValidateRoom(3);
		
		adults += OccupantCount(3, occupantType.ADULT);
		children += OccupantCount(3, occupantType.CHILD);
		infants += OccupantCount(3, occupantType.INFANT);
	}
	if (valid && rooms >= 4)
	{
		valid = ValidateRoom(4);
		
		adults += OccupantCount(4, occupantType.ADULT);
		children += OccupantCount(4, occupantType.CHILD);
		infants += OccupantCount(4, occupantType.INFANT);
	}
	if (valid && rooms >= 5)
	{
		valid = ValidateRoom(5);
		
		adults += OccupantCount(5, occupantType.ADULT);
		children += OccupantCount(5, occupantType.CHILD);
		infants += OccupantCount(5, occupantType.INFANT);
	}

	flightValidator = new FlightValidator();

	return (valid && flightValidator.ValidateFlight(adults, children, infants));
}

function OccupantCount(room, occupantType) {
	if (this.RoomControl == '' || this.RoomControl == undefined) {
		return 0;
	} else {
		var dropdown = new getObj(this.RoomControl + '_Room_' + occupantType + '_DropDownList' + room);
		return Number(dropdown.obj.options[dropdown.obj.selectedIndex].value);
	}
}

function ValidateRoom(room) 
{
	if (this.RoomControl == '' || this.RoomControl == undefined) {
		return false;
	} else {
		var adultDropdown = new getObj(this.RoomControl + '_Room_Adult_DropDownList' + room);
		var childDropdown = new getObj(this.RoomControl + '_Room_Child_DropDownList' + room);
		var infantDropdown = new getObj(this.RoomControl + '_Room_Infant_DropDownList' + room);
		
		var adultCount = Number(adultDropdown.obj.options[adultDropdown.obj.selectedIndex].value);
		var childCount = Number(childDropdown.obj.options[childDropdown.obj.selectedIndex].value);
		var infantCount= Number(infantDropdown.obj.options[infantDropdown.obj.selectedIndex].value);

		return ValidateRoomOccupancy( adultCount,childCount,infantCount );
	}
}

// Assign the instance methods to the RoomValidator
new RoomValidator('');

RoomValidator.prototype.DisplayRooms = DisplayRooms;
RoomValidator.prototype.OccupantCount = OccupantCount;
RoomValidator.prototype.Rooms_Validate = Rooms_Validate;
RoomValidator.prototype.ValidateRoom = ValidateRoom;

// Static class methods of RoomValidator
function ValidateRoomOccupancy( adultCount,childCount,infantCount )
{
	return ((adultCount + childCount + infantCount) < 6) && (adultCount > 0);
}

// Assign the static class methods to the RoomValidator class
RoomValidator.ValidateRoomOccupancy = ValidateRoomOccupancy;

// OccupantType helper class
function OccupantType() {
	this.ADULT = 'Adult';
	this.CHILD = 'Child';
	this.INFANT = 'Infant';
}
