//Classe per la generazione del lettore delle news (RSS)
var AxNewsTicker = new Class
({
	//Costruttore della classe
	initialize: function(pDivContainer,pProxyURL,pXslFileName)
	{
		//Memorizzo i valori passati in proprietà interne alla classe
		this.divContainer = pDivContainer;
		
		//Inizializzo le proprietà
		this.timePeriodical = 5000;
		this.aniDuration = 1000;
		this.aniFx = Fx.Transitions.Linear;
		this.headerContents = 'RSS News';
		this.footerContents = '(rss news reader)';		
		this.divNTHeader = null;
		this.divNTBody = null;
		this.divNTFooter = null;
		this.divNTMovingNews = null;
				
		//Imposto il contatore che mi serve durante l'esecuzione della funzione ciclica
		var counterNews = { counter: 0 };
		
		//Richiamo il metodo interno per la creazione dei div
		this.LoadElements();
		
		//Creo l'oggetto per la gestione degli Xml delle news
		var objAxXml = new AxXml();
		
		//Imposto la proprietà che contiene l'oggetto Request per effettuare la chiamata HTTP
		this.ajaxRequest = new Request({method: 'get', url: pProxyURL,
			onRequest: function()
			{
				//Creo l'elemento div che ha come sfondo la gif per il caricamento			
				var divLoading = new Element('div', {id: 'divNTLoading'});
								
				//Inserisco il div di loading nel div contenitore delle news
				divLoading.inject(this.divNTBody,'bottom');					
			}.bind(this),
			onSuccess: function(responseText,responseXML) 
			{				
				//Carico il documento Xml	
				objAxXml.LoadXmlDocument(responseXML,pXslFileName,this.divNTBody);
												
				//Recupero il div contenitore delle news
				var divNTMovingNews = $('divNTMovingNews');
				
				//Imposto l'animazione al div che contiene le news				
				aniNewsTicker = new Fx.Morph(divNTMovingNews,{duration: this.aniDuration, link: 'ignore', transition: this.aniFx});
							
				//Recupero il numero di news presenti nel file xml (li prendo da un campo hidden)
				newsNumber = $('hidNTCountNews').value;	
				
				//Prendo il primo elemento div delle news
				var divFirstNews = $$('.NTSingleNews')[0];
				
				//Recupero i valori di stile che mi servono per calcolare lo spostamento
				var hashStyles = divFirstNews.getStyles('padding-top','padding-bottom','height') 
				
				//Memorizzo in una variabile la somma dell'altezza del div della news + i padding top e bottom
				var sumDivNewsHeight = parseInt(hashStyles['padding-top']) + parseInt(hashStyles['padding-bottom']) + parseInt(hashStyles['height']);
												
				//Eseguo la funzione in maniera ciclica					
				this.AnimateNewsTicker.periodical(this.timePeriodical,counterNews,sumDivNewsHeight);							
			}.bind(this)
		}); 
	},
	
	//Metodo per la creazione dei div
	LoadElements: function()
	{
		//Creazione dei div necessari
		var divNTHeader = new Element('div',{id: 'divNTHeader'});
		//Div del body (maschera)
		var divNTBody = new Element('div', {id: 'divNTBody'});
		//Div del footer
		var divNTFooter = new Element('div', {id: 'divNTFooter'});
		
		//Aggiungo all'header la classe css (non posso farlo in fase di creazione per problemi con IE)
		//(la classe css serve per impostare i caratteri nei vari div)
		divNTHeader.addClass('NTStyleContainer');
		
		//Aggiungo all'header il contenuto specificato nelle proprietà della classe
		divNTHeader.set('html',this.headerContents);		
		//Aggiungo all'header il contenuto specificato nelle proprietà della classe
		divNTFooter.set('html',this.footerContents);
				
		//Aggiungo al contenitore i div creati
		this.divContainer.grab(divNTHeader);
		this.divContainer.grab(divNTBody);
		this.divContainer.grab(divNTFooter);
		
		//Memorizzo gli elementi nelle proprietà della classe
		this.divNTHeader = divNTHeader;
		this.divNTBody = divNTBody;
		this.divNTFooter = divNTFooter;
	},
	
	//Metodo per l'animazione delle news
	AnimateNewsTicker: function(pDistanceMove)
	{
		//Incremento il contatore
		this.counter++;
		
		//Recupero il div da muovere
		var divNTMovingNews = $('divNTMovingNews');
		
		//Prendo l'istanza dell'animazione
		aniNewsTicker = divNTMovingNews.get('morph');
				
		//Verifico se il contatore non si trova all'ultima news			
		if(this.counter < newsNumber)
		{		
			//Eseguo l'animazione spostando in su il div delle news
			aniNewsTicker.start({'top': parseInt(divNTMovingNews.getStyle('top')) - pDistanceMove});				
		}
		else
		{
			//Rimporto il div delle news alla posizione di partenza
			aniNewsTicker.start({'opacity': 0}).chain(function() { this.start({'top' : 0}); }).chain(function() { this.start({'opacity': 1}); });			
			
			//Resetto il contatore delle news
			this.counter = 0;
		}
	},
	
	//Metodo che imposta header e footer generali
	SetHeaderFooter: function(pHtmlHeader,pHtmlFooter)
	{
		//Aggiungo all'header il contenuto specificato 
		this.divNTHeader.set('html',pHtmlHeader);		
		//Aggiungo all'header il contenuto specificato
		this.divNTFooter.set('html',pHtmlFooter);
	},
	
	//Metodo che manda in caricamento le news
	LoadNews: function()
	{		
		//Eseguo la richiesta Ajax per caricare le news
		this.ajaxRequest.send();	
	}
});

//Evento di caricamento della pagina
window.addEvent('domready', function()
{		
	//Dichiaro le variabili
	var strProxyURL;
	
	//Imposto la stringa con il file php che fa' da proxy
	strProxyURL = "/proxy.php?url=http://www.milannews.it/rss&mimeType=text/xml"; 
	
	//Richiamo la funzione per il caricamento degli oggetti comuni alle pagine
	LoadCommonObjects();
	
	//Istanzio l'oggetto per la creazione del NewsTicker
	var objAxNewsTicker = new AxNewsTicker($('divHPNewsTickerContainer'),strProxyURL,'/xsl/NewsTickerOutput.xsl');
	
	//Imposto alcuni parametri del NewsTicker
	with(objAxNewsTicker)
	{
		timePeriodical = 10000;
		SetHeaderFooter('Milan News','(da: www.milannews.it)');	
		//Carico le news
		LoadNews();
	}
	//Fermo la propagazione dell'evento
	return false; 
});