/*!	ColorBox v1.3.1 - a full featured, light-weight, customizable lightbox based on jQuery 1.3 *///	(c) 2009 Jack Moore - www.colorpowered.com - jack@colorpowered.com//	Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php(function ($) {	//Shortcuts (to increase compression)	var colorbox = 'colorbox',	hover = 'hover',	TRUE = true,	FALSE = false,	cboxPublic,	isIE = !$.support.opacity,	isIE6 = isIE && !window.XMLHttpRequest,	//Event Strings (to increase compression)	cbox_click = 'click.colorbox',	cbox_open = 'cbox_open',	cbox_load = 'cbox_load',	cbox_complete = 'cbox_complete',	cbox_cleanup = 'cbox_cleanup',	cbox_closed = 'cbox_closed',	cbox_resize = 'resize.cbox_resize',	cbox_ie6 = 'resize.cboxie6 scroll.cboxie6',	//Cached jQuery Object Variables	$overlay,	$cbox,	$wrap,	$content,	$topBorder,	$leftBorder,	$rightBorder,	$bottomBorder,	$related,	$window,	$loaded,	$loadingOverlay,	$loadingGraphic,	$title,	$current,	$slideshow,	$next,	$prev,	$close,	//Variables for cached values or use across multiple functions	interfaceHeight,	interfaceWidth,	loadedHeight,	loadedWidth,	maxWidth,	maxHeight,	element,	index,	settings,	open,	callback,		// ColorBox Default Settings.		// See http://colorpowered.com/colorbox for details.	defaults = {		transition: "elastic",		speed: 350,		width: FALSE,		height: FALSE,		initialWidth: "400",		initialHeight: "400",		maxWidth: FALSE,		maxHeight: FALSE,		scalePhotos: TRUE,		scrollbars: TRUE,		inline: FALSE,		html: FALSE,		iframe: FALSE,		photo: FALSE,		href: FALSE,		title: FALSE,		rel: FALSE,		opacity: 0.5,		preloading: TRUE,		current: "image {current} sur {total}",		previous: "previous",		next: "next",		close: "close",		open: FALSE,		overlayClose: TRUE,		slideshow: FALSE,		slideshowAuto: TRUE,		slideshowSpeed: 4000,		slideshowStart: "lancer diaporama",		slideshowStop: "stopper diaporama"	};	// ****************	// HELPER FUNCTIONS	// ****************		// Set Navigation Key Bindings	function cbox_key(e) {		if (e.keyCode === 37) {			e.preventDefault();			$prev.click();		} else if (e.keyCode === 39) {			e.preventDefault();			$next.click();		}	}		// Convert % values to pixels	function setSize (size, dimension) {		dimension = dimension === 'x' ? document.documentElement.clientWidth : document.documentElement.clientHeight;		return (typeof size === 'string') ? (size.match(/%/) ? (dimension / 100) * parseInt(size, 10) : parseInt(size, 10)) : size;	}	// Checks an href to see if it is a photo.	// There is a force photo option (photo: true) for hrefs that cannot be matched by this regex.	function isImage (url) {		return settings.photo || url.match(/\.(gif|png|jpg|jpeg|bmp)(?:\?([^#]*))?(?:#(\.*))?$/i);	}		// Assigns functions results to their respective settings.  This allows functions to be used to set ColorBox options.	function process () {		for (var i in settings) {			if (typeof(settings[i]) === 'function') {			    settings[i] = settings[i].call(element);			}		}	}	// ****************	// PUBLIC FUNCTIONS	// Usage format: $.fn.colorbox.close();	// Usage from within an iframe: parent.$.fn.colorbox.close();	// ****************		cboxPublic = $.fn.colorbox = function (options, custom_callback) {				if (this.length) {			this.each(function () {				var data = $(this).data(colorbox) ? $.extend({},					$(this).data(colorbox), options) : $.extend({}, defaults, options);				$(this).data(colorbox, data).addClass("cboxelement");			});		} else {			$(this).data(colorbox, $.extend({}, defaults, options));		}				$(this).unbind(cbox_click).bind(cbox_click, function (event) {						element = this;						settings = $(element).data(colorbox);						process();//process settings functions						$().bind("keydown.cbox_close", function (e) {				if (e.keyCode === 27) {					e.preventDefault();					cboxPublic.close();				}			});			if (settings.overlayClose) {				$overlay.css({"cursor": "pointer"}).one('click', cboxPublic.close);			}						//remove the focus from the anchor to prevent accidentally calling			//colorbox multiple times (by pressing the 'Enter' key			//after colorbox has opened, but before the user has clicked on anything else)			element.blur();						callback = custom_callback || FALSE;						var rel = settings.rel || element.rel;						if (rel && rel !== 'nofollow') {				$related = $('.cboxelement').filter(function () {					var relRelated = $(this).data(colorbox).rel || this.rel;					return (relRelated === rel);				});				index = $related.index(element);								if (index < 0) { //this checks direct calls to colorbox					$related = $related.add(element);					index = $related.length - 1;				}						} else {				$related = $(element);				index = 0;			}			if (!open) {				open = TRUE;				$.event.trigger(cbox_open);				$close.html(settings.close);				$overlay.css({"opacity": settings.opacity}).show();				cboxPublic.position(setSize(settings.initialWidth, 'x'), setSize(settings.initialHeight, 'y'), 0);				if (isIE6) {					$window.bind(cbox_ie6, function () {						$overlay.css({width: $window.width(), height: $window.height(), top: $window.scrollTop(), left: $window.scrollLeft()});					}).trigger(cbox_ie6);				}			}			cboxPublic.slideshow();			cboxPublic.load();						event.preventDefault();		});				if (options && options.open) {			$(this).triggerHandler(cbox_click);		}				return this;	};	// Initialize ColorBox: store common calculations, preload the interface graphics, append the html.	// This preps colorbox for a speedy open when clicked, and lightens the burdon on the browser by only	// having to run once, instead of each time colorbox is opened.	cboxPublic.init = function () {				// jQuery object generator to save a bit of space		function $div(id) {			return $('<div id="cbox' + id + '"/>');		}				// Create & Append jQuery Objects		$window = $(window);		$cbox = $('<div id="colorbox"/>');		$overlay = $div("Overlay").hide();		$wrap = $div("Wrapper");		$content = $div("Content").append(			$loaded = $div("LoadedContent").css({width: 0, height: 0}),			$loadingOverlay = $div("LoadingOverlay"),			$loadingGraphic = $div("LoadingGraphic"),			$title = $div("Title"),			$current = $div("Current"),			$slideshow = $div("Slideshow"),			$next = $div("Next"),			$prev = $div("Previous"),			$close = $div("Close")		);		$wrap.append( // The 3x3 Grid that makes up ColorBox			$('<div/>').append(				$div("TopLeft"),				$topBorder = $div("TopCenter"),				$div("TopRight")			),			$('<div/>').append(				$leftBorder = $div("MiddleLeft"),				$content,				$rightBorder = $div("MiddleRight")			),			$('<div/>').append(				$div("BottomLeft"),				$bottomBorder = $div("BottomCenter"),				$div("BottomRight")			)		).children().children().css({'float': 'left'});		$('body').prepend($overlay, $cbox.append($wrap));						if (isIE) {			$cbox.addClass('cboxIE');			if (isIE6) {				$overlay.css('position', 'absolute');			}		}				// Add rollover event to navigation elements		$content.children()		.addClass(hover)		.mouseover(function () { $(this).addClass(hover); })		.mouseout(function () { $(this).removeClass(hover); })		.hide();				// Cache values needed for size calculations		interfaceHeight = $topBorder.height() + $bottomBorder.height() + $content.outerHeight(TRUE) - $content.height();//Subtraction needed for IE6		interfaceWidth = $leftBorder.width() + $rightBorder.width() + $content.outerWidth(TRUE) - $content.width();		loadedHeight = $loaded.outerHeight(TRUE);		loadedWidth = $loaded.outerWidth(TRUE);				// Setting padding to remove the need to do size conversions during the animation step.		$cbox.css({"padding-bottom": interfaceHeight, "padding-right": interfaceWidth}).hide();				// Setup button & key events.		$next.click(cboxPublic.next);		$prev.click(cboxPublic.prev);		$close.click(cboxPublic.close);				// Adding the 'hover' class allowed the browser to load the hover-state		// background graphics.  The class can now can be removed.		$content.children().removeClass(hover);	};	cboxPublic.position = function (mWidth, mHeight, speed, loadedCallback) {		var winHeight = document.documentElement.clientHeight,		posTop = winHeight / 2 - mHeight / 2,		posLeft = document.documentElement.clientWidth / 2 - mWidth / 2,		animate_speed;				//keeps the box from expanding to an inaccessible area offscreen.		if (mHeight > winHeight) { posTop -=(mHeight - winHeight); }		if (posTop < 0) { posTop = 0; } 		if (posLeft < 0) { posLeft = 0; }				posTop += $window.scrollTop();		posLeft += $window.scrollLeft();				mWidth = mWidth - interfaceWidth;		mHeight = mHeight - interfaceHeight;				//setting the speed to 0 to reduce the delay between same-sized content.		animate_speed = ($cbox.width() === mWidth && $cbox.height() === mHeight) ? 0 : speed;				//this gives the wrapper plenty of breathing room so it's floated contents can move around smoothly,		//but it has to be shrank down around the size of div#colorbox when it's done.  If not,		//it can invoke an obscure IE bug when using iframes.		$wrap[0].style.width = $wrap[0].style.height = "9999px";				function modalDimensions (that) {			//loading overlay size has to be sure that IE6 uses the correct height.			$topBorder[0].style.width = $bottomBorder[0].style.width = $content[0].style.width = that.style.width;			$loadingGraphic[0].style.height = $loadingOverlay[0].style.height = $content[0].style.height = $leftBorder[0].style.height = $rightBorder[0].style.height = that.style.height;		}				$cbox.dequeue().animate({height:mHeight, width:mWidth, top:posTop, left:posLeft}, {duration: animate_speed,			complete: function(){				modalDimensions(this);								//shrink the wrapper down to exactly the size of colorbox to avoid a bug in IE's iframe implementation.				$wrap[0].style.width = (mWidth+interfaceWidth) + "px";				$wrap[0].style.height = (mHeight+interfaceHeight) + "px";								if (loadedCallback) {loadedCallback();}			},			step: function(){				modalDimensions(this);			}		});	};	cboxPublic.resize = function (object) {		if(!open){ return; }				var width,		height,		topMargin,		prev,		prevSrc,		next,		nextSrc,		photo,		timeout,		speed = settings.transition==="none" ? 0 : settings.speed;				$window.unbind(cbox_resize);				if(!object){			timeout = setTimeout(function(){ //timer allows IE to render the dimensions before attempting to calculate the height				height = $loaded.children().outerHeight(TRUE);				$loaded[0].style.height = height + 'px';				cboxPublic.position($loaded.width()+loadedWidth+interfaceWidth, height+loadedHeight+interfaceHeight, speed);			}, 1);			return;		}				$loaded.remove();		$loaded = $(object);				function getWidth(){			width = settings.width ? maxWidth : maxWidth && maxWidth < $loaded.width() ? maxWidth : $loaded.width();			return width;		}		function getHeight(){			height = settings.height ? maxHeight : maxHeight && maxHeight < $loaded.height() ? maxHeight : $loaded.height();			return height;		}				if(!settings.scrollbars){			$loaded.css({overflow:'hidden'});		}				$loaded.hide().appendTo('body')		.attr({id:'cboxLoadedContent'})		.css({width:getWidth()})		.css({height:getHeight()})//sets the height independently from the width in case the new width influences the value of height.		.prependTo($content);				// Hides 'select' form elements in IE6 because they would otherwise sit on top of the overlay.		if (isIE6) {			$('select:not(#colorbox select)').filter(function(){				return $(this).css('visibility') !== 'hidden';			}).css({'visibility':'hidden'}).one(cbox_cleanup, function(){				$(this).css({'visibility':'inherit'});			});		}				photo = $('#cboxPhoto')[0];		if (photo && settings.height) {			topMargin = (height - parseInt(photo.style.height, 10))/2;			photo.style.marginTop = (topMargin > 0 ? topMargin : 0)+'px';		}				function setPosition (s) {			var mWidth = width+loadedWidth+interfaceWidth,			mHeight = height+loadedHeight+interfaceHeight;						$().unbind('keydown', cbox_key);			cboxPublic.position(mWidth, mHeight, s, function(){				if (!open) { return; }								if (isIE) {					//This fadeIn helps the bicubic resampling to kick-in.					if( photo ){$loaded.fadeIn(100);}					//IE adds a filter when ColorBox fades in and out that can cause problems if the loaded content contains transparent pngs.					$cbox[0].style.removeAttribute("filter");				}								$content.children().show();								//Waited until the iframe is added to the DOM & it is visible before setting the src.				//This increases compatability with pages using DOM dependent JavaScript.				$('#cboxIframeTemp').after("<iframe id='cboxIframe' name='iframe_"+new Date().getTime()+"' frameborder=0 src='"+(settings.href || element.href)+"' />").remove();								$loadingOverlay.hide();				$loadingGraphic.hide();				$slideshow.hide();								if ($related.length>1) {					$current.html(settings.current.replace(/\{current\}/, index+1).replace(/\{total\}/, $related.length));					$next.html(settings.next);					$prev.html(settings.previous);										$().bind('keydown', cbox_key);										if(settings.slideshow){						$slideshow.show();					}				} else {					$current.hide();					$next.hide();					$prev.hide();				}								$title.html(settings.title || element.title);								$.event.trigger(cbox_complete);								if (callback) {					callback.call(element);				}								if (settings.transition === 'fade'){					$cbox.fadeTo(speed, 1, function(){						if(isIE){$cbox[0].style.removeAttribute("filter");}					});				}								$window.bind(cbox_resize, function(){					cboxPublic.position(mWidth, mHeight, 0);				});			});		}				if((settings.transition === 'fade' && $cbox.fadeTo(speed, 0, function(){setPosition(0);})) || setPosition(speed)){}				// Preloads images within a rel group		if (settings.preloading && $related.length>1) {			prev = index > 0 ? $related[index-1] : $related[$related.length-1];			next = index < $related.length-1 ? $related[index+1] : $related[0];			nextSrc = $(next).data(colorbox).href || next.href;			prevSrc = $(prev).data(colorbox).href || prev.href;						if(isImage(nextSrc)){				$('<img />').attr('src', nextSrc);			}						if(isImage(prevSrc)){				$('<img />').attr('src', prevSrc);			}		}	};	cboxPublic.load = function () {		var height, width, href, loadingElement, resize = cboxPublic.resize;				element = $related[index];				settings = $(element).data(colorbox);				//convert functions to static values		process();				$.event.trigger(cbox_load);				// Evaluate the height based on the optional height and width settings.		height = settings.height ? setSize(settings.height, 'y') - loadedHeight - interfaceHeight : FALSE;		width = settings.width ? setSize(settings.width, 'x') - loadedWidth - interfaceWidth : FALSE;				href = settings.href || element.href;				$loadingOverlay.show();		$loadingGraphic.show();		$close.show();				//Re-evaluate the maximum dimensions based on the optional maxheight and maxwidth.		if(settings.maxHeight){			maxHeight = settings.maxHeight ? setSize(settings.maxHeight, 'y') - loadedHeight - interfaceHeight : FALSE;			height = height && height < maxHeight ? height : maxHeight;		}		if(settings.maxWidth){			maxWidth = settings.maxWidth ? setSize(settings.maxWidth, 'x') - loadedWidth - interfaceWidth : FALSE;			width = width && width < maxWidth ? width : maxWidth;		}				maxHeight = height;		maxWidth = width;				if (settings.inline) {			$('<div id="cboxInlineTemp" />').hide().insertBefore($(href)[0]).bind(cbox_load+' '+cbox_cleanup, function(){				$loaded.children().insertBefore(this);				$(this).remove();			});			resize($(href).wrapAll('<div/>').parent());		} else if (settings.iframe) {			resize($("<div><div id='cboxIframeTemp' /></div>"));		} else if (settings.html) {			resize($('<div/>').html(settings.html));		} else if (isImage(href)){			loadingElement = new Image();			loadingElement.onload = function(){				loadingElement.onload = null;								if((maxHeight || maxWidth) && settings.scalePhotos){					var width = this.width,					height = this.height,					percent = 0,					that = this,					setResize = function(){						height += height * percent;						width += width * percent;						that.height = height;						that.width = width;						};										if( maxWidth && width > maxWidth ){						percent = (maxWidth - width) / width;						setResize();					}					if( maxHeight && height > maxHeight ){						percent = (maxHeight - height) / height;						setResize();					}				}								resize($("<div />").css({width:this.width, height:this.height}).append($(this).css({width:this.width, height:this.height, display:"block", margin:"auto", border:0}).attr('id', 'cboxPhoto')));								if($related.length > 1){					$(this).css({cursor:'pointer'}).click(cboxPublic.next);				}								if(isIE){					this.style.msInterpolationMode='bicubic';				}			};			loadingElement.src = href;		} else {			$('<div />').load(href, function(data, textStatus){				if(textStatus === "success"){					resize($(this));				} else {					resize($("<p>Request unsuccessful.</p>"));				}			});		}	};	//navigates to the next page/image in a set.	cboxPublic.next = function () {		index = index < $related.length-1 ? index+1 : 0;		cboxPublic.load();	};		cboxPublic.prev = function () {		index = index > 0 ? index-1 : $related.length-1;		cboxPublic.load();	};	cboxPublic.slideshow = function () {		var stop, timeOut, className = 'cboxSlideshow_';				$slideshow.bind(cbox_cleanup, function(){			clearTimeout(timeOut);			$slideshow.unbind(cbox_complete+' '+cbox_load+" click");		});				function start(){			$slideshow			.text(settings.slideshowStop)			.bind(cbox_complete, function(){				timeOut = setTimeout(cboxPublic.next, settings.slideshowSpeed);			})			.bind(cbox_load, function(){				clearTimeout(timeOut);				}).one("click", function(){				stop();				$(this).removeClass(hover);			});			$cbox.removeClass(className+"off").addClass(className+"on");		}				stop = function(){			clearTimeout(timeOut);			$slideshow			.text(settings.slideshowStart)			.unbind(cbox_complete+' '+cbox_load)			.one("click", function(){				start();				timeOut = setTimeout(cboxPublic.next, settings.slideshowSpeed);				$(this).removeClass(hover);			});			$cbox.removeClass(className+"on").addClass(className+"off");		};				if(settings.slideshow && $related.length>1){			if(settings.slideshowAuto){				start();			} else {				stop();			}		}	};	//Note: to use this within an iframe use the following format: parent.$.fn.colorbox.close();	cboxPublic.close = function () {		$.event.trigger(cbox_cleanup);		open = FALSE;		$().unbind('keydown', cbox_key).unbind("keydown.cbox_close");		$window.unbind(cbox_resize+" "+cbox_ie6);		$overlay.css({cursor: 'auto'}).fadeOut('fast');				$cbox		.stop(TRUE, FALSE)		.fadeOut('fast', function () {			$loaded.remove();			$cbox.css({'opacity': 1});			$content.children().hide();			$.event.trigger(cbox_closed);		});	};	cboxPublic.element = function(){ return element; };	cboxPublic.settings = defaults;	// Initializes ColorBox when the DOM has loaded	$(cboxPublic.init);}(jQuery));
