var FScrollersList=new Array(); //Array asssociativo con la lista di tutti gli scrollers 
var ie4=document.all&&!document.getElementById;
var DOM2=document.getElementById;

/*************************
 * oggetto FScrolller
 * id => id univoco dell'oggetto
 * divclass => (opzionale) classe del div contenitore
 *************************/    
function FScroller(id,divclass){
 
 /****** parametri dello scroller ********/
 this.delay = 6000; //intervallo di scrolling (in millisecondi)
 this.maxsteps=30; // number of steps to take to change from start color to endcolor
 this.stepdelay=40; // time in miliseconds of a single step
 //**Note: maxsteps*stepdelay will be total time in miliseconds of fading effect
 this.startcolor=new Array(241,241,241) // start color (red, green, blue)
 this.endcolor= new Array(0,0,0); // end color (red, green, blue)
 this.fcontent=new Array(); //elenco dei contenuti
 this.begintag="";
 this.closetag="";
 this.width="";  //set scroller width
 this.height=""; //set scroller height
 this.fadelinks=1; //should links inside scroller content also fade like text? 0 for no, 1 for yes.
 this.contentfromids=0; //se è 1 prende il contenuto dall'html dell'oggetto con l'id specificato
 /****** fine parametri  ********/
 
 this.id=id;
 this.index=0; 
 this.divclass=divclass;
 
 
 FScrollersList[this.id]=this; //aggiunge l'oggetto alla lista degli scrollers

 this.linkcolorchange=function (step){
  var obj=document.getElementById(this.id).getElementsByTagName("A");
  if (obj.length>0){
    for (i=0;i<obj.length;i++)
      obj[i].style.color=this.getstepcolor(step);
  }
 }
 
 this.getstepcolor=function (step) {
    var diff;
    var newcolor=new Array(3);
    for(var i=0;i<3;i++) {
      diff = (this.startcolor[i]-this.endcolor[i]);
      if(diff > 0) {
        newcolor[i] = this.startcolor[i]-(Math.round((diff/this.maxsteps))*step);
      } else {
        newcolor[i] = this.startcolor[i]+(Math.round((Math.abs(diff)/this.maxsteps))*step);
      }
    }
    return ("rgb(" + newcolor[0] + ", " + newcolor[1] + ", " + newcolor[2] + ")");
  }

 
 //aggiunge un elemento allo scroller
 this.addContent=function(content){
  this.fcontent[this.fcontent.length]=content;
 }
 
 //scrive il <div> contenente gli elementi dello scroller
 this.writecode=function(){
     
     if (ie4||DOM2) {
      classStr=this.divclass!=undefined?"class='"+this.divclass+"'":"";
      document.write('<div id="'+this.id+'" ' +classStr+' style="width:'+this.width+';height:'+this.height+'"></div>');
     }
     
  }

}


function colorfade(faderid,step) {
  faderobj=FScrollersList[faderid];
  if (faderobj!=null){
    if (document.getElementById(faderobj.id)!=null) {
      if(step<=faderobj.maxsteps) {	
        document.getElementById(faderobj.id).style.color=faderobj.getstepcolor(step);
        if (faderobj.fadelinks) faderobj.linkcolorchange(step);
        step++;
        faderobj.fadecounter=setTimeout("colorfade('"+faderid+"',"+step+")",faderobj.stepdelay);
      }else{
        clearTimeout(faderobj.fadecounter);
        document.getElementById(faderobj.id).style.color="rgb("+faderobj.endcolor[0]+", "+faderobj.endcolor[1]+", "+faderobj.endcolor[2]+")";
        setTimeout("changecontent('"+faderid+"')", faderobj.delay);
    	
      }   
    }
  }
}
 
 
//function to change content
function changecontent(faderid){
  faderobj=FScrollersList[faderid];
  if (faderobj!=null){
    if (document.getElementById(faderobj.id)!=null){
        if (faderobj.index>=faderobj.fcontent.length) faderobj.index=0;
        if (DOM2){
          document.getElementById(faderobj.id).style.color="rgb("+faderobj.startcolor[0]+", "+faderobj.startcolor[1]+", "+faderobj.startcolor[2]+")";
          if (faderobj.contentfromids) {
           objid=faderobj.fcontent[faderobj.index];
           document.getElementById(faderobj.id).innerHTML=faderobj.begintag+document.getElementById(objid).innerHTML+faderobj.closetag;
          }
          else document.getElementById(faderobj.id).innerHTML=faderobj.begintag+faderobj.fcontent[faderobj.index]+faderobj.closetag;
          if (faderobj.fadelinks) faderobj.linkcolorchange(1);
          colorfade(faderid,1);
        }
        else if (ie4) {
          if (faderobj.contentfromids) {
           objid=faderobj.fcontent[faderobj.index];
           document.all[faderobj.id].innerHTML=faderobj.begintag+document.all[objid].innerHTML+faderobj.closetag;
          }
          else document.all[faderobj.id].innerHTML=faderobj.begintag+faderobj.fcontent[faderobj.index]+faderobj.closetag;
        }
        faderobj.index++;
    }
  }
}

//fa partire i faders nell'onLoad della pagina 
if (window.addEventListener) window.addEventListener("load", startFScrollers, false);
else if (window.attachEvent) window.attachEvent("onload", startFScrollers);
else if (document.getElementById) window.onload=startFScrollers;

//inizializza tutti i faders in FScrollersList 
function startFScrollers(){
 for ( scrollerid in FScrollersList ) {
   changecontent(scrollerid);
 }
}

