/**
 * File upload
 * 2009@byGoose!
 */
$.fn.carrousel = function(options){ // plugin definition
	return this.each(function(){ // iterate and reformat each matched element
		//methods
		var setTo = function(order,className) {
			$($nameItems+"[order='"+order+"']").removeClass("item-hidden").addClass(className);
		}
		var turnTo = function($nombre,className,classNameD,classNameI) {
			$nombre.stop().animateToClass(className,$opts.speed,"swing",function(){ $(this).removeAttr("style"); }).attr("className",$name+"-item "+className);
			$("div.datos",$nombre).stop().animateToClass(classNameD,$opts.speed,"swing",function(){ $(this).removeAttr("style"); }).attr("className","datos "+classNameD);
			$("img.imagen",$nombre).stop().animateToClass(classNameI,$opts.speed,"swing",function(){ $(this).removeAttr("style"); }).attr("className","imagen "+classNameI);
		}
		var refresh = function() {
			var total=parseInt($this.attr("carrTotal"));
			var curr=parseInt($this.attr("carrCurrent"));
			var $items=$("div."+$name+"-item",$this);
			var cssItem,cssDatos,offset,$it;
			for(var i=0;i<total;i++){
				if(i==curr){ // seleccionado
					cssItem=$name+"-item-selected";
					cssDatos=$name+"-datos-selected";
					cssImagen=$name+"-imagen-selected";
				}
				else if(i<curr && i>=(curr-$opts.itemsShowPrev)){ // previos
					offset=curr-i; /*offset from selected*/
					cssItem=$name+"-item-prev-"+offset;
					cssDatos=$name+"-datos-prev-"+offset;
					cssImagen=$name+"-imagen-prev-"+offset;
				}
				else if(i>curr && i<=(curr+$opts.itemsShowNext)){ // siguientes
					offset=i-curr; /*offset from selected*/
					cssItem=$name+"-item-next-"+offset;
					cssDatos=$name+"-datos-next-"+offset;
					cssImagen=$name+"-imagen-next-"+offset;
				}
				else{ //oculto
					cssItem=$name+"-item-hidden";
					cssDatos=$name+"-datos-hidden";
					cssImagen=$name+"-imagen-hidden";
				}
				$it=$($items[i]);
				if($it.attr("className").indexOf(cssItem)==-1){
					turnTo(	$it, cssItem, cssDatos, cssImagen ); //llamado
				}
			}
			$this.trigger("change",[curr,$items[curr]]); //("#"+$name) // eventos
			$(".show-curr-item",$this).html(curr+1); // paneles (total no hace falta)
			// botones
			if(curr==0) $(".button-prev, .button-first",$this).hide("fast");
			else		$(".button-prev, .button-first",$this).show("fast");
			if(curr==(total-1))	$(".button-next, .button-last",$this).hide("fast");
			else				$(".button-next, .button-last",$this).show("fast");
		}
		// Movimientos
		var skipitem = function(cant,back) {
			if(cant==null) cant=1; if(back) cant*=-1;
			var curr=parseInt($this.attr("carrCurrent"));
			var total=parseInt($this.attr("carrTotal"));
			curr+=parseInt(cant);
			if(curr<0) { curr=0; $("#"+$name).trigger("bof", [ curr, $($nameItems+"[order='"+curr+"']") ]); }
			if(curr>=total) { curr=total-1; $("#"+$name).trigger("eof", [ curr, $($nameItems+"[order='"+curr+"']") ]);  }
			$this.attr("carrCurrent",curr);
			refresh();
		}
		var gotoitem = function(nro) {
			if(nro==null) nro=0;
			var curr=parseInt($this.attr("carrCurrent")); var total=parseInt($this.attr("carrTotal"));
			curr=parseInt(nro);
			if(curr<0) { curr=0; $("#"+$name).trigger("bof", [ curr, $($nameItems+"[order='"+curr+"']") ]); }
			if(curr>=total) { curr=total-1; $("#"+$name).trigger("eof", [ curr, $($nameItems+"[order='"+curr+"']") ]);  }
			$this.attr("carrCurrent",curr);
			refresh();
		}
		var gotofirst = function() {
			$this.attr("carrCurrent",0); refresh();
		}
		var gotolast = function() {
			$this.attr("carrCurrent",parseInt($this.attr("carrTotal"))-1); refresh();
		}
		//properties
		var $this = $(this); var $name = $this.attr("id"); var $nameItems = "#"+$name+" ."+$name+"-item";
		//superposision de opciones
		var defaults = {
				speed			:   500				// animation speed
			,	itemStart		:	0				// initial current item
			,	itemsShowPrev	:	3				// items to show before
			,	itemsShowNext	:	2				// items to show after
			};
		var $opts = $.extend(defaults, options);
		var $items = $($nameItems); //array of items
		if($opts.itemStart=='last') $opts.itemStart=$items.length-1;
		//var $itemsData={ total:$items.length, current:$opts.itemStart }; // initial values for management
		$this.attr("carrTotal",$items.length)
		$this.attr("carrCurrent",$opts.itemStart)
		$this.attr("carrOptSpeed",$opts.speed)
		$this.attr("carrOptItemStart",$opts.itemStart)
		$this.attr("carrOptItemsShowPrev",$opts.itemsShowPrev)
		$this.attr("carrOptItemsShowNext",$opts.itemsShowNext)
		//var curr=$opts.itemStart;
		for(var i=0;i<$items.length;i++){ // ITEM SETUP
			$($items[i]).attr("order",i).addClass($name+"-item-hidden");
			$($items[i]).attr("order",i).find(".imagen").addClass($name+"-imagen-hidden");
			$($items[i]).attr("order",i).find(".datos").addClass($name+"-datos-hidden");
		}
		if($items.length>0){ // SI HAY ITEMS
			$("#"+$name+" .show-no-data").hide("fast"); refresh(); $(".show-total-item",$this).html($items.length);
			if($this.attr("hooked")===undefined){ // SI TODAVIA NO ME ENGANCHE
				$("#"+$name+" .button-prev").click(function(){ skipitem($(this).attr("items"),true); });
				$("#"+$name+" .button-next").click(function(){ skipitem($(this).attr("items"),false); });
				$("#"+$name+" .button-goto").click(function(){ gotoitem($(this).attr("item")); });
				$("#"+$name+" .button-first").click(function(){ gotofirst(); });
				$("#"+$name+" .button-last").click(function(){ gotolast(); });
				$this.attr("hooked","yes");
				for(var i=1;i<=$opts.itemsShowPrev;i++) $("."+$name+"-item-prev-"+i).live("click",function(){ gotoitem($(this).attr("order")); }); // initial prevs
				for(var i=1;i<=$opts.itemsShowNext;i++) $("."+$name+"-item-next-"+i).live("click",function(){ gotoitem($(this).attr("order")); }); // initial nexts
			}
		}
		else{ // SI NO HAY ITEMS
			$("#"+$name+" .show-no-data").show("slow");
			$("#"+$name+" .button-prev").hide("fast"); $("#"+$name+" .button-next").hide("fast");
			$("#"+$name+" .button-goto").hide("fast");
			$("#"+$name+" .button-first").hide("fast"); $("#"+$name+" .button-last").hide("fast");
			$("#"+$name+" .show-pannel").hide("fast"); $("#"+$name+" .show-curr-item").hide("fast"); $("#"+$name+" .show-total-items").hide("fast");
		}
	});
};
$.fn.carrouselMoveTo = function(nro){ // plugin definition
	return this.each(function(){ // iterate and reformat each matched element
		var turnTo = function($nombre,className,classNameD,classNameI) {
			$nombre.stop().animateToClass(className,$opts.speed,"swing",function(){ $(this).removeAttr("style"); }).attr("className",$name+"-item "+className);
			$("div.datos",$nombre).stop().animateToClass(classNameD,$opts.speed,"swing",function(){ $(this).removeAttr("style"); }).attr("className","datos "+classNameD);
			$("img.imagen",$nombre).stop().animateToClass(classNameI,$opts.speed,"swing",function(){ $(this).removeAttr("style"); }).attr("className","imagen "+classNameI);
		}
		var refresh = function() {
			var total=parseInt($this.attr("carrTotal"));
			var curr=parseInt($this.attr("carrCurrent"));
			var $items=$("div."+$name+"-item",$this);
			var cssItem,cssDatos,offset,$it;
			for(var i=0;i<total;i++){
				if(i==curr){ // seleccionado
					cssItem=$name+"-item-selected";
					cssDatos=$name+"-datos-selected";
					cssImagen=$name+"-imagen-selected";
				}
				else if(i<curr && i>=(curr-$opts.itemsShowPrev)){ // previos
					offset=curr-i; /*offset from selected*/
					cssItem=$name+"-item-prev-"+offset;
					cssDatos=$name+"-datos-prev-"+offset;
					cssImagen=$name+"-imagen-prev-"+offset;
				}
				else if(i>curr && i<=(curr+$opts.itemsShowNext)){ // siguientes
					offset=i-curr; /*offset from selected*/
					cssItem=$name+"-item-next-"+offset;
					cssDatos=$name+"-datos-next-"+offset;
					cssImagen=$name+"-imagen-next-"+offset;
				}
				else{ //oculto
					cssItem=$name+"-item-hidden";
					cssDatos=$name+"-datos-hidden";
					cssImagen=$name+"-imagen-hidden";
				}
				$it=$($items[i]);
				if($it.attr("className").indexOf(cssItem)==-1){
					turnTo(	$it, cssItem, cssDatos, cssImagen ); //llamado
				}
			}
			$this.trigger("change",[curr,$items[curr]]); //("#"+$name) // eventos
			$(".show-curr-item",$this).html(curr+1); // paneles (total no hace falta)
			// botones
			if(curr==0) $(".button-prev, .button-first",$this).hide("fast");
			else		$(".button-prev, .button-first",$this).show("fast");
			if(curr==(total-1))	$(".button-next, .button-last",$this).hide("fast");
			else				$(".button-next, .button-last",$this).show("fast");
		}
		var $this=$(this); var $name = $this.attr("id"); var $nameItems = "#"+$name+" ."+$name+"-item";
		var $opts={
			speed			:   parseInt($this.attr("carrOptSpeed")) // animation speed
		,	itemStart		:	parseInt($this.attr("carrOptItemStart")) // initial current item
		,	itemsShowPrev	:	parseInt($this.attr("carrOptItemsShowPrev")) // items to show before
		,	itemsShowNext	:	parseInt($this.attr("carrOptItemsShowNext")) // items to show after
		};
		if(nro==null) nro=0;
		var curr=parseInt($this.attr("carrCurrent")); var total=parseInt($this.attr("carrTotal"));
		curr=parseInt(nro);
		if(curr<0) { curr=0; $("#"+$name).trigger("bof", [ curr, $($nameItems+"[order='"+curr+"']") ]); }
		if(curr>=total) { curr=total-1; $("#"+$name).trigger("eof", [ curr, $($nameItems+"[order='"+curr+"']") ]);  }
		$this.attr("carrCurrent",curr);
		refresh();
	});
};
