var curEl = null 

var scrollTimerId;
var scrollTimerDiv;
var scrollTimerPercentX;
var scrollTimerPercentY;
var scrollTimerScrollBarDiv;
var undefined;
 

//==========================================================================
//= 
//==========================================================================
function getScrollDiv(divID) {
   var d= document.getElementById(divID);
 return d;
}

//==========================================================================
//= 
//==========================================================================
function roundToInt(value, direction) {
  if(direction>0) {
    return Math.ceil(value);
  } 
  return Math.floor(value);
}

//==========================================================================
//= 
//==========================================================================
function scrollToFraction(divID, percentX, percentY) {
   var sd= document.getElementById(divID);

   var h= sd.offsetHeight;
   var w= sd.offsetWidth;
   var ph= sd.parentNode.offsetHeight;
   var pw= sd.parentNode.offsetWidth;

   if(isMacIE50) {
      h= sd.scrollHeight;
      w= sd.scrollWidth;
   }

  ph= sd.parentNode.offsetHeight;
  pw= sd.parentNode.offsetWidth;

   // devo determinare la direzione di scroll
   // perche' devo arrotondare verso il basso
   // o verso l'alto a seconda dei casi
   var i= toInt(sd.style.marginTop);
   var curPercentY=  normalizeToRange( (- i* 100 / (h-ph) ), 0 ,100, 0);
   var direction= curPercentY - percentY;
   

   if(h>ph) {
      sd.style.marginTop = roundToInt ( -((h-ph)*percentY)/100, direction);
   }
   if(w>pw) {
      sd.style.marginLeft = -((w-pw)*percentX)/100;
   }
   sd.offsetParent.width= w;
}

//==========================================================================
//= 
//==========================================================================
function normalizeToRange(p, minValue, maxValue, defaultValue) {
 if(isNaN(p)) {
 	return defaultValue;
 } else if(p<minValue) {
   return minValue;
 } else if(p>maxValue) {
    return maxValue;
 }
  return p;
}

//==========================================================================
//= 
//==========================================================================
function scrollRelativeDiv(divID, percentX, percentY, scrollBarDiv) {

   var sd= document.getElementById(divID);

   var h= sd.offsetHeight;
   var w= sd.offsetWidth;
 
   var ph= sd.parentNode.offsetHeight;
   var pw= sd.parentNode.offsetWidth;
   	

// controllare mac 
   if(isMacIE50) {
      h= sd.scrollHeight;
      w= sd.scrollWidth;
   }

  ph= sd.parentNode.offsetHeight;
  pw= sd.parentNode.offsetWidth;
  
   var i= toInt(sd.style.marginTop);

   var newPercentY=  normalizeToRange( (- i* 100 / (h-ph) )-percentY , 0 ,100, -percentY);

   i= toInt(sd.style.marginLeft);
   var newPercentX=  normalizeToRange( (- i* 100 / (w-pw) )-percentX, 0, 100, -percentX);

   scrollToFraction(divID, newPercentX, newPercentY);
   setScrollHandlePosition(scrollBarDiv, newPercentX, newPercentY); 
}


//==========================================================================
//= 
//==========================================================================
function scrollPixelDiv(divID, deltaX, deltaY, scrollBarDiv) {

   var sd= document.getElementById(divID);

   var h= sd.offsetHeight;
   var w= sd.offsetWidth;
 
   var ph= sd.parentNode.offsetHeight;
   var pw= sd.parentNode.offsetWidth;


// controllare mac 
   if(isMacIE50) {
      h= sd.scrollHeight;
      w= sd.scrollWidth;
   }

  ph= sd.parentNode.offsetHeight;
  pw= sd.parentNode.offsetWidth;
  
   var i= toInt(sd.style.marginTop) +deltaY ;

   var newPercentY=  normalizeToRange( (- i* 100 / (h-ph) ) , 0 ,100, 0);

   i= toInt(sd.style.marginLeft) +deltaX;
   var newPercentX=  normalizeToRange( (- i* 100 / (w-pw) ), 0, 100, 0);
 
   scrollToFraction(divID, newPercentX, newPercentY);
   setScrollHandlePosition(scrollBarDiv, newPercentX, newPercentY); 
}


