// JavaScript Document
// Funzioni eventi
function menuOnMouseOverIE(event)
{
    menu.setAlt(event.srcElement,'hand');
}
function menuOnMouseOverMoz(event)
{
    menu.setAlt(event.target,'pointer');
}
function menuClickIE(event)
{
    menu.VaiUrl(event.srcElement);
}
function menuClickMoz(event)
{
    menu.VaiUrl(event.target);
}

menuOnMouseOut= function(e)
    {
     menu.setAlt('.','default');
    }

var GetObjById = document.getElementById?function(nome){return document.getElementById(nome)}:
    (document.all?function (nome){return document.all[nome];}:function (nome){return null;})
// Classe principale menu

function c_menu(nomevariabile,nome,submenu,altmax,steps,tempo)
		{
// Proprietà classe dichiarazione e impostazione

this.nomevariabile=nomevariabile;
this.nome=nome;
this.altmax=altmax;
this.steps=steps;
this.tempo=tempo;
this.aperto=null;
this.interval=-1;
this.obj = GetObjById(nome);
this.alto=this.obj.offsetTop;
this.sinistra=this.obj.offsetLeft;
var par=this.obj.offsetParent;
this.altezza=this.obj.offsetHeight;
this.larghezza=this.obj.offsetWidth;
this.tipoaltezza=0;
this.minalt=0;
this.submenu=submenu;
this.n_submenu=submenu.length;
this.disp_submenu= Array();
this._links=true;
this.dummy_div=null;
this.apy=0;
this.apx=0;
this.step_dummy=0;

//******************
// Istanziazione classi voci menu
this.creaVoci= function()
    {
    var obj;
    var nome;
    var steps=this.steps;
    var voci= Array(this.submenu.length);
    var nvoci=0;
    if(submenu instanceof Array && submenu.length>0)
        this._links=(typeof(submenu[0])).indexOf('string')>=0?false:true;
    else return;
    for(var n=0;n<voci.length;n++)
    {
    nome=this._links?this.submenu[n][0]:this.submenu[n];
    obj = GetObjById(nome);
    if(obj && obj.style.display=='none') continue;
    voci[nvoci++]=new c_submenu(nome,this._links?this.submenu[n][1]:'');
    }
    this.disp_submenu=Array(nvoci);
    this.n_submenu=nvoci;
    while(nvoci--)
        this.disp_submenu[nvoci]=voci[nvoci];
    this.interval=0;
    this.setAlt('');
    nvoci=this.n_submenu;
    while(nvoci--)
        {
        var s=this.disp_submenu[nvoci];
         s.altezza=s.fine;
	     s.step=0;
         s.obj.style.height=s.altezza+'px';
        }
    this.interval=-1;
    //Definizione eventi
if (this.obj.addEventListener)
    {
    this.obj.addEventListener("mouseout",function(event){menuOnMouseOut(event);},false);
    this.obj.addEventListener("mouseover",function(event){menuOnMouseOverMoz(event);},false);
    if(this._links) this.obj.addEventListener("click",function(event){menuClickMoz(event);},false);
    }
else if (this.obj.attachEvent)
    {
    this.obj.attachEvent("onmouseover",function(e){menuOnMouseOverIE(e);});
    this.obj.attachEvent("onmouseout",function(e){menuOnMouseOut(e);});
    if(this._links) this.obj.attachEvent("onclick",function(e){menuClickIE(e);});
   }
}

// Funzioni membro

this.inArray = function(nome)
    {
    var n=this.n_submenu;
    while(n--)
        if(this.disp_submenu[n].nome==nome) return this.disp_submenu[n];
    return null;
    }
//*******************
this.InVoceMenu= function(el)
    {
    var obj;
    while(1)
        {

        if((obj=this.inArray(el.id))!=null) return obj;
        if(el.offsetParent) el=el.offsetParent;
        else    return null;
          }
    }
//*******************
this.setAlt=function (sm,cursore)
    {
     var obj;
    if((typeof(sm)).indexOf('string')>=0)
        obj=this.inArray(sm);
    else {   obj=sm; sm=obj.id;}

    this.aperto=null;
    if(obj) this.aperto=this.InVoceMenu(obj);
    if(this.aperto)
    	{
    	this.apy=this.aperto.obj.offsetTop;
  		this.aph=this.aperto.obj.offsetHeight;
  		}
  	else
  		{
  		//if(this.dummy_div) this.step_dummy=this.dummy_div.offsetHeight/this.steps;
  		if(this.dummy_div) this.dummy_div.style.height='1px';
  			}
     var chiusi=this.n_submenu-(this.aperto==null?0:1);

    if(chiusi == 0) return;
    var n= this.n_submenu;
    var dim_chiusi=0;
    if(this.minalt==-1)
        {
        while(n--)
            if(this.disp_submenu[n].a_chiuso>dim_chiusi) dim_chiusi=this.disp_submenu[n].a_chiuso;
        n= this.n_submenu;

        }
    else if(this.minalt==0)
        {
        var altmax=this.aperto!=null ?(this.altmax?this.altmax:this.aperto.alt_def):0;
        dim_chiusi=(this.altezza-altmax)/chiusi;
        obj=this.disp_submenu[--n];
        obj.step=obj.fine= altmax?altmax:dim_chiusi;
        }
    else if(this.minalt>0)
        {
        dim_chiusi=this.minalt;
        }
   while(n--)
	{
	obj=this.disp_submenu[n];
	obj.fine= this.aperto==obj? (this.altmax?this.altmax:this.aperto.alt_def):(dim_chiusi>0?dim_chiusi:obj.a_chiuso);
    obj.step=(obj.fine-obj.altezza)/this.steps;
    obj.step=obj.step>=0?Math.ceil(obj.step):Math.floor(obj.step);
       }
    if(cursore && this._links) document.body.style.cursor = this.aperto!=null && this.aperto.link.length>0 ?cursore:'default';

    if(this.interval<0)
    	this.interval = window.setInterval(this.nomevariabile+'.stepping()',this.tempo) ;

        }
//*******************
this.stepping = function ()
 {
 var flag=0;
 var su=0;
 for(var n=0;n<this.n_submenu;n++)
	{
	var s=this.disp_submenu[n];
    if(s.step==0) continue;
	if(Math.abs(flag=s.fine-s.altezza)<Math.abs(s.step))
	   {
	     su+=flag;
	     s.altezza=s.fine;
	     s.step=0;
         }
    else {s.altezza+=s.step;su+=s.step;}
	s.obj.style.height=s.altezza+'px';

    flag=1;
       }
  if(this.dummy_div)
  	{
  	if(this.aperto)
  		{
        if(this.aperto.obj.offsetTop+this.aperto.obj.offsetHeight+s.step<=this.apy+this.aph && su<0 && this.dummy_div)
        	{
        	this.dummy_div.style.display='';
            var med=((this.apy+this.aph)-(this.aperto.obj.offsetTop+this.aperto.obj.offsetHeight))/2;
            med+=this.dummy_div.offsetHeight;
        	this.dummy_div.style.height=(med>0?med:1)+'px';


        		}
  			}
  	else
  		{   var y=this.dummy_div.offsetHeight-this.step_dummy
  			if(y>0) this.dummy_div.style.height=y+'px';

  			}
  	}
  if(!flag) {
  	window.clearInterval(this.interval);  this.interval=-1;
  	 if(this.aperto== null && this.dummy_div)
  	 	{
  	 	this.dummy_div.style.height='1px';

  	 	this.dummy_div.style.display='none';
  	 		}
  	}
  }

//*******************

this.VaiUrl=function (obj)
	{
	var obj=this.InVoceMenu(obj);
	if(obj && obj.link.length>0) window.location.assign(obj.link);//  alert(obj.link);
	}

//*******************
this.SetDisplay=function(nome,val)
    {
    var n=this.submenu.length
    while(n--) if(this.submenu[n][0]==nome) break;
    if(n<0) return;
    var obj = GetObjById(nome);
    if(obj)
        { obj.style.display=val?'':'none';
            this.creaVoci();
            }
    }

//*******************
// Codice eseguito
var childs=this.obj.childNodes;

for(var n=0;n<childs.length;n++)
    if(childs[n].nodeName=='DIV')
	{
	var n1=this.n_submenu;
    while(n1--)
    	{
        if(this.submenu[n1].nome!=nome)
        	{
         	this.dummy_div=childs[n];
			this.dummy_div.style.position='relative';
			this.dummy_div.style.display='none';
			this.dummy_div.style.overflow='hidden';
			this.dummy_div.style.width='155px';
			this.dummy_div.style.height='1px';
			break;
			}
        }
        if(this.dummy_div!=null) break;

    }
// Calcolo posizione menu
while (par)
    {
    this.alto+=par.offsetTop;
    this.sinistra+=par.offsetLeft;
    par=par.offsetParent;
    }

// Esecuzione programma

this.creaVoci();
};

// Classe voce menu
function c_submenu(nome,link)
		{
this.nome=nome;
this.link=link;
this.obj = GetObjById(nome);
this.voce=null;
this.a_chiuso=0;
this.alt_def=this.obj.offsetHeight;
this.altezza=this.alt_def;
this.fine=0;
this.step=0;
// Funzioni membro
// Codice eseguito
var childs=this.obj.childNodes;
for(var n=0;n<childs.length;n++)
    if(childs[n].nodeName=='DIV')
	{
	this.voce=childs[n];
	this.a_chiuso=this.voce.offsetHeight;
	break;
    }
};
