| After Width: | Height: | Size: 1.2 KiB | 
| @ -1,761 +0,0 @@ | |||||||
| // FancyZoom.js - v1.1 - http://www.fancyzoom.com
 |  | ||||||
| //
 |  | ||||||
| // Copyright (c) 2008 Cabel Sasser / Panic Inc
 |  | ||||||
| // All rights reserved.
 |  | ||||||
| //
 |  | ||||||
| //     Requires: FancyZoomHTML.js
 |  | ||||||
| // Instructions: Include JS files in page, call setupZoom() in onLoad. That's it!
 |  | ||||||
| //               Any <a href> links to images will be updated to zoom inline.
 |  | ||||||
| //               Add rel="nozoom" to your <a href> to disable zooming for an image.
 |  | ||||||
| //
 |  | ||||||
| // Redistribution and use of this effect in source form, with or without modification,
 |  | ||||||
| // are permitted provided that the following conditions are met:
 |  | ||||||
| //
 |  | ||||||
| // * USE OF SOURCE ON COMMERCIAL (FOR-PROFIT) WEBSITE REQUIRES ONE-TIME LICENSE FEE PER DOMAIN.
 |  | ||||||
| //   Reasonably priced! Visit www.fancyzoom.com for licensing instructions. Thanks!
 |  | ||||||
| //
 |  | ||||||
| // * Non-commercial (personal) website use is permitted without license/payment!
 |  | ||||||
| //
 |  | ||||||
| // * Redistribution of source code must retain the above copyright notice,
 |  | ||||||
| //   this list of conditions and the following disclaimer.
 |  | ||||||
| //
 |  | ||||||
| // * Redistribution of source code and derived works cannot be sold without specific
 |  | ||||||
| //   written prior permission.
 |  | ||||||
| //
 |  | ||||||
| // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 |  | ||||||
| // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 |  | ||||||
| // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 |  | ||||||
| // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 |  | ||||||
| // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 |  | ||||||
| // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 |  | ||||||
| // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 |  | ||||||
| // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 |  | ||||||
| // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 |  | ||||||
| // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 |  | ||||||
| // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 |  | ||||||
| 
 |  | ||||||
| var includeCaption = true; // Turn on the "caption" feature, and write out the caption HTML
 |  | ||||||
| var zoomTime       = 5;    // Milliseconds between frames of zoom animation
 |  | ||||||
| var zoomSteps      = 15;   // Number of zoom animation frames
 |  | ||||||
| var includeFade    = 1;    // Set to 1 to fade the image in / out as it zooms
 |  | ||||||
| var minBorder      = 90;   // Amount of padding between large, scaled down images, and the window edges
 |  | ||||||
| var shadowSettings = '0px 5px 25px rgba(0, 0, 0, '; // Blur, radius, color of shadow for compatible browsers
 |  | ||||||
| 
 |  | ||||||
| // Location of the zoom and shadow images
 |  | ||||||
| var zoomImagesURI; |  | ||||||
| 
 |  | ||||||
| // Init. Do not add anything below this line, unless it's something awesome.
 |  | ||||||
| 
 |  | ||||||
| var myWidth = 0, myHeight = 0, myScroll = 0; myScrollWidth = 0; myScrollHeight = 0; |  | ||||||
| var zoomOpen = false, preloadFrame = 1, preloadActive = false, preloadTime = 0, imgPreload = new Image(); |  | ||||||
| var preloadAnimTimer = 0; |  | ||||||
| 
 |  | ||||||
| var zoomActive = new Array(); var zoomTimer  = new Array(); |  | ||||||
| var zoomOrigW  = new Array(); var zoomOrigH  = new Array(); |  | ||||||
| var zoomOrigX  = new Array(); var zoomOrigY  = new Array(); |  | ||||||
| 
 |  | ||||||
| var zoomID         = "ZoomBox"; |  | ||||||
| var theID          = "ZoomImage"; |  | ||||||
| var zoomCaption    = "ZoomCaption"; |  | ||||||
| var zoomCaptionDiv = "ZoomCapDiv"; |  | ||||||
| 
 |  | ||||||
