// DBI 2010



// ---------- Arrondis sur les sous-menus

// Rounded corners init
var settings = {
	tl: { radius: 0 },
	tr: { radius: 0 },
	bl: { radius: 8 },
	br: { radius: 8 },
	antiAlias: true,
	autoPad: true,
	validTags: ["div"]
}

function rounded_init() {
	var myBoxObject = new curvyCorners(settings, 'nav-smenu');
	myBoxObject.applyCornersToAll();

	// init de la position verticale des menus
	for (var obj in smenu_pos) {
		var x=document.getElementById(obj)
		if(x) {
			smenu_pos[obj]['pos']=-x.offsetHeight+smenu_params['repos']
			smenu_pos[obj]['min']=smenu_pos[obj]['pos']
			smenu_pos[obj]['way']=-1
			smenu_pos[obj]['timer']=null
			x.style.top=smenu_pos[obj]['pos']+'px'
			x.parentNode.style.height='250px'				// étend le masque, maintenant que le menu est caché
			x.parentNode.style.width=x.offsetWidth+'px'
		}
	}
}

var smenu_pos=		{ topmenu1:{pos:0},topmenu2:{pos:0},topmenu3:{pos:0},topmenu4:{pos:0},topmenu5:{pos:0},topmenu6:{pos:0} }
var smenu_params=	{ repos:-8, actif:70, step:40, interval:50, max:0, inertie:100 }

// ouverture (op=1) / fermeture (op=0) du menu obj
function show_menu(obj,op) {
	var x=document.getElementById(obj),cont=true,step,init
	if(x) {
		// début d'un mouvement -> arrête toute éventuelle séquence en sens contraire qui serait déjà en cours sur cet objet
		init=smenu_pos[obj]['way']!=op
		if(init) {
			clearTimeout(smenu_pos[obj]['timer'])
			smenu_pos[obj]['way']=op
		}
		// en cas de démarrage de la fermeture, on attend quelques msec avant de démarrer effecticement
		if(op || !init) {
			step=smenu_params['step']
			smenu_pos[obj]['pos']+= op? step : -step
			if(op) { if(smenu_pos[obj]['pos']>smenu_params['max']) { smenu_pos[obj]['pos']=smenu_params['max']; cont=false } }	// Ouverture
			else if(smenu_pos[obj]['pos']<smenu_pos[obj]['min']) { smenu_pos[obj]['pos']=smenu_pos[obj]['min']; cont=false }	// fermeture
			x.style.top=smenu_pos[obj]['pos']+'px'
			step=smenu_params['interval']
		}
		else step=smenu_params['inertie']		// début d'une fermeture -> inertie
		if(cont) smenu_pos[obj]['timer']=setTimeout("show_menu('"+obj+"',"+op+")",step)

	}
}


// ----------------------------

function getStyle(_elem) {
  return typeof(_elem.currentStyle) == 'undefined' ?
  	  document.defaultView.getComputedStyle(_elem, null)	// all others
  	: _elem.currentStyle									// IE
}

// Multiple onload function created by: Simon Willison
// http://simonwillison.net/2004/May/26/addLoadEvent/
// usage : addLoadEvent( function() {fct_name()} )
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

// Shake : agite aléatoirement l'objet passé en param
// obj=ID de l'objet à faire danser
// xamp, yamp = amplitude du shake. Ex : 2 -> +/- 2 pixels autours de la position de départ
// xamp=0 -> arrêter l'animation et replacer l'objet à sa positoin d'origine
var	x_shake_memo=new Array(),		// Mémo des timeouts et X0/Y0
	x_shake_amp=new Array(2,2)		// Amplitude par défaut X et Y
function x_shake(obj,xamp,yamp) {
	var x=document.getElementById(obj)
	if(x) {
		if(typeof(xamp)=='undefined') var xamp=x_shake_amp[0]	// Amplitude par défaut
		if(typeof(yamp)=='undefined') var yamp=x_shake_amp[1]	// Amplitude par défaut
		if(xamp) {	// Shake it !
			if(typeof(x_shake_memo[obj])=='undefined') x_shake_memo[obj]=new Array()
			if(typeof(x_shake_memo[obj][0])=='undefined') {
				var style=getStyle(x)
				x_shake_memo[obj][0]=parseInt(style['left'],10)
				x_shake_memo[obj][1]=parseInt(style['top'],10)
			}
			x.style.left=(x_shake_memo[obj][0]+Math.round(Math.random()*2*xamp-xamp))+'px'
			x.style.top=(x_shake_memo[obj][1]+Math.round(Math.random()*2*yamp-yamp))+'px'
			x_shake_memo[obj][2]=setTimeout("x_shake('"+obj+"',"+xamp+","+yamp+")",50)
		}
		else {									// Shake end
			clearTimeout(x_shake_memo[obj][2])
			x.style.left=x_shake_memo[obj][0]+'px'
			x.style.top=x_shake_memo[obj][1]+'px'
			x_shake_memo[obj]=new Array()
		}
	}
}


// fade in/out. Ne nécessite qu'une unique image
// p=transparence init:transparence finale:step (delta transparence sur 50 msec)
// t=référence vers l'objet où se trouve btn_id : rien = self, 1=top
if(!x_IDmem) var x_IDmem=new Array
if(!x_status) var x_status=new Array
function x_fade(btn_id,p,t,alpha) {
	if(typeof(t)=='undefined') var t=''
	if(t=='') var btn=document.getElementById(btn_id)
	else var btn=top.document.getElementById(btn_id)
	if(typeof(alpha)=='undefined' && x_IDmem[btn_id]) clearTimeout(x_IDmem[btn_id])
	if(!p && p!='0') var px=new Array; else px=p.split(':')
	if(!px[0] && px[0]!='0') px[0]=100	// alpha de départ
	if(!px[1]) px[1]=50		// alpha de fin
	if(!px[2]) px[2]=10		// step
	px[2]=Math.abs(parseInt(px[2]))
	px[0]=parseInt(px[0]);px[1]=parseInt(px[1])
	if(!alpha && alpha!='0') var alpha=px[0]	// premier passage
	if(px[0]>px[1]) px[2]=-px[2]
	if(btn) {
		if(btn.style.opacity!='') {
			alpha0=btn.style.opacity*100	// IE6/7 : opacity est positionné ci-dessous quel que soit le navigateur
			if((px[2]<0 && alpha0<=px[1]) || (px[2]>0 && alpha0>=px[1])) alpha=px[1]
			else if((px[2]<0 && alpha0<alpha) || (px[2]>0 && alpha0>alpha)) alpha=alpha0
		}
		btn.style.filter=alpha==100? '' : 'alpha(opacity='+alpha+')'
		btn.style.opacity=alpha/100
		btn.style.display='inline'
		var end=px[2]<0 ? alpha<=px[1] : alpha>=px[1]
		if(!end) {
			alpha+=px[2]
			if((px[2]<0 && alpha<=px[1]) || (px[2]>0 && alpha>=px[1])) alpha=px[1]
			x_IDmem[btn_id]=setTimeout('x_fade("' + btn_id + '","'
			+ p + '","'+t+'",'+alpha+')'
			, 50)
		}
		else {
			x_status[btn_id]=alpha? 1:0
			if(alpha==0) btn.style.display='none'
		}
	}
}