function croll(){
this.msgs={};
this.msgs["testo"]=new Array;
this.msgs["usr"]=new Array;
this.msgs["id"]=new Array;
this.msgs["nick"]=new Array;
this.msgs["image"]=new Array;

this.msgs_new={};
this.msgs_deleted={};
this.msgs_new["testo"]=new Array;
this.msgs_new["usr"]=new Array;
this.msgs_new["id"]=new Array;
this.msgs_new["nick"]=new Array;
this.msgs_new["image"]=new Array;

this.train=new Array();
this.container = '';
this.scroolSpeed=1;//1 veloce ..... 10 lento
this.refreshTime=this.scroolSpeed;
this.contenitore='';
this.starting_y='0';
this.starting_x='';

this.trainActive='A';
this.trainNotActive='B';

this.forcePubbl=0;	// se � a 1 VOgliamo la pubblicita quando ci sono N msg con N < this.SoglRipPublct,  se � 0 NIENTE PUBBLICITA
this.SoglRipPublct=20;		//soglia per aggiunta vagone pubblicita nel caso che  this.forcePubbl=1

this.SoglRipOldVagon=1000000000; //soglia per ripetizione vagoni che hanno esaurito i ticket : se la soglia � 5 e i vagoni con ticket valido sono 3 circoleranno oltre i 3 vagoni con ticket validi anche 2 vagoni con ticket esauriti (presi a partire dalla testa)
this.Ydispl = 0;
this.go=1;

this.vagonLength=0; //lunghezza da mettere a disposizione per ogni vagone, diverra fondamentale per impostare la width del treno. viene definito dopo nel codice
this.vagonWidth=600;//ampiezza del vagone
this.vagonLeftMargin=40;//margine a sinistra di ogni vagone
this.vagonLength=this.vagonWidth+this.vagonLeftMargin;

this.vagonPubbLength=this.vagonLength;
//this.vagonStyleAttr="";
this.crollCommander="ticket";	//	determina il meccanismo su cui basare gli elementi da mandare nel croll
						//		"server"	sara l'output del server a essere mandato nel croll
						//		"ticket"	il mandare un elemento nel croll dipender� dal numero di ticket
if (this.crollCommander=="server") this.Xdisp=10;
else this.Xdisp=0;

//this.pubbVagonHtml='<img src="../application/views/img/space.gif" /><div align="left" style="overflow:hidden;">PUBBLICA IL TUO SMS, CLICCA QUI PER SAPERE COME!</div>';
this.pubbVagonHtml='<img src="../application/views/img/space.gif" />';

	this.buildStartTrain=function(tex){
		var h='';
		
		var el=document.getElementById(this.container);
		this.train['A']=document.createElement('div');
		this.train['A'].setAttribute('name','trainA');
		_croll.posizionaTrain(el);
		
		var ans=JSON.parse(tex);
		if (ans.status == 200) {
			this.msgs=ans.msgs;
			if (this.msgs) {
				for (var i=0;i<this.msgs.length;i++){
					h+=this.buildVagonFromMsgsSingle(this.msgs[i]);
				}
				if (this.msgs.length < _croll.SoglRipPublct){
					h+=_croll.addPubblVagon(1);
					_croll.vagonPubbLength=_croll.vagonLength;
				}
				else _croll.vagonPubbLength=0;
			}	
			
			//var trainWidth=_croll.vagonLength * _croll.msgs.length + 30 + _croll.vagonPubbLength;
			var trainWidth=150000;
			this.train['A'].style.overflow = "hidden";
			this.train['A'].style.width=trainWidth+"px";
			this.train['A'].style.top="35px";	
			this.train['A'].style.height="150px";
			this.contenitore.appendChild(this.train['A']);
			this.train['A'].innerHTML=h;
			//var el=document.getElementById('news-ticker');
			
		}
		else {
			//nel caso ci fosse qualche problema allora rimando lo stesso treno//in questo caso non mander� nulla visto che siamo all'inizio e quindi non c'� alcun treno
		}
		setInterval("_croll.moveCurrentTrain()",_croll.refreshTime);
		
		//$('div img[@real="1"]').livequery(function(){
		//	$(this).unbind('click').click(function(){
		//		var usr=$(this).attr('usr');
		//		_croll.clickthumb(usr);
		//});});
		//$('div[@pubbl="1"]').livequery(function(){
		//	$(this).unbind('click').click(function(){
		//		$('#layer8_content').empty().append('<img src="../application/views/img/croll_big.jpg" />');
		//		$("#layer8").show(); 
		//});});
	}
	this.buildVagonFromMsgsSingle=function(msg){
		var h='';
			//_croll.vagonStyleAttr='width:'+_croll.vagonWidth+'px;font-size:9px;float:left;margin-left:'+_croll.vagonLeftMargin+'px;';
		//h+='<div name="contenitore_sms" id="contenitore_sms" ids="'+msg.id+'" tick="2" style="'+'width:'+_croll.vagonWidth+'px;font-size:9px;float:left;margin-left:'+_croll.vagonLeftMargin+'px;">';
		//h+='<img real=1 usr="'+msg.usr+'" src="'+msg.image+'"  width="36" height="38"  hspace="2" border="1" align="left" vspace="2"  class="border"/>'
		//h+='<span class="rosso"><strong>'+msg.nick+'</strong></span><div align="left" style="overflow:hidden;">'+decodeURI(msg.testo)+'</div></div>';

		var mm = decodeURI(msg.testo);
		var ll=mm.length;		
		var dim_vag = parseInt(ll)*50;	
		
		
		dim_vag=get_vagon_len(mm);
		
		//h+='<div name="contenitore_sms" id="contenitore_sms" ids="'+msg.id+'" tick="2" style="'+'width:'+_croll.vagonWidth+'px;font-size:40px;float:left;border:1px solid white;height:60px;margin-left:'+_croll.vagonLeftMargin+'px;">';
		h+='<div name="contenitore_sms" id="contenitore_sms" ids="'+msg.id+'" tick="2" style="'+'width:'+dim_vag+'px;font-size:80px;float:left;margin-left:'+_croll.vagonLeftMargin+'px;">';
		//h+='<img real=1 usr="'+msg.usr+'" src="'+msg.image+'"  width="36" height="38"  hspace="2" border="1" align="left" vspace="2"  class="border"/>'
		//h+='<span class="rosso"><strong>'+msg.nick+'</strong></span><div align="left" style="overflow:hidden;">'+decodeURI(msg.testo)+'</div></div>';
//		h+='<div align="left" style="overflow:hidden;margin-top:20px;">'+decodeURI(msg.testo)+'</div></div>';
		/* enrico test */
		h+='<div align="left" style="margin-top:15px;height:150px;">'+decodeURI(msg.testo)+' &hearts;</div></div>';
		
		//h+='<div align="left" style="margin-top:5px;">LIVE&nbsp;Cicciopasticcio!! &hearts;</div></div>';
		return h;	
	}
	
	

	this.clickthumb=function(usr){
		if (usr>0)
		external_chi_sei(usr);
		else if (usr == 0) _notifica.useraniminfo();
	}

	this.moveCurrentTrain=function(){
		//	calcolo nuova posizione treno 
		//		ma la applicher� al treno solo dopo aver verificato che si veda tutto 
		//		altrimenti devo creare e posizionare il treno B in modo da farlo comparire da sotto
		//codatreno=posizione treno + (altezza singolo vagone) * (numero vagoni)
		if ((this.trainActive == 'A') || (this.trainActive == 'B')) {
			//this.contenitore.childNodes[0].style.top=(this.contenitore.childNodes[0].offsetTop-1)+"px";
			this.contenitore.childNodes[0].style.left=(this.contenitore.childNodes[0].offsetLeft-1)+"px";
			//var codatreno=this.contenitore.childNodes[0].offsetHeight+this.contenitore.childNodes[0].offsetTop;
			var codatreno=this.contenitore.childNodes[0].offsetWidth+this.contenitore.childNodes[0].offsetLeft+1;
			if (codatreno < (this.contenitore.clientWidth + this.Ydispl + this.Xdisp) && this.go) {
				//devo attivare anche l'altro treno andando ad aggiungere nel nuovo treno i nuovi msg
				
				//this.buildTrain(this.trainNotActive);
					var container='o';
					updtElem('/messages/readcrollsms',_croll,'buildTrain',container);
				this.go=0;
			}
		}	
		if (this.trainActive == 'AB'){
//			this.contenitore.childNodes[0].style.top=(this.contenitore.childNodes[0].offsetTop-1)+"px";
//			this.contenitore.childNodes[1].style.top=(this.contenitore.childNodes[1].offsetTop-1)+"px";
			this.contenitore.childNodes[0].style.left=(this.contenitore.childNodes[0].offsetLeft-1)+"px";
			this.contenitore.childNodes[1].style.left=(this.contenitore.childNodes[1].offsetLeft-1)+"px";
			
			//var codatreno=this.contenitore.childNodes[0].offsetHeight+this.contenitore.childNodes[0].offsetTop;
			var codaprimotreno=this.contenitore.childNodes[0].offsetWidth+this.contenitore.childNodes[0].offsetLeft+1;
			if (codaprimotreno < -10) {//	il treno piu vecchio non � pi� visualizzato,allora lo elimino
					this.go=1;
					this.contenitore.removeChild(this.contenitore.firstChild);
					this.trainNotActive='A';//A AB A A A A....ma nn � un problema
					this.trainActive='B';
			}
		}	
	}


	this.buildTrain=function(tex,o){
		
		/*	qui devo distinguere tra nuovi msg e quelli gia esistenti
		this.msgs		sono i msg gia esistenti
		this.msgs_new	sono i nuovi msg da caricare nel nuovo treno che si sta costruendo
		
		quando creo il treno devo :
			1) mettere in testa i nuovi msg ciascuno con ticket = 2 (numero di volte che il vagone verr� visualizzato)
			2) aggiungere tutti i vagoni del treno gia esistente che hanno almeno 1 biglietto o fino al riempimento della decima carrozza
		*/
		var trainLetter=this.trainNotActive;
		var h='';
		var ans=JSON.parse(tex);
		if (ans.status == 200) {
			if (_croll.crollCommander == "ticket")	_croll.verifynewmsg(ans.msgs); //questa funzione mette in _croll.msgs_new i nuovi msg
			else this.msgs_new = ans.msgs;
			if (this.msgs_new){
				if (this.msgs_new.length > 0) {
					for (var i=0;i<this.msgs_new.length;i++){
						//this.vagons[i]='<div name=vagone tick=2 vag_id='+i+'>Vagone Nuovo msg'+i+'</div>';
						h+=this.buildVagonFromMsgsSingle(this.msgs_new[i]);
					}
				}
			}
		}
		
		//else alert ('nessun nuovo messaggio quando creo il nuovo treno');
		this.train[trainLetter]=document.createElement('div');
		this.train[trainLetter].setAttribute('name','train'+trainLetter);
		this.train[trainLetter].style.border="solid 0px #000000";
		
		this.train[trainLetter].innerHTML=h;
		this.train[trainLetter].style.width=1000+"px";
		if (_croll.crollCommander == "ticket") {
			for (var i=0;i<this.contenitore.childNodes[0].childNodes.length;i++){
				//alert(i);
				var ids=this.contenitore.childNodes[0].childNodes[i].attributes['ids'].value;
				var tick=this.contenitore.childNodes[0].childNodes[i].attributes['tick'].value;
				var delsms=1;
				if (tick > 1) {
					delsms=0;
					var node=document.createElement("div");
					node.innerHTML=this.contenitore.childNodes[0].childNodes[i].innerHTML;
					if (tick-1>=0) {
					node.setAttribute('tick',tick-1);
					} else {
						node.setAttribute('tick',1);
					}
						var attr=this.contenitore.childNodes[0].childNodes[i].getAttribute("style");
						if (typeof attr == 'object') attr=attr.cssText;
						node.style.cssText=attr;
					node.setAttribute('id',this.contenitore.childNodes[0].childNodes[i].getAttribute("id"));
					node.setAttribute('ids',this.contenitore.childNodes[0].childNodes[i].getAttribute("ids"));
					node.childNodes[0].setAttribute('real',this.contenitore.childNodes[0].childNodes[i].childNodes[0].getAttribute("real"));
					node.childNodes[0].setAttribute('usr',this.contenitore.childNodes[0].childNodes[i].childNodes[0].getAttribute("usr"));
					this.train[trainLetter].appendChild(node);
				}
				else if (this.train[trainLetter].childNodes.length < _croll.SoglRipOldVagon) {
					if (tick != 0){
						delsms=0;
						var node=document.createElement("div");
						node.innerHTML=this.contenitore.childNodes[0].childNodes[i].innerHTML;
						node.setAttribute('tick','1');
							var attr=this.contenitore.childNodes[0].childNodes[i].getAttribute("style");
							if (typeof attr == 'object') attr=attr.cssText;
							node.style.cssText=attr;
						node.setAttribute('id',this.contenitore.childNodes[0].childNodes[i].getAttribute("id"));
						node.setAttribute('ids',this.contenitore.childNodes[0].childNodes[i].getAttribute("ids"));
						node.setAttribute('real',this.contenitore.childNodes[0].childNodes[i].getAttribute("real"));
						node.setAttribute('usr',this.contenitore.childNodes[0].childNodes[i].getAttribute("usr"));
						this.train[trainLetter].appendChild(node);
					}
				}
				if ((ids>0) && (delsms==1)) {
					for (r=0;r<_croll.msgs.length;r++){
						if (_croll.msgs[r].id == ids) {
							_croll.msgs_deleted[ids]=1;
							_croll.msgs.splice(r,1);
						}
					}
				}
			}
			_croll.msgs=_croll.msgs.concat(_croll.msgs_new);	//qui devo sommare _croll.msgs_new a _croll.msgs
			if (_croll.forcePubbl && (_croll.msgs.length < _croll.SoglRipPublct)) {
				_croll.addPubblVagon(0,trainLetter);
				_croll.vagonPubbLength=_croll.vagonLength;
			}
			else _croll.vagonPubbLength=0;
		}
		else {	//(_croll.crollCommander == "server")
			_croll.msgs=_croll.msgs_new;
			if (_croll.forcePubbl && (_croll.msgs.length < _croll.SoglRipPublct)) {
				_croll.addPubblVagon(0,trainLetter);
				_croll.vagonPubbLength=_croll.vagonLength;
			}
		}
		$('div img[@real="1"]').livequery(function(){
			$(this).unbind('click').click(function(){
				var usr=$(this).attr('usr');
				_croll.clickthumb(usr);
		});});
		$('div[@pubbl="1"]').livequery(function(){
			$(this).unbind('click').click(function(){
				$('#layer8_content').empty().append('<img src="../application/views/img/croll_big.jpg" />');
				$("#layer8").show(); 
		});});
		
		this.train[trainLetter].style.position='absolute';
		this.train[trainLetter].style.top=this.starting_y+"px";		
		this.train[trainLetter].style.left=this.starting_x+"px";

		//var trainWidth=_croll.vagonLength *3* _croll.msgs.length + 30 + _croll.vagonPubbLength;
		var trainWidth=150000;
		this.train[trainLetter].style.overflow = "hidden";
		this.train[trainLetter].style.width=trainWidth+"px";
		this.train[trainLetter].style.height="150px";
		this.contenitore.appendChild(this.train[trainLetter]);
		this.trainActive='AB';
	}

	this.addPubblVagon=function(code,trainLetter){
		if (code) {
			var h='<div id="contenitore_sms" pubbl="1" name="vagone" style="'+'width:'+_croll.vagonWidth+'px;font-size:9px;float:left;margin-left:'+_croll.vagonLeftMargin+'px;" tick=0 ids=0 vag_id='+0+'>';
			h+=_croll.pubbVagonHtml;
			h+='</div>';
			return h;
		}
		else {
						var node=document.createElement("div");
						node.innerHTML=_croll.pubbVagonHtml;
						node.setAttribute('tick','0');
							//var attr=this.contenitore.childNodes[0].childNodes[i].getAttribute("style");
							//if (typeof attr == 'object') attr=attr.cssText;
							node.style.cssText='width:'+_croll.vagonWidth+'px;font-size:9px;float:left;margin-left:'+_croll.vagonLeftMargin+'px;';
						//node.setAttribute('id',this.contenitore.childNodes[0].childNodes[i].getAttribute("id"));
						node.setAttribute('ids','-1');
						node.setAttribute('pubbl','1');
						_croll.train[trainLetter].appendChild(node);
		}
	}

//	el	elemento contenitore in cui scorrera il treno
	this.posizionaTrain=function(el){
		this.contenitore=el;
		el.innerHTML='';	//svuoto il contenitore
		//var altezza_contenitore=el.clientHeight;
		var largh_contenitore=el.clientWidth;
		//this.starting_y=altezza_contenitore-10;
		this.starting_x=largh_contenitore-10;
		//this.starting_x=10;
		this.starting_y=75;
		this.train['A'].style.position='absolute';
		this.train['A'].style.top=this.starting_y+"px";
		this.train['A'].style.left=this.starting_x+"px";
		this.train['A'].style.border="solid 0px #000000";

		var trainWidth=_croll.vagonLength *3* _croll.msgs.length +30 + _croll.vagonPubbLength;
		//alert (_croll.vagonPubbLength);
		
		//this.train['A'].style.width=trainWidth+"px";
		this.train['A'].style.width="1000px";
		this.train['A'].style.height="70px";
		//this.train['A'].style.styleFloat="left";
		
		el.appendChild(this.train['A']);
		el.childNodes[0].style.overflow="hidden";
	}



	//verifica i msgs in ingresso con quelli in _croll.msgs e se ce ne sono alcuni non presenti li mette nell'array _croll.msgs_new
	this.verifynewmsg=function(msgs){
		var neww=new Array;

		var ind=0;
		for (var i=0;i< msgs.length;i++){
			var nonbuono=0;
			for (var ii=0; ii < _croll.msgs.length; ii++){
				if (_croll.msgs[ii].id == msgs[i].id) nonbuono=1;
			}
			if (nonbuono == 0) 	{
				if (_croll.msgs_deleted[msgs[i].id] != 1) {
					neww[ind]={};
					neww[ind]['testo']=msgs[i].testo;
					neww[ind]['usr']=msgs[i].usr;
					neww[ind]['id']=msgs[i].id;
					neww[ind]['nick']=msgs[i].nick;
					neww[ind]['image']=msgs[i].image;
					ind++;
				}
			}	
		}
		_croll.msgs_new=neww;
	}

}




