function _def() {
  var i;
  for (i=0; i<arguments.length; ++i) {
    if (typeof(arguments[i])=="" || typeof(arguments[i])=="undefined") return false;
  }
  return true;
}

function _domSetWidth(ele,uW){
  if (uW < 0) return;
  var pl=0,pr=0,bl=0,br=0;
  if (_def(document.defaultView) && _def(document.defaultView.getComputedStyle)){// gecko and standard
    pl=parseInt(document.defaultView.getComputedStyle(ele, "").getPropertyValue("padding-left"));
    pr=parseInt(document.defaultView.getComputedStyle(ele, "").getPropertyValue("padding-right"));
    bl=parseInt(document.defaultView.getComputedStyle(ele, "").getPropertyValue("border-left-width"));
    br=parseInt(document.defaultView.getComputedStyle(ele, "").getPropertyValue("border-right-width"));
  } else if (_def(ele.currentStyle, document.compatMode)){
    if (document.compatMode=="CSS1Compat"){// ie6up in css1compat mode
      pl=parseInt(ele.currentStyle.paddingLeft);
      pr=parseInt(ele.currentStyle.paddingRight);
      bl=parseInt(ele.currentStyle.borderLeftWidth);
      br=parseInt(ele.currentStyle.borderRightWidth);
    }
  }
  if (isNaN(pl)) pl=0; if (isNaN(pr)) pr=0; if (isNaN(bl)) bl=0; if (isNaN(br)) br=0;
  var cssW=uW-(pl+pr+bl+br);
  if (isNaN(cssW) || cssW < 0) return;
  ele.style.width=cssW + "px";
}

function _domSetHeight(ele,uH){
  if (uH < 0) return;
  var pt=0,pb=0,bt=0,bb=0;
  if (_def(document.defaultView) && _def(document.defaultView.getComputedStyle)){
    pt=parseInt(document.defaultView.getComputedStyle(ele, "").getPropertyValue("padding-top"));
    pb=parseInt(document.defaultView.getComputedStyle(ele, "").getPropertyValue("padding-bottom"));
    bt=parseInt(document.defaultView.getComputedStyle(ele, "").getPropertyValue("border-top-width"));
    bb=parseInt(document.defaultView.getComputedStyle(ele, "").getPropertyValue("border-bottom-width"));
 }
  else if (_def(ele.currentStyle, document.compatMode)){
    if (document.compatMode=="CSS1Compat"){
      pt=parseInt(ele.currentStyle.paddingTop);
      pb=parseInt(ele.currentStyle.paddingBottom);
      bt=parseInt(ele.currentStyle.borderTopWidth);
      bb=parseInt(ele.currentStyle.borderBottomWidth);
   }
 }

  if (isNaN(pt)) pt=0; if (isNaN(pb)) pb=0; if (isNaN(bt)) bt=0; if (isNaN(bb)) bb=0;
  var cssH=uH-(pt+pb+bt+bb);
  if (isNaN(cssH) || cssH < 0) return;
  ele.style.height=cssH + "px";
}

function xGetElementById(id) {
  var ele = null;
  if (document.getElementById) ele = document.getElementById(id);
  else if (document.all) ele = document.all[id];
  else if (document.layers) ele = _getLayer(window, id);
  return ele;
}

function xGetElementByTagName(tagname) {
  var ele = null;
  if (document.getElementsByTagName) ele = document.getElementsByTagName(tagname);
  else if (document.all) ele = document.all[tagname];
  else if (document.layers) ele = _getLayer(window, tagname);
  return ele;
}

function _getLayer(parent, id) {
  var i, layer, found=null;
  for (i = 0; i < parent.document.layers.length; i++) {
    layer = parent.document.layers[i];
    if (layer.id == id) return layer;
    if (layer.document.layers.length) found = nnSearchAllLayers(layer, id);
    if (found) return found;
  }
  return null;
}

function xEvent(e) {
   if (!e) {
      if (window.event) {
         e = window.event;
         return (e);
      } else {
         return;
      }
   } else {
      if (window.event) {
         e = window.event;
      }
      return (e);
   }
}

function xEventSource(e) {
   e = xEvent(e);
   if (!e) {
      return;
   } else {
      if (window.event) {
         e = window.event.srcElement;
      } else {
         e = e.target;
		    }
      return (e);
   }
}

function xEventType(e) {
  e = xEvent(e);
  if (!e) {
    return ("");
  } else {
    return (e.type);
  }
}

function xEventTag(e) {
  e = xEvent(e);
  if (!e) {
    return ("");
  } else {
    return (e.srcElement.id);
  }
}

