/* * yuga.js 0.7.1 - 優雅なWeb制作のためのJS * * Copyright (c) 2009 Kyosuke Nakamura (kyosuke.jp) * Licensed under the MIT License: * http://www.opensource.org/licenses/mit-license.php * * Since:     2006-10-30 * Modified:  2009-01-27 * * jQuery 1.3.1 * ThickBox 3.1 */(function($) {	$(function() {		//$.yuga.selflink();		$.yuga.rollover();		$.yuga.externalLink();		//$.yuga.thickbox();		$.yuga.scroll();		$.yuga.tab();		$.yuga.stripe();		$.yuga.css3class();	});	//---------------------------------------------------------------------	$.yuga = {		// URIを解析したオブジェクトを返すfunction		Uri: function(path){			var self = this;			this.originalPath = path;			//絶対パスを取得			this.absolutePath = (function(){				var e = document.createElement('span');				e.innerHTML = '<a href="' + path + '" />';				return e.firstChild.href;			})();			//絶対パスを分解			var fields = {'schema' : 2, 'username' : 5, 'password' : 6, 'host' : 7, 'path' : 9, 'query' : 10, 'fragment' : 11};			var r = /^((\w+):)?(\/\/)?((\w+):?(\w+)?@)?([^\/\?:]+):?(\d+)?(\/?[^\?#]+)?\??([^#]+)?#?(\w*)/.exec(this.absolutePath);			for (var field in fields) {				this[field] = r[fields[field]];			}			this.querys = {};			if(this.query){				$.each(self.query.split('&'), function(){					var a = this.split('=');					if (a.length == 2) self.querys[a[0]] = a[1];				});			}		},		//現在のページと親ディレクトリへのリンク		selflink: function (options) {			var c = $.extend({				selfLinkAreaSelector:'body',				selfLinkClass:'current',				parentsLinkClass:'parentsLink',				postfix: '_cr',				changeImgSelf:true,				changeImgParents:true			}, options);			$(c.selfLinkAreaSelector+((c.selfLinkAreaSelector)?' ':'')+'a[href]').each(function(){				var href = new $.yuga.Uri(this.getAttribute('href'));				var setImgFlg = false;				if ((href.absolutePath == location.href) && !href.fragment) {					//同じ文書にリンク					$(this).addClass(c.selfLinkClass);					setImgFlg = c.changeImgSelf;				} else if (0 <= location.href.search(href.absolutePath)) {					//親ディレクトリリンク					$(this).addClass(c.parentsLinkClass);					setImgFlg = c.changeImgParents;				}				if (setImgFlg){					//img要素が含まれていたら現在用画像（_cr）に設定					$(this).find('img').each(function(){						this.originalSrc = $(this).attr('src');						this.currentSrc = this.originalSrc.replace(new RegExp('('+c.postfix+')?(\.gif|\.jpg|\.png)$'), c.postfix+"$2");						$(this).attr('src',this.currentSrc);					});				}			});		},		//ロールオーバー		rollover: function(options) {			var c = $.extend({				hoverSelector: '.btn, .allbtn img',				groupSelector: '.btngroup',				postfix: '_on'			}, options);			//ロールオーバーするノードの初期化			var rolloverImgs = $(c.hoverSelector).filter(isNotCurrent);			rolloverImgs.each(function(){				this.originalSrc = $(this).attr('src');				this.rolloverSrc = this.originalSrc.replace(new RegExp('('+c.postfix+')?(\.gif|\.jpg|\.png)$'), c.postfix+"$2");				this.rolloverImg = new Image;				this.rolloverImg.src = this.rolloverSrc;			});			//グループ内のimg要素を指定するセレクタ生成			var groupingImgs = $(c.groupSelector).find('img').filter(isRolloverImg);			//通常ロールオーバー			rolloverImgs.not(groupingImgs).hover(function(){				$(this).attr('src',this.rolloverSrc);			},function(){				$(this).attr('src',this.originalSrc);			});			//グループ化されたロールオーバー			$(c.groupSelector).hover(function(){				$(this).find('img').filter(isRolloverImg).each(function(){					$(this).attr('src',this.rolloverSrc);				});			},function(){				$(this).find('img').filter(isRolloverImg).each(function(){					$(this).attr('src',this.originalSrc);				});			});			//フィルタ用function			function isNotCurrent(i){				return Boolean(!this.currentSrc);			}			function isRolloverImg(i){				return Boolean(this.rolloverSrc);			}		},		//外部リンクは別ウインドウを設定		externalLink: function(options) {			var c = $.extend({				windowOpen:true,				externalClass: 'externalLink',				addIconSrc: ''			}, options);			var uri = new $.yuga.Uri(location.href);			var e = $('a[href^="http://"]').not('a[href^="' + uri.schema + '://' + uri.host + '/' + '"]');			if (c.windowOpen) {				e.click(function(){					window.open(this.href, '_blank');					return false;				});			}			if (c.addIconSrc) e.not(':has(img)').after($('<img src="'+c.addIconSrc+'" class="externalIcon" />'));			e.addClass(c.externalClass);		},/*		//画像へ直リンクするとthickboxで表示(thickbox.js利用)		thickbox: function() {			try {				tb_init('a[href$=".jpg"]:not(.thickbox, a[href*="?"]), a[href$=".gif"][href!="?"]:not(.thickbox, a[href*="?"]), a[href$=".png"][href!="?"]:not(.thickbox, a[href*="?"])');			} catch(e) {			}			},*/		//ページ内リンクはするするスクロール		scroll: function(options) {			//ドキュメントのスクロールを制御するオブジェクト			var scroller = (function() {				var c = $.extend({					easing:100,					step:30,					fps:60,					fragment:''				}, options);				c.ms = Math.floor(1000/c.fps);				var timerId;				var param = {					stepCount:0,					startY:0,					endY:0,					lastY:0				};				//スクロール中に実行されるfunction				function move() {					if (param.stepCount == c.step) {						//スクロール終了時						setFragment(param.hrefdata.absolutePath);						window.scrollTo(getCurrentX(), param.endY);					} else if (param.lastY == getCurrentY()) {						//通常スクロール時						param.stepCount++;						window.scrollTo(getCurrentX(), getEasingY());						param.lastY = getEasingY();						timerId = setTimeout(move, c.ms); 					} else {						//キャンセル発生						if (getCurrentY()+getViewportHeight() == getDocumentHeight()) {							//画面下のためスクロール終了							setFragment(param.hrefdata.absolutePath);						}					}				}				function setFragment(path){					location.href = path				}				function getCurrentY() {					return document.body.scrollTop  || document.documentElement.scrollTop;				}				function getCurrentX() {					return document.body.scrollLeft  || document.documentElement.scrollLeft;				}				function getDocumentHeight(){					return document.documentElement.scrollHeight || document.body.scrollHeight;				}				function getViewportHeight(){					return (!$.browser.safari && !$.browser.opera) ? document.documentElement.clientHeight || document.body.clientHeight || document.body.scrollHeight : window.innerHeight;				}				function getEasingY() {					return Math.floor(getEasing(param.startY, param.endY, param.stepCount, c.step, c.easing));				}				function getEasing(start, end, stepCount, step, easing) {					var s = stepCount / step;					return (end - start) * (s + easing / (100 * Math.PI) * Math.sin(Math.PI * s)) + start;				}				return {					set: function(options) {						this.stop();						if (options.startY == undefined) options.startY = getCurrentY();						param = $.extend(param, options);						param.lastY = param.startY;						timerId = setTimeout(move, c.ms); 					},					stop: function(){						clearTimeout(timerId);						param.stepCount = 0;					}				};			})();			$('a[href^=#], area[href^=#]').not('a[href=#], area[href=#]').each(function(){				this.hrefdata = new $.yuga.Uri(this.getAttribute('href'));			}).click(function(){				var target = $('#'+this.hrefdata.fragment);				if (target.length == 0) target = $('a[name='+this.hrefdata.fragment+']');				if (target.length) {					scroller.set({						endY: target.offset().top,						hrefdata: this.hrefdata					});					return false;				}			});		},		//タブ機能		tab: function(options) {			var c = $.extend({				tabNavSelector:'.tabNav',				activeTabClass:'active'			}, options);			$(c.tabNavSelector).each(function(){				var tabNavList = $(this).find('a[href^=#], area[href^=#]');				var tabBodyList;				tabNavList.each(function(){					this.hrefdata = new $.yuga.Uri(this.getAttribute('href'));					var selecter = '#'+this.hrefdata.fragment;					if (tabBodyList) {						tabBodyList = tabBodyList.add(selecter);					} else {						tabBodyList = $(selecter);					}					$(this).unbind('click');					$(this).click(function(){						tabNavList.removeClass(c.activeTabClass);						$(this).addClass(c.activeTabClass);						tabBodyList.hide();						$(selecter).show();						return false;					});				});				tabBodyList.hide()				tabNavList.filter(':first').trigger('click');			});		},		//奇数、偶数を自動追加		stripe: function(options) {			var c = $.extend({				oddClass:'odd',				evenClass:'even'			}, options);			$('ul, ol').each(function(){				//JSでは0から数えるのでevenとaddを逆に指定				$(this).children('li:odd').addClass(c.evenClass);				$(this).children('li:even').addClass(c.oddClass);			});			$('table, tbody').each(function(){				$(this).children('tr:odd').addClass(c.evenClass);				$(this).children('tr:even').addClass(c.oddClass);			});		},		//css3のクラスを追加		css3class: function() {			//:first-child, :last-childをクラスとして追加			$('body :first-child').addClass('firstChild');			$('body :last-child').addClass('lastChild');			//css3の:emptyをクラスとして追加			$('body :empty').addClass('empty');		}	};})(jQuery);/* ------------------------------------------------------------------------	Class: prettyPhoto	Use: Lightbox clone for jQuery	Author: Stephane Caron (http://www.no-margin-for-errors.com)	Version: 2.5.6------------------------------------------------------------------------- */(function($) {	$.prettyPhoto = {version: '2.5.6'};		$.fn.prettyPhoto = function(settings) {		settings = jQuery.extend({			animationSpeed: 'normal', /* fast/slow/normal */			opacity: 0.90, /* Value between 0 and 1 */			showTitle: false, /* true/false */			allowresize: true, /* true/false */			default_width: 500,			default_height: 344,			counter_separator_label: '/', /* The separator for the gallery counter 1 "of" 2 */			theme: 'dark_rounded', /* light_rounded / dark_rounded / light_square / dark_square / facebook */			hideflash: false, /* Hides all the flash object on a page, set to TRUE if flash appears over prettyPhoto */			wmode: 'opaque', /* Set the flash wmode attribute */			autoplay: true, /* Automatically start videos: True/False */			modal: false, /* If set to true, only the close button will close the window */			changepicturecallback: function(){}, /* Called everytime an item is shown/changed */			callback: function(){}, /* Called when prettyPhoto is closed */			markup: '<div class="pp_pic_holder"> \						<div class="pp_top"> \							<div class="pp_left"></div> \							<div class="pp_middle"></div> \							<div class="pp_right"></div> \						</div> \						<div class="pp_content_container"> \							<div class="pp_left"> \							<div class="pp_right"> \								<div class="pp_content"> \									<div class="pp_loaderIcon"></div> \									<div class="pp_fade"> \										<a href="#" class="pp_expand" title="Expand the image">Expand</a> \										<div class="pp_hoverContainer"> \											<a class="pp_next" href="#">next</a> \											<a class="pp_previous" href="#">previous</a> \										</div> \										<div id="pp_full_res"></div> \										<div class="pp_details clearfix"> \											<a class="pp_close" href="#">Close</a> \											<p class="pp_description"></p> \											<div class="pp_nav"> \												<a href="#" class="pp_arrow_previous">Previous</a> \												<p class="currentTextHolder">0/0</p> \												<a href="#" class="pp_arrow_next">Next</a> \											</div> \										</div> \									</div> \								</div> \							</div> \							</div> \						</div> \						<div class="pp_bottom"> \							<div class="pp_left"></div> \							<div class="pp_middle"></div> \							<div class="pp_right"></div> \						</div> \					</div> \					<div class="pp_overlay"></div> \					<div class="ppt"></div>',			image_markup: '<img id="fullResImage" src="" />',			flash_markup: '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="{width}" height="{height}"><param name="wmode" value="{wmode}" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="{path}" /><embed src="{path}" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="{width}" height="{height}" wmode="{wmode}"></embed></object>',			quicktime_markup: '<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab" height="{height}" width="{width}"><param name="src" value="{path}"><param name="autoplay" value="{autoplay}"><param name="type" value="video/quicktime"><embed src="{path}" height="{height}" width="{width}" autoplay="{autoplay}" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/"></embed></object>',			iframe_markup: '<iframe src ="{path}" width="{width}" height="{height}" frameborder="no"></iframe>',			inline_markup: '<div class="pp_inline clearfix">{content}</div>'		}, settings);				// Fallback to a supported theme for IE6		if($.browser.msie && parseInt($.browser.version) == 6){			settings.theme = "light_square";		}				if($('.pp_overlay').size()==0) _buildOverlay(); // If the overlay is not there, inject it!				// Global variables accessible only by prettyPhoto		var doresize = true, percentBased = false, correctSizes,				// Cached selectors		$pp_pic_holder, $ppt, $pp_overlay,				// prettyPhoto container specific		pp_contentHeight, pp_contentWidth, pp_containerHeight, pp_containerWidth,				// Window size		windowHeight = $(window).height(), windowWidth = $(window).width(),			//Gallery specific		setPosition = 0,		// Global elements		scrollPos = _getScroll();			// Window/Keyboard events		$(window).scroll(function(){ scrollPos = _getScroll(); _centerOverlay(); _resizeOverlay(); });		$(window).resize(function(){ _centerOverlay(); _resizeOverlay(); });		$(document).keydown(function(e){			if($pp_pic_holder.is(':visible'))			switch(e.keyCode){				case 37:					$.prettyPhoto.changePage('previous');					break;				case 39:					$.prettyPhoto.changePage('next');					break;				case 27:					if(!settings.modal)					$.prettyPhoto.close();					break;			};	    });			// Bind the code to each links		$(this).each(function(){			$(this).bind('click',function(){				_self = this; // Fix scoping								// Find out if the picture is part of a set				theRel = $(this).attr('rel');				galleryRegExp = /\[(?:.*)\]/;				theGallery = galleryRegExp.exec(theRel);								// Build the gallery array				var images = new Array(), titles = new Array(), descriptions = new Array();				if(theGallery){					$('a[rel*='+theGallery+']').each(function(i){						if($(this)[0] === $(_self)[0]) setPosition = i; // Get the position in the set						images.push($(this).attr('href'));						titles.push($(this).find('img').attr('alt'));						descriptions.push($(this).attr('title'));					});				}else{					images = $(this).attr('href');					titles = ($(this).find('img').attr('alt')) ?  $(this).find('img').attr('alt') : '';					descriptions = ($(this).attr('title')) ?  $(this).attr('title') : '';				}				$.prettyPhoto.open(images,titles,descriptions);				return false;			});		});					/**		* Opens the prettyPhoto modal box.		* @param image {String,Array} Full path to the image to be open, can also be an array containing full images paths.		* @param title {String,Array} The title to be displayed with the picture, can also be an array containing all the titles.		* @param description {String,Array} The description to be displayed with the picture, can also be an array containing all the descriptions.		*/		$.prettyPhoto.open = function(gallery_images,gallery_titles,gallery_descriptions) {			// To fix the bug with IE select boxes			if($.browser.msie && $.browser.version == 6){				$('select').css('visibility','hidden');			};						if(settings.hideflash) $('object,embed').css('visibility','hidden'); // Hide the flash						// Convert everything to an array in the case it's a single item			images = $.makeArray(gallery_images);			titles = $.makeArray(gallery_titles);			descriptions = $.makeArray(gallery_descriptions);			image_set = ($(images).size() > 0) ?  true : false; // Find out if it's a set			// Hide the next/previous links if on first or last images.			_checkPosition($(images).size());					$('.pp_loaderIcon').show(); // Do I need to explain?					// Fade the content in			$pp_overlay.show().fadeTo(settings.animationSpeed,settings.opacity);			// Display the current position			$pp_pic_holder.find('.currentTextHolder').text((setPosition+1) + settings.counter_separator_label + $(images).size());			// Set the description			if(descriptions[setPosition]){				$pp_pic_holder.find('.pp_description').show().html(unescape(descriptions[setPosition]));			}else{				$pp_pic_holder.find('.pp_description').hide().text('');			};			// Set the title			if(titles[setPosition] && settings.showTitle){				hasTitle = true;				$ppt.html(unescape(titles[setPosition]));			}else{				hasTitle = false;			};						// Get the dimensions			movie_width = ( parseFloat(grab_param('width',images[setPosition])) ) ? grab_param('width',images[setPosition]) : settings.default_width.toString();			movie_height = ( parseFloat(grab_param('height',images[setPosition])) ) ? grab_param('height',images[setPosition]) : settings.default_height.toString();						// If the size is % based, calculate according to window dimensions			if(movie_width.indexOf('%') != -1 || movie_height.indexOf('%') != -1){				movie_height = parseFloat(($(window).height() * parseFloat(movie_height) / 100) - 100);				movie_width = parseFloat(($(window).width() * parseFloat(movie_width) / 100) - 100);				percentBased = true;			}						// Fade the holder			$pp_pic_holder.fadeIn(function(){				imgPreloader = "";				// Inject the proper content				switch(_getFileType(images[setPosition])){					case 'image':						// Set the new image						imgPreloader = new Image();						// Preload the neighbour images						nextImage = new Image();						if(image_set && setPosition > $(images).size()) nextImage.src = images[setPosition + 1];						prevImage = new Image();						if(image_set && images[setPosition - 1]) prevImage.src = images[setPosition - 1];						$pp_pic_holder.find('#pp_full_res')[0].innerHTML = settings.image_markup;						$pp_pic_holder.find('#fullResImage').attr('src',images[setPosition]);						imgPreloader.onload = function(){							// Fit item to viewport							correctSizes = _fitToViewport(imgPreloader.width,imgPreloader.height);							_showContent();						};						imgPreloader.onerror = function(){							alert('Image cannot be loaded. Make sure the path is correct and image exist.');							$.prettyPhoto.close();						};											imgPreloader.src = images[setPosition];					break;									case 'youtube':						correctSizes = _fitToViewport(movie_width,movie_height); // Fit item to viewport						movie = 'http://www.youtube.com/v/'+grab_param('v',images[setPosition]);						if(settings.autoplay) movie += "&autoplay=1";											toInject = settings.flash_markup.replace(/{width}/g,correctSizes['width']).replace(/{height}/g,correctSizes['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,movie);					break;									case 'vimeo':						correctSizes = _fitToViewport(movie_width,movie_height); // Fit item to viewport											movie_id = images[setPosition];						movie = 'http://vimeo.com/moogaloop.swf?clip_id='+ movie_id.replace('http://vimeo.com/','');						if(settings.autoplay) movie += "&autoplay=1";										toInject = settings.flash_markup.replace(/{width}/g,correctSizes['width']).replace(/{height}/g,correctSizes['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,movie);					break;									case 'quicktime':						correctSizes = _fitToViewport(movie_width,movie_height); // Fit item to viewport						correctSizes['height']+=15; correctSizes['contentHeight']+=15; correctSizes['containerHeight']+=15; // Add space for the control bar										toInject = settings.quicktime_markup.replace(/{width}/g,correctSizes['width']).replace(/{height}/g,correctSizes['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,images[setPosition]).replace(/{autoplay}/g,settings.autoplay);					break;									case 'flash':						correctSizes = _fitToViewport(movie_width,movie_height); // Fit item to viewport											flash_vars = images[setPosition];						flash_vars = flash_vars.substring(images[setPosition].indexOf('flashvars') + 10,images[setPosition].length);						filename = images[setPosition];						filename = filename.substring(0,filename.indexOf('?'));											toInject =  settings.flash_markup.replace(/{width}/g,correctSizes['width']).replace(/{height}/g,correctSizes['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,filename+'?'+flash_vars);					break;									case 'iframe':						correctSizes = _fitToViewport(movie_width,movie_height); // Fit item to viewport										frame_url = images[setPosition];						frame_url = frame_url.substr(0,frame_url.indexOf('iframe')-1);										toInject = settings.iframe_markup.replace(/{width}/g,correctSizes['width']).replace(/{height}/g,correctSizes['height']).replace(/{path}/g,frame_url);					break;									case 'inline':						// to get the item height clone it, apply default width, wrap it in the prettyPhoto containers , then delete						myClone = $(images[setPosition]).clone().css({'width':settings.default_width}).wrapInner('<div id="pp_full_res"><div class="pp_inline clearfix"></div></div>').appendTo($('body'));						correctSizes = _fitToViewport($(myClone).width(),$(myClone).height());						$(myClone).remove();						toInject = settings.inline_markup.replace(/{content}/g,$(images[setPosition]).html());					break;				};				if(!imgPreloader){					$pp_pic_holder.find('#pp_full_res')[0].innerHTML = toInject;									// Show content					_showContent();				};			});		};				/**		* Change page in the prettyPhoto modal box		* @param direction {String} Direction of the paging, previous or next.		*/		$.prettyPhoto.changePage = function(direction){			if(direction == 'previous') {				setPosition--;				if (setPosition < 0){					setPosition = 0;					return;				};			}else{				if($('.pp_arrow_next').is('.disabled')) return;				setPosition++;			};			// Allow the resizing of the images			if(!doresize) doresize = true;			_hideContent(function(){$.prettyPhoto.open(images,titles,descriptions)});			$('a.pp_expand,a.pp_contract').fadeOut(settings.animationSpeed);		};				/**		* Closes the prettyPhoto modal box.		*/		$.prettyPhoto.close = function(){			$pp_pic_holder.find('object,embed').css('visibility','hidden');						$('div.pp_pic_holder,div.ppt,.pp_fade').fadeOut(settings.animationSpeed);						$pp_overlay.fadeOut(settings.animationSpeed, function(){				$('#pp_full_res').html(''); // Kill the opened content								$pp_pic_holder.attr('style','').find('div:not(.pp_hoverContainer)').attr('style',''); // Reset the width and everything that has been set.				_centerOverlay(); // Center it							// To fix the bug with IE select boxes				if($.browser.msie && $.browser.version == 6){					$('select').css('visibility','visible');				};								// Show the flash				if(settings.hideflash) $('object,embed').css('visibility','visible');								setPosition = 0;				settings.callback();			});			doresize = true;		};			/**		* Set the proper sizes on the containers and animate the content in.		*/		_showContent = function(){			$('.pp_loaderIcon').hide();			// Calculate the opened top position of the pic holder			projectedTop = scrollPos['scrollTop'] + ((windowHeight/2) - (correctSizes['containerHeight']/2));			if(projectedTop < 0) projectedTop = 0 + $ppt.height();			// Resize the content holder			$pp_pic_holder.find('.pp_content').animate({'height':correctSizes['contentHeight']},settings.animationSpeed);						// Resize picture the holder			$pp_pic_holder.animate({				'top': projectedTop,				'left': (windowWidth/2) - (correctSizes['containerWidth']/2),				'width': correctSizes['containerWidth']			},settings.animationSpeed,function(){				$pp_pic_holder.find('.pp_hoverContainer,#fullResImage').height(correctSizes['height']).width(correctSizes['width']);				// Fade the new image				$pp_pic_holder.find('.pp_fade').fadeIn(settings.animationSpeed);				// Show the nav				if(image_set && _getFileType(images[setPosition])=="image") { $pp_pic_holder.find('.pp_hoverContainer').show(); }else{ $pp_pic_holder.find('.pp_hoverContainer').hide(); }				// Show the title				if(settings.showTitle && hasTitle){					$ppt.css({						'top' : $pp_pic_holder.offset().top - 25,						'left' : $pp_pic_holder.offset().left + 20,						'display' : 'none'					});					$ppt.fadeIn(settings.animationSpeed);				};							// Fade the resizing link if the image is resized				if(correctSizes['resized']) $('a.pp_expand,a.pp_contract').fadeIn(settings.animationSpeed);								// Callback!				settings.changepicturecallback();			});		};				/**		* Hide the content...DUH!		*/		function _hideContent(callback){			// Fade out the current picture			$pp_pic_holder.find('#pp_full_res object,#pp_full_res embed').css('visibility','hidden');			$pp_pic_holder.find('.pp_fade').fadeOut(settings.animationSpeed,function(){				$('.pp_loaderIcon').show();								if(callback) callback();			});						// Hide the title			$ppt.fadeOut(settings.animationSpeed);		}			/**		* Check the item position in the gallery array, hide or show the navigation links		* @param setCount {integer} The total number of items in the set		*/		function _checkPosition(setCount){			// If at the end, hide the next link			if(setPosition == setCount-1) {				$pp_pic_holder.find('a.pp_next').css('visibility','hidden');				$pp_pic_holder.find('a.pp_arrow_next').addClass('disabled').unbind('click');			}else{ 				$pp_pic_holder.find('a.pp_next').css('visibility','visible');				$pp_pic_holder.find('a.pp_arrow_next.disabled').removeClass('disabled').bind('click',function(){					$.prettyPhoto.changePage('next');					return false;				});			};					// If at the beginning, hide the previous link			if(setPosition == 0) {				$pp_pic_holder.find('a.pp_previous').css('visibility','hidden');				$pp_pic_holder.find('a.pp_arrow_previous').addClass('disabled').unbind('click');			}else{				$pp_pic_holder.find('a.pp_previous').css('visibility','visible');				$pp_pic_holder.find('a.pp_arrow_previous.disabled').removeClass('disabled').bind('click',function(){					$.prettyPhoto.changePage('previous');					return false;				});			};						// Hide the bottom nav if it's not a set.			if(setCount > 1) {				$('.pp_nav').show();			}else{				$('.pp_nav').hide();			}		};			/**		* Resize the item dimensions if it's bigger than the viewport		* @param width {integer} Width of the item to be opened		* @param height {integer} Height of the item to be opened		* @return An array containin the "fitted" dimensions		*/		function _fitToViewport(width,height){			hasBeenResized = false;			_getDimensions(width,height);						// Define them in case there's no resize needed			imageWidth = width;			imageHeight = height;			if( ((pp_containerWidth > windowWidth) || (pp_containerHeight > windowHeight)) && doresize && settings.allowresize && !percentBased) {				hasBeenResized = true;				notFitting = true;							while (notFitting){					if((pp_containerWidth > windowWidth)){						imageWidth = (windowWidth - 200);						imageHeight = (height/width) * imageWidth;					}else if((pp_containerHeight > windowHeight)){						imageHeight = (windowHeight - 200);						imageWidth = (width/height) * imageHeight;					}else{						notFitting = false;					};					pp_containerHeight = imageHeight;					pp_containerWidth = imageWidth;				};							_getDimensions(imageWidth,imageHeight);			};			return {				width:Math.floor(imageWidth),				height:Math.floor(imageHeight),				containerHeight:Math.floor(pp_containerHeight),				containerWidth:Math.floor(pp_containerWidth) + 40,				contentHeight:Math.floor(pp_contentHeight),				contentWidth:Math.floor(pp_contentWidth),				resized:hasBeenResized			};		};				/**		* Get the containers dimensions according to the item size		* @param width {integer} Width of the item to be opened		* @param height {integer} Height of the item to be opened		*/		function _getDimensions(width,height){			width = parseFloat(width);			height = parseFloat(height);						// Get the details height, to do so, I need to clone it since it's invisible			$pp_details = $pp_pic_holder.find('.pp_details');			$pp_details.width(width);			detailsHeight = parseFloat($pp_details.css('marginTop')) + parseFloat($pp_details.css('marginBottom'));			$pp_details = $pp_details.clone().appendTo($('body')).css({				'position':'absolute',				'top':-10000			});			detailsHeight += $pp_details.height();			detailsHeight = (detailsHeight <= 34) ? 36 : detailsHeight; // Min-height for the details			if($.browser.msie && $.browser.version==7) detailsHeight+=8;			$pp_details.remove();						// Get the container size, to resize the holder to the right dimensions			pp_contentHeight = height + detailsHeight;			pp_contentWidth = width;			pp_containerHeight = pp_contentHeight + $ppt.height() + $pp_pic_holder.find('.pp_top').height() + $pp_pic_holder.find('.pp_bottom').height();			pp_containerWidth = width;		}			function _getFileType(itemSrc){			if (itemSrc.match(/youtube\.com\/watch/i)) {				return 'youtube';			}else if (itemSrc.match(/vimeo\.com/i)) {				return 'vimeo';			}else if(itemSrc.indexOf('.mov') != -1){ 				return 'quicktime';			}else if(itemSrc.indexOf('.swf') != -1){				return 'flash';			}else if(itemSrc.indexOf('iframe') != -1){				return 'iframe'			}else if(itemSrc.substr(0,1) == '#'){				return 'inline';			}else{				return 'image';			};		};			function _centerOverlay(){			if(doresize) {				titleHeight = $ppt.height();				contentHeight = $pp_pic_holder.height();				contentwidth = $pp_pic_holder.width();								projectedTop = (windowHeight/2) + scrollPos['scrollTop'] - ((contentHeight+titleHeight)/2);								$pp_pic_holder.css({					'top': projectedTop,					'left': (windowWidth/2) + scrollPos['scrollLeft'] - (contentwidth/2)				});								$ppt.css({					'top' : projectedTop - titleHeight,					'left': (windowWidth/2) + scrollPos['scrollLeft'] - (contentwidth/2) + 20				});			};		};			function _getScroll(){			if (self.pageYOffset) {				return {scrollTop:self.pageYOffset,scrollLeft:self.pageXOffset};			} else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict				return {scrollTop:document.documentElement.scrollTop,scrollLeft:document.documentElement.scrollLeft};			} else if (document.body) {// all other Explorers				return {scrollTop:document.body.scrollTop,scrollLeft:document.body.scrollLeft};			};		};			function _resizeOverlay() {			windowHeight = $(window).height();			windowWidth = $(window).width();						$pp_overlay.css({				'height':$(document).height()			});		};			function _buildOverlay(){			// Inject the markup			$('body').append(settings.markup);						// Set my global selectors			$pp_pic_holder = $('.pp_pic_holder');			$ppt = $('.ppt');			$pp_overlay = $('div.pp_overlay');						$pp_pic_holder.attr('class','pp_pic_holder ' + settings.theme); // Set the proper theme						$pp_overlay				.css({					'opacity':0,					'height':$(document).height()					})				.bind('click',function(){					if(!settings.modal)					$.prettyPhoto.close();				});			$('a.pp_close').bind('click',function(){ $.prettyPhoto.close(); return false; });			$('a.pp_expand').bind('click',function(){				$this = $(this); // Fix scoping								// Expand the image				if($this.hasClass('pp_expand')){					$this.removeClass('pp_expand').addClass('pp_contract');					doresize = false;				}else{					$this.removeClass('pp_contract').addClass('pp_expand');					doresize = true;				};							_hideContent(function(){ $.prettyPhoto.open(images,titles,descriptions) });								$pp_pic_holder.find('.pp_fade').fadeOut(settings.animationSpeed);						return false;			});					$pp_pic_holder.find('.pp_previous, .pp_arrow_previous').bind('click',function(){				$.prettyPhoto.changePage('previous');				return false;			});					$pp_pic_holder.find('.pp_next, .pp_arrow_next').bind('click',function(){				$.prettyPhoto.changePage('next');				return false;			});		};				_centerOverlay(); // Center it	};		function grab_param(name,url){	  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");	  var regexS = "[\\?&]"+name+"=([^&#]*)";	  var regex = new RegExp( regexS );	  var results = regex.exec( url );	  if( results == null )	    return "";	  else	    return results[1];	}})(jQuery);/*------------------------------------------------------------------------------------------------------------ * Droppy 0.1.2 * (c) 2008 Jason Frame (jason@onehackoranother.com) ------------------------------------------------------------------------------------------------------------*/$.fn.droppy = function(options) {      options = $.extend({speed: 250}, options || {});    this.each(function() {        var root = this, zIndex = 1000;        function getSubnav(ele) {      if (ele.nodeName.toLowerCase() == 'li') {        var subnav = $('> ul', ele);        return subnav.length ? subnav[0] : null;      } else {        return ele;      }    }        function getActuator(ele) {      if (ele.nodeName.toLowerCase() == 'ul') {        return $(ele).parents('li')[0];      } else {        return ele;      }    }        function hide() {      var subnav = getSubnav(this);      if (!subnav) return;      $.data(subnav, 'cancelHide', false);      setTimeout(function() {        if (!$.data(subnav, 'cancelHide')) {          $(subnav).slideUp(options.speed);        }      }, 500);    }      function show() {      var subnav = getSubnav(this);      if (!subnav) return;      $.data(subnav, 'cancelHide', true);      $(subnav).css({zIndex: zIndex++}).slideDown(options.speed);      if (this.nodeName.toLowerCase() == 'ul') {        var li = getActuator(this);        $(li).addClass('hover');        $('> a', li).addClass('hover');      }    }        $('ul, li', this).hover(show, hide);    $('li', this).hover(      function() { $(this).addClass('hover'); $('> a', this).addClass('hover'); },      function() { $(this).removeClass('hover'); $('> a', this).removeClass('hover'); }    );      });  };/*------------------------------------------------------------------------------------------------------------ * jQuery Backstretch * Version 1.2.2 * http://srobbin.com/jquery-plugins/jquery-backstretch/ * * Add a dynamically-resized background image to the page * * Copyright (c) 2011 Scott Robbin (srobbin.com) * Dual licensed under the MIT and GPL licenses.------------------------------------------------------------------------------------------------------------*/(function(a){a.backstretch=function(k,i,l){function m(c){try{g={left:0,top:0},d=e.width(),b=d/j,b>=e.height()?(h=(b-e.height())/2,f.centeredY&&a.extend(g,{top:"-"+h+"px"})):(b=e.height(),d=b*j,h=(d-e.width())/2,f.centeredX&&a.extend(g,{left:"-"+h+"px"})),a("#backstretch, #backstretch img:last").width(d).height(b).filter("img").css(g)}catch(o){}typeof c=="function"&&c()}var n={centeredX:!0,centeredY:!0,speed:0},c=a("#backstretch"),f=c.data("settings")||n;c.data("settings");var e="onorientationchange" in window?a(document):a(window),j,d,b,h,g;i&&typeof i=="object"&&a.extend(f,i);a(document).ready(function(){if(k){var b;c.length==0?c=a("<div />").attr("id","backstretch").css({left:0,top:0,position:"fixed",overflow:"hidden",zIndex:-999999,margin:0,padding:0,height:"100%",width:"100%"}):c.find("img").addClass("deleteable");b=a("<img />").css({position:"absolute",display:"none",margin:0,padding:0,border:"none",zIndex:-999999}).bind("load",function(b){var d=a(this),e;d.css({width:"auto",height:"auto"});e=this.width||a(b.target).width();b=this.height||a(b.target).height();j=e/b;m(function(){d.fadeIn(f.speed,function(){c.find(".deleteable").remove();typeof l=="function"&&l()})})}).appendTo(c);a("body #backstretch").length==0&&a("body").append(c);c.data("settings",f);b.attr("src",k);a(window).resize(m)}});return this}})(jQuery);/*--------------------------------------------------------------------------* *   *  heightLine JavaScript Library beta4 *   *  MIT-style license.  *   *  2007 Kazuma Nishihata  *  http://www.webcreativepark.net *   *--------------------------------------------------------------------------*/new function(){		function heightLine(){			this.className="heightLine";		this.parentClassName="heightLineParent"		reg = new RegExp(this.className+"-([a-zA-Z0-9-_]+)", "i");		objCN =new Array();		var objAll = document.getElementsByTagName ? document.getElementsByTagName("*") : document.all;		for(var i = 0; i < objAll.length; i++) {			var eltClass = objAll[i].className.split(/\s+/);			for(var j = 0; j < eltClass.length; j++) {				if(eltClass[j] == this.className) {					if(!objCN["main CN"]) objCN["main CN"] = new Array();					objCN["main CN"].push(objAll[i]);					break;				}else if(eltClass[j] == this.parentClassName){					if(!objCN["parent CN"]) objCN["parent CN"] = new Array();					objCN["parent CN"].push(objAll[i]);					break;				}else if(eltClass[j].match(reg)){					var OCN = eltClass[j].match(reg)					if(!objCN[OCN]) objCN[OCN]=new Array();					objCN[OCN].push(objAll[i]);					break;				}			}		}				//check font size		var e = document.createElement("div");		var s = document.createTextNode("S");		e.appendChild(s);		e.style.visibility="hidden"		e.style.position="absolute"		e.style.top="0"		document.body.appendChild(e);		var defHeight = e.offsetHeight;				changeBoxSize = function(){			for(var key in objCN){				if (objCN.hasOwnProperty(key)) {					//parent type					if(key == "parent CN"){						for(var i=0 ; i<objCN[key].length ; i++){							var max_height=0;							var CCN = objCN[key][i].childNodes;							for(var j=0 ; j<CCN.length ; j++){								if(CCN[j] && CCN[j].nodeType == 1){									CCN[j].style.height="auto";									max_height = max_height>CCN[j].offsetHeight?max_height:CCN[j].offsetHeight;								}							}							for(var j=0 ; j<CCN.length ; j++){								if(CCN[j].style){									var stylea = CCN[j].currentStyle || document.defaultView.getComputedStyle(CCN[j], '');									var newheight = max_height;									if(stylea.paddingTop)newheight -= stylea.paddingTop.replace("px","");									if(stylea.paddingBottom)newheight -= stylea.paddingBottom.replace("px","");									if(stylea.borderTopWidth && stylea.borderTopWidth != "medium")newheight-= stylea.borderTopWidth.replace("px","");									if(stylea.borderBottomWidth && stylea.borderBottomWidth != "medium")newheight-= stylea.borderBottomWidth.replace("px","");									CCN[j].style.height =newheight+"px";								}							}						}					}else{						var max_height=0;						for(var i=0 ; i<objCN[key].length ; i++){							objCN[key][i].style.height="auto";							max_height = max_height>objCN[key][i].offsetHeight?max_height:objCN[key][i].offsetHeight;						}						for(var i=0 ; i<objCN[key].length ; i++){							if(objCN[key][i].style){								var stylea = objCN[key][i].currentStyle || document.defaultView.getComputedStyle(objCN[key][i], '');									var newheight = max_height;									if(stylea.paddingTop)newheight-= stylea.paddingTop.replace("px","");									if(stylea.paddingBottom)newheight-= stylea.paddingBottom.replace("px","");									if(stylea.borderTopWidth && stylea.borderTopWidth != "medium")newheight-= stylea.borderTopWidth.replace("px","")									if(stylea.borderBottomWidth && stylea.borderBottomWidth != "medium")newheight-= stylea.borderBottomWidth.replace("px","");									objCN[key][i].style.height =newheight+"px";							}						}					}				}			}		}				checkBoxSize = function(){			if(defHeight != e.offsetHeight){				changeBoxSize();				defHeight= e.offsetHeight;			}		}		changeBoxSize();		setInterval(checkBoxSize,1000)		window.onresize=changeBoxSize;	}		function addEvent(elm,listener,fn){		try{			elm.addEventListener(listener,fn,false);		}catch(e){			elm.attachEvent("on"+listener,fn);		}	}	addEvent(window,"load",heightLine);}/* * jQuery Cycle Lite Plugin * http://malsup.com/jquery/cycle/lite/ * Copyright (c) 2008-2011 M. Alsup * Version: 1.3 (01-JUN-2011) * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html * Requires: jQuery v1.3.2 or later */;(function($) {var ver = 'Lite-1.3';$.fn.cycle = function(options) {    return this.each(function() {        options = options || {};                if (this.cycleTimeout) clearTimeout(this.cycleTimeout);        this.cycleTimeout = 0;        this.cyclePause = 0;                var $cont = $(this);        var $slides = options.slideExpr ? $(options.slideExpr, this) : $cont.children();        var els = $slides.get();        if (els.length < 2) {            window.console && console.log('terminating; too few slides: ' + els.length);            return; // don't bother        }        // support metadata plugin (v1.0 and v2.0)        var opts = $.extend({}, $.fn.cycle.defaults, options || {}, $.metadata ? $cont.metadata() : $.meta ? $cont.data() : {});		var meta = $.isFunction($cont.data) ? $cont.data(opts.metaAttr) : null;		if (meta)			opts = $.extend(opts, meta);                    opts.before = opts.before ? [opts.before] : [];        opts.after = opts.after ? [opts.after] : [];        opts.after.unshift(function(){ opts.busy=0; });                    // allow shorthand overrides of width, height and timeout        var cls = this.className;        opts.width = parseInt((cls.match(/w:(\d+)/)||[])[1]) || opts.width;        opts.height = parseInt((cls.match(/h:(\d+)/)||[])[1]) || opts.height;        opts.timeout = parseInt((cls.match(/t:(\d+)/)||[])[1]) || opts.timeout;        if ($cont.css('position') == 'static')             $cont.css('position', 'relative');        if (opts.width)             $cont.width(opts.width);        if (opts.height && opts.height != 'auto')             $cont.height(opts.height);        var first = 0;        $slides.css({position: 'absolute', top:0, left:0}).each(function(i) {             $(this).css('z-index', els.length-i)         });                $(els[first]).css('opacity',1).show(); // opacity bit needed to handle reinit case        if ($.browser.msie) els[first].style.removeAttribute('filter');        if (opts.fit && opts.width)             $slides.width(opts.width);        if (opts.fit && opts.height && opts.height != 'auto')             $slides.height(opts.height);        if (opts.pause)             $cont.hover(function(){this.cyclePause=1;}, function(){this.cyclePause=0;});        var txFn = $.fn.cycle.transitions[opts.fx];		txFn && txFn($cont, $slides, opts);                $slides.each(function() {            var $el = $(this);            this.cycleH = (opts.fit && opts.height) ? opts.height : $el.height();            this.cycleW = (opts.fit && opts.width) ? opts.width : $el.width();        });        if (opts.cssFirst)            $($slides[first]).css(opts.cssFirst);        if (opts.timeout) {            // ensure that timeout and speed settings are sane            if (opts.speed.constructor == String)                opts.speed = {slow: 600, fast: 200}[opts.speed] || 400;            if (!opts.sync)                opts.speed = opts.speed / 2;            while((opts.timeout - opts.speed) < 250)                opts.timeout += opts.speed;        }        opts.speedIn = opts.speed;        opts.speedOut = opts.speed; 		opts.slideCount = els.length;        opts.currSlide = first;        opts.nextSlide = 1;        // fire artificial events        var e0 = $slides[first];        if (opts.before.length)            opts.before[0].apply(e0, [e0, e0, opts, true]);        if (opts.after.length > 1)            opts.after[1].apply(e0, [e0, e0, opts, true]);                if (opts.click && !opts.next)            opts.next = opts.click;        if (opts.next)            $(opts.next).bind('click', function(){return advance(els,opts,opts.rev?-1:1)});        if (opts.prev)            $(opts.prev).bind('click', function(){return advance(els,opts,opts.rev?1:-1)});        if (opts.timeout)            this.cycleTimeout = setTimeout(function() {                go(els,opts,0,!opts.rev)            }, opts.timeout + (opts.delay||0));    });};function go(els, opts, manual, fwd) {    if (opts.busy) return;    var p = els[0].parentNode, curr = els[opts.currSlide], next = els[opts.nextSlide];    if (p.cycleTimeout === 0 && !manual)         return;    if (manual || !p.cyclePause) {        if (opts.before.length)            $.each(opts.before, function(i,o) { o.apply(next, [curr, next, opts, fwd]); });        var after = function() {            if ($.browser.msie)                this.style.removeAttribute('filter');            $.each(opts.after, function(i,o) { o.apply(next, [curr, next, opts, fwd]); });        };        if (opts.nextSlide != opts.currSlide) {            opts.busy = 1;            $.fn.cycle.custom(curr, next, opts, after);        }        var roll = (opts.nextSlide + 1) == els.length;        opts.nextSlide = roll ? 0 : opts.nextSlide+1;        opts.currSlide = roll ? els.length-1 : opts.nextSlide-1;    }    if (opts.timeout)        p.cycleTimeout = setTimeout(function() { go(els,opts,0,!opts.rev) }, opts.timeout);};// advance slide forward or backfunction advance(els, opts, val) {    var p = els[0].parentNode, timeout = p.cycleTimeout;    if (timeout) {        clearTimeout(timeout);        p.cycleTimeout = 0;    }    opts.nextSlide = opts.currSlide + val;    if (opts.nextSlide < 0) {        opts.nextSlide = els.length - 1;    }    else if (opts.nextSlide >= els.length) {        opts.nextSlide = 0;    }    go(els, opts, 1, val>=0);    return false;};$.fn.cycle.custom = function(curr, next, opts, cb) {    var $l = $(curr), $n = $(next);    $n.css(opts.cssBefore);    var fn = function() {$n.animate(opts.animIn, opts.speedIn, opts.easeIn, cb)};    $l.animate(opts.animOut, opts.speedOut, opts.easeOut, function() {        $l.css(opts.cssAfter);        if (!opts.sync) fn();    });    if (opts.sync) fn();};$.fn.cycle.transitions = {    fade: function($cont, $slides, opts) {		$slides.not(':eq(0)').hide();		opts.cssBefore = { opacity: 0, display: 'block' };		opts.cssAfter  = { display: 'none' };		opts.animOut = { opacity: 0 };		opts.animIn = { opacity: 1 };    },    fadeout: function($cont, $slides, opts) {		opts.before.push(function(curr,next,opts,fwd) {			$(curr).css('zIndex',opts.slideCount + (fwd === true ? 1 : 0));			$(next).css('zIndex',opts.slideCount + (fwd === true ? 0 : 1));		});		$slides.not(':eq(0)').hide();		opts.cssBefore = { opacity: 1, display: 'block', zIndex: 1 };		opts.cssAfter  = { display: 'none', zIndex: 0 };		opts.animOut = { opacity: 0 };    }};$.fn.cycle.ver = function() { return ver; };// @see: http://malsup.com/jquery/cycle/lite/$.fn.cycle.defaults = {	animIn:        {},	animOut:       {},	fx:           'fade',    after:         null,     before:        null, 	cssBefore:     {},	cssAfter:      {},    delay:         0,        fit:           0,        height:       'auto',	metaAttr:     'cycle',    next:          null,     pause:         0,        prev:          null,     speed:         1000,     slideExpr:     null,    sync:          1,        timeout:       4000 };})(jQuery);
