jQuery(
	function($) {
		var
			$body = $('body').addClass('js'),

			// retrieve language from body class
			regExpLanguage = /language_([a-z]{2})/,
			matchesLanguage = $body.attr('class').match(regExpLanguage),
			language = matchesLanguage ? matchesLanguage[1] : 'en';

		// activate stretch images
		$('img.stretch').stretch();

		// activate slide for login box
		(
			function () {
				var $frameLoginBox = $('#frame_login_box').hide();
				$('.login_switch a')
					.bind(
						'click',
						function(e) {
							e.preventDefault();
							$frameLoginBox.slideToggle();
						}
					);
			}
		)();

		// activate language switcher
		$('#languageSelector select').bind('change', function() { $(this).closest('form').submit(); });

		// activate quickbooker togglers
		(
			function() {
				var
					$frameQuickbooker = $('#frame_quickbooker'),
					collapsed = 'collapsed',
					expanded = 'expanded',
					toggle = 'toggle',
					toggler = 'toggler';

				$frameQuickbooker
					.multitoggler(
						{
							ajax: false,
							collapsedClass: collapsed,
							contentClass: toggle,
							expandedClass: expanded,
							transition: 'fade',
							triggerClass: toggler
						}
					)
					.find('a.toggler.button')
						.bind(
							expanded,
							function() {
								$(this).fadeOut();
							}
						)
						.bind(
							collapsed,
							function() {
								$(this).fadeIn();
							}
						)
					.end();
				$('#frame_head .frame_navigation .booker')
					.bind(
						'click',
						function() {
							$('.' + toggler + ':first', $frameQuickbooker)
								.trigger('click');
						}
					);
			}
		)();

		// activate double date pickers
		(
			function() {
				var doubleDatepickers =
					[
						{
							startDate: '#checkin',
							altStartDate: '#altCheckin',
							endDate: '#checkout',
							altEndDate: '#altCheckout'
						}
					];

				// define default properties of datepickers
				$.datepicker.setDefaults(
					$.extend(
						{
							altFormat: 'yy-mm-dd',
							buttonImageOnly: true,
							minDate: new Date(),
							showButtonPanel: true,
							showMonthAfterYear: false,
							showOn: 'both'
						},
						$.datepicker.regional[''],
						{
							dateFormat: 'dd/mm/yy'
						}
					)
				);


				$.each(
					doubleDatepickers,
					function(i, options) {
						var
							$startDate = $(options.startDate),
							$datepickerStart =
								$startDate
									.datepicker(
										$.extend(
											$.datepicker.regional[language],
											{
												altField: options.altStartDate,
												minDate: new Date(),
												showButtonPanel: false,
												showMonthAfterYear: false,
												showOn: 'focus'
											}
										)
									);

						if ($datepickerStart.length) {
							try {
								var
									$endDate = $(options.endDate),
									actualStartDate = $.datepicker.parseDate($startDate.datepicker('option', 'dateFormat'), $startDate.val()) || new Date();
							} catch (e) {
								actualStartDate = new Date();
							}

							actualStartDate.setHours(12);
							var
								minEndDate = new Date(actualStartDate.getTime() + 1000 * 60 * 60 * 24),
								$datepickerEnd =
									$endDate
										.datepicker(
											$.extend(
												$.datepicker.regional[language],
												{
													altField: options.altEndDate,
													minDate: minEndDate,
													showButtonPanel: false,
													showMonthAfterYear: false,
													showOn: 'both'
												}
											)
										),
								endDate;

							try {
								endDate = $.datepicker.parseDate($endDate.datepicker('option', 'dateFormat'), $endDate.val()) || minEndDate;
							} catch (e) {
								endDate = minEndDate;
							}

							$datepickerStart.datepicker('setDate', actualStartDate);
							$datepickerEnd.datepicker('setDate', endDate);

							// define datepickers' onSelect-behaviors
							$datepickerStart
								.datepicker(
									'option',
									'onSelect',
									function() {
										var
											startDate = $datepickerStart.datepicker('getDate');
										startDate.setHours(12);
										$datepickerEnd
											.datepicker('option', 'minDate', new Date(startDate.getTime() + 24 * 60 * 60 * 1000));
									}
								);
						}
					}
				);
			}
		)();

		// activate popups
		$('a.popup').metadatapopup();
	}

);
