
(function($){
	
	var opts = {
		jDialog: 'true',
		jTooltips: 'true'
	};
	
	var methods = {
		init: function( options ){
			opts = $.extend( opts, options );
			if (this.selector){
				return methods.validate(this.selector);
			}
		},
		validate: function(form){
			var valid = true;
			$(form+" .required").each(function(){
				if ($(this).val() == ''){
					$(this).addClass('form-error');
					valid = false;
				} else {
					$(this).removeClass('form-error');
				}
			});
			$(form+" .valid_url").each(function(){
				if ( $(this).val() !== '' ){
					var url = urlValidator($(this).val());
					if (url == false){
						$(this).addClass('form-error-url');
						valid = false;
					}
				} else {
					$(this).removeClass('form-error-url');
				}
			});
			$(form+" .required_url").each(function(){
				var url = urlValidator($(this).val());
				if (url == false){
					$(this).addClass('form-error-url');
					valid = false;
				} else {
					$(this).removeClass('form-error-url');
				}
			});
			$(form+" .required_email").each(function(){
				var email = emailValidator($(this).val());
				if (email == false){
					$(this).addClass('form-error-email');
					valid = false;
				} else {
					$(this).removeClass('form-error-email');
				}
			});
			$(form+" .required_num").each(function(){
				var num = numberValidator($(this).val());
				if (num == false){
					$(this).addClass('form-error-number');
					valid = false;
				} else {
					$(this).removeClass('form-error-number');
				}
			});
			$(form+" .required_radio").each(function(){
				var field = $(this).attr("name");
				var val = $('input[name='+field+']:checked').val();
				if (!val.length){
					valid = false;
				}
			});
			$(form+" .password").each(function(){
				if ( $(form+" .password").val() !== $(form+" .passwordc").val() ){
					$(form+" .passwordc").addClass('form-error-match');
					valid = false;
				} else {
					$(form+" .passwordc").removeClass('form-error-match');
				}
			});
			if(valid != true){
				var msg = "One or more required fields are invalid";
				if (opts.jDialog == 'true'){ $.jDialog({html: msg,modal:true}); } else { alert(msg); }
				$(form+" .required").unbind();
				if (opts.jTooltips == 'true'){
					$(".form-error").jToolTip({html:'This field is required',icon:'error'});
					$(".form-error-email").jToolTip({html:'Please enter a valid email',icon:'error'});
					$(".form-error-number").jToolTip({html:'This field should contain a numeric value only',icon:'error'});
					$(".form-error-match").jToolTip({html:'The passwords entered do not match',icon:'error'});
					$(".form-error-url").jToolTip({html:'Please enter a valid URL beginning with http://',icon:'error'});
				}
				valid = false;
			}
			return valid;
		}
		
	};
	
	emailValidator = function(str){
	    var patterns = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
	    return patterns.test(str);
	}
	numberValidator = function(n){
		var patterns = /^\s*\d+\s*$/;
		return String(n).search(patterns) != -1;
	}
	urlValidator = function(s){
		var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
		return regexp.test(s);
	}
	
	$.fn.proFormValidator = function(method){
		if ( methods[method] ){ 
			return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 )); 
		} else if ( typeof method === 'object' || !method ){ 
			return methods.init.apply( this, arguments ); 
		} else { 
			$.error( 'Method ' +  method + ' does not exist' ); 
		} 
	};
	
})(jQuery);