function xAddEventListener(ele, eventType, eventListener, useCapture) {
  if (typeof(ele)=="string") ele = xGetElementById(ele);
  if (!useCapture) useCapture = false;
  eventType = eventType.toLowerCase();
  var eh = "ele.on" + eventType + " = eventListener;";
  if (ele.addEventListener) {
    ele.addEventListener(eventType, eventListener, useCapture);
    return (true);
  } else if (ele.attachEvent) {
    return ele.attachEvent("on" + eventType, eventListener);
  } else if (ele.captureEvents) {
    if (eval("Event." + eventType.toUpperCase())) {
      if (useCapture || (eventType.indexOf('mousemove')!=-1))
        ele.captureEvents(eval("Event." + eventType.toUpperCase()));
      eval(eh);
    }
  } else {
     // versione originale: eval(eh);
     ele['on' + eventType] = eventListener;
	  return (true);
  }
}

function xRemoveEventListener(ele, eventType, eventListener, useCapture) {
  if (typeof(ele)=="string") ele = xGetElementById(ele);
  if (!useCapture) useCapture = false;
  eventType = eventType.toLowerCase();
  var eh = "ele.on" + eventType + "=null";
  if (ele.removeEventListener) {
    ele.removeEventListener(eventType, eventListener, useCapture);
  }  
  else if (ele.releaseEvents) {
    if (useCapture || (eventType.indexOf('mousemove')!=-1))
      ele.releaseEvents(eval("Event." + eventType.toUpperCase()));
    eval(eh);
  }
  else { eval(eh); }  
}

function fixDate(date) {
  var base = new Date(0);
  var skew = base.getTime();
  if (skew > 0)
    date.setTime(date.getTime() - skew);
}

