(function(){
	$.fn.carruselh = function(options) {
		var defaults={
			por:1,
			timer:"slow",
			list:"li",
			contenedor:"ul",
			width:"auto",
			loop:"bucle",
			timerdelay:3000
		}
		var ul=null;
		var leng=0;
		var w_li=0;
		var w_ul=0;
		var w_con=0;
		var settings = $.extend({}, defaults, options);
		var animate=false;
		var list=new Array();
		var imgs = new Array ();
		var pos=new Array();
		var temp=$('<div></div>').css({display:"none"});
		var contenedor = null;
		
		
		
		var funcpreloadimg=function(l,i){
			if(!l[i]) return; 
			$(new Image()).attr({ src:l[i] }).load(function(){
				funcpreloadimg(l,i+1);
			}).error(function(){
				funcpreloadimg(l,i+1);
			});
		};
		var position=0;
		var animate=false;
		var posvaule = function(dir){
			if(dir) position++;else position--;
			if(position < 0) position=(list.length-1);
			if(position > (list.length-1)) position=0;
			return position;
		}
		var next = function(speed){
			if( animate ) return;
			animate=true;
			var tem = new Array();
			contenedor.find( settings.list ).each(function(){
				tem.push( $(this) );
			});
			var width=0;
			for(var i=0;i< settings.por; i++){
				var pos = posvaule(false);
				contenedor.prepend( list[pos] );
				if(settings.width =="auto"){
					width+=list[pos].width();
				}else width+=settings.width;
			}
			contenedor.css({ 'margin-left' : '-'+ width + 'px' }).animate({ 'margin-left' :'0px'},(speed==null) ?settings.timer : speed,function(){ 
				animate = false;
				for(var i in tem){
					temp.append( tem[i] );
				}
			});
		}
		var pause = false;
		var timerdelay = null;
		var prev = function(speed){
			if( animate ) return;
			animate=true;
			var tem = new Array();
			var width=0;
			contenedor.find( settings.list ).each(function(){
				if(settings.width =="auto"){
					width+=$(this).width();
				}else width+=settings.width;
				tem.push( $(this) );
			});
			
			for(var i=0;i< settings.por; i++){
				var pos = posvaule(true);
				contenedor.append( list[pos] );
			}
			contenedor.css({ 'margin-left' : '0px' }).animate({ 'margin-left' : '-'+ width +'px'},(speed==null) ?settings.timer : speed,function(){ 
				contenedor.css({ 'margin-left' : '0px' })
				animate = false;
				for(var i in tem){
					temp.append( tem[i] );
				}
				if(settings.loop == 'bucle' && pause == false ){
					timerdelay = setTimeout(function(){ prev() }, settings.timerdelay);
				}
			});
		}
		
		
		return this.each(function(){
			contenedor = $(this).find( settings.contenedor );
			contenedor.find( "img" ).each(function(){
				imgs.push( $(this).attr('src') );
			});
		    contenedor.find( settings.list ).each(function(){
				list.push( $(this) );
			});
			
			for(var i in  list){
				temp.append( list[i] );
			}
			prev(0);
			
			$(this).find('.next').click(function(){
				 next();
			});
			
			$(this).find('.prev').click(function(){
				prev();
				
			});
			$(this).hover(
			function(){
				pause=true;
				clearTimeout(timerdelay);
				},
			function(){
				pause=false;
				if( !animate ) prev();
				});
			
		});
	}
})(jQuery);
