var restarea=75 //1) width of the "neutral" area in the center of the gallery in px
var maxspeed=2 //2) top moveup scroll speed in pixels. Script auto creates a range from 0 to top speed.
var startspeed=0.5
var timespeed=20

var iedom=document.all||document.getElementById

var mousescroll = new Array();

function ietruebody(){
  return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}

function getposOffset(what, offsettype){
  var totaloffset=(offsettype=="left")? what.offsetLeft: what.offsetTop;
  var parentEl=what.offsetParent;
  while (parentEl!=null){
    totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
    parentEl=parentEl.offsetParent;
  }
  return totaloffset;
}

function moveup(id){
  if (mousescroll[id]["loadedyes"]){
    mousescroll[id]["movestate"]="left"
    if (iedom){
	  if (parseInt(mousescroll[id]["cross_scroll"].style.top)<=0) {
        mousescroll[id]["cross_scroll"].style.top=parseInt(mousescroll[id]["cross_scroll"].style.top)+mousescroll[id]["actualheight"]+"px"
	  }
      mousescroll[id]["cross_scroll"].style.top=parseInt(mousescroll[id]["cross_scroll"].style.top)-mousescroll[id]["scrollspeed"]+"px"
      mousescroll[id]["cross_scroll2"].style.top=parseInt(mousescroll[id]["cross_scroll"].style.top)-mousescroll[id]["actualheight"]+"px"
    }
  }
  mousescroll[id]["toptime"]=setTimeout("moveup('"+id+"')",timespeed)
}

function movedown(id){
  if (mousescroll[id]["loadedyes"]){
    mousescroll[id]["movestate"]="right"
    if (iedom){
      if (parseInt(mousescroll[id]["cross_scroll"].style.top)>=0) {
        mousescroll[id]["cross_scroll"].style.top=parseInt(mousescroll[id]["cross_scroll"].style.top)-mousescroll[id]["actualheight"]+"px"
      }
      mousescroll[id]["cross_scroll"].style.top=parseInt(mousescroll[id]["cross_scroll"].style.top)+mousescroll[id]["scrollspeed"]+"px"
      mousescroll[id]["cross_scroll2"].style.top=parseInt(mousescroll[id]["cross_scroll"].style.top)+mousescroll[id]["actualheight"]+"px"
    }
  }
  mousescroll[id]["downtime"]=setTimeout("movedown('"+id+"')",timespeed)
}

function motionengine(e, id){

  var dsocx=(window.pageXOffset)? pageXOffset: ietruebody().scrollLeft;
  var dsocy=(window.pageYOffset)? pageYOffset : ietruebody().scrollTop;
  var curposy=window.event? event.clientY : e.clientY? e.clientY: ""
  curposy-=mousescroll[id]["mainobjoffset"]-dsocy
  var topbound=(mousescroll[id]["menuheight"]-restarea)/2
  var downbound=(mousescroll[id]["menuheight"]+restarea)/2
  if(e==-1){
	mousescroll[id]["scrollspeed"]=startspeed
	if (mousescroll[id]["downtime"]) clearTimeout(mousescroll[id]["downtime"])
	moveup(id)
  } else {
    if (curposy>downbound){
	mousescroll[id]["scrollspeed"]=(curposy-downbound)/((mousescroll[id]["menuheight"]-restarea)/2) * maxspeed
	//atx
	if(e==-1)mousescroll[id]["scrollspeed"]=1
	if (mousescroll[id]["downtime"]) clearTimeout(mousescroll[id]["downtime"])
	if (mousescroll[id]["movestate"]!="left") moveup(id)
    } else if (curposy<topbound){
	mousescroll[id]["scrollspeed"]=(topbound-curposy)/((mousescroll[id]["menuheight"]-restarea)/2) * maxspeed
	if(e==-1)mousescroll[id]["scrollspeed"]=1
	if (mousescroll[id]["toptime"]) clearTimeout(mousescroll[id]["toptime"])
	if (mousescroll[id]["movestate"]!="right") movedown(id)
   } else
	mousescroll[id]["scrollspeed"]=0;
  }
}

function contains_ns6(a, b) {
  while (b.parentNode)
    if ((b = b.parentNode) == a)
      return true;
  return false;
}

function stopmotion(e, id){
  if ((window.event&&!mousescroll[id]["crossmain"].contains(event.toElement)) || (e && e.currentTarget && e.currentTarget!= e.relatedTarget && !contains_ns6(e.currentTarget, e.relatedTarget))){
    if (mousescroll[id]["toptime"]) clearTimeout(mousescroll[id]["toptime"])
    if (mousescroll[id]["downtime"]) clearTimeout(mousescroll[id]["downtime"])
    mousescroll[id]["movestate"]=""
  }
}

function fillup(id){
  if (iedom){
    mousescroll[id]["crossmain"]=document.getElementById? document.getElementById(id) : document.all.id;
    mousescroll[id]["menuheight"]=parseInt(mousescroll[id]["crossmain"].style.height);
    mousescroll[id]["mainobjoffset"]=getposOffset(mousescroll[id]["crossmain"], "top");

    mousescroll[id]["cross_scroll"]=document.getElementById? document.getElementById(id+"_1") : eval("document.all."+id+"_2");
    mousescroll[id]["actualheight"]=document.all? eval(id+"_first.offsetHeight") : document.getElementById(id+"_first").offsetHeight;

/*	cross_scroll2=document.createElement("div");
	cross_scroll2.setAttribute("id",id+"_2");
	crossmain.appendChild(cross_scroll2);

	cross_scroll2=document.getElementById? document.getElementById(id+"_2") : eval("document.all."+id+"_2");

	cross_scroll2.style.position="absolute";
	cross_scroll2.style.left="0";
	cross_scroll2.style.top="0";
	cross_scroll2.style.whiteSpace="nowrap";

    cross_scroll2.innerHTML = cross_scroll.innerHTML;
*/

    mousescroll[id]["cross_scroll2"]=document.getElementById? document.getElementById(id+"_2") : eval("document.all."+id+"_2");
    //atx
    motionengine(-1, id)

    mousescroll[id]["crossmain"].onmousemove=function(e){
      motionengine(e, id)
    }

    mousescroll[id]["crossmain"].onmouseout=function(e){
      //atx
      //stopmotion(e)
    }
  }
  mousescroll[id]["loadedyes"]=1
}
function mousescrollinit(){
	var tags=document.getElementsByTagName("div");
	for(i=0;i<tags.length;i++){
		tag=tags[i];
		if(tag.className=="mousescroll"){
			mousescroll[tag.id] = new Array();
			mousescroll[tag.id]["scrollspeed"] = 0;
			mousescroll[tag.id]["movestate"] = '';
			mousescroll[tag.id]["actualheight"] = '';
			mousescroll[tag.id]["cross_scroll"] = 0;
			mousescroll[tag.id]["cross_scroll2"] = 0;
			mousescroll[tag.id]["ns_scroll"] = 0;
			mousescroll[tag.id]["crossmain"] = 0;
			mousescroll[tag.id]["loadedyes"] = 0;
			mousescroll[tag.id]["menuheight"] = 0;
			mousescroll[tag.id]["mainobjoffset"] = 0;
			mousescroll[tag.id]["toptime"] = false;
			mousescroll[tag.id]["downtime"] = false;
			fillup(tag.id);
		}
	}
}
addEvent(window, 'load', mousescrollinit);
//window.onload=fillup