function validateLoginForm(f) {

	if (f.username.value == '' || f.password.value == '') {
		alert("Please enter your username and password.");
		if (f.username.value == '') {
			f.username.focus();
		} else {
			f.password.focus();
		}
		return false;
	}

	f.submit();

	return false;
}

function submitLogin(f) {
	if (f.username.value == '' || f.password.value == '') {
		alert("Please enter your username and password to login.");
	} else {
		f.formAction.value = 'doLogin';
		f.action = '/login.php';
		f.submit();
	}
}

function updatePasswordField(e) {
	if (e.name == 'passwordDummy') {
		e.style.display = 'none';
		e.form.password.style.display = '';
		e.form.password.value = '';
		e.form.password.focus();
	} else if (e.name == 'password' && e.value == '') {
		e.style.display = 'none';
		e.form.passwordDummy.style.display = '';
	} else {
		return false;
	}
}

function validateChangePassword(f) {
	if (f.currentPassword.value == '' || f.newPassword.value == '' || f.newPassword2.value == '') {
		alert("Please complete all fields.");
		return false;
	}

	if (f.newPassword.value != f.newPassword2.value) {
		alert("New password & confirmation value do not match. Please check.");
		return false;
	} else if (f.newPassword.value.length < 5) {
		alert("Your password must be at least 5 characters long.");
		return false;
	}

	f.submit();
	return true;
}

function numeralsOnly(evt) {
	evt = (evt) ? evt : event;
	var charCode = (evt.charCode) ? evt.charCode : ((evt.keyCode) ? evt.keyCode : ((evt.which) ? evt.which : 0));
	if (charCode > 31 && (charCode < 48 || charCode > 57)) {
		return false;
	}
	return true;
}

function addLoadEvent(func) {
	var oldOnLoad = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			oldOnLoad();
			func();
		}
	}
}

var expandedListing = false;
var expandingListing = false;
var expansionSpeed = 5;

function expandListing(i) {
	
	if (expandingListing) return;	
	
	var container = 'eventDescContainer' + i;
	var content   = 'eventDescContent' + i;
	
	if (document.getElementById(container).offsetHeight > 30) {
		shrinkListingContainer(container, content);
	} else {
		expandListingContainer(container, content);
	}
	
}

function expandListingContainer(c1, c2) {
	
	var container = document.getElementById(c1);
	var content = document.getElementById(c2);
	
	if (!container || !content) alert("Error!");
	
	expandingListing = true;
	
	var targetHeight = content.offsetHeight;
	
	var currentHeight = container.offsetHeight;
	
	var goAgain = true;
	if (currentHeight > targetHeight) {
		goAgain = false;
		expandingListing = false;
		expandedListing = c1;
		return;
	}
	
	var height = currentHeight + 6;
	
	container.style.height = height + 'px';
	
	if (goAgain) {
		setTimeout("expandListingContainer('" + c1 + "', '" + c2 + "')", expansionSpeed);
	}
}


function shrinkListingContainer(c1, c2) {
	
	var container = document.getElementById(c1);
	var content = document.getElementById(c2);
	
	if (!container || !content) alert("Error!");
	
	expandingListing = true;
	
	var targetHeight = 30;
	
	var currentHeight = container.offsetHeight;
	
	var goAgain = true;
	if (currentHeight <= targetHeight) {
		container.style.height = '30px';
		goAgain = false;
		expandingListing = false;
		expandedListing = false;
		return;
	}
	
	var height = currentHeight - 6;
	
	container.style.height = height + 'px';
	
	if (goAgain) {
		setTimeout("shrinkListingContainer('" + c1 + "', '" + c2 + "')", expansionSpeed);
	}
}

function validateRegistrationForm(f) {
	var errorState = 0;
	var requiredFields = new Array("regionID", "userEmail", "userFirstName", "userLastName",
		"userDateOfBirth", "userAddr1", "userPassword", "userPasswordConfirm");
		
	for (var i = 0; i < requiredFields.length; i++) {
		with (f.elements[requiredFields[i]]) {
			if (tagName == 'SELECT') {
				if (options[selectedIndex].value == '') {
					className = 'error';
					errorState = 1;
				} else {
					className = '';
				}
			} else {
				if (value == '') {
					className = 'error';
					errorState = 1;
				} else {
					className = '';
				}
			}
		}
	}
	
	if (errorState == 1) {
		alert("Please complete the highlighted fields.");
		return false;
	}
	
	if (f.userPassword.value != f.userPasswordConfirm.value) {
		alert("Your password entries do not match!");
		return false;
	} else if (f.userPassword.value.length < 5) {
		alert("Please ensure your password is at least 5 characters long.");
		return false;
	}
	
	f.formAction.value = 'processRegistration';
	f.submit();
}

