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 one of the options";
			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 valid e-mail address");
		element.focus();
		return false;
	}
	return true;
}

function ValidateZIP(elZIP, elCountry)
{
	var reLocUSA=/^USA$/i;
	var reLocCanada=/^Canada$/i;
	var reZIPUSA=/^\d{5}$/;
	var reZIPCanada=/^[A-Z]\d[A-Z] \d[A-Z]\d$/;
	elZIP.value=elZIP.value.toUpperCase();
	if(reLocUSA.test(elCountry.value))
	{
		if(reZIPUSA.test(elZIP.value)) return true;
		else
		{
			alert("ZIP field was filled incorrectly.\nVerify data and submit again please.");
			elZIP.focus();
			return false;
		}
	}
	else if(reLocCanada.test(elCountry.value))
	{
		if(reZIPCanada.test(elZIP.value)) return true;
		else
		{
			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.\nVerify data and submit again, please.");
			elZIP.focus();
			return false;
		}
	}
	else return true; // don't know how to check correctness
}