/*
 *
 */
var CAndStates = new Array();
// CAndStates[0] = new Array("CANADA", "QC", "Quebec");
// CAndStates[1] = new Array("USA", "NY", "New York");

/*
 *
 */
function addState(country, prov_code, prov_desc)
{
	// for (i=0; i < 2; i += 1)
	for (i=0; i < CAndStates.length; i += 1)
	{
		if (CAndStates[i][0] != country)
			continue;

		for (j=1; j < CAndStates[i].length; j += 2)
		{
			if (CAndStates[i][j] == prov_code)
				return;
		}
	}

	if (i == CAndStates.length)
		CAndStates[i] = new Array(country);

	//
	j = CAndStates[i].length;
	CAndStates[i][j+0] = prov_code;
	CAndStates[i][j+1] = prov_desc;
}

/*
 *
 */
function loadCountryState(country, state)
{
	for (i=0; i < CAndStates.length; i += 1) {
		if (CAndStates[i][0] != country)
			continue;

		// state.value = CAndStates[i][2];
		break;
	}
}


/*
 *
 */
function checkEMailAddress(e, require)
{
	if (0 == 1) alert('checkEMailAddress');

	// if (typeof e != 'undefined') {
		// return;

	var s = e.value;

	if (!require && s == "")
		return true;

	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

	return (filter.test(s));
}

/*
 *
 */
function checkPhone(e, require)
{
	if (0 == 1) alert('checkPhone');

	var s = e.value;

	if (!require && s == "")
		return true;

	var s = s.replace(/[\(\)\.\-\ ]/g, '');
	var filter  = /^([0-9])+$/;

	if (0 == 1) {
		if ((!filter.test(s)) || ((s.length < 10) || (s.length > 20))) {
   		if (0 == 1) alert('The phone number contains illegal characters (' + s + ')');
			return false;
		}
	}

	return ((filter.test(s)) && ((s.length >= 10) && (s.length <= 20)));
}

/*
 *
 */
function checkDate(e, format, require)
{
	if (0 == 1) alert(format.concat('.checkDate'));

	var s = e.value;
	if (!require && s == "")
		return true;

	var filter = /^(0?[1-9]|[1][0-2])[\/](0?[1-9]|[1-2][0-9]|3[0-1])[\/]20[0-2][0-9]$/;
	if ((0 == 1) && (format == "fr")) {
		filter = /^(0?[1-9]|[1][0-2])[\/](0?[1-9]|[1-2][0-9]|3[0-1])[\/]20[0-2][0-9]$/;
	}

	if ((s.length < 10) || (!filter.test(s))) return false;

	//
	var m = s.substr(0, 2);
	var d = s.substr(3, 2);
	var y = s.substr(6, 4);

	var a = new Date(y, m-1, d);
	var b = new Date();

  days_left_until_departure = Math.ceil((a.getTime() - b.getTime()) / (1000 * 60 * 60 * 24));
	if (0 == 1) {
		alert(days_left_until_departure);
	}


	return (days_left_until_departure>=0);
}

/*
 *
 */
