/*
IMAGE PRELOAD

Funcion para precargar imagenes
-Permite iniciar la carga de imagenes especificando sus nombres.
-Si se indica un contenedor, este se oculta hasta que todas hayan terminado de cargar
-Si se indica una funcion_fin, esta es llamada cuando todas las imagenes terminan de cargar
*/

var __preload_cantidadImagenes__;
var __preload_imageCounter__= 0;
var __preload_contenedor__=null
var __preload_funcion_fin__ = null;

//FUNCION IMG CARGADA
//-------------------
//Se llama cuando cada imagen se termina de cargar
//Aumenta el contador de imagenes
//Si se trata de la ultima imagen:
//						-Hace visible el contenedor
//						-Ejecuta la funcion_fin
function img_cargada(){
	__preload_imageCounter__++; 
	
	if(__preload_imageCounter__>=__preload_cantidadImagenes__){//si era la ultima imagen por cargar
		desocultar_contenedor();	
		ejecutar_funcion_fin();	
	}
}

//FUNCION ERROR CARGADA
//-------------------
//Se llama cuando uan imagen no pudo ser cargada
//Aumenta el contador de imagenes
//Si se trata de la ultima imagen:
//						-Hace visible el contenedor
//						-Ejecuta la funcion_fin
function error_cargada(){
	__preload_imageCounter__++;
	
	if(__preload_imageCounter__>=__preload_cantidadImagenes__){//si era la ultima imagen por cargar
		desocultar_contenedor();
		ejecutar_funcion_fin();		
	}
}

//FUNCION DESOCULTAR CONTENEDOR
//---------------------
//Se llama cuando se trabajó con la última imagen
//Si el contenedor a desocultar no es vacío se cambia la visibilidad del contenedor a visible
function desocultar_contenedor(){
	//muestra el contenedor (solo si se indico alguno)
	if(__preload_contenedor__ != null){
		__preload_contenedor__.style.visibility = "visible";
	}
	
}

//FUNCION OCULTAR CONTENEDOR
//---------------------
//Se llama al comienzo
//Si el contenedor a ocultar no es vacío se cambia la visibilidad del contenedor a hidden
function ocultar_contenedor(){
	//muestra el contenedor (solo si se indico alguno)
	if(__preload_contenedor__ != null){
		__preload_contenedor__.style.visibility = "hidden";
	}
	
}

//FUNCION EJECUTAR_FUNCION_FIN
//---------------------
//Se llama cuando se trabajó con la última imagen
//Si la función no es vacía se ejecuta la función pasada
function ejecutar_funcion_fin(){
	//ejecuta la funcion si se indico alguna
	if(__preload_funcion_fin__ != null)
		__preload_funcion_fin__();	
}

//FUNCION IMAGE PRELOAD
//---------------------
//inicia la carga de imagenes cuya ruta completa se encuentra en el array "nombres"
//si se especifica un contenedor para las imagenes, este se oculta hasta que todas las imagenes hayan terminado de cargar
//devuelve un array con los objetos imagen cargados
//si se especifica una funcion en "funcion_fin", esta es llamada cuando todas las imagenes se terminan de cargar
function image_preload(nombres, contenedor,funcion_fin){
		if (nombres == null)
			return null; //no hay nombres de imagenes, no hay nada para hacer

		__preload_contenedor__ = contenedor;

		//oculta el contenedor mientras se cargan las imagenes
		ocultar_contenedor();

		__preload_funcion_fin__ = funcion_fin; 

		//Inicia la carga de imagenes
		images = new Array();
		__preload_cantidadImagenes__ = nombres.length;

		for(i=0;i<nombres.length;i++) {
			images[i] = new Image(); //crea el objeto imagen
			images[i].onload = img_cargada; //indica la funcion que se llamara cuando la imagen se termine de cargar
			images[i].onerror = error_cargada; //si fallo la carga de la imagen por algun motivo
			images[i].src = nombres[i]; //comienza a cargar la imagen
		}

		return images;
}
