/*
 * Wykonał: Przemysław Plezia
 * Wszelkie prawa zastrzeżone. Wszystkie pomysły i poprawki proszę
 * kierować na adres pplezia@gmail.com
 */

(function($) {
    $.fn.galeria = function(ustawienia)
            {
                var ilosc=$('.'+ustawienia["classitems"]).size();
                //Ustalanie wartości domyślnych
                if(!ustawienia['pierwszy']||ustawienia['pierwszy']>ilosc)
                    {ustawienia['pierwszy']=Math.floor(Math.random()*ilosc)+1;}
                if(!ustawienia["kierunek"])
                    {ustawienia["kierunek"]='-';}
                if(!ustawienia["marginesy"]["lewy"])
                    {ustawienia["marginesy"]["lewy"]=5;}
                if(!ustawienia["marginesy"]["prawy"])
                    {ustawienia["marginesy"]["prawy"]=5;}
                if(!ustawienia["marginesy"]["dolny"])
                    {ustawienia["marginesy"]["dolny"]=0;}
                if(!ustawienia["marginesy"]["gorny"])
                    {ustawienia["marginesy"]["gorny"]=0;}
                if(!ustawienia["padding"]["lewy"])
                    {ustawienia["padding"]["lewy"]=5;}
                if(!ustawienia["padding"]["prawy"])
                    {ustawienia["padding"]["prawy"]=5;}
                if(!ustawienia["padding"]["dolny"])
                    {ustawienia["padding"]["dolny"]=0;}
                if(!ustawienia["padding"]["gorny"])
                    {ustawienia["padding"]["gorny"]=0;}
                if(!ustawienia["wysokosc"]){ustawienia["wysokosc"]=100;}
                if(!ustawienia["szerokosc"]){ustawienia["szerokosc"]=100;}
                if(!ustawienia["wysokosczdj"]){ustawienia["wysokosczdj"]="auto";}
                if(!ustawienia["szerokosczdj"]){ustawienia["szerokosczdj"]="auto";}
                //Zerowanie wartości w css
                $('.'+ustawienia["classitems"]+' img').css({padding:0,border:0,margin:0});
                //Ustalanie wyglądu elementu
                $('.'+ustawienia["classitems"]).css('border',ustawienia["obramowanie"]);
                $('.'+ustawienia["classitems"]).css('text-align',"center");
                $('.'+ustawienia["classitems"]).css('height',ustawienia["wysokosc"]);
                $('.'+ustawienia["classitems"]).css('width',ustawienia["szerokosc"]);
		$('.'+ustawienia["classitems"]).css('margin-left',ustawienia["marginesy"]["lewy"]);
                $('.'+ustawienia["classitems"]).css('margin-right',ustawienia["marginesy"]["prawy"]);
                $('.'+ustawienia["classitems"]).css('margin-top',ustawienia["marginesy"]["gorny"]);
                $('.'+ustawienia["classitems"]).css('margin-bottom',ustawienia["marginesy"]["dolny"]);
                $('.'+ustawienia["classitems"]).css('padding-left',ustawienia["padding"]["lewy"]);
                $('.'+ustawienia["classitems"]).css('padding-right',ustawienia["padding"]["prawy"]);
                $('.'+ustawienia["classitems"]).css('padding-top',ustawienia["padding"]["gorny"]);
                $('.'+ustawienia["classitems"]).css('padding-bottom',ustawienia["padding"]["dolny"]);
                $('.'+ustawienia["classitems"]).css('display','inline');
                $('.'+ustawienia["classitems"]+' img').css('max-height',ustawienia["wysokosczdj"]);
                $('.'+ustawienia["classitems"]+' img').css('max-width',ustawienia["szerokosczdj"]);
                //Przeliczenie szerokości i wysokości elementu
                ustawienia["szerokosc"]=$('.'+ustawienia["classitems"]).outerWidth(true);
                ustawienia["wysokosc"]=$('.'+ustawienia["classitems"]).outerHeight(true);

                $('#'+ustawienia["idg1"]+',#'+ustawienia["idg2"]).css('background',ustawienia["kolortlaguzikow"]);
  		$('#'+ustawienia["idg1"]+',#'+ustawienia["idg2"]).css('cursor','pointer');
                $('#'+ustawienia["idg1"]).css('width',$('#'+ustawienia["idg1"]+' img').width());
  		$('#'+ustawienia["idg1"]).css('height',$('#'+ustawienia["idg1"]+' img').height());
                $('#'+ustawienia["idg2"]).css('width',$('#'+ustawienia["idg2"]+' img').width());
  		$('#'+ustawienia["idg2"]).css('height',$('#'+ustawienia["idg2"]+' img').height());
  		$('#'+ustawienia["idwew"]).css('overflow','hidden');

                var szob,kier,k1={},k2={},k3={},k4={};
                if(ustawienia['pozycja']=='pozioma')
                    {
                        $('#'+ustawienia["idg1"]).css('float','left');
                        $('#'+ustawienia["idg2"]).css('float','left');
                        $('#'+ustawienia["idwew"]).css('float','left');
                        $('#'+ustawienia["idg1"]+',#'+ustawienia["idg2"]).css('padding-top',(ustawienia["wysokosc"]-$('#'+ustawienia["idg1"]+' img').height())/2);
                        $('#'+ustawienia["idg1"]+',#'+ustawienia["idg2"]).css('padding-bottom',(ustawienia["wysokosc"]-(ustawienia["wysokosc"]-$('#'+ustawienia["idg1"]+' img').height())/2)-$('#'+ustawienia["idg1"]+' img').height());
                        $('#'+ustawienia["idzew"]).css('width',ustawienia["szerokosc"]*ustawienia["iloscelem"]+$('#'+ustawienia["idg1"]+' img').width()+$('#'+ustawienia["idg2"]+' img').width());
                        $('#'+ustawienia["idzew"]).css('height',ustawienia["wysokosc"]);
                        $('#'+ustawienia["idwew"]).css('width',ustawienia["szerokosc"]*ustawienia["iloscelem"]);
                        $('#'+ustawienia["idwew"]).css('height',ustawienia["wysokosc"]);
                        szob=ustawienia["szerokosc"];
                        kier='left';
                        k3['left']='+='+(szob*ilosc);
                        k4['left']='-='+(szob*ilosc);
                    }
                else if(ustawienia['pozycja']=='pionowa')
                    {
                        $('#'+ustawienia["idg1"]+',#'+ustawienia["idg2"]).css('padding-left',(ustawienia["szerokosc"]-$('#'+ustawienia["idg1"]+' img').width())/2);
                        $('#'+ustawienia["idg1"]+',#'+ustawienia["idg2"]).css('padding-right',(ustawienia["szerokosc"]-(ustawienia["szerokosc"]-$('#'+ustawienia["idg1"]+' img').width())/2)-$('#'+ustawienia["idg1"]+' img').width());
                        $('#'+ustawienia["idzew"]).css('width',ustawienia["szerokosc"]);
                        $('#'+ustawienia["idzew"]).css('height',ustawienia["wysokosc"]*ustawienia["iloscelem"]+$('#'+ustawienia["idg1"]+' img').height()+$('#'+ustawienia["idg2"]+' img').height());
                        $('#'+ustawienia["idwew"]).css('width',ustawienia["szerokosc"]);
                        $('#'+ustawienia["idwew"]).css('height',ustawienia["wysokosc"]*ustawienia["iloscelem"]);
                        szob=ustawienia["wysokosc"];
                        kier='top';
                        k3['top']='+='+(szob*ilosc);
                        k4['top']='-='+(szob*ilosc);
                    }
                //Ustalenie wartości zmiennych
                var pierwszy=$('.'+ustawienia["classitems"]).first();
                var ostatni=$('.'+ustawienia["classitems"]).last();
                var dlugo=szob*ilosc;
                var dlugw=szob*ustawienia["iloscelem"];
                var a=pierwszy,b=ostatni,c=(dlugo-dlugw)/2,ile=0;
                //obliczenie ilości przesuniętych elementów
                if(c>=szob)
                    {
                        ile=Math.floor(c/szob-(ustawienia['pierwszy']-1));
                    }
                //Ustalenie pozycji pierwszego elementu
                if(ustawienia["iloscelem"]<ilosc)
                    {
                        c=(ustawienia['pierwszy']-1)*szob;
                    }
                //Pętle ustalające położenie elementów
                if(ile<0)
                    {
                        for(var i=0;i>ile;i--)
                            {
                                a.css(kier,dlugo-c+(-i*szob));
                                a=a.next();
                            }
                        c=c+ile*szob;b=a.prev();
                    }
  		for(i=0;i<ilosc-Math.abs(ile);i++)
  		{
  			a.css(kier,-c);
  			c=c-szob;
  			a=a.next();
  		}
                if(ile>0)
                    {
                        b=a.prev();
                        for(i=0;i<ile;i++)
                            {
                                a.css(kier,(-ile*szob)+(i*szob)-(ustawienia['pierwszy']-1)*szob);
                                a=a.next();
                            }
                    }
                //Ustalenie kierunku przesówania listy
                var g1,g2;
                if(ustawienia["kierunek"]=='-')
                    {
                        g1='#'+ustawienia["idg2"];
                        g2='#'+ustawienia["idg1"];
                    }
                if(ustawienia["kierunek"]=='+')
                    {
                        g2='#'+ustawienia["idg2"];
                        g1='#'+ustawienia["idg1"];
                    }
                //Funkcję przesunięcia wykonane po wciśnięciu guzika
                if(ile==0)a=pierwszy;
                else a=b.next();
                i=-ile;
  		$(g1).click(function(){
                    if(kier=='top')
                            {k1['top']='-='+szob*ustawienia["przesowo"];}
                    if(kier=='left')
                            {k1['left']='-='+szob*ustawienia["przesowo"];}
                    $('.'+ustawienia["classitems"]).animate(k1,ustawienia["spowolnienie"]);
                        for(var j=0;j<ustawienia["przesowo"];j++)
                            {
                                if(i==0)a=pierwszy;
                                i++;
                                a.animate(k3,0);
                                if(i==ilosc){i=0;}
                                else{b=a;a=a.next();}
                            }
  		});
  		$(g2).click(function(){
                    if(kier=='top')
                            {k2['top']='+='+szob*ustawienia["przesowo"];}
                    if(kier=='left')
                            {k2['left']='+='+szob*ustawienia["przesowo"];}
                    $('.'+ustawienia["classitems"]).animate(k2,ustawienia["spowolnienie"]);
                        for(var j=0;j<ustawienia["przesowo"];j++)
                            {
                                if(i==0)b=ostatni;
                                i--;
                                b.animate(k4,0);
                                if(i==-ilosc){b=ostatni;i=0;}
                                else{a=b;b=b.prev();}
                            }
  		});

                if(ustawienia["scroll"]=='on')
                    {
                        $().scroll(ustawienia['idwew'],function(e){
                            if(kier=='top')
                            {
                                k1['top']='-='+szob*ustawienia["scrollprzesowo"];
                                k2['top']='+='+szob*ustawienia["scrollprzesowo"];
                            }
                            if(kier=='left')
                            {
                                k1['left']='-='+szob*ustawienia["scrollprzesowo"];
                                k2['left']='+='+szob*ustawienia["scrollprzesowo"];
                            }
                            var ruch = e.detail ? e.detail*-1 : e.wheelDelta;
                            if(ruch>0){
                                $('.'+ustawienia["classitems"]).animate(k2,ustawienia["spowolnienie"]);
                                for(var j=0;j<ustawienia["scrollprzesowo"];j++)
                                    {
                                        if(i==0)b=ostatni;
                                        i--;
                                        b.animate(k4,0);
                                        if(i==-ilosc){b=ostatni;i=0;}
                                        else{a=b;b=b.prev();}
                                    }
                            }
                            else{
                                $('.'+ustawienia["classitems"]).animate(k1,ustawienia["spowolnienie"]);
                                for(j=0;j<ustawienia["scrollprzesowo"];j++)
                                    {
                                        if(i==0)a=pierwszy;
                                        i++;
                                        a.animate(k3,0);
                                        if(i==ilosc){i=0;}
                                        else{b=a;a=a.next();}
                                    }
                            }
                            $().cancel(e);
                        });
                    }
                
            }
    $.fn.scroll = function(element, funkcja)
    {
        if(typeof(element) == "string")element = document.getElementById(element);
        if(element == null)return;
        if(element.addEventListener)
        {
            element.addEventListener('DOMMouseScroll', funkcja, false);
            element.addEventListener("mousewheel", funkcja, false);
        }
        else if(element.attachEvent)
            element.attachEvent("onmousewheel", funkcja);
    }
    $.fn.cancel = function (e)
    {
      e = e ? e : window.event;
      if(e.stopPropagation)
        e.stopPropagation();
      if(e.preventDefault)
        e.preventDefault();
      e.cancelBubble = true;
      e.cancel = true;
      e.returnValue = false;
      return false;
    }
})(jQuery);
