/*
    Proyecto: HTMLObject 1.0 Script cliente
    Autor: David Ortiz
    Fecha: 06/11/2006
    
    Código JavaScript original "JS Embedded Content 1.1 Beta 3" modificado para indicar 
    la lista de objetos que queremos activar al cargarse la página.
    En la versión anterior se activaban todos los objetos.
*/
var HTMLObj_arrObjects = new Array();
var HTMLObj_isMSIE = (document.all && !window.opera);	

/*
    Reinserta en el documento HTML los elementos que han sido incrustados mediante
    las etiquetas OBJECT, EMBED y/o APPLET, redefiniendo su propiedad outerHTML
 */
function HTMLObj_reinsertContent()
{	
    var totalNodes = new Array(3);
	totalNodes['OBJECT'] = document.getElementsByTagName('OBJECT').length;
	totalNodes['EMBED'] = document.getElementsByTagName('EMBED').length;
	totalNodes['APPLET'] = document.getElementsByTagName('APPLET').length;
	for(var tagName in totalNodes)
	{
		var counter = totalNodes[tagName] - 1;
		for(var node; node = document.getElementsByTagName(tagName)[counter]; counter--)
		{
			sourceCode = HTMLObj_getSourceCode(node);			
			if(sourceCode)
			{
				node.outerHTML = sourceCode;
			}
		}
	}
	isMSIE = null;
};
	
/*
    Reinserta solo los objetos cuyo ID se encuentra en la matriz indicada.
*/
function HTMLObj_reinsertObjects(objects)
{		
    var object = null;    
	for(var a = 0;a < objects.length; a++)
	{   
	    object = document.getElementById(objects[a]);
	    	    
		sourceCode = HTMLObj_getSourceCode(object);
		if(sourceCode)
		{
			object.outerHTML = sourceCode;
		}
	}		
	isMSIE = null;
};

/*
    Obtiene el código HTML completo de un determinado nodo.
    @param	node (object) - El nodo analizado
    @return	sourceCode (string) - El código HTML obtenido
 */
function HTMLObj_getSourceCode(node)
{
	var sourceCode = node.outerHTML;	
	switch(node.nodeName)
	{
		case 'EMBED':
			return sourceCode;
		break;
		case 'OBJECT':
		    return sourceCode;
		case 'APPLET':
			var openTag = sourceCode.substr(0, sourceCode.indexOf('>') + 1).toLowerCase();
			var closeTag = sourceCode.substr(sourceCode.length - 9).toLowerCase();
			if(closeTag != '</object>' && closeTag != '</applet>')
			{
				/* Si el nodo está mal formado (etiquetas de apertura y cierre) se debe 
				anular el script ya que podría devolver un resultado incorrecto */
				return null;
			}
			if(isMSIE)
			{
				/* Para I. Explorer se debe obtener aparte el código HTML de los nodos hijos,
				ya que la propiedad outerHTML en ocasiones devolverá un resultado incompleto */
				var innerCode = HTMLObj_getInnerCode(node);
				sourceCode = openTag + innerCode + closeTag;
			}
			return sourceCode;
		break;
	}
};
	
	
/*
    Obtiene el código HTML de los nodos hijos de un determinado nodo. No se debe utilizar directamente
    la propiedad innerHTML ya que en ciertos casos I. Explorer devolverá un resultado incompleto.
    @param	node (object) - El nodo padre que será analizado
    @return	innerCode (string) - El código HTML obtenido
*/
function HTMLObj_getInnerCode(node)
{
	var innerCode = '';
	var totalChilds = node.childNodes.length - 1;
	for(var counter = totalChilds, child; child = node.childNodes[counter]; counter--)
	{
		innerCode += child.outerHTML;
	}
	return innerCode;
}

/*
    Añade un elemento al array de objetos que queremos activar
*/
function HTMLObj_addObjectID(objID)
{    
    HTMLObj_arrObjects[HTMLObj_arrObjects.length] = objID;	     
};


/*
    Activación de los objetos que están en la lista
*/
function HTMLObj_activateObjects()
{
  
    HTMLObj_reinsertObjects(HTMLObj_arrObjects);
};
onload = HTMLObj_activateObjects;