home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Freelog 65
/
Freelog065.iso
/
BAS
/
Bureautique
/
TourOperator
/
TourOp3.CAB
/
script.txt
< prev
next >
Wrap
Text File
|
2001-11-10
|
14KB
|
457 lines
<html><head>
<title>TourOperator</title>
<script LANGUAGE="JavaScript">
<!--
//***************************************
//*Fichier modΦle pour TourOperator - MT*
//***************************************
// compteur de dia, valeur max du compteur, timer de reprise, vitesse du tour (entre 10 et 200)
var ctr=0, ctrMax, tstop, speed=100;
// le flag pour savoir si on joue l'animation, ou si on se dΘplace de vue en vue
var playFlag = false;
// Suffixes pour construire les noms des fichiers
var BkgSfx="_bk.png", CurSfx="_c.gif", NoteSfx="_n.png", BallSfx="_b.png";
// les variables permettant d'afficher une diapo du tour
// elles seront lues pour chaque diapo α partir de la liste contenue dans chaque Θlt de tableau slides[i]
var SlideId, BkgdId, CursorId, CursX1, CursY1, CursX2, CursY2;
var NoteVis, NoteLen, NoteX, NoteY, BalloonVis, BallLen, BallX, BallY;
var slides=new Array();
// DΘfinition des diapos. Seule cette partie est modifiΘe par TourOperator, en fonction du tour
// ****************
<%SLIDES%>
// ****************
// calcule le dΘlai d'affichage en ms d'un texte (dans une note ou une bulle)
// en fonction du nombre n de caractΦres α lire et de la vitesse de lecture
// (entre 10 et 200).
function TimeDelay(n) {
// 800 ms de dΘlai, et 50ms/car en standard (20 car/s)
return(800+n*50*(200-speed)/100);
}
// pour le preload des images
var pBkgImg=new Image();
var pCursImg=new Image();
var pNoteImg=new Image();
var pBallImg=new Image();
function PreloadImages (n) {
var i=0, j=0, s=slides[n];
var SlideId, BkgdId, CursorId, NoteVis, BalloonVis;
j=s.indexOf(",", i);
SlideId=s.substring(i, j);
i=j+1;
j=s.indexOf(",", i);
BkgdId=s.substring(i, j);
i=j+1;
pBkgImg.src=BkgdId + BkgSfx;
j=s.indexOf(",", i);
CursorId=s.substring(i, j);
i=j+1;
if (CursorId!=0){
pCursImg.src=CursorId + CurSfx;
}
j=s.indexOf(",", i);
NoteVis=s.substring(i, j);
i=j+1;
if (NoteVis=="1"){
pNoteImg.src=SlideId+NoteSfx;
}
// on saute NoteLen, NoteX et NoteY ...
j=s.indexOf(",", i);
i=j+1;
j=s.indexOf(",", i);
i=j+1;
j=s.indexOf(",", i);
i=j+1;
// et on rΘcupΦre la visibilitΘ du phylactΦre...
j=s.indexOf(",", i);
BalloonVis=s.substring(i, j);
i=j+1;
if (BalloonVis=="1"){
pBallImg.src=SlideId+BallSfx;
}
}
// pour la diapo n, on dΘcoupe la chaεne -> affectations des valeurs des variables
function ParseSlide (n) {
var i=0, j=0, s=slides[n];
j=s.indexOf(",", i);
SlideId=s.substring(i, j);
i=j+1;
j=s.indexOf(",", i);
BkgdId=s.substring(i, j);
i=j+1;
j=s.indexOf(",", i);
CursorId=s.substring(i, j);
i=j+1;
if (CursorId!=0){
j=s.indexOf(",", i);
CursX1=parseInt(s.substring(i, j));
i=j+1;
j=s.indexOf(",", i);
CursY1=parseInt(s.substring(i, j));
i=j+1;
j=s.indexOf(",", i);
CursX2=parseInt(s.substring(i, j));
i=j+1;
j=s.indexOf(",", i);
CursY2=parseInt(s.substring(i, j));
i=j+1;
}
j=s.indexOf(",", i);
NoteVis=s.substring(i, j);
i=j+1;
j=s.indexOf(",", i);
NoteLen=parseInt(s.substring(i, j));
i=j+1;
j=s.indexOf(",", i);
NoteX=parseInt(s.substring(i, j));
i=j+1;
j=s.indexOf(",", i);
NoteY=parseInt(s.substring(i, j));
i=j+1;
j=s.indexOf(",", i);
BalloonVis=s.substring(i, j);
i=j+1;
j=s.indexOf(",", i);
BallLen=parseInt(s.substring(i, j));
i=j+1;
j=s.indexOf(",", i);
BallX=parseInt(s.substring(i, j));
i=j+1;
j=s.length + 1;
BallY=parseInt(s.substring(i, j));
}
// Les fonctions qui suivent servent α l'animation d'une dia.
// L'enchaεnement des diffΘrentes fonctions est rΘalisΘ de deux faτons :
// 1- le chargement complet d'un image est dΘtectΘ par son ΘvΘnement onload, qui dΘclenche alors son affichage.
// 2- un timer est alors utilisΘ pour temporiser l'affichage de l'image, avant de dΘclencher le chargement
// de la suivante
//
// plus prΘcisΘment :
// ShowSlide prΘcharge les images de la dia suivante, puis charge l'arriΦre-plan (ShowBkg)
// La fin de chargement de l'arr.plan provoque son affichage, et charge le curseur (si besoin est)
// La fin de chargement du curseur provoque son affichage, et charge la note (si besoin est)
//
// La fin de chargement de la note provoque son affichage.
// (1) Si le programme est en lecture, une temporisation est mise en place afin de diffΘrer
// le chargement de la bulle (si besoin) d'une durΘe calculΘe en fonction du nombre de car. α lire dans la note
// (2) si le programme est en mode dΘfilement manuel, pas de chargement de bulle.
//
// La fin de chargement de la bulle provoque son affichage.
// (1) Si le programme est en lecture, une temporisation est mise en place afin de diffΘrer
// l'animation du curseur (si besoin)
// (2) si le programme est en mode dΘfilement manuel, arrΩt.
//
// enfin, lancement de l'animation du curseur si le programme est en lecture.
//
// Cette technique permet au navigateur d'Ωtre rΘactif α tout moment, facilite la mise α jour de l'affichage
// et permet d'avoir une animation qui s'adapte α la vitesse de lecture des images sur le rΘseau.
function ShowSlide(){
PreloadImages((ctr==ctrMax)?0:ctr+1);
Info.innerText="[Vue : " + (ctr+1) + "/" + (ctrMax+1) + "]";
ParseSlide(ctr);
SlideBackGround.alt="";
SlideCursor.alt="";
SlideNote.alt="";
SlideBalloon.alt="";
ShowBkg();
}
function ShowBkg(){
SlideNote.style.visibility="hidden";
SlideNote.src="";
SlideBalloon.style.visibility="hidden";
SlideBalloon.src="";
SlideBackGround.src=BkgdId + BkgSfx;
}
function ShowCursor(){
if (CursorId != 0){
SlideCursor.src=CursorId+CurSfx;
SlideCursor.style.left=SlideBackGround.offsetLeft + CursX1;
SlideCursor.style.top=SlideBackGround.offsetTop + CursY1;
} else {
SlideCursor.style.visibility="hidden";
ShowNote();
}
}
function ShowNote(){
if (NoteVis=="1") {
SlideNote.src=SlideId + NoteSfx;
SlideNote.style.left=SlideBackGround.offsetLeft + NoteX;
SlideNote.style.top=SlideBackGround.offsetTop + NoteY;
}else{
SlideNote.style.visibility="hidden";
ShowBalloon();
}
}
function ShowBalloon(){
if (BalloonVis=="1") {
SlideNote.style.visibility="hidden";
SlideBalloon.src=SlideId + BallSfx;
SlideBalloon.style.left=SlideBackGround.offsetLeft + BallX;
SlideBalloon.style.top=SlideBackGround.offsetTop + BallY;
} else {
if (playFlag) AnimateCursor();
}
}
function AnimateCursor(){
var n, incr=8+Math.floor((speed-100)*4/100);
if ((CursorId != 0) && ((CursX2!=CursX1) || (CursY2!=CursY1))) {
SlideNote.style.visibility="hidden";
SlideBalloon.style.visibility="hidden";
n= Math.floor((Math.abs(CursX2-CursX1)<Math.abs(CursY2-CursY1))?(Math.abs(CursY2-CursY1)/incr):(Math.abs(CursX2-CursX1)/incr));
AnimateCursor2(0, n);
}else {
AnimateCursor3();
}
}
function AnimateCursor2(i, n){
if (i!=n){
tstop=setTimeout("AnimateCursor2("+ ++i +"," + n + ")", 15);
SlideCursor.style.posLeft=SlideBackGround.offsetLeft + CursX1 + Math.round(i*(CursX2-CursX1)/n);
SlideCursor.style.posTop=SlideBackGround.offsetTop + CursY1 + Math.round(i*(CursY2-CursY1)/n);
} else {
tstop=setTimeout("AnimateCursor3()", 15);
SlideCursor.style.posLeft=SlideBackGround.offsetLeft + CursX2;
SlideCursor.style.posTop=SlideBackGround.offsetTop + CursY2;
}
}
// cette derniΦre fonction d'animation enchaεne sur la dia suivante, ou arrΩte le tour sur la derniΦre vue.
function AnimateCursor3(){
if (ctr<ctrMax){
ctr++;
tstop=setTimeout("ShowSlide()",1);
}
else {
SlCommands.rbStop.checked=true;
}
}
// Les fonctions de contr⌠le du tour.
// LancΘes essentiellement α partir des boutons de l'interface
// lance (ou reprend) le tour sur la diapo courante
function startIt(){
playFlag=true;
ShowSlide();
}
// arrΩt du tour
function stopIt(){
playFlag=false;
clearTimeout(tstop);
}
// accΘlΘration du tour
function speedIt(){
speed=(speed>190?200:speed+10);
SpeedInfo.innerText="Vitesse : " + speed;
}
// et ralentissement
function slowIt(){
speed=(speed>10?speed-10:10);
SpeedInfo.innerText="Vitesse : " + speed;
}
function ShowFirstSlide(){
clearTimeout(tstop);
ctr=0;
SlCommands.rbStart.checked=false;
SlCommands.rbStop.checked=true;
playFlag=false;
ShowSlide();
}
function ShowPrevSlide(){
clearTimeout(tstop);
if (ctr!=0) ctr--;
SlCommands.rbStart.checked=false;
SlCommands.rbStop.checked=true;
playFlag=false;
ShowSlide();
}
function ShowNextSlide(){
clearTimeout(tstop);
if (ctr!=ctrMax) ctr++;
SlCommands.rbStart.checked=false;
SlCommands.rbStop.checked=true;
playFlag=false;
ShowSlide();
}
function ShowLastSlide(){
clearTimeout(tstop);
ctr=ctrMax;
SlCommands.rbStart.checked=false;
SlCommands.rbStop.checked=true;
playFlag=false;
ShowSlide();
}
// End Hiding -->
</script>
<script ID="clientEventHandlersJS" LANGUAGE="javascript">
<!--
function window_onload() {
document.title=Description;
PreloadImages(0);
SpeedInfo.innerText="Vitesse : " + speed;
ctr=0;
playFlag=false;
ShowSlide();
window_onresize();
}
function window_onresize() {
divSlide.style.posLeft=(document.body.offsetWidth - slideSizeX) /2;
divSlide.style.posTop=divCommands.offsetHeight+4;
divComment.style.left=(divSlide.offsetLeft + slideSizeX - divComment.offsetWidth);
divComment.style.top=divSlide.offsetTop+slideSizeY;
}
function SlideBackGround_onload() {
SlideBackGround.style.visibility="visible";
tstop=setTimeout("ShowCursor()",1);
}
// Les fonctions suivantes servent α enchaεner les affichage lors de l'exΘcution
// du tour. Le timer n'est placΘ que lorsque l'image est complΦtement chargΘe.
function SlideCursor_onload() {
SlideCursor.style.visibility="visible";
tstop=setTimeout("ShowNote()",1);
}
function SlideNote_onload() {
SlideNote.style.visibility="visible";
if (playFlag) tstop=setTimeout("ShowBalloon()", TimeDelay(NoteLen));
}
function SlideBalloon_onload() {
SlideBalloon.style.visibility="visible";
if (playFlag) tstop=setTimeout("AnimateCursor()",TimeDelay(BallLen));
}
// Les fonctions suivantes interrompent le tour en cas d'erreur de chargement d'une image.
// l'attribut src est testΘ pour ne pas prendre en compte les affectations de "" aux diffΘrents .src
// des images.
function SlideNote_onerror() {
if (SlideNote.src.indexOf(NoteSfx) != -1) {
SlideNote.style.visibility="visible";
SlideNote.alt="Erreur de chargement !";
SlCommands.rbStop.checked=true;
clearTimeout(tstop);
playFlag=false;
}
}
function SlideBackGround_onerror() {
if (SlideBackGround.src.indexOf(NoteSfx) != -1) {
SlideBackGround.alt="Erreur de chargement !";
SlCommands.rbStop.checked=true;
clearTimeout(tstop);
playFlag=false;
}
}
function SlideBalloon_onerror() {
if (SlideBalloon.src.indexOf(NoteSfx) != -1) {
SlideBalloon.alt="Erreur de chargement !";
SlCommands.rbStop.checked=true;
clearTimeout(tstop);
playFlag=false;
}
}
function SlideCursor_onerror() {
if (SlideCursor.src.indexOf(NoteSfx) != -1) {
SlideCursor.alt="Erreur de chargement !";
SlCommands.rbStop.checked=true;
clearTimeout(tstop);
playFlag=false;
}
}
//-->
</script>
</head>
<!-- les lignes qui suivent fixent l'apparence du document -->
<body
LANGUAGE="javascript"
onload="return window_onload()"
onresize="return window_onresize()"
bgColor =darkcyan
text=white
vLink=yellow
link=yellow
aLink=black
topmargin=2
bottomMargin=2
leftMargin=5
rightMargin=5
>
<!-- le positionnement des 3 DIV est assurΘ par la fonction window_onresize() -->
<!-- DIV 1 : les commandes -->
<DIV id=divCommands style="BACKGROUND-COLOR: navy" align=center>
<form id=SlCommands style="FONT-SIZE: small"><FONT face=Verdana >
<input id=rbStart TYPE="radio" NAME="rb" onClick="startIt()" > Jouer
<input id=rbStop TYPE="radio" NAME="rb" onClick="stopIt()" CHECKED > ArrΩter </FONT>
<INPUT id=FirstSlide type=button value="|<" name="FirstSlide" onClick="ShowFirstSlide()"><FONT
face=Verdana > </FONT>
<INPUT id=PrevSlide type=button value="<" name="PrevSlide" onClick="ShowPrevSlide()"><FONT
face=Verdana > </FONT>
<INPUT id=NextSlide type=button value=">" name="NextSlide" onClick="ShowNextSlide()"><FONT
face=Verdana > </FONT>
<INPUT id=LastSlide type=button value=">|" name="LastSlide" onClick="ShowLastSlide()"><FONT
face=Verdana > </FONT>
<input TYPE="button" NAME="b1" onClick="speedIt()" VALUE="AccΘlerer"><FONT
face=Verdana > </FONT>
<input TYPE="button" NAME="b2" onClick="slowIt()" VALUE="Ralentir"><FONT
face=Verdana>
<SPAN id=SpeedInfo></SPAN>
<SPAN id=Info></SPAN></FONT>
</form>
</DIV>
<!-- DIV 2 : l'espace rΘservΘ pour l'affichage des diapos -->
<DIV id=divSlide style="POSITION: absolute" noWrap>
<img id=SlideBackGround style="Z-INDEX: 100; VISIBILITY: hidden; POSITION: absolute" border="0" LANGUAGE=javascript onload="return SlideBackGround_onload()" onerror="SlideBackGround_onerror()">
<img id=SlideCursor style="Z-INDEX: 101; VISIBILITY: hidden; POSITION: absolute" border=0 LANGUAGE=javascript onload="return SlideCursor_onload()" onerror="SlideCursor_onerror()">
<img id=SlideNote style="Z-INDEX: 102; VISIBILITY: hidden; POSITION: absolute" border="0" LANGUAGE=javascript onload="return SlideNote_onload()" onerror="SlideNote_onerror()">
<img id=SlideBalloon style="Z-INDEX: 103; VISIBILITY: hidden; POSITION: absolute" border="0" LANGUAGE=javascript onerror="return SlideBalloon_onerror()" onload="return SlideBalloon_onload()">
</DIV>
<!-- DIV 3 : la ligne de commentaires : lien vers la page de TourOp -->
<DIV id=divComment style="POSITION: absolute">
<P><EM><FONT face=Verdana size=2>
RΘalisΘ avec <A href="http://martial.tarizzo.free.fr/TourOp/TourOp.htm" target=_blank>TourOperator</A></FONT></EM></P>
</DIV>
</body>
</html>