hw = {};
hw.getDate = function(date)
{
	var y = date.substr(0, 4),
		m = parseInt(date.substr(5, 2), 10) -1,
		d = date.substr(8,2),
		H = 0,
		i = 0,
		s = 0;
		
	if (date.length >= 13)
	{
		H = date.substr(11,2);
		
		if(date.length >= 16)
		{
			i = date.substr(14,2);
			
			if(date.length >= 19)
			{
				s = date.substr(17,2);
			}
		}
	}

	return new Date(y, m, d, H, i, s);
}

$(document).ready(function(){

	// Make Header clickable
	$('#header').click(function(e) {
		document.location = '/';
	}).css('cursor', 'pointer');

	// External Links
	$('a[rel*=external]').click(function() {
		return !window.open($(this).attr('href'));
	});

    $('.slideshow').cycle({
		fx: 'wipe',
		clip: 'l2r',
		speed: 1500
	});
	
	var $counter = $('#countdown');
	
	if($counter.length > 0)
	{
		var startDate = hw.getDate($counter.attr('data-start'));
	
		$counter.countdown({until: startDate, format: 'dHMS', layout: '<span id="countdown_prefix"><img src="/images/Nog.png"/></span><span class="countdown_section countdown_days"><span class="countdown_amount">{dnn}</span><span class="timedescr"><img src="/images/dagen.png"/></span></span><span class="countdown_section"><span class="countdown_amount">{hnn}</span><span class="timedescr"><img src="/images/uren.png"/></span></span><span class="countdown_section"><span class="countdown_amount">{mnn}</span><span class="timedescr"><img src="/images/minuten.png"/></span></span><span class="countdown_section"><span class="countdown_amount">{snn}</span><span class="timedescr"><img src="/images/seconde.png"/></span></span>'});
	}
	
	
//	$counter.countdown({until: startDate, format: 'dHM', layout: '<span class="section"><span class="count days">{dn}</span>dagen</span><span class="section"><span class="count hours">{hnn}</span>uren</span><span class="section"><span class="count minutes">{mnn}</span>min.</span>'});


	// American Express Banner
/*
	var flashvars  = { };
	var params     = { };
	var attributes = { };
	swfobject.embedSWF("/swf/ayacm_banner_310x40.swf", "americanBanner", "310", "40", "8.0.0", "/swf/expressInstall.swf", flashvars, params, attributes);
*/

	/* !Handle Form Submit */
	$('.hwnl #booking_form, .hwbe #booking_form').submit(function() {
		return handle_submit([
			{field: 'rooms', rule: 'required', message: 'Aantal kamers is verplicht.'},
			{field: 'nights', rule: 'required', message: 'Aantal nachten is verplicht.'},
			{field: 'date', rule: 'required', message: 'Aankomstdatum is verplicht.'},
			{field: 'geslacht', rule: 'required', message: 'Geslacht is verplicht.'},
			{field: 'voornaam', rule: 'required', message: 'Voornaam is verplicht.'},
			{field: 'achternaam', rule: 'required', message: 'Achternaam is verplicht.'},
			{field: 'adres', rule: 'required', message: 'Straatnaam is verplicht.'},
			{field: 'huisnummer', rule: 'number', message: 'Huisnummer dient een getal te zijn.'},
			{field: 'postcode', rule: 'required', message: 'Postcode is verplicht.'},
			{field: 'plaats', rule: 'required', message: 'Plaats is verplicht.'},
			{field: 'land', rule: 'required', message: 'Land is verplicht.'},
			{field: 'telefoon', rule: 'required', message: 'Telefoonnummer is verplicht.'},
			{field: 'email', rule: 'required', message: 'Emailadres is verplicht.'},
			{field: 'email_check', rule: 'equals', extra: 'email', message: 'Emailadressen dienen overeen te komen.'},
			{field: 'geboortedatum_dag', rule: 'required', message: 'Geboortedag is verplicht.'},
			{field: 'geboortedatum_maand', rule: 'required', message: 'Geboortemaand is verplicht.'},
			{field: 'geboortedatum_jaar', rule: 'required', message: 'Geboortejaar is verplicht.'},
			{field: 'betaling', rule: 'required', message: 'Betalingsmethode is verplicht.'}
		], 'errors', 'error_container');
	});                                                                                                                                                                                                                      

	$('.hwse #booking_form').submit(function() {
		return handle_submit([
			{field: 'rooms', rule: 'required', message: 'Antal rum är obligatoriskt.'},
			{field: 'nights', rule: 'required', message: 'Antal nätter är obligatoriskt.'},
			{field: 'date', rule: 'required', message: 'Ankomstdatum är obligatoriskt.'},
			{field: 'geslacht', rule: 'required', message: 'Kön är obligatoriskt.'},
			{field: 'voornaam', rule: 'required', message: 'Förnamn är obligatoriskt.'},
			{field: 'achternaam', rule: 'required', message: 'Efternamn är obligatoriskt.'},
			{field: 'adres', rule: 'required', message: 'Adress är obligatoriskt.'},
			{field: 'huisnummer', rule: 'number', message: 'Husnummer är obligatoriskt.'},
			{field: 'postcode', rule: 'required', message: 'Postnummer är obligatoriskt.'},
			{field: 'plaats', rule: 'required', message: 'Stad är obligatoriskt.'},
			{field: 'land', rule: 'required', message: 'Land är obligatoriskt.'},
			{field: 'telefoon', rule: 'required', message: 'Telefon är obligatoriskt.'},
			{field: 'email', rule: 'required', message: 'E-post är obligatoriskt.'},
			{field: 'email_check', rule: 'equals', extra: 'email', message: 'Kontrollera e-post adressen.'},
			{field: 'geboortedatum_dag', rule: 'required', message: 'Födelsedatum är obligatoriskt.'},
			{field: 'geboortedatum_maand', rule: 'required', message: 'Födelsemånad är obligatoriskt.'},
			{field: 'geboortedatum_jaar', rule: 'required', message: 'Födelseår är obligatoriskt.'},
			{field: 'betaling', rule: 'required', message: 'Betalningsmetod är obligatoriskt.'}
		], 'errors', 'error_container');
	});                                                                                                                                                                                                                      


	/* Bonnetje */
	$('#booking_form .ajax_update').change(function(e){
		update_bonnetje(e);
	}).click(function(e){
		update_bonnetje(e);
	});
	$('#bonnetje').each(function() {
		update_bonnetje(null);
		position_bonnetje();
		$(window).scroll(function () {
			position_bonnetje();
		});
	});

	/* Toggle Selected Betaalmethode */
	$(':input[name^=incasse]').change(function() {
		turnOnBetaalMethode('machtiging', $(this).attr('id'));
	});
	$(':input[name^=creditcard]').change(function() {
		turnOnBetaalMethode('creditcard', $(this).attr('id'));
	});

	/* Veel Gestelde Vragen */
	$('dl.faq dd').hide();
	$('dl.faq dt').click(function() {
		var cls = $(this).attr('class');
		$('dl.faq dd.' + cls).toggle();
	}).prepend('- ');

	/* Auto Expand Hotels */
/*
	$('#more').each(function() {
		$('html').data('limit', 10);
		$('html').data('start', 10);
		check_position();
	});
*/
});

