/* Script client commun à toutes les pages du site */

// Fonctions Standard Macromedia Dreamweaver
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_validateForm() { //v3.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
    if (val) { nm=val.name;obj=val; if ((val=val.value)!="") {
      if (obj.type=="checkbox")	if (!obj.checked) errors+='- La case '+nm+' doit être cochée.\n';
      if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
        if (p<1 || p==(val.length-1)) errors+='- Le champ '+nm+' doit contenir une adresse mail valide.\n';
      } else if (test!='R') { num = parseFloat(val);
        if (val!=''+num) errors+='- Le champ '+nm+' doit contenir une valeur numérique.\n';
        if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
          min=test.substring(8,p); max=test.substring(p+1);
          if (num<min || max<num) errors+='- Le champ '+nm+' doit contenir une valeur numérique comprise entre '+min+' et '+max+'.\n';
    } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' est obligatoire.\n'; }
  } if (errors) alert('Le formulaire n\' a pas pu être validé pour les raisons suivantes :\n'+errors);
  document.MM_returnValue = (errors == '');
}

/* Menu récursif */
var Menu = new Class({
	initialize: function(menu){
		var items = menu.getChildren('li');
		var links = items.getChildren('span').flatten();
		var submenus = items.getChildren('ul').flatten();
		//var height = menu.getStyle("height");
		if (submenus.length > 0){
			var accordion = new Accordion(links,submenus,{
				duration:300,
				width: false,
				height: false,
				onActive:function(e){
					e.getNext("ul").setStyles({
						overflow:'hidden'
						//height:'0px'
					});
				},
				onComplete:function(e){
					e.getParent().getParent().setStyles({
						overflow:'visible'
						//height:'auto'
					});
				}
			});
			accordion.display(-1);
			links.each(function(link,i){
				link.getElement('a').addEvents({
					'focus':function(){
						link.addClass('hover');
						accordion.display(i);
					}
				});
				link.addEvent('mouseenter',function(){
					link.getElement('a').addClass('hover');
					accordion.display(i);
				});
			});
			items.each(function(i){
				i.addEvent('mouseleave', function(){
					links.each(function(l){
						l.getElement('a').removeClass('hover');
					});
					accordion.display(-1);
				});
			});
			submenus.each(function(submenu){
				new Menu(submenu);
			});
		}
	}
});

var timeoutID;
function contenu_bascule(preferences){
	// Boutons Basculer
	if (!preferences.has('basculer')) preferences.set('basculer',new Array());
	$$('.bouton.basculer').each(function(bouton,i){
		if (!bouton.id) bouton.id = location.href.hyphenate()+i;
		var div,parent=bouton;
		do{
			div = parent.getNext('div');
			parent = parent.getParent();
		}while(div == null);
		div.setStyle('height','auto');
		div.setStyle('max-height','');
		div.setStyle('height',div.getSize().y);
		div.setStyle('max-height',div.getSize().y);
		div.setStyle('height',div.getStyle('min-height'));
		var basculer = function(){
			var h = div.getStyle('height').toInt(),min = div.getStyle('min-height').toInt(), max = div.getStyle('max-height').toInt(); 
			var th = {'height':h==min?max:min};
			var tm = {'margin-top':h==min?min-max:0};
			if (bouton.hasClass('dernier')){
				th = $extend(th,tm);
				bouton.morph(tm);
			}
			if (bouton.hasClass('ouvert')){
				preferences.get('basculer').erase(bouton.id);
				bouton.removeClass('ouvert');
				bouton.title = 'Déplier ce panneau';
			}else{
				bouton.addClass('ouvert');
				bouton.title = 'Replier ce panneau';
				preferences.get('basculer').include(bouton.id);
			}
			preferences.save();
			div.morph(th);
		}
		bouton.removeEvents();
		bouton.removeClass('ouvert');
		bouton.addEvent('click',basculer);
		if (preferences.get('basculer').indexOf(bouton.id)!=-1) basculer();
	});
	$clear(timeoutID);
	var first = $$('li .bouton.basculer')[0];
	if(first && first.id!='rss_basculer' && preferences.get('basculer').indexOf(first.id)==-1) timeoutID=(function(){ first.fireEvent('click'); }).delay(1000);
}

