var formHiddenLabels = new Class({
	initialize: function(){
		this.elements = [];
		$$(arguments).each(function(element, index){
			if(element.getProperty('id') && (label = $E(new String('').concat('label[for=', element.getProperty('id'), ']')).getText())) this.elements.extend({'field': element, 'label': label.clean()});
		}, this);
		this.elements.each(function(element, index){
			element.field.setProperties({
				'value': element.label,
				'title': element.label
			}).addEvents({
				'focus': function(e){
					if(this.getProperty('value') == element.label) this.setProperty('value', '');
				},
				'blur': function(e){
					if(this.getProperty('value') == '') this.setProperty('value', element.label);
				}
			});
		});
	}
});

/* Version modifiée de la Class "Scroller" de mootools pour permettre l'ajout de zone en dehors de la div 'scroll' */

var OuterScroller = new Class({

	options: {
		area: 20,
		addarea: 0,
		outArea: {
			type : 'V' ,
			width : null,
			height : null
		},
		velocity: 1,
		onChange: function(x, y){
			this.element.scrollTo(x, y);
		}
	},

	initialize: function(element, options){
		this.setOptions(options);
		this.element = $(element);
		this.mousemover = ([window, document].contains(element)) ? $(document.body) : this.element;
		if (this.options.addarea==1){
			this.addOutArea(this);
		}
	},
	
	start: function(){
		this.coord = this.getCoords.bindWithEvent(this);
		this.mousemover.addListener('mousemove', this.coord);
	},

	start2: function(){
		this.startUp = this.initStart2.bindWithEvent(this);
		this.dmu.addListener('mousemove', this.startUp);
	},
	initStart2: function(){
		if (this.timer) this.timer = $clear(this.timer);
		if (this.timer3) this.timer3 = $clear(this.timer3);
		if (!this.timer2) this.timer2 = this.scrollUp.periodical(50, this);
	},
	
	start3: function(){
		this.startDown = this.initStart3.bindWithEvent(this);
		this.dmd.addListener('mousemove', this.startDown);
	},
	initStart3: function(){
		if (this.timer) this.timer = $clear(this.timer);
		if (this.timer2) this.timer2 = $clear(this.timer2);
		if (!this.timer3) this.timer3 = this.scrollDown.periodical(50, this);
	},

	stop: function(){
		this.mousemover.removeListener('mousemove', this.coord);
		this.timer = $clear(this.timer);
	},
	stop2: function(){
		this.timer2 = $clear(this.timer2);
	},
	stop3: function(){
		this.timer3 = $clear(this.timer3);
	},
	getCoords: function(event){
		this.page = (this.element == window) ? event.client : event.page;
		if (this.timer2) this.timer2 = $clear(this.timer2);
		if (this.timer3) this.timer3 = $clear(this.timer3);
		if (!this.timer) this.timer = this.scroll.periodical(50, this);
	},
	
	scrollUp: function(){
		var el = this.element.getSize();
		var Ymax = this.element.getSize().scrollSize.y-parseInt(this.element.getStyle('height'));
		var Xmax = this.element.getSize().scrollSize.x-parseInt(this.element.getStyle('width'));
		if (this.options.outArea.type=='H'){
			if (el.scroll.x<Xmax){
				el.scroll.x-=this.options.velocity*30;
				if (el.scroll.x<Xmax)
					this.element.scrollTo(el.scroll.x,0);
				else
					this.element.scrollTo(0,0);
			}
		}else{
			if (el.scroll.y>0){
				el.scroll.y-=this.options.velocity*30;
				if (el.scroll.y>0)
					this.element.scrollTo(0,el.scroll.y);
				else
					this.element.scrollTo(0,0);
			}
		}
	},
	
	scrollDown: function(){
		var el = this.element.getSize();
		var Ymax = this.element.getSize().scrollSize.y-parseInt(this.element.getStyle('height'));
		var Xmax = this.element.getSize().scrollSize.x-parseInt(this.element.getStyle('width'));
		if (this.options.outArea.type=='H'){
			if (el.scroll.x<Xmax){
				el.scroll.x+=this.options.velocity*30;
				if (el.scroll.x<Xmax)
					this.element.scrollTo(el.scroll.x,0);
				else
					this.element.scrollTo(Xmax,0);
			}
		}else{
			if (el.scroll.y<Ymax){
				el.scroll.y+=this.options.velocity*30;
				if (el.scroll.y<Ymax)
					this.element.scrollTo(0,el.scroll.y);
				else
					this.element.scrollTo(0,Ymax);
			}
		}
	},
	
	scroll: function(){
		var el = this.element.getSize();
		var pos = this.element.getPosition();

		var change = {'x': 0, 'y': 0};
		for (var z in this.page){
			if (this.page[z] < (this.options.area + pos[z]) && el.scroll[z] != 0)
				change[z] = (this.page[z] - this.options.area - pos[z]) * this.options.velocity;
			else if (this.page[z] + this.options.area > (el.size[z] + pos[z]) && el.scroll[z] + el.size[z] != el.scrollSize[z])
				change[z] = (this.page[z] - el.size[z] + this.options.area - pos[z]) * this.options.velocity;
		}
		if (change.y || change.x) this.fireEvent('onChange', [el.scroll.x + change.x, el.scroll.y + change.y]);
	},
	
	addOutArea: function(){
		var parentElement = this.element.getParent(); 
		//alert('pe '+parentElement.id);
		switch (this.options.outArea.type){
			case 'H': 
				this.element.setStyle('float','left');
				if (this.options.outArea.width==null)
					this.options.outArea.width=20;
				if (this.options.outArea.height==null)
					this.options.outArea.height=this.element.offsetHeight;
				break;
			case 'V':
			default : 
				if (this.options.outArea.width==null)
					this.options.outArea.width=this.element.offsetWidth;
				if (this.options.outArea.height==null)
					this.options.outArea.height=20;
				break;
		}
		this.options.outArea.width=parseInt(this.options.outArea.width);
		this.options.outArea.height=parseInt(this.options.outArea.height);
		if (!($('upmouse'))){
			this.dmu = new Element('div',{
				'id':'upmouse',
				'styles':{
					'position': 'absolute', 
					'width': this.options.outArea.width+'px', 
					'height':  this.options.outArea.height+'px'
				},
				'events':{
					'mouseenter':this.start2.bindWithEvent(this),
					'mouseleave':this.stop2.bindWithEvent(this)
				}
			});
			if (this.options.outArea.type=='H') {
				 this.dmu.setStyles({
				 	'margin-left' : '-'+this.options.outArea.width+'px',
				 	'float' : 'left'
				 });
			} else {
				 this.dmu.setStyles({
				 	'margin-top' : '-'+this.options.outArea.height+'px'
				 });
			}
			this.dmu.injectBefore(this.element.id);
		}else{
			this.dmu = $('upmouse');
			this.dmu.addEvents({
				'mouseenter':this.start2.bindWithEvent(this),
				'mouseleave':this.stop2.bindWithEvent(this)
			});
		}
		if (!($('downmouse'))){
			this.dmd = new Element('div',{
				'id':'downmouse',
				'styles':{
					'position': 'absolute', 
					'width': this.options.outArea.width+'px', 
					'height':  this.options.outArea.height+'px'
				},
				'events':{
					'mouseenter':this.start3.bindWithEvent(this),
					'mouseleave':this.stop3.bindWithEvent(this)
				}
			});
			if (this.options.outArea.type=='H') {
				 this.dmd.setStyles({
				 	'float' : 'left'
				 });
			} 
			this.dmd.injectAfter(this.element.id);
		}else{
			this.dmu = $('downmouse');
			this.dmu.addEvents({
				'mouseenter':this.start2.bindWithEvent(this),
				'mouseleave':this.stop2.bindWithEvent(this)
			});
		}
	}
});

