function trim(str)
{
   return str.replace(/^\s*|\s*$/g,"");
}

function isEmpty(str)
{
   return (str == '');
}

function isMinValue(str)
{
   return (str == '(min)');
}

function isMaxValue(str)
{
   return (str == '(max)');
}

/****************************************************************************
Functions for validating quote form
****************************************************************************/
function validateQuote(form) {
	if (isEmpty(trim(form.firstname.value))) {
		form.firstname.focus();
		alert('First Name is a required field. Please try again.');		
		event.returnValue=false;		
	} else if (isEmpty(trim(form.lastname.value))) {
		form.lastname.focus();
		alert('Last Name is a required field. Please try again.');
		event.returnValue=false;
	} else if (isEmpty(trim(form.position.value))) {
		form.position.focus();
		alert('Position is a required field. Please try again.');
		event.returnValue=false;
	} else if (isEmpty(trim(form.company_name.value))) {
		form.company_name.focus();
		alert('Company Name is a required field. Please try again.');
		event.returnValue=false;
	} else if (isEmpty(trim(form.address.value))) {
		form.address.focus();
		alert('Address is a required field. Please try again.');
		event.returnValue=false;
	} else if (isEmpty(trim(form.suburb.value))) {
		form.suburb.focus();
		alert('Suburb is a required field. Please try again.');
		event.returnValue=false;
	} else if (isEmpty(trim(form.state.value))) {
		form.state.focus();
		alert('State/Province is a required field. Please try again.');
		event.returnValue=false;
	} else if (isEmpty(trim(form.postcode.value))) {
		form.postcode.focus();
		alert('Postcode is a required field. Please try again.');
		event.returnValue=false;
	} else if (isEmpty(trim(form.country.value))) {
		form.country.focus();
		alert('Country is a required field. Please try again.');
		event.returnValue=false;
	} else if (isEmpty(trim(form.work_phone.value))) {
		form.work_phone.focus();
		alert('Work phone is a required field. Please try again.');
		event.returnValue=false;
	} else if (!isValidEmail(form.email.value)) {
		form.email.focus();
		alert('Your email address is not a valid email address field. Please try again.');
		event.returnValue=false;
	}
	
	modelregexp = /^model_.+$/;
	numericregexp = /^\d+$/;
	
	for (i=0; i<form.elements.length; i++) {
		
		if (modelregexp.test(form.elements[i].name)){
			if(form.elements[i].checked == true) {
				var model_no = form.elements[i].name.substr(6);
				var model_no_quantity = model_no+"_order_quantity";
				quantity = form.elements[model_no_quantity].value;

				if(!numericregexp.test(quantity)){
					alert('Order Quantity must be numeric.');
					form.elements[model_no_quantity].focus();					
					event.returnValue=false;
					break;
				}
			}
		}
	}	
}


function checkdate(d,m,y)
{
	//var yl=1990; // least year to consider
	//var ym=2010; // most year to consider
	if (m<1 || m>12) return(false);
	if (d<1 || d>31) return(false);
	if (y<yl || y>ym) return(false);
	if (m==4 || m==6 || m==9 || m==11) {
		if (d==31) return(false);
	}
	if (m==2)
	{
		var b=parseInt(y/4);
		if (isNaN(b)) return(false);
		if (d>29) return(false);
		if (d==29 && ((y/4)!=parseInt(y/4))) return(false);
	}
	return(true);
}


/****************************************************************************
Functions for validating contact form
****************************************************************************/
function validateContact(form) {

	if (isEmpty(trim(form.name.value))) {
		form.name.focus();
		alert('Your name is a required field. Please try again.');
		event.returnValue=false;
	} else if (isEmpty(trim(form.email.value))) {
		form.email.focus();
		alert('Your email address is a required field. Please try again.');
		event.returnValue=false;
	} else if (!isValidEmail(form.email.value)) {
		form.email.focus();
		alert('Your email address is not a valid email address field. Please try again.');
		event.returnValue=false;
	} else if (isEmpty(trim(form.comments.value))){
		form.comments.focus();
		alert('Your comments are required. Please try again.');
		event.returnValue=false;
	}	
}

