var s = null;

window.addEvent('domready', function() {
	init();
	window.fireEvent('siteready');
});

window.addEvent('unload', function() {
	uninit();
} );

function init()
{
	if ($('flash'))
	{
		var section = $('section').get('html');
		var language = $('language').get('html');
		var links = $('flash').getElements('a');
		var params = 'section=' + section + '&';
		params += 'language=' + language + '&';
		for (i=0; i<links.length; i++)
		{
			params += links[i].get('rel') + '=' + encodeURIComponent(links[i].get('href')) + '&';
		}
		var so = new SWFObject("templates/images/header.swf", "header", "100%", "465", "8", "#336699");
		so.addParam("quality", "low");
		so.addParam("FlashVars", params);
		//so.addParam("wmode", "transparent");
		so.addParam("salign", "t");
		so.write("flash");
	}

	// initialize map engine
	s = new siteEngine();
	s.init();
	s.initBlock( s.body );
	
	document.addEvent('updateblock', function(obj) {
		s.initBlock( obj );
	} );
}

function uninit()
{
	s = null;
}

function siteEngine()
{
	this.init = function()
	{
		this.body = document.getElement('body');
		
		this.message = document.getElement('.message');
		if (this.message)	this.message.fade.delay(1000, this.message, 'out');
	},
	
	this.initBlock = function( obj )
	{
		var objs = obj.getElements('.exec');
		objs[objs.length] = obj;
		for (var i=0; i<objs.length; i++)
		{
			objs[i].importProps();
			if (objs[i].hasClass('save'))			this.addSave(objs[i]);
			if (objs[i].hasClass('update'))			this.addUpdate(objs[i]);
			if (objs[i].hasClass('popup'))			this.addPopup(objs[i]);
			if (objs[i].hasClass('onfly'))			this.addOnFly(objs[i]);
			
			if (objs[i].hasClass('accordion'))		this.addAccordion(objs[i]);
			if (objs[i].hasClass('relabel'))		this.addRelabel(objs[i]);
			if (objs[i].hasClass('news-continue-it'))	this.addContinue(objs[i]);
			if (objs[i].hasClass('news-continue-en'))	this.addContinue(objs[i]);
			if (objs[i].hasClass('news-continue-fr'))	this.addContinue(objs[i]);
			
			if (objs[i].hasClass('question'))		this.addConfirm(objs[i]);
		}
	},
	
	this.addConfirm = function( obj )
	{
		obj.addEvent('click', function(obj) {
			if (!obj.continueClick()) return false;
		}.pass(obj, this) );
	},
	
	this.initPopup = function( )
	{
		SqueezeBox.initialize({
			ajaxOptions: {
				method: 'get'
			}
		});
		this.popupMng = SqueezeBox;
	},
	
	this.execBlock = function( obj )
	{
		this.addMouseTip( obj.loadmsg || 'Caricamento...', 0 );
		var url = obj.getURL();
		obj.xhr = new Request( {
			url: url
		} ).send();
		obj.xhr.addEvent('onComplete', function(obj) {
			var response = obj.xhr.response.text
			if (this.parseResponse(response))
				obj.setContent( response );
			this.closeMouseTip( );
		}.pass(obj, this) );
	},
	
	this.execForm = function( obj )
	{
		this.addMouseTip( obj.loadmsg || 'Caricamento...', 0 );
		var url = obj.getURL();
		if (obj.xhr)
			obj.xhr.cancel();
		obj.xhr = new Request( {
			'url': url,
			'data': obj.getQueryString(),
			'method': "post"
		} ).send();
		obj.xhr.addEvent('onComplete', this.parseSave.pass(obj, this) );
		return false;
	},
	
	this.addSave = function( obj )
	{
		if (obj.unload)	
			window.addEvent('beforeunload', function(obj) { if (!confirm(obj.unload)) return true; }.pass(obj, this) );
		obj.addEvent('submit', this.execForm.pass(obj, this) );
		//obj.addEvent('submit', function(e) { new Event(e).stop(); return false; } );
	},
	
	this.parseSave = function( obj )
	{
		var response = obj.xhr.response.text;
		if (this.parseResponse(response))
		{
			if (obj.targetEl == 'popup')
				this.popupMng.setContent( 'string', response );
			else if (obj.targetEl == 'none') { }
			else
				$(obj.targetEl).setContent(response);
		}
		this.closeMouseTip( );
	},
	
	this.parseResponse = function( text )
	{
		return true;
	},
	
	this.addUpdate = function( obj )
	{
		if (obj.get('tag') == 'form')
			this.updateFormDelay(obj);
		if (obj.get('tag') == 'select')
		{
			obj.addEvent('change', function(event) {
				new Event(event).stop();
				this.feedSelect(obj);
				return false;
			}.pass(obj, this) );
		}
	},
	
	this.updateFormDelay = function( obj )
	{
		var inputs = obj.getElements('input,select,textarea');
		var autosave = obj.getElement('.autosave');
		var func = function(obj)
		{
			if (obj.autosave)
				if (!obj.autosave.get('checked'))
					return true;
			
			if (obj.updateTimer)
				$clear( obj.updateTimer );
			obj.updateTimer = this.execForm.delay(obj.delay, this, obj);
			//return false;
		}.pass(obj, this);
		for (var i=0; i<inputs.length; i++)
		{
			if ( (!inputs[i].hasClass('no-update')) && (inputs[i].get('type') != 'file') )
			{		
				inputs[i].addEvent('change', func);
				inputs[i].addEvent('keypress', func);
			}
		}
	},
	
	this.addPopup = function( obj )
	{
		if (obj.blank == 'true')
		{
			obj.addEvent('click', function(obj) {
				window.open( obj.getURL(), 'new', 'menubar=no,width='+obj.width+',height='+obj.height+',location=no,resizable=no,scrollbars=yes,status=no' );
			}.pass(obj, this) );
		}
		else
		{
			if (!this.plugins['popup'])
			{
				this.plugins['popup'] = new Asset.javascript("includes/libraries/popup.js");
				this.plugins['popup'].addEvent('load', this.initPopup.bind(this) );
			}
			obj.addEvent('click', function(obj) {
				//alert(obj.getURL());
				var options = {
					url: obj.getURL(),
					size: { x: (obj.width || 550),
							y: (obj.height || 500) }
				}
				if (!obj.continueClick()) return false;
				this.popupMng.addEvent('onUpdate', function() { document.fireEvent('updateblock', this.popupMng.content); }.bind(this) );
				this.popupMng.fromElement(obj, options);
			}.pass(obj, this) );
		}
		obj.addEvent('click', function(e) { new Event(e).stop(); } );
	},
	
	this.addOnFly = function( obj )
	{
		obj.addEvent('click', function(obj) {
			if (!obj.continueClick()) return false;
			this.addMouseTip( obj.loadmsg || 'Caricamento...', 0 );
			var url = obj.getURL();
			var options = { url: url, method: 'post' }
			if (obj.post)
			{
				options.data = $(obj.post).toQueryString();
			}
			obj.xhr = new Request( options ).send();
			obj.xhr.addEvent('onComplete', function(obj) {
				var response = obj.xhr.response.text;
				if (obj.targetEl == 'popup')
					this.popupMng.setContent( 'string', response );
				else
				{
					if (obj.targetEl == '[same]')
						var target = obj;
					else
						var target = $(obj.targetEl);
					if (obj.transition)
						target.transition = obj.transition;
					target.setContent( response );
				}
				this.closeMouseTip( );
				obj.fireEvent('success');
			}.pass(obj, this) );
		}.pass(obj, this) );
		obj.addEvent('click', function(e) { new Event(e).stop(); } );
	},
	
	this.addRelabel = function( obj )
	{
		if (obj.get('value').length == 0)
			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) );
	},
	
	this.addContinue = function( obj )
	{
		obj.addEvent('click', function() {
			obj.getParent('div').getElement('.news-content').toggleClass('news-full');
		}.pass(obj, this) );
	},
	
	this.addAccordion = function( obj )
	{
		if ((Browser.Engine.name != 'trident') || Browser.Engine.version > 4)
		{
		var togglers = obj.getElements('h3');
		var blocks = obj.getElements('.block');
		obj.accordion = new Accordion(togglers, blocks, {
			opacity: true
		} );
		obj.accordion.addEvents( {
			'onActive': function(toggler,block) {
				toggler.addClass('toggler-selected');
			},
			'onBackground': function(toggler,block) {
				toggler.removeClass('toggler-selected');
			}
		} )
		if (togglers.length > 0)
		{
			var found = 0;
			for (var i=0; i<togglers.length; i++)
				if (togglers[i].hasClass('selected'))
					var found = i;
			togglers[found].addClass('toggler-selected');
			obj.accordion.display( found );
		}
		}
	}
}

