window.addEvent('domready', function() {
	init();
	window.fireEvent('siteready');
});

window.addEvent('unload', function() {} );

function init()
{
	// initialize map engine
	s = new siteEngine();
	s.init();
	s.initBlock( document );
	
	document.addEvent('updateblock', function(obj) {
		s.initBlock( obj );
	} );
}

function siteEngine()
{
	this.init = function()
	{
		this.body = document.getElement('body');
		this.initMenu();
		this.initCharSizes();
		this.initMap();
		this.initVideo();
	},
	
	this.initBlock = function( obj )
	{
		var relabels = obj.getElements('.relabel');
		for (var i=0; i<relabels.length; i++)
		{
			relabels[i].importProps();
			this.addRelabel.delay( 500, this, relabels[i] );
		}
		
		var changes = obj.getElements('.change');
		for (var i=0; i<changes.length; i++)
		{
			changes[i].importProps();
			this.addChange( changes[i] );
		}
		
		var selects = obj.getElements('.select-full');
		for (var i=0; i<selects.length; i++)
		{
			selects[i].importProps();
			this.addFullSelect( selects[i] );
		}
		
		var afters = obj.getElements('.after-ghost');
		for (var i=0; i<afters.length; i++)
		{
			afters[i].addClass('ghost');
		}
		
		var expands = obj.getElements('.expand');
		for (var i=0; i<expands.length; i++)
		{
			expands[i].importProps();
			this.addExpand( expands[i] );
		}
		
		var accordions = obj.getElements('.accordion');
		for (var i=0; i<accordions.length; i++)
		{
			accordions[i].importProps();
			this.addAccordion( accordions[i] );
		}
		
		var subaccordions = obj.getElements('.subaccordion');
		for (var i=0; i<subaccordions.length; i++)
		{
			subaccordions[i].importProps();
			this.addSubAccordion( subaccordions[i] );
		}
	},
	
	this.initMenu = function( )
	{
		var menu = $('choose');
		var toggler = menu.getElement('a');
		var banche = $('banche-list');
		if (banche)
		{
			var fn = function() {
				$('banche-list').toggleClass('ghost');
				$('choose').toggleClass('active');
				//return false;
			}
			//banche.addClass('ghost');
			toggler.addEvent('click', fn );
			toggler.addEvent('click', function(e) {
				new Event(e).stop();
			} );
			$('banche-list').getElements('a').addEvent('click', fn );
		}
	},
	
	this.initCharSizes = function( )
	{
		if ($('navigation'))
		{
			var small_s 	= $('small_size');
			var medium_s 	= $('medium_size');
			var big_s 		= $('big_size');
			var content		= $('navigation').getNext();
			if (small_s)
				small_s.addEvent('click', function() {
					content.set('class','');
					content.addClass('content-small');
				} );
			if (medium_s)
				medium_s.addEvent('click', function() {
					content.set('class','');
					content.addClass('content-medium');
				} );
			if (big_s)
				big_s.addEvent('click', function() {
					content.set('class','');
					content.addClass('content-big');
				} );
		}
	},
	
	this.initMap = function( )
	{
		var map = $('europe-map');
		if (map)
		{
			var areas = map.getElements('area');
			for (var i=0; i<areas.length; i++)
			{
				areas[i].importProps();
				areas[i].addEvent('click', function(obj) {
					if (obj.value)
						$(obj.value).fireEvent('click');
					else
						$( obj.get('alt') ).fireEvent('click');
				}.pass(areas[i], this) );
				/*areas[i].addEvent('mouseenter', function(obj) {
					$('europe').setStyle('background-position', '0px -'+obj.imgindex*300+'px');
				}.pass(areas[i], this) );
				areas[i].addEvent('mouseleave', function(obj) {
					$('europe').setStyle('background-position', '0px 0px');
				}.pass(areas[i], this) );*/
			}
		}
		
	},
	
	this.initVideo = function( )
	{
		var player = $('player');
		
		if (player)
		{
			var s1 = new SWFObject('images/video/player.swf','player','496','389','9');			
			s1.addParam('allowfullscreen','false');
			s1.addParam('allowscriptaccess','always');
			s1.addParam('wmode','transparent');
			s1.addParam('flashvars','&file=BPER_SPOT_30_MODENA.flv&autostart=true&bufferlength=30');
			
			s1.write('player');
		}
	},
	
	this.addRelabel = function( obj )
	{
		obj.set('value', obj.label);
		obj.set('autocomplete', 'false');
		
		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) );
	},
	
	this.addChange = function( obj )
	{
		obj.addEvent('change', function(obj) {
			var form = obj.getParent('form');
			form.fireEvent('submit', obj);
		}.pass(obj, this) );
	},
	
	this.addFullSelect = function( obj )
	{
		var options = obj.getElements('option');
		obj.setStyle('display', 'none');
		obj.full = new Element('div', {'class': 'full-window'}).setStyles({'display':'none','position': 'absolute'}).inject(document.body);
		obj.full.fx = new Fx.Scroll( obj.full, {'duration':0} );
		obj.replace = new Element('input', {'type':'text', 'readonly': 'readonly', 'class': 'zones full-select'}).inject( obj, 'before' );
		obj.replace.addEvent('click', this.openFullSelect.pass(obj, this) );
		//obj.replace.addEvent('blur', this.closeFullSelect.pass(obj, this) );
		for (var i=0; i<options.length; i++)
		{
			var fo = new Element('a', {'href':'javascript:;', 'class': 'full-option'}).set('html', options[i].get('text')).inject(obj.full);
			fo.value = options[i].get('value');
			fo.addEvent('click', this.selectFullSelect.pass([obj,fo], this) );
			if (options[i].selected)
			{
				this.selectFullSelect( obj, fo );
			}
		}
	},
	
	this.openFullSelect = function( obj )
	{
		var size = obj.replace.getCoordinates();
		obj.full.setStyles( {
			'display': 'block',
			'width': size.width,
			'left': size.left,
			'top': size.top
		} );
		obj.full.fx.toElement( obj.selected );
	},
	
	this.closeFullSelect = function( obj )
	{
		this.closeFullSelectNow.delay( 200, this, obj );
	},
	
	this.closeFullSelectNow = function( obj )
	{
		obj.full.setStyles( {
			'display': 'none'
		} );
	},
	
	this.selectFullSelect = function( obj, fo )
	{
		obj.replace.set('value', fo.get('html') );
		obj.set('value', fo.value );
		obj.selected = fo;
		this.closeFullSelect( obj );
	},
	
	this.addExpand = function( obj )
	{
		$(obj.targetEl).addClass('ghost');
		obj.addEvent('click', function(obj) {
			$(obj.targetEl).toggleClass('ghost');
			return false;
		}.pass(obj, this) );
		obj.addEvent('click', function(e) {
			new Event(e).stop();
		});
	},
	
	this.addSubAccordion = function( obj )
	{
		obj._togglers = obj.getElements(obj.togglers);
		obj._blocks = obj.getElements(obj.blocks);
		for (var i=0; i<obj._togglers.length; i++)
		{
			if (obj.nosign != 'true') obj._togglers[i].sign = new Element('span').set('html', '+').inject( obj._togglers[i], 'top' );
			if (location.hash.replace('#', '') != obj._togglers[i].get('id') && !obj._togglers[i].hasClass('active'))
				obj._blocks[i].setStyle('display', 'none');
			else
			{
				if (obj.nosign != 'true') obj._togglers[i].sign.set('html', '-');
				obj.index = i;
			}
			
			var fn = function(obj, i) {
				var toopen = true;
				if (obj.index != null)
				{
					if (obj.index != i)
					{
					
						if (obj.nosign != 'true') obj._togglers[obj.index].sign.set('html', '+');
						obj._blocks[obj.index].setStyle('display', 'none');
						obj._togglers[obj.index].removeClass('active');
						toopen = true;
					}
					else
					{
						if (obj.nosign != 'true') obj._togglers[i].sign.set('html', '+');
						if (obj.noautoclose != 'true')
						{
							obj._blocks[i].setStyle('display', 'none');
							obj._togglers[i].removeClass('active');
							obj.index = null;
							toopen = false;
						}
					}
				}
				if (toopen)
				{
					if (obj.nosign != 'true') obj._togglers[i].sign.set('html', '-');
					obj._blocks[i].setStyle('display', 'block');
					obj._togglers[i].addClass('active');
					obj.index = i;
				}
			}.pass([obj, i], this);	
			
			obj._togglers[i].addEvent('click', fn );
			obj._togglers[i].link = obj._togglers[i].getElement('a');
			if (obj._togglers[i].link)
			{
				obj._togglers[i].link.addEvent('click', fn);
				obj._togglers[i].link.addEvent('click', function(e) { new Event(e).stop(); } );
			}
		}
	}
}

/******* 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( )
	{
		if (this.urlproto == '[form]')
		{
			var form = this.getParent('form');
			return this.confirmproto + '?' + form.toQueryString();
		}
		else
		{
			var uri = (this.tagName == 'FORM' ? this.getProperty('action') : this.getProperty('href') );
			if (this.urlproto)
				var url = this.urlproto.replace( '[url]', uri + ((this.urlproto.length > 5) ? '&' : '') );
			else
				var url = uri;
			url = url + (url.indexOf('?') !== -1 ? '&' : '?') + 'nocache=' + Math.floor(Math.random()*100);
			return url;
		}
	}
} );