/**
 * Antonijo to build suitable vagons
 * @param a
 * @param obj
 * @return
 */
function contains(a, obj) {
	  var i = a.length;
	  while (i--) {
	    if (a[i] === obj) {
	      return true;
	    }
	  }
	  return false;
	}


Array.prototype.contains = function(obj) {
	  var i = this.length;
	  while (i--) {
	    if (this[i] === obj) {
	      return true;
	    }
	  }
	  return false;
	}



Array.prototype.count = function(obj) {
	  var count=0;
	  var i = this.length;
	  while (i--) {
	    if (this[i] === obj) {
	      count++;
	    }
	  }
	  return count;
	}


function get_vagon_len(text) {
	
	var text_a = text.split("");	
	var len=0;
	
	
	var s_len=30;
	var m_len=40;
	var b_len=50;
	
	var h_len=100;
	
	var s_num = 0;
	s_num += text_a.count("i");
	s_num += text_a.count("l");
	s_num += text_a.count("!");
	s_num += text_a.count(" ");
	
	var m_num=0
	m_num += text_a.count("t");
	
	var tot_len = text.length;    
	len= parseInt(s_num)*s_len + parseInt(m_num)*m_len +(parseInt(tot_len)-parseInt(s_num)-parseInt(m_num))*b_len + h_len;

	
	
	return len;
}