function validateUserData(f) {
	var errorState = 0;
	var requiredFields = new Array("regionID", "userEmail", "userFirstName", "userLastName",
		"userAddr1");
		
	for (var i = 0; i < requiredFields.length; i++) {
		with (f.elements[requiredFields[i]]) {
			if (tagName == 'SELECT') {
				if (options[selectedIndex].value == '') {
					className = 'error';
					errorState = 1;
				} else {
					className = '';
				}
			} else {
				if (value == '') {
					className = 'error';
					errorState = 1;
				} else {
					className = '';
				}
			}
		}
	}
	
	if (errorState == 1) {
		alert("Please complete the highlighted fields.");
		return false;
	}
	
	f.formAction.value = 'updateUserData';
	f.submit();
}

function validateCompetitionForm(f) {
	var errorState = 0;
	var requiredFields = new Array("userEmail", "userFirstName", "userLastName",
		"userAddr1");
		
	for (var i = 0; i < requiredFields.length; i++) {
		if (f.elements[requiredFields[i]].value == '') {
			f.elements[requiredFields[i]].className = 'error';
			errorState = 1;
		} else {
			f.className = '';
		}
	}
	
	if (f.answerText) {
		if (f.answerText.value == '') {
			errorState = 1;
			f.answerText.className = 'error';
		} else {
			f.answerText.className = '';
		}
	}
	if (errorState == 1) {
		alert("Please complete the highlighted fields.");
		return false;
	}
		
	f.formAction.value = 'submitEntry';
	f.submit();
}

function prepListingSearch() {
	var f = document.getElementById('sfm');
	if (!f) return false;
	
	if (f.skw) {
		if (f.skw.value != 'Keyword') {
			f.skw.style.color = '#333333';
		}
		f.skw.onfocus = function(){
			if (this.value == 'Keyword') {
				this.value = '';
				this.style.color = '#333333';
			}
		}
		f.skw.onblur = function(){
			if (this.value == '') {
				this.value = 'Keyword';
				this.style.color = '#A0A0A0';
			}
		}
	}
	
	if (f.sfd) {
		if (f.sfd.value != 'From (Date)') {
			f.sfd.style.color = '#333333';
		}
		f.sfd.onfocus = function(){
			if (this.value == 'From (Date)') {
				this.value = '';
				this.style.color = '#333333';
			}
		}
		f.sfd.onblur = function(){
			if (this.value == '') {
				this.value = 'From (Date)';
				this.style.color = '#A0A0A0';
			}
		}
	}
	
	if (f.sed) {
		if (f.sed.value != 'To (Date)') {
			f.sed.style.color = '#333333';
		}
		f.sed.onfocus = function(){
			if (this.value == 'To (Date)') {
				this.value = '';
				this.style.color = '#333333';
			}
		}
		f.sed.onblur = function(){
			if (this.value == '') {
				this.value = 'To (Date)';
				this.style.color = '#A0A0A0';
			}
		}
	}
	
	if (f.ssb) {
		f.ssb.className = 'searchButton';
		f.ssb.onfocus = function(){
			this.blur();
		}
		f.ssb.onclick = validateSearchForm;
	}
	if (f.srb) {
		f.srb.className = 'searchButton';
		f.srb.onfocus = function(){
			this.blur();
		}
		f.srb.onclick = resetSearchForm;
	}
	
	f.style.visibility = 'visible';
}

function validateSearchForm() {
	var f = document.getElementById('sfm');
	if (!f) return false;
	if (f.sfd && f.sfd.value == 'From (Date)') {
		f.sfd.disabled = true;
	}
	if (f.sed && f.sed.value == 'To (Date)') {
		f.sed.disabled = true;
	}
	if (f.skw && f.skw.value == 'Keyword') {
		f.skw.disabled = true;
	}
	f.ssb.value = 'Updating...';
	f.ssb.disabled = true;
	f.submit();
}

function resetSearchForm() {
	var f = document.getElementById('sfm');
	if (!f) return false;
	if (f.sfd) f.sfd.disabled = true;
	if (f.sed) f.sed.disabled = true;
	if (f.skw) f.skw.disabled = true;
	f.submit();
}

function validateReviewForm(f) {
	var errorState = 0;
	var requiredFields = new Array("bookTitle", "bookAuthor", "reviewText");
		
	for (var i = 0; i < requiredFields.length; i++) {
		if (f.elements[requiredFields[i]].value == '') {
			f.elements[requiredFields[i]].className = 'error';
			errorState = 1;
		} else {
			f.className = '';
		}
	}
	
	if (errorState == 1) {
		alert("Please complete the highlighted fields.");
		return false;
	}
	
	f.formAction.value = 'submitReview';
	f.submit();
}

