/*
Cette création est mise à disposition selon le Contrat Paternité-Partage des Conditions Initiales à l'Identique 3.0 Unported disponible en ligne http://creativecommons.org/licenses/by-sa/3.0/ ou par courrier postal à Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.
*/
/* extension prototype */
Object.extend(Event, {
        wheel:function (event){
        var delta = 0;
        if (event.wheelDelta) {
			delta = event.wheelDelta/120;
			if (window.opera) delta = -delta;
        } else if (event.detail) {
            delta = -event.detail/3;
        }
		if(navigator.userAgent.indexOf('Mac') != -1) delta = -delta; 	 
		return Math.round(delta);
	}
});
var Horinaja = Class.create();
Horinaja.prototype = {
    initialize: function(capture, duree, secExecution, pagination) {
        this.capture = capture;
        this.duree = duree;
        this.secExecution = secExecution;
        this.pagination = pagination;
        this.nCell = 0;
        this.id = 1;
        this.po = 0;
        this.f = $$('div#' + this.capture + ' ul li');
        this.px = $(this.capture).getWidth();
        this.theWidth = 505;
        this.pxH = $(this.capture).getHeight();
        this.start();
    },
    start: function() {
        this.mover = $(this.capture).firstDescendant();
        this.nCell = this.f.length;
        for (i = 0; i != this.nCell; i++) {
            this.f[i].setStyle({
                width: this.px + 'px',
                height: (this.pxH - 40) + 'px',
                float: 'left'
            });
        }
        $(this.capture).setStyle({
            overflow: 'hidden',
            position: 'relative'
        });

        $(this.capture).firstDescendant().setStyle({
            width: (this.px * this.nCell) + 'px'
        });
        if (this.pagination) {
            $(this.capture).insert({ bottom: '<ol class="horinaja_pagination"></ol>' });
            this.olPagination = $(this.capture).firstDescendant().next();
            $(this.olPagination).setStyle({
            width: this.theWidth + 'px'
            });
            this.wb = Math.floor(this.theWidth / this.f.length);
            for (i = 1; i != (this.f.length + 1); i++) {
                $(this.olPagination).insert({ bottom: '<li><a style="width:' + this.wb + 'px;background-color:#0090F9;" id=' + i + '>&nbsp;</a></li>' });
                if (i != this.id) {
                    $(this.olPagination).childElements()[i - 1].setStyle({
                        opacity: .4
                    });
                }
            }
            $(this.olPagination).childElements()[0].setStyle({
                opacity: 1
            });
            this.startOC();
        }
        this.startPe();
        Event.observe($(this.capture), "mouseout", this.startPe.bind(this));
        Event.observe($(this.capture), "mouseover", this.stopPe.bind(this));
        Event.observe($(this.capture), "mousewheel", this.wheelwheel.bind(this));
        Event.observe($(this.capture), "DOMMouseScroll", this.wheelwheel.bind(this));
    },
    startOC: function() {
        Event.observe($(this.olPagination), "click", this.moveP.bind(this));
    },
    startPe: function() {
        this.periodik = new PeriodicalExecuter(this.Pe.bind(this), this.secExecution);
    },
    stopPe: function() {
        this.periodik.stop();
    },
    effaceP: function(mop) {
        this.mop = mop;
        if (this.pagination)
            new Effect.Fade($(this.olPagination).childElements()[this.mop - 1], { duration: 0.3, to: 0.4 })
    },
    move: function(xp) {
        this.xp = xp;
        new Effect.Move(this.mover, {
            x: this.xp,
            y: 0,
            mode: 'absolute',
            duration: this.duree,
            transition: Effect.Transitions.sinoidal
        });
        if (this.pagination) {
            new Effect.Appear($(this.olPagination).childElements()[this.id - 1], { duration: 0.3, to: 1 })
        }
    },
    Pe: function() {
        if (this.id < this.nCell) {
            this.po = this.po - this.px;
            this.effaceP(this.id);
            this.id = this.id + 1;
            this.move(this.po);
        } else {
            this.po = 0;
            this.effaceP(this.id);
            this.id = 1;
            this.move(this.po);
        }
    },
    moveP: function(evt) {
        var child = Event.element(evt);
        this.occ = parseInt(child.id);
        if (this.id > this.occ) {
            this.diff = this.id - this.occ;
            this.po = this.po + (this.px * this.diff);
            this.effaceP(this.id);
            this.id = this.occ;
            this.move(this.po);
        } else if (this.id < this.occ) {
            this.diff = this.occ - this.id;
            this.po = this.po - (this.px * this.diff);
            this.effaceP(this.id);
            this.id = this.occ;
            this.move(this.po);
        }
    },
    stopEvent: function(pE) {
        if (!pE)
            if (window.event)
            pE = window.event;
        else
            return;
        if (pE.cancelBubble != null)
            pE.cancelBubble = true;
        if (pE.stopPropagation)
            pE.stopPropagation();
        if (pE.preventDefault)
            pE.preventDefault();
    },
    wheelwheel: function(e) {
        this.event = e;
        this.stopPe();
        this.stopEvent(e);
        if (Event.wheel(this.event) < 0) {
            if (this.id < this.nCell) {
                this.po = this.po - this.px;
                this.effaceP(this.id);
                this.id = this.id + 1;
                this.move(this.po);
            }
        } else {
            if (this.id != 1) {
                this.po = this.po + this.px;
                this.effaceP(this.id);
                this.id = this.id - 1;
                this.move(this.po);
            }
        }
    }
};