// 至於最前面的分號 (;) ，主要是考慮這個 Plugin 檔案會和其他 JS 檔合併壓縮而放進來的。
;(function($){ 
	//var elements;   // 物件本身
	//var opts;		// 設定選項
		
	$.fn.movement = function(options) { 
		// 物件本身
		//var elements = this; 
		
		/** 
		 * 選項設定  
		 *
		 *******************************/
		var defaults = {
			//move    	 : 935,
			//show_num     : 8,
			//offset       : get_div_offset(elements), 
			//li_one_width : get_li_one_width(elements),  
			//li_count	 :  $.fn.movement.get_li_count(this), 		// 20
			direction	 : 'horizon', // vertical/horizon
			is_auto      : true,
			l_elements 	 : '#move-left' ,
			r_elements 	 : '#move-right',
			effect       : 1000
			//event        : "click",
		}; 
	
		// build others options
		options.li_count	    = $.fn.movement.get_li_count(this); 	
		if(options.direction == 'vertical') {
			options.offset 			= $.fn.movement.get_div_offset_height(this);
			options.li_one_length   = $.fn.movement.get_li_one_height(this);
		}else{
			options.offset 			= $.fn.movement.get_div_offset_width(this);
			options.li_one_length   = $.fn.movement.get_li_one_width(this);
		}
		
		if(!options.show_num)  options.show_num  = Math.abs(Math.floor(options.offset/options.li_one_length));
		if(!options.li_margin) options.li_margin = Math.floor((options.offset - options.li_one_length*options.show_num)/options.show_num);
		if(!options.move)      options.move = (options.li_one_length+options.li_margin) * options.show_num;
		/*
		console.log(options.offset);
		console.log(options.li_one_length);
		console.log(options.li_margin);
		if (!options.move && !options.show_num) {
			//options.show_num  		= Math.abs(Math.floor(options.offset/options.li_one_width));
			//options.move 	   		= options.li_one_width * options.show_num;
		}
		*/
		
		options.per_page = Math.abs(Math.ceil(options.li_count/options.show_num))-1;
		
		// build main options
		//$.fn.movement.opts = $.extend( {}, $.fn.movement.defaults, options);
		$.fn.movement.opts = $.extend({}, defaults, options);
		
		// init
		$.fn.movement.initialize(this);
		
		
		/*	
		// 每個符合搜尋條件的元素皆套用  
		return this.each(function(){
			console.log($(this).attr('id'));
		});
		*/
	};
	
	/**
	 * initalize()
	 *
	 * @return void
	 * @author Warren Krewenki
	 */
	$.fn.movement.initialize = function(obj) {
		
		var opts = $.fn.movement.opts;
		
		// left buttom 
		if (opts.li_count>0) {
			$(opts.l_elements).addClass('disable');
		}
		// right buttom 
		if (opts.li_count <= opts.show_num) {
			$(opts.r_elements).addClass('disable');
		}
		
		var li_onei_margin = Math.abs(Math.floor(opts.li_margin/2));
		
		if(opts.direction == 'vertical') {
			var cssObjli = {
				'margin-top': li_onei_margin+'px',
				'margin-bottom':  li_onei_margin+'px'
			}
			var cssObj = {
				height: opts.move+"px"
			}
			
			// -- Top move --
			$(opts.l_elements).click(function() { 
				$.fn.movement.act_Top_Move(obj,opts); 
			});
			
			// -- Bottom move --
			$(opts.r_elements).click(function() { 
				$.fn.movement.act_Bottom_Move(obj,opts); 
			});
		}else{
			var cssObjli = {
				'margin-right': li_onei_margin+'px',
				'margin-left':  li_onei_margin+'px'
			}
			
			var cssObj = {
				//margin: "auto", 
				width: opts.move+"px"
			}
			
			// -- Left move --
			$(opts.l_elements).click(function() { 
				$.fn.movement.act_Left_Move(obj,opts); 
			});
			
			// -- Right move --
			$(opts.r_elements).click(function() { 
				$.fn.movement.act_Right_Move(obj,opts); 
			});
		}
		
		if(opts.is_auto) {
			// -- 微調li寬度 -- 
			if(cssObjli) $(obj).children('li').css(cssObjli);
			
			// -- 微調內容寬度 -- 
			if(cssObj) $(obj).parent().css(cssObj);
		}
	}
	
	/**
	 * start
	 * @return void
	 *
	 ******************************
	$.fn.movement.start =  function(obj) {
	}
	*/
	
	/**
	 * action
	 *
	 *******************************/
	// left move
	$.fn.movement.act_Left_Move = function(obj,opts) {
		var return_arr = $.fn.movement.get_others_width(obj,opts);
		var page = return_arr[1];
		
		var x = page - 1;
		if (page<=0) {
			return false;
		}
		if(opts.per_page>0){
			$(opts.r_elements).removeClass('disable');
		}
		
		if (x>=1) {
			$(opts.l_elements).removeClass('disable');
		}
			
		if (x==0) {
			$(opts.l_elements).addClass('disable');
		}
		$(obj).animate({marginLeft: -opts.move*x}, opts.effect );
	}
	
	//right move
	$.fn.movement.act_Right_Move = function (obj,opts) {
		var return_arr = $.fn.movement.get_others_width(obj,opts);
		var page = return_arr[1];
		
		//console.log(opts.li_count+"-- "+opts.show_num+" --"+opts.per_page);
		
		var x = page + 1;
		if (x>opts.per_page) {
			return false;
		}
		
		if (x==opts.per_page) {
			$(opts.r_elements).addClass('disable');
		}
			
		if (x>=1) {
			$(opts.l_elements).removeClass('disable');
		}
			
		if (x==0) {
			$(opts.l_elements).addClass('disable');
		}
		$(obj).animate({marginLeft: -opts.move*x}, opts.effect );
	}	
	
	// TOP move
	$.fn.movement.act_Top_Move = function(obj,opts) {
		var return_arr = $.fn.movement.get_others_height(obj,opts);
		var page = return_arr[1];
		var x = page - 1;
		
		if (page<=0) {
			return false;
		}
		if(opts.per_page>0){
			$(opts.r_elements).removeClass('disable');
		}
		
		if (x>=1) {
			$(opts.l_elements).removeClass('disable');
		}
			
		if (x==0) {
			$(opts.l_elements).addClass('disable');
		}
		
		$(obj).animate({marginTop: -opts.move*x}, opts.effect );
	}
	
	//bottom move
	$.fn.movement.act_Bottom_Move = function (obj,opts) {
		var return_arr = $.fn.movement.get_others_height(obj,opts);
		var page = return_arr[1];
		
		//console.log(opts.li_count+"-- "+opts.show_num+" --"+opts.per_page);
		
		var x = page + 1;
		if (x>opts.per_page) {
			return false;
		}
		
		if (x==opts.per_page) {
			$(opts.r_elements).addClass('disable');
		}
			
		if (x>=1) {
			$(opts.l_elements).removeClass('disable');
		}
			
		if (x==0) {
			$(opts.l_elements).addClass('disable');
		}
		$(obj).animate({marginTop: -opts.move*x}, opts.effect );
	}

	/**
	 * get 
	 *
	 *******************************/
    // get div offset
	$.fn.movement.get_div_offset_width  = function(obj) {
		return $(obj).parent().outerWidth();
	}
	
	$.fn.movement.get_div_offset_height = function(obj) {
		return $(obj).parent().outerHeight();
	}
	
	// get li one height
	$.fn.movement.get_li_one_height  = function(obj) {
		return $(obj).children('li').outerHeight();
	}
	
	// get li one width
	$.fn.movement.get_li_one_width  = function(obj) {
		return $(obj).children('li').outerWidth();
		//var li_one_l_margin   = parseInt($(obj).children('li').css("margin-left"));
		//var li_one_r_margin   = parseInt($(obj).children('li').css("margin-right"));
		//alert(li_one_outerwidth+','+li_one_margin);
		//return (li_one_outerwidth + li_one_r_margin + li_one_l_margin);
	}
	
	// get li count
	$.fn.movement.get_li_count = function(obj) {
		return $(obj).children('li').size();
	};
	
	// get others
	$.fn.movement.get_others_width = function(obj,opts) {
		// 目前距離
		var _offset   = $(obj).attr("offsetLeft");
		// 目前頁面
		var page = Math.abs(Math.ceil(_offset/opts.move));	
		
		var arr = new Array();
		arr[0] = _offset;
		arr[1] = page;
		return arr;
	}	
	
	// get others
	$.fn.movement.get_others_height = function(obj,opts) {
		// 目前距離
		var _offset       = $(obj).attr("offsetTop");
		
		// 目前頁面
		var page = Math.abs(Math.round(_offset/opts.move));	
		
		//console.log(_offset+"-- "+opts.move+" --"+page);
		
		var arr = new Array();
		arr[0] = _offset;
		arr[1] = page;
		return arr;
	}
		
	/*
	$.fn.movement.getPageSize = function(){
		var jqueryPageSize = new Array($(document).width(),$(document).height(), $(window).width(), $(window).height());
		return jqueryPageSize;
	};
	*/
	/** 
	 * 選項設定  
	 *
	 ******************************
	$.fn.movement.defaults = {
		//move    	 : 935,
		//show_num     : 8,
		//offset       : get_div_offset(elements), 
		//li_one_width : get_li_one_width(elements),  
		//li_count	 : get_li_count(elements), 		// 20
		//direction	 : 'vertical', // vertical/horizon
		is_auto      : true,
		//l_elements 	 : '#move-left' ,
		//r_elements 	 : '#move-right',
		effect       : 1000
		//event        : "click",
	}; 
	*/
})(jQuery);