/* functie om hele blokken klikbaar te maken, en hover toevoegen */
$.fn.hoverClick = function()
{
	this.each(function()
	{
		if($("a:first", this).length)
		{
			$(this).hover(
				function() { $(this).addClass("hover").css("cursor", "pointer"); },
				function() { $(this).removeClass("hover").css("cursor", "pointer"); }
			);
			
			$(this).attr("title", $("a:first", this).attr("title"));
			
			$(this).click(function(){
				window.location = $("a:first", this).attr("href");
			});
		}
	});
	
	return this;
};

String.prototype.toFixedRev = function()
{
    var value = this.toString();
    if ( parseInt(value) < 10 && value.substring(0,1) != "0" )
    {
        return "0"+value;
    }
    else
    {
        return value;
    }
}

$(function()
{
	// Mooiere headings
	Cufon.replace('#zijbalk-navigatie h3, #content h1, #content h2, .andere-arrangementen h3, #zijbalk h4, #zijbalk .boekingsoverzicht p strong');
	
	// Sfeerimpressie foto's
	$('#sfeerfotos a').shadowbox();
	
	// Standaard tekst in zoekveld
	$("#header-zoeken #q").inputDefaultText({ default_txt:"Zoek op club of trefwoord..." });
	
	// Standaard tekst in telefoonnummer veld (bel me terug)
    $("#uw_naam").inputDefaultText({ default_txt:"Uw naam" });
	$("#bel_mij_op_telefoonnummer").inputDefaultText({ default_txt:"Uw telefoonnummer" });

    // Tooltip op acronym-elementen
    $('acronym').qtip(
    {
        content: {
            text: false
        },
        style: 'cream'
    });

	// Formulier focus op velden
	$(":input").not("input[type=button], input[type=submit], input[type=radio], input[type=checkbox]").focus(function() { $(this).addClass("veldfocus"); });
	$(":input").not("input[type=button], input[type=submit], input[type=radio], input[type=checkbox]").blur(function() { $(this).removeClass("veldfocus"); });

	// Loading bij submit in boekingsproces
	$("#boeken form").submit( function()
	{
		if ( $(this)[0].run_check == true )
		{
			var check_ok = check();
			if ( !check_ok ) return false; // stop als fout is geconstateerd
		}
				
		Loading.show( 50, "<img src='"+config.submap+"img/loading.gif' alt='' border='' />", $(".loading_icon", $(this)) );	
	});
		
	// loading melding 
	window.Loading = {
		  /**
		   * show
		   * @param   int         delay
		   * @param   string      html
		   */
		  show: function( delay, html, append_to )
		  {
				// standaard meteen laden
				if(!delay) 		delay = 0;
				if(!html)   	html = 'Een ogenblik geduld...';
				if(!append_to)	append_to = "body";
				
				// indien nog niet aanwezig het element op de pagina zetten
				if(!$("#loading").length)    {
					  $('<div id="loading"></div>').hide().appendTo( append_to );
				}
		  
				$("#loading").html(html);
	
				// submit knop disablen
				$(".verder-met-bestellen, .bestelling-afronden").css({ opacity: "0.4" }).attr("disabled", "disabled");
	
				// tonen na delay miliseconds
				setTimeout(function()   {
					  $("#loading").show();
				}, delay);
		  },
		  
		  /**
		   * hide_loading
		   */
		  hide: function()
		  {
			  	$(".verder-met-bestellen, .bestelling-afronden").css({ opacity: "1" }).attr("disabled", "");
				$("#loading").fadeOut();
		  }
	};


	// Nieuwsbrief formulier topmenu
	var nb_form = {};
	
	nb_form.zichtbaar = false;
	nb_form.init = function()
	{
		$("#header-menu-nieuwsbrief > a").click( function()
		{
			if ( nb_form.zichtbaar == true )
			{
				// verbergen	
				nb_form.verbergNieuwsbriefForm( this );				
			}
			else
			{
				// tonen
				nb_form.toonNieuwsbriefForm( this );				
			}
	
			return false;
		});
		
		// Sluitknop toevoegen
		$("#header-nieuwsbrief").prepend('<span class="sluit" title="Sluit dit scherm">Sluit</span><div class="clear"></div>');
		$("#header-nieuwsbrief .sluit").click( function() { nb_form.verbergNieuwsbriefForm( $("#header-menu-nieuwsbrief > a") ); } );
		
		// onder nb form een laag leggen 
		// die als kliklayer dient				
		//$('<div id="nb_form_clicklayer" style="width: 100%; height: 100%; position: absolute; top: 0; left: 0; z-index: 2; display: none;"></div>').appendTo("body");
				
		// klikken op body moet nb_form verbergen
		//$("#nb_form_clicklayer").click( function() { nb_form.verbergNieuwsbriefForm( $("#header-menu-nieuwsbrief > a") ); } );
	};
	
	nb_form.init();
	
	nb_form.verbergNieuwsbriefForm = function( object )
	{
		//$("#nb_form_clicklayer").hide();
		$(">ul", $(object).parent()).stop().animate({ opacity:"hide" }, 200);
		nb_form.zichtbaar = false;
	};
	
	nb_form.toonNieuwsbriefForm = function( object )
	{
		//$("#nb_form_clicklayer").show();
		$(">ul", $(object).parent()).stop().hide().css({left: "-390px", display: "block", opacity:"0", top:"14px"}).animate({ top: "21px", opacity: "1" }, 200);
		nb_form.zichtbaar = true;
	};
	
	// nb form automatisch tonen als #nieuwsbrief_status in url staat
	if ( document.location.hash == "#nieuwsbrief_status" )
	{
		nb_form.toonNieuwsbriefForm( $("#header-menu-nieuwsbrief > a") );
	}
		
	/* Submenu */
	var menu = {};
	
	menu.laatstGeopend = null;
	menu.timeoutTime = 2000;
	menu.timeout = null;
	
	menu.init = function()
	{		
		
		/* hover op li */
		$("#menu>li").hover(
			function() 
			{ 		
				// als laatstegeopend dezelfde is als de huidige, dan de timeout verwijderen
				if($(this).hasClass("hover"))
				{
					clearTimeout(menu.timeout);
				}
				// nieuwe uitschuiven
				else
				{
					$("#menu>li>div.submenu").hide();
					$("#menu>li").not(this).removeClass("hover");
					
					$(this).addClass("hover");
					$(">div.submenu", this).css({ left: "210px" }); // even iets naar links, en dan naar rechts animeren :)
					$(">div.submenu", this).hide().animate({left:"218px", opacity:"show"},200);
					
					// selectbox in <ie7 verwijderen
					if($.browser.msie && $.browser.version < 7)	{
						$("select").css({ visibility: 'hidden' });	
					}
				}
			},
			function() 
			{ 
				// timeout zetten om na x aantal sec te sluiten
				menu.laatstGeopend = this;
				menu.timeout = setTimeout(function()
				{
					$(">div.submenu", menu.laatstGeopend).fadeOut(
						100, 
						function() 
						{ 
							$(menu.laatstGeopend).removeClass("hover") 
						} 
					);
					
					// selectbox in <ie7 tonen
					if($.browser.msie && $.browser.version < 7)	{
						$("select").css({ visibility: 'visible' });	
					}
				}, menu.timeoutTime);
			}
		);
	}

	menu.init();
	
	/* Boekingsformulier */
	var boekingsformulier = {};
	boekingsformulier.aantal_personen = 0;
	boekingsformulier.error = false;
	boekingsformulier.foutmeldingen = new Array();
	
	// slaapplaatsen per kamertype
	var kamertypes = {};
	kamertypes.single_room = 1;
	kamertypes.twin_room = 2;
	kamertypes.double_room = 2;
	kamertypes.triple_room = 3;
	
	// controleerStap1
	boekingsformulier.controleerStap1 = function( form )
	{
		this.error = false;
		this.foutmeldingen = new Array();
		
		// bepaal totaal aantal personen
		this.aantal_personen = $("#select-aantal-personen").val();
		if ( this.aantal_personen < 1 )
		{
			this.zetFoutmelding( $("#select-aantal-personen"), "Selecteer a.u.b. het aantal personen." );
		}
			
		// controleer of aantal slaapplaatsen toereikend is
		var aantal_slaapplaatsen = 0;
		aantal_slaapplaatsen = aantal_slaapplaatsen + ( parseInt($("#aantal-single-rooms").val()) * kamertypes.single_room );
		aantal_slaapplaatsen = aantal_slaapplaatsen + ( parseInt($("#aantal-twin-rooms").val()) * kamertypes.twin_room );
		aantal_slaapplaatsen = aantal_slaapplaatsen + ( parseInt($("#aantal-double-rooms").val()) * kamertypes.double_room );
		aantal_slaapplaatsen = aantal_slaapplaatsen + ( parseInt($("#aantal-triple-rooms").val()) * kamertypes.triple_room );
				
		var totaal_aantal_personen = parseInt( this.aantal_personen );
				
		if ( aantal_slaapplaatsen < totaal_aantal_personen )
		{
			this.zetFoutmelding( 
				$("kamerindeling"), 
				"U heeft niet voldoende slaapplaatsen geselecteerd. U heeft "+aantal_slaapplaatsen+" slaapplaats(en) voor in totaal "+totaal_aantal_personen+ " personen geselecteerd."
			);	
		}
		else if ( aantal_slaapplaatsen > totaal_aantal_personen )
		{
			this.zetFoutmelding( 
				$("kamerindeling"), 
				"U heeft te veel slaapplaatsen geselecteerd. U heeft "+aantal_slaapplaatsen+" slaapplaats(en) voor in totaal "+totaal_aantal_personen+ " personen geselecteerd."
			);	
		}
		
		// foutmeldingen afhandelen
		$(".melding", form).remove(); // evt. voorgaande meldingen verwijderen
		if ( this.error == true )
		{
			this.toonFoutmelding( $(".stappen-navigatie"), "prepend" );
		}
		
		return !this.error;
	};
	
	// controleerStap3
	boekingsformulier.controleerStap3 = function( form )
	{
		this.error = false;
		this.foutmeldingen = new Array();
		
		if ( $("#vervoer", form).val() != "vliegtuig" )
		{
			// indien vliegtuig niet van toepassing, 
			// dan controles overslaan
			return true;	
		}
		
		// keuze koffers inchecken
		if ( $("#koffers_inchecken_ja").is(":checked") )
		{
			// aantal moet geselecteerd zijn
			if ( parseInt($("#select_aantal_koffers").val()) < 1 )
			{
				this.zetFoutmelding( $("#select_aantal_koffers"), "U heeft niet aangegeven hoeveel koffers u in wenst te checken." );	
			}
		}
		else if ( $("#koffers_inchecken_nee").is(":checked") )
		{
			// geen koffers inchecken. alleen handbagage dus
		}
		else
		{
			// geen keuze gemaakt
			this.zetFoutmelding( $("#koffers_inchecken_ja"), "U heeft geen keuze gemaakt of u koffers in wenst te checken." );
		}
		
		// selectie heenvlucht
		if ( $('[name="heenvlucht"]:checked').val() == null || $('[name="heenvlucht"]:checked').val() == "" || $('[name="heenvlucht"]:checked').val() == "null" )
		{
			this.zetFoutmelding( $("#beschikbare_vluchten strong"), "U heeft geen heenvlucht geselecteerd." );	
		}
		
		// selectie terugvlucht
		if ( $('[name="terugvlucht"]:checked').val() == null || $('[name="terugvlucht"]:checked').val() == "" || $('[name="terugvlucht"]:checked').val() == "null" )
		{
			this.zetFoutmelding( $("#beschikbare_vluchten strong"), "U heeft geen terugvlucht geselecteerd." );	
		}
		
		// foutmeldingen afhandelen
		$(".melding", form).remove(); // evt. voorgaande meldingen verwijderen
		if ( this.error == true )
		{
			this.toonFoutmelding( $("#bagage"), "prepend" );	
		}
		
		return !this.error;
	};
	
	/* Controleer stap 5 */
	boekingsformulier.controleerStap5 = function( form )
	{
		this.error = false;
		this.foutmeldingen = new Array();
		
		if ( $("input[name='betalingsmethode']:checked").val() == "" )
		{
			this.zetFoutmelding( $(".betalingsmethode"), "U heeft geen betalingsmethode geselecteerd." );
		}

        if ( !$("#checkbox_voorwaarden").is(":checked") )
        {
            this.zetFoutmelding( $(".betalingsmethode"), "U dient de algemene voorwaarden te accepteren om de bestelling af te kunnen ronden." );
            this.dont_scroll = true;
        }
		
		// foutmeldingen afhandelen
		$(".melding", form).remove(); // evt. voorgaande meldingen verwijderen
		if ( this.error == true )
		{
			this.toonFoutmelding( $("#frm_bestelling_afronden"), "prepend" );
		}
		
		return !this.error;
	};
		
	// zetFoutmelding
	boekingsformulier.zetFoutmelding = function( veld, melding ) 
	{
		// veld markeren
		if ( !$(veld).hasClass("fout") ) $(veld).addClass("fout");
		
		// melding opslaan
		this.foutmeldingen.push( melding );
		
		// error flag zetten
		this.error = true;
	};
	
	// toonFoutmelding
	boekingsformulier.toonFoutmelding = function( append_to, location )
	{		
		var foutmelding_html = "<div class='melding' style='display:none;'>De volgende fouten zijn opgetreden:<ol>";
		
		$(this.foutmeldingen).each( function(i)
		{
			foutmelding_html += "<li>" + boekingsformulier.foutmeldingen[i] + "</li>";
		});
		
		foutmelding_html += "</ol></div>";
		
		if( location == "prepend" )
		{
			$( append_to ).prepend( foutmelding_html );				
		}
		else
		{
			$( append_to ).append( foutmelding_html ); // actuele meldingen tonen
		}
		
		setTimeout(function() { Loading.hide();  }, 1000);
		
		$(".melding").fadeIn(1000);
		if ( !boekingsformulier.dont_scroll )
        {
            $.scrollTo(".melding", 800);
        }
	};
	
	/* Events */
	// stap 1 onsubmit
	$("#frm-reisdetails").submit( function() { return boekingsformulier.controleerStap1( $(this) ); } );
	// stap 3 onsubmit
	$("#frm-vluchtkeuze").submit( function() { return boekingsformulier.controleerStap3( $(this) ); } );
	// stap 5 onsubmit
	$("#frm_bestelling_afronden").submit( function() { return boekingsformulier.controleerStap5( $(this) ); } );
	
	// fieldsets open/dichtklappen
	$("fieldset.open legend").css({ cursor: "pointer" });
	$("fieldset.open legend").live("click", function() { fnOpenFieldset( $(this) ); });
		
	$("fieldset.dicht legend").css({ cursor: "pointer" });
	$("fieldset.dicht legend").live("click", function() { fnCloseFieldset( $(this) ); });
});

