//glimmer_move.js
//Author: Joshua Birk
//current modDate: Aug,13,1999

//glimmer.js mod to move layer objects around the window

//init function for this mod.  goes before initAll() is called.
function initGmove() {
	addMod("north",layer_north);
	addMod("south",layer_south);
	addMod("west",layer_west);
	addMod("east",layer_east);
	addMod("northeast",layer_north);
	addMod("southeast",layer_south);
	addMod("southwest",layer_west);
	addMod("northwest",layer_east);
	addMod("move",layer_move);
	addMod("bounce",layer_bounce);
	addMod("moveRandom",layer_moveRandom);
	addMod("followPath",layer_followPath);
	addMod("draggable",false);
	addMod("path","new Array");
	}


//base movement functions, move the entire layer in the appropriate direction
function layer_north(distance, speed, codette) {
	//alert(codette);
	if (distance < speed){speed = distance;}
	xD = parseInt(this.top);
	xD = xD - speed;
	this.layer.top = xD;
	this.refresh();
	distance = distance - speed;
	if (distance > 0) {
		//alert(codette);
		setcodette = this.obj_name+'.north('+distance+','+speed+',"'+codette+'")';
		setTimeout(setcodette,speed);
		}
	else {
		if (codette){runMe(codette);}
		}	
	}


function layer_south(distance, speed, codette) {
	if (distance < speed){speed = distance;}
	xD = parseInt(this.top);
	xD = xD + speed;
	this.layer.top = xD;
	this.refresh();
	distance = distance - speed;
	if (distance > 0) {
		setcodette = this.obj_name+'.south('+distance+','+speed+',"'+codette+'")';
		setTimeout(setcodette,speed);
		}
	else {
		if (codette){runMe(codette);}
		}	
	}
	
function layer_east(distance, speed, codette) {
	if (distance < speed){speed = distance;}
	yD = parseInt(this.left);
	yD = yD + speed;
	this.layer.left = yD;
	this.refresh();
	distance = distance - speed;
	if (distance > 0) {
		setcodette = this.obj_name+'.east('+distance+','+speed+',"'+codette+'")';
		setTimeout(setcodette,speed);
		}
	else {
		if (codette){runMe(codette);}
		}
	}
	
	
function layer_west(distance, speed, codette) {
	if (distance < speed){speed = distance;}
	yD = parseInt(this.left);
	yD = yD - speed;
	this.layer.left = yD;
	this.refresh()
	distance = distance - speed;
	if (distance > 0) {;
		setcodette = this.obj_name+'.west('+distance+','+speed+',"'+codette+'")';
		setTimeout(setcodette,speed);
		}
	else {
		if (codette){runMe(codette);}
		}
	}
	

function layer_northeast(distance,speed,codette) {
	this.north(distance,speed,end);
	this.east(distance,speed,codette);
	}

function layer_northwest(distance,speed,codette) {
	this.north(distance,speed,end);
	this.west(distance,speed,codette);
	}
	
function layer_southeast(distance,speed,codette) {
	this.south(distance,speed,end);
	this.east(distance,speed,codette);
	}
	
function layer_southwest(distance,speed,codette) {
	this.south(distance,speed,end);
	this.west(distance,speed,codette);
	}
	
//move layer to x,y without hitting any points in between
function layer_bounce(top,left,codette){
	this.layer.top = top;
	this.layer.left = left;
	this.refresh();
	if (codette){runMe(codette);}
	}

//move the layer to x,y hitting points in between
function layer_move(top,left,codette){
	this.locked = true;
	xNow = parseInt(this.layer.left);
	yNow = parseInt(this.layer.top);
	xDistance = left - xNow;
	yDistance = top - yNow;
	if (xDistance > 0) {
		if(xDistance < this.speed) {xStep = xDistance;}
		else{xStep = this.speed;}
		}
	else {
		if((xDistance * -1) < this.speed) {xStep = xDistance;}
		else{xStep = this.speed * -1;}
		}
	if (yDistance > 0) {
		if(yDistance < this.speed) {yStep = yDistance;}
		else{yStep = this.speed;}
		}
	else {
		if((yDistance * -1) < this.speed) {yStep = yDistance;}
		else{yStep = this.speed * -1;}
		}
	if (parseInt(this.layer.top) != top || parseInt(this.layer.left) != left) {
		this.layer.top = xNow + xStep;
		this.layer.left = yNow + yStep;
		}
	if (parseInt(this.layer.top) != top && parseInt(this.layer.left) != left) {
		setcodette = this.obj_name+'.move('+top+','+left+',"'+codette+'")';
		setTimeout(setcodette,this.speed);
		}
	else {
		this.locked = false;
		if (codette){runMe(codette);}
		}
	}

	
//trick function to randomly move the layer.  Not terribly useful and
//is a huge CPU hog.
function layer_moveRandom(topX,topY,codette) {
	x = Math.random();
	x = x * topX;
	x = Math.round(x);
	y = Math.random();
	y = y * topY;
	y = Math.round(y);
	this.move(x,y,codette);
	}
	
function dragOff() {
	if(current_draggable.draggable){current_draggable.draggable=false;}
	return true;
	}
	
function dragLayer(event) {
	if(current_draggable.draggable) {
		if(document.layers){thisY=event.pageY;thisX=event.pageX;}
		if(document.all){thisY=window.event.clientY;thisX=window.event.clientX;}
		current_draggable.bounce(parseInt(thisY) - 1,parseInt(thisX) - 1);
        window.status = thisY;
		return false;
		}
	else {return true;}
	}
	
function setDrag(layer) {
	current_draggable = layer;
	layer.draggable = true;
	return false;
	}
	
function layer_followPath(y,x,codette) {
if (this.path.length > 1) {
	nextY = this.path[0];
	nextX = this.path[1];
	this.path.reverse();
	this.path.length = this.path.length - 2;
	this.path.reverse();
	eval(this.obj_name + '.bounce('+nextY+','+nextX+');')
	if (codette) {
		setcodette = this.obj_name+'.followPath('+y+','+x+',"'+codette+'")';
		}
	else{setcodette = this.obj_name+'.followPath()';}
	setTimeout(setcodette,0);	
	}
	else{
		if(codette) {
			runMe(codette);
			}
		}
}
	
	
initGmove();