//***************************************************************************************************//
// (C) Copyright Virtual Mechanics 1999-2004 Version 2.5d, All rights reserved.    	//
// All copies of any portions of this software must include this Copyright notice. 	//
//								 	//
//***************************************************************************************************//

objStep = new Array();
objTime = new Array();
noStep = new Array();
TotTime = new Array();
maxTime = new Array();
noStep = new Array();
Mctl = new Array();
workX = new Array();
workY = new Array();

var Version = 0;
var newPage = 0;
var pgScObj =-1;
var pageObj = 0;
var mW;
var mH;
nm = new Array();
Active = new Array();
ob   = new Array();
cpox = new Array();
cpoy = new Array();
spox = new Array();
spoy = new Array();
epox = new Array();
epoy = new Array();
crot = new Array();
cscx = new Array();
cscy = new Array();
rotate= new Array();
scale= new Array();
rate = new Array();
var Lpox;
var Lpoy;
dpox = new Array();
dpoy = new Array();
atDis  = new Array();
DisPt  = new Array();
disStep = new Array();
Plen = new Array();
Path = new Array();
obRef= new Array();
Gtyp = new Array();
Gnpt=new Array();
//Gnam = new Array();
Glen = new Array();
Gszx = new Array();
Gszy = new Array();
Gorx = new Array();
Gory = new Array();
Gpxl = new Array();
Gpyl = new Array();
Gbrl = new Array();
Gbrt = new Array();
Gbrr = new Array();
Gbrb = new Array();
Grps = new Array();
Grpl = new Array();
Gspt = new Array();
Snam = new Array();
Scnt = new Array();
PathCount = new Array();
LastPt  = new Array();
lstVal = new Array();

TimeLeft = new Array();
AEvent = new Array();
WDEvent = new Array();
WAEvent = new Array();
AValue = new Array();
ATime = new Array();
AEnter = new Array();
ALeave = new Array();
AKey = new Array();
IKey = new Array();
DEvent = new Array();
DValue = new Array();
DTime = new Array();
DEnter = new Array();
DLeave = new Array();
DAKey = new Array();
DIKey = new Array();
WASOp  = new Array();
WAGOp  = new Array();
OpForm = new Array();
WAAObj = new Array();
WADObj = new Array();
WAForm = new Array();
WASVal = new Array();
WAGVal = new Array();
WACgeo = new Array();
WACsnd = new Array();
WACact = new Array();
WACevt = new Array();
WACatt = new Array();
WACobj = new Array();
WANobj = new Array();
WALink = new Array();
WDAObj = new Array();
WDDObj = new Array();
EndPath = new Array();
MType = new Array();

MPath  = new Array();
MRate  = new Array();
MTime  = new Array();
MDelay = new Array();
MStart = new Array();
MRepeat= new Array();
MCount = new Array();
MPLen  = new Array();
MDir   = new Array();
MGWst  = new Array();
MGNth  = new Array();
MGEst  = new Array();
MGSth  = new Array();
MALst  = new Array();
MRotate= new Array();
MScale = new Array();
MShade = new Array();
MFlags = new Array();

eDELAY = (1);
eDELAY_TIME = (2);
eMOUSE = (4);
eMOUSE_OVER = (8);
eLMOUSE = (16);
eRMOUSE = (32);
eKEY = (64);
eOBJECT_ENTER = (128);
eOBJECT_ENTER_LIST = (256);
eOBJECT_LEAVE = (512);
eOBJECT_LEAVE_LIST = (1024);
eLT_VALUE =	(2048);
eEQ_VALUE = (4096);
eGT_VALUE =	(8192);
eVALUE	  = (16384);
eENDPATH  = (32768);
eACTIVATE_1 = (65536);
eACTIVATE_2	= (131072);
eANDtest = (1<<30);
var pageTime = -1;// link timer
var Cobj;
var Csty;
var Catt;
var Cact;
var Cevt;
var Cgrp;
var Cgeo;
var Csnd;
var Cpob;
var Gpgo;
var gcx;
var gcy;
var gcx;
var gcy;
var cmx = 0;
var cmy = 0;
var smx = -9999;
var smy = -9999;
var slm = 0;
var llm = -9999;
var sky = " ";
var lstsnd = -1;
var fact;
var ifact;

var lmx = -9999;
var lmy = -9999;
var lky = 0;
var totObj;
var mS;
var mW;
var fps = 30;
var waitTime = 20;
var tickTime = 1;
var strDate;
var curDate;
var GEO_TYPE = 7;
var GEO_OPEN = 8;
var GEO_COUNT= 32;
ACT_XPATH_STOP	 =(0);
ACT_XPATH_OBJPTH =(1<<0);
ACT_XPATH_OBJXYZ =(1<<1);
ACT_XPATH_LEFT   =(1<<2);
ACT_XPATH_RIGHT  =(1<<3);
ACT_XPATH_MOUSE	 =(1<<4);
ACT_XPATH_KEYPTH =(1<<5);
ACT_YPATH_STOP	 =(0);
ACT_YPATH_OBJPTH =(1<<8);
ACT_YPATH_OBJXYZ =(1<<9);
ACT_YPATH_UP     =(1<<10);
ACT_YPATH_DOWN   =(1<<11);
ACT_YPATH_MOUSE	 =(1<<12);
ACT_ZPATH_STOP	 =(0);
ACT_ZPATH_OBJPTH =(1<<16);
ACT_ZPATH_OBJXYZ =(1<<17);
ACT_ZPATH_IN	 =(1<<18);
ACT_ZPATH_OUT	 =(1<<19);
ACT_ZPATH_KEY	 =(1<<20);
ACT_PATH_STOP	 =(0);
ACT_PATH_START	 =(1<<24);
ACT_PATH_CENTER	 =(1<<25);
ACT_PATH_END	 =(1<<26);
ACT_GEO_WEST     =(1<<28);
ACT_GEO_EAST     =(1<<29);
ACT_GEO_NORTH    =(1<<30);
ACT_GEO_SOUTH    =(1<<31);
ACT_SETX		 =(0xffffff00);
ACT_SETY		 =(0xffff00ff);
ACT_SETZ		 =(0xff00ffff);
ACT_SETO		 =(0xf0ffffff);
ACT_SETF		 =(0x0fffffff);
ACT_GETX		 =(0x000000ff);
ACT_GETY		 =(0x0000ff00);
ACT_GETZ		 =(0x00ff0000);
ACT_GETO		 =(0x0f000000);
ACT_GETF		 =(0xf0000000);

off =3;
/**************************************************************************/
var isNav4 = false, isIE4 = false, isIE5 = false, isNC6 = false;
if (document.getElementById)
{
 isIE5 = true;// NN6, IE5, Opera 5
 if(!document.all)
 {
	isNC6 = true; //nc6 && ie5 possible
 }
}
else if (document.all)
{
 isIE4 = true;// IE4
}
else if (document.layers)
{
 isNav4 = true;// NN4
}
///////////////////////////////////////
if (isIE4 || isIE5)  { 
	if(isNC6)
	{
		window.document.onmousemove = NNmouseMove;
	  window.document.onmousedown = NNmouseDown;
    window.document.onmouseup   = NNmouseUp;   
	 	window.document.onkeypress  = NNkeyPress;
  	window.document.ondragstart = IECancelEvent;
	}
	else
	{
		window.document.onmousemove = IEmouseMove;
	 	window.document.onmousedown = IEmouseDown;
		window.document.onmouseup   = IEmouseUp;
 		window.document.onkeypress  = IEkeyPress;
 		window.document.onkeydown   = IEkeyPress;
		window.document.ondragstart = IECancelEvent;
	}
 
}
else if (isNav4) {
	window.captureEvents(Event.MOUSEUP|Event.MOUSEDOWN|Event.MOUSEMOVE|Event.KEYPRESS);
	window.onmousedown=NNmouseDown;
	window.onmouseup=NNmouseUp;
	window.onmousemove=NNmouseMove;
	window.onkeypress=NNkeyPress;
}

/////////////////////////////////////
function NNmouseMove(e) {
	cmx = e.pageX;
	cmy = e.pageY;
	sclx = window.pageXOffset;
	scly = window.pageYOffset;
}
function NNmouseDown(e) {
	slm = slm | 1;
 	document.onmousemove=drag;
 	document.onmouseup=enddrag;
	smx=e.pageX;
	smy=e.pageY;
 	MouseDownA();
	return true;
}

function NNmouseUp(e) {
  
	slm = slm | 2; 
	smx = e.pageX; 
	smy = e.pageY; 
	 
 	MouseUpA();
}

function NNkeyPress(e) {
 	if(isNC6){

		sky = e.which;
	}
	else{

		sky = String.fromCharCode(e.which);
	} 
}
function enddrag(e) {
	slm = slm | 2;
	smx = e.pageX + window.pageXOffset;
	smy = e.pageY + window.pageYOffset;

NNmouseUp(e) 
	document.onmousemove=0;
	document.releaseEvents(Event.MOUSEMOVE);
	document.releaseEvents(Event.MOUSEUP);
	window.captureEvents(Event.MOUSEMOVE|Event.MOUSEDOWN|Event.KEYPRESS);
	return false;
}
function drag(e) {
	cmx = e.pageX + window.pageXOffset;
	cmy = e.pageY + window.pageYOffset;
}

/////////////////////////
function IEmouseMove() {
	cmx = window.event.clientX + document.body.scrollLeft;
	cmy = window.event.clientY + document.body.scrollTop;
	sclx = document.body.scrollLeft;
	scly = document.body.scrollTop;
}