//==========================================================================
//= 
//==========================================================================
function toInt(s) {
 var i=parseInt(s);
 if (isNaN(i)) {
 return 0;
 } else {
 return i; 
 }
}

//==========================================================================
//= 
//==========================================================================
function doMouseMove() {
     var evt;
 var src;
 if(isNS) {
 evt=doMouseMove.arguments[0];
 src= evt.target;
 } else {
 evt=event;
 src= evt.srcElement;
 }
 
 if (curEl != null) {
 if(isNS) {
   newleft= evt.pageX + document.body.scrollLeft - curEl.minX;
   newtop= evt.pageY + document.body.scrollTop- curEl.minY;
 } else {
    newleft= event.clientX + document.body.scrollLeft - curEl.minX; 
    newtop = event.clientY + document.body.scrollTop - curEl.minY; 
 }
 
 newleft=  normalizeToRange(newleft, 0, curEl.maxX, 0);
 newtop=  normalizeToRange(newtop, 0, curEl.maxY, 0);

 var percentX= 0;
 var percentY= 0;
 
 if(curEl.maxY>0) {
    percentY= 100*newtop/curEl.maxY;
 }
 if(curEl.maxX>0) {
   percentX= 100*newleft/curEl.maxX;
 }

 scrollToFraction(curEl.scrollTarget, percentX, percentY);
 curEl.style.left = newleft
 curEl.style.top = newtop
 return false;
 
 }
}

//==========================================================================
//= 
//==========================================================================
function setScrollHandlePosition(handlerName, percentX, percentY) {
var h= document.getElementById(handlerName);
initScrollHandler(handlerName);

 if (h != null) {
    var newleft= h.maxX*percentX/100;
    var newtop = h.maxY*percentY/100;
    h.style.left = newleft
    h.style.top = newtop
    return false;
 }
}

//==========================================================================
//= 
//==========================================================================
function doMouseDown(e) {
 var evt;
 var src;
 if(isNS) {
    evt=e; 
    src= evt.target;
 } else {
    evt=event;
    src= evt.srcElement;
 }

 if ( src.id && src.id == "arrowDown" ) {
   scrollRelativeDiv('internalDiv',0,-20,'vscrollHandlerDiv');
   return; 	
}
 if ( src.id && src.id == "arrowUp" ) {
   scrollRelativeDiv('internalDiv',0,20,'vscrollHandlerDiv');
   return; 	
}
 var isScrollHanlder= false;
 var scrollTarget;
 if(isNS && (!(undefined===src.attributes.scrollTarget)) ) {
    scrollTarget= src.attributes["scrollTarget"].value;
 } else {
    scrollTarget= src.scrollTarget;
 }
 
 if(!(undefined===scrollTarget)) {
    curEl = src.offsetParent;
    curEl.style._zIndex = curEl.style.zIndex
    curEl.style.zIndex = 100
    initScrollHandler(curEl.id);
    return false;
 }
 if(isNS) {
    return routeEvent(evt);
 }
}

//==========================================================================
//= 
//==========================================================================
function initScrollHandler(handlerName) {
 
 if ( ( undefined === handlerName ) || ( typeof handlerName != "string" ) ) return;

 var handler= document.getElementById(handlerName);
 var scrollTarget;
 var hheight;
 var hwidth;
 if(isNS && !(undefined===handler.attributes.scrollTarget) ) {
    scrollTarget= handler.attributes["scrollTarget"].value;
    hheight= toInt(handler.attributes["handlerHeight"].value);
    hwidth= toInt(handler.attributes["handlerWidth"].value);
 } else {
    scrollTarget= handler.scrollTarget;
    hheight= toInt(handler.handlerHeight);
    hwidth= toInt(handler.handlerWidth);
 }

 if(!(undefined===scrollTarget)) {
    var h=handler;
    if(undefined===h.minX) {
       var pst= h.parentNode.style;
       h.minX= h.offsetLeft;
       h.maxX= toInt(pst.width) - toInt(h.style.width) + hwidth;
       h.minY= h.offsetTop ;
       h.areaHeight= toInt(h.style.height);
       h.maxY= toInt(pst.height) - h.areaHeight + hheight;
       h.scrollTarget= scrollTarget;
      handler.scrollTarget= scrollTarget;
    }
 }
}

