/* === youchooz.js === */


(function($) {
	$.extend( {
		
		config: (function() {
			// Put config settings in configObj (private):
			var confObj = {
				printLabel:		"Print deze pagina",
				emptySearch:	"U heeft geen zoekterm opgegeven.\nVul een of meerdere zoektermen in en klik op GO, of druk op Enter.",
				searchForm:		{
									checkAll:	true,
									label:		"Alles selecteren",
									infoIcon:	"images/ico_info.png"
								},
				goBack:			"Ga terug naar de <a href='#'>vorige pagina</a>.",
				alphaNumAll:	"Toon alles",
				slideShow: {
					options: {
						interval: 5,
						start: 0,
						transition: { mode: "fade", speed: 2000 }
					},
					slideNav: {
						prev: {
							label: "Vorige",
							img: "/images/slidenav_prev.png"
						},
						next: {
							label: "Volgende",
							img: "/images/slidenav_next.png"
						}
					}
				}
			};
			
			// Private methods:
			var extend = function(conf, callbacks) {
				if (!conf || typeof conf !== "object") { return; }
				var proceed;
				for (var key in conf) {
					proceed = true;
					if (callbacks) {
						// Call appropriate callback function, if specified:
						if (confObj[key] && callbacks.onAlter) { proceed = callbacks.onAlter(key, conf[key], confObj[key]); }
						else if (!confObj[key] && callbacks.onAdd) { proceed = callbacks.onAdd(key, conf[key]); }
					}
					// Set value, unless callback function returned false:
					if (proceed || proceed == null) { confObj[key] = conf[key]; }
				}
			};
			var get = function(key) {
				return key ? confObj[key] : confObj;
			};
			
			// Interface:
			return {extend: extend, get: get};
		})(),
		
		initSiteSearch: function() {
			// add hook for CSS + simple validation:
			$("#siteSearch")
				.addClass("jsSiteSearch")
				.submit(function(e){
					var jSearchBox = $("#zkr_words");
					if (!jSearchBox.val()) {
						var msg = $.config.get("emptySearch");
						alert(msg);
						jSearchBox.focus();
						e.preventDefault();
					}
				});
		},
		
		searchForms: function(expr) {
			var sfConfig = $.config.get("searchForm");
			if (!sfConfig || sfConfig.checkAll === false) { return; }
			
			var formDiv = $(expr);
			
			function checkAll(collection, check) {
				var checkBoxes = collection.find("input:checkbox");
				check ? checkBoxes.attr("checked", "checked") : checkBoxes.removeAttr("checked");
			}
			
			formDiv
				.each(function() {
					var jThis = $(this);
					var total = jThis.find("input:checkbox");
					var checked = total.filter("input:checked");
					var id = jThis.attr("id").substring(3).toLowerCase();
					var allID = "option_all." + id;
					var allName = "option_all[" + id + "]";
					var checkAllBox = '<li><label for="' + allID + '"><input type="checkbox" id="' + allID + '" name="' + allName + '" /> ' + sfConfig.label + '</label></li>';
					jThis
						.data("total", total.length)
						.data("checked", checked.length)
						.prepend(checkAllBox);
				})
				.click(function(e) {
					var target = $(e.target);
					if (target.is("label")) { target = target.find("input:checkbox"); }
					var jThis = $(this);
					var checkAllID = "option_all." + jThis.attr("id").substring(3).toLowerCase();
					var checked = !!target.attr("checked");	// convert to boolean
					if (target.attr("id") == checkAllID) {
						checkAll(jThis, checked);
					} else {
						checkAllID = checkAllID.replace(/\./, "\\\.");
						var others = jThis.find("input:checkbox:not(#" + checkAllID + ")");
						others = checked ? others.not(":checked") : others.filter(":checked");
						if (others.length == 0) {
							checkAll(jThis, checked);
						} else {
							$("#" + checkAllID).removeAttr("checked");
						}
					}
				});
				
			var infoIcon = sfConfig.infoIcon;
			if (infoIcon) {
				formDiv
					.addClass("jsInfo")
					.find("div.infoLayer")
					.prepend('<a href="#"><img src="' + infoIcon + '" alt="info" /></a>')
					.hover(
						function(e) {
							var jThis = $(this);
							jThis.addClass("jsHover");
							jThis.closest("li").addClass("jsHover");
						},
						function(e) {
							var jThis = $(this);
							jThis.removeClass("jsHover");
							jThis.closest("li").removeClass("jsHover");
						});
			}
		},
		
		initSlideshow: function() {
			var slideshow = $("#slideShow");
			if (slideshow.length) {
				var config = $.config.get("slideShow");
				var slides = slideshow.find("ul.slides li.slide");
				config.options.start = slides.index(slides.not("li.hide")) || config.options.start;
				var showWidth = 0, showHeight = 0;
				slides
					.removeClass("hide")
					.each(function() {
						slideWidth = $(this).width();
						slideHeight = $(this).height();
						if (slideWidth > showWidth) {
							showWidth = slideWidth;
						}
						if (slideHeight > showHeight) {
							showHeight = slideHeight;
						}
					});
				var show = slideshow.slideShow(config.options);
				slideshow.find("ul.slides")
					.width(showWidth)
					.height(showHeight)
					.find("li")
						.width(200)
						.height("auto");
				if (slideshow.find("li.hide").length == 0) {
					var slideNav = config.slideNav;
					slideshow.addClass("jsSlideShow")
						.find("div").eq(0)
							.addJsLink("<img src=\"" + slideNav.prev.img + "\" alt=\"" + slideNav.prev.label + "\" />", {
								wrapper: "<ul class=\"slidesNav\"><li class=\"prev\">[@]</li></ul>"
							}, function() {
								show.gotoSlide(show.current - 1, true);
							})
							.find("ul.slidesNav")
								.addJsLink("<img src=\"" + slideNav.next.img + "\" alt=\"" + slideNav.next.label + "\" />", {
										wrapper: "<li class=\"next\">[@]</li>"
									}, function() {
										show.gotoSlide(show.current + 1, true);
									})
								.height(showHeight);
				}
			}
		},

		
		initPrintPage: function() {
			if (window.print) {
				$("div.paginaFuncties").prepend('<a href="#" id="printPage">' + $.config.get().printLabel + '</a>');
				$("#printPage").click( function(e) {
					e.preventDefault();
					window.print();
				});
			}
		},
		
		goBack: function() {
			$("#accessDenied").append('<p class="back">' + $.config.get("goBack") + '</p>');
			$("p.back a").click(function(e) {
				e.preventDefault();
				window.history.back();
			});
		},


		dropDowns: function() {
			$('div#topMenu ul li').hover(function(){
				$(this).addClass('hover');
			
			}, function(){
				$(this).removeClass('hover');
			});
			
			$('div#disclaimer ul li').hover(function(){
				$(this).addClass('hover');
			
			}, function(){
				$(this).removeClass('hover');
			});
		},

/*		bronVermelding: function() {
			$("div#bronnenKnop a").click(function (e) {
				  e.preventDefault();
				  $("div#bronVermelding").toggle();
				  
			});
		}*/

		bronVermelding: function() {

			$("div#bronnenKnop").click(function(){
				$(this).next("div#bronVermelding").slideToggle("fast");
			});

			$("div#bronnenKnop").toggle(function(){
				$(this).addClass("open");
				}, function () {
				$(this).removeClass("open");
			});
			
		},

		
		homeVindToolHoogte: function() {

			$vindToolHome = $('div#vindToolWrapperHome');
		
			var vindHeight = parseInt($vindToolHome.height());
			var vindMarginTop =parseInt($vindToolHome.css("margin-top"))

			$('div#homeVindToolBreaker').css('height', (vindHeight + vindMarginTop));


			$beroepMaandHome = $('div#beroepVanDeMaandWrapper');
		
			var beroepHeight = parseInt($beroepMaandHome.height());
			var beroeMarginTop =parseInt($beroepMaandHome.css("margin-top"))

			$('div#beroepVanDeMaandBreaker').css('height', (beroepHeight + beroeMarginTop));

		},


		opleidingAllLoad: function() {
			$(".opleidingPulldown").hide();
			$(".opleidingLink").html("Opleidingen tonen");
			$('.opleidingAll').append($('<span class="opleidingAllLink">Alle opleidingen tonen +</span>'));
		},

		opleidingToggle: function() {
			$(".opleidingLink").click(function(){
				$(this).next("div.opleidingPulldown").slideToggle("fast");
			});
			
			$(".opleidingLink").toggle(function(){
					$(this).html("Opleidingen verbergen");
				}, function () {
					$(this).html("Opleidingen tonen");
			});	
		},

		opleidingAllToggle: function() {
			$(".opleidingAllLink").click(function(){
				$("div.opleidingPulldown").slideToggle("fast");
			});
			
			$(".opleidingAllLink").toggle(function(){
					$(".opleidingAllLink").html("Alle opleidingen verbergen -");
					$(".opleidingLink").html("Opleidingen verbergen");
				}, function () {
					$(".opleidingAllLink").html("Alle opleidingen tonen +");
					$(".opleidingLink").html("Opleidingen tonen");
			});
		}
	} );
} )(jQuery);