function Is() {
    // Ultimate client-side JavaScript client sniff. Version 3.03
    // (C) Netscape Communications 1999.  Permission granted to reuse and distribute.
    // (1) browser vendor
    // (2) browser version number
    // (3) browser vendor AND major version number
    // (4) JavaScript version number
    // (5) OS platform and version

    var agt = navigator.userAgent.toLowerCase();
    this.useragent = agt;

    // *** BROWSER VERSION ***
    // Note: On IE5, these return 4, so use is.ie5up to detect IE5.

    this.major = parseInt(navigator.appVersion);
    this.minor = parseFloat(navigator.appVersion);

    this.nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1)
                && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1)
                && (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1));
    this.nav2 = (this.nav && (this.major == 2));
    this.nav3 = (this.nav && (this.major == 3));
    this.nav4 = (this.nav && (this.major == 4));
    this.nav4up = (this.nav && (this.major >= 4));
    this.navonly      = (this.nav && ((agt.indexOf(";nav") != -1) ||
                          (agt.indexOf("; nav") != -1)) );
    this.nav6 = (this.nav && (this.major == 5));
    this.nav6up = (this.nav && (this.major >= 5));
    this.gecko = (agt.indexOf('gecko') != -1);

    this.ie     = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
    this.ie3    = (this.ie && (this.major < 4));
    this.ie4    = (this.ie && (this.major == 4) && (agt.indexOf("msie 4")!=-1) );
    this.ie4up  = (this.ie  && (this.major >= 4));
    this.ie5    = (this.ie && (this.major == 4) && (agt.indexOf("msie 5.0")!=-1) );
    this.ie5_5  = (this.ie && (this.major == 4) && (agt.indexOf("msie 5.5") !=-1));
    this.ie5up  = (this.ie  && !this.ie3 && !this.ie4);
    this.ie5_5up =(this.ie && !this.ie3 && !this.ie4 && !this.ie5);
    this.ie6    = (this.ie && (this.major == 4) && (agt.indexOf("msie 6.")!=-1) );
    this.ie6up  = (this.ie  && !this.ie3 && !this.ie4 && !this.ie5 && !this.ie5_5);

    this.aol   = (agt.indexOf("aol") != -1);
    this.aol3  = (this.aol && this.ie3);
    this.aol4  = (this.aol && this.ie4);
    this.aol5  = (agt.indexOf("aol 5") != -1);
    this.aol6  = (agt.indexOf("aol 6") != -1);

    this.opera = (agt.indexOf("opera") != -1);
    this.opera2 = (agt.indexOf("opera 2") != -1 || agt.indexOf("opera/2") != -1);
    this.opera3 = (agt.indexOf("opera 3") != -1 || agt.indexOf("opera/3") != -1);
    this.opera4 = (agt.indexOf("opera 4") != -1 || agt.indexOf("opera/4") != -1);
    this.opera5 = (agt.indexOf("opera 5") != -1 || agt.indexOf("opera/5") != -1);
    this.opera6 = (agt.indexOf("opera 6") != -1 || agt.indexOf("opera/6") != -1);
    this.opera7 = (agt.indexOf("opera 7") != -1 || agt.indexOf("opera/7") != -1);
    this.opera5up = (this.opera && !this.opera2 && !this.opera3 && !this.opera4);
    this.opera6up = (this.opera && !this.opera2 && !this.opera3 && !this.opera4 && !this.opera5);
    this.opera7up = (this.opera && !this.opera2 && !this.opera3 && !this.opera4 && !this.opera5 && !this.opera6);

    this.webtv = (agt.indexOf("webtv") != -1); 

    this.TVNavigator = ((agt.indexOf("navio") != -1) || (agt.indexOf("navio_aoltv") != -1)); 
    this.AOLTV = this.TVNavigator;

    this.hotjava = (agt.indexOf("hotjava") != -1);
    this.hotjava3 = (this.hotjava && (this.major == 3));
    this.hotjava3up = (this.hotjava && (this.major >= 3));

    // *** JAVASCRIPT VERSION CHECK ***
    if (this.nav2 || this.ie3) this.js = 1.0;
    else if (this.nav3) this.js = 1.1;
    else if (this.opera5up) this.js = 1.3;
    else if (this.opera) this.js = 1.1;
    else if ((this.nav4 && (this.minor <= 4.05)) || this.ie4) this.js = 1.2;
    else if ((this.nav4 && (this.minor > 4.05)) || this.ie5) this.js = 1.3;
    else if (this.hotjava3up) this.js = 1.4;
    else if (this.nav6 || this.gecko) this.js = 1.5;
    // NOTE: In the future, update this code when newer versions of JS are released.
    else if (this.nav6up) this.js = 1.5;
    else if (this.ie5up) this.js = 1.3
    else this.js = 0.0;

    // *** PLATFORM ***
    this.win   = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
    // NOTE: On Opera 3.0, the userAgent string includes "Windows 95/NT4" on all
    //        Win32, so you can't distinguish between Win95 and WinNT.
    this.win95 = ((agt.indexOf("win95")!=-1) || (agt.indexOf("windows 95")!=-1));

    this.win16 = ((agt.indexOf("win16")!=-1) || 
               (agt.indexOf("16bit")!=-1) || (agt.indexOf("windows 3.1")!=-1) || 
               (agt.indexOf("windows 16-bit")!=-1) );  

    this.win31 = ((agt.indexOf("windows 3.1")!=-1) || (agt.indexOf("win16")!=-1) ||
                    (agt.indexOf("windows 16-bit")!=-1));

    // NOTE: Reliable detection of Win98 may not be possible. It appears that:
    //       - On Nav 4.x and before you'll get plain "Windows" in userAgent.
    //       - On Mercury client, the 32-bit version will return "Win98", but
    //         the 16-bit version running on Win98 will still return "Win95".
    this.win98 = ((agt.indexOf("win98")!=-1) || (agt.indexOf("windows 98")!=-1));
    this.winnt = ((agt.indexOf("winnt")!=-1) || (agt.indexOf("windows nt")!=-1));
    this.win32 = (this.win95 || this.winnt || this.win98 || 
                    ((this.major >= 4) && (navigator.platform == "Win32")) ||
                    (agt.indexOf("win32")!=-1) || (agt.indexOf("32bit")!=-1));

    this.winme = ((agt.indexOf("win 9x 4.90")!=-1));
    this.win2k = ((agt.indexOf("windows nt 5.0")!=-1));

    this.os2   = ((agt.indexOf("os/2")!=-1) || 
                    (navigator.appVersion.indexOf("OS/2")!=-1) ||   
                    (agt.indexOf("ibm-webexplorer")!=-1));

    this.mac    = (agt.indexOf("mac")!=-1);

    if (this.mac && this.ie5up) this.js = 1.4;
    this.mac68k = (this.mac && ((agt.indexOf("68k")!=-1) || 
                               (agt.indexOf("68000")!=-1)));
    this.macppc = (this.mac && ((agt.indexOf("ppc")!=-1) || 
                                (agt.indexOf("powerpc")!=-1)));

    this.sun   = (agt.indexOf("sunos")!=-1);
    this.sun4  = (agt.indexOf("sunos 4")!=-1);
    this.sun5  = (agt.indexOf("sunos 5")!=-1);
    this.suni86= (this.sun && (agt.indexOf("i86")!=-1));
    this.irix  = (agt.indexOf("irix") !=-1);    // SGI
    this.irix5 = (agt.indexOf("irix 5") !=-1);
    this.irix6 = ((agt.indexOf("irix 6") !=-1) || (agt.indexOf("irix6") !=-1));
    this.hpux  = (agt.indexOf("hp-ux")!=-1);
    this.hpux9 = (this.hpux && (agt.indexOf("09.")!=-1));
    this.hpux10= (this.hpux && (agt.indexOf("10.")!=-1));
    this.aix   = (agt.indexOf("aix") !=-1);      // IBM
    this.aix1  = (agt.indexOf("aix 1") !=-1);    
    this.aix2  = (agt.indexOf("aix 2") !=-1);    
    this.aix3  = (agt.indexOf("aix 3") !=-1);    
    this.aix4  = (agt.indexOf("aix 4") !=-1);    
    this.linux = (agt.indexOf("inux")!=-1);
    this.sco   = (agt.indexOf("sco")!=-1) || (agt.indexOf("unix_sv")!=-1);
    this.unixware = (agt.indexOf("unix_system_v")!=-1); 
    this.mpras    = (agt.indexOf("ncr")!=-1); 
    this.reliant  = (agt.indexOf("reliantunix")!=-1);
    this.dec   = ((agt.indexOf("dec")!=-1) || (agt.indexOf("osf1")!=-1) || 
                  (agt.indexOf("dec_alpha")!=-1) || (agt.indexOf("alphaserver")!=-1) || 
                  (agt.indexOf("ultrix")!=-1) || (agt.indexOf("alphastation")!=-1)); 
    this.sinix = (agt.indexOf("sinix")!=-1);
    this.freebsd = (agt.indexOf("freebsd")!=-1);
    this.bsd = (agt.indexOf("bsd")!=-1);
    this.unix  = ((agt.indexOf("x11")!=-1) || this.sun || this.irix || this.hpux || 
                 this.sco ||this.unixware || this.mpras || this.reliant || 
                 this.dec || this.sinix || this.aix || this.linux || this.bsd || this.freebsd);

    this.vms   = ((agt.indexOf("vax")!=-1) || (agt.indexOf("openvms")!=-1));

    // *** OBJECT MODEL ***
    this.dhtml_DOM = (document.getElementById) ? true : false;
    this.dhtml_NS4 = (document.layers) ? true : false;
    this.dhtml_IE4 = (document.all) ? true : false;

}

