/*
	Emerge v1.0
		
	Copyright (c) 2008 truzone (www.truzone.org)
	Official Site: emerge.truzone.org
	License: TruOpenSource/LGP (www.truopensource.org/lgp)                  
		
	--------------------------------------------------------	
		
	Qué es Emerge
	=============
	
	Emerge es un sencillo script en javascript que permite mostrar contenido ajeno a la página dentro de una ventana flotante.
	Se puede usar para mostrar una imagen o una página y permite superponer varios emerges durante la misma carga.
		
	Instalación
	===========
	
	En tu CSS debes agregar lo siguiente:
	
	.emerge_id
	{
		position:absolute;
		padding:10px;
		display:block;
		top:10%;
		overflow:hidden;
		border:1px solid #ffffff;
		background:#FDFCE9;
		text-align:left;
		margin:0 auto;
		z-index:9000;
	}

	.emerge_fondo {
	    background: url('./images/overlay.png') repeat;
	    filter: Alpha(opacity=50);    
	    position:absolute;
	    text-align:center;
	    top:0px;
	    left:0;
		z-index:9000;
	}
		
	En el <head></head> de la página dónde se va a usar debe agregarse:
	
	<script type="text/javascript" src="./scripts/emerge.js"></script>
	
	Forma de Uso
	============
	
		- Emerge para Imágenes: <a href="javascript:emerge_img('ruta de la imagen');">Abrir emerge</a>
		- Emerge para Páginas: <a href="javascript:emerge('ruta de la página');">Abrir emerge</a>
	
	Configuración
	=============
	
	Salvo que tengas conocimientos de JavaScript se recomienda modificar sólo dos valores:
	
	resize_velocidad = 50;
	resize_pixels = 10; 
	
*/

resize_velocidad = 0; // tiempo en milisegundos entre cada aumento en la proporción del emerge
resize_ancho_pixels = 10; // aumento máximo de píxeles por cada aumento en la proporción del emerge
resize_alto_pixels = 10; // aumento máximo de píxeles por cada aumento en la proporción del emerge
camp = new Array(); // guarda los objetos de las etiquetas de emerge abiertas
ob = new Array(); // guarda los objectos de las etiquetas de los fondos de emerge abiertos
fin_alto2 = new Array(); // guarda el valor top de cada emerge abierto para el reajuste por uso del scroll
array_zindex = new Array(); // guarda el valor z-index de cada fondo de emerge abierto
i = 0; // el valor de la próxima etiqueta para los arrays
abrir = 0;
var ruta = "./global/images/";
var dimensiones = new Object();

function obtener_dimensiones()
{	
	if(window.innerHeight)
	{
		dimensiones = { ancho : window.innerWidth, alto : window.innerHeight };
	}else if(document.documentElement.clientWidth > '0')
	{
		dimensiones = { ancho : document.documentElement.clientWidth, alto : 	document.documentElement.clientHeight };
	}else{
		dimensiones = { ancho : document.body.clientWidth, alto : document.body.clientHeight };
	}
}

function emerge_objeto()
{
	try {
    	objetus = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
    	try {
    		objetus= new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
        	objetus= false;
		}
	}
    if (!objetus && typeof XMLHttpRequest!='undefined') {
    	objetus = new XMLHttpRequest();
    }
    return objetus;
}

function emerge(url)
{
	obtener_dimensiones();
	emerge_fondo();
	
    _objetus = emerge_objeto();
    _objetus.open("GET",url,true);
    _objetus.onreadystatechange=function() {
        if (_objetus.readyState==4)
        {
            emerge_lanzar(_objetus.responseText);

        }
    }
    _objetus.send(null);
}

function emerge_img(img)
{
	obtener_dimensiones();
	imagen = new Image();
	imagen.src = img;
	emerge_fondo();	
	comprobar = setInterval("emerge_img_size(imagen)",50);
}

function emerge_img_size(imagen)
{
	if(imagen.width!='0' && imagen.height!='0')
	{
		clearInterval(comprobar);
		if(imagen.width >= (dimensiones.ancho - 100))
		{
			emerge_lanzar('<div style="text-align:center;"><img src="' + imagen.src + '" width="' + (dimensiones.ancho - 100) + '" alt="" title=""></div>');
		} else if (imagen.height >= (dimensiones.alto - 100)) {
			emerge_lanzar('<div style="text-align:center;"><img src="' + imagen.src + '" height="' + (dimensiones.alto - 100) + '" alt="" title=""></div>');
		} else {
			emerge_lanzar('<div style="text-align:center;"><img src="' + imagen.src + '" alt="" title=""></div>');		
		}
	}
}

