var engine = {};

var fx;
var loading;
var overlays;
var video;
var scrollbar;
var overview;
var lines;

var sb_options;

var normal_mode = true;
var overview_mode = false;

var scroll_busy = false;

/*** FX CLASS ***/

engine.fx = new Class({
	showLogo: function() {
		$$('h1')[0].setStyle('display','block');
		var fx = new Fx.Morph($$('h1')[0], {duration:1000, transition:Fx.Transitions.Expo.easeOut});
		fx.start({
			'left': [-355, 15],
			'opacity': [0, 1]
		});
	},
	hideLogo: function() {
		var fx = new Fx.Morph($$('h1')[0], {duration:250, transition:Fx.Transitions.Expo.easeIn});
		fx.start({
			'left': [15, -355],
			'opacity': [1, 0]
		});
		setTimeout('fx.completelyHideLogo()',250);
	},
	completelyHideLogo: function() {
		$$('h1')[0].setStyle('display','none');
	},
	showMenuItem: function(param) {
		$('menu').setStyle('display','block');
		var fx = new Fx.Tween($('menu_'+param), {'property': 'opacity', 'duration': 500});
		fx.start(0, 1);
	},
	hideMenu: function() {
		var fx1 = new Fx.Tween($('menu_pics'), {'property': 'opacity', duration: 500});
		var fx2 = new Fx.Tween($('menu_works'), {'property': 'opacity', duration: 500});
		var fx3 = new Fx.Tween($('menu_news'), {'property': 'opacity', duration: 500});
		var fx4 = new Fx.Tween($('menu_contact'), {'property': 'opacity', duration: 500});
		fx1.start(1, 0);
		fx2.start(1, 0);
		fx3.start(1, 0);
		fx4.start(1, 0);
		setTimeout('fx.completelyHideMenu()',500);
	},
	completelyHideMenu: function() {
		$('menu').setStyle('display','none');
	},
	showCategories: function() {
		$('categories').setStyle('display','block');
		var height = $$('#categories div')[0].getSize().y;
		var fx = new Fx.Morph($('categories'), {duration:500, transition:Fx.Transitions.Expo.easeOut});
		fx.start({
			'bottom': [-height, 12],
			'opacity': [0, 1]
		});
	},
	hideCategories: function() {
		var height = $$('#categories div')[0].getSize().y;
		var fx = new Fx.Morph($('categories'), {duration:500, transition:Fx.Transitions.Expo.easeIn});
		fx.start({
			'bottom': [22, -height],
			'opacity': [1, 0]
		});
		setTimeout('fx.completelyHideCategories()',500);
	},
	completelyHideCategories: function() {
		$('categories').setStyle('display','none');
	},
	showScrollbar: function() {
		$('scroll_top').setStyle('display','block');
		$('scroll_bottom').setStyle('display','block');
		var fx1 = new Fx.Tween($('scroll_top'), {'property': 'opacity', duration: 500});
		var fx2 = new Fx.Tween($('scroll_bottom'), {'property': 'opacity', duration: 500});
		fx1.start(0, 1);
		fx2.start(0, 1);
	},
	hideScrollbar: function() {
		var fx1 = new Fx.Tween($('scroll_top'), {'property': 'opacity', duration: 500});
		var fx2 = new Fx.Tween($('scroll_bottom'), {'property': 'opacity', duration: 500});
		fx1.start(1, 0);
		fx2.start(1, 0);
		setTimeout('fx.completelyHideScrollbar()',500);
	},
	completelyHideScrollbar: function() {
		$('scroll_top').setStyle('display','none');
		$('scroll_bottom').setStyle('display','none');
	},
	showGallery: function(id) {
		var item = $(id);
		var fx = new Fx.Tween(item, {'property': 'opacity', duration: 500});
		fx.start(0, 1);
		var next = item.getNext();
		while (next && next.getStyle('display')==='none') {
			next = next.getNext();
		}
		if (next) {
			var id_next = next.getProperty('id');
			setTimeout('fx.showGallery("'+id_next+'")',250);
		}
	},
	showGalleryBlock: function(id) {
		var item = $(id);
		item.setStyle('display','block');
		var thumb = item.getElements('.thumbnail')[0].getFirst();
		thumb.setProperty('rel',thumb.getProperty('rel').replace(/Hidden/,'Galleries'));
	},
	hideGalleryBlock: function(id) {
		var item = $(id);
		item.setStyles({display: 'none', opacity: '0'});
		var thumb = item.getElements('.thumbnail')[0].getFirst();
		thumb.setProperty('rel',thumb.getProperty('rel').replace(/Galleries/,'Hidden'));
	},
	hideGalleries: function() {
		var item = $('galleries');
		var fx = new Fx.Tween(item, {'property': 'opacity', duration: 500});
		fx.start(1, 0);
	},
	hideAllGalleries: function() {
		var videos = $$('#galleries li');
		videos.each(function(item) {
			var fx = new Fx.Tween(item, {'property': 'opacity', duration: 500});
			fx.start(1, 0);
		});
	},
	showGalleries: function() {
		var item = $('galleries');
		var fx = new Fx.Tween(item, {'property': 'opacity', duration: 500});
		fx.start(0, 1);
		Shadowbox.reset(sb_options);
	},
	showGalleryDescription: function(id) {
		var description = $(id).getElements('.description')[0];
		description.setStyle('display','block');
		var fx = new Fx.Morph(description, {duration:500, transition:Fx.Transitions.Expo.easeOut});
		fx.start({
			'right': [0, -200],
			'opacity': [0, 1]
		});
	},
	showGalleryTitle: function(id) {
		var title = $(id).getElements('.title')[0];
		title.setStyle('display','block');
		var title_width = title.getSize().x;
		var fx = new Fx.Morph(title, {duration:500, transition:Fx.Transitions.Expo.easeOut});
		fx.start({
			'right': [0, -title_width],
			'opacity': [0, 1]
		});
	},
	hideGalleryDetails: function(id) {
		$$('#'+id+' .description').setStyles({right: '0', opacity: '0'});
		$$('#'+id+' .title').setStyles({right: '0', opacity: '0'});
	},
	reduceMenuItem: function(id) {
		var fx = new Fx.Tween($(id), {'property': 'height', duration: 100});
		fx.start(25, 20);
	},
	increaseMenuItem: function(id) {
		var fx = new Fx.Tween($(id), {'property': 'height', duration: 150});
		fx.start(20, 25);
	},
	categoryHighlight: function(id) {
		var fx = new Fx.Tween($(id), {'property': 'opacity', duration: 250});
		fx.start(0.65, 1);
	},
	categoryDefault: function(id) {
		var fx = new Fx.Tween($(id), {'property': 'opacity', duration: 250});
		fx.start(1, 0.65);
	},
	moveGalleries: function() {
		var ctop = parseInt($('galleries').getStyle('top'));
		var fx1 = new Fx.Tween($('galleries'), {'property': 'top', duration: 500, transition:Fx.Transitions.Expo.easeOut});
		fx1.start(ctop, -12);
		var fx2 = new Fx.Morph($('galleries_container'), {duration:500, transition:Fx.Transitions.Expo.easeOut});
		fx2.start({
			'left': [390, 8],
			'width': [296, 896]
		});
	},
	reposGalleries: function() {
		var videos = $$('#galleries li');
		var top = 0;
		var left = 0;
		var ctop;
		var compteur = 0;
		for (var i=0; i<videos.length; i++) {
			if (videos[i].getStyle('display') === 'block') {
				videos[i].setStyle('position','absolute');
				videos[i].setStyle('z-index',500-compteur);
				ctop = compteur*190;
				if (compteur !== 0 && compteur%3 === 0) {
					top += 190;
					left = 0;
				}
				var fx = new Fx.Morph(videos[i], {duration:750, transition:Fx.Transitions.Expo.easeOut});
				fx.start({
					'top': [ctop, top],
					'left': [0, left]
				});
				left += 270;
				compteur++;
			}
		}
		setTimeout('fx.showBrowserScrollbar()',750);
	},
	resetGalleries: function() {
		$('galleries_container').setStyles({
			left: '390px',
			width: '496px'
		});
		$$('#galleries li').each(function(item) {
			item.setStyles({
				position: 'relative',
				top: 'auto',
				left: 'auto',
				zIndex: 'auto'
			});
		});
		fx.hideBrowserScrollbar();

	},
	showBrowserScrollbar: function() {
		$('galleries_container').setStyles({overflow:'visible', height:'auto'});
		$$('html')[0].setStyle('overflow-y','visible');
		$$('body')[0].setStyle('overflow-y','visible');
	},
	hideBrowserScrollbar: function() {
		$('galleries_container').setStyle('overflow','hidden');
		$$('html')[0].setStyle('overflow','hidden');
		$$('body')[0].setStyle('overflow','hidden');
	},
	showCloseOverview: function() {
		var nb = video.nbGalleries();
		var left;
		switch (nb) {
			case 1 : left = 270 + 4; break;
			case 2 : left = 270*2 + 4; break;
			default : left = 270*3 + 4; break;
		}
		$('close_overview').setStyle('left', left+'px');
		var fx = new Fx.Tween($('close_overview'), {'property': 'opacity', duration: 500});
		fx.start(0, 1);
	},
	hideCloseOverview: function() {
		var fx = new Fx.Tween($('close_overview'), {'property': 'opacity', duration: 500});
		fx.start(1, 0);
	},
	upGalleries: function() {
		var fx = new Fx.Tween($('galleries'), {'property': 'top', duration: 500});
		fx.start(0, -12);
	},
	downGalleries: function() {
		var fx = new Fx.Tween($('galleries'), {'property': 'top', duration: 500});
		fx.start(-12, 0);
	}
});

