// fonction special Fbeaucamp //

function expandH1(el){
  this.parent=$(el).childElements()[0];
  var rects=$(el).getClientRects();
  if(rects.length>1) return;
  this.el=this.parent.cloneNode(true);

  this.el.top=this.parent.offsetTop;this.el.left=this.parent.offsetLeft;
  this.el.rect=this.parent.getDimensions();
  this.el.fonts=parseInt(this.parent.getStyle('fontSize'));
  this.parent.insert({before:this.el});
  this.parent.style.visibility="hidden";
  this.ratio=1.3;
  this.el.style.zIndex=2;
  var mthis;
  
  this.init = function(){
    this.el.absolutize();
    this.el.style.display="block";
    this.el.setStyle({top:this.el.top+"px",left:this.el.left+"px",width:this.el.rect.width+"px",fontSize:this.el.fonts+"px"});
    
    this.event_out=this.isout.bindAsEventListener(this);
    this.event_over=this.isover.bindAsEventListener(this);
    Event.observe(this.el,"mouseover",this.event_over);
    mthis=this;
    
  }
  this.isover = function(el){
    this.el.style.zIndex=3;
    Event.stopObserving( document, 'mouseover', this.event_out);
    new Effect.Morph(this.el,{style: "top:"+(this.el.top - this.el.rect.height*((this.ratio-1)/2))+"px;left:"+(this.el.left - this.el.rect.width*((this.ratio-1)/2))+"px;width:"+(this.el.rect.width*(this.ratio+0.05))+"px;font-size:"+(this.el.fonts*this.ratio)+"px", duration:0.2, fps:15, from:0.1, to:1.0,
       afterFinish:function(){Event.observe(document,"mousemove",mthis.event_out);}});
    
  }
  this.isout = function(e){
    var x=Event.pointerX(e),y=Event.pointerY(e);
    var pos=this.el.cumulativeOffset(); var dim=this.el.getDimensions();
    if((x > pos.left) && (x < (pos.left+dim.width)) && ((y > pos.top) && (y < (pos.top+dim.height+15)) )) return;
    this.el.style.zIndex=2;
    Event.stopObserving( document, 'mousemove', this.event_out);
    new Effect.Morph(this.el,{style: "top:"+this.el.top+"px;left:"+this.el.left+"px;width:"+this.el.rect.width+"px;font-size:"+this.el.fonts+"px", duration:0.3, fps:15, from:0.1, to:1.0,
       afterFinish:function(){Event.observe(mthis.el,"mouseover",mthis.event_over);}});
    
  }
  this.init();
}

function actus(el){
  var el = typeof el=='string'?document.getElementById(el):el,actus = getElementsByClassName(el,'actu'),timer,current;
  var init=function(){
    for(var i=0;i<actus.length;i++){
      var s = actus[i];
      s.link=document.createElement('a');
      s.link.appendChild(document.createTextNode(i+1));
      s.link.className='actu_link';
      s.link.idx=i;
      s.link.el=actus[i];
      el.appendChild(s.link);
     startListen(s.link,'mousedown',function(){showActu(window.event ? event.srcElement : this)}); 
    }
    var init=showActu(actus[0].link);
  }
  
  var showActu = function(e){
      var e=e;
      clearTimeout(timer);
      for(var i=0;i<actus.length;i++){
      var s=actus[i]
        if(s==current)
          morph(s,{style:{'opacity':0}});s.link.className='actu_link';
      }
        current=e.el;
        e.className='actu_link current_link'
        morph(e.el,{style:{'opacity':1}});
      //var mthis=this.connector;
      var link=actus[(current.link.idx>=actus.length-1?0:current.link.idx+1)].link;
       timer = setTimeout(function(){showActu(link);},10000)
  }
  init();
}

var morph = function(el,props){
  var start= +new Date,dur=props['duration'] || 500,finish=start+dur,oldv={},newS={},prefix={},suffix={};
  var el=el,props=props,interval,style;
  if(el.style['display']=='none'){setStyle(el,{'display':'','opacity':0})}else{setStyle(el,{'opacity':1})}
  for(p in props.style){
    if(style=String(el.style[p]).match(/^([^0-9]*)([0-9]*)([^0-9]*)$/))
      {if(style[1]=='-'){style[1]='';style[2]= -style[2]}
      if(style[3]=='pt'){style[3]='px'}
      prefix[p]=style[1];oldv[p]=+style[2];suffix[p]=style[3];}
  }
  interval = setInterval(function(){
     	var time= +new Date, pos=time>finish?1:(time-start)/dur;
      for(p in props.style)
          newS[p]=prefix[p]+(+oldv[p] + pos*(props.style[p]-oldv[p]))+ suffix[p];
      
      setStyle(el,newS);
      if(time>finish){
        if(el.style['opacity']=="0") el.style['display']='none';
        if(el.style['opacity']=="1") el.style['filter']="";
        clearInterval(interval);
        }
      },40)
}

