﻿var Site = {
	
	start: function(){

		/*
		if(Browser.Engine.trident4) {
			var iealert= new Element('h3', {'class': 'warn', 'style': 'margin:15px, auto; text-align:center;'});
			iealert.set('text', 'Votre navigateur internet (Internet Explorer 6) n\'est pas compatible avec le site spots-evasion.com. \n Nous vous recommandons vivement de choisir une version supérieure.');
			iealert.inject($('innercontent'), 'before');
			iealert.highlight('#fff', '#831026');
		}
		*/

		MooTools.lang.setLanguage('fr-FR');
		Locale.define("fr-FR","FormValidator",{
			required:"ce champs est requis.",
			email:'Veuillez saisir une adresse email valide.',
			url:"Veuillez saisir une URL, comme http://www.google.com.",
			errorPrefix:" ",
			warningPrefix:"Attention: ",
		});
		MooTools.lang.set("fr-FR","Date",{
			months:["janvier","f&eacute;vrier","mars","avril","mai","juin","juillet","ao&ucirc;t","septembre","octobre","novembre","d&eacute;cembre"],
			days:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],
		});

		var tips= new Tips($$('.tips'));

		//var winsize=window.getSize();
		if($('nav')) {
			var myMenu = new MenuMatic();
		} 
		if($('home')) {
			var homescript = new Asset.javascript('/tpl/overseas/js/home.js', {id: 'home-js'});
		}
		if($('dest')) {
			var destscript = new Asset.javascript('/tpl/overseas/js/travel_dest.js', {id: 'dest-js'});
		}
		if($chk($('frm-rev-step0'))) {
			var comscript = new Asset.javascript('/tpl/overseas/js/travel_dest_comment.js', {id: 'comment-js'});
		}
		if($('activity')) {
			var actscript = new Asset.javascript('/tpl/overseas/js/travel_act.js', {id: 'act-js'});
		}

		if($('dox-xp')) {
			if($('spots-devasion-voyages') && $('lequipe')) {
				var startslide=(document.location.pathname=='/lagence/lequipe/') ? 'lequipe' :  $('panehandler').getFirst('div.panes').get("id");
				var SpeTabs = new SlidingTabs('li.butabs', 'innerwrapper', {startingSlide: startslide});
				if($('spots-devasion-voyages') && $('gmapcanvas')) {
					if (GBrowserIsCompatible()) {
						Site.GMapEvasion();
					}
					else {
						$('gmapcanvas').set('html', "Votre navigateur internet n'est pas compatible avec Google Map");
					}
				}
			}
			if($('conditions-generales') && $('conditions-particulieres')) {
				var startslide=(document.location.pathname=='/documents/conditions-particulieres/') ? 'conditions-particulieres' :  $('panehandler').getFirst('div.panes').get("id");
				var SpeTabs = new SlidingTabs('li.butabs', 'innerwrapper', {startingSlide: startslide});
			}
		}
		if($('dox-sp')) {
			if($$('h4.quest').length>0) {
				Site.DoxDion();
			}
		}

		// common
		$$('a.boxed').each(function(element) {
			new ReMooz(element, {
				origin: element.getElement('img'),
				resizeOptions: {
					transition: Fx.Transitions.Back.easeOut,
					resizeLimit: {x: 600, y: 480},
					resizeOpacity: 0.4,
					hideSource: true
				}
			});
		});
		if($('feedback')) {
			var feedscript = new Asset.javascript('/tpl/overseas/js/feedback.js', {id: 'feedback-js'});
		}
		if($('contest')) {
			var contestscript = new Asset.javascript('/tpl/overseas/js/contest.js', {id: 'contest-js'});
		}
		new SmoothScroll({links: '.scroollers'});

	},

	setUpScrollAnchors: function(){
		$$('a.scroollers').each(function(lnk) {
			if(lnk.href.test("#")) {
				lnk.addEvent('click', function(e){
					e.stop();
					this.scrollTo(lnk.href.split('#')[1]);
				}.bind(this));
			}
		}, this);
	},
	GMapEvasion:function () {
		// first grab what we need....
		var canvas=$('gmapcanvas');
		// let's init the map
		var map = new GMap2(canvas);
		map.setMapType(G_SATELLITE_MAP);
		map.setUIToDefault();
		map.removeMapType(G_PHYSICAL_MAP);
		// let's add a marker
		var StLouis = new GLatLng(47.199076963288974, -1.5809543430805206);
		map.setCenter(StLouis, 5);
		var SpeMarker = new GMarker( StLouis, {draggable: false});
		var spehtml="<h3>Spots d'Evasion Voyages</h3><p>Le Saint Louis<br>9 rue Marcel Sembat<br>44000 Nantes</p><p>Tel : 33. (0)2.40.35.22.00</p>";
		map.addOverlay(SpeMarker);

		GEvent.addListener(SpeMarker, 'click', function() {
			SpeMarker.openInfoWindowHtml(spehtml);
		});
	},
	
	DoxDion : function() {
		var Doxani = new Accordion('h4.quest', 'div.ans', {
			opacity: false,
			onActive: function(toggler, element){
				toggler.setStyle('color', '#E78F08');
				toggler.setStyle('cursor', 'default');
				toggler.setStyle('background-position', 'left bottom');
			},
			onBackground: function(toggler, element){
				toggler.setStyle('background-position', 'left top');
				toggler.setStyle('color', '#E1D6C2');
				toggler.setStyle('cursor', 's-resize');
			}
		}, $('accordion'));
	},
	
	MarkAct:function() {
		if($('activity')) {
			if(Cookie.read('actchoice')) {
				if($('activity').getProperty('class')!=Cookie.read('actchoice')) {
					Cookie.dispose('actchoice');
					Cookie.dispose('acttabs');
					var TabsCookie=Cookie.write('acttabs', 0, {duration:3600, path:'/'})
				}
			}
			var ActCookie=Cookie.write('actchoice', $('activity').getProperty('class'), {duration:3600, path:'/'})
		}
		Site.start();
	}
};

//window.addEvent('load', Site.start);
window.addEvent('domready', function() {
	Site.MarkAct();
});


/*
var bell = {
  src: '/tpl/overseas/swf/blackbell.swf'
};
sIFR.activate(bell);
sIFR.replace(bell, {
	selector: 'h2.sifr',
	wmode : 'transparent',
	css: [
		'.sIFR-root { text-transform:uppercase; color:#15374E;}'
		,'a { text-decoration: none; color:#831026; }'
		,'a:link { color:#831026; }'
		,'a:visited { color:#831026; }'
	,'a:hover,a:focus { color:#000000; }'
	]
});
var calfish = {
	src: '/tpl/overseas/swf/calfish.swf'
};

sIFR.activate(calfish);
sIFR.replace(calfish, {
	selector: 'h3.sifr',
	wmode : 'transparent',
	css: [
		'.sIFR-root { color:#fff;}'
		,'a { text-decoration: none; color:#fff; }'
		,'a:link { color:#fff; }'
		,'a:visited { color:#fff; }'
		,'a:hover,a:focus { color:#9AB4C0; }'
	]
});
*/


var SlideAccordion = Fx.Accordion = new Class({

	Extends: Fx.Elements,

	options: {/*
		onActive: $empty(toggler, section),
		onBackground: $empty(toggler, section),
		fixedHeight: false,
		fixedWidth: false,
		*/
		display: 0,
		show: false,
		height: true,
		width: false,
		opacity: true,
		alwaysHide: false,
		trigger: 'click',
		initialDisplayFx: true,
		returnHeightToAuto: true
	},

	initialize: function(){
		var params = Array.link(arguments, {'container': Element.type, 'options': Object.type, 'togglers': $defined, 'elements': $defined, 'slideshows': $defined});
		this.parent(params.elements, params.options);
		this.togglers = $$(params.togglers);
		this.slideshows = [];
		this.container = document.id(params.container);
		this.previous = -1;
		this.internalChain = new Chain();
		if (this.options.alwaysHide) this.options.wait = true;
		if ($chk(this.options.show)){
			this.options.display = false;
			this.previous = this.options.show;
		}
		if (this.options.start){
			this.options.display = false;
			this.options.show = false;
		}
		this.effects = {};

		if (this.options.opacity) this.effects.opacity = 'fullOpacity';
		//if (this.options.width) this.effects.width = this.options.fixedWidth ? 'fullWidth' : 'offsetWidth';
		if (this.options.height) this.effects.height = this.options.fixedHeight ? 'fullHeight' : 'scrollHeight';
		for (var i = 0, l = this.togglers.length; i < l; i++) this.addSection(this.togglers[i], this.elements[i], this.slideshows[i]);
		this.elements.each(function(el, i){
			if (this.options.show === i){
				this.fireEvent('active', [this.togglers[i], el, this.slideshows[i]]);
			} else {
				for (var fx in this.effects) el.setStyle(fx, 0);
			}
		}, this);
		if ($chk(this.options.display)) this.display(this.options.display, this.options.initialDisplayFx);
		this.addEvent('complete', this.internalChain.callChain.bind(this.internalChain));
	},

	addSection: function(toggler, element){
		toggler = document.id(toggler);
		element = document.id(element);
		imgs = element.getElements('img');
		if(imgs.length>1) {
			var slideshow = new viewer(imgs,{
				mode: 'alpha',
				interval: 2500
			});
		}
		var test = this.togglers.contains(toggler);
		this.togglers.include(toggler);
		this.elements.include(element);
		var idx = this.togglers.indexOf(toggler);
		this.slideshows[idx]=slideshow;
		var displayer = this.display.bind(this, idx);
		toggler.store('accordion:display', displayer);
		toggler.addEvent(this.options.trigger, displayer);
		if (this.options.height) element.setStyles({'padding-top': 0, 'border-top': 'none', 'padding-bottom': 0, 'border-bottom': 'none'});
		//if (this.options.width) element.setStyles({'padding-left': 0, 'border-left': 'none', 'padding-right': 0, 'border-right': 'none'});
		element.fullOpacity = 1;
		if (this.options.fixedWidth) element.fullWidth = this.options.fixedWidth;
		if (this.options.fixedHeight) element.fullHeight = this.options.fixedHeight;
		element.setStyle('overflow', 'hidden');
		if (!test){
			for (var fx in this.effects) element.setStyle(fx, 0);
		}
		return this;
	},

	detach: function(){
		this.togglers.each(function(toggler) {
			toggler.removeEvent(this.options.trigger, toggler.retrieve('accordion:display'));
		}, this);
	},

	display: function(index, useFx){
		if (!this.check(index, useFx)) return this;
		useFx = $pick(useFx, true);
		if (this.options.returnHeightToAuto) {
			var prev = this.elements[this.previous];
			if (prev) {
				for (var fx in this.effects) {
					prev.setStyle(fx, prev[this.effects[fx]]);
				}
			}
		}
		index = ($type(index) == 'element') ? this.elements.indexOf(index) : index;
		if ((this.timer && this.options.wait) || (index === this.previous && !this.options.alwaysHide)) return this;
		this.previous = index;
		var obj = {};
		this.elements.each(function(el, i){
			obj[i] = {};
			var hide = (i != index) || 
						(this.options.alwaysHide && ((el.offsetHeight > 0 && this.options.height) || 
							el.offsetWidth > 0 && this.options.width));
			this.togglers[i].addEvent('click', function() { 
				SpeTabs.accordHeight(el);
			});
			this.fireEvent(hide ? 'background' : 'active', [this.togglers[i], el, this.slideshows[i]]);
			for (var fx in this.effects) obj[i][fx] = hide ? 0 : el[this.effects[fx]];
		}, this);
		this.internalChain.chain(function(){
			if (this.options.returnHeightToAuto) {
				var el = this.elements[index];
				el.setStyle('height', 'auto');
			};
		}.bind(this));
		return useFx ? this.start(obj) : this.set(obj);
	}


});
var rAccordion = new Class({

	initialize: function(container, toggleClass, elementClass, options){
		this.container = container;
		this.tClass = toggleClass;
		this.eClass = elementClass;
		this.options = options;
		this.selector = '#' + this.container + ' > .';
		this.makeAccordion();
	},

	makeAccordion: function(){
		new TabsAccord(
			$$(this.selector+this.tClass),
			$$(this.selector+this.eClass),
			this.options
		).addEvents({
			// The onActive and onComplete events added to the stack here to
			// attempt to address some of the css issues.
			'onActive': function(toggle){
				if(toggle.getParent().getStyle('height') != 0)
					toggle.getParent().setStyle('height', '');
			},
			'onComplete': function(a){
				if ($defined(a)) {
					var height = 0;
					a.getParent().getChildren().each(function(e){
						height = height + e.offsetHeight;
					});
					if(height != a.getParent().offsetHeight && a.getParent().offsetHeight != 0)
						a.getParent().setStyle('height','');
				}
			}
		});
		this.selector += this.eClass + ' > .';
		if($defined($$(this.selector)[0]))
			this.makeAccordion();
	}

});
var TabsSlideAccord = new Class ({
	Extends : SlideAccordion,
	options : {
		
	},
	initialize: function(togglers, togglees, options) {
		this.parent(togglers, togglees, options);
	},
	display:function(index) {
		index=($type(index) == 'element') ? this.eleemnts.indexOf(index) : index;
		if ((this.timer && this.options.wait) || (index === this.previous && !this.options.alwaysHide)) return this;
		
		var obj = {};
		this.previous=index;
		this.elements.each(function(el, i){
			obj[i] = {};
			var hide = (i != index) || (this.options.alwaysHide && (el.offsetHeight > 0));
			this.togglers[i].addEvent('click', function() { 
				SpeTabs.accordHeight(el);
			});
			this.fireEvent(hide ? 'background' : 'active', [this.togglers[i], el]);
			for (var fx in this.effects) obj[i][fx] = hide ? 0 : el[this.effects[fx]];
		}, this);
		return this.start(obj);
	}
});

