(function($){
 
    //Attach this new method to jQuery
    $.fn.extend({ 
         
        //This is where you write your plugin's name
        progressSlider: function(options) {
			
			//Set the default values, use comma to separate the settings, example:
            var defaults = {
				width : 910,
				height : 395,
				navTitles : false,
				speed: 4000
				
            }
                 
            var options =  $.extend(defaults, options);
			
            //Iterate over the current set of matched elements
            return this.each(function() {
				
				var pgnavWidth = 0;
				var pgnav;
				var pgslider;
				var pgprogressbar;
				var pgTotalItems = 0;
				var o = options;
				var stage = $(this);
				
				//////////////////////////////////////////////////////////////////////////
				/////////////////////////////// Initialization ///////////////////////////
				//////////////////////////////////////////////////////////////////////////
				
				pgslider	= jQuery(stage).addClass("progress-slider");
				jQuery(pgslider).width(o.width).height(o.height);
				
				
				// bind navigation if specified, or create it right after the slider
				//if(jQuery(".progress-slider-nav").length == 0){
					pgnav = jQuery('<div class="progress-slider-nav"></div>');
					jQuery(pgslider).after(pgnav);
				/*}
				else{
					pgnav = jQuery(".progress-slider-nav");
				}*/
				pgnavWidth = jQuery(pgnav).width();
				jQuery(pgnav).append("<ul></ul>");
				
				// set navigation links widths
				jQuery(pgslider).find(" > *").each(function(i, val){
					jQuery(this).addClass("pgslide pgslide"+i);
					var caption = "";
					if(jQuery(val).attr("title") && o.navTitles)
						caption = jQuery(val).attr("title");
					else
						caption = parseInt(i+1)
					jQuery(pgnav).find("ul:first-child").append('<li><a href="#" rel=".pgslide'+i+'">'+caption+'</a></li>');
					pgTotalItems++;
				});
				jQuery(pgnav).find("li").each(function(i, val){jQuery(this).width(parseInt(pgnavWidth / pgTotalItems));});
				// fix integer roundings by customizing the width of the last li
				jQuery(pgnav).find("li:last-child").width(pgnavWidth - ((pgTotalItems-1)*parseInt(pgnavWidth / pgTotalItems))); 
				
				
				pgprogressbar = jQuery('<div class="progress-slider-progressbar"></div>');
				pgprogress = jQuery('<div class="progress-slider-progress"></div>');
				jQuery(pgprogressbar).append(pgprogress);
				jQuery(pgnav).before(pgprogressbar);
				jQuery(pgprogress).width((pgnavWidth / (2*pgTotalItems)));
				
				// hide all slides initially
				jQuery(pgslider).find(".pgslide").hide();
				jQuery(pgslider).find(".pgslide:first-child").show().addClass("active");
				jQuery(pgnav).find("ul li:first-child").addClass("active");
				
				//////////////////////////////////////////////////////////////////////////
				///////////////////////////////     Events     ///////////////////////////
				//////////////////////////////////////////////////////////////////////////
				
				function changeSlide(elem){
					jQuery(pgslider).find(".pgslide.active").fadeOut("slow").removeClass("active");
					jQuery(pgslider).find(jQuery(elem).attr("rel")).fadeIn("slow").addClass("active");
					jQuery(pgnav).find("li").each(function(){jQuery(this).removeClass("active");});
					jQuery(elem).parent().addClass("active");
					var index = jQuery(pgnav).find("ul li").index(jQuery(elem).parent());
					var offset = ((index) * (pgnavWidth / pgTotalItems)) + (pgnavWidth / (2*pgTotalItems));

					jQuery(pgprogress).animate({width: offset}, 500);
				}
				
				jQuery(pgnav).find("a").click(function(e){
					e.preventDefault();
					clearInterval(interval);
					changeSlide(this);
					
				});
				
				var index = 2;
				var interval = setInterval(function(){
					changeSlide(jQuery(pgnav).find("ul li:nth-child("+index+") a"));
					
					if(index == pgTotalItems)
						index = 1;
					else 
						index++;
				}, o.speed);
				
				$(window).blur(function() {
					if (interval) clearInterval(interval);
					interval = null;
				});
				
				//jQuery(pgnav).find("li a").click(function(){ clearInterval(interval); });
				

            });
        }
    });
     
 
})(jQuery);