function IEmouseDown() {
	slm = slm | 1;
	smx = window.event.clientX + document.body.scrollLeft;
	smy = window.event.clientY + document.body.scrollTop;
	MouseDownA();
}

function IEmouseUp() {
	slm = slm | 2;
	smx = window.event.clientX + document.body.scrollLeft;
	smy = window.event.clientY + document.body.scrollTop;
	MouseUpA();
}

function IEkeyPress() {
	sky = window.event.keyCode;
}
function IECancelEvent() {
	window.event.returnValue=false;
}
////////////////////////
function Setup() {
// setup defaults
	tmCount=0;

	strDate = new Date();
	waitTime = 1000 / fps;
	frmTime = 0;
	tickTime = 0;
    
	obRef[0] = 0;
	ob[0] = new Array();
	ob[0] = 0;
	ob[0].geom = "Geo0";
	ob[0].geo = 0;
	ob[0].att = 0; 
	ob[0].evt = 0; 
	ob[0].act = 0;
	ob[0].grp = 0;
	ob[0].cpox =0.000000;
	ob[0].cpoy =0.000000;
	ob[0].cscx =1.000000;
	ob[0].cscy =1.000000;
	ob[0].crot =0.000000;
	ob[0].flg = 0;

	MPath[0]  = 0;
	MStart[0] = 0;
	MCount[0] = 0;

	fact = 1.0;
	ifact= 0.0;

	for(nob=0; nob < pageObj; nob++) {
		Cobj = pObjLst[nob];
		spox[Cobj] = ob[Cobj].cpox;  
		spoy[Cobj] = ob[Cobj].cpoy;
		SetPath(Cobj);

		if(ob[Cobj].grp == 0)
				reset(Cobj);

		if(ob[Cobj].flg & 16)
			Active[Cobj] =  4;	// set to initial active state
	}

	initVisibility();
}
 

function doObjectList() {

	curDate = new Date();
	tickTime = (curDate - strDate) * 0.1;
	frmTime++;

	if(newPage != 0) window.location=WALink[newPage];

	newPage = 0;
	if(pageTime >= 0)
	{
		tmCount++;
		if(tmCount > pageTime * tickTime) 
		{
			window.location=pgLink;
			pageTime = -1;
		}
	}
 
	if(lmx == smx) smx = -99999;
	if(lmy == smy) smy = -99999;
	if(lky == sky) sky = " ";
	llt = 0;
	if((llm & 2) == (slm & 2)) slm = (slm  & ~2);
	if((llm & 1) == (slm & 1)) slm = (slm  & ~1);
	lmx = smx;
	lmy = smy;
	lky = sky;
	llm = slm;

	MoOvrTst();

	for(nob=0; nob < pageObj; nob++) {
//		ref = pObjLst[nob];
		gcx = 0;
		gcy = 0;
		cobj = pObjLst[nob]
		Cgrp = ob[cobj].grp;
		if(!Cgrp) doObject(cobj);
	}
}

function setObject(cobj)
{
	if(typeof(ob[cobj])!="undefined" || ob[cobj]==null)
	{
		Cobj = cobj;
		Cgeo = ob[Cobj].geo;
		Csnd = ob[Cobj].snd;
		Cevt = ob[Cobj].evt;
		Catt = ob[Cobj].att;
		Cact = ob[Cobj].act;
		Gpgo = ob[Cobj].gem;
		Csty = ob[Cobj].style;
	}
}

function doObject(cobj)
{
	Cobj = cobj;
	Cgeo = ob[Cobj].geo;
	Csnd = ob[Cobj].snd;
	Cevt = ob[Cobj].evt;
	Catt = ob[Cobj].att;
	Cact = ob[Cobj].act;
	Gpgo = ob[Cobj].gem;
	Csty = ob[Cobj].style;

	if(Cact)
	{			
		Cpob = MPath[Cact];
		
		if(Cpob)  
		{
				if(null==ob[Cpob])
				{
					Cpgo = 0;
				}
				else
				{
					Cpgo = ob[Cpob].geo;
				}
		}
		else
		{
			Cpgo = 0;
		}   
	}
	else
	{
		Cpob = 0;
		Cpgo = 0;
	}

	if(Cevt) Evtest();

	if     (Active[Cobj] == 4) whenActive();
	else if(Active[Cobj] == 2) whenDeactive();
	else if(Active[Cobj] == 1) isActive();
	else if(Active[Cobj] == 0) isDeactive();

//	if(Cgeo && (Gtyp[Cgeo] & (1<<4)))
//	{ 
//		doGroup(Cgeo);
//		return;
//	}

}

function doGroup(cgrp)
{
	var gobj;
	var i;     
	gcx = cpox[Cobj];
	gcy = cpoy[Cobj];
	gobj = Cobj;
	for(i = 0; i < Grps[cgrp]; i++)
	{ 
		doObject(Grpl[cgrp][i]);
		ob[Cobj].style.left=gcx+cpox[Cobj] - Gszx[Cgeo] * ob[Cobj].cscx;
		ob[Cobj].style.top =gcy+cpoy[Cobj] - Gszy[Cgeo] * ob[Cobj].cscy;
	}
	return;
}

function initVisibility()
{
  var i,code;
	var obTriggered = new Array();
	var nCount=0;

	var obGroup = new Array();
	
	for(i=0; i < MoLNo; i++) {
		obGroup[i]=0;
	}

	for(i=0; i < MoLNo; i++) {
		
		if(ob[Molst[i]]==null)	continue;
	 
	  setObject(Molst[i]);

		var bHidden=0;
		
		if((ob[Molst[i]].flg & (1<<6))==0) {
			bHidden=1;
		}
		else if(ob[Cobj].flg & (1<<(off+8))) {
			if( (ob[Cobj].flg & (1<<(off+9))) ||(ob[Cobj].flg & (1<<(off+13))) ) {
				obTriggered[nCount]= ob[Cobj].trg;
				nCount+=1;
			}
			else if( (ob[Cobj].flg & (1<<(off+15))) ) {
				if( (ob[Cobj].flg & (1<<(off+10))) ||(ob[Cobj].flg & (1<<(off+14))) ) {
					bHidden=1;
				}
			}
		}
		else {
			bHidden=0;
		}

		if(bHidden==1) {
			code = "hidden";
		}
		else {
			code = "visible";
		}
 
		if(obGroup[Cobj]!=1){
			setVisibility(code);
		}

		var j;
		if(Cgeo && (Gtyp[Cgeo] & ((1<<4)+(1<<6)))) {
			for(j = 0; j < Grps[Cgeo]; j++) {
				obGroup[ob[Cobj].grp[j]] =1;
			}
		}
	}

	for(i=0; i < nCount; i++) {
		if(obTriggered[i]==null) continue;
	
		setObject(obTriggered[i]);
	 	code = "hidden";
		setVisibility(code);
	}
}

function setVisibility(code)
{
  var i;  

 	if(Cgeo && (Gtyp[Cgeo] & (1<<4))) 
	{
		if((Gtyp[Cgeo] & (1<<6))==0)  
		{
			for(i = 0; i < Grps[Cgeo]; i++) 
			{
				ob[Grpl[Cgeo][i]].style.visibility = code;
				ob[Cobj].style.visibility = code; 
	 		}
		}
 	 	ob[Cobj].style.visibility = code; 
	}
	else
		ob[Cobj].style.visibility = code;
}

function UpdGeo() {
	var drx = Lpox - cpox[Cobj];
	var dry = Lpoy - cpoy[Cobj];
	if(Math.abs(dry) > Math.abs(drx))
	{
		if    ((dry < 0) && (MDir[Cobj] != 270))
		{
			if(MType[Cact] & (ACT_GEO_SOUTH))
			{
				ob[Cobj].geo.src = Gspt[MGSth[Cact]].src;
			}
			MDir[Cobj] = 270;
		}
		else  if((dry >= 0) && MDir[Cobj] != 90)
		{
			if(MType[Cact] & (ACT_GEO_NORTH))
			{ 
				ob[Cobj].geom.src = Gspt[MGNth[Cact]].src;
			}
			MDir[Cobj] = 90;
		}
	}
	else
	{
		if    ((drx > 0) && (MDir[Cobj] != 0))
		{
			if(MType[Cact] & (ACT_GEO_WEST))
			{ 
				ob[Cobj].geom.src = Gspt[MGWst[Cact]].src;
			}
			MDir[Cobj] = 0;
		}
		else  if((drx <= 0) && MDir[Cobj] != 180)
		{
			if(MType[Cact] & (ACT_GEO_EAST))
			{ 
//window.status = " Cobj=" + Cobj + " Cact=" + Cact + " MGEst[Cact]=" + MGEst[Cact] + "Gspt[MGEst[Cact]].src " + Gspt[MGEst[Cact]];
//window.status = " Cobj=" + Cobj + " Cact=" + Cact + " MGEst[Cact]=" + MGEst[Cact] + "Gspt[MGEst[Cact]].src " + Gspt[MGEst[Cact]];
//window.status = " ob[Cobj]=" + ob[Cobj] + " ob[Cobj].geom=" + ob[Cobj].geom.src;
				ob[Cobj].geom.src = Gspt[MGEst[Cact]].src;
			}
			MDir[Cobj] = 180;
		}
	}
return;
}

function UpdStr() {
	if(lstVal[Cobj] == ob[Cobj].val) return;
	lstVal[Cobj] = ob[Cobj].val;
	if(isIE4 || isIE5)
		ob[Cobj].geom.innerText = ob[Cobj].val;
	else
		window.status = "Object " + ob[Cobj].geom + " Counter=" + ob[Cobj].val;

	return;
}