//jWindow Plugins
(function($){

	$.fn.jWindow = function(options){
		return $.jWindow.impl.init(this,options);
	};
	$.jWindow = function(options){
		return $.jWindow.impl.init('',options);
	};
	$.jWindow.close = function(){
		return $.jWindow.impl.close();
	};
	$.jWindow.defaults = {
		modal: true,
		url: null,
		jsonp: null,
		height: 300,
		width: 400,
		ie: null,
		id: 'jWindow',
		bg: "#ccc",
		title: "",
		buttonAlign: 'center',
		buttons: {},
		onClose: function(){},
		html: 'Unable to Load Content',
		loadingImage: 'http://lacstorage.leadsandcontacts.com/gfx/modal/loading.gif'
	};

	$.jWindow.impl = {
		o: null,
		d: {},
		init: function(data,options){
			var s = this;

			// Don't Allow second instance
			if (s.d.container) {
				return false;
			}

			// Reset Defaults and Merge with options
			s.o = $.extend({},$.jWindow.defaults,options);

			if (data.selector){
				s.o.height = $(data).height();
				s.o.width = $(data).width();
				s.d.preserve = true;
				s.d.parent_id = $(data).attr('id');
				s.o.html = $(data).html();
			}

			// Create the Modal Window
			s.create();
		},
		create: function(){
			var s = this;

			w = s.getWindowDimensions();

			s.d.overlay = $('<div></div>')
				.attr('id','jwin-modal-overlay')
				.css({
					display: 'none',
					height: w[0],
					width: w[1],
					left: 0,
					top: 0
				}).appendTo('body');

			var viewportHeight = window.innerHeight ? window.innerHeight : $(window).height();
			if (s.o.height > viewportHeight){ s.o.height = viewportHeight - 40; }

			// Content H & W = container - padding - borders
			var contentHeight = s.o.height - 34;
			var contentWidth = s.o.width - 34;
			if (s.o.title){ contentHeight = contentHeight - 25; }
			if (s.o.buttons.length) { contentHeight = contentHeight - 40; }

			s.d.container = $('<div><a class="close-icon" onclick="jQuery.jWindow.close();" title="Close"/></div>')
				.attr('id',s.o.id)
				.addClass('round')
				.addClass('shadow')
				.css({
					display: 'none',
					width: s.o.width,
					height: s.o.height,
					'margin-top': -s.o.height/2,
					'margin-left': -s.o.width/2,
					padding: 15,
					background: s.o.bg
				}).appendTo('body');

			if (s.o.title){
				s.d.title = $('<div>'+s.o.title+'</div>')
					.addClass('jwin-title')
					.css({
						height: 25
					}).appendTo(s.d.container);
			}
	
			s.d.content = $('<div></div>')
				.addClass('jwin-content')
				.css({
					margin: 0,
					padding: 15,
					width: contentWidth,
					height: contentHeight,
					'overflow-y': 'auto',
					'overflow-x': 'hidden'
				}).appendTo(s.d.container);
			
			if (s.o.buttons.length){
				s.d.buttons = $('<div></div>')
					.addClass('jwin-button-box')
					.css({
						margin: '10px 0 0',
						'text-align': s.o.buttonAlign
				}).appendTo(s.d.container);
				
				$.each(s.o.buttons,function(key,value){
					var cs = "btn-round btn-shadow";
					if (value.text == "Cancel"){ cs += " cancel"; } 
					var btn = $('<button class="'+cs+'" onclick="'+value.handler+'">'+value.text+'</button>');
					btn.appendTo(s.d.buttons);
				});
			}

			$("#"+s.o.id+" .close-icon").click(function(){
				$.jWindow.close();
			});

			if (s.o.modal == true){ s.d.overlay.show(); }

			if (s.o.jsonp != null){
				s.showLoadingIndicator('jsonp');
			} else if (s.o.url != null){
				s.showLoadingIndicator('ajax');
			} else {
				s.d.content.html(s.o.html);
				s.d.container.show();
			}
		},
		showLoadingIndicator: function(type){
			var s = this;
			var top = $("#"+s.o.id).height() /2 - 20;
			var left = $("#"+s.o.id).width() /2 - 30;
			s.d.loadingIndicator = $('<div><img src="'+s.o.loadingImage+'" title="Loading"/> Loading....</div>')
				.addClass('jwin-loading-box')
				.css({
					top: top,
					left: left
				}).appendTo(s.d.content);
			s.d.container.show();
			if(type == 'jsonp'){
				s.getJsonp();
			} else if (type == 'ajax'){
				s.getAjax();
			}
		},
		getJsonp: function(){
			var s = this;
			$.ajax({
				dataType: 'jsonp',
				url: s.o.jsonp,
				success: function(data) {
					s.o.html = data;
					s.d.loadingIndicator.remove();
					s.d.content.html(data);
				}
			});
		},
		getAjax: function(){
			var s = this;
			$.ajax({
				url: s.o.url,
				success: function(data) {
					s.d.html = data;
					s.d.loadingIndicator.remove();
					s.d.content.html(data);
				}
			});
		},
		getWindowDimensions: function(){
			var h = $(document).height();
			var w = $(window).width();
			return [h,w];
		},
		setLoadingPosition: function(){
			var s = this;
			if (s.o.width > 0){
				var loadingLeft = (s.o.width / 2);
				s.d.loadingIndicator.css({"left":loadingLeft});
			} 
			if (s.o.height > 0){
				var loadingTop = (s.o.height / 2);
				s.d.loadingIndicator.css({"top":loadingTop});
			}
		},
		close: function(){
			var s = this;
			
			// Window Doesn't Exist
			if (!s.d.container) {
				return false;
			}
			
			s.d.overlay.remove();
			if(s.d.preserve == true){
				s.d.container.hide('fast',function(){
					$("#"+s.d.parent_id).html($(".jwin-content").html());
					$(this).remove();
				});
			} else {
				s.d.container.hide('fast',function(){
					$(this).remove();
				});
			}
			
			// Reset the dialog object
			s.d = {};
			
			// Execute call back function and reset
			s.o.onClose.call(this);
			s.o.onClose = function(){};
		}
	};
})(jQuery);

(function($){
	$.jDialog = function(options){
		return $.jDialog.impl.init(options);
	};
	$.jDialog.defaults = {
		modal: false,
		height: 75,
		width: 400,
		ie: null,
		id: 'jDialog',
		bg: "#fff",
		type: 'msg',
		title: 'Confirm',
		onClose: function(){},
		onCancel: function(){},
		html: ''
	};

	$.jDialog.impl = {
		o: null,
		d: {},
		init: function(options){
			var s = this;

			// Don't Allow second instance
			if (s.d.container) {
				return false;
			}

			// Reset Defaults and Merge with options
			s.o = $.extend({},$.jDialog.defaults,options);
			
			// Create the Modal Window
			s.create();
		},
		create: function(){
			var s = this;

			w = s.getWindowDimensions();

			s.d.overlay = $('<div></div>')
				.attr('id','jdialog-modal-overlay')
				.css({
					display: 'none',
					height: w[0],
					width: w[1],
					left: 0,
					top: 0
				}).appendTo('body');

			s.o.top = $(window).height()/2 - s.o.height /2 - 30;
			s.o.left = $(window).width()/2 - s.o.width /2 - 50;

			s.d.container = $('<div></div>')
				.attr('id',s.o.id)
				.css({
					display: 'none',
					top: s.o.top,
					left: s.o.left
				}).appendTo('body');
			
			s.d.title = $('<div>'+s.o.title+'</div>')
				.addClass('jdialog-title')
				.appendTo(s.d.container);

			s.d.content = $('<div></div>')
				.addClass('jdialog-content')
				.css({
					width: s.o.width,
					height: s.o.height,
					background: s.o.bg,
					overflow: 'auto'
				}).appendTo(s.d.container);
			
			s.d.messagbox = $('<div></div>')
				.addClass('jdialog-message-box')
				.appendTo(s.d.content);
						
			s.d.messagbox.html(s.o.html);
			
			s.d.buttonbox = $('<div></div>')
				.addClass('jdialog-button-box')
				.appendTo(s.d.content);

			if (s.o.type == 'msg'){
				s.d.buttuns = $('<a href="#" id="jdialog-ok-btn" class="jdialog-btn"><span class="btn-icon-ok">OK</span></a>')
					.appendTo(s.d.buttonbox);
				$("#"+s.o.id+" #jdialog-ok-btn").click(function(){
					$.jDialog.impl.close("ok");
					return false;
				});
			} else if (s.o.type = 'confirm'){
				s.d.buttuns = $('<a href="#" id="jdialog-cancel-btn" class="jdialog-btn"><span class="btn-icon-cancel">CANCEL</span></a><a href="#" id="jdialog-ok-btn" class="jdialog-btn"><span class="btn-icon-ok">OK</span></a>')
					.appendTo(s.d.buttonbox);
				$("#"+s.o.id+" #jdialog-ok-btn").click(function(){
					$.jDialog.impl.close("ok");
					return false;
				});
				$("#"+s.o.id+" #jdialog-cancel-btn").click(function(){
					$.jDialog.impl.close("cancel");
					return false;
				});
			}

			if (s.o.modal == true){ s.d.overlay.show(); }
			s.d.container.show();
		},
		getWindowDimensions: function(){
			var h = $(document).height();
			var w = $(window).width();
			return [h,w];
		},
		close: function(button){
			var s = this;
			
			// Window Doesn't Exist
			if (!s.d.container) {
				return false;
			}
			
			s.d.overlay.remove();
			if(s.d.preserve == true){
				s.d.container.hide('fast',function(){
					$("#"+s.d.parent_id).html($(".jdialog-content").html());
					$(this).remove();
				});
			} else {
				s.d.container.hide('fast',function(){
					$(this).remove();
				});
			}
			
			// reset the dialog object
			s.d = {};
			
			// Execute call back functions and reset
			if (button == "ok"){
				s.o.onClose.call(this);
			} else if (button == "cancel"){
				s.o.onCancel.call(this);
			}
			
			s.o.onClose = function(){};
			s.o.onConfirm = function(){};
		}
	};
})(jQuery);

