/*
 * --------------------------------------------------------------------
 * jQuery-Plugin "easyslider" (UTF-8 編碼)
 * Version: 1.0.0, 7.28.2009
 * by Guan-Ting Chen, fi@livemail.tw
 *
 * Copyright (c) 2009 Guan-Ting Chen
 * Licensed under GPL (http://www.opensource.org/licenses/gpl-license.php)
*/
$.fn.easyslider = function(settings) {
	// global variable
	settings = $.extend( {
		speed : 'slow',
		step : 2,
		now_step : 1,
		max_step : 1,
		loop : true,
		vertical : false,
		autowrap : true,
		callback : function () { }
	}, settings);
	
	
	// main function
	return this.each( function() {
		// ui initialize
		var slider_window 	= $(this);
		
		if (true == settings.autowrap) {
			slider_window.wrapInner('<div class="jq-slider-wrapper"></div>');
		}

		// variable initialize		
		var slider_id 		= slider_window.attr('id');
		var wrapper 		= slider_window.children('.jq-slider-wrapper');
		var page 			= wrapper.children('.jq-slider-page');

		if (false == settings.vertical) {
			var get_outer_size 	= 'width';
			var page_size 		= page[get_outer_size]();
			var page_count 		= page.size();
			var wrapper_size 	= page_size * page_count;
			var page_offset 	= settings.step * page_size;
			wrapper.css('width', wrapper_size);
			page.css('float', 'left');
		} else {
			var get_outer_size 	= 'height';
			var page_size 		= page[get_outer_size]();
			var page_count 		= page.size();
			var wrapper_size 	= page_size * page_count;
			var page_offset 	= settings.step * page_size;
			wrapper.css('height', wrapper_size);
		}
		
		settings.max_step = Math.ceil((wrapper_size-slider_window[get_outer_size]()) / page_offset) + 1;
		
		var get_slider_position = function () {
			return -(settings.now_step-1) * page_offset;
		};
		
		var get_new_offset = function (offset) {
			if (false == settings.vertical) {
				return { left : offset+'px' };
			} else {
				return { top : offset+'px' };
			}
		};

		slider_window.bind('slider-next', function () {
			if (settings.max_step == settings.now_step) {
				if (true == settings.loop) {
					slider_window.triggerHandler('slider-first');
				}
			} else if (1 == settings.max_step - settings.now_step) {
				slider_window.triggerHandler('slider-last');
			} else {
				var offset = get_slider_position() - page_offset;  
				wrapper.animate( get_new_offset(offset), settings.speed, settings.callback);
				settings.now_step++;
			}
		});

		slider_window.bind('slider-prev', function () {
			if (1 == settings.now_step) {
				if (true == settings.loop) {
					slider_window.triggerHandler('slider-last');
				}
			} else if (2 == settings.now_step) {
				slider_window.triggerHandler('slider-first');
			} else {
				var offset = get_slider_position() + page_offset;  
				wrapper.animate( get_new_offset(offset), settings.speed, settings.callback);
				settings.now_step--;
			}
		});
		
		slider_window.bind('slider-first', function () {
			wrapper.animate( get_new_offset(0), settings.speed, settings.callback);
			settings.now_step = 1;
		});

		slider_window.bind('slider-last', function () {
			wrapper.animate( get_new_offset(-(wrapper_size-slider_window[get_outer_size]())), settings.speed, settings.callback);
			settings.now_step = settings.max_step;
		});
		
		slider_window.bind('slider-zapto', function (event, page) {
			settings.now_step = Number(page) - 1;
			var offset = get_slider_position() - page_offset;
			wrapper.animate( get_new_offset(offset), settings.speed, settings.callback);
			settings.now_step = Number(page);
		});

		$('a[href=#'+slider_id+':next]').bind('click', function (event) {
			event.preventDefault();
			slider_window.triggerHandler('slider-next');
		});
		
		$('a[href=#'+slider_id+':prev]').bind('click', function (event) {
			event.preventDefault();
			slider_window.triggerHandler('slider-prev');
		});
		
		$('a[href=#'+slider_id+':first]').bind('click', function (event) {
			event.preventDefault();
			slider_window.triggerHandler('slider-first');
		});
		
		$('a[href=#'+slider_id+':last]').bind('click', function (event) {
			event.preventDefault();
			slider_window.triggerHandler('slider-last');
		});

		$('a[href*=#'+slider_id+':zapto]').bind('click', function (event) {
			event.preventDefault();
			slider_window.triggerHandler('slider-zapto', [$(this).attr('href').replace(/#\w+\:zapto(\d+)/, '$1')] );
		});

	}); // return this.fach (function ...

};
