//JavaScript Document

(function($){
	$.fn.jSlideView = function(options){
		var options = $.extend({
			direction: "vertical",
			view: 1, 
			loop: true,
			speed: 400,
			easing: "swing",
			change: function(){},
			stop: function(){},
			get: function(){}
			
		}, options);
		
		if (!(options.width && options.height)){return this;}
		
		var that = this;
		
		return this.each(function(){
			var curpos = 0;
			var blocks = Math.ceil($(this).children("li").length / options.view) - 1;
			var itemwidth = (options.direction == "vertical") ? options.width : options.width * (blocks + 1);
			var itemheight = (options.direction == "vertical") ? options.height * (blocks + 1) : options.height;
			
			$(this).wrapInner("<div></div>");
			$(this).css({
				overflow: 'hidden',
				position: 'relative',
				listStyle: 'none',
				width: options.width,
				height: options.height
			});
			
			var slider = $(this).children("div:first");
			$(slider).css({
				margin: 0,
				padding: 0,
				width: itemwidth,
				height: itemheight,
				position: 'absolute',
				top: 0,
				left: 0
			});
			
			that.goto = function(num){
				if ($(slider).is(":animated")){
					return false;
				}
				num = Number(num);
				if (num > curpos){
					curpos = num - 1;
					nextclick();
				} else if (num < curpos){
					curpos = num + 1;
					prevclick();
				}
			}
			
			that.get = function(){
				var ui = {
					curpos: curpos,
					slider: slider,
					max: blocks
				};
				return ui;
			}
			
			$(slider).children("li").css({float:"left"});
			
			if (curpos == 0 && !options.loop) {
				$(options.prev + ":not(.nohide)").css({opacity:0.4})
			}
			if (curpos == blocks && !options.loop) {
				$(options.next + ":not(.nohide)").css({opacity:0.4})
			}
			
			var prevclick = function(e){
				if ($(slider).is(":animated")){
					return false;
				}
				
				if (curpos > 0){
					curpos --;
					if (curpos == 0 && !options.loop) {
						$(options.prev + ":not(.nohide)").animate({opacity:0.4})
					}
				} else {
					if (options.loop){
						curpos = blocks;
					} else {
						curpos = 0;
						return false;
					}
				}
				
				var ui = {
					curpos: curpos,
					slider: slider,
					max: blocks
				};
				
				options.change(ui);
				
				$(options.next).animate({opacity:1})
				if (options.direction == "vertical"){
					$(slider).stop(true).animate({top: -options.height * curpos}, options.speed, options.easing, function(){options.stop(ui);});
				} else {
					$(slider).stop(true).animate({left: -options.width * curpos}, options.speed, options.easing, function(){options.stop(ui);});
				}
				
				return false;
			};
			$(options.prev).click(prevclick);
			
			var nextclick = function(e){
				if ($(slider).is(":animated")){
					return false;
				}
				
				if (curpos < blocks){
					curpos ++;
					if (curpos == blocks && !options.loop) {
						$(options.next + ":not(.nohide)").animate({opacity:0.4})
					}
				} else {
					if (options.loop){
						curpos = 0;
					} else {
						curpos = blocks;
						return false;
					}
				}
				
				var ui = {
					curpos: curpos,
					slider: slider,
					max: blocks
				};
				
				options.change(ui);
				
				$(options.prev).animate({opacity:1})
				if (options.direction == "vertical"){
					$(slider).stop(true).animate({top: -options.height * curpos}, options.speed, options.easing, function(){options.stop(ui);});
				} else {
					$(slider).stop(true).animate({left: -options.width * curpos}, options.speed, options.easing, function(){options.stop(ui);});
				}
				
				return false;
			};
			$(options.next).click(nextclick);
		});
	}
})(jQuery);