function validate(Form)
{
	var formname = Form.name;
	//alert("name " + Form.name);
	var checkbox_mandatory = false;
	if (Form.name == "find_provider3")
	{
	//	alert(formname);
		checkbox_mandatory = true;
	}
	
	var checkbox_y = "";
	var Element;
	var i;
	var BadFields = "";
	var type;
	var name;
	var outMessage = "";
	var Title;
	var Titles = new Array();
	Titles['Town_City'] = "Town or City";
	Titles["Postcode_Zip"] = "Postcode or Zip code";
	Titles["Property_ID"] = "Property";
	Titles["Howheard_ID"] = "How did you hear about us?";
	Titles["Card_ID"] = "Payment Type";
	Titles["Nights"] = "No. of Nights";
	Titles["Adults"] = "No. of Adults";


	Titles["No_Cots"] = "No. of Cots";
	Titles["No_High_Chair"] = "No. of High Chairs";
	Titles["No_Stair_Guards"] = "No. of Stair Guards";
	Titles["No_Fire_Guards"] = "No. of Fire Guards";
	Titles["No_Coal"] = "No. of Coal Bags";
	Titles["No_Logs"] = "No. of Log Bags";
	Titles["No_Pets"] = "No. of Pets";

	//titles for availability page....
	Titles["fromdate"] = "Start Date";
	Titles["todate"] = "Depart Date";
	Titles["holLength"] = "Duration of stay";
	Titles["rent"] = "Rental Amount";
	
	Titles["Card1"] = "Card Number Section 1";
	Titles["Card2"] = "Card Number Section 2";
	Titles["Card3"] = "Card Number Section 3";
	Titles["Card4"] = "Card Number Section 4";
	Titles["Card5"] = "Card Number Section 5";
	Titles["E_Securityno"] = "Card Security Number";


	Titles[""] = "";

	var FieldValue = new Array();
	var Errored = new Array();
	var radiovalue;

	var Optional = new Array();

	// optional fields
	Optional['Title'] = true;
	Optional['Address_2'] = true;
	Optional['County_State'] = true;
	Optional['Country'] = true;
	Optional["Work_Telephone"] = true;
	Optional["Mobile"] = true;
	Optional["Fax"] = true;
	Optional["Make_Beds"] = true;
	Optional["Children"] = true;
	Optional["Infants"] = true;
	Optional["Deposit"] = true;
	Optional["Total_Rent"] = true;
	//Optional["Cost_Cancel_Ins"] = true;


	//Optional["No_Cots"] = true;
	Optional["Cost_Cots"] = true;
	//Optional["No_High_Chair"] = true;
	Optional["Cost_High_Chair"] = true;
	//Optional["No_Stair_Guards"] = true;
	Optional["Cost_Stair_Guards"] = true;
	//Optional["No_Fire_Guards"] = true;
	Optional["Cost_Fire_Guards"] = true;
	//Optional["No_Coal"] = true;
	Optional["Cost_Coal"] = true;
	//Optional["No_Logs"] = true;
	Optional["Cost_Logs"] = true;
	//Optional["No_Pets"] = true;
	Optional["Cost_Pets"] = true;


	//Optional["Card_ID"] = true;
	/*
	Optional["Cardholder_Name"] = true;
	Optional["Address_of_Card_Holder"] = true;
	Optional["Card1"] = true;
	Optional["Card2"] = true;
	Optional["Card3"] = true;
	Optional["E_Securityno"] = true;
	Optional["Card_Expiry_Date"] = true;
	*/
	Optional["E_Issueno"] = true;
	Optional["Card_Start_Date"] = true;
	Optional["Card4"] = true;
	Optional["Card5"] = true;
	Optional["Address_of_Card_Holder"] = true;
	
	Optional["If_You_Said_Other"] = true;
	Optional["Other_Comments"] = true;

	var Assoc = new Array();
	// associated fields from first quote_request page
	
	//email check
	var e1;
	var e2;

	Assoc["Card_ID"] = "Card1";

	for ( i = 0; i < Form.length; i++ )
	{
		Element = Form.elements[i];
		type = Element.type;

		if (type == "checkbox")
		{
			//alert(type);
			if (Element.checked)
			{
				cbvalue = Element.value;
				if (cbvalue == "Y")
				{
					checkbox_y = true;
				}
			}
		}
		if ( Element.type == 'radio')
		{
			//alert( Element.value + ":" + Element.checked + ":");
			if (Element.checked)
			{
				name = Element.name;
				FieldValue[name] = Element.value;
			}
		}


	}

	if (checkbox_mandatory == true && checkbox_y != true)
	{
		BadFields += "- " + "An area of training" + "\n";
	}


	for ( i = 0; i < Form.length; i++ )
	{
		Element = Form.elements[i];
		//alert(Element.type + " " + Element.name);
		if ( Element.type == 'select-one' )
		{
			//alert(Element.type);
			name = Element.name;
			fieldvalue = selectval(Element);
			if (name.indexOf(" Occupation Type") > 0 && fieldvalue == "Unemployed")
			{
				occ = Form.elements[i + 1].value;
				if (occ == "")
				{
					Form.elements[i + 1].value = "N/A";
				}
			}
			FieldValue[name] = fieldvalue;
			//alert(Element.type + ' ' + name + ' ' + fieldvalue);

			optional = Optional[name];
			if ( (fieldvalue == '' || fieldvalue == name ) && typeof(optional) == "undefined")
			{
				Title = getTitle(name,Titles);
				BadFields += "- " + Title + "\n";
			}   
		}

		if ( Element.type == 'text' || Element.type == 'textarea' || Element.type == 'hidden')
		{
			if(Element.disabled == false)
			{
				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);
					BadFields += "- " + Title + "\n";
				}
			}
		}

		if ( Element.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);
				BadFields += "- " + Title + "\n";
			}   
			if (name == "Password1")
			{	
				var v1 = Form.Password1.value;
				var v2 = Form.Password2.value;
				if (v1.length < 6)
				{
					BadFields += "- Password must be at least 6 characters long\n";
				}
				if (v1 != v2)
				{
					BadFields += "- Passwords do not match\n";
				}
				

			}
		}
		type = Element.type;
	//	alert(type);
		if (type == "radio")
		{
			name = Element.name;
			optional = Optional[name];
			radiovalue =  FieldValue[name] ;
			if (typeof(radiovalue) == "undefined" && typeof(optional) == "undefined")
			{
				Title = getTitle(name,Titles);
				alert(Title);
				BadFields += "- " + Title + "\n";
				FieldValue[name] = "";
			}		
		}

		// 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);
				BadFields += "- " + Title + "\n";
				Errored[name] = true;
			}
		}
		
		if(formname == "Booking")
		{
			if(Element.id == "EMail")
			{
				e1 = Element.value;
				//alert(e1);
			}
			if(Element.id == "EMail2")
			{
				e2 = Element.value;
				//alert(e2);
			}
		}
	}
	var phone = FieldValue["Phone"] + FieldValue["Mobile"] + FieldValue["Work"]  ;

	if (phone == "PhoneMobileWork Phone" || phone == "")
	{
		BadFields += "- a contact phone number\n";
	}


	if ( BadFields )
	{
		outMessage = "We are unable to proceed as the following \n";
		outMessage += "required fields have not been completed:\n\n";
		outMessage += BadFields;

		alert(outMessage);
		return false;
	}
	
	
	if (formname == "availability")
	{
		//alert(formname);
		if((Element.name == "rent") && ((Element.value == "Please call for pricing.") || (Element.value == "")))
		{
			alert("The dates you have selected are unavailable via web bookings. Please amend your holiday duration/dates or ring 015395 38180 for further information.");
			return false;
		}
	}
	
	if(formname == "Booking")
	{
		//alert(formname);
		if(e1 != e2)
		{
			alert("The email addresses you supplied do not match. Please check and retype.");
			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," ");
	}
	return Title;
}

