/* ------------------------------------------------------------------------
	Class: prettyPopin
	Use: Alternative to popups
	Author: Stephane Caron (http://www.no-margin-for-errors.com)
	Version: 1.0
------------------------------------------------------------------------- */

jQuery.fn.prettyPopin = function(settings) {
	settings = jQuery.extend({
		modal : false, /* true/false */
		width : false, /* true/false */
		height: false, /* true/false */
		opacity: 0.5, /* value from 0 to 1 */
		animationSpeed: 'fast' /* slow/medium/fast */
	}, settings);
	return this.each(function(){
		$(this).click(function(){
			buildoverlay();
			buildpopin();
			
			// Load the content
			$.get($(this).attr('href'),function(responseText){
				$('.prettyPopin .prettyContent .prettyContent-container').html(responseText);
				
				if(!settings.width){
					settings.width = $('.prettyPopin .prettyContent .prettyContent-container').width() + parseFloat($('.prettyPopin .prettyContent .prettyContent-container').css('padding-left')) + parseFloat($('.prettyPopin .prettyContent .prettyContent-container').css('padding-right'));
					$('.prettyPopin .prettyContent .prettyContent-container').width(settings.width);
				}else{
					$('.prettyPopin .prettyContent .prettyContent-container').width(settings.width);
				};
				
				if(!settings.height){
					settings.height = $('.prettyPopin .prettyContent .prettyContent-container').height() + parseFloat($('.prettyPopin .prettyContent .prettyContent-container').css('padding-top')) + parseFloat($('.prettyPopin .prettyContent .prettyContent-container').css('padding-bottom'));
					$('.prettyPopin .prettyContent .prettyContent-container').height(settings.height);
					
					settings.height = $('.prettyPopin .prettyContent .prettyContent-container').height() + parseFloat($('.prettyPopin .prettyContent .prettyContent-container').css('padding-bottom'));
					$('.prettyPopin .prettyContent .prettyContent-container').width('auto').height('auto');
				}else{
					$('.prettyPopin .prettyContent .prettyContent-container').height(settings.height);
					$('.prettyPopin .prettyContent .prettyContent-container').width('auto').height('auto');
				};
				
				displayPopin();
			});
			return false;
		});
		
		var displayPopin = function() {
			var scrollPos = getScroll();

			$('.prettyPopin').animate({
				'top': ($(window).height()/2) + scrollPos['scrollTop'] - (settings.height/2),
				'left': ($(window).width()/2) + scrollPos['scrollLeft'] - (settings.width/2),
				'width' : settings.width,
				'height' : settings.height
			},settings.animationSpeed, function(){
				displayContent();
			});
		};
		
		var buildpopin = function() {
			$('body').append('<div class="prettyPopin"><a href="#" id="b_close">Close</a><div class="prettyContent"><img src="images/prettyPopin/loader.gif" alt="Loading" class="loader" /><div class="prettyContent-container"></div></div></div>');
			
			var scrollPos = getScroll();
			
			// Show the popin
			$('.prettyPopin').width(45).height(45).css({
				'top': ($(window).height()/2) + scrollPos['scrollTop'],
				'left': ($(window).width()/2) + scrollPos['scrollLeft']
			}).hide().fadeIn(settings.animationSpeed);
			
			$('a#b_close').click(function(){ closeOverlay(); return false; });
		};
		
		var buildoverlay = function() {
			$('body').append('<div id="overlay"></div>');
			
			// Set the proper height
			$('#overlay').css('height',$(document).height());
			
			// Fade it in
			$('#overlay').css('opacity',0).fadeTo(settings.animationSpeed,settings.opacity);
			
			if(!settings.modal){
				$('#overlay').click(function(){
					closeOverlay();
				});
			};
		};
		
		var displayContent = function() {
			var scrollPos = getScroll();
			
			$c = $('.prettyPopin .prettyContent .prettyContent-container'); // The container
			$c.parent().find('.loader').hide();
			$c.parent().parent().find('#b_close').show();
			$c.fadeIn(function(){
				// Focus on the first form input if there's one
				$(this).find('input[type=text]:first').trigger('focus');

				// Submit the form in ajax
				$('form').bind('submit',function(){
					$theForm = $(this);
					// Fade out the current content
					$c.fadeOut(function(){
						$c.parent().find('.loader').show();
						
						// Submit the form
						$.post($theForm.attr('action'), $theForm.serialize(),function(responseText){
							// Replace the content
							$c.html(responseText);

							settings.width = $c.width() + parseFloat($c.css('padding-left')) + parseFloat($c.css('padding-right'));
							settings.height = $c.height() + parseFloat($c.css('padding-top')) + parseFloat($c.css('padding-bottom'));

							$('.prettyPopin').animate({
								'top': ($(window).height()/2) + scrollPos['scrollTop'] - (settings.height/2),
								'left': ($(window).width()/2) + scrollPos['scrollLeft'] - (settings.width/2),
								'width' : settings.width,
								'height' : settings.height
							}, settings.animationSpeed,function(){
								displayContent();
							});
						});
					});
					return false;
				});
			});
			$('a#b_cancel').click(function(){ closeOverlay(); });
		};
		
		var closeOverlay = function() {
			$('#overlay').fadeOut(settings.animationSpeed,function(){ $(this).remove(); });
			$('.prettyPopin').fadeOut(settings.animationSpeed,function(){ $(this).remove(); });
		};
		
		var getScroll = function() {
			scrollTop = window.pageYOffset || document.documentElement.scrollTop || 0;
			scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || 0;
			return {scrollTop:scrollTop,scrollLeft:scrollLeft};
		};
		
	});
};
