(function($) {
	$.simplewindow = function (data, id) {
		if (id == undefined) {
			ts = new Date();
			id = 'simplewindow' + ts.getTime();
		}
		$.simplewindow.settings.id = id;

		$.simplewindow.loading();

		if (data.ajax) {
			fillSimplewindowFromAjax(data.ajax);
		} else if (data.div) {
			fillSimplewindowFromHref(data.div);
		} else if (data.iframe) {
			fillSimplewindowFromIframe(data.iframe, data.iframeWidth || 320, data.iframeHeight || 200);
		} else if ($.isFunction(data)) {
			data.call($);
		}else {
			$.simplewindow.reveal(data);
		}
	}

	$.extend($.simplewindow, {
		settings: {
			useFlashFix: false,
			flashObject: null,
			opacity: 0.4,
			overlay: true,
			loadingImage: '/style/default/1024/img/modules/loading.gif',
			closeImage: '/style/default/1024/img/modules/close.png',
			simplewindowHtml: '<div class="simplewindow" style="display:none;">'
							+ '<div class="simplewindow_popup">'
							+ '<div class="simplewindow_content"></div>'
							+ '<a href="#" class="simplewindow_close"><img src="/style/default/1024/img/modules/close.png" width="25" height="25" alt="" class="simplewindow_close_image" /></a>'
							+ '</div>'
							+ '</div>'
		},

		loading: function () {
			init();

			var maxZ = Math.max.apply(null, $.map($('.simplewindow'), function(e, n) {
				if ($(e).attr('id') != $.simplewindow.settings.id) {
					return parseInt($(e).css('z-index')) || 100;
				}
			}));
			$('#' + $.simplewindow.settings.id).css('z-index', Math.max(100, maxZ + 3));

			if ($('#' + $.simplewindow.settings.id + ' .simplewindow_loading').length == 1) return true;
			showOverlay();

			$('#' + $.simplewindow.settings.id + ' .simplewindow_content').html('<div class="simplewindow_loading"><img src="' + $.simplewindow.settings.loadingImage + '" alt="" /></div>');

			$('#' + $.simplewindow.settings.id).css({
				top: Math.max(0, $(window).height() / 2 - 109),
				left: Math.max(0, $(window).width() / 2 - 109)
			}).show();
			if ($.simplewindow.settings.useFlashFix) {
				$('#' + $.simplewindow.settings.id + '_foundation')
					.width($('#' + $.simplewindow.settings.id).width())
					.height($('#' + $.simplewindow.settings.id).height())
					.css('z-index', (parseInt($('#' + $.simplewindow.settings.id).css('z-index')) || 100) - 1)
					.css('display', 'block')
					.css('left', $('#' + $.simplewindow.settings.id).css('left'))
					.css('top',  $('#' + $.simplewindow.settings.id).css('top'))
			}

			$(document).bind('keydown.simplewindow', function (e) {
				if (e.keyCode == 27) $.simplewindow.close($.simplewindow.settings.id);
				return true;
			});
			$(document).trigger('loading.simplewindow');
		},

		reveal: function (data) {
			$(document).trigger('beforeReveal.simplewindow');
			$('#' + $.simplewindow.settings.id + ' .simplewindow_content').html(data);

			var maxZ = Math.max.apply(null, $.map($('.simplewindow'), function(e, n) {
				if ($(e).attr('id') != $.simplewindow.settings.id) {
					return parseInt($(e).css('z-index')) || 100;
				}
			}));
			var zi = Math.max(100, maxZ + 3);
			$('#' + $.simplewindow.settings.id).css('z-index', zi);

			$('#' + $.simplewindow.settings.id).css('top', Math.max(0, $(window).height() / 2 - ($('#' + $.simplewindow.settings.id + ' .simplewindow_popup').height() / 2)));
			$('#' + $.simplewindow.settings.id).css('left', Math.max(0, $(window).width() / 2 - ($('#' + $.simplewindow.settings.id + ' .simplewindow_popup').width() / 2)));
			if ($.simplewindow.settings.useFlashFix) {
				$('#' + $.simplewindow.settings.id + '_foundation')
					.width($('#' + $.simplewindow.settings.id).width())
					.height($('#' + $.simplewindow.settings.id).height())
					.css('z-index', (parseInt($('#' + $.simplewindow.settings.id).css('z-index')) || 100) - 1)
					.css('display', 'block')
					.css('left', $('#' + $.simplewindow.settings.id).css('left'))
					.css('top',  $('#' + $.simplewindow.settings.id).css('top'))
			}
			$(document).trigger('reveal.simplewindow').trigger('afterReveal.simplewindow');
		},

		close: function (id) {
			$(document).trigger('close.simplewindow', [id]);
			return false;
		}
	});

	$.fn.simplewindow = function (settings) {
		//if ($(this).length == 0) return;

		if (settings == undefined) settings = {};
		if (settings.id == undefined) {
			ts = new Date();
			settings.id = 'simplewindow' + ts.getTime();
		}

		init(settings);

		var wndId = settings.id;

		function clickHandler() {
			$.simplewindow.settings.id = wndId;
			$.simplewindow.loading();

			fillSimplewindowFromHref($(this).attr('href'), $(this).attr('rev'));
			return false;
		}

		return this.click(clickHandler);
	}

	//called one time to setup simplewindow on this page
	function init(settings) {
		if ($('#' + $.simplewindow.settings.id + '.simplewindow').length > 0) return true;

		$(document).trigger('init.simplewindow');

		if (settings) $.extend($.simplewindow.settings, settings);
		$('body').append($($.simplewindow.settings.simplewindowHtml).attr('id', $.simplewindow.settings.id));

		var maxZ = Math.max.apply(null, $.map($('.simplewindow'), function(e, n) {
			if ($(e).attr('id') != $.simplewindow.settings.id) {
				return parseInt($(e).css('z-index')) || 100;
			}
		}));
		$('#' + $.simplewindow.settings.id).css('z-index', Math.max(100, maxZ + 3));

		if ($.simplewindow.settings.useFlashFix) {
			$('body').append('<iframe id="' + $.simplewindow.settings.id + '_foundation" class="simplewindow_foundation" src="javascript:false;document.write(\'\')" scrolling="no" frameborder="0"></iframe>');
		}

		//preload images
		var preload = [new Image(), new Image()];
		preload[0].src = $.simplewindow.settings.closeImage;
		preload[1].src = $.simplewindow.settings.loadingImage;
		$('#simplewindow').find('.b:first, .bl').each(function () {
			preload.push(new Image());
			preload.slice(-1).src = $(this).css('background-image').replace(/url\((.+)\)/, '$1');
		});

		//set close button event and image
		$('#' + $.simplewindow.settings.id + ' .simplewindow_close').click(function (e) {
			e.preventDefault();
			$.simplewindow.close($(this).parents('.simplewindow').attr('id'));
		});
		$('#' + $.simplewindow.settings.id + ' .simplewindow_close_image').attr('src', $.simplewindow.settings.closeImage);
	}

	//Figures out what you want to display and displays it
	//formats are:
	//  div: #id
	//  ajax: anything else
	function fillSimplewindowFromHref(href, rev) {
		if (href.match(/#/)) {
			//div
			var url = window.location.href.split('#')[0];
			var target = href.replace(url, '');
			if (target == '#') return;
			$.simplewindow.reveal($(target).html());
		} else if (rev && (rev.split('|')[0] == 'iframe')) {
			//iframe
			fillSimplewindowFromIframe(href, rev.split('|')[1], rev.split('|')[2])
		} else {
			//ajax
			fillSimplewindowFromAjax(href);
		}
	}

	function fillSimplewindowFromAjax(href) {
		$.get(href, function (data) {
			$.simplewindow.reveal(data)
		});
	}

	function fillSimplewindowFromIframe(href, width, height) {
		$.simplewindow.reveal('<iframe id="' + $.simplewindow.settings.id + '_window" scrolling="no" marginwidth="0" width="' + width + '" height="' + height + '" frameborder="0" src="' + href + '" marginheight="0"></iframe>');
	}

	function skipOverlay() {
		return (($.simplewindow.settings.overlay == false) || ($.simplewindow.settings.opacity === null));
	}

	function showOverlay() {
		if (skipOverlay()) return;

		if ($('#' + $.simplewindow.settings.id + '_overlay').length == 0) $('body').append('<div id="' + $.simplewindow.settings.id + '_overlay" class="simplewindow_overlay simplewindow_hide"></div>');

		var maxZ = Math.max.apply(null, $.map($('.simplewindow'), function(e, n) {
			return parseInt($(e).css('z-index')) || 100;
		}));

		$('#' + $.simplewindow.settings.id + '_overlay').attr('rel', $.simplewindow.settings.id).hide().addClass('simplewindow_overlayBG')
			.css('opacity', $.simplewindow.settings.opacity)
			.css('z-index', maxZ - 2)
			.click(function () {
				$(document).trigger('close.simplewindow', [$(this).attr('rel')]);
				$(this).remove();
			})
			.fadeIn(200);

		if ($.simplewindow.settings.useFlashFix && $.simplewindow.settings.flashObject && $.simplewindow.settings.flashObject.showOverlay) $.simplewindow.settings.flashObject.showOverlay($.simplewindow.settings.opacity, 200);

		return false;
	}

	function hideOverlay(id) {
		if (skipOverlay()) return;

		if (id == undefined) {
			$('.simplewindow_overlay').fadeOut(200, function () {
				$('.simplewindow_overlay').removeClass('simplewindow_overlayBG');
				$('.simplewindow_overlay').addClass('simplewindow_hide');
				$('.simplewindow_overlay').remove();
			});
		} else {
			$('#' + id + '_overlay').fadeOut(200, function () {
				$('#' + id + '_overlay').removeClass('simplewindow_overlayBG');
				$('#' + id + '_overlay').addClass('simplewindow_hide');
				$('#' + id + '_overlay').remove();
			});
		}

		if ($.simplewindow.settings.useFlashFix && $.simplewindow.settings.flashObject && $.simplewindow.settings.flashObject.hideOverlay) $.simplewindow.settings.flashObject.hideOverlay(200);

		return false;
	}

	$(document).bind('close.simplewindow', function (e, id) {
		$(document).unbind('keydown.simplewindow');
		if (id == undefined) {
			if ($.simplewindow.settings.useFlashFix) {
				$('.simplewindow').css('display', 'none');
				$('.simplewindow_foundation').css('display', 'none');
				$('.simplewindow .simplewindow_content').removeClass().addClass('simplewindow_content');
				$('.simplewindow .simplewindow_content').empty();
				$(document).trigger('afterClose.simplewindow');
			} else {
				$('.simplewindow').fadeOut(function () {
					$('.simplewindow .simplewindow_content').removeClass().addClass('simplewindow_content');
					$('.simplewindow .simplewindow_content').empty();
					$(document).trigger('afterClose.simplewindow');
				});
			}
		} else {
			if ($.simplewindow.settings.useFlashFix) {
				$('#' + id).css('display', 'none');
				$('#' + id + '_foundation').css('display', 'none');
				$('#' + id + ' .simplewindow_content').removeClass().addClass('simplewindow_content');
				$('#' + id + ' .simplewindow_loading').remove();
				$('#' + id + ' .simplewindow_content').empty();
				$(document).trigger('afterClose.simplewindow');
			} else {
				$('#' + id).fadeOut(function () {
					$('#' + id + ' .simplewindow_content').removeClass().addClass('simplewindow_content');
					$('#' + id + ' .simplewindow_loading').remove();
					$('#' + id + ' .simplewindow_content').empty();
					$(document).trigger('afterClose.simplewindow');
				});
			}
		}
		hideOverlay(id);
	});
})(jQuery);
