var jobBoardUkDefault = '<div class="blue">Please use postcodes to search for jobs in the UK</div>';
var jobBoardJpDefault = '<div class="blue">Please use postal codes to search for jobs in Japan</div>';

function validateJobBoardSearch() {
	var keyword = document.getElementById('keyword');
	var location = document.getElementById('location');
	var country = document.getElementById('country');
	var error = document.getElementById('errorMessage');

	var zipRegEx = null;
	var cityStateRegEx = null;
	
	var cityStateRegEx = new RegExp('^[a-z]+(\\s{1}[a-z]+)*\\s*,\\s*[a-z]+(\\s{1}[a-z]+)*$', 'i');
	
	keyword.value = keyword.value.trim();
	location.value = location.value.trim();
	
	//remove default field before AJAX post
	if (keyword.value == jobBoardKeywordDefault) {
		keyword.value = '';
	}
	
	//remove default field before AJAX post
	if (location.value == jobBoardLocationDefault) {
		location.value = '';
	}

	if (location.value != '') {
		//location must have a country
		if (country.value == '') {
			error.innerHTML = '<div class="errorMsg">You must specify a country for location based searches.</div>';
			return false;
		}

		//validate US location format
		if (country.value == 'US') {
			zipRegEx = new RegExp('^\\d{5}$');
			if (!location.value.match(zipRegEx) && !location.value.match(cityStateRegEx)) {
				error.innerHTML = '<div class="errorMsg">Invalid location format. Please enter "City, State" e.g. "Boston, MA" or US zip code</div>';
				return false;
			}
		}

		//validate CA location format
		if (country.value == 'CA') {
			zipRegEx = new RegExp('^[a-z]\\d[a-z]\\s*\\d{1}[a-z]{1}\\d{1}$', 'i');
			if (!location.value.match(zipRegEx) && !location.value.match(cityStateRegEx)) {
				error.innerHTML = '<div class="errorMsg">Invalid location format. Please enter "City, Province" e.g. "Toronto, ON" or Canadian postal code</div>';
				return false;
			}
		}

		//validate AU location format
		if (country.value == 'AU') {
			zipRegEx = new RegExp('^\\d{4}$');
			if (!location.value.match(zipRegEx) && !location.value.match(cityStateRegEx)) {
				error.innerHTML = '<div class="errorMsg">Invalid location format. Please enter "City, State" e.g. "Sydney, NSW" or Australian postcode</div>';
				return false;
			}
		}

		//validate JP location format
		if (country.value == 'JP') {
			zipRegEx = new RegExp('^\\d{3}-?\\d{4}$');
			if (!location.value.match(zipRegEx)) {
				error.innerHTML = '<div class="errorMsg">Invalid location format. Please enter a Japanese postal code</div>';
				return false;
			}
		}
		
		//validate MX location format
		if (country.value == 'MX') {
			zipRegEx = new RegExp('^\\d{5}$');
			if (!location.value.match(zipRegEx) && !location.value.match(cityStateRegEx)) {
				error.innerHTML = '<div class="errorMsg">Invalid location format. Please enter "City, State" e.g. "Mexico, DIF" or Mexican postal code</div>';
				return false;
			}
		}
		
		//validate UK location format
		if (country.value == 'UK') {
			zipRegEx = new RegExp('\\d');
			if (!location.value.match(zipRegEx)) {
				error.innerHTML = '<div class="errorMsg">Invalid location format. Please enter a UK postcode</div>';
				return false;
			}
		}
	}
	
	jobBoardSearch();
}

function toggleCountryDropDown() {
	$('#countryDropDown').toggle();
}

function updateCountry(code, label) {
	$('#countrySelected').html(label);
	$('#country').val(code);
}

function setCountryMessage() {
	var country = document.getElementById('country');
	var error = document.getElementById('errorMessage');
	if (country.value == 'UK') {
		error.innerHTML = jobBoardUkDefault;
	} else if (country.value == 'JP') {
		error.innerHTML = jobBoardJpDefault;
	} else {
		error.innerHTML = '';
	}
}

function clearDefaultText(textEl) {
	var el = $(textEl);
	if (el.val() == defaultTextMap[el.attr('id')]) {
		el.removeClass('defaultText');
		el.val('');
	}
}

function setDefaultText(textEl) {
	var el = $(textEl);
	if (el.val() == '') {
		el.addClass('defaultText');
		el.val(defaultTextMap[el.attr('id')]);
	}
}