function UpdAudio(on)
{
	if(isIE4 || isIE5 )
	{
		if(on > 0)
		{
			if(Scnt[Csnd] < 0) Scnt[Csnd] = 9999;
			var sndo =eval(ob[Csnd].osnd);
			sndo.loop= Scnt[Csnd];
		  ob[Csnd].osnd.src = Snam[Csnd];
			sndo.autostart=1;
			sndo.Play();
 			lstsnd = Csnd;
		}
		else
		{
			if(lstsnd != Csnd) return;
		  ob[Csnd].osnd.src= " ";
			ob[Csnd].osnd.loop= 0;
			ob[Csnd].osnd.autostart=0;
			ob[Csnd].osnd.Stop();
		}
	}
	else if(isNav4) 
	{
//		<embed id = BackMusic  src=Snam[Csnd] autostart=true loop= Scnt[Csnd] hidden=true></embed>
	}
}


/****************************************************************************/
function Evtest() 
{
	if(Active[Cobj] == 0) 
	{
		if(AEvent[Cevt] & eANDtest)
			ActANDTest();
		else
			ActORTest();
	}
	else if(Active[Cobj] == 1) {
		if(DEvent[Cevt] & eANDtest)
			DeactANDTest();
		else
			DeactORTest();
	}
return;
}
/***************************************************************************/
function ActORTest()
{
if(((AEvent[Cevt] & eDELAY) 		&& TimeCount() <= 0  ) ||
  ( (AEvent[Cevt] & eOBJECT_ENTER)	&& ObjectEnter(AEnter[Cevt])  ) ||
  ( (AEvent[Cevt] & eOBJECT_LEAVE) 	&& ObjectLeave(ALeave[Cevt])  ) ||
  ( (AEvent[Cevt] & eMOUSE)			&& MouseSelect() > 0 ) ||
  ( (AEvent[Cevt] & eMOUSE_OVER)	&& MouseOver()   ) ||
  ( (AEvent[Cevt] & eLMOUSE)		&& IsMouseLClick()   ) ||
  ( (AEvent[Cevt] & eKEY)			&& KeyChar()   ) ||
  ( (AEvent[Cevt] & eLT_VALUE)		&& ob[Cobj].val <  AValue[Cevt]) ||
  ( (AEvent[Cevt] & eEQ_VALUE)		&& ob[Cobj].val == AValue[Cevt]) ||
  ( (AEvent[Cevt] & eGT_VALUE)		&& ob[Cobj].val >  AValue[Cevt]) ||
  ( (AEvent[Cevt] & eENDPATH)		&& EndPath[Cobj]     )   )
Active[Cobj] = 4;
}
/***************************************************************************/
function ActANDTest()
{
if(((AEvent[Cevt] & eDELAY) 		&& !(TimeCount() <= 0)  ) ||
  ( (AEvent[Cevt] & eOBJECT_ENTER)	&& !ObjectEnter(AEnter[Cevt])  ) ||
  ( (AEvent[Cevt] & eOBJECT_LEAVE) 	&& !ObjectLeave(ALeave[Cevt])  ) ||
  ( (AEvent[Cevt] & eMOUSE)			&& !(MouseSelect() > 0) ) ||
  ( (AEvent[Cevt] & eMOUSE_OVER)	&& !MouseOver()   ) ||
  ( (AEvent[Cevt] & eLMOUSE)		&& !IsMouseLClick()   ) ||
  ( (AEvent[Cevt] & eKEY)			&& !KeyChar()   ) ||
  ( (AEvent[Cevt] & eLT_VALUE)		&& !(ob[Cobj].val <  AValue[Cevt])) ||
  ( (AEvent[Cevt] & eEQ_VALUE)		&& !(ob[Cobj].val == AValue[Cevt])) ||
  ( (AEvent[Cevt] & eGT_VALUE)		&& !(ob[Cobj].val >  AValue[Cevt])) ||
  ( (AEvent[Cevt] & eENDPATH)		&& !EndPath[Cobj]     )   )
  {} else Active[Cobj] = 4;
}
/***************************************************************************/
function DeactORTest()
{

if(((DEvent[Cevt] & eDELAY) 		&& TimeCount() <= 0  ) ||
  ( (DEvent[Cevt] & eOBJECT_ENTER)	&& ObjectEnter(DEnter[Cevt])  ) ||
  ( (DEvent[Cevt] & eOBJECT_LEAVE) 	&& ObjectLeave(DLeave[Cevt])  ) ||
  ( (DEvent[Cevt] & eMOUSE)			&& MouseUp() > 0 ) ||
  ( (DEvent[Cevt] & eMOUSE_OVER)	&& !MouseOver()   ) ||
  ( (DEvent[Cevt] & eLMOUSE)		&& IsMouseLClick()   ) ||
  ( (DEvent[Cevt] & eKEY)			&& DKeyChar()   ) ||
  ( (DEvent[Cevt] & eLT_VALUE)		&& ob[Cobj].val <  AValue[Cevt]) ||
  ( (DEvent[Cevt] & eEQ_VALUE)		&& ob[Cobj].val == AValue[Cevt]) ||
  ( (DEvent[Cevt] & eGT_VALUE)		&& ob[Cobj].val >  AValue[Cevt]) ||
  ( (DEvent[Cevt] & eENDPATH)		&& EndPath[Cobj]     )   )
	Active[Cobj] = 2;
}
/***************************************************************************/
function DeactANDTest()
{
if(((DEvent[Cevt] & eDELAY) 		&& !(TimeCount() <= 0)  ) ||
  ( (DEvent[Cevt] & eOBJECT_ENTER)	&& !ObjectEnter(DEnter[Cevt])  ) ||
  ( (DEvent[Cevt] & eOBJECT_LEAVE) 	&& !ObjectLeave(DLeave[Cevt])  ) ||
  ( (DEvent[Cevt] & eMOUSE)			&& !(MouseUp() > 0) ) ||
  ( (DEvent[Cevt] & eMOUSE_OVER)	&& !MouseOver()   ) ||
  ( (DEvent[Cevt] & eLMOUSE)		&& !IsMouseLClick()   ) ||
  ( (DEvent[Cevt] & eKEY)			&& !DKeyChar()   ) ||
  ( (DEvent[Cevt] & eLT_VALUE)		&& !(ob[Cobj].val <  AValue[Cevt])) ||
  ( (DEvent[Cevt] & eEQ_VALUE)		&& !(ob[Cobj].val == AValue[Cevt])) ||
  ( (DEvent[Cevt] & eGT_VALUE)		&& !(ob[Cobj].val >  AValue[Cevt])) ||
  ( (DEvent[Cevt] & eENDPATH)		&& !EndPath[Cobj]     )   )
  {} else Active[Cobj] = 2;
}
/**************************************************************************/
function TimeCount() {
	return (TimeLeft[Cobj] - tickTime);
}

function ObjectEnter(eobj) { 
x = Gszx[Cgeo] * ob[Cobj].cscx;
y = Gszy[Cgeo] * ob[Cobj].cscy;
if ( cpox[eobj] >= (cpox[Cobj] - x) && cpox[eobj] <= (cpox[Cobj]) + x &&
	  cpoy[eobj] >= (cpoy[Cobj] - y) && cpoy[eobj] <= (cpoy[Cobj]) + y )
	return 1;
return 0;
}

function ObjectLeave(eobj) {
x = Gszx[Cgeo] * ob[Cobj].cscx;
y = Gszy[Cgeo] * ob[Cobj].cscy;
if ( cpox[eobj] >= cpox[Cobj] - x && cpox[eobj] <= cpox[Cobj] + x &&
	 cpoy[eobj] >= cpoy[Cobj] - y && cpoy[eobj] <= cpoy[Cobj] + y )
	return 0;
return 1;
}

function MouseSelect() {
var val = 0;
if(smx == -99999) return val;
x = Gszx[Cgeo] * ob[Cobj].cscx;
y = Gszy[Cgeo] * ob[Cobj].cscy;
if ( smx >= cpox[Cobj] - x && smx <= cpox[Cobj] + x &&
	 smy >= cpoy[Cobj] - y && smy <= cpoy[Cobj] + y )
	return val = 1;
return val;
}

function MouseOver() {
x = (Gszx[Cgeo] * ob[Cobj].cscx)/2;
y = (Gszy[Cgeo] * ob[Cobj].cscy)/2;

if ( cmx >= cpox[Cobj] - x && cmx <= cpox[Cobj] + x &&
	 cmy >= cpoy[Cobj] - y && cmy <= cpoy[Cobj] + y ) {
	  	return 1;
	}
return 0;
}

function IsMouseLClick() {
return (slm && 1);
}

function MouseUp() {
return (slm && 2);
}

function KeyChar() {
if(!sky) return 0;
if(isNav4 && (AKey[Cevt] == lky)) return 1;
if((isIE4 || isIE5) && (IKey[Cevt] == lky)) return 1;
return 0;
}

function DKeyChar() {
if(!sky) return 0;
if(isNav4 && (DAKey[Cevt] == sky)) return 1;
if((isIE4 || isIE5) && (DIKey[Cevt] == sky)) return 1;
return 0;
}

function MouseUpA()
{
 	var i;
	for(i=0; i < MoLNo; i++) {
		Cobj = Molst[i];
		Cgeo = ob[Cobj].geo; 
		if(MouseOver() == 1) {
			if( (ob[Cobj].flg & (1<<(off+14))) ) {
				if(!(ob[Cobj].flg & (1<<(off+16)))) {
					if( (ob[Cobj].flg & (1<<(off+15)))) {
						setVisibility("hidden");
					}
					Cobj = ob[Cobj].trg;
					Cgeo = ob[Cobj].geo; 
					setVisibility("visible");
				} 
			}
			else if( (ob[Cobj].flg & (1<<(off+13)))) {
				if(!(ob[Cobj].flg & (1<<(off+16)))) {  
		 			if( (ob[Cobj].flg & (1<<(off+15))) ) {
						setVisibility("visible");
					}
						Cobj = ob[Cobj].trg;
						Cgeo = ob[Cobj].geo; 
						setVisibility("hidden");
				} 
			}
		}
	}
}

