/*

	Use examples:
	$(function(){
		$('a.trigger').overlay(); // Initialize overlay
		$('#myOverlay').overlay('close'); // Close overlay
	});

	<a class="overlay" href="#myOverlay">Open inline overlay</a>
	<a class="overlay" href="overlay.html">Open AJAX overlay</a>
	
	<div id="myOverlay" class="overlay" style="display: none;">
		<h1>Test</h1>
		<p>Lorem ipsum dolor</p>
	</div>
	
*/

(function ($) {
					 
	// Set debug to true for console debuging
	var debug = true;
	
	/*
		Utility functions
	*/
	
	$.fn.isVisible = function() {
		return $(this).css("display") == "block";
	};
	$.fn.exists = function() {
		return $(this).length > 0;
	};
	$.log = function(message) {
		if (debug) {
			if(window.console) {
				 console.log(message);
			}
			else {
				 // alert(message);
			};
		};
	};
	
	/*
		Private functions
	*/
	
	function createOverlay(eTrigger) {
		$.log("Overlay: createOverlay");
		var el;
		var href = $(eTrigger).attr("href");
		$.log("Overlay: href = " + href);
		if (href.charAt(0) == '#')
			// Make an on-page element an overlay
			el = $(href);
		else {
			// Use a remote page for the overlay
			$.ajax({
				url: href,
				async: false,
				success: function(html){
					el = $("body").append(html).children(".overlay:last");
				}
			});
		}

		if (el) {
			var outerWrap = initOverlay(el);
			$(eTrigger).click(function() {
				$.log("Overlay: Click");
				openOverlay(outerWrap);
				/*
				e.dropShadow({opacity: .25});
				*/
				return false;
			});
		} else {
			$.log("Overlay: Invalid Reference");
		}
	};
	function initOverlay(e) {
		$.log("Overlay: initOverlay");
		var outerWrap = e.wrap("<div class='outerWrap' style='position: absolute; top: 0; left: 0; width: 100%; z-index: 100; display: none;'></div>").parent();
		var innerWrap = e.wrap("<div class='innerWrap'></div>").parent();
		var eClose = $("<a class='closeBtn' href='#'><span>[Close]</span></a>").click(function() {
			$.log("Overlay: Close");
			closeOverlay(outerWrap);
		});
		e.prepend(eClose);
		e.css("display", "block");
		return outerWrap;
	};
	function openOverlay(e) {
		$.log("Overlay: openOverlay");
		if (! $(e).isVisible()) {
			$.log("Overlay: Show");
			showBackground();
			$('html,body').animate({scrollTop: '0px'}, "normal", "easeOutQuart", function() {
				if (typeof document.body.style.maxHeight == "undefined") {
					// IE6, older browsers
					// Hide selects because of ie6 select z-index problem
					$("#page select").css("visibility", "hidden");
				};
				$(e).css("opacity", "0");
				$(e).css("display", "block");
				$(e).animate({opacity: '1'}, "normal", "easeOutQuart");
				//$(e).fadeIn();
			});
		};
		return e;
	};
	function closeOverlay(e) {
		$.log("Overlay: closeOverlay");
		if ($(e).isVisible()) {
			$.log("Overlay: Hide");
			//$(e).fadeOut();
			$(e).animate({opacity: '0'}, "normal", "easeOutQuart", function() { $(e).css("display", "none"); });
			hideBackground();
			if (typeof document.body.style.maxHeight == "undefined") {
				// IE6, older browsers
				$("#page select").css("visibility", "visible");
			};
		};
		return e;
	};
	function toggleOverlay() {
		$.log("Overlay: Enter toggleOverlay");
		if ($(this).isVisible()) {
			closeOverlay(this);
		} else {
			openOverlay(this);
		};
		return this;
	};
	function showBackground() {
		var e = $('#overlayBGLayer');
		
		if (!e.exists()) {
			$.log("Overlay: Create background element");
			e = $("<div id='overlayBGLayer' style='display: none;'></div>");
			$(document.body).append(e);
		};
		
		if (! e.isVisible()) {
			$.log("Overlay: Show background");
			var h =  document.body.offsetHeight;
			e.height(h);
			e.show();
		};
	};
	function hideBackground() {
		var e = $('#overlayBGLayer');
		if (e.isVisible()) {
			$.log("Overlay: Hide background");
			e.hide();
		};
	};
	function toggleBackground(e) {
		if (e.isVisible()) {
			hideBackground(e);
		} else {
			showBackground(e);
		};
	};

	/*
		Public constructor
	*/
	
	$.fn.overlay = function(settings) {
		$.log("Overlay: Constructor");
		
		if (settings == "close") {
			closeOverlay(this);
			return this;
		};
		
		$(this).each(function() {
			createOverlay(this);
		});
			
		var urlRef = self.document.location.hash;
		if (urlRef) {
			$.log("Overlay: Anchor Reference " + urlRef);
			var el = $(urlRef).parents(".outerWrap");
			if (el) {
				openOverlay(el);
			};
		};
		
		return this;
	};
}) (jQuery);