var calc_in_progress = false;

function Calc_Total(ele)
{
	if (ele)
	{
		var calc_store = calc_in_progress;
		calc_in_progress = true;
		
		var numstr = Get_Element_Value(ele).toString();
		if (numstr == false)
		{
			numstr = "0.00";
		}
		numstr = numstr.toString();
		numstr = numstr.replace("£","");
		//alert(numstr);
		var num = parseFloat(numstr);
		if (isNaN(num))
		{
			alert("Please enter a number here, e.g. 1 or 100.00");
			num = 0;
		}
		id = (ele.id)
		//alert(id);
		if (id == undefined)
		{
			//
		}
		/*
		else if (id == "Cancel_Ins")
		{
			val = ele.value;
			ele = Get_Element("Cost_Cancel_Ins")
			ele.value = val;
		}
		*/
		//loop through chargeable items
		for(var ci = 0; ci < 100; ci++)
		{
			if (id == "No_CI_"+ci)
			{
				val = num * Get_Element("Price_CI_"+ci).value;
				//alert(val);
				ele = Get_Element("Cost_CI_"+ci)
				ele.value = val.toFixed(2);
			}
		}
		
		
		if (calc_store == false)
		{
			calc_in_progress = false;
		}
	}
	Recalc_Totals();
}

function Recalc_Totals()
{
	if (calc_in_progress)
	{
		return;
	}
	var tot = 0;
	tot = tot + NumVal("Deposit");
	tot = tot + NumVal("Full_Amount");
	tot = tot + NumVal("Booking_Fee");
	//tot = tot + NumVal("Cost_Cancel_Ins");
	ele = Get_Element("Total_Rent_Ins");
	ele.value = tot.toFixed(2);

	//alert(tot);
	
	//loop through chargeable items
	for(var ci = 0; ci < 100; ci++)
	{
		//ci = ci.toString();
		ele = document.getElementById("Pay_CI_"+ci);
		//ele = Get_Element("Pay_CI_"+ci);
		if (ele != null && ele.checked)
		{
			//alert(tot);
			tot = tot + NumVal("Cost_CI_"+ci);
			//alert(tot);
		}
	}
	
	ele = Get_Element("Total_Paid_Now")
	ele.value = tot.toFixed(2);

}