//==========================================================================
//= 
//==========================================================================
function doMouseUp(e) {
 if (curEl) 
    curEl.style.zIndex = curEl.style._zIndex
    curEl=null
 if(isNS) {
    return routeEvent(e);
 }
}



//==========================================================================
//= 
//==========================================================================
function doTimeTick(a) {
 scrollPixelDiv(scrollTimerDiv,scrollTimerPercentX,scrollTimerPercentY,scrollTimerScrollBarDiv);
// scrollRelativeDiv(scrollTimerDiv,scrollTimerPercentX,scrollTimerPercentY,scrollTimerScrollBarDiv);
}

//==========================================================================
//= 
//==========================================================================
function startTimeTick(divID, percentX, percentY, scrollBarDiv, millisec) {
 scrollTimerDiv= divID;
 scrollTimerPercentX= percentX;
 scrollTimerPercentY= percentY;
 scrollTimerScrollBarDiv= scrollBarDiv;
 scrollTimerId= window.setInterval(doTimeTick,millisec);
}

//==========================================================================
//= 
//==========================================================================
function stopTimeTick() {
 window.clearInterval(scrollTimerId);
}

document.onmousedown = doMouseDown
document.onmousemove = doMouseMove
document.onmouseup = doMouseUp


window.onerror=myerror;
function myerror(){ 
 return true;
}


//Manage scrollbar

var scrollable = true;
if ( window.name &&  window.name == "printWindow" ) {
	scrollable = false;
}

function scrollbarStep1(ww,hh) {

	scrollbarStep1N(ww,hh,'externalDivName','internalDivName');
}

function scrollbarStep1N(ww,hh,externalDivName,internalDivName) {
	

	if (scrollable) {
		document.write("<div id=\""+externalDivName+"\"  style=\"width:"+ww+"px; height:"+hh+"px; border: thin dotted white;overflow: hidden\">");
		if  ( isMacIE50 ) {
		   document.write("<div id=\""+internalDivName+"\" style=\"position:absolute; background-color:transparent\">");
		} else {
		   document.write("<div id=\""+internalDivName+"\" style=\"background-color:transparent\">");
		}
		if ( window.name &&  (window.name == "printWindow" || window.name == "printMacWindow" ) ) {
			document.getElementById(externalDivName).style.overflow = 'visible';
		}
	
	}
	
}

function scrollbarStep2() {
	scrollbarStep2N('externalDivName');
}

function scrollbarStep2N(externalDivName) {

	

	

	if (scrollable) {
		document.write("</div>\n</div>\n");
	}

	if(!isNS){
		document.write("<script language=\"javascript\">\n");
		document.write("document.getElementById('"+externalDivName+"').style.border = \"none\"");
		document.write("</script>\n");
	}
	

	
}
function scrollbarStep3(ww,hh,urlUpArrow,urlUpArrowW,urlUpArrowH,urlDownArrow,urlDownArrowW,urlDownArrowH,urlCursor,urlCursorW,urlCursorH,urlVerticalRow) {
	scrollbarStep3N(ww,hh,urlUpArrow,urlUpArrowW,urlUpArrowH,urlDownArrow,urlDownArrowW,urlDownArrowH,urlCursor,urlCursorW,urlCursorH,urlVerticalRow,'internalDivName','arrowUpName','arrowDownName','vScrollDivName','vscrollHandlerName','vscrollHandlerDivName');

}

