/** JavaScript Document Hotel Widget Validation
 *  This is intended for the Hotel Widget and the
 *  validation that is required before a search
 *  is initiated on LVC.  If there are functions
 *  that are used for more then one page, they
 *  are located in global.js.
 **/
var CheckInCalendarMessage = "Choose your Check in date below";
var CheckOutCalendarMessage = "Choose your Check out date below";
function changeRooms(quant) {
	var i = 0;
	for(i = 2; i < 5; i++) {
		if(quant < i) {
			var label = "room" + i + "Label";
			var children = "room" + i + "Children";
			var adults = "room" + i + "Adults";
			getElem(label).innerHTML = "";
			getElem(adults).innerHTML = "";
			getElem(children).innerHTML = "";
			getElem(label).parentNode.parentNode.style.display = "none";
			childrenAges(i, "0");
		} else if(quant >= i) {
			var label = "room" + i + "Label";
			var children = "room" + i + "Children";
			var adults = "room" + i + "Adults";
			var wasSets = wasSet(i);
			var childrenAgesArray = new Array();
			if(wasSets) {
				var numAdults = getResetAdults(i);
				var numChildren = getResetChildren(i);
				if(parseInt(numChildren) > 0) {
					for(var j = 0; j < numChildren; j++) {
						childrenAgesArray[j] = getElem("room" + i + "Child" + (j + 1) + "Age").value;
					}
				}
			}
			getElem(label).parentNode.className = "widget_title";
			getElem(adults).parentNode.parentNode.style.display = "";
			getElem(label).innerHTML = "room " + i;
			getElem(adults).innerHTML = "<select class='widget_fields' id='wAdults" + i + "' name='room" + i + "NumAdults'><option value='1'> 1 </option><option value='2' selected='selected'> 2 </option>" +
                    										"<option value='3'> 3 </option><option value='4'> 4 </option></select>";
			getElem(children).innerHTML = "<select class='widget_fields' id='Children" + i + "' name='room" + i + "NumChildren' onchange='childrenAges(\"" + i + "\", this.value)'><option value='0' selected='selected'>0</option><option value='1'> 1 </option>"
                    										+ "<option value='2'> 2 </option><option value='3'> 3 </option></select>";
			if(wasSets) {
				changeSelect("wAdults" + i, numAdults);
				changeSelect("Children" + i, numChildren);
				childrenAges(i, numChildren + "");
				if(parseInt(numChildren) > 0) {
					for(var j = 0; j < numChildren; j++) {
						changeSelect("room" + i + "Child" + (j + 1) + "Age", childrenAgesArray[j]);  
					}
				}
			}
		}
	}
};

function wasSet(room) {
	var roomSet = getElem("wAdults" + room);
	if(roomSet != null) {
		return true;
	} else {
		return false;
	}
};

function getResetAdults(room) {
	return getElem("wAdults" + room).value;
};

function getResetChildren(room) {
	return getElem("Children" + room).value;
};

function childrenAges(room, quant) {
	numChild = quant;
	if(quant == 0) {
		numChild == 4; 
		for(var a = 0; a < 3; a++) {
			var elem = "room" + room + "Child" + (a + 1) + "AgeDiv";
			getElem(elem).className = "emptyCell";
		}
		if(isSetTrue()) {
			getElem("childAgeLabel").parentNode.parentNode.style.display = "none";
			getElem("childAgeLabel").parentNode.className = "emptyCell";
			getElem("childAgeLabel").innerHTML = "";
		} else {
		}
	}
	getElem("room" + room + "ChildLabel").innerHTML = "";
	for(var a = 0; a < 3; a++) {
		var elem = "room" + room + "Child" + (a + 1) + "AgeDiv";
		getElem(elem).innerHTML = " ";
	}
	getElem("room" + room + "ChildLabel").parentNode.parentNode.style.display = "none";
	if(quant > 0) {
		getElem("childAgeLabel").innerHTML = "Children Ages";
		getElem("childAgeLabel").parentNode.parentNode.style.display = "";
		getElem("room" + room + "ChildLabel").parentNode.parentNode.style.display = "";
		for(var i = 0; i < numChild; i++) {
			getElem("room" + room + "Child" + (i + 1) + "AgeDiv").className = "NCLN";
			
			getElem("room" + room + "ChildLabel").innerHTML = "room " + room;
			var opts = "";
			for(var k = 1; k < 18; k ++) {
				opts += "<option value='" + k + "'>" + k + "</option>\n";
			}
			getElem("room" + room + "Child" + (i + 1) + "AgeDiv").innerHTML = "<select class='widget_fields' id='" + "room" + room + "Child" + (i + 1) + "Age' name='" + "room" + room + "ChildAge" + (i + 1) + "'>" + opts + "</select>";
		}
	}
};