function menu_deroulant(){
	$$('.wrapper_menu').each(function(m){
		var scroller = new Fx.Scroll(m.getElement(".cache"));
		var pos=0;
		m.getElement(".precedent").removeEvents();
		m.getElement(".precedent").addEvents({
			'mouseenter' : function(){
				this.period = (function(){
					if(pos>=0) pos-=5;
					scroller.set(pos,0);
				}).periodical(10);
			},
			'mouseleave' : function(){
				$clear(this.period);
			}
		});
		var taille=0;
		m.getElements("li").each(function(e){
			taille+=e.getSize().x;
		});
		m.getElement(".suivant").removeEvents();
		m.getElement(".suivant").addEvents({
			'mouseenter' : function(){
				this.period = (function(){
					if(pos<(taille-m.getElement(".cache").getSize().x)) pos+=5;
					scroller.set(pos,0);
				}).periodical(10);
			},
			'mouseleave' : function(){
				$clear(this.period);
			}
		});
		scroller.toElement(m.getElement(".selected"));
		var nvlle_taille=0; var selected=false;
		m.getElements("li").each(function(e){
			if(e.hasClass("selected")) selected=true;
			if(selected!=true) nvlle_taille+=e.getSize().x;
		});
		(function(){
			//alert(m.getElement("li").getPosition().x);
			//alert(m.getPosition().x);
			pos=(m.getPosition().x+51)-m.getElement("li").getPosition().x;
		}).delay(500);
	});
}

// Initialisation de la page
//window.addEvent('domready', function() {
window.onload =  function() {
	// Lecture des préférences utilisateur (cookie)
	var preferences = new Hash.Cookie('preferences', {duration: 5184000,path:'/',autoSave:true});
	preferences.load();
	
	// Menu
	new Menu($('menu'));
	menu_deroulant();
	
	// Slider Zoom
	if (preferences.has('zoom')) $(document.body).setStyle('font-size',preferences.get('zoom'));
	var zoom = $('zoom');
	var slider = new Slider(zoom.getElement('.slider'), zoom.getElement('.slider div'), {
		steps: 3,
		range: [12,18],
		snap: true,
		onChange: function(value){
			$(document.body).setStyle('font-size', value);
			// Mémorise la taille du texte dans les préférences
			preferences.set('zoom',value);
			preferences.save();
			// On réinitialise ces fonctions pour compatibilité avec les grande polices
			contenu_bascule(preferences);
			menu_deroulant();
		}
	}).set($(document.body).getStyle('font-size').toInt());
	$("small").addEvent("click",function(event){
		slider.set(12);
		return false;
	});
	$("big").addEvent("click",function(event){
		slider.set(18);
		return false;
	});
	var fx = new Array();
	$$('.twrss_item_content').each(function(e,i){
		fx[i]=new Fx.Slide(e);
	});
	var bouton = $('rss_basculer');
	var basculer_rss = function(immediat){
		fx.each(function(e){
			if(immediat) e.hide();
			else e.toggle();
		});
		if (bouton.hasClass('ouvert')){
			$('rss').removeClass('ouvert');
			bouton.removeClass('ouvert');
			bouton.title = 'Déplier ce panneau';
			preferences.set('rss_ouvert',false);
		}else{
			$('rss').addClass('ouvert');
			bouton.addClass('ouvert');
			bouton.title = 'Replier ce panneau';
			preferences.set('rss_ouvert',true);
		}
		preferences.save();
	};
	bouton.addEvent('click',function(event){
		event.stop();
		basculer_rss(false);
	});
	if (!preferences.get('rss_ouvert')) basculer_rss(true);
	// Bouton Rafraîchir RSS
	$('rss_rafraichir').addEvent('click',function(){location.href=location.href;});
	// Introduction
	var introduction = $$('.introduction');
	if (introduction.length > 0){
		introduction[0].getElement('a.bouton').addEvent('click',function(){
			introduction[0].fade('out').get('tween').chain(function(){introduction[0].destroy();}); 
		});
	}
	// Accordeons
	// TODO Gérer les bouton basculer ici...
	$$('div.accordeon').each(function(accordeon){
		var bouton_plus = accordeon.getElement('a.bouton.plus');
		var lien = accordeon.getElement('h2 a');
		bouton_plus.href = lien.href;
	});
}
