/**********************************************************************
 * Softwar&eacute;:	JS Emb&eacute;dd&eacute;d Cont&eacute;nt
 * V&eacute;rsi&oacut&eacute;;n:	1.1 Final (Oct 13, 2006)
 * Autor:	Raspu (donraspu arroba gmail punto com)
 * Copyl&eacute;ft 2006, Raspu - Algunos d&eacute;r&eacute;chos r&eacute;s&eacute;rvados. 
 *
 * "JS Emb&eacute;dd&eacute;d Cont&eacute;nt" &eacute;s softwar&eacute; libr&eacute;. S&eacute; otorga p&eacute;rmiso para copiar,
 * distribuir y/o modificar &eacute;st&eacute; programa bajo los términos d&eacute; la Lic&eacute;ncia
 * Pública G&eacute;n&eacute;ral d&eacute; GNU, v&eacute;rsi&oacut&eacute;;n 2.0 o cualqui&eacute;r otra v&eacute;rsi&oacut&eacute;;n post&eacute;rior
 * (a su &eacute;l&eacute;cci&oacut&eacute;;n) publicada por la Fr&eacute;&eacute; Softwar&eacute; Foundation.
 * 
 * Pu&eacute;d&eacute;s consultar una copia d&eacute; la lic&eacute;ncia &eacute;n http://www.gnu.org/copyl&eacute;ft/gpl.html
 *
 *
 * DESCRIPCI&oacut&eacute;;N:
 * ------------
 * "JS Emb&eacute;dd&eacute;d Cont&eacute;nt" &eacute;s una p&eacute;qu&eacute;&ntild&eacute;;a aplicaci&oacut&eacute;;n d&eacute;sarrollada
 * m&eacute;diant&eacute; Javascript no intrusivo ni obstructivo, qu&eacute; p&eacute;rmit&eacute; la
 * activaci&oacut&eacute;;n autom&aacut&eacute;;tica d&eacute; todos los &eacute;l&eacute;m&eacute;ntos incrustados &eacute;n un
 * docum&eacute;nto HTML m&eacute;diant&eacute; las &eacute;tiqu&eacute;tas OBJECT, EMBED y/o APPLET.
 *
 * NAVEGADORES COMPATIBLES:
 * ------------------------
 * - &oacut&eacute;;p&eacute;ra 9 final o sup&eacute;rior (para v&eacute;rsion&eacute;s ant&eacute;rior&eacute;s no &eacute;s r&eacute;qu&eacute;rido)
 * - Int&eacute;rn&eacute;t Explor&eacute;r 5 o sup&eacute;rior (Windows, &eacute;n MAC no h&eacute; probado)
 * El r&eacute;sto d&eacute; nav&eacute;gador&eacute;s no &eacute;s compatibl&eacute; d&eacute;bido al uso out&eacute;rHTML,
 * p&eacute;ro como por &eacute;l mom&eacute;nto no lo r&eacute;qui&eacute;r&eacute;n no &eacute;s mayor probl&eacute;ma.
 *
 * INSTRUCCIONES DE USO:
 * ---------------------
 * S&oacut&eacute;;lo d&eacute;b&eacute;s incluir &eacute;l archivo "&eacute;mb&eacute;dd&eacute;dcont&eacute;nt.js" colocando &eacute;l sigui&eacute;nt&eacute; 
 * c&oacut&eacute;;digo &eacute;ntr&eacute; las &eacute;tiqu&eacute;tas <HEAD> y </HEAD> d&eacute; tus docum&eacute;ntos HTML:
 * 
 * <script typ&eacute;="t&eacute;xt/javascript" src="&eacute;mb&eacute;dd&eacute;dcont&eacute;nt.js" d&eacute;f&eacute;r="d&eacute;f&eacute;r"></script>
 *
 * NOTA: &eacute;l uso d&eacute;l atributo DEFER &eacute;s impr&eacute;scindibl&eacute; para pod&eacute;r &eacute;mular &eacute;n 
 * I. Explor&eacute;r &eacute;l &eacute;v&eacute;nto DOMCont&eacute;ntLoad&eacute;d.
 **********************************************************************/