(function($){
	$.fn.jToolTip = function(options){
		return $.jToolTip.impl.init(this,options);
	};
	$.jToolTip = function(options){
		return $.jToolTip.impl.init('',options);
	};
	$.jToolTip.defaults = {
		cssClass: 'jtooltip',
		icon: '',
		html: '',
		zindex: '19000'
	};

	$.jToolTip.impl = {
		o: null,
		init: function(data,options){
			var s = this;
			$(data).each(function(){
				
				// Reset Defaults and Merge with options
				s.o = $.extend({},$.jToolTip.defaults,options);

				// Create Main Container and Hide It
				var container = $('<div></div>')
					.addClass(s.o.cssClass)
					.css({
						'position': 'absolute',
						'left': '-9999px',
						'top': '200px',
						'border': '3px solid #868686',
						'padding': '5px',
						'background': '#efefef',
						'max-width': '275px',
						'z-index': s.o.zindex						
					})
					.appendTo('body');
				
				if (s.o.html == '' && $(this).attr('title') != 'undefined'){
					var tip = $(this).attr('title');
				} else {
					var tip = s.o.html;
				}
				
				if (s.o.icon == 'error'){
					var tip = '<div class="jtooltip-icon-error"/>'+tip;
				}
				
				$(this).removeAttr('title');
				
				var content = $('<div class="jtooltip-content">'+tip+'</div>')
					.appendTo(container);
				

				$(this).mouseover(function(){
					container.css({display:"none"}).fadeIn(400);
				}).mousemove(function(kmouse){
						var border_top = $(window).scrollTop(); 
						var border_right = $(window).width();
						var left_pos;
						var top_pos;
						var offset = 20;
						if(border_right - (offset *2) >= container.width() + kmouse.pageX){
							left_pos = kmouse.pageX+offset;
						} else{
							left_pos = border_right-container.width()-offset;
						}
						if(border_top + (offset *2)>= kmouse.pageY - container.height()){
							top_pos = border_top +offset;
						} else{
							top_pos = kmouse.pageY-container.height()-offset;
						}
						if (top_pos < 40){ top_pos = top_pos + 40; }
						container.css({left:left_pos, top:top_pos});
				}).mouseout(function(){
						container.css({left:"-9999px"});				  
				});
				
			});
		}
	};
})(jQuery);

(function($){
	$.fn.jMask = function(options){
		return $.jMask.impl.init(this,options);
	};
	$.jMask = function(options){
		return $.jMask.impl.init('',options);
	};
	$.jMask.close = function(){
		return $.jMask.impl.close();
	};
	$.jMask.defaults = {
		bg: "#F1F4F9",
		onClose: function(){},
		img: 'http://lacstorage.leadsandcontacts.com/gfx/saving.gif',
		msg: ''
	};

	$.jMask.impl = {
		o: null,
		d: {},
		init: function(data,options){
			var s = this;

			// Reset Defaults and Merge with options
			s.o = $.extend({},$.jMask.defaults,options);
			
			s.o.target = data.selector;
			
			// Create the Modal Window
			s.create();
		},
		create: function(){
			var s = this;
			
			if (s.d.overlay) {
				return false;
			}
			
			$(s.o.target).addClass('jmask-relative');

			s.d.overlay = $('<div></div>')
				.attr('id','jmask-overlay')
				.css({
					position: 'fixed',
					height: '100%',
					width: '100%',
					background: s.o.bg,
					opacity: .8,
					left: 0,
					top: 0
				}).appendTo(s.o.target);
			
			s.d.loading = $('<div></div>')
				.attr('id','jmask-loading')
				.css({
					position: 'absolute',
					left: '50%',
					top: '50%',
					background: '#D6E2F2',
					border: '2px solid #99BBE8',
					padding: '5px',
					width: 145,
					height: 29
				}).appendTo(s.o.target);
			
			s.d.loadingMsg = $('<div><img src="'+s.o.img+'" class="jmask-loadimg" /><span class="jmask-loadmsg">'+s.o.msg+'</span></div>')
				.css({
					padding: '5px',
					border: '1px solid #99BBE8',
					background: '#F1F4F9'
				}).appendTo(s.d.loading);

		},
		close: function(){
			var s = this;
			
			if (s.d.overlay){
				s.d.overlay.remove();	
			}
			if (s.d.loading){
				s.d.loading.remove();
			}
			
			$(s.o.target).removeClass('jmask-relative');
			
			// Reset the dialog object
			s.d = {};
			
			// Execute call back function and reset
			s.o.onClose.call(this);
			s.o.onClose = function(){};
		}
	};
})(jQuery);

/* ------------------------------------------------------------------------
Class: prettyPhoto
Use: Lightbox clone for jQuery
Author: Stephane Caron (http://www.no-margin-for-errors.com)
Version: 3.0.1
------------------------------------------------------------------------- */

