//           _                                  _ _                 
//__   _____| |_ _   _ _ __   _____      ___ __(_) |_ ___ _ __      
//\ \ / / __| __| | | | '_ \ / _ \ \ /\ / / '__| | __| _ \ '__|     
// \ V / (__| |_| |_| | |_) |  __/\ V  V /| |  | | |_  __/ |        
//  \_/ \___|\__|\__, | .__/ \___| \_/\_/ |_|  |_|\__|___|_| 
//               |___/|_|v0.99 for mozilla firefox/iexplorer
// por alberto viñuela / voet cranf - enero 2010
// librería de uso público siempre que se mencione la autoría
// última versión disponible en http://glob.cranf.net
// 
//***********************************
//PARAMETRIZACIÓN

//probabilidades €[0,1] de que una letra salte o sea más tenue
vcJumpProb=0.005;
vcAlfaProb=0.2;

//letras tenues: el valor Min es el mínimo de opacidad que ha de tener la letra, y Ran
//el rango de aclarado respecto al anterior
//la suma de ambos no debe superar 99.
vcAlfaMin=70;
vcAlfaRan=29;

//salto máximo en píxeles
vcJumpMax=1;

//UTILIZACIÓN
//se debe llamar a la función vcTypewriter(tagName_mayúsculas,name) una vez cargada
//la página. firefox sólo considera el atributo name de la etiqueta que contiene el
//texto. en explorer, debido a un bug con getElementsByName se hace necesario 
//especificar además el tag.

//***********************************
function vcTypewriterTextNode(vctexto)
{
vctextonuevo='';
for(j=0;j<vctexto.length;j++)
	{
	//si la probabilidad de hacerse gris se cumple
	if(Math.random()<vcAlfaProb)
		{
		vcalpha=vcAlfaMin+Math.floor(Math.random()*vcAlfaRan);
		vcalphadec=vcalpha/100;
		if(document.all) //mierda del explorer
			{vcestiloalfa='filter:alpha(opacity='+vcalpha+');width:1px';}
		else //elegante firefox
			{vcestiloalfa='opacity:'+vcalphadec;}
		}
	else
		{vcestiloalfa='';}

	//si la probabilidad de salto se cumple
	if(Math.random()<vcJumpProb)
		{
		vcheight=-Math.ceil(Math.random()*vcJumpMax);
		vcestilojump=';position:relative;top:'+vcheight+"px";
		}
	else
		{vcestilojump='';}

	//si cualquiera de los dos eventos se han producido o se trata de un espacio
	if(vcestiloalfa+vcestilojump=='' || vctexto.substring(j,j+1)==' ')
		{vctextonuevo+=vctexto.substring(j,j+1);}
	else
		{vctextonuevo+='<font style="'+vcestiloalfa+vcestilojump+'">'
						+vctexto.substring(j,j+1)+'</font>';}
	}
return vctextonuevo;
}

//***********************************
function vcTypewriterTraverse(vcnode)
{
  if (vcnode.nodeType == 3) //si es un nodo tipo texto
	{
	vcnewnodo=document.createElement('FONT');
	vcnewnodo.innerHTML=vcTypewriterTextNode(vcnode.nodeValue);
	vcnode.parentNode.replaceChild(vcnewnodo,vcnode);
	}
  else //recursivo, para respetar otros elementos que pueda haber en el texto
  if (vcnode.childNodes != null) {
    for (var i=0; i < vcnode.childNodes.length; i++) {
      vcTypewriterTraverse(vcnode.childNodes.item(i));
    }
  } 
}

//***********************************
function vcTypewriter(argtag,argname)
{
if(document.all) //nasty IE bug
	{
	vcelementos=document.getElementsByTagName(argtag);
	for(i=0;i<vcelementos.length;i++)
		if(vcelementos[i].name==argname) vcTypewriterTraverse(vcelementos[i]);
	}
else //wonderful firefox
	{
	vcelementos=document.getElementsByTagName(argtag);
	for(i=0;i<vcelementos.length;i++) vcTypewriterTraverse(vcelementos[i]);
	}
}