| if (navigator.userAgent.indexOf("MSIE") != -1) { |  | ||||||
| 	var browserIsIE = true; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Zoom: Setup The Page! Called in your <body>'s onLoad handler. 
 |  | ||||||
| 
 |  | ||||||
| function setupZoom(baseURI) { |  | ||||||
|     zoomImagesURI = baseURI + 'script/fancyzoom/images/'; |  | ||||||
| 
 |  | ||||||
|     prepZooms(); |  | ||||||
| 	insertZoomHTML(); |  | ||||||
| 	zoomdiv = document.getElementById(zoomID); |  | ||||||
| 	zoomimg = document.getElementById(theID); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Zoom: Inject Javascript functions into hrefs with a "zoom" rel.
 |  | ||||||
| // This is done at page load time via an onLoad() handler.
 |  | ||||||
| 
 |  | ||||||
| function prepZooms() { |  | ||||||
|     if (! document.getElementsByTagName) { |  | ||||||
| 		return; |  | ||||||
| 	} |  | ||||||
| 	var links = document.getElementsByTagName("a"); |  | ||||||
| 	for (i = 0; i < links.length; i++) { |  | ||||||
|         if (links[i].getAttribute("href")) { |  | ||||||
|             if (links[i].getAttribute("rel") == "zoom") { |  | ||||||
|                 links[i].onclick = function (event) { return zoomClick(this, event); }; |  | ||||||
|                 links[i].onmouseover = function () { zoomPreload(this); }; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Zoom: Load an image into an image object. When done loading, function sets preloadActive to false,
 |  | ||||||
| // so other bits know that they can proceed with the zoom.
 |  | ||||||
| // Preloaded image is stored in imgPreload and swapped out in the zoom function.
 |  | ||||||
| 
 |  | ||||||
| function zoomPreload(from) { |  | ||||||
| 
 |  | ||||||
| 	var theimage = from.getAttribute("href"); |  | ||||||
| 
 |  | ||||||
| 	// Only preload if we have to, i.e. the image isn't this image already
 |  | ||||||
| 
 |  | ||||||
| 	if (imgPreload.src.indexOf(from.getAttribute("href").substr(from.getAttribute("href").lastIndexOf("/"))) == -1) { |  | ||||||
| 		preloadActive = true; |  | ||||||
| 		imgPreload = new Image(); |  | ||||||
| 
 |  | ||||||
| 		// Set a function to fire when the preload is complete, setting flags along the way.
 |  | ||||||
| 
 |  | ||||||
| 		imgPreload.onload = function() { |  | ||||||
| 			preloadActive = false; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// Load it!
 |  | ||||||
| 		imgPreload.src = theimage; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Zoom: Start the preloading animation cycle.
 |  | ||||||
| 
 |  | ||||||
| function preloadAnimStart() { |  | ||||||
| 	preloadTime = new Date(); |  | ||||||
| 	document.getElementById("ZoomSpin").style.left = (myWidth / 2) + 'px'; |  | ||||||
| 	document.getElementById("ZoomSpin").style.top = ((myHeight / 2) + myScroll) + 'px'; |  | ||||||
| 	document.getElementById("ZoomSpin").style.visibility = "visible"; |  | ||||||
| 	preloadFrame = 1; |  | ||||||
| 	document.getElementById("SpinImage").src = zoomImagesURI+'zoom-spin-'+preloadFrame+'.png'; |  | ||||||
| 	preloadAnimTimer = setInterval("preloadAnim()", 100); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Zoom: Display and ANIMATE the jibber-jabber widget. Once preloadActive is false, bail and zoom it up!
 |  | ||||||
| 
 |  | ||||||
| function preloadAnim(from) { |  | ||||||
| 	if (preloadActive != false) { |  | ||||||
| 		document.getElementById("SpinImage").src = zoomImagesURI+'zoom-spin-'+preloadFrame+'.png'; |  | ||||||
| 		preloadFrame++; |  | ||||||
| 		if (preloadFrame > 12) preloadFrame = 1; |  | ||||||
| 	} else { |  | ||||||
| 		document.getElementById("ZoomSpin").style.visibility = "hidden"; |  | ||||||
| 		clearInterval(preloadAnimTimer); |  | ||||||
| 		preloadAnimTimer = 0; |  | ||||||
| 		zoomIn(preloadFrom); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // ZOOM CLICK: We got a click! Should we do the zoom? Or wait for the preload to complete?
 |  | ||||||
| // todo?: Double check that imgPreload src = clicked src
 |  | ||||||
| 
 |  | ||||||
| function zoomClick(from, evt) { |  | ||||||
| 
 |  | ||||||
| 	var shift = getShift(evt); |  | ||||||
| 
 |  | ||||||
| 	// Check for Command / Alt key. If pressed, pass them through -- don't zoom!
 |  | ||||||
| 	if (! evt && window.event && (window.event.metaKey || window.event.altKey)) { |  | ||||||
| 		return true; |  | ||||||
| 	} else if (evt && (evt.metaKey|| evt.altKey)) { |  | ||||||
| 		return true; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// Get browser dimensions
 |  | ||||||
| 	getSize(); |  | ||||||
| 
 |  | ||||||
| 	// If preloading still, wait, and display the spinner.
 |  | ||||||
| 	if (preloadActive == true) { |  | ||||||
| 		// But only display the spinner if it's not already being displayed!
 |  | ||||||
| 		if (preloadAnimTimer == 0) { |  | ||||||
| 			preloadFrom = from; |  | ||||||
| 			preloadAnimStart(); |  | ||||||
| 		} |  | ||||||
| 	} else { |  | ||||||
| 		// Otherwise, we're loaded: do the zoom!
 |  | ||||||
| 		zoomIn(from, shift); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return false; |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Zoom: Move an element in to endH endW, using zoomHost as a starting point.
 |  | ||||||
| // "from" is an object reference to the href that spawned the zoom.
 |  | ||||||
| 
 |  | ||||||
| function zoomIn(from, shift) { |  | ||||||
| 
 |  | ||||||
| 	zoomimg.src = from.getAttribute("href"); |  | ||||||
| 
 |  | ||||||
| 	// Determine the zoom settings from where we came from, the element in the <a>.
 |  | ||||||
| 	// If there's no element in the <a>, or we can't get the width, make stuff up
 |  | ||||||
| 
 |  | ||||||
| 	if (from.childNodes[0].width) { |  | ||||||
| 		startW = from.childNodes[0].width; |  | ||||||
| 		startH = from.childNodes[0].height; |  | ||||||
| 		startPos = findElementPos(from.childNodes[0]); |  | ||||||
| 	} else { |  | ||||||
| 		startW = 50; |  | ||||||
| 		startH = 12; |  | ||||||
| 		startPos = findElementPos(from); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	hostX = startPos[0]; |  | ||||||
| 	hostY = startPos[1]; |  | ||||||
| 
 |  | ||||||
| 	// Make up for a scrolled containing div.
 |  | ||||||
| 	// TODO: This HAS to move into findElementPos.
 |  | ||||||
| 
 |  | ||||||
| 	if (document.getElementById('scroller')) { |  | ||||||
| 		hostX = hostX - document.getElementById('scroller').scrollLeft; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// Determine the target zoom settings from the preloaded image object
 |  | ||||||
| 
 |  | ||||||
| 	endW = imgPreload.width; |  | ||||||
| 	endH = imgPreload.height; |  | ||||||
| 
 |  | ||||||
| 	// Start! But only if we're not zooming already!
 |  | ||||||
| 
 |  | ||||||
| 	if (zoomActive[theID] != true) { |  | ||||||
| 
 |  | ||||||
| 		// Clear everything out just in case something is already open
 |  | ||||||
| 
 |  | ||||||
| 		if (document.getElementById("ShadowBox")) { |  | ||||||
| 			document.getElementById("ShadowBox").style.visibility = "hidden"; |  | ||||||
| 		} else if (! browserIsIE) { |  | ||||||
| 
 |  | ||||||
| 			// Wipe timer if shadow is fading in still
 |  | ||||||
| 			if (fadeActive["ZoomImage"]) { |  | ||||||
| 				clearInterval(fadeTimer["ZoomImage"]); |  | ||||||
| 				fadeActive["ZoomImage"] = false; |  | ||||||
| 				fadeTimer["ZoomImage"] = false; |  | ||||||
| 			} |  | ||||||
| 
 |  | ||||||
| 			document.getElementById("ZoomImage").style.webkitBoxShadow = shadowSettings + '0.0)'; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		document.getElementById("ZoomClose").style.visibility = "hidden"; |  | ||||||
| 
 |  | ||||||
| 		// Setup the CAPTION, if existing. Hide it first, set the text.
 |  | ||||||
| 
 |  | ||||||
| 		if (includeCaption) { |  | ||||||
| 			document.getElementById(zoomCaptionDiv).style.visibility = "hidden"; |  | ||||||
| 			if (from.getAttribute('title') && includeCaption) { |  | ||||||
| 				// Yes, there's a caption, set it up
 |  | ||||||
| 				document.getElementById(zoomCaption).innerHTML = from.getAttribute('title'); |  | ||||||
| 			} else { |  | ||||||
| 				document.getElementById(zoomCaption).innerHTML = ""; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// Store original position in an array for future zoomOut.
 |  | ||||||
| 
 |  | ||||||
| 		zoomOrigW[theID] = startW; |  | ||||||
| 		zoomOrigH[theID] = startH; |  | ||||||
| 		zoomOrigX[theID] = hostX; |  | ||||||
| 		zoomOrigY[theID] = hostY; |  | ||||||
| 
 |  | ||||||
| 		// Now set the starting dimensions
 |  | ||||||
| 
 |  | ||||||
| 		zoomimg.style.width = startW + 'px'; |  | ||||||
| 		zoomimg.style.height = startH + 'px'; |  | ||||||
| 		zoomdiv.style.left = hostX + 'px'; |  | ||||||
| 		zoomdiv.style.top = hostY + 'px'; |  | ||||||
| 
 |  | ||||||
| 		// Show the zooming image container, make it invisible
 |  | ||||||
| 
 |  | ||||||
| 		if (includeFade == 1) { |  | ||||||
| 			setOpacity(0, zoomID); |  | ||||||
| 		} |  | ||||||
| 		zoomdiv.style.visibility = "visible"; |  | ||||||
| 
 |  | ||||||
| 		// If it's too big to fit in the window, shrink the width and height to fit (with ratio).
 |  | ||||||
| 
 |  | ||||||
| 		sizeRatio = endW / endH; |  | ||||||
| 		if (endW > myWidth - minBorder) { |  | ||||||
| 			endW = myWidth - minBorder; |  | ||||||
| 			endH = endW / sizeRatio; |  | ||||||
| 		} |  | ||||||
| 		if (endH > myHeight - minBorder) { |  | ||||||
| 			endH = myHeight - minBorder; |  | ||||||
| 			endW = endH * sizeRatio; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		zoomChangeX = ((myWidth / 2) - (endW / 2) - hostX); |  | ||||||
| 		zoomChangeY = (((myHeight / 2) - (endH / 2) - hostY) + myScroll); |  | ||||||
| 		zoomChangeW = (endW - startW); |  | ||||||
| 		zoomChangeH = (endH - startH); |  | ||||||
| 
 |  | ||||||
| 		// Shift key?
 |  | ||||||
| 
 |  | ||||||
| 		if (shift) { |  | ||||||
| 			tempSteps = zoomSteps * 7; |  | ||||||
| 		} else { |  | ||||||
| 			tempSteps = zoomSteps; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// Setup Zoom
 |  | ||||||
| 
 |  | ||||||
| 		zoomCurrent = 0; |  | ||||||
| 
 |  | ||||||
| 		// Setup Fade with Zoom, If Requested
 |  | ||||||
| 
 |  | ||||||
| 		if (includeFade == 1) { |  | ||||||
| 			fadeCurrent = 0; |  | ||||||
| 			fadeAmount = (0 - 100) / tempSteps; |  | ||||||
| 		} else { |  | ||||||
| 			fadeAmount = 0; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// Do It!
 |  | ||||||
| 
 |  | ||||||
| 		zoomTimer[theID] = setInterval("zoomElement('"+zoomID+"', '"+theID+"', "+zoomCurrent+", "+startW+", "+zoomChangeW+", "+startH+", "+zoomChangeH+", "+hostX+", "+zoomChangeX+", "+hostY+", "+zoomChangeY+", "+tempSteps+", "+includeFade+", "+fadeAmount+", 'zoomDoneIn(zoomID)')", zoomTime); |  | ||||||
| 		zoomActive[theID] = true; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Zoom it back out.
 |  | ||||||
| 
 |  | ||||||
| function zoomOut(from, evt) { |  | ||||||
| 
 |  | ||||||
| 	// Get shift key status.
 |  | ||||||
| 	// IE events don't seem to get passed through the function, so grab it from the window.
 |  | ||||||
| 
 |  | ||||||
| 	if (getShift(evt)) { |  | ||||||
| 		tempSteps = zoomSteps * 7; |  | ||||||
| 	} else { |  | ||||||
| 		tempSteps = zoomSteps; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// Check to see if something is happening/open
 |  | ||||||
| 
 |  | ||||||
| 	if (zoomActive[theID] != true) { |  | ||||||
| 
 |  | ||||||
| 		// First, get rid of the shadow if necessary.
 |  | ||||||
| 
 |  | ||||||
| 		if (document.getElementById("ShadowBox")) { |  | ||||||
| 			document.getElementById("ShadowBox").style.visibility = "hidden"; |  | ||||||
| 		} else if (! browserIsIE) { |  | ||||||
| 
 |  | ||||||
| 			// Wipe timer if shadow is fading in still
 |  | ||||||
| 			if (fadeActive["ZoomImage"]) { |  | ||||||
| 				clearInterval(fadeTimer["ZoomImage"]); |  | ||||||
| 				fadeActive["ZoomImage"] = false; |  | ||||||
| 				fadeTimer["ZoomImage"] = false; |  | ||||||
| 			} |  | ||||||
| 
 |  | ||||||
| 			document.getElementById("ZoomImage").style.webkitBoxShadow = shadowSettings + '0.0)'; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// ..and the close box...
 |  | ||||||
| 
 |  | ||||||
| 		document.getElementById("ZoomClose").style.visibility = "hidden"; |  | ||||||
| 
 |  | ||||||
| 		// ...and the caption if necessary!
 |  | ||||||
| 
 |  | ||||||
| 		if (includeCaption && document.getElementById(zoomCaption).innerHTML != "") { |  | ||||||
| 			// fadeElementSetup(zoomCaptionDiv, 100, 0, 5, 1);
 |  | ||||||
| 			document.getElementById(zoomCaptionDiv).style.visibility = "hidden"; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// Now, figure out where we came from, to get back there
 |  | ||||||
| 
 |  | ||||||
| 		startX = parseInt(zoomdiv.style.left); |  | ||||||
| 		startY = parseInt(zoomdiv.style.top); |  | ||||||
| 		startW = zoomimg.width; |  | ||||||
| 		startH = zoomimg.height; |  | ||||||
| 		zoomChangeX = zoomOrigX[theID] - startX; |  | ||||||
| 		zoomChangeY = zoomOrigY[theID] - startY; |  | ||||||
| 		zoomChangeW = zoomOrigW[theID] - startW; |  | ||||||
| 		zoomChangeH = zoomOrigH[theID] - startH; |  | ||||||
| 
 |  | ||||||
| 		// Setup Zoom
 |  | ||||||
| 
 |  | ||||||
| 		zoomCurrent = 0; |  | ||||||
| 
 |  | ||||||
| 		// Setup Fade with Zoom, If Requested
 |  | ||||||
| 
 |  | ||||||
| 		if (includeFade == 1) { |  | ||||||
| 			fadeCurrent = 0; |  | ||||||
| 			fadeAmount = (100 - 0) / tempSteps; |  | ||||||
| 		} else { |  | ||||||
| 			fadeAmount = 0; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// Do It!
 |  | ||||||
| 
 |  | ||||||
| 		zoomTimer[theID] = setInterval("zoomElement('"+zoomID+"', '"+theID+"', "+zoomCurrent+", "+startW+", "+zoomChangeW+", "+startH+", "+zoomChangeH+", "+startX+", "+zoomChangeX+", "+startY+", "+zoomChangeY+", "+tempSteps+", "+includeFade+", "+fadeAmount+", 'zoomDone(zoomID, theID)')", zoomTime); |  | ||||||
| 		zoomActive[theID] = true; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Finished Zooming In
 |  | ||||||
| 
 |  | ||||||
| function zoomDoneIn(zoomdiv, theID) { |  | ||||||
| 
 |  | ||||||
| 	// Note that it's open
 |  | ||||||
| 
 |  | ||||||
| 	zoomOpen = true; |  | ||||||
| 	zoomdiv = document.getElementById(zoomdiv); |  | ||||||
| 
 |  | ||||||
| 	// Position the table shadow behind the zoomed in image, and display it
 |  | ||||||
| 
 |  | ||||||
| 	if (document.getElementById("ShadowBox")) { |  | ||||||
| 
 |  | ||||||
| 		setOpacity(0, "ShadowBox"); |  | ||||||
| 		shadowdiv = document.getElementById("ShadowBox"); |  | ||||||
| 
 |  | ||||||
| 		shadowLeft = parseInt(zoomdiv.style.left) - 13; |  | ||||||
| 		shadowTop = parseInt(zoomdiv.style.top) - 8; |  | ||||||
| 		shadowWidth = zoomdiv.offsetWidth + 26; |  | ||||||
| 		shadowHeight = zoomdiv.offsetHeight + 26; |  | ||||||
| 
 |  | ||||||
| 		shadowdiv.style.width = shadowWidth + 'px'; |  | ||||||
| 		shadowdiv.style.height = shadowHeight + 'px'; |  | ||||||
| 		shadowdiv.style.left = shadowLeft + 'px'; |  | ||||||
| 		shadowdiv.style.top = shadowTop + 'px'; |  | ||||||
| 
 |  | ||||||
| 		document.getElementById("ShadowBox").style.visibility = "visible"; |  | ||||||
| 		fadeElementSetup("ShadowBox", 0, 100, 5); |  | ||||||
| 
 |  | ||||||
| 	} else if (! browserIsIE) { |  | ||||||
| 		// Or, do a fade of the modern shadow
 |  | ||||||
| 		fadeElementSetup("ZoomImage", 0, .8, 5, 0, "shadow"); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// Position and display the CAPTION, if existing
 |  | ||||||
| 
 |  | ||||||
| 	if (includeCaption && document.getElementById(zoomCaption).innerHTML != "") { |  | ||||||
| 		// setOpacity(0, zoomCaptionDiv);
 |  | ||||||
| 		zoomcapd = document.getElementById(zoomCaptionDiv); |  | ||||||
| 		zoomcapd.style.top = parseInt(zoomdiv.style.top) + (zoomdiv.offsetHeight + 15) + 'px'; |  | ||||||
| 		zoomcapd.style.left = (myWidth / 2) - (zoomcapd.offsetWidth / 2) + 'px'; |  | ||||||
| 		zoomcapd.style.visibility = "visible"; |  | ||||||
| 		// fadeElementSetup(zoomCaptionDiv, 0, 100, 5);
 |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// Display Close Box (fade it if it's not IE)
 |  | ||||||
| 
 |  | ||||||
| 	if (!browserIsIE) setOpacity(0, "ZoomClose"); |  | ||||||
| 	document.getElementById("ZoomClose").style.visibility = "visible"; |  | ||||||
| 	if (!browserIsIE) fadeElementSetup("ZoomClose", 0, 100, 5); |  | ||||||
| 
 |  | ||||||
| 	// Get keypresses
 |  | ||||||
| 	document.onkeypress = getKey; |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Finished Zooming Out
 |  | ||||||
| 
 |  | ||||||
| function zoomDone(zoomdiv, theID) { |  | ||||||
| 
 |  | ||||||
| 	// No longer open
 |  | ||||||
| 
 |  | ||||||
| 	zoomOpen = false; |  | ||||||
| 
 |  | ||||||
| 	// Clear stuff out, clean up
 |  | ||||||
| 
 |  | ||||||
| 	zoomOrigH[theID] = ""; |  | ||||||
| 	zoomOrigW[theID] = ""; |  | ||||||
| 	document.getElementById(zoomdiv).style.visibility = "hidden"; |  | ||||||
| 	zoomActive[theID] == false; |  | ||||||
| 
 |  | ||||||
| 	// Stop getting keypresses
 |  | ||||||
| 
 |  | ||||||
| 	document.onkeypress = null; |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Actually zoom the element
 |  | ||||||
| 
 |  | ||||||
| function zoomElement(zoomdiv, theID, zoomCurrent, zoomStartW, zoomChangeW, zoomStartH, zoomChangeH, zoomStartX, zoomChangeX, zoomStartY, zoomChangeY, zoomSteps, includeFade, fadeAmount, execWhenDone) { |  | ||||||
| 
 |  | ||||||
| 	// console.log("Zooming Step #"+zoomCurrent+ " of "+zoomSteps+" (zoom " + zoomStartW + "/" + zoomChangeW + ") (zoom " + zoomStartH + "/" + zoomChangeH + ")  (zoom " + zoomStartX + "/" + zoomChangeX + ")  (zoom " + zoomStartY + "/" + zoomChangeY + ") Fade: "+fadeAmount);
 |  | ||||||
| 
 |  | ||||||
| 	// Test if we're done, or if we continue
 |  | ||||||
| 
 |  | ||||||
| 	if (zoomCurrent == (zoomSteps + 1)) { |  | ||||||
| 		zoomActive[theID] = false; |  | ||||||
| 		clearInterval(zoomTimer[theID]); |  | ||||||
| 
 |  | ||||||
| 		if (execWhenDone != "") { |  | ||||||
| 			eval(execWhenDone); |  | ||||||
| 		} |  | ||||||
| 	} else { |  | ||||||
| 
 |  | ||||||
| 		// Do the Fade!
 |  | ||||||
| 
 |  | ||||||
| 		if (includeFade == 1) { |  | ||||||
| 			if (fadeAmount < 0) { |  | ||||||
| 				setOpacity(Math.abs(zoomCurrent * fadeAmount), zoomdiv); |  | ||||||
| 			} else { |  | ||||||
| 				setOpacity(100 - (zoomCurrent * fadeAmount), zoomdiv); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// Calculate this step's difference, and move it!
 |  | ||||||
| 
 |  | ||||||
| 		moveW = cubicInOut(zoomCurrent, zoomStartW, zoomChangeW, zoomSteps); |  | ||||||
| 		moveH = cubicInOut(zoomCurrent, zoomStartH, zoomChangeH, zoomSteps); |  | ||||||
| 		moveX = cubicInOut(zoomCurrent, zoomStartX, zoomChangeX, zoomSteps); |  | ||||||
| 		moveY = cubicInOut(zoomCurrent, zoomStartY, zoomChangeY, zoomSteps); |  | ||||||
| 
 |  | ||||||
| 		document.getElementById(zoomdiv).style.left = moveX + 'px'; |  | ||||||
| 		document.getElementById(zoomdiv).style.top = moveY + 'px'; |  | ||||||
| 		zoomimg.style.width = moveW + 'px'; |  | ||||||
| 		zoomimg.style.height = moveH + 'px'; |  | ||||||
| 
 |  | ||||||
| 		zoomCurrent++; |  | ||||||
| 
 |  | ||||||
| 		clearInterval(zoomTimer[theID]); |  | ||||||
| 		zoomTimer[theID] = setInterval("zoomElement('"+zoomdiv+"', '"+theID+"', "+zoomCurrent+", "+zoomStartW+", "+zoomChangeW+", "+zoomStartH+", "+zoomChangeH+", "+zoomStartX+", "+zoomChangeX+", "+zoomStartY+", "+zoomChangeY+", "+zoomSteps+", "+includeFade+", "+fadeAmount+", '"+execWhenDone+"')", zoomTime); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Zoom Utility: Get Key Press when image is open, and act accordingly
 |  | ||||||
| 
 |  | ||||||
| function getKey(evt) { |  | ||||||
| 	if (! evt) { |  | ||||||
| 		theKey = event.keyCode; |  | ||||||
| 	} else { |  | ||||||
| 		theKey = evt.keyCode; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if (theKey == 27) { // ESC
 |  | ||||||
| 		zoomOut(this, evt); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| ////////////////////////////
 |  | ||||||
| //
 |  | ||||||
| // FADE Functions
 |  | ||||||
| //
 |  | ||||||
| 
 |  | ||||||
| function fadeOut(elem) { |  | ||||||
| 	if (elem.id) { |  | ||||||
| 		fadeElementSetup(elem.id, 100, 0, 10); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function fadeIn(elem) { |  | ||||||
| 	if (elem.id) { |  | ||||||
| 		fadeElementSetup(elem.id, 0, 100, 10); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Fade: Initialize the fade function
 |  | ||||||
| 
 |  | ||||||
| var fadeActive = new Array(); |  | ||||||
| var fadeQueue  = new Array(); |  | ||||||
| var fadeTimer  = new Array(); |  | ||||||
| var fadeClose  = new Array(); |  | ||||||
| var fadeMode   = new Array(); |  | ||||||
| 
 |  | ||||||
| function fadeElementSetup(theID, fdStart, fdEnd, fdSteps, fdClose, fdMode) { |  | ||||||
| 
 |  | ||||||
| 	// alert("Fading: "+theID+" Steps: "+fdSteps+" Mode: "+fdMode);
 |  | ||||||
| 
 |  | ||||||
| 	if (fadeActive[theID] == true) { |  | ||||||
| 		// Already animating, queue up this command
 |  | ||||||
| 		fadeQueue[theID] = new Array(theID, fdStart, fdEnd, fdSteps); |  | ||||||
| 	} else { |  | ||||||
| 		fadeSteps = fdSteps; |  | ||||||
| 		fadeCurrent = 0; |  | ||||||
| 		fadeAmount = (fdStart - fdEnd) / fadeSteps; |  | ||||||
| 		fadeTimer[theID] = setInterval("fadeElement('"+theID+"', '"+fadeCurrent+"', '"+fadeAmount+"', '"+fadeSteps+"')", 15); |  | ||||||
| 		fadeActive[theID] = true; |  | ||||||
| 		fadeMode[theID] = fdMode; |  | ||||||
| 
 |  | ||||||
| 		if (fdClose == 1) { |  | ||||||
| 			fadeClose[theID] = true; |  | ||||||
| 		} else { |  | ||||||
| 			fadeClose[theID] = false; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Fade: Do the fade. This function will call itself, modifying the parameters, so
 |  | ||||||
| // many instances can run concurrently. Can fade using opacity, or fade using a box-shadow.
 |  | ||||||
| 
 |  | ||||||
| function fadeElement(theID, fadeCurrent, fadeAmount, fadeSteps) { |  | ||||||
| 
 |  | ||||||
| 	if (fadeCurrent == fadeSteps) { |  | ||||||
| 
 |  | ||||||
| 		// We're done, so clear.
 |  | ||||||
| 
 |  | ||||||
| 		clearInterval(fadeTimer[theID]); |  | ||||||
| 		fadeActive[theID] = false; |  | ||||||
| 		fadeTimer[theID] = false; |  | ||||||
| 
 |  | ||||||
| 		// Should we close it once the fade is complete?
 |  | ||||||
| 
 |  | ||||||
| 		if (fadeClose[theID] == true) { |  | ||||||
| 			document.getElementById(theID).style.visibility = "hidden"; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// Hang on.. did a command queue while we were working? If so, make it happen now
 |  | ||||||
| 
 |  | ||||||
| 		if (fadeQueue[theID] && fadeQueue[theID] != false) { |  | ||||||
| 			fadeElementSetup(fadeQueue[theID][0], fadeQueue[theID][1], fadeQueue[theID][2], fadeQueue[theID][3]); |  | ||||||
| 			fadeQueue[theID] = false; |  | ||||||
| 		} |  | ||||||
| 	} else { |  | ||||||
| 
 |  | ||||||
| 		fadeCurrent++; |  | ||||||
| 
 |  | ||||||
| 		// Now actually do the fade adjustment.
 |  | ||||||
| 
 |  | ||||||
| 		if (fadeMode[theID] == "shadow") { |  | ||||||
| 
 |  | ||||||
| 			// Do a special fade on the webkit-box-shadow of the object
 |  | ||||||
| 
 |  | ||||||
| 			if (fadeAmount < 0) { |  | ||||||
| 				document.getElementById(theID).style.webkitBoxShadow = shadowSettings + (Math.abs(fadeCurrent * fadeAmount)) + ')'; |  | ||||||
| 			} else { |  | ||||||
| 				document.getElementById(theID).style.webkitBoxShadow = shadowSettings + (100 - (fadeCurrent * fadeAmount)) + ')'; |  | ||||||
| 			} |  | ||||||
| 
 |  | ||||||
| 		} else { |  | ||||||
| 
 |  | ||||||
| 			// Set the opacity depending on if we're adding or subtracting (pos or neg)
 |  | ||||||
| 
 |  | ||||||
| 			if (fadeAmount < 0) { |  | ||||||
| 				setOpacity(Math.abs(fadeCurrent * fadeAmount), theID); |  | ||||||
| 			} else { |  | ||||||
| 				setOpacity(100 - (fadeCurrent * fadeAmount), theID); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// Keep going, and send myself the updated variables
 |  | ||||||
| 		clearInterval(fadeTimer[theID]); |  | ||||||
| 		fadeTimer[theID] = setInterval("fadeElement('"+theID+"', '"+fadeCurrent+"', '"+fadeAmount+"', '"+fadeSteps+"')", 15); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| ////////////////////////////
 |  | ||||||
| //
 |  | ||||||
| // UTILITY functions
 |  | ||||||
| //
 |  | ||||||
| 
 |  | ||||||
| // Utility: Set the opacity, compatible with a number of browsers. Value from 0 to 100.
 |  | ||||||
| 
 |  | ||||||
| function setOpacity(opacity, theID) { |  | ||||||
| 
 |  | ||||||
| 	var object = document.getElementById(theID).style; |  | ||||||
| 
 |  | ||||||
| 	// If it's 100, set it to 99 for Firefox.
 |  | ||||||
| 
 |  | ||||||
| 	if (navigator.userAgent.indexOf("Firefox") != -1) { |  | ||||||
| 		if (opacity == 100) { opacity = 99.9999; } // This is majorly awkward
 |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// Multi-browser opacity setting
 |  | ||||||
| 
 |  | ||||||
| 	object.filter = "alpha(opacity=" + opacity + ")"; // IE/Win
 |  | ||||||
| 	object.opacity = (opacity / 100);                 // Safari 1.2, Firefox+Mozilla
 |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Utility: Math functions for animation calucations - From http://www.robertpenner.com/easing/
 |  | ||||||
| //
 |  | ||||||
| // t = time, b = begin, c = change, d = duration
 |  | ||||||
| // time = current frame, begin is fixed, change is basically finish - begin, duration is fixed (frames),
 |  | ||||||
| 
 |  | ||||||
| function linear(t, b, c, d) |  | ||||||
| { |  | ||||||
| 	return c*t/d + b; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function sineInOut(t, b, c, d) |  | ||||||
| { |  | ||||||
| 	return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function cubicIn(t, b, c, d) { |  | ||||||
| 	return c*(t/=d)*t*t + b; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function cubicOut(t, b, c, d) { |  | ||||||
| 	return c*((t=t/d-1)*t*t + 1) + b; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function cubicInOut(t, b, c, d) |  | ||||||
| { |  | ||||||
| 	if ((t/=d/2) < 1) return c/2*t*t*t + b; |  | ||||||
| 	return c/2*((t-=2)*t*t + 2) + b; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function bounceOut(t, b, c, d) |  | ||||||
| { |  | ||||||
| 	if ((t/=d) < (1/2.75)){ |  | ||||||
| 		return c*(7.5625*t*t) + b; |  | ||||||
| 	} else if (t < (2/2.75)){ |  | ||||||
| 		return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; |  | ||||||
| 	} else if (t < (2.5/2.75)){ |  | ||||||
| 		return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; |  | ||||||
| 	} else { |  | ||||||
| 		return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // Utility: Get the size of the window, and set myWidth and myHeight
 |  | ||||||
| // Credit to quirksmode.org
 |  | ||||||
| 
 |  | ||||||
| function getSize() { |  | ||||||
| 
 |  | ||||||
| 	// Window Size
 |  | ||||||
| 
 |  | ||||||
| 	if (self.innerHeight) { // Everyone but IE
 |  | ||||||
| 		myWidth = window.innerWidth; |  | ||||||
| 		myHeight = window.innerHeight; |  | ||||||
| 		myScroll = window.pageYOffset; |  | ||||||
| 	} else if (document.documentElement && document.documentElement.clientHeight) { // IE6 Strict
 |  | ||||||
| 		myWidth = document.documentElement.clientWidth; |  | ||||||
| 		myHeight = document.documentElement.clientHeight; |  | ||||||
| 		myScroll = document.documentElement.scrollTop; |  | ||||||
| 	} else if (document.body) { // Other IE, such as IE7
 |  | ||||||
| 		myWidth = document.body.clientWidth; |  | ||||||
| 		myHeight = document.body.clientHeight; |  | ||||||
| 		myScroll = document.body.scrollTop; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// Page size w/offscreen areas
 |  | ||||||
| 
 |  | ||||||
| 	if (window.innerHeight && window.scrollMaxY) { |  | ||||||
| 		myScrollWidth = document.body.scrollWidth; |  | ||||||
| 		myScrollHeight = window.innerHeight + window.scrollMaxY; |  | ||||||
| 	} else if (document.body.scrollHeight > document.body.offsetHeight) { // All but Explorer Mac
 |  | ||||||
| 		myScrollWidth = document.body.scrollWidth; |  | ||||||
| 		myScrollHeight = document.body.scrollHeight; |  | ||||||
| 	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
 |  | ||||||
| 		myScrollWidth = document.body.offsetWidth; |  | ||||||
| 		myScrollHeight = document.body.offsetHeight; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Utility: Get Shift Key Status
 |  | ||||||
| // IE events don't seem to get passed through the function, so grab it from the window.
 |  | ||||||
| 
 |  | ||||||
| function getShift(evt) { |  | ||||||
| 	var shift = false; |  | ||||||
| 	if (! evt && window.event) { |  | ||||||
| 		shift = window.event.shiftKey; |  | ||||||
| 	} else if (evt) { |  | ||||||
| 		shift = evt.shiftKey; |  | ||||||
| 		if (shift) evt.stopPropagation(); // Prevents Firefox from doing shifty things
 |  | ||||||
| 	} |  | ||||||
| 	return shift; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Utility: Find the Y position of an element on a page. Return Y and X as an array
 |  | ||||||
| 
 |  | ||||||
| function findElementPos(elemFind) |  | ||||||
| { |  | ||||||
| 	var elemX = 0; |  | ||||||
| 	var elemY = 0; |  | ||||||
| 	do { |  | ||||||
| 		elemX += elemFind.offsetLeft; |  | ||||||
| 		elemY += elemFind.offsetTop; |  | ||||||
| 	} while ( elemFind = elemFind.offsetParent ) |  | ||||||
| 
 |  | ||||||
| 	return Array(elemX, elemY); |  | ||||||
| } |  | ||||||
| @ -1,318 +0,0 @@ | |||||||
| // FancyZoomHTML.js - v1.0
 |  | ||||||
| // Used to draw necessary HTML elements for FancyZoom
 |  | ||||||
| //
 |  | ||||||
| // Copyright (c) 2008 Cabel Sasser / Panic Inc
 |  | ||||||
| // All rights reserved.
 |  | ||||||
| 
 |  | ||||||
| function insertZoomHTML() { |  | ||||||
| 
 |  | ||||||
| 	// All of this junk creates the three <div>'s used to hold the closebox, image, and zoom shadow.
 |  | ||||||
| 	
 |  | ||||||
| 	var inBody = document.getElementsByTagName("body").item(0); |  | ||||||
| 	
 |  | ||||||
| 	// WAIT SPINNER
 |  | ||||||
| 	
 |  | ||||||
| 	var inSpinbox = document.createElement("div"); |  | ||||||
| 	inSpinbox.setAttribute('id', 'ZoomSpin'); |  | ||||||
| 	inSpinbox.style.position = 'absolute'; |  | ||||||
| 	inSpinbox.style.left = '10px'; |  | ||||||
| 	inSpinbox.style.top = '10px'; |  | ||||||
| 	inSpinbox.style.visibility = 'hidden'; |  | ||||||
| 	inSpinbox.style.zIndex = '525'; |  | ||||||
| 	inBody.insertBefore(inSpinbox, inBody.firstChild); |  | ||||||
| 	
 |  | ||||||
| 	var inSpinImage = document.createElement("img"); |  | ||||||
| 	inSpinImage.setAttribute('id', 'SpinImage'); |  | ||||||
| 	inSpinImage.setAttribute('src', zoomImagesURI+'zoom-spin-1.png'); |  | ||||||
| 	inSpinbox.appendChild(inSpinImage); |  | ||||||
| 	
 |  | ||||||
| 	// ZOOM IMAGE
 |  | ||||||
| 	//
 |  | ||||||
| 	// <div id="ZoomBox">
 |  | ||||||
| 	//   <a href="javascript:zoomOut();"><img src="/images/spacer.gif" id="ZoomImage" border="0"></a> <!-- THE IMAGE -->
 |  | ||||||
| 	//   <div id="ZoomClose">
 |  | ||||||
| 	//     <a href="javascript:zoomOut();"><img src="/images/closebox.png" width="30" height="30" border="0"></a>
 |  | ||||||
| 	//   </div>
 |  | ||||||
| 	// </div>
 |  | ||||||
| 	
 |  | ||||||
| 	var inZoombox = document.createElement("div"); |  | ||||||
| 	inZoombox.setAttribute('id', 'ZoomBox'); |  | ||||||
| 	
 |  | ||||||
| 	inZoombox.style.position = 'absolute'; 
 |  | ||||||
| 	inZoombox.style.left = '10px'; |  | ||||||
| 	inZoombox.style.top = '10px'; |  | ||||||
| 	inZoombox.style.visibility = 'hidden'; |  | ||||||
| 	inZoombox.style.zIndex = '499'; |  | ||||||
| 	
 |  | ||||||
| 	inBody.insertBefore(inZoombox, inSpinbox.nextSibling); |  | ||||||
| 	
 |  | ||||||
| 	var inImage1 = document.createElement("img"); |  | ||||||
| 	inImage1.onclick = function (event) { zoomOut(this, event); return false; };	
 |  | ||||||
| 	inImage1.setAttribute('src',zoomImagesURI+'spacer.gif'); |  | ||||||
| 	inImage1.setAttribute('id','ZoomImage'); |  | ||||||
| 	inImage1.setAttribute('border', '0'); |  | ||||||
| 	// inImage1.setAttribute('onMouseOver', 'zoomMouseOver();')
 |  | ||||||
| 	// inImage1.setAttribute('onMouseOut', 'zoomMouseOut();')
 |  | ||||||
| 	
 |  | ||||||
| 	// This must be set first, so we can later test it using webkitBoxShadow.
 |  | ||||||
| 	inImage1.setAttribute('style', '-webkit-box-shadow: '+shadowSettings+'0.0)'); |  | ||||||
| 	inImage1.style.display = 'block'; |  | ||||||
| 	inImage1.style.width = '10px'; |  | ||||||
| 	inImage1.style.height = '10px'; |  | ||||||
| 	inImage1.style.cursor = 'pointer'; // -webkit-zoom-out?
 |  | ||||||
| 	inZoombox.appendChild(inImage1); |  | ||||||
| 
 |  | ||||||
| 	var inClosebox = document.createElement("div"); |  | ||||||
| 	inClosebox.setAttribute('id', 'ZoomClose'); |  | ||||||
| 	inClosebox.style.position = 'absolute'; |  | ||||||
| 	
 |  | ||||||
| 	// In MSIE, we need to put the close box inside the image.
 |  | ||||||
| 	// It's 2008 and I'm having to do a browser detect? Sigh.
 |  | ||||||
| 	if (browserIsIE) { |  | ||||||
| 		inClosebox.style.left = '-1px'; |  | ||||||
| 		inClosebox.style.top = '0px';	
 |  | ||||||
| 	} else { |  | ||||||
| 		inClosebox.style.left = '-15px'; |  | ||||||
| 		inClosebox.style.top = '-15px'; |  | ||||||
| 	} |  | ||||||
| 	
 |  | ||||||
| 	inClosebox.style.visibility = 'hidden'; |  | ||||||
| 	inZoombox.appendChild(inClosebox); |  | ||||||
| 		
 |  | ||||||
| 	var inImage2 = document.createElement("img"); |  | ||||||
| 	inImage2.onclick = function (event) { zoomOut(this, event); return false; };	
 |  | ||||||
| 	inImage2.setAttribute('src',zoomImagesURI+'closebox.png');		
 |  | ||||||
| 	inImage2.setAttribute('width','30'); |  | ||||||
| 	inImage2.setAttribute('height','30'); |  | ||||||
| 	inImage2.setAttribute('border','0'); |  | ||||||
| 	inImage2.style.cursor = 'pointer';		
 |  | ||||||
| 	inClosebox.appendChild(inImage2); |  | ||||||
| 	
 |  | ||||||
| 	// SHADOW
 |  | ||||||
| 	// Only draw the table-based shadow if the programatic webkitBoxShadow fails!
 |  | ||||||
| 	// Also, don't draw it if we're IE -- it wouldn't look quite right anyway.
 |  | ||||||
| 	
 |  | ||||||
| 	if (! document.getElementById('ZoomImage').style.webkitBoxShadow && ! browserIsIE) { |  | ||||||
| 
 |  | ||||||
| 		// SHADOW BASE
 |  | ||||||
| 		
 |  | ||||||
| 		var inFixedBox = document.createElement("div"); |  | ||||||
| 		inFixedBox.setAttribute('id', 'ShadowBox'); |  | ||||||
| 		inFixedBox.style.position = 'absolute'; 
 |  | ||||||
| 		inFixedBox.style.left = '50px'; |  | ||||||
| 		inFixedBox.style.top = '50px'; |  | ||||||
| 		inFixedBox.style.width = '100px'; |  | ||||||
| 		inFixedBox.style.height = '100px'; |  | ||||||
| 		inFixedBox.style.visibility = 'hidden'; |  | ||||||
| 		inFixedBox.style.zIndex = '498'; |  | ||||||
| 		inBody.insertBefore(inFixedBox, inZoombox.nextSibling);	
 |  | ||||||
| 	
 |  | ||||||
| 		// SHADOW
 |  | ||||||
| 		// Now, the shadow table. Skip if not compatible, or irrevelant with -box-shadow.
 |  | ||||||
| 		
 |  | ||||||
| 		// <div id="ShadowBox"><table border="0" width="100%" height="100%" cellpadding="0" cellspacing="0"> X
 |  | ||||||
| 		//   <tr height="25">
 |  | ||||||
| 		//   <td width="27"><img src="/images/zoom-shadow1.png" width="27" height="25"></td>
 |  | ||||||
| 		//   <td background="/images/zoom-shadow2.png"> </td>
 |  | ||||||
| 		//   <td width="27"><img src="/images/zoom-shadow3.png" width="27" height="25"></td>
 |  | ||||||
| 		//   </tr>
 |  | ||||||
| 		
 |  | ||||||
| 		var inShadowTable = document.createElement("table"); |  | ||||||
| 		inShadowTable.setAttribute('border', '0'); |  | ||||||
| 		inShadowTable.setAttribute('width', '100%'); |  | ||||||
| 		inShadowTable.setAttribute('height', '100%'); |  | ||||||
| 		inShadowTable.setAttribute('cellpadding', '0'); |  | ||||||
| 		inShadowTable.setAttribute('cellspacing', '0'); |  | ||||||
| 		inFixedBox.appendChild(inShadowTable); |  | ||||||
| 
 |  | ||||||
| 		var inShadowTbody = document.createElement("tbody");	// Needed for IE (for HTML4).
 |  | ||||||
| 		inShadowTable.appendChild(inShadowTbody); |  | ||||||
| 		
 |  | ||||||
| 		var inRow1 = document.createElement("tr"); |  | ||||||
| 		inRow1.style.height = '25px'; |  | ||||||
| 		inShadowTbody.appendChild(inRow1); |  | ||||||
| 		
 |  | ||||||
| 		var inCol1 = document.createElement("td"); |  | ||||||
| 		inCol1.style.width = '27px'; |  | ||||||
| 		inRow1.appendChild(inCol1);  
 |  | ||||||
| 		var inShadowImg1 = document.createElement("img"); |  | ||||||
| 		inShadowImg1.setAttribute('src', zoomImagesURI+'zoom-shadow1.png'); |  | ||||||
| 		inShadowImg1.setAttribute('width', '27'); |  | ||||||
| 		inShadowImg1.setAttribute('height', '25'); |  | ||||||
| 		inShadowImg1.style.display = 'block'; |  | ||||||
| 		inCol1.appendChild(inShadowImg1); |  | ||||||
| 		
 |  | ||||||
| 		var inCol2 = document.createElement("td"); |  | ||||||
| 		inCol2.setAttribute('background', zoomImagesURI+'zoom-shadow2.png'); |  | ||||||
| 		inRow1.appendChild(inCol2); |  | ||||||
| 		// inCol2.innerHTML = '<img src=';
 |  | ||||||
| 		var inSpacer1 = document.createElement("img"); |  | ||||||
| 		inSpacer1.setAttribute('src',zoomImagesURI+'spacer.gif'); |  | ||||||
| 		inSpacer1.setAttribute('height', '1'); |  | ||||||
| 		inSpacer1.setAttribute('width', '1'); |  | ||||||
| 		inSpacer1.style.display = 'block'; |  | ||||||
| 		inCol2.appendChild(inSpacer1); |  | ||||||
| 		
 |  | ||||||
| 		var inCol3 = document.createElement("td"); |  | ||||||
| 		inCol3.style.width = '27px'; |  | ||||||
| 		inRow1.appendChild(inCol3);  
 |  | ||||||
| 		var inShadowImg3 = document.createElement("img"); |  | ||||||
| 		inShadowImg3.setAttribute('src', zoomImagesURI+'zoom-shadow3.png'); |  | ||||||
| 		inShadowImg3.setAttribute('width', '27'); |  | ||||||
| 		inShadowImg3.setAttribute('height', '25'); |  | ||||||
| 		inShadowImg3.style.display = 'block'; |  | ||||||
| 		inCol3.appendChild(inShadowImg3); |  | ||||||
| 		
 |  | ||||||
| 		//   <tr>
 |  | ||||||
| 		//   <td background="/images/zoom-shadow4.png"> </td>
 |  | ||||||
| 		//   <td bgcolor="#ffffff"> </td>
 |  | ||||||
| 		//   <td background="/images/zoom-shadow5.png"> </td>
 |  | ||||||
| 		//   </tr>
 |  | ||||||
| 		
 |  | ||||||
| 		inRow2 = document.createElement("tr"); |  | ||||||
| 		inShadowTbody.appendChild(inRow2); |  | ||||||
| 		
 |  | ||||||
| 		var inCol4 = document.createElement("td"); |  | ||||||
| 		inCol4.setAttribute('background', zoomImagesURI+'zoom-shadow4.png'); |  | ||||||
| 		inRow2.appendChild(inCol4); |  | ||||||
| 		// inCol4.innerHTML = ' ';
 |  | ||||||
| 		var inSpacer2 = document.createElement("img"); |  | ||||||
| 		inSpacer2.setAttribute('src',zoomImagesURI+'spacer.gif'); |  | ||||||
| 		inSpacer2.setAttribute('height', '1'); |  | ||||||
| 		inSpacer2.setAttribute('width', '1'); |  | ||||||
| 		inSpacer2.style.display = 'block'; |  | ||||||
| 		inCol4.appendChild(inSpacer2); |  | ||||||
| 		
 |  | ||||||
| 		var inCol5 = document.createElement("td"); |  | ||||||
| 		inCol5.setAttribute('bgcolor', '#ffffff'); |  | ||||||
| 		inRow2.appendChild(inCol5); |  | ||||||
| 		// inCol5.innerHTML = ' ';
 |  | ||||||
| 		var inSpacer3 = document.createElement("img"); |  | ||||||
| 		inSpacer3.setAttribute('src',zoomImagesURI+'spacer.gif'); |  | ||||||
| 		inSpacer3.setAttribute('height', '1'); |  | ||||||
| 		inSpacer3.setAttribute('width', '1'); |  | ||||||
| 		inSpacer3.style.display = 'block'; |  | ||||||
| 		inCol5.appendChild(inSpacer3); |  | ||||||
| 		
 |  | ||||||
| 		var inCol6 = document.createElement("td"); |  | ||||||
| 		inCol6.setAttribute('background', zoomImagesURI+'zoom-shadow5.png'); |  | ||||||
| 		inRow2.appendChild(inCol6); |  | ||||||
| 		// inCol6.innerHTML = ' ';
 |  | ||||||
| 		var inSpacer4 = document.createElement("img"); |  | ||||||
| 		inSpacer4.setAttribute('src',zoomImagesURI+'spacer.gif'); |  | ||||||
| 		inSpacer4.setAttribute('height', '1'); |  | ||||||
| 		inSpacer4.setAttribute('width', '1'); |  | ||||||
| 		inSpacer4.style.display = 'block'; |  | ||||||
| 		inCol6.appendChild(inSpacer4); |  | ||||||
| 		
 |  | ||||||
| 		//   <tr height="26">
 |  | ||||||
| 		//   <td width="27"><img src="/images/zoom-shadow6.png" width="27" height="26"</td>
 |  | ||||||
| 		//   <td background="/images/zoom-shadow7.png"> </td>
 |  | ||||||
| 		//   <td width="27"><img src="/images/zoom-shadow8.png" width="27" height="26"></td>
 |  | ||||||
| 		//   </tr>  
 |  | ||||||
| 		// </table>
 |  | ||||||
| 		
 |  | ||||||
| 		var inRow3 = document.createElement("tr"); |  | ||||||
| 		inRow3.style.height = '26px'; |  | ||||||
| 		inShadowTbody.appendChild(inRow3); |  | ||||||
| 		
 |  | ||||||
| 		var inCol7 = document.createElement("td"); |  | ||||||
| 		inCol7.style.width = '27px'; |  | ||||||
| 		inRow3.appendChild(inCol7); |  | ||||||
| 		var inShadowImg7 = document.createElement("img"); |  | ||||||
| 		inShadowImg7.setAttribute('src', zoomImagesURI+'zoom-shadow6.png'); |  | ||||||
| 		inShadowImg7.setAttribute('width', '27'); |  | ||||||
| 		inShadowImg7.setAttribute('height', '26'); |  | ||||||
| 		inShadowImg7.style.display = 'block'; |  | ||||||
| 		inCol7.appendChild(inShadowImg7); |  | ||||||
| 		
 |  | ||||||
| 		var inCol8 = document.createElement("td"); |  | ||||||
| 		inCol8.setAttribute('background', zoomImagesURI+'zoom-shadow7.png'); |  | ||||||
| 		inRow3.appendChild(inCol8);  
 |  | ||||||
| 		// inCol8.innerHTML = ' ';
 |  | ||||||
| 		var inSpacer5 = document.createElement("img"); |  | ||||||
| 		inSpacer5.setAttribute('src',zoomImagesURI+'spacer.gif'); |  | ||||||
| 		inSpacer5.setAttribute('height', '1'); |  | ||||||
| 		inSpacer5.setAttribute('width', '1'); |  | ||||||
| 		inSpacer5.style.display = 'block'; |  | ||||||
| 		inCol8.appendChild(inSpacer5); |  | ||||||
| 		
 |  | ||||||
| 		var inCol9 = document.createElement("td"); |  | ||||||
| 		inCol9.style.width = '27px'; |  | ||||||
| 		inRow3.appendChild(inCol9);  
 |  | ||||||
| 		var inShadowImg9 = document.createElement("img"); |  | ||||||
| 		inShadowImg9.setAttribute('src', zoomImagesURI+'zoom-shadow8.png'); |  | ||||||
| 		inShadowImg9.setAttribute('width', '27'); |  | ||||||
| 		inShadowImg9.setAttribute('height', '26'); |  | ||||||
| 		inShadowImg9.style.display = 'block'; |  | ||||||
| 		inCol9.appendChild(inShadowImg9); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if (includeCaption) { |  | ||||||
| 	
 |  | ||||||
| 		// CAPTION
 |  | ||||||
| 		//
 |  | ||||||
| 		// <div id="ZoomCapDiv" style="margin-left: 13px; margin-right: 13px;">
 |  | ||||||
| 		// <table border="1" cellpadding="0" cellspacing="0">
 |  | ||||||
| 		// <tr height="26">
 |  | ||||||
| 		// <td><img src="zoom-caption-l.png" width="13" height="26"></td>
 |  | ||||||
| 		// <td rowspan="3" background="zoom-caption-fill.png"><div id="ZoomCaption"></div></td>
 |  | ||||||
| 		// <td><img src="zoom-caption-r.png" width="13" height="26"></td>
 |  | ||||||
| 		// </tr>
 |  | ||||||
| 		// </table>
 |  | ||||||
| 		// </div>
 |  | ||||||
| 		
 |  | ||||||
| 		var inCapDiv = document.createElement("div"); |  | ||||||
| 		inCapDiv.setAttribute('id', 'ZoomCapDiv'); |  | ||||||
| 		inCapDiv.style.position = 'absolute'; 		
 |  | ||||||
| 		inCapDiv.style.visibility = 'hidden'; |  | ||||||
| 		inCapDiv.style.marginLeft = 'auto'; |  | ||||||
| 		inCapDiv.style.marginRight = 'auto'; |  | ||||||
| 		inCapDiv.style.zIndex = '501'; |  | ||||||
| 
 |  | ||||||
| 		inBody.insertBefore(inCapDiv, inZoombox.nextSibling); |  | ||||||
| 		
 |  | ||||||
| 		var inCapTable = document.createElement("table"); |  | ||||||
| 		inCapTable.setAttribute('border', '0'); |  | ||||||
| 		inCapTable.setAttribute('cellPadding', '0');	// Wow. These honestly need to
 |  | ||||||
| 		inCapTable.setAttribute('cellSpacing', '0');	// be intercapped to work in IE. WTF?
 |  | ||||||
| 		inCapDiv.appendChild(inCapTable); |  | ||||||
| 		
 |  | ||||||
| 		var inTbody = document.createElement("tbody");	// Needed for IE (for HTML4).
 |  | ||||||
| 		inCapTable.appendChild(inTbody); |  | ||||||
| 		
 |  | ||||||
| 		var inCapRow1 = document.createElement("tr"); |  | ||||||
| 		inTbody.appendChild(inCapRow1); |  | ||||||
| 		
 |  | ||||||
| 		var inCapCol1 = document.createElement("td"); |  | ||||||
| 		inCapCol1.setAttribute('align', 'right'); |  | ||||||
| 		inCapRow1.appendChild(inCapCol1); |  | ||||||
| 		var inCapImg1 = document.createElement("img"); |  | ||||||
| 		inCapImg1.setAttribute('src', zoomImagesURI+'zoom-caption-l.png'); |  | ||||||
| 		inCapImg1.setAttribute('width', '13'); |  | ||||||
| 		inCapImg1.setAttribute('height', '26'); |  | ||||||
| 		inCapImg1.style.display = 'block'; |  | ||||||
| 		inCapCol1.appendChild(inCapImg1); |  | ||||||
| 		
 |  | ||||||
| 		var inCapCol2 = document.createElement("td"); |  | ||||||
| 		inCapCol2.setAttribute('background', zoomImagesURI+'zoom-caption-fill.png'); |  | ||||||
| 		inCapCol2.setAttribute('id', 'ZoomCaption'); |  | ||||||
| 		inCapCol2.setAttribute('valign', 'middle'); |  | ||||||
| 		inCapCol2.style.fontSize = '14px'; |  | ||||||
| 		inCapCol2.style.fontFamily = 'Helvetica'; |  | ||||||
| 		inCapCol2.style.fontWeight = 'bold'; |  | ||||||
| 		inCapCol2.style.color = '#ffffff'; |  | ||||||
| 		inCapCol2.style.textShadow = '0px 2px 4px #000000'; |  | ||||||
| 		inCapCol2.style.whiteSpace = 'nowrap'; |  | ||||||
| 		inCapRow1.appendChild(inCapCol2); |  | ||||||
| 		
 |  | ||||||
| 		var inCapCol3 = document.createElement("td"); |  | ||||||
| 		inCapRow1.appendChild(inCapCol3); |  | ||||||
| 		var inCapImg2 = document.createElement("img"); |  | ||||||
| 		inCapImg2.setAttribute('src', zoomImagesURI+'zoom-caption-r.png'); |  | ||||||
| 		inCapImg2.setAttribute('width', '13'); |  | ||||||
| 		inCapImg2.setAttribute('height', '26'); |  | ||||||
| 		inCapImg2.style.display = 'block'; |  | ||||||
| 		inCapCol3.appendChild(inCapImg2); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| Before Width: | Height: | Size: 1.0 KiB | 
| Before Width: | Height: | Size: 43 B | 
| Before Width: | Height: | Size: 73 B | 
| Before Width: | Height: | Size: 168 B | 
| Before Width: | Height: | Size: 164 B | 
| Before Width: | Height: | Size: 218 B | 
| Before Width: | Height: | Size: 97 B | 
| Before Width: | Height: | Size: 244 B | 
| Before Width: | Height: | Size: 112 B | 
| Before Width: | Height: | Size: 114 B | 
| Before Width: | Height: | Size: 289 B | 
| Before Width: | Height: | Size: 111 B | 
| Before Width: | Height: | Size: 301 B | 
| Before Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 1.1 KiB | 
| @ -0,0 +1,230 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery FancyZoom Plugin | ||||||
|  |  * version: 1.0.1 (20-APR-2014) | ||||||
|  |  * @requires jQuery v1.6.2 or later | ||||||
|  |  * | ||||||
|  |  * Examples and documentation at: http://github.com/keegnotrub/jquery.fancyzoom/
 | ||||||
|  |  * Licensed under the MIT license: | ||||||
|  |  *   http://www.opensource.org/licenses/mit-license.php
 | ||||||
|  |  */ | ||||||
|  | (function ($) { | ||||||
|  |   "use strict"; | ||||||
|  | 
 | ||||||
|  |   $.extend(jQuery.easing, { | ||||||
|  |     easeInOutCubic: function (x, t, b, c, d) { | ||||||
|  |       if ((t/=d/2) < 1) return c/2*t*t*t + b; | ||||||
|  |       return c/2*((t-=2)*t*t + 2) + b; | ||||||
|  |     } | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   $.fn.fancyZoom = function(settings) { | ||||||
|  |     var options = $.extend({ | ||||||
|  |       minBorder: 90 | ||||||
|  |     }, settings); | ||||||
|  | 
 | ||||||
|  |     var fz = new FancyZoom(options); | ||||||
|  |     
 | ||||||
|  |     this.each(function(e) { | ||||||
|  |       var $this = $(this); | ||||||
|  |       $this.mouseover(fz.preload); | ||||||
|  |       $this.click(fz.show); | ||||||
|  |     }); | ||||||
|  |     
 | ||||||
|  |     function elementGeometry(elemFind) { | ||||||
|  |       var $elemFind = $(elemFind); | ||||||
|  | 
 | ||||||
|  |       if ($elemFind.children().length > 0) { | ||||||
|  |         $elemFind = $elemFind.children(":first"); | ||||||
|  |       } | ||||||
|  |       
 | ||||||
|  |       var elemX = $elemFind.offset().left; | ||||||
|  |       var elemY = $elemFind.offset().top; | ||||||
|  |       var elemW = $elemFind.width() || 50; | ||||||
|  |       var elemH = $elemFind.height() || 12; | ||||||
|  | 
 | ||||||
|  |       return { left: elemX, top: elemY, width: elemW, height: elemH }; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     function windowGeometry() { | ||||||
|  |       var $window = $(window); | ||||||
|  |       var w = $window.width(); | ||||||
|  |       var h = $window.height(); | ||||||
|  |       var x = $window.scrollLeft(); | ||||||
|  |       var y = $window.scrollTop(); | ||||||
|  |       return { width: w, height: h, scrollX: x, scrollY: y }; | ||||||
|  |     } | ||||||
|  |     
 | ||||||
|  |     function FancyZoom(opts) { | ||||||
|  |       var options = opts;  
 | ||||||
|  |       var zooming = false; | ||||||
|  |       var preloading = false; | ||||||
|  |       var pImage = new Image(); | ||||||
|  |       var pTimer = 0; | ||||||
|  |       var pFrame = 0; | ||||||
|  |       var eGeometry, wGeometry; | ||||||
|  |       
 | ||||||
|  |       var $zoom, $zoom_img, $zoom_close, $zoom_spin; | ||||||
|  | 
 | ||||||
|  |       var self = this; | ||||||
|  | 
 | ||||||
|  |       $zoom = $("#zoom"); | ||||||
|  |       if ($zoom.length === 0) { | ||||||
|  |         $zoom = $(document.createElement("div")); | ||||||
|  |         $zoom.attr("id", "zoom"); | ||||||
|  |         $("body").append($zoom); | ||||||
|  |       } | ||||||
|  |       
 | ||||||
|  |       $zoom_img = $("#zoom_img"); | ||||||
|  |       if ($zoom_img.length === 0) { | ||||||
|  |         $zoom_img = $(document.createElement("img")); | ||||||
|  |         $zoom_img.attr("id", "zoom_img"); | ||||||
|  |         $zoom.append($zoom_img); | ||||||
|  |       } | ||||||
|  |       
 | ||||||
|  |       $zoom_close = $("#zoom_close"); | ||||||
|  |       if ($zoom_close.length === 0) { | ||||||
|  |         $zoom_close = $(document.createElement("div")); | ||||||
|  |         $zoom_close.attr("id", "zoom_close"); | ||||||
|  |         $zoom.append($zoom_close); | ||||||
|  |       } | ||||||
|  |       
 | ||||||
|  |       $zoom_spin = $("#zoom_spin"); | ||||||
|  |       if ($zoom_spin.length === 0) { | ||||||
|  |         $zoom_spin = $(document.createElement("div")); | ||||||
|  |         $zoom_spin.attr("id", "zoom_spin"); | ||||||
|  |         $("body").append($zoom_spin); | ||||||
|  |       } | ||||||
|  |       
 | ||||||
|  |       this.preload = function(e) { | ||||||
|  |         var href = this.getAttribute("href"); | ||||||
|  |         
 | ||||||
|  |         if (pImage.src !== href) { | ||||||
|  |           preloading = true; | ||||||
|  |           pImage = new Image(); | ||||||
|  |           $(pImage).on('load', function() { | ||||||
|  |             preloading = false; | ||||||
|  |           }); | ||||||
|  |           pImage.src = href; | ||||||
|  |         } | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       this.show = function(e) {      
 | ||||||
|  |         wGeometry = windowGeometry(); | ||||||
|  |         eGeometry = elementGeometry(this); | ||||||
|  | 
 | ||||||
|  |         self.preload.call(this, e); | ||||||
|  | 
 | ||||||
|  |         if (preloading) { | ||||||
|  |           if (pTimer === 0) { | ||||||
|  |             startSpinner(this); | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |         else { | ||||||
|  |           zoomIn(this); | ||||||
|  |         } | ||||||
|  |         
 | ||||||
|  |         e.preventDefault(); | ||||||
|  |       }; | ||||||
|  |       
 | ||||||
|  |       function runSpinner(from) { | ||||||
|  |         if (preloading) { | ||||||
|  |           $zoom_spin.css("backgroundPosition", "0px " + (pFrame * -50) + "px"); | ||||||
|  |           pFrame = (pFrame + 1) % 12; | ||||||
|  |         } | ||||||
|  |         else { | ||||||
|  |           clearInterval(pTimer); | ||||||
|  |           pTimer = 0; | ||||||
|  |           pFrame = 0; | ||||||
|  |           $zoom_spin.hide(); | ||||||
|  |           zoomIn(from); | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       function startSpinner(from) { | ||||||
|  |         $zoom_spin.css({ | ||||||
|  |           left: ((wGeometry.width / 2) + wGeometry.scrollX) + "px", | ||||||
|  |           top: ((wGeometry.height / 2) + wGeometry.scrollY) + "px", | ||||||
|  |           backgroundPosition: "0px 0px", | ||||||
|  |           display: "block" | ||||||
|  |         }); | ||||||
|  |         pFrame = 0; | ||||||
|  |         pTimer = setInterval(function() { | ||||||
|  |           runSpinner(from); | ||||||
|  |         }, 100); | ||||||
|  |       } | ||||||
|  |       
 | ||||||
|  |       function zoomIn(from) { | ||||||
|  |         if (zooming) return false; | ||||||
|  |         zooming = true; | ||||||
|  |         
 | ||||||
|  |         $zoom_img.attr("src", from.getAttribute("href")); | ||||||
|  | 
 | ||||||
|  |         var endW = pImage.width; | ||||||
|  |         var endH = pImage.height; | ||||||
|  |         
 | ||||||
|  |         var sizeRatio = endW / endH; | ||||||
|  |         if (endW > wGeometry.width - options.minBorder) { | ||||||
|  |           endW = wGeometry.width - options.minBorder; | ||||||
|  |           endH = endW / sizeRatio; | ||||||
|  |         } | ||||||
|  |         if (endH > wGeometry.height - options.minBorder) { | ||||||
|  |           endH = wGeometry.height - options.minBorder; | ||||||
|  |           endW = endH * sizeRatio; | ||||||
|  |         } | ||||||
|  |         
 | ||||||
|  |         var endTop = (wGeometry.height/2) - (endH/2) + wGeometry.scrollY; | ||||||
|  |         var endLeft = (wGeometry.width/2) - (endW/2) + wGeometry.scrollX; | ||||||
|  | 
 | ||||||
|  |         $zoom_close.hide(); | ||||||
|  |         $zoom.hide().css({ | ||||||
|  |           left      : eGeometry.left + "px", | ||||||
|  |           top       : eGeometry.top + "px", | ||||||
|  |           width     : eGeometry.width + "px", | ||||||
|  |           height    : eGeometry.height + "px", | ||||||
|  |           opacity   : "hide" | ||||||
|  |         }); | ||||||
|  |         
 | ||||||
|  |         $zoom.animate({ | ||||||
|  |           left    : endLeft + 'px', | ||||||
|  |           top     : endTop + 'px', | ||||||
|  |           width   : endW + "px", | ||||||
|  |           height  : endH + "px", | ||||||
|  |           opacity : "show" | ||||||
|  |         }, 200, "easeInOutCubic", function() { | ||||||
|  |           $zoom_close.fadeIn(); | ||||||
|  |           $zoom_close.click(zoomOut); | ||||||
|  |           $zoom.click(zoomOut); | ||||||
|  |           $(document).keyup(closeOnEscape); | ||||||
|  |           zooming = false; | ||||||
|  |         }); | ||||||
|  |       } | ||||||
|  |       
 | ||||||
|  |       function zoomOut() { | ||||||
|  |         if (zooming) return false; | ||||||
|  |         zooming = true; | ||||||
|  |         
 | ||||||
|  |         $zoom_close.hide(); | ||||||
|  |         $zoom.animate({ | ||||||
|  |           left    : eGeometry.left + "px", | ||||||
|  |           top     : eGeometry.top + "px", | ||||||
|  |           opacity : "hide", | ||||||
|  |           width   : eGeometry.width + "px", | ||||||
|  |           height  : eGeometry.height + "px" | ||||||
|  |         }, 200, "easeInOutCubic", function() { | ||||||
|  |           zooming = false; | ||||||
|  |         }); | ||||||
|  | 
 | ||||||
|  |         $zoom.unbind('click', zoomOut); | ||||||
|  |         $zoom_close.unbind('click', zoomOut); | ||||||
|  |         $(document).unbind('keyup', closeOnEscape); | ||||||
|  |       } | ||||||
|  |       
 | ||||||
|  |       function closeOnEscape(event){ | ||||||
|  |         if (event.keyCode == 27) { | ||||||
|  |           zoomOut(); | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  | })(jQuery); | ||||||
| After Width: | Height: | Size: 6.9 KiB |