function isValidEmail(emailAdd) {
	emailregexp = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
	if (emailregexp.test(emailAdd)){
		return (true);
	}
	return (false);
}

/****************************************************************************
Functions for validating search form
****************************************************************************/
function validateModelSearch(form){
	if(trim(form.model_no.value) == ''){
		form.model_no.focus();
		alert('Please fill in a model no. to search on.');
		event.returnValue=false;
	}
}

function validateWaveguideSearch(form){
	frequency_band = form.frequency_band.value;	
	min_vswr = trim(form.min_vswr.value);
	max_vswr = trim(form.max_vswr.value);
	min_insertion_loss = trim(form.min_insertion_loss.value);
	max_insertion_loss = trim(form.max_insertion_loss.value);
	min_isolation = trim(form.min_isolation.value);
	max_isolation = trim(form.max_isolation.value);
	numericregexp = /^\d*[\.]?\d*$/;
	
	if(frequency_band == 'none' && isMinValue(min_vswr) && isMaxValue(max_vswr) && isMinValue(min_insertion_loss) &&
		isMaxValue(max_insertion_loss) && isMinValue(min_isolation) && isMaxValue(max_isolation)){
		form.frequency_band.focus();
		alert('Please fill in a search criteria.');
		event.returnValue=false;	
	} else if(!isMinValue(min_vswr) && !numericregexp.test(min_vswr)){
		form.min_vswr.focus();
		alert('Minimum VSWR value must be numeric.');
		event.returnValue=false;
	} else if(!isMaxValue(max_vswr) && !numericregexp.test(max_vswr)){
		form.max_vswr.focus();
		alert('Maximum VSWR value must be numeric.');
		event.returnValue=false;
	} else if(!isMinValue(min_insertion_loss) && !numericregexp.test(min_insertion_loss)){
		form.min_insertion_loss.focus();
		alert('Minimum INSERTION LOSS value must be numeric.');
		event.returnValue=false;
	} else if(!isMaxValue(max_insertion_loss) && !numericregexp.test(max_insertion_loss)){
		form.max_insertion_loss.focus();
		alert('Maximum INSERTION LOSS value must be numeric.');
		event.returnValue=false;
	} else if(!isMinValue(min_isolation) && !numericregexp.test(min_isolation)){
		form.min_isolation.focus();
		alert('Minimum ISOLATION value must be numeric.');
		event.returnValue=false;
	} else if(!isMaxValue(max_isolation) && !numericregexp.test(max_isolation)){
		form.max_isolation.focus();
		alert('Maximum ISOLATION value must be numeric.');
		event.returnValue=false;
	} else {	
		switchblank(form.min_vswr);
		switchblank(form.max_vswr);
		switchblank(form.min_insertion_loss);
		switchblank(form.max_insertion_loss);
		switchblank(form.min_isolation);
		switchblank(form.max_isolation);
		event.returnValue=true;
	}
	
}