var setStyle = function(el,styles){
  for(s in styles){
    if(s=='opacity'){el.style.filter='alpha(opacity='+(styles[s]*100)+')'}
    el.style[s]=styles[s];
  }
}

var getElementsByClassName=function(el,elclass){
  var els=el.getElementsByTagName('*'), newels=new Array(), classes;
  for(var i=0;i<els.length;i++){
    classes = els[i].className.split(' ');
    for(var j=0;j<classes.length;j++){
      if(classes[j]==elclass){
        newels[newels.length]=els[i];break;
      }
    }
  }
  return newels;
}

function expandImgs(){
  var imgs=getElementsByClassName(document,"img_expendable");
  var newimgs=new Array();
  var under;
  
  var expand = function(e){
    if(!under){
    
    var body=document.getElementsByTagName('body')[0];
    under=document.createElement('div');
    setStyle(under,{'position':'absolute','position':'fixed','left':'0px','top':'0px',
                    'width':'100%','height':'100%','display':'none',
                    'background':'url(/style/black_opacity50.png)','zIndex':'10001'});
    body.appendChild(under);
    var div=document.createElement('div');
    setStyle(div,{'position':'absolute','left':'10px','top':'10px','height':'20px','background':'#FFF','zIndex':1000000,'cursor':'pointer'});
    div.appendChild(document.createTextNode('Fermer le diaporama'));
    startListen(div,'click',function(){morph(under,{style:{'opacity':0}})});
    under.appendChild(div);
    for(var i=0;i<newimgs.length;i++){
      under.appendChild(newimgs[i]);
      var ratio=newimgs[i].width/newimgs[i].height
      newimgs[i].width=500;newimgs[i].height=500/ratio;
    }
    e.tmpimg.under=under;
    
    //var imgrect = new Object;
      //var ratio=e.tmpimg.mwidth/e.tmpimg.mheight
     //imgrect.width =e.tmpimg.mwidth;
     //e.tmpimg.style.width=e.width+"px";
     //imgrect.height =e.tmpimg.mheight;
     //e.tmpimg.style.height=e.height+"px";
    
    //setStyle(div,{'top': getOffset(e).top - document.documentElement.scrollTop+"px",'left': getOffset(e).left+"px"});
    
    //startListen(under,"click",function(){under.parentNode.removeChild(under);});
    morph(under,{style:{'opacity':1}});
    caroussel(under,newimgs,e.tmpimg);
    }else{
      
      morph(under,{style:{'opacity':1}});
      caroussel(under,newimgs,e.tmpimg);
    }
    
    
    //morph(div,{style:{'top':((window.innerHeight || document.documentElement.clientHeight)-(500/ratio))/2,
//                      'left':((window.innerWidth || document.documentElement.clientWidth)-500)/2,'opacity':1},duration:500});
    
    //morph(e.tmpimg,{style:{'width':500,'height':500/ratio},duration:500});
    
  }
  
  for(var i=0;i<imgs.length;i++){
    var s=imgs[i];
    
    s.classes=s.className.split(' ');
    
    s.newsrc=s.classes[s.classes.length-3];
    div2 =document.createElement('div');
    setStyle(div2,{'position':'absolute','width':'25px','height':'16px','left':(s.offsetLeft-15)+'px',
                  'top':(getOffset(s,true).top-5)+'px','background':'url(/style/loupe.gif)','cursor':'pointer'});
    div2.mimg=s;
    s.parentNode.insertBefore(div2,s);
    s.tmpimg= new Image;
    s.tmpimg.mwidth=s.classes[s.classes.length-2];
    s.tmpimg.mheight=s.classes[s.classes.length-1];
    s.tmpimg.src=s.newsrc;
    newimgs[newimgs.length]=s.tmpimg
    startListen(div2,'click',function(e){
          stopPropagation(e);
          expand(window.event ? event.srcElement.mimg :  this.mimg);
      return;
    },true)
  }
}

