/* fxGallery (by darki777) */
(function($) {
	$.fn.fxGallery = function(param) {
		var options = {
			nav:"<div class='fxNav'></div>",
			navPosAuto:true,
			next:"<a class='fxNavBtn fxNext'>Next</a>",
			prev:"<a class='fxNavBtn fxPrev'>Prev</a>",
			slideDuration:850
		};
		if(param) $.extend(options,param);
		
		
		this.each(function() {
			// INIT Gallery
			var gallery = $(this);
			var galleryInner = $(gallery.wrapInner("<div class='fxGalleryInner'></div>").find(".fxGalleryInner"));
			var galleryInnerWidth = galleryInner.width();
			var galleryInnerUl = $(galleryInner.find("ul"));
			var galleryInnerUlWidth = 0;
			var nav = $(options.nav);
			var navStatus = true;
			var prev = $(options.prev);
			var next = $(options.next);
			var slideDuration = options.slideDuration;
			
			
			// Set Ul Width
			galleryInnerUl.find("li").each(function(){
				galleryInnerUlWidth+=$(this).width();
			});
			galleryInnerUl.css("width",galleryInnerUlWidth+"px");
			
			
			// Config Gallery Navigation
			if(galleryInnerUlWidth > galleryInnerWidth){
				gallery.prepend(nav);
				nav.append(prev);
				nav.append(next);
				if(options.navPosAuto == true){
					nav.css("margin-top",($(this).height()/2)-parseInt(next.height()/2)+"px");
				}
				
				prev.click(function(){
					if(navStatus == true){
						if(galleryInnerUl.position().left < 0){
							galleryInnerUl.animate({
								"left": (galleryInnerUl.position().left+galleryInnerWidth > 0) ? 0 : (galleryInnerUl.position().left) + galleryInnerWidth + "px"
							},{ 'duration':slideDuration, 'complete':function(){ navStatus = true; } });
						} else {
							galleryInnerUl.animate({
								"left": -(galleryInnerUlWidth-galleryInnerWidth)+"px"
							},{ 'duration':slideDuration, 'complete':function(){ navStatus = true; } });			
						}
					}
					navStatus = false;
				});
				
				next.click(function(){
					if(navStatus == true){	
						if((-galleryInnerUlWidth) < (galleryInnerUl.position().left)-galleryInnerWidth){
							galleryInnerUl.animate({
								"left":((-galleryInnerUl.position().left) + (galleryInnerWidth*2) > galleryInnerUlWidth) ? -(galleryInnerUlWidth-galleryInnerWidth) : (galleryInnerUl.position().left)-galleryInnerWidth+"px"
							},{ 'duration':slideDuration, 'complete':function(){ navStatus = true; } });
						} else {
							galleryInnerUl.animate({
								"left":0+"px"
							},{ 'duration':slideDuration, 'complete':function(){ navStatus = true; } });
						}
					}
					navStatus = false;
				});	
			}
		});
		
		return this;
	};
})(jQuery);


