$(document).ready(function()
{
	bsk.formcompact();
	bsk.footerbottom();
	bsk.lastchild();
	bsk.lightbox();
	bsk.externallinks();
	bsk.newsletter();
});

$(window).resize(function()
{
	bsk.footerbottom();
});

var bsk = {

	footerbottom: function()
	{
		var minus = $(document.body).hasClass('overview') ? 356 : 372;
		$('nav').css({ minHeight: $(window).height() - minus });
	},

	lastchild: function()
	{
		$('.kolom .short:last-child').addClass('last-child');
	},

	formcompact: function()
	{
		$('.form-compact').each(function()
		{
			var defValue = $('label:first', this).text();
			var $domEl = $('input:first', this);
			if (!$domEl.val())
			{
				$domEl.val(defValue);
			}
			$domEl.onEmptyValue(defValue);
		});
	},

	lightbox: function()
	{
		$('[rel*=lightbox]').click(function()
		{
			$(this).blur().bsk_lightbox();
			return false;
		});
	},

	externallinks: function()
	{
		$('a[href^="http://"]')
			.each(function()
			{
				if (!this.href.match(window.location.host))
				{
					$(this).attr({
						target	: '_blank',
						title	: 'Externe website, opent in een nieuw venster'
					});
				}
			});
	},

	newsletter: function()
	{
		$('.aanmelden-nieuwsbrief').submit(function()
		{
			if (! /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,6})+$/i.test($('input', this).val()))
			{
				alert('Vul alstublieft een bestaand e-mailadres in');
				$('input:first', this).focus();
				return false;
			}
		});
	}
};

(function($)
{
	$.fn.bsk_lightbox = function()
	{
		$(this).each(function()
		{
			// Overlay
			var imageLoc = this.href;
			var overlay = $('<div>')
				.attr('id', 'lightbox-overlay')
				.css({
					height: $(document).height(),
					width: $(window).width(),
					background	: '#eee',
					position	: 'absolute',
					top			: 0,
					left		: 0,
					zIndex		: 11
				})
				.appendTo('body')
				.css({opacity: 0})
				.animate({opacity: .8}, 200);

			// Image container
			var container = $('<div>')
				.css({
					background	: 'url(/src/img/throbber.gif) no-repeat scroll 50% 50% transparent',
					position	: 'fixed',
					width		: '100%',
					height		: '100%',
					left		: 0,
					top			: 0,
					zIndex		: 12
				})
				.appendTo(document.body)
				.click(function()
				{
					$(container).fadeOut(200, function(){ $(this).remove(); });
					$(overlay).fadeOut(200, function(){ $(this).remove(); });
				});

			// Vertical offset for funny browsers that dont support position: fixed
			var vOffset = 0;
			if ($.browser.msie && $.browser.version < 7)
			{
				vOffset = document.documentElement.scrollTop;
			}

			// Load image
			var image = $('<img src="' + this.href + '">')
				.load(function()
				{

					// Hide spinner
					container.css({
						background: 'none'
					});

					// Append image and fade in
					$(this)
						.appendTo(container)
						.attr('title', 'Klik om terug te gaan naar de website')
						.css({
							marginTop	: (vOffset + this.offsetHeight + 6) / -2,
							marginLeft	: (this.offsetWidth + 6) / -2,
							opacity		: 0,
							padding		: 2,
							background	: '#fff',
							border		: '1px solid #999',
							cursor		: 'pointer',
							left		: '50%',
							top			: '50%',
							position	: 'absolute',
							zIndex		: 13
						})
						.animate({opacity: 1}, 200);
				});
			return false;
		});
	};

	$.fn.onEmptyValue = function(value)
	{
		$(this).each(function()
		{
			var $obj			= $(this);
			var defaultValue	= value   || $obj.val();

			$obj.data('defaultValue', defaultValue);

			var hasDefaultValue = function()
			{
				return $obj[0].value == defaultValue;
			}

			// Function: value changed
			var markValue = function()
			{
				if (hasDefaultValue())
				{
					$obj.addClass('default');
				} else
				{
					$obj.removeClass('default');
				}
			};

			// Function: Remove default value
			var removeDefaultValue = function()
			{
				if (hasDefaultValue())
				{
					$obj.val('');
					markValue();
				}
			};

			// Function: Restore default value when empty
			var restoreDefaultValue = function()
			{
				if ($obj.val() == '' || hasDefaultValue())
				{
					$obj.val(defaultValue);
					markValue();
				}
			};

			// Start by marking field correctly
			markValue();

			// Focus: delete if value is default value
			$obj.focus(removeDefaultValue);

			// Blur: restore default value
			$obj.blur(restoreDefaultValue);

			// Change: if value is using by javascript
			$obj.change(markValue);

			// Parent form submit: delete if value is default value
			$obj.parents('form:eq(0)').submit(removeDefaultValue);
		});
	};

	var originalVal = jQuery.fn.val;
	jQuery.fn.val = function(value)
	{
		var elem = this[0];

		if (typeof $(elem).data('defaultValue') != 'undefined')
		{
			if (typeof value != 'undefined')
			{
				// setter
				elem.value = value;
				return this;
			} else
			{
				// getter
				if (jQuery(elem).data('defaultValue') == elem.value)
				{
					return '';
				}
				return elem.value;
			}
		}
		else
		{
			return originalVal.call(this, value);
		}
	};

})(jQuery);
