/*
Copyright 2007 www.inburo.ru
Scripted by day(d a y[d0ggy]i n b u r o     r_u)

USAGE:
sIdents - string with objects identificators, separated by `;` symbol
fPoint - first point of movement(relative)
sPoint - last point of movement(so sPoint-fPoint will be amplitude)(relative)
mSpeed - speed of movement
tDelay - min execution time(total execution time depends on mouse movements)
*/
//-------------------------------------------------------
var sIdents = "i;n;tl;el;ll;lr;er;c;tr;b;u;r;o";
var fPoint = 0;
var sPoint = 2;
var mSpeed = 50;//less value = more speed
var tDelay = 1000;//in ms
//-------------------------------------------------------
var prevX=0;
var prevY=0;
var lr=0;
var rst=false;

function movehook(e)
{
var ex,ey;
if (e) if (!e.pageX) ex=event.x; else ex=e.pageX; else ex=event.x;
if (e) if (!e.pageY) ey=event.y; else ey=e.pageY; else ey = event.y;
if (prevX==ex && prevY==ey) return;
prevX = ex; prevY = ey;
var date = new Date();
lr = date.getTime();
tm=true;
}

document.onmousemove = movehook;
var idents = new Array();
var direct = new Array();
var arcoords = new Array();
var id_cache = new Array();
var min_c = 0;
var max_c = 0;

function initprocess(str,max,min)
{
var items = str.split(";");
var t=true;
var i;
max_c = max;
min_c = min;
for (i=0;i<items.length;i++)
{
var div_id = document.getElementById(items[i]);
idents[i]=items[i];
id_cache[items[i]] = div_id;
arcoords[items[i]] = parseInt(div_id.style.top);
direct[items[i]]=t;
t=!t;
}
initmove(max,min);
}
movediv(true);
function initmove(maxc,minc)
{
var div_id,i;
for (i=0;i<idents.length;i++)
{
tpx = true; tpn = true; 
div_id = id_cache[idents[i]];
if (maxc > 0)
	if (!direct[idents[i]])
		div_id.style.top = parseInt(div_id.style.top)+1;

if (minc > 0)	
	if (direct[idents[i]])
		div_id.style.top = parseInt(div_id.style.top)+1;
	
}
if (minc>0) minc--; if (maxc>0) maxc--;
if (minc>0 || maxc>0) setTimeout("initmove("+maxc+","+minc+")",mSpeed); else movediv(false);
}

function return_pos()
{
var div_id,i,coord,cargo;
rst=true;
cargo = true;
for (i=0;i<idents.length;i++)
{
div_id = id_cache[idents[i]];
coord = parseInt(div_id.style.top);
if (coord>arcoords[idents[i]])
{
cargo=false;
div_id.style.top=coord-1;
}
if (coord<arcoords[idents[i]])
{
cargo=false;
div_id.style.top=coord+1;
}
}
if (cargo) {rst=false;return;}
setTimeout("return_pos()",mSpeed);
}

function reset_pos()
{
return_pos();
}

function movediv(first)
{
var i,div_id,coords;
if (rst) {setTimeout('movediv(true)',mSpeed);return;}
var date = new Date();
if (date.getTime()>lr+tDelay)
	{
	rst=true;
	reset_pos();
	setTimeout('movediv(true)',mSpeed);
	return;
	}
if (first) {initprocess(sIdents,sPoint,fPoint);return;}

for (i=0;i<idents.length;i++)
{
	div_id = id_cache[idents[i]];
	coords = parseInt(div_id.style.top)-arcoords[idents[i]];
	if (direct[idents[i]]==true)
		div_id.style.top = (coords+arcoords[idents[i]])-1;
	else
		div_id.style.top = (coords+arcoords[idents[i]])+1;
	if ((coords) <= min_c && direct[idents[i]]==true) direct[idents[i]]=false;
	if ((coords) >= max_c && direct[idents[i]]==false) direct[idents[i]]=true;
}
setTimeout('movediv(false)',mSpeed);
}