function update_bonnetje(e)
{
	if (e != null && e.target.id == 'diner3')
	{
		$('#diner4').attr('checked', false);
	}
	if (e != null && e.target.id == 'diner4')
	{
		$('#diner3').attr('checked', false);
	}

	var get_vars = '?' +
		'hotel_id=' + $('#hotel_id').val() + '&' +
		'rooms=' + $('#rooms').val() + '&' +
		'nights=' + $('#nights').val() + '&' +
		'date=' + $('#date').val() + '&' +
		'diner3=' + $('#diner3:checked').val() + '&' +
		'diner4=' + $('#diner4:checked').val() + '&' +
		'wine=' + $('#wine:checked').val() + '&' +
		'champagne=' + $('#champagne:checked').val() + '&' +
		'bikerent=' + $('#bikerent:checked').val() + '&' +
		'upgrade=' + $('#upgrade:checked').val() + '&' +
		'cancelation=' + $('#cancelation_insurance:checked').val()
	;
	$('#bonnetje').load('/ajax_bonnetje.html' + get_vars);
}

function check_position()
{
	var margin  = 75; // bottom buffer in pixels for autoExpand Page
	var timeout = 1;  // timeout in seconds for the position check 

	if (($(window).scrollTop() + $(window).height() + margin) >= $(document).height())
	{
		var TS = new Date();

		log(
			'We are at the bottom (incl buffer of ' + margin + 'px.).',
			'Timestamp : ' + TS,
			'Window.scrollTop : ' + $(window).scrollTop(),
			'Document.Height : ' + $(document).height(),
			'Window.Height : ' + $(window).height()
		);

		$('#more img').show();
		$('#more a').hide();
		$('#more').before('<div style="height: 500px; border: 1px solid #cccccc; margin-top: 10px; text-align: center;"><br /><br /><br />Hier komen dan extra hotels</div>');
	}

	setTimeout(check_position, 1000 * timeout);
}