var is;
var isIE3Mac = false;

if ((navigator.appVersion.indexOf("Mac")!=-1) && (navigator.userAgent.indexOf("MSIE")!=-1) && 
(parseInt(navigator.appVersion)==3))
       isIE3Mac = true;
else   is = new Is(); 

function xStyle(id, sProp, sVal, iScelta) {
  if (typeof(id) == "object") {
    var ele = id;
  } else {
    var ele = xGetElementById(id);
  }
  if (!ele) return;
  if (iScelta == 1) {
    return (eval("ele.style." + sProp + " = " + sVal));
  } else if (iScelta == 2) {
    return (eval("ele.style." + sProp + "(" + sVal + ")"));
  } else {
    return (eval("ele.style." + sProp + " = \"" + sVal + "\""));
  }
}

function xElementInfo(id, iScelta) {
  if (typeof(id) == "object") {
    var ele = id;
  } else {
    var ele = xGetElementById(id);
  }
  if (!ele) return (false);
  if (iScelta == 1) {
    var offsetLeft = 0;
    var offsetTop = 0;
    //if (ele.tagName == "IMG") {
      while (ele) {
        offsetLeft += ele.offsetLeft;
        offsetTop += ele.offsetTop;
        ele = ele.offsetParent;
      }
      if (is.mac && typeof(document.body.leftMargin) != "undefined") {
        offsetLeft += document.body.leftMargin;
        offsetTop += document.body.topMargin;
      }
    //} else {
    //}
    return {left:offsetLeft, top:offsetTop};
  } else {
			 var sVis = "";
    if (ele.style && _def(ele.style.visibility)) {
					 sVis = ele.style.visibility;
				} else if (document.layers) {
					 sVis = ele.visibility;
				}
    switch (sVis) {
      case "visible":
        sVis = "show";
        break;
      case "hidden":
        sVis = "hide";
        break;
      default:
        sVis = "inherit";
								break;
    }
				return (sVis);
  }
}

