/******************************
 ÍNDICE DE FUNCIONES DE OBJETOS
 ******************************
 
 js_iniNavegador( ) .................... Inicializa los contenidos de los objetos de todos los navegadores
 js_buscarCapas( doc, nombre ) ......... Busca capas anidadas en NN4
 js_obtenerObjetoPuro( obj ) ........... Convierte un nombre de objeto en una referencia válida
 js_obtenerObjeto( obj ) ............... Convierte un nombre de objeto en una referencia de estilo válida
 js_mover( obj, x, y ) ................. Mueve un objeto a las coordenadas x, y
 js_desplazar( obj, deltaX, deltaY ) ... Desplaza un objeto deltaX y deltaY posiciones
 js_ponerIndiceZ( obj, zOrden ) ........ Pone el orden Z de un objeto (hacial el frente o hacia atrás)
 js_ponerColorFondo( obj, color ) ...... Pone el color de fondo de un objeto
 js_mostrar( obj ) ..................... Hace que el objeto sea visible
 js_ocultar( obj ) ..................... Hace que el objeto sea invisible
 js_obtenerIzquierda( obj ) ............ Obtiene la posición izquierda del objeto
 js_obtenerArriba( obj ) ............... Obtiene la posición de la parte superior del objeto
 js_obtenerTop( obj )
 js_obtenerAncho( obj ) ................ Obtiene el ancho del objeto
 js_obtenerAlto( obj ) ................. Obtiene el alto del objeto
 js_obtenerAnchoInterno( ) ............. Obtiene el ancho interno de la ventana del navegador
 js_obtenerAltoInterno( ) .............. Obtiene el alto interno de la ventana del navegador
 js_escribirObjeto( obj, txt ) ......... Escribe un texto en el objeto

 ******************
 VARIABLES GLOBALES
 ******************/

var isCSS, isW3C, isIE4, isNN4, isIE6CSS;

/***************************
 FUNCIONES DE INICIALIZACIÓN
 ***************************/

// Inicializa al cargar para dejar establecido el contenido de los objetos de todos los navegadores
function js_iniNavegador( ) 
{
    if ( document.images ) 
	{
        isCSS    = ( document.body && document.body.style ) ? true : false;
        isW3C    = ( isCSS && document.getElementById ) ? true : false;
        isIE4    = ( isCSS && document.all ) ? true : false;
        isNN4    = ( document.layers ) ? true : false;
        isIE6CSS = ( document.compatMode && document.compatMode.indexOf("CSS1") >= 0 ) ? true : false;
    }
}

// Establece el manejador de eventos para inicializar la API
window.onload = js_iniNavegador;

/*********************************
 FUNCIONES DE OBTENCIÓN DE OBJETOS
 *********************************/
 
// Busca capas de NN4 anidadas en la cadena name
function js_buscarCapas( doc, nombre )
{
    var objeto;
    for ( var i = 0; i < doc.layers.length; i++ ) 
	{
        if ( doc.layers[i].name == nombre ) 
		{
            objeto = doc.layers[i];
            break;
        }
        // Entra en las capas anidadas si es necesario
        if ( doc.layers[i].document.layers.length > 0 ) 
		{
            objeto = js_buscarCapas( document.layers[i].document, nombre );
        }
    }
    return objeto;
}
   
// Convierte un nombre de objeto o una referecnia de objeto en una referecia de objeto válida
function js_obtenerObjetoPuro( obj )
{
	var objeto;
  if ( typeof obj == "string" ) 
	{
  	if ( isW3C ) 
		{
      objeto = document.getElementById( obj );
    } 
		else if ( isIE4 ) 
		{
    	objeto = document.all( obj );
    } 
		else if ( isNN4 ) 
		{
    	objeto = js_buscarCapas( document, obj );
    }
  } 
	else 
	{
    // Objeto pasado por referencia
    objeto = obj;
  }
  return objeto;
}
   
// Convierte un nombre de objeto o una referencia de objeto en una referencia de estilo (o capa NN4) válida
function js_obtenerObjeto( obj ) 
{
    var objeto = js_obtenerObjetoPuro( obj );
	
    if (objeto && isCSS) 
	{
        objeto = objeto.style;
    }
    return objeto;
}
  
/**********************************
 FUNCIONES DE MOVIMIENTO Y POSICIÓN
 **********************************/
 
// Posiciona un objeto en una coordenada específica 
function js_mover( obj, x, y )
{
    var objeto = js_obtenerObjeto( obj );
    if ( objeto ) 
	{
        if ( isCSS ) 
		{
            // Igualar tipos de valores numéricos incorrectos
            var unidades = ( typeof objeto.left == "string" ) ? "px" : 0;
            objeto.left = x + unidades;
            objeto.top  = y + unidades;
        } 
		else if ( isNN4 ) 
		{
            objeto.moveTo( x, y );
        }
    }
}
   
// Mueve un objeto x o y píxeles
function js_desplazar( obj, deltaX, deltaY )
{
	var objeto = js_obtenerObjeto( obj );
    if ( objeto ) 
	{
        if ( isCSS ) 
		{
            // Igualar tipos de valores numéricos incorrectos
            var unidades = ( typeof objeto.left == "string" ) ? "px" : 0;
            objeto.left = js_obtenerIzquierda( obj ) + deltaX + unidades; 
            objeto.top  = js_obtenerArriba(obj) + deltaY + unidades;
        } 
		else if ( isNN4 ) 
		{
            objeto.moveBy( deltaX, deltaY );
        }
    }
}
   
// Pone la posición Z de un objeto
function js_ponerIndiceZ( obj, zOrden )
{
    var objeto = js_obtenerObjeto( obj );
    if (objeto) 
	{
        objeto.zIndex = zOrden;
    }
}
  