function MouseDownA()
{
	var i;
	for(i=0; i < MoLNo; i++) {
		Cobj = Molst[i];
		Cgeo = ob[Cobj].geo; 
		if(MouseOver() == 1) {
		 	if( (ob[Cobj].flg & (1<<(off+13)))) {
		 		if( (ob[Cobj].flg & (1<<(off+15))) ) {
  				setVisibility("hidden");
				}
				Cobj = ob[Cobj].trg;
				Cgeo = ob[Cobj].geo; 
				setVisibility("visible");
			}
			else if( (ob[Cobj].flg & (1<<(off+14)))) {
				if( (ob[Cobj].flg & (1<<(off+15))) ) {
  				setVisibility("visible");
				}
				Cobj = ob[Cobj].trg;
				Cgeo = ob[Cobj].geo; 
				setVisibility("hidden");
			}
		}
 	}
}

function MoOvrTst() {

var i;

for(i=0; i < MoLNo; i++) {
  Cobj = Molst[i];
  Cgeo = ob[Cobj].geo;
  if(Version <= 105) 
  {
	  if(MouseOver() == 1) {
		if(ob[Cobj].flg & 256) setVisibility("visible");
		else                   setVisibility("hidden");
	  }
	  else {
		if(ob[Cobj].flg & 128) setVisibility("visible");
		else                   setVisibility("hidden");
	  }
  }
  else if(ob[Cobj].flg & 512) 
  {
	  if(MouseOver() == 1) 
	  {
		if(ob[Cobj].flg & 128) setVisibility("visible");
		else                   setVisibility("hidden");
	  }
	  else 
	  {
		if(ob[Cobj].flg & 256) setVisibility("visible");
		else                   setVisibility("hidden");
	  }
  }
	//DTrigTest
 
		if(ob[Cobj].flg & (1<<(8+off))) {
				if(!(ob[Cobj].flg & (1<<(12+off))) && MouseOver() == 1) {
					ob[Cobj].flg = ob[Cobj].flg | (1<<(12+off));
					if(ob[Cobj].flg & (1<<(9+off)) ) {
		 				if( (ob[Cobj].flg & (1<<(15+off))) ) {
							setVisibility("hidden");
						}

						setObject(ob[Cobj].trg);
						//Cobj = ob[Cobj].trg;
						//Cgeo = ob[Cobj].geo; 
						setVisibility("visible");
					}
					else if(ob[Cobj].flg & (1<<(10+off))) {
						if( (ob[Cobj].flg & (1<<(15+off))) ) {
							setVisibility("visible");
						}

						setObject(ob[Cobj].trg);
//						Cobj = ob[Cobj].trg;
//						Cgeo = ob[Cobj].geo; 
						setVisibility("hidden");}
					}
					else if((ob[Cobj].flg & (1<<(12+off))) && MouseOver() == 0) {
						if(!(ob[Cobj].flg & (1<<16+off))){   
							if(ob[Cobj].flg & (1<<(9+off))) {
								if( (ob[Cobj].flg & (1<<(15+off))) ) {
									setVisibility("visible");
								}
							setObject(ob[Cobj].trg);
//							Cobj = ob[Cobj].trg;
//							Cgeo = ob[Cobj].geo; 
								setVisibility("hidden");
							}
							else if(ob[Cobj].flg & (1<<(10+off))) {
								if( (ob[Cobj].flg & (1<<(15+off))) ) {
									setVisibility("hidden");
								}
								setObject(ob[Cobj].trg);
//								Cobj = ob[Cobj].trg;
//								Cgeo = ob[Cobj].geo; 
								setVisibility("visible");
							}
						} 
						ob[Molst[i]].flg = ob[Molst[i]].flg & ~(1<<(12+off));
					}
				}

}}

/***************************************************************************/
function isDeactive() {
	if(PathCount[Cobj] != 0) UpdPos();
	if(Gtyp[Cgeo] & GEO_COUNT) UpdStr();

return;
}

function isActive() {
	if(PathCount[Cobj] != 0) UpdPos();
	if(Gtyp[Cgeo] & GEO_COUNT) UpdStr();
return;
}

function whenActive()
{
	Active[Cobj]  = 1;
	EndPath[Cobj] = 0;

	// set default active events
	if(!Cevt)
	{
		TimeLeft[Cobj]  =  0;
		PathCount[Cobj] = 0;
		setVisibility("visible")
	}
	else
	{
//		if(WAEvent[Cevt] & (1<<14)) window.location=WALink[Cevt];
//		if(WAEvent[Cevt] & (1<<15)) window.location=WALink[Cevt];
		if(WAEvent[Cevt] & (1<<14) || WAEvent[Cevt] & (1<<15)) 
		{
			newPage = Cevt;
		}

		if(Csnd > 0) UpdAudio((WAEvent[Cevt] & 16));
//		if(WAEvent[Cevt] & 16) UpdAudio(); //sound
		if(WAEvent[Cevt] & 8) setVisibility("visible");
		else                  setVisibility("hidden");

		TimeLeft[Cobj] = tickTime + (DTime[Cevt]);
//		TimeLeft[Cobj] = (DTime[Cevt]);

		if(WAEvent[Cevt] & (1<<5)) Active[WAAObj[Cevt]] = 4;
		if(WAEvent[Cevt] & (1<<7)) Active[WADObj[Cevt]] = 2;

		// apply value
		if(WAEvent[Cevt] & (1<<13)) {
			if	   ((OpForm[Cevt] & 0x000f) == 0)
				ob[Cobj].val  = WAForm[Cevt];
			else if((OpForm[Cevt] & 0x000f) == 1)
				ob[Cobj].val += WAForm[Cevt];
			else if((OpForm[Cevt] & 0x000f) == 2)
				ob[Cobj].val -= WAForm[Cevt];
			else if((OpForm[Cevt] & 0x000f) == 3)
				ob[Cobj].val *= WAForm[Cevt];
			else if((OpForm[Cevt] & 0x000f) == 4)
				if(WAForm[Cevt] != 0) ob[Cobj].val /= WAForm[Cevt];
		}
		// get value
		if(WAEvent[Cevt] & (1<<11)) {
			if	   ((WAGOp[Cevt] & 0x000f) == 0)
				ob[Cobj].val  = ob[WAGVal[Cevt]].val;
			else if((WAGOp[Cevt] & 0x000f) == 1)
				ob[Cobj].val += ob[WAGVal[Cevt]].val;
			else if((WAGOp[Cevt] & 0x000f) == 2)
				ob[Cobj].val -= ob[WAGVal[Cevt]].val;
			else if((WAGOp[Cevt] & 0x000f) == 3)
				ob[Cobj].val*= ob[WAGVal[Cevt]].val;
			else if((WAGOp[Cevt] & 0x000f) == 4)
				if(ob[WAGVal[Cevt]].val != 0) ob[Cobj].val /= ob[WAGVal[Cevt]].val;
		}
		// send result
		if(WAEvent[Cevt] & (1<<9)) {
			if	   ((WASOp[Cevt] & 0x000f) == 0)
				ob[WASVal[Cevt]].val  = ob[Cobj].val;
			else if((WASOp[Cevt] & 0x000f) == 1)
				ob[WASVal[Cevt]].val += ob[Cobj].val;
			else if((WASOp[Cevt] & 0x000f) == 2)
				ob[WASVal[Cevt]].val -= ob[Cobj].val;
			else if((WASOp[Cevt] & 0x000f) == 3)
				ob[WASVal[Cevt]].val *= ob[Cobj].val;
			else if((WASOp[Cevt] & 0x000f) == 4)
				if(ob[Cobj].val != 0) ob[WASVal[Cobj]].val /= ob[Cobj].val;
		}
		 // motion
		if(WAEvent[Cevt] & 4)	PathCount[Cobj] = MCount[Cact];
		else					PathCount[Cobj] = 0; // motion
		// replace current object components
		if(WAEvent[Cevt] & (1<<17))
		{
			if(WAEvent[Cevt] & (1<<18)) {
				ob[Cobj].geom = Gspt[WACgeo[Cevt]].src;
				ob[Cobj].geo  = WACgeo[Cevt];
			}
			if(WAEvent[Cevt] & (1<<18)) ob[Cobj].geo  = WACgeo[Cevt];
			if(WAEvent[Cevt] & (1<<18)) ob[Cobj].geom.src = Gspt[ob[Cobj].geo].src;
			if(WAEvent[Cevt] & (1<<19)) ob[Cobj].att  = WACatt[Cevt];
			if(WAEvent[Cevt] & (1<<20)) ob[Cobj].act  = WACact[Cevt];
			if(WAEvent[Cevt] & (1<<22)) ob[Cobj].evt  = WACevt[Cevt];
			spox[Cobj] = cpox[Cobj];  
			spoy[Cobj] = cpoy[Cobj];
			SetPath(Cobj);
		}
		// replace additional object components
		for(ref=0; ref< WACobj[Cevt]; ref++) {
			if(WAEvent[Cevt] & (1<<18)) {
				ob[WANobj[Cevt][ref]].geom = Gspt[WACgeo[Cevt]].src;
				ob[WANobj[Cevt][ref]].geo  = WACgeo[Cevt];
			}
			if(WAEvent[Cevt] & (1<<18)) ob[WANobj[Cevt][ref]].geo  = WACgeo[Cevt];
			if(WAEvent[Cevt] & (1<<18)) ob[WANobj[Cevt][ref]].geom.src = Gspt[ob[Cobj].geo].src;
			if(WAEvent[Cevt] & (1<<19)) ob[WANobj[Cevt][ref]].att  = WACatt[Cevt];
			if(WAEvent[Cevt] & (1<<20)) ob[WANobj[Cevt][ref]].act  = WACact[Cevt];
			if(WAEvent[Cevt] & (1<<22)) ob[WANobj[Cevt][ref]].evt  = WACevt[Cevt];
			spox[WANobj[Cevt][ref]] = cpox[Cobj];  
			spoy[WANobj[Cevt][ref]] = cpoy[Cobj];
			SetPath(WANobj[Cevt][ref]);
		}

		if(WAEvent[Cevt] & (1<<30)) reset(Cobj);
	}
}

