var quote_form = {
	
	page_init: function () {
	
		this.setupCalendars();

		var myrules = {
			'#resident_of': function (el) {
				el.onchange = function () {
					quote_form.check_country(el.value);
				},
				el.onfocus = function () {
					quote_form.show_help('resident_of');
				}
			},
			'#type_of_cover': function (el) {
				el.onchange = function () {
					quote_form.check_type_of_cover(el.value);
				},
				el.onfocus = function () {
					quote_form.show_help('type_of_cover');
				}
			},
			'#destination_region': function (el) {
				el.onfocus = function () {
					quote_form.show_help('destination');
				}
			},
			'#destination_country': function (el) {
				el.onfocus = function () {
					quote_form.show_help('destination');
				}
			},
			'#show_d_countries': function (el) {
				el.onclick = function () {
					 return quote_form.toggle_destinations(el);
				}
			},
			'#show_d_regions': function (el) {
				el.onclick = function () {
					 return quote_form.toggle_destinations(el);
				}
			},
			'#max_trip_duration': function (el) {
				el.onfocus = function () {
					quote_form.show_help('max_trip_duration');
				}
			},
			'#number_of_travellers': function (el) {
				el.onchange = function () {
					quote_form.check_number_of_travellers(el.value);
				},
				el.onfocus = function () {
					quote_form.show_help('travelers');
				}
			},
			'#party_type': function (el) {
				el.onfocus = function () {
					quote_form.show_help('party_type');
				}				
			},
			'#main_submit': function (el) {
				el.onclick = function () {
					SqmForm.submit_form($('quoteForm'));
				}
			},
			'#options_section_header': function (el) {
				el.onclick = function() {
					Element.toggle('options_section');
					if (Element.visible('options_section')) {
						quote_form.show_help('options');
					}
				}
			},
			'#options_submit': function (el) {
				el.onclick = function () {
					// only submit the filterForm if you are on the quote view page.
					if (document.body.id == "view_quote") {
						SqmForm.submit_form($('filterForm'));
					// otherwise submit the whole quote form
					} else {
						SqmForm.submit_form($('quoteForm'));
					}
				}
			},
			'#start_date': function (el) {
				el.onblur = function () {
					return quick_check_date(el);
				},
				el.onfocus = function () {
					quote_form.show_help('date');
				}
			},
			'#end_date': function (el) {
				el.onblur = function () {
					return quick_check_date(el);
				},
				el.onfocus = function () {
					quote_form.show_help('date');
				}
			},
			'#ages_row .age': function (el) {
				el.onblur = function (el) {
					return quote_form.check_ages();
				},
				el.onchange = function (el) {
					quote_form.check_ages();
				},
				el.onfocus = function () {
					quote_form.show_help('travelers');
				}
								
			}				
		
		};

		Behaviour.register(myrules);
		Behaviour.apply();
		
		SqmForm.section_header_edit_class = 'section_header';
		SqmForm.section_header_error_class = 'section_header';
		
		SqmForm.sections = Array( 	{ 	name: 		'main',		
										validate: 	quote_form.validate_main,
										nohide: 	'1' },
									{ 	name: 		'options', 	
										validate: 	quote_form.validate_options, 
										optional: 	'1' }
									);

	},
	
	show_help: function (help) {
		
		if (!$(help+'_help')) return false;
		
		var els = $('help').getElementsByTagName('div');
		
		for (var i=0 ; i<els.length ; i++) {
			Element.hide(els[i]);
		}
		
		Element.show(help+'_help');
		
	},
	
	setupCalendars: function() {

		Calendar.setup({
		   inputField     :    "start_date",   // id of the input field
		   ifFormat       :    "%d/%m/%Y",   // format of the input field
		   showsTime      :    false,
		   timeFormat     :    "24",
		   align          :    "Bl",
		   button         :    "start_date_trigger",
		   weekNumbers    :    false,
		   range	  :    [2004,2100]
		});
		Calendar.setup({
		   inputField     :    "end_date",   // id of the input field
		   ifFormat       :    "%d/%m/%Y",   // format of the input field
		   showsTime      :    false,
		   timeFormat     :    "24",
		   align          :    "Bl",
		   button         :    "end_date_trigger",
		   weekNumbers    :    false,
		   range	  :    [2004,2100]
		});

	},
	
	validate_main: function () {

		SqmForm.reset_errors();
		
		if(quote_form.check_country($('resident_of').value)) // Check if Resident of UK or not
		{  
			SqmForm.check_if_empty('resident_of', 'Please the country which you are a resident of.');		// Resident of is required
			SqmForm.check_if_empty('type_of_cover', 'Please specify the type of cover you need.');			// Type of cover is required

			if (Element.visible('d_countries')) {
				SqmForm.check_if_value_is('destination_country', 'Please specify your destination country.', { value: ' ' });	// Destination country is required
				SqmForm.check_if_empty('destination_country', 'Please specify your destination country.');						// Destination country is required
			} else {
				$('destination_country').selectedIndex = 0;
			}

			if (Element.visible('d_regions')) {
				SqmForm.check_if_empty('destination_region', 'Please specify your destination region.');		// Destination region is required
			} else {
				$('destination_region').selectedIndex = 0;
			}

			SqmForm.check_if_empty('start_date', 'Please specify the start date for your cover.');				// start date is required
			SqmForm.check_if_value_is_date('start_date', 'Please specify a valid start date for your cover.');	// start date is valid date

			SqmForm.check_if_empty('end_date', 'Please specify the end date for your cover.');					// end date is required
			SqmForm.check_if_value_is_date('end_date', 'Please specify a valid end date for your cover.');		// end date is valid date

			if (Element.visible('max_trip_duration_row')) {
				SqmForm.check_if_empty('max_trip_duration', 'Please specify the maximum trip length.');			// maximum trip duration is required	
			}

			// end date is after start date	
			if (!SqmForm.check_if_date_is_after('end_date', 
												'The start date you specified is after your end date.  Please make sure this is correct.', 
												{ date: $('start_date').value } )
												) {
				SqmForm.add_clear_error_onchange('start_date');
				SqmForm.add_clear_error_onchange('type_of_cover');
			}

			SqmForm.check_if_date_is_after('start_date', 
												'Your start date cannot be in the past.  Please make sure this is correct',
												{ date: $('today').value });


			SqmForm.check_if_empty('number_of_travellers', 'Please specify the number of travellers.');		// number of travellers is required

			for (var i=1 ; i<11 ; i++) {

				if (Element.visible('age'+i)) {
					SqmForm.check_if_empty('age'+i, 'Please specify the age for all travellers.');		// age is required
				} else {
					$('age'+i).value = '';
				}

			}

			if (Element.visible('party_type_row')) {
				SqmForm.check_if_empty('party_type', 'Please specify the type of party.');					// party is required
			} else {
				$('party_type').selectedIndex = 0;
			}

			if (SqmForm.is_error) {
				var divs = $('main_section_header').getElementsByTagName('div');
				for (var i=0 ; i<divs.length ; i++) {
					//Element.removeClassName(divs[i], 'mark_edit');
					//Element.removeClassName(divs[i], 'mark_doc');
					//Element.addClassName(divs[i], 'mark_error');
				}
			}
			return !SqmForm.is_error;
		}
		else 
		{
			return false;
		} 
		
	},

	validate_options: function() {

		SqmForm.reset_errors();

		// all these fields are optional

		return !SqmForm.is_error;

	},

	check_ages: function() {

		SqmForm.reset_errors();
		SqmForm.clear_field_error();

		var kids = 0;
		var adults = 0;
		var travelers = 0;
		
		for (var i=1 ; i<11 ; i++) {

			if (Element.visible('age'+i)) {
				
				travelers++;
				
				if ($F('age'+i) >= 21) {
					adults++;
				} else if ($F('age'+i) != '') {
					kids++;
				}

			}

		}

		// show the party type drop down for:
		// 1. Couples - two adults travelling
		// 2. Families - two adults and the rest kids travelling
		// 3. Single Parent Families - one adult and the rest kids traveling
		if (travelers >= 2) {
			
			Element.show('party_type_row');

			var val = $('party_type').value;			
			var sel = $('party_type');
		
			for ( var i=0 ; i<sel.options.length ; i++ ) {
				sel.options[i] = null;
			}
			
			sel.options.length = 0;
			
			var selected = (val == '1') ? 1 : 0;

			sel.options[sel.options.length] = new Option('Please Select', '', 0, 0);			
			sel.options[sel.options.length] = new Option('Individuals', '1', 0, selected);
			
			if (travelers == 2) {
				var selected = (val == '2') ? 1 : 0;
				sel.options[sel.options.length] = new Option('Couple', '2', 0, selected);				
			}
			
			if ((travelers == 2 && adults == 1) || (travelers >= 3 && adults == 2)) {
				var selected = (val == '3') ? 1 : 0;
				sel.options[sel.options.length] = new Option('Family', '3', 0, selected);								
			}
			
			
		}
			
		if (travelers == 1 || sel.options.length == 2) {
			Element.hide('party_type_row');
		}

		return true;
	},

	check_country: function (c_id) {

		if (c_id == '') return false;

		switch (c_id) {
			case '174': // UK 
			case '229':
			case '230':
			case '231':
			case '77':
			case '225':
				Element.show('type_of_cover_row');
				return true; // Country is in the UK
				break;
			case '209': // US
			default:
				var selectIndex = $('resident_of').selectedIndex;
				if(confirm('Please note - you are being transfered to our site for residents of ' + $('resident_of')[selectIndex].innerHTML + ' to continue your quote.'))
				{
					self.location = '/redirect/us';
					return false;
				}
				else
				{
					return false;
				}
				break;
		}
	},

	check_type_of_cover: function (cover) {
		if (cover == '') return false;

		switch (cover) {
			case '2': // annual
				Element.show('max_trip_duration_row');
				Element.hide('end_date_label');
				Element.hide('end_date_trigger');
				Element.hide('end_date');
				break;
			default:
				Element.hide('max_trip_duration_row');
				Element.show('end_date_label');
				Element.show('end_date_trigger');
				Element.show('end_date');
				break;
		}
		Element.show('destination_row');
		Element.show('travel_dates_row');
		Element.show('number_of_travellers_row');

	},

	check_number_of_travellers: function (num) {

		if (num == '') return false;

		Element.show('ages_row');	

		for (var i=1 ; i<11 ; i++) {

			if (i <= num) {
				Element.show('age'+i);
			} else {
				Element.hide('age'+i);
			}
		}	
		
		if (num == 1) {
			Element.update('age1_label', 'Age of traveller');
		} else {
			Element.update('age1_label', 'Age of travellers');
		}
		
		this.check_ages();
		Element.show('main_submit');
		Element.show('additional_help');

	},

	toggle_destinations: function (el) {
		var type = el.parentNode.parentNode.id;

		switch (type) {
			case 'd_regions':
				Element.hide('d_regions');
				Element.show('d_countries'); 
				break;
			case 'd_countries':
				Element.hide('d_countries');
				Element.show('d_regions');
				break;
		}
		return false;
	},
	
	process_form: function () {
	
		this.check_type_of_cover($('type_of_cover').value);
		this.check_number_of_travellers($('number_of_travellers').value);
		this.check_country($('resident_of').value);
		this.check_ages();
		
	},
	
	change_sport_category: function() {
	
		var sport_category_id = $('sport_category').value;
		
		if (sport_category_id == '') return false;
		
		var url = '/quote/get_sports/'+sport_category_id+'/xml';

		// launch ajax request
		var a = new Ajax.Request(url, {
			onComplete: function(request) {
				var xml = request.responseXML;
				var sports = xml.getElementsByTagName('sport');
				
				if (sports.length == 0) {
					alert('no sports');
					return false;
				}

				var sel = $('sports');
								
				for ( var i=0 ; i<sel.options.length ; i++ ) {
					sel.options[i] = null;
				}

				sel.options.length = 0;

				for ( var i=0 ; i<sports.length ; i++ ) {
					var id = sports[i].getElementsByTagName('id')[0].firstChild.data;
					var label = sports[i].getElementsByTagName('label')[0].firstChild.data;

					sel.options[sel.options.length] = new Option(label, id, 0, 0);
				}
			},
			method:'get',
			asynchronous: true,
			onFailure: function () {
				return true;
			}
		});
		
	},
	
	add_sport: function () {
		var box = $('sports');
		var sport_name = box.options[box.selectedIndex].text;
		var sport_id = box.value;
		var sport_div = '<div id="sport_selected_'+sport_id+'"><input type="hidden" name="sport_selected_'+sport_id+'" value="1">'+sport_name+' (<a href="#" onclick="return quote_form.remove_sport(\''+sport_id+'\')">remove</a>)</div>';
		var do_nothing = false;
		
		var d = $('selected_sports');
		var divs = d.getElementsByTagName('div');
		
		if (divs.length == 0) {
			d.innerHTML += sport_div;
		}
		
		for ( var i=0 ; i<divs.length ; i++ ) {
			if (divs[i].id == 'sport_selected_'+sport_id) {
				do_nothing = true;
			}
		}
		
		if (!do_nothing) {
			d.innerHTML += sport_div;
		}

	}, 
	
	remove_sport: function (sport_id) {
		
		if (!$('sport_selected_'+sport_id)) { 
			return false; 
		} else {
			Element.remove('sport_selected_'+sport_id);
			return false;
		}
		
	},
	
	toggle_hazardous: function () {
		
		if ($('tag3').checked) {
			Element.show('hazardous_sports');
		} else {
			Element.hide('hazardous_sports');			
		}
	}
	
	
}