var TabsAccord = new Class ({
	Extends : Accordion,
	options : {
		
	},
	initialize: function(togglers, togglees, options) {
		this.parent(togglers, togglees, options);
	},
	display:function(index) {
		index=($type(index) == 'element') ? this.eleemnts.indexOf(index) : index;
		if ((this.timer && this.options.wait) || (index === this.previous && !this.options.alwaysHide)) return this;
		
		var obj = {};
		this.previous=index;
		this.elements.each(function(el, i){
			obj[i] = {};
			var hide = (i != index) || (this.options.alwaysHide && (el.offsetHeight > 0));
			this.togglers[i].addEvent('click', function() { 
				SpeTabs.accordHeight(el);
			});
			this.fireEvent(hide ? 'background' : 'active', [this.togglers[i], el]);
			for (var fx in this.effects) obj[i][fx] = hide ? 0 : el[this.effects[fx]];
		}, this);
		return this.start(obj);
	}
});

var MenuMatic=new Class({Implements:Options,options:{id:"nav",subMenusContainerId:"subMenusContainer",effect:"slide & fade",duration:600,physics:Fx.Transitions.Pow.easeOut,hideDelay:1000,stretchMainMenu:false,matchWidthMode:false,orientation:"horizontal",direction:{x:"right",y:"down"},tweakInitial:{x:0,y:0},tweakSubsequent:{x:0,y:0},center:false,opacity:95,mmbFocusedClassName:null,mmbClassName:null,killDivider:null,fixHasLayoutBug:false,onHideAllSubMenusNow_begin:(function(){}),onHideAllSubMenusNow_complete:(function(){}),onInit_begin:(function(){}),onInit_complete:(function(){})},hideAllMenusTimeout:null,allSubMenus:[],subMenuZindex:1,initialize:function(B){this.setOptions(B);this.options.onInit_begin();if(this.options.opacity>99){this.options.opacity=99.9}this.options.opacity=this.options.opacity/100;Element.implement({getId:function(){if(!this.id){var E=this.get("tag")+"-"+$time();while($(E)){E=this.get("tag")+"-"+$time()}this.id=E}return this.id}});this.options.direction.x=this.options.direction.x.toLowerCase();this.options.direction.y=this.options.direction.y.toLowerCase();if(this.options.direction.x==="right"){this.options.direction.xInverse="left"}else{if(this.options.direction.x==="left"){this.options.direction.xInverse="right"}}if(this.options.direction.y==="up"){this.options.direction.yInverse="down"}else{if(this.options.direction.y==="down"){this.options.direction.yInverse="up"}}var A=$(this.options.id).getElements("a");A.each(function(F,E){F.store("parentLinks",F.getParent().getParents("li").getFirst("a"));F.store("parentLinks",F.retrieve("parentLinks").erase(F.retrieve("parentLinks").getFirst()));F.store("childMenu",F.getNext("ul")||F.getNext("ol"));theSubMenuType="subsequent";if($(F.getParent("ul")||F.getParent("ol")).id===this.options.id){theSubMenuType="initial"}F.store("subMenuType",theSubMenuType);if(theSubMenuType==="initial"&&$(F.getNext("ul")||F.getNext("ol"))){F.addClass("mainMenuParentBtn")}else{if($(F.getNext("ul")||F.getNext("ol"))){F.addClass("subMenuParentBtn")}}}.bind(this));var D=new Element("div",{id:this.options.subMenusContainerId}).inject($(document.body),"bottom");$(this.options.id).getElements("ul, ol").each(function(F,E){new Element("div",{"class":"smOW"}).inject(D).grab(F)}.bind(this));D.getElements("a").set("tabindex","-1");A.each(function(G,E){if(!G.retrieve("childMenu")){return }G.store("childMenu",G.retrieve("childMenu").getParent("div"));this.allSubMenus.include(G.retrieve("childMenu"));G.store("parentSubMenus",G.retrieve("parentLinks").retrieve("childMenu"));var F=new MenuMaticSubMenu(this.options,this,G)}.bind(this));var C=$(this.options.id).getElements("a").filter(function(F,E){return !F.retrieve("childMenu")});C.each(function(F,E){F.addEvents({mouseenter:function(G){this.hideAllSubMenusNow();if(this.options.mmbClassName&&this.options.mmbFocusedClassName){$(F).retrieve("btnMorph",new Fx.Morph(F,{duration:(this.options.duration/2),transition:this.options.physics,link:"cancel"})).start(this.options.mmbFocusedClassName)}}.bind(this),focus:function(G){this.hideAllSubMenusNow();if(this.options.mmbClassName&&this.options.mmbFocusedClassName){$(F).retrieve("btnMorph",new Fx.Morph(F,{duration:(this.options.duration/2),transition:this.options.physics,link:"cancel"})).start(this.options.mmbFocusedClassName)}}.bind(this),mouseleave:function(G){if(this.options.mmbClassName&&this.options.mmbFocusedClassName){$(F).retrieve("btnMorph",new Fx.Morph(F,{duration:(this.options.duration*5),transition:this.options.physics,link:"cancel"})).start(this.options.mmbClassName)}}.bind(this),blur:function(G){if(this.options.mmbClassName&&this.options.mmbFocusedClassName){$(F).retrieve("btnMorph",new Fx.Morph(F,{duration:(this.options.duration*5),transition:this.options.physics,link:"cancel"})).start(this.options.mmbClassName)}}.bind(this),keydown:function(H){var G=new Event(H);if(H.key==="up"||H.key==="down"||H.key==="left"||H.key==="right"){H.stop()}if(H.key==="left"&&this.options.orientation==="horizontal"||H.key==="up"&&this.options.orientation==="vertical"){if(F.getParent("li").getPrevious("li")){F.getParent("li").getPrevious("li").getFirst("a").focus()}else{F.getParent("li").getParent().getLast("li").getFirst("a").focus()}}else{if(H.key==="right"&&this.options.orientation==="horizontal"||H.key==="down"&&this.options.orientation==="vertical"){if(F.getParent("li").getNext("li")){F.getParent("li").getNext("li").getFirst("a").focus()}else{F.getParent("li").getParent().getFirst("li").getFirst("a").focus()}}}}.bind(this)})},this);this.stretch();this.killDivider();this.center();this.fixHasLayoutBug();this.options.onInit_complete()},fixHasLayoutBug:function(){if(Browser.Engine.trident&&this.options.fixHasLayoutBug){$(this.options.id).getParents().setStyle("zoom",1);$(this.options.id).setStyle("zoom",1);$(this.options.id).getChildren().setStyle("zoom",1);$(this.options.subMenusContainerId).setStyle("zoom",1);$(this.options.subMenusContainerId).getChildren().setStyle("zoom",1)}},center:function(){if(!this.options.center){return }$(this.options.id).setStyles({left:"50%","margin-left":-($(this.options.id).getSize().x/2)})},stretch:function(){if(this.options.stretchMainMenu&&this.options.orientation==="horizontal"){var C=parseFloat($(this.options.id).getCoordinates().width);var D=0;var B=$(this.options.id).getElements("a");B.setStyles({"padding-left":0,"padding-right":0});B.each(function(F,E){D+=F.getSize().x}.bind(this));if(C<D){return }var A=(C-D)/B.length;B.each(function(F,E){F.setStyle("width",F.getSize().x+A)}.bind(this));B.getLast().setStyle("width",B.getLast().getSize().x-1)}},killDivider:function(){if(this.options.killDivider&&this.options.killDivider.toLowerCase()==="first"){$($(this.options.id).getElements("li")[0]).setStyles({background:"none"})}else{if(this.options.killDivider&&this.options.killDivider.toLowerCase()==="last"){$($(this.options.id).getElements("li").getLast()).setStyles({background:"none"})}}},hideAllSubMenusNow:function(){this.options.onHideAllSubMenusNow_begin();$clear(this.hideAllMenusTimeout);$$(this.allSubMenus).fireEvent("hide");this.options.onHideAllSubMenusNow_complete()}});var MenuMaticSubMenu=new Class({Implements:Options,Extends:MenuMatic,options:{onSubMenuInit_begin:(function(A){}),onSubMenuInit_complete:(function(A){}),onMatchWidth_begin:(function(A){}),onMatchWidth_complete:(function(A){}),onHideSubMenu_begin:(function(A){}),onHideSubMenu_complete:(function(A){}),onHideOtherSubMenus_begin:(function(A){}),onHideOtherSubMenus_complete:(function(A){}),onHideAllSubMenus_begin:(function(A){}),onHideAllSubMenus_complete:(function(A){}),onPositionSubMenu_begin:(function(A){}),onPositionSubMenu_complete:(function(A){}),onShowSubMenu_begin:(function(A){}),onShowSubMenu_complete:(function(A){})},root:null,btn:null,hidden:true,myEffect:null,initialize:function(B,A,C){this.setOptions(B);this.root=A;this.btn=C;this.childMenu=this.btn.retrieve("childMenu");this.subMenuType=this.btn.retrieve("subMenuType");this.childMenu=this.btn.retrieve("childMenu");this.parentSubMenus=$$(this.btn.retrieve("parentSubMenus"));this.parentLinks=$$(this.btn.retrieve("parentLinks"));this.parentSubMenu=$(this.parentSubMenus[0]);if(this.parentSubMenu){this.parentSubMenu=this.parentSubMenu.retrieve("class")}this.childMenu.store("class",this);this.btn.store("class",this);this.childMenu.store("status","closed");this.options.onSubMenuInit_begin(this);this.childMenu.addEvent("hide",function(){this.hideSubMenu()}.bind(this));this.childMenu.addEvent("show",function(){this.showSubMenu()}.bind(this));if(this.options.effect){this.myEffect=new Fx.Morph($(this.childMenu).getFirst(),{duration:this.options.duration,transition:this.options.physics,link:"cancel"})}if(this.options.effect==="slide"||this.options.effect==="slide & fade"){if(this.subMenuType=="initial"&&this.options.orientation==="horizontal"){this.childMenu.getFirst().setStyle("margin-top","0")}else{this.childMenu.getFirst().setStyle("margin-left","0")}}else{if(this.options.effect==="fade"||this.options.effect==="slide & fade"){this.childMenu.getFirst().setStyle("opacity",0)}}if(this.options.effect!="fade"&&this.options.effect!="slide & fade"){this.childMenu.getFirst().setStyle("opacity",this.options.opacity)}var D=$(this.childMenu).getElements("a").filter(function(F,E){return !F.retrieve("childMenu")});D.each(function(F,E){$(F).addClass("subMenuBtn");F.addEvents({mouseenter:function(G){this.childMenu.fireEvent("show");this.cancellHideAllSubMenus();this.hideOtherSubMenus()}.bind(this),focus:function(G){this.childMenu.fireEvent("show");this.cancellHideAllSubMenus();this.hideOtherSubMenus()}.bind(this),mouseleave:function(G){this.cancellHideAllSubMenus();this.hideAllSubMenus()}.bind(this),blur:function(G){this.cancellHideAllSubMenus();this.hideAllSubMenus()}.bind(this),keydown:function(H){var G=new Event(H);if(H.key==="up"||H.key==="down"||H.key==="left"||H.key==="right"||H.key==="tab"){H.stop()}if(H.key==="up"){if(F.getParent("li").getPrevious("li")){F.getParent("li").getPrevious("li").getFirst("a").focus()}else{if(this.options.direction.y==="down"){this.btn.focus()}else{if(this.options.direction.y==="up"){F.getParent("li").getParent().getLast("li").getFirst("a").focus()}}}}else{if(H.key==="down"){if(F.getParent("li").getNext("li")){F.getParent("li").getNext("li").getFirst("a").focus()}else{if(this.options.direction.y==="down"){F.getParent("li").getParent().getFirst("li").getFirst("a").focus()}else{if(this.options.direction.y==="up"){this.btn.focus()}}}}else{if(H.key===this.options.direction.xInverse){this.btn.focus()}}}}.bind(this)})},this);$(this.btn).removeClass("subMenuBtn");if(this.subMenuType=="initial"){this.btn.addClass("mainParentBtn")}else{this.btn.addClass("subParentBtn")}$(this.btn).addEvents({mouseenter:function(E){this.cancellHideAllSubMenus();this.hideOtherSubMenus();this.showSubMenu();if(this.subMenuType==="initial"&&this.options.mmbClassName&&this.options.mmbFocusedClassName){$(this.btn).retrieve("btnMorph",new Fx.Morph($(this.btn),{duration:(this.options.duration/2),transition:this.options.physics,link:"cancel"})).start(this.options.mmbFocusedClassName)}}.bind(this),focus:function(E){this.cancellHideAllSubMenus();this.hideOtherSubMenus();this.showSubMenu();if(this.subMenuType==="initial"&&this.options.mmbClassName&&this.options.mmbFocusedClassName){$(this.btn).retrieve("btnMorph",new Fx.Morph($(this.btn),{duration:(this.options.duration/2),transition:this.options.physics,link:"cancel"})).start(this.options.mmbFocusedClassName)}}.bind(this),mouseleave:function(E){this.cancellHideAllSubMenus();this.hideAllSubMenus()}.bind(this),blur:function(E){this.cancellHideAllSubMenus();this.hideAllSubMenus()}.bind(this),keydown:function(E){E=new Event(E);if(E.key==="up"||E.key==="down"||E.key==="left"||E.key==="right"){E.stop()}if(!this.parentSubMenu){if(this.options.orientation==="horizontal"&&E.key===this.options.direction.y||this.options.orientation==="vertical"&&E.key===this.options.direction.x){if(this.options.direction.y==="down"){this.childMenu.getFirst().getFirst("li").getFirst("a").focus()}else{if(this.options.direction.y==="up"){this.childMenu.getFirst().getLast("li").getFirst("a").focus()}}}else{if(this.options.orientation==="horizontal"&&E.key==="left"||this.options.orientation==="vertical"&&E.key===this.options.direction.yInverse){if(this.btn.getParent().getPrevious()){this.btn.getParent().getPrevious().getFirst().focus()}else{this.btn.getParent().getParent().getLast().getFirst().focus()}}else{if(this.options.orientation==="horizontal"&&E.key==="right"||this.options.orientation==="vertical"&&E.key===this.options.direction.y){if(this.btn.getParent().getNext()){this.btn.getParent().getNext().getFirst().focus()}else{this.btn.getParent().getParent().getFirst().getFirst().focus()}}}}}else{if(E.key==="tab"){E.stop()}if(E.key==="up"){if(this.btn.getParent("li").getPrevious("li")){this.btn.getParent("li").getPrevious("li").getFirst("a").focus()}else{if(this.options.direction.y==="down"){this.parentSubMenu.btn.focus()}else{if(this.options.direction.y==="up"){this.btn.getParent("li").getParent().getLast("li").getFirst("a").focus()}}}}else{if(E.key==="down"){if(this.btn.getParent("li").getNext("li")){this.btn.getParent("li").getNext("li").getFirst("a").focus()}else{if(this.options.direction.y==="down"){this.btn.getParent("li").getParent().getFirst("li").getFirst("a").focus()}else{if(this.options.direction.y==="up"){this.parentSubMenu.btn.focus()}}}}else{if(E.key===this.options.direction.xInverse){this.parentSubMenu.btn.focus()}else{if(E.key===this.options.direction.x){if(this.options.direction.y==="down"){this.childMenu.getFirst().getFirst("li").getFirst("a").focus()}else{if(this.options.direction.y==="up"){}}}}}}}}.bind(this)});this.options.onSubMenuInit_complete(this)},matchWidth:function(){if(this.widthMatched||!this.options.matchWidthMode||this.subMenuType==="subsequent"){return }this.options.onMatchWidth_begin(this);var A=this.btn.getCoordinates().width;$(this.childMenu).getElements("a").each(function(E,D){var C=parseFloat($(this.childMenu).getFirst().getStyle("border-left-width"))+parseFloat($(this.childMenu).getFirst().getStyle("border-right-width"));var B=parseFloat(E.getStyle("padding-left"))+parseFloat(E.getStyle("padding-right"));var F=C+B;if(A>E.getCoordinates().width){E.setStyle("width",A-F);E.setStyle("margin-right",-C)}}.bind(this));this.width=this.childMenu.getFirst().getCoordinates().width;this.widthMatched=true;this.options.onMatchWidth_complete(this)},hideSubMenu:function(){if(this.childMenu.retrieve("status")==="closed"){return }this.options.onHideSubMenu_begin(this);if(this.subMenuType=="initial"){if(this.options.mmbClassName&&this.options.mmbFocusedClassName){$(this.btn).retrieve("btnMorph",new Fx.Morph($(this.btn),{duration:(this.options.duration),transition:this.options.physics,link:"cancel"})).start(this.options.mmbClassName).chain(function(){$(this.btn).removeClass("mainMenuParentBtnFocused");$(this.btn).addClass("mainMenuParentBtn")}.bind(this))}else{$(this.btn).removeClass("mainMenuParentBtnFocused");$(this.btn).addClass("mainMenuParentBtn")}}else{$(this.btn).removeClass("subMenuParentBtnFocused");$(this.btn).addClass("subMenuParentBtn")}this.childMenu.setStyle("z-index",1);if(this.options.effect&&this.options.effect.toLowerCase()==="slide"){if(this.subMenuType=="initial"&&this.options.orientation==="horizontal"&&this.options.direction.y==="down"){this.myEffect.start({"margin-top":-this.height}).chain(function(){this.childMenu.style.display="none"}.bind(this))}else{if(this.subMenuType=="initial"&&this.options.orientation==="horizontal"&&this.options.direction.y==="up"){this.myEffect.start({"margin-top":this.height}).chain(function(){this.childMenu.style.display="none"}.bind(this))}else{if(this.options.direction.x==="right"){this.myEffect.start({"margin-left":-this.width}).chain(function(){this.childMenu.style.display="none"}.bind(this))}else{if(this.options.direction.x==="left"){this.myEffect.start({"margin-left":this.width}).chain(function(){this.childMenu.style.display="none"}.bind(this))}}}}}else{if(this.options.effect=="fade"){this.myEffect.start({opacity:0}).chain(function(){this.childMenu.style.display="none"}.bind(this))}else{if(this.options.effect=="slide & fade"){if(this.subMenuType=="initial"&&this.options.orientation==="horizontal"&&this.options.direction.y==="down"){this.myEffect.start({"margin-top":-this.height,opacity:0}).chain(function(){this.childMenu.style.display="none"}.bind(this))}else{if(this.subMenuType=="initial"&&this.options.orientation==="horizontal"&&this.options.direction.y==="up"){this.myEffect.start({"margin-top":this.height,opacity:0}).chain(function(){this.childMenu.style.display="none"}.bind(this))}else{if(this.options.direction.x==="right"){this.myEffect.start({"margin-left":-this.width,opacity:0}).chain(function(){this.childMenu.style.display="none"}.bind(this))}else{if(this.options.direction.x==="left"){this.myEffect.start({"margin-left":this.width,opacity:0}).chain(function(){this.childMenu.style.display="none"}.bind(this))}}}}}else{this.childMenu.style.display="none"}}}this.childMenu.store("status","closed");this.options.onHideSubMenu_complete(this)},hideOtherSubMenus:function(){this.options.onHideOtherSubMenus_begin(this);if(!this.btn.retrieve("otherSubMenus")){this.btn.store("otherSubMenus",$$(this.root.allSubMenus.filter(function(A){return !this.btn.retrieve("parentSubMenus").contains(A)&&A!=this.childMenu}.bind(this))))}this.parentSubMenus.fireEvent("show");this.btn.retrieve("otherSubMenus").fireEvent("hide");this.options.onHideOtherSubMenus_complete(this)},hideAllSubMenus:function(){this.options.onHideAllSubMenus_begin(this);$clear(this.root.hideAllMenusTimeout);this.root.hideAllMenusTimeout=(function(){$clear(this.hideAllMenusTimeout);$$(this.root.allSubMenus).fireEvent("hide")}).bind(this).delay(this.options.hideDelay);this.options.onHideAllSubMenus_complete(this)},cancellHideAllSubMenus:function(){$clear(this.root.hideAllMenusTimeout)},showSubMenu:function(A){if(this.childMenu.retrieve("status")==="open"){return }this.options.onShowSubMenu_begin(this);if(this.subMenuType=="initial"){$(this.btn).removeClass("mainMenuParentBtn");$(this.btn).addClass("mainMenuParentBtnFocused")}else{$(this.btn).removeClass("subMenuParentBtn");$(this.btn).addClass("subMenuParentBtnFocused")}this.root.subMenuZindex++;this.childMenu.setStyles({display:"block",visibility:"hidden","z-index":this.root.subMenuZindex});if(!this.width||!this.height){this.width=this.childMenu.getFirst().getCoordinates().width;this.height=this.childMenu.getFirst().getCoordinates().height;this.childMenu.setStyle("height",this.height,"border");if(this.options.effect==="slide"||this.options.effect==="slide & fade"){if(this.subMenuType=="initial"&&this.options.orientation==="horizontal"){this.childMenu.getFirst().setStyle("margin-top","0");if(this.options.direction.y==="down"){this.myEffect.set({"margin-top":-this.height})}else{if(this.options.direction.y==="up"){this.myEffect.set({"margin-top":this.height})}}}else{if(this.options.direction.x==="left"){this.myEffect.set({"margin-left":this.width})}else{this.myEffect.set({"margin-left":-this.width})}}}}this.matchWidth();this.positionSubMenu();if(this.options.effect==="slide"){this.childMenu.setStyles({display:"block",visibility:"visible"});if(this.subMenuType==="initial"&&this.options.orientation==="horizontal"){if(A){this.myEffect.set({"margin-top":0}).chain(function(){this.showSubMenuComplete()}.bind(this))}else{this.myEffect.start({"margin-top":0}).chain(function(){this.showSubMenuComplete()}.bind(this))}}else{if(A){this.myEffect.set({"margin-left":0}).chain(function(){this.showSubMenuComplete()}.bind(this))}else{this.myEffect.start({"margin-left":0}).chain(function(){this.showSubMenuComplete()}.bind(this))}}}else{if(this.options.effect==="fade"){if(A){this.myEffect.set({opacity:this.options.opacity}).chain(function(){this.showSubMenuComplete()}.bind(this))}else{this.myEffect.start({opacity:this.options.opacity}).chain(function(){this.showSubMenuComplete()}.bind(this))}}else{if(this.options.effect=="slide & fade"){this.childMenu.setStyles({display:"block",visibility:"visible"});this.childMenu.getFirst().setStyles({left:0});if(this.subMenuType==="initial"&&this.options.orientation==="horizontal"){if(A){this.myEffect.set({"margin-top":0,opacity:this.options.opacity}).chain(function(){this.showSubMenuComplete()}.bind(this))}else{this.myEffect.start({"margin-top":0,opacity:this.options.opacity}).chain(function(){this.showSubMenuComplete()}.bind(this))}}else{if(A){if(this.options.direction.x==="right"){this.myEffect.set({"margin-left":0,opacity:this.options.opacity}).chain(function(){this.showSubMenuComplete()}.bind(this))}else{if(this.options.direction.x==="left"){this.myEffect.set({"margin-left":0,opacity:this.options.opacity}).chain(function(){this.showSubMenuComplete()}.bind(this))}}}else{if(this.options.direction.x==="right"){this.myEffect.set({"margin-left":-this.width,opacity:this.options.opacity});this.myEffect.start({"margin-left":0,opacity:this.options.opacity}).chain(function(){this.showSubMenuComplete()}.bind(this))}else{if(this.options.direction.x==="left"){this.myEffect.start({"margin-left":0,opacity:this.options.opacity}).chain(function(){this.showSubMenuComplete()}.bind(this))}}}}}else{this.childMenu.setStyles({display:"block",visibility:"visible"}).chain(function(){this.showSubMenuComplete(this)}.bind(this))}}}this.childMenu.store("status","open")},showSubMenuComplete:function(){this.options.onShowSubMenu_complete(this)},positionSubMenu:function(){this.options.onPositionSubMenu_begin(this);this.childMenu.setStyle("width",this.width);this.childMenu.getFirst().setStyle("width",this.width);if(this.subMenuType==="subsequent"){if(this.parentSubMenu&&this.options.direction.x!=this.parentSubMenu.options.direction.x){if(this.parentSubMenu.options.direction.x==="left"&&this.options.effect&&this.options.effect.contains("slide")){this.myEffect.set({"margin-left":this.width})}}this.options.direction.x=this.parentSubMenu.options.direction.x;this.options.direction.xInverse=this.parentSubMenu.options.direction.xInverse;this.options.direction.y=this.parentSubMenu.options.direction.y;this.options.direction.yInverse=this.parentSubMenu.options.direction.yInverse}var C;var A;if(this.subMenuType=="initial"){if(this.options.direction.y==="up"){if(this.options.orientation==="vertical"){C=this.btn.getCoordinates().bottom-this.height+this.options.tweakInitial.y}else{C=this.btn.getCoordinates().top-this.height+this.options.tweakInitial.y}this.childMenu.style.top=C+"px"}else{if(this.options.orientation=="horizontal"){this.childMenu.style.top=this.btn.getCoordinates().bottom+this.options.tweakInitial.y+"px"}else{if(this.options.orientation=="vertical"){C=this.btn.getPosition().y+this.options.tweakInitial.y;if((C+this.childMenu.getSize().y)>=$(document.body).getScrollSize().y){A=(C+this.childMenu.getSize().y)-$(document.body).getScrollSize().y;C=C-A-20}this.childMenu.style.top=C+"px"}}}if(this.options.orientation=="horizontal"){this.childMenu.style.left=this.btn.getPosition().x+this.options.tweakInitial.x+"px"}else{if(this.options.direction.x=="left"){this.childMenu.style.left=this.btn.getPosition().x-this.childMenu.getCoordinates().width+this.options.tweakInitial.x+"px"}else{if(this.options.direction.x=="right"){this.childMenu.style.left=this.btn.getCoordinates().right+this.options.tweakInitial.x+"px"}}}}else{if(this.subMenuType=="subsequent"){if(this.options.direction.y==="down"){if((this.btn.getCoordinates().top+this.options.tweakSubsequent.y+this.childMenu.getSize().y)>=$(document.body).getScrollSize().y){A=(this.btn.getCoordinates().top+this.options.tweakSubsequent.y+this.childMenu.getSize().y)-$(document.body).getScrollSize().y;this.childMenu.style.top=(this.btn.getCoordinates().top+this.options.tweakSubsequent.y)-A-20+"px"}else{this.childMenu.style.top=this.btn.getCoordinates().top+this.options.tweakSubsequent.y+"px"}}else{if(this.options.direction.y==="up"){if((this.btn.getCoordinates().bottom-this.height+this.options.tweakSubsequent.y)<1){this.options.direction.y="down";this.options.direction.yInverse="up";this.childMenu.style.top=this.btn.getCoordinates().top+this.options.tweakSubsequent.y+"px"}else{this.childMenu.style.top=this.btn.getCoordinates().bottom-this.height+this.options.tweakSubsequent.y+"px"}}}if(this.options.direction.x=="left"){this.childMenu.style.left=this.btn.getCoordinates().left-this.childMenu.getCoordinates().width+this.options.tweakSubsequent.x+"px";if(this.childMenu.getPosition().x<0){this.options.direction.x="right";this.options.direction.xInverse="left";this.childMenu.style.left=this.btn.getPosition().x+this.btn.getCoordinates().width+this.options.tweakSubsequent.x+"px";if(this.options.effect==="slide"||this.options.effect==="slide & fade"){this.myEffect.set({"margin-left":-this.width,opacity:this.options.opacity})}}}else{if(this.options.direction.x=="right"){this.childMenu.style.left=this.btn.getCoordinates().right+this.options.tweakSubsequent.x+"px";var D=this.childMenu.getCoordinates().right;var B=document.getCoordinates().width+window.getScroll().x;if(D>B){this.options.direction.x="left";this.options.direction.xInverse="right";this.childMenu.style.left=this.btn.getCoordinates().left-this.childMenu.getCoordinates().width+this.options.tweakSubsequent.x+"px";if(this.options.effect==="slide"||this.options.effect==="slide & fade"){this.myEffect.set({"margin-left":this.width,opacity:this.options.opacity})}}}}}}this.options.onPositionSubMenu_complete(this)}});