function isSetTrue() {
	var bval = true; 
	for(var i = 1; i < 5; i++) {	
		if(getElem("Children" + i) != null) {
			if(getElem("Children" + i).value == 0) {
				bval = true;
			} else {
				return false;
			}
		} else {
			bval = true;
		}
	}
	return bval;
};

function validateHotel() {
	var datesValid = validateDate();
	if(!datesValid) {
		return false;
	}
	
	for(var i = 0; i < getElem("numRooms").value; i++) {
		var valid = validateRooms((i + 1));
		if(valid == false) {
			return false;
		}
	}
	setHotelCookies();
	return true;
};

function validateRooms(roomNum) {
	var adults = getElem("wAdults" + roomNum).value;
	var children = getElem("Children" + roomNum).value;
	if((parseInt(adults) + parseInt(children)) >= 5) {
		createErrorMessage("<strong>Room [" + roomNum + "] contains too many people.</strong>  Occupancy is limited to four people per room.  Please adjust your room occupancy for room " + roomNum + " and try again.");
		return false;
	} else {
		return true;
	}
};

function validateDate() {
	var _day, _month; 
	var indate = new Date(getElem("inpCheckInDate").value); 
	sMonth = (indate.getMonth()) + ""; 
	if (sMonth.length == 1) {
		sMonth = "0" + sMonth; 
	}
	sDay = indate.getDate() + ""; 
	if (sDay.length == 1) {
		sDay = "0" + sDay; 
	}
	var isValid = validateUSDate(sMonth + "/" + sDay + "/" + indate.getFullYear()); 

	if (isValid == false) {
		var message = "The current Check-in ";
		message += "date does not appear to be valid.<br /> Please use the mm/dd/yyyy format.";
		createErrorMessage(message); 
		setDefaultDepartureDate();
	    return false;
	}
	var outdate = new Date(getElem("inpCheckOutDate").value);
	_month = (outdate.getMonth()) + "";
	if (_month.length == 1) { _month = "0" + _month; }
	_day = outdate.getDate() + "";
	if (_day.length == 1) { _day = "0" + _day; }
		
	var isValid = validateUSDate(_month + "/" + _day + "/" + outdate.getFullYear());
	if (isValid == false) {
		var message = 'The current Check-out';
		message += ' date does not appear to be valid.<br />';
		message += 'Please use the mm/dd/yyyy format.<br />';
		setDefaultReturnDate();
		createErrorMessage(message);
		return false;
	}
	
	var calculatedMaximumCheckOutDay = YAHOO.widget.DateMath.add(indate, YAHOO.widget.DateMath.DAY, 10);
	
	if (YAHOO.widget.DateMath.before(new Date(getElem("inpCheckInDate").value), new Date()) == true && formatDate(new Date(getElem("inpCheckInDate").value)) != formatDate(new Date())) {
		var message = '<strong>You have selected a date that has already passed.</strong> Please adjust your dates and try again.';		
		createErrorMessage(message);
		return false;
	}
	if (YAHOO.widget.DateMath.before(new Date(getElem("inpCheckOutDate").value), new Date(getElem("inpCheckInDate").value)) == true) {
		var message = '<strong>Your check-in date occurs after your check-out date.</strong><br />';
		    message += 'Please adjust your dates and try again.';		
		createErrorMessage(message);
		return false;
	}
	if(YAHOO.widget.DateMath.before(YAHOO.widget.DateMath.subtract(new Date(getElem("inpCheckOutDate").value), YAHOO.widget.DateMath.DAY, 1), new Date(getElem("inpCheckInDate").value))) {
		var message = "<strong>You\'ve selected the same day to check-in and check-out of your hotel.</strong>Please adjust your dates and try again.";
		createErrorMessage(message);
		return false;																															   
	}
	if(YAHOO.widget.DateMath.before(new Date(calculatedMaximumCheckOutDay),outdate) == true) {
		var message = '<strong>Your date search is longer than the 10-day maximum. Please adjust your length of stay and try again.</strong> ';
			message += 'Please adjust your dates and try again.';
		createErrorMessage(message);
		return false;
	}
	var _oneDay = 1000*60*60*24;
	var numNights = parseInt(Math.ceil((outdate.getTime() - indate.getTime()) / (_oneDay)));
	getElem("numNights").value = numNights;
	setHiddenDates(sMonth, sDay, indate.getFullYear());
	return true;
};


