BookTripPage.groups = {
	travellersNumber: 1,
	travellersData: [],
	
	restoreTravellersData: function () {
		var formFieldNames = [
			'travellers-first-name',
			'travellers-last-name',
			'travellers-birthdate',
			'travellers-passport-number',
			'travellers-insurance',
			'travellers-nationality',
			'travellers-beds-type'
		];
		
		for (var i = 1; i <= BookTripPage.groups.travellersNumber; i++) {
			if ($('travellers-birthdate-day-' + i) && BookTripPage.groups.travellersData[i]) {
				for (var j = 0; j < formFieldNames.length; j++) {
					switch (formFieldNames[j]) {
						case 'travellers-insurance':
							if (BookTripPage.groups.travellersData[i].travellersInsurance === 'yes') {
								$('travellers-insurance-yes-' + i).checked = true;
							}
							
							if (BookTripPage.groups.travellersData[i].travellersInsurance === 'no') {
								$('travellers-insurance-no-' + i).checked = true;
							}
							break;
							
						case 'travellers-birthdate':
							//$('travellers-birthdate-day-' + i).options = BookTripPage.groups.travellersData[i].dayOptions;
							$('travellers-birthdate-day-' + i).options.length = 0;
							var elOptNew;
							for (var k = 0; k < BookTripPage.groups.travellersData[i].dayOptions.length; k++) {
								elOptNew = document.createElement('option');
								elOptNew.text = BookTripPage.groups.travellersData[i].dayOptions[k].text;
								elOptNew.value = BookTripPage.groups.travellersData[i].dayOptions[k].value;
								
								$('travellers-birthdate-day-' + i).options.add(elOptNew);
							}
							$('travellers-birthdate-day-' + i).value = BookTripPage.groups.travellersData[i].travellersBirthdateDay;
							$('travellers-birthdate-month-' + i).value = BookTripPage.groups.travellersData[i].travellersBirthdateMonth;
							$('travellers-birthdate-year-' + i).value = BookTripPage.groups.travellersData[i].travellersBirthdateYear;
							
							break;
							
						default:
							$(formFieldNames[j] + '-' + i).value = BookTripPage.groups.travellersData[i][formFieldNames[j]];
							break;
					}
				}
			}
		}
	},
	
	saveTravellersData: function () {
		var formFieldNames = [
			'travellers-first-name',
			'travellers-last-name',
			'travellers-birthdate',
			'travellers-passport-number',
			'travellers-insurance',
			'travellers-nationality',
			'travellers-beds-type'
		];
		
		for (var i = 1; i <= BookTripPage.groups.travellersNumber; i++) {
			if ($('travellers-birthdate-day-' + i)) {
				for (var j = 0; j < formFieldNames.length; j++) {
					if (!BookTripPage.groups.travellersData[i]) {
						BookTripPage.groups.travellersData[i] = [];
					}
					
					switch (formFieldNames[j]) {
						case 'travellers-insurance':
							if ($('travellers-insurance-yes-' + i).checked) {
								BookTripPage.groups.travellersData[i].travellersInsurance = 'yes';
							}
							
							if ($('travellers-insurance-no-' + i).checked) {
								BookTripPage.groups.travellersData[i].travellersInsurance = 'no';
							}
							break;
							
						case 'travellers-birthdate':
							BookTripPage.groups.travellersData[i].dayOptions = [];
							
							for (var k = 0; k < $('travellers-birthdate-day-' + i).options.length; k++) {
								BookTripPage.groups.travellersData[i].dayOptions[k] = {
									'text': $('travellers-birthdate-day-' + i).options[k].text,
									'value': $('travellers-birthdate-day-' + i).options[k].value
								};
							}
							
							BookTripPage.groups.travellersData[i].dayOptions.length = $('travellers-birthdate-day-' + i).options.length;
							
							BookTripPage.groups.travellersData[i].travellersBirthdateDay = $('travellers-birthdate-day-' + i).value;
							BookTripPage.groups.travellersData[i].travellersBirthdateMonth = $('travellers-birthdate-month-' + i).value;
							BookTripPage.groups.travellersData[i].travellersBirthdateYear = $('travellers-birthdate-year-' + i).value;
							
							break;
							
						default:
							BookTripPage.groups.travellersData[i][formFieldNames[j]] = $(formFieldNames[j] + '-' + i).value;
							break;
					}
				}
			}
		}
	},
	
	addTraveller: function (number) {
		var bookTripTravellersContainerEl = $('book-trip-travellers-container');
		var travellerInfoTemplate = $('traveller-info-template').innerHTML;
		
		travellerInfoTemplate = travellerInfoTemplate.replace(/%%i%%/gi, number);
		
		var travellerInfoContainer = $('traveller-info-container-' + number);
		
		if (!travellerInfoContainer) {
			bookTripTravellersContainerEl.innerHTML += '<div id="traveller-info-container-' + number + '"></div>';
			travellerInfoContainer = $('traveller-info-container-' + number);
		}
		
		travellerInfoContainer.innerHTML = travellerInfoTemplate;
	},
	
	removeTraveller: function (number) {
		var travellerInfoContainer = $('traveller-info-container-' + number);
		
		if (travellerInfoContainer) {
			travellerInfoContainer.innerHTML = '';
		}
	},
	
	changeTravellerNumber: function (travellerNumberCombo) {
		var travellerInfoTemplate = $('traveller-info-template').innerHTML;
		
		BookTripPage.groups.saveTravellersData();
		
		if (BookTripPage.groups.travellersNumber < travellerNumberCombo.value) {
			for (var i = BookTripPage.groups.travellersNumber + 1; i <= parseInt(travellerNumberCombo.value); i++) {
				BookTripPage.groups.addTraveller(i);
			}
		} else {
			for (var i = BookTripPage.groups.travellersNumber; i > parseInt(travellerNumberCombo.value); i--) {
				BookTripPage.groups.removeTraveller(i);
			}
		}
		
		BookTripPage.groups.travellersNumber = parseInt(travellerNumberCombo.value);
		
		BookTripPage.groups.restoreTravellersData();
	},
	
	validateTravellerFields: function () {
		$('warning-message').hide();
		
		var travellerFieldsWarningMessage = $('warning-message-traveller-fields').innerHTML
		
		var formFieldNames = [
			'travellers-first-name',
			'travellers-last-name',
			'travellers-birthdate',
			'travellers-passport-number',
			'travellers-insurance-yes'
		];
		
		var valid
		for (var i = 1; i <= BookTripPage.groups.travellersNumber; i++) {
			for (var j = 0; j < formFieldNames.length; j++) {
				valid = true;
				switch (formFieldNames[j]) {
					case 'travellers-insurance-yes':
						if (!$('travellers-insurance-yes-' + i).checked && !$('travellers-insurance-no-' + i).checked) {
							valid = false;
						}
						break;
						
					case 'travellers-birthdate':
						if ($('travellers-birthdate-day-' + i).value.length === 0
						    || $('travellers-birthdate-month-' + i).value.length === 0
						    || $('travellers-birthdate-year-' + i).value.length === 0) {
							valid = false;
						}
						
						break;
						
					default:
						if (!$(formFieldNames[j] + '-' + i).present()) {
							valid = false;
						}
						break;
				}
				
				if (!valid) {
					$('warning-message').innerHTML = travellerFieldsWarningMessage + ' ' + i + '.'
					
					$('warning-message').show();
					return false;
				}
			}
		}
		
		return true;
	},
	
	validateForm: function (form) {
		$('warning-message').hide();
		
		var today = Date.parseDate($('date-now').innerHTML, '%Y-%m-%d')
		
		var personValidateFields = [
			'user-name',
			'day-time-cell-phone',
			'departure-city',
			'travellers-number'
		];
		
		var paymentValidateFields = [
			'first-name',
			'last-name',
			'address',
			'country',
			'city',
			'state',
			'zip',
			'card-number',
			'cvv2-cid',
			'expiration-date-month',
			'expiration-date-year'
		];
		
		for (var i = 0; i < personValidateFields.length; i++) {
			if (!$(personValidateFields[i]).present()) {
				$('warning-message').innerHTML = $('warning-message-' + personValidateFields[i]).innerHTML; 
				$('warning-message').show();
				return;
			}
		}
		
		if(!isEmailCorrect($('email').value)) {
			$('warning-message').innerHTML = $('warning-message-incorrect-email').innerHTML; 
			$('warning-message').show();
			return;
		}
		
		if (!BookTripPage.groups.validateTravellerFields()) {
			return;
		}
		
		for (var i = 0; i < paymentValidateFields.length; i++) {
			if (!$('payment-options-' + paymentValidateFields[i]).present()) {
				$('warning-message').innerHTML = $('warning-message-' + paymentValidateFields[i]).innerHTML; 
				$('warning-message').show();
				return;
			}
		}
		
		var expirationDate = Date.parseDate(
			$('payment-options-expiration-date-year').value + '-' + 
			$('payment-options-expiration-date-month').value + '-01', '%Y-%m-%d'
		);
		
		if (today.getTime() >= (expirationDate.getTime() + 1)) {
			$('warning-message').innerHTML = $('warning-message-incorrect-expiration-date').innerHTML;
			$('warning-message').show();
			return;
		}
		
		if (!$('agree-terms-conditions').checked) {
			$('warning-message').innerHTML = $('warning-message-agree-terms-conditions').innerHTML;
			$('warning-message').show();
			return;
		}
		
		var numbers = {
			'0': true,
			'1': true,
			'2': true,
			'3': true,
			'4': true,
			'5': true,
			'6': true,
			'7': true,
			'8': true,
			'9': true
		}
		var cvv2CID = $('payment-options-cvv2-cid').value;
		for(var i = 0; i < cvv2CID.length; i++) {
			if (typeof numbers[cvv2CID.charAt(i)] === 'undefined') {
				$('warning-message').innerHTML = $('warning-cvv2-cid-not-number').innerHTML;
				$('warning-message').show();
				return;
			}
		}
		
		var travellerInfoTemplate = $('traveller-info-template');
		
		travellerInfoTemplate.innerHTML = '';
		
		form.submit();
	}	
}