var SlidingTabs = new Class({

	Implements : [Events, Options],

	options: {
		startingSlide: 'destination', // sets the slide to start on, either an element or an id 
		activeButtonClass: 'active', // class to add to selected button
		disableButtonClass: 'disable', // class to add to selected button
		activationEvent: 'click', // you can set this to mouseover or whatever you like
		wrap: true, // calls to previous() and next() should wrap around?
		slideEffect: { // options for effect used to animate the sliding, see Fx.Base in mootools docs
		  duration: 800,
		  onComplete:function() {
			this.Externalfunc(this);
		  }.bind(this)
		},
		animateHeight: true, // animate height of container
		scrollToContent: true, // positionning the top
		rightOversized: 0, // how much of the next pane to show to the right of the current pane
		onBeforeClick: Class.empty,
		flaw:true, // keep events roll
		onComplete: Class.empty,
	},


	current: null, // zero based current pane number, read only
	buttons: false,
	outerSlidesBox: null,
	innerSlidesBox: null,
	panes: null,
	fx: null, // this one animates the scrolling inside
	heightFx: null, // this one animates the height
	resizeMarker:false,
	
	
	initialize: function(buttonContainer, slideContainer, options) {
		//if (buttonContainer) { this.buttons = $(buttonContainer).getChildren(''); }
		if (buttonContainer) { this.buttons = $$(buttonContainer); }
		this.outerSlidesBox = $(slideContainer);
		this.innerSlidesBox = this.outerSlidesBox.getFirst();
		this.panes = this.innerSlidesBox.getChildren();
		this.setOptions(options);
		
		//this.fx = new Fx.Scroll(this.outerSlidesBox, this.options.slideEffect);
		this.fx = new Fx.Scroll(this.outerSlidesBox, {
		  duration: 800, // 0.4 of a second
		  onComplete:function() {
			this.complete();
		  }.bind(this)
		});
	
		this.heightFx = this.outerSlidesBox.set('height', this.options.slideEffect);
		// set up button highlight
		this.options.startingSlide=$(this.options.startingSlide) ? this.options.startingSlide : this.panes[0].get('id');
		//this.current = this.options.startingSlide ? this.panes.indexOf($(this.options.startingSlide)) : 0;

		this.current = ($(this.options.startingSlide)) ? this.panes.indexOf($(this.options.startingSlide)) : 0;
		if (this.buttons) { this.buttons[this.current].addClass(this.options.activeButtonClass); }
		
		// add needed stylings
		this.outerSlidesBox.setStyle('overflow', 'hidden');
		this.panes.each(function(pane, index) {
		  pane.setStyles({
		   'float': 'left',
		   'overflow': 'hidden'
		  });
		}.bind(this));
		
		// stupidness to make IE work - it boggles the mind why this has any effect
		// maybe it's something to do with giving it layout?
		this.innerSlidesBox.setStyle('float', 'left');
		
		if (this.options.startingSlide) this.fx.toElement(this.options.startingSlide);
	
		// let's init the slideshow
		if(this.options.startingSlide=='destination') {
			var destimgs=$$('#destination div.previewer div.viewer img');
			if(destimgs.length>0) {
				this.destslide = new viewer($$('#destination div.previewer div.viewer img'),{
					mode: 'alpha',
					interval: 2000
				}).play(true);
			}
			// let's check if enough images for a slideshow //
			var actimgs=$$('#action div.previewer div.viewer img');
			if(actimgs.length>0) {
				this.actslide = new viewer($$('#action div.previewer div.viewer img'),{
					mode: 'alpha',
					interval: 2000
				}).play(false);
			}
		}
		// add events to the buttons
		if (this.buttons) this.buttons.each( function(button) {
		  button.addEvent(this.options.activationEvent, this.buttonEventHandler.bindWithEvent(this, button));
		}.bind(this));
		
		if (this.options.animateHeight) {
			this.heightFx.tween('height',this.panes[this.current].offsetHeight); 
			//this.heightFx.set(this.panes[this.current].offsetHeight);
		}
		
		// set up all the right widths inside the panes
		this.recalcWidths();
	},

	Externalfunc:function(slideObject) {
		//console.log(slideObject);
		/*
		if(this.options.startingSlide=='destination') {
			if(slideObject.current==0 ) {
				this.destslide.play(true);
			}
			else {
				this.destslide.play(false);
				//this.destslide.setOptions({autoplay:false});
			}
			if(slideObject.current==1) {
				this.actslide.play(true);
			}
			else {
				this.actslide.play(false);
			}
		}
		*/
	},
 
	start:function(button) {
		this.fireEvent('onBeforeClick', this);
		if(this.options.flaw) {
			this.changeTo(this.panes[this.buttons.indexOf($(button))]);
		}
	},

	complete:function() {
		this.fireEvent('onComplete');
	},


  // to change to a specific tab, call this, argument is the pane element you want to switch to.
	changeTo: function(element, animate) {
	
		if ($type(element) == 'number') element = this.panes[element - 1];
		if (!$defined(animate)) animate = true;
		var event = { cancel: false, target: $(element), animateChange: animate };
		this.fireEvent('change', event);
		if (event.cancel == true) { return; };
	 
		if (this.buttons) { this.buttons[this.current].removeClass(this.options.activeButtonClass); };
	 
		this.current = this.panes.indexOf($(event.target));

		if(this.current==this.panes.indexOf($('diaporama'))) {
			if($('spotssp')) {
				$('spotssp').setStyle('visibility', 'visible');
			}
		}
		else {
			if($('spotssp'))
				$('spotssp').setStyle('visibility', 'hidden');
		}
		var oldHeight = this.outerSlidesBox.getStyle('height');
		this.panes[this.current].setStyle('display','block');
		var oldHeight = this.outerSlidesBox.setStyle('height', oldHeight);
		
		if (this.buttons) { this.buttons[this.current].addClass(this.options.activeButtonClass); };
	 
		this.fx.cancel();
		if (event.animateChange) {
		  this.fx.toElement(event.target);
		} else {
		  this.outerSlidesBox.scrollTo(this.current * this.outerSlidesBox.offsetWidth.toInt(), 0);
		}
	
		/*
		if(element.current==0) {
		}
		else {
			//var destviewer=$$('#destination div.previewer div.viewer');
			//destviewer[0].getElements('img').map(function(el) { el.setStyles({'display':'none', 'position': 'static'}); });
			//destviewer.fade(0);
		}
		if(element.current==1) {
		}
		else {
			//var actviewer=$$('#plongee div.previewer div.viewer');
			//actviewer[0].getElements('img').map(function(el) { el.setStyles({'display':'none', 'position': 'static'}); });
			//actviewer.fade(0);
		}
		*/
		if (this.options.animateHeight) {
		   // this.heightFx.tween('height',this.panes[this.current].offsetHeight);
			this.heightFx.set('tween', { onComplete: function() {
				if((this.current==this.panes.indexOf($('diaporama')) || this.current==this.panes.indexOf($('tarifs'))) && Browser.Engine.gecko) {
					window.resizeBy(-1,0)
					this.resizeMarker=true;
				}
				else if(this.resizeMarker==true) {
					window.resizeBy(+1,0)
					this.resizeMarker=false;
				}
			}.bind(this).delay(1000, this)});
			this.heightFx.tween('height',this.panes[this.current].offsetHeight); 
		}
		
		// let's write a cookie for activities panes
		if($('activity')) {
			if(Cookie.read('acttabs')) {
				Cookie.dispose('acttabs');
			}
			var TabsCookie=Cookie.write('acttabs', this.panes[this.current].get("id"), {duration:360, path:'/'})
		}

		if($('dest')) {
			if(this.current!=this.panes.indexOf($('contact'))) {
				$('switch').getFirst('a').fade(0);
			}
			else {
				if(this.current=this.panes.indexOf($('contact')) ) {
					if($('contact').getFirst('h3').getStyle('display')=='none') {
						$('switch').getFirst('a').fade(1);
					}
				}
			}
		}

	  },

	accordHeight: function(element) {
		this.checkheight.delay(500, this, element);
	},

	checkheight : function(ele) {
		if($('activity')) {
			var AdjustHeight = this.outerSlidesBox.set('height', this.options.slideEffect);
			AdjustHeight.set('tween');
			if($chk(ele.getParent('div#sejours'))) {
					AdjustHeight.tween('height',$('sejours').getElement('div.seasons').getSize().y);
			}
			if($chk(ele.getParent('div#countrylist'))) {
				if($('countrylist').getSize().y>$('gmapcanvas').getSize().y) {
					AdjustHeight.tween('height',($('countrylist').getSize().y));
				}
			}
		}
		else {
			if(this.panes[this.current].getProperty("id")=='hebergement') {
				var multiply=$$('h3.resorts').length;
			}
			else if((this.panes[this.current].getProperty("id")=='contact')) {
				var multiply=$$('h3.frmslt').length;
			}
			else {
				var multiply=$$('h3.infos').length;
			}
			var AdjustHeight = this.outerSlidesBox.set('height', this.options.slideEffect);
			AdjustHeight.set('tween');
			AdjustHeight.tween('height',($(ele).getSize().y+(30*multiply))); 
		}
	},

	// Handles a click
	buttonEventHandler: function(event, button) {
		if (event.target == this.buttons[this.current]) return;
		event.preventDefault();
		//event.stop();
		if(this.options.scrollToContent) {
			var contentscroll=new Fx.Scroll(window, {duration:1250,transition : Fx.Transitions.Quint.easeOut}).toElement('content').start();
		}
		this.start(button, this);
	},
	  
	// call this to go to the next tab
	next: function() {
	  var next = this.current + 1;
	  if (next == this.panes.length) {
		if (this.options.wrap == true) { next = 0 } else { return }
	  }
	  
	  this.changeTo(this.panes[next]);
	},
	  
	// to go to the previous tab
	previous: function() {
	  var prev = this.current - 1
	  if (prev < 0) {
		if (this.options.wrap == true) { prev = this.panes.length - 1 } else { return }
	  }
	  
	  this.changeTo(this.panes[prev]);
	},
	
	jumpto : function(name) {
	  var num=this.panes.indexOf($(name));
	  this.changeTo(this.panes[num]);
	},
	  
	// call this if the width of the sliding tabs container changes to get everything in line again
	recalcWidths: function() {
	//console.log(this.innerSlidesBox.getFirst('div.panes').getStyle('width').toInt());
	  this.panes.each(function(pane, index) {
		//pane.setStyle('width', this.outerSlidesBox.offsetWidth.toInt() - this.options.rightOversized + 'px');
		pane.setStyles({'width': this.innerSlidesBox.getFirst('div.panes').getStyle('width'), 'overflow': 'auto'});
	  }.bind(this));
	  
	  this.innerSlidesBox.setStyle(
		//'width', (this.outerSlidesBox.offsetWidth.toInt() * this.panes.length) + 'px'
		'width', (this.innerSlidesBox.getFirst('div.panes').getStyle('width').toInt() * this.panes.length) + 'px'
	  );
	  // fix positioning
	  if (this.current > 0) {
		this.fx.cancel();
		this.outerSlidesBox.scrollTo(this.current * this.outerSlidesBox.offsetWidth.toInt(), 0);
	  }
	}

});