function xLayerInfo(id, iScelta) {
  if (typeof(id) == "object") {
    var lay = id;
  } else {
    var lay = xGetElementById(id);
  }
  if (!lay) return (false);
  if (iScelta == 1) {
    var offsetLeft = 0;
    var offsetTop = 0;
    if (lay.style.position == "relative") {
      while (lay) {
        offsetLeft += lay.offsetLeft;
        offsetTop += lay.offsetTop;
        lay = lay.offsetParent;
      }
      if (is.mac && typeof(document.body.leftMargin) != "undefined") {
        offsetLeft += document.body.leftMargin;
        offsetTop += document.body.topMargin;
      }
    } else {
      offsetTop = xTop(id);
      offsetLeft = xLeft(id);
    }
    return {left:offsetLeft, top:offsetTop};
  } else {
    if (lay.style && _def(lay.style.visibility)) return lay.style.visibility;
    else if (document.layers) return lay.visibility;
  }
}

function xShow(id) {
  if (typeof(id) == "object") {
    var ele = id;
  } else {
    var ele = xGetElementById(id);
  }
  if (!ele) return;
  if (ele.style && _def(ele.style.visibility)) ele.style.visibility = "inherit";
  else if (document.layers) ele.visibility = "show";
}

function xHide(id) {
  if (typeof(id) == "object") {
    var ele = id;
  } else {
    var ele = xGetElementById(id);
  }
  if (!ele) return;
  if (ele.style && _def(ele.style.visibility)) ele.style.visibility = "hidden";
  else if (document.layers) ele.visibility = "hide";
}

function xBackground(sId, sBgColor, sBgImage) {
  if (typeof(sId) == "object") {
    var ele = sId;
  } else {
    var ele = xGetElementById(sId);
  }
  var bg = "";
  if (!ele) return;
  if (ele.style) {
    if (arguments.length > 1)
      ele.style.backgroundColor = sBgColor;
    if (arguments.length == 3)
      ele.style.backgroundImage = "url(" + sBgImage + ")";
    bg = ele.style.backgroundColor;
  } else if (document.layers) {
    if (arguments.length > 1) ele.bgColor = sBgColor;
    if (arguments.length == 3) ele.background.src = sBgImage;
    bg = ele.bgColor;
  } else {
    if (arguments.length > 1) ele.setAttribute("bgcolor", sBgColor, 0);
    if (arguments.length == 3) ele.setAttribute("background", sBgImage, 0);
    bg = ele.getAttribute("bgcolor");
  }
  return bg;
}

function xMoveTo(id, iX, iY) {
  xLeft(id, iX);
  xTop(id, iY);
}

function xMoveBy(id, iDx, iDy) {
  xLeft(id, iDx + xLeft(id));
  xTop(id, iDy + xTop(id));
}

function xLeft(id, iX) {
  if (typeof(id) == "object") {
    var ele = id;
  } else {
    var ele = xGetElementById(id);
  }
  if (!ele) return;
  var css=_def(ele.style);
  if (css && _def(ele.style.left) && typeof(ele.style.left) == "string") {
    if (arguments.length > 1) ele.style.left = iX + "px";
    else { iX = parseInt(ele.style.left); if (isNaN(iX)) iX = 0; }
  }
  else if (css && _def(ele.style.pixelLeft)) {
    if (arguments.length > 1) ele.style.pixelLeft = iX;
    else iX = ele.style.pixelLeft;
  }
  else if (_def(ele.left)) {
    if (arguments.length > 1) ele.left = iX;
    else iX = ele.left;
  }
  return iX;
}

function xTop(id, iY) {
  if (typeof(id) == "object") {
    var ele = id;
  } else {
    var ele = xGetElementById(id);
  }
  if (!ele) return;
  var css = _def(ele.style);
  if (css && _def(ele.style.top) && typeof(ele.style.top)=="string") {
    if (arguments.length > 1) ele.style.top = iY + "px";
    else { iY = parseInt(ele.style.top); if (isNaN(iY)) iY = 0; }
  }
  else if (css && _def(ele.style.pixelTop)) {
    if (arguments.length > 1) ele.style.pixelTop = iY;
    else iY = ele.style.pixelTop;
  }
  else if (_def(ele.top)) {
    if (arguments.length > 1) ele.top = iY;
    else iY = ele.top;
  }
  return iY;
}

function xResizeTo(id, uW, uH) {
  xClip(id, 0, xWidth(id, uW), xHeight(id, uH), 0);
}

function xResizeBy(id, iDw, iDh) {
  xClip(id, 0, xWidth(id, iDw + xWidth(id)), xHeight(id, iDh + xHeight(id)), 0);
}

function xClip(id, iTop, iRight, iBottom, iLeft) {
  var ele = xGetElementById(id);
  if (!ele) return;
  if (ele.style && _def(ele.style.clip)) ele.style.clip = "rect(" + iTop + "px " + iRight + "px " + iBottom + "px " + iLeft + "px" + ")";
  else if (document.layers) {
    ele.clip.top = iTop;
    ele.clip.right = iRight;
    ele.clip.bottom = iBottom;
    ele.clip.left = iLeft;
  }
}

