// Show/hide location options
function showLocationType() {

	// Show city options
	if ($("#city_option").attr("checked")) {

		$("fieldset.postal_code").hide();
		$("fieldset.city").show();
		$("fieldset.city > input[id='city']").focus();

	}
	// Show zipcode options
	else {

		$("fieldset.city").hide();
		$("fieldset.postal_code").show();
		$("fieldset.postal_code > input[id='postal_code_numbers']").focus();

	}

}

// Validate search
function validateSearch() {

	var errors = new Array();

	// Location type
	var location = ($("#city_option").attr("checked"))? 'plaats' : 'postcode';

	// If location type is zipcode, check if is valid
	if (location == 'postcode') {

		// Check zipcode numbers
		var postal_code_numbers = $("input[id='postal_code_numbers']").val();
		var pattern = /^[1-9][0-9]{3}$/;

		if (pattern.test(postal_code_numbers) != true) {

			errors.push('De postcode dient 4 cijfers te hebben');

			if (errors.length == 1) {

				$("input[id='postal_code_numbers']").focus();

			}

		}

		// Check zipcode letters
		var postal_code_letters = $("input[id='postal_code_letters']").val();
		pattern = /^[a-z]{2}$/i;

		if (pattern.test(postal_code_letters) != true) {

			errors.push('De postcode dient 2 letters te hebben');

			if (errors.length == 1) {

				$("input[id='postal_code_letters']").focus();

			}

		}

	}
	// If location type is city, check if it is valid
	else if (location == 'plaats') {

		// Check if city is empty
		if ($.trim($("input[id='city']").val()) == '') {

			errors.push('Je dient de naam van een plaats in te vullen');

			if (errors.length == 1) {

				$("input[id='city']").focus();

			}

		}

	}

	// Check fuel brands
	var options = $("option:selected", $("select[id='fuel_brand']"));

	if (options.length <= 0) {

		errors.push('Je hebt geen brandstofmerk gekozen');

		if (errors.length == 1) {

			$("select[id='fuel_brand']").focus();

		}

	}

	// Check fuel types
	var options = $("option:selected", $("select[id='fuel_type']"));

	if (options.length <= 0) {

		errors.push('Je hebt geen brandstof gekozen');

		if (errors.length == 1) {

			$("select[id='fuel_type']").focus();

		}

	}
	else if (options.length > 3) {

		errors.push('Je hebt meer dan 3 brandstoffen gekozen');

		if (errors.length == 1) {

			$("select[id='fuel_type']").focus();

		}

	}

	return errors;

}

// onload event
$(document).ready(

	function() {

		// Highlight field (onfocus)
		$('#search_fuel_prices > div > fieldset > fieldset > input').focus(

			function() {

				$(this).addClass('onfocus');

			}

		);
		$('#search_fuel_prices > div > fieldset > select').focus(

			function() {

				$(this).addClass('onfocus');

			}

		);

		// Remove highlight from field (onblur)
		$('#search_fuel_prices > div > fieldset > fieldset > input').blur(

			function() {

				$(this).removeClass('onfocus');

			}

		);
		$('#search_fuel_prices > div > fieldset > select').blur(

			function() {

				$(this).removeClass('onfocus');

			}

		);

		// Add location type event
		$("#postal_code_option").click(

			function() {

				showLocationType();

			}

		);
		$("#city_option").click(

			function() {

				showLocationType();

			}

		);

		// Show zipcode option
		showLocationType();

		// Add autocomplete action
		$("#city").autocomplete(
				'steden',
				{
					minChars: 0,
					max: 10,
					autoFill: false,
					mustMatch: false,
					matchContains: false,
					selectFirst: false,
					highlight: false,
					scrollHeight: 220
				}
		);

		// Submit event
		$('#search_fuel_prices').submit(

			function() {

				$('div.message').html('');
				$('div.message').removeClass('failure success warning');

				var errors = validateSearch();
				var count = errors.length;

				if (count > 0) {

					var html = '<p class="close"><a href="#" title="Sluiten"><span>Sluiten</span></a></p>';
					html += '<p>Er zijn een of meerdere fouten geconstateerd:</p>';
					html += '<ul>';

					for (var i = 0; i < count; i++) {

						html += '<li>' + errors[i] + '</li>';

					}

					html += '</ul>';

					$('div.message').addClass('failure');
					$('div.message').html(html);

					$('div.message > p.close > a').click(

						function() {

							$('div.message').html('');
							$('div.message').removeClass('failure success warning');

							return false;

						}

					);

					return false;

				}
				else {

					return true;

				}

			}

		);

		// Blur first field login form (FF)
		$("input[id='user_name']").blur();
		$("fieldset.postal_code > input[id='postal_code_numbers']").focus();

	}

);

