var scroll_timer;
var scrolling = false;

function scroll_to_top(scrolled){ 
	document.getElementById(scrolled).scrollTop = 0; 
} 

function scrollDiv(step, scrolled){ 
	document.getElementById(scrolled).scrollTop+=step;
	scrolling = true;
	if (document.getElementById(scrolled + '_scroll_td')) {
		reset_point(scrolled);
	}
	scroll_timer=setTimeout("scrollDiv(" + step + ", '" + scrolled + "')",10);
} 

function reset_point(scrolled) {
	if (document.getElementById(scrolled).scrollTop == 0) {
		document.getElementById(scrolled + '_scroll').style.top = "0px";
	} else {
		height = document.getElementById(scrolled + '_scroll_td').offsetHeight - 8;
	
		document.getElementById(scrolled + '_scroll').style.top = Math.round((document.getElementById(scrolled).scrollTop * height)/(document.getElementById(scrolled).scrollHeight - document.getElementById(scrolled).offsetHeight)) + "px";
	}	
}

function stop_scroll() {
	if (scrolling)	{
		scrolling = false;		
		clearTimeout(scroll_timer);
	}	
}

function onLoad (scrolleds) {
	for (i=0; i < scrolleds.length; i++) {
		scrolled = scrolleds[i];
		if (document.getElementById(scrolled + '_scroller') != undefined && document.getElementById(scrolled).offsetHeight >= document.getElementById(scrolled).scrollHeight) {	
			document.getElementById(scrolled + '_scroller').style.visibility = 'hidden';
			unhookEvent(scrolled, 'mousewheel', mouseWheel);
		} else {	
			document.getElementById(scrolled + '_scroller').style.visibility = '';
			scroll_to_top(scrolled);
			hookEvent(scrolled, 'mousewheel', mouseWheel);
		}		
				
	}
}
function changeScrollUp(scrolled) {
	if(document.getElementById(scrolled).offsetHeight < document.getElementById(scrolled).scrollHeight) {
		//document.getElementById(scroller + '_up').src = menu_images['up'][1].src;
	}
}	
function changeScrollDown(scrolled) {
	if(document.getElementById(scrolled).offsetHeight < document.getElementById(scrolled).scrollHeight) { 
		//document.getElementById('down').src = menu_images['down'][1].src;
	}
}

//Drag and Drop script - http://www.btinternet.com/~kurt.grigg/javascript
//Stop Opera selecting anything whilst dragging.
if (window.opera){
	//document.getElementById("test").innerHTML = "<input type='hidden' id='Q' value=' '>";
}

var n = 500;
var dragok = false;
var y,x,d,dy,dx;

function move(e){
	if (!e) e = window.event;
	if (dragok){
		 //d.style.left = dx + e.clientX - x + "px";
		 newY = dy + e.clientY - y;
		 scrolled = d.id.substring(0, d.id.lastIndexOf('_'));
		 height = document.getElementById(scrolled + '_scroll_td').offsetHeight - 8;
		 newY = Math.min(height,Math.max(0,newY))
		 d.style.top  =  Math.round(newY) + "px";
		 (document.getElementById(scrolled).scrollTop = (newY * (document.getElementById(scrolled).scrollHeight - document.getElementById(scrolled).offsetHeight))/height) + "px";   	
		 return false;		  
	 }
}

function down(e){
	if (!e) e = window.event;
		
	var temp = (typeof e.target != "undefined")?e.target:e.srcElement;
	if (temp.tagName != "HTML"|"BODY" && temp.className != "dragclass"){
		temp = (typeof temp.parentNode != "undefined")?temp.parentNode:temp.parentElement;
	}
	
	
	if (temp.className == "dragclass"){
		
		dragok = true;
		temp.style.zIndex = n++;
		d = temp;
		dx = parseInt(temp.style.left+0);
		dy = parseInt(temp.style.top+0);
		x = e.clientX;
		y = e.clientY; 
		
		document.onmousemove = move;		
		 
		return false;
	}
}

function up(){
	dragok = false;
	document.onmousemove = null; 	
}

