PageSourceSearch

https://www.consorzio-cini.it/modules/mod_s5_box/js/jquery.colorbox.js

js consorzio-cini.it collected 2026-09-24 09:18:28 UTC 26,981 bytes, 944 lines download raw bytes

1// ColorBox v1.3.20.1 - jQuery lightbox plugin
2// (c) 2012 Jack Moore - jacklmoore.com
3// License: http://www.opensource.org/licenses/mit-license.php
4(function ($, document, window) {
5	var
6	// Default settings object.
7	// See http://jacklmoore.com/colorbox for details.
8	defaults = {
9		transition: "elastic",
10		speed: 300,
11		width: false,
12		initialWidth: "600",
13		innerWidth: false,
14		maxWidth: false,
15		height: false,
16		initialHeight: "450",
17		innerHeight: false,
18		maxHeight: false,
19		scalePhotos: true,
20		scrolling: true,
21		inline: false,
22		html: false,
23		iframe: false,
24		fastIframe: true,
25		photo: false,
26		href: false,
27		title: false,
28		rel: false,
29		opacity: 0.9,
30		preloading: true,
31
32		current: "image {current} of {total}",
33		previous: "previous",
34		next: "next",
35		close: "close",
36		xhrError: "This content failed to load.",
37		imgError: "This image failed to load.",
38
39		open: false,
40		returnFocus: true,
41		reposition: true,
42		loop: true,
43		slideshow: false,
44		slideshowAuto: true,
45		slideshowSpeed: 2500,
46		slideshowStart: "start slideshow",
47		slideshowStop: "stop slideshow",
48		onOpen: false,
49		onLoad: false,
50		onComplete: false,
51		onCleanup: false,
52		onClosed: false,
53		overlayClose: true,
54		escKey: true,
55		arrowKey: true,
56		top: false,
57		bottom: false,
58		left: false,
59		right: false,
60		fixed: false,
61		data: undefined
62	},
63	
64	// Abstracting the HTML and event identifiers for easy rebranding
65	colorbox = 'colorbox',
66	prefix = 'cbox',
67	boxElement = prefix + 'Element',
68	
69	// Events
70	event_open = prefix + '_open',
71	event_load = prefix + '_load',
72	event_complete = prefix + '_complete',
73	event_cleanup = prefix + '_cleanup',
74	event_closed = prefix + '_closed',
75	event_purge = prefix + '_purge',
76	
77	// Special Handling for IE
78	isIE = !$.support.opacity && !$.support.style, // IE7 & IE8
79	isIE6 = isIE && !window.XMLHttpRequest, // IE6
80	event_ie6 = prefix + '_IE6',
81
82	// Cached jQuery Object Variables
83	$overlay,
84	$box,
85	$wrap,
86	$content,
87	$topBorder,
88	$leftBorder,
89	$rightBorder,
90	$bottomBorder,
91	$related,
92	$window,
93	$loaded,
94	$loadingBay,
95	$loadingOverlay,
96	$title,
97	$current,
98	$slideshow,
99	$next,
100	$prev,
101	$close,
102	$groupControls,
103	
104	// Variables for cached values or use across multiple functions
105	settings,
106	interfaceHeight,
107	interfaceWidth,
108	loadedHeight,
109	loadedWidth,
110	element,
111	index,
112	photo,
113	open,
114	active,
115	closing,
116	loadingTimer,
117	publicMethod,
118	div = "div",
119	init;
120
121	// ****************
122	// HELPER FUNCTIONS
123	// ****************
124	
125	// Convience function for creating new jQuery objects
126	function $tag(tag, id, css) {
127		var element = document.createElement(tag);
128
129		if (id) {
130			element.id = prefix + id;
131		}
132
133		if (css) {
134			element.style.cssText = css;
135		}
136
137		return $(element);
138	}
139
140	// Determine the next and previous members in a group.
141	function getIndex(increment) {
142		var
143		max = $related.length,
144		newIndex = (index + increment) % max;
145		
146		return (newIndex < 0) ? max + newIndex : newIndex;
147	}
148
149	// Convert '%' and 'px' values to integers
150	function setSize(size, dimension) {
151		return Math.round((/%/.test(size) ? ((dimension === 'x' ? winWidth() : winHeight()) / 100) : 1) * parseInt(size, 10));
152	}
153	
154	// Checks an href to see if it is a photo.
155	// There is a force photo option (photo: true) for hrefs that cannot be matched by this regex.
156	function isImage(url) {
157		return settings.photo || /\.(gif|png|jp(e|g|eg)|bmp|ico)((#|\?).*)?$/i.test(url);
158	}
159	
160	function winWidth() {
161		// $(window).width() is incorrect for some mobile browsers, but
162		// window.innerWidth is unsupported in IE8 and lower.
163		return window.innerWidth || $window.width();
164	}
165
166	function winHeight() {
167		return window.innerHeight || $window.height();
168	}
169
170	// Assigns function results to their respective properties
171	function makeSettings() {
172		var i,
173			data = $.data(element, colorbox);
174		
175		if (data == null) {
176			settings = $.extend({}, defaults);
177			if (console && console.log) {
178				console.log('Error: cboxElement missing settings object');
179			}
180		} else {
181			settings = $.extend({}, data);
182		}
183		
184		for (i in settings) {
185			if ($.isFunction(settings[i]) && i.slice(0, 2) !== 'on') { // checks to make sure the function isn't one of the callbacks, they will be handled at the appropriate time.
186				settings[i] = settings[i].call(element);
187			}
188		}
189		
190		settings.rel = settings.rel || element.rel || 'nofollow';
191		settings.href = settings.href || $(element).attr('href');
192		settings.title = settings.title || element.title;
193		
194		if (typeof settings.href === "string") {
195			settings.href = $.trim(settings.href);
196		}
197	}
198
199	function trigger(event, callback) {
200		$('body').trigger(event);
201		if (callback) {
202			callback.call(element);
203		}
204	}
205
206	// Slideshow functionality
207	function slideshow() {
208		var
209		timeOut,
210		className = prefix + "Slideshow_",
211		click = "click." + prefix,
212		start,
213		stop,
214		clear;
215		
216		if (settings.slideshow && $related[1]) {
217			start = function () {
218				$slideshow
219					.text(settings.slideshowStop)
220					.unbind(click)
221					.bind(event_complete, function () {
222						if (settings.loop || $related[index + 1]) {
223							timeOut = setTimeout(publicMethod.next, settings.slideshowSpeed);
224						}
225					})
226					.bind(event_load, function () {
227						clearTimeout(timeOut);
228					})
229					.one(click + ' ' + event_cleanup, stop);
230				$box.removeClass(className + "off").addClass(className + "on");
231				timeOut = setTimeout(publicMethod.next, settings.slideshowSpeed);
232			};
233			
234			stop = function () {
235				clearTimeout(timeOut);
236				$slideshow
237					.text(settings.slideshowStart)
238					.unbind([event_complete, event_load, event_cleanup, click].join(' '))
239					.one(click, function () {
240						publicMethod.next();
241						start();
242					});
243				$box.removeClass(className + "on").addClass(className + "off");
244			};
245			
246			if (settings.slideshowAuto) {
247				start();
248			} else {
249				stop();
250			}
251		} else {
252			$box.removeClass(className + "off " + className + "on");
253		}
254	}
255
256	function launch(target) {
257		if (!closing) {
258			
259			element = target;
260			
261			makeSettings();
262			
263			$related = $(element);
264			
265			index = 0;
266			
267			if (settings.rel !== 'nofollow') {
268				$related = $('.' + boxElement).filter(function () {
269					var data = $.data(this, colorbox),
270						relRelated;
271
272					if (data) {
273						relRelated =  data.rel || this.rel;
274					}
275					
276					return (relRelated === settings.rel);
277				});
278				index = $related.index(element);
279				
280				// Check direct calls to ColorBox.
281				if (index === -1) {
282					$related = $related.add(element);
283					index = $related.length - 1;
284				}
285			}
286			
287			if (!open) {
288				open = active = true; // Prevents the page-change action from queuing up if the visitor holds down the left or right keys.
289				
290				$box.show();
291				
292				if (settings.returnFocus) {
293					$(element).blur().one(event_closed, function () {
294						$(this).focus();
295					});
296				}
297				
298				// +settings.opacity avoids a problem in IE when using non-zero-prefixed-string-values, like '.5'
299				$overlay.css({"opacity": +settings.opacity, "cursor": settings.overlayClose ? "pointer" : "auto"}).show();
300				
301				// Opens inital empty ColorBox prior to content being loaded.
302				settings.w = setSize(settings.initialWidth, 'x');
303				settings.h = setSize(settings.initialHeight, 'y');
304				publicMethod.position();
305				
306				if (isIE6) {
307					$window.bind('resize.' + event_ie6 + ' scroll.' + event_ie6, function () {
308						$overlay.css({width: winWidth(), height: winHeight(), top: $window.scrollTop(), left: $window.scrollLeft()});
309					}).trigger('resize.' + event_ie6);
310				}
311				
312				trigger(event_open, settings.onOpen);
313				
314				$groupControls.add($title).hide();
315				
316				$close.html(settings.close).show();
317			}
318			
319			publicMethod.load(true);
320		}
321	}
322
323	// ColorBox's markup needs to be added to the DOM prior to being called
324	// so that the browser will go ahead and load the CSS background images.
325	function appendHTML() {
326		if (!$box && document.body) {
327			init = false;
328
329			$window = $(window);
330			$box = $tag(div).attr({id: colorbox, 'class': isIE ? prefix + (isIE6 ? 'IE6' : 'IE') : ''}).hide();
331			$overlay = $tag(div, "Overlay", isIE6 ? 'position:absolute' : '').hide();
332			$loadingOverlay = $tag(div, "LoadingOverlay").add($tag(div, "LoadingGraphic"));
333			$wrap = $tag(div, "Wrapper");
334			$content = $tag(div, "Content").append(
335				$loaded = $tag(div, "LoadedContent", 'width:0; height:0; overflow:hidden'),
336				$title = $tag(div, "Title"),
337				$current = $tag(div, "Current"),
338				$next = $tag(div, "Next"),
339				$prev = $tag(div, "Previous"),
340				$slideshow = $tag(div, "Slideshow").bind(event_open, slideshow),
341				$close = $tag(div, "Close")
342			);
343			
344			$wrap.append( // The 3x3 Grid that makes up ColorBox
345				$tag(div).append(
346					$tag(div, "TopLeft"),
347					$topBorder = $tag(div, "TopCenter"),
348					$tag(div, "TopRight")
349				),
350				$tag(div, false, 'clear:left').append(
351					$leftBorder = $tag(div, "MiddleLeft"),
352					$content,
353					$rightBorder = $tag(div, "MiddleRight")
354				),
355				$tag(div, false, 'clear:left').append(
356					$tag(div, "BottomLeft"),
357					$bottomBorder = $tag(div, "BottomCenter"),
358					$tag(div, "BottomRight")
359				)
360			).find('div div').css({'float': 'left'});
361			
362			$loadingBay = $tag(div, false, 'position:absolute; width:9999px; visibility:hidden; display:none');
363			
364			$groupControls = $next.add($prev).add($current).add($slideshow);
365
366			$(document.body).append($overlay, $box.append($wrap, $loadingBay));
367		}
368	}
369
370	// Add ColorBox's event bindings
371	function addBindings() {
372		if ($box) {
373			if (!init) {
374				init = true;
375
376				// Cache values needed for size calculations
377				interfaceHeight = $topBorder.height() + $bottomBorder.height() + $content.outerHeight(true) - $content.height();//Subtraction needed for IE6
378				interfaceWidth = $leftBorder.width() + $rightBorder.width() + $content.outerWidth(true) - $content.width();
379				loadedHeight = $loaded.outerHeight(true);
380				loadedWidth = $loaded.outerWidth(true);
381				
382				// Setting padding to remove the need to do size conversions during the animation step.
383				$box.css({"padding-bottom": interfaceHeight, "padding-right": interfaceWidth});
384
385				// Anonymous functions here keep the public method from being cached, thereby allowing them to be redefined on the fly.
386				$next.click(function () {
387					publicMethod.next();
388				});
389				$prev.click(function () {
390					publicMethod.prev();
391				});
392				$close.click(function () {
393					publicMethod.close();
394				});
395				$overlay.click(function () {
396					if (settings.overlayClose) {
397						publicMethod.close();
398					}
399				});
400				
401				// Key Bindings
402				$(document).bind('keydown.' + prefix, function (e) {
403					var key = e.keyCode;
404					if (open && settings.escKey && key === 27) {
405						e.preventDefault();
406						publicMethod.close();
407					}
408					if (open && settings.arrowKey && $related[1]) {
409						if (key === 37) {
410							e.preventDefault();
411							$prev.click();
412						} else if (key === 39) {
413							e.preventDefault();
414							$next.click();
415						}
416					}
417				});
418
419				$('.' + boxElement, document).live('click', function (e) {
420					// ignore non-left-mouse-clicks and clicks modified with ctrl / command, shift, or alt.
421					// See: http://jacklmoore.com/notes/click-events/
422					if (!(e.which > 1 || e.shiftKey || e.altKey || e.metaKey)) {
423						e.preventDefault();
424						launch(this);
425					}
426				});
427			}
428			return true;
429		}
430		return false;
431	}
432
433	// Don't do anything if ColorBox already exists.
434	if ($.colorbox) {
435		return;
436	}
437
438	// Append the HTML when the DOM loads
439	$(appendHTML);
440
441
442	// ****************
443	// PUBLIC FUNCTIONS
444	// Usage format: $.fn.colorbox.close();
445	// Usage from within an iframe: parent.$.fn.colorbox.close();
446	// ****************
447	
448	publicMethod = $.fn[colorbox] = $[colorbox] = function (options, callback) {
449		var $this = this;
450		
451		options = options || {};
452		
453		appendHTML();
454
455		if (addBindings()) {
456			if (!$this[0]) {
457				if ($this.selector) { // if a selector was given and it didn't match any elements, go ahead and exit.
458					return $this;
459				}
460				// if no selector was given (ie. $.colorbox()), create a temporary element to work with
461				$this = $('<a/>');
462				options.open = true; // assume an immediate open
463			}
464			
465			if (callback) {
466				options.onComplete = callback;
467			}
468			
469			$this.each(function () {
470				$.data(this, colorbox, $.extend({}, $.data(this, colorbox) || defaults, options));
471			}).addClass(boxElement);
472			
473			if (($.isFunction(options.open) && options.open.call($this)) || options.open) {
474				launch($this[0]);
475			}
476		}
477		
478		return $this;
479	};
480
481	publicMethod.position = function (speed, loadedCallback) {
482		var
483		css,
484		top = 0,
485		left = 0,
486		offset = $box.offset(),
487		scrollTop,
488		scrollLeft;
489		
490		$window.unbind('resize.' + prefix);
491
492		// remove the modal so that it doesn't influence the document width/height
493		$box.css({top: -9e4, left: -9e4});
494
495		scrollTop = $window.scrollTop();
496		scrollLeft = $window.scrollLeft();
497
498		if (settings.fixed && !isIE6) {
499			offset.top -= scrollTop;
500			offset.left -= scrollLeft;
501			$box.css({position: 'fixed'});
502		} else {
503			top = scrollTop;
504			left = scrollLeft;
505			$box.css({position: 'absolute'});
506		}
507
508		// keeps the top and left positions within the browser's viewport.
509		if (settings.right !== false) {
510			left += Math.max(winWidth() - settings.w - loadedWidth - interfaceWidth - setSize(sett
510ings.right, 'x'), 0);
511		} else if (settings.left !== false) {
512			left += setSize(settings.left, 'x');
513		} else {
514			left += Math.round(Math.max(winWidth() - settings.w - loadedWidth - interfaceWidth, 0) / 2);
515		}
516		
517		if (settings.bottom !== false) {
518			top += Math.max(winHeight() - settings.h - loadedHeight - interfaceHeight - setSize(settings.bottom, 'y'), 0);
519		} else if (settings.top !== false) {
520			top += setSize(settings.top, 'y');
521		} else {
522			top += Math.round(Math.max(winHeight() - settings.h - loadedHeight - interfaceHeight, 0) / 2);
523		}
524
525		$box.css({top: offset.top, left: offset.left});
526
527		// setting the speed to 0 to reduce the delay between same-sized content.
528		speed = ($box.width() === settings.w + loadedWidth && $box.height() === settings.h + loadedHeight) ? 0 : speed || 0;
529		
530		// this gives the wrapper plenty of breathing room so it's floated contents can move around smoothly,
531		// but it has to be shrank down around the size of div#colorbox when it's done.  If not,
532		// it can invoke an obscure IE bug when using iframes.
533		$wrap[0].style.width = $wrap[0].style.height = "9999px";
534		
535		function modalDimensions(that) {
536			$topBorder[0].style.width = $bottomBorder[0].style.width = $content[0].style.width = that.style.width;
537			$content[0].style.height = $leftBorder[0].style.height = $rightBorder[0].style.height = that.style.height;
538		}
539
540		css = {width: settings.w + loadedWidth, height: settings.h + loadedHeight, top: top, left: left};
541		if(speed===0){ // temporary workaround to side-step jQuery-UI 1.8 bug (http://bugs.jquery.com/ticket/12273)
542			$box.css(css);
543		}
544
545		$box.dequeue().animate(css, {
546			duration: speed,
547			complete: function () {
548				modalDimensions(this);
549				
550				active = false;
551				
552				// shrink the wrapper down to exactly the size of colorbox to avoid a bug in IE's iframe implementation.
553				$wrap[0].style.width = (settings.w + loadedWidth + interfaceWidth) + "px";
554				$wrap[0].style.height = (settings.h + loadedHeight + interfaceHeight) + "px";
555				
556				if (settings.reposition) {
557					setTimeout(function () {  // small delay before binding onresize due to an IE8 bug.
558						$window.bind('resize.' + prefix, publicMethod.position);
559					}, 1);
560				}
561
562				if (loadedCallback) {
563					loadedCallback();
564				}
565			},
566			step: function () {
567				modalDimensions(this);
568			}
569		}); 
570	};
571
572	publicMethod.resize = function (options) {
573		if (open) {
574			options = options || {};
575			
576			if (options.width) {
577				settings.w = setSize(options.width, 'x') - loadedWidth - interfaceWidth;
578			}
579			if (options.innerWidth) {
580				settings.w = setSize(options.innerWidth, 'x');
581			}
582			$loaded.css({width: settings.w});
583			
584			if (options.height) {
585				settings.h = setSize(options.height, 'y') - loadedHeight - interfaceHeight;
586			}
587			if (options.innerHeight) {
588				settings.h = setSize(options.innerHeight, 'y');
589			}
590			if (!options.innerHeight && !options.height) {
591				$loaded.css({height: "auto"});
592				settings.h = $loaded.height();
593			}
594			$loaded.css({height: settings.h});
595			
596			publicMethod.position(settings.transition === "none" ? 0 : settings.speed);
597		}
598	};
599
600	publicMethod.prep = function (object) {
601		if (!open) {
602			return;
603		}
604		
605		var callback, speed = settings.transition === "none" ? 0 : settings.speed;
606		
607		$loaded.remove();
608		$loaded = $tag(div, 'LoadedContent').append(object);
609		
610		function getWidth() {
611			settings.w = settings.w || $loaded.width();
612			settings.w = settings.mw && settings.mw < settings.w ? settings.mw : settings.w;
613			return settings.w;
614		}
615		function getHeight() {
616			settings.h = settings.h || $loaded.height();
617			settings.h = settings.mh && settings.mh < settings.h ? settings.mh : settings.h;
618			return settings.h;
619		}
620		
621		$loaded.hide()
622		.appendTo($loadingBay.show())// content has to be appended to the DOM for accurate size calculations.
623		.css({width: getWidth(), overflow: settings.scrolling ? 'auto' : 'hidden'})
624		.css({height: getHeight()})// sets the height independently from the width in case the new width influences the value of height.
625		.prependTo($content);
626		
627		$loadingBay.hide();
628		
629		// floating the IMG removes the bottom line-height and fixed a problem where IE miscalculates the width of the parent element as 100% of the document width.
630		//$(photo).css({'float': 'none', marginLeft: 'auto', marginRight: 'auto'});
631		
632		$(photo).css({'float': 'none'});
633		
634		// Hides SELECT elements in IE6 because they would otherwise sit on top of the overlay.
635		if (isIE6) {
636			$('select').not($box.find('select')).filter(function () {
637				return this.style.visibility !== 'hidden';
638			}).css({'visibility': 'hidden'}).one(event_cleanup, function () {
639				this.style.visibility = 'inherit';
640			});
641		}
642		
643		callback = function () {
644			var preload,
645				i,
646				total = $related.length,
647				iframe,
648				frameBorder = 'frameBorder',
649				allowTransparency = 'allowTransparency',
650				complete,
651				src,
652				img,
653				data;
654			
655			if (!open) {
656				return;
657			}
658			
659			function removeFilter() {
660				if (isIE) {
661					$box[0].style.removeAttribute('filter');
662				}
663			}
664			
665			complete = function () {
666				clearTimeout(loadingTimer);
667				// Detaching forces Andriod stock browser to redraw the area underneat the loading overlay.  Hiding alone isn't enough.
668				$loadingOverlay.detach().hide();
669				trigger(event_complete, settings.onComplete);
670			};
671			
672			if (isIE) {
673				//This fadeIn helps the bicubic resampling to kick-in.
674				if (photo) {
675					$loaded.fadeIn(100);
676				}
677			}
678			
679			$title.html(settings.title).add($loaded).show();
680			
681			if (total > 1) { // handle grouping
682				if (typeof settings.current === "string") {
683					$current.html(settings.current.replace('{current}', index + 1).replace('{total}', total)).show();
684				}
685				
686				$next[(settings.loop || index < total - 1) ? "show" : "hide"]().html(sett
686ings.next);
687				$prev[(settings.loop || index) ? "show" : "hide"]().html(settings.previous);
688				
689				if (settings.slideshow) {
690					$slideshow.show();
691				}
692				
693				// Preloads images within a rel group
694				if (settings.preloading) {
695					preload = [
696						getIndex(-1),
697						getIndex(1)
698					];
699					while (i = $related[preload.pop()]) {
700						data = $.data(i, colorbox);
701						
702						if (data && data.href) {
703							src = data.href;
704							if ($.isFunction(src)) {
705								src = src.call(i);
706							}
707						} else {
708							src = i.href;
709						}
710
711						if (isImage(src)) {
712							img = new Image();
713							img.src = src;
714						}
715					}
716				}
717			} else {
718				$groupControls.hide();
719			}
720			
721			if (settings.iframe) {
722				iframe = $tag('iframe')[0];
723				
724				if (frameBorder in iframe) {
725					iframe[frameBorder] = 0;
726				}
727				if (allowTransparency in iframe) {
728					iframe[allowTransparency] = "true";
729				}
730				// give the iframe a unique name to prevent caching
731				iframe.name = prefix + (+new Date());
732				if (settings.fastIframe) {
733					complete();
734				} else {
735					$(iframe).one('load', complete);
736				}
737				iframe.src = settings.href;
738				if (!settings.scrolling) {
739					iframe.scrolling = "no";
740				}
741				$(iframe).addClass(prefix + 'Iframe').appendTo($loaded).one(event_purge, function () {
742					iframe.src = "//about:blank";
743				});
744			} else {
745				complete();
746			}
747			
748			if (settings.transition === 'fade') {
749				$box.fadeTo(speed, 1, removeFilter);
750			} else {
751				removeFilter();
752			}
753		};
754		
755		if (settings.transition === 'fade') {
756			$box.fadeTo(speed, 0, function () {
757				publicMethod.position(0, callback);
758			});
759		} else {
760			publicMethod.position(speed, callback);
761		}
762	};
763
764	publicMethod.load = function (launched) {
765		var href, setResize, prep = publicMethod.prep;
766		
767		active = true;
768		
769		photo = false;
770		
771		element = $related[index];
772		
773		if (!launched) {
774			makeSettings();
775		}
776		
777		trigger(event_purge);
778		
779		trigger(event_load, settings.onLoad);
780		
781		settings.h = settings.height ?
782				setSize(settings.height, 'y') - loadedHeight - interfaceHeight :
783				settings.innerHeight && setSize(settings.innerHeight, 'y');
784		
785		settings.w = settings.width ?
786				setSize(settings.width, 'x') - loadedWidth - interfaceWidth :
787				settings.innerWidth && setSize(settings.innerWidth, 'x');
788		
789		// Sets the minimum dimensions for use in image scaling
790		settings.mw = settings.w;
791		settings.mh = settings.h;
792		
793		// Re-evaluate the minimum width and height based on maxWidth and maxHeight values.
794		// If the width or height exceed the maxWidth or maxHeight, use the maximum values instead.
795		if (settings.maxWidth) {
796			settings.mw = setSize(settings.maxWidth, 'x') - loadedWidth - interfaceWidth;
797			settings.mw = settings.w && settings.w < settings.mw ? settings.w : settings.mw;
798		}
799		if (settings.maxHeight) {
800			settings.mh = setSize(settings.maxHeight, 'y') - loadedHeight - interfaceHeight;
801			settings.mh = settings.h && settings.h < settings.mh ? settings.h : settings.mh;
802		}
803		
804		href = settings.href;
805		
806		loadingTimer = setTimeout(function () {
807			$loadingOverlay.show().appendTo($content);
808		}, 100);
809		
810		if (settings.inline) {
811			// Inserts an empty placeholder where inline content is being pulled from.
812			// An event is bound to put inline content back when ColorBox closes or loads new content.
813			var tmp = $tag(div).hide().insertBefore($(href)[0]);
814			$('body').one(event_purge, function () {
815				tmp.replaceWith($loaded.children());
816			});
817			prep($(href));
818		} else if (settings.iframe) {
819			// IFrame element won't be added to the DOM until it is ready to be displayed,
820			// to avoid problems with DOM-ready JS that might be trying to run in that iframe.
821			prep(" ");
822		} else if (settings.html) {
823			prep(settings.html);
824		} else if (isImage(href)) {
825			$(photo = new Image())
826			.addClass(prefix + 'Photo')
827			.error(function () {
828				settings.title = false;
829				prep($tag(div, 'Error').html(settings.imgError));
830			})
831			.load(function () {
832				var percent;
833				photo.onload = null; //stops animated gifs from firing the onload repeatedly.
834				
835				if (settings.scalePhotos) {
836					setResize = function () {
837						photo.height -= photo.height * percent;
838						photo.width -= photo.width * percent;
839					};
840					if (settings.mw && photo.width > settings.mw) {
841						percent = (photo.width - settings.mw) / photo.width;
842						setResize();
843					}
844					if (settings.mh && photo.height > settings.mh) {
845						percent = (photo.height - settings.mh) / photo.height;
846						setResize();
847					}
848				}
849				
850				if (settings.h) {
851					photo.style.marginTop = Math.max(settings.h - photo.height, 0) / 2 + 'px';
852				}
853				
854				if ($related[1] && (settings.loop || $related[index + 1])) {
855					photo.style.cursor = 'pointer';
856					photo.onclick = function () {
857						publicMethod.next();
858					};
859				}
860				
861				if (isIE) {
862					photo.style.msInterpolationMode = 'bicubic';
863				}
864				
865				setTimeout(function () { // A pause because Chrome will sometimes report a 0 by 0 size otherwise.
866					prep(photo);
867				}, 1);
868			});
869			
870			setTimeout(function () { // A pause because Opera 10.6+ will sometimes not run the onload function otherwise.
871				photo.src = href;
872			}, 1);
873		} else if (href) {
874			$loadingBay.load(href, settings.data, function (data, status, xhr) {
875				prep(status === 'error' ? $tag(div, 'Error').html(settings.xhrError) : $(this).contents());
876			});
877		}
878	};
879		
880	// Navigates to the next page/image in a set.
881	publicMethod.next = function () {
882		if (!active && $related[1] && (settings.loop || $related[index + 1])) {
883			index = getIndex(1);
884			publicMethod.load();
885		}
886	};
887	
888	publicMethod.prev = function () {
889		if (!active && $related[1] && (settings.loop || index)) {
890			index = getIndex(-1);
891			publicMethod.load();
892		}
893	};
894
895	// Note: to use this within an iframe use the following format: parent.$.fn.colorbox.close();
896	publicMethod.close = function () {
897		if (open && !closing) {
898			
899			closing = true;
900			
901			open = false;
902			
903			trigger(event_cleanup, settings.onCleanup);
904			
905			$window.unbind('.' + prefix + ' .' + event_ie6);
906			
907			$overlay.fadeTo(200, 0);
908			
909			$box.stop().fadeTo(300, 0, function () {
910			
911				$box.add($overlay).css({'opacity': 1, cursor: 'auto'}).hide();
912				
913				trigger(event_purge);
914				
915				$loaded.remove();
916				
917				setTimeout(function () {
918					closing = false;
919					trigger(event_closed, settings.onClosed);
920				}, 1);
921			});
922		}
923	};
924
925	// Removes changes ColorBox made to the document, but does not remove the plugin
926	// from jQuery.
927	publicMethod.remove = function () {
928		$([]).add($box).add($overlay).remove();
929		$box = null;
930		$('.' + boxElement)
931			.removeData(colorbox)
932			.removeClass(boxElement)
933			.die();
934	};
935
936	// A method for fetching the current element ColorBox is referencing.
937	// returns a jQuery object.
938	publicMethod.element = function () {
939		return $(element);
940	};
941
942	publicMethod.settings = defaults;
943
944}(jQuery, document, this));

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.