// =========================================================================================
// Nombre:		libLayer.js
// Creado:		Axel Magagnini, 04-May-05, 09:20 a.m.
// Modificado:	Axel Magagnini, 06-May-05, 12:42 p.m.
// Descripcion:	Biblioteca de funciones para manejo de layers.
// =========================================================================================
// -----------------------------------------------------------------------------------------
// Constants
// -----------------------------------------------------------------------------------------

var UPDATE_INTERVAL = 10;			// Delay en milisegundos entre ciclos de setInterval().
var STATE_MOVE_IN	= 0;			// Banner --> Estado: Entrando.
var STATE_STANDBY	= 1;			// Banner --> Estado: Esperando click.
var STATE_MOVE_OUT	= 2;			// Banner --> Estado: Saliendo.
var STATE_DEAD		= 3;			// Banner --> Estado: Inactivo.

// -----------------------------------------------------------------------------------------
// Variables
// -----------------------------------------------------------------------------------------


var browser				= null;			// Browser usado.
var browserWidth		= null;			// Ancho actual del browser en px.
var browserHeight		= null;			// Altura actual del browser en px.

var banner				= null;			// Referencia al layer que contiene el banner.
var bannerState			= null;			// Estado de movimiento del banner (0|1|2)
var bannerTotalCycles	= null;			// Velocidad del banner, en px. (positivo|negativo)
var bannerStandbyCycles	= 500;			// Ciclos que se mantiene el banner visible.
var bannerMinWidth		= null;			// Resolucion minima para mostrar el banner.
var	bannerX1			= null;			// Posicion inicial X del banner.
var bannerY1			= null;			// Posicion inicial X del banner.
var bannerX2			= null;			// Posicion final X del banner.
var bannerY2			= null;			// Posicion final Y del banner.

// -----------------------------------------------------------------------------------------
// getBrowserSpecifics: Averigua que browser se esta usando.
// -----------------------------------------------------------------------------------------

function getBrowserSpecifics()
{
	// Netscape Navigator 4.x.

	if( document.layers )
	{
		browser = "NN4";
	}

	// Internet Explorer.

	if( document.all )
	{
		browser = "IE";
	}

	// Netscape Navigator 6.x+, Mozilla.

	if( !document.all && document.getElementById )
	{
		browser = "NN6";
	}

	// Macintosh.

	var agent = navigator.userAgent;
	if( agent.search( /msie/i ) > 0 && 
		( agent.search( /mac_powerpc/i ) > 0 || agent.search( /macintosh/i ) > 0 ) )
	{
		browser = "MSIE52";
	}

//	browser = "MSIE52";

//	document.write( "<p style='padding: 10px; color: yellow; background-color: black'><b>User Agent:</b> " + agent + "<br><b>Browser:</b> " + browser + "</p>" );

}

// -----------------------------------------------------------------------------------------
// getDimensions(): Averigua las dimensiones de la pantalla y de la ventana del browser.
// -----------------------------------------------------------------------------------------

function getDimensions()
{
	// Averiguo las dimensiones del browser.

	browserWidth	= document.all? document.body.clientWidth : window.innerWidth - 16;
	browserHeight	= document.all? document.body.clientHeight : window.innerHeight - 16;
}

// -----------------------------------------------------------------------------------------
// startBanner: Activa un banner.
//				name	 = ID del <div> donde esta el banner.
//				x1, y1	 = Posicion inicial del banner.
//				x2, y2,  = Posicion final del banner.
//				steps	 = Ciclos que tarda en llegar de x1,y1 a x2,y2.
//				minWidth = Ancho minimo del browser para mantener visible el banner. 
// -----------------------------------------------------------------------------------------

function startBanner( name, x1, y1, x2, y2, steps, standbyCycles, minWidth )
{
	banner				= document.getElementById( name ).style;
	bannerState			= STATE_MOVE_IN;
	bannerTotalCycles	= steps;
	bannerCycle			= 0;
	bannerMinWidth		= minWidth;
	bannerStandbyCycles	= standbyCycles;
	bannerX1			= x1;
	bannerY1			= y1;
	bannerX2			= x2;
	bannerY2			= y2;
	banner.left			= x1;
	banner.top			= y1;
	banner.visibility	= "visible";

	// Activa el posicionador de banners.

	setInterval( 'updateBanner('+name+','+x1+','+y1+','+x2+','+y2+')', UPDATE_INTERVAL );
}

// -----------------------------------------------------------------------------------------
// resizeBanner: Ajusta el tamaņo de un banner al tamaņo del browser.
// -----------------------------------------------------------------------------------------

function resizeBanner( bannerName, origWidth, origHeight )
{
	if( browser != 'MSIE52' )
	{
		var bannerElem	= document.getElementById( bannerName );
		var width		= bannerElem.width;
		var height		= bannerElem.height;

		getDimensions();

		if( browserHeight != height )
		{
			width				= browserHeight * origWidth / origHeight;
			bannerElem.width	= ( width > 0 )? width : 1;
			bannerElem.height	= browserHeight > 0? browserHeight : 1;
		}
	}
}

// -----------------------------------------------------------------------------------------
// placeBanner: Ubica un banner en las coordenadas proporcionadas.
// -----------------------------------------------------------------------------------------