function whenDeactive()
{

	EndPath[Cobj] = 0;
	Active[Cobj]  = -1;	// is disabled unless reset

	if(!Cevt) 
	{
		PathCount[Cobj] = -1;
		TimeLeft[Cobj]  =  0;
		setVisibility("hidden");
	}
	else
	{
		if(WDEvent[Cevt] & 4) PathCount[Cobj] = MCount[Cact]; // motion
		if(WDEvent[Cevt] & (1<<30)) reset(Cobj);

		if(Csnd > 0) UpdAudio((WDEvent[Cevt] & 16));	//sound
		if(WDEvent[Cevt] & 8) setVisibility("visible");
		else                  setVisibility("hidden");

		TimeLeft[Cobj] = tickTime + (ATime[Cevt]);
//		TimeLeft[Cobj] = (ATime[Cevt]);
		if(WDEvent[Cevt] & 4) PathCount[Cobj] = MCount[Cact];	// motion
		else                  PathCount[Cobj] = 0;

		if(WDEvent[Cevt] & (1<<5)) Active[WDAObj[Cevt]] = 4;
		if(WDEvent[Cevt] & (1<<7)) Active[WDDObj[Cevt]] = 2;
	}

}

//**************************************************************************
function reset(cobj) {

	Cobj = cobj;
	Csty = ob[cobj].style;
	Cevt = ob[cobj].evt;
	Catt = ob[cobj].att;
	Cact = ob[cobj].act;
	Cgrp = ob[cobj].grp;
	Cgeo = ob[cobj].geo;
	Active[cobj]    =  0;	// is deactive
	if(Cevt)
	{
		if(WDEvent[Cevt] & 8) setVisibility("visible");
		else                  setVisibility("hidden");
		if(WDEvent[Cevt] & (1<<31)) {
			PathCount[cobj] = MCount[Cact];			// restart path
			cpox[cobj] = spox[cobj];
			cpoy[cobj] = spoy[cobj];
			cscx[cobj] = ob[cobj].cscx;
			cscy[cobj] = ob[cobj].cscy;
			crot[cobj] = ob[cobj].crot;
			LastPt[cobj] = 0;
//			atDis[cobj] = 0;
		 	DisPt[cobj] = 0;
			EndPath[cobj] = 0;
		}
		if(!(WDEvent[Cevt] & 4)) PathCount[cobj] = 0;	// no motion
		TimeLeft[cobj] = tickTime + (ATime[Cevt]);
//		TimeLeft[cobj] = (ATime[Cevt]);
	}
	else if(Cgeo)
	{
		if(ob[cobj].flg & 64)
			setVisibility("visible");
		else
			setVisibility("hidden");
		// set action variables

		if(Cact) PathCount[cobj] = MCount[Cact]; // motion
		else     PathCount[cobj] = 0;
		TimeLeft[cobj]  = 0;

		cpox[cobj] = spox[cobj];
		cpoy[cobj] = spoy[cobj];
		LastPt[cobj] = 0;
//		atDis[cobj] = 0;
		DisPt[cobj] = 0;
		EndPath[cobj] = 0;

//		resetMatrix();
//		appTrans(cobj);
//		if(Cact) appMtrx();
	}

return;
}

function SetPath(cobj) {

	Cobj = cobj;

	if(null==ob[Cobj])return;  

	Csty = ob[Cobj].sty;	// Style
	Cevt = ob[Cobj].evt;	// Objects event
	Catt = ob[Cobj].att;	// Objects attribute
	Cact = ob[Cobj].act;	// Objects action
	Cgrp = ob[Cobj].grp;	// Objects group
	Cgeo = ob[Cobj].geo;	// Objects geometry
	Csnd = ob[Cobj].snd;	// Objects sound
	Cpob = MPath[Cact];		// Object actions path object

	if(null==ob[Cpob])
	{
		Cpgo=0;   
	}
	else
	{
		Cpgo = ob[Cpob].geo;	// Path objects geometry
	}

	lstVal[Cobj] = ob[Cobj].val - 100;
	MDir[Cobj] = -1;

// rotation and scaling
	cscx[Cobj] = ob[Cobj].cscx;
	cscy[Cobj] = ob[Cobj].cscy;
	crot[Cobj] = ob[Cobj].crot;
	rotate[Cobj]= MRotate[Cact];
	scale[Cobj] = MScale[Cact];

	cscx[Cobj] = ob[Cobj].cscx;
	cscy[Cobj] = ob[Cobj].cscy;
	scale[Cobj]= MScale[Cact];

	if(!Cact) {
		Plen[Cobj] = 0;
		noStep[Cobj] = 0;
		disStep[Cobj] = 0;
		dpox[Cobj] = 0;
		dpoy[Cobj] = 0;
		PathCount[Cobj] = 0;
	}
	else {
//		if(Version > 206)
//			rate[Cobj]  = MRate[Cact] * 0.1 / fps;
//		else
//			rate[Cobj]  = MRate[Cact];
		if(Version > 206)
			rate[Cobj]  = MRate[Cact] * 0.01;
		else
			rate[Cobj]  = MRate[Cact];
		PathCount[Cobj] = MCount[Cact];

		if(MType[Cact] & ACT_XPATH_MOUSE || MType[Cact] & ACT_YPATH_MOUSE) {
			Plen[Cobj] = 1;
			noStep[Cobj] = 1;
			disStep[Cobj] = 1;
			dpox[Cobj] = 0;
			dpoy[Cobj] = 0;
		}
		else if(MType[Cact] & ACT_XPATH_OBJPTH || MType[Cact] & ACT_XPATH_OBJXYZ) {
			objPath(Cobj,Cpob,Cpgo);
		}
		else if(MType[Cact] & ACT_XPATH_KEYPTH) {
			motionSetup(Cobj,Cpob,Cpgo);
		}
		else
		{
			linPath(Cobj);
		}
	}
	cpox[Cobj] = spox[Cobj];
	cpoy[Cobj] = spoy[Cobj];
	LastPt[Cobj] = 0;
	atDis[Cobj] = 0;
	DisPt[Cobj] = 0;
	EndPath[Cobj] = 0;

	GetStartPos();
//	atDis[Cobj] = Plen[Cobj] * MStart[Cact];
	objStep[Cobj] = 0;

	if(MFlags[Cact] & (1<<18)) 
	{
		noStep[Cobj] = MScale[Cact] * 30;
	}
	else if(MFlags[Cact] & (1<<20)) 
	{
		noStep[Cobj] = MShade[Cact] * 30;
	}
	noStep[Cobj] *= (MPLen[Cact] / 100.);

	resetMatrix();
	appTrans(Cobj);
//	appMtrx();
	return;
}

function getPathLenth(Cobj,Cpob,Cgeo)
// return lenth of transformed path
{
	var i, x = 0.0, y = 0.0;
	Plen[Cobj] = 0;
	// find length of rectangle
	if		((Gtyp[Cgeo] & GEO_TYPE) == 1) {
		Plen[Cobj] = 2 * (Gpxl[Cgeo][1] - Gpxl[Cgeo][0]) * ob[Cpob].cscx
		           + 2 * (Gpyl[Cgeo][1] - Gpyl[Cgeo][0]) * ob[Cpob].cscy;
	}
	// find length of ellipse
	else if	((Gtyp[Cgeo] & GEO_TYPE) == 2) {
		Plen[Cobj] = 360;
	}
	// find length of polygon
	else if	((Gtyp[Cgeo] & GEO_TYPE) == 3) {
		for ( i = 1; i < Gnpt[Cgeo]; i++)
		{
			x = (Gpxl[Cgeo][i] - Gpxl[Cgeo][i-1]) * ob[Cpob].cscx;
			y = (Gpyl[Cgeo][i] - Gpyl[Cgeo][i-1]) * ob[Cpob].cscy;
			Plen[Cobj] += Math.sqrt(x*x + y*y);
		}

		if(!(Gtyp[Cgeo] & GEO_OPEN))
		{
			x = (Gpxl[Cgeo][Gnpt[Cgeo]-1] - Gpxl[Cgeo][0]) * ob[Cpob].cscx;
			y = (Gpyl[Cgeo][Gnpt[Cgeo]-1] - Gpyl[Cgeo][0]) * ob[Cpob].cscy;
			Plen[Cobj] += Math.sqrt(x*x + y*y);
		}
	}
}

