function validate(Form)
{
	var formname = Form.name;
	//alert("name " + Form.name);
	var validate_checkboxes = false;
	var validate_radios = false;
	var checkbox_y = "";
	var Element;
	var i;
	var type;
	var name;
	var error_msg = "";
	var Title;
	
	var Titles = new Array();
	
	Titles['email'] = "Email Address";
	
	var FieldValue = new Array();
	var Errored = new Array();
	var radiovalue;
	
	var Optional = new Array();
	
	// optional fields
	Optional['details'] = true;
	Optional['company'] = true;
	
	
	var Assoc = new Array();
	// associated fields from first quote_request page
	
	//Assoc["Card_ID"] = "Card1";
	
	for(i = 0; i < Form.length; i++)
	{
		Element = Form.elements[i];
		type = Element.type;
		//alert(type);
		
		if(type == "checkbox")
		{
			//alert(type);
			if(validate_checkboxes)
			{
				checked = Element.checked;
				//alert(checked);
				if(!Element.checked)
				{
					Title = getTitle(name,Titles);
					error_msg += "- " + Title + "\n";
				}
			}
		}
		
		if(type == 'radio')
		{
			name = Element.name;
			if(validate_radios)
			{
				//alert( Element.value + ":" + Element.checked + ":");
				if(Element.checked)
				{
					FieldValue[name] = Element.value;
				}
			}
			
			optional = Optional[name];
			radiovalue =  FieldValue[name] ;
			if(typeof(radiovalue) == "undefined" && typeof(optional) == "undefined")
			{
				Title = getTitle(name,Titles);
				alert(Title);
				error_msg += "- " + Title + "\n";
				FieldValue[name] = "";
			}
		}
		
		//alert(Element.type + " " + Element.name);
		if(type == 'select-one')
		{
			//alert(type);
			name = Element.name;
			fieldvalue = selectval(Element);
			FieldValue[name] = fieldvalue;
			//alert(type + ' ' + name + ' ' + fieldvalue);
			
			optional = Optional[name];
			if((fieldvalue == '' || fieldvalue == name ) && typeof(optional) == "undefined")
			{
				Title = getTitle(name,Titles);
				error_msg += "- " + Title + "\n";
			}   
		}
		
		if(type == 'text' || type == 'textarea' || type == 'hidden')
		{
			name = Element.name;
			FieldValue[name] = Element.value;
			//alert(name + " " + Element.value); 
			optional = Optional[name];
			if((Element.value == name || Element.value == ''  ) && typeof(optional) == "undefined")
			{
				Title = getTitle(name,Titles);
				error_msg += "- " + Title + "\n";
			}   
		}
		
		if(type == 'password')
		{
			name = Element.name;
			FieldValue[name] = Element.value;
			//alert(name + " " + Element.value); 
			optional = Optional[name];
			if(Element.value == '' && typeof(optional) == "undefined")
			{
				Title = getTitle(name,Titles);
				error_msg += "- " + Title + "\n";
			}   
			if(name == "Password1")
			{
				var v1 = Form.Password1.value;
				var v2 = Form.Password2.value;
				if (v1.length < 6)
				{
					error_msg += "- Password must be at least 6 characters long\n";
				}
				if (v1 != v2)
				{
					error_msg += "- Passwords do not match\n";
				}
			}
		}
		
		// do cross-validation
		name = Element.name;
		assoc = Assoc[name];
		if (typeof(assoc) != "undefined")
		{
			noval = assoc.substr(0,1);
			if (noval == "!")
			{
				triggervalue = "No";
				assoc = assoc.substr(1);
			}
			else
			{
				triggervalue = "Yes";
			}
			radiovalue =  FieldValue[assoc] ;
			myvalue = FieldValue[name];
			errored = Errored[name];
			if (typeof(errored) == "undefined" && radiovalue == triggervalue && (myvalue == "" || typeof(myvalue) == "undefined"))
			{
				Title = getTitle(name,Titles);
				error_msg += "- " + Title + "\n";
				Errored[name] = true;
			}
		}
	}
	
	if(error_msg != "")
	{
		var err = "We are unable to proceed as the following \n";
		err += "required fields have not been completed:\n\n";
		err += error_msg;
		
		alert(err);
		return false;
	}
	return true;
}

function selectval(Sel)
{
	return Sel.options[Sel.selectedIndex].value;
}

function getTitle(name,Titles)
{
	Title = Titles[name];
	if(typeof(Title) == "undefined")
	{
		Title = name;
		Title = Title.replace(/_/g," ");
		Title = UCWords(Title);
	}
	return Title;
}

function UCWords(str) 
{
	//alert(str);
	var new_str = "";
	var i;
	str_split = str.split(' ');
	for(i = 0; i < str_split.length; i++) 
	{
		new_str += str_split[i].substring(0,1).toUpperCase() + str_split[i].substring(1, str_split[i].length) + ' ';
	}
	//alert(new_str);
	return new_str;
}