function click(e){
	if (!e) e = window.event;
	var temp = (typeof e.target != "undefined")?e.target:e.srcElement;
	if (temp.tagName != "HTML"|"BODY" && temp.className != "scroll_td"){
	 	temp = (typeof temp.parentNode != "undefined")?temp.parentNode:temp.parentElement;
	}
	if (temp.className == "scroll_td"){ 
		d = temp.firstChild;
		dx = parseInt(temp.style.left+0);
		dy = parseInt(temp.style.top+0);
		x = e.clientX;
		y = e.clientY;
		 
		scrollXY = getScrollXY(); 
		newY = (scrollXY[1] + e.clientY) - Position.get (temp).top - 4;
		scrolled = d.id.substring(0, d.id.lastIndexOf('_'));
		height = document.getElementById(scrolled + '_scroll_td').offsetHeight - 8;
		newY = Math.min(height,Math.max(0,newY))
		d.style.top  =  Math.round(newY) + "px";
		  
		(document.getElementById(scrolled).scrollTop = (newY * (document.getElementById(scrolled).scrollHeight - document.getElementById(scrolled).offsetHeight))/height) + "px";   	
		 
		return false;
	}
}
document.onmousedown = down;
document.onmouseup = up;
document.onclick = click;

// mouse wheel

function hookEvent(element, eventName, callback)
{
  if(typeof(element) == "string")
    element = document.getElementById(element);
  if(element == null)
    return;
  if(element.addEventListener)
  {
    if(eventName == 'mousewheel')
    {
      element.addEventListener('DOMMouseScroll',
        callback, false); 
    }
    element.addEventListener(eventName, callback, false);
  }
  else if(element.attachEvent) {
  	call = function() { callback.call(element);};
    element.attachEvent("on" + eventName, call);
   }
}

function unhookEvent(element, eventName, callback)
{
  if(typeof(element) == "string")
    element = document.getElementById(element);
  if(element == null)
    return;
  if(element.removeEventListener)
  {
    if(eventName == 'mousewheel')
    {
      element.removeEventListener('DOMMouseScroll',
        callback, false); 
    }
    element.removeEventListener(eventName, callback, false);
  }
  else if(element.detachEvent) {
  	call = function() { callback.call(element);};
    element.detachEvent("on" + eventName, call);
  }
}

function cancelEvent(e)
{
  e = e ? e : window.event;
  if(e.stopPropagation)
    e.stopPropagation();
  if(e.preventDefault)
    e.preventDefault();
  e.cancelBubble = true;
  e.cancel = true;
  e.returnValue = false;
  return false;
}

function mouseWheel(e)
{
	e = e ? e : window.event;
	var wheelData = e.detail ? e.detail * -1 : e.wheelDelta / 40;
	var temp = this; //(typeof e.currentTarget != "undefined")? e.currentTarget : ((typeof e.target != "undefined") ? e.target : e.srcElement);
	//document.getElementById("test").innerHTML = temp.className;
	//document.getElementById("test").style.display = "block;";
	// bubble
	if (temp.tagName != "HTML"|"BODY" && temp.className != "scrollclass"){
		temp = (typeof temp.parentNode != "undefined")?temp.parentNode:temp.parentElement;
	}
	//document.getElementById("test").innerHTML += this.className;
	
	//document.getElementById("test").innerHTML = temp.id;
	if (temp.className == "scrollclass"){ 
		  scrollDiv(10*-wheelData, temp.id);
		  stop_scroll();
		  return cancelEvent(e);
	}
}

function getScrollXY() {
	  var scrOfX = 0, scrOfY = 0;
	  if( typeof( window.pageYOffset ) == 'number' ) {
	    //Netscape compliant
	    scrOfY = window.pageYOffset;
	    scrOfX = window.pageXOffset;
	  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
	    //DOM compliant
	    scrOfY = document.body.scrollTop;
	    scrOfX = document.body.scrollLeft;
	  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
	    //IE6 standards compliant mode
	    scrOfY = document.documentElement.scrollTop;
	    scrOfX = document.documentElement.scrollLeft;
	  }
	  return [ scrOfX, scrOfY ];
	}
