// **************************************************************
// @Name: JavaScript Przewijak
// @Autor: Tomasz Łabacki
// @Email: tomasz@labacki.com
// @WWW: http://labacki.com
// @Date: 1 February 2010
// @License: Licensed to Agencja Reklamowa MiroArt
// @Require: jQuery 1.4 or above
// @Language: PL
// **************************************************************

// *************************************************************************************************
// @Description:
// Przewijak jest skryptem implementującym animowane przewijanie w poziomie określonych treści.
// Treści mogą być uprzednio zdefiniowane w kodzie HTML strony lub zdefiniowane dopiero tutaj,
// w części konfiguracyjnej skryptu.
//
// Przewijak wymaga o określenia, w którym miejscu w kodzie HTML ma realizować swoje funkcje.
// Wymagane są dwa elementy typu div do umieszczenia uprzednio w kodzie HTML strony. Są to bloki,
// które: 1) Przechowują Przewijak (blok o id "przewijak_holder_id") oraz 2) Przechowują elementy,
// ktore mają zostać poddane animacji (blok o id "przewijak_pasek_id").
// Oto model funkcjonującego przewijaka:
// <div id="przewijak_holder_id">
//      <div id="przewijak_pasek_id">
//          <div>Tekst 1</div>
//          <div>Tekst 2</div>
//             ...
//          <div>Tekst n-1</div>
//          <div>Tekst n</div>
//      </div>
// </div>
//
// Niektóre bloki zawierające tekst mogą być uprzednio dodane w kodzie HTML. Dodatkowo, tablica
// var elementy_czasowe przechowuje wpisy, które mają się pokazać w zależności od aktualnej daty.
// Poszczególne wpisy dodaje się poprzez uzupełnienie tej tablicy, zgodnie z wzorem
// [TEKST,DATA_OD,DATA_DO]. TEKST może zawierać tagi HTML. DATA_OD i DATA_DO zawierają datę zgodnie
// z formatem MM.DD
// *************************************************************************************************

