/**
 * jQuery Plugin Visual Slider.
 * @author NOSE
 * 
 * @version 1.0.0	initial version			
 */
jQuery.fn.visualSlider = function(selClip,selContainer,op) {	
	
	// defaults
	var defaults =  {
			selectorButtonPrevious:".previous",
			selectorButtonNext:".next",
			selectorContainer:"#slides",
			selectorSlide:".slide",
			selectorInfo:".info .content",
			selectorSlideInfo:".slideinfo",
			timeLeft:900,
			timeRight:900,
			easingLeft:"easeOutExpo",
			easingRight:"easeOutExpo",
			timeFadein:600,
			timeFadeout:300,
			lrInc:600,
			autoplay:false,
			interval:12000
	};
	jQuery.extend(defaults, op);
	
	
	
	// vars
	var timeLeft = defaults.timeLeft;
	var timeRight = defaults.timeRight;
	var easingRight = defaults.easingRight;
	var easingLeft = defaults.easingLeft;
	
	var timeFadein = defaults.timeFadein;
	var timeFadeout = defaults.timeFadeout;
	var easingFadein = defaults.easingFadein;
	var easingFadeout = defaults.easingFadeout;
	
	var lrInc = defaults.lrInc;
	
	// elements
	var elContainer = jQuery(defaults.selectorContainer,this);
	var elInfo = jQuery(defaults.selectorInfo,this);
	var elButtonPrevious = jQuery(defaults.selectorButtonPrevious,this);
	var elButtonNext = jQuery(defaults.selectorButtonNext,this);
	
	// events
	elButtonPrevious.bind("click",buttonSlidePrevious);
	elButtonNext.bind("click",buttonSlideNext);
	
	
	// init
	var autoplay = defaults.autoplay;
	var interval = defaults.interval;
	var posLeft = 0;
	var currentSlide = 0;
	var slides = jQuery(defaults.selectorSlide,elContainer);
	var nbOfSlides = parseInt(slides.size());
	initializeVisualSlider();
	
	
	/**
	* Initializes the visual slider.
	*/
	function initializeVisualSlider() {
		
		// position
		nbOfSlides = parseInt(jQuery(defaults.selectorSlide,elContainer).size());
		jQuery(elContainer).css("width",nbOfSlides*lrInc+"px");
		
		
		// update
		updateVisualSlider();
		showInfo();
		
		// autoplay
		if (autoplay) {
			window.setTimeout(autoplaySlides, interval);	
		}
	}
	
	/**
	* Autoplay slides.
	*/
	function autoplaySlides() {
		if (autoplay) {
			if (currentSlide < nbOfSlides - 1) {
				slideNext();
				window.setTimeout(autoplaySlides, interval);
			}
			else {
				autoplay = false;	
			}
		}
	}
	
	/**
	* Previous slide.
	*/
	function buttonSlidePrevious() {
		autoplay = false;
		return slidePrevious();
	}
	/**
	* Next slide.
	*/
	function buttonSlideNext() {
		autoplay = false;
		return slideNext();
	}
	
	/**
	* Previous slide.
	*/
	function slidePrevious() {
				
		// index
		currentSlide--;
		
		// animate
		posLeft += lrInc;
		hideInfo();
		elContainer.animate({"left": posLeft},timeLeft,easingLeft,function(){
			showInfo();
		});
		
		// update
		updateVisualSlider();
		
		// return
		return false;
	}
	
	/**
	* Next slide.
	*/
	function slideNext() {
		
		// index
		currentSlide++;
		
		// animate
		posLeft -= lrInc;
		hideInfo();
		elContainer.animate({"left": posLeft},timeRight,easingRight,function(){
			showInfo();
		});
		
		// update
		updateVisualSlider();
		
		// return
		return false;
	}
	
	/**
	* Updates the VisualSlider.
	*/
	function updateVisualSlider() {
		
		// buttons
		if (currentSlide == 0) {
			elButtonPrevious.hide();
		}
		else {
			elButtonPrevious.show();
		}
		if (currentSlide == nbOfSlides-1) {
			elButtonNext.hide();
		}
		else {
			elButtonNext.show();	
		}
		
	}
	
	/**
	* Shows the info.
	*/
	function showInfo() {
		var slideInfo = jQuery(defaults.selectorSlideInfo,slides[currentSlide]).html();
		
		// hide
		jQuery(elInfo).html(slideInfo);
		elInfo.fadeIn(timeFadein);
	}
	
	/**
	* Hides the Info.
	*/
	function hideInfo() {
		// show
		elInfo.fadeOut(timeFadeout);
	}
	
	
	
	
		
    // chain
    return this;
};