if(typeof API == 'undefined')
	API = {};

API.carousel = new function() {

	var stack = Array();
	this.create = function(params) {
		var index = stack.push(new carousel(params));
		return stack[index - 1];
	}
	this.getStack = function() {
		return stack;
	}
	var carousel = function(params) {

		var instance = this;
		this.params = {
			interval: 10000,
			offset: 0,
			container: '#neck',
			items: '.slide',
			rotary: '.slides',
			pagination: '.pagination',
			width: 968,
			height: null,
			//type: 'vertical',
			size: 1
		};
		jQuery.extend(true, this.params, params);
		var t = null, items = null, size = 0, cnt = null,current = 0;
		
		this.init = function() {
			
			items = $(this.params.items,this.params.container);
			cnt = $(this.params.rotary,this.params.container);
			size = items.size();			
			var next = $(instance.params.pagination+' .next',this.params.container);
			var prev = $(instance.params.pagination+' .prev',this.params.container);
			var hide = $('.hide',this.params.container);
			pagination = $(instance.params.pagination,this.params.container);
			controls = $('li:not(.hide)',pagination);
			pages = $('li:not(.hide,.next,.prev)',pagination);			
			pages.click(function(){				
				pos = parseInt($('a',this).attr('href').replace('#',''));
				instance.setPosition(pos-1);
				return false;
			});
			if(instance.params.size < size){			
				
				next.click(instance.next);
				prev.click(instance.prev);
				hide.toggle(function(){					
					controls.fadeOut();
					$(instance.params.rotary).parent().animate({
						height: 36
					});
					$(this).addClass('closed');
					return false;
				},function(){
					controls.fadeIn();
					$(instance.params.rotary).parent().animate({
						height: 231
					});
					$(this).removeClass('closed');
					return false;					
				});
				instance.setPosition(current);
				$(instance.params.container).mouseover(stop).mouseout(start);
			}else{								
				pagination.hide();
			}
		}
		var start = function() {
			stop();
			if(instance.params.interval)
			t = setInterval(instance.next, instance.params.interval);
		}
		var stop = function() {
			try {
				clearInterval(t);
			} catch (e) {
			}
		}
		this.next = function() {	
			instance.setPosition(current+1);			
			return false;
		}
		this.prev = function() {
			instance.setPosition(current-1);			
			return false;
		}
		this.getPosition = function(flag){
			flag = flag || true;
			//current = parseInt(cnt.css('left')) / instance.params.width * (-1);
			if(flag){
				pages.removeClass('selected');
				$(pages.get(current)).addClass('selected');
			}
			return current;
		}
		this.setPosition = function(pos){			
			start();
			var max = (size-instance.params.size);
			if (pos > max) {pos = 0;}else if(pos < 0){pos = max;}
			
			cnt.stop(true,true);
			
			if(instance.params.width){
				if(current === pos){
					return;
				}else if(current < pos){
					cnt.animate({
						left: '+=50'
					}, 100);	
				}else{
					cnt.animate({
						left: '-=50'
					}, 100);
				}
				cnt.animate({
					left: (instance.params.offset+(pos*instance.params.width))*(-1)
				}, 500,instance.getPosition);	
			}else if(instance.params.height){
				if(current === pos){
					return;
				}else if(current < pos){
					cnt.animate({
						top: '+=50'
					}, 100);	
				}else{
					cnt.animate({
						top: '-=50'
					}, 100);
				}
				cnt.animate({
					top: (instance.params.offset+(pos*instance.params.height))*(-1)
				}, 500,instance.getPosition);
			}
			
			current = pos;
			return current;
		}
		$(document).ready(function() {
			instance.init();
		});
	}
}

