(function( $ ){

  var slides = [];
  var slideInterval = 5000;
  var animDuration = 700;
  var currentSlide = 0;
  var timerId = null;
  var isAnimating = 0;

  $.fn.xsGallery = function() {

    if(this.size()>0){

        slides = [];
        currentSlide = 0;
        timerId = null;
        isAnimating = 0;
        var slideContainer = '#' + this.attr('id');
        var slideCount = jQuery(slideContainer + ' li').size();


        if(slideCount){

            jQuery(slideContainer + " li").each(function() {
                var i = [];

                i[0] = jQuery(this).find('.fullsize').html();
                i[1] = jQuery(this).find('.thumb').html();
                i[2] = jQuery(this).find('.caption').html();

                slides.push(i);
            });

            this.remove();

            // Insert first picture into list
            jQuery("#fader").append('<div id="fade1">' + slides[0][0] + '</div><div id="fade2"></div>');
            jQuery('#fader a').fancybox({'overlayColor'	:'#000', 'autoScale':true, 'centerOnScroll':true});

            var thumbStrip = '';

            for(i=0;i<slides.length;i++){
                thumbStrip = thumbStrip + slides[i][1];
            }

            // Add thumbs to DOM
            jQuery("#slider").html(thumbStrip);

            $('#slider img').hover(function() {
                $(this).stop().animate({"opacity": 1});
            },function() {
                $(this).stop().animate({"opacity": 0.7});
            });

            $('#slider img').click(function(){
                $.fn.xsGallery.fadePicture($(this).attr('id'));
            });

            // Thumbnail slider scrolling

            var scrollinterval, cur_scroll = 0;

            function scrollright(width){

                scrollinterval = setInterval(function(){
                    if(-1*width+200<cur_scroll){
                        cur_scroll -= 2;
                        $('#slider').css('margin-left', cur_scroll);
                    }
                 }, 10);
            }

            function scrollleft(){

                scrollinterval = setInterval(function(){
                    if(cur_scroll<0){
                        cur_scroll += 2;
                        $('#slider').css('margin-left', cur_scroll);
                    }
                 }, 10);
            }

            function stop(){
                clearInterval(scrollinterval);
            }

            $('#slideright').hover(function() {
                scrollright($('#slider').width());
            },function() {
                stop();
            });

            $('#slideleft').hover(function() {
                scrollleft();
            },function() {
                stop();
            });

            $('#imgprev').click(function(){

                var changeTo;
                clearTimeout(timerId);

                if(currentSlide==0){
                    changeTo = slideCount-1;
                }else{
                    changeTo = currentSlide-1;
                }

                $.fn.xsGallery.fadePicture(changeTo);
            });

            $('#imgnext').click(function(){

                var changeTo;
                clearTimeout(timerId);

                if(currentSlide==(slideCount-1)){
                    changeTo = 0;
                }else{
                    changeTo = currentSlide+1;
                }

                $.fn.xsGallery.fadePicture(changeTo);

            });

            $('#wrapper').fadeIn(300);

            $.fn.xsGallery.setCaption(slides[0][2]);

        }
    }

  };


  $.fn.xsGallery.setCaption = function(txt) {

        if(txt.length>18){
            jQuery("#information").html(txt).animate({height: '40px'}, 500);
        }

  };


  $.fn.xsGallery.hideCaption = function() {

        jQuery("#information").animate({height: '0px'}, 300);

  };


  $.fn.xsGallery.fadePicture = function(fadeTo) {

        function bindFancy(){

            jQuery('#fader a').fancybox({'overlayColor'	:'#000', 'autoScale':true, 'centerOnScroll':true});

        }


        var isIE = $.browser.msie;
        var randomUrl = '';

        if(isIE){
            randomUrl = '?random=' + (new Date()).getTime();
        }

        // Insert preloaded image after it finishes loading
        $('<img />').attr('src', $(slides[fadeTo][0]).find('img').attr('src') + randomUrl).load(function(){


            if($('#fade1').is(':visible')){

                $.fn.xsGallery.hideCaption();
                $('#fade2').html(slides[fadeTo][0]).fadeIn(animDuration, function(){
                    $('#fade1').hide().html('');
                    $.fn.xsGallery.setCaption(slides[fadeTo][2]);
                    currentSlide = parseInt(fadeTo);
                    bindFancy();
                });

            }else{
                $.fn.xsGallery.hideCaption();
                $('#fade1').html(slides[fadeTo][0]).show();
                $('#fade2').fadeOut(animDuration, function(){
                    $('#fade2').html('');
                    $.fn.xsGallery.setCaption(slides[fadeTo][2]);
                    currentSlide = parseInt(fadeTo);
                    bindFancy();
                });
            }
        });

  };


})( jQuery );

