/**
 *
 *	PRE: Definir l'obgecte "es" de scripts/check_browser.js
 *
 */
function CTransicioStrings(nomInstancia, container)
{
	// Nom de la instància de la classe. Necessari per poder utilitzar la funció setTimeout()
	this.nomInstancia = nomInstancia;

	// Temps que passarà des de que la notícia està completament visible fins que es passa a la següent noticia
	// Si val 0 no canviarà mai
	this.tempsVisible = 0;	// segons

	// Temps màxim que durarà la transició. Transcorregut aquest temps es mostrarà la notícia
	this.tempsMaxTransicio = 3;
	
	// Nombre de canvis que sufrirà cada lletra fins que s'hi posi la correcta
	this.nombreCanvis = 5;
	
	// Array amb tots els strings entre els que es farà les transicions
	// La funció setString()  omple aques array
	this.noticies = Array();
	
	// # de la primera noticia que es mostrara
	this.numNot =  parseInt(Math.random()*this.noticies.length);
	
	// Capa o qualsevol objecte amb x.innerHTML on s'escriura tot
	this.containerNoticies = container;
	
	// Lletres entre les que s'anirà canviant
	//var this.ab=new String("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");
	this.ab=new String("abcdefghijklmnopqrstuvwxyz");
	

	this.strCapa = "";
	
	this.noticiaVisible = true;
	
	this.contadorTriggers = 0;
}

CTransicioStrings.prototype.play = function ()
{
	try{
		document.getElementById(this.containerNoticies).innerHTML = "";
	}
	catch(e){
		return;
	}
	
	this.canviaNoticies();
}



/**
 *	@param str (Array) Array d'strings amb una casella com a minim
 */
CTransicioStrings.prototype.setString = function (str)
{
	//desfem la codificacio html
	for (var i=0; i<str.length; i++){
		str[i] = html_unescape(str[i]);
	}
	
	this.noticies = str;
}

CTransicioStrings.prototype.passaTextALinies = function (txt){
	var str = new String(txt);
	this.strCapa = new String("");
	
	for (i=0; i<str.length; i++){
		if (str.charAt(i) == ' '){
			this.strCapa += ' ';
		}
		else{
			this.strCapa += '-';
		}
	}
	document.getElementById(this.containerNoticies).innerHTML = this.strCapa;
}


//LLença els triggers que efectuarant la trancisió.
//Cada trigger s'executaran passats x segons
CTransicioStrings.prototype.escriuTextTransicio = function (txt)
{
	var str = new String(txt);
	for (i=0; i<str.length; i++)
	{
		ran = Math.random()*30;
		this.contadorTriggers++;
		setTimeout(this.nomInstancia+'.transicio('+i+', -1, "'+txt+'")', ran*40);
	}
}

CTransicioStrings.prototype.transicio = function (lletra, cont, str)
{
	cont++;
	this.strCapa = this.canviaLletra(str, lletra, cont);
	document.getElementById(this.containerNoticies).innerHTML = this.strCapa;
	
	if (cont < this.nombreCanvis && !this.noticiaVisible){
		setTimeout(this.nomInstancia+'.transicio(	'+lletra+', '+cont+', "'+str+'");', 100);
	}
	else{
		this.contadorTriggers--;
		if (this.contadorTriggers == 0)
		{
			// La notícia ja està completament visible
			this.noticiaVisible = true;
			if (this.tempsVisible > 0)
				setTimeout(this.nomInstancia+".canviaNoticies()", this.tempsVisible*1000);
		}
	}
}

//Canvia una lletra per una altra
CTransicioStrings.prototype.canviaLletra = function (str, n, cont)
{
	if (cont == this.nombreCanvis || this.noticiaVisible)
	{
		c = str.charAt(n);
	}
	else
	{
		ran = Math.random()*this.ab.length;
		c = this.ab.charAt(ran);
	}
	
	if (this.strCapa.charAt(n) != ' ')
	{
		t = this.strCapa.substring(0,n);
		t+=c;
		t += this.strCapa.substring(n+1,this.strCapa.length);
		return t;
	}
	else
	{
		return this.strCapa;
	}	
}

CTransicioStrings.prototype.canviaNoticies = function ()
{
	this.noticiaVisible = false;
	//alert(unescape(this.noticies[this.numNot]));
	this.passaTextALinies(unescape(this.noticies[this.numNot]));
	document.getElementById(this.containerNoticies).innerHTML = this.strCapa;
	setTimeout(this.nomInstancia+".escriuTextTransicio('"+unescape(this.noticies[this.numNot])+"')", 300);		
	setTimeout("this.noticiaVisible = true;",this.tempsMaxTransicio*1000);

	// Abans no feiem la transició al safari, però ara si que va
	//
	// // Per SAFARI no fem la transició del text
	//document.getElementById(this.containerNoticies).innerHTML = unescape(this.noticies[this.numNot]);
	//if (this.tempsVisible > 0)
	//	setTimeout(this.nomInstancia+".canviaNoticies()", (this.tempsVisible+this.tempsMaxTransicio)*1000);
	
	this.numNot++;
	if (this.numNot >= this.noticies.length){
		this.numNot = 0;
	}
}


// Definim la funció html_unescape(str) si no existeix
if (typeof html_unescape == "undefined")
{
	/*
	 * Desescapa els simbols HTML
	 */
	function html_unescape(str)
	{
		if (str.indexOf('&') == -1) return str;
		
		var html_enc = new Array('&amp;','&nbsp;','&lt;','&gt;','&quot;','&#039;','&euro;','&Agrave;','&Aacute;','&Acirc;','&Atilde;','&Auml;','&Aring;','&AElig;','&Ccedil;','&Egrave;','&Eacute;','&Ecirc;','&Euml;','&Igrave;','&Iacute;','&Icirc;','&Iuml;','&ETH;','&Ntilde;','&Ograve;','&Oacute;','&Ocirc;','&Otilde;','&Ouml;','&Oslash;','&Ugrave;','&Uacute;','&Ucirc;','&Uuml;','&Yacute;','&THORN;','&szlig;','&agrave;','&aacute;','&acirc;','&atilde;','&auml;','&aring;','&aelig;','&ccedil;','&egrave;','&eacute;','&ecirc;','&euml;','&igrave;','&iacute;','&icirc;','&iuml;','&eth;','&ntilde;','&ograve;','&oacute;','&ocirc;','&otilde;','&ouml;','&oslash;','&ugrave;','&uacute;','&ucirc;','&uuml;','&yacute;','&thorn;','&yuml;', '&lsquo;', '&rsquo;','&ldquo;', '&rdquo;','&mdash;','&ndash;','&lsaquo;','&rsaquo;','&trade;','&frac12;','&tilde;','&frac14;','&frac34;');
		var html_dec = new Array('&',' ','<','>','"','\\\'','€','À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','þ','ÿ','‘','’','“','”','--','--','‹','›','™','½','˜','¼','¾');
	
		var n = html_dec.length;
		for (i=0; i<n; i++)
		{
			eval("str = str.replace(/"+html_enc[i]+"/g , '"+html_dec[i]+"');");	
		}
		return str;
	}
}