/*** LOADING CLASS ***/

engine.loading = new Class({
	showBlocks: function() {
		$('opaque').setStyle('display','block');
		$('loading').setStyle('display','block');
	},
	hideBlocks: function() {
		$('opaque').setStyle('display','none');
		$('loading').setStyle('display','none');
	},
	show: function() {
		loading.showBlocks();
		var fx1 = new Fx.Tween($('opaque'), {'property': 'opacity', duration: 500});
		var fx2 = new Fx.Tween($('loading'), {'property': 'opacity', duration: 500});
		fx1.start(0, 0.65);
		fx2.start(0, 1);
	},
	hide: function() {
		var fx1 = new Fx.Tween($('opaque'), {'property': 'opacity', duration: 500});
		var fx2 = new Fx.Tween($('loading'), {'property': 'opacity', duration: 500});
		fx1.start(0.65, 0);
		fx2.start(1, 0);
		setTimeout('loading.hideBlocks()',500);
	}
});

/*** OVERLAYS CLASS ***/

engine.overlays = new Class({
	showBlocks: function(param) {
		$('opaque').setStyle('display','block');
		$('overlay_'+param).setStyle('display','block');
	},
	hideBlocks: function(param) {
		$('opaque').setStyle('display','none');
		$('overlay_'+param).setStyle('display','none');
		switch (param) {
			case 'news' : 	$$('.new').each(function(item) { item.setStyle('opacity','0'); });
							break;
			case 'pics' : 	$$('.pic').each(function(item) { item.setStyle('opacity','0'); });
							break;
		}
	},
	show: function(param) {
		//lines.hide();
		overlays.showBlocks(param);
		var fx1 = new Fx.Tween($('opaque'), {'property': 'opacity', duration: 500});
		var fx2 = new Fx.Tween($('overlay_'+param), {'property': 'opacity', duration: 500});
		fx1.start(0, 0.65);
		fx2.start(0, 1);
		switch (param) {
			case 'news' :	overlays.parseGallery(300, 500);
							break;
			case 'galleries':overlays.parseGallery(130, 2000);
							break;
			case 'works':
							overlays.parseWork();
			break;
			case 'pics' : 	overlays.showPic($('pics').getFirst().getProperty('id'));
							break;
		}
	},
	hide: function(param) {	
		setTimeout('lines.show()',500);	
		var fx1 = new Fx.Tween($('opaque'), {'property': 'opacity', duration: 500});
		var fx2 = new Fx.Tween($('overlay_'+param), {'property': 'opacity', duration: 500});
		fx1.start(0.65, 0);
		fx2.start(1, 0);
		setTimeout('overlays.hideBlocks("'+param+'")',500);
	},
	getCurrent: function() {
		var current;
		$$('.overlay').each(function(overlay) {
			if (overlay.getStyle('display') === 'block') {
				current = overlay.getProperty('id').substr(8, overlay.getProperty('id').length);
			}
		});
		return current;
	},
	showNew: function(id) {
		var item = $(id);
		var fx = new Fx.Tween(item, {'property': 'opacity', duration: 250});
		fx.start(0, 1);
		var next = item.getNext();
		if (next && next.hasClass('new')) {
			var id_next = next.getProperty('id');
			setTimeout('overlays.showNew("'+id_next+'")',125);
		}
	},
	showPic: function(id) {
		var item = $(id);
		var fx = new Fx.Tween(item, {'property': 'opacity', duration: 250});
		fx.start(0, 1);
		var next = item.getNext();
		if (next && next.hasClass('pic')) {
			var id_next = next.getProperty('id');
			setTimeout('overlays.showPic("'+id_next+'")',125);
		}
	},
	
	parseGallery: function(w, duration) {
		var slideIndex = 0;
		var sliders = document.getElements('.pics-galleries');
		for (var i=0; i<sliders.length; i++)
		{
			sliders[i].slide = sliders[i].getElement('.slide');
			sliders[i].box = sliders[i].getElement('.box');
			sliders[i].width = sliders[i].getSize().x;
			sliders[i].slidewidth = sliders[i].slide.getElements('.gallery').length * w;
			sliders[i].slide.setStyle('width', sliders[i].slidewidth);
			if (sliders[i].slidewidth > sliders[i].width)
			{
				sliders[i].func = function(sign) {
					var position = parseInt( this.slide.getStyle('margin-left') );
					if (sign == '-') position -= this.width; else position += this.width;
					position = position.limit(- (this.slidewidth - this.width), 0);
					this.fxGall.start( position );
				}.bind(sliders[i]);
				sliders[i].fxGall = new Fx.Tween(sliders[i].slide, {'property': 'margin-left', 'duration': duration, 'fps': 50, transition:Fx.Transitions.Expo.easeOut, 'link': 'ignore'});
				new Element('a', {'href': 'javascript:;', 'class': 'slide-next'}).set('html', '<span>avanti</span>').addEvent('click', sliders[i].func.pass('-') ).inject( sliders[i], 'before' );
				new Element('a', {'href': 'javascript:;', 'class': 'slide-prev'}).set('html', '<span>indietro</span>').addEvent('click', sliders[i].func.pass('+') ).inject( sliders[i], 'before' );
			}
			if (sliders[i].getElements('.gallery').length > 0)
				overlays.showGallery(sliders[i].getElement('.box').getFirst().getProperty('id'));
		}
	},
	
	parseWork: function() {
		var video = $('overlay_works').getElement('.video');
		if (!video) return;
		var w = 513;
		var h = 300;
		var url = video.innerHTML;
		var html = "<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\""
    	+ "codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0\""
   		+ "width=\""+w+"\" height=\""+h+"\">"
     	+ "<param name='movie' value='"+url+"' />\n"
     	+ "<param name='quality' value='high' /><param name='wmode' value='transparent' />\n"
      	+ "<embed src=\""+url+"\" quality=\"high\" wmode=\"transparent\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" type=\"application/x-shockwave-flash\" width=\""+w+"\" height=\""+h+"\"></embed>"
      	+ "</object>";
		video.innerHTML = html;
	},
	
	showGallery: function(id) {
		var item = $(id);
		var fx = new Fx.Tween(item, {'property': 'opacity', duration: 250});
		fx.start(0, 1);
		var next = item.getNext();
		if (next && next.hasClass('gallery')) {
			var id_next = next.getProperty('id');
			setTimeout('overlays.showGallery("'+id_next+'")',125);
		}
	},
	
	load: function(id, url) {
		this.xhr = new Request({
			'url': url
		}).send();
		this.xhr.addEvent('onSuccess', function(id) {
			$(id).set('html', this.xhr.response.text);
			switch (id)
			{
				case 'overlay_galleries':
					var show = 'galleries';
					Shadowbox.setup($(id).getElements('.gallery a'), sb_options);
				break;
				case 'overlay_works':
					var show = 'works';
				break;
				case 'overlay_news':
					var show = 'news';
				break;
			}
			this.show( show );
			$(id).getElements('.close').addEvent('click', function() {
				overlays.hide( show );
			} );
		}.pass(id, this) );
	}
});