function position_bonnetje()
{
	var offset = 250;
	var p_max  = -100;
	var scroll = $(window).scrollTop();

	if (scroll < offset - p_max) {
		var p_new = offset;
	} else {
		var p_new = scroll + p_max;	
	}
	
	$('#bonnetje').css('position', 'absolute').css('top', p_new);
}

function turnOnBetaalMethode(checkboxid, inputid)
{
	var chk  = document.getElementById(checkboxid);
	var inpt = document.getElementById(inputid);
	if (chk != null && inpt != null)
	{
	  	chk.checked = true;
	}
}

function log()
{
    // Do we have a console for the output
    if (typeof(console) !== 'undefined' && console != null)
    {
        // Start Console Group
        console.group('Start of log Call');

        // Unlimited Arguments
        for (var i = 0; i < arguments.length; i++)
        {
            // Output info
            console.log(arguments[i]);
        }

        // End Console Group
        console.groupEnd();
	}
}

/* !Handle Form, Check Fields and Active Loading Spinner */
function handle_submit(rules, error_list_id, error_list_container)
{
	// Empty / Create errors Array
	var errors = new Array();

	// Loop through Rules
	$.each(rules, function(i, rule)
	{
		// Get the values for requested Fields
		if ($(':input[name=' + rule.field + ']').length > 1)
		{
			// Multiple options: get checked or selected value
			switch($(':input[name=' + rule.field + ']').attr('type'))
			{
				case 'checkbox':
				case 'radio':
					var value = $(':input[name=' + rule.field + ']:checked').val();
					break;
				case 'select-one':
					var value = $(':input[name=' + rule.field + ']:selected').val();
					break;
			}
		}
		else
		{
			// Only one option: get value
			var value = $(':input[name=' + rule.field + ']').val();
		}

		// Check the values for requested Fields
		switch(rule.rule)
		{
			// Is the field required
			case 'required':
				// Check for empty or undefined
				if (value == '' || typeof(value) == 'undefined')
				{
					// Add Error to Error Array
					errors[errors.length] = rule.message;
				}
				break;

			// Is it a Integer
			case 'number':
				if (value == '' || typeof(value) == 'undefined' || !parseInt(value))
				{
					// Add Error to Error Array
					errors[errors.length] = rule.message;
				}
				break;

			// Does it equal a other field
			case 'equals':
				var comparison = $('#' + rule.extra).val();
				if (value == '' || typeof(value) == 'undefined' || comparison != value)
				{
					// Add Error to Error Array
					errors[errors.length] = rule.message;
				}
				break;
		}
	});

	// We have Errors
	if (errors.length)
	{
		if (!$('#' + error_list_id).length)
		{
			$('#' + error_list_container).html('<ul id="errors" style="clear: both; color: red;"></ul>');
		}

		// Empty ErrorList
		$('#' + error_list_id).html('');

		// Append Errors to ErrorList
		$.each(errors, function(i, error_message)
		{
			$('<li>' + error_message + '</li>').appendTo($('#' + error_list_id));
		});

		// Scroll to Top
		$('html, body').animate({scrollTop: 0});

		// Dont't submit the form
		return false;
	}

	// Hide Submit Button
	$('#booking_submit_button').hide();

	// Show Loading Spinner
	$('#ajax-loader').show();

	// Submit the form
	return true;
}