function linPath(Cobj) {
epox[Cobj] = spox[Cobj];
epoy[Cobj] = spoy[Cobj];

var	lh = mH * (MPLen[Cact] / 100.);
var	lw = mW * (MPLen[Cact] / 100.);

	if(MType[Cact] & ACT_YPATH_UP) {
		if(MType[Cact] & ACT_PATH_CENTER) {
			spoy[Cobj] 	+= lh;
			epoy[Cobj] -= lh;
		}
		else if(MType[Cact] & ACT_PATH_END) {
			spoy[Cobj] 	+= lh;
		}
		else if(MType[Cact] & ACT_PATH_START) {
			epoy[Cobj] -= lh;
		}
	}
	else if(MType[Cact] & ACT_YPATH_DOWN) {
		if(MType[Cact] & ACT_PATH_START) {
			epoy[Cobj] += lh;
		}
		else if(MType[Cact] & ACT_PATH_END) {
			spoy[Cobj] 	-= lh;
		}
		else if(MType[Cact] & ACT_PATH_CENTER) {
			spoy[Cobj] 	-= lh;
			epoy[Cobj] += lh;
		}
	}
	else if(MType[Cact] & ACT_YPATH_MOUSE) {
		Plen[Cobj] = 1;
		noStep[Cobj] = 1;
		disStep[Cobj] = 1;
		dpoy[Cobj] = 0;
		spoy[Cobj] = cpoy[Cobj];
	}

	if(MType[Cact] & ACT_XPATH_LEFT) {
		if(MType[Cact] & ACT_PATH_CENTER) {
			spox[Cobj] 	+= lw;
			epox[Cobj]  -= lw;
		}
		else if(MType[Cact] & ACT_PATH_END) {
			spox[Cobj] 	+= lw;
		}
		else if(MType[Cact] & ACT_PATH_START) {
			epox[Cobj]  -= lw;
		}
	}
	else if(MType[Cact] & ACT_XPATH_RIGHT) {
		if(MType[Cact] & ACT_PATH_START) {
			epox[Cobj]  += lw;
		}
		else if(MType[Cact] & ACT_PATH_END) {
			spox[Cobj] 	-= lw;
		}
		else if(MType[Cact] & ACT_PATH_CENTER) {
			spox[Cobj] 	-= lw;
			epox[Cobj]  += lw;
		}
	}
	else if(MType[Cact] & ACT_YPATH_MOUSE) {
		Plen[Cobj] = 1;
		noStep[Cobj] = 1;
		disStep[Cobj] = 1;
		dpox[Cobj] = 0;
		spox[Cobj] = cpox[Cobj];
	}
	var x = epox[Cobj] - spox[Cobj];
	var y = epoy[Cobj] - spoy[Cobj];
	if(x+y)
	{
		Plen[Cobj] = Math.sqrt(x*x + y*y);
		noStep[Cobj]  = Math.abs(Plen[Cobj] / rate[Cobj]);
		if(noStep[Cobj] < 1) noStep[Cobj] = 1;
		disStep[Cobj] = Plen[Cobj] / noStep[Cobj];
		dpox[Cobj] = x / noStep[Cobj];
		dpoy[Cobj] = y / noStep[Cobj];
	}
	else
	{
		Plen[Cobj] = 0;
		dpox[Cobj] = 0;
		dpoy[Cobj] = 0;
		disStep[Cobj] = 0;
	}
	return
}

function objPath(Cobj,Cpob,Cpgo) 
{
	if		((Gtyp[Cpgo] & GEO_TYPE) == 1) {	
		spox[Cobj] = Gpxl[Cpgo][0] * ob[Cpob].cscx + ob[Cpob].cpox;  
		spoy[Cobj] = Gpyl[Cpgo][0] * ob[Cpob].cscy + ob[Cpob].cpoy;
		epox[Cobj] = spox[Cobj];
		epoy[Cobj] = spoy[Cobj];
	}
	else if	((Gtyp[Cpgo] & GEO_TYPE) == 2) {
		spox[Cobj] = Gpxl[Cpgo][0] * ob[Cpob].cscx + ob[Cpob].cpox;
//		spoy[Cobj] = Gpyl[Cpgo][0] * ob[Cpob].cscy + ob[Cpob].cpoy + Gszy[Cpob] * ob[Cpob].cscy;
		spoy[Cobj] = (Gpyl[Cpgo][0] + Gszy[Cpgo]) * ob[Cpob].cscy + ob[Cpob].cpoy;
		epox[Cobj] = spox[Cobj];
		epoy[Cobj] = spoy[Cobj];
	}
	else if	((Gtyp[Cpgo] & GEO_TYPE) == 3) {
		spox[Cobj] = Gpxl[Cpgo][0] * ob[Cpob].cscx + ob[Cpob].cpox;
		spoy[Cobj] = Gpyl[Cpgo][0] * ob[Cpob].cscy + ob[Cpob].cpoy;
		if(Gtyp[Cpgo] & GEO_OPEN) 
		{
			epox[Cobj] = Gpxl[Cpgo][Gnpt[Cpgo]-1] * ob[Cpob].cscx + ob[Cpob].cpox;
			epoy[Cobj] = Gpyl[Cpgo][Gnpt[Cpgo]-1] * ob[Cpob].cscy + ob[Cpob].cpoy;
		}
		else 
		{
			epox[Cobj] = spox[Cobj];
			epoy[Cobj] = spoy[Cobj];
		}
	}

	getPathLenth(Cobj,Cpob,Cpgo);
	if(Cact)
		noStep[Cobj]  = Math.abs(Plen[Cobj] / rate[Cobj]);
	else
		noStep[Cobj] = 0;
	if(noStep[Cobj] < 1) noStep[Cobj] = 1;
	disStep[Cobj] = Plen[Cobj] / noStep[Cobj];

	return;
}

function GetStartPos()
{
if(Plen[Cobj] == 0 || (MType[Cact] & ACT_XPATH_OBJXYZ)) return;

	while(atDis[Cobj] < (Plen[Cobj] * MStart[Cact]))
	{
		if(MType[Cact] & ACT_XPATH_OBJPTH)
		{
			if     ((Gtyp[Cpgo] & GEO_TYPE) == 1)
				GetRectLoc();
			else if((Gtyp[Cpgo] & GEO_TYPE) == 2) 
			{
				GetArcLoc();
			}
			else if((Gtyp[Cpgo] & GEO_TYPE) == 3)
			{
				GetPathLoc();
			}
			cpox[Cobj] += cpox[Cpob];
			cpoy[Cobj] += cpoy[Cpob];
		}
		else
		{
			if(MType[Cact] & ACT_XPATH_MOUSE)
				cpox[Cobj] = cmx;
			else
				cpox[Cobj] += dpox[Cobj];

			if(MType[Cact] & ACT_YPATH_MOUSE)
				cpoy[Cobj] = cmy;
			else
				cpoy[Cobj] += dpoy[Cobj];
		}
		atDis[Cobj] += disStep[Cobj];
	}

}

function motionSetup(Cobj,Cpob,Cpgo)
{
if(!Cobj || !Cpgo || !Cact) return;

objStep[Cobj] = 0;
objTime[Cobj] = -MDelay[Cact];
maxTime[Cobj] = Mctl[Cpgo][Gnpt[Cpgo]-1].tim;
if(MRepeat[Cact] >= 0)
 TotTime[Cobj] = MRepeat[Cact] * maxTime[Cobj];
else 
 TotTime[Cobj] = -1;
}

/////////////////////////////////////////////////
function UpdPos() {
if(MType[Cact] & ACT_XPATH_KEYPTH)
 motionUpdate();
else
 animateUpdate();
}

function motionUpdate()
{
	var res;
	objTime[Cobj] = tickTime - MDelay[Cact];
	if(objTime[Cobj] > maxTime[Cobj]) objStep[Cobj] = 0;
	if((TotTime[Cobj] < 0 || tickTime < TotTime[Cobj]) && objTime[Cobj] > 0 && maxTime[Cobj] > 0)
		objTime[Cobj] = objTime[Cobj] % (maxTime[Cobj]+1);
	else if(objTime[Cobj] > maxTime[Cobj])
		objTime[Cobj] = maxTime[Cobj];
	else if(objTime[Cobj] < 0)
		objTime[Cobj] = 0;

	res = pathUpdate();

	if(res == 0)
	{
		resetMatrix();
		x = cpox[Cobj] - ob[Cobj].corx;
		y = cpoy[Cobj] - ob[Cobj].cory;
		cpox[Cobj] = x * ob[Cpob].m0 + y * ob[Cpob].m2 + ob[Cpob].m4;
		cpoy[Cobj] = x * ob[Cpob].m1 + y * ob[Cpob].m3 + ob[Cpob].m5;
	    appTrans(Cobj);
		if(Cact) appMtrx();
	}

	return res;
}

function pathUpdate()
{

if(objTime[Cobj] < Mctl[Cpgo][0].tim) return -1;
if(objTime[Cobj] > Mctl[Cpgo][Gnpt[Cpgo]-1].tim) return 1;
while(objTime[Cobj] > Mctl[Cpgo][objStep[Cobj]+1].tim)
{
	if((objStep[Cobj] + 1) >= Gnpt[Cpgo]-1)	{
		objStep[Cobj] = Gnpt[Cpgo]-1;
		return 1;
	}
	else
		objStep[Cobj]++;
}

var cStep = objStep[Cobj];
var fact = (objTime[Cobj] - Mctl[Cpgo][cStep].tim) / (Mctl[Cpgo][cStep+1].tim-Mctl[Cpgo][cStep].tim);
if(fact < 0) fact = 0;
else if(fact > 1) fact = 1.0;
var ifact = 1.0 - fact;

cpox[Cobj] = Gpxl[Cpgo][cStep] + ((Gpxl[Cpgo][cStep+1] - Gpxl[Cpgo][cStep]) * fact);
cpoy[Cobj] = Gpyl[Cpgo][cStep] + ((Gpyl[Cpgo][cStep+1] - Gpyl[Cpgo][cStep]) * fact);
cscx[Cobj] = Mctl[Cpgo][cStep].sclx + (Mctl[Cpgo][cStep+1].sclx - Mctl[Cpgo][cStep].sclx) * fact;
cscy[Cobj] = Mctl[Cpgo][cStep].scly + (Mctl[Cpgo][cStep+1].scly - Mctl[Cpgo][cStep].scly) * fact;
crot[Cobj] = Mctl[Cpgo][cStep].rot + (Mctl[Cpgo][cStep+1].rot - Mctl[Cpgo][cStep].rot) * fact;

return 0;
}
 