function emerge_fondo()
{
	abrir++;
	emerge_ocultar_select();
	bod = document.getElementsByTagName('body')[0];
		
	ob[i] = document.createElement('div');
	ob[i].id = 'emerge_fondo' + i;
	ob[i].className = 'emerge_fondo';
	
   	ob[i].style.width = dimensiones.ancho + 'px';
    ob[i].style.height = dimensiones.alto + 'px';
    var alto = (dimensiones.alto / 2) - 20;
    	
	if(i == 0)
	{
		array_zindex[0]	= 9000;
	}else{
		array_zindex[i] = array_zindex[i-1] + 2;
	}
	ob[i].style.top = document.body.scrollTop + 'px';
	ob[i].style.display = 'block';
	ob[i].style.zIndex = array_zindex[i];
	ob[i].innerHTML = '<IMG src="' + ruta + 'loading.gif" alt="cargando" title="cargando" style="margin-top:' + alto + 'px;" />';

	bod.appendChild(ob[i]);
	
}

function emerge_lanzar(val)
{

	bod = document.getElementsByTagName('body')[0];
				
	camp[i] = document.createElement('div');
	camp[i].id = 'emerge_id' + i;
	camp[i].className = 'emerge_id';
	camp[i].style.top = '0';
	camp[i].style.left = '0';
	camp[i].style.visibility = 'hidden';
	camp[i].style.zIndex = array_zindex[i] + 1;
	camp[i].innerHTML = '<div id="emerge_id_cont">' + val + '<br /></div><input type="button" value="Cerrar" onclick="emerge_cerrar(\'' + i + '\');" />';
	
    bod.appendChild(camp[i]);
	
	camp[i].style.display = 'block';
    emerge_posicion();
}

function emerge_cerrar(a)
{
	var padre = camp[a].parentNode;
	var padre2 = ob[a].parentNode;

	padre.removeChild(camp[a]);
	padre2.removeChild(ob[a]);
	
	camp[a] = false;
	ob[a] = false;

	abrir--;
	if(abrir == 0)
	{
		emerge_mostrar_select();
	}
}

function emerge_posicion()
{

	ini_ancho = dimensiones.ancho / 2;
	ini_alto = dimensiones.alto / 2;
	
	ancho = camp[i].offsetWidth;
	alto = camp[i].offsetHeight;
 
	fin_ancho = ini_ancho - (ancho / 2);
	fin_alto2[i] = ini_alto - (alto / 2);
  	fin_alto = fin_alto2[i] + document.body.scrollTop;

	if(resize_velocidad == 0)
	{
		camp[i].style.width = ancho + 'px';
		camp[i].style.height = alto + 'px';
		camp[i].style.left = fin_ancho + 'px';
		camp[i].style.top = fin_alto + 'px';
		camp[i].style.visibility = 'visible';
        i++;
        actu = setInterval("emerge_actu_top()",50);
	} else {
		camp[i].style.width = 0;
		camp[i].style.height = '10px';
		camp[i].style.left = ini_ancho + 'px';
		camp[i].style.top = fin_alto + 'px';
	
		camp[i].style.visibility = 'visible';
		resize = setInterval("emerge_resize()",resize_velocidad);
	
	}
}

function emerge_resize()
{
	nuevo_ancho = parseFloat(camp[i].style.left) - (resize_ancho_pixels / 2);
	
	if(nuevo_ancho > fin_ancho)
	{
	
        camp[i].style.left = nuevo_ancho + 'px';
        camp[i].style.width = (parseFloat(camp[i].style.width) + resize_ancho_pixels) + 'px';
        
    } else {
    
        camp[i].style.width = ancho + 'px';		
        camp[i].style.left = fin_ancho + 'px';
        
		nuevo_alto = parseFloat(camp[i].style.height) + resize_alto_pixels;	
        
		if(nuevo_alto < alto)
		{
    		camp[i].style.height = nuevo_alto + 'px';    
   	
    	} else {
    	
    		camp[i].style.height = alto + 'px';
        	clearInterval(resize);
        	i++;
        	actu = setInterval("emerge_actu_top()",50); 
    	}

	}    	
	
}

function emerge_actu_top()
{
	for(var j in camp)
	{
		if(camp[j] != false)
		{
			ob[j].style.top = document.body.scrollTop + 'px';
			camp[j].style.top = fin_alto2[j] + document.body.scrollTop + 'px';
		}
	}
}

function emerge_ocultar_select()
{
	tempa = document.getElementsByTagName('select');
	for(h = 0; h < tempa.length; h++)
	{
		tempa[h].style.visibility = 'hidden';
	}
}

function emerge_mostrar_select()
{
	tempa = document.getElementsByTagName('select');

	for(h = 0; h < tempa.length; h++)
	{
		tempa[h].style.visibility = 'visible';
	}
}