/*** PAGE CLASS ***/
engine.page = new Class({
	load: function(url) {
		// hide
		fx.hideGalleries();
		fx.hideCategories();
		$$('#galleries li').each(function(item) {
			//setTimeout('fx.hideGalleryBlock("'+item.getProperty('id')+'")',625);
		});
		this.xhr = new Request({'url': url}).send();
		this.xhr.addEvent('onSuccess', function() {
			// show
			var fn = function()
			{
				$('main-content').set('html', this.xhr.response.text);
				initPage();
				cats.findMax();
				fx.showCategories();
				$$('#galleries li').each(function(item) {
					setTimeout('fx.showGalleryBlock("'+item.getProperty('id')+'")',100);
				});
				setTimeout('fx.showGalleries()',225);
				var id_first = $$('#galleries li')[0].getProperty('id');
				setTimeout('fx.showGallery("'+id_first+'")',350);
				setTimeout('loading.hide()',350);
				setTimeout('scrollbar.calculate(true)',350);
			};
			fn.delay(650, this);
			
		}.bind(this));
	}
});

/*** VIDEO CLASS ***/

engine.video = new Class({
	/*find: function(url) {
		new Ajax(url, {
			method: 'post',
			data: {tag: tag},
			onComplete: function() {
				var response = Json.evaluate(this.response.text);
				video.findCallback(response);
			}
		}).request();
	},
	findAll: function() {
		new Request({
			url: '/videos_controller.php?action=findAll',
			method: 'post',
			onComplete: function() {
				var response = Json.evaluate(this.response.text);
				video.findCallback(response);
			}
		}).send();
	},
	findCallback: function(jsonData) {
		fx.hideGalleries();
		$$('#galleries li').each(function(item) {
			setTimeout('fx.hideGalleryBlock("'+item.getProperty('id')+'")',625);
		});
		jsonData.each(function(item) {
			setTimeout('fx.showGalleryBlock("video'+item.id+'")',750);
		});
		setTimeout('fx.showGalleries()',875);
		var id_first = $$('#galleries li')[0].getProperty('id');
		setTimeout('fx.showGallery("'+id_first+'")',1000);
		setTimeout('loading.hide()',1000);
		setTimeout('scrollbar.calculate(true)',1000);
	},*/
	blockSize: function() {
		var n = video.nbGalleries();
		return (190 * n) + 4;
	},
	nbGalleries: function() {
		var n = 0;
		$$('#galleries li').each(function(item) {
			if (item.getStyle('display')==='block') {
				n++;
			}
		});
		return n;
	}
});

