;var PopupMessage = function() {
	// If the context is global, return a new object, if we don't already have a views object. (1 views only)
	if ( window == this ) {
		return window.___popupMessage ? window.___popupMessage : new PopupMessage();
	}
	
	window.___popupMessage = this;

	$(function() {
		$("<div id=\"dimmer\" title=\"Click to close\" style=\"cursor: pointer; position: absolute; left: 0; top: 0; width: 100%; background: #000; z-index:100; display:none;\"></div>")
			.appendTo('body')
			.click(function() {
				PopupMessage().hide();
			});
	});
};

PopupMessage.prototype = {
	settings: {
		emptyOnHide: false,
		width: 600,
		ifixpng: 'img',
		lightboxButton: "assets/images/buttons/close.png",
		addHelpers: false
	},
	
	set: function(settings) {
		$.extend(this.settings, settings);
	},
	
	lightbox: function(content, options) {
		options = options || {};
		var $$ = $('#lightbox'), self = this;
		if (!($$.length)) {
			$$ = '<div id="lightbox"><div id="lightboxInner">' +
				'<span id="lightboxCloseLink">' +
					'<img alt="sluiten" src="' + this.settings.lightboxButton + '" id="lightboxClose"/>' +
				'</span>';
			if (this.settings.addHelpers) $$ = $$ + '<span class="top">&nbsp;</span><span class="tl">&nbsp;</span><span class="tr">&nbsp;</span>';
			$$ = $$ + '<div id="lightboxContent"></div>';
			if (this.settings.addHelpers) $$ = $$ + '<span class="bottom">&nbsp;</span><span class="bl">&nbsp;</span><span class="br">&nbsp;</span></div></div>';
			$$ = $($$).css({textAlign: 'center', position: 'absolute', left: 0, display: 'none', width: '100%'}).appendTo('body');
			$('#lightboxClose', $$).css({cursor: 'pointer', zIndex: 1001}).click(function() { self.hide(); });
		}
		
		var css = {
			width: this.settings.width,
			margin: 'auto',
			textAlign: 'left',
			position: 'relative'
		};
		
		if ($.metadata) css.width = $(this).metadata().width || css.width;
		$('#lightboxInner', $$).css(css);
		
		if (this.settings.emptyOnHide) this.settings.emptyOnHide = '#lightboxContent';
		
		$$.find('#lightboxContent').html(content);
		this.show($$, false, options);
	},
	
	// helper function to show a message (html) inside a 'lightbox'
	showMessage: function(message, options) {
		options = options || {};
		var $$ = $('#myMessageBoxHelper');
		if (!($$.length)) {
			$$ = $('<div id="myMessageBoxHelper" style="position: absolute; width: 100%; display: none; text-align: center; left: 0;"><div id="myMessageBox" style="margin: auto; position: relative;"></div></div>').appendTo('body');
		};
		var d = {width: '', height: ''};
		if ($.metadata) {
			var data = $(message).metadata();
			d.width = data.width || d.width;
			d.height = data.height || d.height;
		}
		$$.find(':first-child').css(d).html(message);
		this.show('myMessageBoxHelper', options.onShow, options);
	},
	
	show: function(control, callback, options) {
		options = options || {};
		var self = this;
		$('embed, object, select').css({ 'visibility' : 'hidden'});
		var temp = typeof control == 'string' ? $('#' + control) : $(control);
		if (!temp.length) return;
		else this.control = temp;
		
		if (callback) options.onShow = callback;
		if ($('#dimmer').is(':hidden')) {
			$('#dimmer').css({opacity: '0.5', zIndex: 900}).animate({opacity: 'show'}, 200, function() {
				self._show(temp, options);
			});
		} else this._show(temp, options);
		return this;
	},
	
	_show: function(control, options) {
		var self = this;
		this._setHeight();
		if ($.ifixpng && this.settings.ifixpng) $(this.settings.ifixpng === true ? 'img' : this.settings.ifixpng, control).ifixpng();
		control.css({zIndex: 1000, position: 'absolute', opacity: 1}).animate({opacity: 'show'}, 200, function() {
			// Remove the opacity property in IE, as it messes with the overflow
			if ($.browser.msie) control.css('opacity', '');
			$(window).bind('resize.popupmessage scroll.popupmessage', window.___popupMessage._setHeight);
			$(document).bind('keyup.popupmessage', function(e) {
				var prevent = true;
				if (e.keyCode == 27) self.hide();
				else prevent = false;
				// If we don't do this, we stop the animated GIF as well
				if (prevent) e.preventDefault();
			});
			if ($.isFunction(options.onShow)) options.onShow.apply(control);
		});
		if ($.isFunction(options.onHide)) $$.one('hide.popupmessage', options.onHide);
	},
	
	hide: function(e) {
		$(window).add(document).unbind('.popupmessage');
		var $$ = $(this.control).stop().animate({opacity: 'hide'}).trigger('hide');
		
		if (this.settings.emptyOnHide) {
			if ($.browser.msie) $$.find('embed,object').remove();
			$$.find(this.settings.emptyOnHide.constructor != Boolean ? this.settings.emptyOnHide : ':first-child').empty();
		}
		
		$('#dimmer').animate({opacity: 'hide'}, 300, function() {
			$('embed, object, select').css({ 'visibility' : 'visible'});
		});
		return this;
	},
	
	_setHeight: function(e) {
		var control = $(window.___popupMessage.control);
		var $win = $(window);
		var scrolltop = $win.scrollTop();
		var location = $win.scrollTop() + ($win.height() / 2) - (control.height() / 2);
		if (location > scrolltop) {
			if (e) control.stop(true);
			control.animate({top: location}, 'fast', 'easeout');
		}
		else if (!e) control.animate({top: scrolltop + 25}, 'fast', 'easeout');
		$('#dimmer').height($(document).height());
	}
};