/**
 * msgSlider
 * 
 * Do animacji komunikatow zwracanych z ajaxa.
 */
function msgSlider(){
    
    this.slideDiv = $('#msgSlider');
    
    //Czas przez jaki ma byc otwarte okno
    this.openTime = 5500;
    
    //backgrouind img
    this.background = 'url(/../img/icons/sprite/popup_top.png)';
    
    //Czas animacji
    this.speed = 'normal';
    
    //Kolor tekstu
    this.textColor = 'white';
    /**
     * Animuj pomyslnie wykonane zadanie
     * @param string msg - tresc wiadomosci do wyswietlenia
    */
    this.slideSuccess = function( msg ){
       
        //Odpalam animacje
        this.runQueue(msg, true, 'success');
        //Podpinam zamkniecie okna. (Jesli komus nie chce sie czekac openTimu)
        this.slideDiv.click(this.closeSlider);
    }
    
    /**
     * Animuj zadanie wykonane niepowodzeniem - error
     */
    this.slideError = function(msg){
        
        //Odpalam animacje
        this.runQueue(msg, false, 'error');
        //Podpinam zamkniecie okna
        this.slideDiv.click(this.closeSlider);
    }
    
    /**
     *Animuj zdarzenia oznaczone jako ostrzeżenie
     */
    this.slideNotice = function(msg){
        
        //Odpalam animacje
        this.runQueue(msg, true, 'notice');
        //Podpinam zdarzenie zamkniecia
        this.slideDiv.click(this.closeSlider);
    }
    
    /**
     * Kolejka animacji odpalanej do pokazania komunikatu zwrotnego
     * @param string msg - tresc wiadomosci do wyswietlenia
     * @param bool autoClose - zamknij okno po uplywie ustalonego czasu
     */
    this.runQueue = function ( msg, autoClose, cssClass) {
       
       var boxCss = { 
           'color' : this.textColor
       };       
       
       var This = this;
       
       this.slideDiv.stop(true, true).animate({'height' : '0', 'marginBottom' : '0'},this.speed, function(){
           //Ustawiam niezbede css, wykasowane po autoclosie
           $('.top',This.slideDiv).height(5);
           $('.middle',This.slideDiv).css('height', 'auto');
           $('.bottom',This.slideDiv).height(7);
           
           //Ustawiam odpowiedni rodzaj klasy jesli podano
           //Jesli niezdefinowany rodzaj klasy znaczy to, ze wywolanie mialo miejsce 
           //po refreshu strony i informacja o rodzaju akcji jest juz zapisana w clasie
           if(typeof cssClass !== 'undefined'){
                This.slideDiv.attr('class', '');
                This.slideDiv.addClass('msgSlider '+cssClass);
           }
           
           $(this).css(boxCss).find('p').html(msg); 
           This.slideDiv.animate({'height' : This.getHeight()}, This.speed);
           
           if(autoClose){
            
            //Udaje efekt delay
            This.slideDiv.animate({'marginBottom' : '1'}, This.openTime, function(){
                This.slideDiv.animate({'height' : '0', 'marginBottom' : '0'}, This.speed, function(){
                    $(this).find('div').each(function(){$(this).height('0')});
                    $(this).find('p').html('');});
           });
       }
           
       });
    }
    
    /**
     * Zamkniecie kliknietego okna zawierajacego tresc.
     */
    this.closeSlider = function(){        
        $(this).clearQueue(); //Czyszcze kolejke by w kazdym przypadku bylo mozliwe zamkniecie okna
        
        $(this).animate({'height' : '0', 'marginBottom' : '0'}, this.speed, function(){
            $(this).find('div').each(function(){$(this).height('0')});
            $(this).find('p').html('');
            $(this).unbind('click'); //Odpinam zdarzenie kliknieca
        });
    }
    
    this.checkSlide = function (){
        
        var msg = this.slideDiv.find('p').html();
        var autoClose = false;
        this.slideDiv.find('p').html('');
        //Sprawdzam czy pobrany string nie jest pusty
        if( !/^\s*$/.test(msg)){
            //Przed wywolanie, sprawdza mczy istnieje klasa autoClose
            if(/autoClose/.test(this.slideDiv.attr('class')) || /success/.test(this.slideDiv.attr('class')) ){
                autoClose = true;
            }
            
           this.runQueue(msg, autoClose);
           //Podpinam zamkniecie okna. (Jesli komus nie chce sie czekac openTimu)
           this.slideDiv.click(this.closeSlider);
        }

    }
    
    //Zwraca wysokosc slidera. Potrzebne do animacji
    this.getHeight = function(){
       return this.slideDiv.find('p').outerHeight()+13; //+ ze styli wynika to 5px + 7px top i bottom
       
    }
}
//Odpalam glownego slidera po zaladowaniu drzewa DOM
$(function(){
    var slider = new msgSlider();
    setTimeout(function(){slider.checkSlide()}, 300);
})