function scrollbarStep3N(ww,hh,urlUpArrow,urlUpArrowW,urlUpArrowH,urlDownArrow,urlDownArrowW,urlDownArrowH,urlCursor,urlCursorW,urlCursorH,urlVerticalRow,internalDivName,arrowUpName,arrowDownName,vScrollDivName,vscrollHandlerName,vscrollHandlerDivName) {
	

	if ( scrollable ) {				   
   
		var htmlCode = "<img id=\""+arrowUpName+"\" src=\""+ urlUpArrow +"\" border=\"0\"  width=\""+urlUpArrowW+"\" height=\""+urlUpArrowH+"\" style=\"cursor: pointer;\" onMouseOver=\"startTimeTick('"+internalDivName+"',0,1,'"+vscrollHandlerDivName+"', 100)\" onMouseOut=\"stopTimeTick()\" onMouseDown=\"doArrowMove(20,'"+internalDivName+"','"+vscrollHandlerDivName+"')\"><div id=\""+vScrollDivName+"\" ";
		htmlCode = htmlCode + "style=\"width:"+ww+"px;height:"+hh+"px;z-index:1; border:0;background-image: url("+urlVerticalRow+");background-repeat:repeat-y;background-position:48%\">";
		document.write(htmlCode);
		
	
	     	document.write("<div id=\""+vscrollHandlerDivName+"\""); 

		document.write("style=\"position:relative;top:0px;left:0px;width:"+ww+"px;height:"+urlCursorH+"px;z-index:2\""); 

		document.write("scrollTarget=\""+internalDivName+"\"");
	  	document.write("handlerHeight=\"0\"");
		document.write("handlerWidth=\"0\">");
		document.write("<center>");

	    	document.write("<img src=\""+urlCursor+"\" name=\""+vscrollHandlerName+"\" scrollTarget=\""+internalDivName+"\" border=\"0\" width=\""+urlCursorW+"\" height=\""+urlCursorH+"\" style=\"cursor: pointer;\">");
	    
		document.write("</center>");
		document.write("</div>");
		document.write("</div>");
	   	document.write("<img id=\""+arrowDownName+"\" src=\""+urlDownArrow+"\" border=\"0\"  width=\""+urlDownArrowW+"\" height=\""+urlDownArrowH+"\"  style=\"cursor: pointer;\" onMouseOver=\"startTimeTick('"+internalDivName+"',0,-1,'"+vscrollHandlerDivName+"', 100)\" onMouseOut=\"stopTimeTick()\"  onMouseDown=\"doArrowMove(-20,'"+internalDivName+"','"+vscrollHandlerDivName+"')\" >");
	   	
   	}	
	
}


//==========================================================================
//= 
//==========================================================================
function doArrowMove(val,internalDivName,vscrollHandlerDivName) {

   scrollRelativeDiv(internalDivName,0,val,vscrollHandlerDivName);

}

function scrollbarStep3Old(ww,hh,urlUpArrow,urlUpArrowW,urlUpArrowH,urlDownArrow,urlDownArrowW,urlDownArrowH,urlCursor,urlCursorW,urlCursorH,urlVerticalRow) {

	if ( scrollable ) {				   
   
		var htmlCode = "<img id=\"arrowUp\" src=\""+ urlUpArrow +"\" border=\"0\"  width=\""+urlUpArrowW+"\" height=\""+urlUpArrowH+"\" style=\"cursor: pointer;\" onMouseOver=\"startTimeTick('internalDiv',0,1,'vscrollHandlerDiv', 100)\" onMouseOut=\"stopTimeTick()\"><div id=\"vscrollBar\" ";
		if  ( isMacIE50 ) {
		   htmlCode = htmlCode + "style=\"overflow:hidden; margin-left:13;";
		} else {
		   htmlCode = htmlCode + "style=\"";
		}
		htmlCode = htmlCode + "width:"+ww+"px;height:"+hh+"px;z-index:1; border:0;background-image: url("+urlVerticalRow+");background-repeat:repeat-y;background-position:48%\">";
		document.write(htmlCode);
	
	     	document.write("<div id=\"vscrollHandlerDiv\""); 
		document.write("style=\"position:relative;top:0px;left:0px;width:"+ww+"px;height:"+urlCursorH+"px;z-index:2\""); 
		document.write("scrollTarget=\"internalDiv\"");
	  	document.write("handlerHeight=\"0\"");
		document.write("handlerWidth=\"0\">");
		   
		document.write("<center>");
	    	document.write("<img src=\""+urlCursor+"\" name=\"vscrollHandler\" scrollTarget=\"internalDiv\" border=\"0\" width=\""+urlCursorW+"\" height=\""+urlCursorH+"\" style=\"cursor: pointer;\">");
		document.write("</center>");
		document.write("</div>");
		document.write("</div>");
	   	document.write("<img id=\"arrowDown\" src=\""+urlDownArrow+"\" border=\"0\"  width=\""+urlDownArrowW+"\" height=\""+urlDownArrowH+"\"  style=\"cursor: pointer;\" onMouseOver=\"startTimeTick('internalDiv',0,-1,'vscrollHandlerDiv', 100)\" onMouseOut=\"stopTimeTick()\">");
	   	
   	}	
	
}

