PageSourceSearch

https://mci.gov.pk/assets/js/jquery.fancybox.js

js mci.gov.pk collected 2026-10-03 00:19:47 UTC 52,858 bytes, 2,022 lines download raw bytes

vendor: 7,677 bytes, lines 1-280
1/*!�
2 * fancyBox - jQuery Plugin�
3 * version: 2.1.5 (Fri, 14 Jun 2013)�
4 * @requires jQuery v1.6 or later�
5 *�
6 * Examples at http://fancyapps.com/fancybox/�
7 * License: www.fancyapps.com/fancybox/#license�
8 *�
9 * Copyright 2012 Janis Skarnelis - [email protected]�
10 *�
11 */�
12�
13(function (window, document, $, undefined) {�
14	"use strict";�
15�
16	var H = $("html"),�
17		W = $(window),�
18		D = $(document),�
19		F = $.fancybox = function () {�
20			F.open.apply( this, arguments );�
21		},�
22		IE =  navigator.userAgent.match(/msie/i),�
23		didUpdate	= null,�
24		isTouch		= document.createTouch !== undefined,�
25�
26		isQuery	= function(obj) {�
27			return obj && obj.hasOwnProperty && obj instanceof $;�
28		},�
29		isString = function(str) {�
30			return str && $.type(str) === "string";�
31		},�
32		isPercentage = function(str) {�
33			return isString(str) && str.indexOf('%') > 0;�
34		},�
35		isScrollable = function(el) {�
36			return (el && !(el.style.overflow && el.style.overflow === 'hidden') && ((el.clientWidth && el.scrollWidth > el.clientWidth) || (el.clientHeight && el.scrollHeight > el.clientHeight)));�
37		},�
38		getScalar = function(orig, dim) {�
39			var value = parseInt(orig, 10) || 0;�
40�
41			if (dim && isPercentage(orig)) {�
42				value = F.getViewport()[ dim ] / 100 * value;�
43			}�
44�
45			return Math.ceil(value);�
46		},�
47		getValue = function(value, dim) {�
48			return getScalar(value, dim) + 'px';�
49		};�
50�
51	$.extend(F, {�
52		// The current version of fancyBox�
53		version: '2.1.5',�
54�
55		defaults: {�
56			padding : 15,�
57			margin  : 20,�
58�
59			width     : 750,�
60			height    : 433,�
61			minWidth  : 100,�
62			minHeight : 100,�
63			maxWidth  : 9999,�
64			maxHeight : 9999,�
65			pixelRatio: 1, // Set to 2 for retina display support�
66�
67			autoSize   : true,�
68			autoHeight : false,�
69			autoWidth  : false,�
70�
71			autoResize  : true,�
72			autoCenter  : !isTouch,�
73			fitToView   : true,�
74			aspectRatio : false,�
75			topRatio    : 0.5,�
76			leftRatio   : 0.5,�
77�
78			scrolling : 'auto', // 'auto', 'yes' or 'no'�
79			wrapCSS   : '',�
80�
81			arrows     : true,�
82			closeBtn   : true,�
83			closeClick : false,�
84			nextClick  : false,�
85			mouseWheel : true,�
86			autoPlay   : false,�
87			playSpeed  : 3000,�
88			preload    : 3,�
89			modal      : false,�
90			loop       : true,�
91�
92			ajax  : {�
93				dataType : 'html',�
94				headers  : { 'X-fancyBox': true }�
95			},�
96			iframe : {�
97				scrolling : 'auto',�
98				preload   : true�
99			},�
100			swf : {�
101				wmode: 'transparent',�
102				allowfullscreen   : 'true',�
103				allowscriptaccess : 'always'�
104			},�
105�
106			keys  : {�
107				next : {�
108					13 : 'left', // enter�
109					34 : 'up',   // page down�
110					39 : 'left', // right arrow�
111					40 : 'up'    // down arrow�
112				},�
113				prev : {�
114					8  : 'right',  // backspace�
115					33 : 'down',   // page up�
116					37 : 'right',  // left arrow�
117					38 : 'down'    // up arrow�
118				},�
119				close  : [27], // escape key�
120				play   : [32], // space - start/stop slideshow�
121				toggle : [70]  // letter "f" - toggle fullscreen�
122			},�
123�
124			direction : {�
125				next : 'left',�
126				prev : 'right'�
127			},�
128�
129			scrollOutside  : true,�
130�
131			// Override some properties�
132			index   : 0,�
133			type    : null,�
134			href    : null,�
135			content : null,�
136			title   : null,�
137�
138			// HTML templates�
139			tpl: {�
140				wrap     : '<div class="fancybox-wrap" tabIndex="-1"><div class="fancybox-skin"><div class="fancybox-outer"><div class="fancybox-inner"></div></div></div></div>',�
141				image    : '<img class="fancybox-image" src="{href}" alt="" />',�
142				iframe   : '<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen' + (IE ? ' allowtransparency="true"' : '') + '></iframe>',�
143				error    : '<p class="fancybox-error">The requested content cannot be loaded.<br/>Please try again later.</p>',�
144				closeBtn : '<a title="Close" onclick="close_popup()" class="fancybox-item fancybox-close" href="javascript:;"></a>',�
145				next     : '<a title="Next" class="fancybox-nav fancybox-next" href="javascript:;"><span></span></a>',�
146				prev     : '<a title="Previous" class="fancybox-nav fancybox-prev" href="javascript:;"><span></span></a>'�
147			},�
148�
149			// Properties for each animation type�
150			// Opening fancyBox�
151			openEffect  : 'fade', // 'elastic', 'fade' or 'none'�
152			openSpeed   : 250,�
153			openEasing  : 'swing',�
154			openOpacity : true,�
155			openMethod  : 'zoomIn',�
156�
157			// Closing fancyBox�
158			closeEffect  : 'fade', // 'elastic', 'fade' or 'none'�
159			closeSpeed   : 250,�
160			closeEasing  : 'swing',�
161			closeOpacity : true,�
162			closeMethod  : 'zoomOut',�
163�
164			// Changing next gallery item�
165			nextEffect : 'elastic', // 'elastic', 'fade' or 'none'�
166			nextSpeed  : 250,�
167			nextEasing : 'swing',�
168			nextMethod : 'changeIn',�
169�
170			// Changing previous gallery item�
171			prevEffect : 'elastic', // 'elastic', 'fade' or 'none'�
172			prevSpeed  : 250,�
173			prevEasing : 'swing',�
174			prevMethod : 'changeOut',�
175�
176			// Enable default helpers�
177			helpers : {�
178				overlay : true,�
179				title   : true�
180			},�
181�
182			// Callbacks�
183			onCancel     : $.noop, // If canceling�
184			beforeLoad   : $.noop, // Before loading�
185			afterLoad    : $.noop, // After loading�
186			beforeShow   : $.noop, // Before changing in current item�
187			afterShow    : $.noop, // After opening�
188			beforeChange : $.noop, // Before changing gallery item�
189			beforeClose  : $.noop, // Before closing�
190			afterClose   : $.noop  // After closing�
191		},�
192�
193		//Current state�
194		group    : {}, // Selected group�
195		opts     : {}, // Group options�
196		previous : null,  // Previous element�
197		coming   : null,  // Element being loaded�
198		current  : null,  // Currently loaded element�
199		isActive : false, // Is activated�
200		isOpen   : false, // Is currently open�
201		isOpened : false, // Have been fully opened at least once�
202�
203		wrap  : null,�
204		skin  : null,�
205		outer : null,�
206		inner : null,�
207�
208		player : {�
209			timer    : null,�
210			isActive : false�
211		},�
212�
213		// Loaders�
214		ajaxLoad   : null,�
215		imgPreload : null,�
216�
217		// Some collections�
218		transitions : {},�
219		helpers     : {},�
220�
221		/*�
222		 *	Static methods�
223		 */�
224�
225		open: function (group, opts) {�
226			if (!group) {�
227				return;�
228			}�
229�
230			if (!$.isPlainObject(opts)) {�
231				opts = {};�
232			}�
233�
234			// Close if already active�
235			if (false === F.close(true)) {�
236				return;�
237			}�
238�
239			// Normalize group�
240			if (!$.isArray(group)) {�
241				group = isQuery(group) ? $(group).get() : [group];�
242			}�
243�
244			// Recheck if the type of each element is `object` and set content type (image, ajax, etc)�
245			$.each(group, function(i, element) {�
246				var obj = {},�
247					href,�
248					title,�
249					content,�
250					type,�
251					rez,�
252					hrefParts,�
253					selector;�
254�
255				if ($.type(element) === "object") {�
256					// Check if is DOM element�
257					if (element.nodeType) {�
258						element = $(element);�
259					}�
260�
261					if (isQuery(element)) {�
262						obj = {�
263							href    : element.data('fancybox-href') || element.attr('href'),�
264							title   : element.data('fancybox-title') || element.attr('title'),�
265							isDom   : true,�
266							element : element�
267						};�
268�
269						if ($.metadata) {�
270							$.extend(true, obj, element.metadata());�
271						}�
272�
273					} else {�
274						obj = element;�
275					}�
276				}�
277�
278				href  = opts.href  || obj.href || (isString(element) ? element : null);�
279				title = opts.title !== undefined ? opts.title : obj.title || '';�
280�
vendor: 41,764 bytes, lines 281-1894
281				content = opts.content || obj.content;�
282				type    = content ? 'html' : (opts.type  || obj.type);�
283�
284				if (!type && obj.isDom) {�
285					type = element.data('fancybox-type');�
286�
287					if (!type) {�
288						rez  = element.prop('class').match(/fancybox\.(\w+)/);�
289						type = rez ? rez[1] : null;�
290					}�
291				}�
292�
293				if (isString(href)) {�
294					// Try to guess the content type�
295					if (!type) {�
296						if (F.isImage(href)) {�
297							type = 'image';�
298�
299						} else if (F.isSWF(href)) {�
300							type = 'swf';�
301�
302						} else if (href.charAt(0) === '#') {�
303							type = 'inline';�
304�
305						} else if (isString(element)) {�
306							type    = 'html';�
307							content = element;�
308						}�
309					}�
310�
311					// Split url into two pieces with source url and content selector, e.g,�
312					// "/mypage.html #my_id" will load "/mypage.html" and display element having id "my_id"�
313					if (type === 'ajax') {�
314						hrefParts = href.split(/\s+/, 2);�
315						href      = hrefParts.shift();�
316						selector  = hrefParts.shift();�
317					}�
318				}�
319�
320				if (!content) {�
321					if (type === 'inline') {�
322						if (href) {�
323							content = $( isString(href) ? href.replace(/.*(?=#[^\s]+$)/, '') : href ); //strip for ie7�
324�
325						} else if (obj.isDom) {�
326							content = element;�
327						}�
328�
329					} else if (type === 'html') {�
330						content = href;�
331�
332					} else if (!type && !href && obj.isDom) {�
333						type    = 'inline';�
334						content = element;�
335					}�
336				}�
337�
338				$.extend(obj, {�
339					href     : href,�
340					type     : type,�
341					content  : content,�
342					title    : title,�
343					selector : selector�
344				});�
345�
346				group[ i ] = obj;�
347			});�
348�
349			// Extend the defaults�
350			F.opts = $.extend(true, {}, F.defaults, opts);�
351�
352			// All options are merged recursive except keys�
353			if (opts.keys !== undefined) {�
354				F.opts.keys = opts.keys ? $.extend({}, F.defaults.keys, opts.keys) : false;�
355			}�
356�
357			F.group = group;�
358�
359			return F._start(F.opts.index);�
360		},�
361�
362		// Cancel image loading or abort ajax request�
363		cancel: function () {�
364			var coming = F.coming;�
365�
366			if (!coming || false === F.trigger('onCancel')) {�
367				return;�
368			}�
369�
370			F.hideLoading();�
371�
372			if (F.ajaxLoad) {�
373				F.ajaxLoad.abort();�
374			}�
375�
376			F.ajaxLoad = null;�
377�
378			if (F.imgPreload) {�
379				F.imgPreload.onload = F.imgPreload.onerror = null;�
380			}�
381�
382			if (coming.wrap) {�
383				coming.wrap.stop(true, true).trigger('onReset').remove();�
384			}�
385�
386			F.coming = null;�
387�
388			// If the first item has been canceled, then clear everything�
389			if (!F.current) {�
390				F._afterZoomOut( coming );�
391			}�
392		},�
393�
394		// Start closing animation if is open; remove immediately if opening/closing�
395		close: function (event) {�
396			F.cancel();�
397�
398			if (false === F.trigger('beforeClose')) {�
399				return;�
400			}�
401�
402			F.unbindEvents();�
403�
404			if (!F.isActive) {�
405				return;�
406			}�
407�
408			if (!F.isOpen || event === true) {�
409				$('.fancybox-wrap').stop(true).trigger('onReset').remove();�
410�
411				F._afterZoomOut();�
412�
413			} else {�
414				F.isOpen = F.isOpened = false;�
415				F.isClosing = true;�
416�
417				$('.fancybox-item, .fancybox-nav').remove();�
418�
419				F.wrap.stop(true, true).removeClass('fancybox-opened');�
420�
421				F.transitions[ F.current.closeMethod ]();�
422			}�
423		},�
424�
425		// Manage slideshow:�
426		//   $.fancybox.play(); - toggle slideshow�
427		//   $.fancybox.play( true ); - start�
428		//   $.fancybox.play( false ); - stop�
429		play: function ( action ) {�
430			var clear = function () {�
431					clearTimeout(F.player.timer);�
432				},�
433				set = function () {�
434					clear();�
435�
436					if (F.current && F.player.isActive) {�
437						F.player.timer = setTimeout(F.next, F.current.playSpeed);�
438					}�
439				},�
440				stop = function () {�
441					clear();�
442�
443					D.unbind('.player');�
444�
445					F.player.isActive = false;�
446�
447					F.trigger('onPlayEnd');�
448				},�
449				start = function () {�
450					if (F.current && (F.current.loop || F.current.index < F.group.length - 1)) {�
451						F.player.isActive = true;�
452�
453						D.bind({�
454							'onCancel.player beforeClose.player' : stop,�
455							'onUpdate.player'   : set,�
456							'beforeLoad.player' : clear�
457						});�
458�
459						set();�
460�
461						F.trigger('onPlayStart');�
462					}�
463				};�
464�
465			if (action === true || (!F.player.isActive && action !== false)) {�
466				start();�
467			} else {�
468				stop();�
469			}�
470		},�
471�
472		// Navigate to next gallery item�
473		next: function ( direction ) {�
474			var current = F.current;�
475�
476			if (current) {�
477				if (!isString(direction)) {�
478					direction = current.direction.next;�
479				}�
480�
481				F.jumpto(current.index + 1, direction, 'next');�
482			}�
483		},�
484�
485		// Navigate to previous gallery item�
486		prev: function ( direction ) {�
487			var current = F.current;�
488�
489			if (current) {�
490				if (!isString(direction)) {�
491					direction = current.direction.prev;�
492				}�
493�
494				F.jumpto(current.index - 1, direction, 'prev');�
495			}�
496		},�
497�
498		// Navigate to gallery item by index�
499		jumpto: function ( index, direction, router ) {�
500			var current = F.current;�
501�
502			if (!current) {�
503				return;�
504			}�
505�
506			index = getScalar(index);�
507�
508			F.direction = direction || current.direction[ (index >= current.index ? 'next' : 'prev') ];�
509			F.router    = router || 'jumpto';�
510�
511			if (current.loop) {�
512				if (index < 0) {�
513					index = current.group.length + (index % current.group.length);�
514				}�
515�
516				index = index % current.group.length;�
517			}�
518�
519			if (current.group[ index ] !== undefined) {�
520				F.cancel();�
521�
522				F._start(index);�
523			}�
524		},�
525�
526		// Center inside viewport and toggle position type to fixed or absolute if needed�
527		reposition: function (e, onlyAbsolute) {�
528			var current = F.current,�
529				wrap    = current ? current.wrap : null,�
530				pos;�
531�
532			if (wrap) {�
533				pos = F._getPosition(onlyAbsolute);�
534�
535				if (e && e.type === 'scroll') {�
536					delete pos.position;�
537�
538					wrap.stop(true, true).animate(pos, 200);�
539�
540				} else {�
541					wrap.css(pos);�
542�
543					current.pos = $.extend({}, current.dim, pos);�
544				}�
545			}�
546		},�
547�
548		update: function (e) {�
549			var type = (e && e.type),�
550				anyway = !type || type === 'orientationchange';�
551�
552			if (anyway) {�
553				clearTimeout(didUpdate);�
554�
555				didUpdate = null;�
556			}�
557�
558			if (!F.isOpen || didUpdate) {�
559				return;�
560			}�
561�
562			didUpdate = setTimeout(function() {�
563				var current = F.current;�
564�
565				if (!current || F.isClosing) {�
566					return;�
567				}�
568�
569				F.wrap.removeClass('fancybox-tmp');�
570�
571				if (anyway || type === 'load' || (type === 'resize' && current.autoResize)) {�
572					F._setDimension();�
573				}�
574�
575				if (!(type === 'scroll' && current.canShrink)) {�
576					F.reposition(e);�
577				}�
578�
579				F.trigger('onUpdate');�
580�
581				didUpdate = null;�
582�
583			}, (anyway && !isTouch ? 0 : 300));�
584		},�
585�
586		// Shrink content to fit inside viewport or restore if resized�
587		toggle: function ( action ) {�
588			if (F.isOpen) {�
589				F.current.fitToView = $.type(action) === "boolean" ? action : !F.current.fitToView;�
590�
591				// Help browser to restore document dimensions�
592				if (isTouch) {�
593					F.wrap.removeAttr('style').addClass('fancybox-tmp');�
594�
595					F.trigger('onUpdate');�
596				}�
597�
598				F.update();�
599			}�
600		},�
601�
602		hideLoading: function () {�
603			D.unbind('.loading');�
604�
605			$('#fancybox-loading').remove();�
606		},�
607�
608		showLoading: function () {�
609			var el, viewport;�
610�
611			F.hideLoading();�
612�
613			el = $('<div id="fancybox-loading"><div></div></div>').click(F.cancel).appendTo('body');�
614�
615			// If user will press the escape-button, the request will be canceled�
616			D.bind('keydown.loading', function(e) {�
617				if ((e.which || e.keyCode) === 27) {�
618					e.preventDefault();�
619�
620					F.cancel();�
621				}�
622			});�
623�
624			if (!F.defaults.fixed) {�
625				viewport = F.getViewport();�
626�
627				el.css({�
628					position : 'absolute',�
629					top  : (viewport.h * 0.5) + viewport.y,�
630					left : (viewport.w * 0.5) + viewport.x�
631				});�
632			}�
633		},�
634�
635		getViewport: function () {�
636			var locked = (F.current && F.current.locked) || false,�
637				rez    = {�
638					x: W.scrollLeft(),�
639					y: W.scrollTop()�
640				};�
641�
642			if (locked) {�
643				rez.w = locked[0].clientWidth;�
644				rez.h = locked[0].clientHeight;�
645�
646			} else {�
647				// See http://bugs.jquery.com/ticket/6724�
648				rez.w = isTouch && window.innerWidth  ? window.innerWidth  : W.width();�
649				rez.h = isTouch && window.innerHeight ? window.innerHeight : W.height();�
650			}�
651�
652			return rez;�
653		},�
654�
655		// Unbind the keyboard / clicking actions�
656		unbindEvents: function () {�
657			if (F.wrap && isQuery(F.wrap)) {�
658				F.wrap.unbind('.fb');�
659			}�
660�
661			D.unbind('.fb');�
662			W.unbind('.fb');�
663		},�
664�
665		bindEvents: function () {�
666			var current = F.current,�
667				keys;�
668�
669			if (!current) {�
670				return;�
671			}�
672�
673			// Changing document height on iOS devices triggers a 'resize' event,�
674			// that can change document height... repeating infinitely�
675			W.bind('orientationchange.fb' + (isTouch ? '' : ' resize.fb') + (current.autoCenter && !current.locked ? ' scroll.fb' : ''), F.update);�
676�
677			keys = current.keys;�
678�
679			if (keys) {�
680				D.bind('keydown.fb', function (e) {�
681					var code   = e.which || e.keyCode,�
682						target = e.target || e.srcElement;�
683�
684					// Skip esc key if loading, because showLoading will cancel preloading�
685					if (code === 27 && F.coming) {�
686						return false;�
687					}�
688�
689					// Ignore key combinations and key events within form elements�
690					if (!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey && !(target && (target.type || $(target).is('[contenteditable]')))) {�
691						$.each(keys, function(i, val) {�
692							if (current.group.length > 1 && val[ code ] !== undefined) {�
693								F[ i ]( val[ code ] );�
694�
695								e.preventDefault();�
696								return false;�
697							}�
698�
699							if ($.inArray(code, val) > -1) {�
700								F[ i ] ();�
701�
702								e.preventDefault();�
703								return false;�
704							}�
705						});�
706					}�
707				});�
708			}�
709�
710			if ($.fn.mousewheel && current.mouseWheel) {�
711				F.wrap.bind('mousewheel.fb', function (e, delta, deltaX, deltaY) {�
712					var target = e.target || null,�
713						parent = $(target),�
714						canScroll = false;�
715�
716					while (parent.length) {�
717						if (canScroll || parent.is('.fancybox-skin') || parent.is('.fancybox-wrap')) {�
718							break;�
719						}�
720�
721						canScroll = isScrollable( parent[0] );�
722						parent    = $(parent).parent();�
723					}�
724�
725					if (delta !== 0 && !canScroll) {�
726						if (F.group.length > 1 && !current.canShrink) {�
727							if (deltaY > 0 || deltaX > 0) {�
728								F.prev( deltaY > 0 ? 'down' : 'left' );�
729�
730							} else if (deltaY < 0 || deltaX < 0) {�
731								F.next( deltaY < 0 ? 'up' : 'right' );�
732							}�
733�
734							e.preventDefault();�
735						}�
736					}�
737				});�
738			}�
739		},�
740�
741		trigger: function (event, o) {�
742			var ret, obj = o || F.coming || F.current;�
743�
744			if (!obj) {�
745				return;�
746			}�
747�
748			if ($.isFunction( obj[event] )) {�
749				ret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1));�
750			}�
751�
752			if (ret === false) {�
753				return false;�
754			}�
755�
756			if (obj.helpers) {�
757				$.each(obj.helpers, function (helper, opts) {�
758					if (opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) {�
759						F.helpers[helper][event]($.extend(true, {}, F.helpers[helper].defaults, opts), obj);�
760					}�
761				});�
762			}�
763�
764			D.trigger(event);�
765		},�
766�
767		isImage: function (str) {�
768			return isString(str) && str.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i);�
769		},�
770�
771		isSWF: function (str) {�
772			return isString(str) && str.match(/\.(swf)((\?|#).*)?$/i);�
773		},�
774�
775		_start: function (index) {�
776			var coming = {},�
777				obj,�
778				href,�
779				type,�
780				margin,�
781				padding;�
782�
783			index = getScalar( index );�
784			obj   = F.group[ index ] || null;�
785�
786			if (!obj) {�
787				return false;�
788			}�
789�
790			coming = $.extend(true, {}, F.opts, obj);�
791�
792			// Convert margin and padding properties to array - top, right, bottom, left�
793			margin  = coming.margin;�
794			padding = coming.padding;�
795�
796			if ($.type(margin) === 'number') {�
797				coming.margin = [margin, margin, margin, margin];�
798			}�
799�
800			if ($.type(padding) === 'number') {�
801				coming.padding = [padding, padding, padding, padding];�
802			}�
803�
804			// 'modal' propery is just a shortcut�
805			if (coming.modal) {�
806				$.extend(true, coming, {�
807					closeBtn   : false,�
808					closeClick : false,�
809					nextClick  : false,�
810					arrows     : false,�
811					mouseWheel : false,�
812					keys       : null,�
813					helpers: {�
814						overlay : {�
815							closeClick : false�
816						}�
817					}�
818				});�
819			}�
820�
821			// 'autoSize' property is a shortcut, too�
822			if (coming.autoSize) {�
823				coming.autoWidth = coming.autoHeight = true;�
824			}�
825�
826			if (coming.width === 'auto') {�
827				coming.autoWidth = true;�
828			}�
829�
830			if (coming.height === 'auto') {�
831				coming.autoHeight = true;�
832			}�
833�
834			/*�
835			 * Add reference to the group, so it`s possible to access from callbacks, example:�
836			 * afterLoad : function() {�
837			 *     this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : '');�
838			 * }�
839			 */�
840�
841			coming.group  = F.group;�
842			coming.index  = index;�
843�
844			// Give a chance for callback or helpers to update coming item (type, title, etc)�
845			F.coming = coming;�
846�
847			if (false === F.trigger('beforeLoad')) {�
848				F.coming = null;�
849�
850				return;�
851			}�
852�
853			type = coming.type;�
854			href = coming.href;�
855�
856			if (!type) {�
857				F.coming = null;�
858�
859				//If we can not determine content type then drop silently or display next/prev item if looping through gallery�
860				if (F.current && F.router && F.router !== 'jumpto') {�
861					F.current.index = index;�
862�
863					return F[ F.router ]( F.direction );�
864				}�
865�
866				return false;�
867			}�
868�
869			F.isActive = true;�
870�
871			if (type === 'image' || type === 'swf') {�
872				coming.autoHeight = coming.autoWidth = false;�
873				coming.scrolling  = 'visible';�
874			}�
875�
876			if (type === 'image') {�
877				coming.aspectRatio = true;�
878			}�
879�
880			if (type === 'iframe' && isTouch) {�
881				coming.scrolling = 'scroll';�
882			}�
883�
884			// Build the neccessary markup�
885			coming.wrap = $(coming.tpl.wrap).addClass('fancybox-' + (isTouch ? 'mobile' : 'desktop') + ' fancybox-type-' + type + ' fancybox-tmp ' + coming.wrapCSS).appendTo( coming.parent || 'body' );�
886�
887			$.extend(coming, {�
888				skin  : $('.fancybox-skin',  coming.wrap),�
889				outer : $('.fancybox-outer', coming.wrap),�
890				inner : $('.fancybox-inner', coming.wrap)�
891			});�
892�
893			$.each(["Top", "Right", "Bottom", "Left"], function(i, v) {�
894				coming.skin.css('padding' + v, getValue(coming.padding[ i ]));�
895			});�
896�
897			F.trigger('onReady');�
898�
899			// Check before try to load; 'inline' and 'html' types need content, others - href�
900			if (type === 'inline' || type === 'html') {�
901				if (!coming.content || !coming.content.length) {�
902					return F._error( 'content' );�
903				}�
904�
905			} else if (!href) {�
906				return F._error( 'href' );�
907			}�
908�
909			if (type === 'image') {�
910				F._loadImage();�
911�
912			} else if (type === 'ajax') {�
913				F._loadAjax();�
914�
915			} else if (type === 'iframe') {�
916				F._loadIframe();�
917�
918			} else {�
919				F._afterLoad();�
920			}�
921		},�
922�
923		_error: function ( type ) {�
924			$.extend(F.coming, {�
925				type       : 'html',�
926				autoWidth  : true,�
927				autoHeight : true,�
928				minWidth   : 0,�
929				minHeight  : 0,�
930				scrolling  : 'no',�
931				hasError   : type,�
932				content    : F.coming.tpl.error�
933			});�
934�
935			F._afterLoad();�
936		},�
937�
938		_loadImage: function () {�
939			// Reset preload image so it is later possible to check "complete" property�
940			var img = F.imgPreload = new Image();�
941�
942			img.onload = function () {�
943				this.onload = this.onerror = null;�
944�
945				F.coming.width  = this.width / F.opts.pixelRatio;�
946				F.coming.height = this.height / F.opts.pixelRatio;�
947�
948				F._afterLoad();�
949			};�
950�
951			img.onerror = function () {�
952				this.onload = this.onerror = null;�
953�
954				F._error( 'image' );�
955			};�
956�
957			img.src = F.coming.href;�
958�
959			if (img.complete !== true) {�
960				F.showLoading();�
961			}�
962		},�
963�
964		_loadAjax: function () {�
965			var coming = F.coming;�
966�
967			F.showLoading();�
968�
969			F.ajaxLoad = $.ajax($.extend({}, coming.ajax, {�
970				url: coming.href,�
971				error: function (jqXHR, textStatus) {�
972					if (F.coming && textStatus !== 'abort') {�
973						F._error( 'ajax', jqXHR );�
974�
975					} else {�
976						F.hideLoading();�
977					}�
978				},�
979				success: function (data, textStatus) {�
980					if (textStatus === 'success') {�
981						coming.content = data;�
982�
983						F._afterLoad();�
984					}�
985				}�
986			}));�
987		},�
988�
989		_loadIframe: function() {�
990			var coming = F.coming,�
991				iframe = $(coming.tpl.iframe.replace(/\{rnd\}/g, new Date().getTime()))�
992					.attr('scrolling', isTouch ? 'auto' : coming.iframe.scrolling)�
993					.attr('src', coming.href);�
994�
995			// This helps IE�
996			$(coming.wrap).bind('onReset', function () {�
997				try {�
998					$(this).find('iframe').hide().attr('src', '//about:blank').end().empty();�
999				} catch (e) {}�
1000			});�
1001�
1002			if (coming.iframe.preload) {�
1003				F.showLoading();�
1004�
1005				iframe.one('load', function() {�
1006					$(this).data('ready', 1);�
1007�
1008					// iOS will lose scrolling if we resize�
1009					if (!isTouch) {�
1010						$(this).bind('load.fb', F.update);�
1011					}�
1012�
1013					// Without this trick:�
1014					//   - iframe won't scroll on iOS devices�
1015					//   - IE7 sometimes displays empty iframe�
1016					$(this).parents('.fancybox-wrap').width('100%').removeClass('fancybox-tmp').show();�
1017�
1018					F._afterLoad();�
1019				});�
1020			}�
1021�
1022			coming.content = iframe.appendTo( coming.inner );�
1023�
1024			if (!coming.iframe.preload) {�
1025				F._afterLoad();�
1026			}�
1027		},�
1028�
1029		_preloadImages: function() {�
1030			var group   = F.group,�
1031				current = F.current,�
1032				len     = group.length,�
1033				cnt     = current.preload ? Math.min(current.preload, len - 1) : 0,�
1034				item,�
1035				i;�
1036�
1037			for (i = 1; i <= cnt; i += 1) {�
1038				item = group[ (current.index + i ) % len ];�
1039�
1040				if (item.type === 'image' && item.href) {�
1041					new Image().src = item.href;�
1042				}�
1043			}�
1044		},�
1045�
1046		_afterLoad: function () {�
1047			var coming   = F.coming,�
1048				previous = F.current,�
1049				placeholder = 'fancybox-placeholder',�
1050				current,�
1051				content,�
1052				type,�
1053				scrolling,�
1054				href,�
1055				embed;�
1056�
1057			F.hideLoading();�
1058�
1059			if (!coming || F.isActive === false) {�
1060				return;�
1061			}�
1062�
1063			if (false === F.trigger('afterLoad', coming, previous)) {�
1064				coming.wrap.stop(true).trigger('onReset').remove();�
1065�
1066				F.coming = null;�
1067�
1068				return;�
1069			}�
1070�
1071			if (previous) {�
1072				F.trigger('beforeChange', previous);�
1073�
1074				previous.wrap.stop(true).removeClass('fancybox-opened')�
1075					.find('.fancybox-item, .fancybox-nav')�
1076					.remove();�
1077			}�
1078�
1079			F.unbindEvents();�
1080�
1081			current   = coming;�
1082			content   = coming.content;�
1083			type      = coming.type;�
1084			scrolling = coming.scrolling;�
1085�
1086			$.extend(F, {�
1087				wrap  : current.wrap,�
1088				skin  : current.skin,�
1089				outer : current.outer,�
1090				inner : current.inner,�
1091				current  : current,�
1092				previous : previous�
1093			});�
1094�
1095			href = current.href;�
1096�
1097			switch (type) {�
1098				case 'inline':�
1099				case 'ajax':�
1100				case 'html':�
1101					if (current.selector) {�
1102						content = $('<div>').html(content).find(current.selector);�
1103�
1104					} else if (isQuery(content)) {�
1105						if (!content.data(placeholder)) {�
1106							content.data(placeholder, $('<div class="' + placeholder + '"></div>').insertAfter( content ).hide() );�
1107						}�
1108�
1109						content = content.show().detach();�
1110�
1111						current.wrap.bind('onReset', function () {�
1112							if ($(this).find(content).length) {�
1113								content.hide().replaceAll( content.data(placeholder) ).data(placeholder, false);�
1114							}�
1115						});�
1116					}�
1117				break;�
1118�
1119				case 'image':�
1120					content = current.tpl.image.replace('{href}', href);�
1121				break;�
1122�
1123				case 'swf':�
1124					content = '<object id="fancybox-swf" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%"><param name="movie" value="' + href + '"></param>';�
1125					embed   = '';�
1126�
1127					$.each(current.swf, function(name, val) {�
1128						content += '<param name="' + name + '" value="' + val + '"></param>';�
1129						embed   += ' ' + name + '="' + val + '"';�
1130					});�
1131�
1132					content += '<embed src="' + href + '" type="application/x-shockwave-flash" width="100%" height="100%"' + embed + '></embed></object>';�
1133				break;�
1134			}�
1135�
1136			if (!(isQuery(content) && content.parent().is(current.inner))) {�
1137				current.inner.append( content );�
1138			}�
1139�
1140			// Give a chance for helpers or callbacks to update elements�
1141			F.trigger('beforeShow');�
1142�
1143			// Set scrolling before calculating dimensions�
1144			current.inner.css('overflow', scrolling === 'yes' ? 'scroll' : (scrolling === 'no' ? 'hidden' : scrolling));�
1145�
1146			// Set initial dimensions and start position�
1147			F._setDimension();�
1148�
1149			F.reposition();�
1150�
1151			F.isOpen = false;�
1152			F.coming = null;�
1153�
1154			F.bindEvents();�
1155�
1156			if (!F.isOpened) {�
1157				$('.fancybox-wrap').not( current.wrap ).stop(true).trigger('onReset').remove();�
1158�
1159			} else if (previous.prevMethod) {�
1160				F.transitions[ previous.prevMethod ]();�
1161			}�
1162�
1163			F.transitions[ F.isOpened ? current.nextMethod : current.openMethod ]();�
1164�
1165			F._preloadImages();�
1166		},�
1167�
1168		_setDimension: function () {�
1169			var viewport   = F.getViewport(),�
1170				steps      = 0,�
1171				canShrink  = false,�
1172				canExpand  = false,�
1173				wrap       = F.wrap,�
1174				skin       = F.skin,�
1175				inner      = F.inner,�
1176				current    = F.current,�
1177				width      = current.width,�
1178				height     = current.height,�
1179				minWidth   = current.minWidth,�
1180				minHeight  = current.minHeight,�
1181				maxWidth   = current.maxWidth,�
1182				maxHeight  = current.maxHeight,�
1183				scrolling  = current.scrolling,�
1184				scrollOut  = current.scrollOutside ? current.scrollbarWidth : 0,�
1185				margin     = current.margin,�
1186				wMargin    = getScalar(margin[1] + margin[3]),�
1187				hMargin    = getScalar(margin[0] + margin[2]),�
1188				wPadding,�
1189				hPadding,�
1190				wSpace,�
1191				hSpace,�
1192				origWidth,�
1193				origHeight,�
1194				origMaxWidth,�
1195				origMaxHeight,�
1196				ratio,�
1197				width_,�
1198				height_,�
1199				maxWidth_,�
1200				maxHeight_,�
1201				iframe,�
1202				body;�
1203�
1204			// Reset dimensions so we could re-check actual size�
1205			wrap.add(skin).add(inner).width('auto').height('auto').removeClass('fancybox-tmp');�
1206�
1207			wPadding = getScalar(skin.outerWidth(true)  - skin.width());�
1208			hPadding = getScalar(skin.outerHeight(true) - skin.height());�
1209�
1210			// Any space between content and viewport (margin, padding, border, title)�
1211			wSpace = wMargin + wPadding;�
1212			hSpace = hMargin + hPadding;�
1213�
1214			origWidth  = isPercentage(width)  ? (viewport.w - wSpace) * getScalar(width)  / 100 : width;�
1215			origHeight = isPercentage(height) ? (viewport.h - hSpace) * getScalar(height) / 100 : height;�
1216�
1217			if (current.type === 'iframe') {�
1218				iframe = current.content;�
1219�
1220				if (current.autoHeight && iframe.data('ready') === 1) {�
1221					try {�
1222						if (iframe[0].contentWindow.document.location) {�
1223							inner.width( origWidth ).height(9999);�
1224�
1225							body = iframe.contents().find('body');�
1226�
1227							if (scrollOut) {�
1228								body.css('overflow-x', 'hidden');�
1229							}�
1230�
1231							origHeight = body.outerHeight(true);�
1232						}�
1233�
1234					} catch (e) {}�
1235				}�
1236�
1237			} else if (current.autoWidth || current.autoHeight) {�
1238				inner.addClass( 'fancybox-tmp' );�
1239�
1240				// Set width or height in case we need to calculate only one dimension�
1241				if (!current.autoWidth) {�
1242					inner.width( origWidth );�
1243				}�
1244�
1245				if (!current.autoHeight) {�
1246					inner.height( origHeight );�
1247				}�
1248�
1249				if (current.autoWidth) {�
1250					origWidth = inner.width();�
1251				}�
1252�
1253				if (current.autoHeight) {�
1254					origHeight = inner.height();�
1255				}�
1256�
1257				inner.removeClass( 'fancybox-tmp' );�
1258			}�
1259�
1260			width  = getScalar( origWidth );�
1261			height = getScalar( origHeight );�
1262�
1263			ratio  = origWidth / origHeight;�
1264�
1265			// Calculations for the content�
1266			minWidth  = getScalar(isPercentage(minWidth) ? getScalar(minWidth, 'w') - wSpace : minWidth);�
1267			maxWidth  = getScalar(isPercentage(maxWidth) ? getScalar(maxWidth, 'w') - wSpace : maxWidth);�
1268�
1269			minHeight = getScalar(isPercentage(minHeight) ? getScalar(minHeight, 'h') - hSpace : minHeight);�
1270			maxHeight = getScalar(isPercentage(maxHeight) ? getScalar(maxHeight, 'h') - hSpace : maxHeight);�
1271�
1272			// These will be used to determine if wrap can fit in the viewport�
1273			origMaxWidth  = maxWidth;�
1274			origMaxHeight = maxHeight;�
1275�
1276			if (current.fitToView) {�
1277				maxWidth  = Math.min(viewport.w - wSpace, maxWidth);�
1278				maxHeight = Math.min(viewport.h - hSpace, maxHeight);�
1279			}�
1280�
1281			maxWidth_  = viewport.w - wMargin;�
1282			maxHeight_ = viewport.h - hMargin;�
1283�
1284			if (current.aspectRatio) {�
1285				if (width > maxWidth) {�
1286					width  = maxWidth;�
1287					height = getScalar(width / ratio);�
1288				}�
1289�
1290				if (height > maxHeight) {�
1291					height = maxHeight;�
1292					width  = getScalar(height * ratio);�
1293				}�
1294�
1295				if (width < minWidth) {�
1296					width  = minWidth;�
1297					height = getScalar(width / ratio);�
1298				}�
1299�
1300				if (height < minHeight) {�
1301					height = minHeight;�
1302					width  = getScalar(height * ratio);�
1303				}�
1304�
1305			} else {�
1306				width = Math.max(minWidth, Math.min(width, maxWidth));�
1307�
1308				if (current.autoHeight && current.type !== 'iframe') {�
1309					inner.width( width );�
1310�
1311					height = inner.height();�
1312				}�
1313�
1314				height = Math.max(minHeight, Math.min(height, maxHeight));�
1315			}�
1316�
1317			// Try to fit inside viewport (including the title)�
1318			if (current.fitToView) {�
1319				inner.width( width ).height( height );�
1320�
1321				wrap.width( width + wPadding );�
1322�
1323				// Real wrap dimensions�
1324				width_  = wrap.width();�
1325				height_ = wrap.height();�
1326�
1327				if (current.aspectRatio) {�
1328					while ((width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight) {�
1329						if (steps++ > 19) {�
1330							break;�
1331						}�
1332�
1333						height = Math.max(minHeight, Math.min(maxHeight, height - 10));�
1334						width  = getScalar(height * ratio);�
1335�
1336						if (width < minWidth) {�
1337							width  = minWidth;�
1338							height = getScalar(width / ratio);�
1339						}�
1340�
1341						if (width > maxWidth) {�
1342							width  = maxWidth;�
1343							height = getScalar(width / ratio);�
1344						}�
1345�
1346						inner.width( width ).height( height );�
1347�
1348						wrap.width( width + wPadding );�
1349�
1350						width_  = wrap.width();�
1351						height_ = wrap.height();�
1352					}�
1353�
1354				} else {�
1355					width  = Math.max(minWidth,  Math.min(width,  width  - (width_  - maxWidth_)));�
1356					height = Math.max(minHeight, Math.min(height, height - (height_ - maxHeight_)));�
1357				}�
1358			}�
1359�
1360			if (scrollOut && scrolling === 'auto' && height < origHeight && (width + wPadding + scrollOut) < maxWidth_) {�
1361				width += scrollOut;�
1362			}�
1363�
1364			inner.width( width ).height( height );�
1365�
1366			wrap.width( width + wPadding );�
1367�
1368			width_  = wrap.width();�
1369			height_ = wrap.height();�
1370�
1371			canShrink = (width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight;�
1372			canExpand = current.aspectRatio ? (width < origMaxWidth && height < origMaxHeight && width < origWidth && height < origHeight) : ((width < origMaxWidth || height < origMaxHeight) && (width < origWidth || height < origHeight));�
1373�
1374			$.extend(current, {�
1375				dim : {�
1376					width	: getValue( width_ ),�
1377					height	: getValue( height_ )�
1378				},�
1379				origWidth  : origWidth,�
1380				origHeight : origHeight,�
1381				canShrink  : canShrink,�
1382				canExpand  : canExpand,�
1383				wPadding   : wPadding,�
1384				hPadding   : hPadding,�
1385				wrapSpace  : height_ - skin.outerHeight(true),�
1386				skinSpace  : skin.height() - height�
1387			});�
1388�
1389			if (!iframe && current.autoHeight && height > minHeight && height < maxHeight && !canExpand) {�
1390				inner.height('auto');�
1391			}�
1392		},�
1393�
1394		_getPosition: function (onlyAbsolute) {�
1395			var current  = F.current,�
1396				viewport = F.getViewport(),�
1397				margin   = current.margin,�
1398				width    = F.wrap.width()  + margin[1] + margin[3],�
1399				height   = F.wrap.height() + margin[0] + margin[2],�
1400				rez      = {�
1401					position: 'absolute',�
1402					top  : margin[0],�
1403					left : margin[3]�
1404				};�
1405�
1406			if (current.autoCenter && current.fixed && !onlyAbsolute && height <= viewport.h && width <= viewport.w) {�
1407				rez.position = 'fixed';�
1408�
1409			} else if (!current.locked) {�
1410				rez.top  += viewport.y;�
1411				rez.left += viewport.x;�
1412			}�
1413�
1414			rez.top  = getValue(Math.max(rez.top,  rez.top  + ((viewport.h - height) * current.topRatio)));�
1415			rez.left = getValue(Math.max(rez.left, rez.left + ((viewport.w - width)  * current.leftRatio)));�
1416�
1417			return rez;�
1418		},�
1419�
1420		_afterZoomIn: function () {�
1421			var current = F.current;�
1422�
1423			if (!current) {�
1424				return;�
1425			}�
1426�
1427			F.isOpen = F.isOpened = true;�
1428�
1429			F.wrap.css('overflow', 'visible').addClass('fancybox-opened');�
1430			F.update();�
1431�
1432			// Assign a click event�
1433			if ( current.closeClick || (current.nextClick && F.group.length > 1) ) {�
1434				F.inner.css('cursor', 'pointer').bind('click.fb', function(e) {�
1435					if (!$(e.target).is('a') && !$(e.target).parent().is('a')) {�
1436						e.preventDefault();�
1437�
1438						F[ current.closeClick ? 'close' : 'next' ]();�
1439					}�
1440				});�
1441			}�
1442�
1443			// Create a close button�
1444			if (current.closeBtn) {�
1445				$(current.tpl.closeBtn).appendTo(F.skin).bind('click.fb', function(e) {�
1446					e.preventDefault();�
1447�
1448					F.close();�
1449				});�
1450			}�
1451�
1452			// Create navigation arrows�
1453			if (current.arrows && F.group.length > 1) {�
1454				if (current.loop || current.index > 0) {�
1455					$(current.tpl.prev).appendTo(F.outer).bind('click.fb', F.prev);�
1456				}�
1457�
1458				if (current.loop || current.index < F.group.length - 1) {�
1459					$(current.tpl.next).appendTo(F.outer).bind('click.fb', F.next);�
1460				}�
1461			}�
1462�
1463			F.trigger('afterShow');�
1464�
1465			// Stop the slideshow if this is the last item�
1466			if (!current.loop && current.index === current.group.length - 1) {�
1467				F.play( false );�
1468�
1469			} else if (F.opts.autoPlay && !F.player.isActive) {�
1470				F.opts.autoPlay = false;�
1471�
1472				F.play();�
1473			}�
1474		},�
1475�
1476		_afterZoomOut: function ( obj ) {�
1477			obj = obj || F.current;�
1478�
1479			$('.fancybox-wrap').trigger('onReset').remove();�
1480�
1481			$.extend(F, {�
1482				group  : {},�
1483				opts   : {},�
1484				router : false,�
1485				current   : null,�
1486				isActive  : false,�
1487				isOpened  : false,�
1488				isOpen    : false,�
1489				isClosing : false,�
1490				wrap   : null,�
1491				skin   : null,�
1492				outer  : null,�
1493				inner  : null�
1494			});�
1495�
1496			F.trigger('afterClose', obj);�
1497		}�
1498	});�
1499�
1500	/*�
1501	 *	Default transitions�
1502	 */�
1503�
1504	F.transitions = {�
1505		getOrigPosition: function () {�
1506			var current  = F.current,�
1507				element  = current.element,�
1508				orig     = current.orig,�
1509				pos      = {},�
1510				width    = 50,�
1511				height   = 50,�
1512				hPadding = current.hPadding,�
1513				wPadding = current.wPadding,�
1514				viewport = F.getViewport();�
1515�
1516			if (!orig && current.isDom && element.is(':visible')) {�
1517				orig = element.find('img:first');�
1518�
1519				if (!orig.length) {�
1520					orig = element;�
1521				}�
1522			}�
1523�
1524			if (isQuery(orig)) {�
1525				pos = orig.offset();�
1526�
1527				if (orig.is('img')) {�
1528					width  = orig.outerWidth();�
1529					height = orig.outerHeight();�
1530				}�
1531�
1532			} else {�
1533				pos.top  = viewport.y + (viewport.h - height) * current.topRatio;�
1534				pos.left = viewport.x + (viewport.w - width)  * current.leftRatio;�
1535			}�
1536�
1537			if (F.wrap.css('position') === 'fixed' || current.locked) {�
1538				pos.top  -= viewport.y;�
1539				pos.left -= viewport.x;�
1540			}�
1541�
1542			pos = {�
1543				top     : getValue(pos.top  - hPadding * current.topRatio),�
1544				left    : getValue(pos.left - wPadding * current.leftRatio),�
1545				width   : getValue(width  + wPadding),�
1546				height  : getValue(height + hPadding)�
1547			};�
1548�
1549			return pos;�
1550		},�
1551�
1552		step: function (now, fx) {�
1553			var ratio,�
1554				padding,�
1555				value,�
1556				prop       = fx.prop,�
1557				current    = F.current,�
1558				wrapSpace  = current.wrapSpace,�
1559				skinSpace  = current.skinSpace;�
1560�
1561			if (prop === 'width' || prop === 'height') {�
1562				ratio = fx.end === fx.start ? 1 : (now - fx.start) / (fx.end - fx.start);�
1563�
1564				if (F.isClosing) {�
1565					ratio = 1 - ratio;�
1566				}�
1567�
1568				padding = prop === 'width' ? current.wPadding : current.hPadding;�
1569				value   = now - padding;�
1570�
1571				F.skin[ prop ](  getScalar( prop === 'width' ?  value : value - (wrapSpace * ratio) ) );�
1572				F.inner[ prop ]( getScalar( prop === 'width' ?  value : value - (wrapSpace * ratio) - (skinSpace * ratio) ) );�
1573			}�
1574		},�
1575�
1576		zoomIn: function () {�
1577			var current  = F.current,�
1578				startPos = current.pos,�
1579				effect   = current.openEffect,�
1580				elastic  = effect === 'elastic',�
1581				endPos   = $.extend({opacity : 1}, startPos);�
1582�
1583			// Remove "position" property that breaks older IE�
1584			delete endPos.position;�
1585�
1586			if (elastic) {�
1587				startPos = this.getOrigPosition();�
1588�
1589				if (current.openOpacity) {�
1590					startPos.opacity = 0.1;�
1591				}�
1592�
1593			} else if (effect === 'fade') {�
1594				startPos.opacity = 0.1;�
1595			}�
1596�
1597			F.wrap.css(startPos).animate(endPos, {�
1598				duration : effect === 'none' ? 0 : current.openSpeed,�
1599				easing   : current.openEasing,�
1600				step     : elastic ? this.step : null,�
1601				complete : F._afterZoomIn�
1602			});�
1603		},�
1604�
1605		zoomOut: function () {�
1606			var current  = F.current,�
1607				effect   = current.closeEffect,�
1608				elastic  = effect === 'elastic',�
1609				endPos   = {opacity : 0.1};�
1610�
1611			if (elastic) {�
1612				endPos = this.getOrigPosition();�
1613�
1614				if (current.closeOpacity) {�
1615					endPos.opacity = 0.1;�
1616				}�
1617			}�
1618�
1619			F.wrap.animate(endPos, {�
1620				duration : effect === 'none' ? 0 : current.closeSpeed,�
1621				easing   : current.closeEasing,�
1622				step     : elastic ? this.step : null,�
1623				complete : F._afterZoomOut�
1624			});�
1625		},�
1626�
1627		changeIn: function () {�
1628			var current   = F.current,�
1629				effect    = current.nextEffect,�
1630				startPos  = current.pos,�
1631				endPos    = { opacity : 1 },�
1632				direction = F.direction,�
1633				distance  = 200,�
1634				field;�
1635�
1636			startPos.opacity = 0.1;�
1637�
1638			if (effect === 'elastic') {�
1639				field = direction === 'down' || direction === 'up' ? 'top' : 'left';�
1640�
1641				if (direction === 'down' || direction === 'right') {�
1642					startPos[ field ] = getValue(getScalar(startPos[ field ]) - distance);�
1643					endPos[ field ]   = '+=' + distance + 'px';�
1644�
1645				} else {�
1646					startPos[ field ] = getValue(getScalar(startPos[ field ]) + distance);�
1647					endPos[ field ]   = '-=' + distance + 'px';�
1648				}�
1649			}�
1650�
1651			// Workaround for http://bugs.jquery.com/ticket/12273�
1652			if (effect === 'none') {�
1653				F._afterZoomIn();�
1654�
1655			} else {�
1656				F.wrap.css(startPos).animate(endPos, {�
1657					duration : current.nextSpeed,�
1658					easing   : current.nextEasing,�
1659					complete : F._afterZoomIn�
1660				});�
1661			}�
1662		},�
1663�
1664		changeOut: function () {�
1665			var previous  = F.previous,�
1666				effect    = previous.prevEffect,�
1667				endPos    = { opacity : 0.1 },�
1668				direction = F.direction,�
1669				distance  = 200;�
1670�
1671			if (effect === 'elastic') {�
1672				endPos[ direction === 'down' || direction === 'up' ? 'top' : 'left' ] = ( direction === 'up' || direction === 'left' ? '-' : '+' ) + '=' + distance + 'px';�
1673			}�
1674�
1675			previous.wrap.animate(endPos, {�
1676				duration : effect === 'none' ? 0 : previous.prevSpeed,�
1677				easing   : previous.prevEasing,�
1678				complete : function () {�
1679					$(this).trigger('onReset').remove();�
1680				}�
1681			});�
1682		}�
1683	};�
1684�
1685	/*�
1686	 *	Overlay helper�
1687	 */�
1688�
1689	F.helpers.overlay = {�
1690		defaults : {�
1691			closeClick : true,      // if true, fancyBox will be closed when user clicks on the overlay�
1692			speedOut   : 200,       // duration of fadeOut animation�
1693			showEarly  : true,      // indicates if should be opened immediately or wait until the content is ready�
1694			css        : {},        // custom CSS properties�
1695			locked     : !isTouch,  // if true, the content will be locked into overlay�
1696			fixed      : true       // if false, the overlay CSS position property will not be set to "fixed"�
1697		},�
1698�
1699		overlay : null,      // current handle�
1700		fixed   : false,     // indicates if the overlay has position "fixed"�
1701		el      : $('html'), // element that contains "the lock"�
1702�
1703		// Public methods�
1704		create : function(opts) {�
1705			opts = $.extend({}, this.defaults, opts);�
1706�
1707			if (this.overlay) {�
1708				this.close();�
1709			}�
1710�
1711			this.overlay = $('<div class="fancybox-overlay"></div>').appendTo( F.coming ? F.coming.parent : opts.parent );�
1712			this.fixed   = false;�
1713�
1714			if (opts.fixed && F.defaults.fixed) {�
1715				this.overlay.addClass('fancybox-overlay-fixed');�
1716�
1717				this.fixed = true;�
1718			}�
1719		},�
1720�
1721		open : function(opts) {�
1722			var that = this;�
1723�
1724			opts = $.extend({}, this.defaults, opts);�
1725�
1726			if (this.overlay) {�
1727				this.overlay.unbind('.overlay').width('auto').height('auto');�
1728�
1729			} else {�
1730				this.create(opts);�
1731			}�
1732�
1733			if (!this.fixed) {�
1734				W.bind('resize.overlay', $.proxy( this.update, this) );�
1735�
1736				this.update();�
1737			}�
1738�
1739			if (opts.closeClick) {�
1740				this.overlay.bind('click.overlay', function(e) {�
1741					if ($(e.target).hasClass('fancybox-overlay')) {�
1742						if (F.isActive) {�
1743							F.close();�
1744						} else {�
1745							that.close();�
1746						}�
1747�
1748						return false;�
1749					}�
1750				});�
1751			}�
1752�
1753			this.overlay.css( opts.css ).show();�
1754		},�
1755�
1756		close : function() {�
1757			var scrollV, scrollH;�
1758�
1759			W.unbind('resize.overlay');�
1760�
1761			if (this.el.hasClass('fancybox-lock')) {�
1762				$('.fancybox-margin').removeClass('fancybox-margin');�
1763�
1764				scrollV = W.scrollTop();�
1765				scrollH = W.scrollLeft();�
1766�
1767				this.el.removeClass('fancybox-lock');�
1768�
1769				W.scrollTop( scrollV ).scrollLeft( scrollH );�
1770			}�
1771�
1772			$('.fancybox-overlay').remove().hide();�
1773�
1774			$.extend(this, {�
1775				overlay : null,�
1776				fixed   : false�
1777			});�
1778		},�
1779�
1780		// Private, callbacks�
1781�
1782		update : function () {�
1783			var width = '100%', offsetWidth;�
1784�
1785			// Reset width/height so it will not mess�
1786			this.overlay.width(width).height('100%');�
1787�
1788			// jQuery does not return reliable result for IE�
1789			if (IE) {�
1790				offsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth);�
1791�
1792				if (D.width() > offsetWidth) {�
1793					width = D.width();�
1794				}�
1795�
1796			} else if (D.width() > W.width()) {�
1797				width = D.width();�
1798			}�
1799�
1800			this.overlay.width(width).height(D.height());�
1801		},�
1802�
1803		// This is where we can manipulate DOM, because later it would cause iframes to reload�
1804		onReady : function (opts, obj) {�
1805			var overlay = this.overlay;�
1806�
1807			$('.fancybox-overlay').stop(true, true);�
1808�
1809			if (!overlay) {�
1810				this.create(opts);�
1811			}�
1812�
1813			if (opts.locked && this.fixed && obj.fixed) {�
1814				if (!overlay) {�
1815					this.margin = D.height() > W.height() ? $('html').css('margin-right').replace("px", "") : false;�
1816				}�
1817�
1818				obj.locked = this.overlay.append( obj.wrap );�
1819				obj.fixed  = false;�
1820			}�
1821�
1822			if (opts.showEarly === true) {�
1823				this.beforeShow.apply(this, arguments);�
1824			}�
1825		},�
1826�
1827		beforeShow : function(opts, obj) {�
1828			var scrollV, scrollH;�
1829�
1830			if (obj.locked) {�
1831				if (this.margin !== false) {�
1832					$('*').filter(function(){�
1833						return ($(this).css('position') === 'fixed' && !$(this).hasClass("fancybox-overlay") && !$(this).hasClass("fancybox-wrap") );�
1834					}).addClass('fancybox-margin');�
1835�
1836					this.el.addClass('fancybox-margin');�
1837				}�
1838�
1839				scrollV = W.scrollTop();�
1840				scrollH = W.scrollLeft();�
1841�
1842				this.el.addClass('fancybox-lock');�
1843�
1844				W.scrollTop( scrollV ).scrollLeft( scrollH );�
1845			}�
1846�
1847			this.open(opts);�
1848		},�
1849�
1850		onUpdate : function() {�
1851			if (!this.fixed) {�
1852				this.update();�
1853			}�
1854		},�
1855�
1856		afterClose: function (opts) {�
1857			parent.location.reload(true);�
1858			//alert("sdsd");�
1859			// Remove overlay if exists and fancyBox is not opening�
1860			// (e.g., it is not being open using afterClose callback)�
1861			//if (this.overlay && !F.isActive) {�
1862			if (this.overlay && !F.coming) {�
1863				this.overlay.fadeOut(opts.speedOut, $.proxy( this.close, this ));�
1864				parent.location.reload(true);�
1865			}�
1866		}�
1867	};�
1868�
1869	/*�
1870	 *	Title helper�
1871	 */�
1872�
1873	F.helpers.title = {�
1874		defaults : {�
1875			type     : 'float', // 'float', 'inside', 'outside' or 'over',�
1876			position : 'bottom' // 'top' or 'bottom'�
1877		},�
1878�
1879		beforeShow: function (opts) {�
1880			var current = F.current,�
1881				text    = current.title,�
1882				type    = opts.type,�
1883				title,�
1884				target;�
1885�
1886			if ($.isFunction(text)) {�
1887				text = text.call(current.element, current);�
1888			}�
1889�
1890			if (!isString(text) || $.trim(text) === '') {�
1891				return;�
1892			}�
1893�
1894			title = $('<div class="fancybox-title fancybox-title-' + type + '-wrap">
vendor: 3,417 bytes, lines 1894-2022
1894' + text + '</div>');�
1895�
1896			switch (type) {�
1897				case 'inside':�
1898					target = F.skin;�
1899				break;�
1900�
1901				case 'outside':�
1902					target = F.wrap;�
1903				break;�
1904�
1905				case 'over':�
1906					target = F.inner;�
1907				break;�
1908�
1909				default: // 'float'�
1910					target = F.skin;�
1911�
1912					title.appendTo('body');�
1913�
1914					if (IE) {�
1915						title.width( title.width() );�
1916					}�
1917�
1918					title.wrapInner('<span class="child"></span>');�
1919�
1920					//Increase bottom margin so this title will also fit into viewport�
1921					F.current.margin[2] += Math.abs( getScalar(title.css('margin-bottom')) );�
1922				break;�
1923			}�
1924�
1925			title[ (opts.position === 'top' ? 'prependTo'  : 'appendTo') ](target);�
1926		}�
1927	};�
1928�
1929	// jQuery plugin initialization�
1930	$.fn.fancybox = function (options) {�
1931		var index,�
1932			that     = $(this),�
1933			selector = this.selector || '',�
1934			run      = function(e) {�
1935				var what = $(this).blur(), idx = index, relType, relVal;�
1936�
1937				if (!(e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) && !what.is('.fancybox-wrap')) {�
1938					relType = options.groupAttr || 'data-fancybox-group';�
1939					relVal  = what.attr(relType);�
1940�
1941					if (!relVal) {�
1942						relType = 'rel';�
1943						relVal  = what.get(0)[ relType ];�
1944					}�
1945�
1946					if (relVal && relVal !== '' && relVal !== 'nofollow') {�
1947						what = selector.length ? $(selector) : that;�
1948						what = what.filter('[' + relType + '="' + relVal + '"]');�
1949						idx  = what.index(this);�
1950					}�
1951�
1952					options.index = idx;�
1953�
1954					// Stop an event from bubbling if everything is fine�
1955					if (F.open(what, options) !== false) {�
1956						e.preventDefault();�
1957					}�
1958				}�
1959			};�
1960�
1961		options = options || {};�
1962		index   = options.index || 0;�
1963�
1964		if (!selector || options.live === false) {�
1965			that.unbind('click.fb-start').bind('click.fb-start', run);�
1966�
1967		} else {�
1968			D.undelegate(selector, 'click.fb-start').delegate(selector + ":not('.fancybox-item, .fancybox-nav')", 'click.fb-start', run);�
1969		}�
1970�
1971		this.filter('[data-fancybox-start=1]').trigger('click');�
1972�
1973		return this;�
1974	};�
1975�
1976	// Tests that need a body at doc ready�
1977	D.ready(function() {�
1978		var w1, w2;�
1979�
1980		if ( $.scrollbarWidth === undefined ) {�
1981			// http://benalman.com/projects/jquery-misc-plugins/#scrollbarwidth�
1982			$.scrollbarWidth = function() {�
1983				var parent = $('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo('body'),�
1984					child  = parent.children(),�
1985					width  = child.innerWidth() - child.height( 99 ).innerWidth();�
1986�
1987				parent.remove();�
1988�
1989				return width;�
1990			};�
1991		}�
1992�
1993		if ( $.support.fixedPosition === undefined ) {�
1994			$.support.fixedPosition = (function() {�
1995				var elem  = $('<div style="position:fixed;top:20px;"></div>').appendTo('body'),�
1996					fixed = ( elem[0].offsetTop === 20 || elem[0].offsetTop === 15 );�
1997�
1998				elem.remove();�
1999�
2000				return fixed;�
2001			}());�
2002		}�
2003�
2004		$.extend(F.defaults, {�
2005			scrollbarWidth : $.scrollbarWidth(),�
2006			fixed  : $.support.fixedPosition,�
2007			parent : $('body')�
2008		});�
2009�
2010		//Get real width of page scroll-bar�
2011		w1 = $(window).width();�
2012�
2013		H.addClass('fancybox-lock-test');�
2014�
2015		w2 = $(window).width();�
2016�
2017		H.removeClass('fancybox-lock-test');�
2018�
2019		$("<style type='text/css'>.fancybox-margin{margin-right:" + (w2 - w1) + "px;}</style>").appendTo("head");�
2020	});�
2021�
2022}(window, document, jQuery));

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.