var SlidingTabsIE7 = new Class({

	Implements : [Events, Options],

	options: {
		startingSlide: 'destination', // sets the slide to start on, either an element or an id 
		activeButtonClass: 'active', // class to add to selected button
		activationEvent: 'click', // you can set this to mouseover or whatever you like
		wrap: true, // calls to previous() and next() should wrap around?
		slideEffect: { // options for effect used to animate the sliding, see Fx.Base in mootools docs
		  duration: 800,
		  onComplete:function() {
			this.Externalfunc(this);
		  }.bind(this)
		},
		animateHeight: true, // animate height of container
		rightOversized: 0 // how much of the next pane to show to the right of the current pane
	},

	current: null, // zero based current pane number, read only
	buttons: false,
	outerSlidesBox: null,
	innerSlidesBox: null,
	panes: null,
	scrollingFx: null, // this one animates the scrolling inside
	heightFx: null, // this one animates the height
	resizeMarker:false,
	
	
	initialize: function(buttonContainer, slideContainer, options) {

		if (buttonContainer) { this.buttons = $$(buttonContainer); }
		this.outerSlidesBox = $(slideContainer); /*contentFrame*/
		this.innerSlidesBox = this.outerSlidesBox.getFirst(); /*slideContainer*/
		this.panes = this.innerSlidesBox.getChildren();
		this.setOptions(options);
		this.start = $(this.options.startingSlide);

		this.scrollingFx = new Fx.Scroll(this.outerSlidesBox, {
		  duration: 800, // 0.4 of a second
		  onComplete:function() {
			this.Externalfunc(this);
		  }.bind(this)
		});

    	this.innerSlidesBox.setStyle('width', (this.outerSlidesBox.offsetWidth.toInt() * this.panes.length) + 'px');

		this.buttons.each( function(button) {
	      button.addEvent(this.options.activationEvent, this.buttonEventHandler.bindWithEvent(this, button));
    	}.bind(this));

    	this.positions = new Array(this.panes.length);

		if(this.start!= null){
			this.start.setStyle('display', 'block');
		}
		this.outerSlidesBox.setStyle('height', this.outerSlidesBox.offsetHeight);

		//fuckin IE (7?) does not comes along with this position-stuff after one scroll - therefor i store the positions before first scroll!
    	var i = 0;
		this.panes.each(function(pane){
			pane.setStyle('display','block');
			this.positions[i] = pane.getPosition(this.innerSlidesBox);
			i++;
		}.bind(this));
		
		if(this.start!= null){
			this.outerSlidesBox.scrollTo(this.start.getPosition(this.innerSlidesBox).x, this.start.getPosition(this.innerSlidesBox).y);
		}

		this.current = this.options.startingSlide ? this.panes.indexOf(this.start) : 0;
		if (this.buttons) { this.buttons[this.current].addClass(this.options.activeButtonClass); }

		/*
		if(this.options.startingSlide=='destination') {
			var destimgs=$$('#destination div.previewer div.viewer img');
			if(destimgs.length>0) {
				this.destslide = new viewer($$('#destination div.previewer div.viewer img'),{
					mode: 'alpha',
					interval: 2000
				}).play(true);
			}
			// let's check if enough images for a slideshow //
			var actimgs=$$('#action div.previewer div.viewer img');
			if(actimgs.length>0) {
				this.actslide = new viewer($$('#action div.previewer div.viewer img'),{
					mode: 'alpha',
					interval: 2000
				}).play(false);
			}
		}
		*/

		/*

		// set up all the right widths inside the panes
		//this.recalcWidths();
		*/
	},
  
	Externalfunc:function(slideObject) {
		//console.log(slideObject);
	},
 
  // to change to a specific tab, call this, argument is the pane element you want to switch to.
	changeTo: function(element) {

		// i need to retrieve console.log(element);
		var button=this.buttons[this.panes.indexOf($(element))];

		this.buttons[this.current].removeClass(this.options.activeButtonClass);
		this.current = this.buttons.indexOf($(button));			
		this.buttons[this.current].addClass(this.options.activeButtonClass);

		this.scrollingFx.cancel();
		this.scrollingFx.start(this.positions[this.buttons.indexOf($(button))].x,this.positions[this.buttons.indexOf($(button))].y);
		this.outerSlidesBox.tween('height',this.panes[this.current].offsetHeight);

		if(this.current==this.panes.indexOf($('diaporama'))) {
			if($('spotssp')) {
				$('spotssp').setStyle('visibility', 'visible');
				//Swiff.remote(so.toElement(), 'sspLoadAlbum', 1);
			
			}
		}
		else {
			if($('spotssp'))
				$('spotssp').setStyle('visibility', 'hidden');
		}
		if(this.current==this.panes.indexOf($('action'))) {

		}
		if($('dest')) {
			if(this.current!=this.panes.indexOf($('contact'))) {
				$('switch').getFirst('a').fade(0);
			}
		}
		// let's write a cookie for activities panes
		if($('activity')) {
			if(Cookie.read('acttabs')) {
				Cookie.dispose('acttabs');
			}
			var TabsCookie=Cookie.write('acttabs', this.panes[this.current].get("id"), {duration:360, path:'/'})
		}
	  },

	accordHeight: function(element) {
		this.checkheight.delay(500, this, element);
	},

	checkheight : function(ele) {
		if($('activity')) {
			if($('countrylist').getSize().y>$('gmapcanvas').getSize().y) {
				var AdjustHeight = this.outerSlidesBox.set('height', this.options.slideEffect);
				AdjustHeight.set('tween');
				AdjustHeight.tween('height',($('countrylist').getSize().y));
			}
		}
		else {
			if(this.panes[this.current].getProperty("id")=='hebergement') {
				var multiply=$$('h3.resorts').length;
			}
			else if((this.panes[this.current].getProperty("id")=='contact')) {
				var multiply=$$('h3.frmslt').length;
			}
			else {
				var multiply=$$('h3.infos').length;
			}
			var AdjustHeight = this.outerSlidesBox.set('height', this.options.slideEffect);
			AdjustHeight.set('tween');
			AdjustHeight.tween('height',($(ele).getSize().y+(30*multiply))); 
		}
	},

	// Handles a click
	buttonEventHandler: function(event, button) {
		event.stop();
		if (this.current == this.buttons.indexOf($(button))){
			return;
		}else{
			this.changeTo(this.panes[this.buttons.indexOf($(button))]);
		}
    },

	// call this to go to the next tab
	next: function() {
		var next = this.current + 1;
		if (next == this.panes.length) {
		  if (this.options.wrap == true) { next = 0 } else { return }
		}
		this.changeTo(this.panes[next]);
	},
	  
	// to go to the previous tab
	previous: function() {
		var prev = this.current - 1
		if (prev < 0) {
		  if (this.options.wrap == true) { prev = this.panes.length - 1 } else { return }
		}
		
		this.changeTo(this.panes[prev]);
	},
	
	jumpto : function(name) {
		var num=this.panes.indexOf($(name));
		this.changeTo(this.panes[num]);
	},
	  
	// call this if the width of the sliding tabs container changes to get everything in line again
	recalcWidths: function() {
		this.panes.each(function(pane, index) {
		  pane.setStyles({'width': '905px', 'overflow': 'auto'});
		}.bind(this));
		
		this.innerSlidesBox.setStyle(
		  'width', (905 * this.panes.length) + 'px'
		);
		// fix positioning
		if (this.current > 0) {
		  this.fx.cancel();
		  this.outerSlidesBox.scrollTo(this.current * this.outerSlidesBox.offsetWidth.toInt(), 0);
		}
	}

})

