var currImg 	= {};
var images 		= {};
var play		= true;
var crossfade	= false;
var autoShow	= false;
var delayTime	= 5000;
var performed	= true;

var reloadThumbs;
var direction	= 'next';
var tT			= false;

var EvaZocher = {
	init: function(){
		if ($('crossfade'))	{
			EvaZocher.hide();
			EvaZocher.getImages();

			if ($('thumbnails')) {
				EvaZocher.imgOverview();
				EvaZocher.thumbsAppearance();
			}
		}
		
		if ($('contact'))		EvaZocher.showContact();
	},
	
	ready: function(){
		if ($('crossfade')) 	EvaZocher.preparePage();
		if ($('thumbnails')) 	EvaZocher.swapImage();
	},
	
	hide: function(){
		var elements = [$('btns'), $('overlay'), $('underlay'), $$('#crossfade .imageContent'), $('page')];
		elements.each(function(el){ if (el) el.setStyle('visibility', 'hidden'); });			
	},

	fancyLogoAnimation: function(){
		var logo = $('image');
		
		var logoFx = new Fx.Tween('image', {
			duration: 500,
			link: 'cancel'
		});
		
		logo.setStyle('background-position', '0 0').addEvents({
			'mouseover': function(e){
				e.stop();
				logoFx.start({
					'background-position': '0 50px'
				});
			}
		});
		
	},

	preparePage: function(){
		var initLoader 		= new Fx.Morph('init');
		var overlay 		= new Fx.Morph('overlay');
		var underlay 		= new Fx.Morph('underlay');
		var btnRight 		= new Fx.Morph('btnRight');
		var btnLeft 		= new Fx.Morph('btnLeft');
		var imageContent	= new Fx.Morph('imageContent');
		var page			= new Fx.Morph('page', { link: 'cancel' });
		var thumbnails 		= new Fx.Morph('thumbnails', { duration: 300, link: 'cancel' });
		var tT				= true;
				
		initLoader.start({ opacity: [1,0] })
		.chain( function(){ 
				overlay.start({ opacity: [0,1] })
				.chain ( function(){
						page.start({ opacity: [0,.2] })
						underlay.start({ opacity: [0,1] })
						.chain(
							function(){
								$('thumbnails').style.bottom = '-129px';
								imageContent.start({ opacity: [0,1] })
								thumbnails.start({
									opacity: [0,1],
									bottom: '0'
								})
							}
						)
					}
				)
			} 
		);
		
		$('page').addEvents({
			'mouseover': function(){ page.start({ opacity: .9 }) },
			'mouseout': function(){ page.start({ opacity: .2 }) }
		});
		
		$('toggleThumbnails').addEvent('click', function(){
			if (tT) {
				thumbnails.start({
					opacity: [1,0],
					bottom: '-129px'
				})
				
				$('btns').setStyles({
					display: 'block',
					visibility: 'visible'
				});
				
				$('toggleThumbnails').setStyle('text-decoration', 'line-through');
				
				tT = false;
			} else {
				thumbnails.start({
					opacity: [0,1],
					bottom: '0'
				})
				
				$('btns').setStyles({
					display: 'none',
					visibility: 'hidden'
				});
				
				$('toggleThumbnails').setStyle('text-decoration', 'none');
				
				tT = true;
			}
		});
	},
	
	getImage: function(id){
		var i 	= 0;
		var img	= false;
		
		$each(images, function(image){
			if (image.id == id) img = image;
		});
		
		return img;
	},
	
	getImages: function(){
		var request = new Request.JSON({
			url: site_url + 'photo/get_images/'+$$('nav a.active').get('rel'),
			onSuccess: function(obj){
				if (obj) {
					images 	= obj.images;
					
					var i 		= 0;
					var active	= 0;
					images.each(function(img){
						if (img.active == "1") active = i;
						i++;
					});
					
					currImg = obj.images[active];
				}
			}
		}).send();
	},
	
	imgLoader: function(delay){
		var thumbs		= $$('#thumbnails .thumbs .thumbItem');
		var loaded		= 0;
		var loader		= $$('#thumbnails .thumbs span.loader');
		
		thumbs.each(function(el){
			image = EvaZocher.getImage(el.get('id').replace('thumb-id', ''));
			if (image.isLoaded !== undefined) loaded++;
		});
		
		if (delay && loaded < thumbs.length)  {
			var loadTime = 150;
			
			m = new Fx.Morph(loader[0], { duration: loadTime });
			m.start({ 'opacity': 0 })
			.chain(
				function(){
					if (loader[1]) {
						m = new Fx.Morph(loader[1], { duration: loadTime })
						m.start({ 'opacity': 0 })
						.chain(
							function(){
								if (loader[2]) {
									m = new Fx.Morph(loader[2], { duration: loadTime })
									m.start({ 'opacity': 0 })
									.chain(
										function(){
											if (loader[3]) {
												m = new Fx.Morph(loader[3], { duration: loadTime })
												m.start({ 'opacity': 0 })
												.chain(
													function(){
														if (loader[4]) {
															m = new Fx.Morph(loader[4], { duration: loadTime })
															m.start({ 'opacity': 0 })
														}
													}
												)
											}
										}
									)
								}
							}
						)
					}
				}
			)
		} else {
			thumbs.each(function(el){
				el.getChildren('span.loader').dispose();
			});
		}
	},
	
	thumbsAppearance: function(){
		$$('#thumbs a').each(function(el){
			if (!el.get('class').match(/current/)) {
				el.getChildren('img').setOpacity(.4);
			} else {
				el.getChildren('img').setOpacity(1);
			}
		});
	},
	
	initThumbItems: function(){
		var thumbItems 	= $$('#thumbs a.thumbItem');
		var active  	= false;
		
		thumbItems.each(function(el){
			var id		= el.get('id').replace('thumb-', '').toInt();
			var classes = el.get('class').split(' ');
			
		  	if (classes.contains('current')) {
				active = id; 
			}
		});
		
		$$('#thumbs a.thumbItem').addEvents({
			'click': function(){
				var id		= this.get('id').replace('thumb-', '').toInt();
				var classes = this.get('class').split(' ');
	
				if (!classes.contains('current')) {
					if (EvaZocher.getImage(id)) {
						var image = EvaZocher.getImage(id);
						EvaZocher.swapImage(image);
					}
				}
			},
			'mouseover': function(){
				var id		= this.get('id').replace('thumb-', '').toInt();
				var classes = this.get('class').split(' ');
	
				if (!classes.contains('current')) {
					if (EvaZocher.getImage(id)) {
						this.setOpacity(1);
					}
				}
			},
			'mouseout': function(){
				var id		= this.get('id').replace('thumb-', '').toInt();
				var classes = this.get('class').split(' ');
	
				if (!classes.contains('current')) {
					if (EvaZocher.getImage(id)) {
						this.setOpacity(1);
					}
				}
			}
		});	
	},
	
	imgOverview: function(){
		var thumbnails 	= $('thumbnails');
		EvaZocher.imgLoader();
			
		var switchPage = function(){
			node 	= $$('nav#sub li a.active');

			new Request.HTML({
				url: site_url + 'photo/get_thumbnails?node='+node.get('rel')+'&offset='+$('currOffset').get('value')+'&direction='+this.get('rel'),
				update: $('thumbs'),
				evalScripts: true,
				method: 'get'
			}).get();
		}
		
		$$('#thumbnails .btn a').addEvent('click', switchPage);
		
		EvaZocher.initThumbItems();		
	},
	
	swapImage: function(obj){
		function swap(obj, pos){
			function perform(obj) {
				$clear(autoShow);
				$('underlay').set('src', obj.src);
				
				var crossfade = new Fx.Tween('overlay', { duration: 500, transition: Fx.Transitions.Linear});
				crossfade.start('opacity', 1, 0).chain(
					function(){
						currImg = obj;
						$('overlay').set('src', $('underlay').get('src'));
						$('overlay').set('styles', {opacity: 1});
						
						if ($('currentPage')) 	$('currentPage').set('text', ((num = images.indexOf(obj)+1) < 10) ? '0'+ num : num);
						if ($('imageInfo'))		$('imageInfo').set('html', decodeURIComponent(obj.description));
						
						performed = true;
						
						$$('#thumbs a.current').removeClass('current');
						
						$$('#thumbs a[id=thumb-'+currImg.id+']').addClass('current');
						
						var setActive = new Request({
							url: site_url + 'photo/set_active/' + currImg.node + '/' + currImg.id,
							method: 'get',
							evalScripts: true,
							onSuccess: function(responseText, responseXML){
								if (reloadThumbs) {
									oldIndex = images.indexOf(currImg);
									
									if (direction == 'next') {
										index 	= images.indexOf(currImg) + 1;
									} else if (direction == 'prev') {
										index 	= images.indexOf(currImg) - 1;
									}
									
									//oldPage	 = Math.ceil((oldIndex+1)/5);
									//newPage	 = Math.ceil((index+1)/5) - 1;
									
									/*if (newPage != oldPage) {	
										alert('alt: ' + oldPage + ' - new:' + newPage);
										node 	= $$('nav#sub li a.active');
							
										new Request.HTML({
											url: site_url + 'photo/get_thumbnails?node='+node.get('rel')+'&offset='+$('currOffset').get('value')+'&direction='+direction,
											update: $('thumbs'),
											evalScripts: true,
											method: 'get'
										}).get();
										
										reloadThumbs = false;
										direction	 = false;
									}*/
								}
							}
						}).get();
								
						EvaZocher.thumbsAppearance();
					}
				);
			}
		
			if (obj.isLoaded == true) {
				perform(obj);
			} else {
				preload = new Asset.images([obj.src], {
					onComplete: function(){
						obj.isLoaded = true;
						perform(obj);
					}
				});
			}
		}
		
		function perform(obj) {
			$clear(autoShow);
			$('underlay').set('src', obj.src);

			var crossfade = new Fx.Tween('overlay', { duration: 500, transition: Fx.Transitions.Linear});
			crossfade.start('opacity', 1, 0).chain(
				function(){
					(function(){
					currImg = obj;
					
						$('overlay').set('src', $('underlay').get('src'));
						$('overlay').set('styles', {opacity: 1});
						
					if ($('currentPage')) 	$('currentPage').set('text', ((num = images.indexOf(obj)+1) < 10) ? '0'+ num : num);
					if ($('imageInfo'))		$('imageInfo').set('html', decodeURIComponent(obj.description));
					
					performed = true;
					
					$$('#thumbs a.current').removeClass('current');
					
					$$('#thumbs a[id=thumb-'+currImg.id+']').addClass('current');
					
					var setActive = new Request({
						url: site_url + 'photo/set_active/' + currImg.node + '/' + currImg.id,
						method: 'get',
						evalScripts: true
					}).get();
				
					EvaZocher.thumbsAppearance();
					}).delay(0)
				}
			);
			
			return true;
		}

		function next(){
			var pos = images.indexOf(currImg);
			if ((obj = images[pos+1]) !== undefined) {
				if (swap(obj, pos)) return true;
			} else {
				if (swap(images[0], pos)) return true;
			}
		}
		
		function prev(){
			var pos = images.indexOf(currImg);
			
			if ((obj = images[pos-1]) !== undefined) {
				if (swap(obj, pos)) return true;
			} else {
				if (swap(images[images.length-1], pos)) return true;
			}
		}

		$$('#btns a').addEvents({
			'click': function(){
				if (performed) {
					performed = false;
					$clear(autoShow);
					
					eval(this.get('rel')+'();');
					
					reloadThumbs = true;
					direction	 = this.get('rel');
				}
			}
		});
		
		if (obj) {
			if (obj.isLoaded == true) {
				perform(obj);
			} else {
				preload = new Asset.images([obj.src], {
					onComplete: function(){	
						obj.isLoaded = true;
						perform(obj);
					}
				});
			}
		}
	},
	
	showContact: function(){
		var slideContact = new Fx.Morph('contactInfo', {
						 	duration: 500,
						 	transition: Fx.Transitions.Back.easeIn,
						 	link: 'wait'
						 }).set('opacity', 0);
						 
		var isOpen		 = false;
		
		$$('#contact, #closeContact').addEvent('click', function(e){
			e.stopPropagation();
			
			if (isOpen) {
				slideContact.set('duration', 3000).start({
					right: -532,
					top: 200,
					opacity: [1,0]
				});
				
				isOpen = false;
			} else {
				slideContact.start({
					right: 0,
					top: 0,
					opacity: [0,1]
				});
				
				isOpen = true;
			}
			
			return false;
		});
	}
};

window.addEvent('domready', EvaZocher.init);
window.addEvent('load', EvaZocher.ready);