//************************************************
//* Barra a scorrimento automatico
//************************************************

function scroller(id,w,h,num,ctr,axis,bMouse){
  this.id=id;
  this.el=document.getElementById?document.getElementById(id):null;
  
  if (!this.el) return;
  
  this.w       = w;
  this.h       = h;
  this.num     = num;
  this.axis    = axis||"v";
  this.ctr     = ctr;
  this.css     = this.el.style;
  
  //Nasconde lo scroller
  this.css.display = 'none';
  
  this.css.left = 0;
  if (axis=="h") this.css.left= this.x=-this.w*this.ctr; //0;
  this.css.top = 0;
  if (axis=="v") this.css.top = this.y=-this.h*this.ctr; //0;

  this.pause   = 5000;
  this.speed   = 60;
  
  if (bMouse) scrollers.setMouseEvents(this.el);
  
  this.lastTime=new Date().getTime();
  this.check=0;
  this.index=scrollers.ar.length;
  scrollers.ar[this.index]=this;
  this.active=true;
  
  scrollers.control();
  
  //Visualizza lo scroller
  this.css.display ='block';
}

scroller.prototype.setTiming=function(speed,pause){
  this.speed=speed;
  this.pause=pause;
}

scroller.prototype.controlScroll=function(){
  if(this.ctr>this.num-1){
    this.shiftTo(0,0);
    this.ctr=1;
  }
  else {
    switch(this.axis){
    case "v": if(this.y>-this.h*this.ctr){
      var ny = this.y+-1*this.elapsed/1000*this.speed;
      ny = Math.max(ny,-this.h*this.ctr);
      this.shiftTo(0,ny);
    } else this.doPause();
    break;
    case "h":if(this.x>-this.w*this.ctr){
      var nx = this.x+-1*this.elapsed/1000*this.speed;
      nx = Math.max(nx,-this.w*this.ctr);
      this.shiftTo(nx,0);
    }else this.doPause();
    break;
}}}

scroller.prototype.doPause=function(){
  this.check+=this.elapsed;
  if (this.check>=this.pause) {
    this.ctr++;
    this.check=0;
}}

scroller.prototype.shiftTo=function(x,y){
  this.css.left=(this.x=x)+"px";
  this.css.top =(this.y=y)+"px";
}

scrollers={};
scrollers.ar=[];

scrollers.setMouseEvents=function(obj){
  obj.onmouseover= scrollers.halt;
  obj.onmouseout = scrollers.resume;
}

scrollers.halt=function(){
  var curObj;
  for(var i=0;curObj=scrollers.ar[i];i++)
    if (curObj.id==this.id){
      curObj.active=false;
      return;
    }
}

scrollers.resume=function(e){
  var curObj;
  for(var i=0; curObj=scrollers.ar[i];i++){
    if (curObj.id==this.id){
      e=e?e:window.event;
      var toEl=e.relatedTarget?e.relatedTarget:e.toElement;
      if (this!=toEl&&!contained(toEl,this)){
        var now=new Date().getTime();
        curObj.elapsed=now-curObj.lastTime;
        curObj.lastTime=now;
        curObj.active=true;
        return;
}}}}

scrollers.timer=window.setInterval("scrollers.control()",10);
scrollers.control=function(){
  var curObj;
  for(var i=0;curObj=scrollers.ar[i];i++){
  if(curObj.active){
    var now=new Date().getTime();
    curObj.elapsed=now-curObj.lastTime;
    curObj.lastTime=now;
    curObj.controlScroll();
}}}

scrollers.GeckoTableFix=function(){
  var ua=navigator.userAgent;
  if (ua.indexOf("Gecko")>-1&&ua.indexOf("Firefox")==-1&&ua.toLowerCase().indexOf("like gecko")==-1){
    scrollers.hold=[];
    for (var i=0;arguments[i];i++){
      var wndo    =document.getElementById(arguments[i]);
      var holderId=wndo.parentNode.id;
      var holder  =document.getElementById(holderId);
      document.body.appendChild(holder.removeChild(wndo));
      wndo.style.zIndex=1000;
      var pos=getPageOffsets(holder);
      wndo.style.left=pos.x+"px";
      wndo.style.top= pos.y+"px";
      scrollers.hold[i]=[arguments[i],holderId];
    }
  
  window.addEventListener("resize",scrollers.rePosition,true);
}}

scrollers.rePosition=function(){
  if(scrollers.hold){
    for(var i=0;scrollers.hold[i];i++){
      var wndo  =document.getElementById(scrollers.hold[i][0]);
      var holder=document.getElementById(scrollers.hold[i][1]);
      var pos=getPageOffsets(holder);
      wndo.style.left=pos.x+"px";
      wndo.style.top =pos.y+"px";
}}}
  
scrollers.unHook=function(){
  var i,curObj;
  for (var i=0;curObj=scrollers.ar[i];i++){
    if(curObj.el){
      curObj.el.onmouseover=null;
      curObj.el.onmouseout =null;
      curObj.el=null;
}}}

function getPageOffsets(el){
  var left=el.offsetLeft;
  var top =el.offsetTop;
  if(el.offsetParent&&el.offsetParent.clientLeft||el.offsetParent.clientTop){
    left+=el.offsetParent.clientLeft;
    top +=el.offsetParent.clientTop;
  }
  while(el=el.offsetParent){
    left+=el.offsetLeft;
    top +=el.offsetTop;
  }
  return{x:left,y:top};
}

function contained(oNode,oCont){
  if (!oNode) return;
  while (oNode=oNode.parentNode)
    if (oNode==oCont)return true;
  return false;
}


if (window.addEventListener) 
  window.addEventListener("unload",scrollers.unHook,true);
else if (window.attachEvent)
  window.attachEvent("onunload",scrollers.unHook);