OuterScroller.implement(new Events, new Options);

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 newAccordion(
			$$(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 limitValues = new Class({
	initialize: function(){
		this.elements = [];
		this.elements.extend(arguments);
		this.elements=this.elements.flatten();
		this.elements.each(function(element, index){
			if ($(element)){
				var tAr = $(element).getProperty('limit').split('-');
				var nMax = tAr[0];
				if (tAr.length==1)
					tAr[1]='t';
				switch (tAr[1]){
					case 'd':
						$(element).addEvents({
							'keyup': function(e){
								var ttext = $(element).value;
								var arrToChk  = '0123456789';
								for (j=0;j<=((ttext.length)-1);j++)
									if (strpos(arrToChk,ttext[j],0)===false)
										ttext = ttext.replace(ttext[j],'-');
								ttext = ttext.replace('-','');
								$(element).value=ttext.substr(0,nMax);	
							}
						});					
						break;
					case 'c':	
						$(element).addEvents({
							'click': function(e){
								var listCB = document.getElementsByName($(element).getProperty('name'));
								var nCnt = 0;
								for (i=0;i<=(listCB.length)-1;i++){
									if ($(listCB[i].id).checked)
										nCnt++;			
								}
								if (nCnt>nMax){
									$(element).checked=false;
								}
							}
						});					
						break;
					case 't':
					default :
						$(element).addEvents({
							'keyup': function(e){
								var ttext = $(element).value;
								var cLeft = nMax-ttext.length;
								if (cLeft<0)
									cLeft = 0;
								$(element).value=ttext.substr(0,nMax);	
							}
						});					
						break;
				}
			}
		});
	}
});
var mooMenu = new Class({				
	initialize: function(menu){
		this.menu = $(menu);
		
		(this.elements = this.menu.getElements('li ul')).each(function(element){
			element.setStyle('display', 'none');
			element.getParent().addEvents({
				'mouseover': function(e){ element.setStyle('display', ''); },
				'mouseout': function(e){ element.setStyle('display', 'none'); }
			});
		}, this);
	}
});


var mooSlider = new Class({
	options: {
		'transitionOut': Fx.Transitions.Sine.easeInOut,
		'transitionOutDuration': 2000,
		'waitDuration': 2,
		'accuracy': 0,
		'direction': 'vertical'
	},
	
	initialize: function(box, elements, options){		
		(this.box = $(box)).setStyle('overflow', 'hidden');
		
		this.content = new Element('div').setStyles({
			margin: 0,
			padding: 0
		});
		var nElement = $$(elements).length;
		var childWidth = 0;
		var childHeight = 0;
		$$(elements).each(function(elem,index){
			if (elem.getSize().x>childWidth)
				childWidth=elem.getSize().x;
			if (elem.getSize().y>childHeight)
				childHeight=elem.getSize().y;
		});
		this.setOptions(options);
		
		var wMargin = ($(box).getSize().x-(parseInt($(box).getSize().x/childWidth)*childWidth))/(parseInt($(box).getSize().x/childWidth)*2);
		if (parseInt(wMargin)<wMargin)
			wMargin=parseInt(wMargin)+1;
		var hMargin = ($(box).getSize().y-(parseInt($(box).getSize().y/childHeight)*childHeight))/(parseInt($(box).getSize().y/childHeight)*2);
		(this.elements = $$(elements)).each(function(element, index) {
			if( this.options.direction == 'horizontal' ){
				element.setStyle('margin','0 '+wMargin+'px 0 '+wMargin+'px');
				this.margin = 'margin-left';
			} else {
				element.setStyle('margin',hMargin+'px 0 '+hMargin+'px 0');
				this.margin = 'margin-top';
			}
			(this.elements[index] = element.clone()).injectInside(this.content);
		}, this);
		this.box.empty();
		this.content.injectInside(this.box);
		
		var fxOutOptions = { 
			onStart: Class.empty,
			onComplete: function(){
				this.fElement = this.elements.shift();
				this.elements.push(this.fElement);
				this.fElement.destroy();
				this.fElement.injectInside(this.content);
				this.content.setStyle(this.margin, 0);
			}.bind(this),
			transition: this.options.transitionOut,
			duration: this.options.transitionOutDuration, 
			wait: false
		}
		this.fxOut = new Fx.Morph(this.content, fxOutOptions);
		
		if(this.elements.length > 0){
			this.slide.periodical(this.options.waitDuration, this);
		}
	},
	
	slide: function() {
		if(this.options.direction == 'horizontal'){
			this.fxOut.start((this.elements[0].getSize().x + this.options.accuracy)*-1);
		} else{ 
			this.fxOut.start((this.elements[0].getSize().y + this.options.accuracy)*-1);
		}
	}
});
mooSlider.implement(new Events, new Options);

keywordsHidden = new Class({
	initialize: function(){
		this.elements = [];
		this.elements.extend(arguments);
		this.elements.each(function(element, index){
			if ($(element)){
				if ($(element).getProperty('value')=='')
					$(element).setProperty('value',$(element).getProperty('title'));
				$(element).addEvents({
					'focus': function(e){
						if($(element).getProperty('value') == $(element).getProperty('title')) $(element).setProperty('value', '');
					},
					'blur': function(e){
						if($(element).getProperty('value') == '') $(element).setProperty('value', $(element).getProperty('title'));
					}
				});
			}
		});
	}
});

var newAccordion = new Class({

	Extends: Fx.Elements,
	
	options: {
		display: 0,
		elToOpen: 0,
		show: false,
		height: true,
		width: false,
		opacity: true,
		fixedHeight: false,
		fixedWidth: false,
		wait: false,
		alwaysHide: false
	},

	initialize: function(){
		var params = Array.link(arguments, {'container': Element.type, 'options': Object.type, 'togglers': $defined, 'elements': $defined});
		this.parent(params.elements, params.options);
		this.togglers = $$(params.togglers);
		this.container = $(params.container);
		this.setOptions(params.options);
		this.previous = -1;
		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 = {};
		var todisplay = this.options.display;
		this.elements.each(function(el, i){
			if (el.id=='ev-'+params.options.elToOpen)
				todisplay=i;
		});
		this.options.display=todisplay;
		
		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.elements.each(function(el, i){
			if (this.options.show === i){
				this.fireEvent('active', [this.togglers[i], el]);
			} else {
				for (var fx in this.effects) el.setStyle(fx, 0);
			}
		}, this);
		if ($chk(this.options.display)) this.display(this.options.display);
	},

	addSection: function(toggler, element, pos){
		toggler = $(toggler);
		element = $(element);
		var test = this.togglers.contains(toggler);
		var len = this.togglers.length;
		this.togglers.include(toggler);
		this.elements.include(element);
		if (len && (!test || pos)){
			pos = $pick(pos, len - 1);
			toggler.inject(this.togglers[pos], 'before');
			element.inject(toggler, 'after');
		} else if (this.container && !test){
			toggler.inject(this.container);
			element.inject(this.container);
		}
		var idx = this.togglers.indexOf(toggler);
		toggler.addEvent('click', this.display.bind(this, idx));
		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;
	},

	display: function(index){
		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.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 insidePopup = new Class({
	options:{
		startHeight:0,
		duration:1,
		url:'',
		gets:[],
		width : 400,
		height: 600,
		steps:600,
		title:'',
		closer:{
			text:''
		}		
	},
	
	initialize: function(arguments){
		this.setOptions(arguments);
		this.construct();	
		this.start();	
	},
	
	construct: function(){
		var screenSize = window.getSize(); 
		if (!$('insidePop')){
			this.element = new Element('div',{
				'id':'insidePop',
				'styles':{
					'position': 'absolute', 
					'width': this.options.width+'px', 
					'height':  this.options.height+'px', 
					'left': (screenSize.x/2)-(this.options.width/2)+'px', 
					'top':  ((screenSize.y>=this.options.height) ? ((screenSize.y/2)-(this.options.height/2)) : 200)+'px',
					'border':'1px solid #989898',
					'z-index':10100,
					'background-color':'#FFFFFF',
					'overflow':'auto',
					'display':'none'
				}
			});
			this.elementContent = new Element('div',{
				'id':'contentpop',
				'styles':{
					'width': (this.options.width-20)+'px', 
					'background-color':'#FFFFFF',
					'padding':'10px 10px 10px 10px'
				}
			});
			this.element.appendChild(this.elementContent);
			this.elementCloser = new Element('div',{
				'id':'closerpop',
				'styles':{
					'position': 'absolute', 
					'width': '20px', 
					'height':  '20px',
					'top':'5px',
					'left': (this.options.width-25)+'px',
					'border':'1px solid #870507',
					'color':'#870507',
					'background-color':'#FFFFFF'
				},
				'events':{
					'click':function(){$('insidePop').setStyle('display','none');}
				}
				
			});
			if (this.options.closer.text!='')
				this.elementCloser.innerHTML=this.options.closer.text;
			this.element.appendChild(this.elementCloser);
			this.element.injectBefore('main');
		}			
	},
	
	start: function(){
		$('contentpop').innerHTML='';
		$('insidePop').setStyles({
			'display':'block',
			'height':'0px'
		});
		if (!this.timer) this.timer = this.growThis.periodical(50, this);
	},
	
	stop: function(){
		this.timer = $clear(this.timer);
	},
	
	growThis: function(){
		this.options.steps = this.options.height/this.options.duration;
		this.options.startHeight += this.options.steps;
		if (this.options.startHeight>=this.options.height){
			$('insidePop').setStyle('height',this.options.height+'px');
			this.stop();
			this.injectContent();
		}else {
			$('insidePop').setStyle('height',this.options.startHeight+'px');
		}		
	},
	
	injectContent: function(){
		var jsonRequest = new Request({
	 		url: this.options.url,
	 		method: 'get',
			onComplete: function(content){
				$('contentpop').innerHTML=content;
				$('insidePop').setStyle('height',(parseInt($('contentpop').offsetHeight)+10)+'px');
		
			}
		}).get(this.options.gets);
		
	}
});
insidePopup.implement(new Events, new Options);