function checkName(e, require)
{
	if (0 == 1) alert('checkName');

	var s = e.value;

	if (!require && s == "")
		return true;

	// var filter  = /^[a-zA-Z]([a-zA-Z0-9_\-\. \'])*[a-zA-Z0-9 ]$/;
	var filter  = /^\w([\w\-\. \'])*[\w ]$/;

	return (filter.test(s));
}

/*
 *
 */
function submit_quote(request_language)
{
	var s;

	if (0 == 1) alert(request_language.concat('.submit_quote'));

	// force language to English or French
	if ((request_language == 'f') || (request_language == 'fr'))
		request_language = 'fr';


	// ====================================================================
	// check departure and destionation location
	if (1 == 1)
	{
		//
		if (!checkName(document.get_a_quote.r_departure_1_city, true))
		{
			s = 'Please, enter a correct point of departure';
			if (request_language == 'fr') s = 'Votre point de depart ?';

			alert(s); document.get_a_quote.r_departure_1_city.focus();
			return false;
		}

		//
		if (!checkName(document.get_a_quote.r_destination_1_city, true))
		{
			s = 'Please, enter a correct destination';
			if (request_language == 'fr') s = 'Votre destination ?';

			alert(s); document.get_a_quote.r_destination_1_city.focus();
			return false;
		}
	}

	// ====================================================================
	// check dates
	if (1 == 1)
	{
		// check 
		if (!checkDate(document.get_a_quote.r_departure_1_date, request_language, true))
		{
			s = 'Please, enter a correct date and time of departure';
			if (request_language == 'fr') s = 'Votre date et heure de départ ?';

			alert(s); document.get_a_quote.r_departure_1_date.focus();
			return false;
		}

		//
		switch (parseInt(document.get_a_quote.r_trip_type.value))
		{
			case 0: break;

			case 1: //
				if (!checkDate(document.get_a_quote.r_return_date, request_language, true))
				{
					s = 'Please, enter a correct date and time of return';
					if (request_language == 'fr') s = 'Votre date et heure de retour ?';

					alert(s); document.get_a_quote.r_return_date.focus();
					return false;
				}
				break;

			case 2: //
				//
				if (!checkName(document.get_a_quote.r_departure_2_city, true))
				{
					s = 'Please, enter a correct point of departure (#2)';
					if (request_language == 'fr') s = 'Votre point de depart (#2) ?';

					alert(s); document.get_a_quote.r_departure_2_city.focus();
					return false;
				}

				//
				if (!checkName(document.get_a_quote.r_destination_2_city, true))
				{
					s = 'Please, enter a correct destination (#2)';
					if (request_language == 'fr') s = 'Votre destination (#2) ?';

					alert(s); document.get_a_quote.r_destination_2_city.focus();
					return false;
				}

				//
				if (!checkDate(document.get_a_quote.r_departure_2_date, request_language, true))
				{
					s = 'Please, enter a correct date of departure (Destination #2)';
					if (request_language == 'fr') s = 'Votre date et heure de départ ?';
					
					alert(s); document.get_a_quote.r_departure_2_date.focus();
					return false;
				}

				if (!checkDate(document.get_a_quote.r_departure_3_date, request_language, false))
				{
					s = 'Please, enter a correct date of departure (Destination #3)';
					if (request_language == 'fr') s = 'Votre date et heure de départ ?';
					
					alert(s); document.get_a_quote.r_departure_3_date.focus();
					return false;
				}

				if (!checkDate(document.get_a_quote.r_departure_4_date, request_language, false))
				{
					s = 'Please, enter a correct date of departure (Destination #4)';
					if (request_language == 'fr') s = 'Votre date et heure de départ ?';
					
					alert(s); document.get_a_quote.r_departure_4_date.focus();
					return false;
				}

				if (!checkDate(document.get_a_quote.r_departure_5_date, request_language, false))
				{
					s = 'Please, enter a correct date of departure (Destination #5)';
					if (request_language == 'fr') s = 'Votre date et heure de départ ?';
					
					alert(s); document.get_a_quote.r_departure_5_date.focus();
					return false;
				}
				break;
		}
	}

	// ====================================================================
	//
	if (1 == 1) {
		if (isNaN(parseInt(document.get_a_quote.r_total_pax.value)))
		{
			s = 'Please, enter a # of passengers';
			if (request_language == 'fr') s = 'Nombre de voyageurs ?';

			alert (s); document.get_a_quote.r_total_pax.focus();
			return false;
		}
		s = parseInt(document.get_a_quote.r_total_pax.value);
		if (s < 3) {
			s = 'Please, enter a # of passengers';
			if (request_language == 'fr') s = 'Nombre de voyageurs ? (Minimun: 3)';

			alert(s); document.get_a_quote.r_total_pax.focus();
			return false;
		}
	}

	// ====================================================================
	// type of vehicle is required unless suggest other vehicles is checked
	if (1 == 1) {
		if (document.get_a_quote.vehicle_type.value == "")
		{
			if (!document.get_a_quote.r_suggest_other_vehicles.checked)
			{
				s = 'Please, select a correct type of vehicle';
				if (request_language == 'fr') s = 'Type de véhicule ?';

				alert(s); document.get_a_quote.vehicle_type.focus();
				return false;
			}
		}
	}

	// ====================================================================
	// check user first name and last name
	if (1 == 1) {
		if (document.get_a_quote.r_contact_title.value == "")
		{
			s = 'Mr. or Ms. or Mrs. ?';
			if (request_language == 'fr') s = 'M. ou Mme. ?';

			alert(s); document.get_a_quote.r_contact_title.focus();
			return false;
		}

		if (!checkName(document.get_a_quote.r_contact_first_name, true))
		{
			s = 'Please enter your first name.';
			if (request_language == 'fr') s = 'Prénom ?';

			alert(s); document.get_a_quote.r_contact_first_name.focus();
			return false;
		}

		// check user last name
		if (!checkName(document.get_a_quote.r_contact_last_name, true))
		{
			s = 'Please enter your last name.';
			if (request_language == 'fr') s = 'Nom ?';

			alert(s); document.get_a_quote.r_contact_last_name.focus();
			return false;
		}
	}

	// check user email address
	if (1 == 1) {
		if (!checkEMailAddress(document.get_a_quote.r_contact_email_address, true))
		{
			s = 'Please enter your email address.';
			if (request_language == 'fr') s = 'Courrier électronique ?';

			alert(s); document.get_a_quote.r_contact_email_address.focus();
			return false;
		}
	}

	// check user daytime phone
	if (1 == 1) {
		if (!checkPhone(document.get_a_quote.r_contact_daytime_phone, false))
		{
			s = 'Please, enter a correct daytime phone'; if (request_language == 'fr')
				s = 'Téléphone du jour ?';

			alert(s); document.get_a_quote.r_contact_daytime_phone.focus();
			return false;
		}
	}

	// check user evening phone
	if (1 == 1) {
		if (!checkPhone(document.get_a_quote.r_contact_evening_phone, false))
		{
			s = 'Please, enter a correct evening phone';
			if (request_language == 'fr') s = 'Téléphone du soir ?';

			alert(s); document.get_a_quote.r_contact_evening_phone.focus();
			return false;
		}
	}

	// check user mobile phone
	if (1 == 1) {
		if (!checkPhone(document.get_a_quote.r_contact_mobile_phone, false))
		{
			s = 'Please, enter a correct mobile phone';
			if (request_language == 'fr') s = 'Cellulaire ?';

			alert(s); document.get_a_quote.r_contact_mobile_phone.focus();
			return false;
		}
	}

	// check user fax number
	if (1 == 1) {
		if (!checkPhone(document.get_a_quote.r_contact_fax_number, false))
		{
			s = 'Please, enter a correct fax number';
			if (request_language == 'fr') s = 'Télécopieur ?';

			alert(s); document.get_a_quote.r_contact_fax_number.focus();
			return false;
		}
	}

	//
	return true;
}