function xWidth(id, uW) {
  if (typeof(id) == "object") {
    var ele = id;
  } else {
    var ele = xGetElementById(id);
  }
  if (!ele) return null;
  var css = _def(ele.style);
  if (css && _def(ele.style.width, ele.offsetWidth) && typeof(ele.style.width) == "string") {
    if (arguments.length > 1) {
      uW = Math.round(uW);
      _domSetWidth(ele, uW);
    }
    uW = ele.offsetWidth;
  }
  else if (css && _def(ele.style.pixelWidth)) {
    if (arguments.length > 1) {
      uW = Math.round(uW);
      ele.style.pixelWidth = uW;
    }
    uW = ele.style.pixelWidth;
  }
  else if (_def(ele.clip) && _def(ele.clip.right)) {
    if (arguments.length > 1) {
      uW = Math.round(uW);
      ele.clip.right = uW;
    }
    uW = ele.clip.right;
  }
  return uW;
}
  
function xHeight(id, uH) {
  if (typeof(id) == "object") {
    var ele = id;
  } else {
    var ele = xGetElementById(id);
  }
  if (!ele) return null;
  var css = _def(ele.style);
  if (css && _def(ele.style.height, ele.offsetHeight) && typeof(ele.style.height) == "string") {
    if (arguments.length > 1) {
      uH = Math.round(uH);
      _domSetHeight(ele, uH);
    }
    uH = ele.offsetHeight;
  }
  else if (css && _def(ele.style.pixelHeight)) {
    if (arguments.length > 1) {
      uH = Math.round(uH);
      ele.style.pixelHeight = uH;
    }
    uH = ele.style.pixelHeight;
  }
  else if (_def(ele.clip) && _def(ele.clip.bottom)) {
    if (arguments.length > 1) {
      uH = Math.round(uH);
      ele.clip.bottom = uH;
    }
    uH = ele.clip.bottom;
  }
  return uH;
}

function xScrollLeft() {
  var offset=0;
  if (_def(window.pageXOffset)) offset=window.pageXOffset; // gecko, nn4, opera
  else if (document.documentElement && document.documentElement.scrollLeft) offset=document.documentElement.scrollLeft; // ie6 compat mode
  else if (document.body && _def(document.body.scrollLeft)) offset=document.body.scrollLeft; // ie4up
  return offset;
}

function xScrollTop() {
  var offset=0;
  if (_def(window.pageYOffset)) offset=window.pageYOffset;
  else if (document.documentElement && document.documentElement.scrollTop) offset=document.documentElement.scrollTop;
  else if (document.body && _def(document.body.scrollTop)) offset=document.body.scrollTop;
  return offset;
}

var is_ie = navigator.userAgent.toLowerCase().indexOf('msie') != -1;

function xClientWidth() {
  var w = 0;
  if (window.opera) {
    w = window.innerWidth;
  } else if (is_ie && document.documentElement && document.documentElement.clientWidth) {
    w = document.documentElement.clientWidth; // ie6 compat mode
  } else if (document.body && document.body.clientWidth) {
    w = document.body.clientWidth; // ie4up and gecko
  } else if (_def(window.innerWidth, window.innerHeight, document.height)) {
    w = window.innerWidth; // nn4
    if (document.height > window.innerHeight) w -= 16;
  }
  return (w);
}

function xClientHeight() {
  var h=0;
  if (window.opera){h=window.innerHeight;}
  else if (is_ie && document.documentElement && document.documentElement.clientHeight) h=document.documentElement.clientHeight;
  else if (document.body && document.body.clientHeight) h=document.body.clientHeight;
  else if (_def(window.innerWidth,window.innerHeight,document.width)){
    h=window.innerHeight;
    if (document.width > window.innerWidth) h -=16;
 }
  return h;
}

// Begin comportamento menu
var iMenuBeh = 0; // 0 = sfioramento; 1 = click; 2 = click + sfioramento (come Windows);
var bMenuVol = false; // false = permanente; true = volatile;
// End comportamento menu

var iMenuTot = 1;
var bMenuAct = false;
var oListElementAct = null;
var oListElementOut = null;
var debug = "";