function caroussel(container,imgs,startimg){
  if(!(this.container=container)) return;
  if(!(this.imgs=imgs)) return;
  this.startimg=startimg || this.imgs[0];
  for(var start_i=0;start_i<this.imgs.length;start_i++){
    if(this.imgs[start_i]==this.startimg) break;
  }
  var width=500, height=130;
  var center_x=(container.offsetWidth)/2, center_y=(container.offsetHeight-height)/2;
  mthis=this
 
  var newPos=function(el,angle){
    var sin=Math.sin(angle), cos=Math.cos(angle), ratio=(cos+3)/4
    var x=(center_x + width*sin/2) - el.initialWidth*ratio/2;
    var y=center_y + height*cos/2 - el.initialHeight*ratio/2;
    var i=0;
    setStyle(el,{
              'top':0,'left':0,
              'height':(el.initialHeight*ratio)+"px",
              'width':(el.initialWidth*ratio)+"px",
              'opacity':1.25*(ratio-0.2)});
    if(ratio==1){
      setStyle(el,{'top':'5px','left':'5px'});
      setStyle(el.parentNode,{
              'height':(el.initialHeight*ratio+10)+"px",
              'width':(el.initialWidth*ratio+10)+"px",
              'top':y-5+"px",
              'left':x-5+"px",
              'zIndex':Math.floor(ratio*1000),
              'background':'#fff'}
              );
              
    }else{
      setStyle(el.parentNode,{
              'height':(el.initialHeight*ratio)+"px",
              'width':(el.initialWidth*ratio)+"px",
              'top':y+"px",
              'left':x+"px",
              'zIndex':Math.floor(ratio*1000),
              'background':'#000'});
    }
  }

  var turn = function(){
    var el = window.event ? event.srcElement :  this
    var s=el.imgs;    
    for(var i=0;i<s.length;i++)
      stopListen(s[i],'click',turn);
    var pi=2*Math.PI,i,dangle=(pi-el.angle) % (pi);
    dangle=dangle>(pi/2 -0.01)?dangle-pi:dangle;
    var start= +new Date,dur=4000*Math.abs(dangle)/6,finish=start+dur;
    var interval = setInterval(function(){
     	var time= +new Date, pos=time>finish?dangle:(time-start)*dangle/dur,angle;
      for(var mel=0;mel<s.length;mel++){
		    newPos(s[mel],(s[mel].angle + pos));
    		if(pos==dangle){
    			s[mel].angle=(s[mel].angle +dangle) % pi;
    			startListen(s[mel],'click',turn);
    		}
    	}
      if(time>finish)
        clearInterval(interval);        
      },40)
  }
  
  for(var i=0;i<this.imgs.length;i++){
    var s=this.imgs[i];
    if(s.initialWidth){
      s.angle=((i-start_i)*2*Math.PI/this.imgs.length) % (2*Math.PI);
      newPos(s,s.angle);
      continue;
    }
    var div=document.createElement('div')
    s.parentNode.appendChild(div);
    div.appendChild(s)
    setStyle(div,{'position':"absolute",'background':'#000'});
    setStyle(s,{'position':"absolute"});
    s.imgs=this.imgs;
    s.angle=((i-start_i)*2*Math.PI/this.imgs.length) % (2*Math.PI);
    s.initialWidth=s.width;
    s.initialHeight=s.height;
    s.initialRatio=s.width/s.height
    if(s.initialWidth>800){
      s.initialWidth=800;s.initialHeight=800/s.initialRatio
    }
    if(s.initialHeight>800){
      s.initialHeight=800;s.initialWidth=800*s.initialRatio
    }
    
    newPos(s,s.angle);
    startListen(s,'click',turn);
  }
}


function startListen(element, type, expression, bubbling){
  bubbling = bubbling || false;
  if(element.addEventListener) { // Standard
    element.addEventListener(type, expression, bubbling);
    return true;
  } else if(window.attachEvent) { // IE
    element.attachEvent('on' + type, expression);
    return true;
  } else return false;
}

function stopListen(element, type, expression, bubbling){
  bubbling = bubbling || false;
  if (element.removeEventListener) {
    element.removeEventListener(type, expression, bubbling);
    return true;
  } else if(window.detachEvent) {
    element.detachEvent("on" + type, expression);
    return true;
  } else return false;
}

function stopPropagation(e){
  if (!e) var e = window.event;
      e.cancelBubble = true; e.returnValue = false;
  if (e.stopPropagation){e.stopPropagation();e.preventDefault();}
}

function getOffset(element,positionned){
 var valueT=0,valueL=0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
      if(positionned && ((element.style['position'] !== 'static') || (element.tagName.toUpperCase() == 'BODY'))) break;
    } while (element);
    return {'left':valueL,'top':valueT}
}
