/**
 * @author guille
 */

/**
 * Class Cache de fotos
 */
var CacheFotos= new Class({
	initialize:function(callback,prefijo){
		this.arreglo_img=new Hash();
		this.callback=callback;
		this.prefijo=prefijo;
	},
	get_imagen: function(path){
		if(this.arreglo_img.hasKey(path)){
			this.callback.bind($(this.arreglo_img.get(path)))();
		}
		else{
			var img=new Asset.image(path, {id: this.prefijo+"_"+this.arreglo_img.keys().length, onload:this.callback});
			/*var img=document.createElement('img');
			img.src=path;
			img.id=this.prefijo+"_"+this.arreglo_img.keys().length;
			img.onload=this.callback;*/
			this.arreglo_img.set(path,img);
		}
	},
	longitud:function(){
		return his.arreglo_img.keys().length;
	},
	preload: function(path){
		if(!this.arreglo_img.hasKey(path)){
			var img=new Asset.image(path, {id: this.prefijo+"_"+this.arreglo_img.keys().length, title:'myImage'});
			/*var img=document.createElement('img');
			img.src=path;
			img.id=this.prefijo+"_"+this.arreglo_img.keys().length;*/
			this.arreglo_img.set(path,img);
		}
	}
});

/**
 *  Galeria
 */