function toggle_pay_full(init)
{
	var dep = Get_Element("Deposit");
	var total = Get_Element("Total_Rent");
	var pay_full = Get_Element("pay_full_cbx");
	var price = dep.value;
	
	if(pay_full)
	{
		if(pay_full.checked)
		{
			dep.value = total.value;
		}
		else
		{
			dep.value = init.toFixed(2);
		}
	}
	Recalc_Totals();
}

function validate_qs()
{
	var qs_arr = new Array("QS_SleepsCat_ID","QS_Start_Date","QS_duration");
	
	var err_msg = "Please complete the search form before proceeding.";
	var err = false;
	
	for(var i = 0; i < qs_arr.length; i++)
	{
		var ele = Get_Element(qs_arr[i]);
		if(ele)
		{
			var val = Get_Element_Value(ele);
			//val = val.toString();
			if(val == "")
			{
				err = true;
			}
		}
		else
		{
			err = true;
		}
	}
	
	if(err)
	{
		alert(err_msg);
		return false;
	}
	else
	{
		return true;
	}
}


function Get_Element(id)
{
	var rv = false;
	if (document.getElementById)
	{
		rv = document.getElementById(id);
	}
	return rv;
}

function  NumVal(id)
{
	var ele = Get_Element(id);
	var rv = 0;
	var num;
	if (ele)
	{
		num = Get_Element_Value(ele);
	//	alert(num);
		if (num == "" || isNaN(num))
		{
			return rv;
		}
		else
		{
			return parseFloat(num);
		}
	}
	else
	{
		return rv;
	}
}

