// Booking Form Validation
// James Nisbet @ Decisive Flow
// ==

// field aliases
var aliases = new Array();
aliases['sign_agree'] = 'Terms & Conditions Agree';
aliases['email'] = 'E-mail';
aliases['agent_email'] = 'Agency E-mail';
aliases['confirm_email'] = 'Confirm E-mail';
aliases['agent_confirm_email'] = 'Confirm Agency E-mail';
aliases['phone_home'] = 'Home Phone';
aliases['phone_daytime'] = 'Daytime Phone';
aliases['address_postal_street'] = 'Postal Address: P.O Box / Street';
aliases['address_postal_suburb'] = 'Postal Address: Suburb';
aliases['address_postal_city'] = 'Postal Address: City';
aliases['address_postal_postcode'] = 'Postal Address: Post Code';
aliases['address_postal_country'] = 'Postal Address: Country';
aliases['address_courier_street'] = 'Delivery Address: Street';
aliases['address_courier_suburb'] = 'Delivery Address: Suburb';
aliases['address_courier_city'] = 'Delivery Address: City';
aliases['address_courier_postcode'] = 'Delivery Address: Post Code';
aliases['address_courier_country'] = 'Delivery Address: Country';

aliases['agent_address_postal_street'] = 'Agency Postal Address: P.O Box / Street';
aliases['agent_address_postal_suburb'] = 'Agency Postal Address: Suburb';
aliases['agent_address_postal_city'] = 'Agency Postal Address: City';
aliases['agent_address_postal_postcode'] = 'Agency Postal Address: Post Code';
aliases['agent_address_postal_country'] = 'Agency Postal Address: Country';
aliases['agent_address_courier_street'] = 'Agency Courier Address: Street';
aliases['agent_address_courier_suburb'] = 'Agency Courier Address: Suburb';
aliases['agent_address_courier_city'] = 'Agency Courier Address: City';
aliases['agent_address_courier_postcode'] = 'Agency Courier Address: Post Code';
aliases['agent_address_courier_country'] = 'Agency Courier Address: Country';

aliases['name_first_1'] = 'First Name(s)';
aliases['name_last_1'] = 'Surname';
aliases['contact_first'] = 'First Name(s)';
aliases['contact_last'] = 'Surname';
aliases['number_in_party'] = 'Number In Party';
aliases['name_known_as_1'] = 'Passenger 1 known as';
aliases['name_known_as_2'] = 'Passenger 2 known as';
	
// collect starting values on load
var sval = new Array();
function df_initValidate() {
	var fields = document.getElementsByTagName('input');
	for(var i=0;i<fields.length;i++) {
		if(fields[i].value!='') sval[fields[i].name] = fields[i].value;
		// hook the submit button
		//if(fields[i].type=='submit') fields[i].onclick = function() { return df_doValidate(); }
		
		/** NOTE: We don't hook the submit button anymore, we hook the <form> onsubmit action, see below **/
	}
	
	var form = document.getElementsByTagName('form');
	for(var i=0;i<form.length;i++) {
		/* Find the form with the action of 'sendform.php' (because there is usually two forms - the actual one we want to hook & the google custom search form */
		if(form[i].action.indexOf('sendform.php') != -1) {
			form[i].onsubmit = function() {return df_doValidate();}
		}
	}
}
	
// run validation
function df_doValidate() {
	// initialize and clear error var
	var error = ''; var goto = '';
	
	// run check on all input fields
	var fields = document.getElementsByTagName('input');
	for(var i=0;i<fields.length;i++) {
		// check if this field has it's own custom name set, and if not, make one
		if(typeof aliases[fields[i].name] == 'undefined') aliases[fields[i].name] = fields[i].name.substr(0,1).toUpperCase()+fields[i].name.substr(1).replace('_',' ');
		// make sure field is a required field
		if(fields[i].id=='required') {
			// first find out what type of field it is
			if(fields[i].type=='text') {
				if(fields[i].name=='email' || fields[i].name=='agent_email') {
					// if it's the email field, it needs to match the 'confirm' field also
					if(!fields[i].value.match(/^[a-z0-9.-_]+(@)[a-z0-9.-]+\.[a-z.]+$/i)) error += "- You must enter a valid E-Mail address.\n";
					if(fields[i].value.toLowerCase()!=fields[i+1].value.toLowerCase()) error += "- The E-mail and Confirm E-mail fields do not match.\n";
				}
				else {
					// make sure it's not empty, or the same as it was on load
					if(fields[i].value=='') error += "- You must complete the "+aliases[fields[i].name]+" field.\n";
					else if(typeof sval[fields[i].name] != 'undefined') {
						// quickfix for country here...
						if(fields[i].value==sval[fields[i].name]&&fields[i].value!='New Zealand') error += "- You must complete the "+aliases[fields[i].name]+" field.\n";
					}
				}
			}
			else if(fields[i].type=='checkbox') {
				if(!fields[i].checked) error += "- You must check the "+aliases[fields[i].name]+" checkbox.\n";
			}
			if(error!=''&&goto=='') goto = i;
		}
		else if(fields[i].name=='payment_method'&&fields[i].checked&&(fields[i].value=='visa'||fields[i].value=='mastercard')) {
			// check following credit card fields and make sure they're not blank
			for(x=0;x<=7;x++) {
				i++;
				if(fields[i].value=='') error += "- You must complete the "+fields[i].name.substr(0,1).toUpperCase()+fields[i].name.substr(1).replace('_',' ')+" field.\n";
			}
		}
		else if(fields[i].name=='package_type') {
			// set bools for further checks
		}
	}
	
	// check for any errors and output if necessary
	if(error!='') {
		alert("The following errors have been found:\n\n"+error);
		if(goto!='') fields[goto].focus();
		return false;
	}
	else return true;
}

// Expand and minimize fields
function myExpand(what,where) {
	ex = document.getElementById(what);
	if(ex.style.display=='none') { ex.style.display = 'block'; where.innerHTML = '&ndash; '+where.title; }
	else { ex.style.display = 'none'; where.innerHTML = '+ '+where.title; }
}