/*
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ---- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
   Galeria de imagenes
   Namespace com.acuataller.ui
   version:  d01-m02-a07
//  -- -- -- -- -- -- -- -- --
//  Mauricio F. Tolezano (www.acuataller.com)
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ---- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
// 
//
*/
	
	


com.acuataller.ui.GaleriaImagenes = {

	idNavImagenes	: false,
	idContenedorAmpliacion		: false,
	u				: false,
	navImagenes		: false,
	precargaImagen	: false,
	seleccion 		: false,
	
	ampliacion		: { contenedor		 : false, 
						contenedorImagen : false, 
						imagen			 : false, 
						titulo			 : false 
					  },	
	
	opciones 		: { 
						banderaDOM 	: 'dom',
						ampliacion	:{	contenedor 		 : {elemento:'div'	, id:'ampliacion'	 	 ,'className':false	},
										contenedorImagen : {elemento:'div'	, id:'imagen-ampliada'	 ,'className':false	},	
										titulo			 : {elemento:'p'	, id:'titulo-ampliacion' ,'className':false	},
										estiloPrecarga	 : 'cargando',
										estiloActivo	 : 'activo'
									} ,
						navImagenes:{	estiloPrecarga:'cargando', estiloActivo	 : 'ampliacion-activa',
										imagen			 : {estiloPrecarga:'cargando', estiloActivo:'activo'}
									},
						vista	   :{	vistaPrecarga			: false, 
										vistaFinPrecarga		: false, 
										vistaCerrarAmpliacion	: false,
										crearAmpliacion			: false,
										scope					: false
									}		
					  },
	
	
	
	iniciar: function(idNavImagenes, idContenedorAmpliacion, preferencias ) 
	{	 
		if(	!document.getElementById
		   	||
		   	!document.getElementsByTagName
		   	||
		   	!document.getElementById(idContenedorAmpliacion)
		   	||
		  	!document.getElementById(idNavImagenes)
		  	||
			!document.getElementById(idNavImagenes).getElementsByTagName('a')
			||
			!document.getElementById(idNavImagenes).getElementsByTagName('a')[0]
			||
			!document.createElement
		   ) return false;


		this.idNavImagenes			= idNavImagenes;
		this.idContenedorAmpliacion = idContenedorAmpliacion;
		this.opciones 				= this.aplicarPreferencias( this.opciones, preferencias );
		this.u 						= new com.acuataller.utiles.Utiles();		
		
		// Bandera para actiar estilos necesarios junto con la ejecucion Javascript
		this.u.setClaseBandera(this.opciones.banderaDOM); 
		
		// Navegacion de imagenes
		this.navImagenes = document.getElementById(this.idNavImagenes);
		var _this = this;		
		for (i=0; a=this.navImagenes.getElementsByTagName('a')[i]; i++)
		{
			a.onclick=function() {
				_this.seleccionarImagen(this);
				_this.cargarImagen(this.href, _this.getTituloImagen(this) );			
				return false;
			}
		}	
		
		// Ampliacion
		this.crearAmpliacion();
		// Precarga de imagenes.
		this.precargaImagen = new com.acuataller.utiles.CargarImagen(this.ampliacion.imagen, this.onCargaCompletada, this);
	},		
	
	aplicarPreferencias : function(defaults, prefs) 
	{
		prefs = prefs || {};
		var prop, result = {};
		for (prop in defaults) result[prop] = prefs[prop] || defaults[prop];
		return result;
	},
	
	getTituloImagen: function(a) 
	{	
		return a.title || (a.alt||'');
	},
	
	
	seleccionarImagen: function(a) 
	{
		var seleccion 	= this.seleccion;
		this.seleccion = a;
		this.vistaCambioSeleccion(seleccion);
	},
	
	
	cargarImagen: function(url, titulo) 
	{					
		this.ampliacion.titulo.replaceChild( this.u.createTextNode( titulo ), this.ampliacion.titulo.firstChild );
		this.precargaImagen.cargar(url);
		
		this.vistaPrecarga(this);
	},
	
	
	onCargaCompletada: function() 
	{	
		this.vistaFinPrecarga();
	},
	
	
	cerrarAmpliacion: function() 
	{	
		this.vistaCerrarAmpliacion(this.seleccion);
		
		this.seleccion 	= null;
	},	
	
	
	vistaCambioSeleccion : function(seleccion)
	{
		if(seleccion) {	
			this.u.eliminarEstilo(seleccion, this.opciones.navImagenes.imagen.estiloActivo);
			this.u.eliminarEstilo(seleccion, this.opciones.navImagenes.imagen.estiloPrecarga);
		}
	},
	
	
	vistaPrecarga: function() 
	{		
		// Navegacion de imagenes.
		this.u.asignarEstilo(this.navImagenes, this.opciones.navImagenes.estiloPrecarga );		
		
		// Imagen seleccionada.
		this.u.asignarEstilo(this.seleccion, this.opciones.navImagenes.imagen.estiloPrecarga);
		
		
		// Ampliacion.
		this.u.asignarEstilo(this.ampliacion, this.opciones.ampliacion.estiloPrecarga);	
		
		if(this.opciones.vista.vistaPrecarga) 
			this.opciones.vista.vistaPrecarga.call(this.opciones.vista.scope);
	},
	
	
	vistaFinPrecarga: function() 
	{		
		// Navegacion de imagenes.
		this.u.eliminarEstilo(this.navImagenes, this.opciones.navImagenes.estiloPrecarga );
		this.u.asignarEstilo(this.navImagenes, this.opciones.navImagenes.estiloActivo );
		
		// Imagen seleccionada.
		this.u.eliminarEstilo(this.seleccion, this.opciones.navImagenes.imagen.estiloPrecarga);
		this.u.asignarEstilo(this.seleccion, this.opciones.navImagenes.imagen.estiloActivo);
		
		// Ampliacion.
		this.u.eliminarEstilo(this.ampliacion, this.opciones.ampliacion.estiloPrecarga);	
		this.u.asignarEstilo(this.ampliacion, this.opciones.ampliacion.estiloActivo);	
		
		if(this.opciones.vista.vistaFinPrecarga) 
			this.opciones.vista.vistaFinPrecarga.call(this.opciones.vista.scope);
	},	
	
	vistaCerrarAmpliacion: function(seleccion) 
	{	
		if(seleccion) 
		{
			this.u.eliminarEstilo(seleccion, this.opciones.navImagenes.imagen.estiloPrecarga);
			this.u.eliminarEstilo(seleccion, this.opciones.navImagenes.imagen.estiloActivo);
		}
		this.u.eliminarEstilo(this.navImagenes, this.opciones.navImagenes.estiloPrecarga );
		this.u.eliminarEstilo(this.navImagenes, this.opciones.navImagenes.estiloActivo );
		
		if(this.opciones.vista.vistaCerrarAmpliacion) 
			this.opciones.vista.vistaCerrarAmpliacion.call(this.opciones.vista.scope);
	},	

	
	crearAmpliacion: function() 
	{	
		if(this.opciones.vista.crearAmpliacion)
		{
			this.opciones.vista.crearAmpliacion();
			return;
		}
		
		// Titulo de la imagen
		this.ampliacion.titulo				= this.u.createElement(this.opciones.ampliacion.titulo.elemento);
		this.ampliacion.titulo.id 			= this.opciones.ampliacion.titulo.id;			
		if(this.opciones.ampliacion.titulo.className) 
			this.ampliacion.titulo.className = this.opciones.ampliacion.titulo.className;		
		
		this.ampliacion.titulo.appendChild( this.u.createTextNode(' ') );
		
		
		// Imagen ampliada
		this.ampliacion.imagen				= this.u.createElement('img');			
		
		// Contenedor de la imagen ampliada.
		this.ampliacion.contenedorImagen	= this.u.createElement(this.opciones.ampliacion.contenedorImagen.elemento);
		this.ampliacion.contenedorImagen.id = this.opciones.ampliacion.contenedorImagen.id;			
		if(this.opciones.ampliacion.contenedorImagen.className) 
			this.ampliacion.contenedorImagen.className = this.opciones.ampliacion.contenedorImagen.className;		
		
		this.ampliacion.contenedorImagen.appendChild( this.ampliacion.imagen );
		
		
		// Contenedor de la imagen ampliada y su descripcion.
		this.ampliacion.contenedor 			= this.u.createElement(this.opciones.ampliacion.contenedor.elemento);
		this.ampliacion.contenedor.id 		= this.opciones.ampliacion.contenedor.id;
		if(this.opciones.ampliacion.contenedor.className) 
			this.ampliacion.contenedor.className = this.opciones.ampliacion.contenedor.className;		
				
		this.ampliacion.contenedor.appendChild( this.ampliacion.titulo				);
		this.ampliacion.contenedor.appendChild( this.ampliacion.contenedorImagen	);
		
		
		document.getElementById( this.idContenedorAmpliacion ).appendChild( this.ampliacion.contenedor );			
	}
	
	
}
