/****************** MAIN OBJECT ********/
window.addEvent('domready', function() {
	browserEngine = new browserObj( );
} );

function browserObj( )
{
	s = new siteEngine();
	s.init();
	var fn = function() { $$('.js').setStyle('display', 'block'); };
	fn.delay(200);
}


function siteEngine()
{
	this.init = function()
	{
		
		
		this.menu = $('top-menu');		
		
		var voices = this.menu.getElements('li.level-0');
		for (var i=0; i<voices.length; i++)
		{
			voices[i].submenu = voices[i].getElement('ul.level-1');
			if (voices[i].submenu)
			{
				voices[i].submenu.setStyle('position', 'absolute');
				voices[i].submenu.setStyle('opacity', 0)
				voices[i].addEvent('mouseenter', function(obj) {
					//obj.submenu.setStyles({'position': 'absolute', 'display': 'block'});
					obj.submenu.fade('in');
					obj.addClass('over');
				}.pass(voices[i], this) );
				voices[i].addEvent('mouseleave', function(obj) {
					//obj.submenu.getElements('ul.level-1').setStyles({'display': 'none'});
					obj.submenu.fade('out');
					obj.removeClass('over');
				}.pass(voices[i], this) );
			}
		}
		
		var confirms = document.getElements('.confirm');
		for (var i=0; i<confirms.length; i++)
		{
			confirms[i].onclick = function() {
				return confirm('Sei sicuro di voler continuare');
			}
		}
		
		var relabels = document.getElements('.relabel');
		for (var i=0; i<relabels.length; i++)
		{
			relabels[i].importProps();
			this.addRelabel( relabels[i] );
		}
		
		this.initCrossfades.delay(10, this);
		
		this.initScrolls();
	},
	
	this.initCrossfades = function( )
	{
		this.crossfades = $$('.crossfade');
		for (var i=0; i<this.crossfades.length; i++)
		{
			var cf = this.crossfades[i];
			cf.importProps();
			cf.items = cf.getElements('.item');
			//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;
			this.startCrossfade.delay(cf.delay, this, cf);
		}
	},
	
	this.startCrossfade = function( cf )
	{
		cf.items[ cf.index ].fade('out', {'duration': 1000});
		if (cf.index == cf.items.length - 1 )
			cf.index = 0;
		else
			cf.index++;
		cf.items[ cf.index ].fade('in', {'duration': 1000});
		
		this.startCrossfade.delay(cf.delay, this, cf);
	},
	
	this.initScrolls = function( scroll )
	{
		this.scrolls = $$('.scroll');
		for (var i=0; i<this.scrolls.length; i++)
		{
			var s = this.scrolls[i];
			s.importProps();
			s.totalheight = s.getSize().y + parseInt(s.scrollheight);
			s.container = new Element('div').setStyles({'height': parseInt(s.scrollheight), 'overflow': 'hidden'}).inject( s, 'before');
			s.inject( s.container );
			s.addEvent('mouseenter', function(s) {
				s.fx.pause();
			}.pass(s,this) );
			s.addEvent('mouseleave', function(s) {
				s.fx.resume();
			}.pass(s,this) );
			
			s.fx = new Fx.Tween( s, {'property': 'margin-top', 'duration': s.getElements('.news').length * 18000, 'transition': 'linear' }).set(0);
			this.scroll( s );
		}
	},
	
	this.scroll = function( s )
	{
		s.fx.start( -s.totalheight ).chain(
			function(s) {
				s.fx.set( parseInt(s.scrollheight) );
				this.scroll( s );
			}.pass(s, this)
		);
	},
	
	this.addRelabel = function( obj )
	{
		obj.set('value', obj.label);
		
		obj.addEvent('focus', function() {
			if (obj.get('value') == obj.label)
				obj.set('value', '');
		}.pass(obj, this) );
		
		obj.addEvent('blur', function() {
			if (obj.get('value') == '')
				obj.set('value', obj.label);
		}.pass(obj, this) );
	}
}



/******* IMPLEMENTATION ***********/
Element.implement({
	importProps: function()
	{
		this.saveProps( this, this );
	},
	
	copyProps: function( obj )
	{
		this.saveProps( obj, this );
	},
	
	saveProps: function( source, target )
	{
		var trigger = "logics@";
		if (source.className.indexOf(trigger) !== -1)
		{
			// import rel settings
			var logics = source.className.substring( source.className.indexOf(trigger) + trigger.length );
			var parts = logics.split('|');
			for (var j=0; j<parts.length; j++)
			{
				kv = parts[j].split(':');
				eval("target."+kv[0]+" = '"+kv[1]+"'");
			}
		}
	},
	
	getURL: function( )
	{
		var uri = (this.tagName == 'A' ? this.getProperty('href') : this.getProperty('action') );
		if (this.urlproto)
			var url = this.urlproto.replace( '[url]', uri + '&' );
		else
			var url = uri;
		return url;
	}
} );

