(function ($) {
   
  $.fn.rfSlider= function( method, options ) {
      return this.each(function() {        
      // If options exist, lets merge them
      // with our default settings

      var settings = {
        'sliderwidth' : 400,
        'sliderheight' : 200,
        'navsliderwidth' : 150,
        'holder' : '.rfslidemask',
        'slidetime':1000,
        'slideinterval':5000,
        'spaceing':100,
        'slidetransition':'wipe' // fade or wipe
      };
        var slidetimer = null;
        var ismoving= false;
      
      var methods = {
      init: function () {
        var holder = settings.holder;
          $(holder).css('width', settings.sliderwidth+ 'px');
          $(holder).css('height', settings.sliderheight+ 'px');
          $(holder+" .rfslides").css('width', settings.sliderwidth+ 'px');
          $(holder+" .rfslides").css('height', settings.sliderheight-40+ 'px');
          $(holder+" .rfslides .rfslide").css('width', settings.sliderwidth+ 'px');
          $(holder+" .rfslides .rfslide").css('height', settings.sliderheight-40+ 'px');
          $(holder+" .rfslides .rfslide").css('margin-right', settings.spaceing + 'px');
          $(holder+" .rfslides .rfslidetxt").css('width', settings.sliderwidth/2-40+ 'px');
          $(holder+" .rfslides .rfslidetxt").css('height', settings.sliderheight-40+ 'px');
          $(holder+" .rfslides .rfslidepic").css('width', settings.sliderwidth/2+ 'px');
          $(holder+" .rfslides .rfslidepic").css('height', settings.sliderheight-50+ 'px');
          $(holder+" .rfslides #contentHeaderTop").css('width', settings.sliderwidth/2-40+ 'px');
          $(holder+" .rfslides #contentHeaderSub").css('width', settings.sliderwidth/2-40+ 'px');
          $(holder).parent().parent().find("#rfnext").bind('click', methods.playnext);
          $(holder).parent().parent().find("#rffirst").bind('click', methods.playfirst);
          $(holder).parent().parent().find("#rfnextspecial").bind('click', methods.playspecial);
          $(holder).parent().find("#navBarItem0").bind('click',methods.play0);
          $(holder).parent().find("#navBarItem1").bind('click',methods.play1);
          $(holder).parent().find("#navBarItem2").bind('click',methods.play2);
          $(holder).parent().find("#navBarItem3").bind('click',methods.play3);
          methods.checkbuttons(settings.holder+" .rfslides", 0);
          //Make the sliderwidth so the spaceing between the slides adds to the width
          settings.sliderwidth += settings.spaceing;
          
      },
      slide: function (selector, slidedistance) {
        ismoving= true;
        if(settings.slidetransition=='wipe'){
          var $mover = $(selector);
          $mover.animate({
              marginLeft: slidedistance
          }, settings.slidetime,function() {
            ismoving= false;});
        }
        if(settings.slidetransition=='fade'){
            $(selector).parent().fadeOut('slow', function() {$(selector).css('margin-left',slidedistance+'px');
            $(selector).parent().fadeIn('slow', function() {methods.checkbuttons(selector, slidedistance);ismoving = false;} );
          });
        }
      },
      playnext: function () {
        if(!ismoving){
          var holder = settings.holder+" .rfslides";
          var holder2 = settings.holder+" #navBar #sliderarrow .caret";
          var currentpos = parseInt($(holder).css('margin-left'), 10) - settings.sliderwidth;
          var currentpos2 = parseInt($(holder2).css('margin-left'), 10) + settings.navsliderwidth;
          methods.checkbuttons(holder, currentpos);
          methods.slide(holder, currentpos);
          methods.slide(holder2, currentpos2);
        }
      },
      playfirst: function () {
          var holder = settings.holder+" .rfslides";
          $(holder).css("margin-left", 0);
          var currentpos = 0;
          methods.checkbuttons(holder, currentpos);
          /*
          var holder = settings.holder+" .rfslides";
          var currentpos = 0;
          methods.checkbuttons(holder, currentpos);
          methods.slide(holder, currentpos); */
        
      },
      playspecial: function () {
          var holder = settings.holder+" .rfslides";
          var holder2 = settings.holder+" #navBar #sliderarrow .caret";
          var currentpos = parseInt($(holder).css('margin-left'), 10) - settings.sliderwidth;
          var currentpos2 = 0;
          methods.checkbuttons(holder, currentpos);
          methods.slide(holder, currentpos);
          methods.slide(holder2, currentpos2);
      },
      play0: function () {
         var holder = settings.holder+" .rfslides";
         var holder2 = settings.holder+" #navBar #sliderarrow .caret";
         var currentpos = 0;
         var currentpos2 = 0;
         methods.checkbuttons(holder, currentpos);
         methods.slide(holder, currentpos);
         methods.slide(holder2, currentpos2);
      },
      play1: function () {
         var holder = settings.holder+" .rfslides";
         var holder2 = settings.holder+" #navBar #sliderarrow .caret";
         var currentpos = -settings.sliderwidth;
         var currentpos2 = settings.navsliderwidth;
         methods.checkbuttons(holder, currentpos);
         methods.slide(holder, currentpos);
         methods.slide(holder2, currentpos2);
      },
      play2: function () {
         var holder = settings.holder+" .rfslides";
         var holder2 = settings.holder+" #navBar #sliderarrow .caret";
         var currentpos = -2* settings.sliderwidth;
         var currentpos2 = 2* settings.navsliderwidth;
         methods.checkbuttons(holder, currentpos);
         methods.slide(holder, currentpos);
         methods.slide(holder2, currentpos2);
      },
      play3: function () {
         var holder = settings.holder+" .rfslides";
         var holder2 = settings.holder+" #navBar #sliderarrow .caret";
         var currentpos = -3* settings.sliderwidth;
         var currentpos2 = 3* settings.navsliderwidth;
         methods.checkbuttons(holder, currentpos);
         methods.slide(holder, currentpos);
         methods.slide(holder2, currentpos2);
      },
      play4: function () {
         var holder = settings.holder+" .rfslides";
         var holder2 = settings.holder+" #navBar #sliderarrow .caret";
         var currentpos = -4* settings.sliderwidth;
         var currentpos2 = 4* settings.navsliderwidth;
         methods.checkbuttons(holder, currentpos);
         methods.slide(holder, currentpos);
         methods.slide(holder2, currentpos2);
      },
      checkbuttons: function (holder, currentpos) {
        var totalwidth = $(holder + " > .rfslide").size() * settings.sliderwidth;
        clearTimeout(slidetimer);
          if (totalwidth <= settings.sliderwidth) {
              $(holder).css('width', settings.sliderwidth+ 'px');
          } else {
              $(holder).css('width', totalwidth + 'px');
              if (currentpos == 0) {
                  slidetimer  = setTimeout(function(){$(holder).parent().parent().parent().find("#rfnext").trigger('click')},settings.slideinterval - settings.slidetime);
              } else if (totalwidth == Math.abs(currentpos) + 2*settings.sliderwidth) {
                  slidetimer = setTimeout(function(){$(holder).parent().parent().parent().find("#rfnextspecial").trigger('click')}, settings.slideinterval);
              } else if (totalwidth == Math.abs(currentpos) + settings.sliderwidth) {
                  slidetimer = setTimeout(function(){$(holder).parent().parent().parent().find("#rffirst").trigger('click')},settings.slidetime + 20);
              } else {
                  slidetimer = setTimeout(function(){$(holder).parent().parent().parent().find("#rfnext").trigger('click')},settings.slideinterval);
              }
          }
      }
    }; //end methods

      if ( options ) { 
        $.extend( settings, options );
      }
    // Method calling logic
    if ( methods[method] ) {
      return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
    } else if ( typeof method === 'object' || ! method ) {
      return methods.init.apply( this, arguments );
    } else {
      $.error( 'Method ' +  method + ' does not exist on jQuery.RocketfuelSlider' );
    } 

    });
  };

})(jQuery);