var Broowser = new Class ({

	Implements: [Events, Options],
	
	options: {
		pos: 0,
		offset: 582, //291
		groupby : 1,
		curslide: 1,
		elementstocount : 'dl',
		previous : null,
		next : null,
		duration:650,
		transition : Fx.Transitions.Expo.easeOut,
		imgscroll :null,
		ulthumbs:null,
		ulid:null,
		thumblis:null
	},

	initialize: function(container, wrapper, parent, options) {
		this.parent=parent;
		this.wrapper=wrapper;
		this.setOptions(options);
		this.previous=this.options.previous;
		this.next=this.options.next;
		this.next.removeEvents();
		this.previous.removeEvents();
		this.slides=Math.ceil((container.getElements(this.options.elementstocount).length)/this.options.groupby);

		this.imgscroll = new Fx.Scroll(this.wrapper, {
			offset: {'x': this.options.pos, 'y': this.options.offset},
			duration:this.options.duration,
			transition: this.options.transition
		});
		// let's perform some ignitions...
		this.imgscroll.set(0,0);
		this.options.next.fade(1);
		//this.broowse(this.imgscroll, this.options.next, this.options.previous, this.slides);
		this.broowse(this.imgscroll,this.slides);

	},

	broowse : function(scroller, slides) {

		var curslide=this.options.curslide;
		var pos=this.options.pos;
		var offset=this.options.offset;
		if (curslide==1) {
			this.options.previous.fade(0);
		}
		if (curslide==(slides)) {
			this.options.next.fade(0);
		}
		this.options.previous.addEvent('click', function(event) { 
			event = new Event(event).stop();
			curslide--;
			pos += -(offset);
			scroller.start(pos);
			if(curslide == 1) {
				this.options.previous.fade(0);
			}
			if(curslide == slides-1) {
				this.options.next.fade(1);
			}
		}.bind(this));
		this.options.next.addEvent('click', function(event) {
			event = new Event(event).stop();
			if(curslide >= slides) return;
			if(curslide == 1) {
				this.options.previous.fade(1); 
			}
			curslide++;
			pos += offset;
			scroller.start(pos);
			if(curslide == slides) {
				this.options.next.fade(0); 
				return;
			}
		}.bind(this));
	}
});

var MenuList = new Class({
	
	Implements: [Events, Options],
	
	options: {
	},
	
	initialize: function(menu, options) {
		var that = this;
		this.setOptions(options);
		this.menu = menu;
		this.menuitems = this.menu.getChildren();
		this.menuitems.addEvents({
			click: function(ev){ that.click(ev, this); }
		});
		this.setCurrent(this.menu.getFirst('li'));
	},

	click: function(ev, item) {
		this.setCurrent(item, true);
		this.fireEvent('onClick', [ev, item]);
	},

	setCurrent: function(el, effect){  
		if(this.current) {
			var accurrent=this.current.getElement('a').removeClass('current');
			this.current.removeClass('current');
		}
		if(el) {
			var accurrent=el.getElement('a').addClass('current');
			this.current = el;
		}
		return this;
	}
});

var Slideshow = new Class({

	Extends: MenuList,
  
	options: {
	  auto: false,
	  autostart: false,
	  autointerval: 5000,
	  transition: 'fade',
	  tween: { duration: 700 }
	},
  
	initialize: function(menu, images, loader, options) {
		this.parent(menu, options);
		this.loader=loader;
		this.images=images;
		this.imagesitems = this.images.getChildren().fade('hide');
		this.setOptions(options);
		loader.fade('in');
		new Asset.images(this.images.getElements('img').map(function(el) { return el.setStyles({'display':'none', 'position' : 'static'}).get('src'); }), { onComplete: function() {
			this.loaded = true;
			loader.fade('out');
			if (this.options.auto && this.options.autostart)  this.walk();
			if(this.current)  this.show(this.menuitems.indexOf(this.current));
		}.bind(this) });
	},

	auto: function(){
		if (!this.options.auto) return false;
		$clear(this.autotimer);
		this.autotimer = this.walk.delay(this.options.autointerval, this);
	},

	click: function(ev, item) {
		this.parent(ev, item);
		this.options.auto = false;
		ev.stop();
		this.show(this.menuitems.indexOf(item));
		$clear(this.autotimer);
	},

	show: function(index) {
		if(!this.loaded)  return;
		var image = this.imagesitems[index];
		if(image == this.curimage) return;
		image.dispose().fade('hide').inject(this.curimage || this.images.getFirst(), this.curimage ? 'after' : 'before').fade('in');
		image.getElement('img').setStyles({'position':'absolute', 'display' : 'block'});
		//$pick(this.curimage, image).get('tween').chain(function() { 
		image.get('tween').chain(function() { 
			this.auto();
			this.fireEvent('show', image); 
		}.bind(this));
		this.curimage = image;
		this.setCurrent(this.menuitems[index]);
		return this;
	},
  
	walk: function(){
		var curindex = this.imagesitems.indexOf(this.curimage);
		this.show((this.curimage && (curindex + 1 < this.imagesitems.length)) ? curindex + 1 : 0);
	}

});

/**
 * SqueezeBox - Expandable Lightbox
 *
 * Allows to open various content as modal,
 * centered and animated box.
 *
 * Dependencies: MooTools 1.2 trunk (04/2008)
 *
 * Inspired by
 *  ... Lokesh Dhakar	- The original Lightbox v2
 *
 * @version		1.1 rc2
 *
 * @license		MIT-style license
 * @author		Harald Kirschner <mail [at] digitarald.de>
 * @copyright	Author
 */
