/*---------------------
 *- Generic functions -
 *---------------------
 */
$(document).ready(function($) {
	/* get Request Parameters */
	$.extend({
		  getUrlVars: function(){
		    var vars = [], hash;
		    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
		    for(var i = 0; i < hashes.length; i++)
		    {
		      hash = hashes[i].split('=');
		      vars.push(hash[0]);
		      vars[hash[0]] = hash[1];
		    }
		    return vars;
		  },
		  getUrlVar: function(name){
		    return $.getUrlVars()[name];
		  }
		});
	
	
	
	/*---------------------------
	 *- Generic hover functions -
	 *---------------------------
	 */
	$.fn.jqHover = {
		color : function(value) {
			if (value.substr(0,1) == '#') {
				return {red: parseInt(value.substr(1,2),16), green: parseInt(value.substr(3,2),16), blue: parseInt(value.substr(5,2),16)};
			} else if (value.substr(0,4) == 'rgb(') {
				var rgbStr = value.substr(4,value.length - 5);
				return {red: rgbStr.split(',')[0], green: rgbStr.split(',')[1],	blue: rgbStr.split(',')[2]};
			} else if (value.substr(0,5) == 'rgba(') {
				var rgbStr = value.substr(5,value.length - 6);
				return {red: rgbStr.split(',')[0], green: rgbStr.split(',')[1],	blue: rgbStr.split(',')[2]};
			} else {
				return {red: 0, green: 0, blue: 0};
			}
		},
		opacitySet : function(fColor, bColor, opacity) {
			return {
				red: Math.floor(opacity * fColor.red + (1 - opacity) * bColor.red), 
				green: Math.floor(opacity * fColor.green + (1 - opacity) * bColor.green), 
				blue: Math.floor(opacity * fColor.blue + (1 - opacity) * bColor.blue)
			};
		},
		opacityRestore : function(fColor, bColor, opacity) {
			return {
				red: Math.floor((fColor.red - ((1 - opacity)* bColor.red)) / opacity), 
				green: Math.floor((fColor.green - ((1 - opacity)* bColor.green)) / opacity), 
				blue: Math.floor((fColor.blue - ((1 - opacity)* bColor.blue)) / opacity)
			};
		},
		parentBackgroundColor : function(object, color) {
			// if no background-color was found get parents to look for background-color
			if (color.red == 0 && color.green == 0 && color.blue == 0) {
				$(object).parents().each(function() {
					if (color.red == 0 && color.green == 0 && color.blue == 0) {
						color = $.fn.jqHover.color($(this).css('background-color'));
					}
				});
			}
			return color;
		},
		hoverOn : function(object, opacity) {
			if ($(object).get(0).tagName == 'IMG') {
				if ((jQuery.browser.msie && parseInt(jQuery.browser.version) > 6) || !jQuery.browser.msie) {
					$(object).animate({opacity: opacity}, 0);
				}
			} else {
				var fColor = $.fn.jqHover.color($(object).css('color'));
				var bColor = this.parentBackgroundColor(object, $.fn.jqHover.color($(object).css('background-color')));
				var newColor = $.fn.jqHover.opacitySet(fColor, bColor, opacity);
				$(object).css('color', 'rgb(' + newColor.red + ',' + newColor.green + ',' + newColor.blue + ')');
			}
		},
		hoverOff : function(object, opacity) {
			if ($(object).get(0).tagName == 'IMG') {
				if ((jQuery.browser.msie && parseInt(jQuery.browser.version) > 6) || !jQuery.browser.msie) {
					$(object).animate({opacity:1.0}, 0, function() {$(this).css('filter','');});
				}
			} else {
				var fColor = $.fn.jqHover.color($(object).css('color'));
				var bColor = this.parentBackgroundColor(object, $.fn.jqHover.color($(object).css('background-color')));
				var newColor = $.fn.jqHover.opacityRestore(fColor, bColor, opacity);
				$(object).css('color', 'rgb(' + newColor.red + ',' + newColor.green + ',' + newColor.blue + ')');
			}
		},
		on : function(object, opacity) {
			$(object).stop();
			$(object).children().each(function() {
				if (!$(this).hasClass('jqHover')) {
					$.fn.jqHover.on(this, opacity);
				}
			});
			$.fn.jqHover.hoverOn(object, opacity);
		},
		off : function(object, opacity) {
			$(object).stop();
			$(object).children().each(function() {
				if (!$(this).hasClass('jqHover')) {
					$.fn.jqHover.off(this, opacity);
				}
			});
			$.fn.jqHover.hoverOff(object, opacity);
		}
	};
	
	$.fn.fdHover = function() {
		$(this).hover(
			function () {$.fn.jqHover.on(this, 0.5);},
			function () {$.fn.jqHover.off(this, 0.5);}
		);
	};

	$.extend($.inputmask.defaults.definitions, {
        'h': { //hour
            "validator": "0[0-9]|1[0-9]|2[0123]",
            "cardinality": 2,
            "prevalidator": [{ "validator": "[012]", "cardinality": 1}]
        },
	    'm': { //minute
	        "validator": "0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]",
	        "cardinality": 2,
	        "prevalidator": [{ "validator": "[012345]", "cardinality": 1}]
	    }
	});

	$('.jqTimeMask').each(function() {
		$(this).inputmask("h:m");
	});
	
	$('.jqFocus').each(function() {
		// Add default focus event to form fields which have a class 'jqFocus' 
		$(this).focus(function() {
			if ($(this).hasClass('cBe2')) {
				$(this).removeClass('cBe2');
				$(this).val('');
			}
		});
	});
	
	$('.jqHover').each(function() {
		// Add default hover event to anchors which have a class 'jqHover'
		$(this).hover(
			function () {$.fn.jqHover.on(this, 0.5);},
			function () {$.fn.jqHover.off(this, 0.5);}
		);
	});
	
	/*-------------------------------------
	 *- Generic search criteria functions -
	 *-------------------------------------
	 */
	$.fn.jqSearchCriteria = {
		classNameHidden: 'jqHide',
		classNameSelected: 'jqSelected',
		classNameBtnMore: 'jqBtnMore',
		classNameBtnLess: 'jqBtnLess',
		dateFromId: null,
		dateUntilId: null,
		replaceQueryStringArticle: function(queryString) {
			this.replaceQueryString('.jqSearchArticle', queryString);
		},
		replaceQueryStringTitle: function(queryString) {
			this.replaceQueryString('.jqSearchTitle', queryString);
		},
		replaceQueryString: function(className, queryString) {
			$(className).each(function(i, obj) {
				var listReplace = queryString.split(" ");
				for (i = 0; i < listReplace.length; i++) {
					var htmlString = $(this).html().replace(new RegExp(listReplace[i],"g"), "<span class='cbBe2 fBold'>" + listReplace[i] + "</span>");
					$(this).html(htmlString);
				}
			});
		},
		onClickLess : function(id, displayMinItems) {
			var countDisplayed = 0;
			$('#' + id + ' > div').each(function(index, element) {
				if ($(element).hasClass($.fn.jqSearchCriteria.classNameBtnMore) || $(element).hasClass($.fn.jqSearchCriteria.classNameBtnLess)) {
					if ($(element).hasClass($.fn.jqSearchCriteria.classNameBtnLess)) {
						$(element).addClass($.fn.jqSearchCriteria.classNameHidden);
					} else {
						$(element).removeClass($.fn.jqSearchCriteria.classNameHidden);
					}
				} else {
					if ($(element).hasClass($.fn.jqSearchCriteria.classNameSelected)) {
						// show selected filters
					} else {
						if (countDisplayed < displayMinItems) {
							// show not selected filter
							countDisplayed++;
						} else {
							$(element).addClass($.fn.jqSearchCriteria.classNameHidden);
						}
					}
				}
			});
			$('#' + id + ' > div.' + $.fn.jqSearchCriteria.classNameBtnMore).each(function(index, element) {
				$(element).removeClass($.fn.jqSearchCriteria.classNameHidden);
			});
		},
		onClickMore : function(id) {
			var currentSelected = 0;
			var currentNotSelected = 0;
			$('#' + id + ' > div').each(function(index, element) {
				if ($(element).hasClass($.fn.jqSearchCriteria.classNameBtnMore)) {
					$(element).addClass($.fn.jqSearchCriteria.classNameHidden);
				} else {
					$(element).removeClass($.fn.jqSearchCriteria.classNameHidden);
				}
			});
		},
		onChangeDateFrom : function(event) {
			var dateFrom = null;
			var dateUntil = null;
			try {dateFrom = $.datepicker.parseDate('dd-mm-yy', $('#' + $.fn.jqSearchCriteria.dateFromId).val());} catch(err) {dateFrom = null;}
			try {dateUntil = $.datepicker.parseDate('dd-mm-yy', $('#' + $.fn.jqSearchCriteria.dateUntilId).val());} catch(err) {dateUntil = null;}
			if (dateFrom != null && dateUntil != null) {
				if (dateFrom > dateUntil) {
					$('#dialog').html("<p class='jqDialog'>De vanaf datum " + $('#' + $.fn.jqSearchCriteria.dateFromId).val() + " moet voor of gelijk zijn aan de tot en met datum " + $('#' + $.fn.jqSearchCriteria.dateUntilId).val() + ".</p>");
					$('#dialog').dialog('open');
					$('#' + $.fn.jqSearchCriteria.dateUntilId).val('');
				}
			}
		},
		onChangeDateUntil : function(event) {
			var dateFrom = null;
			var dateUntil = null;
			try {dateFrom = $.datepicker.parseDate('dd-mm-yy', $('#' + $.fn.jqSearchCriteria.dateFromId).val());} catch(err) {dateFrom = null;}
			try {dateUntil = $.datepicker.parseDate('dd-mm-yy', $('#' + $.fn.jqSearchCriteria.dateUntilId).val());} catch(err) {dateUntil = null;}
			if (dateFrom != null && dateUntil != null) {
				if (dateFrom > dateUntil) {
					$('#dialog').html("<p class='jqDialog'>De tot en met datum " + $('#' + $.fn.jqSearchCriteria.dateUntilId).val() + " moet na of gelijk zijn aan de vanaf datum " + $('#' + $.fn.jqSearchCriteria.dateFromId).val() + ".</p>");
					$('#dialog').dialog('open');
					$('#' + $.fn.jqSearchCriteria.dateFromId).val('');
				}
			}
		}
	};
	

	/*-----------------------
	 *- datepicker settings -
	 *-----------------------
	 */
    $.datepicker.regional['nl'] = {
            closeText: 'Sluiten',
            prevText: '?',
            nextText: '?',
            currentText: 'Vandaag',
            monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
            'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
            monthNamesShort: ['jan', 'feb', 'maa', 'apr', 'mei', 'jun',
            'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
            dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
            dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
            dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
            weekHeader: 'Wk',
            dateFormat: 'dd-mm-yy',
            firstDay: 1,
            isRTL: false,
            showMonthAfterYear: false,
            yearSuffix: ''};
    
    $.datepicker.setDefaults($.datepicker.regional['nl']);
	
	/*-----------------------------
	 *- Generic overlay functions -
	 *-----------------------------
	 */
	$.fn.overlay = {
		_fancyBoxCfg : {
			padding : 0,
			overlayShow: true,
			hideOnOverlayClick: false,
			hideOnContentClick: false,
			enableEscapeButton: true,
			showCloseButton: false,
			onComplete : function() {
				$('form[name="login"] input[name="email"]').focus();
			},
			onClosed : function() {
				$.fn.authorize.resetLoginForm();
			}
		},
		initLoginBox : function() {
			$('a.jqClickLogin').each(function() {
				$(this).attr("href", "#containerLoginBox");
				$(this).fancybox($.fn.overlay._fancyBoxCfg);
			});
			$('a#closeLoginBox').click(function(e) {
				$.fancybox.close();
				return true;
			});
		},
		initRegisterLoginBox : function() {
			$('a.jqClickRegister').each(function() {
				$(this).attr("href", "#containerRegisterLoginBox");
				$(this).fancybox($.fn.overlay._fancyBoxCfg);
			});
			
			$('a#closeRegisterLoginBox').click(function(e) {
				parent.$.fancybox.close();
				return true;
			});
		},
		initEmailForwardBox : function() {
			$('a.jqClickEmail').each(function() {
				$(this).attr("href", "#containerEmailForm");
				$(this).fancybox({
					padding : 0,
					overlayShow: true,
					hideOnOverlayClick: false,
					hideOnContentClick: false,
					enableEscapeButton: true,
					showCloseButton: false,
					onComplete : function() {
						$('form[name="email"] input[name="nameTo"]').focus();
					},
					onClosed : function() {
				     	$('div#loginError').html('');
				     	$('form[name="email"] input[name="nameTo"]').val('');
				     	$('form[name="email"] input[name="emailTo"]').val('');
				     	$('form[name="email"] input[name="nameFrom"]').val('');
				     	$('form[name="email"] input[name="emailFrom"]').val('');
				     	$('div#emailError').html('');
					}
				});
			});
			
			$('a#closeEmailFormBox').click(function(e) {
				$.fancybox.close();
				return true;
			});
			
			$('a#submitEmail').click(function(e) { 
				$.post('?service=email', 
						{
							receivername: $('form[name="email"] input[name="nameTo"]').val(),	
							receiveremail: $('form[name="email"] input[name="emailTo"]').val(),	
							sendername: $('form[name="email"] input[name="nameFrom"]').val(),	
							senderemail: $('form[name="email"] input[name="emailFrom"]').val()	
						}, function(data) {
					  if (data.status=='ok') $.fancybox.close();
					  else $('div#emailError').html(data.errorMessage);
					}, "json");
				return false;
				$.fancybox.close();
			});
		},	
		initOverlayBox : function() {
			$('a.iframe').fancybox({
					padding : 0,
					overlayShow: true,
					hideOnOverlayClick: false,
					hideOnContentClick: false,
					enableEscapeButton: true,
					showCloseButton: false,
					width: 1010,
					height: 560
				});
		},
		initCloseOverlayBox : function() {
			$('a#closeOverlayBox').click(function(e) {
				parent.$.fancybox.close();
				return true;
			});
		},
		initRequestOverlayBox : function() {
			$(function() {
				var overlay = $.getUrlVar('overlay');
				if (typeof(overlay)!='undefined') {
					overlay = unescape(overlay);
					if (overlay=='logon') {
						$.fancybox($.extend($.fn.overlay._fancyBoxCfg, {'href':'#containerLoginBox'}));
					} else {
						$.fancybox(
								{
									padding: 0,
									autoScale: false,
									scrolling: 'no',
									width: 801,
									height: 480,
									type:'iframe',
									href: overlay,
									showCloseButton: false,
									hideOnOverlayClick: false,
									hideOnContentClick: false
								});
	
					}
				}	
			});
		}
	};
	
	$.fn.overlay.initOverlayBox();
	$.fn.overlay.initRequestOverlayBox();

	$.fn.poll = {
		show: function(form,result) {
			$('#' + result).removeClass('jqHide');
			$('#' + form).addClass('jqHide');
		},
		determine: function(form,result){
			if(readCookie('mentometer') != '' && readCookie('mentometer') != null) {
				$('#' + result).removeClass('jqHide');
				$('#' + form).addClass('jqHide');
			} else {
				$('#' + result).addClass('jqHide');
				$('#' + form).removeClass('jqHide');				
			}			
		}
	};

	$.fn.slideshow = {
		_imageTotal: 0,
		_imageList: [],
		_imageIdx: 0,
		_fadeDuration: 200,
		_slideDuration: 3400, // fadeOut 200ms + show 3000ms + fadeIn 200ms 
		_timer: null,
		_preload: function() {
			this._preloadImage(this._imageIdx); // current image
			this._preloadImage((this._imageIdx - 1 < 0 ? this._imageTotal - 1 : this._imageIdx - 1)); // previous image
			this._preloadImage((this._imageIdx + 1 > this._imageTotal - 1 ? 0 : this._imageIdx + 1)); // next image
		},
		_preloadImage: function(idx) {
			if (!this._imageList[idx].preloaded) {
				this._imageList[idx].preloaded = true;
				$('#imgContainer').append("<div id='img" + idx + "' class='jqHide'><img src='" + this._imageList[idx].src + "'/></div>");
			}
		},
		_showImage: function() {
			$('#img' + this._imageIdx).removeClass('jqHide');
			$('#imgCurrent').html(this._imageIdx + 1);
			$('#imgTotal').html(this._imageTotal);
		},
		_showCaption: function() {
			$('#caption').html((this._imageList[this._imageIdx].caption == null ? '<!-- -->' : this._imageList[this._imageIdx].caption));
			$('#dateLine').html((this._imageList[this._imageIdx].dateLine == null ? '<!-- -->' : this._imageList[this._imageIdx].dateLine));
			$('#agency').html((this._imageList[this._imageIdx].agency == null ? '<!-- -->' : this._imageList[this._imageIdx].agency));
		},
		_slideshowStart: function() {
			this._timer = setInterval(function() {
				$.fn.slideshow._onClickNext();
			}, this._slideDuration);
		},
		_slideshowStop: function() {
			clearInterval(this._timer);
			this._timer = null;
		},
		_forceSlideshowStop: function() {
			if (this._timer != null) {
				$('#slideShowStop > a').click();
			}
		},
		_onClickPrev: function() {
			$('#imgContainer').fadeOut($.fn.slideshow._fadeDuration, "linear", function() {
				$('#img' + $.fn.slideshow._imageIdx).addClass('jqHide');
				$.fn.slideshow._imageIdx--;
				if ($.fn.slideshow._imageIdx < 0) {
					$.fn.slideshow._imageIdx = $.fn.slideshow._imageTotal - 1;
				}
				$.fn.slideshow._preload();
				$('#imgCurrent').html($.fn.slideshow._imageIdx + 1);
				$('#img' + $.fn.slideshow._imageIdx).removeClass('jqHide');
				$.fn.slideshow._showCaption();
				$('#imgContainer').fadeIn($.fn.slideshow._fadeDuration, "linear", null);
			});
		},
		_onClickNext: function() {
			$('#imgContainer').fadeOut($.fn.slideshow._fadeDuration, "linear", function() {
				$('#img' + $.fn.slideshow._imageIdx).addClass('jqHide');
				$.fn.slideshow._imageIdx++;
				if ($.fn.slideshow._imageIdx == $.fn.slideshow._imageTotal) {
					$.fn.slideshow._imageIdx = 0;
				}
				$.fn.slideshow._preload();
				$('#imgCurrent').html($.fn.slideshow._imageIdx + 1);
				$('#img' + $.fn.slideshow._imageIdx).removeClass('jqHide');
				$.fn.slideshow._showCaption();
				$('#imgContainer').fadeIn($.fn.slideshow._fadeDuration, "linear", null);
			});
		},
		addImage: function(idx, src, caption, dateLine, agency, selected) {
			this._imageList.push({idx: idx, src: src, caption: caption, dateLine: dateLine, agency: agency, preloaded: false});
			if (selected) {
				this._imageIdx = idx;
			}
		},
		show: function(autoStart) {

			if (this._imageList.length == 0) {
				
				$('#slideShowBar').addClass('jqHide');
				
			} else {

				this._imageTotal = this._imageList.length;

				this._preload();
				this._showImage();
				this._showCaption();
				
				$('#slideShowStart > a').click(function(e) {
					$.fn.slideshow._slideshowStart();
					$('#slideShowStart').addClass('jqHide');
					$('#slideShowStop').removeClass('jqHide');
				});
				$('#slideShowStop > a').click(function(e) {
					$.fn.slideshow._slideshowStop();
					$('#slideShowStop').addClass('jqHide');
					$('#slideShowStart').removeClass('jqHide');
				});
				$('#imgPrev').click(function(e) {
					$.fn.slideshow._forceSlideshowStop();
					$.fn.slideshow._onClickPrev();
				});
				$('#imgNext').click(function(e) {
					$.fn.slideshow._forceSlideshowStop();
					$.fn.slideshow._onClickNext();
				});
				
				if (autoStart) {
					$('#slideShowStart > a').click();
				}
			}
		}
	};
	
	$.fn.video = {
		instanciateForOverlay : function (container, autoStart, file, image) {
			jwplayer(container).setup({
				id: container + 'ID',
				allowfullscreen: 'false',
				mute: 'false',
				screencolor: '000000',
				autoStart: autoStart,
				controlbar: 'over',
				'controlbar.idlehide': 'false',
				icons: 'false',
				width: 770,
				height: 432,
				volume: 50,
				file: file,
				provider: 'video',
				image: image,
				events : {
					onReady : function(event) {
					}
				},
				/* If the browser does not support the first player mode in the list
				 * (or if the media file cannot be played using the first mode), 
				 * the player will attempt to try the second mode
				 */
				modes: [
				    {type: 'flash', src: publicationUrl+'template/framework/components/jwplayer/player.swf'},
				    {type: 'html5'}
				]
			});
	 	}
	};

	$.fn.swf = {
		instanciateForOverlay : function (container, swf, quality, loop) {
			$(container).flash({
				swf: swf,
				width: 770,
				height: 432,
				quality: quality,
				loop: loop
			});		
		}
	};

	/*----------------------------
	 *- Generic base64 functions -
	 *----------------------------
	 */
	$.fn.base64 = {
		// private property
		_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",
		// public method for decoding
		decode : function (input) {
			var output = "";
			var chr1, chr2, chr3;
			var enc1, enc2, enc3, enc4;
			var i = 0;
			input = input.replace(/[^A-Za-z0-9\-\_\=]/g, "");
			while (input.length % 4 != 0) {
				input += "=";
			}
			while (i < input.length) {
				enc1 = this._keyStr.indexOf(input.charAt(i++));
				enc2 = this._keyStr.indexOf(input.charAt(i++));
				enc3 = this._keyStr.indexOf(input.charAt(i++));
				enc4 = this._keyStr.indexOf(input.charAt(i++));
				chr1 = (enc1 << 2) | (enc2 >> 4);
				chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
				chr3 = ((enc3 & 3) << 6) | enc4;
				output = output + String.fromCharCode(chr1);
				if (enc3 != 64) {
					output = output + String.fromCharCode(chr2);
				}
				if (enc4 != 64) {
					output = output + String.fromCharCode(chr3);
				}
			}
			output = $.fn.base64._utf8_decode(output);
			return output;
		},
		// private method for UTF-8 decoding
		_utf8_decode : function (utftext) {
			var string = "";
			var i = 0;
			var c = c1 = c2 = 0;
			while ( i < utftext.length ) {
				c = utftext.charCodeAt(i);
				if (c < 128) {
					string += String.fromCharCode(c);
					i++;
				}
				else if((c > 191) && (c < 224)) {
					c2 = utftext.charCodeAt(i+1);
					string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
					i += 2;
				}
				else {
					c2 = utftext.charCodeAt(i+1);
					c3 = utftext.charCodeAt(i+2);
					string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
					i += 3;
				}
			}
			return string;
		}
	};

	/*-------------------------------
	 *- Generic authorize functions -
	 *-------------------------------
	 */
	$.fn.authorize = {
		_KEY : "fgkdflfdsEKWRFIOFOSlckdfkjd67765",
        _showDialog : function() {
			$.fn.jqDialog.show(
				{
					id: "dialog-message",
					title: "Welkom",
					content: 
						"<p class='pb10'>U heeft zich eerder geregistreerd bij FD.nl of BNR.nl</p>" +
						"<p>Wij vragen eenmalig uw gegevens aan te vullen en uw registratie voor FD.nl te bevestigen." + 
						"Ter kennismaking ontvangt u 3x gratis het FD Weekend.</p>", 
					//closeOnEscape: false,
					buttons: [
						{
							text: "Verder",
							onClick: function(event, ui) {
										$.fn.jqDialog.close(this);
										window.location = firstLoginUrl;
									 }
						}
					]
				}
			);			
		},
		fancyBoxCfg : {
			padding : 0,
			overlayShow: true,
			hideOnOverlayClick: false,
			hideOnContentClick: false,
			enableEscapeButton: true,
			showCloseButton: false,
			onComplete : function() {
				$('form[name="login"] input[name="email"]').focus();
			},
			onClosed : function() {
				$.fn.authorize.resetLoginForm();
			}
		},
		loginResponse : { status:'not tested' },
		decodedCookie : null,
		resetLoginForm: function() {
	     	$('div#loginError').html('');
	     	$('form[name="login"] input[name="email"]').val('');
	     	$('form[name="login"] input[name="password"]').val('');
	     	$('form[name="login"] input[name="remember_me"]').attr('checked', false);
		},
		init: function() {

			// login button in overlay
			$('form[name="login"] input').each(function() {
				var ua = $.browser; 
				if ( ua.msie && ua.version.slice(0,3) == "6.0" ) { 
					$(this).keyup(function(e) {
				        if (e.keyCode == 13) {
				            $(this).parents('form').submit();
				            return false;
				        }
				        return true;
				    });
				} else {
					$(this).keydown(function(e) {
				        if (e.keyCode == 13) {
				            $(this).parents('form').submit();
				            return false;
				        }
				        return true;
				    });
				}
			});
			
			$('form[name="login"]').submit(function(e) {
				var remember_me =  $('form[name="login"] input[name="remember_me"]').attr("checked") ? "on" : "";
				$.fn.authorize.logon($('form[name="login"] input[name="email"]').val(),
					  $('form[name="login"] input[name="password"]').val(),
					  remember_me, false, window==top);
				if (($.fn.authorize.loginResponse==null) || 
						(($.fn.authorize.loginResponse.status!='ok') && ($.fn.authorize.loginResponse.status!='follow_up')) ) {
					var message='Verkeerde gebruikersnaam en wachtwoord combinatie!';
					if (($.fn.authorize.loginResponse.status=='error')) {
						message = decodeURIComponent($.fn.authorize.loginResponse.text.replace(/\+/g,  " "));
					}
					if ($.fn.authorize.loginResponse!=null) {
						if ($.fn.authorize.loginResponse.status=='concurrent sessions exceeded') {
							message='Te vaak gelijktijdig aangemeld met dezelfde gebruikersnaam';
						}
					}
					$('div#loginError').html(message);
					$('form[name="login"] input[name="email"]').focus();
				} else {
					if (window!=top) {
						
						var target = parent.$.getUrlVar('target');
						if (($.fn.authorize.loginResponse.status=='follow_up')) {
							parent.$.fn.authorize._showDialog();
							parent.$.fancybox.close();
						}
						else {
							if (typeof(target)!='undefined') {
								target = unescape(target);
							}
							if (typeof(target)!='undefined') {
								parent.location = target;
							}
							else {
								parent.$.fancybox.close();
							}
						}
					} else {
						$.fancybox.close();
						var target = $.getUrlVar('target');
						if (($.fn.authorize.loginResponse.status=='follow_up')) {
							$.fn.authorize._showDialog();
						}
						else if (typeof(target)!='undefined') {
							target = unescape(target);
						}
						if (typeof(target)!='undefined') {
							window.location = target;
						}
					}
				}
				e.preventDefault();
				return false;
			});
			
			$('a[href="#submitLogin"]').click(function(e) {
				$('form[name="login"]').submit();
				e.preventDefault();
				return false;
			});
			
			$.fn.overlay.initLoginBox();
		},
		getDecodedCookie: function(cookieName) {						
			
			var encoded64Cookie = $.cookie(cookieName) || $.cookie("ff_" + cookieName) ||  $.cookie("msie_" + cookieName);
			if (encoded64Cookie) {
				var encodedCookie = $.fn.base64.decode(encoded64Cookie);
			}
			if (encodedCookie) {
				var decodedCookie = "";
		    	for (var index = 0; index<encodedCookie.length; index++) {
		    		decodedCookie+=String.fromCharCode(encodedCookie.charCodeAt(index)^$.fn.authorize._KEY.charCodeAt(index%this._KEY.length));
		    	}
		    	var shortDC = decodedCookie.substring(0, decodedCookie.lastIndexOf(','));
		    	var values = eval( "["+shortDC+"]");
		    	for(var i=0,len=values.length; value=values[i], i<len; i++) {
		    		values[i]=decodeURIComponent(values[i].replace(/\+/g,  " "));
		    	}
		    	return values;
		    } else { 
		    	return null;
		    }
		},
		getDecodedCookieExXor: function(cookieName) {
			
			var encoded64Cookie = $.cookie(cookieName) || $.cookie("ff_" + cookieName) ||  $.cookie("msie_" + cookieName);
			if (encoded64Cookie) {
				var encodedCookie = $.fn.base64.decode(encoded64Cookie);
			}
			if (encodedCookie) {
		    	var shortDC = encodedCookie.substring(0, encodedCookie.length);
		    	return eval( "["+shortDC+"]");
		    } else { 
		    	return null;
		    }
		},		
		handleLogonReponse: function(data, textStatus, xmlHttpRequest) {
			$.fn.authorize.loginResponse = data;
			$.fn.authorize.afterLogon(data.status=='ok' || data.status == 'follow_up');
		},
		handleLogonReponseNoAfterLogon: function(data, textStatus, xmlHttpRequest) {
			$.fn.authorize.loginResponse = data;
		},
		autoLogon: function() {
			// handles AutoLogon and PageView
			
			if (!this.isLoggedOn()) {
				var rememberMeCookie = $.fn.authorize.getDecodedCookie("fdmgRememberMe");
				if (rememberMeCookie) {
					$.fn.authorize.logon(rememberMeCookie[1], rememberMeCookie[2], 'yes', true, true);
				} else {
					$.fn.authorize.afterLogon(false);
				}
			} else {
				$.fn.authorize.afterLogon(true);
			}
		},
		afterLogon: function(loggedOn) {
			$.fn.authorize.doCookieCall();
			$.fn.authorize.setState();
			$.fn.authorize.updateAbo();
			if (loggedOn) {
				$.fn.authorize.sendPageView();
			}
			$.fn.authorize.siteCatalyst();
			s.t();
		},
		doCookieCall: function() {
			if ($.fn.authorize.getDecodedCookie("fdmgUnregistered") == null)
			{
				$.ajax({
					async: false,
					url: publicationUrl + "?service=empty",
					type: 'GET'
				});
			}
		},
		updateAbo: function() {
			 /*ophalen personalAboCookie en pageviews 
			 */
			var personal_abo = "";
			var personalAboCookie = "";
			var pageviews = 0;
			if($.fn.authorize.getDecodedCookie("fdmgLogon") != null){
				personalAboCookie = $.fn.authorize.getDecodedCookie("fdmgLogon");
				personal_abo = personalAboCookie[3];
				pageviews = (personalAboCookie[5]).replace(/^0+/, "");
			}else if($.fn.authorize.getDecodedCookie("fdmgUnregistered") != null){
				personalAboCookie = $.fn.authorize.getDecodedCookie("fdmgUnregistered");
				personal_abo = personalAboCookie[3];
				pageviews = (personalAboCookie[5]).replace(/^0+/, "");
			}else{
				personal_abo = "unregistered";
			}
			
			if (pageviews == ""){
				pageviews = 0;
			}
			pageviews = parseInt(pageviews);
			 
			// ophalen ipCookie tbv zakelijke abo
			var business_abo = "unregistered";
			if($.fn.authorize.getDecodedCookieExXor('fdmgIPSubscription') != null){
				var businessCookie = $.fn.authorize.getDecodedCookieExXor('fdmgIPSubscription');
				business_abo = businessCookie[1];
			}
			
			$.ajax({
				async: true,
				url: publicationUrl + "?service=aanbieding&personal_abo=" + personal_abo + "&business_abo=" + business_abo + "&pageviews=" + pageviews,
				type: 'GET',
				success: function(data, textStatus, xmlHttpRequest) {
					var d=$(data);
					$('#abo_upsell').html(d.filter('#abo_upsell').html());
					var progress = parseInt($("#progressBar").text());
					$("#progressBar").text('');
					$("#progressBar").progressbar({
						value: progress
					});
					var maxAlerts = parseInt(d.filter('#maxAlert').html());
					$.fn.jqNewsAlert.showAll(maxAlerts);
				}
			});
			
		},
		sendPageView: function() {
			var logonCookie = $.fn.authorize.getDecodedCookie("fdmgLogon");
			var viewCountCookie = $.cookie("fdmgViewCount") || $.cookie("ff_fdmgViewCount") || $.cookie("msie_fdmgViewCount") ;
		    $.cookie("fdmgViewCount", null, {'path':'/'});
            $.cookie("ff_fdmgViewCount", null, {'path':'/', 'domain':'.'+cookieDomain});
            $.cookie("msie_fdmgViewCount", null, {'path':'/'});
			if (viewCountCookie && logonCookie) {
				clientNumber = logonCookie[7];
				sessionId = logonCookie[8];
				targetURL = loggingUrl; 
					
				$.ajax({
					async: true,
					data: {
						clientNumber: clientNumber,
						sessionId: sessionId
					},
					cache: false,
					url: (targetURL == null ? "" : targetURL + "/") + "RegisterProtectedPage",
					context: document.body,
					type: 'POST'
				});
			}

		},
		siteCatalyst: function() {
			if($.fn.authorize.getDecodedCookieExXor('fdmgIPSubscription') != null){
				s.prop6= $.fn.authorize.getDecodedCookieExXor('fdmgIPSubscription')[2];
			}			
			var logonCookie = $.fn.authorize.getDecodedCookie("fdmgLogon");
			if(logonCookie != null){
		 		if (logonCookie[10].length>0) {
					s.prop6=logonCookie[10];
		 		}
				s.prop7=logonCookie[3];
		 		s.prop8=logonCookie[7];
		 		var pageviews = logonCookie[5];
			 	s.eVar21=pageviews.replace(/^0+/, "");
			} else {
				s.prop7="Niet ingelogd";
			}
		},
		registerExceededClient: function() {
			var logonCookie = $.fn.authorize.getDecodedCookie("fdmgLogon");
			if (logonCookie) {
				clientNumber = logonCookie[7];
				targetURL = loggingUrl; 
					
				$.ajax({
					async: true,
					data: {
						clientNumber: clientNumber
					},
					cache: false,
					url: (targetURL == null ? "" : targetURL + "/") + "RegisterExceededClient",
					context: document.body,
					type: 'POST'
				});
			}

		},
		debugCookies: function() {
			if (window.console) {
				console.dir({
						"fdmgUnregistered":$.fn.authorize.getDecodedCookie("fdmgUnregistered"),
						"fdmgLogon":$.fn.authorize.getDecodedCookie("fdmgLogon"),
						"fdmgRememberMe":$.fn.authorize.getDecodedCookie("fdmgRememberMe"),
						"fdmgViewCount":$.cookie("fdmgViewCount")
					});
			}
		},
		isLoggedOn: function() {
			if (this._decodedLoginCookie == null) {
				this._decodedLoginCookie = $.fn.authorize.getDecodedCookie("fdmgLogon");
			}
			return this._decodedLoginCookie != null;
		},
		onClickLogOff: function() {
			$.cookie('fdmgLogon', null, {'path':'/'});
			$.cookie('ff_fdmgLogon', null, {'path':'/', 'domain':'.'+cookieDomain});
			$.cookie('ff_fdmgRememberMe', null, {'path':'/', 'domain':'.'+cookieDomain}); 
			
			$.cookie('msie_fdmgLogon', null, {'path':'/'});
			$.cookie('msie_fdmgRememberMe', null, {'path':'/'});
			$.fn.authorize._decodedLoginCookie = null;
			$.fn.authorize.setState();
			$.fn.authorize.afterLogon();
			window.location = publicationUrl;			
		},
		setState: function() {

			// loginMenu
			if ($.fn.authorize.isLoggedOn()) {
				$('a#loginLink').attr("href", publicationUrl + "#logout");
				$('a#loginLink').text("Uitloggen");
				$("a#loginLink").unbind('click.fb');
				$("a#loginLink").click($.fn.authorize.onClickLogOff);
				var logonMeCookie = $.fn.authorize.getDecodedCookie("fdmgLogon");
				$('li#loginName').text(logonMeCookie[4]); 
				
				if (logonMeCookie[3].toLowerCase() == 'professional') {
					$('#archiveAccess').removeClass('jqHide');
				}
			} else {
				if($.fn.authorize.getDecodedCookieExXor('fdmgIPSubscription') != null){
					var businessCookie = $.fn.authorize.getDecodedCookieExXor('fdmgIPSubscription');
					$('li#loginName').text('Welkom medewerker ' + businessCookie[0]);
				}else{
					$('li#loginName').text('');
				}
				
				$('a#loginLink').attr("href", "#containerLoginBox");
				$('a#loginLink').text("Inloggen");
				$("a#loginLink").fancybox($.fn.authorize.fancyBoxCfg);
			}
			
			// commentBox
			if ($.fn.authorize.isLoggedOn()) {
		    	$('div#comment_login input[name="email"]').val($.fn.authorize.getDecodedCookie('fdmgLogon')[1]); 
		    	$('div#comment_login input[name="field(byline)"]').val($.fn.authorize.getDecodedCookie('fdmgLogon')[4]);
		    	$('#loggedInAs').text('Ingelogd als ' + $.fn.authorize.getDecodedCookie('fdmgLogon')[4]);
				$('div#comment_login').removeClass('jqHide');
				$('div#comment_nologin').addClass('jqHide');
		    } else {
		    	$('div#comment_login input[name="email"]').val(''); 
		    	$('div#comment_login input[name="field(byline)"]').val(''); 
				$('div#comment_login').addClass('jqHide');
				$('div#comment_nologin').removeClass('jqHide');
				
			}
		},
		logon: function(email, password) {
			logon(email, password, 'yes', true, true);
		},
		logon: function(email, password, remember_me, async, afterLogon) {
			$.ajax({
				  type: 'POST',
				  url: publicationUrl+"handle_login",
				  data: {'email':email, 
						 'password': password,
						 'remember_me': remember_me,
						 'target': ''},
				  success: afterLogon?$.fn.authorize.handleLogonReponse:$.fn.authorize.handleLogonReponseNoAfterLogon,
				  dataType: 'json',
				  async: async
				});
			return false;
		}
	};

	/*---------------------------------
	 *- Dialog with default OK button -
	 *---------------------------------
	 */
	 $.fn.jqDialog = {
		_arrangeBtnId : function(id, index) {
			return id + "_dialogBtn" + index;
		},
		_arrangeContent: function(userConfig) {
		
			var retVal = 
				"<div id='" + userConfig.id + "' class='left w450 alignTextL'>" +
					"<div class='left pt5 " + ($.browser.msie ? 'pb15': 'pb5') + "'>" +
						"<div class='left w450'>" +
							"<div class='left pt5'>" +
								"<img class='sprite sLogoFD4' src='images/placeholder.png' title='FD.nl'/>" +
							"</div>" +
							"<div class='right'>" +
								"<a href='#' title='Sluiten' class='jqHover' dialog-id='" + userConfig.id + "' onClick='$.fn.jqDialog.close(this);'>" +
									"<img class='sprite sIcoX6' src='images/placeholder.png'/>" + 
								"</a>" +
							"</div>" +
						"</div>" + 
						"<div class='left w450 pt15 pb15 bottomDivider fGe24'>" + userConfig.title + "</div>" +
						"<div class='left w450 pt15 fAr14'>" + userConfig.content + "</div>" +
						"<div class='left w450 pt10'>";
			
			for (var i = 0; i < userConfig.buttons.length; i++) {
				retVal += "<a id='" + this._arrangeBtnId(userConfig.id, i) + "' href='#' class='right ml15' dialog-id='" + userConfig.id + "'><div class='btnSprite btnGrayMl pl15 pr10'>" + userConfig.buttons[i].text + "</div><div class='btnSprite btnGrayMr'><!--  --></div></a>";
			}

			retVal += "</div>" +
				"</div>" +
			"</div>";
			return retVal;
		},
		_arrangeOnClick: function(userConfig) {
			for (var i = 0; i < userConfig.buttons.length; i++) {
				$("#" + this._arrangeBtnId(userConfig.id, i)).click(userConfig.buttons[i].onClick);
			}
		},
		_arrangeConfig: function(config) {
			var userConfig = $.extend(config, 
				{
					closeOnEscape: (config.closeOnEscape ? config.closeOnEscape : true),
					buttons: (config.buttons ? config.buttons : 
						{
							text: "Ok",
							onClick: function() {
								$.fn.jqDialog.close(this);
							}
						})
				});
			return userConfig;
		},
		close: function(obj) {
			$("#" + $(obj).attr("dialog-id")).dialog("close");					
		},
		show : function(config) {
			var userConfig = this._arrangeConfig(config);
			$(this._arrangeContent(userConfig)).appendTo('body');
			this._arrangeOnClick(userConfig);
			
			$("#" + userConfig.id).dialog(	{
				modal : true,
				width: ($.browser.msie ? 475: 470),
				resizable: false,
				create: function(event, ui) {
					$(".ui-dialog-titlebar").remove();
				},
				close : function(event, ui) {
					$("#" + userConfig.id).remove();
				}
			});
		}
	};

	/*----------------------------
	 *- Generic unload functions -
	 *----------------------------
	 */
	$(window).unload( function () {} ); // clear ff and safari cache
	
});