function setHiddenDates(month, day, year) {
	getElem("Month").value = month;
	getElem("Day").value = day;
	getElem("Year").value = year;
};

function changeSelect(div, str) {
	var elem = getElem(div);
	for (i=0; i<elem.options.length; i++) {
		if (elem.options[i].value == str) {
			elem.selectedIndex = i;
		}
	}
};

function setHotelCookies() {
	var cookie_date = new Date();
	cookie_date.setDate(cookie_date.getDate() + 30);
	var expdate = cookie_date.toGMTString();
	makeCookie("CHECKINDATE", getElem("inpCheckInDate").value, "/", expdate);
	makeCookie("CHECKOUTDATE", getElem("inpCheckOutDate").value, "/", expdate);
	makeCookie("NUM_OF_NIGHTS", getElem("numNights").value, "/", expdate);
	setAdultCookies(expdate);
	setChildrenCookies(expdate);
	makeCookie("numRooms", getElem("numRooms").value, "/", expdate);
};

function setAdultCookies(expdate) {
	var numRooms = getElem("numRooms").value;
	var cookieString = "";
	for(var i = 1; i <= numRooms; i++) {
		cookieString +=	getElem("wAdults" + i).value;
		if(i == numRooms) {
			cookieString += "";
		} else {
			cookieString += ",";
		}
	}
	makeCookie("numAdults", cookieString, "/", expdate);
};

function setChildrenCookies(expdate) {
	var numRooms = getElem("numRooms").value;
	var cookieString = "";
	
	for(var i = 1; i <= numRooms; i++) {
		cookieString +=	getElem("Children" + i).value;
		
		if(i == 4) {
			cookieString += "";
		} else {
			cookieString += ",";
		}
		var cookieString2 = "";
		for(var j = 1; j <= getElem("Children" + i).value; j++) {
			cookieString2 += getElem("room" + i + "Child" + j + "Age").value;
			if(j == getElem("Children" + i).value) {
				cookieString2 += "";
			} else {
				cookieString2 += ",";
			}
			makeCookie(("ChildrenAgesRoom" + i), cookieString2, "/", expdate);
		}
	}
	makeCookie("numChildren", cookieString, "/", expdate);	
};

function loadHotelCookie() {
	if(get_cookie("CHECKINDATE") != null) {
		getElem("inpCheckInDate").value = formatDate(new Date(get_cookie("CHECKINDATE")));
		getElem("inpCheckOutDate").value = formatDate(new Date(get_cookie("CHECKOUTDATE")));
		
		var numRooms = get_cookie("numRooms");
		changeSelect("numRooms", numRooms);
		changeRooms(numRooms);
		var numAdults = get_cookie("numAdults");
		numAdults = numAdults.split(",");
		for(var i = 1; i <= numRooms; i++) {
			changeSelect(("wAdults" + i), numAdults[i-1]);
		}
		
		var numChildren = get_cookie("numChildren");
		numChildren = numChildren.split(",")
		for(var i = 1; i <= numRooms; i++) {
			changeSelect(("Children" + i), numChildren[i-1]);
			childrenAges(i, numChildren[i-1]);
			if(parseInt(numChildren[i-1]) > 0) {
				var childAges = get_cookie("ChildrenAgesRoom" + i);
				if(childAges.indexOf(",") == -1) {
					childAges[0] = childAges;
				} else {
					childAges = childAges.split(",");
				}
				for(var j = 1; j <= parseInt(numChildren[i-1]);j++) {
						changeSelect("room" + i + "Child" + j + "Age", childAges[j-1]);
				}
			}
		}
	}
};