/************************
 FUNCIONES DE VISIBILIDAD
 ************************/
   
// Hace que un objeto sea visible
function js_mostrar( obj ) 
{
    var objeto = js_obtenerObjeto( obj );
    if (objeto) 
	{
        objeto.visibility = "visible";
    }
}
   
// Hace que un objeto sea invisible
function js_ocultar( obj ) 
{
    var objeto = js_obtenerObjeto( obj );
    if (objeto) 
	{
        objeto.visibility = "hidden";
    }
}

// Cambiar de visible a invisible y viceversa 
function js_cambiar( obj )
{
	var objeto = js_obtenerObjeto( obj );
	if ( objeto )
	{
		if ( objeto.visibility == "visible" )
			objeto.visibility = "hidden";
		else
			objeto.visibility = "visible";
	}
}

/***********************************
 FUNCIONES DE PROPIEDADES DE OBJETOS
 ***********************************/

// Escribe texto en un objeto
function  js_escribirObjeto( obj, txt )
{
	var objeto = js_obtenerObjetoPuro( obj );
  if ( objeto ) 
	{
  	if ( isNN4 ) 
		{
			objeto.write(txt);
			objeto.close();
    } 
		else if ( isW3C )
		{
      objeto.innerHTML = txt;
    }
    js_mostrar( obj );
  }
}
 
// Pone el color de fondo de un objeto
function js_ponerColorFondo( obj, color )
{
    var objeto = js_obtenerObjeto( obj );
    if ( objeto ) 
	{
        if ( isNN4 ) 
		{
            objeto.bgColor = color;
        } 
		else if ( isCSS ) 
		{
            objeto.backgroundColor = color;
        }
    }
}
    
// Obtiene la coordenada X de un objeto posicionable
function js_obtenerIzquierda( obj )
{
    var elem = js_obtenerObjetoPuro( obj );
    var resultado = 0;
    if ( document.defaultView ) 
	{
        var style = document.defaultView;
        var cssDecl = style.getComputedStyle( elem, "" ); 
        resultado = cssDecl.getPropertyValue( "left" );
    } 
	else if ( elem.currentStyle ) 
	{
        resultado = elem.currentStyle.left;
    } 
	else if ( elem.style ) 
	{
        resultado = elem.style.left;
    } 
	else if ( isNN4 ) 
	{
        resultado = elem.left;
    }
    return parseInt( resultado );
}
   
// Obtiene la coordenada Y de un objeto posicionable
function js_obtenerArriba( obj )
{
    var elem = js_obtenerObjetoPuro( obj );
    var resultado = 0;
    if ( document.defaultView ) 
	{
        var style = document.defaultView;
        var cssDecl = style.getComputedStyle( elem, "" );
        resultado = cssDecl.getPropertyValue( "top" );
    } 
	else if ( elem.currentStyle ) 
	{
        resultado = elem.currentStyle.top;
    } 
	else if ( elem.style ) 
	{
        resultado = elem.style.top;
    } 
	else if ( isNN4 ) 
	{
        resultado = elem.top;
    }
    return parseInt( resultado );
}
  
function js_obtenerTop( obj ) 
{
    var offsetTrail = document.getElementById( obj );
    var offsetTop = 0;
    while (offsetTrail) 
	{
        offsetTop += offsetTrail.offsetTop;
        offsetTrail = offsetTrail.offsetParent;
    }
    if (navigator.userAgent.indexOf("Mac") != -1 && typeof document.body.topMargin != "undefined") 
	{
        offsetTop += document.body.topMargin;
    }
    return offsetTop;
}

// Obtiene el ancho de un elemento
function js_obtenerAncho( obj )
{
    var elem = js_obtenerObjetoPuro( obj );
    var resultado = 0;
    if ( elem.offsetWidth ) 
	{
        resultado = elem.offsetWidth;
    } 
	else if ( elem.clip && elem.clip.width ) 
	{
        resultado = elem.clip.width;
    } 
	else if ( elem.style && elem.style.pixelWidth ) 
	{
        resultado = elem.style.pixelWidth;
    }
    return parseInt( resultado );
}
   
// Obtiene el alto de un elemento
function js_obtenerAlto( obj )
{
    var elem = js_obtenerObjetoPuro( obj );
    var resultado = 0;
    if ( elem.offsetHeight ) 
	{
        resultado = elem.offsetHeight;
    } 
	else if ( elem.clip && elem.clip.height ) 
	{
        resultado = elem.clip.height;
    } 
	else if ( elem.style && elem.style.pixelHeight ) 
	{
        resultado = elem.style.pixelHeight;
    }
    return parseInt( resultado );
}
   
// Devuelve el ancho disponible en el contenido de la ventana del navegador
function js_obtenerAnchoInterno( )
{
    if ( window.innerWidth ) 
	{
        return window.innerWidth;
    } 
	else if ( isIE6CSS ) 
	{
		// Mide el clientWidth del elemento html
        return document.body.parentElement.clientWidth;
    } 
	else if ( document.body && document.body.clientWidth ) 
	{
        return document.body.clientWidth;
    }
    return 0;
}
   
// Devuelve el alto disponible en el contenido de la ventana del navegador
function js_obtenerAltoInterno( )
{
    if ( window.innerHeight ) 
	{
        return window.innerHeight;
    } 
	else if ( isIE6CSS ) 
	{
        // Mide el clientHeight del elemento html
        return document.body.parentElement.clientHeight;
    } 
	else if ( document.body && document.body.clientHeight ) 
	{
        return document.body.clientHeight;
    }
    return 0;
}

