/* -- respijtwijzer.js -- */

(function($) {
	$.extend( {

		config: (function() {
			// Put config settings in configObj (private):
			var confObj = {
				emptySearch:	"U heeft geen zoekterm opgegeven.\nVul een of meerdere zoektermen in en klik op GO, of druk op Enter.",
				quickSelect:	{
									selected:					"geselecteerd",
									"Mogelijkheden":			"mogelijkheden",
									"Doelgroepen":				"doelgroepen",
									"Leeftijden":				"leeftijdsgroepen"
									
								},
				fontSize:		{
									maxOptions:	3,
									titles:	{
												1: "small",
												2: "medium",
												3: "large"
											}
								}
			};

			// 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};
		})(),

		initPrintPage: function() {
			if (window.print) {
				$("#pageTools").append('<li id="printPage"><a href="#"><img src="/images/ic_print.png" alt="Print" width="51" height="20" /></a></li>');
				$("#printPage").click( function(e) {
					e.preventDefault();
					window.print();
				});
			}
		},

		initTextResize: function() {
			var fsCookie = $.cookie('TEXT_RESIZE');
			var defaultSize = 1; // small is default
			var currentSize;

			if (!fsCookie) {
				// Check of cookies worden ondersteund en zet een cookie
				currentSize = defaultSize;
				$.cookie('TEXT_RESIZE', currentSize, { path: '/', expires: 10000 });
				fsCookie = $.cookie('TEXT_RESIZE');
			}

			if (fsCookie) {
				// Als cookies ondersteund worden

				// TextResize optie invoegen in de DOM
				$("#pageTools").prepend('<li id="increaseFont"><a href="#"><img src="/images/ic_increaseFont.png" alt="Letters vergroten" width="20" height="20" /></a></li><li id="decreaseFont"><a href="#"><img src="/images/ic_decreaseFont.png" alt="Letters verkleinen" width="20" height="20" /></a></li>');

				// body voorzien van textsize class uit cookie
				$('body').addClass($.config.get().fontSize.titles[fsCookie]);

				// currentSize uit de cookie halen en zeker zijn dat het een number is
				currentSize = parseInt(fsCookie);

				$("#increaseFont").click( function(e) {
					// alleen vergroten als de max nog niet bereikt is
					if (currentSize < $.config.get().fontSize.maxOptions) {
						currentSize = currentSize + 1;
						$.setFontSize(currentSize);
					}
					e.preventDefault();
				});

				$("#decreaseFont").click( function(e) {
					// alleen vergroten als de min nog niet bereikt is
					if (currentSize > 1) {
						currentSize = currentSize - 1;
						$.setFontSize(currentSize);
					}
					e.preventDefault();
				});

			} else {
				// Als cookies niet worden ondersteund
			}
		},

		setFontSize: function(newTextSize) {
			$('body').removeClass('small medium large').addClass($.config.get().fontSize.titles[newTextSize]);
			$.cookie('TEXT_RESIZE',newTextSize, { path: '/', expires: 10000 });
		},

		toggleMijnRespijtwijzer: function() {
			$('a.loginButton').click(function(e) {
				var $this = $(this);
				$('#inlogToggle').slideToggle();
				$this.toggleClass("close");
				$this.find('span').text(($this.hasClass("close") ? "sluiten" : "inloggen"));
				e.preventDefault();
			});
			$('a.favoritesButton').click(function(e) {
				var $this = $(this);
				$('#favoritesToggle').slideToggle();
				$this.toggleClass("opened");
				$this.find('span').text(($this.hasClass("opened") ? "verberg mijn favorieten" : "bekijk mijn favorieten"));
				e.preventDefault();
			});
		},

		popImages: function() {
			var links = $.config.get().popImages;
			for (lnk in links) {
				$("#" + lnk).popLink({width:links[lnk][0], height:links[lnk][1]})
			}
		},

		zoekZorgaanbieders: function() {
			$("#zoekZorgaanbieders").submit(function(e) {
				var $this = $(this);
				e.preventDefault();
				$.get($this.attr('action'), $this.serialize(), function(data) {
					$("#results").html(data);
				})
			});
		},

		toggleTabs: function() {
			$("#tabs").tabs();
			$("ul.tabsRow").removeClass("offScreen");
			$("ul.tabsRow").find(".ui-tabs-selected a span.corners").removeClass("greenborder");
			$("ul.tabsRow").find(".ui-tabs-selected a span.corners").addClass("greenfilled");
			$("#tabs div h2.contentLabel").addClass("offScreen");

			$("ul.tabsRow li a").click(function(e) {
				var $this = $(this);
				$("ul.tabsRow").find("span.corners").removeClass("greenfilled");
				$("ul.tabsRow").find("span.corners").addClass("greenborder");
				$this.find("span.corners").removeClass("greenborder");
				$this.find("span.corners").addClass("greenfilled");
				e.preventDefault();
			});
		},
		
		toggleMoreInfo: function() {
			$("#toggleMoreInfo").find("td.moreInfo").addClass("jsHide");

			$("#toggleMoreInfo td.moreInfo p").click(function(e) {
				var $this = $(this);	
				$this.parent(".moreInfo").toggleClass("jsHide");
				e.preventDefault();
			});
		},
		
		externalLink: function(){
			$('a.external').click(function(){
				window.open(this.href);
				return false;
			});
		},
		
		imageMapHover: function(){
			$('#imageMapNL area').bind('focus mouseover', function(){
				var $this = $(this);
				var provincie = $(this).attr('id');
				
				var src = "/images/map_nl_" + provincie + ".png";
				$("#imageNL").attr("src", src);
			});
			$('#imageMapNL').mouseout(function(){
				var origSrc = "/images/map_nl.png";
				$("#imageNL").attr("src", origSrc);
			});
		},
		
		initQuickSelect: function() {
			var quickSelect = $(".quickSelect");
			if (quickSelect.length < 1) { return; }
			
			var itemContent = quickSelect;
			var out;
			
			// open first tab:
			itemContent
				.addClass("jsEnabled");
				
			// close dropdowns
			$(".quickSelect .noJs").removeClass("noJs");	
				
			var selects = itemContent.find("div.dropdown");
			function looseFocus() {
				clearTimeout(out);
				out = null;
				selects.each(function(){
					$(this).removeClass("jsSelect");
					adjustFooter(parent, true);
				});
			};
			
			function adjustFooter(parent, resetHeight) {
				var container = $("body");
				if (resetHeight) {
					container.height("auto");
				} else {
					var pageHeight = container.innerHeight();
					var flyout = parent.find("ul.nav").eq(0);
					var flyoutTop = flyout.offset().top;
					var flyoutHeight = flyout.innerHeight();
					if (pageHeight < flyoutTop + flyoutHeight + 40) {
						container.height(flyoutTop + flyoutHeight + 40);
					}
				}
			};
			
			// pulldown:
			selects
				.hover(
					function() {
						if ($(this).hasClass("jsSelect")) {
							clearTimeout(out);
							out = null;
						}
					},
					function() {
						out = setTimeout(looseFocus, 250);
					}
				);
				
			var label = selects.find("a");
			label
				.each(function() {
					var jThis = $(this);
					var labelText = jThis.text();
					jThis.closest("div.dropdown").data("origLabel", labelText.replace("&hellip;", "…"));
				})
				.click(function(e) {
					e.preventDefault();
					var parent = $(this).closest("div.dropdown");
					if (!parent.hasClass("jsSelect")) {
						looseFocus();
						parent.addClass("jsSelect");
						adjustFooter(parent);
					}
					else {
						looseFocus();
					}
				});
				
			$(document.body).click(function(e){
				if (!$(e.target).is("div.dropdown *")) {
					looseFocus();
				}
			});
			
			// update label text:
			selects
				.find("input:checkbox, input:radio")
				.click(function(){
					var jThis = $(this);
					var select = jThis.closest("div.dropdown");
					var checkedSiblings = select.find("input:checked");
					var checks = checkedSiblings.length;
					var labelText;
					//alert(select.data("origLabel"));
					if (checks == 0) {
						labelText = select.data("origLabel");
					} else if (checks == 1 && jThis.is("input:radio")) {
						labelText = checkedSiblings.eq(0).parent().text();
					} else {
						var quickSelectObj = $.config.get("quickSelect");
						var origLabel = select.data("origLabel");
						labelText = origLabel + " (" + checks + " " + quickSelectObj.selected + ")";
					}
					if (labelText.length > 35) {
						labelText = labelText.slice(0,32) + "…";
					}
					select.find("a:first").text(labelText);
				});
		},
		
		arrVerlopenKlapper: function() {
			
			var $arrVerlopenLijst = $(".arrVerlopenLijst");
	
			if($arrVerlopenLijst.length){
				
				$arrVerlopenLijst.addClass("jsOn");
				
				$('.arrVerlopenLijst h3')
					.click(function(){
						$(this).parent()
							.toggleClass("selected");
					})
					.hover(function(){
						$(this).addClass('jsHover');
					}, function(){
						$(this).removeClass('jsHover');
					});

			}
			
		},
		
		calendar: function () {
			var	cal = $("#calendar>div"),
				nav = cal.find("#monthNav a"),
				xhr,
				xhrOptions = {
					dataType: "html",
					success: function(data, status, xhr) {
						cal.html(data);
					},
					beforeSend: function(ajaxObj) {
						if (xhr) {
							xhr.abort();
						}
						xhr = ajaxObj;
					}
				};
				
			nav.live("click", function (e) {
				e.preventDefault();
				xhrOptions.url = this.href;
				$.ajax(xhrOptions);
			})
		}

	} );
	
	$.fn.extend({
		
		toggleList: function() {
			var $opened;
			return this
				.click( function(e) {
					var $openList = $(this).find("ul") ;
					if ($opened || $opened.get(0) != $openList.get(0)) {
						if ($opened) {
							$opened.removeClass("opened");
						} else {
							$openList.addClass("opened");
						}
						$opened = $openList;
					}
				});
		}
		
	});
} )(jQuery);