/*** SCROLLBAR CLASS ***/

engine.scrollbar = new Class({
	s: 190,
	vheight: 0,
	nbGalleries: 0,
	nbVisibleGalleries: 0,
	nbHiddenGalleries: 0,
	initialize: function() {
	},
	
	calculate: function(tr) {
		this.fx = new Fx.Tween($('galleries'), {'property': 'top', duration: 485, transition:Fx.Transitions.Expo.easeInOut});	
		var wheight = (Browser.Engine.presto) ? $$('body')[0].clientHeight : window.getSize().y;
		$('galleries_container').setStyle('height', wheight+'px');
		scrollbar.vheight = wheight - 32;
		scrollbar.nbGalleries = video.nbGalleries();
		
		var nbFitGalleries = Math.floor((scrollbar.vheight-4) / this.s);
		
		scrollbar.nbVisibleGalleries = (scrollbar.nbGalleries > nbFitGalleries) ? nbFitGalleries : scrollbar.nbGalleries;
		scrollbar.nbHiddenGalleries = scrollbar.nbGalleries - scrollbar.nbVisibleGalleries;
		
		var top = parseInt($('galleries').getStyle('top'));
		
		if (scrollbar.nbHiddenGalleries === 0) {
			if (tr) {
				fx.hideScrollbar();
				if (top !== -12)
					fx.upGalleries();
			}
			else {
				$('scroll_top').setStyles({display: 'none', visibility: 'hidden', opacity: '0'});
				$('scroll_bottom').setStyles({display: 'none', visibility: 'hidden', opacity: '0'});
				if (top !== -12)
					$('galleries').setStyle('top','-12px');
			}
		}
		else {
			if (tr) {
				fx.showScrollbar();
				if (top !== 0)
					fx.downGalleries();
			}
			else {
				$('scroll_top').setStyles({display: 'block', visibility: 'visible', opacity: '1'});
				$('scroll_bottom').setStyles({display: 'block', visibility: 'visible', opacity: '1'});
				if (top !== 0)
					$('galleries').setStyle('top','0');
			}
		}
	},
	scrollTop: function() {
		if (scrollbar.nbHiddenGalleries > 0 && !scroll_busy) {
			scroll_busy = true;
			setTimeout("scroll_busy = false",500);
			var vtop = parseInt($('galleries').getStyle('top'));
				if (vtop <  this.s) {
					var nvtop = vtop +  this.s;
				}
				else {
					var nvtop = 0;
				}
				this.fx.start(vtop, nvtop);
		}
	},
	scrollBottom: function() {
		if (scrollbar.nbHiddenGalleries > 0 && !scroll_busy) {
			scroll_busy = true;
			setTimeout("scroll_busy = false",500);
			var vtop = parseInt($('galleries').getStyle('top'));
			if (scrollbar.vheight +  this.s < video.blockSize() + vtop) {
				var nvtop = vtop -  this.s;
			}
			else {
				var reste = video.blockSize() + vtop - scrollbar.vheight;
				var nvtop = vtop - reste;
				if (Browser.Engine.trident) {
					nvtop = nvtop - 12;
				}
			}
			this.fx.start(vtop, nvtop);
		}
	}
});