var Galeria={
	arreglo_imagenes:[],
	arreglo_imagenes_grande:[],
	indice:1,
	contenedor:null,
	img_anterior:null,
	cache:new CacheFotos(function(){Galeria.siguiente_cargada(this)},"galeria"),
	busy:false,
	busy_thumbs:false,
	delay:2000,
	delay_thumblist:4000,
	tamanio_fotos:900,
	contenedor_size:900,
	preloader:null,
	offset_thumb:0,
	last_thumb:0,
	is_idle:true,
	indice_actual:0,
	thumbs_mostrandose:false,
	preload_timer_index:1,
	fx_scroll_thumbs:null,
	path_base: "",
	path_zoom:"", //por ahora es el mismo
	path_thumb:"_thumb",
	path_orig:"_medium",
	categoria:"",
	nombre_galeria:"showroom",
	id_franchise:0,
	init: function(){
		Galeria.generar_primera();
		Galeria.contenedor=$('imagen1');
		Galeria.img_anterior=$(Galeria.contenedor);
		Galeria.preload_siguiente();
		Galeria.hacer_thumbs('thumbs-contenedor');
		Galeria.preload_timer.delay(3000);
		Zoom.path=Galeria.get_path_zoom(Galeria.arreglo_imagenes[0]);
		Galeria.marcar_thumb(0);
		$('enlarge-bot').addEvent('click',Galeria.abrir_nueva_img);
	},
	abrir_nueva_img: function(){
		//window.open(Zoom.path,"Classy Closets Image");
		var newWindow = window.open(Zoom.path, '_blank');
		newWindow.focus();
		return false;
	},
	generar_primera:function(){
		if(Galeria.arreglo_imagenes.length > 0){
			var div= new Element('div',{'class': 'imagen','id':'imagen1'});
			var img= new Element('img',{'src':Galeria.get_path_normal(Galeria.arreglo_imagenes[0])});
			img.injectInside(div);
			div.injectInside('imagenes-contenedor');			
		}
	},
	get_path_zoom:function(imagen){		
		return imagen;
	},
	get_path_thumb:function(imagen){
		var separado=imagen.split('.'); //cambiar: hacerlo general por si el archivo tiene puntos
		return separado[0]+Galeria.path_thumb+"."+separado[1]
	},
	get_path_normal:function(imagen){
		var separado=imagen.split('.');		
		return separado[0]+Galeria.path_orig+"."+separado[1]
	},
	siguiente: function(){
		if(!Galeria.busy && !Zoom.cargando){
			Zoom.check_zoom(); //desactiva si esta activado
			$(Galeria.preloader).setStyle('visibility','visible');
			Galeria.busy=true;
			if(Galeria.indice<= Galeria.arreglo_imagenes.length-1)Galeria.indice++;
			else Galeria.indice=1;
			Zoom.path=Galeria.get_path_zoom(Galeria.arreglo_imagenes[Galeria.indice-1]);
			Galeria.cache.callback=function(){Galeria.siguiente_cargada(this)};
			Galeria.cache.get_imagen(Galeria.get_path_normal(Galeria.arreglo_imagenes[Galeria.indice-1]));
			Galeria.preload_siguiente();
			Galeria.marcar_thumb(Galeria.indice-1);
			Galeria.desmarcar_thumb(Galeria.indice_actual);
			Galeria.indice_actual=Galeria.indice-1;
		}
	},
	preload_siguiente: function(){
		Galeria.cache.preload(Galeria.get_path_normal(Galeria.arreglo_imagenes[Galeria.siguiente_arreglo(Galeria.arreglo_imagenes,Galeria.indice-1)]));
	},
	preload_anterior: function(){
		Galeria.cache.preload(Galeria.get_path_normal(Galeria.arreglo_imagenes[Galeria.anterior_arreglo(Galeria.arreglo_imagenes,Galeria.indice-1)]));
	},
	ir_a:function(nro){
		if(!Galeria.busy && nro != (Galeria.indice-1) && !Zoom.cargando){
			Galeria.desmarcar_thumb(Galeria.indice_actual);
			Galeria.marcar_thumb(nro);
			Zoom.check_zoom();
			$(Galeria.preloader).setStyle('visibility','visible');
			Galeria.busy=true;
			Zoom.path=Galeria.get_path_zoom(Galeria.arreglo_imagenes[nro]);
			if(nro>=Galeria.indice)	Galeria.cache.callback=function(){Galeria.siguiente_cargada(this)};
			else Galeria.cache.callback=function(){Galeria.anterior_cargada(this)};
			Galeria.cache.get_imagen(Galeria.get_path_normal(Galeria.arreglo_imagenes[nro]));
			Galeria.cache.preload(Galeria.get_path_normal(Galeria.arreglo_imagenes[Galeria.siguiente_arreglo(Galeria.arreglo_imagenes,nro,1)])); //cargo anterior y siguiente
			Galeria.cache.preload(Galeria.get_path_normal(Galeria.arreglo_imagenes[Galeria.anterior_arreglo(Galeria.arreglo_imagenes,nro,1)]));
			(function(){
				Galeria.cache.preload(Galeria.get_path_normal(Galeria.arreglo_imagenes[Galeria.siguiente_arreglo(Galeria.arreglo_imagenes,nro,2)])); //cargo ante-anterior y sigue-siguiente
				Galeria.cache.preload(Galeria.get_path_normal(Galeria.arreglo_imagenes[Galeria.anterior_arreglo(Galeria.arreglo_imagenes,nro,2)]));
			}).delay(2000);
			Galeria.indice_actual=nro;
			Galeria.indice=nro+1;
		}
	},
	siguiente_cargada: function(img){
		//console.log(Galeria.img_anterior);
		var div= new Element('div',{'class': 'imagen-next'});
		img.injectInside(div);
		div.injectInside('imagenes-contenedor');		
		if(Galeria.img_anterior!=null){
			$(Galeria.img_anterior).setStyle('left',0);//.setStyle('z-index',4);
			$(Galeria.img_anterior).effects({duration:Galeria.delay}).start({left:-(Galeria.tamanio_fotos)}).chain(function(){
				Galeria.img_anterior.remove();
				Galeria.img_anterior=div;
			});
		}
		$(div).effects({duration:Galeria.delay}).start({left:0}).chain(function(){
			Galeria.busy=false;
			$(Galeria.preloader).setStyle('visibility','hidden');
			});
	},
	anterior: function(){
		if(!Galeria.busy && !Zoom.cargando){
			Zoom.check_zoom(); //desactiva si esta activado
			$(Galeria.preloader).setStyle('visibility','visible');
			Galeria.busy=true;
			if(Galeria.indice> 1)Galeria.indice--;
			else Galeria.indice=Galeria.arreglo_imagenes.length;
			Zoom.path=Galeria.get_path_zoom(Galeria.arreglo_imagenes[Galeria.indice-1]);
			Galeria.cache.callback=function(){Galeria.anterior_cargada(this)};
			Galeria.cache.get_imagen(Galeria.get_path_normal(Galeria.arreglo_imagenes[Galeria.indice-1]));
			Galeria.preload_anterior();
			Galeria.marcar_thumb(Galeria.indice-1);
			Galeria.desmarcar_thumb(Galeria.indice_actual);
			Galeria.indice_actual=Galeria.indice-1;			
		}
	},
	anterior_cargada: function(img){
		var	div= new Element('div',{'class': 'imagen-prev'});
		div.injectInside('imagenes-contenedor');
		img.injectInside(div);
		if(Galeria.img_anterior!=null){
			$(Galeria.img_anterior).effects({duration:Galeria.delay}).start({left:Galeria.contenedor_size}).chain(function(){
				Galeria.img_anterior.remove();
				Galeria.img_anterior=div;
			});
		}
		$(div).effects({duration:Galeria.delay}).start({left:0}).chain(function(){
			Galeria.busy=false;
			$(Galeria.preloader).setStyle('visibility','hidden');
			});
	},
	siguiente_arreglo:function(array,indice_ant,cantidad){
		if((indice_ant+cantidad-1) < array.length-1){
			return (indice_ant+cantidad);
		}
		else{
			return 0;
		}
	},
	anterior_arreglo: function(array,indice_ant,cantidad){
		if(indice_ant > (cantidad-1)){
			return (indice_ant-cantidad);
		}
		else{
			return (array.length-cantidad);
		}
	},
	hacer_thumbs: function(contenedor){
		var tamanio=(Galeria.arreglo_imagenes.length*207);
		$(contenedor).setStyle('width',tamanio);
		$(contenedor).setStyle('left',0);
		Galeria.fx_scroll_thumbs=new Fx.Scroll('thumbs-miniwrap',{
			wait:false,
			duration:2000,
			//
			transition:Fx.Transitions.Back.easeOut
			});
		/*
		 * Solo hace los primeros 15 thumbs
		 */
		var muchos_thumbs=Galeria.arreglo_imagenes.some(function(item,index){
			if(index > 10) return true;
			var	div= new Element('div',{'class': 'thumb','id':'thumb_'+index});
			div.injectInside($(contenedor));
			var path_img=Galeria.get_path_thumb(item);
			var img= new Element('img',{'src':path_img});
			img.addEvent('click',function(){
				//console.log('item: '+index)
				Galeria.ir_a(index);
			});
			img.injectInside(div);
			Galeria.last_thumb=index;
		});
		if(muchos_thumbs){
			Galeria.preload_thumbs.delay(Galeria.delay_thumblist);
		}

	},
	max_overflow_thumbs: function(){
		return Galeria.arreglo_imagenes.length*207-900;
	},
	scroll_thumbs_derecha:function(){
		if(Galeria.offset_thumb < Galeria.max_overflow_thumbs() && !Galeria.busy_thumbs){
			Galeria.busy_thumbs=true;
			Galeria.offset_thumb+=400;
			Galeria.fx_scroll_thumbs.scrollTo(Galeria.offset_thumb,0).chain(function(){Galeria.busy_thumbs=false});
		}
	},
	scroll_thumbs_izquierda:function(){
		if(Galeria.offset_thumb > 0 && !Galeria.busy_thumbs){
			Galeria.busy_thumbs=true;
			Galeria.offset_thumb-=400;
			Galeria.fx_scroll_thumbs.scrollTo(Galeria.offset_thumb,0).chain(function(){Galeria.busy_thumbs=false});
		}
	},
	preload_thumbs: function(){
		if(Galeria.arreglo_imagenes.length-1 > Galeria.last_thumb){
			var next_thumbs=Galeria.arreglo_imagenes.filter(function(item,index){
				return (index> Galeria.last_thumb && index< (Galeria.last_thumb+10));
			});
			var tamanio=(Galeria.arreglo_imagenes.length*207);
			$('thumbs-contenedor').setStyle('width',tamanio);
			next_thumbs.each(function(item,index){
				var offset=Galeria.last_thumb;
				var	div= new Element('div',{'class': 'thumb','id':'thumb_'+(Galeria.last_thumb+index+1)});
				div.injectInside($('thumbs-contenedor'));
				var path_img=Galeria.get_path_thumb(item);
				var img= new Element('img',{'src':path_img});
				img.addEvent('click',function(){
					Galeria.ir_a(offset+index+1);
				});
				img.injectInside(div);
			});
			Galeria.last_thumb+=next_thumbs.length;
			Galeria.preload_thumbs.delay(Galeria.delay_thumblist);
		}
	},
	preload_timer: function(){
		if(Galeria.preload_timer_index < 3){ //la cantidad de imagenes que queremos prelodear
			if(Galeria.is_idle){
				Galeria.cache.preload(Galeria.get_path_normal+Galeria.arreglo_imagenes[Galeria.preload_timer_index]);
				Galeria.preload_timer_index++;
			}
			Galeria.preload_timer.delay(5000);
		}
	},
	cargar_arreglo_json: function(url){
		var request = new Json.Remote(url, {
			onComplete: function(jsonObj) {
				for(var i=0;i<jsonObj.fotos.length;i++){
					Galeria.arreglo_imagenes.include(jsonObj.fotos[i]);
				}
				Galeria.init();
			}
		}).send();
	},
	generar_arreglo_img:function(desde,hasta){
		var contador=0;
		var prefijo="";
		for(var i=desde;i<=hasta;i++){
			if(i<10) prefijo="00";
			else if(i< 100) prefijo="0";
			else prefijo="";
			Galeria.arreglo_imagenes[contador]=prefijo+i+".jpg";
			contador++;
		}
		Galeria.arreglo_imagenes[0]="068.jpg";
		Galeria.arreglo_imagenes[67]="001.jpg";
		Galeria.init();
	},
	marcar_thumb: function(nro){
		$('thumb_'+nro).addClass('thumb_activo');
	},
	desmarcar_thumb: function(nro){
		$('thumb_'+nro).removeClass('thumb_activo');
	},
	mostrar_galeria:function (){
			$('imagenes-contenedor').setStyle('opacity',0);
			$('imagenes-contenedor').setStyle('visibility','visible');
			$('imagenes-contenedor').setStyle('display','block');
			$('imagenes-contenedor').setStyle('z-index',5);
			$('imagenes-contenedor').effects({duration:2000}).start({'opacity':1}).chain(function(){
				//mostrar_thumbs();
				$('menu-abajo-nav').setStyle('opacity',0);
				$('menu-abajo-nav').setStyle('visibility','visible');
				$('menu-mostrar-thums').addEvent('click',Galeria.toggle_thumbs);
				$('menu-abajo-nav').effects({duration:1000}).start({'opacity':1});
				$('content-wrapper').setStyle('visibility','hidden');
				$('content-wrapper').setStyle('opacity',0);
			});

	},
	toggle_thumbs: function(){
		if(Galeria.thumbs_mostrandose){
			Galeria.ocultar_thumbs();
		}else{
			Galeria.mostrar_thumbs();
		}
	},
	mostrar_thumbs: function(){
		$('thumbs-wrapper').setStyle('opacity',0);
		$('thumbs-wrapper').setStyle('visibility','visible');
		$('thumbs-wrapper').setStyle('display','block');
		$('thumbs-wrapper').effects({duration:2000}).start({'opacity':1});
		Galeria.thumbs_mostrandose=true;
		//$('menu-abajo-nav').effects({duration:1000}).start({'opacity':0});
		//$('menu-abajo-nav').setStyle('visibility','hidden');
	},
	ocultar_thumbs: function(){
		/*$('menu-mostrar-thums').setStyle('visibility','visible');
		$('menu-mostrar-thums').effects({duration:1000}).start({'opacity':0});*/
		$('thumbs-wrapper').effects({duration:2000}).start({'opacity':0});
		Galeria.thumbs_mostrandose=false;

	},
	ocultar_galeria:function (){
			//console.log("ocultar");
			if(Galeria.indice_actual != 0){
				Galeria.ir_a(0);
				(function(){
					$('content-wrapper').setStyle('opacity',1);
					$('content-wrapper').setStyle('visibility','visible');
					$('imagenes-contenedor').effects({duration:2000}).start({'opacity':0}).chain(function(){
						if(Galeria.thumbs_mostrandose)Galeria.ocultar_thumbs();
					});
				}).delay(3000);
			}
			else{
				$('content-wrapper').setStyle('opacity',1);
				$('content-wrapper').setStyle('visibility','visible');
				$('imagenes-contenedor').effects({duration:2000}).start({'opacity':0}).chain(function(){
					if(Galeria.thumbs_mostrandose)Galeria.ocultar_thumbs();
				});
			}
			$('menu-abajo-nav').effects({duration:1000}).start({'opacity':0});
	}
}