jQuery( function( $ ) {

	// extend $.config with window.config (if any):
	$.config.extend(window.config);

	// PrintPage invoegen
	$.initPrintPage();

	// TextResize invoegen
	$.initTextResize();

	// popImages:
	$.popImages();

	// EasyImgSwap
	if ($.fn.easyImgSwap) {
		$(":image, img").easyImgSwap();
	}
	
	if ($.fn.placeholder) {
		$('input, textarea').placeholder();
	}

	// make entire block elements clickable:
	if ($.fn.clickable) {
		$("div.bnrSmall, div.bnrBig, #searchResultsList li").clickable();
	}

	// OverLabel
	if ($.fn.overLabel) {
		$("#userEmail, #userPass").overLabel();
	}

	// Uitklap met inlogform
	$.toggleMijnRespijtwijzer();
	
	// Toggle moreInfo bij 10 puntenlijst
	$.toggleMoreInfo();
	
	// externe links openen in nieuw venster (toevoegen class="external" aan <a>)
	$.externalLink();
	
	// rollovers voor imagemap
	$.imageMapHover();

	// Zorgaanbieders zoeken via Ajax (default)
	//$.zoekZorgaanbieders();
	
	// toggle widgetZoekzorg lists
	//$("#ddMogelijkheden, #ddDoelgroep, #ddLeeftijd, #ddRadius").toggleList();
	
	// quick selects:
	$.initQuickSelect();

	// toggle Tabs
	$.toggleTabs();
	
	// Respijtwijzer verlopen arrangementen uitklapbaar:
	$.arrVerlopenKlapper();
	
	// fancybox
	if ($.fn.fancybox) {
		$("a.fancyboxPopup").fancybox({
			'transitionIn'		: 'none',
			'transitionOut'		: 'none',
			'titlePosition' 	: 'over',
			'overlayColor'		: '#000',
			'titleFormat'		: function(title, currentArray, currentIndex, currentOpts) {
				return '<span id="fancybox-title-over">' + (title.length ? title : '')  + (title.length ? '<br />': '') + '<strong>Foto ' + (currentIndex + 1) + ' van ' + currentArray.length + '</strong></span>';
			}
		});
	}
	
	// calendar:
	$.calendar();
	
	// datepicker
	if ($.fn.datepicker) {
		$("input.datepicker").datepicker({
				dateFormat: 'dd-mm-yy',
				firstDay: 1,
				monthNames: ['Januari','Februari','Maart','April','Mei','Juni','Juli','Augustus','September','Oktober','November','December'],
				nextText: 'Volgende',
				prevText: 'Vorige',
				showOtherMonths: true
			});
	}

} );


