/**
 * @author: Paweł Nagórski
 * @category: Skrypt płynnie przesuwający windę
 * @copyright: Copyright (c) 2010 NPART STUDIO
 * @license: Euroadres.pl, użytkownik końcowy bez prawa dalszej odsprzedaży
 **/

$( document ).ready( function(){ // uruchom po załadowaniu
    var obj = $( $.browser.msie || $.browser.opera ? window : this ); // objekt na którym przeprowadzane są operacje
    var winda = { // objekt winda
        box: $( "#winda" ), // id objekta
        container: $( "#wrapper-content" ), // id kontenera
        timeout: 10, // czas opóźnienia w milisecundach
        ratio: 0.1, // przesunięcie za jednym krokiem o podany procent
        scroll: 0, // początkowe przesunięcie w pikselach
        top: 0 // początkowe położenie
    };

    obj.bind( "scroll", // obsługa zdarzenia scroll w objekcie dokument
        function(){ // funkcja obsługująca zdarzenie
            var main = obj.scrollTop(); // położenie głównego okna
            var height = winda.box.height(); // wysokość windy
            var top = winda.box.position().top; // położenie windy
            var scroll = main - top; // oblicz przesunięcie

            if( scroll < 0 ) // czy górna granica windy jest nadal widoczna
                scroll = winda.top ? scroll : null; // ustaw scroll jeżeli winda wcześniej była przesunięta

            if( scroll ){ // czy było przesunięcie
                var down = top + height + scroll; // dolna granica windy
                var container = winda.container.position().top + winda.container.height(); // dolna granica kontenera

                if( down > container ) // czy winda jest poza dolną granicą kontenera
                    scroll = container - height - top; // oblicz nowe położenie

                winda.scroll = scroll; // ilość pikseli do przesunięcia
                move(); // przesuń windę
            }
        }
    );

    function move(){

        if( winda.scroll ){ // czy koniec przesuwania windy
            var step = Math.round( winda.scroll * winda.ratio ); // oblicz rozmiar przesunięcia pomniejszony o wymagany procent

            if( Math.abs( step ) < 1 ) // czy rozmiar przesunięcia jest mniejszy od dolnej granicy
                step = winda.scroll < 0 ? -1 : 1; // ustaw rozmiar przsunięcia na minimalną dolną granicę

            winda.scroll -= step; // pozostało do przesunięcia
            winda.top += step; // na tyle przesuwamy w pojedyńczy kroku

            if( winda.top < 1 ) // czy winda znajduje się na górnej granice
                winda.top = 0; // ustaw początkowe parametry

            winda.box.css( "top", winda.top ); // przesuń windę
            setTimeout( move, winda.timeout ); // powtarzaj dla płynności
        }
    }
});