function animateUpdate() {
Lpox = cpox[Cobj];
Lpoy = cpoy[Cobj];
// end of path condition
if(noStep[Cobj] > 0 && objStep[Cobj] >= noStep[Cobj]) 
{
	objStep[Cobj] = 0;
	atDis[Cobj] = Plen[Cobj] * MStart[Cact];
	DisPt[Cobj]  = 0;
	LastPt[Cobj] = 0;
	cpox[Cobj]   = spox[Cobj];
	cpoy[Cobj]   = spoy[Cobj];
//  reverse path, scaling, rotation, shading
	if(MFlags[Cact] & (1<<11))
		rate[Cobj] *= -1;
	if(MFlags[Cact] & (1<<13))
		rotate[Cobj] *= -1;
	else
		crot[cobj] = ob[cobj].crot;
	if(MFlags[Cact] & (1<<19))
		scale[Cobj] *= -1;
	else
	{
		cscx[cobj] = ob[cobj].cscx;
		cscy[cobj] = ob[cobj].cscy;
	}
}

tranUpdate();

if(Plen[Cobj] != 0) atDis[Cobj] += disStep[Cobj];
objStep[Cobj]++;

if(noStep[Cobj] > 0 && objStep[Cobj] >= noStep[Cobj]) 
{
	if(PathCount[Cobj] > 0) PathCount[Cobj]--;
	if(PathCount[Cobj] == 0) {
		EndPath[Cobj] = 1;
	}
}

if(Cact) UpdGeo();
if(Cobj == pgScObj) {
var x = cpox[Cobj]-mW*0.5;
var y = cpoy[Cobj]-mH*0.5;
window.scrollTo(x,y);
}
return;
}

function tranUpdate() 
{
	resetMatrix();
	// calculate rotation
	if(rotate[Cobj] != 0) 
	{
		if(MFlags[Cact] & (1<<12))
			crot[Cobj] += rotate[Cobj] * 4;
		else
			crot[Cobj] = rotate[Cobj] * fact * 360;
	}
	// calculate scaling
	if(scale[Cobj] != 0) 
	{
		if(MFlags[Cact] & (1<<18))
		{
			cscx[Cobj] += scale[Cobj] / 360.; 
			cscy[Cobj] += scale[Cobj] / 360.;
		}
		else
		{
			var flt = (scale[Cobj] > 0) ? fact : ifact;
			cscx[Cobj] = ob[Cobj].cscx * (flt + 1.);
			cscy[Cobj] = ob[Cobj].cscy * (flt + 1.);
		}
		var fsize = 12 * cscx[Cobj];
	}
	// attached to the position of another Object
	if(MType[Cact] & ACT_XPATH_OBJXYZ) 
	{	
		cpox[Cobj] = cpox[Cpob] - ob[Cobj].corx;
		cpoy[Cobj] = cpoy[Cpob] - ob[Cobj].corx;
	}
	// trace an Object path
	else if(MType[Cact] & ACT_XPATH_OBJPTH)
	{
		if     ((Gtyp[Cpgo] & GEO_TYPE) == 1)
			GetRectLoc();
		else if((Gtyp[Cpgo] & GEO_TYPE) == 2) 
		{
			GetArcLoc();
		}			
		else if((Gtyp[Cpgo] & GEO_TYPE) == 3)
		{
			GetPathLoc();
		}
		x = cpox[Cobj] - ob[Cobj].corx;
		y = cpoy[Cobj] - ob[Cobj].cory;
		cpox[Cobj] = x * ob[Cpob].m0 + y * ob[Cpob].m2 + ob[Cpob].m4;
		cpoy[Cobj] = x * ob[Cpob].m1 + y * ob[Cpob].m3 + ob[Cpob].m5;
	}
	// trace the mouse
	else
	{
		if(MType[Cact] & ACT_XPATH_MOUSE)
			cpox[Cobj] = cmx - ob[Cobj].corx;
		else
			cpox[Cobj] += dpox[Cobj]; //^^ is this STOP?

		if(MType[Cact] & ACT_YPATH_MOUSE)
			cpoy[Cobj] = cmy - ob[Cobj].cory;
		else
			cpoy[Cobj] += dpoy[Cobj];
	}

	appTrans(Cobj);
	if(Cact) appMtrx();
}

function GetArcLoc() {
if(rate[Cobj] > 0) 
{
	cpox[Cobj] = (Math.sin(0.017453292*(-atDis[Cobj]-90)) * (Gszx[Cpgo] * 0.5));
	cpoy[Cobj] = (Math.cos(0.017453292*(-atDis[Cobj]-90)) * (Gszy[Cpgo] * 0.5));
}
else 
{
	cpox[Cobj] = (Math.sin(0.017453292*(atDis[Cobj]-90)) * (Gszx[Cpgo] * 0.5));
	cpoy[Cobj] = (Math.cos(0.017453292*(atDis[Cobj]-90)) * (Gszy[Cpgo] * 0.5));
}
return;
}

function GetPathLoc() {
var cPt, nPt, x, y, dis=0.0, ratio=0.0, ct = 0;

if(rate[Cobj] > 0) 
{
	while(ct <= Gnpt[Cpgo]) 
	{
		ct ++;
		if(LastPt[Cobj]+1 < Gnpt[Cpgo]) 
		{
			cPt = LastPt[Cobj];
			nPt = cPt + 1; 
		}
		else
		{
			if(Gtyp[Cpgo] & GEO_OPEN) 
			{
				LastPt[Cobj]  = 0;
				cPt = 0;
				nPt = 1; 
			}
			else 
			{
				LastPt[Cobj]  = Gnpt[Cpgo]-1;
				cPt = LastPt[Cobj];
				nPt = 0; 
			}
		}
		x  = (Gpxl[Cpgo][nPt] - Gpxl[Cpgo][cPt]);
		y  = (Gpyl[Cpgo][nPt] - Gpyl[Cpgo][cPt]);
		dis = Math.sqrt(x*x + y*y);
		if(atDis[Cobj] < (dis + DisPt[Cobj])) break;
		DisPt[Cobj] += dis;
		LastPt[Cobj]++;
		if(LastPt[Cobj] >= Gnpt[Cpgo]) 
		{
			cPt = 0;
			nPt = 1;
			LastPt[Cobj] = 0;
		}
	}
	ratio = (atDis[Cobj] - DisPt[Cobj]) / dis;
	cpox[Cobj] = Gpxl[Cpgo][cPt] + x * ratio;
	cpoy[Cobj] = Gpyl[Cpgo][cPt] + y * ratio;

	return;
}
else 
{
	while(ct <= Gnpt[Cpgo]) 
	{
		ct ++;
		if(LastPt[Cobj]+1 < Gnpt[Cpgo]) 
		{
			cPt = Gnpt[Cpgo] - LastPt[Cobj] - 1;
			nPt = cPt - 1; 
		}
		else
		{
			if(Gtyp[Cpgo] & GEO_OPEN) 
			{
				LastPt[Cobj]  = Gnpt[Cpgo] - 1;
				cPt = Gnpt[Cpgo] - 1;
				nPt = cPt - 1; 
			}
			else 
			{
				LastPt[Cobj]  = Gnpt[Cpgo];
				cPt = 0;
				nPt = LastPt[Cobj] - 1; 
			}
		}
		x  = (Gpxl[Cpgo][nPt] - Gpxl[Cpgo][cPt]);
		y  = (Gpyl[Cpgo][nPt] - Gpyl[Cpgo][cPt]);
		dis = Math.sqrt(x*x + y*y);
		if(atDis[Cobj] <= (dis + DisPt[Cobj])) break;
		DisPt[Cobj] += dis;
		LastPt[Cobj]++;
		if(LastPt[Cobj] >= Gnpt[Cpgo]) 
		{
			cPt = 0;
			nPt = 1;
			LastPt[Cobj] = 0;
		}
	}
	ratio = (atDis[Cobj] - DisPt[Cobj]) / dis;
	cpox[Cobj] = Gpxl[Cpgo][cPt] + x * ratio;
	cpoy[Cobj] = Gpyl[Cpgo][cPt] + y * ratio;

	return;
	}
}