jQuery( function( $ ) {
	
	// extend $.config with window.config (if any):
	$.config.extend(window.config);

	// init #siteSearch (overLabel + button image [onfocus]):
	$.initSiteSearch();

	// init searchForms:
	$.searchForms("#searchForm fieldset.checkboxField ul.overview");

	// init slideshows:
	$.initSlideshow();
	
	// add print link
	$.initPrintPage();
	
	// add "ga terug" link:
	$.goBack();

	// add "dropdown"-menuutjes on hover op de li van het hoofdmenu:
	$.dropDowns();
	
	// voeg uitklapbare bonvermeldin toe bij de startpagina van een beroep of een opleiding
	$.bronVermelding();

	// voeg uitklapbare opleidingen bij "Gaan leren"
	$.opleidingAllLoad();
	$.opleidingToggle();
	$.opleidingAllToggle();

	// Hoogte van de vindTool op de homepage opsporen zodat de werkelijke content op de juiste plek start
	$.homeVindToolHoogte();
	
	// validate form:
	$($.config.get("validateForm")).validate();
	/*
	 * Translated default messages for the jQuery validation plugin.
	 * By Joost Baaij http://www.spacebabies.nl/ joost@spacebabies.nl
	 * Language: NL
	 * Skipped date/dateISO/number.
	 */
	jQuery.extend(jQuery.validator.messages, {
		required: "Dit veld is verplicht.",
		maxlength: jQuery.format("Je kan niet meer dan {0} karakters invoeren."),
		minlength: jQuery.format("je dient minimaal {0} karakters in te voeren."),
		rangelength: jQuery.format("Je dient minimaal {0} en maximaal {1} karakters in te voeren."),
		email: "Een geldig e-mailadres is verplicht.",
		url: "Een geldig webadres is verplicht.",
		date: "Een geldige datum is verplicht.",
		number: "Een geldig getal is verplicht.",
		digits: "Gebruik alleen cijfers.",
		equalTo: "Herhaal de invoer nogmaals.",
		range: jQuery.format("Je dient een waarde tussen {0} en {1} in te voeren."),
		max: jQuery.format("Je dient een waarde kleiner dan of gelijk aan {0} in te voeren."),
		min: jQuery.format("Je dient een waarde groter dan of gelijk aan {0} in te voeren."),
		creditcard: "Een geldig creditcardnummer is verplicht."
	});
	
	// overlabel
	//$("#login label, #zkr_words").overLabel();
	
	
	//clickable zoekresultaten
	$("#zoekResultaten ul li").clickable();
	$("#choozGuideIntro .choozGuide").clickable();

} );