/*** OVERVIEW CLASS ***/

engine.overview = new Class({
	show: function() {
		normal_mode = false;
		setTimeout("overview_mode = true",2000);
		
		fx.hideLogo();
		fx.hideMenu();
		fx.hideCategories();
		fx.hideScrollbar();
		setTimeout("fx.moveGalleries()",750);
		setTimeout("fx.reposGalleries()",1250);
		setTimeout("fx.showCloseOverview()",1500);
		
		lines.hide();
	},
	hide: function() {
		normal_mode = true;
		overview_mode = false;
		
		fx.hideAllGalleries();
		fx.hideCloseOverview();
		
		setTimeout('scrollbar.calculate(true)',2000);
		
		setTimeout('fx.resetGalleries()',750);
		setTimeout('fx.showLogo()',750)
		setTimeout('fx.showMenuItem("pics")',1000);
		setTimeout('fx.showMenuItem("works")',1250);
		setTimeout('fx.showMenuItem("news")',1500);
		setTimeout('fx.showMenuItem("contact")',1750);
		setTimeout('fx.showCategories()',1750);
		
		var id_first = $$('#galleries li')[0].getProperty('id');
		setTimeout('fx.showGallery("'+id_first+'")',2000);
		
		setTimeout('lines.show()',2000);
	}
});

