
(function($){  

    $.fn.dynamiclead = function(vars) {
        
        var slideArray              = (vars.slideArray !== undefined) ? vars.slideArray : console.log('You must set a slideArray to show slides.');
        var wrapper                 = this;
        var timeOut                 = (vars.timeOut !== undefined) ? vars.timeOut : 5000;
        var pause                   = false;
        var pagination              = (vars.pagination !== undefined) ? vars.pagination : true;
        var SlideFade               = (vars.SlideFade !== undefined) ? vars.SlideFade : "slow";
        var current                 = null;
        var timeOutFn               = null;
        // var wrapper              = jQuery(element[0].selector.text);
        
        //set up structure
        $('li', wrapper).addClass('show');
        wrapper.css('position', 'relative');
        
        for(var i=0; i<slideArray.length; i++) {
            var imgtag = '';
			if(slideArray[i]['link']) {
				//imgtag = '<a href="'+ slideArray[i]['link'] +'"><img src="" alt="'+ slideArray[i]['caption'] +'" /></a>\n';
				imgtag = '<a href="'+ slideArray[i]['link'] +'"><img src="" alt="" /></a>\n';
				//imgtag = '<img src="" alt="" /><a href="'+ slideArray[i]['link'] +'"><span class="hero-link"></span></a>\n';
			} else {
				imgtag = '<img src="" alt="" />\n';
			}
			
			wrapper
                .append('<li></li>\n')
                .find('li:last')
                .append(imgtag)
                .append('<div></div>\n');
            if(slideArray[i]['headline'] || slideArray[i]['caption']) {
                wrapper.find('li:last div')
                    .append('\n<h4>'+ slideArray[i]['headline'] +'</h4>\n<p>'+ slideArray[i]['caption'] +'</p>\n<p class="action"><a href="'+ slideArray[i]['link'] +'">More &raquo;</a></p>\n');        
            } else {
                //the div must exist for the animation to fire correctly.
                wrapper.find('li:last div').css('padding','0px').css('height','0px');
            }
        }//end for
        
        // stack the slides on top of each other
        wrapper.find('li').css({ "left":"0", "top":"0", "position":"absolute" });
        
        $("li:not(:first)", this).css('display', 'none');
        //now that structure is in place grab the elements
        var items = $("li", this);
                
        //preload 2nd slide
        wrapper.find('li:eq(1) img').attr("src", slideArray[0]['url']).load(function(){
            wrapper.find('li:eq(1)').addClass("next").css('display', 'block');
        });
        
        //Set up slideSelect to load. Not needed if JS is not on.
        if(pagination) {
            var pager = "<ul class=\"nav dl_navigation\">\n";
            pager += "<li class=\"prev\"><a class=\"hiddenText\" href=\"#\">Prev</a></li>";
            pager += "</ul>\n";
            wrapper.after(pager);
            var slideSelect = wrapper.parent().find('ul.dl_navigation');
            for(var i = 0; i < items.length; i++) {
                slideSelect.append("<li><a href=\"#\">"+(i+1)+"</a></li>\n");
            }
            
            slideSelect.append("<li class=\"next\"><a class=\"hiddenText\" href=\"#\">Next</a></li><li class=\"pause\"><a class=\"hiddenText\" href=\"#\">||</a></li>\n");
            
        }
        var playToggle = $('ul.dl_navigation li:last');
        wrapper.parent().find('ul.dl_navigation li:eq(1)').addClass("selected");
        
        //go to href around image
        //items.click(function(){
           // location.href = jQuery(this).find("a").attr('href');
        //});//end onClick
        
        //play or pause button
        playToggle.click(function(){ 
            if(jQuery(this).hasClass('pause')) { //pause the animation
                $(this).removeClass("pause").addClass("play");
                $('a', this).text('>');
                pause = true;
                window.clearTimeout(timeOutFn);
                return false;
            } else { //start animation
                $(this).addClass("pause").removeClass("play");
                $('a', this).text('||');
                window.clearTimeout(timeOutFn); //clear timout just to be careful
                pause = false;
                showSlide();
                return false;
            }
            
        });//end onClick
        
        //go to a specific slide
        wrapper.parent().find('ul.dl_navigation li a').slice(1,-2).click(function(){
            current = $(this).text()-1;
            
            $('ul.dl_navigation li.selected').removeClass('selected');
            $('ul.dl_navigation li:eq('+(current+1)+')').addClass("selected");
            
            if ($("li:eq("+current+") img", wrapper).attr("src") == '') {
                $("li:eq("+current+") img", wrapper).attr("src", slideArray[(current-1)]['url']).load(function(){
                    $('li.show', wrapper).removeClass('show');
                    wrapper.find("li:eq("+current+")").addClass('show').css('display', 'block');
                    $('li.next', wrapper).removeClass('next');                       
                });
            
            } else {
                
            $("li:eq("+current+") img", wrapper).load(function(){
                $('li.show', wrapper).removeClass('show');
                wrapper.find("li:eq("+current+")").addClass('show').css('display', 'block');
                $('li.next', wrapper).removeClass('next');
            });
            $('li.show', wrapper).removeClass('show');
            wrapper.find("li:eq("+current+")").addClass('show').css('display', 'block');
            $('li.next', wrapper).removeClass('next');
            }
            
            if(playToggle.hasClass('pause')) {
                playToggle.removeClass("pause").addClass("play");
                $('a', playToggle).text('>');
                return false;
            }
            
            if (current == (slideArray.length-1)) { 
                wrapper
                    .find('li:eq(0)')
                    .addClass('next')
                    .css('display', 'block');
            } 
            else { 
                wrapper
                    .find('li:eq('+(current+1)+')')
                    .addClass('next')
                    .css('display', 'block');
            }

            window.clearTimeout(timeOutFn);
            return false;
        });//end onClick
        
        //go to previous slide
        wrapper.parent().find('ul.dl_navigation li .prev a').click(function(){
            current = current+1;
            pageSelect(current, wrapper);
            window.clearTimeout(timeOutFn);
            return false;
        });//end onClick
        
        //go to next slide
        wrapper.parent().find('ul.dl_navigation li .next a').click(function(){
            current = current-1;
            pageSelect(current, wrapper);
            window.clearTimeout(timeOutFn);
            return false;
        });
    
        function showSlide() {
            if (playToggle.hasClass('pause')) {
            current = (current !== null) ? current : 0;
            current = (current == slideArray.length+1) ? 0 : current; //if you are 1 past the last slide go back to beginning
            var thisSlide = wrapper.find('li:eq('+current+')');
            if(thisSlide.next().find('img').attr("src") == '') { 
                thisSlide.next().find('img').attr("src", slideArray[(current)]['url']).load(function(){
                    thisSlide.fadeOut(SlideFade, function(){
                        
                    wrapper.parent().find('ul.dl_navigation .selected').removeClass("selected");
                    wrapper.parent().find('ul.dl_navigation li:eq('+(current+2)+')').addClass("selected");
                    
                    thisSlide.removeClass('show');

                    current++; //get ready for next slide
                    
                    // You're on the last slide, prep for transition back to the first
                    if (current == (slideArray.length+1)) { 
                        wrapper
                            .find('li:eq(0)')
                            .removeClass('next')
                            .addClass('show')
                            .css('display', 'block')
                            .end()
                            .find('li:eq(1)')
                            .addClass('next')
                            .css('display', 'block');
                            
                        wrapper
                            .parent()
                            .find('ul.dl_navigation li:eq(1)')
                            .addClass("selected");
                    } 
                    // You're on the next to last slide, prep for transition to the last
                    else if(current == (slideArray.length)) {
                        wrapper
                            .find('li:eq('+(current)+')')
                            .removeClass('next')
                            .addClass('show')
                            .css('display', 'block')
                            .end()
                            .find('li:eq(0)')
                            .addClass('next')
                            .css('display', 'block'); 
                    } 
                    else { 
                        wrapper
                            .find('li:eq('+(current)+')')
                            .removeClass('next')
                            .addClass('show')
                            .css('display', 'block')
                            .end()
                            .find('li:eq('+(current+1)+')')
                            .addClass('next')
                            .css('display', 'block');  
                    }                    
                    if(!pause) {
                        timeOutFn = setTimeout(showSlide, timeOut);
                    }
            });
                }); 
            } else {
                                
                    thisSlide.fadeOut(SlideFade, function(){
                        
                    wrapper.parent().find('ul.dl_navigation .selected').removeClass("selected");
                    wrapper.parent().find('ul.dl_navigation li:eq('+(current+2)+')').addClass("selected");
                    
                    thisSlide.removeClass('show');

                    current++; //get ready for next slide
                    
                    // You're on the last slide, prep for transition back to the first
                    if (current == (slideArray.length+1)) { 
                        wrapper
                            .find('li:eq(0)')
                            .removeClass('next')
                            .addClass('show')
                            .css('display', 'block')
                            .end()
                            .find('li:eq(1)')
                            .addClass('next')
                            .css('display', 'block');
                            
                        wrapper
                            .parent()
                            .find('ul.dl_navigation li:eq(1)')
                            .addClass("selected");
                    } 
                    // You're on the next to last slide, prep for transition to the last
                    else if(current == (slideArray.length)) {
                        wrapper
                            .find('li:eq('+(current)+')')
                            .removeClass('next')
                            .addClass('show')
                            .css('display', 'block')
                            .end()
                            .find('li:eq(0)')
                            .addClass('next')
                            .css('display', 'block'); 
                    } 
                    else { 
                        wrapper
                            .find('li:eq('+(current)+')')
                            .removeClass('next')
                            .addClass('show')
                            .css('display', 'block')
                            .end()
                            .find('li:eq('+(current+1)+')')
                            .addClass('next')
                            .css('display', 'block');  
                    }                    
                    if(!pause) {
                        timeOutFn = setTimeout(showSlide, timeOut);
                    }
            });
        }
        }
        }//end showSlide()
        timeOutFn = setTimeout(showSlide, timeOut);
    };//end dynamiclead

})(jQuery);




