var Class={
  create: function(){
    return function(){ this.initialize.apply(this,arguments); }
  }
};

Object.extend=function(destination,source) {
	var init=false;
  for(property in source){
		destination[property]=source[property];
		if(property=='initialize') init=true;
	}
	if(init) destination.initialize();
  return destination;
};

function $(){
	if(document.getElementById){
	  var elements=new Array();
	  for(var i=0;i<arguments.length; i++) {
	    var element=arguments[i];
	    if(typeof element=='string') element=document.getElementById(element);
	    if(arguments.length==1) return element;
	    elements.push(element);
	  }
	}else elements=null;
  return elements;
}

Function.prototype.bind = function(object) {
  var __method = this;
  return function() {
    return __method.apply(object, arguments);
  };
};

Object.extend(String.prototype,{
	trim : function(a){ if(typeof a!='undefined') return this.replace(new RegExp('(^('+a+')*)|(('+a+')*$)','g'),''); else return this.replace(/(^\s*)|(\s*$)/g,''); },
	ltrim: function(a){ if(typeof a!='undefined') return this.replace(new RegExp('^('+a+')*','g'),''); else return this.replace(/^\s*/g,''); },
	rtrim: function(a){ if(typeof a!='undefined') return this.replace(new RegExp('('+a+')*$','g'),''); else return this.replace(/\s*$/g,''); },
	encodeEntities: function(){
		return this.replace(/\u0026lt;/g,'#h2x_lt').replace(/\u0026gt;/g,'#h2x_gt').replace(/\u0026/g,'&amp;').replace(/\u003C/g,'&lt;').replace(/\u003E/g,'&gt;').replace(/\u0022/g,'&quot;').replace(/#h2x_lt/g,'&lt;').replace(/#h2x_gt/g,'&gt;');
	},
	decodeEntities: function(){
		return this.replace(/\u0026lt;/g,'\u003C').replace(/\u0026gt;/g,'\u003E').replace(/\u0026quot;/g,'\u0022').replace(/\u0026amp;/g,'\u0026');
	}
});

Object.extend(Math,{
	sinoidal: function(pos){ return ((-this.cos(pos*this.PI)/2) + 0.5); },
	linear: function(pos){ return pos; },
	cubic: function(a){ this.pow(pos,3); },
	circ: function(){ this.sqrt(pos); }
});

function popup(txt,w,h){
	if(typeof(w)=='undefined') w=800;
	if(typeof(h)=='undefined') h=600;
	var leftPos=Math.round((screen.availWidth - w)/2);
	var topPos=Math.round((screen.availHeight - h)/2);
	var option='width='+w+',height='+h+',left='+leftPos+',top='+topPos+',resizable,scrollbars';
	var win=window.open('','winhelp',option);
	win.document.open('text/html');
	win.document.write('<html><title>Help</title><style>*{font-family:Verdana;font-size:9px;}</style><body>'+txt+'</table></body></html>');
	win.document.close();
	win.focus();
}

function help(o){
	var txt='<table cellspacing="2" cellpadding="1" border="1">';
	var i=0;
	var value='';
	for(k in o){
		value='';
		try{ value=String(o[k]); }catch(e){ value='undefined';}
		txt+='<tr><th>'+k+'</th><td>'+value.toString().encodeEntities()+'&nbsp;</td></tr>'+"\n";
	}
	return popup(txt+='</table>');
}

document.getElementsByClassName=function(className, parentElement) {
  var children = ($(parentElement) || document.body).getElementsByTagName('*');
  return $A(children).inject([], function(elements, child) {
    if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
      elements.push(child);
    return elements;
  });
};

function getArrayClass(classname){
	if(!window.Elmbyclassname){
		window.Elmbyclassname=new Array();
	  var Childs = document.body.getElementsByTagName('*');
	  for(var i=0;i<=Childs.length;i++){
			if(Childs[i]&&Childs[i].className){
				var name=Childs[i].className.trim();
				if(!Elmbyclassname[name])Elmbyclassname[name]=new Array();
				Elmbyclassname[name].push(Childs[i]);
			}
		}
	}
	return (Elmbyclassname[classname]||null);
}

function getObj(){
	var Elms=new Array();
	var elm=null;
	for(var i=0;i<arguments.length;i++){
		elm=arguments[i];
		if(typeof elm=='string') elm=$(elm);
		if(elm){
			switch(elm.nodeName.toLowerCase()){
			 case 'form': if(window.extForm) Object.extend(elm,extForm); break;
			 case 'object': if(window.Wpv) Object.extend(elm,Wpv); break;
			 default: if(window.Obj) Object.extend(elm,Obj); break;
			}
			if(arguments.length==1) return elm;
			Elms.push(elm);
		}else{
			if(arguments.length==1) return null;
		}
	}
	return Elms;
}

var Cookie={
	init: function(){
		var Cook=document.cookie.split(';');
		this.Elm=[];
		for(var i=0;i<Cook.length;i++){
			var Elm=Cook[i].trim().split('=');
			this.Elm[unescape(Elm[0])]=unescape(Elm[1]);
		}
	},
	get: function(varname){
		if(!this.Elm) this.init();
		if(this.Elm[varname]) return this.Elm[varname];
		return null;
	},
	set: function(name,value,path,expdays,domain,secure){
		if(path===true) path=location.pathname;
		if(parseInt(expdays)>0){
			var date=new Date();
			date.setTime(date.getTime()+expdays*24*60*60*1000);
		}
		document.cookie=name+'='+escape(value)+((expdays)?';expires='+date.toGMTString():'')+((path)?'; path='+path:'')+((domain)?'; domain='+domain:'')+((secure)?'; secure':'');
		if((path==location.pathname||!path)&&!domain)this.Elm[name]=value;
	},
	del: function(name,path,domain){
		if(path===true) path=location.pathname;
		if(this.get(name)){
			document.cookie=name+'='+((path)?'; path='+path:'')+((domain)?'; domain='+domain:'')+';expires=Thu, 01-Jan-1970 00:00:01 GMT';
			this.init();
		}
	}
};

var Get={
	init: function(uri){		
		if(!uri) uri=location.href.decodeEntities();
		this.Elm=[];
		if(uri.lastIndexOf('?')>=0){
			var Gets=uri.substring(uri.lastIndexOf('?')+1).split('&');
			for(var i=0;i<Gets.length;i++){
			   var Elm=Gets[i].split('=');
			   this.Elm[Elm[0]]=unescape(Elm[1]);
			}
		}
	},
	get: function(varname){
		if(!this.Elm) this.init();
		if(this.Elm[varname]) return this.Elm[varname];
		return null;
	},
	add: function(name,value,path,expdays,domain,secure){
		if(path===true) path=location.pathname;
		if(parseInt(expdays)>0){
			var date=new Date();
			date.setTime(date.getTime()+expdays*24*60*60*1000);
		}
		document.cookie=name+'='+escape(value)+((expdays)?';expires='+date.toGMTString():'')+((path)?'; path='+path:'')+((domain)?'; domain='+domain:'')+((secure)?'; secure':'');
		if((path==location.pathname||!path)&&!domain)this.Elm[name]=value;
	},
	del: function(name,path,domain){
		if(path===true) path=location.pathname;
		if(this.get(name)){
			document.cookie=name+'='+((path)?'; path='+path:'')+((domain)?'; domain='+domain:'')+';expires=Thu, 01-Jan-1970 00:00:01 GMT';
			this.init();
		}
	}
};

var Obj={
	tag: function(){ return this.nodeName.toLowerCase(); },
	setStateClass:function(state){
		if(typeof this.defaultClass=='undefined'){
			switch(this.className){
				case 'on':case 'off':case 'in': this.defaultClass=''; break;
				default: this.defaultClass=this.className; break;
			}
		}
		if(typeof state=='undefined'||state==''){
			this.className=this.defaultClass;
			this.stateClass='';
		}else if(!this.stateClass || this.stateClass!=state){
			if(this.defaultClass=='') this.className=state;
			else this.className=this.defaultClass+'-'+state;
			this.stateClass=state;
		}
	},
	setStyle: function(prop,val){
		this.style[prop]=val;
	},
  getStyle: function(prop){
    var val=this.style[prop];
    if(!val){
      if(window.getComputedStyle){
        var css=document.defaultView.getComputedStyle(this,null);
        val=css ? css.getPropertyValue(prop) : null;
      }else if(this.currentStyle) val=this.currentStyle[prop];
    }
    if(window.opera &&['left','top','right','bottom'].include(prop))
      if(this.getStyle('position')=='static') val='auto';
    return val=='auto' ? null : val;
  },
	expand: function(mw,mh,p,step,speed){
		this.expandparam={maxwidth:mw,maxheight:mh,pourcent:p,step:step};
		this.stepExpand();
		this.show();
		this.expandparam.timer = setInterval(this.stepExpand.bind(this),speed);
	},
	stepExpand: function(){
//		window.status=' step:'+this.expandparam.step/10+' sinoidal:'+(Math.sinoidal(this.expandparam.step+1/10));
		this.expandparam.step+=this.expandparam.pourcent;
		if(this.expandparam.step<=100){
			if(this.expandparam.maxwidth>0) this.setStyle('width',Math.floor(this.expandparam.step/100*this.expandparam.maxwidth)+'px');
			if(this.expandparam.maxheight>0) this.setStyle('height',Math.floor(this.expandparam.step/100*this.expandparam.maxheight)+'px');
		}else{
			clearInterval(this.expandparam.timer);
			this.expandparam.timer=null;
			if(this.onExpand) this.onExpand();
		}
	},
	setOpacity: function(opacity){
		opacity=(opacity==1)?0.99:opacity;
		if(window.ActiveXObject && (!this.mimeType || this.mimeType!='Image PNG')) this.style.filter='alpha(opacity:'+opacity*100+')';
		this.style.KHTMLOpacity=opacity;
		this.style.MozOpacity=opacity;
		this.style.opacity=opacity;
	},
	fadeIn: function(opacity,step,speed){
		this.fadeinparam={opacity:opacity,step:step};
		this.setOpacity(opacity);
		this.show();
		this.fadeinparam.timer = setInterval(this.stepFadeIn.bind(this),speed);
	},
	stepFadeIn: function(){
		/*window.status='opacity:'+this.opacity+' stepopacity:'+this.stepopacity;*/
		this.fadeinparam.opacity+=this.fadeinparam.step;
		if(this.fadeinparam.opacity<1){
			this.setOpacity(this.fadeinparam.opacity);
		}else{
			clearInterval(this.fadeinparam.timer);
			this.fadeinparam.timer=null;
			this.setOpacity(1);
			if(this.onFadeIn) this.onFadeIn();
		}
	},
	show: function(){	this.setStyle('visibility','visible'); },
	hide: function(){ this.setStyle('visibility','hidden'); }
	
};
/*sinoidal = function(pos){
	return ((-Math.cos(pos*Math.PI)/2) + 0.5);
	//this transition is from script.aculo.us
}*/

var SlideShow={
	initialize: function(){
		this.Imgs=[];
		this.Desc=[];
		this.pos=0;
		
		var div=document.createElement('div');
		this.parentNode.appendChild(div);
		div.appendChild(this);
		div.className='slideshow';
		this.showdesc=div.appendChild(document.createElement('div'));
		this.showdesc.className='description';		
		this.showp=getObj(div.appendChild(document.createElement('p')));
		this.showp.className='visuel';
		this.showspan=getObj(this.showp.appendChild(document.createElement('span')));
		this.showpic=this.showspan.appendChild(document.createElement('img'));
		
		this.showpic.src='/htc/px.png';
		this.showpic.slideshow=this;
		this.showspan.showp=this.showp;
		
		this.showspan.onFadeIn=function(){ this.showp.setStyle('backgroundImage','none'); };
		this.showpic.onload=function(){ this.slideshow.magnifyshow(this.src); };
		
		this.showmenu=this;
		Object.extend(this,Obj);
		if(this.showmenu.getElementsByTagName('dt')){
			var list=this.showmenu.getElementsByTagName('dt');
			var e=0;
			for(var i=0;i<list.length;i++){
				if(list[i].getElementsByTagName('a')){
					var dt=getObj(list[i]);
					var a=dt.getElementsByTagName('a')[0];
					var o=dt.nextSibling;
					a.Desc=new Array();
					while(o && o.nodeName.toLowerCase()!='dt'){
						if(o.nodeName.toLowerCase()=='dd') a.Desc[a.Desc.length]=getObj(o);
						o=o.nextSibling;
					}
					Object.extend(a,Obj);
					a.oldhref=a.href;
					this.Imgs[e]=a;
					a.href='javascript:;';
					a.slideshow=this;
					a.numpic=e;
					a.onclick=function(){ this.slideshow.activate(this.numpic); this.blur(); };
					var o=this.firstChild;
					while(o && o.nodeName!='DT' && o.nodeName!='DD') o=o.firstChild;
					if(o && o.nodeName!='DD') o=null;
					this.Desc[e]=o;
					e++;
				}
			}
			var prev=div.insertBefore(document.createElement('a'),this.showmenu);
			prev.className='prev';
			prev.href='javascript:;';
			var img=prev.appendChild(document.createElement('img'));
			img.src='/htc/px.png';
			
			prev.slideshow=this;
			prev.onclick=function(){
//				alert(this.slideshow.showmenu.view);
				var list=this.slideshow.showmenu.getElementsByTagName('dt');
				if(this.slideshow.showmenu.view<list.length){
					for(var i=list.length-1;i>=0;i--){
						if(list[i].style.display=='none'){
							list[i].style.display='block';
							this.slideshow.showmenu.view++;
							break;
						}
					}
				}
				this.blur();
			};
			this.showmenu.view=this.showmenu.getElementsByTagName('dt').length;
			var next=this.appendChild(document.createElement('a'));
			next.className='next';
			next.href='javascript:;';
			img=next.appendChild(document.createElement('img'));
			img.src='/htc/px.png';
			
			next.slideshow=this;
			next.onclick=function(){
//				alert(this.slideshow.showmenu.view);
				if(this.slideshow.showmenu.view>4){
					var list=this.slideshow.showmenu.getElementsByTagName('dt');
					for(var i=0;i<list.length;i++){
						if(list[i].style.display!='none'){
							list[i].style.display='none';
							this.slideshow.showmenu.view--;
							break;
						}
					}
				}
				this.blur();
			};
		}
		this.activate(0);
//	help(this.Imgs);
	},
	setSrc: function(){
		this.showpic.src=this.Imgs[this.pos].oldhref;
	},
	activate: function(num){
		if(this.Imgs[num]){
			this.Imgs[this.pos].setStateClass('off');
			for(var i=0;i<this.Imgs[this.pos].Desc.length;i++){ this.Imgs[this.pos].Desc[i].setStateClass('off'); }
			this.pos=num;
			this.Imgs[num].setStateClass('on');
			if(this.Imgs[this.pos].Desc[0]) this.showdesc.innerHTML=this.Imgs[this.pos].Desc[0].innerHTML;
			this.showspan.setOpacity(0);	
			this.showp.setStyle('backgroundImage',this.showspan.getStyle('backgroundImage'));
	
			setTimeout(this.setSrc.bind(this),10);
	//		for(var e=0;e<o.length;e++){ if(e!=this.def)o[e].style['display']='none'; }
		}
	},
	magnifyshow: function(src){
		this.showspan.setStyle('backgroundImage','url('+src+')');
		this.showspan.fadeIn(0.1,0.1,100);
	}
};
var Animation={
	initialize: function(){
		if(!this.change) this.change=2000;
		this.Ref=new Array();
		if(this.nodeName.toLowerCase()=='ul' && this.getElementsByTagName('ul')[0]){
			var Lis=this.getElementsByTagName('li');
			for(var i=0;i<Lis.length;i++){
				if(Lis[i].getElementsByTagName('ul')[0]) this.Ref.push(getObj(Lis[i]));
			}
		}else{
			this.Ref.push(o);
		}
		for(var j=0;j<this.Ref.length;j++){
			this.Ref[j].ac=this.Ref[j].getElementsByTagName('a')[0];
			var ac=getObj(this.Ref[j].ac);
			var Imgs=this.Ref[j].getElementsByTagName('img');
			ac.ImgSrc=new Array();
			for(var i=0;i<Imgs.length;i++){
				ac.ImgSrc[i]=new Image(120,80);
				ac.ImgSrc[i].src=Imgs[i].src;
			}
			ac.counter=0;
			ac.setStyle('backgroundImage','url('+ac.ImgSrc[0].src+')');
			ac.master=this;
			if(j==this.Ref.length-1){
				ac.onFadeIn=function(){ setTimeout(this.master.fadeRecursive.bind(this.master),this.master.change); }
			}else{
				ac.onFadeIn=function(){ this.master.fadeRecursive(); }
			}
			ac.counter=0;
			getObj(this.Ref[j].getElementsByTagName('img')[0]).hide();
		}
		this.counter=0;
		this.fadeRecursive();
	},
	fadeRecursive: function(){
		var ac=this.Ref[this.counter].ac;
		this.Ref[this.counter].setStyle('backgroundImage','url('+ac.ImgSrc[ac.counter].src+')');
		ac.counter++;
		if(!ac.ImgSrc[ac.counter]) ac.counter=0;
		ac.setStyle('backgroundImage','url('+ac.ImgSrc[ac.counter].src+')');
		if(typeof document.body.style.maxHeight != 'undefined') ac.fadeIn(0.1,0.1,100); else ac.fadeIn(0,1,900);
		this.counter++;
		if(this.counter==this.Ref.length) this.counter=0;
	}
};
var Marquee={
	initialize: function(){
		this.idint=null; //id de l'interval prochainement exécuté.
		if(!this.speed) this.speed=6;
		if(!this.pas) this.pas=6;

		if(typeof document.body.style.maxHeight != 'undefined'){
			this.setStyle('position','absolute');
			this.setStyle('left','-10000px');
			if(this.offsetWidth && this.offsetWidth>0 && this.parentNode){
				this.pwidth=this.offsetWidth;
				this.pinit=this.parentNode.offsetWidth;
				this.pas=-this.pinit;
				this.setStyle('left','');
				this.setStyle('position','static');
				this.onmouseover=function(){ clearInterval(this.idint); }
				this.onmouseout=function(){ this.mstart(); }
				this.show();
				this.mstart();
			}
		}else{
			var marquee=document.createElement('marquee');
			marquee.appendChild(document.createTextNode(this.firstChild.data));
		 	marquee=this.parentNode.replaceChild(marquee,this);
		}
	},
	mboucle: function(){
		if(this.pas>=this.pwidth) this.pas=-this.pinit; else this.pas=this.pas+this.speed;
		this.setStyle('marginLeft',(-this.pas)+'px');
	},
	mstart: function(){ this.idint=setInterval(this.mboucle.bind(this),100); }
};


var Tiroir={
	initialize: function(){
		if(!this.tagglobal) this.tagglobal='dl';
		if(!this.tagclick) this.tagclick='dt';
		if(!this.tagcache) this.tagcache='dd';

		if(this.nodeName.toLowerCase()==this.tagglobal){
			var dts=this.getElementsByTagName(this.tagclick);
			var dds=this.getElementsByTagName(this.tagcache);
			for(var i=0;i<dds.length;i++) getObj(dds[i]).setStyle('display','none');
			for(var i=0;i<dts.length;i++){
				dts[i].tagclick=this.tagclick;
				dts[i].tagcache=this.tagcache;
				dts[i].onclick=this.click;
			}
		}
	},
	click: function(){
		var o=getObj(this.nextSibling);
		while(o && o.nodeName.toLowerCase()!=this.tagclick){
			if(o.nodeName.toLowerCase()==this.tagcache){
				if(o.getStyle('display')=='none') o.setStyle('display','block');
				else o.setStyle('display','none');
			}
			o=getObj(o.nextSibling);
		}	
	}
};
var ExtendLink={
	initialize: function(){
		if(!this.tag) this.tag='table';
		if(!this.tagclick) this.tagclick='tr';
		if(!this.tagstart && this.tag=='table') this.tagstart='tbody';

		if(this.nodeName.toLowerCase()==this.tag){
			if(!this.tagstart){
				var Elms=this.getElementsByTagName(this.tagclick);
			}else{
				var Elms=this.getElementsByTagName(this.tagstart)[0].getElementsByTagName(this.tagclick);
			}
			for(var i=0;i<Elms.length;i++){
				var o=getObj(Elms[i]);
				if(o.getElementsByTagName('a')[0] && o.getElementsByTagName('a')[0].href!=''){
					o.onclick=function(){ window.location.href=this.getElementsByTagName('a')[0].href; }
					o.onmouseover=function(){ this.setStateClass('over'); }
					o.onmouseout=function(){ this.setStateClass('out'); }
				}else o.className=o.setStateClass('off');
			}
		}
	}
};
var LinkTargetWindow={
	initialize: function(){
		if(this.title=='') this.title = 'S’ouvre dans une nouvelle fenêtre';
		this.onclick = function()  {
			window.open(this.href);
			return false; // inhibe le lien réel.
		};
	}
};
var ZoomImg={
	initialize: function(){					
		var span=getObj(document.createElement('span'));
		span.setStyle('position','relative');
		span.className='zoomimg';
		span.appendChild(this.cloneNode(false));
		span.onmouseover=function(){ this.span.className='on'; }
		span.onmouseout=function(){ this.span.className='off'; }			
		var span2=getObj(span.appendChild(document.createElement('span')));
		span.span=span2;
		var img=getObj(document.createElement('img'));
		img.src=this.src.replace(/-[a-z0-9]+\.(jpg|png|gif)$/g,'.$1');
		span2.appendChild(img);
		this.parentNode.replaceChild(span,this);
	}
};

function extendlink(tag,classname,tagclick,tagstart){
	var Elms=getArrayClass(classname);
	if(Elms){
		for(var e=0;e<Elms.length;e++){
			Elms[e].tag=tag;
			Elms[e].tagclick=tagclick;
			Elms[e].tagstart=tagstart;
			Object.extend(Elms[e],ExtendLink);
		}
	}
}
function linkwindow(classname){
	var Elms=getArrayClass(classname);
	if(Elms){
		for(var e=0;e<Elms.length;e++){
			if(Elms[e].nodeName.toLowerCase()=='a') Object.extend(Elms[e],LinkTargetWindow);
		}
	}
}
function cachecache(classname,tagglobal,tagclick,tagcache){
	var Elms=getArrayClass(classname);
	if(Elms){
		for(var e=0;e<Elms.length;e++){
			Elms[e].tagglobal=tagglobal;
			Elms[e].tagclick=tagclick;
			Elms[e].tagcache=tagcache;
			Object.extend(Elms[e],Tiroir);
		}
	}
}
function fadeTransition(classname,change){
	var Elms=getArrayClass(classname);
	if(Elms){
		for(var e=0;e<Elms.length;e++){
			Elms[e].change=change;
			Object.extend(Elms[e],Animation);
		}
	}
}
function defil(classname,speed){
	var Elms=getArrayClass(classname);
	if(Elms){
		for(var e=0;e<Elms.length;e++){
			Elms[e].speed=speed;
			Object.extend(getObj(Elms[e]),Marquee);
		}
	}
}
function zoomimg(classname){
	var Elms=getArrayClass(classname);
	if(Elms){
		for(var e=0;e<Elms.length;e++){
			if(Elms[e].nodeName.toLowerCase()=='img'){
				Elms[e].num=e;
				Object.extend(Elms[e],ZoomImg);
			}
		}
	}
}

function slideshow(classname){
	var Elms=getArrayClass(classname);
	if(Elms){
		for(var e=0;e<Elms.length;e++){
			if(Elms[e].nodeName.toLowerCase()=='dl'){
				Elms[e].num=e;
				Object.extend(Elms[e],SlideShow);
			}
		}
	}
}