(function($j){
	$j.fn.jqMSlider = function( opts ){
		var defOpts = {
			prevId		: 'dd_prev_btn',
			prevImgSrc	: null,
			prevTxt		: 'Previous',
			nextId		: 'dd_next_btn',
			nextImgSrc	: null,
			nextTxt		: 'Next',
			speed		: 800
		};
		var opts = $j.extend( defOpts, opts );
		
		this.each(function(){
			var jqThis = $j(this);
			
			var prevImgOrTxt = '';
			if( opts.prevImgSrc != null ){
				prevImgOrTxt = '<img src="'+opts.prevImgSrc+'" />';
			} else {
				prevImgOrTxt = opts.prevTxt;
			}
			var nextImgOrTxt = '';
			if( opts.nextImgSrc != null ){
				nextImgOrTxt = '<img src="'+opts.nextImgSrc+'" />';
			} else {
				nextImgOrTxt = opts.nextTxt;
			}
			
			var prevBtnDiv ='<div class="'+opts.prevId+'">'+
								'<a href="javascript:void(0);">'+
									prevImgOrTxt+
								'</a>'+
							'</div>';
			var nextBtnDiv ='<div class="'+opts.nextId+'">'+
								'<a href="javascript:void(0);">'+
									nextImgOrTxt+
								'</a>'+
							'</div>';
			jqThis.before( prevBtnDiv );
			jqThis.after( nextBtnDiv );
			
			// cssがdisplay: none;な為、ここでshow()しないと、width()とheight()が取れない。
			jqThis.show();
			var li_leng = $j('LI', jqThis).length;
			var li_wid  = $j('LI', jqThis).width();
			var li_heig = $j('LI', jqThis).height();
			
			var jqSlPrevBtn = $j('div.'+opts.prevId);
			var jqSlNextBtn = $j('div.'+opts.nextId);
			jqSlPrevBtn.css({
				'float'	: 'left'
			});
			$j('A', jqSlPrevBtn).hide();
			jqThis.css({
				'width'		: li_wid+'px',
				'height'	: li_heig+'px',
				'overflow'	: 'hidden',
				'float'		: 'left'
			});
			jqSlNextBtn.css({
				'float'	: 'right'
			});
			$j('UL', jqThis).css({
				'width'			: (li_leng * li_wid) + 'px',
				'height'		: li_heig+'px'
			});
			
			var slideCnt = 0;
			jqSlPrevBtn.click(function(){
				slideCnt--;
				slideAnimate();
			});
			jqSlNextBtn.click(function(){
				slideCnt++;
				slideAnimate();
			});
			
			var slideAnimate = function(){
				enableHidden();
				
				if( 0 < slideCnt ){
					$j('A', jqSlPrevBtn).show();
				} else {
					$j('A', jqSlPrevBtn).hide();
				}
				if( li_leng-2 < slideCnt ){
					$j('A', jqSlNextBtn).hide();
				} else {
					$j('A', jqSlNextBtn).show();
				}
			
				$j('UL', jqThis).animate(
					{
						marginLeft	: '-' + (li_wid * slideCnt) + 'px'
					},
					opts.speed
				);
			};
			
			var enableHidden = function(){
				$j.each($j('LI INPUT:hidden:enabled', jqThis),function(i){
					$j(this).attr( 'disabled', 'disabled' );
				});
				$j.each($j('LI:eq('+slideCnt+') INPUT:hidden', jqThis),function(){
					$j(this).removeAttr( 'disabled' );
				});
			};
			enableHidden();
		}); 
	};
})(jQuery);