function is_valid_email( email ) {
	if ( /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i.test( email ) ) return true;
	else return false;
}

//General error checking for a field
function validate_field ($fieldID, $message, $destinationID, $requiredCheck ) {
	if ( $requiredCheck !== true ) $requiredCheck = false;
 	$destinationID = $destinationID || 'feedback'; 
 	$destination = document.getElementById($destinationID);
 	if ( !document.getElementById($fieldID) ) return true;

 	if ( $requiredCheck === true ) {
 		if ( document.getElementById($fieldID).className != "required" ) return true;
 	}
 	
 	$fieldValue = document.getElementById($fieldID).value;
 	if ( $fieldValue == "" ) {
 	    if ( $destination == null ) {
 	    alert($message);
 	    return false;
 	    }
 	    else { 
 	    $destination.innerHTML = $message;
 	    $destination.style.display = 'block';
 	    return false;
 	    }
 	}

 	return true;
}

function validate_checkBox ($checkBoxID, $message, $destinationID) {
	$destinationID = $destinationID || 'feedback';
	$destination = document.getElementById($destinationID);
	$checkBoxValue = document.getElementById($checkBoxID).checked;
	
	if ($checkBoxValue == false) {
		if ( $destination == null ) {
 		alert($message);
 		return false;
 		}
 		else {
 		$destination.innerHTML = $message;
 		$destination.style.display = 'block';
 		return false;
 		}
	}
	
	return true;
} 

// Validate login
function validate_login() {
	if ( validate_field('ret-username', 'Please enter a Username.') && validate_field('ret-userpass', 'Please enter a password.') ) return true;
	else return false;
}

// Validation for registration
function validate_registration() {

	// Check username
	if ( !validate_field( 'new-username', 'Please enter a Username.', 'register-feedback' ) ) return false;
	
	// Check the passwords
	if ( !validate_field( 'new-userpass', 'Please enter a Password.', 'register-feedback' ) ) return false;
	if ( !validate_field( 'new-userpass2', 'Please confirm your Password.', 'register-feedback' ) ) return false;
	if ( document.getElementById('new-userpass' ).value != document.getElementById('new-userpass2' ).value ) {
		document.getElementById('register-feedback' ).innerHTML = 'Your passwords do not match.';
		document.getElementById('register-feedback' ).style.display = 'block';
		return false;
	}

	// Check the email
	if ( !validate_field( 'email', 'Please enter an Email', 'register-feedback' ) ) return false;
	if ( !is_valid_email( document.getElementById('email' ).value ) ) {
		document.getElementById('register-feedback' ).innerHTML = 'Please enter a valid Email Address.';
		document.getElementById('register-feedback' ).style.display = 'block';
		return false;

	}
	
	// Check Personal Details
	if ( !validate_field( 'first-name', 'Please enter a First Name.', 'register-feedback' ) ) return false;
	if ( !validate_field( 'last-name', 'Please enter a Last Name.', 'register-feedback' ) ) return false;
	if ( !validate_field( 'business-name', 'Please enter a Business Name.', 'register-feedback' ) ) return false;
	if ( !validate_field( 'contact-tel', 'Please enter a Telephone Number.', 'register-feedback' ) ) return false;
	if ( !validate_field( 'url', 'Please enter your Web Address.', 'register-feedback' ) ) return false;
	
	// Check Address Details
	if ( document.getElementById('address-1' ) && document.getElementById('address-2' ) ) {
		if ( document.getElementById('address-1' ).value == '' && document.getElementById('address-2' ).value == '' ) {
			document.getElementById('register-feedback' ).innerHTML = 'Please enter a Street Name &amp; House Number / Name.';
			document.getElementById('register-feedback' ).style.display = 'block';
			return false;
		}
	}
	if ( !validate_field( 'city', 'Please enter a City', 'register-feedback' ) ) return false;
	if ( !validate_field( 'state', 'Please enter a State', 'register-feedback' ) ) return false;
	if ( !validate_field( 'zip', 'Please enter an Zip Code', 'register-feedback' ) ) return false;

	return true;
	
}


// Validation for more info form, fields are only checked if they exist.
function validate_more_info() {
		
	// Check Personal Details
	if ( !validate_field( 'first-name', 'Please enter a First Name.', 'register-feedback', true ) ) return false;
	if ( !validate_field( 'last-name', 'Please enter a Last Name.', 'register-feedback', true ) ) return false;
	// Check the email
	if ( !validate_field( 'email', 'Please enter an Email', 'register-feedback', true ) ) return false;
	if ( !is_valid_email( document.getElementById('email' ).value ) && document.getElementById('email' ).className == 'required' ) {
		document.getElementById('register-feedback' ).innerHTML = 'Please enter a valid Email Address.';
		document.getElementById('register-feedback' ).style.display = 'block';
		return false;
	}
	
	if ( !validate_field( 'contact-tel', 'Please enter a Telephone Number.', 'register-feedback', true ) ) return false;
	if ( !validate_field( 'business-name', 'Please enter a Business Name.', 'register-feedback', true ) ) return false;
	if ( !validate_field( 'url', 'Please enter your Web Address.', 'register-feedback', true ) ) return false;
	
	// Check Address Details
	if ( document.getElementById('address-1' ) && document.getElementById('address-2' ) && document.getElementById('address-1' ).className == 'required' && document.getElementById('address-2' ).className == 'required' ) {
		if ( document.getElementById('address-1' ).value == '' && document.getElementById('address-2' ).value == '' ) {
			document.getElementById('register-feedback' ).innerHTML = 'Please enter a Street Name &amp; House Number / Name.';
			document.getElementById('register-feedback' ).style.display = 'block';
			return false;
		}
	}
	if ( !validate_field( 'city', 'Please enter a City', 'register-feedback', true ) ) return false;
	if ( !validate_field( 'state', 'Please enter a State', 'register-feedback', true ) ) return false;
	if ( !validate_field( 'zip', 'Please enter an Zip Code', 'register-feedback', true ) ) return false;

	// Check the Message
	if ( !validate_field( 'message', 'Please add additional details about exactly what information you want to know.', 'register-feedback', true ) ) return false;

	return true;
	
}