/**
 * jQuery Plugin Inline Gallery.
 * @author NOSE
 * 
 * @version 1.0.0	initial version			
 */
jQuery.fn.inlineGallery = function(op) {	
    jQuery.log("InlineGallery: init");
	
	// defaults
	var defaults =  {
			selectorButtonPrevious:".previous",
			selectorButtonNext:".next",
			selectorClip:".images",
			selectorContainer:".images ul",
			selectorSlide:"li",
			timeLeft:1000,
			timeRight:1000,
			easingLeft:"easeOutExpo",
			easingRight:"easeOutExpo",
			lrInc:630
	};
	jQuery.extend(defaults, op);
	
	
	
	// vars
	var timeLeft = defaults.timeLeft;
	var timeRight = defaults.timeRight;
	var easingRight = defaults.easingRight;
	var easingLeft = defaults.easingLeft;
	
	
	var lrInc = defaults.lrInc;
	
	// elements
	var elContainer = jQuery(defaults.selectorContainer,this);
	var elClip = jQuery(defaults.selectorClip,this);
	var elButtonPrevious = jQuery(defaults.selectorButtonPrevious,this);
	var elButtonNext = jQuery(defaults.selectorButtonNext,this);
	
	// events
	elButtonPrevious.bind("click",buttonPrevious);
	elButtonNext.bind("click",buttonNext);
	elClip.bind("click",actionImage);
	
	
	// 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());
	initializeInlineGallery();
	
	
	/**
	* Initializes the inline gallery.
	*/
	function initializeInlineGallery() {
		jQuery.log("InlineGallery: initializeInlineGallery");
		
		// position
		jQuery.log("Number of slides: " + nbOfSlides);
		jQuery(elContainer).css("width",nbOfSlides*lrInc+"px");
		
		
		// update
		updateInlineGallery();
	
	}
	
	/**
	* Action Image.
	*/
	function actionImage(e) {
		jQuery.log("InlineGallery: actionImage");
		// next
		if (isNext(e)) {
			imageNext();
		}
		// previous
		else {
			imagePrevious();
		}	
	}
	
	/**
	* Next Slide.
	*/
	function imageNext() {
		jQuery.log("InlineGallery: imageNext");
		if (currentSlide < nbOfSlides-1) {
			showNext();	
		}	
	}
	
	/**
	* Previous Slide.
	*/
	function imagePrevious() {
		jQuery.log("InlineGallery: imagePrevious");
		if (currentSlide > 0) {
			showPrevious();	
		}	
	}
	
	
	/**
	* Previous slide.
	*/
	function buttonPrevious() {
		jQuery.log("InlineGallery: buttonPrevious");
		return showPrevious();
	}
	/**
	* Next slide.
	*/
	function buttonNext() {
		jQuery.log("InlineGallery: buttonNext");
		return showNext();
	}
	
	/**
	* Previous image.
	*/
	function showPrevious() {
		jQuery.log("InlineGallery: showPrevious");
			
		// index
		currentSlide--;
		
		// animate
		posLeft += lrInc;
		elContainer.animate({"left": posLeft},timeLeft,easingLeft,function(){
			// cleanup
		});
		
		// update
		updateInlineGallery();
		
		// return
		return false;
	}
	
	/**
	* Next slide.
	*/
	function showNext() {
		jQuery.log("InlineGallery: showNext");
		
		
		// index
		currentSlide++;
		
		// animate
		posLeft -= lrInc;
		elContainer.animate({"left": posLeft},timeRight,easingRight,function(){
			// cleanup
		});
		
		// update
		updateInlineGallery();
		
		// return
		return false;
	}
	
	/**
	* Updates the Inline Gallery.
	*/
	function updateInlineGallery() {
		jQuery.log("InlineGallery: updateInlineGallery");
		
		// buttons
		if (currentSlide == 0) {
			elButtonPrevious.hide();
		}
		else {
			elButtonPrevious.show();
		}
		if (currentSlide == nbOfSlides-1) {
			elButtonNext.hide();
		}
		else {
			elButtonNext.show();	
		}
		
	}
	
	/**
	* Checks if the mouse is next.
	*/
	function isNext(e) {
		var n = false;
		var os = 270;
		var eph = os + (jQuery(elClip).width() / 2.0);
		var mx = e.pageX ;
		if (mx > eph) {
			n = true;
		}
		return n;	
	}
	
		
    // chain
    return this;
};
