// JavaScript functions for the Mansfield Accommodation Directory website
// Author: Michael Owen
// Copyright (c) 2009   Mansfield Accommodation Directory   All Rights Reserved

// Validates enquiry form
function validateEnquiryForm() {
	var errorFound = false;
	// Hide all validation errors
	$(".validationError").hide();

	if ($("#firstname").val() == "") {
		$("#firstname_required").show();
		errorFound = true;
	}
	if ($("#lastname").val() == "") {
		$("#lastname_required").show();
		errorFound = true;
	}
	if ($("#location").val() == "" || $("#location").val() == "Suburb, State") {
		$("#location_required").show();
		errorFound = true;
	}

	var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
	var emailAddress = $("#email").val();
	if (emailAddress == "" || !emailReg.test(emailAddress)) {
		$("#email_error").show();
		errorFound = true;
	}

	var messageText = $("#message").val();
	if (!(messageText.indexOf('>') == -1)) {
		$("#message_error").show();
		errorFound = true;
	}
	if (!(messageText.indexOf('<') == -1)) {
		$("#message_error").show();
		errorFound = true;
	}

	var integerReg = /(^-?\d\d*$)/;
	
	if ($("#num_beds").val() == "" || isNaN($("#num_beds").val())) {
		$("#beds_error").show();
		errorFound = true;
	}
	if ($("#num_adults").val() == "" || isNaN($("#num_adults").val())) {
		$("#adults_error").show();
		errorFound = true;
	}
	if ($("#num_kids").val() == "" || isNaN($("#num_kids").val())) {
		$("#kids_error").show();
		errorFound = true;
	}
	if ($("#nights").val() == "" || isNaN($("#nights").val())) {
		$("#nights_error").show();
		errorFound = true;
	}
	if ($("#checkin").val() == "") {
		$("#checkin_required").show();
		errorFound = true;
	}

	return errorFound;
}

// Toggles the selection of an accommodation type
function toggleTypeSelection(clickedItem) {
	var selectedListItem = 'search_type_' + clickedItem;
	var selectedAccommType = 'accomm_type_' + clickedItem;
	
	if (document.getElementById(selectedListItem).className == "customListItem customListItemSelected") {
		document.getElementById(selectedListItem).className = "customListItem";
		document.getElementById(selectedAccommType).selected = false;
	} else {
		document.getElementById(selectedListItem).className = "customListItem customListItemSelected";
		document.getElementById(selectedAccommType).selected = true;
	}
}

// Toggles the selection of an accommodation area
function toggleAreaSelection(clickedItem) {
	var selectedListItem = 'search_area_' + clickedItem;
	var selectedAccommArea = 'accomm_area_' + clickedItem;
	
	if (document.getElementById(selectedListItem).className == "customListItem customListItemSelected") {
		document.getElementById(selectedListItem).className = "customListItem";
		document.getElementById(selectedAccommArea).selected = false;
	} else {
		document.getElementById(selectedListItem).className = "customListItem customListItemSelected";
		document.getElementById(selectedAccommArea).selected = true;
	}
}

// Simple aim to stop robots submitting span through a form by hiding a form field from the user (but not the source code).
// When the form is submitted, if the field has content, it must have been submitted by a robot because the user couldn't
// have seen the field.
function protectForm(formField) {
	document.getElementById(formField).className = "hidden";
}

// Validates the enquiry form
function validateEnquireForm() {
	var error = false;
	
	var first_name = document.getElementById('first_name').value;
	var last_name = document.getElementById('last_name').value;
	var email = document.getElementById('email').value;
	var check_in = document.getElementById('checkin').value;
	var check_out = document.getElementById('checkout').value;
	var num_adults = document.getElementById('num_adults').value;
	var num_children = document.getElementById('num_children').value;
	
	if (first_name == "") {
		error = true;
		document.getElementById('error_firstName').className = "formErrorMessage";
	} else {
		document.getElementById('error_firstName').className = "hidden";	
	}
	
	if (last_name == "") {
		error = true;
		document.getElementById('error_lastName').className = "formErrorMessage";
	} else {
		document.getElementById('error_lastName').className = "hidden";
	}
	
	if (validate_email(email) == false) {
		error = true;
		document.getElementById('error_email').className = "formErrorMessage";
	} else {
		document.getElementById('error_email').className = "hidden";
	}
	
	if (validateStayDates(check_in,check_out) == false) {
		error = true;
	}
	
	if (num_adults == "") {
		error = true;
		document.getElementById('error_numAdults').className = "formErrorMessage";
	} else {
		document.getElementById('error_numAdults').className = "hidden";
	}
	
	if (num_children == "") {
		error = true;
		document.getElementById('error_numChildren').className = "formErrorMessage";
	} else {
		document.getElementById('error_numChildren').className = "hidden";
	}
	
	if (error == false) {
		return true;
	} else {
		return false;
	}
}