/*** FLV ***/

engine.lines = new Class({
	show: function() {
		$('flv').setStyles({width:'600px', height:'700px'});
		if (!Browser.Engine.trident && $('vidPlayer')) {
			$('vidPlayer').setStyle('visibility','visible');
		}
	},
	hide: function() {
		if (!Browser.Engine.trident && $('vidPlayer')) {
			$('vidPlayer').setStyle('visibility','hidden');
		}
		$('flv').setStyles({width:'0', height:'0'});
	}
});

engine.moveCategories = new Class({
	index: 0,
	tohide: 5,
	
	findMax: function( )
	{
		// resize categories items
		var max = 0, width, awidth;
		$$('#categories li').each(function(item) {
			width = item.getSize().x;
			if (width > max) {
				max = width;
			}
		});
		$$('#categories li').each(function(item) {
			item.setStyle('width', max+'px');
			awidth = (item.getProperty('id')==='overview') ? max-29 : max-10;
			item.getFirst().setStyle('width', awidth+'px');
		});
	},
	
	move: function( mode ) {
		var categories = $$('.category');
		if (mode == 'up') {
			if (this.index > 0)
				this.index--;
		} else {
			if (this.index < categories.length - this.tohide -1)
				this.index++;
		}
		categories.addClass('category-hidden');
		for (var i=this.index; i<=this.index+this.tohide; i++)
		{
			categories[i].removeClass('category-hidden');
		}
	}
});

/*** MAIN PROCESS ***/

