function ValidateByClass(form)
{
	var isGroup=false;
	var isChecked;
	var firstRadio;
	var isRadio;

	for(var i in form.elements)
	{
		try
		{
			if(isGroup)
			{
				if(isRadio && form.elements[i].type!="radio")
				{
					if(isChecked) isGroup=false;
					else
					{
						alert("At least one of the options should be selected.");
						form.elements[firstRadio].focus();
						return false;
					}
				}

				if(!isRadio && form.elements[i].className.search(/group/i)==-1)
				{
					if(isChecked) isGroup=false;
					else
					{
						alert("At least one of the fields should be filled.");
						form.elements[firstRadio].focus();
						return false;
					}
				}
			}

			if(form.elements[i].className.search(/required/i)!=-1)
			{
				if(form.elements[i].type=="radio")
				{
					if(!isGroup) { isGroup=true; isChecked=false; firstRadio=i; isRadio=true; }
					if(form.elements[i].checked) isChecked=true;
				}
    		else
    		{
      		if(form.elements[i].value=="")
      		{
      			alert("Please fill all the required fields.");
      			form.elements[i].focus();
      			return false;
      		}
    		}
			}
			else if(form.elements[i].className.search(/group/i)!=-1)
			{
				if(!isGroup) { isGroup=true; isChecked=false; firstRadio=i; isRadio=false; }
				if(form.elements[i].value!="") isChecked=true;
			}
		}
		catch(e) {}
	}
	return true;
}

function UpdateCountry(form)
{
	if(form.elements['state-prov'].value.search(/AB|BC|MB|NB|NL|NT|NS|NU|ON|PE|QC|SK|YT/)!=-1)
		form.elements['location'].value="CANADA";
	else
		form.elements['location'].value="USA";
}

function ValidateZip(zip, country)
{
	var reCanZip=/^[^\d\s]\d[^\d\s] \d[^\d\s]\d$/i;
	var reUsaZip=/^\d{5}$/;
	if(country.search(/^canada$/i)!=-1)
	{
		if(!reCanZip.test(zip))
		{
			alert('Postal code field was filled incorrectly.\nYou should enter code in form \"ANA NAN\"\n(where A is alpha character and N is numeric character)\nfor a Canadian Postal code.\nCorrect data and submit again, please.');
			return false;
		}
		else return true;
	}
	else if(country.search(/^usa$/i)!=-1)
	{
		if(!reUsaZip.test(zip))
		{
			alert('ZIP field was filled incorrectly.\nYou should enter 5 digits.\nCorrect data and submit again, please.');
			return false;
		}
		else return true;
	}
	else if(country.search(/^usacan$/i)!=-1)
	{
		if(!reCanZip.test(zip) && !reUsaZip.test(zip))
		{
			alert('Valid USA ZIP code or Canadian postal code should be supplied.\nCorrect data and submit again, please.');
			return false;
		}
		else return true;
	}
	else return false;
}

function ValIndex(arr, val)
{
	for(var i=0; i<arr.length; i++) if(val==arr[i]) return i;
	return null;
}

function ValidateByAttribute(form)
{
	var isError=false;
	var msgError="Please fill all the required fields";
	var arrRadios=new Array();
	var arrStates=new Array();
	var arrObjects=new Array();

	var element;
	for(var i=0; element=form.elements[i]; i++)
	{
		if(element.type=="textarea" || element.type=="text" || element.type=="select-one" || element.type=="select-multiple")
		{
			if(element.getAttribute("required") && !element.value)
			{
				isError=true; element.focus();
				if(element.type.search(/select/i)!=-1) msgError="Please select an option from the list";
				break;
			}
		}
		else if(element.type=="radio")
		{
			if(element.getAttribute("required"))
			{
				var idxRadio=ValIndex(arrRadios, element.name);
				if(idxRadio==null)
				{
					arrRadios.push(element.name);
					arrStates.push(element.checked);
					arrObjects.push(element);
				}
				else
				{
					if(!arrStates[idxRadio]) arrStates[idxRadio]=element.checked;
				}
			}
		}
	}

	for(var i=0; i<arrStates.length; i++)
	{
		if(!arrStates[i])
		{
			isError=true; msgError="Please select a serie";
			arrObjects[i].focus(); break;
		}
	}

	if(isError) alert(msgError);

	return !isError;
}

function ValidateEmail(element)
{
	var reEmail=/[\w\-]+@[\w\.\-]+\.\w+/;
	if(!reEmail.test(element.value))
	{
		alert("Please enter vaild e-mail address");
		element.focus();
		return false;
	}
	return true;
}

function ValidateFindDealer(form)
{
	if(form.elements['zip'].value!="")
	{
		return ValidateZip(form.elements['zip'].value, form.elements['location'].value);
	}
	else
	{
		var isError=false;
		if(form.elements['city-town'].value=="") { alert("Please fill all the required fields"); form.elements['city-town'].focus(); isError=true; }
		else if(form.elements['state-prov'].value=="") { alert("Please fill all the required fields"); form.elements['state-prov'].focus(); isError=true; }
		return !isError;
	}
}
