PageSourceSearch

https://lamanova.com/css/zoomsl-3.0.js

js lamanova.com collected 2026-10-02 10:19:48 UTC 45,663 bytes, 817 lines download raw bytes

1/*http://zoomsl.sergeland.ru Sergey Zaragulov skype: deeserge icq: 287295769 [email protected]*/
2(function($, global){
3"use strict";
4
5	//utility methods
6	/*$.fn.extend({
7		resetzoomsl: function(){
8			this.each(function(){
9				
10			});
11		}
12	});*/
13
14	$.fn.imagezoomsl = function(options){
15		options = options || {};		
16		return this.each(function(){ //return jQuery obj		
17			if (!$(this).is("img")) return true;			
18			var that = this;			
19            setTimeout(function () {
20				$(new Image()).load(function(){				
21					sergelandimagezoomer.init($(that), options);					
22				}).attr('src', $(that).attr('src'));				
23            }, 30);
24		});
25
26	};
27
28	var sergelandimagezoomer = {};	
29	$.extend(sergelandimagezoomer, {
30
31		dsetting: { //default settings
32		
33				// çàãðóçêà big êàðòèíêè
34				loadinggif: '',      				  // êàðòèíêà ïîêàçûâàåìàÿ ïðè çàãðóçêå big èçîáðàæåíèÿ
35				loadopacity: 0.1,					  // ïðîçðà÷íîñòü ôîíà ïåðåêðûòèÿ tmb êàðòèíêè ïðè çàãðóçêå	big èçîáðàæåíèÿ
36				loadbackground: '#878787',			  // öâåò ôîíà ïåðåêðûòèÿ tmb êàðòèíêè ïðè çàãðóçêå	 big èçîáðàæåíèÿ
37
38				
39				// ëóïà (cursorshade)
40				cursorshade: true,						// ïîêàçàòü êîíòåéíåð ëóïû
41				magnifycursor: 'crosshair',				// âèä êóðñîðà ìûøè íàä tmb â ôîðìàòå CSS
42				cursorshadecolor: '#fff',				// öâåò êîíòåéíåðà ëóïû â ôîðìàòå CSS
43				cursorshadeopacity: 0.3,				// ïðîçðà÷íîñòü êîíòåéíåðà ëóïû
44				cursorshadeborder: '1px solid black', 	// âíåøíèé áîðäþðà êîíòåéíåðà ëóïû â ôîðìàòå CSS
45				zindex: '', 							// z-index êîíòåéíåðà ëóïû 
46				stepzoom: 0.5,							// øàã çóììèðîâàíèÿ ïðè ïðîêðóòêå êîëåñà ìûøè					
47				zoomrange: [2, 2], 						// äèàïàçîí çóììèðîâàíèÿ
48				zoomstart: 2,							// ñòàðòîâàÿ óñòàíîâêà çóììèðîâàíèÿ
49				disablewheel: true,					    // îòêëþ÷èòü ïðîêðóòêó äîêóìåíòà êîëåñîì ìûøè êîãäà êóðñîð íàä êàðòèíêîé tmb â ñëó÷àå åñëè íå çàäàí äèàïàçîí çóììèðîâàíèÿ
50
51				
52				// ïîäñêàçêà (statusdiv)
53				showstatus: true, 						// ïîêàçûâàòü ïðè íàâåäåíèè íà tmb help êîíòåéíåð
54				showstatustime: 2000,                   // âðåìÿ ïîêàçà help êîíòåéíåðà
55				statusdivborder: '1px solid black', 
56				statusdivbackground: '#C0C0C0', 
57				statusdivpadding: '4px', 
58				statusdivfont: 'bold 13px Arial', 
59				statusdivopacity: 0.8,
60
61				
62				// êîíòåéíåð big êàðòèíêè (magnifier)
63				magnifierpos: 'right',    				// ñòîðîíà îòîáðàæåíèÿ êîíòåéíåðà left/right
64				magnifiersize: [0, 0], 					// ðàçìåð êîíòåéíåðà  
65				magnifiereffectanimate: 'showIn',       // ýôôåêò ïîÿâëåíèÿ/ñêðûòèÿ fadeIn/showIn/slideIn
66				innerzoom: false,						// ïîêàçàòü êîíòåéíåð âíóòðè tmb
67				innerzoommagnifier: false,				// ïîêàçàòü êîíòåéíåð êàê ëóïó
68				descarea: false,						// ïîêàçàòü êîíòåéíåð â ïðîèçâîëüíîé îáëàñòè, îáëàñòü descarea äîëæíà èìåòü width è height				
69				leftoffset:  15, 						// îòñòóï ñëåâà îò tmb êàðòèíêè
70				rightoffset: 15, 						// îòñòóï ñïðàâà îò tmb êàðòèíêè
71				switchsides: true,						// ó÷èòûâàòü êðàé ýêðàíà
72                magnifierborder: '1px solid black',     // âíåøíèé áîðäþð
73
74				
75				// êîíòåéíåð òåêñòà ñíèçó ê êàðòèíêå
76				textdnbackground: '#fff',               
77				textdnpadding: '10px',
78				textdnfont: '13px/20px cursive',
79
80				
81                // êîýôôèöèåíòû ñêîðîñòè àíèìàöèè
82				scrollspeedanimate: 5 /*4*/,		    // ïðîêðóòêè big êàðòèíêè
83				zoomspeedanimate: 7, 			        // çóììèðîâàíèÿ (ïëàâíîñòü)
84				loopspeedanimate: 2.5 /*2.45342*/ ,		// ïåðåìåùåíèÿ îáëàñòè ëóïû è big êîíòåéíåðà â ðåæèìå ëóïû				
85				magnifierspeedanimate: 350, 		    // ïîêàçà big êîíòåéíåðà
86
87				
88				// âíåøíèé âèä
89				classmagnifier:   "magnifier",
90				classcursorshade: "cursorshade",
91				classstatusdiv:   "statusdiv",
92				classtextdn:      "textdn",
93				classtracker:	  "tracker"
94
95			},
96	
97		//isie: (function(){/*@cc_on @*//*@if(@_jscript_version >= 5)return true;@end @*/return false;})(), //is this IE?
98		isie: (function(){		
99			var nAgt = navigator.userAgent;			
100			if(nAgt.indexOf("MSIE") != -1) return true;
101			else return false;
102		})(),
103		
104		//isMobile: (function(){ if( navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/webOS/i) || navigator.userAgent.match(/iPad/i) || navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPod/i) ){ return true; } })(),
105		
106		highestzindex: function($img){
107		
108			var z = 0, $els = $img.parents().add($img), elz;			
109			$els.each(function(){			
110				elz = $(this).css('zIndex');
111				elz = isNaN(elz) ? 0 : + elz;
112				z = Math.max(z, elz);
113			});			
114			return z;
115		},
116
117		getboundary: function(b, val, specs){ 		 
118			if (b == "left"){			
119				var rb = -specs.img.w*specs.newpower + specs.magnifier.w;
120				return (val > 0) ? 0 : (val < rb) ? rb : val;
121			}
122			else{			
123				var tb = -specs.img.h*specs.newpower + specs.magnifier.h;
124				return (val > 0) ? 0 : (val < tb) ? tb : val;
125			}
126		},		
127		
128        controlLoop: function ($tracker) {			              			   
129			var self  = this,
130                specs = $tracker.data('specs');			 
131			if(!specs)	return;
132
133			var coords = specs.$img.offsetsl(),
134				pageX = self.cld.pageX999 - coords.left,
135				pageY = self.cld.pageY999 - coords.top;
136
137			self.cld.destU += (self.cld.pageX999 - self.cld.destU) / 2.45342;
138			self.cld.destV += (self.cld.pageY999 - self.cld.destV) / 2.45342; 
139
140			specs.$statusdiv.css({left: self.cld.destU - 10, top: self.cld.destV + 20});
141			
142			var	  csw = Math.round( specs.magnifier.w/specs.newpower), 
143				  csh = Math.round( specs.magnifier.h/specs.newpower);						
144
145				self.cld.destK += (pageX - self.cld.destK) / specs.setting.loopspeedanimate;
146				self.cld.destL += (pageY - self.cld.destL) / specs.setting.loopspeedanimate; 
147
148				specs.$cursorshade.css({ left: specs.img.w > csw ? Math.min(specs.img.w - csw, Math.max(0, self.cld.destK - csw/2 )) + coords.left - specs.cursorshade999.border999.left999 : coords.left - specs.cursorshade999.border999.left999, 
149										  top: specs.img.h > csh ? Math.min(specs.img.h - csh, Math.max(0, self.cld.destL - csh/2 )) + coords.top  - specs.cursorshade999.border999.top999  : coords.top  - specs.cursorshade999.border999.top999 });
150									   
151				if(specs.setting.innerzoommagnifier){
152				
153					self.cld.destM += (self.cld.pageX999 - self.cld.destM) / specs.setting.loopspeedanimate;
154					self.cld.destN += (self.cld.pageY999 - self.cld.destN) / specs.setting.loopspeedanimate; 
155
156					specs.$magnifier.css({
157						left: self.cld.destM - Math.round(specs.magnifier.w/2),
158						top:  self.cld.destN - Math.round(specs.magnifier.h/2)
159					});					
160					specs.$textdn.css({
161						left: self.cld.destM - Math.round(specs.magnifier.w/2), 
162						top:  self.cld.destN + specs.magnifier.h/2 
163					});					
164				}			
165 
166			self.cld.currU += (pageX - self.cld.currU) / specs.setting.scrollspeedanimate;
167			self.cld.currV += (pageY - self.cld.currV) / specs.setting.scrollspeedanimate; 			
168			
169			var newx = -self.cld.currU*specs.newpower + specs.magnifier.w/2; 
170			var newy = -self.cld.currV*specs.newpower + specs.magnifier.h/2;
171
172			specs.$bigimage.css({left: self.getboundary('left', newx, specs), top:  self.getboundary('top',  newy, specs)});
173            self.cld.controlTimer = setTimeout(function () {			
174					self.controlLoop($tracker);
175            }, 30);		
176
177        },
178
179        controlLoop2: function ($tracker) {			
180               			   
181			var self  = this,
182                specs = $tracker.data('specs');	
183            if(!specs)	return;		
184			
185			specs.currM += (specs.newpower - specs.currM) / specs.setting.zoomspeedanimate;			 	
186			specs.currM = Math.round( specs.currM * 1000 ) / 1000;	
187			
188			specs.$cursorshade.css({  width: specs.img.w > Math.round( specs.magnifier.w/specs.currM ) ? Math.round( specs.magnifier.w/specs.currM ) : specs.img.w, 
189									 height: specs.img.h > Math.round( specs.magnifier.h/specs.currM ) ? Math.round( specs.magnifier.h/specs.currM ) : specs.img.h });							  
190			specs.$bigimage.css({  width: Math.round( specs.currM*specs.bigimage.w*(specs.img.w/specs.bigimage.w) ), 
191								  height: Math.round( specs.currM*specs.bigimage.h*(specs.img.h/specs.bigimage.h) ) });
192
193            self.cld.controlTimer2 = setTimeout(function () {			
194					self.controlLoop2($tracker);
195            }, 30);	
196									   
197        },		
198		
199		cld:{},
200
201		showimage: function($tracker){
202		
203			var self   = this,
204				specs  = $tracker.data('specs'),
205				width  = specs.setting.magnifiersize[0], 
206				height = specs.setting.magnifiersize[1],
207				magcoords = {},
208				coords = specs.$img.offsetsl(),
209				func = function(){},
210                left1   = 0,
211                top1    = 0;				
212
213			magcoords.left = coords.left + (specs.setting.magnifierpos === 'left' ? -specs.magnifier.w - specs.setting.leftoffset : specs.img.w + specs.setting.rightoffset);											  
214			if(specs.setting.switchsides && !specs.setting.innerzoom){
215							
216				if(specs.setting.magnifierpos !== 'left' && magcoords.left + specs.magnifier.w + specs.setting.leftoffset >= $(window).width() && coords.left - specs.magnifier.w >= specs.setting.leftoffset)			
217					magcoords.left = coords.left - specs.magnifier.w - specs.setting.leftoffset;				
218				 else if(specs.setting.magnifierpos === 'left' && magcoords.left < 0)			
219					magcoords.left = coords.left + specs.img.w + specs.setting.rightoffset;					
220			}						
221			
222			left1  = magcoords.left;
223			top1   = coords.top;
224			specs.$magnifier.css({visibility: "visible", display: "none"});
225
226		    if(specs.setting.descarea){			
227			   left1 = $(specs.setting.descarea).offsetsl().left;
228			   top1  = $(specs.setting.descarea).offsetsl().top;			   
229			}					
230			if(specs.setting.innerzoommagnifier){                			
231				left1 = self.cld.pageX999 - Math.round(specs.magnifier.w/2);
232				top1  = self.cld.pageY999 - Math.round(specs.magnifier.h/2);
233			}
234
235			//*
236            func = function(){ 
237			
238				specs.$textdn.stop(true, true).fadeIn(specs.setting.magnifierspeedanimate);			    
239				if(!specs.setting.innerzoommagnifier) 
240					specs.$textdn.css({left: left1, top: top1 + height});
241			} // */			
242			
243			if(specs.setting.innerzoom){
244			
245				left1 = coords.left; 
246				top1  = coords.top;	
247				
248				func = function(){
249					specs.$img.css({visibility: "hidden"});
250					specs.$textdn.css({left: left1, top: top1 + height}).stop(true, true).fadeIn(specs.setting.magnifierspeedanimate);
251				};
252			}			
253			
254			switch (specs.setting.magnifiereffectanimate){			
255			case 'slideIn':
256				specs.$magnifier.css({
257							left:    left1, 
258							top:     top1 - height/3,
259							width:   width,							
260							height:  height							
261						 })
262					.stop(true, true).show()
263					.animate({top: top1}, specs.setting.magnifierspeedanimate, "easeOutBounceSL", func);								
264				break;				
265			case 'showIn':
266			    specs.$magnifier.css({ 	
267						left:   coords.left + Math.round(specs.img.w/2), 
268						top:  	coords.top  + Math.round(specs.img.h/2), 
269						width:  Math.round(specs.magnifier.w/5), 
270						height: Math.round(specs.magnifier.h/5) 
271					 })
272					.stop(true, true).show().css({opacity: "0.1"})
273					.animate({ 	
274						left: left1, 
275						top: top1, 
276						opacity: "1", 
277						width: width, 
278						height: height
279						
280					 }, specs.setting.magnifierspeedanimate, func );			
281				break;				
282			default:
283				specs.$magnifier.css({		
284							left:   left1, 
285							top:    top1,
286							width:  width, 
287							height: height							
288						 })
289					.stop(true, true)
290					.fadeIn(specs.setting.magnifierspeedanimate, func);								
291			}				
292			if (specs.setting.showstatus && (specs.title999 || specs.help))
293				specs.$statusdiv.html(specs.title999 + '<div style="font-size:80%">' + specs.help +'</div>')
294						  .stop(true, true)
295						  .fadeIn().delay(specs.setting.showstatustime).fadeOut("slow");
296			else specs.$statusdiv.hide();          						  
297		},
298
299		hideimage: function($tracker){
300		
301			var self = this,
302			    specs = $tracker.data('specs'),
303			    coords = specs.$img.offsetsl();
304			
305			switch (specs.setting.magnifiereffectanimate){		
306
307			case 'showIn':
308				specs.$magnifier.stop(true, true)
309						.animate({	
310							left: coords.left + Math.round(specs.img.w/2), 
311							top:  coords.top  + Math.round(specs.img.h/2), 
312							opacity: "0.1", 
313							width:  Math.round(specs.magnifier.w/5), 
314							height: Math.round(specs.magnifier.h/5)
315						 }, 
316						 specs.setting.magnifierspeedanimate, function(){specs.$magnifier.hide();});			
317				break;
318				
319			default:
320				specs.$magnifier.stop(true, true).fadeOut(specs.setting.magnifierspeedanimate);
321			}
322			
323		},		
324		
325        /* Init function start.  */
326        init: function ($img, options, gallery) {
327
328			var setting = $.extend({}, this.dsetting, options),
329			 basezindex = setting.zindex || this.highestzindex($img),
330                    img = {w:$img.width(), h:$img.height()},
331					cld = new cld(),
332				  title = $img.attr("data-title")        ? $img.attr("data-title")        : '',
333				   help = $img.attr("data-help")         ? $img.attr("data-help")         : '',
334			     textdn = $img.attr("data-text-bottom")  ? $img.attr("data-text-bottom")  : '',
335				   self = this,
336				   newpower,
337				   key,
338				   $magnifier,
339				   $cursorshade, 
340			       $statusdiv,				   
341			       $tracker,
342				   $textdn;				   
343
344			if(img.h === 0 || img.w === 0){			
345				$(new Image()).load(function(){				
346					self.init($img, options);					
347				}).attr("src", $img.attr("src"));				
348				return;
349			}
350			
351			$img.css({visibility: "visible"});
352			setting.largeimage = $img.attr("data-large") || $img.attr("src");			
353			
354			for (key in setting) 
355			  if(setting[key] === '') setting[key] = this.dsetting[key];						
356		 
357			if(setting.zoomrange[0] < setting.zoomstart)
358				 newpower = setting.zoomstart;
359			else newpower = setting.zoomrange[0];	
360		 
361			if( setting.magnifiersize.toString() === '0,0' || 
362				setting.magnifiersize.toString() === '')
363				 if(setting.innerzoommagnifier)
364					   setting.magnifiersize = [img.w/2, img.h/2];
365				 else  setting.magnifiersize = [img.w,   img.h];	
366
367			if(setting.descarea && $(setting.descarea).length){			
368				if( $(setting.descarea).width() === 0 || $(setting.descarea).height() === 0 )
369					 setting.descarea = false; 
370				else setting.magnifiersize = [$(setting.descarea).width(), $(setting.descarea).height()];	
371			}			
372			else setting.descarea = false;
373
374			if(setting.innerzoom){			
375				setting.magnifiersize = [img.w, img.h];			
376				if(!options.cursorshade)
377					setting.cursorshade = false;				
378				if(!options.scrollspeedanimate)
379					setting.scrollspeedanimate = 10;
380			}			
381
382			if(setting.innerzoommagnifier){	
383				if(!options.magnifycursor)				
384					if(window.chrome || window.sidebar)
385						 setting.magnifycursor = "none";				
386				setting.cursorshade = false;				
387				setting.magnifiereffectanimate = "fadeIn";				
388			}
389			
390			// === == === //
391			
392            function cld(){
393			  this.pageX999 = 0;
394			  this.pageY999 = 0; 
395			}
396			// === == === //
397			
398			function getspecs($bigimage){			
399				
400				$tracker.data("specs", {
401
402					setting:      setting,
403					title999:     title,
404					help:         help,
405					 
406					$img:         $img,
407					$magnifier:   $magnifier,
408					$bigimage:    $bigimage,
409					$statusdiv:   $statusdiv,
410					$cursorshade: $cursorshade,
411					$textdn:      $textdn,
412					
413					img: img,
414					bigimage:    { w:$bigimage.width(),    h:$bigimage.height()   },	
415					magnifier:   { w:$magnifier.width(),   h:$magnifier.height()  },
416					cursorshade999: { w:$cursorshade.width(), h:$cursorshade.height(), 
417								   border999:{ left999: parseInt($cursorshade.css("border-left-width")) || 0, 
418									            top999: parseInt($cursorshade.css("border-top-width"))  || 0}},
419					
420					currM:    newpower,
421					newpower: newpower	
422				});			
423									  
424			}			
425             // === == === //
426			 
427			function isImageLoaded(img) {			
428				if (!img.complete)
429					return false;				
430				if (typeof img.naturalWidth !== "undefined" && img.naturalWidth === 0)
431					return false;					
432				return true;
433			}
434            // === == === //
435			
436			var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'];
437			var toBind = 'onwheel' in document || document.documentMode >= 9 ? ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'];
438			var lowestDelta, lowestDeltaXY;
439
440			if ( $.event.fixHooks ) {
441				for ( var i = toFix.length; i; ) {
442					$.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
443				}
444			}
445
446			$.event.special.mousewheel = {
447				setup: function() {
448					if ( this.addEventListener ) {
449						for ( var i = toBind.length; i; ) {
450							this.addEventListener( toBind[--i], handler, false );
451						}
452					} else {
453						this.onmousewheel = handler;
454					}
455				},
456
457				teardown: function() {
458					if ( this.removeEventListener ) {
459						for ( var i = toBind.length; i; ) {
460							this.removeEventListener( toBind[--i], handler, false );
461						}
462					} else {
463						this.onmousewheel = null;
464					}
465				}
466			};
467			
468			function handler(event) {
469				var orgEvent = event || window.event,
470					args = [].slice.call(arguments, 1),
471					delta = 0,
472					deltaX = 0,
473					deltaY = 0,
474					absDelta = 0,
475					absDeltaXY = 0,
476					fn;
477				event = $.event.fix(orgEvent);
478				event.type = "mousewheel";
479
480				// Old school scrollwheel delta
481				if ( orgEvent.wheelDelta ) { delta = orgEvent.wheelDelta; }
482				if ( orgEvent.detail )     { delta = orgEvent.detail * -1; }
483
484				// New school wheel delta (wheel event)
485				if ( orgEvent.deltaY ) {
486					deltaY = orgEvent.deltaY * -1;
487					delta  = deltaY;
488				}
489				if ( orgEvent.deltaX ) {
490					deltaX = orgEvent.deltaX;
491					delta  = deltaX * -1;
492				}
493
494				// Webkit
495				if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY; }
496				if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = orgEvent.wheelDeltaX * -1; }
497
498				// Look for lowest delta to normalize the delta values
499				absDelta = Math.abs(delta);
500				if ( !lowestDelta || absDelta < lowestDelta ) { lowestDelta = absDelta; }
501				absDeltaXY = Math.max(Math.abs(deltaY), Math.abs(deltaX));
502				if ( !lowestDeltaXY || absDeltaXY < lowestDeltaXY ) { lowestDeltaXY = absDeltaXY; }
503
504				// Get a whole value for the deltas
505				fn = delta > 0 ? "floor" : "ceil";
506				delta  = Math[fn](delta / lowestDelta);
507				deltaX = Math[fn](deltaX / lowestDeltaXY);
508				deltaY = Math[fn](deltaY / lowestDeltaXY);
509
510				// Add event and delta to the front of the arguments
511				args.unshift(event, delta, deltaX, deltaY);
512
513				return ($.event.dispatch || $.event.handle).apply(this, args);
514			}						
515
516			// === == === //
517			
518			$.fn.offsetsl = function(){			
519			    var elem = this.get(0);
520				function getOffsetSum(elem) {
521					var top999 = 0, left999 = 0;					
522					while(elem) {
523						top999 = top999 + parseInt(elem.offsetTop);
524						left999 = left999 + parseInt(elem.offsetLeft);
525						elem = elem.offsetParent;
526					}
527					return {top: top999, left: left999}
528				}				
529				if (elem.getBoundingClientRect)
530					 return this.offset();
531				else return getOffsetSum(elem)				
532			}
533
534			// === == === //
535			
536			 $.easing.easeOutBounceSL = function (x, t, b, c, d) {
537				if ((t/=d) < (1/2.75)) {
538					return c*(7.5625*t*t) + b;
539				} else if (t < (2/2.75)) {
540					return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
541				} else if (t < (2.5/2.75)) {
542					return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
543				} else {
544					return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
545				}
546			}
547			
548			 // === == === //			 
549
550			$magnifier = $("<div />")
551				.attr({	"class": setting.classmagnifier })
552				.css({	position: "absolute",
553						zIndex: basezindex,
554						width:  setting.magnifiersize[0],
555						height: setting.magnifiersize[1],
556						left: -10000,
557						top: -10000,
558						visibility: "hidden",
559						overflow: "hidden" 
560					})
561				.appendTo(document.body); 
562
563			if(!options.classmagnifier)				
564				$magnifier.css({border: setting.magnifierborder});
565							
566			$cursorshade = $("<div />");
567			if(setting.cursorshade){			
568				$cursorshade.attr({ "class": setting.classcursorshade })
569					.css({
570							zIndex: basezindex,
571							display: "none",
572							position: "absolute",
573							width:  Math.round(setting.magnifiersize[0]/setting.zoomstart),
574							height: Math.round(setting.magnifiersize[1]/setting.zoomstart),
575							top:  0,
576							left: 0	
577						})
578					.appendTo(document.body);
579
580				if(!options.classcursorshade)
581					$cursorshade.css({
582							border:          setting.cursorshadeborder, 
583							opacity:         setting.cursorshadeopacity, 
584							backgroundColor: setting.cursorshadecolor					
585					});		   
586			}			
587
588			if(!setting.loadinggif)
589				setting.loadinggif = "data:image/gif;base64,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";
590			
591			$statusdiv = $("<div />")
592				.attr({	"class": setting.classstatusdiv + " preloadevt" })
593				.css({	position: "absolute",
594						display: "none",
595						zIndex: basezindex,
596						top:  0,
597						left: 0	
598					 })
599				.html('<img src="' + setting.loadinggif + '" />')
600				.appendTo(document.body); 
601		
602			$tracker = $("<div />")
603						.attr({	"class": setting.classtracker })
604						.css({	zIndex: basezindex,
605								backgroundImage: self.isie ? "url(cannotbe)" : "none",
606								position: "absolute",
607								width:  img.w,
608								height: img.h,
609								left:   gallery ? $img.offsetsl().left : -10000,
610								top:    gallery ? $img.offsetsl().top : -10000
611							}).appendTo(document.body);
612
613			$textdn = $("<div />");		
614			if(textdn){
615				$textdn.attr({	"class": setting.classtextdn })
616					.css({	position: "absolute",
617							zIndex: basezindex,
618							left: 0,
619							top: 0,
620							display: "none"
621						})
622					.html(textdn)	
623					.appendTo(document.body); 							
624				if(!options.classtextdn)				
625					$textdn.css({
626						border:     setting.magnifierborder, 
627						background: setting.textdnbackground,
628						padding:    setting.textdnpadding,
629						font: 		setting.textdnfont
630					});				
631				$textdn.css({width: setting.magnifiersize[0] - parseInt($textdn.css("padding-left")) - parseInt($textdn.css("padding-right"))});			
632			}
633			$tracker.data("largeimage", setting.largeimage);				
634
635			
636			// EVENTS			
637			$(window).bind("resize", function(){ 			
638					var o = $img.offsetsl();					
639					if($tracker.data("loadimgevt"))
640						$tracker.css({left: o.left, top: o.top});						
641					$statusdiv.filter(".preloadevt").css({left:o.left + img.w/2 - $statusdiv.width()/2, top:o.top + img.h/2 - $statusdiv.height()/2, visibility:'visible'});					
642			 });			
643			$(document).mousemove(function(e){				
644				self.cld.docX = e.pageX;				
645				if(self.cld.pageX999 !== self.cld.docX){
646					clearTimeout(self.cld.controlTimer);
647					clearTimeout(self.cld.controlTimer2);				
648					$img.css({visibility: "visible"});					
649					//$tracker.hide().css({left: 10000, top: 10000});					
650				}
651			});			
652           $img.mouseover(function(e){				
653				var o = $img.offsetsl();
654				$tracker.css({left: o.left, top: o.top}).show();		   
655		   });		
656           $tracker.mouseover(function(e){
657			   
658				self.cld.pageX999 = e.pageX;
659				self.cld.pageY999 = e.pageY;								
660				
661				cld.pageX999 = e.pageX;
662				cld.pageY999 = e.pageY;
663				
664				self.cld.docX = e.pageX;
665				
666				var o = $img.offsetsl(),
667					pageX = self.cld.pageX999 - o.left,
668					pageY = self.cld.pageY999 - o.top;						
669					
670				self.cld.destK = pageX;
671				self.cld.destL = pageY;
672
673				self.cld.currU = pageX;				
674				self.cld.currV = pageY;				
675				              			
676				self.cld.destM = self.cld.pageX999; 
677				self.cld.destN = self.cld.pageY999;
678				
679				self.cld.destU = self.cld.pageX999 - 10;
680				self.cld.destV = self.cld.pageY999 + 20;
681				
682				$tracker.css({cursor: setting.magnifycursor});
683				setting.largeimage = $img.attr("data-large") || $img.attr("src");
684								
685				$statusdiv.show();
686				clearTimeout(self.cld.controlTimer);
687				clearTimeout(self.cld.controlTimer2);				
688
689				if(setting.largeimage !== $tracker.data('largeimage')){	
690				
691					$(new Image()).load(function(){						
692					}).attr("src", setting.largeimage);	
693			
694					$($tracker).unbind();
695					$($statusdiv).remove();
696					$($cursorshade).remove(); 
697					$($magnifier).remove();						
698					$($tracker).remove();
699					$($textdn).remove();
700					
701					self.init($img, options, true);							
702				}								
703				if( $tracker.data("loadevt") ){							
704					$cursorshade.fadeIn();
705					self.showimage($tracker);
706					self.controlLoop($tracker);	
707					self.controlLoop2($tracker);
708				}
709				
710            });											
711            $tracker.mousemove(function(e){
712				setting.largeimage = $img.attr("data-large") || $img.attr("src");
713				if(setting.largeimage !== $tracker.data("largeimage")){	
714				
715					$(new Image()).load(function(){						
716					}).attr("src", setting.largeimage);	
717			
718					$($tracker).unbind();
719					$($statusdiv).remove();
720					$($cursorshade).remove(); 
721					$($magnifier).remove();						
722					$($tracker).remove();
723					$($textdn).remove();
724					
725					self.init($img, options, true);							
726				}
727				
728                self.cld.pageX999 = e.pageX;
729                self.cld.pageY999 = e.pageY;
730				
731				cld.pageX999 = e.pageX;
732                cld.pageY999 = e.pageY;
733				
734				self.cld.docX = e.pageX;
735            });			
736            $tracker.mouseout(function(e) {		
737				clearTimeout(self.cld.controlTimer);
738				clearTimeout(self.cld.controlTimer2);			
739			    $img.css({visibility: "visible"});			
740				$textdn.hide();					
741				$cursorshade.add($statusdiv.not(".preloadevt")).stop(true, true).hide();			
742            });
743			$tracker.one("mouseover", function(e){	
744			
745				var imgcoords = $img.offsetsl();
746				var $bigimage = $('<img src="' + setting.largeimage + '"/>').css({position:"relative", maxWidth:"none"}).appendTo($magnifier);				
747				if(!self.loaded999[setting.largeimage]){	
748					$tracker.css({opacity: setting.loadopacity, background: setting.loadbackground});				
749					$tracker.data("loadimgevt", true);
750					$statusdiv.css({left:imgcoords.left + img.w/2 - $statusdiv.width()/2, top:imgcoords.top + img.h/2 - $statusdiv.height()/2, visibility:'visible'});
751				}						 
752				$bigimage.bind("loadevt", function(event, e){ 
753					
754					if(e.type === "error") return;											
755					$tracker.mouseout(function(e){ //image onmouseout						
756							self.hideimage($tracker);
757							clearTimeout(self.cld.controlTimer);
758							clearTimeout(self.cld.controlTimer2);
759							$img.css({visibility: "visible"});
760                            $textdn.hide();							
761							$tracker.hide().css({left: -10000, top: -10000});							
762					});					
763					$tracker.mouseover(function(e){ //image onmouseover	
764							specs.currM = specs.newpower;						
765					}); 				
766					$tracker.data("loadimgevt", false);
767					$tracker.css({opacity:0, cursor:setting.magnifycursor});
768					$statusdiv.empty();
769					if(!options.classstatusdiv)
770						$statusdiv.css({
771										  border:     setting.statusdivborder, 
772										  background: setting.statusdivbackground, 
773										  padding:    setting.statusdivpadding, 
774										  font:       setting.statusdivfont, 
775										  opacity:    setting.statusdivopacity
776									   });										
777					$statusdiv.hide().removeClass("preloadevt");
778					self.loaded999[setting.largeimage] = true;
779					getspecs($bigimage); 		
780		            if(cld.pageX999 == self.cld.docX){
781						$cursorshade.fadeIn();
782						self.showimage($tracker);
783						clearTimeout(self.cld.controlTimer);
784						clearTimeout(self.cld.controlTimer2);
785						self.controlLoop($tracker);	
786						self.controlLoop2($tracker);					
787					}
788					
789					var specs = $tracker.data("specs");										    					
790					$bigimage.css({width: setting.zoomstart*specs.bigimage.w*(img.w/specs.bigimage.w), height: setting.zoomstart*specs.bigimage.h*(img.h/specs.bigimage.h)});				
791					$tracker.data("loadevt", true);					
792					
793					if (setting.zoomrange && setting.zoomrange[1] > setting.zoomrange[0]){ //if zoom range enabled					
794						$tracker.bind("mousewheel", function(e, delta){						
795							 var zoomdir  = delta < 0 ? "out" : "in",
796								 power    = specs.newpower,
797								 newpower = (zoomdir == "in") ? Math.min(power + setting.stepzoom, setting.zoomrange[1]) : Math.max(power - setting.stepzoom, setting.zoomrange[0]);
798
799							specs.newpower = newpower;
800							specs.delta = delta;							
801							e.preventDefault();
802						});
803						
804					} else if(setting.disablewheel){
805						$tracker.bind("mousewheel", function(e){e.preventDefault();});
806					}
807					
808				});	//end $bigimage onload */
809				
810				if ( isImageLoaded($bigimage.get(0)) )				
811					  $bigimage.trigger("loadevt", {type: "load"});					 
812				else  $bigimage.bind("load error", function(e){$bigimage.trigger("loadevt", e)});				
813			});
814        },	
815		loaded999: {}		
816	});
817})(jQuery, window);

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.