window.addEvent('domready', function() {
	
	// initialization
	scrollbar = new engine.scrollbar();
	loading = new engine.loading();
	overlays = new engine.overlays();
	page = new engine.page();
	video = new engine.video();
	overview = new engine.overview();
	fx = new engine.fx();
	cats = new engine.moveCategories();
	lines = new engine.lines();
	
	// resize categories items
	cats.findMax();
	
	// set scrolls
	window.addEvent('resize', function() {
		if (normal_mode)
			scrollbar.calculate(false);
	});
	document.addEvent('mousewheel', function(event) {
		if (normal_mode) {
			if (event.wheel > 0)
				scrollbar.scrollTop();
			else
				scrollbar.scrollBottom();
			return false;
		}
	});
	document.addEvent('keydown', function(event) {
		if (normal_mode) {
			if (event.key === 'up') {
				scrollbar.scrollTop();
				return false;
			}
			if (event.key === 'down') {
				scrollbar.scrollBottom();
				return false;
			}
			if (event.key === 'o') {
				overview.show();
				return false;
			}
		}
		else if (overview_mode) {
			if ((event.key === 'esc' || event.key === 'c') && $('shadowbox_overlay').getStyle('visibility') === 'hidden') {
				overview.hide();
			}
		}
	});
	
	// apparitions
	fx.showLogo();
	setTimeout('fx.showMenuItem("pics")',250);
	setTimeout('fx.showMenuItem("works")',500);
	setTimeout('fx.showMenuItem("news")',750);
	setTimeout('fx.showMenuItem("contact")',1000);
	
	setTimeout('fx.showCategories()',1000);
	
	setTimeout('fx.showGalleries()',875);
	var id_first = $$('#galleries li')[0].getProperty('id');
	setTimeout('fx.showGallery("'+id_first+'")',1000);
	setTimeout('loading.hide()',1000);
	setTimeout('scrollbar.calculate(true)',1000);
	
	//video.findAll();
	
	// resizing overlays
	var width = $$('body')[0].getSize().x - 24;
	$$('.overlay').each(function(overlay) {
		overlay.setStyle('width',width+'px');
	});
	
		// scrollbar top
	$('scroll_top').addEvent('click', function() {
		scrollbar.scrollTop();
	});
	// scrollbar bottom
	$('scroll_bottom').addEvent('click', function() {
		scrollbar.scrollBottom();
	});
	
	initPage();
	
	// observe menu --> open overlays and mouseover/out
	
	$$('#menu_pics a')[0].addEvent('click', function() {
		page.load('pics.php');
		return false;
	});
	$$('#menu_works a')[0].addEvent('click', function() {
		page.load('works.php');
		return false;
	});
	$$('#menu_news a')[0].addEvent('click', function() {
		overlays.load('overlay_news', 'news.php');
		return false;
	});
	$$('#menu_contact a')[0].addEvent('click', function() {
		overlays.show('contact');
		return false;
	});
	$$('#menu li a').each(function(item) {
		item.addEvent('mouseover', function() {
			fx.reduceMenuItem(item.getParent().getProperty('id'));
		});
		item.addEvent('mouseout', function() {
			setTimeout('fx.increaseMenuItem("'+item.getParent().getProperty('id')+'")',100);
		});
	});
	
	
	// close overlays
	$$('#overlay_news .close')[0].addEvent('click', function() {
		overlays.hide('news');
		return false;
	});
	$$('#overlay_contact .close')[0].addEvent('click', function() {
		overlays.hide('contact');
		return false;
	});
	
	// other ways to close overlays
	$('opaque').addEvent('click', function() {
		var current = overlays.getCurrent();
		if (current) {
			overlays.hide(current);
		}
	});
	document.addEvent('keydown', function(event) {
		var current = overlays.getCurrent();
		if (current && (event.key === 'esc' || event.key === 'c') && $('shadowbox_overlay').getStyle('visibility') === 'hidden') {
			overlays.hide(current);
		}
	});
	
	// close overview
	$('close_overview').addEvent('click', function() {
		overview.hide();
		return false;
	});
	
	// parsing photos
	$$('.pic').each(function(pic) {
		var url = pic.getElements('img')[0].getProperty('src');
		var title = pic.getElements('a')[1].getProperty('title');
		pic.empty();
		var link = new Element('a', {href: url.replace(/_m.jpg/,'.jpg'), title: title, rel: 'shadowbox[Pics]'});
		var image = new Element('img', {src: url.replace(/_m.jpg/,'_s.jpg'), alt: title});
		image.injectInside(link);
		link.injectInside(pic);
	});
	
	// init the Shadowbox plugin
	sb_options = {
		displayNav: true,
		loadingImage: 'templates/images/loading.gif',
		overlayOpacity: 0.65,
		overlayBgImage: 'templates/images/overlay-65.png',
		fadeDuration: 0.5
	};
	
	Shadowbox.init(sb_options);
});

