/*
 * Carousel - jQuery Plugin
 * Simple and fancy slider with controls
 *
 * Examples and documentation at: http://inkdevs.com/javascript/carousel
 * 
 * Copyright (c) 2011 Inkdevs
 * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated.
 * 
 * Version: 1.0 (05/16/2011)
 * Requires:
 * - jQuery v1.6.1+
 * - jQuery UI v1.8.12+ (only needed if you want to use the directional effect)
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 */

(function( $ ){ jQuery.fn.carousel = function(effect,delay,time) {
	sliders = $('.slide');
	if(delay == undefined || delay == '' ) delay = 2000;
	
	function find_opposite(direction){
		switch(direction){
			case "up": return "down"; break;
			case "down": return "up"; break;
			case "left": return "right"; break;
			case "right": return "left"; break;
		}
	}
	
	function slide_position(direction,id){
		current_pos = parseFloat($('.slide.active').attr('rel'));
		
		if( direction == "prev" || direction == "next") position = slide_increment(direction); else position = id;
		
		var slide_current = $('.slide.active'),
			slide_next    = $('.slide[rel="'+position+'"]'),
			ctrl_current  = $('*[slider="yes"] *[slider="position"] a.active'),
			ctrl_next	  = $('*[slider="yes"] *[slider="position"] a[rel="'+position+'"]'),
			effect_to_use = '';
			
		if( (direction == "prev" || direction == "backward") && (effect == "up" || effect == "down" || effect == "left" || effect == "right") ) effect_to_use = find_opposite(effect); else effect_to_use = effect;
		
		switch(effect_to_use){
			case 'up': case 'down': case 'left': case 'right':
				slide_next.stop(true,true).show('slide', { direction: find_opposite(effect_to_use) }, delay, function(){  }); slide_next.addClass('active');
				slide_current.stop(true,true).hide('slide', { direction: effect_to_use }, delay, function(){  }); slide_current.removeClass('active');
				break;
			case 'photo':
				slide_current.stop(true,true).fadeOut(delay/30, function(){  }); slide_next.addClass('active');
				slide_next.stop(true,true).fadeIn(delay, function(){ }); slide_current.removeClass('active');
				break;
			default:
				slide_current.stop(true,true).fadeOut(delay, function(){ }); slide_next.addClass('active');
				slide_next.stop(true,true).fadeIn(delay, function(){ }); slide_current.removeClass('active');
				break;
		}
		ctrl_current.removeClass('active'); ctrl_next.addClass('active');
	}
	
	function slide_increment(direction){
		if( direction == "prev" ) var position = current_pos-1;
		else var position = current_pos+1;
		if( position == 0 ) position = sliders.length;
		else if( position > sliders.length ) position = 1;
		return position;
	}
	
	$('*[slider="yes"] *[slider="controls"] a').live('click',function(){
		var current = $(this).siblings('.active').attr('rel'),
			direction = "forward";
		if( $(this).attr('rel') < current ) direction = "backward";
		if( !($(this).hasClass('active')) ) slide_position(direction,$(this).attr('rel'));
		return false;
	})
	
	$(document).keydown(function(e){
		if( sliders.length > 1 ){
			var code = (e.keyCode ? e.keyCode : e.which);
			if( code == 37 ) slide_position("prev");
			else if( code == 39 ) slide_position("next");
		}
	})
	
	if( time != undefined && time != '' ){
		var autoscrolling = true;
		setInterval(function() {
		  if (autoscrolling) slide_position("next");
		}, time);
	}
	
	$('*[slider="yes"]').mouseover(function () { autoscrolling = false; }).mouseout(function () { autoscrolling = true; });
}; })( jQuery );