var fnOpenFieldset = function( obj )
{
	$(">ul", $(obj).parent()).css({display:"block"}).slideUp(200);
	$(obj).parent().removeClass("open").addClass("dicht");		
}

var fnCloseFieldset = function( obj )
{
	$(">ul", $(obj).parent()).css({display:"none"}).slideDown(200);
	$(obj).parent().removeClass("dicht").addClass("open");	
}

// kopieer gegevens hoofdboeker
var kopieerGegevensHoofdboeker = function()
{
	// aanhef
	if ( $("#aanhef_1").is(":checked") ) 
	{
		$("#reiziger_1_aanhef_1").attr("checked", "checked");
	}
	else
	{
		$("#reiziger_1_aanhef_0").attr("checked", "checked");
	}
	
	// nieuwsbrief ontvangen
	if ( $("#nieuwsbrief_ontvangen_eigenlijk").is(":checked") )
	{
		$("#reiziger_1_nieuwsbrief_ontvangen_eigenlijk").attr("checked", "checked");	
	}
	
	// velden
	$("#reiziger_1_voorletters").val( $("#voorletters").val() );
	$("#reiziger_1_eerste_naam_op_paspoort").val( $("#eerste_naam_op_paspoort").val() );
	$("#reiziger_1_achternaam").val( $("#hoofdboeker_achternaam").val() );
	$("#reiziger_1_geboortedatum").val( $("#geboortedatum").val() );
	$("#reiziger_1_emailadres").val( $("#emailadres").val() );
	$("#reiziger_1_paspoort_id_nummer").val( $("#paspoort_id_nummer").val() );
	$("#reiziger_1_type_document").val( $("#type_document").val() );
	$("#reiziger_1_id_nationaliteit").val( $("#id_nationaliteit").val() );
	$("#reiziger_1_id_land_uitgifte").val( $("#id_land_uitgifte").val() );
	$("#reiziger_1_datum_uitgifte").val( $("#datum_uitgifte").val() );
	$("#reiziger_1_geldig_tot").val( $("#geldig_tot").val() );
	
	return false;
};

/* Bel mij terug formulier zijbalk */
var checkBelMijTerugForm = function()
{
	var melding = "";

    if ( $("#uw_naam").val() == "" || $("#uw_naam").val() == "Uw naam" )
    {
        melding += "- U heeft geen naam ingevoerd\n";
    }

	if ( $("#bel_mij_op_telefoonnummer").val() == "" )
	{
		melding += "- U heeft geen telefoonnnummer ingevoerd\n";
	}
	else if ( document.getElementById('bel_mij_op_telefoonnummer').value.search(/^((\+|00)(-){0,1}31(-|\s){0,1}(0)?(\(0\)){0,1}|0)((((800)|(900)|(906))(-|\s){0,1}([\d0-9a-zA-Z]{7,}|[\d0-9a-zA-Z]{4}))|([\d]{2}(-|\s){0,1}[\d]{7})|([\d]{3}(-|\s){0,1}[\d]{6})|(6(-|\s){0,1}[\d]{8}))$/i) == -1) 
	{
		melding += '- Telefoonnummer moet een telefoonnummer zijn (bv. 0123-132456 of 0123 132456)\n';
	}
	
	if ( melding != "" )
	{
		alert("De volgende fouten zijn opgetreden:\n\n"+melding);
		return false;
	}	
};