// non-digit characters which are allowed in phone numbers
var phoneNumberDelimiters = "()- ";

function validate(frm)									
{
	// checking First Name
	var chkVal = trim(frm.ReqChkFirstName.value, frm.ReqChkFirstName);	
	if( chkVal == "")
	{
		alert('Please enter the First Name.');		
		frm.ReqChkFirstName.focus();		
		return false;
	}

	if(!isAlphabeticString(chkVal))
	{
		alert("Please enter a valid First Name.");
		frm.ReqChkFirstName.focus();
		frm.ReqChkFirstName.select();
		return false;
	}

	// check Last Name
	chkVal = trim(frm.ReqChkLastName.value, frm.ReqChkLastName);
	if( chkVal == "")
	{
		alert('Please enter the Last Name.');
		frm.ReqChkLastName.focus();
		return false;
	}

	if(!isAlphabeticString(chkVal))
	{
		alert("Please enter a valid Last Name.");
		frm.ReqChkLastName.focus();
		frm.ReqChkLastName.select();
		return false;
	}

	// check Address
	chkVal = trim(frm.ReqChkAddress.value, frm.ReqChkAddress);
	if( chkVal == "")
	{
		alert('Please enter the Address.');
		frm.ReqChkAddress.focus();
		return false;
	}
	
	// check City
	chkVal = trim(frm.ReqChkCity.value, frm.ReqChkCity);
	if( chkVal == "")
	{
		alert('Please enter the City Name.');
		frm.ReqChkCity.focus();
		return false;
	}

	if(!isAlphabeticString(chkVal))
	{
		alert("Please enter a valid City Name.");
		frm.ReqChkCity.focus();
		frm.ReqChkCity.select();
		return false;
	}
	
	// check State
	chkVal = frm.state.selectedIndex;
	if( chkVal == 0)
	{
		alert('Please select State/Province.');
		frm.state.focus();
		return false;
	}

	// check Phone
	chkVal = trim(frm.ReqChkPhone.value, frm.ReqChkPhone);
	if( chkVal == 0)
	{	
		alert('Please enter the Phone Number.');
		frm.ReqChkPhone.focus();
		return false;
	}

	var normalizedPhone = stripCharsInBag(chkVal, phoneNumberDelimiters);
	if(isNumber(normalizedPhone) !=1 )
	{
		alert("Phone number should only have numerics.");							
		frm.ReqChkPhone.focus();
		frm.ReqChkPhone.select();
		return false;
	}		
	if(normalizedPhone.length != 10)
	{
		alert("Phone number must always be of ten digits.");			
		frm.ReqChkPhone.focus();
		frm.ReqChkPhone.select();
		return false;
	}
	else
	{			
		frm.ReqChkPhone.value = reformatUSPhone(normalizedPhone);			
	}			

	// check Email
	chkVal = trim(frm.ReqChkEmail.value, frm.ReqChkEmail);
	if( chkVal == "")
	{
		alert('Please enter the Email address.');
		frm.ReqChkEmail.focus();
		return false;
	}

	if (!(chkVal.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1))
	{
		alert("Please enter the Email address in valid format(abc@xyz.com).");   				
		frm.ReqChkEmail.focus();
		frm.ReqChkEmail.select();
		return false;
	}

	// check Zipcode	
	chkVal = trim(frm.ChkZipcode.value, frm.ChkZipcode);	
	if(chkVal != ""  && chkVal != null)
	{	
		if (!((isNumber(chkVal) && ( (chkVal.length == 5) || (chkVal.length == 9)))))
		{
			alert("Please enter Zip Code in valid format containing 5 or 9 digits.");
			frm.ChkZipcode.focus();
			frm.ChkZipcode.select();
			return false;			
		}
	}	
	return true;
}  


function isAlphabeticString (InString)  
{
	if(InString.length==0)
		return (false);
	InString=InString.toLowerCase ()
	RefString="abcdefghijklmnopqrstuvwxyz.-' ";
	for (Count=0; Count < InString.length; Count++)  
	{
		TempChar= InString.substring(Count, Count+1);
		if (RefString.indexOf(TempChar, 0)==-1) 
			return (false);
	}
	return (true);
}

function isNumber(InString)
{		
	var RefString="1234567890";
	for (Count=0; Count < InString.length; Count++)
	{
		TempChar= InString.substring (Count, Count+1);
		if (RefString.indexOf (TempChar, 0)==-1)  
		return (false);
	}
	return (true);
}
   
function stripCharsInBag (s, bag)
{
	var i;
    var returnString = "";
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function reformat (s)
{   
	var arg;
    var sPos = 0;
    var resultString = "";

    for (var i = 1; i < reformat.arguments.length; i++) 
    {
       arg = reformat.arguments[i];
       if (i % 2 == 1) 
       {
			resultString += arg;
	   }
       else 
       {
           resultString += s.substring(sPos, sPos + arg);
           sPos += arg;
       }
    }
    return resultString;
}

function reformatUSPhone (USPhone)
{   
	return (reformat (USPhone, "(", 3, ") ", 3, "-", 4));
}

function trim(str, field)
{
	str = str.replace(/^\s*|\s*$/g,"");	
	field.value = str;
	return str;
}
