/* ------------------------------------------------------------------------
	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(){
		var currentLink =  $(this).attr('href');
		var thumbNav = 0;
		var changeMode = false;
		$(this).click(function(){
			buildoverlay();
			buildpopin();

			// Load the content
			$.get($(this).attr('href'),function(responseText){
				$('.prettyPopin .prettyContent .prettyContent-container').html(responseText);
				$('a#b_close').click(function(){ closeOverlay(); return false; });
				webMenu();
				var testGal = $('.imgGal .image-container');
				if(testGal.size() > 0) {
				    thumbNav = 1;
				    buildThumbNavigation();
				}
				buildDisplay();
			});

			return false;
		});

		var buildDisplay = function() {
			$('#overview').click(function() {
				buildMakro($(this).attr('href'));
				return false;
			});
			pagination();
			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'));
				el = $('.prettyPopin .prettyMisc');
				if(el.size() > 0) {
					settings.height += parseFloat(el.css('height'))+ parseFloat(el.css('padding-top')) + parseFloat(el.css('padding-bottom'));
				}
				$('.prettyPopin .prettyContent .prettyContent-container').height(settings.height);
				$('.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();
		};

		var buildMakro = function(link) {
			/*var overview = $('.prettyOverview:first');
			overview.fadeIn('fast', function() {
			$.get(link, {'type' : 900}, function(data) {
					overview.html(data);
					paginationMakro();
					buildThumbNavigation();
				});
			});*/
			changeMode = true;
			thumbNav = 1;
			rebuild(link);
		};

		var closeMakro = function(link) {
			if(link != null) {
				rebuild(link);
			}
		};

		var paginationMakro = function() {
			$('.prettyOverview .pagination a, .prettyOverview .prev a').each(function() {
				var elem = $(this);
				elem.click(function() {
					elem.unbind('click');
					$.get(elem.attr('href'), {type: 900}, function(data) {
						$('.prettyOverview').html(data);
						paginationMakro();
						buildThumbNavigation();
					});
					return false;
				});
			});
		};
		
		var buildThumbNavigation = function() {
			$('.imgGal .image-container a').each(function() {
				$(this).click(function() {
					closeMakro($(this).attr('href'));
					return false;
				});
			});	
		};

		var pagination = function() {
			$('.prettyContent-container .pagination a').each(function() {
				var elem = $(this);
				elem.click(function() {
					elem.unbind('click');
					rebuild(elem.attr('href'));
					return false;
				});
			});
		};

		var rebuild = function(link) {
			var scrollPos = getScroll();
			$c = $('.prettyPopin .prettyContent .prettyContent-container'); // The container
			var isWeb = $('.prettyWeb');
			var isSingleGal = $('.imgGal');
			isWeb = isWeb.size() > 0;
			isSingleGal = isSingleGal.size() > 0 && $('.image-container').size() < 1;
			if(isWeb) {
			    var celem = $c.find('.prettyWeb .project-view .img');
			    var ielem = celem.find('img');
			}
			else if(isSingleGal) {
			    var celem = $c.find('.imgGal');
			    var ielem = celem.find('img');
			}
			else {
			    var celem = $c.find('.imgGal');
			    var ielem = celem.find('.image-container');
			}
			closeMakro();
			ielem.fadeOut('fast', function() {
				celem.addClass('loading');
				if(!isWeb) {
				    ielem.before('<div id="dummy"></div>');
				    celem.find('#dummy').width(ielem.width() + parseFloat(ielem.css('padding-left')) + parseFloat(ielem.css('padding-right')));
				    celem.find('#dummy').height(ielem.height() + parseFloat(ielem.css('padding-top')) + parseFloat(ielem.css('padding-bottom')));
				}
				$.get(link, {type: 900}, function(data) {
					    found = $(data).find('.image-container');
					    if(found.size() > 0) {
						isSingleGal = false;
					    }
					    if(!isSingleGal && !isWeb && $(data).find('img').size() == 1) {
						isSingleGal = true;
					    }
					    if(isWeb) {
						celem.html($(data).find('.img').html());
						ielem = celem.find('img');
					    }
					    else if(isSingleGal){
						ielem.replaceWith($(data).find('img'));
						ielem = celem.find('img');
						celem.removeClass('no-indent');
					    }
					    else {
						ielem.replaceWith($(data).find('.image-container'));
						ielem = celem.find('.image-container');
						celem.addClass('no-indent');
					    }
					    ielem.hide();
					    if(isWeb) {
						celem.parent().find('.prettyMisc').html($(data).find('.prettyMisc').html());
					    }
					    else {
						celem.find('.prettyMisc').html($(data).find('.prettyMisc').html());
					    }
					if(thumbNav == 1) {
					    buildThumbNavigation();
					    thubNav = 0;
					}
					$('a#b_close').click(function(){ closeOverlay(); return false; });
					pagination();
					//settings.width = $c.width() + parseFloat($c.css('padding-left')) + parseFloat($c.css('padding-right'));
					settings.width = ielem.width() + parseFloat(ielem.css('padding-left')) + parseFloat(ielem.css('padding-right'));
					
					//settings.height = $c.height() + parseFloat($c.css('padding-top')) + parseFloat($c.css('padding-bottom'));
					settings.height = ielem.height() + parseFloat(ielem.css('padding-top')) + parseFloat(ielem.css('padding-bottom'));

					if(isWeb) {
					    settings.height = 343;
					    settings.height += $('.prettyMisc').height() + parseFloat($('.prettyMisc').css('padding-top')) +parseFloat($('.prettyMisc').css('padding-bottom'));
					    settings.height += parseFloat(celem.css('padding-top')) + parseFloat(celem.css('padding-bottom'));
					    settings.width += parseFloat(celem.css('padding-left')) + parseFloat(celem.css('padding-right'));
					}
					else if(isSingleGal) {
					    settings.height += 20;
					    settings.width += 20;
					}
					else {
					    settings.height += 15;
					    settings.width += 20;
					}
					el = $('.prettyPopin .prettyMisc');
					if(el.size() > 0 && !isWeb) {
						settings.height += parseFloat(el.css('height'))+ parseFloat(el.css('padding-top')) + parseFloat(el.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(){
						celem.removeClass('loading');
						if(!isWeb) {
						    celem.find('#dummy').remove();
						}
						ielem.fadeIn('fast');
						$('#overview').click(function() {
							buildMakro($(this).attr('href'));
							return false;
						});
					});
					changeMode = false;
				});
			});
		}
		
		var resizeOnly = function() {
		    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'));
		    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);
		};
		
		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"><div class="prettyMain loading"><div class="prettyContent"><div class="prettyOverview"></div><div class="prettyContent-container"></div></div></div></div>');

			$('.prettyOverview').click(function() {
				return false;
			});
			$('.prettyPopin').click(function() {
				closeMakro();
			});
			
			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);

		};
		
		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().parent().removeClass('loading');
			$c.parent().parent().find('.prettyMisc').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().parent().addClass('loading');
						
						// Submit the form
						$.post($theForm.attr('action'), $theForm.serialize(),function(responseText){
							// Replace the content
							$c.html(responseText);
							$('a#b_close').click(function(){ closeOverlay(); return false; });

							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'));
							el = $('.prettyPopin .prettyMisc');
							if(el.size() > 0) {
							    settings.height += parseFloat(el.css('height'))+ parseFloat(el.css('padding-top')) + parseFloat(el.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(); });
			settings.width = false;
			settings.height = false;
		};
		
		var getScroll = function() {
			scrollTop = window.pageYOffset || document.documentElement.scrollTop || 0;
			scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || 0;
			return {scrollTop:scrollTop,scrollLeft:scrollLeft};
		};
		
		var webMenu = function() {
		    var elem = $('.prettyWeb');
		    if(elem.size() == 0) {
			return false;
		    }
		    var view = $($('.prettyMenu li')[0]);
		    var info = $($('.prettyMenu li')[1]);
		    view.find('a:first').click(function() {
			$('.project-info').hide();
			$('.project-view').show();
			$(this).replaceWith('<span>'+$(this).text()+'</span>');
			info.find('span:first').replaceWith('<a href="#">'+info.find('span:first').text()+'</a>');
			view.addClass('clicked');
			info.removeClass('clicked');
			webMenu();
			resizeOnly();
			return false;
		    });
		    info.find('a:first').click(function() {
			$('.project-view').hide();
			$('.project-info').show();
			$(this).replaceWith('<span>'+$(this).text()+'</span>');
			view.find('span:first').replaceWith('<a href="#">'+view.find('span:first').text()+'</a>');
			info.addClass('clicked');
			view.removeClass('clicked');
			webMenu();
			resizeOnly();
			return false;
		    });
		    
		};
		
	});
};
