/* 
v.1.085
*/

$(window).load(function() {
    //TODO: test on a slow connection...
    var counter = 0;

    // It seems unlikely that multiple sliders will be used on the same page, but best to play it safe...
    $('.slider').each(function() {
        
        var slider = $(this);
        
        // - - - set slide duration based on optional class - - - //
        var slideDelay = 7000; // set default for this slider
        var delayOverride = String(slider.attr('class')).match(/_t(?=([0-9]*))/); //would be simpler if javascript supported lookBehind
        if (delayOverride){
            delayOverride = String(delayOverride[1]);
            
            if(delayOverride.length > 0) {
                slideDelay = Math.max(delayOverride, 3000); //don't allow delay lower than 3 seconds
            }
        }
        
        // Check if random order is required
        var isRandom = slider.hasClass("_random")? 1 : 0;

        var thisCounter = counter; // local variable avoids suspected scope issues when using after()...
        slider.data('isPaused', false); // variable a property of the slider so it can be accessed by external scripts that affect pause state of slideshow

        var slides = slider.children();
        
        // only proceed if there's actually more than one slide!
        if(slides.not('.slider-text-block').length >1){
            
            // - - - ADD WRAPPER - - - //
            slides.wrapAll('<div id="slideshow' + thisCounter + '" class="slideshow" />');
            
            // - - - SLIDER CONFIGURATION OPTIONS - - - //
            // this needs to be accessible by other scripts
            slider.data('sliderSetup', { fx: 'fade', // choose your transition type, ex: fade, scrollUp, shuffle, etc...
                                timeout: slideDelay,
                                pause: 0,
                                random: isRandom
                              });
                                        
            var sliderNav =  {  next: '#next' + thisCounter,
                                prev: '#prev' + thisCounter
                              };
                                        
            var sliderPager = { pager: '#sliderNav' + thisCounter,
                                pagerAnchorBuilder: function(idx, slide) {
                                    return '<li><a href="#">' + (idx+1) + '</a></li>';
                                }
                              };
            
            // - - - ADD CONTROLS AND ADDITIONAL SLIDER SETTINGS - - - //
            if(slider.hasClass('slider-full-width-static-block')){
                $('#slideshow' + thisCounter).after($('.slider-text-block', slider));
                slider.prepend('<div id="pauseSlide' + thisCounter + '" class="pause"><a href="#">pause</a></div>');
                if(isRandom == 0) {
                    $.extend(slider.data('sliderSetup'), sliderNav, sliderPager);
                }
                
            }
            
            // Note that a different layout is needed if "# of #" labelling is to be used...
            else if(!slider.hasClass('counterTotal') || !slider.hasClass('slider-500-width') ) {
                if(!slider.hasClass('slider-nostyle') && isRandom == 0){
                    slider.prepend('<div class="nav"><a class="prev" id="prev' + thisCounter + '" href="#">Previous</a><a class="next" id="next' + thisCounter + '" href="#">Next</a><ul class="slide-numbers" id="sliderNav' + thisCounter + '" ></ul></div><div id="pauseSlide' + thisCounter + '" class="pause"><a href="#">pause</a></div>');
                        $.extend(slider.data('sliderSetup'), sliderNav, sliderPager);
                }
                else {
                    slider.prepend('<div id="pauseSlide' + thisCounter + '" class="pause"><a href="#">pause</a></div>');
                }
            }
            // 500 wide slider with caption
            else {
                if(isRandom == 0) {
                slider.prepend('<div class="nav"><a class="prev" id="prev' + thisCounter + '" href="#">Previous</a><a class="next" id="next' + thisCounter + '" href="#">Next</a><div class="slide-caption"><p id="sliderNav' + thisCounter + '" ></p></div></div><div id="pauseSlide' + thisCounter + '" class="pause"><a href="#">pause</a></div>');
                
                var sliderBefore = { before: function(curr, next, opts) {
                                                var caption = "";
                                                if($(this).attr('alt')) {
                                                    caption = $(this).attr('alt');
                                                }
                                                $('#sliderNav' + thisCounter).fadeOut(600, function() {
                                                    $(this).html('<em>'+(opts.currSlide+1) + ' of ' + opts.slideCount+'</em> ' +  caption).fadeIn(300);     
                                                });
                                                    
                                            }
                                   };
                
                    $.extend(slider.data('sliderSetup'), sliderNav, sliderBefore);
                }
                else {
                    slider.prepend('<div id="pauseSlide' + thisCounter + '" class="pause"><a href="#">pause</a></div>');
                }
            }

            // - - - INSTANTIATE THE SLIDER - - - //
            $('#slideshow' + thisCounter).cycle(slider.data('sliderSetup'));

            
            // - - - ADD PAUSE BUTTON EVENTS - - - //
            var pauseBtn = $('#pauseSlide' + thisCounter)
            pauseBtn.click(function(e) {
                var thisState = $('a', this);
                if(!slider.data('isPaused')) {
                    slider.data('isPaused', true);
                    thisState.html('play');
                    $(this).addClass('isPaused');
                    $('#slideshow' + thisCounter).cycle('pause');
                }
                else {
                    slider.data('isPaused', false);
                    thisState.html('pause');
                    $(this).removeClass('isPaused');
                    $('#slideshow' + thisCounter).cycle('resume');
                }
                
                e.preventDefault();
            });
            
        }//end: slides.length>1
        counter ++;
    });//end: each
    
    /* - - - PICTURE GALLERIES - - - */
    var pictureGalleries = $('.pictureGallery');
    
    pictureGalleries.each(function() {
        var thisGallery = $(this);
        // Get the index of this slider so it can be used to refernce the slideshow on click
        var thisSlider = thisGallery.find('.slider');
        var sliderIndex = $('.slider').index(thisSlider);
        var thisSlideshow = $('#slideshow' + sliderIndex);
        
        var thumbnails = $('.sliderThumbnails li > a', thisGallery);
        thumbnails.each(function() {
            var thisListElement = $(this);
            
            thisListElement.click(function(evt) {
                // get position of the clicked element in the list
                var slideIndex = thumbnails.index(this);
                thisSlideshow.cycle(slideIndex);
                evt.preventDefault();
            });
        });//end thumbnails.each()
        
        // This overrides the instantiation already performed in the slider setup above; so sliderSetup needs to be accessible via the slider object...
        var sliderBefore = {
            // event occurs before each slide transition
            before: function(currSlideElement){                     
                var slideIndex = thisSlideshow.children().index(this);
                $(thumbnails).removeClass('selected');
                thumbnails.eq(slideIndex).addClass('selected');
            }
        };
        
        $.extend(thisSlider.data('sliderSetup'), sliderBefore);
        thisSlideshow.cycle(thisSlider.data('sliderSetup'));//end: thisSlideshow.cycle()
    });//end: pictureGalleries.each()

    
});



// console.log appears to cause problems if the log isn't open hence the try/catch :/
//~ function log(logText) {
    //~ try{
        //~ console.log(logText);
    //~ }
    //~ catch(e) {
        
    //~ }
//~ }