function k_GetXY(oMenu) { var iX = 0, iY = 0, oXY; oXY = xElementInfo(oMenu, 1); iX = oXY.left; iY = oXY.top; if (is.opera) iY = iY - 2; return { x:iX, y:iY }; }
function k_GetXYWH(oMenu) { if (!oMenu) return { x:0, y:0, w:0, h:0 }; var oXY = k_GetXY(oMenu); return { x:oXY.x, y:oXY.y, w:oMenu.offsetWidth||0, h:oMenu.offsetHeight||0 }; }
function k_MenuGetClass(oMenu, cName) { return (!oMenu || !oMenu.className) ? false : (new RegExp("\\b" + cName + "\\b")).test(oMenu.className); }
function k_MenuAddClass(oMenu, cName) { if (!oMenu) return; if (oMenu.className == null) oMenu.className = ''; return oMenu.className += (oMenu.className.length > 0 ? ' ' : '') + cName; }
function k_MenuKillClass(oMenu, cName) { if (!oMenu) return; return oMenu.className = oMenu.className.replace(RegExp("^" + cName + "\\b\\s*|\\s*\\b" + cName + "\\b",'g'),''); }

function k_MenuShowHead(e) {
		var sEvent = xEventType(e);
  if (iMenuBeh == 2 && !bMenuAct && (sEvent == "mouseover")) { return; }
//alert(xEventTag(e) + " = " + sEvent);
  var oListElement = this;
  var iClientWidth = xClientWidth();
  var iMenuDelta = 0;
  if (iMenuTot < 1 || iMenuTot > 9) return;
  k_MenuAddClass(oListElement, "active");
  if (oListElement.isTop){
    // if (sEvent == "click") { alert(oListElement.tagName + " - " + oListElement.numMenu + " = " + oListElement.numMenuItem + " - " + oListElement.numMenuItemSub + " - " + oListElement.numMenuItemAbs); }
    var oXYWH = k_GetXYWH(oListElement);
    xLeft(oListElement.sub, (oXYWH.x + (!oListElement.isHorizontal ? oXYWH.w : 0)) + "");
    xTop(oListElement.sub, (oXYWH.y + (oListElement.isHorizontal ? oXYWH.h : 0) - (oListElement.isTop ? 0 : 1)) + "");
    iMenuDelta = (xWidth(oListElement.sub) + xLeft(oListElement.sub)) - iClientWidth;
    if (iMenuDelta > 0) xLeft(oListElement.sub, (xLeft(oListElement.sub) - iMenuDelta) + "");
  } else {
    xLeft(oListElement.sub, oListElement.offsetWidth + "");
    xTop(oListElement.sub, oListElement.offsetTop + "");
    var oXYWH = k_GetXYWH(oListElement.sub);
    iMenuDelta = (oXYWH.x + (!oListElement.isHorizontal ? oXYWH.w : 0)) - iClientWidth;
    if (iMenuDelta > 0) {
      xLeft(oListElement.sub, (xLeft(oListElement.sub) - iMenuDelta) + "");
    }
  }
		if (oListElementOut) {
    xHide(oListElementOut.sub);
    k_MenuKillClass(oListElementOut, "active");
				oListElementOut = null;
		}
  xShow(oListElement.sub);
		if (iMenuBeh == 1 && iMenuBeh == 2) {
		  bMenuAct = !bMenuAct;
		} else {
			 bMenuAct = true;
		}
		oListElementAct = oListElement;
		if (sEvent == "click") { oListElementOut = oListElement; }
}

function k_MenuHideHead(e) {
		var sEvent = xEventType(e);
  if (iMenuBeh == 2 && !bMenuAct && (sEvent == "mouseout")) { return; }
  if (iMenuTot < 1 || iMenuTot > 9) return;
  oListElementOut = this;
		if (bMenuVol) {
    xHide(oListElementOut.sub);
    k_MenuKillClass(oListElementOut, "active");
				oListElementOut = null;
		}
}

function k_MenuKillHead(e) {
  var oEvent = xEvent(e);
  if (oListElementOut) {
    xHide(oListElementOut.sub);
    k_MenuKillClass(oListElementOut, "active");
    oListElementOut = null;
		}
		if (oListElementAct) {
    if (iMenuBeh != 1 || (iMenuBeh == 1 && xElementInfo(oListElementAct.sub, 0) == "hide")) {
      xHide(oListElementAct.sub);
      k_MenuKillClass(oListElementAct, "active");
      oListElementAct = null;
				}
		}
  bMenuAct = false;
}