initCrossfades.delay(100, this);

function initPage()
{
	// observe categories
	$$('#categories li a').each(function(item) {
		var id = item.getParent().getProperty('id');
		if (id == 'updown')
			if ($$('#categories li.category-hidden').length > 0)
				item.setStyle('display','block');
			else
				item.setStyle('display','none');
		item.addEvent('click', function() {
			switch (id)
			{
				case 'overview':
					overview.show();
				break;
				case 'updown':
					if (item.get('id') == 'up')
						cats.move('up');
					else
						cats.move('down');
				break;
				/*default:
					//lines.hide();
					setTimeout('lines.show()',2000);
					loading.show();
					if (id !== 'all') {
						video.find(item.getProperty('rel'));
					}
					else {
						video.findAll();
					}
					if ($$('#categories .selected').length > 0) {
						$$('#categories .selected')[0].removeClass('selected');
					}
					item.getParent().addClass('selected');
				break;*/
			}
			return false;
		});
		item.addEvent('mouseover', function() {
			fx.categoryHighlight(item.getParent().getProperty('id'));
		});
		item.addEvent('mouseout', function() {
			setTimeout('fx.categoryDefault("'+item.getParent().getProperty('id')+'")',125);
		});
	});
	
	$$('#categories .category a').each(function(item) {
		item.addEvent('click', function(item) {
			if (item.hasClass('work'))
				overlays.load( 'overlay_works', item.get('href') );
			else
				overlays.load( 'overlay_galleries', item.get('href') );
			return false;
		}.pass(item,this) );
	} );
	
	$$('#galleries li .thumbnail a').each(function(item) {
		item.addEvent('click', function(item) {
			if (item.hasClass('work'))
				overlays.load( 'overlay_works', item.get('href') );
			else
				overlays.load( 'overlay_galleries', item.get('href') );
			return false;
		}.pass(item,this) );
	} );
	
	// observe videos
	$$('#galleries li .thumbnail a img').each(function(item) {
		var id = item.getParent().getParent().getParent().getProperty('id');
		item.addEvent('mouseover', function() {
			fx.showGalleryDescription(id);
			fx.showGalleryTitle(id);
		});
		item.addEvent('mouseout', function() {
			$$('#'+id+' .description').setStyle('display', 'none');
			$$('#'+id+' .title').setStyle('display', 'none');
			setTimeout('fx.hideGalleryDetails("'+id+'")',500);
		});
	});
}

function initCrossfades( )
{
	this.crossfades = $$('.crossfade');
	for (var i=0; i<this.crossfades.length; i++)
	{
		var cf = this.crossfades[i];
		//cf.importProps();
		cf.items = cf.getElements('.item');
		cf.delay = 10000;
		//var top = cf.items[0].offsetTop;
		//var left = cf.items[0].offsetLeft;
		for (var k=0; k<cf.items.length; k++)
		{
			if (k > 0)
			{
				cf.items[k].inject( cf, 'top');
				cf.items[k].setStyles({'position': 'absolute', 'opacity': 0});
			}
		}
		cf.index = 0;
		startCrossfade.delay(cf.delay, cf, cf);
	}
}

function startCrossfade( cf )
{
	new Fx.Tween(cf.items[ cf.index ], {'property': 'opacity', 'duration': 2000}).start(0);
	if (cf.index == cf.items.length - 1 )
		cf.index = 0;
	else
		cf.index++;
	new Fx.Tween(cf.items[ cf.index ], {'property': 'opacity', 'duration': 2000}).start(1);
	
	startCrossfade.delay(cf.delay, cf, cf);
}