/* form validator */
// Declaring required variables
var digits = "0123456789";
// non-digit characters which are allowed in phone numbers
var phoneNumberDelimiters = "()- ";
// no of digits in a phone no.
var numDigitsInPhoneNumber = 10;
// no of digits in a zip code.
var numDigitsInZipCode = 5;

function isInteger(s)
{   var i;
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag)
{   var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is not not whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function checkPhoneNumber(strPhone){
	s=stripCharsInBag(strPhone,phoneNumberDelimiters);
	return (isInteger(s) && s.length == numDigitsInPhoneNumber);
}

function checkZipCode(strZipCode){
	return (isInteger(strZipCode) && strZipCode.length == numDigitsInZipCode);
}

function isEmailAddr(email)
{
	var result = false;
	var theStr = new String(email);
	var index = theStr.indexOf("@");
	if (index > 0)
	{
		var pindex = theStr.indexOf(".",index);
		if ((pindex > index+1) && (theStr.length > pindex+1))
		result = true;
	}

	return result;
	}

function validRequired(formField,fieldLabel)
{
	var result = true;

	if (formField.value == "")
	{
		alert('Please enter a value for the "' + fieldLabel +'" field.');
		formField.focus();
		result = false;
	}

	return result;
}

function validEmail(formField,fieldLabel,required)
{
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
	result = false;

	if (result && ((formField.value.length < 3) || !isEmailAddr(formField.value)) )
	{
		alert("Please enter a complete email address in the form: yourname@yourdomain.com");
		formField.focus();
		result = false;
	}

	return result;

}


function validNum(formField,fieldLabel,required)
{
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;

	if (result)
	{
		var num = parseInt(formField.value,10);
		if (isNaN(num))
		{
			alert('Please enter a number for the "' + fieldLabel +'" field.');
			formField.focus();    
			result = false;
		}
	} 

	return result;
}

function validZip(formField,fieldLabel,required)
{
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;

	if (result)
	{
		if (checkZipCode(formField.value)==false)
		{
			alert('Please enter a valid number for the "' + fieldLabel +'" field.');
			formField.focus();    
			result = false;
		}
	} 

	return result;
}


function validPhone(formField,fieldLabel,required)
{
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;

	if (result)
	{
		if (checkPhoneNumber(formField.value)==false)
		{
			alert('Please enter a valid number for the "' + fieldLabel +'" field.');
			formField.focus();
			result =  false;
		}
		
	} 

	return result;
}

function validDropDown(formField,fieldLabel) {
	var result = true;

	if (formField.value == "Choose one")
	{
		alert('Please enter a value for the "' + fieldLabel +'" field.');
		formField.focus();
		result = false;
	}

	return result;
  
}

function validateBuyerRegistrationForm(theForm)
{
	// Start ------->
  	
  	if (!validRequired(theForm.name,"Name"))
    	return false;
    
  	if (!validRequired(theForm.address,"Address"))
    	return false; 
    
  	if (!validRequired(theForm.city,"City"))
    	return false;  

	if (!validZip(theForm.zip,"Zip Code"))
    	return false;  
    	
	if (!validPhone(theForm.hometelephone,"Home Telephone"))
    	return false; 
	
	if (!validPhone(theForm.businesstelephone,"Business Telephone"))
    	return false;   
    	
	if (!validNum(theForm.miles,"Max miles to commute"))
    	return false; 
	
	if (!validDropDown(theForm.pricerange,"Price Range"))
    	return false; 
    	
  	if (!validDropDown(theForm.purchasedate,"Purchase Date"))
    	return false;
    
   	if (!validNum(theForm.downpayment,"Amount for down payment"))
    	return false;
    	
 	if (!validDropDown(theForm.creditrating,"Credit History"))
    	return false;
    	
 	if (!validDropDown(theForm.financing,"Will you need financing"))
    	return false;   	
	
	// <--------- End
  
	return true;
}

function validateContactForm(theForm)
{
	// Start ------->
  	
  	if (!validRequired(theForm.fname,"First Name"))
    	return false;
    	
    	if (!validRequired(theForm.lname,"Last Name"))
    	return false;
    
  	if (!validEmail(theForm.email,"Email"))
    	return false; 
    	
	if (!validPhone(theForm.telephone,"Telephone"))
    	return false; 
	
	
	// <--------- End
  
	return true;
}

function validateQuoteForm(theForm)
{
	// Start ------->
  	
  	if (!validRequired(theForm.fname,"First Name"))
    	return false;
    	
    	if (!validRequired(theForm.lname,"Last Name"))
    	return false;
    
  	if (!validEmail(theForm.email,"Email"))
    	return false; 
    	
	if (!validPhone(theForm.telephone,"Telephone"))
    	return false; 
	
	if (!validDropDown(theForm.timeframe,"Time frame for completion"))
    	return false; 
    	
    	if (!validDropDown(theForm.budget,"Budget"))
    	return false; 
    	
	// <--------- End
  
	return true;
}