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);
				}
			});
		});
	}
});
/**
 * Class affichant les mots clefs
 **/
var hiddenTitles = new Class({
	initialize: function(elobject){
		this.elements = [];
		this.elements.extend(elobject);
		this.elements.each(function(element, index){
			if ($(element)){
				if ($(element).get('value')==''){
					$(element).set('value', $(element).get('title'));
					$(element).addClass('lightvalue');
				}
				$(element).addEvents({
					'focus': function(e){
						if($(element).get('value') == $(element).get('title')){
							$(element).set('value', '');
							$(element).removeClass('lightvalue');
						}
					},
					'blur': function(e){
						if($(element).get('value') == '') {
							$(element).set('value', $(element).get('title'));
							$(element).addClass('lightvalue');
						}
					}
				});
			}
		});
	}
});

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 mooMenu = new Class({				
	initialize: function(menu){
		this.menu = $(menu);
		
		(this.elements = this.menu.getElements('li ul')).each(function(element){
			(this.elements.subelements = element.getElements('ul')).each(function(subel){
				subel.setStyle('display', 'none');
				element.addEvents({
					'mouseover': function(e){ subel.setStyle('display', ''); },
					'mouseout': function(e){ subel.setStyle('display', 'none'); }
				});
			}.bind(this));
			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);
	}

});