var SqueezeBox = {

	presets: {
		size: {x: 600, y: 450},
		sizeLoading: {x: 200, y: 150},
		marginInner: {x: 20, y: 20},
		marginImage: {x: 50, y: 75},
		handler: false,
		target: null,
		closable: true,
		closeBtn: true,
		zIndex: 65555,
		overlayOpacity: 0.7,
		classWindow: '',
		classOverlay: '',
		overlayFx: {},
		resizeFx: {},
		contentFx: {},
		parse: false, // 'rel'
		parseSecure: false,
		ajaxOptions: {},
		onOpen: $empty,
		onClose: $empty,
		onUpdate: $empty,
		onResize: $empty,
		onMove: $empty,
		onShow: $empty,
		onHide: $empty
	},

	initialize: function(presets) {
		if (this.options) return this;
		this.presets = $merge(this.presets, presets);
		this.options = {};
		this.setOptions(this.presets).build();
		this.bound = {
			window: this.reposition.bind(this, [null]),
			scroll: this.checkTarget.bind(this),
			close: this.close.bind(this),
			key: this.onKey.bind(this)
		};
		this.isOpen = this.isLoading = false;
		return this;
	},

	build: function() {
		this.overlay = new Element('div', {
			id: 'sbox-overlay',
			styles: {display: 'none', zIndex: this.options.zIndex}
		});
		this.content = new Element('div', {id: 'sbox-content'});
		this.closeBtn = new Element('a', {id: 'sbox-btn-close', href: '#'});
		this.win = new Element('div', {
			id: 'sbox-window',
			styles: {display: 'none', zIndex: this.options.zIndex + 2}
		}).adopt(this.closeBtn, this.content);
		this.fx = {
			overlay: new Fx.Tween(this.overlay, $merge({
				property: 'opacity',
				onStart: Events.prototype.clearChain,
				duration: 250,
				link: 'cancel'
			}, this.options.overlayFx)).set(0),
			win: new Fx.Morph(this.win, $merge({
				onStart: Events.prototype.clearChain,
				unit: 'px',
				duration: 750,
				transition: Fx.Transitions.Quint.easeOut,
				link: 'cancel',
				unit: 'px'
			}, this.options.resizeFx)),
			content: new Fx.Tween(this.content, $merge({
				property: 'opacity',
				duration: 250,
				link: 'cancel'
			}, this.options.contentFx)).set(0)
		};
		$(document.body).adopt(this.overlay, this.win);
	},

	assign: function(to, options) {
		return to.addEvent('click', function() {
			return !SqueezeBox.fromElement(this, options);
		});
	},

	fromElement: function(from, options) {
		this.initialize();
		if (this.element) this.trash();
		this.element = $(from);
		this.setOptions($merge(this.presets, options || {}));
		if (this.element && this.options.parse) {
			var obj = this.element.getProperty(this.options.parse);
			if (obj && (obj = JSON.decode(obj, this.options.parseSecure))) this.setOptions(obj);
		}
		this.assignOptions();
		this.url = ((this.element) ? (this.options.url || this.element.get('href')) : from) || '';
		var handler = this.options.handler;
		if (handler) return this.setContent(handler, this.parsers[handler].call(this, true));
		var ret = false;
		this.parsers.some(function(parser, key) {
			var content = parser.call(this);
			if (content) {
				ret = this.setContent(key, content);
				return true;
			}
			return false;
		}, this);
		return ret;
	},

	assignOptions: function() {
		this.overlay.set('class', this.options.classOverlay);
		this.win.set('class', this.options.classWindow);
		if (Browser.Engine.trident4) this.win.addClass('sbox-window-ie6');
	},

	close: function(e) {
		var stoppable = ($type(e) == 'event');
		if (stoppable) e.stop();
		if (!this.isOpen || (stoppable && !$lambda(this.options.closable).call(this, e))) return this;
		this.fx.overlay.start(0).chain(this.toggleOverlay.bind(this));
		this.win.setStyle('display', 'none');
		this.trash();
		this.toggleListeners();
		this.isOpen = false;
		this.fireEvent('onClose', [this.content]);
		return this;
	},

	trash: function() {
		this.element = this.asset = null;
		this.options = {};
		this.removeEvents().setOptions(this.presets).callChain();
	},

	onError: function() {
		this.asset = null;
		this.setContent('string', 'Error during loading');
	},

	setContent: function(handler, content) {
		if (!this.handlers[handler]) return false;
		this.content.className = 'sbox-content-' + handler;
		this.applyTimer = this.applyContent.delay(this.fx.overlay.options.duration, this, this.handlers[handler].call(this, content));
		if (this.overlay.retrieve('opacity')) return this;
		this.toggleOverlay(true);
		this.fx.overlay.start(this.options.overlayOpacity);
		return this.reposition();
	},

	applyContent: function(content, size) {
		this.applyTimer = $clear(this.applyTimer);
		this.hideContent();
		if (!content) {
			this.toggleLoading(true);
		} else {
			if (this.isLoading) this.toggleLoading(false);
			this.fireEvent('onUpdate', [this.content], 20);
		}
		this.content.empty();
		if (['string', 'array', false].contains($type(content))) this.content.set('html', content || '');
		else this.content.adopt(content);
		this.callChain();
		if (!this.isOpen) {
			this.toggleListeners(true);
			this.resize(size, true);
			this.isOpen = true;
			this.fireEvent('onOpen', [this.content]);
		} else {
			this.resize(size);
		}
	},

	resize: function(size, instantly) {
		var box = document.getSize(), scroll = document.getScroll();
		this.size = $merge((this.isLoading) ? this.options.sizeLoading : this.options.size, size);
		var to = {
			width: this.size.x,
			height: this.size.y,
			left: (scroll.x + (box.x - this.size.x - this.options.marginInner.x) / 2).toInt(),
			top: (scroll.y + (box.y - this.size.y - this.options.marginInner.y) / 2).toInt()
		};
		$clear(this.showTimer || null);
		this.hideContent();
		if (!instantly) {
			this.fx.win.start(to).chain(this.showContent.bind(this));
		} else {
			this.win.setStyles(to).setStyle('display', '');
			this.showTimer = this.showContent.delay(50, this);
		}
		return this.reposition();
	},

	toggleListeners: function(state) {
		var fn = (state) ? 'addEvent' : 'removeEvent';
		this.closeBtn[fn]('click', this.bound.close);
		this.overlay[fn]('click', this.bound.close);
		document[fn]('keydown', this.bound.key)[fn]('mousewheel', this.bound.scroll);
		window[fn]('resize', this.bound.window)[fn]('scroll', this.bound.window);
	},

	toggleLoading: function(state) {
		this.isLoading = state;
		this.win[(state) ? 'addClass' : 'removeClass']('sbox-loading');
		if (state) this.fireEvent('onLoading', [this.win]);
	},

	toggleOverlay: function(state) {
		this.overlay.setStyle('display', (state) ? '' : 'none');
		$(document.body)[(state) ? 'addClass' : 'removeClass']('body-overlayed');
	},

	showContent: function() {
		if (this.content.get('opacity')) this.fireEvent('onShow', [this.win]);
		this.fx.content.start(1);
	},

	hideContent: function() {
		if (!this.content.get('opacity')) this.fireEvent('onHide', [this.win]);
		this.fx.content.set(0);
	},

	onKey: function(e) {
		switch (e.key) {
			case 'esc': this.close(e);
			case 'up': case 'down': return false;
		}
	},

	checkTarget: function(e) {
		return this.content.hasChild(e.target);
	},

	reposition: function() {
		var size = document.getSize(), scroll = document.getScroll();
		this.overlay.setStyles({
			left: scroll.x + 'px',
			top: scroll.y + 'px',
			width: size.x + 'px',
			height: size.y + 'px'
		});
		this.win.setStyles({
			left: (scroll.x + (size.x - this.win.offsetWidth) / 2).toInt() + 'px',
			top: (scroll.y + (size.y - this.win.offsetHeight) / 2).toInt() + 'px'
		});
		return this.fireEvent('onMove', [this.overlay, this.win]);
	},

	removeEvents: function(type){
		if (!this.$events) return this;
		if (!type) this.$events = null;
		else if (this.$events[type]) this.$events[type] = null;
		return this;
	},

	extend: function(properties) {
		return $extend(this, properties);
	},

	handlers: new Hash(),

	parsers: new Hash()

};

SqueezeBox.extend(new Events($empty)).extend(new Options($empty)).extend(new Chain($empty));