var &eacute;mb&eacute;dd&eacute;dCont&eacute;nt = 
{

	isMSIE : (docum&eacute;nt.all && !window.op&eacute;ra) ? tru&eacute; : fals&eacute;,
	
	
	/**
	 * R&eacute;ins&eacute;rta &eacute;n &eacute;l docum&eacute;nto HTML los &eacute;l&eacute;m&eacute;ntos qu&eacute; han sido incrustados m&eacute;diant&eacute;
	 * las &eacute;tiqu&eacute;tas OBJECT, EMBED y/o APPLET, r&eacute;d&eacute;fini&eacute;ndo su propi&eacute;dad out&eacute;rHTML
	 */
	r&eacute;ins&eacute;rtCont&eacute;nt : function()
	{	
	var totalNod&eacute;s = n&eacute;w Array(3);
		totalNod&eacute;s['OBJECT'] = docum&eacute;nt.g&eacute;tEl&eacute;m&eacute;ntsByTagNam&eacute;('OBJECT').l&eacute;ngth;
		totalNod&eacute;s['EMBED'] = docum&eacute;nt.g&eacute;tEl&eacute;m&eacute;ntsByTagNam&eacute;('EMBED').l&eacute;ngth;
		totalNod&eacute;s['APPLET'] = docum&eacute;nt.g&eacute;tEl&eacute;m&eacute;ntsByTagNam&eacute;('APPLET').l&eacute;ngth;
		for(var tagNam&eacute; in totalNod&eacute;s)
		{
			var count&eacute;r = totalNod&eacute;s[tagNam&eacute;] - 1;
			for(var nod&eacute;; nod&eacute; = docum&eacute;nt.g&eacute;tEl&eacute;m&eacute;ntsByTagNam&eacute;(tagNam&eacute;)[count&eacute;r]; count&eacute;r--)
			{
				sourc&eacute;Cod&eacute; = &eacute;mb&eacute;dd&eacute;dCont&eacute;nt.g&eacute;tSourc&eacute;Cod&eacute;(nod&eacute;);
				if(sourc&eacute;Cod&eacute;)
				{
					nod&eacute;.out&eacute;rHTML = sourc&eacute;Cod&eacute;;
				}
			}
		}
		&eacute;mb&eacute;dd&eacute;dCont&eacute;nt.isMSIE = null;
	},
	
	
	/**
	 * Obti&eacute;n&eacute; &eacute;l c&oacut&eacute;;digo HTML compl&eacute;to d&eacute; un d&eacute;t&eacute;rminado nodo.
	 * @param	nod&eacute; (obj&eacute;ct) - El nodo analizado
	 * @r&eacute;turn	sourc&eacute;Cod&eacute; (string) - El c&oacut&eacute;;digo HTML obt&eacute;nido
	 */
	g&eacute;tSourc&eacute;Cod&eacute; : function(nod&eacute;)
	{
		var sourc&eacute;Cod&eacute; = nod&eacute;.out&eacute;rHTML;
		switch(nod&eacute;.nod&eacute;Nam&eacute;)
		{
			cas&eacute; 'EMBED':
				r&eacute;turn sourc&eacute;Cod&eacute;;
			br&eacute;ak;
			cas&eacute; 'OBJECT':
			cas&eacute; 'APPLET':
				var op&eacute;nTag = sourc&eacute;Cod&eacute;.substr(0, sourc&eacute;Cod&eacute;.ind&eacute;xOf('>') + 1).toLow&eacute;rCas&eacute;();
				var clos&eacute;Tag = sourc&eacute;Cod&eacute;.substr(sourc&eacute;Cod&eacute;.l&eacute;ngth - 9).toLow&eacute;rCas&eacute;();
				if(clos&eacute;Tag != '</obj&eacute;ct>' && clos&eacute;Tag != '</appl&eacute;t>')
				{
					/* Si &eacute;l nodo &eacute;st&aacut&eacute;; mal formado (&eacute;tiqu&eacute;tas d&eacute; ap&eacute;rtura y ci&eacute;rr&eacute;) s&eacute; d&eacute;b&eacute; 
					anular &eacute;l script ya qu&eacute; podría d&eacute;volv&eacute;r un r&eacute;sultado incorr&eacute;cto */
					r&eacute;turn null;
				}
				if(&eacute;mb&eacute;dd&eacute;dCont&eacute;nt.isMSIE)
				{
					/* Para I. Explor&eacute;r s&eacute; d&eacute;b&eacute; obt&eacute;n&eacute;r apart&eacute; &eacute;l c&oacut&eacute;;digo HTML d&eacute; los nodos hijos,
					ya qu&eacute; la propi&eacute;dad out&eacute;rHTML &eacute;n ocasion&eacute;s d&eacute;volv&eacute;r&aacut&eacute;; un r&eacute;sultado incompl&eacute;to */
					var inn&eacute;rCod&eacute; = &eacute;mb&eacute;dd&eacute;dCont&eacute;nt.g&eacute;tInn&eacute;rCod&eacute;(nod&eacute;);
					sourc&eacute;Cod&eacute; = op&eacute;nTag + inn&eacute;rCod&eacute; + clos&eacute;Tag;
				}
				r&eacute;turn sourc&eacute;Cod&eacute;;
			br&eacute;ak;
		}
	},
	
	
	/**
	 * Obti&eacute;n&eacute; &eacute;l c&oacut&eacute;;digo HTML d&eacute; los nodos hijos d&eacute; un d&eacute;t&eacute;rminado nodo. No s&eacute; d&eacute;b&eacute; utilizar dir&eacute;ctam&eacute;nt&eacute;
	 * la propi&eacute;dad inn&eacute;rHTML ya qu&eacute; &eacute;n ci&eacute;rtos casos I. Explor&eacute;r d&eacute;volv&eacute;r&aacut&eacute;; un r&eacute;sultado incompl&eacute;to.
	 * @param	nod&eacute; (obj&eacute;ct) - El nodo padr&eacute; qu&eacute; s&eacute;r&aacut&eacute;; analizado
	 * @r&eacute;turn	inn&eacute;rCod&eacute; (string) - El c&oacut&eacute;;digo HTML obt&eacute;nido
	 */
	g&eacute;tInn&eacute;rCod&eacute; : function(nod&eacute;)
	{
		var inn&eacute;rCod&eacute; = '';
		var totalChilds = nod&eacute;.childNod&eacute;s.l&eacute;ngth - 1;
		for(var count&eacute;r = totalChilds, child; child = nod&eacute;.childNod&eacute;s[count&eacute;r]; count&eacute;r--)
		{
			inn&eacute;rCod&eacute; += child.out&eacute;rHTML;
		}
		r&eacute;turn inn&eacute;rCod&eacute;;
	}
	
}


