/**
 *	Class Fx.Scroll de Mootools 1.2.0 car les versions 1.2.1 à 1.2.3 bug
 *
 */
Fx.Scroll2 = new Class({
 
    'Extends': Fx.Scroll,
 
    'styleString': Element.getComputedStyle,
    'styleNumber': function(element, style) {
        return this.styleString(element, style).toInt() || 0;
    },
    'borderBox': function(element) {
        return this.styleString(element, '-moz-box-sizing') == 'border-box';
    },
    'topBorder': function(element) {
        return this.styleNumber(element, 'border-top-width');
    },
    'leftBorder': function(element) {
        return this.styleNumber(element, 'border-left-width');
    },
    'isBody': function(element) {
        return (/^(?:body|html)$/i).test(element.tagName);
    }, 
    'toElement': function(el) {
        var offset   = {x: 0, y: 0};
        var element  = $(el);
 
        if (this.isBody(element)) {
            return offset;
        }
        var scroll = element.getScrolls();
 
        while (element && !this.isBody(element)){
            offset.x += element.offsetLeft;
            offset.y += element.offsetTop;
 
            if (Browser.Engine.gecko){
                if (!this.borderBox(element)){
                    offset.x += this.leftBorder(element);
                    offset.y += this.topBorder(element);
                }
                var parent = element.parentNode;
                if (parent && this.styleString(parent, 'overflow') != 'visible'){
                    offset.x += this.leftBorder(parent);
                    offset.y += this.topBorder(parent);
                }
            } else if (Browser.Engine.trident || Browser.Engine.webkit){
                offset.x += this.leftBorder(element);
                offset.y += this.topBorder(element);
            }
 
            element = element.offsetParent;
            if (Browser.Engine.trident) {
                while (element && !element.currentStyle.hasLayout) {
                    element = element.offsetParent;
                }
            }
        }
        if (Browser.Engine.gecko && !this.borderBox(element)){
            offset.x -= this.leftBorder(element);
            offset.y -= this.topBorder(element);
        }
 
        var relative = this.element;
        var relativePosition = (relative && (relative = $(relative))) ? relative.getPosition() : {x: 0, y: 0};
        var position = {x: offset.x - scroll.x, y: offset.y - scroll.y};
 
        return this.start(position.x - relativePosition.x, position.y - relativePosition.y);
    }
});




var HomeScroller = new Class({
	
	Implements: Options,
	
	options: {
		scrollSelector: ".scrollZone_section",		// les slides
		buttonsSelector: ".scrollZone_menu_button",	// les boutons pour accès à un lien en particulier
		directLinkSelector: "scrollZone_direct",	// les boutons n'ayant pas de slide
		wrapperSelector: "scrollZone_scroller",		// le wrapper où l'on voit défiler les slides
		nextSelector: "scrollButton_next",			// bouton pour accéder au slide suivant
		prevSelector: "scrollButton_previous",		// bouton pour accéder au slide précédent
		scrollAction: "click",
		transitionDuration: 500,
		startIndex: 0,
		buttonOffClass: 'off',
		buttonOnClass: 'selected'
	},
	
	initialize: function(options){
		this.setOptions(options);
		
		this.scroll			= null;
		this.currentSlide	= -1;
		
		this.slides		= $$('div'+this.options.scrollSelector);
		this.buttons	= $$('a'+this.options.buttonsSelector);
		
		this.initScroll(this.options.scrollAction);
	},
	
	initScroll: function(action){
		this.scroll = new Fx.Scroll2(this.options.wrapperSelector, { duration: this.options.transitionDuration, wait: false, link: 'cancel' });
		
		this.buttons.each(function(el,index){
			$(el).addEvent(action, function(e) {
				if( !$(el).hasClass(this.options.directLinkSelector) ) {
					e.stop();
					
					this.selected(index);
				}
			}.bind(this));
		}, this);
		
		$(this.options.nextSelector).addEvent(action, function(e) {
			this.next(e);
		}.bind(this));
		
		$(this.options.prevSelector).addEvent(action, function(e) {
			this.prev(e);
		}.bind(this));
		
		this.selected(this.options.startIndex);
	},
	
	next: function(event){
		event = new Event(event).stop();
		
		current = this.currentSlide;
		next = (current+1 >= this.slides.length) ? 0 : current+1;
		this.selected(next);
	},
	
	prev: function(event){
		event = new Event(event).stop();
		
		current = this.currentSlide;
		prev = (current-1 < 0) ? this.slides.length-1 : current-1;
		this.selected(prev);
	},
	
	selected: function(slideIndex){		
		if( slideIndex != this.currentSlide ) {

			this.currentSlide = slideIndex;
			this.scroll = this.scroll.toElement(this.slides[slideIndex].get('id'));
					
			this.buttons.each(function(el,index){
				if( index == slideIndex ) {
					$(this.buttons[index]).removeClass(this.options.buttonOffClass).addClass(this.options.buttonOnClass);
				} else {
					$(this.buttons[index]).removeClass(this.options.buttonOnClass).addClass(this.options.buttonOffClass);
				}
			}, this);
		}
	}
	
});
