home *** CD-ROM | disk | FTP | other *** search
/ Freelog 65 / Freelog065.iso / BAS / Bureautique / TourOperator / TourOp3.CAB / script.txt < prev    next >
Text File  |  2001-11-10  |  14KB  |  457 lines

  1. <html><head>
  2. <title>TourOperator</title>
  3. <script LANGUAGE="JavaScript">
  4. <!-- 
  5. //***************************************
  6. //*Fichier modΦle pour TourOperator - MT*
  7. //***************************************
  8.  
  9. // compteur de dia, valeur max du compteur, timer de reprise, vitesse du tour (entre 10 et 200)
  10. var ctr=0, ctrMax, tstop, speed=100;
  11.  
  12. // le flag pour savoir si on joue l'animation, ou si on se dΘplace de vue en vue
  13. var playFlag = false;
  14.  
  15. // Suffixes pour construire les noms des fichiers 
  16. var BkgSfx="_bk.png", CurSfx="_c.gif", NoteSfx="_n.png", BallSfx="_b.png";
  17.  
  18. // les variables permettant d'afficher une diapo du tour
  19. // elles seront lues pour chaque diapo α partir de la liste contenue dans chaque Θlt de tableau slides[i]
  20. var SlideId, BkgdId, CursorId, CursX1, CursY1, CursX2, CursY2;
  21. var NoteVis, NoteLen, NoteX, NoteY, BalloonVis, BallLen, BallX, BallY;
  22.  
  23. var slides=new Array();
  24.  
  25. // DΘfinition des diapos. Seule cette partie est modifiΘe par TourOperator, en fonction du tour
  26. // **************** 
  27. <%SLIDES%>
  28. // **************** 
  29.  
  30. // calcule le dΘlai d'affichage en ms d'un texte (dans une note ou une bulle)
  31. // en fonction du nombre n de caractΦres α lire et de la vitesse de lecture 
  32. // (entre 10 et 200).
  33. function TimeDelay(n) {
  34.     // 800 ms de dΘlai, et 50ms/car en standard (20 car/s)
  35.     return(800+n*50*(200-speed)/100);
  36. }
  37.  
  38. // pour le preload des images
  39. var pBkgImg=new Image();
  40. var pCursImg=new Image();
  41. var pNoteImg=new Image();
  42. var pBallImg=new Image();
  43.  
  44. function PreloadImages (n) {
  45.   var i=0, j=0, s=slides[n]; 
  46.   var SlideId, BkgdId, CursorId, NoteVis, BalloonVis;
  47.   
  48.   j=s.indexOf(",", i);
  49.   SlideId=s.substring(i, j);
  50.   i=j+1; 
  51.   
  52.   j=s.indexOf(",", i);
  53.   BkgdId=s.substring(i, j);
  54.   i=j+1; 
  55.   pBkgImg.src=BkgdId + BkgSfx;
  56.   
  57.   j=s.indexOf(",", i);
  58.   CursorId=s.substring(i, j);
  59.   i=j+1; 
  60.   if (CursorId!=0){
  61.     pCursImg.src=CursorId + CurSfx;
  62.   }
  63.   
  64.   j=s.indexOf(",", i);
  65.   NoteVis=s.substring(i, j);
  66.   i=j+1; 
  67.   if (NoteVis=="1"){
  68.     pNoteImg.src=SlideId+NoteSfx;
  69.   }
  70.   // on saute NoteLen, NoteX et NoteY ...
  71.   j=s.indexOf(",", i);
  72.   i=j+1; 
  73.   j=s.indexOf(",", i);
  74.   i=j+1; 
  75.   j=s.indexOf(",", i);
  76.   i=j+1; 
  77.   // et on rΘcupΦre la visibilitΘ du phylactΦre...
  78.   j=s.indexOf(",", i);
  79.   BalloonVis=s.substring(i, j);
  80.   i=j+1; 
  81.   if (BalloonVis=="1"){
  82.     pBallImg.src=SlideId+BallSfx;
  83.   }
  84. }
  85.  
  86. // pour la diapo n, on dΘcoupe la chaεne -> affectations des valeurs des variables
  87. function ParseSlide (n) {
  88.   var i=0, j=0, s=slides[n]; 
  89.   
  90.   j=s.indexOf(",", i);
  91.   SlideId=s.substring(i, j);
  92.   i=j+1; 
  93.   j=s.indexOf(",", i);
  94.   BkgdId=s.substring(i, j);
  95.   i=j+1; 
  96.   j=s.indexOf(",", i);
  97.   CursorId=s.substring(i, j);
  98.   i=j+1; 
  99.   if (CursorId!=0){
  100.     j=s.indexOf(",", i);
  101.     CursX1=parseInt(s.substring(i, j));
  102.     i=j+1; 
  103.     j=s.indexOf(",", i);
  104.     CursY1=parseInt(s.substring(i, j));
  105.     i=j+1; 
  106.     j=s.indexOf(",", i);
  107.     CursX2=parseInt(s.substring(i, j));
  108.     i=j+1; 
  109.     j=s.indexOf(",", i);
  110.     CursY2=parseInt(s.substring(i, j));
  111.     i=j+1;     
  112.     }
  113.   j=s.indexOf(",", i);
  114.   NoteVis=s.substring(i, j);
  115.   i=j+1; 
  116.   j=s.indexOf(",", i);
  117.   NoteLen=parseInt(s.substring(i, j));
  118.   i=j+1; 
  119.   j=s.indexOf(",", i);
  120.   NoteX=parseInt(s.substring(i, j));
  121.   i=j+1; 
  122.   j=s.indexOf(",", i);
  123.   NoteY=parseInt(s.substring(i, j));
  124.   i=j+1; 
  125.   j=s.indexOf(",", i);
  126.   BalloonVis=s.substring(i, j);
  127.   i=j+1; 
  128.   j=s.indexOf(",", i);
  129.   BallLen=parseInt(s.substring(i, j));
  130.   i=j+1; 
  131.   j=s.indexOf(",", i);
  132.   BallX=parseInt(s.substring(i, j));
  133.   i=j+1; 
  134.   j=s.length + 1;
  135.   BallY=parseInt(s.substring(i, j));
  136.   }
  137.  
  138. // Les fonctions qui suivent servent α l'animation d'une dia.
  139. // L'enchaεnement des diffΘrentes fonctions est rΘalisΘ de deux faτons :
  140. // 1- le chargement complet d'un image est dΘtectΘ par son ΘvΘnement onload, qui dΘclenche alors son affichage.
  141. // 2- un timer est alors utilisΘ pour temporiser l'affichage de l'image, avant de dΘclencher le chargement  
  142. //    de la suivante
  143. //
  144. // plus prΘcisΘment :
  145. // ShowSlide prΘcharge les images de la dia suivante, puis charge l'arriΦre-plan (ShowBkg)
  146. // La fin de chargement de l'arr.plan provoque son affichage, et charge le curseur (si besoin est)
  147. // La fin de chargement du curseur provoque son affichage, et charge la note (si besoin est)
  148. //
  149. // La fin de chargement de la note provoque son affichage. 
  150. // (1) Si le programme est en lecture, une temporisation est mise en place afin de diffΘrer 
  151. //     le chargement de la bulle (si besoin) d'une durΘe calculΘe en fonction du nombre de car. α lire dans la note
  152. // (2) si le programme est en mode dΘfilement manuel, pas de chargement de bulle.
  153. //
  154. // La fin de chargement de la bulle provoque son affichage. 
  155. // (1) Si le programme est en lecture, une temporisation est mise en place afin de diffΘrer 
  156. //     l'animation du curseur (si besoin)
  157. // (2) si le programme est en mode dΘfilement manuel, arrΩt.
  158. //    
  159. // enfin, lancement de l'animation du curseur si le programme est en lecture.
  160. //
  161. // Cette technique permet au navigateur d'Ωtre rΘactif α tout moment, facilite la mise α jour de l'affichage
  162. // et permet d'avoir une animation qui s'adapte α la vitesse de lecture des images sur le rΘseau.
  163. function ShowSlide(){
  164. PreloadImages((ctr==ctrMax)?0:ctr+1);
  165. Info.innerText="[Vue : " + (ctr+1) + "/" + (ctrMax+1) + "]";
  166. ParseSlide(ctr);
  167. SlideBackGround.alt="";
  168. SlideCursor.alt="";
  169. SlideNote.alt="";
  170. SlideBalloon.alt="";
  171. ShowBkg();
  172. }
  173.  
  174. function ShowBkg(){
  175. SlideNote.style.visibility="hidden";
  176. SlideNote.src="";
  177. SlideBalloon.style.visibility="hidden";
  178. SlideBalloon.src="";
  179. SlideBackGround.src=BkgdId + BkgSfx;
  180. }
  181.  
  182. function ShowCursor(){
  183. if (CursorId != 0){
  184.     SlideCursor.src=CursorId+CurSfx;
  185.     SlideCursor.style.left=SlideBackGround.offsetLeft + CursX1;
  186.     SlideCursor.style.top=SlideBackGround.offsetTop + CursY1;
  187. } else {
  188.     SlideCursor.style.visibility="hidden";
  189.     ShowNote();
  190.     }
  191. }
  192.  
  193. function ShowNote(){
  194. if (NoteVis=="1") {
  195.     SlideNote.src=SlideId + NoteSfx;
  196.     SlideNote.style.left=SlideBackGround.offsetLeft + NoteX;
  197.     SlideNote.style.top=SlideBackGround.offsetTop + NoteY;
  198. }else{
  199.     SlideNote.style.visibility="hidden";
  200.     ShowBalloon();
  201.     }
  202. }
  203.  
  204. function ShowBalloon(){
  205. if (BalloonVis=="1") {
  206.     SlideNote.style.visibility="hidden";
  207.     SlideBalloon.src=SlideId + BallSfx;
  208.     SlideBalloon.style.left=SlideBackGround.offsetLeft + BallX;
  209.     SlideBalloon.style.top=SlideBackGround.offsetTop + BallY;
  210. } else {
  211.     if (playFlag) AnimateCursor();
  212.     }
  213. }
  214.  
  215. function AnimateCursor(){
  216. var n, incr=8+Math.floor((speed-100)*4/100);
  217.  
  218. if ((CursorId != 0) && ((CursX2!=CursX1) || (CursY2!=CursY1))) {
  219.     SlideNote.style.visibility="hidden";
  220.     SlideBalloon.style.visibility="hidden";
  221.     n= Math.floor((Math.abs(CursX2-CursX1)<Math.abs(CursY2-CursY1))?(Math.abs(CursY2-CursY1)/incr):(Math.abs(CursX2-CursX1)/incr));
  222.     AnimateCursor2(0, n);
  223. }else {
  224.     AnimateCursor3();
  225.     }
  226. }
  227.  
  228. function AnimateCursor2(i, n){
  229. if (i!=n){
  230.     tstop=setTimeout("AnimateCursor2("+ ++i +"," + n + ")", 15);
  231.     SlideCursor.style.posLeft=SlideBackGround.offsetLeft + CursX1 + Math.round(i*(CursX2-CursX1)/n);
  232.     SlideCursor.style.posTop=SlideBackGround.offsetTop + CursY1 + Math.round(i*(CursY2-CursY1)/n);
  233. } else {
  234.     tstop=setTimeout("AnimateCursor3()", 15);    
  235.     SlideCursor.style.posLeft=SlideBackGround.offsetLeft + CursX2;
  236.     SlideCursor.style.posTop=SlideBackGround.offsetTop + CursY2;
  237.     }
  238. }
  239.  
  240. // cette derniΦre fonction d'animation enchaεne sur la dia suivante, ou arrΩte le tour sur la derniΦre vue.
  241. function AnimateCursor3(){
  242. if (ctr<ctrMax){
  243.     ctr++;
  244.     tstop=setTimeout("ShowSlide()",1);
  245.     }
  246. else {
  247.     SlCommands.rbStop.checked=true;
  248.     }
  249. }
  250.  
  251. // Les fonctions de contr⌠le du tour. 
  252. // LancΘes essentiellement α partir des boutons de l'interface
  253.  
  254. // lance (ou reprend) le tour sur la diapo courante
  255. function startIt(){
  256. playFlag=true;
  257. ShowSlide();
  258. }
  259.  
  260. // arrΩt du tour
  261. function stopIt(){
  262.  playFlag=false;
  263.  clearTimeout(tstop);
  264.  }
  265.  
  266. // accΘlΘration du tour
  267. function speedIt(){
  268.  speed=(speed>190?200:speed+10);
  269.  SpeedInfo.innerText="Vitesse : " + speed;
  270. }
  271.  
  272. // et ralentissement
  273. function slowIt(){
  274.  speed=(speed>10?speed-10:10);
  275.  SpeedInfo.innerText="Vitesse : " + speed;
  276. }
  277.  
  278. function ShowFirstSlide(){
  279. clearTimeout(tstop);
  280. ctr=0;
  281. SlCommands.rbStart.checked=false;
  282. SlCommands.rbStop.checked=true;
  283. playFlag=false;
  284. ShowSlide();
  285. }
  286.  
  287. function ShowPrevSlide(){
  288. clearTimeout(tstop);
  289. if (ctr!=0) ctr--;
  290. SlCommands.rbStart.checked=false;
  291. SlCommands.rbStop.checked=true;
  292. playFlag=false;
  293. ShowSlide();
  294. }
  295.  
  296. function ShowNextSlide(){
  297. clearTimeout(tstop);
  298. if (ctr!=ctrMax) ctr++;
  299. SlCommands.rbStart.checked=false;
  300. SlCommands.rbStop.checked=true;
  301. playFlag=false;
  302. ShowSlide();
  303. }
  304.  
  305. function ShowLastSlide(){
  306. clearTimeout(tstop);
  307. ctr=ctrMax;
  308. SlCommands.rbStart.checked=false;
  309. SlCommands.rbStop.checked=true;
  310. playFlag=false;
  311. ShowSlide();
  312. }
  313.  
  314. // End Hiding -->
  315. </script>
  316.  
  317. <script ID="clientEventHandlersJS" LANGUAGE="javascript">
  318. <!--
  319. function window_onload() {
  320. document.title=Description;
  321. PreloadImages(0);
  322. SpeedInfo.innerText="Vitesse : " + speed;
  323. ctr=0;
  324. playFlag=false;
  325. ShowSlide();
  326. window_onresize();
  327. }
  328.  
  329. function window_onresize() {
  330. divSlide.style.posLeft=(document.body.offsetWidth - slideSizeX) /2;
  331. divSlide.style.posTop=divCommands.offsetHeight+4;
  332. divComment.style.left=(divSlide.offsetLeft + slideSizeX - divComment.offsetWidth);
  333. divComment.style.top=divSlide.offsetTop+slideSizeY;
  334. }
  335.  
  336. function SlideBackGround_onload() {
  337. SlideBackGround.style.visibility="visible";
  338. tstop=setTimeout("ShowCursor()",1);
  339. }
  340.  
  341. // Les fonctions suivantes servent α enchaεner les affichage lors de l'exΘcution
  342. // du tour. Le timer n'est placΘ que lorsque l'image est complΦtement chargΘe.
  343.  
  344. function SlideCursor_onload() {
  345. SlideCursor.style.visibility="visible";
  346. tstop=setTimeout("ShowNote()",1);
  347. }
  348.  
  349. function SlideNote_onload() {
  350. SlideNote.style.visibility="visible";
  351. if (playFlag) tstop=setTimeout("ShowBalloon()", TimeDelay(NoteLen));
  352. }
  353.  
  354. function SlideBalloon_onload() {
  355.   SlideBalloon.style.visibility="visible";
  356.   if (playFlag) tstop=setTimeout("AnimateCursor()",TimeDelay(BallLen));
  357. }
  358.  
  359. // Les fonctions suivantes interrompent le tour en cas d'erreur de chargement d'une image.
  360. // l'attribut src est testΘ pour ne pas prendre en compte les affectations de "" aux diffΘrents .src
  361. // des images.
  362. function SlideNote_onerror() {
  363. if (SlideNote.src.indexOf(NoteSfx) != -1) {
  364.     SlideNote.style.visibility="visible";
  365.     SlideNote.alt="Erreur de chargement !";
  366.     SlCommands.rbStop.checked=true;
  367.     clearTimeout(tstop);
  368.     playFlag=false;
  369.     }
  370. }
  371.  
  372. function SlideBackGround_onerror() {
  373. if (SlideBackGround.src.indexOf(NoteSfx) != -1) {
  374.     SlideBackGround.alt="Erreur de chargement !";
  375.     SlCommands.rbStop.checked=true;
  376.     clearTimeout(tstop);
  377.     playFlag=false;
  378.     }
  379. }
  380.  
  381. function SlideBalloon_onerror() {
  382. if (SlideBalloon.src.indexOf(NoteSfx) != -1) {
  383.     SlideBalloon.alt="Erreur de chargement !";
  384.     SlCommands.rbStop.checked=true;
  385.     clearTimeout(tstop);
  386.     playFlag=false;
  387.     }
  388. }
  389.  
  390. function SlideCursor_onerror() {
  391. if (SlideCursor.src.indexOf(NoteSfx) != -1) {
  392.     SlideCursor.alt="Erreur de chargement !";
  393.     SlCommands.rbStop.checked=true;
  394.     clearTimeout(tstop);
  395.     playFlag=false;
  396.     }
  397. }
  398.  
  399. //-->
  400. </script>
  401. </head>
  402.  
  403. <!-- les lignes qui suivent fixent l'apparence du document -->
  404. <body 
  405.  LANGUAGE="javascript" 
  406.  onload="return window_onload()" 
  407.  onresize="return window_onresize()" 
  408.  bgColor =darkcyan 
  409.  text=white
  410.  vLink=yellow 
  411.  link=yellow 
  412.  aLink=black
  413.  topmargin=2 
  414.  bottomMargin=2 
  415.  leftMargin=5 
  416.  rightMargin=5 
  417. >
  418. <!-- le positionnement des 3 DIV est assurΘ par la fonction window_onresize() -->
  419. <!--  DIV 1 : les commandes -->
  420. <DIV id=divCommands style="BACKGROUND-COLOR: navy"  align=center>
  421. <form id=SlCommands style="FONT-SIZE: small"><FONT face=Verdana >
  422. <input id=rbStart TYPE="radio" NAME="rb" onClick="startIt()" >   Jouer
  423. <input id=rbStop TYPE="radio" NAME="rb" onClick="stopIt()" CHECKED > ArrΩter  </FONT>  
  424. <INPUT id=FirstSlide type=button value="|<" name="FirstSlide" onClick="ShowFirstSlide()"><FONT 
  425. face=Verdana > </FONT>
  426. <INPUT id=PrevSlide type=button value="<" name="PrevSlide" onClick="ShowPrevSlide()"><FONT 
  427. face=Verdana > </FONT> 
  428. <INPUT id=NextSlide type=button value=">" name="NextSlide" onClick="ShowNextSlide()"><FONT 
  429. face=Verdana > </FONT> 
  430. <INPUT id=LastSlide type=button value=">|" name="LastSlide" onClick="ShowLastSlide()"><FONT 
  431. face=Verdana > </FONT>    
  432. <input TYPE="button" NAME="b1" onClick="speedIt()" VALUE="AccΘlerer"><FONT 
  433. face=Verdana > </FONT> 
  434. <input TYPE="button" NAME="b2" onClick="slowIt()" VALUE="Ralentir"><FONT 
  435. face=Verdana>
  436. <SPAN id=SpeedInfo></SPAN>  
  437. <SPAN id=Info></SPAN></FONT>
  438. </form>
  439. </DIV>
  440.  
  441. <!--  DIV 2 : l'espace rΘservΘ pour l'affichage des diapos -->
  442. <DIV id=divSlide style="POSITION: absolute" noWrap>
  443. <img id=SlideBackGround style="Z-INDEX: 100; VISIBILITY: hidden; POSITION: absolute" border="0" LANGUAGE=javascript onload="return SlideBackGround_onload()" onerror="SlideBackGround_onerror()">
  444. <img id=SlideCursor style="Z-INDEX: 101; VISIBILITY: hidden; POSITION: absolute" border=0 LANGUAGE=javascript onload="return SlideCursor_onload()" onerror="SlideCursor_onerror()">
  445. <img id=SlideNote style="Z-INDEX: 102; VISIBILITY: hidden; POSITION: absolute" border="0" LANGUAGE=javascript onload="return SlideNote_onload()" onerror="SlideNote_onerror()">
  446. <img id=SlideBalloon style="Z-INDEX: 103; VISIBILITY: hidden; POSITION: absolute" border="0" LANGUAGE=javascript onerror="return SlideBalloon_onerror()" onload="return SlideBalloon_onload()">
  447. </DIV>
  448.  
  449. <!--  DIV 3 : la ligne de commentaires : lien vers la page de TourOp -->
  450. <DIV id=divComment style="POSITION: absolute">
  451. <P><EM><FONT face=Verdana size=2>
  452. RΘalisΘ avec <A href="http://martial.tarizzo.free.fr/TourOp/TourOp.htm" target=_blank>TourOperator</A></FONT></EM></P>
  453. </DIV>
  454. </body>
  455. </html>
  456.  
  457.