SqueezeBox.parsers.extend({

	image: function(preset) {
		return (preset || (/\.(?:jpg|png|gif)$/i).test(this.url)) ? this.url : false;
	},

	clone: function(preset) {
		if ($(this.options.target)) return $(this.options.target);
		if (this.element && !this.element.parentNode) return this.element;
		var bits = this.url.match(/#([\w-]+)$/);
		return (bits) ? $(bits[1]) : (preset ? this.element : false);
	},

	ajax: function(preset) {
		return (preset || (this.url && !(/^(?:javascript|#)/i).test(this.url))) ? this.url : false;
	},

	iframe: function(preset) {
		return (preset || this.url) ? this.url : false;
	},

	string: function(preset) {
		return true;
	}
});

SqueezeBox.handlers.extend({

	image: function(url) {
		var size, tmp = new Image();
		this.asset = null;
		tmp.onload = tmp.onabort = tmp.onerror = (function() {
			tmp.onload = tmp.onabort = tmp.onerror = null;
			if (!tmp.width) {
				this.onError.delay(10, this);
				return;
			}
			var box = document.getSize();
			box.x -= this.options.marginImage.x;
			box.y -= this.options.marginImage.y;
			size = {x: tmp.width, y: tmp.height};
			for (var i = 2; i--;) {
				if (size.x > box.x) {
					size.y *= box.x / size.x;
					size.x = box.x;
				} else if (size.y > box.y) {
					size.x *= box.y / size.y;
					size.y = box.y;
				}
			}
			size.x = size.x.toInt();
			size.y = size.y.toInt();
			this.asset = $(tmp);
			tmp = null;
			this.asset.setProperties({width: size.x, height: size.y});
			if (this.isOpen) this.applyContent(this.asset, size);
		}).bind(this);
		tmp.src = url;
		if (tmp && tmp.onload && tmp.complete) tmp.onload();
		return (this.asset) ? [this.asset, size] : null;
	},

	clone: function(el) {
		return el.clone();
	},

	adopt: $arguments(0),

/*
	ajax: function(url) {
		this.asset = new Request.HTML($merge({
			method: 'get'
		}, this.options.ajaxOptions)).addEvents({
			onSuccess: function(resp) {
				this.applyContent(resp);
				this.asset = null;
			}.bind(this),
			onFailure: this.onError.bind(this)
		});
		this.asset.send.delay(10, this.asset, [{url: url}]);
	},
*/
	ajax: function(url) {
		var options = this.options.ajaxOptions || {};
		this.asset = new Request.HTML($merge({
			method: 'get',
			evalScripts: false,
			onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
				this.applyContent(responseHTML);
				if (options.evalScripts !== null && options.evalScripts) $exec(responseJavaScript);
				this.fireEvent('onAjax', [responseTree, responseElements, responseHTML, responseJavaScript]);
				this.asset = null;
			}.bind(this),
			onFailure: this.onError.bind(this)
		}, this.options.ajaxOptions));
		this.asset.send.delay(10, this.asset, [{url: url}]);
	},
	
	iframe: function(url) {
		return new Element('iframe', $merge({
			src: url,
			frameBorder: 0,
			width: this.options.size.x,
			height: this.options.size.y
		}, this.options.iframeOptions));
	},

	string: function(str) {
		return str;
	}

});

SqueezeBox.handlers.url = SqueezeBox.handlers.ajax;
SqueezeBox.parsers.url = SqueezeBox.parsers.ajax;
SqueezeBox.parsers.adopt = SqueezeBox.parsers.clone;

/**
 * ReMooz - Zoomer
 *
 * Inspired by so many boxes and zooms
 *
 * @version		1.0
 *
 * @license		MIT-style license
 * @author		Harald Kirschner <mail [at] digitarald.de>
 * @copyright	Author
 */

var ReMooz = new Class({

	Implements: [Events, Options, Chain],

	options: {
		link: null,
		type: 'image',
		container: null,
		className: null,
		centered: false,
		dragging: true,
		closeOnClick: true,
		shadow: (Browser.Engine.trident) ? 'onOpenEnd' : 'onOpen', // performance
		resize: true,
		margin: 20,
		resizeFactor: 0.95,
		resizeLimit: false, // {x: 640, y: 640}
		fixedSize: false,
		cutOut: true,
		addClick: true,
		opacityLoad: 0.6,
		opacityResize: 1,
		opacityTitle: 0.9,
		resizeOptions: {},
		fxOptions: {},
		closer: true,
		parse: false, // 'rel'
		parseSecure: false,
		temporary: false,
		onBuild: $empty,
		onLoad: $empty,
		onOpen: $empty,
		onOpenEnd: $empty,
		onClose: $empty,
		onCloseEnd: $empty,
		generateTitle: function(el) {
			var text = el.get('title');
			if (!text) return false;
			var title = text.split(' :: ');
			var head = new Element('h6', {'html': title[0]});
			return (title[1]) ? [head, new Element('p', {'html': title[1]})] : head;
		}
	},

	initialize: function(element, options) {
		this.element = $(element);
		this.setOptions(options);
		if (this.options.parse) {
			var obj = this.element.getProperty(this.options.parse);
			if (obj && (obj = JSON.decode(obj, this.options.parseSecure))) this.setOptions(obj);
		}
		var origin = this.options.origin;
		this.origin = ((origin) ? $(origin) || this.element.getElement(origin) : null) || this.element;
		this.link = this.options.link || this.element.get('href') || this.element.get('src');
		this.container = $(this.options.container) || this.element.getDocument();
		this.bound = {
			'click': function(e) {
				this.open.delay(1, this);
				return false;
			}.bind(this),
			'close': this.close.bind(this),
			'dragClose': function(e) {
				if (e.rightClick) return;
				this.close();
			}.bind(this)
		};
		if (this.options.addClick) this.bindToElement();
	},

	destroy: function() {
		if (this.box) this.box.destroy();
		this.box = this.tweens = this.body = this.content = null;
	},

	bindToElement: function(element) {
		($(element) || this.element).addClass('remooz-element').addEvent('click', this.bound.click);
		return this;
	},

	getOriginCoordinates: function() {
		var coords = this.origin.getCoordinates();
		delete coords.right;
		delete coords.bottom;
		return coords;
	},

	open: function(e) {
		if (this.opened) return (e) ? this.close() : this;
		this.opened = this.loading = true;
		if (!this.box) this.build();
		this.coords = this.getOriginCoordinates();
		this.coords.opacity = this.options.opacityLoad;
		this.coords.display = '';
		this.tweens.box.set(this.coords);
		this.box.addClass('remooz-loading');
		ReMooz.open(this.fireEvent('onLoad'));
		this['open' + this.options.type.capitalize()]();
		return this;
	},

	finishOpen: function() {
		this.tweens.fade.start(0, 1);
		this.drag.attach();
		this.fireEvent('onOpenEnd').callChain();
	},

	close: function() {
		if (!this.opened) return this;
		this.opened = false;
		ReMooz.close(this.fireEvent('onClose'));
		if (this.loading) {
			this.box.setStyle('display', 'none');
			return this;
		}
		this.drag.detach();
		this.tweens.fade.cancel().set(0).fireEvent('onComplete');
		if (this.tweens.box.timer) this.tweens.box.clearChain();
		var vars = this.getOriginCoordinates();
		if (this.options.opacityResize != 1) vars.opacity = this.options.opacityResize;
		this.tweens.box.start(vars).chain(this.closeEnd.bind(this));
		return this;
	},

	closeEnd: function() {
		if (this.options.cutOut) this.element.setStyle('visibility', 'visible');
		this.box.setStyle('display', 'none');
		this.fireEvent('onCloseEnd').callChain();
		if (this.options.temporary) this.destroy();
	},

	openImage: function() {
		var tmp = new Image();
		tmp.onload = tmp.onabort = tmp.onerror = function(fast) {
			this.loading = tmp.onload = tmp.onabort = tmp.onerror = null;
			if (!tmp.width || !this.opened) {
				this.fireEvent('onError').close();
				return;
			}
			var to = {x: tmp.width, y: tmp.height};
			if (!this.content) this.content = $(tmp).inject(this.body);
			else tmp = null;
			this[(this.options.resize) ? 'zoomRelativeTo' : 'zoomTo'].create({
				'delay': (tmp && fast !== true) ? 1 : null,
				'arguments': [to],
				'bind': this
			})();
		}.bind(this);
		tmp.src = this.link;
		if (tmp && tmp.complete && tmp.onload) tmp.onload(true);
	},

	/**
	 * @todo Test implementation
	 */
	openElement: function() {
		this.content = this.content || $(this.link) || $E(this.link);
		if (!this.content) {
			this.fireEvent('onError').close();
			return;
		}
		this.content.inject(this.body);
		this.zoomTo({x: this.content.scrollWidth, y: this.content.scrollHeight});
	},

	zoomRelativeTo: function(to) {
		var scale = this.options.resizeLimit;
		if (!scale) {
			scale = this.container.getSize();
			scale.x *= this.options.resizeFactor;
			scale.y *= this.options.resizeFactor;
		}
		for (var i = 2; i--;) {
			if (to.x > scale.x) {
				to.y *= scale.x / to.x;
				to.x = scale.x;
			} else if (to.y > scale.y) {
				to.x *= scale.y / to.y;
				to.y = scale.y;
			}
		}
		return this.zoomTo({x: to.x.toInt(), y: to.y.toInt()});
	},

	zoomTo: function(to) {
		to = this.options.fixedSize || to;
		var box = this.container.getSize(), scroll = this.container.getScroll();
		var pos = (!this.options.centered) ? {
			x: (this.coords.left + (this.coords.width / 2) - to.x / 2).toInt()
				.limit(scroll.x + this.options.margin, scroll.x + box.x - this.options.margin - to.x),
			y: (this.coords.top + (this.coords.height / 2) - to.y / 2).toInt()
				.limit(scroll.y + this.options.margin, scroll.y + box.y - this.options.margin - to.y)
		} :  {
			x: scroll.x + ((box.x - to.x) / 2).toInt(),
			y: scroll.y + ((box.y - to.y) / 2).toInt()
		};
		if (this.options.cutOut) this.element.setStyle('visibility', 'hidden');
		this.box.removeClass('remooz-loading');
		var vars = {left: pos.x, top: pos.y, width: to.x, height: to.y};
		if (this.options.opacityResize != 1) vars.opacity = [this.options.opacityResize, 1];
		else this.box.set('opacity', 1);
		this.tweens.box.start(vars).chain(this.finishOpen.bind(this));
		this.fireEvent('onOpen');
	},

	build: function() {
		this.addEvent('onBlur', function() {
			this.focused = false;
			this.box.removeClass('remooz-box-focus').setStyle('z-index', ReMooz.options.zIndex);
		}, true);
		this.addEvent('onFocus', function() {
			this.focused = true;
			this.box.addClass('remooz-box-focus').setStyle('z-index', ReMooz.options.zIndexFocus);
		}, true);

		var classes = ['remooz-box', 'remooz-type-' + this.options.type, 'remooz-engine-' + Browser.Engine.name + Browser.Engine.version];
		if (this.options.className) classes.push(this.options.className);
		this.box = new Element('div', {
			'class': classes.join(' '),
			'styles': {
				'display': 'none',
				'top': 0,
				'left': 0,
				'zIndex': ReMooz.options.zIndex
			}
		});

		this.tweens = {
			'box': new Fx.Morph(this.box, $merge({
					'duration': 400,
					'unit': 'px',
					'transition': Fx.Transitions.Quart.easeOut,
					'chain': 'cancel'
				}, this.options.resizeOptions)
			),
			'fade': new Fx.Tween(null, $merge({
					'property': 'opacity',
					'duration': (Browser.Engine.trident) ? 0 : 300,
					'chain': 'cancel'
				}, this.options.fxOptions)).addEvents({
					'onComplete': function() {
						if (!this.element.get('opacity')) this.element.setStyle('display', 'none');
					},
					'onStart': function() {
						if (!this.element.get('opacity')) this.element.setStyle('display', '');
					}
				}
			)
		};
		this.tweens.fade.element = $$();

		if (this.options.shadow) {
			if (Browser.Engine.webkit420) {
				this.box.setStyle('-webkit-box-shadow', '0 0 10px rgba(0, 0, 0, 0.7)');
			} else if (!Browser.Engine.trident4) {
				var shadow = new Element('div', {'class': 'remooz-bg-wrap'}).inject(this.box);
				['n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'].each(function(dir) {
					new Element('div', {'class': 'remooz-bg remooz-bg-' + dir}).inject(shadow);
				});
				this.tweens.bg = new Fx.Tween(shadow, {
					'property': 'opacity',
					'chain': 'cancel'
				}).set(0);
				this.addEvent(this.options.shadow, this.tweens.bg.set.bind(this.tweens.bg, 1), true);
				this.addEvent('onClose', this.tweens.bg.set.bind(this.tweens.bg, 0), true);
			}
		}

		if (this.options.closer) {
			var closer = new Element('a', {
				'class': 'remooz-btn-close',
				'events': {'click': this.bound.close}
			}).inject(this.box);
			this.tweens.fade.element.push(closer);
		}
		this.body = new Element('div', {'class': 'remooz-body'}).inject(this.box);

		var title = this.options.title || this.options.generateTitle.call(this, this.element);
		if (title) { // thx ie6
			var title = new Element('div', {'class': 'remooz-title'}).adopt(
				new Element('div', {'class': 'remooz-title-bg', 'opacity': this.options.opacityTitle}),
				new Element('div', {'class': 'remooz-title-content'}).adopt(title)
			).inject(this.box);
			this.tweens.fade.element.push(title);
		}
		this.tweens.fade.set(0).fireEvent('onComplete');

		this.drag = new Drag.Move(this.box, {
			'snap': 15,
			'preventDefault': true,
			'onBeforeStart': function() {
				if (!this.focused && !this.loading) ReMooz.focus(this);
				else if (this.loading || this.options.closeOnClick) this.box.addEvent('mouseup', this.bound.dragClose);
			}.bind(this),
			'onSnap': function() {
				this.box.removeEvent('mouseup', this.bound.dragClose);
				if (!this.options.dragging) this.drag.stop();
				else this.box.addClass('remooz-box-dragging');
			}.bind(this),
			'onComplete': function() {
				this.box.removeClass('remooz-box-dragging');
			}.bind(this)
		});
		this.drag.detach();

		this.fireEvent('onBuild', this.box, this.element);
		this.box.inject(this.element.getDocument().body);
	}

});
ReMooz.factory = function(extended) {
	return $extend(this, extended);
};
ReMooz.factory(new Options).factory({

	options: {
		zIndex: 41,
		zIndexFocus: 42,
		query: 'a.remooz',
		modal: false
	},

	assign: function(elements, options) {
		return $$(elements).map(function(element) {
			return new ReMooz(element, options);
		}, this);
	},

	stack: [],

	open: function(obj) {
		var last = this.stack.getLast();
		this.focus(obj);
		if (last && this.options.modal) last.close();
	},

	close: function(obj) {
		var length = this.stack.length - 1;
		if (length > 1 && this.stack[length] == obj) this.focus(this.stack[length - 1]);
		this.stack.erase(obj);
	},

	focus: function(obj) {
		var last = this.stack.getLast();
		obj.fireEvent('onFocus', [obj]);
		if (last == obj) return;
		if (last) last.fireEvent('onBlur', [last]);
		this.stack.erase(obj).push(obj);
	}

});


var BySlideMenu = new Class({
	Implements: Options,

	options: {
		defaultIndex: false,
		expandMode: 'mouseover',
		pinMode: false,
		vertical: false,
		compressSize: 40,
		elementWidth: 320,
		elementHeight: 240,
		autoSize: true,
		duration: 500,
		transition: 'linear',
		containerWidth: null,
		containerHeight: null,
		useOverflow: false
	},
	
	initialize: function(containerId, options){
		this.setOptions(options);
		this.elementsId = [];
		this.containerId = $pick(containerId, 'byslidemenu');
		
		var container = $(this.containerId);	
		
		container.addEvent('mouseleave', function(){
			this.resetAll();
		}.bind(this));
		
		var elements = container.getChildren();
		var num = elements.length;
		var imgHeight = null, imgWidth = null;
		if(this.options.autoSize)
		{
			var firstImg = elements[0].getElement('img');
		
			if(firstImg)
			{
				imgHeight = firstImg.getHeight();
				imgWidth = firstImg.getWidth();
			}
		}
		
		var offsetWidth = 
			elements[0].getStyle('padding-left').toInt()
			+ elements[0].getStyle('padding-right').toInt()
			+ elements[0].getStyle('border-left-width').toInt()
			+ elements[0].getStyle('border-right-width').toInt();
		var offsetHeight = 
			elements[0].getStyle('padding-top').toInt()
			+ elements[0].getStyle('padding-bottom').toInt()
			+ elements[0].getStyle('border-top-width').toInt()
			+ elements[0].getStyle('border-bottom-width').toInt();
		
		if(this.options.vertical)
		{
			this.posAttr = 'top';
			var containerWidth = $pick(imgWidth, this.options.containerWidth, this.options.elementWidth);
			if(containerWidth == "full")
				containerWidth = container.getParent().getStyle('width').toInt();
			if(this.options.containerHeight)
			{
				if(this.options.containerWidth == 'full')
					var containerHeight = container.getParent().getStyle('height').toInt();
				else
					var containerHeight = this.options.containerHeight;

				this.openSize = containerHeight - ((num - 1) * this.options.compressSize);
			}
			else
			{
				this.openSize = $pick(imgHeight, this.options.elementHeight);
				var containerHeight = this.openSize + ((num - 1) * this.options.compressSize);
			}
			
			this.closeSize = containerHeight / num;
			
			var elementHeight = this.openSize;
			var elementWidth = containerWidth;
		}
		else
		{
			this.posAttr = 'left';
			//var containerHeight = $pick(imgHeight, this.options.containerHeight, this.options.elementHeight);
			var containerHeight = $pick(this.options.containerHeight, this.options.elementHeight);
			if(containerHeight == "full")
				containerHeight = container.getParent().getStyle('height').toInt();
			if(this.options.containerWidth)
			{
				if(this.options.containerWidth == 'full')
					var containerWidth = container.getParent().getStyle('width').toInt();
				else
					var containerWidth = this.options.containerWidth;

				this.openSize = containerWidth - ((num - 1) * this.options.compressSize);
			}
			else
			{
				this.openSize = $pick(imgWidth, this.options.elementWidth);
				var containerWidth = this.openSize + ((num - 1) * this.options.compressSize);
			}
			this.closeSize = containerWidth / num;
			
			var elementHeight = containerHeight;
			var elementWidth = this.openSize;
		}

		container.setStyles({
			padding: 0,
			position: 'relative',
			overflow: 'hidden',
			width: containerWidth,
			height: containerHeight
		});
		
		var id = 0;
		
		elements.each(function(element){
			var beforePos = id * this.options.compressSize;
			var afterPos = this.openSize + ((id - 1) * this.options.compressSize);
			var closePos = id * this.closeSize;
			element.setStyles({
				position: 'absolute',
				height: elementHeight - offsetHeight,
				width: elementWidth - offsetWidth
			});
			element.setStyle(this.posAttr, closePos);
			element.set('tween', {
				duration: this.options.duration,
				transition: this.options.transition
			});
			
			id++;
			
			element.set('id', this.containerId + '_Elm' + id);
			element.store('id', id);
			
			element.store('beforePos', beforePos);
			element.store('afterPos', afterPos);
			element.store('closePos', closePos);

			this.elementsId.include(id);
			
			if([this.options.pinMode, this.options.expandMode].contains('mouseover'))
			{
				element.addEvent('mouseenter', function(element){
					var contentscroll=new Fx.Scroll(window, {duration:800,transition : Fx.Transitions.Quint.easeOut}).toElement('intro').start();

					if(this.options.expandMode == 'mouseover')
						this.expand(element, this.options.pinMode == 'mouseover');
				}.bind(this, element));
			}
			
			if(this.options.pinMode || this.options.expandMode == 'click')
			{
				element.addEvent('click', function(element){
					if(this.options.defaultIndex == element.retrieve('id'))
					{
						this.options.defaultIndex = 0;
						this.resetAll();
					}
					else if(this.options.expandMode == 'click')
						this.expand(element, this.options.pinMode == 'click');
					else
						this.options.defaultIndex = element.retrieve('id');
				}.bind(this, element));
			}

		}, this);
		
		if(this.options.defaultIndex)
			this.expand(this.options.defaultIndex, false, true);
	},
	
	expand: function(element, setDefault, noAnim){
		if($type(element) == 'number')
			element = $(this.containerId + '_Elm' + element);
			
		if(this.options.useOverflow)
			this.clearOverflow();
		
		var currentId = element.retrieve('id');
		
		if(this.options.useOverflow)
			this.switchOverflowTimer = this.switchOverflow.delay(this.options.duration, this, element);
		
		if(setDefault)
			this.options.defaultIndex = currentId;
		
		this.elementsId.each(function(elementId){
			var elm = $(this.containerId + '_Elm' + elementId);
			if(elementId > currentId)
				this.compressAfter(elm, noAnim);
			else
				this.compressBefore(elm, noAnim);
		}, this);
	},
	
	switchOverflow: function(element){
		element.setStyle('overflow', 'auto');
	},
	
	clearOverflow: function(){
		$clear(this.switchOverflowTimer);
		$(this.containerId).getChildren().setStyle('overflow', '');
	},
	
	compressBefore: function(element, noAnim){
		var pos = element.retrieve('beforePos');
		var tween = element.get('tween', {property: this.posAttr, duration: this.options.duration, transition: this.options.transition});
		
		if(noAnim)
			tween.set(pos);
		else
			tween.start(pos);
	},
	
	compressAfter: function(element, noAnim){
		var pos = element.retrieve('afterPos');
		var tween = element.get('tween', {property: this.posAttr, duration: this.options.duration, transition: this.options.transition});
		if(noAnim)
			tween.set(pos);
		else
			tween.start(pos);
	},
	
	reset: function(element){
		var pos = element.retrieve('closePos');
		element.get('tween', {property: this.posAttr, duration: this.options.duration, transition: this.options.transition}).start(pos);
	},
	
	resetAll: function(){
		if(this.options.useOverflow)
			this.clearOverflow();

		if(this.options.defaultIndex)
			this.expand(this.options.defaultIndex);
		else
		{
			this.elementsId.each(function(elementId){
				this.reset($(this.containerId + '_Elm' + elementId));
			}, this);
		}
	}
})

var LoadDests = new Class({

	Implements: [Events, Options],
	
	
	options: {
		pos: 0,
		offset: 582,
		curslide: 1,
		onLoad: $empty,
		onOpen: $empty,
		onBeforeClose: $empty,
		onClose: $empty
	},

	initialize : function(handlers, project, parentbroowser, options) {

		this.handlers=$$('#refine li a');
		this.broowsedest=parentbroowser;
		//this.setOptions(options);
		this.active=this.getActive('active');
		this.setHandlersEvents();

	},

	setHandlersEvents:function(){
		this.handlers.each(function(handler){
			handler.removeEvents();
			handler.addEvent('click',function(e){
				var link=($(e.target).match('a')) ? $(e.target) : $(e.target).getParent('a');
				e.preventDefault();
				this.getCat(handler);
				this.setActive(handler, true);
			}.bindWithEvent(this));
		},this);
	},

	getCat:function(handler){
		var MoveBroowser = new Fx.Morph($('liste-destinations'), {duration:500, transition:Fx.Transitions.Quint.easeOut});
		$('wrapper').addClass('loading');
		MoveBroowser.start({
			'opacity':'0'
		});
		var request = new Request.JSON({
			url:  handler.get('href')+'&json=true',
			evalScripts : true,
			evalResponse : true,
			onSuccess : function(jsonObj) {
				this.updateCat(jsonObj);
				this.updateCount(jsonObj, handler);
			}.bindWithEvent(this)
		}).send();
	},

	updateCat:function(response) {

		var dests=(response.dests) ? response.dests : null;
		var err=(response.err) ? response.err : null;

		var destcont= $('liste-destinations');
		var browser= $('wrapper');

		// hide everything a refresh projects
		var MoveBrowBack = new Fx.Morph(destcont, {duration:500, transition:Fx.Transitions.Quint.easeOut});

		var MoveBroowser = new Fx.Morph(destcont, {
			duration:1000, 
			transition:Fx.Transitions.Quint.easeOut,
			'onStart': function() {
			}.bind(this),
			'onComplete': function() {
				destcont.empty();
				if(dests) {
					dests.each(function(dest){
						var dl = new Element('dl', {'class' : 'tablecell'});
						var dt = new Element('dt', {'class' : 'name'});
						var a = new Element('a', {'href': dest.url});
						var ad = new Element('a', {'href': dest.url});
						var ddd = new Element('dd', {'class' : 'desc'});
						var br = new Element('br');
						a.set('html', dest.name).inject(dt);
						dl.adopt(dt);
						if(dest.thumb) {
							var ddi = new Element('dd', {'class' : 'image'});
							var ai = new Element('a', {'href': dest.url});
							var im = new Asset.image(dest.thumb[0]['src'], {'width' : dest.thumb[0]['width'], 'height': dest.thumb[0]['height'], 'alt': dest.thumb[0]['alt']});
							im.inject(ai);
							ai.inject(ddi);
							dl.adopt(ddi);
						}
						if(dest.price>0) {
							var ddp = new Element('dd', {'class' : 'price'});
							ddp.set('html', '&agrave; partir de<br /><strong>'+ dest.price +'</strong>  &euro;');
						}

						ddd.set('html', dest.excerpt);
						ad.set('html', 'Plus d\'informations');
						br.inject(ddd);
						ad.inject(ddd);
						dl.adopt(ddp);
						dl.adopt(ddd);
						destcont.adopt(dl);
					},this);
				}
				else {
					var h4 = new Element('h3', {'class' : 'none'});
					h4.set('html', err);
					destcont.adopt(h4);
				}
				this.broowsedests=new Broowser ($('liste-destinations'), 'wrapper', this, {
					'duration':650, 
					'offset': 582,
					'groupby' : 2,
					'elementstocount' : 'dl',
					'previous' : $('browser').getElement('a#previous'),
					'next' : $('browser').getElement('a#next')
				});
			}.bind(this)
		});
		MoveBroowser.start({
			'opacity':'0'
		}).chain(function() {
			$('wrapper').removeClass('loading');
			MoveBrowBack.start({
				'opacity':'1'
			});
		});
	},

	updateCount:function(response, handler) {
		var span=handler.getElement('span');
		if(response.dests) {
			if(span)
				span.set('html', '('+ response.dests.length +')');
		}
		else {
			if(span)
				span.set('html', '(0)');
		}
		
	},
	
	getActive:function(aclass){
		for(var i=0;i<this.handlers.length;i++) {
			if(this.handlers[i].hasClass(aclass)) {
				return this.handlers[i];
				break;
			}
		}
	},

	getIndex: function(el) {
		for(var i=0;i<this.handlers.length;i++) {
			if(this.handlers[i]==el) {
				return i;
				break;
			}
		}
	},

	setActive: function(el){  
		if(this.active) this.active.removeClass('active');
		if(el.getParent().getParent().get('id')=="roller") {
			this.active = this.handlers[this.getIndex(el)-3].addClass('active');
		}
		else {
			if(el) this.active = el.addClass('active');
		}
	}

});

Form.Validator.addAllThese([

	['validate-matchemail', {
		errorMsg: function(element, props){
			return FormValidator.getMsg('matchemail');
		},
		test: function(element, props){
			var eleVal = element.get('value');
			var matchVal = document.id(props.matchInput) && document.id(props.matchInput).get('value');
			return eleVal && matchVal ? eleVal == matchVal : true;
		}
	}]

]);

Form.Validator.Label = new Class({

	//small hacks from the original Inline
	Extends: Form.Validator,

	options: {
		displayError:true,
		scrollToErrorsOnSubmit: false,
		scrollFxOptions: {
			transition: 'quad:out',
			offset: {
				y: -20
			}
		}
	},

	initialize: function(form, options){
		this.parent(form, options);
		this.labels=$$('label');
		this.addEvent('onElementValidate', function(isValid, field, className, warn){
			var validator = this.getValidator(className);
			this.labels.each(function(label) {
				if(label.get('for') == field.get('id')) {
					field.label=label;
				}

			});
			if (!isValid && validator.getError(field)){
				if (warn) field.addClass('warning');
				var advice = this.makeAdvice(className, field, validator.getError(field), warn);
				this.insertAdvice(advice, field);
				this.showAdvice(className, field);
			} else {
				this.hideAdvice(className, field);
			}
		});
	},

	makeAdvice: function(className, field, error, warn){
		if(this.options.displayError) {
			var errorMsg = ' ( ';
				errorMsg += (warn)?this.warningPrefix:this.errorPrefix;
				errorMsg += (this.options.useTitles) ? field.title || error:error;
				errorMsg += ' ) ';
		}
		else {
			var errorMsg = '';
		}
		var cssClass = (warn) ? 'warning-advice' : 'validation-advice';
		var advice = this.getAdvice(className, field);
		if(advice) {
			advice = advice.clone(true, true).set('html', errorMsg ).replaces(advice);
		} else {
			advice = new Element('span', {
				html: errorMsg ,
				styles: { display: 'none' },
				id: 'advice-' + className + '-' + this.getFieldId(field)
			}).addClass(cssClass);
		}
		field.store('advice-' + className, advice);
		return advice;
	},

	getFieldId : function(field){
		return field.id ? field.id : field.id = 'input_' + field.name;
	},

	showAdvice: function(className, field){
		var advice = this.getAdvice(className, field);
		if (advice && !field.retrieve(this.getPropName(className))
				&& (advice.getStyle('display') == 'none'
				|| advice.getStyle('visiblity') == 'hidden'
				|| advice.getStyle('opacity') == 0)){
			field.store(this.getPropName(className), true);
			if (advice.reveal) {
				advice.setStyles({'opacity': 1, 'visibility': 'visible', 'display' : 'inline'});
			}
			else {
				advice.setStyle('display', 'inline');
			}
			field.label.addClass('lblwarning');
			field.highlight('#fff', '#831026');
		}
	},

	hideAdvice: function(className, field){
		var advice = this.getAdvice(className, field);
		if (advice && field.retrieve(this.getPropName(className))) {
			field.store(this.getPropName(className), false);
			//if Fx.Reveal.js is present, transition the advice out
			if (advice.dissolve) advice.setStyles({'opacity': 0, 'visibility': 'hidden', 'display' : 'none'});
			else advice.setStyle('display', 'none');

			field.label.removeClass('lblwarning');

		}
	},

	getPropName: function(className){
		return 'advice' + className;
	},

	resetField: function(field){
		field = document.id(field);
		if (!field) return this;
		this.parent(field);
		field.className.split(' ').each(function(className){
			this.hideAdvice(className, field);
		}, this);
		return this;
	},

	getAllAdviceMessages: function(field, force){
		var advice = [];
		if (field.hasClass('ignoreValidation') && !force) return advice;
		var validators = field.className.split(' ').some(function(cn){
			var warner = cn.test('^warn-') || field.hasClass('warnOnly');
			if (warner) cn = cn.replace(/^warn-/, '');
			var validator = this.getValidator(cn);
			if (!validator) return;
			advice.push({
				message: validator.getError(field),
				warnOnly: warner,
				passed: validator.test(),
				validator: validator
			});
		}, this);
		return advice;
	},

	getAdvice: function(className, field){
		return field.retrieve('advice-' + className);
	},

	insertAdvice: function(advice, field){
		//Check for error position prop
		var props = field.get('validatorProps');
		//Build advice
		if (!props.msgPos || !document.id(props.msgPos)){
			if(field.type.toLowerCase() == 'radio') field.getParent().adopt(advice);
			else advice.inject(document.id(field), 'after');
		} else {
			document.id(props.msgPos).grab(advice);
		}
	},

	validateField: function(field, force){
		var result = this.parent(field, force);
		if (this.options.scrollToErrorsOnSubmit && !result){
			var failed = document.id(this).getElement('.validation-failed');
			var par = document.id(this).getParent();
			while (par != document.body && par.getScrollSize().y == par.getSize().y){
				par = par.getParent();
			}
			var fx = par.retrieve('fvScroller');
			if (!fx && window.Fx && Fx.Scroll){
				fx = new Fx.Scroll(par, this.options.scrollFxOptions);
				par.store('fvScroller', fx);
			}
			if (failed){
				if (fx) fx.toElement(failed);
				else par.scrollTo(par.getScroll().x, failed.getPosition(par).y - 20);
			}
		}
		return result;
	}

});

var Pulsar = new Class({
	
	/* implements */
	Implements: [Options,Events],

	/* options */
	options: {
		delay: 2000,
		numBeats: 20,
		property: 'color',
		reset: false
	},
	
	/* initialization */
	initialize: function(element,options) {
		/* set options */
		this.setOptions(options);
		this.element = element;
		this.running = true;
		this.element.set('tween', {duration:'long'});
		this.beater = function(){ this.beat(); this.fireEvent('beat'); }.bind(this);
		this.periodical = this.beater.periodical(this.options.delay);
	},
	
	/* adds dot */
	beat: function(element) {
		this.element.tween(this.options.property,['#ffffff','#ff9b04']);
		return this;
	},
	
	/* stop the beater */
	stop: function() {
		this.running = false;
		$clear(this.periodical);
		this.fireEvent('stop');
		return this;
	}
});

var SmoothAutoScroll = Fx.SmoothScroll = new Class({

	Extends: Fx.Scroll,

	initialize: function(options, context){
		context = context || document;
		this.doc = context.getDocument();
		var win = context.getWindow();
		this.parent(this.doc, options);
		this.links = $$(this.options.links || this.doc.links);
		this.target = $(this.options.target);
		this.links.each(function(link){
			this.useLink(link, this.target);
		}, this);
		if (!Browser.Engine.webkit419) {
			this.addEvent('complete', function(){
				win.location.hash = this.target.getProperty("id");
			}, true);
		}
	},

	useLink: function(link, anchor){
		var el;
		link.addEvent('click', function(event){
			if (el !== false && !el) el = anchor.getProperty("id");
			if (el) {
				if(this.options.prevent) {
					event.preventDefault();
				}
				this.anchor = anchor;
				this.toElement(el).chain(function(){
					this.fireEvent('scrolledTo', [link, el]);
				}.bind(this));
				link.blur();
			}
		}.bind(this));
	}
});

function SWFBackTo () {
	//if($('diapo').hasClass('active') && Cookie.read('destslide')){
	if(Cookie.read('destslide')){
		SpeTabs.jumpto(Cookie.read('destslide'));
	}
}

var viewer=new Class({mode:'rand',modes:['top','right','bottom','left','alpha'],sizes:{w:480,h:240},fxOptions:{duration:500},interval:5000,initialize:function(a,b){if(b)for(var o in b)this[o]=b[o];if(this.buttons){this.buttons.previous.addEvent('click',this.previous.bind(this,[true]));this.buttons.next.addEvent('click',this.next.bind(this,[true]))}this.__current=0;this.__previous=null;this.items=a.setStyle('display','none');this.items[this.__current].setStyle('display','block');this.disabled=false;this.attrs={left:['left',-this.sizes.w,0,'px'],top:['top',-this.sizes.h,0,'px'],right:['left',this.sizes.w,0,'px'],bottom:['top',this.sizes.h,0,'px'],alpha:['opacity',0,1,'']};this.rand=this.mode=='rand';this.sequence=typeof(this.mode)=='object'?this.mode:false;this.curseq=0;this.timer=null},walk:function(n,b){if(this.__current!==n&&!this.disabled){this.disabled=true;if(b){this.stop()}if(this.rand){this.mode=this.modes.getRandom()}else if(this.sequence){this.mode=this.sequence[this.curseq];this.curseq+=this.curseq+1<this.sequence.length?1:-this.curseq}this.__previous=this.__current;this.__current=n;var a=this.attrs[this.mode].associate(['p','f','t','u']);for(var i=0;i<this.items.length;i++){if(this.__current===i){this.items[i].setStyles($extend({'display':'block','z-index':'2'},JSON.decode('{"'+a.p+'":"'+a.f+a.u+'"}')))}else if(this.__previous===i){this.items[i].setStyles({'z-index':'1'})}else{this.items[i].setStyles({'display':'none','z-index':'0'})}}this.items[n].set('tween',$merge(this.fxOptions,{onComplete:this.onComplete.bind(this)})).tween(a.p,a.f,a.t)}},play:function(a){this.stop();if(!a){this.next()}this.timer=this.next.periodical(this.interval,this,[false])},stop:function(){$clear(this.timer)},next:function(a){this.walk(this.__current+1<this.items.length?this.__current+1:0,a)},previous:function(a){this.walk(this.__current>0?this.__current-1:this.items.length-1,a)},onComplete:function(){this.disabled=false;this.items[this.__previous].setStyle('display','none');if(this.onWalk)this.onWalk(this.__current)}});

