var f;

window.addEvent('domready', function() {
	if (!f)
		f = new Engine();
	initFirst();
});

window.addEvent('load', function() {
	if (!f)
		f = new Engine();
	init();
});

window.addEvent('unload', function() {
	f = null;
});

function initFirst()
{
	f.initFirst( document );
}

function init()
{
	f.init( document );
}

var Engine = new Class({
	
	initFirst: function( obj )
	{
		this.accordions( obj.getElements('.accordion') );
		this.slides( obj.getElements('.slide') );
	},
	
	init: function( obj )
	{
		this.login( $('login'), $('login-toggler') );
		this.menus( obj.getElements('.menu') );
		
		this.videos( obj.getElements('.video-popup') );
		//this.relabels( obj.getElements('.relabel') );
	},
	
	login: function( obj, toggler )
	{
		obj.setStyle('width', $('mainmenu').getSize().x );
		obj.fade('hide');
		toggler.addEvent('click', function(obj) {
			obj.fade('toggle');
		}.pass(obj, this) );
		toggler.addEvent('click', function(e) { new Event(e).stop(); } );
		$('login-close').addEvent('click', function(obj) {
			obj.fade('toggle');
		}.pass(obj, this) );
	},
	
	menus: function( objs )
	{
		objs.each( this.menu.bind(this) );
	},

	menu: function( obj, i )
	{
		if (Browser.Engine.trident && (Browser.Engine.version == 4))
			obj.to = 1;
		else
			obj.to = 0;
		
		//obj.closeTimer = []
		obj.submenus = obj.getElements('ul');
		
		for (var k=0; k<obj.submenus.length; k++)
		{
			var submenu = obj.submenus[k];
			
			submenu.trigger_li = submenu.getParent('li');
			submenu.trigger = submenu.trigger_li.getElement('a');
			submenu.inject( document.body , 'top' );
			
			//document.title += 'l: '+ submenu.trigger_li.getPosition().x;
			submenu.removeClass('js');
			this.menuReposition(submenu);
			window.addEvent('resize', this.menuReposition.pass(submenu, this) );
			
			var height = submenu.getSize().y;
			submenu.fx = new Fx.Tween( submenu, {
				'property': 'height',
				'duration': 500,
				'transition': Fx.Transitions.Quad.easeOut,
				'link': 'cancel'
			} ).set( obj.to );
			submenu.closed = true;
			submenu.trigger.addEvent('mouseenter', function( obj, k, height ) {
				if (obj.closeTimer) { $clear(obj.closeTimer); }
				for (var i=0; i<obj.submenus.length; i++)
				{
					var submenu = obj.submenus[i];
					if (k == i)
					{
						if (!submenu.trigger.hasClass('menu-withsub-opened'))
						{
							submenu.fx.start( height );
							submenu.trigger.addClass('menu-withsub-opened');
						}
						else
						{
							
						}
					}
					else
					{
						submenu.fx.start( obj.to );
						submenu.trigger.removeClass('menu-withsub-opened');
					}
				}
			}.pass([obj, k, height], this) );
			/*submenu.addEvent('mouseleave', function( submenus, k, height ) {
				var submenu = submenus[k];
				submenu.fx.start( obj.to );
				submenu.trigger.removeClass('menu-withsub-opened');
			}.pass([obj.submenus, k, height], this) );*/
			
			
			submenu.addEvent('mouseenter', function(obj, k) {
				if (obj.closeTimer) $clear(obj.closeTimer);
			}.pass([obj, k], this) );
			submenu.addEvent('mouseleave', function(obj, k) {
				obj.closeTimer = this.menuClose.delay(200, this, [obj,k]);
			}.pass([obj, k], this) );
			submenu.trigger.addEvent('mouseleave', function(obj, k) {
				obj.closeTimer = this.menuClose.delay(200, this, [obj,k]);
			}.pass([obj, k], this) );
			
			submenu.trigger.addEvent('click', function( e ) { new Event(e).stop(); } );
			
			submenu.trigger.addClass('menu-withsub');
			submenu.setStyles( { 'overflow': 'hidden' } ); //, 'margin-left': 
		}
	},
	
	menuReposition: function( submenu )
	{
		submenu.setStyles( { 'left': submenu.trigger_li.getPosition().x - (submenu.getSize().x / 2) + (submenu.trigger_li.getSize().x / 2), 'top': (submenu.trigger_li.getPosition().y + 25) } )
	},
	
	menuClose: function( obj, k )
	{
		if (obj.closeTimer) $clear(obj.closeTimer);
		for (var i=0; i<obj.submenus.length; i++)
		{
			var submenu = obj.submenus[i];
			submenu.fx.start( obj.to );
			submenu.trigger.removeClass('menu-withsub-opened');
		}
	},
	
	accordions: function( objs )
	{
		objs.each( this.accordion );
	},
	
	accordion: function( obj, i )
	{
		var triggers = obj.getElements('.accordion-trigger');
		var blocks = obj.getElements('.accordion-block');
		var selected = 0;
		for (var i=0; i<triggers.length; i++)
			if (triggers[i].hasClass('accordion-selected'))
				selected = i;
		
		obj.fx = new Fx.Accordion(triggers, blocks, {
			opacity: true, 
			onActive: function(toggler, element){
				toggler.addClass('selected');
			},
			onBackground: function(toggler, element){
				toggler.removeClass('selected');
			},
			display: selected
		} );
	},
	
	slides: function( objs )
	{
		objs.each( this.slide.bind(this) );
	},
	
	slide: function( obj, i )
	{
		obj.pos = 0;
		obj.items = obj.getElements('.slide-item');
		if (obj.items.length > 1)
		{
			obj.nav = new Element('div', {'class': 'slide-nav'} ).inject( obj, 'bottom');
			obj.nav.pos = new Element('span', {'class': 'slide-nav-pos', 'html': '1/' + obj.items.length} ).inject( obj.nav );
			obj.nav.next = new Element('a', {'class': 'slide-nav-next', 'html': '<span>next</span>', 'href': 'javascript:;'} ).inject( obj.nav );
			obj.nav.prev = new Element('a', {'class': 'slide-nav-prev', 'html': '<span>prev</span>', 'href': 'javascript:;'} ).inject( obj.nav );
			
			obj.nav.next.addEvent('click', this.slidePrevNext.pass([obj,+1], this) );
			obj.nav.prev.addEvent('click', this.slidePrevNext.pass([obj,-1], this) );
			
			this.slidePrevNext( obj, 0 );
		}
	},
	
	slidePrevNext: function( obj, dir )
	{
		obj.pos += dir;
		if (obj.pos > obj.items.length-1)
			obj.pos = 0;
		if (obj.pos < 0)
			obj.pos = obj.items.length-1;
		obj.items.setStyle('display', 'none');
		obj.items[obj.pos].setStyle('display', 'block');
		obj.nav.pos.set('html', (obj.pos+1) + '/' + obj.items.length);
	},
	
	videos: function( objs )
	{
		objs.each( this.video.bind(this) );
	},
	
	video: function( obj, i )
	{
		obj.addEvent('click', function(obj) {
			if (!this.overlay)
			{
				this.overlay = new Element('div').setStyles( { 'position': 'absolute', 'width': document.getScrollSize().x, 'height': document.getScrollSize().y, 'left': 0, 'top': 0, 'background-color': '#000', 'opacity': .8 } ).inject( $$('body')[0], 'top' );
				this.video = new Element('div', {'id': 'popup-video'}).inject( $$('body')[0] );
				this.overlay.addEvent('click', function() {
					this.overlay.dispose();
					this.video.dispose();
					this.overlay = null;
				}.bind(this));
			}
			var so = new SWFObject('/design/templates/default/swf/player.swf','mpl','634','381','9');
			so.addParam('allowfullscreen','true');
			so.addParam('allowscriptaccess','always');
			so.addParam('wmode','opaque');
			so.addVariable('file', obj.get('href') );
			so.addVariable('backcolor','000000');
			so.addVariable('frontcolor','FFFFFF');
			so.addVariable('lightcolor','00979E');
			so.addVariable('screencolor','000000');
			so.addVariable('autostart','true');
			so.addVariable('mute','false');
			so.addVariable('stretching','exactfit');
			so.write('popup-video');
			return false;
		}.pass(obj, this) );
	}
});