function validateDiscussionForm(f) {
	var errorState = 0;
	var requiredFields = new Array("threadTitle", "messageText");
		
	for (var i = 0; i < requiredFields.length; i++) {
		if (!f.elements[requiredFields[i]]) continue;
		if (f.elements[requiredFields[i]].value == '') {
			f.elements[requiredFields[i]].className = 'error';
			errorState = 1;
		} else {
			f.className = '';
		}
	}
	
	if (errorState == 1) {
		alert("Please complete the highlighted fields.");
		return false;
	}
	
	f.submit();
}

function validateForumReply(f) {
	var errorState = 0;
	var requiredFields = new Array("messageText");
		
	for (var i = 0; i < requiredFields.length; i++) {
		if (!f.elements[requiredFields[i]]) continue;
		if (f.elements[requiredFields[i]].value == '') {
			f.elements[requiredFields[i]].className = 'error';
			f.elements[requiredFields[i]].focus();
			errorState = 1;
		} else {
			f.className = '';
		}
	}
	
	if (errorState == 1) {
		alert("Please complete the highlighted fields.");
		return false;
	}
	
	f.submit();
}

function processReviewCategorySelect(f) {
	var url = '/reviews/books/' + f.categoryID.options[f.categoryID.selectedIndex].value + '/list';
	document.location.href = url;
}

function populateRegionContactList() {
	var s = document.getElementById('regionContactSelector');
	if (!s) return false;
	
	for (var i = 0; i < ctdb.length; i++) {
		var o = new Option(ctdb[i][0], i);
		s.options[s.options.length] = o;
	}
	
	s.options[0].text = 'Select Location...';
}

function updateAdvertDisplayType(f) {
	if (f.advertDisplayType.options[f.advertDisplayType.selectedIndex].value == 'REGION') {
		document.getElementById('addAdvertRegionRow').style.display = '';
		document.getElementById('currentAdvertRegionsRow').style.display = '';
	} else {
		document.getElementById('addAdvertRegionRow').style.display = 'none';
		document.getElementById('currentAdvertRegionsRow').style.display = 'none';
	}
}

function updateAdvertDescriptionCounter(t) {
	var max = 500;
	var c = t.value.length;
	var s = document.getElementById('advertDescriptionCounter');
	s.innerHTML = c;
	if (c > max) {
		s.style.color = '#dd0000';
	} else {
		s.style.color = '';
	}
}

function validateAdvertForm(f) {
	var errorState = 0;
	var requiredFields = new Array("advertHeading", "advertText", "advertPrice");
		
	for (var i = 0; i < requiredFields.length; i++) {
		if (!f.elements[requiredFields[i]]) continue;
		if (f.elements[requiredFields[i]].value == '') {
			f.elements[requiredFields[i]].className = 'error';
			errorState = 1;
		} else {
			f.className = '';
		}
	}
	
	if (errorState == 1) {
		alert("Please complete the highlighted fields.");
		return false;
	}
	
	f.submit();
}

function moveClassifiedSubCat(s) {
	if (s.selectedIndex == 0) return false;
	
	document.location.href = '/adverts/list/' + s.options[s.selectedIndex].value;
	
}

function showAdvertEnquiryForm(a) {
	var enquiryWindow = window.open('/adverts/enquiry/' + a, enquiryWindow, 'width=500,height=385,toolbar=no,status=no,resizable=yes');
}

function validateAdvertEnquiry(f) {
	if (f.enqName.value == '') {
		alert("Please provide your name.");
		f.enqName.focus();
		return false;
	} else if (f.enqTel.value == '' && f.enqEmail.value == '') {
		alert("Please provide either an email address or telephone number.\n\nWe recommend providing both.");
		f.enqEmail.focus();
		return false;
	}
	
	f.submit();	
}

function confirmDeleteClassified(f) {
	if (confirm("Are you sure you want to delete this advert?\n\nClick OK to delete.")) {
		f.formAction.value = 'deleteAdvert';
		f.submit();
	}
}

function updateKWSearchForm(action) {
	var f = document.getElementById('keywordSearchForm');
	if (!f) return false;
	
	if (action == 'blur') {
		if (f.keyword.value == '') f.keyword.value = 'Keyword Search';
	} else {
		if (f.keyword.value == 'Keyword Search') f.keyword.value = '';
	}
	
}

function updateForumRegion(s) {
	if (s.options[s.selectedIndex].value != '') {
		document.location.href = "/forums?setRegionID=" + s.options[s.selectedIndex].value;
	}
}

function jumpToBookReview(s) {
	if (s.selectedIndex == 0 || s.options[s.selectedIndex].value == '') {
		return false;
	}
	
	var id = s.options[s.selectedIndex].value;
	
	document.location.href = '/reviews/books/findBook?reviewID=' + id;
}