// Simple validation of an email address
function validate_email(email) {
	if (email == "") {
		return false;
	}
  
	aPos = email.indexOf("@");
	dotPos = email.lastIndexOf(".");
  
	if (aPos < 1 || dotPos - aPos < 2) {
		return false;
	} else {
		return true;
	}
}

// Validate the check in and check out dates
function validateStayDates(checkin,checkout) {
	document.getElementById('error_checkOut1').className = "hidden";
	document.getElementById('error_checkOut2').className = "hidden";
	document.getElementById('error_checkIn').className = "hidden";
	var error = false;
	if (checkin == "") {
		document.getElementById('error_checkIn').className = "formErrorMessage";
		error = true;
	}
	
	if (checkout == "") {
		document.getElementById('error_checkOut2').className = "formErrorMessage";
		error = true;
	}
	
	if (error == true) {
		return false;
	}
	
	// If there is a check in and and check out, check out should be greater than check in
	if (checkin != "" && checkout != "") {
		// Convert check in date to a Date
		var baseDay = checkin.substr(0, 3);
		var baseDD = checkin.substr(4, 2);
		var baseMMM = checkin.substr(7, 3);
		var baseYYYY = checkin.substr(11, 4);
		var formattedDateStr = baseMMM + ' ' + baseDD + ', ' + baseYYYY;
		var baseDateIn = new Date(formattedDateStr);
		
		// Convert check out date to a Date
		var baseDay = checkout.substr(0, 3);
		var baseDD = checkout.substr(4, 2);
		var baseMMM = checkout.substr(7, 3);
		var baseYYYY = checkout.substr(11, 4);
		var formattedDateStr = baseMMM + ' ' + baseDD + ', ' + baseYYYY;
		var baseDateOut = new Date(formattedDateStr);
		
		if (baseDateIn >= baseDateOut) {
			document.getElementById('error_checkOut1').className = "formErrorMessage";
			return false;
		}
	}
	
	return true;
}

// If a search begins on the homepage, set the appropriate search criteria when the user navigates
// from the homepage to the search page.
function setInitialSearchSelections(selectedTypes,selectedAreas,numGuests) {

// Check the boxes for the pre-selected types
	if (selectedTypes != "none") {
		array_selectedTypes = selectedTypes.split(",");
		var i = 0;
		for (i = 0; i < array_selectedTypes.length; i++) {
			document.getElementById('search_type_' + array_selectedTypes[i]).checked = true;
		}
	}
	
	// Check the boxes for the pre-selected areas
	if (selectedAreas != "none") {
		array_selectedAreas = selectedAreas.split(",");
		var j = 0;
		for (j = 0; j < array_selectedAreas.length; j++) {
			document.getElementById('search_area_' + array_selectedAreas[j]).checked = true;
		}
	}
	
	// Set the pre-defined number of guests
	if (numGuests > 0 && numGuests < 10) {
		document.getElementById('num_guests_' + numGuests).selected = true;
	} else if (numGuests >= 10) {
		document.getElementById('num_guests_10').selected = true;
	} else {
		document.getElementById('num_guests_2').selected = true;
	}
	
	updateSearchResults();
}

function clearLinkOver(field) {
	document.getElementById(field).className = "clearLinkOver";
}

function clearLinkOut(field) {
	document.getElementById(field).className = "clearLink";
}

function clearField(field) {
	document.getElementById(field).value = "";
}

// Limit the number of characters that can be inserted in a textarea
// Parameters ...
// 1) limit: max number of characters
// 2) field: the id of the textarea to limit characters in
// 3) feedback: the id of the span containing the number of characters used
// 4) feedbackContainer: the 'x of y' to turn red if x == y
function limitTextArea(limit, field, feedback, feedbackContainer) {
	var currentLength = document.getElementById(field).value.length;
	
	document.getElementById(feedback).innerHTML = currentLength;
	
	if (currentLength > limit) {
		document.getElementById(field).value = document.getElementById(field).value.substring(0, limit);
		currentLength = document.getElementById(field).value.length;
		document.getElementById(feedback).innerHTML = currentLength;
		document.getElementById(feedbackContainer).className = "formErrorMessage";
	}
	if (currentLength == limit) {
		document.getElementById(feedbackContainer).className = "formErrorMessage";
	} else {
		document.getElementById(feedbackContainer).className = "";	
	}
}
