function Participant() {

	this.participantsFormId				= 'add_participants_form';				// Id for the element containing the form
	this.participantsBlockId			= 'participants_container';				// Id for the element containing the participants
	this.lodgingDialogId				= 'lodging_overlay_container';			// Id for the element containing the lodging "popup" overlay dialog
	this.addedProductDetailsOverlayId	= 'added_product_overlay_container';
	this.hostelBlockId					= 'hostel_block';						// Vandrehjemsbooking, contaioner-ID

	this.addTicket = function(groupId) {
		var groupId = parseInt(groupId, 10);
		if (groupId > 0) {
			var postData = {'eID':			'tx_usernishop_pi1',
							'page_label':	'ajax',
							'mode':			'change_no_of_participants',
							'action':		'add',
							'group_id':		groupId,
							'L':			getTypo3Language()};
			$.post('/index.php', postData, function (data, textStatus) {
					if (textStatus == 'success') {
						Participant.renderParticipant();
					}
				}
			);
		}
	}

	this.removeTicket = function(groupId, combinedIndex) {
		var groupId = parseInt(groupId, 10);
		if (groupId > 0) {
			var postData = {'eID':				'tx_usernishop_pi1',
							'page_label':		'ajax',
							'mode':				'change_no_of_participants',
							'action':			'subtract',
							'group_id':			groupId,
							'combined_index':	combinedIndex,
							'L':				getTypo3Language()};
			$.post('/index.php', postData, function (data, textStatus) {
					if (textStatus == 'success') {
						Participant.renderParticipant();
					}
				}
			);
		}
	}

	this.addParticipant = function() {
		if(this.validateParticipantForm()) {
			var postData = {'eID':			'tx_usernishop_pi1',
							'page_label':	'ajax',
							'mode':			'add_participant',
							'first_name':	document.getElementById(this.participantsFormId).firstname.value,
							'last_name':	document.getElementById(this.participantsFormId).lastname.value,
							'gender':		document.getElementById(this.participantsFormId).gender.value,
							'L':			getTypo3Language()};
			$.post('/index.php', postData, function(data, textStatus) {
					if (textStatus == 'success') {
						document.getElementById(Participant.participantsBlockId).innerHTML = data;
						Participant.adjustLayout();
					}
				}
			);
		}
	}


	this.removeParticipant = function(personId) {
		var postData = {'eID':				'tx_usernishop_pi1',
						'page_label':		'ajax',
						'mode':				'remove_participant',
						'participant_id':	personId,
						'L':				getTypo3Language()};
		$.post('/index.php', postData, function(data, textStatus) {
				if (textStatus == 'success') {
					document.getElementById(Participant.participantsBlockId).innerHTML = data;
					Participant.adjustLayout();
				}
			}
		);
	}

	this.assignParticipant = function(groupId, combinedIndex, personSelectId) {
		var postData = {'eID':				'tx_usernishop_pi1',
						'page_label':		'ajax',
						'mode':				'assign_participant',
						'group_id':			parseInt(groupId, 10),
						'combined_index':	combinedIndex,
						'participant_id':	parseInt(document.getElementById(personSelectId).value, 10),
						'L':				getTypo3Language()};
		$.post('/index.php', postData, function(data, textStatus) {
				if (textStatus == 'success') {
					document.getElementById(Participant.participantsBlockId).innerHTML = data;
					Participant.adjustLayout();
				}
			}
		);
	}

	// Vælger pickup-spot for angivet gruppe.
	this.selectPickupSpot = function(groupId) {
		// Hvis cart_group er angivet...
		var groupId = parseInt(groupId, 10);
		if (groupId > 0) {
			// ... finder vi select-elementet
			var selectElement = document.getElementById('pickup_' + groupId);
			if (selectElement) {
				// ... og tager den value fra det valgte element
				var pickupSpotId = selectElement.value;
				// Dette sender vi så til med lidt AJAX
				var postData = {'eID':				'tx_usernishop_pi1',
								'page_label':		'ajax',
								'mode':				'select_pickup_spot',
								'group_id':			groupId,
								'pickup_spot_id':	pickupSpotId,
								'L':				getTypo3Language()};
				$.post('/index.php', postData, function(data, textStatus) {
						if (textStatus == 'success') {
							// Server-koden validerer det valgte pickupSpotId, og er det gyldigt returneres 'OK' i variablen 'data'
							if (data == 'OK') {
								// Brug hvid baggrund
								$(selectElement).css('background-color', '#FFFFFF');
							}
							else {
								// Hop tilbage til option index 0 ("Vælg pickup")
								selectElement.selectedIndex = 0;
								// Skift til lyserød baggrund
								$(selectElement).css('background-color', '#EFD7CF');
							}
						}
					}
				);
			}
		}
	} // End selectPickupSpot()

	// Viser "popup" med mulighed for at vælge indkvartering. Kaldes fra onclick i navneindtastningen.
	this.showLodgingOverlay = function(groupId, participantIndex, fromDate) {
		var groupId				= parseInt(groupId, 10);
		var participantIndex	= parseInt(participantIndex, 10);
		if (groupId > 0 && participantIndex >= 0) {
			var postData = {'eID':					'tx_usernishop_pi1',
							'page_label':			'ajax',
							'mode':					'render_lodging_overlay',
							'group_id':				groupId,
							'participant_index':	participantIndex,
							'from_date':			fromDate,
							'L':					getTypo3Language()};
			$.post('/index.php', postData, function(data, textStatus) {
					if (textStatus == 'success') {
						document.getElementById(Participant.lodgingDialogId).innerHTML = data;
						// Fjern border omkring checkboxed (only present i IE)
						$('#' + Participant.lodgingDialogId + " input[type='checkbox']").css('border', 0);
					}
				}
			);
		}
	} // End showLodgingDialog()


	// Tager imod brugerens input angående overnatning og POSTer til serveren.
	this.selectLodging = function(groupId, unitsizeId, wantSingleRoom, unitNumber) {
		var groupId			= parseInt(groupId, 10);
		var unitsizeId		= parseInt(unitsizeId, 10);
		var wantSingleRoom	= wantSingleRoom == 1 ? 1 : 0;
		var unitNumber		= parseInt(unitNumber, 10);
		if (groupId > 0 && unitsizeId > 0) {
			// Find de checkboxe der er valgt
			var participantIds = new Array();
			$('div#lodging_overlay :checkbox.participant_name:checked').each(function(i) {
					participantIds.push(this.value);
				}
			);
			var fromDates = new Array();
			$('div#lodging_overlay :checkbox.date:checked').each(function(i) {
					fromDates.push(this.value);
				}
			);
			// Data der skal POSTes
			var postData = {'eID':					'tx_usernishop_pi1',
							'page_label':			'ajax',
							'mode':					'select_lodging',
							'group_id':				groupId,
							'unit_number':			unitNumber,
							'unitsize_id':			unitsizeId,
							'want_single_room':		wantSingleRoom,
							'participant_ids[]':	participantIds,
							'from_dates[]':			fromDates,
							'L':					getTypo3Language()};
			$.post('/index.php', postData, function(data, textStatus) {
					if (textStatus == 'success' && data == 'OK') {
						Participant.renderParticipant();
					}
				}
			);
		}
	} // End selectLodging()


	this.validateParticipantForm = function() {
		var result = true;
		if(document.getElementById('firstname').value == '') {
			// Alert the user of this
			result = false;
		}
		if(document.getElementById('lastname').value == '') {
			// Alert the user of this
			result = false;
		}
		if(document.getElementById('gender').options[document.getElementById('gender').selectedIndex].value == '') {
			// Alert the user of this
			result = false;
		}
		return result;
	}


	this.renderParticipant = function () {
		var postData = {'eID':			'tx_usernishop_pi1',
						'page_label':	'ajax',
						'mode':			'render_participant',
						'L':			getTypo3Language()};
		$.post('/index.php', postData, function(data, textStatus) {
				if (textStatus == 'success') {
					document.getElementById(Participant.participantsBlockId).innerHTML = data;
					Participant.adjustLayout();
				}
			}
		);
	}


	this.toggleAddedProduct = function(groupId, combinedIndex, checkbox) {
		var productId = parseInt(checkbox.value, 10);
		var postData = {'eID':				'tx_usernishop_pi1',
						'page_label':		'ajax',
						'mode':				'toggle_added_product',
						'group_id':			groupId,
						'combined_index':	combinedIndex,
						'product_id':		productId,
						'L':				getTypo3Language()};
		$.post('/index.php', postData, function(data, textStatus) {
				if (textStatus == 'success') {
					checkbox.checked = data == '1' ? true : false;
				}
			}
		);
	}

	this.getAddedProductOverlay = function(addedProductId) {
		if (addedProductId >= 0 && document.getElementById('added_product_overlay_container')) {
			var postData = {'eID':					'tx_usernishop_pi1',
							'page_label':			'ajax',
							'mode':					'added_product_overlay',
							'added_product_id':		parseInt(addedProductId, 10),
							'L':					getTypo3Language()};
			$.post('/index.php', postData, function(data, textStatus) {
					if (textStatus == 'success') {
						$("#"+Participant.addedProductDetailsOverlayId).html(data);
					}
				}
			);
		}
	}

	this.adjustLayout = function() {
		// Marker deltagere, der ikke er tilknyttet et navn, med lyserødt
		$("div.tour_participants select[name^=participants][value=-1]").css('background-color', '#EFD7CF');

		// Fjern border omkring checkboxed (only present i IE)
		$("input[type='checkbox']").css('border', 0);

		// Hvis der er pickup-bokse med kun en mulighed skal den automatisk være valgt
		// Strengen som select-boksens name-attribut skal matche
		var search_for = 'pickup_';
		var pickup_selects = $("select[name^='"+search_for+"']");

		for (var i = 0; i < pickup_selects.length; i ++) {
			// Hvis der er to entries, skal vi slette det første...
			if (pickup_selects[i].options.length == 2) {
				pickup_selects[i].options[0] = null;
				// så henter vi gruppe-id ud
				var group_id = parseInt(pickup_selects[i].name.substring(search_for.length), 10);
				// og vælger pickup-spot
				this.selectPickupSpot(group_id);
				// Herefter skal det ikke vises som select, men blot som tekst
				pickup_selects.eq(i).replaceWith(pickup_selects[i].options[0].text);
			}
		}
		
		// Hvis der stadig er ture uden valgt pickup, så marker  med lyserødt
		$("div.tour_participants select[name^=pickup_][value=-1]").css('background-color', '#EFD7CF');

		// Tilsvarende for hostelbooking, hvis der ikke er valgt lande
		$('#country_of_residence[value=-1]').css('background-color', '#EFD7CF');

		// Marker hostel-værelser uden tilknyttede navne med lyserødt
		$("div#hostel_block select[name^=hostel_participants][value=-1]").css('background-color', '#EFD7CF');

		// Marker hostel-værelser hvor der er valgt enkeltværelse med gult
		$("div#hostel_block select[name^=hostel_participants][value=-2]").css('background-color', '#F6DB43');

		// Initialiser evt. kalendere
		this.initializeCalenders();
		
		// Initialiser evt. ret periode-links

	}
	
	/**
	* Modtager en dato i wog-format: 16/10 - 2009
	* og formaterer den til mysql-format
	*/
	this.formatDate = function (wogDate) {
		var day = this.zeroPad(wogDate.substring(0, wogDate.indexOf('/')), 2);
		var month = this.zeroPad(wogDate.substring(wogDate.indexOf('/') + 1, wogDate.indexOf(' ')), 2);
		var year = wogDate.substring(wogDate.indexOf('- ') + 2);
		return year+'-'+month+'-'+day;
	}
	
	this.zeroPad = function(num, width) {
		num = num.toString();
		while (num.length < width)
		num = "0" + num;
		return num;
	}
	
	this.initializeCalenders = function () {
		if (document.getElementById('hostel_arrival_date')
			&& document.getElementById('hostel_departure_date')) {
				initializeCalenders();
		}
	}

	/**
	 *	Ja tak, kunden vil gerne booke vandrehjem.
	 */
	this.bookHostel = function () {
		var postData = {'eID':			'tx_usernishop_pi1',
						'page_label':	'ajax',
						'mode':			'book_hostel',
						'L':			getTypo3Language()};
		$.post('/index.php', postData, function(data, textStatus) {
				if (textStatus == 'success') {
					document.getElementById(Participant.hostelBlockId).innerHTML = data;
					Participant.adjustLayout();
				}
			}
		);
	}
	
	this.setHostelPeriod = function (unitNumber) {
		var postData = {'eID':			'tx_usernishop_pi1',
						'page_label':	'ajax',
						'mode':			'set_hostel_period',
						'L':			getTypo3Language(),
						'unit_number':	unitNumber,
						'from_date':	this.formatDate(document.getElementById('hostel_arrival_date').value),
						'to_date':		this.formatDate(document.getElementById('hostel_departure_date').value)
		};
		$.post('/index.php', postData, function (data, textStatus) {
				if (textStatus == 'success') {
					Participant.renderParticipant();
				}
			}
		);
	}

	/**
	 *	Tilføj ekstra værelse
	 */
	this.addHostelUnit = function () {
		var postData = {'eID':			'tx_usernishop_pi1',
						'page_label':	'ajax',
						'mode':			'add_hostel_unit',
						'L':			getTypo3Language()};
		$.post('/index.php', postData, function(data, textStatus) {
				if (textStatus == 'success') {
					document.getElementById(Participant.hostelBlockId).innerHTML = data;
					Participant.adjustLayout();
				}
			}
		);
	}

	/**
	 *	Tilføj ekstra værelse
	 */
	this.removeHostelUnit = function (unitNumber) {
		var postData = {'eID':			'tx_usernishop_pi1',
						'page_label':	'ajax',
						'mode':			'remove_hostel_unit',
						'unit_number':	unitNumber,
						'L':			getTypo3Language()};
		$.post('/index.php', postData, function(data, textStatus) {
				if (textStatus == 'success') {
					document.getElementById(Participant.hostelBlockId).innerHTML = data;
					Participant.adjustLayout();
				}
			}
		);
	}

	this.toggleHostelSheets = function(unitNumber, bedNumber, checkbox) {
		var productId = parseInt(checkbox.value, 10);
		var postData = {'eID':				'tx_usernishop_pi1',
						'page_label':		'ajax',
						'mode':				'toggle_hostel_sheets',
						'unit_number':		unitNumber,
						'bed_number':		bedNumber,
						'L':				getTypo3Language()};
		$.post('/index.php', postData, function(data, textStatus) {
				if (textStatus == 'success') {
					checkbox.checked = data == '1' ? true : false;
				}
			}
		);
	}

	this.assignHostelParticipant = function(unitNumber, bedNumber, select) {
		var postData = {'eID':				'tx_usernishop_pi1',
						'page_label':		'ajax',
						'mode':				'assign_hostel_participant',
						'unit_number':		unitNumber,
						'bed_number':		bedNumber,
						'participant_id':	parseInt(select.value, 10),
						'L':				getTypo3Language()};
		$.post('/index.php', postData, function(data, textStatus) {
				if (textStatus == 'success') {
					document.getElementById(Participant.hostelBlockId).innerHTML = data;
					Participant.adjustLayout();
				}
			}
		);
	}

	this.hostelSetCountryOfResidence = function(select) {
		var postData = {'eID':					'tx_usernishop_pi1',
						'page_label':			'ajax',
						'mode':					'hostel_set_country_of_residence',
						'country_of_residence':	select.value,
						'L':					getTypo3Language()};
		$.post('/index.php', postData, function(data, textStatus) {
				if (textStatus == 'success') {
					// Server-koden validerer det valgte land, og er det gyldigt returneres 'OK' i variablen 'data'
					if (data == 'OK') {
						// Brug hvid baggrund
						$('#country_of_residence').css('background-color', '#FFFFFF');
					}
					else {
						// Skift til lyserød baggrund
						// Hop tilbage til option index 0 ("Vælg land")
						$('#country_of_residence').css('background-color', '#EFD7CF').val(-1);
					}
				}
			}
		);
	}

	this.displayHostelPeriodEdit = function(event, unit_number) {
		/*var xy = YAHOO.util.Dom.getXY(event.target.id);
		YAHOO.util.Dom.setXY('set_hostel_period_table', xy);
		$('#set_hostel_period_table').show();*/
		var currentFromDate = $('#room_period_'+unit_number+" td.fromdate").text()
		var currentToDate = $('#room_period_'+unit_number+" td.todate").text()
		$('#room_period_'+unit_number+" td.fromdate").html('<input type="text" id="hostel_arrival_date" name="hostel_arrival_date" value="'+currentFromDate+'" style="width: 80px" /><img src="/images/calbtn.gif" id="hostel_arrival_calendar" style="vertical-align:middle;" />')
		$('#room_period_'+unit_number+" td.todate").html('<input type="text" id="hostel_departure_date" name="hostel_departure_date" value="'+currentToDate+'" style="width: 80px;" /><img src="/images/calbtn.gif" id="hostel_departure_calendar" style="vertical-align:middle;" />')
		
		
		this.initializeCalenders();
		$('#room_period_'+unit_number).after('<input type="button" value="Gem datoer" onclick="Participant.setHostelPeriod('+unit_number+')" style="height: 20px" />')
		$('#room_period_'+unit_number).siblings('a').remove();//$('#'+event.target.id).remove();
	}

}