function Get_Element_Value(ele)
{
	if (ele)
	{
		rv = ele.value;
	}
	//alert(rv);
	return rv;

}

function payment_type_change(ele)
{
	var ptype = Get_Element_Value(ele);
	var card_ele;
	if ((ptype == "") || (ptype == 3) || (ptype == 4))
	{
		//alert('to change');
		card_ele = Get_Element("Cardholder_Name");
		card_ele.value = "";
		card_ele.disabled = true;
		card_ele = Get_Element("Cr_Card_No1");
		card_ele.value = "";
		card_ele.disabled = true;
		card_ele = Get_Element("Cr_Card_No2");
		card_ele.value = "";
		card_ele.disabled = true;
		card_ele = Get_Element("Cr_Card_No3");
		card_ele.value = "";
		card_ele.disabled = true;
		card_ele = Get_Element("Cr_Card_No4");
		card_ele.value = "";
		card_ele.disabled = true;
		card_ele = Get_Element("Cr_Card_No5");
		card_ele.value = "";
		card_ele.disabled = true;
		card_ele = Get_Element("Cr_Card_Address");
		card_ele.value = "";
		card_ele.disabled = true;
		card_ele = Get_Element("sec_num");
		card_ele.value = "";
		card_ele.disabled = true;
		card_ele = Get_Element("Switch_Iss_No");
		card_ele.value = "";
		card_ele.disabled = true;
		card_ele = Get_Element("Start_Date");
		card_ele.value = "";
		card_ele.disabled = true;
		card_ele = Get_Element("Expiry_Date");
		card_ele.value = "";
		card_ele.disabled = true;
	}
	else
	{
		card_ele = Get_Element("Cardholder_Name");
		card_ele.disabled = false;
		card_ele = Get_Element("Cr_Card_No1");
		card_ele.disabled = false;
		card_ele = Get_Element("Cr_Card_No2");
		card_ele.disabled = false;
		card_ele = Get_Element("Cr_Card_No3");
		card_ele.disabled = false;
		card_ele = Get_Element("Cr_Card_No4");
		card_ele.disabled = false;
		card_ele = Get_Element("Cr_Card_No5");
		card_ele.disabled = false;
		card_ele = Get_Element("Cr_Card_Address");
		card_ele.disabled = false;
		card_ele = Get_Element("sec_num");
		card_ele.disabled = false;
		card_ele = Get_Element("Switch_Iss_No");
		card_ele.disabled = false;
		card_ele = Get_Element("Start_Date");
		card_ele.disabled = false;
		card_ele = Get_Element("Expiry_Date");
		card_ele.disabled = false;
	}	
}


function IsNumeric(PossibleNumber)
{
	var PNum = new String(PossibleNumber);
	var regex = /[^0-9]/;
	return regex.test(PNum);
}

function check_deposit(dep, tot)
{
	var new_dep;
	new_dep = document.getElementById("Deposit").value;
	
	new_dep = parseInt(new_dep);
	dep = parseInt(dep);
	tot = parseInt(tot);
	
	var err = "Revised deposits must be between £"+dep+" and £"+tot;
	if((new_dep < dep) || (new_dep > tot))
	{
		alert(err);
		dep = dep.toFixed(2);
		document.getElementById("Deposit").value = dep;
	}
	return true;
}

function check_party_num(max)
{
	var tot_num;
	var adults = document.getElementById("No_Adults").value;
	var children = document.getElementById("No_Children").value;
	var err = "The maximum limit for this property is "+max+" people.";
	max = parseInt(max);
	
	if(adults == "")
	{
		adults = 0;
	}
	else
	{
		adults = parseInt(adults);
	}
	
	if(children == "")
	{
		children = 0;
	}
	else
	{
		children = parseInt(children);
	}
	
	tot_num = adults + children;
	//alert(tot_num);
	
	if(tot_num > max)
	{
		alert(err);
		document.getElementById("No_Adults").value = "";
		document.getElementById("No_Children").value = "";
	}
}