/******* IMPLEMENTATION ***********/
Array.prototype.sum = function(){
	for(var i=0,sum=0;i<this.length;sum+=this[i++]);
	return sum;
}
Array.prototype.max = function() {
	return Math.max.apply({},this)
}
Array.prototype.min = function() {
	return Math.min.apply({},this)
}
String.prototype.strpad = function() {
	return (!isNaN(this) && this.toString().length==1)?"0"+this:this;
}

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(':');
				if (kv.length == 2)
				{
					kv[1] = kv[1].replace('[http]', 'http://');
					eval("target."+kv[0]+" = '"+kv[1]+"'");
				}
			}
		}
	},
	
	getURL: function( )
	{
		var uri = (this.tagName == 'A' ? this.get('href') : this.get('action') );
		if (this.urlproto)
			var url = this.urlproto.replace( '[url]', uri + '&' );
		else
			var url = uri;
		return url;
	},
	
	getQueryString: function(){
		var queryString = [];
		this.getElements('input, select, textarea').each(function(el){
			if (!el.name || el.disabled) return;
			var value = (el.tagName.toLowerCase() == 'select') ? Element.getSelected(el).map(function(opt){
				return opt.value;
			}) : ((el.type == 'radio' || el.type == 'checkbox') && !el.checked) ? null : el.value;
			$splat(value).each(function(val){
				if (val) queryString.push(el.name + '=' + escape(val));
			});
		});
		return queryString.join('&');
	},
	
	getPosition: function(relative){
		if (Browser.Engine.trident)
			var offset = {'x': this.getBoundingClientRect().left, 'y': this.getBoundingClientRect().top }
		else
			var offset = this.getOffsets();
		var scroll = this.getScrolls();
		var position = {x: offset.x - scroll.x, y: offset.y - scroll.y};
		var relativePosition = (relative && (relative = $(relative))) ? relative.getPosition() : {x: 0, y: 0};
		return {x: position.x - relativePosition.x, y: position.y - relativePosition.y};
	},
	
	seContent: function( html )
	{
		this.set('html', html);
	},
	
	continueClick: function( )
	{
		if (this.hasClass('confirm'))
		{
			if (confirm(this.question))
				return true;
			else
				return false;
		}
		return true;
	},
	
	loading: function( mode )
	{
		if (!this.loadingDiv)
		{
			this.loadingDiv = new Element('div', {'class': 'loading-trip-panel'}).setStyles({'position':'absolute', 'z-index': 10000000}).set('html', '&nbsp;').inject( this, 'top' );
			this.loadingFx = new Fx.Tween(this.loadingDiv, {'link': 'chain', 'property': 'opacity'}).set(0);
		}
		var size = this.getSize();
		this.loadingDiv.setStyles( { 'width': size.x, 'height': size.y } );
		switch (mode)
		{
			case 1: this.loadingFx.start(.7); break;
			case 0: this.loadingFx.start(0); break;
		}
	}
} );

