var Scrollable = Class.create({
    initialize: function (params) {
        this.currentPosition = 0;
        this.containerElementsToShow  = params.containerElementsToShow; //ci serve?
        this.containerChoiceElement   =  params.containerChoiceElement;
        this.heightMarginToFirstElement = params.heightMarginToFirstElement;
        //this.roomsHeight = new Hash();
        this.allElements = this.containerElementsToShow.childElements();
        this.canClickForScroll = true;
        //this.linkToRoom = params.linkToRoom
        this.addEventForRoomChoice();
    },
    addEventForRoomChoice: function(){
        var i = 0;
        var elementForClick = null;
        var elementToReach = null;
        var nrElements = this.containerChoiceElement.childElements().size()
        var allElementsToClick = this.containerChoiceElement.childElements();
        var allElementToReach = this.allElements
        for(i; i < nrElements; i++){
            elementForClick = allElementsToClick[i]
            elementToReach = allElementToReach[i];
            Event.observe(elementForClick,'click', this.scrollRequest.bindAsEventListener(this, elementToReach,null));
        }
        /*
        if(this.linkToRoom){
            this.scrollRequest(null,allElementsToClick[this.linkToRoom-1],null)
        }*/
    },
    anchor: function(client,roomId,currentY){
        var i = 0;
        var elementToReach = null;
        var allElementToReach = this.allElements
        this.canClickForScroll = false;
        elementToReach = allElementToReach[roomId];
        this.scroll(client,elementToReach[roomId-1]-50,0);
    },
    externalScrollRequest: function(client,elementToReach,currentY){
        if(this.canClickForScroll){
            this.canClickForScroll = false;
            this.scroll(client,elementToReach-50,currentY);
        }
    },
    scrollRequest: function(client,elementToReach,currentY){
        if(this.canClickForScroll){
            this.canClickForScroll = false;
            this.scroll(client,elementToReach,currentY);
        }
        if(this.linkToRoom)
            this.scrollRequest(null,this.linkToRoom,null)
    },
    scroll: function(client,elementToReach,currentY){
        var finalY = 0;
        if(typeof elementToReach == "number"){
            finalY =  elementToReach;
        }else{
            finalY =  elementToReach.offsetTop-this.heightMarginToFirstElement;
        }
        if(BrowserDetect.browser == "Safari"){
            currentY = currentY || document.body.scrollTop
        }else{
            currentY = currentY || document.documentElement.scrollTop
        }
        var delta = finalY - currentY;
        if(delta != 0){
            var incrementator = (delta / 25);
            currentY = currentY + incrementator
            self.scrollTo(0,currentY);
            if(Math.abs(delta) > 3){
                setTimeout(this.scroll.bindAsEventListener(this,elementToReach,currentY), 1);
            }else{ //per dare la possibilità di cambiare e non aspettare l'ultimo pixel di scroll
                this.canClickForScroll = true;
                delta > 0 ? incrementator = 0.5 : incrementator = -0.5;
                currentY = Math.floor(currentY) + incrementator;
                while(finalY != currentY ){
                    currentY = currentY+incrementator;
                    self.scrollTo(0,currentY);
                }
            }
        }else{
            this.canClickForScroll = true;
        }
    }
})