function k_MenuInit(e) {
  var oEvent = xEvent(e);
  if (oEvent.type == "keypress" && oEvent.keyCode == 9) { k_MenuShowHead; }
  if (oEvent.type == "keypress" && oEvent.keyCode != 27) { return; }
  bMenuAct = false;
  if (iMenuTot < 1 || iMenuTot > 9) {
    iMenuTot = 0;
    return;
  }
  var sMenu;
  var iMenuItem = 0;
  var iMenuItemSub = 0;
  var iClientWidth = xClientWidth();
  for (var iMenu = 1; iMenu <= iMenuTot; iMenu++) {
    sMenu = "0" + iMenu;
    var oMenu = xGetElementById("kMenu" + sMenu);
    if (!oMenu) {
      iMenuTot = iMenu - 1;
      return;
    }
    var bMenuIsHorizontal = k_MenuGetClass(oMenu, "k_menu_orz");
    var aListElement = oMenu.getElementsByTagName("li");
    for (var i = 0, iCiclo = aListElement.length; i < iCiclo; i++){
      iMenuItem++;
      var oListElement = aListElement[i];
      var aListUnord = oListElement.getElementsByTagName("ul");
      oListElement.numMenu = iMenu;
      oListElement.numMenuItemAbs = i;
      oListElement.numMenuItem = iMenuItem;
      if (!aListUnord || aListUnord.length == 0) {
         iMenuItemSub = 0;
         oListElement.numMenuItemSub = iMenuItemSub;
         continue;
						} else {
         iMenuItemSub++;
         oListElement.numMenuItemSub = iMenuItemSub;
						}
      var oListUnord = aListUnord[0];
      oListElement.sub = oListUnord;
      oListElement.isTop = oListElement.parentNode == oMenu;
      oListElement.isHorizontal = (bMenuIsHorizontal && oListElement.isTop);
      if (iMenuBeh == 2) {
        if (oListElement.isTop) {
           oListElement.onclick = k_MenuShowHead;
           oListElement.onfocus = k_MenuShowHead;
           oListElement.onblur = k_MenuInit;
           oListElement.onmouseover = k_MenuShowHead;
           oListElement.onmouseout = k_MenuHideHead;
           oListElement.select = k_MenuShowHead;
        } else {
											oListElement.onclick = k_MenuShowHead;
           oListElement.onfocus = k_MenuShowHead;
           oListElement.onblur = k_MenuInit;
           oListElement.onmouseover = k_MenuShowHead;
           oListElement.onmouseout = k_MenuHideHead;
           oListElement.select = k_MenuShowHead;
        }
						} else if (iMenuBeh == 1) {
        if (oListElement.isTop) {
           oListElement.onfocus = k_MenuShowHead;
           oListElement.onblur = k_MenuHideHead;
        } else {
           oListElement.onfocus = k_MenuShowHead;
           oListElement.onblur = k_MenuHideHead;
        }
   		 } else {
        if (oListElement.isTop) {
           oListElement.onmouseover = k_MenuShowHead;
           oListElement.onmouseout = k_MenuHideHead;
        } else {
           oListElement.onmouseover = k_MenuShowHead;
           oListElement.onmouseout = k_MenuHideHead;
        }
		    }
      // Patch Begin - Elimina un difetto di visualizzazione su IE
      var oXYWH = k_GetXYWH(oListElement);
      xLeft(oListElement.sub, (oXYWH.x + (!oListElement.isHorizontal ? oXYWH.w : -3000)) + "");
      // Patch End - Elimina un difetto di visualizzazione su IE

      var aAnchor = oListElement.getElementsByTagName("a");
      if (oListElement.isTop) { aAnchor.onfocus = k_MenuShowHead; }
						
      if (oListElement.addedArrow || oListElement.isTop) continue;

      if (aAnchor && aAnchor.length > 0 && aAnchor[0].parentNode == oListElement) {
        aAnchor[0].innerHTML += "&nbsp;&gt;";
      } else {
        var oArrow = document.createElement("span");
        oArrow.innerHTML = "&nbsp;&rArr;";
        oListElement.insertBefore(oArrow, oListElement.childNodes[1]);
      }
      oListElement.addedArrow = true;
    }
  }
}

function k_MenuChangeOrientation(iMenu) {
  if (iMenuTot < 1 || iMenuTot > 9) {
    iMenuTot = 0;
    return;
  }
  var sMenu;
  sMenu = "0" + iMenu;
  var oMenu = document.getElementById("kMenu" + sMenu);
  if (!oMenu) {
    iMenuTot = iMenu - 1;
    return;
  }
  oMenu.className = (oMenu.className == "k_menu_vrt") ? "k_menu_orz" : "k_menu_vrt";
  k_MenuInit();
}

function k_KillCSS(){ var oCSS = document.styleSheets[0]; oCSS.disabled = !oCSS.disabled; }

xAddEventListener(window, "load", k_MenuInit, true);
xAddEventListener(window, "resize", k_MenuInit, true);
xAddEventListener(window.document, "mouseup", k_MenuKillHead, true);
xAddEventListener(window.document, "keypress", k_MenuInit, true);
