/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Written by Terry Friesen,  tfriesen@mts.net  copyright 1998-2002
http://www.mts.net/~tfriesen/

last updated: July 1, 2002

This script may be used freely on non-commercial web pages
It is not to be sold or profit made from it without the consent of the author
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

function pathMethods(lay){
lay.slideTo=slideTo;
lay.common_Path=common_Path;
lay.makePath=makePath;
lay.pathEvent=new Object();
lay.pathEvent.type="pathend";
lay.onpathend=doNothing;
}

var lastRunPathLayer=null;

function makePath(a1,a2,a3){
this.path_Action=a3||'run';
this.common_Path();
if(a1.split){this.path_X=this.path_X.concat(a1.split(","))}
if(a2.split){this.path_Y=this.path_Y.concat(a2.split(","))}
var pl=Math.max(this.path_X.length-1,this.path_Y.length-1);
this.pathStopPoint=this.pathEndPoint=pl;
this.path_X[pl]=this.path_X[pl]||null;
this.path_Y[pl]=this.path_Y[pl]||null;

if(this.path_Action=='run'&&!this.pathRunning){this.runPath()}
return this;
}

function slideTo(a1,a2,a3,a4,a5){
this.path_Action=a4||'run';
this.common_Path();
var pathEndX=a1||"0";
var pathEndY=a2||"0";
if(a1.substr){
if(pathEndX.indexOf("pos")!=-1){
pathEndX=this.posX(a1)||.1
}
else{
if(pathEndX.indexOf("%")!=-1){
pathEndX=this.percentX(a1)||.1
}
}
}
if(a2.substr){
if(pathEndY.indexOf("pos")!=-1){
pathEndY=this.posY(a2)||.1
}
else{
if(pathEndY.indexOf("%")!=-1){
pathEndY=this.percentY(a2)||.1
}
}
}
var distX=Math.abs(pathEndX-this.cur_Left);
var distY=Math.abs(pathEndY-this.cur_Top);
var pLength=Math.max(distX,distY);
var distXplus=(pathEndX-this.cur_Left>0);
var distYplus=(pathEndY-this.cur_Top>0);
var Xplus=(distX-distY>0);
if(a5){var pSpeed=Math.round((a3||1)*screen.width/640);}
else{var pSpeed=a3||1;}

for(var a=this.pathEndPoint,b=pSpeed;b<pLength-pSpeed;a++,b+=pSpeed){
var dX=distX*b/distY;
var dY=distY*b/distX;

if(distXplus){
if(Xplus){
this.path_X[a]=this.cur_Left+b||.1;
}
else{
this.path_X[a]=this.cur_Left+dX||.1;
}
}

else{
if(Xplus){
this.path_X[a]=this.cur_Left-b||.1;
}
else{
this.path_X[a]=this.cur_Left-dX||.1;
}
}

if(distYplus){
if(Xplus){
this.path_Y[a]=this.cur_Top+dY||.1;
}
else{
this.path_Y[a]=this.cur_Top+b||.1;
}
}

if(! distYplus){
if(Xplus){
this.path_Y[a]=this.cur_Top-dY||.1;
}
else{
this.path_Y[a]=this.cur_Top-b||.1;
}
}
}
this.pathStopPoint=this.pathEndPoint=a;
this.path_X[a]=pathEndX;
this.path_Y[a]=pathEndY;

if(this.path_Action=='run'&&!this.pathRunning){this.runPath()}
return this;
}

function common_Path(){
if((this.path_Action=='add')&&(this.path_X)){
var pX=this.path_X.length-1;
this.cur_Left=this.path_X[pX];
this.cur_Top=this.path_Y[pX];
this.pathEndPoint=pX+1;
this.path_Seg[this.path_Seg.length]=pX;
this.path_Seg[this.path_Seg.length-1].pathWasReversed=this.pathReversed;
}
else{
this.cur_Top=this.pxTop();
this.cur_Left=this.pxLeft();
this.path_X=new Array();
this.path_Y=new Array();
this.path_Seg=new Array();
this.pathEndPoint=1;
this.path_Seg[0]=0;
this.path_Seg[0].pathWasReversed=false;
this.path_X[0]=this.cur_Left;
this.path_Y[0]=this.cur_Top;
}
this.runPath=runPath;
this.reversePath=reversePath;
this.stopPath=stopPath;
this.pathPoint=pathPoint;
this.pathSegment=pathSegment;
this.pathReversed=this.pathReversed||false;
this.pathRunning=this.pathRunning||false;
this.path_Count=this.path_Count||0;
this.pathIntervalSpeed=this.pathIntervalSpeed||25;
this.hasPath=true;
}

function runPath(){
this.pathRunning=true;
this.rp_1=this.path_X[this.path_Count]||this.pxLeft();
this.rp_2=this.path_Y[this.path_Count]||this.pxTop();
if(Client.style){
this.style.left=this.rp_1;
this.style.top=this.rp_2;
}
else{
this.left=this.rp_1;
this.top=this.rp_2;
}
if(this.has3d){
this._3dLayer.moveTo(this.rp_1-2,this.rp_2-2)
}
if(this.path_Count++<=this.pathStopPoint&&!this.path_Stop){
setTimeout("allLayers."+this.layerName+".runPath()",this.pathIntervalSpeed)
}
else{
if(this.path_Count>=this.pathStopPoint){
this.onpathend(this.pathEvent);
if(this.path_Count>=this.pathEndPoint){this.path_Count=0}
}
this.pathRunning=false;
lastRunPathLayer=this;
}
return this;
}

function reversePath(a1){
if(this.pathReversed){
this.pathReversed=false;
}
else{
this.pathReversed=true;
}
this.path_Y.reverse();
this.path_X.reverse();
if(this.path_Count>0){
this.path_Count=this.pathStopPoint-this.path_Count;
}
if(!a1&&!this.pathRunning){
this.runPath();
}
return this;
}

function stopPath(a1){
this.stop_Path=true;
setTimeout("allLayers."+this.layerName+".stop_Path=false",this.pathIntervalSpeed);
if(a1){this.onpathend(this.pathEvent)}
return this;
}

function pathPoint(pod,pos){
if(!isNaN(parseInt(pod))){
if(isNaN(pod)){
pod=Math.round(this.pathEndPoint*(parseInt(pod)/100));
}
if(!pos){
this.path_Count=pod;
var x1=this.path_X[pod]||this.pxLeft();
var y1=this.path_Y[pod]||this.pxTop();
this.moveTo(x1,y1);
}
else{
var p=pos.toLowerCase();
if(p=='x'){return this.path_X[pod]}
if(p=='y'){return this.path_Y[pod]}
if(p=='defer'){return pod}
}
}
return this.path_Count;
}

function pathSegment(a1,a2){
var seg=this.path_Seg[a1-1];
if(a2){
if((this.pathReversed)&&(! seg.pathWasReversed)){
this.reversePath("defer");
this.pathPoint(seg);
this.reversePath("defer");
seg=this.pathEndPoint-seg;
}
else{this.pathPoint(seg);}
}
return seg;
}