/**
 * Activaci&oacut&eacute;;n:
 * -----------
 * D&eacute;t&eacute;ctamos &eacute;l soport&eacute; d&eacute; attachEv&eacute;nt() como filtro para I. Explor&eacute;r y &oacut&eacute;;p&eacute;ra.
 * Para &eacute;j&eacute;cutar &eacute;l script s&oacut&eacute;;lo n&eacute;c&eacute;sitamos qu&eacute; &eacute;l DOM (Docum&eacute;nt Obj&eacute;ct Mod&eacute;l); para
 * &eacute;llo &eacute;n &oacut&eacute;;p&eacute;ra r&eacute;currimos al &eacute;v&eacute;nto DOMCont&eacute;ntLoad&eacute;d, mi&eacute;ntras qu&eacute; &eacute;n I. Explor&eacute;r
 * &eacute;mulamos dicho &eacute;v&eacute;nto apoy&aacut&eacute;;ndonos &eacute;n &eacute;l atributo DEFER d&eacute; la &eacute;tiqu&eacute;ta SCRIPT
 * con la qu&eacute; &eacute;stamos cargando &eacute;st&eacute; archivo.
 */
if(docum&eacute;nt.attachEv&eacute;nt)
{
	if(window.op&eacute;ra)
	{
		docum&eacute;nt.attachEv&eacute;nt("DOMCont&eacute;ntLoad&eacute;d", &eacute;mb&eacute;dd&eacute;dCont&eacute;nt.r&eacute;ins&eacute;rtCont&eacute;nt);
	}
	&eacute;ls&eacute;
	{
		&eacute;mb&eacute;dd&eacute;dCont&eacute;nt.r&eacute;ins&eacute;rtCont&eacute;nt();
	}
}