function GetRectLoc() 
{

var dis = 0.0;
while (0==0) 
{
	if(rate[Cobj] > 0) 
	{
		if(LastPt[Cobj] == 0) 
		{
			dis = (Gpxl[Cpgo][1] - Gpxl[Cpgo][0]);
			if((DisPt[Cobj] + dis) > atDis[Cobj]) 
			{
				cpox[Cobj] = Gpxl[Cpgo][0] + (atDis[Cobj]-DisPt[Cobj]);
				cpoy[Cobj] = Gpyl[Cpgo][0];
				break; 
			}
			LastPt[Cobj] = 1;
			DisPt[Cobj] += dis; 
		}
		if(LastPt[Cobj] == 1) 
		{
			dis = (Gpyl[Cpgo][1] - Gpyl[Cpgo][0]);
			if((DisPt[Cobj] + dis) > atDis[Cobj]) 
			{
				cpox[Cobj] = Gpxl[Cpgo][1];
				cpoy[Cobj] = Gpyl[Cpgo][0] + (atDis[Cobj]-DisPt[Cobj]);
				break;
			}
			DisPt[Cobj] += dis;
			LastPt[Cobj] = 2;
		}
		if(LastPt[Cobj] == 2) 
		{
			dis = (Gpxl[Cpgo][1] - Gpxl[Cpgo][0]);
			if((DisPt[Cobj] + dis) > atDis[Cobj]) 
			{
				cpox[Cobj] = Gpxl[Cpgo][1] - (atDis[Cobj]-DisPt[Cobj]);
				cpoy[Cobj] = Gpyl[Cpgo][1];
				break; 
			}
			DisPt[Cobj] += dis;
			LastPt[Cobj] = 3; 
		}
		if(LastPt[Cobj] == 3) 
		{
			dis = (Gpyl[Cpgo][1] - Gpyl[Cpgo][0]);
			if((DisPt[Cobj] + dis) > atDis[Cobj]) 
			{
				cpox[Cobj] = Gpxl[Cpgo][0];
				cpoy[Cobj] = Gpyl[Cpgo][1] - (atDis[Cobj]-DisPt[Cobj]);
				break;
			}
			DisPt[Cobj] += dis;
			LastPt[Cobj] = 0;
		}
	}
	else 
	{
		if(LastPt[Cobj] == 0) 
		{
			dis = (Gpyl[Cpgo][1] - Gpyl[Cpgo][0]);
			if((DisPt[Cobj] + dis) > atDis[Cobj]) 
			{
				cpox[Cobj] = Gpxl[Cpgo][0];
				cpoy[Cobj] = Gpyl[Cpgo][0] + (atDis[Cobj]-DisPt[Cobj]);
				break; 
			}
			LastPt[Cobj] = 3;
			DisPt[Cobj] += dis; 
		}
		if(LastPt[Cobj] == 3) 
		{
			dis = (Gpxl[Cpgo][1] - Gpxl[Cpgo][0]);
			if((DisPt[Cobj] + dis) > atDis[Cobj]) 
			{
				cpox[Cobj] = Gpxl[Cpgo][0] + (atDis[Cobj]-DisPt[Cobj]);
				cpoy[Cobj] = Gpyl[Cpgo][1];
				break;
			}
			DisPt[Cobj] += dis;
			LastPt[Cobj] = 2;
		}
		if(LastPt[Cobj] == 2) 
		{
			dis = (Gpyl[Cpgo][1] - Gpyl[Cpgo][0]);
			if((DisPt[Cobj] + dis) > atDis[Cobj]) 
			{
				cpox[Cobj] = Gpxl[Cpgo][1];
				cpoy[Cobj] = Gpyl[Cpgo][1] - (atDis[Cobj]-DisPt[Cobj]);
				break; 
			}
			DisPt[Cobj] += dis;
			LastPt[Cobj] = 1; 
		}
		if(LastPt[Cobj] == 1) 
		{
			dis = (Gpxl[Cpgo][1] - Gpxl[Cpgo][0]);
			if((DisPt[Cobj] + dis) > atDis[Cobj]) 
			{
				cpox[Cobj] = Gpxl[Cpgo][1] - (atDis[Cobj]-DisPt[Cobj]);
				cpoy[Cobj] = Gpyl[Cpgo][0];
				break;
			}
			DisPt[Cobj] += dis;
			LastPt[Cobj] = 0;
		}
	}
}
return;
}

function resetMatrix() {
cM = 0;
ob[Cobj].m0 =  1;
ob[Cobj].m1 =  0;
ob[Cobj].m2 =  0;
ob[Cobj].m3 =  1;
ob[Cobj].m4 =  0;
ob[Cobj].m5 =  0;
}

function appTrans(obj) {
	resetMatrix();
	moveMatrix(cpox[obj]+ob[Cobj].corx, cpoy[obj]+ob[Cobj].cory);
	rotateMatrix(crot[obj]);
	scaleMatrix(cscx[obj],cscy[obj]);
	moveMatrix(-ob[Cobj].corx, -ob[Cobj].cory);
}

function moveMatrix(x, y) {
	ob[Cobj].m4 += x * ob[Cobj].m0 + y * ob[Cobj].m2;
	ob[Cobj].m5 += x * ob[Cobj].m1 + y * ob[Cobj].m3;
}

function scaleMatrix(x, y) {
	ob[Cobj].m0 *= x;
	ob[Cobj].m1 *= x;

	ob[Cobj].m2 *= y;
	ob[Cobj].m3 *= y;
}

function rotateMatrix(ang) {
//var cosAng = Math.cos(0.017453292*ang);
//var sinAng = Math.sin(0.017453292*ang);
var cosAng = Math.cos(ang);
var sinAng = Math.sin(ang);
var a = ob[Cobj].m0;
var b = ob[Cobj].m1;
var c = ob[Cobj].m2;
var d = ob[Cobj].m3;
var e = ob[Cobj].m4;
var f = ob[Cobj].m5;

ob[Cobj].m0 = a *  cosAng + c * sinAng;
ob[Cobj].m1 = b *  cosAng + d * sinAng;
ob[Cobj].m2 = a * -sinAng + c * cosAng;
ob[Cobj].m3 = b * -sinAng + d * cosAng;
}

function tranMatrix(cpob) {
var a = ob[Cobj].m0;
var b = ob[Cobj].m1;
var c = ob[Cobj].m2;
var d = ob[Cobj].m3;
var tx= ob[Cobj].m4;
var ty= ob[Cobj].m5;
	ob[Cobj].m0 = a * ob[cpob].m0 + b * ob[cpob].m2;
	ob[Cobj].m1 = a * ob[cpob].m1 + b * ob[cpob].m3;

	ob[Cobj].m2 = c * ob[cpob].m0 + d * ob[cpob].m2;
	ob[Cobj].m3 = c * ob[cpob].m1 + d * ob[cpob].m3;

	ob[Cobj].m4 = tx * ob[cpob].m0 + ty * ob[cpob].m2 + ob[cpob].m4;
	ob[Cobj].m5 = tx * ob[cpob].m1 + ty * ob[cpob].m3 + ob[cpob].m5;
}

function transPt(x1,y1,i) {
	workX[i] = x1 * ob[Cobj].m0 + y1 * ob[Cobj].m2 + ob[Cobj].m4;
    workY[i] = x1 * ob[Cobj].m1 + y1 * ob[Cobj].m3 + ob[Cobj].m5;
}

function appMtrx() {

if(Math.abs(cscx[Cobj]) < 0.01) cscx[Cobj] = 0.01;
if(Math.abs(cscy[Cobj]) < 0.01) cscy[Cobj] = 0.01;

var x = Gszx[Cgeo] * 0.5;
var y = Gszy[Cgeo] * 0.5;
transPt(x,y,0);
transPt(-x,y,1);
transPt(-x,-y,2);
transPt(x,-y,3);
xl = workX[0];
yl = workY[0];
xh = workX[0];
yh = workY[0];
for(i=1;i<4;i++) {
if(workX[i] < xl) xl = workX[i];
if(workY[i] < yl) yl = workY[i];
if(workX[i] > xh) xh = workX[i];
if(workY[i] > yh) yh = workY[i];
}
var width = xh - xl;
var height= yh - yl;


if(isNav4)
{
	ob[Cobj].style.resizeTo(width, height);
}
else
{
	if(ob[Cobj].geom)
	{  
		ob[Cobj].geom.width  = width;
		ob[Cobj].geom.height = height;
	}
}
//window.status = " Cobj=" + Cobj + " x=" + x + " y=" + y + " width=" + width + " height=" + height;
ob[Cobj].style.left=cpox[Cobj] - width*0.5;
ob[Cobj].style.top =cpoy[Cobj] - height*0.5;
}
//window.status = " Cobj=" + Cobj + " epox[Cobj]=" + epox[Cobj] + " Cgeo=" + Cgeo;
//window.status = " Deact Cobj=" + Cobj + " WDEvent[Cevt] & (1<<5)=" + WDEvent[Cevt] & (1<<5) + " Active[WDAObj[Cevt]]=" + Active[WDAObj[Cevt]];
//if(Math.abs(cscx[Cobj]) < 0.01) cscx[Cobj] = 0.01;
//if(Math.abs(cscy[Cobj]) < 0.01) cscy[Cobj] = 0.01;
//var x  = Gszx[Cgeo] * 0.5;
//var y  = Gszy[Cgeo] * 0.5;
//var x1 = -x * ob[Cobj].m0 + y * ob[Cobj].m2;
//var y1 = -x * ob[Cobj].m1 + y * ob[Cobj].m3;
//var width = x1;
//var height= y1;
//var x1 = x * ob[Cobj].m0 + y * ob[Cobj].m2;
//var y1 = x * ob[Cobj].m1 + y * ob[Cobj].m3;
//if(x1 > width)  width  = x1;
//if(y1 > height) height = y1;
//x1 = x * ob[Cobj].m0 + -y * ob[Cobj].m2;
//y1 = x * ob[Cobj].m1 + -y * ob[Cobj].m3;
//if(x1 > width)  width  = x1;
//if(y1 > height) height = y1;
//x1 = -x * ob[Cobj].m0 + -y * ob[Cobj].m2;
//y1 = -x * ob[Cobj].m1 + -y * ob[Cobj].m3;
//if(x1 > width)  width  = x1;
//if(y1 > height) height = y1;
//window.status = " Cgeo=" + Cgeo + " Gszx[Cgeo]=" + Gszx[Cgeo] + " Gszy[Cgeo]=" + Gszy[Cgeo] +" width=" + width + " height=" + height;
//width  = width * 2;
//height = height* 2;