(function($) {
$.prettyPhoto = {version: '3.0'};

$.fn.prettyPhoto = function(pp_settings) {
	pp_settings = jQuery.extend({
		animation_speed: 'fast', /* fast/slow/normal */
		slideshow: false, /* false OR interval time in ms */
		autoplay_slideshow: false, /* true/false */
		opacity: 0.80, /* Value between 0 and 1 */
		show_title: true, /* true/false */
		allow_resize: true, /* Resize the photos bigger than viewport. true/false */
		default_width: 500,
		default_height: 344,
		counter_separator_label: '/', /* The separator for the gallery counter 1 "of" 2 */
		theme: 'facebook', /* light_rounded / dark_rounded / light_square / dark_square / facebook */
		hideflash: false, /* Hides all the flash object on a page, set to TRUE if flash appears over prettyPhoto */
		wmode: 'opaque', /* Set the flash wmode attribute */
		autoplay: true, /* Automatically start videos: True/False */
		modal: false, /* If set to true, only the close button will close the window */
		overlay_gallery: true, /* If set to true, a gallery will overlay the fullscreen image on mouse over */
		keyboard_shortcuts: true, /* Set to false if you open forms inside prettyPhoto */
		changepicturecallback: function(){}, /* Called everytime an item is shown/changed */
		callback: function(){}, /* Called when prettyPhoto is closed */
		markup: '<div class="pp_pic_holder"> \
					<div class="ppt">&nbsp;</div> \
					<div class="pp_top"> \
						<div class="pp_left"></div> \
						<div class="pp_middle"></div> \
						<div class="pp_right"></div> \
					</div> \
					<div class="pp_content_container"> \
						<div class="pp_left"> \
						<div class="pp_right"> \
							<div class="pp_content"> \
								<div class="pp_loaderIcon"></div> \
								<div class="pp_fade"> \
									<a href="#" class="pp_expand" title="Expand the image">Expand</a> \
									<div class="pp_hoverContainer"> \
										<a class="pp_next" href="#">next</a> \
										<a class="pp_previous" href="#">previous</a> \
									</div> \
									<div id="pp_full_res"></div> \
									<div class="pp_details clearfix"> \
										<p class="pp_description"></p> \
										<a class="pp_close" href="#">Close</a> \
										<div class="pp_nav"> \
											<a href="#" class="pp_arrow_previous">Previous</a> \
											<p class="currentTextHolder">0/0</p> \
											<a href="#" class="pp_arrow_next">Next</a> \
										</div> \
									</div> \
								</div> \
							</div> \
						</div> \
						</div> \
					</div> \
					<div class="pp_bottom"> \
						<div class="pp_left"></div> \
						<div class="pp_middle"></div> \
						<div class="pp_right"></div> \
					</div> \
				</div> \
				<div class="pp_overlay"></div>',
		gallery_markup: '<div class="pp_gallery"> \
							<a href="#" class="pp_arrow_previous">Previous</a> \
							<ul> \
								{gallery} \
							</ul> \
							<a href="#" class="pp_arrow_next">Next</a> \
						</div>',
		image_markup: '<img id="fullResImage" src="" />',
		flash_markup: '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="{width}" height="{height}"><param name="wmode" value="{wmode}" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="{path}" /><embed src="{path}" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="{width}" height="{height}" wmode="{wmode}"></embed></object>',
		quicktime_markup: '<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab" height="{height}" width="{width}"><param name="src" value="{path}"><param name="autoplay" value="{autoplay}"><param name="type" value="video/quicktime"><embed src="{path}" height="{height}" width="{width}" autoplay="{autoplay}" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/"></embed></object>',
		iframe_markup: '<iframe src ="{path}" width="{width}" height="{height}" frameborder="no"></iframe>',
		inline_markup: '<div class="pp_inline clearfix">{content}</div>',
		custom_markup: ''
	}, pp_settings);
	
	// Global variables accessible only by prettyPhoto
	var matchedObjects = this, percentBased = false, correctSizes, pp_open,
	
	// prettyPhoto container specific
	pp_contentHeight, pp_contentWidth, pp_containerHeight, pp_containerWidth,
	
	// Window size
	windowHeight = $(window).height(), windowWidth = $(window).width(),

	// Global elements
	pp_slideshow;
	
	doresize = true, scroll_pos = _get_scroll();

	// Window/Keyboard events
	$(window).unbind('resize').resize(function(){ _center_overlay(); _resize_overlay(); });
	
	if(pp_settings.keyboard_shortcuts) {
		$(document).unbind('keydown').keydown(function(e){
			if(typeof $pp_pic_holder != 'undefined'){
				if($pp_pic_holder.is(':visible')){
					switch(e.keyCode){
						case 37:
							$.prettyPhoto.changePage('previous');
							break;
						case 39:
							$.prettyPhoto.changePage('next');
							break;
						case 27:
							if(!settings.modal)
							$.prettyPhoto.close();
							break;
					};
					return false;
				};
			};
		});
	}
	
	
	/**
	* Initialize prettyPhoto.
	*/
	$.prettyPhoto.initialize = function() {
		settings = pp_settings;
		
		if($.browser.msie && parseInt($.browser.version) == 6) settings.theme = "light_square"; // Fallback to a supported theme for IE6
		
		_buildOverlay(this); // Build the overlay {this} being the caller
		
		if(settings.allow_resize)
			$(window).scroll(function(){ _center_overlay(); });
			
		_center_overlay();
		
		set_position = jQuery.inArray($(this).attr('href'), pp_images); // Define where in the array the clicked item is positionned
		
		$.prettyPhoto.open();
		
		return false;
	}


	/**
	* Opens the prettyPhoto modal box.
	* @param image {String,Array} Full path to the image to be open, can also be an array containing full images paths.
	* @param title {String,Array} The title to be displayed with the picture, can also be an array containing all the titles.
	* @param description {String,Array} The description to be displayed with the picture, can also be an array containing all the descriptions.
	*/
	$.prettyPhoto.open = function(event) {
		if(typeof settings == "undefined"){ // Means it's an API call, need to manually get the settings and set the variables
			settings = pp_settings;
			if($.browser.msie && $.browser.version == 6) settings.theme = "light_square"; // Fallback to a supported theme for IE6
			_buildOverlay(event.target); // Build the overlay {this} being the caller
			pp_images = $.makeArray(arguments[0]);
			pp_titles = (arguments[1]) ? $.makeArray(arguments[1]) : $.makeArray("");
			pp_descriptions = (arguments[2]) ? $.makeArray(arguments[2]) : $.makeArray("");
			isSet = (pp_images.length > 1) ? true : false;
			set_position = 0;
		}

		if($.browser.msie && $.browser.version == 6) $('select').css('visibility','hidden'); // To fix the bug with IE select boxes
		
		if(settings.hideflash) $('object,embed').css('visibility','hidden'); // Hide the flash

		_checkPosition($(pp_images).size()); // Hide the next/previous links if on first or last images.
	
		$('.pp_loaderIcon').show();
	
		// Fade the content in
		if($ppt.is(':hidden')) $ppt.css('opacity',0).show();
		$pp_overlay.show().fadeTo(settings.animation_speed,settings.opacity);

		// Display the current position
		$pp_pic_holder.find('.currentTextHolder').text((set_position+1) + settings.counter_separator_label + $(pp_images).size());

		// Set the description
		$pp_pic_holder.find('.pp_description').show().html(unescape(pp_descriptions[set_position]));

		// Set the title
		(settings.show_title && pp_titles[set_position] != "" && typeof pp_titles[set_position] != "undefined") ? $ppt.html(unescape(pp_titles[set_position])) : $ppt.html('&nbsp;');
		
		// Get the dimensions
		movie_width = ( parseFloat(grab_param('width',pp_images[set_position])) ) ? grab_param('width',pp_images[set_position]) : settings.default_width.toString();
		movie_height = ( parseFloat(grab_param('height',pp_images[set_position])) ) ? grab_param('height',pp_images[set_position]) : settings.default_height.toString();
		
		// If the size is % based, calculate according to window dimensions
		if(movie_width.indexOf('%') != -1 || movie_height.indexOf('%') != -1){
			movie_height = parseFloat(($(window).height() * parseFloat(movie_height) / 100) - 150);
			movie_width = parseFloat(($(window).width() * parseFloat(movie_width) / 100) - 150);
			percentBased = true;
		}else{
			percentBased = false;
		}
		
		// Fade the holder
		$pp_pic_holder.fadeIn(function(){
			imgPreloader = "";
			
			// Inject the proper content
			switch(_getFileType(pp_images[set_position])){
				case 'image':
					imgPreloader = new Image();

					// Preload the neighbour images
					nextImage = new Image();
					if(isSet && set_position > $(pp_images).size()) nextImage.src = pp_images[set_position + 1];
					prevImage = new Image();
					if(isSet && pp_images[set_position - 1]) prevImage.src = pp_images[set_position - 1];

					$pp_pic_holder.find('#pp_full_res')[0].innerHTML = settings.image_markup;
					$pp_pic_holder.find('#fullResImage').attr('src',pp_images[set_position]);

					imgPreloader.onload = function(){
						// Fit item to viewport
						correctSizes = _fitToViewport(imgPreloader.width,imgPreloader.height);

						_showContent();
					};

					imgPreloader.onerror = function(){
						alert('Image cannot be loaded. Make sure the path is correct and image exist.');
						$.prettyPhoto.close();
					};
				
					imgPreloader.src = pp_images[set_position];
				break;
			
				case 'youtube':
					correctSizes = _fitToViewport(movie_width,movie_height); // Fit item to viewport

					movie = 'http://www.youtube.com/v/'+grab_param('v',pp_images[set_position]);
					if(settings.autoplay) movie += "&autoplay=1";
				
					toInject = settings.flash_markup.replace(/{width}/g,correctSizes['width']).replace(/{height}/g,correctSizes['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,movie);
				break;
			
				case 'vimeo':
					correctSizes = _fitToViewport(movie_width,movie_height); // Fit item to viewport
				
					movie_id = pp_images[set_position];
					var regExp = /http:\/\/(www\.)?vimeo.com\/(\d+)/;
					var match = movie_id.match(regExp);
					
					movie = 'http://player.vimeo.com/video/'+ match[2] +'?title=0&amp;byline=0&amp;portrait=0';
					if(settings.autoplay) movie += "&autoplay=1;";
			
					vimeo_width = correctSizes['width'] + '/embed/?moog_width='+ correctSizes['width'];
			
					toInject = settings.iframe_markup.replace(/{width}/g,vimeo_width).replace(/{height}/g,correctSizes['height']).replace(/{path}/g,movie);
				break;
			
				case 'quicktime':
					correctSizes = _fitToViewport(movie_width,movie_height); // Fit item to viewport
					correctSizes['height']+=15; correctSizes['contentHeight']+=15; correctSizes['containerHeight']+=15; // Add space for the control bar
			
					toInject = settings.quicktime_markup.replace(/{width}/g,correctSizes['width']).replace(/{height}/g,correctSizes['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,pp_images[set_position]).replace(/{autoplay}/g,settings.autoplay);
				break;
			
				case 'flash':
					correctSizes = _fitToViewport(movie_width,movie_height); // Fit item to viewport
				
					flash_vars = pp_images[set_position];
					flash_vars = flash_vars.substring(pp_images[set_position].indexOf('flashvars') + 10,pp_images[set_position].length);

					filename = pp_images[set_position];
					filename = filename.substring(0,filename.indexOf('?'));
				
					toInject =  settings.flash_markup.replace(/{width}/g,correctSizes['width']).replace(/{height}/g,correctSizes['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,filename+'?'+flash_vars);
				break;
			
				case 'iframe':
					correctSizes = _fitToViewport(movie_width,movie_height); // Fit item to viewport
			
					frame_url = pp_images[set_position];
					frame_url = frame_url.substr(0,frame_url.indexOf('iframe')-1);
			
					toInject = settings.iframe_markup.replace(/{width}/g,correctSizes['width']).replace(/{height}/g,correctSizes['height']).replace(/{path}/g,frame_url);
				break;
				
				case 'custom':
					correctSizes = _fitToViewport(movie_width,movie_height); // Fit item to viewport
				
					toInject = settings.custom_markup;
				break;
			
				case 'inline':
					// to get the item height clone it, apply default width, wrap it in the prettyPhoto containers , then delete
					myClone = $(pp_images[set_position]).clone().css({'width':settings.default_width}).wrapInner('<div id="pp_full_res"><div class="pp_inline clearfix"></div></div>').appendTo($('body'));
					correctSizes = _fitToViewport($(myClone).width(),$(myClone).height());
					$(myClone).remove();
					toInject = settings.inline_markup.replace(/{content}/g,$(pp_images[set_position]).html());
				break;
			};

			if(!imgPreloader){
				$pp_pic_holder.find('#pp_full_res')[0].innerHTML = toInject;
			
				// Show content
				_showContent();
			};
		});

		return false;
	};


	/**
	* Change page in the prettyPhoto modal box
	* @param direction {String} Direction of the paging, previous or next.
	*/
	$.prettyPhoto.changePage = function(direction){
		currentGalleryPage = 0;
		
		if(direction == 'previous') {
			set_position--;
			if (set_position < 0){
				set_position = 0;
				return;
			};
		}else if(direction == 'next'){
			set_position++;
			if(set_position > $(pp_images).size()-1) {
				set_position = 0;
			}
		}else{
			set_position=direction;
		};

		if(!doresize) doresize = true; // Allow the resizing of the images
		$('.pp_contract').removeClass('pp_contract').addClass('pp_expand');

		_hideContent(function(){ $.prettyPhoto.open(); });
	};


	/**
	* Change gallery page in the prettyPhoto modal box
	* @param direction {String} Direction of the paging, previous or next.
	*/
	$.prettyPhoto.changeGalleryPage = function(direction){
		if(direction=='next'){
			currentGalleryPage ++;

			if(currentGalleryPage > totalPage){
				currentGalleryPage = 0;
			};
		}else if(direction=='previous'){
			currentGalleryPage --;

			if(currentGalleryPage < 0){
				currentGalleryPage = totalPage;
			};
		}else{
			currentGalleryPage = direction;
		};
		
		// Slide the pages, if we're on the last page, find out how many items we need to slide. To make sure we don't have an empty space.
		itemsToSlide = (currentGalleryPage == totalPage) ? pp_images.length - ((totalPage) * itemsPerPage) : itemsPerPage;
		
		$pp_pic_holder.find('.pp_gallery li').each(function(i){
			$(this).animate({
				'left': (i * itemWidth) - ((itemsToSlide * itemWidth) * currentGalleryPage)
			});
		});
	};


	/**
	* Start the slideshow...
	*/
	$.prettyPhoto.startSlideshow = function(){
		if(typeof pp_slideshow == 'undefined'){
			$pp_pic_holder.find('.pp_play').unbind('click').removeClass('pp_play').addClass('pp_pause').click(function(){
				$.prettyPhoto.stopSlideshow();
				return false;
			});
			pp_slideshow = setInterval($.prettyPhoto.startSlideshow,settings.slideshow);
		}else{
			$.prettyPhoto.changePage('next');	
		};
	}


	/**
	* Stop the slideshow...
	*/
	$.prettyPhoto.stopSlideshow = function(){
		$pp_pic_holder.find('.pp_pause').unbind('click').removeClass('pp_pause').addClass('pp_play').click(function(){
			$.prettyPhoto.startSlideshow();
			return false;
		});
		clearInterval(pp_slideshow);
		pp_slideshow=undefined;
	}


	/**
	* Closes prettyPhoto.
	*/
	$.prettyPhoto.close = function(){

		clearInterval(pp_slideshow);
		
		$pp_pic_holder.stop().find('object,embed').css('visibility','hidden');
		
		$('div.pp_pic_holder,div.ppt,.pp_fade').fadeOut(settings.animation_speed,function(){ $(this).remove(); });
		
		$pp_overlay.fadeOut(settings.animation_speed, function(){
			if($.browser.msie && $.browser.version == 6) $('select').css('visibility','visible'); // To fix the bug with IE select boxes
			
			if(settings.hideflash) $('object,embed').css('visibility','visible'); // Show the flash
			
			$(this).remove(); // No more need for the prettyPhoto markup
			
			$(window).unbind('scroll');
			
			settings.callback();
			
			doresize = true;
			
			pp_open = false;
			
			delete settings;
		});
	};

	/**
	* Set the proper sizes on the containers and animate the content in.
	*/
	_showContent = function(){
		$('.pp_loaderIcon').hide();
		
		$ppt.fadeTo(settings.animation_speed,1);

		// Calculate the opened top position of the pic holder
		projectedTop = scroll_pos['scrollTop'] + ((windowHeight/2) - (correctSizes['containerHeight']/2));
		if(projectedTop < 0) projectedTop = 0;

		// Resize the content holder
		$pp_pic_holder.find('.pp_content').animate({'height':correctSizes['contentHeight']},settings.animation_speed);
		
		// Resize picture the holder
		$pp_pic_holder.animate({
			'top': projectedTop,
			'left': (windowWidth/2) - (correctSizes['containerWidth']/2),
			'width': correctSizes['containerWidth']
		},settings.animation_speed,function(){
			$pp_pic_holder.find('.pp_hoverContainer,#fullResImage').height(correctSizes['height']).width(correctSizes['width']);

			$pp_pic_holder.find('.pp_fade').fadeIn(settings.animation_speed); // Fade the new content

			// Show the nav
			if(isSet && _getFileType(pp_images[set_position])=="image") { $pp_pic_holder.find('.pp_hoverContainer').show(); }else{ $pp_pic_holder.find('.pp_hoverContainer').hide(); }
		
			if(correctSizes['resized']) $('a.pp_expand,a.pp_contract').fadeIn(settings.animation_speed); // Fade the resizing link if the image is resized
			
			if(settings.autoplay_slideshow && !pp_slideshow && !pp_open) $.prettyPhoto.startSlideshow();
			
			settings.changepicturecallback(); // Callback!
			
			pp_open = true;
		});
		
		_insert_gallery();
	};
	
	/**
	* Hide the content...DUH!
	*/
	function _hideContent(callback){
		// Fade out the current picture
		$pp_pic_holder.find('#pp_full_res object,#pp_full_res embed').css('visibility','hidden');
		$pp_pic_holder.find('.pp_fade').fadeOut(settings.animation_speed,function(){
			$('.pp_loaderIcon').show();
			
			callback();
		});
	};

	/**
	* Check the item position in the gallery array, hide or show the navigation links
	* @param setCount {integer} The total number of items in the set
	*/
	function _checkPosition(setCount){
		// If at the end, hide the next link
		if(set_position == setCount-1) {
			$pp_pic_holder.find('a.pp_next').css('visibility','hidden');
			$pp_pic_holder.find('a.pp_next').addClass('disabled').unbind('click');
		}else{ 
			$pp_pic_holder.find('a.pp_next').css('visibility','visible');
			$pp_pic_holder.find('a.pp_next.disabled').removeClass('disabled').bind('click',function(){
				$.prettyPhoto.changePage('next');
				return false;
			});
		};
	
		// If at the beginning, hide the previous link
		if(set_position == 0) {
			$pp_pic_holder
				.find('a.pp_previous')
				.css('visibility','hidden')
				.addClass('disabled')
				.unbind('click');
		}else{
			$pp_pic_holder.find('a.pp_previous.disabled')
				.css('visibility','visible')
				.removeClass('disabled')
				.bind('click',function(){
					$.prettyPhoto.changePage('previous');
					return false;
				});
		};
		
		(setCount > 1) ? $('.pp_nav').show() : $('.pp_nav').hide(); // Hide the bottom nav if it's not a set.
	};

	/**
	* Resize the item dimensions if it's bigger than the viewport
	* @param width {integer} Width of the item to be opened
	* @param height {integer} Height of the item to be opened
	* @return An array containin the "fitted" dimensions
	*/
	function _fitToViewport(width,height){
		resized = false;

		_getDimensions(width,height);
		
		// Define them in case there's no resize needed
		imageWidth = width, imageHeight = height;

		if( ((pp_containerWidth > windowWidth) || (pp_containerHeight > windowHeight)) && doresize && settings.allow_resize && !percentBased) {
			resized = true, fitting = false;
		
			while (!fitting){
				if((pp_containerWidth > windowWidth)){
					imageWidth = (windowWidth - 200);
					imageHeight = (height/width) * imageWidth;
				}else if((pp_containerHeight > windowHeight)){
					imageHeight = (windowHeight - 200);
					imageWidth = (width/height) * imageHeight;
				}else{
					fitting = true;
				};

				pp_containerHeight = imageHeight, pp_containerWidth = imageWidth;
			};
		
			_getDimensions(imageWidth,imageHeight);
		};

		return {
			width:Math.floor(imageWidth),
			height:Math.floor(imageHeight),
			containerHeight:Math.floor(pp_containerHeight),
			containerWidth:Math.floor(pp_containerWidth) + 40, // 40 behind the side padding
			contentHeight:Math.floor(pp_contentHeight),
			contentWidth:Math.floor(pp_contentWidth),
			resized:resized
		};
	};
	
	/**
	* Get the containers dimensions according to the item size
	* @param width {integer} Width of the item to be opened
	* @param height {integer} Height of the item to be opened
	*/
	function _getDimensions(width,height){
		width = parseFloat(width);
		height = parseFloat(height);
		
		// Get the details height, to do so, I need to clone it since it's invisible
		$pp_details = $pp_pic_holder.find('.pp_details');
		$pp_details.width(width);
		detailsHeight = parseFloat($pp_details.css('marginTop')) + parseFloat($pp_details.css('marginBottom'));
		$pp_details = $pp_details.clone().appendTo($('body')).css({
			'position':'absolute',
			'top':-10000
		});
		detailsHeight += $pp_details.height();
		detailsHeight = (detailsHeight <= 34) ? 36 : detailsHeight; // Min-height for the details
		if($.browser.msie && $.browser.version==7) detailsHeight+=8;
		$pp_details.remove();
		
		// Get the container size, to resize the holder to the right dimensions
		pp_contentHeight = height + detailsHeight;
		pp_contentWidth = width;
		pp_containerHeight = pp_contentHeight + $ppt.height() + $pp_pic_holder.find('.pp_top').height() + $pp_pic_holder.find('.pp_bottom').height();
		pp_containerWidth = width;
	}

	function _getFileType(itemSrc){
		if (itemSrc.match(/youtube\.com\/watch/i)) {
			return 'youtube';
		}else if (itemSrc.match(/vimeo\.com/i)) {
			return 'vimeo';
		}else if(itemSrc.indexOf('.mov') != -1){ 
			return 'quicktime';
		}else if(itemSrc.indexOf('.swf') != -1){
			return 'flash';
		}else if(itemSrc.indexOf('iframe') != -1){
			return 'iframe';
		}else if(itemSrc.indexOf('custom') != -1){
			return 'custom';
		}else if(itemSrc.substr(0,1) == '#'){
			return 'inline';
		}else{
			return 'image';
		};
	};

	function _center_overlay(){
		if(doresize && typeof $pp_pic_holder != 'undefined') {
			scroll_pos = _get_scroll();
			
			titleHeight = $ppt.height(), contentHeight = $pp_pic_holder.height(), contentwidth = $pp_pic_holder.width();
			
			projectedTop = (windowHeight/2) + scroll_pos['scrollTop'] - (contentHeight/2);
			
			$pp_pic_holder.css({
				'top': projectedTop,
				'left': (windowWidth/2) + scroll_pos['scrollLeft'] - (contentwidth/2)
			});
		};
	};

	function _get_scroll(){
		if (self.pageYOffset) {
			return {scrollTop:self.pageYOffset,scrollLeft:self.pageXOffset};
		} else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
			return {scrollTop:document.documentElement.scrollTop,scrollLeft:document.documentElement.scrollLeft};
		} else if (document.body) {// all other Explorers
			return {scrollTop:document.body.scrollTop,scrollLeft:document.body.scrollLeft};
		};
	};

	function _resize_overlay() {
		windowHeight = $(window).height(), windowWidth = $(window).width();
		
		if(typeof $pp_overlay != "undefined") $pp_overlay.height($(document).height());
	};

	function _insert_gallery(){
		if(isSet && settings.overlay_gallery && _getFileType(pp_images[set_position])=="image") {
			itemWidth = 52+5; // 52 beign the thumb width, 5 being the right margin.
			navWidth = (settings.theme == "facebook") ? 58 : 38; // Define the arrow width depending on the theme
			
			itemsPerPage = Math.floor((correctSizes['containerWidth'] - 100 - navWidth) / itemWidth);
			itemsPerPage = (itemsPerPage < pp_images.length) ? itemsPerPage : pp_images.length;
			totalPage = Math.ceil(pp_images.length / itemsPerPage) - 1;

			// Hide the nav in the case there's no need for links
			if(totalPage == 0){
				navWidth = 0; // No nav means no width!
				$pp_pic_holder.find('.pp_gallery .pp_arrow_next,.pp_gallery .pp_arrow_previous').hide();
			}else{
				$pp_pic_holder.find('.pp_gallery .pp_arrow_next,.pp_gallery .pp_arrow_previous').show();
			};

			galleryWidth = itemsPerPage * itemWidth + navWidth;
			
			// Set the proper width to the gallery items
			$pp_pic_holder.find('.pp_gallery')
				.width(galleryWidth)
				.css('margin-left',-(galleryWidth/2));
				
			$pp_pic_holder
				.find('.pp_gallery ul')
				.width(itemsPerPage * itemWidth)
				.find('li.selected')
				.removeClass('selected');
			
			goToPage = (Math.floor(set_position/itemsPerPage) <= totalPage) ? Math.floor(set_position/itemsPerPage) : totalPage;
			
			
			if(itemsPerPage) {
				$pp_pic_holder.find('.pp_gallery').hide().show().removeClass('disabled');
			}else{
				$pp_pic_holder.find('.pp_gallery').hide().addClass('disabled');
			}
			
			$.prettyPhoto.changeGalleryPage(goToPage);
			
			$pp_pic_holder
				.find('.pp_gallery ul li:eq('+set_position+')')
				.addClass('selected');
		}else{
			$pp_pic_holder.find('.pp_content').unbind('mouseenter mouseleave');
			$pp_pic_holder.find('.pp_gallery').hide();
		}
	}

	function _buildOverlay(caller){
		// Find out if the picture is part of a set
		theRel = $(caller).attr('rel');
		galleryRegExp = /\[(?:.*)\]/;
		isSet = (galleryRegExp.exec(theRel)) ? true : false;
		
		// Put the SRCs, TITLEs, ALTs into an array.
		pp_images = (isSet) ? jQuery.map(matchedObjects, function(n, i){ if($(n).attr('rel').indexOf(theRel) != -1) return $(n).attr('href'); }) : $.makeArray($(caller).attr('href'));
		pp_titles = (isSet) ? jQuery.map(matchedObjects, function(n, i){ if($(n).attr('rel').indexOf(theRel) != -1) return ($(n).find('img').attr('alt')) ? $(n).find('img').attr('alt') : ""; }) : $.makeArray($(caller).find('img').attr('alt'));
		pp_descriptions = (isSet) ? jQuery.map(matchedObjects, function(n, i){ if($(n).attr('rel').indexOf(theRel) != -1) return ($(n).attr('title')) ? $(n).attr('title') : ""; }) : $.makeArray($(caller).attr('title'));
		
		$('body').append(settings.markup); // Inject the markup
		
		$pp_pic_holder = $('.pp_pic_holder') , $ppt = $('.ppt'), $pp_overlay = $('div.pp_overlay'); // Set my global selectors
		
		// Inject the inline gallery!
		if(isSet && settings.overlay_gallery) {
			currentGalleryPage = 0;
			toInject = "";
			for (var i=0; i < pp_images.length; i++) {
				var regex = new RegExp("(.*?)\.(jpg|jpeg|png|gif)$");
				var results = regex.exec( pp_images[i] );
				if(!results){
					classname = 'default';
				}else{
					classname = '';
				}
				toInject += "<li class='"+classname+"'><a href='#'><img src='" + pp_images[i] + "' width='50' alt='' /></a></li>";
			};
			
			toInject = settings.gallery_markup.replace(/{gallery}/g,toInject);
			
			$pp_pic_holder.find('#pp_full_res').after(toInject);
			
			$pp_pic_holder.find('.pp_gallery .pp_arrow_next').click(function(){
				$.prettyPhoto.changeGalleryPage('next');
				$.prettyPhoto.stopSlideshow();
				return false;
			});
			
			$pp_pic_holder.find('.pp_gallery .pp_arrow_previous').click(function(){
				$.prettyPhoto.changeGalleryPage('previous');
				$.prettyPhoto.stopSlideshow();
				return false;
			});
			
			$pp_pic_holder.find('.pp_content').hover(
				function(){
					$pp_pic_holder.find('.pp_gallery:not(.disabled)').fadeIn();
				},
				function(){
					$pp_pic_holder.find('.pp_gallery:not(.disabled)').fadeOut();
				});

			itemWidth = 52+5; // 52 beign the thumb width, 5 being the right margin.
			$pp_pic_holder.find('.pp_gallery ul li').each(function(i){
				$(this).css({
					'position':'absolute',
					'left': i * itemWidth
				});

				$(this).find('a').unbind('click').click(function(){
					$.prettyPhoto.changePage(i);
					$.prettyPhoto.stopSlideshow();
					return false;
				});
			});
		};
		
		
		// Inject the play/pause if it's a slideshow
		if(settings.slideshow){
			$pp_pic_holder.find('.pp_nav').prepend('<a href="#" class="pp_play">Play</a>')
			$pp_pic_holder.find('.pp_nav .pp_play').click(function(){
				$.prettyPhoto.startSlideshow();
				return false;
			});
		}
		
		$pp_pic_holder.attr('class','pp_pic_holder ' + settings.theme); // Set the proper theme
		
		$pp_overlay
			.css({
				'opacity':0,
				'height':$(document).height(),
				'width':$(document).width()
				})
			.bind('click',function(){
				if(!settings.modal) $.prettyPhoto.close();
			});

		$('a.pp_close').bind('click',function(){ $.prettyPhoto.close(); return false; });

		$('a.pp_expand').bind('click',function(e){
			// Expand the image
			if($(this).hasClass('pp_expand')){
				$(this).removeClass('pp_expand').addClass('pp_contract');
				doresize = false;
			}else{
				$(this).removeClass('pp_contract').addClass('pp_expand');
				doresize = true;
			};
		
			_hideContent(function(){ $.prettyPhoto.open(); });
	
			return false;
		});
	
		$pp_pic_holder.find('.pp_previous, .pp_nav .pp_arrow_previous').bind('click',function(){
			$.prettyPhoto.changePage('previous');
			$.prettyPhoto.stopSlideshow();
			return false;
		});
	
		$pp_pic_holder.find('.pp_next, .pp_nav .pp_arrow_next').bind('click',function(){
			$.prettyPhoto.changePage('next');
			$.prettyPhoto.stopSlideshow();
			return false;
		});
		
		_center_overlay(); // Center it
	};
	
	return this.unbind('click').click($.prettyPhoto.initialize); // Return the jQuery object for chaining. The unbind method is used to avoid click conflict when the plugin is called more than once
};

function grab_param(name,url){
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( url );
  return ( results == null ) ? "" : results[1];
}

})(jQuery);