/**
 * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
 *
 * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 */
if(typeof deconcept=="undefined"){var deconcept=new Object();}if(typeof deconcept.util=="undefined"){deconcept.util=new Object();}if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();}deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a){if(!document.getElementById){return;}this.DETECT_KEY=_a?_a:"detectflash";this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);this.params=new Object();this.variables=new Object();this.attributes=new Array();if(_1){this.setAttribute("swf",_1);}if(id){this.setAttribute("id",id);}if(w){this.setAttribute("width",w);}if(h){this.setAttribute("height",h);}if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));}this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&&this.installedVer.major>7){deconcept.SWFObject.doPrepUnload=true;}if(c){this.addParam("bgcolor",c);}var q=_7?_7:"high";this.addParam("quality",q);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressInstall",false);var _c=(_8)?_8:window.location;this.setAttribute("xiRedirectUrl",_c);this.setAttribute("redirectUrl","");if(_9){this.setAttribute("redirectUrl",_9);}};deconcept.SWFObject.prototype={useExpressInstall:function(_d){this.xiSWFPath=!_d?"expressinstall.swf":_d;this.setAttribute("useExpressInstall",true);},setAttribute:function(_e,_f){this.attributes[_e]=_f;},getAttribute:function(_10){return this.attributes[_10];},addParam:function(_11,_12){this.params[_11]=_12;},getParams:function(){return this.params;},addVariable:function(_13,_14){this.variables[_13]=_14;},getVariable:function(_15){return this.variables[_15];},getVariables:function(){return this.variables;},getVariablePairs:function(){var _16=new Array();var key;var _18=this.getVariables();for(key in _18){_16[_16.length]=key+"="+_18[key];}return _16;},getSWFHTML:function(){var _19="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}_19="<embed type=\"application/x-shockwave-flash\" src=\""+this.getAttribute("swf")+"\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+this.getAttribute("style")+"\"";_19+=" id=\""+this.getAttribute("id")+"\" name=\""+this.getAttribute("id")+"\" ";var _1a=this.getParams();for(var key in _1a){_19+=[key]+"=\""+_1a[key]+"\" ";}var _1c=this.getVariablePairs().join("&");if(_1c.length>0){_19+="flashvars=\""+_1c+"\"";}_19+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}_19="<object id=\""+this.getAttribute("id")+"\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+this.getAttribute("style")+"\">";_19+="<param name=\"movie\" value=\""+this.getAttribute("swf")+"\" />";var _1d=this.getParams();for(var key in _1d){_19+="<param name=\""+key+"\" value=\""+_1d[key]+"\" />";}var _1f=this.getVariablePairs().join("&");if(_1f.length>0){_19+="<param name=\"flashvars\" value=\""+_1f+"\" />";}_19+="</object>";}return _19;},write:function(_20){if(this.getAttribute("useExpressInstall")){var _21=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var n=(typeof _20=="string")?document.getElementById(_20):_20;n.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var _23=new deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var x=navigator.plugins["Shockwave Flash"];if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var axo=1;var _26=3;while(axo){try{_26++;axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_26);_23=new deconcept.PlayerVersion([_26,0,0]);}catch(e){axo=null;}}}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");_23=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}catch(e){if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(e){}}if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}}return _23;};deconcept.PlayerVersion=function(_29){this.major=_29[0]!=null?parseInt(_29[0]):0;this.minor=_29[1]!=null?parseInt(_29[1]):0;this.rev=_29[2]!=null?parseInt(_29[2]):0;};deconcept.PlayerVersion.prototype.versionIsValid=function(fv){if(this.major<fv.major){return false;}if(this.major>fv.major){return true;}if(this.minor<fv.minor){return false;}if(this.minor>fv.minor){return true;}if(this.rev<fv.rev){return false;}return true;};deconcept.util={getRequestParameter:function(_2b){var q=document.location.search||document.location.hash;if(_2b==null){return q;}if(q){var _2d=q.substring(1).split("&");for(var i=0;i<_2d.length;i++){if(_2d[i].substring(0,_2d[i].indexOf("="))==_2b){return _2d[i].substring((_2d[i].indexOf("=")+1));}}}return "";}};deconcept.SWFObjectUtil.cleanupSWFs=function(){var _2f=document.getElementsByTagName("OBJECT");for(var i=_2f.length-1;i>=0;i--){_2f[i].style.display="none";for(var x in _2f[i]){if(typeof _2f[i][x]=="function"){_2f[i][x]=function(){};}}}};if(deconcept.SWFObject.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(id){return document.all[id];};}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject;