function placeBanner( bannerName )
{
	getDimensions();

	var bannerElem	= document.getElementById( bannerName );
	var debug;
/*
	debug =         "browser = " + browser;
	debug = debug + " | banner.width = " + bannerElem.width;
	debug = debug + " | banner.left = " + banner.left;
	debug = debug + " | browserWidth = " + browserWidth;
	window.status = debug;
*/

	banner.left = browserWidth - parseInt( bannerElem.width );
	banner.top	= 0;
	banner.visibility = 'visible';

	bannerX1	= parseInt( banner.left );
	bannerY1	= parseInt( banner.top ) - parseInt( bannerElem.height );
	bannerX2	= parseInt( banner.left );
	bannerY2	= parseInt( banner.top );
}

// -----------------------------------------------------------------------------------------
// setBannerState: Actualiza el estado del banner.
// -----------------------------------------------------------------------------------------

function setBannerState( newState )
{
	bannerState = newState;

	if( browser == 'MSIE52' )
	{
		banner = document.getElementById('banner').style;
		banner.top = -5000;
		banner.left = -5000;
		banner.visibility = 'hidden';
	}
}

// -----------------------------------------------------------------------------------------
// updateBanner: Actualiza la posicion de un banner.
// -----------------------------------------------------------------------------------------

function updateBanner( bannerName, x1, y1, x2, y2, standbyCycles )
{
	var k = 1.570796325;

	// Calcular la posicion del layer basada en el ciclo actual.

	if( bannerState != STATE_STANDBY && bannerState != STATE_DEAD && browser != 'MSIE52' )
	{
		banner.left = bannerX1 + Math.sin(k*(1/bannerTotalCycles*bannerCycle)) * (bannerX2-bannerX1);
		banner.top	= bannerY1 + Math.sin(k*(1/bannerTotalCycles*bannerCycle)) * (bannerY2-bannerY1);
	}

	// Ejecuto el estado actual del banner.

	switch( bannerState )
	{
		case STATE_MOVE_IN:

			// Pasar al proximo ciclo.

			bannerCycle++;
			if ( bannerCycle >= bannerTotalCycles ) 
			{
				// Si cumpli la cantidad de ciclos, pasar a estado STANDBY.

				bannerState = STATE_STANDBY;
				bannerCycle	= 0;
			}
			break;

		case STATE_STANDBY:

			// Averiguo las dimensiones del browser.

			getDimensions();
			if( browserWidth < bannerMinWidth )
			{
				// Paso al proximo ciclo.

				bannerCycle++;

				// Si el ancho esta por debajo del minimo aceptable, espero y lo saco.

				if( bannerCycle >= bannerStandbyCycles )
				{
					// Paso al estado MOVE_OUT.

					bannerCycle = bannerTotalCycles;
					bannerState = STATE_MOVE_OUT;
				}
			}			
			break;

		case STATE_MOVE_OUT:

			// Paso al proximo ciclo.

			bannerCycle--;
			if ( bannerCycle <= 0 ) 
			{ 
				// Si cumpli, matar el banner.

				bannerState			= STATE_DEAD; 
				banner.left			= -5000;
				banner.top			= -5000;
				banner.visibility	= "hidden";
			}
			break;
	}
}

// -----------------------------------------------------------------------------------------
// init: Punto de entrada a la biblioteca de layers.
// -----------------------------------------------------------------------------------------

function initLayers()
{
	if( !browser )
	{
		getBrowserSpecifics();
	}

	getDimensions();
}

// -----------------------------------------------------------------------------------------
// onResizeBanner:
// -----------------------------------------------------------------------------------------

function onResizeBanner( bannerID )
{
	resizeBanner( bannerID, 120, 600 ); 
	placeBanner( bannerID );
}

// -----------------------------------------------------------------------------------------
// loadPage: Esta funcion se debe ejecutar desde <body onload=""> e inicializa la pagina.
// -----------------------------------------------------------------------------------------

function loadPage( popupState, offset )
{	
	initLayers();

	// Activo un banner:	name, x1, y1, x2, y2, ciclos para movimiento, 
	//						ciclos de espera visible, ancho minimo del browser.

//	startBanner( 'banner', browserWidth-120, -800, browserWidth-120, 0, 50, 1000, 965 );

	if( browser != 'MSIE52' )
	{
		startBanner( 'banner', browserWidth-120, -800, browserWidth-120, 0, 50, 1000, 965 );
	}
	else
	{
		banner = document.getElementById( 'banner' ).style;
		banner.left = 0;
		banner.top = 0;
		banner.visibility = "visible";
	}

	onResizeBanner( 'bannerFlash' );
	
	// Calculo la posicion del PopUp, y opcionalmente lo muestro.

	var popupX;
	var popupY;
	popupX = 0; // screen.width - 395;
	popupY = screen.height - 480;
	if( !popupState )
	{
		window.open( 'popUp.asp', 'new', 'left='+popupX+',top='+popupY+',width=385,height=400,fullscreen=no,toolbar=no,status=no,resizable=no,copyhistory=yes,scrollbars=no' );
		window.parent.focus();
	}
}