// lightwindow.js v2.0//// Copyright (c) 2007 stickmanlabs// Author: Kevin P Miller | http://www.stickmanlabs.com// // LightWindow is freely distributable under the terms of an MIT-style license.//// I don't care what you think about the file size...//   Be a pro: //	    http://www.thinkvitamin.com/features/webapps/serving-javascript-fast//      http://rakaz.nl/item/make_your_pages_load_faster_by_combining_and_compressing_javascript_and_css_files///*-----------------------------------------------------------------------------------------------*/if(typeof Effect == 'undefined')  throw("lightwindow.js requires including script.aculo.us' effects.js library!");// This will stop image flickering in IE6 when elements with images are movedtry {	document.execCommand("BackgroundImageCache", false, true);} catch(e) {}var lightwindow = Class.create();	lightwindow.prototype = {	//	//	Setup Variables	//	element : null,	contentToFetch : null,	windowActive : false,	dataEffects : [],	dimensions : {		cruft : null,		container : null,		viewport : {			height : null,			width : null,			offsetTop : null,			offsetLeft : null		}	},	pagePosition : {		x : 0,		y : 0	},	pageDimensions : {		width : null,		height : null	},	preloadImage : [],	preloadedImage : [],	galleries : [],	resizeTo : {		height : null,		heightPercent : null,		width : null,		widthPercent : null,		fixedTop : null,		fixedLeft : null	},	scrollbarOffset : 18,	navigationObservers : {		previous : null,		next : null	},	containerChange : {		height : 0,		width : 0	},	activeGallery : false,	galleryLocation : {		current : 0,		total : 0	},	//	//	Initialize the lightwindow.	//	initialize : function(options) {		this.options = Object.extend({			resizeSpeed : 8,			contentOffset : {				height : 20,				width : 20			},			dimensions : {				image : {height : 250, width : 250},				page : {height : 250, width : 250},				inline : {height : 250, width : 250},				media : {height : 250, width : 250},				external : {height : 250, width : 250},				titleHeight : 25			},			classNames : {					standard : 'lightwindow',				action : 'lightwindow_action'			},			fileTypes : {				page : ['asp', 'aspx', 'cgi', 'cfm', 'htm', 'html', 'pl', 'php4', 'php3', 'php', 'php5', 'phtml', 'rhtml', 'shtml', 'txt', 'vbs', 'rb'],				media : ['aif', 'aiff', 'asf', 'avi', 'divx', 'm1v', 'm2a', 'm2v', 'm3u', 'mid', 'midi', 'mov', 'moov', 'movie', 'mp2', 'mp3', 'mpa', 'mpa', 'mpe', 'mpeg', 'mpg', 'mpg', 'mpga', 'pps', 'qt', 'rm', 'ram', 'swf', 'viv', 'vivo', 'wav'],				image : ['bmp', 'gif', 'jpg', 'png', 'tiff']			},			mimeTypes : {				avi : 'video/avi',				aif : 'audio/aiff',				aiff : 'audio/aiff',				gif : 'image/gif',				bmp : 'image/bmp',				jpeg : 'image/jpeg',				m1v : 'video/mpeg',				m2a : 'audio/mpeg',				m2v : 'video/mpeg',				m3u : 'audio/x-mpequrl',				mid : 'audio/x-midi',				midi : 'audio/x-midi',				mjpg : 'video/x-motion-jpeg',				moov : 'video/quicktime',				mov : 'video/quicktime',				movie : 'video/x-sgi-movie',				mp2 : 'audio/mpeg',				mp3 : 'audio/mpeg3',				mpa : 'audio/mpeg',				mpa : 'video/mpeg',				mpe : 'video/mpeg',				mpeg : 'video/mpeg',				mpg : 'audio/mpeg',				mpg : 'video/mpeg',				mpga : 'audio/mpeg',				pdf : 'application/pdf',				png : 'image/png',				pps : 'application/mspowerpoint',				qt : 'video/quicktime',				ram : 'audio/x-pn-realaudio-plugin',				rm : 'application/vnd.rn-realmedia',				swf	: 'application/x-shockwave-flash',				tiff : 'image/tiff',				viv : 'video/vivo',				vivo : 'video/vivo',				wav : 'audio/wav',				wmv : 'application/x-mplayer2'						},				classids : {				mov : 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',				swf : 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000',				wmv : 'clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6'			},			codebases : {				mov : 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0',				swf : 'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0',				wmv : 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715'			},				viewportPadding : 10,			EOLASFix : 'swf,wmv,fla,flv',			overlay : {				opacity : 0.7,				image : 'lightwindow/images/black-70.png',				presetImage : 'lightwindow/images/black-70.png'			},			skin : 	{				main : 	'<div id="lightwindow_container" >'+							'<div id="lightwindow_title_bar" >'+								'<div id="lightwindow_title_bar_inner" >'+									'<span id="lightwindow_title_bar_title"></span>'+									'<a id="lightwindow_title_bar_close_link" >CLOSE</a>'+								'</div>'+							'</div>'+							'<div id="lightwindow_stage" >'+								'<div id="lightwindow_contents" >'+								'</div>'+								'<div id="lightwindow_navigation" >'+									'<a href="#" id="lightwindow_previous" >'+										'<span id="lightwindow_previous_title"></span>'+									'</a>'+									'<a href="#" id="lightwindow_next" >'+										'<span id="lightwindow_next_title"></span>'+									'</a>'+									'<iframe name="lightwindow_navigation_shim" id="lightwindow_navigation_shim" src="javascript:false;" frameBorder="0" scrolling="no"></iframe>'+								'</div>'+																'<div id="lightwindow_galleries">'+									'<div id="lightwindow_galleries_tab_container" >'+										'<a href="#" id="lightwindow_galleries_tab" >'+											'<span id="lightwindow_galleries_tab_span" class="up" >Galleries</span>'+										'</a>'+									'</div>'+									'<div id="lightwindow_galleries_list" >'+									'</div>'+								'</div>'+							'</div>'+							'<div id="lightwindow_data_slide" >'+								'<div id="lightwindow_data_slide_inner" >'+									'<div id="lightwindow_data_details" >'+										'<div id="lightwindow_data_gallery_container" >'+											'<span id="lightwindow_data_gallery_current"></span>'+											' of '+											'<span id="lightwindow_data_gallery_total"></span>'+										'</div>'+										'<div id="lightwindow_data_author_container" >'+											'by <span id="lightwindow_data_author"></span>'+										'</div>'+									'</div>'+									'<div id="lightwindow_data_caption" >'+									'</div>'+								'</div>'+							'</div>'+						'</div>',					loading : 	'<div id="lightwindow_loading" >'+								'<img src="lightwindow/images/ajax-loading.gif" alt="loading" />'+								'<span>Loading or <a href="javascript: myLightWindow.deactivate();">Cancel</a></span>'+								'<iframe name="lightwindow_loading_shim" id="lightwindow_loading_shim" src="javascript:false;" frameBorder="0" scrolling="no"></iframe>'+							'</div>',				iframe : 	'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'+							'<html xmlns="http://www.w3.org/1999/xhtml">'+								'<body>'+									'{body_replace}'+								'</body>'+							'</html>',				gallery : {					top :		'<div class="lightwindow_galleries_list">'+									'<h1>{gallery_title_replace}</h1>'+									'<ul>',					middle : 			'<li>'+											'{gallery_link_replace}'+										'</li>',					bottom : 		'</ul>'+								'</div>'				}			},			formMethod : 'get',			hideFlash : false,			hideGalleryTab : true,			showTitleBar : true,			animationHandler : false,			navigationHandler : false,			transitionHandler : false,			finalAnimationHandler : false,			formHandler : false,			galleryAnimationHandler : false,			showGalleryCount : true		}, options || {});		this.duration = ((11-this.options.resizeSpeed)*0.15);		this._setupLinks();		this._getScroll();		this._getPageDimensions();		this._browserDimensions();		this._addLightWindowMarkup(false);		this._setupDimensions(); 		this.buildGalleryList();	},	//	//	Activate the lightwindow.	//	activate : function(e, link){				// Clear out the window Contents		this._clearWindowContents(true);					// Add back in out loading panel		this._addLoadingWindowMarkup();		// Setup the element properties		this._setupWindowElements(link);				// Setup everything		this._getScroll();		this._browserDimensions();		this._setupDimensions();		this._toggleTroubleElements('hidden', false);		this._displayLightWindow('block', 'hidden');		this._setStatus(true);		this._monitorKeyboard(true);		this._prepareIE(true);		this._loadWindow();	},	//	//	Turn off the window	//	deactivate : function(){		// The window is not active		this.windowActive = false;				// There is no longer a gallery active		this.activeGallery = false;		if (!this.options.hideGalleryTab) {			this._handleGalleryAnimation(false);		}				// Kill the animation		this.animating = false;				// Clear our element		this.element = null;				// hide the window.		this._displayLightWindow('none', 'visible');				// Clear out the window Contents		this._clearWindowContents(false);				// Stop all animation		var queue = Effect.Queues.get('lightwindowAnimation').each(function(e){e.cancel();});				// Undo the setup		this._prepareIE(false);		this._setupDimensions();		this._toggleTroubleElements('visible', false);			this._monitorKeyboard(false);		},	//	//  Initialize specific window	//	createWindow : function(element, attributes) {		this._processLink($(element));	},	//	//  Open a Window from a hash of attributes	//	activateWindow : function(options) {		this.element = Object.extend({			href : null,			title : null,			author : null,			caption : null,			rel : null,			top : null,			left : null,			type : null,			showImages : null,			height : null,			width : null,			loadingAnimation : null,			iframeEmbed : null,			form : null		}, options || {});				// Set the window type		this.contentToFetch = this.element.href;		this.windowType = this.element.type ? this.element.type : this._fileType(this.element.href);					// Clear out the window Contents		this._clearWindowContents(true);					// Add back in out loading panel		this._addLoadingWindowMarkup();				// Setup everything		this._getScroll();		this._browserDimensions();		this._setupDimensions();				/* Fix the height of the overlay */ 		this._getPageDimensions(); document.getElementById("lightwindow_overlay").setStyle({ height: this.pageDimensions.height + 'px'});				this._toggleTroubleElements('hidden', false);		this._displayLightWindow('block', 'hidden');		this._setStatus(true);		this._monitorKeyboard(true);		this._prepareIE(true);		this._loadWindow();	},	//	//  Fire off our Form handler	//	submitForm : function(e) {		if (this.options.formHandler) {			this.options.formHandler(e);		} else {			this._defaultFormHandler(e);		}	},	//	//	Reload the window with another location	//	openWindow : function(element) {		var element = $(element);		// The window is active		this.windowActive = true;				// Clear out the window Contents		this._clearWindowContents(true);				// Add back in out loading panel		this._addLoadingWindowMarkup();				// Setup the element properties		this._setupWindowElements(element);		this._setStatus(true);		this._handleTransition();	},	//	//  Navigate the window	//	navigateWindow : function(direction) {		this._handleNavigation(false);		if (direction == 'previous') {			this.openWindow(this.navigationObservers.previous);		} else if (direction == 'next'){ 			this.openWindow(this.navigationObservers.next);		}	},	//	//  Build the Gallery List and Load it	//	buildGalleryList : function() {		var output = '';		var galleryLink;		for (i in this.galleries) {			if (typeof this.galleries[i] == 'object') {				output += (this.options.skin.gallery.top).replace('{gallery_title_replace}', unescape(i));				for (j in this.galleries[i]) {					if (typeof this.galleries[i][j] == 'object') {												galleryLink = '<a href="#" id="lightwindow_gallery_'+i+'_'+j+'" >'+unescape(j)+'</a>';						output += (this.options.skin.gallery.middle).replace('{gallery_link_replace}', galleryLink);					}				}				output += this.options.skin.gallery.bottom;			}		}		new Insertion.Top('lightwindow_galleries_list', output);				// Attach Events		for (i in this.galleries) {			if (typeof this.galleries[i] == 'object') {				for (j in this.galleries[i]) {					if (typeof this.galleries[i][j] == 'object') {						Event.observe($('lightwindow_gallery_'+i+'_'+j), 'click', this.openWindow.bind(this, this.galleries[i][j][0]), false);						$('lightwindow_gallery_'+i+'_'+j).onclick = function() {return false;};						}				}			}		}	},	// 	//  Set Links Up	//	_setupLinks : function() {		var links = $$('.'+this.options.classNames.standard);		links.each(function(link) {			this._processLink(link);		}.bind(this));		},	//	//  Process a Link	//	_processLink : function(link) {		if ((this._fileType(link.getAttribute('href')) == 'image' || this._fileType(link.getAttribute('href')) == 'media')) {			if (gallery = this._getGalleryInfo(link.rel)) {				if (!this.galleries[gallery[0]]) {					this.galleries[gallery[0]] = new Array();				}				if (!this.galleries[gallery[0]][gallery[1]]) {					this.galleries[gallery[0]][gallery[1]] = new Array();				}				this.galleries[gallery[0]][gallery[1]].push(link);			}		}				// Take care of our inline content		var url = link.getAttribute('href');		if (url.indexOf('?') > -1) {			url = url.substring(0, url.indexOf('?'));		}				var container = url.substring(url.indexOf('#')+1);		if($(container)) {			$(container).setStyle({				display : 'none'			});		}				Event.observe(link, 'click', this.activate.bindAsEventListener(this, link), false);		link.onclick = function() {return false;};			},	//	//	Setup our actions	//	_setupActions : function() {		var links = $$('#lightwindow_container .'+this.options.classNames.action);		links.each(function(link) {			Event.observe(link, 'click', this[link.getAttribute('rel')].bindAsEventListener(this, link), false);			link.onclick = function() {return false;};		}.bind(this));	},	//	//	Add the markup to the page.	//	_addLightWindowMarkup : function(rebuild) {		var overlay = Element.extend(document.createElement('div'));		overlay.setAttribute('id', 'lightwindow_overlay');				// FF Mac has a problem with putting Flash above a layer without a 100% opacity background, so we need to use a pre-made		if (Prototype.Browser.Gecko) {			overlay.setStyle({				backgroundImage: 'url('+this.options.overlay.presetImage+')',				backgroundRepeat: 'repeat',				height: this.pageDimensions.height+'px'			});					} else {			overlay.setStyle({				opacity: this.options.overlay.opacity,				backgroundImage: 'url('+this.options.overlay.image+')',				backgroundRepeat: 'repeat',				height: this.pageDimensions.height+'px'			});		}				var lw = document.createElement('div');		lw.setAttribute('id', 'lightwindow');		lw.innerHTML = this.options.skin.main;				var body = document.getElementsByTagName('body')[0];		body.appendChild(overlay);		body.appendChild(lw);							if ($('lightwindow_title_bar_close_link')) {			Event.observe('lightwindow_title_bar_close_link', 'click', this.deactivate.bindAsEventListener(this));			$('lightwindow_title_bar_close_link').onclick = function() {return false;};		}					Event.observe($('lightwindow_previous'), 'click', this.navigateWindow.bind(this, 'previous'), false);		$('lightwindow_previous').onclick = function() {return false;};				Event.observe($('lightwindow_next'), 'click', this.navigateWindow.bind(this, 'next'), false);		$('lightwindow_next').onclick = function() {return false;};		if (!this.options.hideGalleryTab) {			Event.observe($('lightwindow_galleries_tab'), 'click', this._handleGalleryAnimation.bind(this, true), false);			$('lightwindow_galleries_tab').onclick = function() {return false;};		}				// Because we use position absolute, kill the scroll Wheel on animations		if (Prototype.Browser.IE) {			Event.observe(document, 'mousewheel', this._stopScrolling.bindAsEventListener(this), false);		} else {			Event.observe(window, 'DOMMouseScroll', this._stopScrolling.bindAsEventListener(this), false);		}						Event.observe(overlay, 'click', this.deactivate.bindAsEventListener(this), false);		overlay.onclick = function() {return false;};	},	//	//  Add loading window markup	//	_addLoadingWindowMarkup : function() {		$('lightwindow_contents').innerHTML += this.options.skin.loading;	},	//	//  Setup the window elements	//	_setupWindowElements : function(link) {		this.element = link;		this.element.title = null ? '' : link.getAttribute('title');		this.element.author = null ? '' : link.getAttribute('author');		this.element.caption = null ? '' : link.getAttribute('caption');		this.element.rel = null ? '' : link.getAttribute('rel');		this.element.params = null ? '' : link.getAttribute('params');		// Set the window type		this.contentToFetch = this.element.href;		this.windowType = this._getParameter('lightwindow_type') ? this._getParameter('lightwindow_type') : this._fileType(this.contentToFetch);		},	//	//  Clear the window contents out	//	_clearWindowContents : function(contents) {		// If there is an iframe, its got to go		if ($('lightwindow_iframe')) {			Element.remove($('lightwindow_iframe'));		}		// Stop playing an object if its still around		if ($('lightwindow_media_primary')) {			try {				$('lightwindow_media_primary').Stop();			} catch(e) {}			Element.remove($('lightwindow_media_primary'));		}		// Stop playing an object if its still around				if ($('lightwindow_media_secondary')) {			try {				$('lightwindow_media_secondary').Stop();			} catch(e) {}			Element.remove($('lightwindow_media_secondary'));		}				this.activeGallery = false;		this._handleNavigation(this.activeGallery);				if (contents) {			// Empty the contents			$('lightwindow_contents').innerHTML = '';						// Reset the scroll bars			$('lightwindow_contents').setStyle({				overflow: 'hidden'			});								if (!this.windowActive) {				$('lightwindow_data_slide_inner').setStyle({					display: 'none'				});				$('lightwindow_title_bar_title').innerHTML = '';			}			// Because of browser differences and to maintain flexible captions we need to reset this height at close			$('lightwindow_data_slide').setStyle({				height: 'auto'			});		}				this.resizeTo.height = null;		this.resizeTo.width = null;	},	//	//	Set the status of our animation to keep things from getting clunky	//	_setStatus : function(status) {		this.animating = status;		if (status) {			Element.show('lightwindow_loading');		}		if (!(/MSIE 6./i.test(navigator.userAgent))) {			this._fixedWindow(status);		}	},	//	//  Make this window Fixed	//	_fixedWindow : function(status) {		if (status) {			if (this.windowActive) {				this._getScroll();				$('lightwindow').setStyle({					position: 'absolute',					top: parseFloat($('lightwindow').getStyle('top'))+this.pagePosition.y+'px',					left: parseFloat($('lightwindow').getStyle('left'))+this.pagePosition.x+'px'				});					} else {				$('lightwindow').setStyle({					position: 'absolute'				});									}		} else {			if (this.windowActive) {				this._getScroll();				$('lightwindow').setStyle({					position: 'fixed',					top: parseFloat($('lightwindow').getStyle('top'))-this.pagePosition.y+'px',					left: parseFloat($('lightwindow').getStyle('left'))-this.pagePosition.x+'px'				});					} else {				if ($('lightwindow_iframe')) {					// Ideally here we would set a 50% value for top and left, but Safari rears it ugly head again and we need to do it by pixels					this._browserDimensions();				}				$('lightwindow').setStyle({					position: 'fixed',					top: (parseFloat(this._getParameter('lightwindow_top')) ? parseFloat(this._getParameter('lightwindow_top'))+'px' : this.dimensions.viewport.height/2+'px'),					left: (parseFloat(this._getParameter('lightwindow_left')) ? parseFloat(this._getParameter('lightwindow_left'))+'px' : this.dimensions.viewport.width/2+'px')				});			}		}	},	//	//	Prepare the window for IE.	//	_prepareIE : function(setup) {		if (Prototype.Browser.IE) {			var height, overflowX, overflowY;			if (setup) { 				var height = '100%';			} else {				var height = 'auto';			}			var body = document.getElementsByTagName('body')[0];			var html = document.getElementsByTagName('html')[0];			html.style.height = body.style.height = height;		}	},	_stopScrolling : function(e) {		if (this.animating) {			if (e.preventDefault) {				e.preventDefault();			}			e.returnValue = false;				}	},	//	//	Get the scroll for the page.	//	_getScroll : function(){      	if(typeof(window.pageYOffset) == 'number') {        	this.pagePosition.x = window.pageXOffset;        	this.pagePosition.y = window.pageYOffset;      	} else if(document.body && (document.body.scrollLeft || document.body.scrollTop)) {	       	this.pagePosition.x = document.body.scrollLeft;        	this.pagePosition.y = document.body.scrollTop;		} else if(document.documentElement) {        	this.pagePosition.x = document.documentElement.scrollLeft;        	this.pagePosition.y = document.documentElement.scrollTop;      	}	},	//	//	Reset the scroll.	//	_setScroll : function(x, y) {		document.documentElement.scrollLeft = x; 		document.documentElement.scrollTop = y; 	},	//	//	Hide Selects from the page because of IE.	//     We could use iframe shims instead here but why add all the extra markup for one browser when this is much easier and cleaner	//	_toggleTroubleElements : function(visibility, content){				if (content) {			var selects = $('lightwindow_contents').getElementsByTagName('select');		} else {			var selects = document.getElementsByTagName('select');		}				for(var i = 0; i < selects.length; i++) {			selects[i].style.visibility = visibility;		}				if (!content) {			if (this.options.hideFlash){				var objects = document.getElementsByTagName('object');				for (i = 0; i != objects.length; i++) {					objects[i].style.visibility = visibility;				}				var embeds = document.getElementsByTagName('embed');				for (i = 0; i != embeds.length; i++) {					embeds[i].style.visibility = visibility;				}			}			var iframes = document.getElementsByTagName('iframe');			for (i = 0; i != iframes.length; i++) {				iframes[i].style.visibility = visibility;			}		}	},	// 	//  Get the actual page size	//	_getPageDimensions : function() {		var xScroll, yScroll;		if (window.innerHeight && window.scrollMaxY) {				xScroll = document.body.scrollWidth;			yScroll = window.innerHeight + window.scrollMaxY;		} else if (document.body.scrollHeight > document.body.offsetHeight){ 			xScroll = document.body.scrollWidth;			yScroll = document.body.scrollHeight;		} else { 			xScroll = document.body.offsetWidth;			yScroll = document.body.offsetHeight;		}		var windowWidth, windowHeight;		if (self.innerHeight) {				windowWidth = self.innerWidth;			windowHeight = self.innerHeight;		} else if (document.documentElement && document.documentElement.clientHeight) { 			windowWidth = document.documentElement.clientWidth;			windowHeight = document.documentElement.clientHeight;		} else if (document.body) { 			windowWidth = document.body.clientWidth;			windowHeight = document.body.clientHeight;		}			if(yScroll < windowHeight){			this.pageDimensions.height = windowHeight;		} else { 			this.pageDimensions.height = yScroll;		}		if(xScroll < windowWidth){				this.pageDimensions.width = windowWidth;		} else {			this.pageDimensions.width = xScroll;		}	},	//	//	Display the lightWindow.	//	_displayLightWindow : function(display, visibility) {		$('lightwindow_overlay').style.display = $('lightwindow').style.display = $('lightwindow_container').style.display = display;			$('lightwindow_overlay').style.visibility = $('lightwindow').style.visibility = $('lightwindow_container').style.visibility = visibility;	},	//	//	Setup Dimensions of lightwindow.	//	_setupDimensions : function() {		var originalHeight, originalWidth;		switch (this.windowType) {			case 'page' :				originalHeight = this.options.dimensions.page.height;				originalWidth = this.options.dimensions.page.width;				break;			case 'image' :				originalHeight = this.options.dimensions.image.height;				originalWidth = this.options.dimensions.image.width;				break;							case 'media' :				originalHeight = this.options.dimensions.media.height;				originalWidth = this.options.dimensions.media.width;				break;						case 'external' : 				originalHeight = this.options.dimensions.external.height;				originalWidth = this.options.dimensions.external.width;				break;							case 'inline' :				originalHeight = this.options.dimensions.inline.height;				originalWidth = this.options.dimensions.inline.width;				break;							default :				originalHeight = this.options.dimensions.page.height;				originalWidth = this.options.dimensions.page.width;				break;						}		var offsetHeight = this._getParameter('lightwindow_top') ? parseFloat(this._getParameter('lightwindow_top'))+this.pagePosition.y : this.dimensions.viewport.height/2+this.pagePosition.y;		var offsetWidth = this._getParameter('lightwindow_left') ? parseFloat(this._getParameter('lightwindow_left'))+this.pagePosition.x : this.dimensions.viewport.width/2+this.pagePosition.x;				// So if a theme has say shadowed edges, they should be consistant and take care of in the contentOffset		$('lightwindow').setStyle({			top: offsetHeight+'px',			left: offsetWidth+'px'		});				$('lightwindow_container').setStyle({			height: originalHeight+'px',			width: originalWidth+'px',			left: -(originalWidth/2)+'px',			top: -(originalHeight/2)+'px'		});		$('lightwindow_contents').setStyle({			height: originalHeight+'px',			width: originalWidth+'px'		});	},	//	//	Get the type of file.	//	_fileType : function(url) {		var image = new RegExp("[^\.]\.("+this.options.fileTypes.image.join('|')+")\s*$", "i");		if (image.test(url)) return 'image';		if (url.indexOf('#') > -1 && (document.domain == this._getDomain(url))) return 'inline';				if (url.indexOf('?') > -1) url = url.substring(0, url.indexOf('?'));		var type = 'unknown';		var page = new RegExp("[^\.]\.("+this.options.fileTypes.page.join('|')+")\s*$", "i");		var media = new RegExp("[^\.]\.("+this.options.fileTypes.media.join('|')+")\s*$", "i");		if (document.domain != this._getDomain(url)) type = 'external';	  	if (media.test(url)) type = 'media';		if (type == 'external' || type == 'media') return type;	  	if (page.test(url) || url.substr((url.length-1), url.length) == '/') type = 'page';		return type;	},	//	//  Get file Extension	//	_fileExtension : function(url) {		if (url.indexOf('?') > -1) {			url = url.substring(0, url.indexOf('?'));		}		var extenstion = '';		for (var x = (url.length-1); x > -1; x--) {			if (url.charAt(x) == '.') {				return extenstion;			}			extenstion = url.charAt(x)+extenstion;		}	},	//	//	Monitor the keyboard while this lightwindow is up	//	_monitorKeyboard : function(status) {		if (status) document.onkeydown = this._eventKeypress.bind(this); 		else document.onkeydown = '';	},	//	//  Perform keyboard actions	//	_eventKeypress : function(e) {		if (e == null) {			var keycode = event.keyCode;		} else {			var keycode = e.which;		}				switch (keycode) { 			case 27: 				this.deactivate(); 				break;						case 13:				return;							default:				break;		}			// Gotta stop those quick fingers		if (this.animating) {			return false;		}				switch (String.fromCharCode(keycode).toLowerCase()) {			case 'p':				if (this.navigationObservers.previous) {					this.navigateWindow('previous');				}				break;							case 'n':				if (this.navigationObservers.next) {					this.navigateWindow('next');				}				break;							default:				break;		}	},	//	//	Get Gallery Information	//	_getGalleryInfo : function(rel) {		if (!rel) return false;		if (rel.indexOf('[') > -1) {			return new Array(escape(rel.substring(0, rel.indexOf('['))), escape(rel.substring(rel.indexOf('[')+1, rel.indexOf(']'))));		} else {			return false;		}	},	//	//	Get the domain from a string.	//	_getDomain : function(url) {            var leadSlashes = url.indexOf('//');        var domainStart = leadSlashes+2;        var withoutResource = url.substring(domainStart, url.length);        var nextSlash = withoutResource.indexOf('/');        var domain = withoutResource.substring(0, nextSlash);		if (domain.indexOf(':') > -1){			var portColon = domain.indexOf(':');			domain = domain.substring(0, portColon);       	}		return domain;    },	//	//	Get the value from the params attribute string.	//	_getParameter : function(parameter, parameters) {		if (!this.element) return false;		if (parameter == 'lightwindow_top' && this.element.top) {			return unescape(this.element.top);		} else if (parameter == 'lightwindow_left' && this.element.left) {			return unescape(this.element.left);		} else if (parameter == 'lightwindow_type' && this.element.type) {			return unescape(this.element.type);		} else if (parameter == 'lightwindow_show_images' && this.element.showImages) {			return unescape(this.element.showImages);		} else if (parameter == 'lightwindow_height' && this.element.height) {			return unescape(this.element.height);		} else if (parameter == 'lightwindow_width' && this.element.width) {			return unescape(this.element.width);		} else if (parameter == 'lightwindow_loading_animation' && this.element.loadingAnimation) {			return unescape(this.element.loadingAnimation);		} else if (parameter == 'lightwindow_iframe_embed' && this.element.iframeEmbed) {			return unescape(this.element.iframeEmbed);		} else if (parameter == 'lightwindow_form' && this.element.form) {			return unescape(this.element.form);		} else {			if (!parameters) {				if (this.element.params) parameters = this.element.params;				else return;			}			var value;			var parameterArray = parameters.split(',');			var compareString = parameter+'=';			var compareLength = compareString.length;			for (var i = 0; i < parameterArray.length; i++) {				if (parameterArray[i].substr(0, compareLength) == compareString) {					var currentParameter = parameterArray[i].split('=');					value = currentParameter[1];					break;				}			}			if (!value) return false;			else return unescape(value);		}	},	//	//  Get the Browser Viewport Dimensions	//	_browserDimensions : function() {		if (Prototype.Browser.IE) {            this.dimensions.viewport.height = document.documentElement.clientHeight;            this.dimensions.viewport.width = document.documentElement.clientWidth;           } else {            this.dimensions.viewport.height = window.innerHeight;            this.dimensions.viewport.width = document.width || document.body.offsetWidth;        }	},	//	//  Get the scrollbar offset, I don't like this method but there is really no other way I can find.	//	_getScrollerWidth : function() {	    var scrollDiv = Element.extend(document.createElement('div'));		scrollDiv.setAttribute('id', 'lightwindow_scroll_div');		scrollDiv.setStyle({			position: 'absolute',			top: '-10000px',			left: '-10000px',			width: '100px',			height: '100px',			overflow: 'hidden'		});	    var contentDiv = Element.extend(document.createElement('div'));		contentDiv.setAttribute('id', 'lightwindow_content_scroll_div');		contentDiv.setStyle({			width: '100%',			height: '200px'		});	    scrollDiv.appendChild(contentDiv);		var body = document.getElementsByTagName('body')[0];		body.appendChild(scrollDiv);	    var noScroll = $('lightwindow_content_scroll_div').offsetWidth;	    scrollDiv.style.overflow = 'auto';    	var withScroll = $('lightwindow_content_scroll_div').offsetWidth;	   	Element.remove($('lightwindow_scroll_div'));	    this.scrollbarOffset = noScroll-withScroll;	},		//	//  Add a param to an object dynamically created	//	_addParamToObject : function(name, value, object, id) {		var param = document.createElement('param');		param.setAttribute('value', value);		param.setAttribute('name', name);		if (id) {			param.setAttribute('id', id);		}		object.appendChild(param);		return object;	},	//	//  Get the outer HTML of an object CROSS BROWSER	//	_outerHTML : function(object) { 		if (Prototype.Browser.IE) {			return object.outerHTML;		} else {			var clone = object.cloneNode(true);			var cloneDiv = document.createElement('div');			cloneDiv.appendChild(clone);			return cloneDiv.innerHTML;		}	},	//	//  Convert an object to markup	//	_convertToMarkup : function(object, closeTag) {		var markup = this._outerHTML(object).replace('</'+closeTag+'>', '');		if (Prototype.Browser.IE) {			for (var i = 0; i < object.childNodes.length; i++){				markup += this._outerHTML(object.childNodes[i]);			}			markup += '</'+closeTag+'>';		}		return markup;	},	//	//  Depending what type of browser it is we have to append the object differently... DAMN YOU IE!!	//	_appendObject : function(object, closeTag, appendTo) {		if (Prototype.Browser.IE) {			appendTo.innerHTML += this._convertToMarkup(object, closeTag);						// Fix the Eolas activate thing but only for specified media, for example doing this to a quicktime film breaks it.			if (this.options.EOLASFix.indexOf(this._fileType(this.element.href)) > -1) {				var objectElements = document.getElementsByTagName('object');				for (var i = 0; i < objectElements.length; i++) {					if (objectElements[i].getAttribute("data")) objectElements[i].removeAttribute('data');					objectElements[i].outerHTML = objectElements[i].outerHTML;					objectElements[i].style.visibility = "visible";				}			}		} else {			appendTo.appendChild(object);			}		},	//	//  Add in iframe	//	_appendIframe : function(scroll) {		var iframe = document.createElement('iframe');		iframe.setAttribute('id', 'lightwindow_iframe');		iframe.setAttribute('name', 'lightwindow_iframe');		iframe.setAttribute('src', 'about:blank');		iframe.setAttribute('height', '100%');		iframe.setAttribute('width', '100%');		iframe.setAttribute('frameborder', '0');		iframe.setAttribute('marginwidth', '0');		iframe.setAttribute('marginheight', '0');		iframe.setAttribute('scrolling', scroll);					this._appendObject(iframe, 'iframe', $('lightwindow_contents'));	},	//	//  Write Content to the iframe using the skin	//	_writeToIframe : function(content) {		var template = this.options.skin.iframe;		template = template.replace('{body_replace}', content); 		if ($('lightwindow_iframe').contentWindow){			$('lightwindow_iframe').contentWindow.document.open();			$('lightwindow_iframe').contentWindow.document.write(template);			$('lightwindow_iframe').contentWindow.document.close();		} else {			$('lightwindow_iframe').contentDocument.open();			$('lightwindow_iframe').contentDocument.write(template);			$('lightwindow_iframe').contentDocument.close();		}	},	//	//  Load the window Information	//  	_loadWindow : function() {		switch (this.windowType) {			case 'image' :				var current = 0;				var images = [];				this.checkImage = [];				this.resizeTo.height = this.resizeTo.width = 0;				this.imageCount = this._getParameter('lightwindow_show_images') ? parseInt(this._getParameter('lightwindow_show_images')) : 1;				// If there is a gallery get it				if (gallery = this._getGalleryInfo(this.element.rel)) {						for (current = 0; current < this.galleries[gallery[0]][gallery[1]].length; current++) {						if (this.contentToFetch.indexOf(this.galleries[gallery[0]][gallery[1]][current].href) > -1) {							break;						}					}					if (this.galleries[gallery[0]][gallery[1]][current-this.imageCount]) {						this.navigationObservers.previous = this.galleries[gallery[0]][gallery[1]][current-this.imageCount];					} else {						this.navigationObservers.previous = false;					}					if (this.galleries[gallery[0]][gallery[1]][current+this.imageCount]) {						this.navigationObservers.next = this.galleries[gallery[0]][gallery[1]][current+this.imageCount];					} else {						this.navigationObservers.next = false;					}										this.activeGallery = true;				} else {					this.navigationObservers.previous = false;					this.navigationObservers.next = false;										this.activeGallery = false;				}								for (var i = current; i < (current+this.imageCount); i++) {							if (gallery && this.galleries[gallery[0]][gallery[1]][i]) {						this.contentToFetch = this.galleries[gallery[0]][gallery[1]][i].href;												this.galleryLocation = {current: (i+1)/this.imageCount, total: (this.galleries[gallery[0]][gallery[1]].length)/this.imageCount};																	if (!this.galleries[gallery[0]][gallery[1]][i+this.imageCount]) {							$('lightwindow_next').setStyle({								display: 'none'							});						} else {							$('lightwindow_next').setStyle({								display: 'block'							});							$('lightwindow_next_title').innerHTML = this.galleries[gallery[0]][gallery[1]][i+this.imageCount].title;						}												if (!this.galleries[gallery[0]][gallery[1]][i-this.imageCount]) {							$('lightwindow_previous').setStyle({								display: 'none'							});						} else {							$('lightwindow_previous').setStyle({								display: 'block'							});							$('lightwindow_previous_title').innerHTML = this.galleries[gallery[0]][gallery[1]][i-this.imageCount].title;						}					}					images[i] = document.createElement('img');					images[i].setAttribute('id', 'lightwindow_image_'+i);					images[i].setAttribute('border', '0');					images[i].setAttribute('src', this.contentToFetch);					$('lightwindow_contents').appendChild(images[i]);					// We have to do this instead of .onload 					this.checkImage[i] = new PeriodicalExecuter(function(i) {						if (!(typeof $('lightwindow_image_'+i).naturalWidth != "undefined" && $('lightwindow_image_'+i).naturalWidth == 0)) {								this.checkImage[i].stop();								var imageHeight = $('lightwindow_image_'+i).getHeight();							if (imageHeight > this.resizeTo.height) {								this.resizeTo.height = imageHeight;							}							this.resizeTo.width += $('lightwindow_image_'+i).getWidth();							this.imageCount--;								$('lightwindow_image_'+i).setStyle({								height: '100%'							});							 	if (this.imageCount == 0) {								this._processWindow();						 	}						}										}.bind(this, i), 1);							}			break;				case 'media' :								var current = 0;			this.resizeTo.height = this.resizeTo.width = 0;			// If there is a gallery get it			if (gallery = this._getGalleryInfo(this.element.rel)) {					for (current = 0; current < this.galleries[gallery[0]][gallery[1]].length; current++) {					if (this.contentToFetch.indexOf(this.galleries[gallery[0]][gallery[1]][current].href) > -1) {						break;					}				}								if (this.galleries[gallery[0]][gallery[1]][current-1]) {					this.navigationObservers.previous = this.galleries[gallery[0]][gallery[1]][current-1];				} else {					this.navigationObservers.previous = false;				}				if (this.galleries[gallery[0]][gallery[1]][current+1]) {					this.navigationObservers.next = this.galleries[gallery[0]][gallery[1]][current+1];				} else {					this.navigationObservers.next = false;				}						this.activeGallery = true;			} else {				this.navigationObservers.previous = false;				this.navigationObservers.next = false;								this.activeGallery = false;			}					if (gallery && this.galleries[gallery[0]][gallery[1]][current]) {				this.contentToFetch = this.galleries[gallery[0]][gallery[1]][current].href;				this.galleryLocation = {current: current+1, total: this.galleries[gallery[0]][gallery[1]].length};								if (!this.galleries[gallery[0]][gallery[1]][current+1]) {					$('lightwindow_next').setStyle({						display: 'none'					});				} else {					$('lightwindow_next').setStyle({						display: 'block'					});					$('lightwindow_next_title').innerHTML = this.galleries[gallery[0]][gallery[1]][current+1].title;				}								if (!this.galleries[gallery[0]][gallery[1]][current-1]) {					$('lightwindow_previous').setStyle({						display: 'none'					});				} else {					$('lightwindow_previous').setStyle({						display: 'block'					});					$('lightwindow_previous_title').innerHTML = this.galleries[gallery[0]][gallery[1]][current-1].title;				}			}						if (this._getParameter('lightwindow_iframe_embed')) {				this.resizeTo.height = this.dimensions.viewport.height;				this.resizeTo.width = this.dimensions.viewport.width;				} else {				this.resizeTo.height = this._getParameter('lightwindow_height');				this.resizeTo.width = this._getParameter('lightwindow_width');							}						this._processWindow();						break;		case 'external' :					this._appendIframe('auto');			this.resizeTo.height = this.dimensions.viewport.height;			this.resizeTo.width = this.dimensions.viewport.width;									this._processWindow();			break;						case 'page' :							var newAJAX = new Ajax.Request(				this.contentToFetch, {					method: 'get', 					parameters: '', 					onComplete: function(response) {						$('lightwindow_contents').innerHTML += response.responseText;						this.resizeTo.height = $('lightwindow_contents').scrollHeight+(this.options.contentOffset.height);						this.resizeTo.width = $('lightwindow_contents').scrollWidth+(this.options.contentOffset.width);						this._processWindow();					}.bind(this)				}			);						break;					case 'inline' : 					var content = this.contentToFetch;			if (content.indexOf('?') > -1) {				content = content.substring(0, content.indexOf('?'));			}			content = content.substring(content.indexOf('#')+1);						new Insertion.Top($('lightwindow_contents'), $(content).innerHTML);						this.resizeTo.height = $('lightwindow_contents').scrollHeight+(this.options.contentOffset.height);			this.resizeTo.width = $('lightwindow_contents').scrollWidth+(this.options.contentOffset.width);						this._toggleTroubleElements('hidden', true); 						this._processWindow();						break;					default : 			throw("Page Type could not be determined, please amend this lightwindow URL "+this.contentToFetch);			break;		}	},	//	//  Resize the Window to fit the viewport if necessary	//	_resizeWindowToFit : function() {		if (this.resizeTo.height+this.dimensions.cruft.height > this.dimensions.viewport.height) {			var heightRatio = this.resizeTo.height/this.resizeTo.width;			this.resizeTo.height = this.dimensions.viewport.height-this.dimensions.cruft.height-(2*this.options.viewportPadding);			// We only care about ratio's with this window type						if (this.windowType == 'image' || (this.windowType == 'media' && !this._getParameter('lightwindow_iframe_embed'))) {				this.resizeTo.width = this.resizeTo.height/heightRatio;				$('lightwindow_data_slide_inner').setStyle({					width: this.resizeTo.width+'px'				});						}		} 		if (this.resizeTo.width+this.dimensions.cruft.width > this.dimensions.viewport.width) {			var widthRatio = this.resizeTo.width/this.resizeTo.height;			this.resizeTo.width = this.dimensions.viewport.width-2*this.dimensions.cruft.width-(2*this.options.viewportPadding);			// We only care about ratio's with this window type			if (this.windowType == 'image' || (this.windowType == 'media' && !this._getParameter('lightwindow_iframe_embed'))) {				this.resizeTo.height = this.resizeTo.width/widthRatio;				$('lightwindow_data_slide_inner').setStyle({					height: this.resizeTo.height+'px'				});			}		}				},	//	//  Set the Window to a preset size	//	_presetWindowSize : function() {		if (this._getParameter('lightwindow_height')) {			this.resizeTo.height = parseFloat(this._getParameter('lightwindow_height'));		}		if (this._getParameter('lightwindow_width')) {			this.resizeTo.width = parseFloat(this._getParameter('lightwindow_width'));		}	},	//	//  Process the Window	//	_processWindow : function() {		// Clean out our effects		this.dimensions.dataEffects = [];		// Set up the data-slide if we have caption information		if (this.element.caption || this.element.author || (this.activeGallery && this.options.showGalleryCount)) {			if (this.element.caption) {				$('lightwindow_data_caption').innerHTML = this.element.caption;				$('lightwindow_data_caption').setStyle({					display: 'block'				});			} else {				$('lightwindow_data_caption').setStyle({					display: 'none'				});							}			if (this.element.author) {				$('lightwindow_data_author').innerHTML = this.element.author;				$('lightwindow_data_author_container').setStyle({					display: 'block'				});			} else {				$('lightwindow_data_author_container').setStyle({					display: 'none'				});							}			if (this.activeGallery && this.options.showGalleryCount) {				$('lightwindow_data_gallery_current').innerHTML = this.galleryLocation.current;				$('lightwindow_data_gallery_total').innerHTML = this.galleryLocation.total;				$('lightwindow_data_gallery_container').setStyle({					display: 'block'				});			} else {				$('lightwindow_data_gallery_container').setStyle({					display: 'none'				});							}			$('lightwindow_data_slide_inner').setStyle({				width: this.resizeTo.width+'px',				height: 'auto',				visibility: 'visible',				display: 'block'			});			$('lightwindow_data_slide').setStyle({				height: $('lightwindow_data_slide').getHeight()+'px',				width: '1px',				overflow: 'hidden',				display: 'block'			});		} else {			$('lightwindow_data_slide').setStyle({				display: 'none',				width: 'auto'			});			$('lightwindow_data_slide_inner').setStyle({				display: 'none',				visibility: 'hidden',				width: this.resizeTo.width+'px',				height: '0px'			});		}						if (this.element.title != 'null') {					$('lightwindow_title_bar_title').innerHTML = this.element.title;		} else {			$('lightwindow_title_bar_title').innerHTML = '';		}				var originalContainerDimensions = {height: $('lightwindow_container').getHeight(), width: $('lightwindow_container').getWidth()};		// Position the window    	$('lightwindow_container').setStyle({			height: 'auto',			// We need to set the width to a px not auto as opera has problems with it			width: $('lightwindow_container').getWidth()+this.options.contentOffset.width-(this.windowActive ? this.options.contentOffset.width : 0)+'px'		});		var newContainerDimensions = {height: $('lightwindow_container').getHeight(), width: $('lightwindow_container').getWidth()}; 				// We need to record the container dimension changes		this.containerChange = {height: originalContainerDimensions.height-newContainerDimensions.height, width: originalContainerDimensions.width-newContainerDimensions.width};		// Get out general dimensions		this.dimensions.container = {height: $('lightwindow_container').getHeight(), width: $('lightwindow_container').getWidth()};		this.dimensions.cruft = {height: this.dimensions.container.height-$('lightwindow_contents').getHeight()+this.options.contentOffset.height, width: this.dimensions.container.width-$('lightwindow_contents').getWidth()+this.options.contentOffset.width};				// Set Sizes if we need too		this._presetWindowSize();		this._resizeWindowToFit(); // Even if the window is preset we still don't want it to go outside of the viewport		if (!this.windowActive) {			// Position the window		   	$('lightwindow_container').setStyle({				left: -(this.dimensions.container.width/2)+'px',				top: -(this.dimensions.container.height/2)+'px'			});		}	   	$('lightwindow_container').setStyle({			height: this.dimensions.container.height+'px',			width: this.dimensions.container.width+'px'		});				// We are ready, lets show this puppy off!		this._displayLightWindow('block', 'visible');		this._animateLightWindow();	},	//	//  Fire off our animation handler	//	_animateLightWindow : function() {		if (this.options.animationHandler) {			this.options.animationHandler().bind(this);		} else {			this._defaultAnimationHandler();		}	},	//	//  Fire off our transition handler	//	_handleNavigation : function(display) {		if (this.options.navigationHandler) {			this.options.navigationHandler().bind(this, display);		} else {			this._defaultDisplayNavigation(display);		}	},	//	//  Fire off our transition handler	//	_handleTransition : function() {		if (this.options.transitionHandler) {			this.options.transitionHandler().bind(this);		} else {			this._defaultTransitionHandler();		}	},	//	//  Handle the finish of the window animation	// 	_handleFinalWindowAnimation : function(delay) {		if (this.options.finalAnimationHandler) {			this.options.finalAnimationHandler().bind(this, delay);		} else {			this._defaultfinalWindowAnimationHandler(delay);		}			},	//	//  Handle the gallery Animation	// 	_handleGalleryAnimation : function(list) {		if (this.options.galleryAnimationHandler) {			this.options.galleryAnimationHandler().bind(this, list);		} else {			this._defaultGalleryAnimationHandler(list);		}			},	//	//  Display the navigation 	//	_defaultDisplayNavigation : function(display) {		if (display) {			$('lightwindow_navigation').setStyle({				display: 'block',				height: $('lightwindow_contents').getHeight()+'px',				width: '100%',				marginTop: this.options.dimensions.titleHeight+'px'			});					} else {			$('lightwindow_navigation').setStyle({				display: 'none',				height: 'auto',				width: 'auto'			});					}	},	//	//  This is the default animation handler for LightWindow	//	_defaultAnimationHandler : function() {			// Now that we have figures out the cruft lets make the caption go away and add its effects		if (this.element.caption || this.element.author || (this.activeGallery && this.options.showGalleryCount)) {			$('lightwindow_data_slide').setStyle({				display: 'none',				width: 'auto'			});			this.dimensions.dataEffects.push(				new Effect.SlideDown('lightwindow_data_slide', {sync: true}),				new Effect.Appear('lightwindow_data_slide', {sync: true, from: 0.0, to: 1.0})			);		}		// Set up the Title if we have one		$('lightwindow_title_bar_inner').setStyle({			height: '0px',			marginTop: this.options.dimensions.titleHeight+'px'		});				// We always want the title bar as well		this.dimensions.dataEffects.push(			new Effect.Morph('lightwindow_title_bar_inner', {sync: true, style: {height: this.options.dimensions.titleHeight+'px', marginTop: '0px'}}),		 	new Effect.Appear('lightwindow_title_bar_inner', {sync: true, from: 0.0, to: 1.0})		);						if (!this.options.hideGalleryTab) {			this._handleGalleryAnimation(false);			if ($('lightwindow_galleries_tab_container').getHeight() == 0) {				this.dimensions.dataEffects.push(					new Effect.Morph('lightwindow_galleries_tab_container', {sync: true, style: {height: '20px', marginTop: '0px'}})				);				$('lightwindow_galleries').setStyle({					width: '0px'				});			}		}				var resized = false;		var ratio = this.dimensions.container.width-$('lightwindow_contents').getWidth()+this.resizeTo.width+this.options.contentOffset.width;		if (ratio != $('lightwindow_container').getWidth()) {			new Effect.Parallel([					new Effect.Scale('lightwindow_contents', 100*(this.resizeTo.width/$('lightwindow_contents').getWidth()), {scaleFrom: 100*($('lightwindow_contents').getWidth()/($('lightwindow_contents').getWidth()+(this.options.contentOffset.width))), sync: true,  scaleY: false, scaleContent: false}),					new Effect.Scale('lightwindow_container', 100*(ratio/(this.dimensions.container.width)), {sync: true, scaleY: false, scaleFromCenter: true, scaleContent: false})				], {					duration: this.duration, 					delay: 0.25,					queue: {position: 'end', scope: 'lightwindowAnimation'}				}			);				}				ratio = this.dimensions.container.height-$('lightwindow_contents').getHeight()+this.resizeTo.height+this.options.contentOffset.height;		if (ratio != $('lightwindow_container').getHeight()) {			new Effect.Parallel([					new Effect.Scale('lightwindow_contents', 100*(this.resizeTo.height/$('lightwindow_contents').getHeight()), {scaleFrom: 100*($('lightwindow_contents').getHeight()/($('lightwindow_contents').getHeight()+(this.options.contentOffset.height))), sync: true, scaleX: false, scaleContent: false}),					new Effect.Scale('lightwindow_container', 100*(ratio/(this.dimensions.container.height)), {sync: true, scaleX: false, scaleFromCenter: true, scaleContent: false})				], {					duration: this.duration, 					afterFinish: function() {										if (this.dimensions.dataEffects.length > 0) {							if (!this.options.hideGalleryTab) {								$('lightwindow_galleries').setStyle({									width: this.resizeTo.width+'px'								});							}							new Effect.Parallel(this.dimensions.dataEffects, {									duration: this.duration,									afterFinish: function() {										this._finishWindow();									}.bind(this),									queue: {position: 'end', scope: 'lightwindowAnimation'} 								}							);						}					}.bind(this), 					queue: {position: 'end', scope: 'lightwindowAnimation'} 				}			);			resized = true;		}				// We need to do our data effect since there was no resizing		if (!resized && this.dimensions.dataEffects.length > 0) {				new Effect.Parallel(this.dimensions.dataEffects, {					duration: this.duration,					beforeStart: function() {						if (!this.options.hideGalleryTab) {							$('lightwindow_galleries').setStyle({								width: this.resizeTo.width+'px'							});						}						if (this.containerChange.height != 0 || this.containerChange.width != 0) {							new Effect.MoveBy('lightwindow_container', this.containerChange.height, this.containerChange.width, {transition: Effect.Transitions.sinoidal});						}					}.bind(this),								afterFinish: function() {						this._finishWindow();					}.bind(this),					queue: {position: 'end', scope: 'lightwindowAnimation'} 				}			);		}						},	//	//  Finish up Window Animation	//	_defaultfinalWindowAnimationHandler : function(delay) {		if (this.windowType == 'media' || this._getParameter('lightwindow_loading_animation')) {				// Because of major flickering with the overlay we just hide it in this case			Element.hide('lightwindow_loading');			this._handleNavigation(this.activeGallery);			this._setStatus(false);		} else {			Effect.Fade('lightwindow_loading', {				duration: 0.75,				delay: 1.0, 				afterFinish: function() {					// Just in case we need some scroll goodness (this also avoids the swiss cheese effect)					if (this.windowType != 'image' && this.windowType != 'media' && this.windowType != 'external') {						$('lightwindow_contents').setStyle({							overflow: 'auto'						});					}					this._handleNavigation(this.activeGallery);					this._defaultGalleryAnimationHandler();					this._setStatus(false);				}.bind(this),				queue: {position: 'end', scope: 'lightwindowAnimation'}			});		}	},	//	//  Handle the gallery Animation	//	_defaultGalleryAnimationHandler : function(list) {		if (this.activeGallery) {			$('lightwindow_galleries').setStyle({				display: 'block',				marginBottom: $('lightwindow_data_slide').getHeight()+this.options.contentOffset.height/2+'px'			});			$('lightwindow_navigation').setStyle({				height: $('lightwindow_contents').getHeight()-20+'px'			});		} else {			$('lightwindow_galleries').setStyle({				display: 'none'			});				$('lightwindow_galleries_tab_container').setStyle({				height: '0px',				marginTop: '20px'			});			$('lightwindow_galleries_list').setStyle({				height: '0px'			});			return false;		}				if (list) {			if ($('lightwindow_galleries_list').getHeight() == 0) {				var height = $('lightwindow_contents').getHeight()*0.80;				$('lightwindow_galleries_tab_span').className = 'down';			} else {				var height = 0;				$('lightwindow_galleries_tab_span').className = 'up';			}			new Effect.Morph('lightwindow_galleries_list', {				duration: this.duration,				transition: Effect.Transitions.sinoidal,				style: {height: height+'px'},				beforeStart: function() {					$('lightwindow_galleries_list').setStyle({						overflow: 'hidden'					});									},				afterFinish: function() {					$('lightwindow_galleries_list').setStyle({						overflow: 'auto'					});				},				queue: {position: 'end', scope: 'lightwindowAnimation'}			});			}					},	//	//  Default Transition Handler	//	_defaultTransitionHandler : function() {		// Clean out our effects		this.dimensions.dataEffects = [];		// Now that we have figures out the cruft lets make the caption go away and add its effects		if ($('lightwindow_data_slide').getStyle('display') != 'none') {			this.dimensions.dataEffects.push(				new Effect.SlideUp('lightwindow_data_slide', {sync: true}),				new Effect.Fade('lightwindow_data_slide', {sync: true, from: 1.0, to: 0.0})			);		}				if (!this.options.hideGalleryTab) {			if ($('lightwindow_galleries').getHeight() != 0 && !this.options.hideGalleryTab) {				this.dimensions.dataEffects.push(					new Effect.Morph('lightwindow_galleries_tab_container', {sync: true, style: {height: '0px', marginTop: '20px'}})				);			}						if ($('lightwindow_galleries_list').getHeight() != 0) {				$('lightwindow_galleries_tab_span').className = 'up';				this.dimensions.dataEffects.push(					new Effect.Morph('lightwindow_galleries_list', {						sync: true, 						style: {height: '0px'},						transition: Effect.Transitions.sinoidal,						beforeStart: function() {							$('lightwindow_galleries_list').setStyle({								overflow: 'hidden'							});											},						afterFinish: function() {							$('lightwindow_galleries_list').setStyle({								overflow: 'auto'							});						}					})				);			}		}				// We always want the title bar as well		this.dimensions.dataEffects.push(			new Effect.Morph('lightwindow_title_bar_inner', {sync: true, style: {height: '0px', marginTop: this.options.dimensions.titleHeight+'px'}}),		 	new Effect.Fade('lightwindow_title_bar_inner', {sync: true, from: 1.0, to: 0.0})		);		new Effect.Parallel(this.dimensions.dataEffects, {				duration: this.duration,				afterFinish: function() {					this._loadWindow();				}.bind(this),				queue: {position: 'end', scope: 'lightwindowAnimation'} 			}		);		},	//	//	Default Form handler for LightWindow	//	_defaultFormHandler : function(e) {		var element = Event.element(e).parentNode;		var parameterString = Form.serialize(this._getParameter('lightwindow_form', element.getAttribute('params')));		if (this.options.formMethod == 'post') {			var newAJAX = new Ajax.Request(element.href, { 				method: 'post', 				postBody: parameterString, 				onComplete: this.openWindow.bind(this, element)			});		} else if (this.options.formMethod == 'get') {			var newAJAX = new Ajax.Request(element.href, { 				method: 'get', 				parameters: parameterString, 				onComplete: this.openWindow.bind(this, element)			});		}	},	// 	//  Wrap everything up	//	_finishWindow : function() {		if (this.windowType == 'external') {			// We set the externals source here because it allows for a much smoother animation			$('lightwindow_iframe').setAttribute('src', this.element.href);			this._handleFinalWindowAnimation(1);			} else if (this.windowType == 'media') {			var outerObject = document.createElement('object');			outerObject.setAttribute('classid', this.options.classids[this._fileExtension(this.contentToFetch)]);			outerObject.setAttribute('codebase', this.options.codebases[this._fileExtension(this.contentToFetch)]);			outerObject.setAttribute('id', 'lightwindow_media_primary');			outerObject.setAttribute('name', 'lightwindow_media_primary');			outerObject.setAttribute('width', this.resizeTo.width);			outerObject.setAttribute('height', this.resizeTo.height);			outerObject = this._addParamToObject('movie', this.contentToFetch, outerObject);			outerObject = this._addParamToObject('src', this.contentToFetch, outerObject);			outerObject = this._addParamToObject('controller', 'true', outerObject);			outerObject = this._addParamToObject('wmode', 'transparent', outerObject);			outerObject = this._addParamToObject('cache', 'false', outerObject);			outerObject = this._addParamToObject('quality', 'high', outerObject);			if (!Prototype.Browser.IE) {				var innerObject = document.createElement('object');				innerObject.setAttribute('type', this.options.mimeTypes[this._fileExtension(this.contentToFetch)]);				innerObject.setAttribute('data', this.contentToFetch);				innerObject.setAttribute('id', 'lightwindow_media_secondary');				innerObject.setAttribute('name', 'lightwindow_media_secondary');				innerObject.setAttribute('width', this.resizeTo.width);				innerObject.setAttribute('height', this.resizeTo.height);				innerObject = this._addParamToObject('controller', 'true', innerObject);				innerObject = this._addParamToObject('wmode', 'transparent', innerObject);				innerObject = this._addParamToObject('cache', 'false', innerObject);				innerObject = this._addParamToObject('quality', 'high', innerObject);							outerObject.appendChild(innerObject);			}							if (this._getParameter('lightwindow_iframe_embed')) {				this._appendIframe('no');				this._writeToIframe(this._convertToMarkup(outerObject, 'object'));			} else {				this._appendObject(outerObject, 'object', $('lightwindow_contents'));			}			this._handleFinalWindowAnimation(0);		} else {			this._handleFinalWindowAnimation(0);		}		// Initialize any actions		this._setupActions();	}}/*-----------------------------------------------------------------------------------------------*/Event.observe(window, 'load', lightwindowInit, false);////	Set up all of our links//var myLightWindow = null;function lightwindowInit() {	myLightWindow = new lightwindow();}