function validateCoaxialSearch(form){
	frequency_band = form.frequency_band.value;	
	min_vswr = trim(form.min_vswr.value);
	max_vswr = trim(form.max_vswr.value);
	min_insertion_loss = trim(form.min_insertion_loss.value);
	max_insertion_loss = trim(form.max_insertion_loss.value);
	min_isolation = trim(form.min_isolation.value);
	max_isolation = trim(form.max_isolation.value);
	min_handling_power = trim(form.min_handling_power.value);
	max_handling_power = trim(form.max_handling_power.value);
	numericregexp = /^\d*[\.]?\d*$/;
	
	if(frequency_band == 'none' && isMinValue(min_vswr) && isMaxValue(max_vswr) && isMinValue(min_insertion_loss) &&
		isMaxValue(max_insertion_loss) && isMinValue(min_isolation) && isMaxValue(max_isolation) && isMinValue(min_handling_power) 
		&& isMaxValue(max_handling_power)){
		form.frequency_band.focus();
		alert('Please fill in a search criteria.');
		event.returnValue=false;	
	} else if(!isMinValue(min_vswr) && !numericregexp.test(min_vswr)){
		form.min_vswr.focus();
		alert('Minimum VSWR value must be numeric.');
		event.returnValue=false;
	} else if(!isMaxValue(max_vswr) && !numericregexp.test(max_vswr)){
		form.max_vswr.focus();
		alert('Maximum VSWR value must be numeric.');
		event.returnValue=false;
	} else if(!isMinValue(min_insertion_loss) && !numericregexp.test(min_insertion_loss)){
		form.min_insertion_loss.focus();
		alert('Minimum INSERTION LOSS value must be numeric.');
		event.returnValue=false;
	} else if(!isMaxValue(max_insertion_loss) && !numericregexp.test(max_insertion_loss)){
		form.max_insertion_loss.focus();
		alert('Maximum INSERTION LOSS value must be numeric.');
		event.returnValue=false;
	} else if(!isMinValue(min_isolation) && !numericregexp.test(min_isolation)){
		form.min_isolation.focus();
		alert('Minimum ISOLATION value must be numeric.');
		event.returnValue=false;
	} else if(!isMaxValue(max_isolation) && !numericregexp.test(max_isolation)){
		form.max_isolation.focus();
		alert('Maximum ISOLATION value must be numeric.');
		event.returnValue=false;
	} else if(!isMinValue(min_handling_power) && !numericregexp.test(min_handling_power)){
		form.min_handling_power.focus();
		alert('Minimum HANDLING POWER value must be numeric.');
		event.returnValue=false;
	} else if(!isMaxValue(max_handling_power) && !numericregexp.test(max_handling_power)){
		form.max_handling_power.focus();
		alert('Maximum HANDLING POWER value must be numeric.');
		event.returnValue=false;
	} else {	
		switchblank(form.min_vswr);
		switchblank(form.max_vswr);
		switchblank(form.min_insertion_loss);
		switchblank(form.max_insertion_loss);
		switchblank(form.min_isolation);
		switchblank(form.max_isolation);
		switchblank(form.min_handling_power);
		switchblank(form.max_handling_power);
		event.returnValue=true;
	}
	
}

function validateAntennasSearch(form){
	frequency_band = form.frequency_band.value;	
	min_vswr = trim(form.min_vswr.value);
	max_vswr = trim(form.max_vswr.value);
	min_gain = trim(form.min_gain.value);
	max_gain = trim(form.max_gain.value);
	numericregexp = /^\d*[\.]?\d*$/;
	
	if(frequency_band == 'none' && isMinValue(min_vswr) && isMaxValue(max_vswr) && isMinValue(min_gain) &&
		isMaxValue(max_gain)){
		form.frequency_band.focus();
		alert('Please fill in a search criteria.');
		event.returnValue=false;	
	} else if(!isMinValue(min_vswr) && !numericregexp.test(min_vswr)){
		form.min_vswr.focus();
		alert('Minimum VSWR value must be numeric.');
		event.returnValue=false;
	} else if(!isMaxValue(max_vswr) && !numericregexp.test(max_vswr)){
		form.max_vswr.focus();
		alert('Maximum VSWR value must be numeric.');
		event.returnValue=false;
	} else if(!isMinValue(min_gain) && !numericregexp.test(min_gain)){
		form.min_gain.focus();
		alert('Minimum GAIN value must be numeric.');
		event.returnValue=false;
	} else if(!isMaxValue(max_gain) && !numericregexp.test(max_gain)){
		form.max_gain.focus();
		alert('Maximum GAIN value must be numeric.');
		event.returnValue=false;
	} else {	
		switchblank(form.min_vswr);
		switchblank(form.max_vswr);
		switchblank(form.min_gain);
		switchblank(form.max_gain);				
		event.returnValue=true;
	}
	
}

function switchblank(input) {
	if(isMinValue(input.value) || isMaxValue(input.value)) {
		input.value = '';
	}
}

function switchMin(input) {
	if(isEmpty(input.value)) {
		input.value = '(min)';
	}
}

function switchMax(input) {
	if(isEmpty(input.value)) {
		input.value = '(max)';
	}
}


