(function(jQuery) {
      
	jQuery.wiggleSlide = function(opt) {
		
		// get the options
        var sliderNav = opt.sliderNav; 
        var sliderClickLink = opt.sliderClickLink; 
        var hiddenContainer = opt.hiddenContainer;
        var sliderItemClassName = opt.sliderItemClassName; 
        var swingSpeed = opt.swingSpeed; 
        var wiggle = opt.wiggle;
		var permalinking = opt.permalinking;
       
        // don't touch below this line unless you are a true john resig
        var sliderItemWidth = getSliderWidth(sliderItemClassName);
        var sliderContainerWidth = (sliderItemWidth) * jQuery("."+sliderItemClassName).length;
      	jQuery(hiddenContainer).css('width',sliderContainerWidth);
        var relTitle;
        (sliderClickLink == 'a') ? relTitle = 'rel' : relTitle = 'title';
       
        // if they've entered something into the #, they want to see something specific
        if(window.location.hash && permalinking){
           var a = window.location.hash.slice(1);
           var countLink = 0;
		   jQuery("."+sliderItemClassName).each(function(){
				countLink++;									
				if(jQuery(this).attr('id') == 'slider_'+a){
					var sliderContStart = (sliderItemWidth) * countLink - sliderItemWidth;
                    jQuery(hiddenContainer).css('left',-sliderContStart+'px');	
				}
			});
        }
	   
        // lets calculate the padding/margin offsets (if applicable)
        function getSliderWidth(sliderItemClassName){
            var sliderClass = jQuery("."+sliderItemClassName);
            var sliderClassWidth = parseInt(sliderClass.width());
            var paddingLeft = sliderClass.css('padding-left').split('px')[0];
            var paddingRight = sliderClass.css('padding-right').split('px')[0];
            var marginLeft = sliderClass.css('margin-left');
            var marginRight = sliderClass.css('margin-right');
            // IE6/7 are silly about this
            (marginLeft == 'auto') ? marginLeft = 0 : marginRight = marginRight.split('px')[0];
            (marginRight == 'auto') ? marginRight = 0 : marginRight = marginRight.split('px')[0];
            var marginsPaddings = parseInt(marginLeft) + parseInt(marginRight) + parseInt(paddingLeft) + parseInt(paddingRight);
            var totalUp = marginsPaddings + sliderClassWidth;
            return totalUp;
        }
       
        function bobble(e,lastPos,newPos){
            if(wiggle){
                var wobbleOffset = 5;
                if(lastPos > newPos){
                    jQuery(e).animate({left:(newPos+wobbleOffset)+'px'},{duration: "fast", easing: 'swing'});
                    jQuery(e).animate({left:(newPos)+'px'},{duration: "fast", easing: 'swing'});
                }
                else {
                    jQuery(e).animate({left:(newPos-wobbleOffset)+'px'},{duration: "fast", easing: 'swing'});
                    jQuery(e).animate({left:(newPos)+'px'},{duration: "fast", easing: 'swing'});
                }
            }
        }
		
		function getSlidePos(slideId){
			var numberPos = 0;
			var ret;
			jQuery("."+sliderItemClassName).each(function(){
				numberPos++;
				if(jQuery(this).attr('id') == slideId){
					ret = numberPos;
				}
			});
			return ret;
		}
       
        jQuery(sliderNav+" "+sliderClickLink).each(function(){
            jQuery(this).click(function(){
				jQuery('#slider_nav a').removeClass('selected');
				jQuery(this).addClass('selected');
				var sliderId = 'slider_'+jQuery(this).attr('id');
				var slidePosition = getSlidePos(sliderId);
				// if they're on the current slide and they click it, don't move
					var lastPos = jQuery(hiddenContainer).css('left').split('px')[0];
					newSlideNum = parseInt(slidePosition) * sliderItemWidth - sliderItemWidth;
					var newPos = -newSlideNum;
					jQuery(hiddenContainer).animate({left: newPos+'px'},{duration: swingSpeed, easing: 'swing', complete: function(){ bobble(this,lastPos,newPos) } });
					if(!permalinking) return false;
            });
        });
	}
  
})(jQuery);