/**
 * Zoom
 */

var Zoom = {
	preloader:null,
	contenedor:null,
	contenedor_grande:null,
	drag:null,
	back_menu:null,
	path:'',
	cargada:false,
	boton:null,
	activado:false,
	cargando:false,
	anular_zoom:false,
	flag_timeout:false,
	timeout:null,
	url_zoom_out:"/site-images/zoom_out.png",
	url_zoom_in:"/site-images/zoom_in.png",
	callback_gral:function(){Zoom.imagen_cargada(this)},
	cache: new CacheFotos(function(){Zoom.imagen_cargada(this)},'zoom'),
	inicializar:function(preloader,contenedor,contenedor_grande,back_menu,path,boton){
		this.preloader=preloader;
		this.contenedor=contenedor;
		this.contenedor_grande=contenedor_grande;
		this.back_menu=back_menu;
		this.path=path;
		this.boton=boton;
		$(boton).removeEvents();
		$(boton).addEvent('click',function(){Zoom.cargar_imagen_grande(Zoom.path)});
	},
	set_imagen_grande: function(imagen_grande){
		this.path=imagen_grande;
	},
	imagen_timeout:function(){
		//console.log("timeout");/////////////////////////////////////
		Zoom.flag_timeout=true;
		Zoom.cargando=false;
		Galeria.is_idle=true;
		Zoom.activado=false;
		$(Zoom.preloader).setStyle('visibility','hidden');
		$(Zoom.boton).addEvent('click',function(){Zoom.cargar_imagen_grande(Zoom.path)});
		$(Zoom.contenedor_grande).remove();
	},
	cambiar_imagen_out:function(){
		$(Zoom.boton).setStyle('background','url('+Zoom.url_zoom_out+') no-repeat');
	},
	cambiar_imagen_in:function(){
		$(Zoom.boton).setStyle('background','url('+Zoom.url_zoom_in+') no-repeat');
	},
	cargar_imagen_grande:function (path_imagen){
		if(!Galeria.busy && !Zoom.cargando){
			Zoom.cargando=true;
			Galeria.is_idle=false;
			Zoom.activado=true;
			Zoom.flag_timeout=false;
			Zoom.timeout=Zoom.imagen_timeout.delay(15000); //15 sec
			$(this.preloader).setStyle('visibility','visible');
			$(Zoom.boton).removeEvents();
			var contenedor=new Element('div',{'id': Zoom.contenedor_grande,'class':'imagen_grande'});
			contenedor.injectAfter($('preloader'));
			contenedor.setStyle('opacity',0).setStyle('visibility','hidden');
			Zoom.cache.get_imagen(path_imagen);
		}
	},
	imagen_cargada: function(img){
		if(!Zoom.flag_timeout){
			Zoom.timeout=$clear(Zoom.timeout);
			img.injectInside(this.contenedor_grande);
			var width= img.width;
			var height= img.height;
			var offset_left=((width-900)/2)*(-1);
			var offset_top=((height-600)/2)*(-1);
			var limit_x=(width-900)*(-1);
			var limit_y=(height-600)*(-1);
			$(Zoom.contenedor_grande).setStyle('left',offset_left).setStyle('top',offset_top).setStyle('opacity',0).setStyle('z-index','1').setStyle('visibility','visible').setStyle('display','block');
			Galeria.is_idle=true;
			$(Zoom.contenedor_grande).effects({duration:2000}).start({opacity:1}).chain(function(){
				$(Zoom.contenedor_grande).setStyle('cursor','move');
				$(Zoom.preloader).setStyle('visibility','hidden');
				//$(Zoom.back_menu).setStyle('visibility','visible');
				$(Zoom.boton).addEvent('click',Zoom.volver);
				Zoom.cargando=false;
				$(Zoom.contenedor_grande).makeDraggable({limit:{x:[limit_x,0],y:[limit_y,0]}});
				Zoom.cambiar_imagen_out();
			});
		}
	},
	volver: function(){
		if(!Zoom.cargando){
			Zoom.cargando=true;
			$(Zoom.contenedor_grande).removeEvents();
			$(Zoom.contenedor_grande).effects({duration:2000}).start({opacity:0}).chain(function(){
				$(Zoom.contenedor_grande).setStyle('z-index','-1');
				$(Zoom.contenedor_grande).setStyle('visibility','hidden');
				$(Zoom.contenedor_grande).setStyle('display','none');
				$(Zoom.contenedor_grande).remove();
				$(Zoom.boton).removeEvent('click',Zoom.volver);
				$(Zoom.boton).addEvent('click',function(){Zoom.cargar_imagen_grande(Zoom.path)});
				Zoom.activado=false;
				Zoom.cargando=false;
				Zoom.cambiar_imagen_in();
			});
		}
	},
	volver_rapido:function(){
		$(Zoom.contenedor_grande).onmousedown=null;
		$(Zoom.contenedor_grande).setStyle('opacity','0');
		$(Zoom.contenedor_grande).setStyle('z-index','-1');
		$(Zoom.contenedor_grande).setStyle('visibility','hidden');
		$(Zoom.contenedor_grande).setStyle('display','none');
		$(Zoom.contenedor_grande).remove();
		$(Zoom.boton).removeEvent('click',Zoom.volver);
		$(Zoom.boton).addEvent('click',function(){Zoom.cargar_imagen_grande(Zoom.path)});
		Zoom.activado=false;
	},
	check_zoom: function(){
		if(Zoom.activado){
			Zoom.volver_rapido();
			Zoom.cambiar_imagen_in();
		}
	}
}

