/*
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
COPYRIGHTS DBS Digital Business Solutions s.r.l.
According to the law, it is forbidden to disclose, reproduce or however
use this document and any data herein contained for any use without
previous written authorization by DBS Digital Business Solutions s.r.l.
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
#Configuration Control Record
============================
Project Name:	DBS Web Tools
Project Code:	DBSWT
Unit Name:		libNews
Unit Code:		libNews	
File Name:		libNews.js
============================


#ABSTRACT
========
Questo scrip definisce la classe javascript TDBS_NewsRotator
per la rotazione delle news all'interno dei prodotti web DBS
#History (identifier;date;author;change)
=======
0;27-set-2007 19.40.00;lE;Creazione
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
*/

/**
 * Costruttore della classe
 *
 * @param in	none
 *
 */
 
function TDBS_News_Rotator()
{

	/**
	 * PRIVATE PROPERTIES
	 */
	
	/**
	 * Private Property: timer
	 * Detiene l'ID univoco dell'oggetto timer utilizzato per la rotazione delle news
	 */
	var timer;

	/**
	 * Private Property: timeout
	 * Detiene il numero di millisecondi dopo i quali richiamare l'aggiornamento delle news
	 */
	var timeout = 0;

	/**
	 * Private Property: image_container
	 * Detiene l'ID dell'elemento HTML all'interno del quale viene visualizzata l'immagine associata alla news
	 */
	var image_container = "";

	/**
	 * Private Property: data_container
	 * Detiene l'ID dell'elemento HTML all'interno del quale viene visualizzati i dati della news
	 */
	var data_container = "";

	/**
	 * Private Property: news
	 * Array di oggetti di tipo news da ruotare all'interno dell'oggetto container
	 */
	var news = Array();

	/**
	 * Private Property: image_width
	 * Detiene la larghezza in pixels dell'immagine della news
	 */
	var image_width = 0;

	/**
	 * Private Property: image_height
	 * Detiene l'altezza in pixels dell'immagine della news
	 */
	var image_height = 0;

	/**
	 * Private Property: style
	 * Detiene lo stile CSS da associare all'immagine della news
	 */
	var image_style = "";

	/**
	 * Private Property: current_news
	 * Detiene l'indice nell'array news della news correntemente visualizzato
	 */
	var current_news = 0;

	/**
	 * PUBLIC METHODS
	 */

    /**
     * Public Method: SetContainer()
     * Questo metodo consente di definire l'ID dell'elemento HTML all'interno del quale visuallizare le news caricate 
     *
     * @param	in   type    Tipo di container
     * @param	in   el      ID dell'elemento HTML all'interno del quale visuallizare le news caricate
     *
     */
	this.SetContainer = function(type, el)
	{
		switch (type)
		{
			case 0:
			{
				data_container = el;
				break;
			}
			case 1:
			{
				image_container = el;
				break;
			}
		}
	}
	
    /**
     * Public Method: SetWidth()
     * Questo metodo consente di settare la larghezza dell'immagine della news
     *
     * @param	in   val      Larghezza in pixels dell'immagine della news
     *
     */
	this.SetWidth = function(val)
	{
		if (!(isNaN(val)))
			image_width = val;
		else
			alert ("'Width' value not valid"); 
	}
	
    /**
     * Public Method: SetHeight()
     * Questo metodo consente di settare l'altezza dell'immagine della news
     *
     * @param	in   val      Altezza in pixels dell'immagine della news
     *
     */
	this.SetHeight = function(val)
	{
		if (!(isNaN(val)))
			image_height = val;
		else
			alert ("'Height' value not valid"); 
	}
	
    /**
     * Public Method: SetTimeout()
     * Questo metodo consente di settare il periodo di rotazione delle news
     *
     * @param	in   val      Periodo in millisecondi di rotazione delle news
     *
     */
	this.SetTimeout = function(val)
	{
		if (!(isNaN(val)))
			timeout = val;
		else
			alert ("'Timeout' value not valid"); 
	}
	
    /**
     * Public Method: SetStyle()
     * Questo metodo consente di settare lo stile CSS da associare all'immagine della news
     *
     * @param	in   style     Stile CSS da associare all'immagine della news
     *
     */
	this.SetStyle = function(css_style)
	{
		image_style = css_style;
	}
	
    /**
     * Public Method: AddNews()
     * Questo metodo consente di aggiungere una news alla collection news
     *
     * @param	in   DATE		Data della news
     * @param	in   SUBJECT	Categoria della news
     * @param	in   TITLE		Titolo della news
     * @param	in   PREVIEW	Anteprima della news
     * @param	in   URL		URL da linkare alla news
     * @param	in   IMAGE		URL dell'immagine
     *
     */
	this.AddNews = function(DATE, TIME, SUBJECT, TITLE, PREVIEW, URL, IMAGE)
	{
		news[news.length] = new recNews(DATE, TIME, SUBJECT, TITLE, PREVIEW, URL, IMAGE);
	}
	
    /**
     * Public Method: AddNews()
     * Questo metodo consente di aggiungere una news alla collection news
     *
     * @param	in   DATE		Data della news
     * @param	in   SUBJECT	Categoria della news
     * @param	in   TITLE		Titolo della news
     * @param	in   PREVIEW	Anteprima della news
     * @param	in   URL		URL da linkare alla news
     * @param	in   IMAGE		URL dell'immagine
     *
     */
	this.SelectNews = function(val)
	{
		Update(val);
	}
	
    /**
     * Public Method: Start()
     * Questo metodo consente di avviare la rotazione delle news
     *
     * @param	in   none
     *
     */
	this.Start = function()
	{
		if (!document)
		{
			clearTimeout(timer);
			timer = self.setTimeout("Start()", timeout);
		}
		else
		{
			clearTimeout(timer);
			Update(0);
		}
	}
	
    /**
     * Public Method: Stop()
     * Questo metodo consente di stoppare la rotazione delle news
     *
     * @param	in   none
     *
     */
	this.Stop = function()
	{
		clearTimeout(timer);
	}
	
	/**
	 * PRIVATE METHODS
	 */

    /**
     * Private Method: Update()
     * Questo metodo esegue l'aggiornamento della news all'interno del container fissato
     *
     * @param	in   none
     *
     */
	Update = function()
	{
		if (news.length > 0)
		{
				clearTimeout(timer);	
			if ((arguments.length > 0) && (arguments[0] > 0)  && (arguments[0] <= news.length))
			{
				current_news = arguments[0];
			}

			//Element.hide(data_container);
			Element.hide(image_container);
			
			news[current_news].Update();
	
			//new Effect.Appear(data_container);
			new Effect.Appear(image_container);
			
			if (current_news == news.length-1)
				current_news = 0;
			else
				current_news++;
				
			try
			{
				timer = self.setTimeout("Update()", timeout);
			}
			catch (e)
			{
				alert (e);
			}
		}
	}

    /**
     * Private Method: recNews()
     * Questo metodo costituisce il costruttore dei records di tipo news contenuti all'interno della collection news
     *
     * @param	in   DATE		Data della news
     * @param	in   SUBJECT	Oggetto della news
     * @param	in   TITLE		Titolo della news
     * @param	in   PREVIEW	Anteprima della news
     * @param	in   URL		URL da linkare alla news
     * @param	in   IMAGE		URL dell'immagine
     *
     */
	recNews = function(DATE, TIME, SUBJECT, TITLE, PREVIEW, URL, IMAGE)
	{
		// Assegnamento valori properties
		this.DATE = DATE;
		this.TIME = TIME;
		this.SUBJECT = SUBJECT;
		this.TITLE = TITLE;
		this.PREVIEW = PREVIEW;
		this.URL = URL;
		this.IMAGE = IMAGE;
		
		// Precaricamento dell'immagine della news
		PreloadImage (IMAGE);

		// Funzione di aggiornamento del codice HTML del container
		this.Update = function ()
		{

			$('NewsDateTime').innerHTML = "<font class='content_info'>// " + SUBJECT + " ::</font> " + DATE + "";
			$('NewsTitle').innerHTML = "<h2><nobr><a href=\"" + URL + "\">" + TITLE + "</a><nobr/></h2>";
			$('NewsPreview').innerHTML = "" + PREVIEW + "";
			$('NewsPhoto').innerHTML = "<a href=\"" + URL + "\"><img class=\"" + image_style + "\" src=\"" + IMAGE + "\" border=\"0\" width=\"" + image_width + "\" height=\"" + image_height + "\" alt=\"" + DATE + " :: " + TITLE + "\"/></a>";
			for (var i=1;i<=news.length;i++)
			{
				if (i-1 == current_news)
					$('NewsThumb' + i).className = "selected_photo";
				else
					$('NewsThumb' + i).className = "photo";
			}
		}
		
		// Funzione per il preload delle immagini
		function PreloadImage()
		{
			var d=document;
			if (d.images)
			{
				if (!d.preloaded_images)
					d.preloaded_images = new Array();
	    		
	    		var j=d.preloaded_images.length;
	    		var a=PreloadImage.arguments;
	    		
	    		for (var i=0; i<a.length; i++)
			    {
				    if (a[i].indexOf("#") != 0)
				    {
				    	d.preloaded_images[j]=new Image;
				    	d.preloaded_images[j++].src=a[i];
					}
				}
			}
		}
	}

}
