home *** CD-ROM | disk | FTP | other *** search
/ Chip 1999 August / Chip_1999-08_cd.bin / sharewar / imswbpro / _setup.1 / vmmech.js < prev    next >
Text File  |  1999-03-20  |  35KB  |  1,370 lines

  1. //<!--
  2. //*****************************************************************************//
  3. // (C) Copyright Virtual Mechanics 1998 Version 1.05, All rights reserved.     //
  4. // All copies of this software must include this Copyright notice.             //
  5. //*****************************************************************************//
  6. var Version = 0;
  7. var newPage = 0;
  8. nm = new Array();
  9. Active = new Array();
  10. ob   = new Array();
  11. cpox = new Array();
  12. cpoy = new Array();
  13. spox = new Array();
  14. spoy = new Array();
  15. epox = new Array();
  16. epoy = new Array();
  17. var Lpox;
  18. var Lpoy;
  19. dpox = new Array();
  20. dpoy = new Array();
  21. atDis  = new Array();
  22. DisPt  = new Array();
  23. disStep = new Array();
  24. Plen = new Array();
  25. Path = new Array();
  26. obRef= new Array();
  27. Gtyp = new Array();
  28. Gnpt=new Array();
  29. Gnam = new Array();
  30. Glen = new Array();
  31. Gszx = new Array();
  32. Gszy = new Array();
  33. Gorx = new Array();
  34. Gory = new Array();
  35. Gpxl = new Array();
  36. Gpyl = new Array();
  37. Gbrl = new Array();
  38. Gbrt = new Array();
  39. Gbrr = new Array();
  40. Gbrb = new Array();
  41. Grps = new Array();
  42. Grpl = new Array();
  43. Gspt = new Array();
  44. Snam = new Array();
  45. Scnt = new Array();
  46. PathCount = new Array();
  47. LastPt  = new Array();
  48. lstVal = new Array();
  49.  
  50. TimeLeft = new Array();
  51. AEvent = new Array();
  52. WDEvent = new Array();
  53. WAEvent = new Array();
  54. AValue = new Array();
  55. ATime = new Array();
  56. AEnter = new Array();
  57. ALeave = new Array();
  58. AKey = new Array();
  59. IKey = new Array();
  60. DEvent = new Array();
  61. DValue = new Array();
  62. DTime = new Array();
  63. DEnter = new Array();
  64. DLeave = new Array();
  65. DAKey = new Array();
  66. DIKey = new Array();
  67. WASOp  = new Array();
  68. WAGOp  = new Array();
  69. OpForm = new Array();
  70. WAAObj = new Array();
  71. WADObj = new Array();
  72. WAForm = new Array();
  73. WASVal = new Array();
  74. WAGVal = new Array();
  75. WACgeo = new Array();
  76. WACsnd = new Array();
  77. WACact = new Array();
  78. WACevt = new Array();
  79. WACatt = new Array();
  80. WACobj = new Array();
  81. WANobj = new Array();
  82. WALink = new Array();
  83. WDAObj = new Array();
  84. WDDObj = new Array();
  85. EndPath = new Array();
  86. MType = new Array();
  87.  
  88. MPath  = new Array();
  89. MRate  = new Array();
  90. MTime  = new Array();
  91. MDelay = new Array();
  92. MRepeat= new Array();
  93. MCount = new Array();
  94. MPLen  = new Array();
  95. MDir   = new Array();
  96. MGWst  = new Array();
  97. MGNth  = new Array();
  98. MGEst  = new Array();
  99. MGSth  = new Array();
  100.  
  101. eDELAY = (1);
  102. eDELAY_TIME = (2);
  103. eMOUSE = (4);
  104. eMOUSE_OVER = (8);
  105. eLMOUSE = (16);
  106. eRMOUSE = (32);
  107. eKEY = (64);
  108. eOBJECT_ENTER = (128);
  109. eOBJECT_ENTER_LIST = (256);
  110. eOBJECT_LEAVE = (512);
  111. eOBJECT_LEAVE_LIST = (1024);
  112. eLT_VALUE =    (2048);
  113. eEQ_VALUE = (4096);
  114. eGT_VALUE =    (8192);
  115. eVALUE      = (16384);
  116. eENDPATH  = (32768);
  117. eACTIVATE_1 = (65536);
  118. eACTIVATE_2    = (131072);
  119. eANDtest = (1<<30);
  120. var pageTime = -1;// link timer
  121. var Cobj;
  122. var Catt;
  123. var Cact;
  124. var Cevt;
  125. var Cgrp;
  126. var Cgeo;
  127. var Csnd;
  128. var Cpob;
  129. var Gpgo;
  130. var gcx;
  131. var gcy;
  132. var gcx;
  133. var gcy;
  134. var cmx = 0;
  135. var cmy = 0;
  136. var smx = -9999;
  137. var smy = -9999;
  138. var slm = 0;
  139. var llm = -9999;
  140. var sky = " ";
  141. var lstsnd = -1;
  142.  
  143. var lmx = -9999;
  144. var lmy = -9999;
  145. var lky = 0;
  146. var totObj;
  147. var mS;
  148. var mW;
  149. var waitTime;
  150. var GEO_TYPE = 7;
  151. var GEO_OPEN = 8;
  152. var GEO_COUNT= 32;
  153. ACT_XPATH_STOP     =(0);
  154. ACT_XPATH_OBJPTH =(1<<0);
  155. ACT_XPATH_OBJXYZ =(1<<1);
  156. ACT_XPATH_LEFT   =(1<<2);
  157. ACT_XPATH_RIGHT  =(1<<3);
  158. ACT_XPATH_MOUSE     =(1<<4);
  159. ACT_YPATH_STOP     =(0);
  160. ACT_YPATH_OBJPTH =(1<<8);
  161. ACT_YPATH_OBJXYZ =(1<<9);
  162. ACT_YPATH_UP     =(1<<10);
  163. ACT_YPATH_DOWN   =(1<<11);
  164. ACT_YPATH_MOUSE     =(1<<12);
  165. ACT_ZPATH_STOP     =(0);
  166. ACT_ZPATH_OBJPTH =(1<<16);
  167. ACT_ZPATH_OBJXYZ =(1<<17);
  168. ACT_ZPATH_IN     =(1<<18);
  169. ACT_ZPATH_OUT     =(1<<19);
  170. ACT_ZPATH_KEY     =(1<<20);
  171. ACT_PATH_STOP     =(0);
  172. ACT_PATH_START     =(1<<24);
  173. ACT_PATH_CENTER     =(1<<25);
  174. ACT_PATH_END     =(1<<26);
  175. ACT_GEO_WEST     =(1<<28);
  176. ACT_GEO_EAST     =(1<<29);
  177. ACT_GEO_NORTH    =(1<<30);
  178. ACT_GEO_SOUTH    =(1<<31);
  179. ACT_SETX         =(0xffffff00);
  180. ACT_SETY         =(0xffff00ff);
  181. ACT_SETZ         =(0xff00ffff);
  182. ACT_SETO         =(0xf0ffffff);
  183. ACT_SETF         =(0x0fffffff);
  184. ACT_GETX         =(0x000000ff);
  185. ACT_GETY         =(0x0000ff00);
  186. ACT_GETZ         =(0x00ff0000);
  187. ACT_GETO         =(0x0f000000);
  188. ACT_GETF         =(0xf0000000);
  189.  
  190. /**************************************************************************/
  191. var isNav4 = false, isIE4 = false;
  192. if (navigator.appVersion.charAt(0) >= "4") {
  193.     if (navigator.appName == "Netscape") {
  194.         isNav4 = true;
  195.         window.captureEvents(Event.MOUSEUP|Event.MOUSEDOWN|Event.MOUSEMOVE|Event.KEYPRESS);
  196.         window.onmousedown=NNmouseDown;
  197.         window.onmouseup=NNmouseUp;
  198.         window.onmousemove=NNmouseMove;
  199.         window.onkeypress=NNkeyPress;
  200.     }
  201.     else if (navigator.appVersion.indexOf("MSIE") != -1) {
  202.         window.document.onmousemove = IEmouseMove;
  203.         window.document.onkeypress  = IEkeyPress;
  204.         window.document.onmousedown = IEmouseDown;
  205.         window.document.onmouseup   = IEmouseUp;
  206.         window.document.onkeydown   = IEkeyPress;
  207.         window.document.ondragstart = IECancelEvent;
  208.         isIE4 = true;
  209.     }
  210. }
  211. function NNmouseMove(e) {
  212.     cmx = e.pageX;
  213.     cmy = e.pageY;
  214.     sclx = window.pageXOffset;
  215.     scly = window.pageYOffset;
  216. }
  217. function NNmouseDown(e) {
  218.     slm = slm | 1;
  219. //    window.releaseEvents(Event.MOUSEMOVE);
  220. //    window.releaseEvents(Event.MOUSEDOWN);
  221. //    document.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
  222.     document.onmousemove=drag;
  223.     document.onmouseup=enddrag;
  224.     smx=e.pageX;
  225.     smy=e.pageY + window.pageYOffset;
  226.     return true;
  227. }
  228. function enddrag(e) {
  229.     slm = slm | 2;
  230.     smx = e.pageX + window.pageXOffset;
  231.     smy = e.pageY + window.pageYOffset;
  232.     document.onmousemove=0;
  233.     document.releaseEvents(Event.MOUSEMOVE);
  234.     document.releaseEvents(Event.MOUSEUP);
  235.     window.captureEvents(Event.MOUSEMOVE|Event.MOUSEDOWN|Event.KEYPRESS);
  236.     return false;
  237. }
  238. function drag(e) {
  239.     cmx = e.pageX + window.pageXOffset;
  240.     cmy = e.pageY + window.pageYOffset;
  241. }
  242.  
  243. function NNmouseUp(e) {
  244.     slm = slm | 2 + window.pageXOffset;
  245.     smx = e.pageX + window.pageXOffset;
  246.     smy = e.pageY + window.pageYOffset;
  247. }
  248.  
  249. function NNkeyPress(e) {
  250.     sky = String.fromCharCode(e.which);
  251. }
  252.  
  253. function IEmouseMove() {
  254.     cmx = window.event.clientX + document.body.scrollLeft;
  255.     cmy = window.event.clientY + document.body.scrollTop;
  256.     sclx = document.body.scrollLeft;
  257.     scly = document.body.scrollTop;
  258. }
  259.  
  260. function IEmouseDown() {
  261.     slm = slm | 1;
  262.     smx = window.event.clientX + document.body.scrollLeft;
  263.     smy = window.event.clientY + document.body.scrollTop;
  264. }
  265.  
  266. function IEmouseUp() {
  267.     slm = slm | 2;
  268.     smx = window.event.clientX + document.body.scrollLeft;
  269.     smy = window.event.clientY + document.body.scrollTop;
  270. }
  271.  
  272. function IEkeyPress() {
  273.     sky = window.event.keyCode;
  274. }
  275. function IECancelEvent() {
  276.     window.event.returnValue=false;
  277. }
  278. /**************************************************************************/
  279. function Setup() {
  280. // setup defaults
  281.     tmCount=0;
  282.  
  283.     obRef[0] = 0;
  284.     ob[0] = new Array();
  285.     ob[0] = 0;
  286.     ob[0].name = "Geo0";
  287.     ob[0].geo = 0;
  288.     ob[0].att = 0; 
  289.     ob[0].evt = 0; 
  290.     ob[0].act = 0;
  291.     ob[0].grp = 0;
  292.     ob[0].cpox =0.000000;
  293.     ob[0].cpoy =0.000000;
  294.     ob[0].cscx =1.000000;
  295.     ob[0].cscy =1.000000;
  296.     ob[0].crot =0.000000;
  297.     ob[0].flg = 0;
  298.  
  299.     MPath[0]  = 0;
  300.  
  301.     for(nob=1; nob<= pageObj; nob++) {
  302.         ref = pObjLst[nob];
  303.         cobj = obRef[ref];
  304.         spox[cobj] = ob[cobj].cpox;  
  305.         spoy[cobj] = ob[cobj].cpoy;
  306.         SetPath(cobj);
  307.  
  308.         reset(cobj);
  309.  
  310.         if(ob[cobj].flg & 16)
  311.             Active[cobj]    =  4;    // set to initial active state
  312.     }
  313. }
  314.  
  315. /***************************************************************************/
  316. function ticktime() {
  317.     doObjectList();
  318.     window.setTimeout("ticktime();", waitTime, "JavaScript");
  319. }
  320.  
  321. function doObjectList() {
  322. //    window.norefresh;
  323.     if(newPage == 1) window.location=WALink[Cevt];
  324.  
  325.     if(pageTime >= 0)
  326.     {
  327.         tmCount++;
  328.         if(tmCount > pageTime) 
  329.         {
  330.             window.location=pgLink;
  331.             pageTime = -1;
  332.         }
  333.     }
  334.  
  335.     if(lmx == smx) smx = -99999;
  336.     if(lmy == smy) smy = -99999;
  337.     if(lky == sky) sky = " ";
  338.     llt = 0;
  339.     if((llm & 2) == (slm & 2)) slm = (slm  & ~2);
  340.     if((llm & 1) == (slm & 1)) slm = (slm  & ~1);
  341.     lmx = smx;
  342.     lmy = smy;
  343.     lky = sky;
  344.     llm = slm;
  345.  
  346.     MoOvrTst();
  347.  
  348.     for(nob=1; nob<= pageObj; nob++) {
  349.         ref = pObjLst[nob];
  350.         gcx = 0;
  351.         gcy = 0;
  352.         cobj = obRef[ref]
  353.         Cgrp = ob[cobj].grp;
  354.         if(!Cgrp) doObject(cobj);
  355.     }
  356. }
  357.  
  358. function MoOvrTst() {
  359. for(i=0; i < MoLNo; i++) {
  360.  Cobj = Molst[i];
  361.   Cgeo = ob[Cobj].geo;
  362.   if(MouseOver() == 1) {
  363.     if(ob[Cobj].flg & 256) ob[Cobj].style.visibility = "visible";
  364.     else                   ob[Cobj].style.visibility = "hidden";
  365.   }
  366.   else {
  367.     if(ob[Cobj].flg & 128) ob[Cobj].style.visibility = "visible";
  368.     else                   ob[Cobj].style.visibility = "hidden";
  369.   }
  370. }}
  371.  
  372. //function MouseOver() {
  373. //  if ( cmx >= ob[Cobj].left && cmx <= ob[Cobj].right && cmy >= ob[Cobj].top && cmy <= ob[Cobj].bottom) return 1;
  374. //  return 0;
  375. //}
  376.  
  377. function doObject(cobj)
  378. {
  379.     Cobj = cobj;
  380.     Cgeo = ob[Cobj].geo;
  381.     Csnd = ob[Cobj].snd;
  382.     Cevt = ob[Cobj].evt;
  383.     Catt = ob[Cobj].att;
  384.     Cact = ob[Cobj].act;
  385.  
  386.     if(Cact)
  387.     {            
  388.         Cpob = MPath[Cact];
  389.         if(Cpob)
  390.             Cpgo = ob[Cpob].geo;
  391.         else
  392.             Cpgo = 0;
  393.     }
  394.     else
  395.     {
  396.         Cpob = 0;
  397.         Cpgo = 0;
  398.     }
  399.  
  400.     if(Cevt) Evtest();
  401.  
  402.     if     (Active[Cobj] == 4) whenActive();
  403.     else if(Active[Cobj] == 2) whenDeactive();
  404.     else if(Active[Cobj] == 1) isActive();
  405.     else if(Active[Cobj] == 0) isDeactive();
  406.  
  407.     if(Cgeo && (Gtyp[Cgeo] & (1<<4)))
  408.     { 
  409.         doGroup(Cgeo);
  410.         return;
  411.     }
  412.  
  413. }
  414. function doGroup(cgrp)
  415. {
  416.     var gobj;
  417.     gcx = cpox[Cobj];
  418.     gcy = cpoy[Cobj];
  419.     gobj = Cobj;
  420.     for(i = 0; i < Grps[cgrp]; i++)
  421.     { 
  422.         doObject(Grpl[cgrp][i]);
  423.         ob[Cobj].style.left=gcx+cpox[Cobj] - Gszx[Cgeo] * ob[Cobj].cscx;
  424.         ob[Cobj].style.top =gcy+cpoy[Cobj] - Gszy[Cgeo] * ob[Cobj].cscy;
  425.     }
  426.     return;
  427. }
  428. /*************************************************************************/
  429. function UpdPos() {
  430. Lpox = cpox[Cobj];
  431. Lpoy = cpoy[Cobj];
  432. // end of path condition
  433. if(Plen[Cobj] > 0 && atDis[Cobj] >= Plen[Cobj]) 
  434. {
  435.     atDis[Cobj] -= Plen[Cobj];
  436.     DisPt[Cobj]  = 0;
  437.     LastPt[Cobj] = 0;
  438.     cpox[Cobj]   = spox[Cobj];
  439.     cpoy[Cobj]   = spoy[Cobj];
  440. }
  441. if(MType[Cact] & ACT_XPATH_OBJXYZ) 
  442. {
  443.     cpox[Cobj] = cpox[Cpob];
  444.     cpoy[Cobj] = cpoy[Cpob];
  445. }
  446. else if(MType[Cact] & ACT_XPATH_OBJPTH)
  447. {
  448.     if     ((Gtyp[Cpgo] & GEO_TYPE) == 1)
  449.         GetRectLoc();
  450.     else if((Gtyp[Cpgo] & GEO_TYPE) == 2) 
  451.     {
  452.         GetArcLoc();
  453.     }
  454.     else if((Gtyp[Cpgo] & GEO_TYPE) == 3)
  455.     {
  456.         GetPathLoc();
  457.     }
  458.     cpox[Cobj] += cpox[Cpob];
  459.     cpoy[Cobj] += cpoy[Cpob];
  460. }
  461. else
  462. {
  463.     if(MType[Cact] & ACT_XPATH_MOUSE)
  464.         cpox[Cobj] = cmx;
  465.     else
  466.         cpox[Cobj] += dpox[Cobj]; //^^ is this STOP?
  467.  
  468.     if(MType[Cact] & ACT_YPATH_MOUSE)
  469.         cpoy[Cobj] = cmy;
  470.     else
  471.         cpoy[Cobj] += dpoy[Cobj];
  472. }
  473. if(Plen[Cobj] != 0) atDis[Cobj] += disStep[Cobj];
  474. ob[Cobj].style.left=cpox[Cobj] - Gszx[Cgeo] * ob[Cobj].cscx;
  475. ob[Cobj].style.top =cpoy[Cobj] - Gszy[Cgeo] * ob[Cobj].cscy;
  476.  
  477. if(Plen[Cobj] > 0 && atDis[Cobj] >= Plen[Cobj]) 
  478. {
  479.     if(PathCount[Cobj] > 0) PathCount[Cobj]--;
  480.     if(PathCount[Cobj] == 0) {
  481.         EndPath[Cobj] = 1;
  482.         ob[Cobj].style.left=epox[Cobj] - Gszx[Cgeo] * ob[Cobj].cscx;
  483.         ob[Cobj].style.top =epoy[Cobj] - Gszy[Cgeo] * ob[Cobj].cscy;
  484.     }
  485. }
  486. if(Cact) UpdGeo();
  487. return;
  488. }
  489.  
  490. function UpdGeo() {
  491.     var drx = Lpox - cpox[Cobj];
  492.     var dry = Lpoy - cpoy[Cobj];
  493.     if(Math.abs(dry) > Math.abs(drx))
  494.     {
  495.         if    ((dry < 0) && (MDir[Cobj] != 270))
  496.         {
  497.             if(MType[Cact] & (ACT_GEO_SOUTH))
  498.             {
  499.                 ob[Cobj].image.src = Gspt[MGSth[Cact]].src;
  500.             }
  501.             MDir[Cobj] = 270;
  502.         }
  503.         else  if((dry >= 0) && MDir[Cobj] != 90)
  504.         {
  505.             if(MType[Cact] & (ACT_GEO_NORTH))
  506.             { 
  507.                 ob[Cobj].image.src = Gspt[MGNth[Cact]].src;
  508.             }
  509.             MDir[Cobj] = 90;
  510.         }
  511.     }
  512.     else
  513.     {
  514.         if    ((drx > 0) && (MDir[Cobj] != 0))
  515.         {
  516.             if(MType[Cact] & (ACT_GEO_WEST))
  517.             { 
  518.                 ob[Cobj].image.src = Gspt[MGWst[Cact]].src;
  519.             }
  520.             MDir[Cobj] = 0;
  521.         }
  522.         else  if((drx <= 0) && MDir[Cobj] != 180)
  523.         {
  524.             if(MType[Cact] & (ACT_GEO_EAST))
  525.             { 
  526.                 ob[Cobj].image.src = Gspt[MGEst[Cact]].src;
  527.             }
  528.             MDir[Cobj] = 180;
  529.         }
  530.     }
  531. return;
  532. }
  533.  
  534. function UpdStr() {
  535.     if(lstVal[Cobj] == ob[Cobj].val) return;
  536.     lstVal[Cobj] = ob[Cobj].val;
  537.     if(isIE4)
  538.         ob[Cobj].name.innerText = ob[Cobj].val;
  539.     else
  540.         window.status = "Object " + ob[Cobj].name + " Counter=" + ob[Cobj].val;
  541.  
  542.     return;
  543. }
  544.  
  545. function UpdAudio(on)
  546. {
  547.     if(isIE4)
  548.     {
  549.         if(on > 0)
  550.         {
  551.             if(Scnt[Csnd] < 0) Scnt[Csnd] = 9999;
  552.             SoundEffect.loop= Scnt[Csnd];
  553.             SoundEffect.src = Snam[Csnd];
  554. //            SoundEffect.autostart=1;
  555.             lstsnd = Csnd;
  556.         }
  557.         else
  558.         {
  559.             if(lstsnd != Csnd) return;
  560.             SoundEffect.src= " ";
  561.             SoundEffect.loop= 0;
  562.             SoundEffect.autostart=0;
  563.         }
  564.     }
  565.     else if(isNav4) 
  566.     {
  567. //        <embed id = BackMusic  src=Snam[Csnd] autostart=true loop= Scnt[Csnd] hidden=true></embed>
  568.     }
  569. }
  570.  
  571. /**************************************************************************/
  572. function GetArcLoc() {
  573. if(MRate[Cact] > 0) 
  574. {
  575.     cpox[Cobj] = (Math.sin(0.017453292*(-atDis[Cobj]-90)) * Gszx[Cpgo]) * ob[Cpob].cscx;
  576.     cpoy[Cobj] = (Math.cos(0.017453292*(-atDis[Cobj]-90)) * Gszy[Cpgo]) * ob[Cpob].cscy;
  577. }
  578. else 
  579. {
  580.     cpox[Cobj] = (Math.sin(0.017453292*(atDis[Cobj]-90)) * Gszx[Cpgo]) * ob[Cpob].cscx;
  581.     cpoy[Cobj] = (Math.cos(0.017453292*(atDis[Cobj]-90)) * Gszy[Cpgo]) * ob[Cpob].cscy;
  582. }
  583. return;
  584. }
  585. /*************************************************************************/
  586. function GetPathLoc() {
  587. var cPt, nPt, x, y, dis=0.0, ratio=0.0, ct = 0;
  588.  
  589. if(MRate[Cact] > 0) 
  590. {
  591.     while(ct <= Gnpt[Cpgo]) 
  592.     {
  593.         ct ++;
  594.         if(LastPt[Cobj]+1 < Gnpt[Cpgo]) 
  595.         {
  596.             cPt = LastPt[Cobj];
  597.             nPt = cPt + 1; 
  598.         }
  599.         else
  600.         {
  601.             if(Gtyp[Cpgo] & GEO_OPEN) 
  602.             {
  603.                 LastPt[Cobj]  = 0;
  604.                 cPt = 0;
  605.                 nPt = 1; 
  606.             }
  607.             else 
  608.             {
  609.                 LastPt[Cobj]  = Gnpt[Cpgo]-1;
  610.                 cPt = LastPt[Cobj];
  611.                 nPt = 0; 
  612.             }
  613.         }
  614.         x  = (Gpxl[Cpgo][nPt] - Gpxl[Cpgo][cPt]) * ob[Cpob].cscx;
  615.         y  = (Gpyl[Cpgo][nPt] - Gpyl[Cpgo][cPt]) * ob[Cpob].cscy;
  616.         dis = Math.sqrt(x*x + y*y);
  617.         if(atDis[Cobj] < (dis + DisPt[Cobj])) break;
  618.         DisPt[Cobj] += dis;
  619.         LastPt[Cobj]++;
  620.         if(LastPt[Cobj] >= Gnpt[Cpgo]) 
  621.         {
  622.             cPt = 0;
  623.             nPt = 1;
  624.         }
  625.     }
  626.     ratio = (atDis[Cobj] - DisPt[Cobj]) / dis;
  627.     cpox[Cobj] = Gpxl[Cpgo][cPt] * ob[Cpob].cscx + x * ratio;
  628.     cpoy[Cobj] = Gpyl[Cpgo][cPt] * ob[Cpob].cscy + y * ratio;
  629.  
  630.     return;
  631. }
  632. else 
  633. {
  634.     nPt = LastPt[Cobj];
  635.     if(nPt == Gnpt[Cpgo]-1)
  636.         cPt = 0;
  637.     else
  638.         cPt = nPt; 
  639.     while(ct <= Gnpt[Cpgo]) 
  640.     {
  641.         ct ++;
  642.         if(nPt > 0) 
  643.         {
  644.             cPt = nPt;
  645.             nPt--; 
  646.         }
  647.         else 
  648.         {
  649.             if(Gtyp[Cpgo] & GEO_OPEN) 
  650.             {
  651.                 LastPt[Cobj]  = Gnpt[Cpgo]-1;
  652.                 cPt = LastPt[Cobj];
  653.                 nPt = cPt-1; 
  654.             }
  655.             else 
  656.             {
  657.                 cPt = 0;
  658.                 nPt = Gnpt[Cpgo]-1; 
  659.                 LastPt[Cobj]  = nPt;
  660.             }
  661.         }
  662.  
  663.         x  = (Gpxl[Cpgo][nPt] - Gpxl[Cpgo][cPt]) * ob[Cpob].cscx;
  664.         y  = (Gpyl[Cpgo][nPt] - Gpyl[Cpgo][cPt]) * ob[Cpob].cscy;
  665.         dis = Math.sqrt(x*x + y*y);
  666.         if(atDis[Cobj] < (dis + DisPt[Cobj])) break;
  667.         DisPt[Cobj] += dis;
  668.         LastPt[Cobj]--;
  669. //        nPt--;
  670. //        if(nPt < 0) 
  671. //        {
  672. //            cPt = 0;
  673. //            nPt = Gnpt[Cpgo]-1;
  674. //        }
  675.     }
  676.     ratio = (atDis[Cobj] - DisPt[Cobj]) / dis;
  677.     cpox[Cobj] = Gpxl[Cpgo][cPt] * ob[Cpob].cscx + x * ratio;
  678.     cpoy[Cobj] = Gpyl[Cpgo][cPt] * ob[Cpob].cscy + y * ratio;
  679.  
  680.     return;
  681. }
  682. }
  683. /************************************************************************/
  684. function GetRectLoc() 
  685. {
  686. var dis = 0.0;
  687.  
  688. while (0==0) 
  689. {
  690.     if(MRate[Cact] > 0) 
  691.     {
  692.         if(LastPt[Cobj] == 0) 
  693.         {
  694.             dis = (Gpxl[Cpgo][1] - Gpxl[Cpgo][0]) * ob[Cpob].cscx;
  695.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  696.             {
  697.                 cpox[Cobj] = Gpxl[Cpgo][0] * ob[Cpob].cscx + atDis[Cobj];
  698.                 cpoy[Cobj] = Gpyl[Cpgo][0] * ob[Cpob].cscy;
  699.                 break; 
  700.             }
  701.             LastPt[Cobj] = 1;
  702.             DisPt[Cobj] += dis; 
  703.         }
  704.         if(LastPt[Cobj] == 1) 
  705.         {
  706.             dis = (Gpyl[Cpgo][1] - Gpyl[Cpgo][0]) * ob[Cpob].cscy;
  707.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  708.             {
  709.                 cpox[Cobj] = Gpxl[Cpgo][1] * ob[Cpob].cscx;
  710.                 cpoy[Cobj] = Gpyl[Cpgo][0] * ob[Cpob].cscy + (atDis[Cobj]-DisPt[Cobj]);
  711.                 break;
  712.             }
  713.             DisPt[Cobj] += dis;
  714.             LastPt[Cobj] = 2;
  715.         }
  716.         if(LastPt[Cobj] == 2) 
  717.         {
  718.             dis = (Gpxl[Cpgo][1] - Gpxl[Cpgo][0]) * ob[Cpob].cscx;
  719.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  720.             {
  721.                 cpox[Cobj] = Gpxl[Cpgo][1] * ob[Cpob].cscx - (atDis[Cobj]-DisPt[Cobj]);
  722.                 cpoy[Cobj] = Gpyl[Cpgo][1] * ob[Cpob].cscy;
  723.                 break; 
  724.             }
  725.             DisPt[Cobj] += dis;
  726.             LastPt[Cobj] = 3; 
  727.         }
  728.         if(LastPt[Cobj] == 3) 
  729.         {
  730.             dis = (Gpyl[Cpgo][1] - Gpyl[Cpgo][0]) * ob[Cpob].cscy;
  731.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  732.             {
  733.                 cpox[Cobj] = Gpxl[Cpgo][0] * ob[Cpob].cscx;
  734.                 cpoy[Cobj] = Gpyl[Cpgo][1] * ob[Cpob].cscy - (atDis[Cobj]-DisPt[Cobj]);
  735.                 break;
  736.             }
  737.         }
  738.     }
  739.     else 
  740.     {
  741.         if(LastPt[Cobj] == 0) 
  742.         {
  743.             dis = (Gpyl[Cpgo][1] - Gpyl[Cpgo][0]) * ob[Cpob].cscy;
  744.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  745.             {
  746.                 cpox[Cobj] = Gpxl[Cpgo][0] * ob[Cpob].cscx;
  747.                 cpoy[Cobj] = Gpyl[Cpgo][0] * ob[Cpob].cscy + atDis[Cobj];
  748.                 break; 
  749.             }
  750.             LastPt[Cobj] = 3;
  751.             DisPt[Cobj] += dis; 
  752.         }
  753.         if(LastPt[Cobj] == 3) 
  754.         {
  755.             dis = (Gpxl[Cpgo][1] - Gpxl[Cpgo][0]) * ob[Cpob].cscx;
  756.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  757.             {
  758.                 cpox[Cobj] = Gpxl[Cpgo][0] * ob[Cpob].cscx + (atDis[Cobj]-DisPt[Cobj]);
  759.                 cpoy[Cobj] = Gpyl[Cpgo][1] * ob[Cpob].cscy;
  760.                 break;
  761.             }
  762.             DisPt[Cobj] += dis;
  763.             LastPt[Cobj] = 2;
  764.         }
  765.         if(LastPt[Cobj] == 2) 
  766.         {
  767.             dis = (Gpyl[Cpgo][1] - Gpyl[Cpgo][0]) * ob[Cpob].cscy;
  768.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  769.             {
  770.                 cpox[Cobj] = Gpxl[Cpgo][1] * ob[Cpob].cscx;
  771.                 cpoy[Cobj] = Gpyl[Cpgo][1] * ob[Cpob].cscy - (atDis[Cobj]-DisPt[Cobj]);
  772.                 break; 
  773.             }
  774.             DisPt[Cobj] += dis;
  775.             LastPt[Cobj] = 1; 
  776.         }
  777.         if(LastPt[Cobj] == 1) 
  778.         {
  779.             dis = (Gpxl[Cpgo][1] - Gpxl[Cpgo][0]) * ob[Cpob].cscx;
  780.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  781.             {
  782.                 cpox[Cobj] = Gpxl[Cpgo][1] * ob[Cpob].cscx - (atDis[Cobj]-DisPt[Cobj]);
  783.                 cpoy[Cobj] = Gpyl[Cpgo][0] * ob[Cpob].cscy;
  784.                 break;
  785.             }
  786.         }
  787.     }
  788. }
  789. return;
  790. }
  791. /****************************************************************************/
  792. function Evtest() 
  793. {
  794.     if(Active[Cobj] == 0) 
  795.     {
  796.         if(AEvent[Cevt] & eANDtest)
  797.             ActANDTest();
  798.         else
  799.             ActORTest();
  800.     }
  801.     else if(Active[Cobj] == 1) {
  802.         if(DEvent[Cevt] & eANDtest)
  803.             DeactANDTest();
  804.         else
  805.             DeactORTest();
  806.     }
  807. return;
  808. }
  809. /***************************************************************************/
  810. function ActORTest()
  811. {
  812. if(((AEvent[Cevt] & eDELAY)         && TimeCount() <= 0  ) ||
  813.   ( (AEvent[Cevt] & eOBJECT_ENTER)    && ObjectEnter(AEnter[Cevt])  ) ||
  814.   ( (AEvent[Cevt] & eOBJECT_LEAVE)     && ObjectLeave(ALeave[Cevt])  ) ||
  815.   ( (AEvent[Cevt] & eMOUSE)            && MouseSelect() > 0 ) ||
  816.   ( (AEvent[Cevt] & eMOUSE_OVER)    && MouseOver()   ) ||
  817.   ( (AEvent[Cevt] & eLMOUSE)        && IsMouseLClick()   ) ||
  818.   ( (AEvent[Cevt] & eRMOUSE)        && IsMouseRClick()   ) ||
  819.   ( (AEvent[Cevt] & eKEY)            && KeyChar()   ) ||
  820.   ( (AEvent[Cevt] & eLT_VALUE)        && ob[Cobj].val <  AValue[Cevt]) ||
  821.   ( (AEvent[Cevt] & eEQ_VALUE)        && ob[Cobj].val == AValue[Cevt]) ||
  822.   ( (AEvent[Cevt] & eGT_VALUE)        && ob[Cobj].val >  AValue[Cevt]) ||
  823.   ( (AEvent[Cevt] & eENDPATH)        && EndPath[Cobj]     )   )
  824. Active[Cobj] = 4;
  825. }
  826. /***************************************************************************/
  827. function ActANDTest()
  828. {
  829. if(((AEvent[Cevt] & eDELAY)         && !(TimeCount() <= 0)  ) ||
  830.   ( (AEvent[Cevt] & eOBJECT_ENTER)    && !ObjectEnter(AEnter[Cevt])  ) ||
  831.   ( (AEvent[Cevt] & eOBJECT_LEAVE)     && !ObjectLeave(ALeave[Cevt])  ) ||
  832.   ( (AEvent[Cevt] & eMOUSE)            && !(MouseSelect() > 0) ) ||
  833.   ( (AEvent[Cevt] & eMOUSE_OVER)    && !MouseOver()   ) ||
  834.   ( (AEvent[Cevt] & eLMOUSE)        && !IsMouseLClick()   ) ||
  835.   ( (AEvent[Cevt] & eRMOUSE)        && !IsMouseRClick()   ) ||
  836.   ( (AEvent[Cevt] & eKEY)            && !KeyChar()   ) ||
  837.   ( (AEvent[Cevt] & eLT_VALUE)        && !(ob[Cobj].val <  AValue[Cevt])) ||
  838.   ( (AEvent[Cevt] & eEQ_VALUE)        && !(ob[Cobj].val == AValue[Cevt])) ||
  839.   ( (AEvent[Cevt] & eGT_VALUE)        && !(ob[Cobj].val >  AValue[Cevt])) ||
  840.   ( (AEvent[Cevt] & eENDPATH)        && !EndPath[Cobj]     )   )
  841.   {} else Active[Cobj] = 4;
  842. }
  843. /***************************************************************************/
  844. function DeactORTest()
  845. {
  846.  
  847. if(((DEvent[Cevt] & eDELAY)         && TimeCount() <= 0  ) ||
  848.   ( (DEvent[Cevt] & eOBJECT_ENTER)    && ObjectEnter(DEnter[Cevt])  ) ||
  849.   ( (DEvent[Cevt] & eOBJECT_LEAVE)     && ObjectLeave(DLeave[Cevt])  ) ||
  850.   ( (DEvent[Cevt] & eMOUSE)            && MouseSelect() > 0 ) ||
  851.   ( (DEvent[Cevt] & eMOUSE_OVER)    && !MouseOver()   ) ||
  852.   ( (DEvent[Cevt] & eLMOUSE)        && IsMouseLClick()   ) ||
  853.   ( (DEvent[Cevt] & eRMOUSE)        && IsMouseRClick()   ) ||
  854.   ( (DEvent[Cevt] & eKEY)            && KeyChar()   ) ||
  855.   ( (DEvent[Cevt] & eLT_VALUE)        && ob[Cobj].val <  AValue[Cevt]) ||
  856.   ( (DEvent[Cevt] & eEQ_VALUE)        && ob[Cobj].val == AValue[Cevt]) ||
  857.   ( (DEvent[Cevt] & eGT_VALUE)        && ob[Cobj].val >  AValue[Cevt]) ||
  858.   ( (DEvent[Cevt] & eENDPATH)        && EndPath[Cobj]     )   )
  859.     Active[Cobj] = 2;
  860. }
  861. /***************************************************************************/
  862. function DeactANDTest()
  863. {
  864. if(((DEvent[Cevt] & eDELAY)         && !(TimeCount() <= 0)  ) ||
  865.   ( (DEvent[Cevt] & eOBJECT_ENTER)    && !ObjectEnter(DEnter[Cevt])  ) ||
  866.   ( (DEvent[Cevt] & eOBJECT_LEAVE)     && !ObjectLeave(DLeave[Cevt])  ) ||
  867.   ( (DEvent[Cevt] & eMOUSE)            && !(MouseSelect() > 0) ) ||
  868.   ( (DEvent[Cevt] & eMOUSE_OVER)    && !MouseOver()   ) ||
  869.   ( (DEvent[Cevt] & eLMOUSE)        && !IsMouseLClick()   ) ||
  870.   ( (DEvent[Cevt] & eRMOUSE)        && !IsMouseRClick()   ) ||
  871.   ( (DEvent[Cevt] & eKEY)            && !KeyChar()   ) ||
  872.   ( (DEvent[Cevt] & eLT_VALUE)        && !(ob[Cobj].val <  AValue[Cevt])) ||
  873.   ( (DEvent[Cevt] & eEQ_VALUE)        && !(ob[Cobj].val == AValue[Cevt])) ||
  874.   ( (DEvent[Cevt] & eGT_VALUE)        && !(ob[Cobj].val >  AValue[Cevt])) ||
  875.   ( (DEvent[Cevt] & eENDPATH)        && !EndPath[Cobj]     )   )
  876.   {} else Active[Cobj] = 2;
  877. }
  878. /**************************************************************************/
  879. function TimeCount() {
  880.     if(TimeLeft[Cobj] > 0)  
  881.     {
  882.         if(isNav4) TimeLeft[Cobj] -= 2;
  883.         else       TimeLeft[Cobj] -= 1;
  884.     }
  885.     return (TimeLeft[Cobj]);
  886. }
  887.  
  888. function ObjectEnter(eobj) {
  889. x = Gszx[Cgeo] * ob[Cobj].cscx;
  890. y = Gszy[Cgeo] * ob[Cobj].cscy;
  891. if ( cpox[eobj] >= (cpox[Cobj] - x) && cpox[eobj] <= (cpox[Cobj]) + x &&
  892.       cpoy[eobj] >= (cpoy[Cobj] - y) && cpoy[eobj] <= (cpoy[Cobj]) + y )
  893.     return 1;
  894. return 0;
  895. }
  896.  
  897. function ObjectLeave(eobj) {
  898. x = Gszx[Cgeo] * ob[Cobj].cscx;
  899. y = Gszy[Cgeo] * ob[Cobj].cscy;
  900. if ( cpox[eobj] >= cpox[Cobj] - x && cpox[eobj] <= cpox[Cobj] + x &&
  901.      cpoy[eobj] >= cpoy[Cobj] - y && cpoy[eobj] <= cpoy[Cobj] + y )
  902.     return 0;
  903. return 1;
  904. }
  905.  
  906. function MouseSelect() {
  907. var val = 0;
  908. if(smx == -99999) return val;
  909. x = Gszx[Cgeo] * ob[Cobj].cscx;
  910. y = Gszy[Cgeo] * ob[Cobj].cscy;
  911. if ( smx >= cpox[Cobj] - x && smx <= cpox[Cobj] + x &&
  912.      smy >= cpoy[Cobj] - y && smy <= cpoy[Cobj] + y )
  913.     return val = 1;
  914. return val;
  915. }
  916.  
  917. function MouseOver() {
  918. x = Gszx[Cgeo] * ob[Cobj].cscx;
  919. y = Gszy[Cgeo] * ob[Cobj].cscy;
  920. if ( cmx >= cpox[Cobj] - x && cmx <= cpox[Cobj] + x &&
  921.      cmy >= cpoy[Cobj] - y && cmy <= cpoy[Cobj] + y )
  922.     return 1;
  923. return 0;
  924. }
  925.  
  926. function IsMouseLClick() {
  927. return (slm && 1);
  928. }
  929.  
  930. function IsMouseRClick() {
  931. return (slm && 2);
  932. }
  933.  
  934. function KeyChar() {
  935. if(!sky) return 0;
  936. if(isNav4 && (AKey[Cevt] == sky)) return 1;
  937. if(isIE4  && (IKey[Cevt] == sky)) return 1;
  938. return 0;
  939. }
  940.  
  941. /***************************************************************************/
  942. function isDeactive() {
  943.     if(PathCount[Cobj] != 0) UpdPos();
  944.     if(Gtyp[Cgeo] & GEO_COUNT) UpdStr();
  945.  
  946. return;
  947. }
  948. /***************************************************************************/
  949. function isActive() {
  950.     if(PathCount[Cobj] != 0) UpdPos();
  951.     if(Gtyp[Cgeo] & GEO_COUNT) UpdStr();
  952. return;
  953. }
  954. /***************************************************************************/
  955. function whenActive()
  956. {
  957.     Active[Cobj]  = 1;
  958.     EndPath[Cobj] = 0;
  959.  
  960.     // set default active events
  961.     if(!Cevt)
  962.     {
  963.         TimeLeft[Cobj]  =  0;
  964.         PathCount[Cobj] = 0;
  965.         ob[Cobj].style.visibility = "visible";
  966.     }
  967.     else
  968.     {
  969. //        if(WAEvent[Cevt] & (1<<14)) window.location=WALink[Cevt];
  970. //        if(WAEvent[Cevt] & (1<<15)) window.location=WALink[Cevt];
  971.         if(WAEvent[Cevt] & (1<<14) || WAEvent[Cevt] & (1<<15)) 
  972.         {
  973.             if (navigator.appName == "Netscape") waitTime = 100;
  974.             newPage = 1;
  975.         }
  976.  
  977.         if(Csnd > 0) UpdAudio((WAEvent[Cevt] & 16));
  978. //        if(WAEvent[Cevt] & 16)     UpdAudio(); //sound
  979.         if(WAEvent[Cevt] & 8) ob[Cobj].style.visibility = "visible";
  980.         else                  ob[Cobj].style.visibility = "hidden";
  981.  
  982.         TimeLeft[Cobj]  = DTime[Cevt];
  983.  
  984.         if(WAEvent[Cevt] & (1<<5)) Active[WAAObj[Cevt]] = 4;
  985.         if(WAEvent[Cevt] & (1<<7)) Active[WADObj[Cevt]] = 2;
  986.  
  987.         // apply value
  988.         if(WAEvent[Cevt] & (1<<13)) {
  989.             if       ((OpForm[Cevt] & 0x000f) == 0)
  990.                 ob[Cobj].val  = WAForm[Cevt];
  991.             else if((OpForm[Cevt] & 0x000f) == 1)
  992.                 ob[Cobj].val += WAForm[Cevt];
  993.             else if((OpForm[Cevt] & 0x000f) == 2)
  994.                 ob[Cobj].val -= WAForm[Cevt];
  995.             else if((OpForm[Cevt] & 0x000f) == 3)
  996.                 ob[Cobj].val *= WAForm[Cevt];
  997.             else if((OpForm[Cevt] & 0x000f) == 4)
  998.                 if(WAForm[Cevt] != 0) ob[Cobj].val /= WAForm[Cevt];
  999.         }
  1000.         // get value
  1001.         if(WAEvent[Cevt] & (1<<11)) {
  1002.             if       ((WAGOp[Cevt] & 0x000f) == 0)
  1003.                 ob[Cobj].val  = ob[WAGVal[Cevt]].val;
  1004.             else if((WAGOp[Cevt] & 0x000f) == 1)
  1005.                 ob[Cobj].val += ob[WAGVal[Cevt]].val;
  1006.             else if((WAGOp[Cevt] & 0x000f) == 2)
  1007.                 ob[Cobj].val -= ob[WAGVal[Cevt]].val;
  1008.             else if((WAGOp[Cevt] & 0x000f) == 3)
  1009.                 ob[Cobj].val*= ob[WAGVal[Cevt]].val;
  1010.             else if((WAGOp[Cevt] & 0x000f) == 4)
  1011.                 if(ob[WAGVal[Cevt]].val != 0) ob[Cobj].val /= ob[WAGVal[Cevt]].val;
  1012.         }
  1013.         // send result
  1014.         if(WAEvent[Cevt] & (1<<9)) {
  1015.             if       ((WASOp[Cevt] & 0x000f) == 0)
  1016.                 ob[WASVal[Cevt]].val  = ob[Cobj].val;
  1017.             else if((WASOp[Cevt] & 0x000f) == 1)
  1018.                 ob[WASVal[Cevt]].val += ob[Cobj].val;
  1019.             else if((WASOp[Cevt] & 0x000f) == 2)
  1020.                 ob[WASVal[Cevt]].val -= ob[Cobj].val;
  1021.             else if((WASOp[Cevt] & 0x000f) == 3)
  1022.                 ob[WASVal[Cevt]].val *= ob[Cobj].val;
  1023.             else if((WASOp[Cevt] & 0x000f) == 4)
  1024.                 if(ob[Cobj].val != 0) ob[WASVal[Cobj]].val /= ob[Cobj].val;
  1025.         }
  1026.         if(WAEvent[Cevt] & 4) PathCount[Cobj] = MCount[Cact]; // motion
  1027. //        if(WAEvent[Cevt] & (1<<30)) reset(Cobj);
  1028.         // replace current object components
  1029.         if(WAEvent[Cevt] & (1<<17))
  1030.         {
  1031.             if(WAEvent[Cevt] & (1<<18)) {
  1032.                 ob[Cobj].name = Gnam[WACgeo[Cevt]];
  1033.                 ob[Cobj].geo  = WACgeo[Cevt];
  1034.             }
  1035.             if(WAEvent[Cevt] & (1<<19)) ob[Cobj].att  = WACatt[Cevt];
  1036.             if(WAEvent[Cevt] & (1<<20)) ob[Cobj].act  = WACact[Cevt];
  1037.             if(WAEvent[Cevt] & (1<<22)) ob[Cobj].evt  = WACevt[Cevt];
  1038.             spox[Cobj] = cpox[Cobj];  
  1039.             spoy[Cobj] = cpoy[Cobj];
  1040.             SetPath(Cobj);
  1041.         }
  1042.         // replace additional object components
  1043.         for(ref=0; ref< WACobj[Cevt]; ref++) {
  1044.             if(WAEvent[Cevt] & (1<<18)) {
  1045.                 ob[WANobj[Cevt][ref]].name = Gnam[WACgeo[Cevt]];
  1046.                 ob[WANobj[Cevt][ref]].geo  = WACgeo[Cevt];
  1047.             }
  1048.             if(WAEvent[Cevt] & (1<<19)) ob[WANobj[Cevt][ref]].att  = WACatt[Cevt];
  1049.             if(WAEvent[Cevt] & (1<<20)) ob[WANobj[Cevt][ref]].act  = WACact[Cevt];
  1050.             if(WAEvent[Cevt] & (1<<22)) ob[WANobj[Cevt][ref]].evt  = WACevt[Cevt];
  1051.             spox[WANobj[Cevt][ref]] = cpox[Cobj];  
  1052.             spoy[WANobj[Cevt][ref]] = cpoy[Cobj];
  1053.             SetPath(WANobj[Cevt][ref]);
  1054.         }
  1055.  
  1056.         if(WAEvent[Cevt] & (1<<30)) reset(Cobj);
  1057.     }
  1058. }
  1059. //**************************************************************************
  1060. function whenDeactive()
  1061. {
  1062.  
  1063.     EndPath[Cobj] = 0;
  1064.     Active[Cobj]  = 0;    // is deactive
  1065.  
  1066.     if(!Cevt) 
  1067.     {
  1068.         PathCount[Cobj] = -1;
  1069.         TimeLeft[Cobj]  =  0;
  1070.         ob[Cobj].style.visibility = "hidden";
  1071.     }
  1072.     else
  1073.     {
  1074.         if(WDEvent[Cevt] & 4) PathCount[Cobj] = MCount[Cact]; // motion
  1075.         if(WDEvent[Cevt] & (1<<30)) reset(Cobj);
  1076.  
  1077.         if(Csnd > 0) UpdAudio((WDEvent[Cevt] & 16));    //sound
  1078.         if(WDEvent[Cevt] & 8) ob[Cobj].style.visibility = "visible";
  1079.         else                  ob[Cobj].style.visibility = "hidden";
  1080.  
  1081.         TimeLeft[Cobj]  = ATime[Cevt];
  1082.         if(WDEvent[Cevt] & 4) PathCount[Cobj] = MCount[Cact];    // motion
  1083.         else                  PathCount[Cobj] = 0;
  1084.  
  1085.         if(WDEvent[Cevt] & (1<<5)) Active[WDAObj[Cevt]] = 4;
  1086.         if(WDEvent[Cevt] & (1<<7)) Active[WDDObj[Cevt]] = 2;
  1087.     }
  1088.  
  1089. }
  1090. //**************************************************************************
  1091. function reset(cobj) {
  1092.  
  1093.     cevt = ob[cobj].evt;
  1094.     catt = ob[cobj].att;
  1095.     cact = ob[cobj].act;
  1096.     cgrp = ob[cobj].grp;
  1097.     cgeo = ob[cobj].geo;
  1098.  
  1099.     Active[cobj]    =  0;    // is deactive
  1100.     if(cevt)
  1101.     {
  1102.         if(WDEvent[cevt] & 8) ob[cobj].style.visibility = "visible";
  1103.         else                  ob[cobj].style.visibility = "hidden";
  1104.         if(WDEvent[cevt] & (1<<31)) {
  1105.             PathCount[cobj] = MCount[cact];            // restart path
  1106.             cpox[cobj] = spox[cobj];
  1107.             cpoy[cobj] = spoy[cobj];
  1108.             LastPt[cobj] = 0;
  1109.             atDis[cobj] = 0;
  1110.             DisPt[cobj] = 0;
  1111.             EndPath[cobj] = 0;
  1112.         }
  1113.         if(!(WDEvent[cevt] & 4)) PathCount[cobj] = 0;    // no motion
  1114.         TimeLeft[cobj]  = ATime[cevt];
  1115.     }
  1116.     else
  1117.     {
  1118.         if(ob[cobj].flg & 64)
  1119.             ob[cobj].style.visibility = "hidden";
  1120.         else
  1121.             ob[cobj].style.visibility = "visible";
  1122.  
  1123.         // set action variables
  1124.         if(cact) PathCount[cobj] = MCount[cact]; // motion
  1125.         else     PathCount[cobj] = 0;
  1126.         TimeLeft[cobj]  = 0;
  1127.  
  1128.         cpox[cobj] = spox[cobj];
  1129.         cpoy[cobj] = spoy[cobj];
  1130.         LastPt[cobj] = 0;
  1131.         atDis[cobj] = 0;
  1132.         DisPt[cobj] = 0;
  1133.         EndPath[cobj] = 0;
  1134.     }
  1135.  
  1136.     if(cgeo)
  1137.     {
  1138.         ob[cobj].style.left=cpox[cobj] - Gszx[cgeo] * ob[cobj].cscx;
  1139.         ob[cobj].style.top =cpoy[cobj] - Gszy[cgeo] * ob[cobj].cscy;
  1140.     }
  1141.  
  1142. return;
  1143. }
  1144.  
  1145. /*************************************************************************/
  1146. function SetPath(cobj) {
  1147.  
  1148.     cevt = ob[cobj].evt;    // Objects event
  1149.     catt = ob[cobj].att;    // Objects attribute
  1150.     cact = ob[cobj].act;    // Objects action
  1151.     cgrp = ob[cobj].grp;    // Objects group
  1152.     cgeo = ob[cobj].geo;    // Objects geometry
  1153.     csnd = ob[cobj].snd;    // Objects sound
  1154.     cpob = MPath[cact];        // Object actions path object
  1155.     cpgo = ob[cpob].geo;    // Path objects geometry
  1156.     lstVal[cobj] = ob[cobj].val - 100;
  1157.  
  1158.     MDir[cobj] = -1;
  1159.  
  1160.     if(!cact) {
  1161.         Plen[cobj] = 0;
  1162.         noStep = 0;
  1163.         disStep[cobj] = 0;
  1164.         dpox[cobj] = 0;
  1165.         dpoy[cobj] = 0;
  1166.         PathCount[cobj] = 0;
  1167.     }
  1168.     else {
  1169.         PathCount[cobj] = MCount[cact];
  1170.  
  1171.         if(MType[cact] & ACT_XPATH_MOUSE || MType[cact] & ACT_YPATH_MOUSE) { //^^ replaced with linPath??
  1172.             Plen[cobj] = 1;
  1173.             noStep = 1;
  1174.             disStep[cobj] = 1;
  1175.             dpox[cobj] = 0;
  1176.             dpoy[cobj] = 0;
  1177.         }
  1178.         else if(MType[cact] & ACT_XPATH_OBJPTH || MType[cact] & ACT_XPATH_OBJXYZ) {
  1179.             objPath(cobj,cpob,cpgo);
  1180.         }
  1181.         else
  1182.         {
  1183.             linPath(cobj);
  1184.         }
  1185.     }
  1186.     cpox[cobj] = spox[cobj];
  1187.     cpoy[cobj] = spoy[cobj];
  1188.     LastPt[cobj] = 0;
  1189.     atDis[cobj] = 0;
  1190.     DisPt[cobj] = 0;
  1191.     EndPath[cobj] = 0;
  1192.  
  1193. //    ob[cobj].left=cpox[cobj] - Gszx[cgeo];
  1194. //    ob[cobj].top =cpoy[cobj] - Gszy[cgeo];
  1195.     return;
  1196. }
  1197. //****************************************************************************
  1198. function getPathLenth(cobj,cpob,cgeo)
  1199. // return lenth of transformed path
  1200. {
  1201.     var i, x = 0.0, y = 0.0;
  1202.     Plen[cobj] = 0;
  1203.     // find length of rectangle
  1204.     if        ((Gtyp[cgeo] & GEO_TYPE) == 1) {
  1205.         Plen[cobj] = 2 * (Gpxl[cgeo][1] - Gpxl[cgeo][0]) * ob[cpob].cscx
  1206.                    + 2 * (Gpyl[cgeo][1] - Gpyl[cgeo][0]) * ob[cpob].cscy;
  1207.     }
  1208.     // find length of ellipse
  1209.     else if    ((Gtyp[cgeo] & GEO_TYPE) == 2) {
  1210.         Plen[cobj] = 360;
  1211.     }
  1212.     // find length of polygon
  1213.     else if    ((Gtyp[cgeo] & GEO_TYPE) == 3) {
  1214.         for ( i = 1; i < Gnpt[cgeo]; i++)
  1215.         {
  1216.             x = (Gpxl[cgeo][i] - Gpxl[cgeo][i-1]) * ob[cpob].cscx;
  1217.             y = (Gpyl[cgeo][i] - Gpyl[cgeo][i-1]) * ob[cpob].cscy;
  1218.             Plen[cobj] += Math.sqrt(x*x + y*y);
  1219.         }
  1220.  
  1221.         if(!(Gtyp[cgeo] & GEO_OPEN))
  1222.         {
  1223.             x = (Gpxl[cgeo][Gnpt[cgeo]-1] - Gpxl[cgeo][0]) * ob[cpob].cscx;
  1224.             y = (Gpyl[cgeo][Gnpt[cgeo]-1] - Gpyl[cgeo][0]) * ob[cpob].cscy;
  1225.             Plen[cobj] += Math.sqrt(x*x + y*y);
  1226.         }
  1227.     }
  1228. }
  1229.  
  1230. //************************************************************************************
  1231. function linPath(cobj) {
  1232. epox[cobj] = spox[cobj];
  1233. epoy[cobj] = spoy[cobj];
  1234. var lh = mH;
  1235. var lw = mW;
  1236. if(Version >= 105)
  1237. {
  1238.     lh = lh * (MPLen[cact] / 100.);
  1239.     lw = lw * (MPLen[cact] / 100.);
  1240. }
  1241.  
  1242.     if(MType[cact] & ACT_YPATH_UP) {
  1243.         if(MType[cact] & ACT_PATH_CENTER) {
  1244.             spoy[cobj]     += lh;
  1245.             epoy[cobj] -= lh;
  1246.         }
  1247.         else if(MType[cact] & ACT_PATH_END) {
  1248.             spoy[cobj]     += lh;
  1249.         }
  1250.         else if(MType[cact] & ACT_PATH_START) {
  1251.             epoy[cobj] -= lh;
  1252.         }
  1253.     }
  1254.     else if(MType[cact] & ACT_YPATH_DOWN) {
  1255.         if(MType[cact] & ACT_PATH_START) {
  1256.             epoy[cobj] += lh;
  1257.         }
  1258.         else if(MType[cact] & ACT_PATH_END) {
  1259.             spoy[cobj]     -= lh;
  1260.         }
  1261.         else if(MType[cact] & ACT_PATH_CENTER) {
  1262.             spoy[cobj]     -= lh;
  1263.             epoy[cobj] += lh;
  1264.         }
  1265.     }
  1266.     else if(MType[cact] & ACT_YPATH_MOUSE) {
  1267.         Plen[cobj] = 1;
  1268.         noStep = 1;
  1269.         disStep[cobj] = 1;
  1270.         dpoy[cobj] = 0;
  1271.         spoy[cobj] = cpoy[cobj];
  1272.     }
  1273.  
  1274.     if(MType[cact] & ACT_XPATH_LEFT) {
  1275.         if(MType[cact] & ACT_PATH_CENTER) {
  1276.             spox[cobj]     += lw;
  1277.             epox[cobj]  -= lw;
  1278.         }
  1279.         else if(MType[cact] & ACT_PATH_END) {
  1280.             spox[cobj]     += lw;
  1281.         }
  1282.         else if(MType[cact] & ACT_PATH_START) {
  1283.             epox[cobj]  -= lw;
  1284.         }
  1285.     }
  1286.     else if(MType[cact] & ACT_XPATH_RIGHT) {
  1287.         if(MType[cact] & ACT_PATH_START) {
  1288.             epox[cobj]  += lw;
  1289.         }
  1290.         else if(MType[cact] & ACT_PATH_END) {
  1291.             spox[cobj]     -= lw;
  1292.         }
  1293.         else if(MType[cact] & ACT_PATH_CENTER) {
  1294.             spox[cobj]     -= lw;
  1295.             epox[cobj]  += lw;
  1296.         }
  1297.     }
  1298.     else if(MType[cact] & ACT_YPATH_MOUSE) {
  1299.         Plen[cobj] = 1;
  1300.         noStep = 1;
  1301.         disStep[cobj] = 1;
  1302.         dpox[cobj] = 0;
  1303.         spox[cobj] = cpox[cobj];
  1304.     }
  1305.     var x = epox[cobj] - spox[cobj];
  1306.     var y = epoy[cobj] - spoy[cobj];
  1307.     if(x+y)
  1308.     {
  1309.         Plen[cobj] = Math.sqrt(x*x + y*y);
  1310.         noStep  = Math.abs(Plen[cobj] / MRate[cact]);
  1311.         if(noStep < 1) noStep = 1;
  1312.         disStep[cobj] = Plen[cobj] / noStep;
  1313.         dpox[cobj] = x / noStep;
  1314.         dpoy[cobj] = y / noStep;
  1315.     }
  1316.     else
  1317.     {
  1318.         Plen[cobj] = 0;
  1319.         dpox[cobj] = 0;
  1320.         dpoy[cobj] = 0;
  1321.         disStep[cobj] = 0;
  1322.     }
  1323.     return
  1324. }
  1325.  
  1326. function objPath(cobj,cpob,cpgo) 
  1327. {
  1328.     if        ((Gtyp[cpgo] & GEO_TYPE) == 1) {    
  1329.         spox[cobj] = Gpxl[cpgo][0] * ob[cpob].cscx + ob[cpob].cpox;  
  1330.         spoy[cobj] = Gpyl[cpgo][0] * ob[cpob].cscy + ob[cpob].cpoy;
  1331.         epox[cobj] = spox[cobj];
  1332.         epoy[cobj] = spoy[cobj];
  1333.     }
  1334.     else if    ((Gtyp[cpgo] & GEO_TYPE) == 2) {
  1335.         spox[cobj] = (Gpxl[cpgo][0] - Gpxl[cpob][1]) * ob[cpob].cscx + ob[cpob].cpox;
  1336.         spoy[cobj] = (Gpyl[cpgo][0] - Gpyl[cpob][1]) * ob[cpob].cscy + ob[cpob].cpoy;
  1337.         epox[cobj] = spox[cobj];
  1338.         epoy[cobj] = spoy[cobj];
  1339.     }
  1340.     else if    ((Gtyp[cpgo] & GEO_TYPE) == 3) {
  1341.         spox[cobj] = Gpxl[cpgo][0] * ob[cpob].cscx + ob[cpob].cpox;
  1342.         spoy[cobj] = Gpyl[cpgo][0] * ob[cpob].cscy + ob[cpob].cpoy;
  1343.         if(Gtyp[cpgo] & GEO_OPEN) 
  1344.         {
  1345.             epox[cobj] = Gpxl[cpgo][Gnpt[cpgo]-1] * ob[cpob].cscx + ob[cpob].cpox;
  1346.             epoy[cobj] = Gpyl[cpgo][Gnpt[cpgo]-1] * ob[cpob].cscy + ob[cpob].cpoy;
  1347.         }
  1348.         else 
  1349.         {
  1350.             epox[cobj] = spox[cobj];
  1351.             epoy[cobj] = spoy[cobj];
  1352.         }
  1353.     }
  1354.  
  1355.     getPathLenth(cobj,cpob,cpgo);
  1356.     if(cact)
  1357.         noStep  = Math.abs(Plen[cobj] / MRate[cact]);
  1358.     else
  1359.         noStep = 0;
  1360.     if(noStep < 1) noStep = 1;
  1361.     disStep[cobj] = Plen[cobj] / noStep;
  1362.  
  1363.     return;
  1364. }
  1365.  
  1366. //window.status = " Cobj=" + Cobj + " epox[Cobj]=" + epox[Cobj] + " Cgeo=" + Cgeo;
  1367. //window.status = " Deact cobj=" + cobj + " WDEvent[Cevt] & (1<<5)=" + WDEvent[Cevt] & (1<<5) + " Active[WDAObj[Cevt]]=" + Active[WDAObj[Cevt]];
  1368. //if(Cobj==2) window.status = " Cobj=" + Cobj + " ob[Cobj].val=" + ob[Cobj].val;
  1369. //-->
  1370.