$(document).ready(function(){

    //////////////////////////////////////////////
    //              KONFIGURACJA                //
    //////////////////////////////////////////////

    var przewijak_holder_id = "komunikat_pasek";       // ID DIVa, który będzie przechowywał przewijak
    var przewijak_pasek_id = "komunikat_itemy";             // ID DIVa, który będzie przechowywał przewijane elmenty (pasek na elementy)
    var czas_przesuwania=4000;                              // czas przesuwania elementu, w ms
    var czas_pokazywania=4500;                             // czas pokazywania elementu, w ms


    //////////////////////////////////////////////////////
    // LISTA ELEMENTÓW DO WYŚWIETLENIA WG PODANYCH DAT  //
    //////////////////////////////////////////////////////

    //Wzór: [TEKST,DATA_OD,DATA_DO]. Format daty: MM.DD. Więcej w dokumentacji wyżej.
    var elementy_czasowe=new Array(
        ["Radosnych i Zdrowych Świąt Bożego Narodzenia","12.24","12.26"]
    );

    //////////////////////////////////////////////////////
    //        SYSTEM GŁÓWNY, NIE DO KONFIGURACJI        //
    //////////////////////////////////////////////////////

    // uchwyty do elementów kluczowych Przewijaka
    var przewijak_holder=$("div#"+przewijak_holder_id);
    var przewijak_pasek=$("div#"+przewijak_pasek_id);

    // sprawdzenie, czy blok trzymający przewijak istnieje
    if(przewijak_holder.size()==1){
        // sprawdzenie, czy blok trzymający elementy do przewijania (pasek) istnieje
        if(przewijak_pasek.size()==1){
            ///////////////////DODAWANIE ELEMNTÓW DO PASKA///////////////////////

            // Dodawanie przerwy na początku
            $(jQuery("<div />")).prependTo(przewijak_pasek);

            // Dodawanie elementów według daty
            if($(elementy_czasowe).size()!=0){
                //aktualna data
                var data=new Date();
                var miesiac_teraz=data.getMonth()+1;
                var dzien_teraz=data.getDate();

                // przeglądanie tablicy elementów czasowych
                $.each(elementy_czasowe,function(key,value){
                    // rozbrajanie ustawień
                    var tekst=value[0];
                    var data_od=value[1].split(".")
                    var data_do=value[2].split(".")
                    var miesiac_do=parseInt(data_do[0],10);
                    var miesiac_od=parseInt(data_od[0],10);
                    var dzien_do=parseInt(data_do[1],10);
                    var dzien_od=parseInt(data_od[1],10);

                    if((miesiac_od==miesiac_do && miesiac_od==miesiac_teraz && dzien_od<=dzien_do && dzien_teraz>=dzien_od && dzien_teraz<=dzien_do) ||
                       (miesiac_od==miesiac_do && miesiac_od==miesiac_teraz && dzien_od>=dzien_do && (dzien_teraz<=dzien_od || dzien_teraz>=dzien_do)) ||
                       (miesiac_od==miesiac_do && miesiac_teraz!=miesiac_od && dzien_od>=dzien_do) ||

                       (miesiac_od!=miesiac_do && miesiac_od<miesiac_do && miesiac_teraz<miesiac_do && miesiac_teraz>miesiac_od) ||
                       (miesiac_od!=miesiac_do && miesiac_od>miesiac_do && miesiac_teraz<miesiac_do) ||
//                       (miesiac_od!=miesiac_do && miesiac_teraz==miesiac_od && miesiac_do<miesiac_od && dzien_teraz>=dzien_od) ||
//                       (miesiac_od!=miesiac_do && miesiac_teraz==miesiac_do && miesiac_do<miesiac_od && dzien_teraz<=dzien_do) ||
                       (miesiac_od!=miesiac_do && miesiac_teraz==miesiac_do && dzien_teraz<=dzien_do) ||
                       (miesiac_od!=miesiac_do && miesiac_teraz==miesiac_od && dzien_teraz>=dzien_od))
                           $(jQuery("<div />")).html(tekst).appendTo(przewijak_pasek);
                });
            }

            ///////////////////OBRÓBKA STYLI///////////////////
            var holder_width=przewijak_holder.width();
            var holder_height=przewijak_holder.height();

            // obliczanie szerokosci paska na elementy
            var liczba_elementow=$(przewijak_pasek).find("div").size();
            var pasek_width=liczba_elementow*holder_width;

            // stosowanie styli do pojemnika na Przewijak i do paska na elementy
            $(przewijak_holder).css("position","relative");
            $(przewijak_pasek).css({"height":holder_height,"width":pasek_width,"overflow":"hidden","position":"absolute","left":0,"top":0});

            // stosowanie styli do poszczególnych elementów paska Przewijaka
            $(przewijak_pasek).find("div").each(function(){
                 var element_number = $(przewijak_pasek).find("div").index(this);
                $(this).css({"height":holder_height,"width":holder_width,"overflow":"hidden","position":"absolute","top":0,"left":element_number*holder_width});
            });

            ///////////////////ANIMACJA///////////////////
            $(przewijak_pasek).animate({left:'-='+holder_width},czas_przesuwania,"swing",function(){przewijaj(przewijak_pasek,holder_width,czas_przesuwania,czas_pokazywania)});

        } else alert("Brak pojemnika na elementy przewijaka.")
    } else alert("Brak pojemnika na przewijak.");

});

// **************************************************************
// @Function: przewijaj(object,int,int,int)
// @Description: Funkcja pomocnicza dla Przewijaka, działająca
//               w pętli, przesuwająca pasek z elementami
// **************************************************************
function przewijaj(przewijak_pasek,holder_width,czas_przesuwania,czas_pokazywania){
    // Sprawdzenie, czy przewinięto do końca pasek z elementami
    if(parseInt($(przewijak_pasek).css("left"))==-parseInt($(przewijak_pasek).css("width"))){
        // pasek z elementami przewinięty do końca, więc powróćmy do początku
        $(przewijak_pasek).css("left",0);
        $(przewijak_pasek).animate({left:'-='+holder_width},czas_przesuwania,"swing",function(){przewijaj(przewijak_pasek,holder_width,czas_przesuwania,czas_pokazywania)});
    } else{
        // pasek z elementami nie osiągnął jeszcze końca, więc przewijamy go dalej
        $(przewijak_pasek).delay(czas_pokazywania).animate({left:'-='+holder_width},czas_przesuwania,"swing",function(){przewijaj(przewijak_pasek,holder_width,czas_przesuwania,czas_pokazywania)});
    }
}
