//** 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.ObjDivContainer = pDivContainer;
		
		//Inizializzo le proprietą
		this.IntTimePeriodical = 5000;
		this.IntAniDuration = 1000;
		this.ObjAniFx = Fx.Transitions.Linear;
		this.StrHeaderContents = 'RSS News';
		this.StrFooterContents = '(rss news reader)';		
		this.ObjDivNTHeader = null;
		this.ObjDivNTBody = null;
		this.ObjDivNTFooter = null;
				
		//Inizializzo l'oggetto AxMstXmlDom che mi serve ogni volta che effettuo la chiamata Ajax
		var objAxXml = new AxMstXmlDom(); 	
		
		//Valorizzo la proprietą del file Xsl della classe
		objAxXml.XslFileName = pXslFileName;	
		
		//Leggo il file Xsl
		objAxXml.ReadFileXsl();
				
		//Imposto il contatore che mi serve durante l'esecuzione della funzione ciclica
		var intCounterNews = { intCounter: 0 };
		
		//Richiamo il metodo interno per la creazione dei div
		this.LoadElements();
		
		//Imposto la proprietą che contiene l'oggetto Request per effettuare la chiamata HTTP
		this.ObjAjaxRequest = new Request({
			//Metodo
			method: 'get', 
			
			//Destinazione
			url: pProxyURL,
			//url: '/Xml/rss.xml',
			
			//Alla richiesta
			onRequest: function()
			{
				//Creo l'elemento div che ha come sfondo la gif per il caricamento			
				var objDivLoading = new Element('div', {id: 'divNTLoading'});
								
				//Inserisco il div di loading nel div contenitore delle news	
				this.ObjDivNTBody.grab(objDivLoading);	
			}.bind(this),
			
			//Al successo
			onSuccess: function(responseText,responseXML) 
			{	
				//Imposto la proprietą del documento Xml con la risposta Xml
				objAxXml.XmlObjDocument = responseXML;					
			
				//Carico il documento Xml	
				objAxXml.TransformXmlDoc(this.ObjDivNTBody);
															
				//Recupero il div contenitore delle news
				var objDivNTMovingNews = $('objDivNTMovingNews');
				
				//Imposto l'animazione al div che contiene le news				
				aniNewsTicker = new Fx.Morph(objDivNTMovingNews,{duration: this.IntAniDuration, link: 'ignore', transition: this.ObjAniFx});
							
				//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.IntTimePeriodical,intCounterNews,sumDivNewsHeight);							
			}.bind(this)
		}); 
	},
		
	//** Metodo per la creazione dei div
	LoadElements: function()
	{
		//Creazione dei div necessari
		this.ObjDivNTHeader = new Element('div',{id: 'divNTHeader'}).addClass('NTStyleContainer').set('html',this.StrHeaderContents);;
		//Div del body (maschera)
		this.ObjDivNTBody = new Element('div', {id: 'divNTBody'});
		//Div del footer
		this.ObjDivNTFooter = new Element('div', {id: 'divNTFooter'}).set('html',this.StrFooterContents);
					
		//Aggiungo al contenitore i div creati
		this.ObjDivContainer.grab(this.ObjDivNTHeader).grab(this.ObjDivNTBody).grab(this.ObjDivNTFooter);
	},
	
	//** Metodo per l'animazione delle news
	//** pDistanceMove: numero di pixel per cui spostare il div
	AnimateNewsTicker: function(pDistanceMove)
	{
		//Incremento il contatore
		this.intCounter++;
		
		//Recupero il div da muovere
		var objDivNTMovingNews = $('divNTMovingNews');
		
		//Prendo l'istanza dell'animazione
		aniNewsTicker = objDivNTMovingNews.get('morph');
				
		//Verifico se il contatore non si trova all'ultima news			
		if(this.intCounter < newsNumber)
		{		
			//Eseguo l'animazione spostando in su il div delle news
			aniNewsTicker.start({'top': parseInt(objDivNTMovingNews.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.intCounter = 0;
		}
	},
	
	//** Metodo che imposta header e footer generali
	SetHeaderFooter: function(pHtmlHeader,pHtmlFooter)
	{
		//Aggiungo all'header il contenuto specificato 
		this.ObjDivNTHeader.set('html',pHtmlHeader);	
		
		//Aggiungo all'header il contenuto specificato
		this.ObjDivNTFooter.set('html',pHtmlFooter);
	},
	
	//** Metodo che manda in caricamento le news
	LoadNews: function()
	{		
		//Eseguo la richiesta Ajax per caricare le news
		this.ObjAjaxRequest.send();	
	}
});

//Evento di caricamento della pagina
window.addEvent('domready', function()
{
	//Creo l'oggetto comune alle pagine
	var objCommonPages = new AxCommonPages();
	
	//Chiamo il metodo per il caricamento degli oggetti di grafica (menu)
	objCommonPages.LoadGraphicObjects();
	
	//Annullo l'oggetto
	objCommonPages = null;
	
	//-- Meteo --
	//Creo l'oggetto IFrame da inserire nel div contenitore
	var objIFrMeteo = new Element('iframe', {
		'id': 'ifrMeteo',
		'noresize': 'noresize',
		'scrolling': 'no',
		'frameborder': 'no',
		'style': 'width: 614px; height: 178px;',
		'src': "http://www.ilmeteo.it/box/previsioni.php?citta=6659&type=day1&width=614&ico=1&lang=ita&days=4&font=Verdana&fontsize=11&bg=FFFFFF&fg=000000&bgtitle=CC0000&fgtitle=FFFFFF&bgtab=F0F0F0&fglink=000000"
	});
	
	//Inserisco l'oggetto Iframe nel div contenitore del meteo
	$('divMeteoTxt').grab(objIFrMeteo);
	
	//Annullo l'oggetto
	objIFrMeteo = null;
	
	//-- News Ticker --
	//Imposto la stringa URL dove prendere le news
	var strProxyURL = '/proxy.php?url=http://www.milannews.it/rss&mimeType=text/xml'; 
		
	//Istanzio l'oggetto per la creazione del NewsTicker
	var objAxNewsTicker = new AxNewsTicker($('divNwsTckrTxt'),strProxyURL,'/Xsl/NewsTickerOutput.xsl');
	
	//Imposto alcuni parametri del NewsTicker
	with(objAxNewsTicker)
	{
		//Numero di secondi per la visualizzazione della news
		IntTimePeriodical = 10000;
		
		//Imposto Header e Footer
		SetHeaderFooter('Milan News','(da: www.milannews.it)');
		
		//Carico le news
		LoadNews();
	}
	
	//Fermo la propagazione dell'evento
	return false; 	
});

//Evento di caricamento della pagina
//Viene scatenato dopo il domready. Lo uso per problemi di cache con Chrome e Safari
window.addEvent('load', function()
{		
	//Devo impostare l'altezza del div contenitore del body	
	//N.B. Metto try catch perchč nella home non esiste il div
	try { $('divBodyContainer').setStyle('height',$('divBdyFullSideCntr').getSize().y + 'px'); } 
	catch(exc) { }
	
	//Fermo la propagazione dell'evento
	return false; 	
});
