/****************************************************************************
* $RCSfile: CrewClass.js,v $ (part of AirProx website $Name:  $)
* --------------------------------------------------------------------------
* Description: Javascript Progress Call exemple
* --------------------------------------------------------------------------
* $Id: CrewClass.js,v 1.3 2003/03/10 01:10:47 mauco Exp $
*
* (c) AirProx.org & Mauco.net
*****************************************************************************/

/***************************Exemple utilisation******************************
Placez entre les balises <header></header> les styles css et les routines externes:
<style>
<!--

.axcrew th {
	font-family: "Trebuchet MS", Arial, sans-serif;
	font-size: 14px;
	font-weight: bold;
	color: #FFFFFF;
	background-color: #993399;
	text-align: left;
}
.axcrew table {
	border: 2px solid #999999;
}
.axcrew td {
	border: 0px solid #999999;
}
.axcrew input {
	border: none #FFFFFF;
	font-family: "Trebuchet MS", Arial, sans-serif;
	font-size: 12px;
	font-weight: normal;
}
-->
</style>
<script src="CrewClass.js"></script>
<script language="Javascript">
<!--
// Commentez les fonctions suivantes si elles sont déjà chargée dans votre page
// Ces routines sont compatibles IE4+, Netscape4+, Safari, Mozilla
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function P7_getHW(t,a) { //v2.08 by PVII
  var r,p,h=0,w=0;if((p=MM_findObj(a)) !=null){
  if(document.all || document.getElementById){h=parseInt(p.offsetHeight);w=parseInt(p.offsetWidth);
  if(!h){h=parseInt(p.style.pixelHeight);w=parseInt(p.style.pixelWidth);}
  }else if(document.layers){h=parseInt(p.clip.height);w=parseInt(p.clip.width);}}
  if(t=="width"){r=w;}else{r=h;}return r;
}
-->
</script>
Placez entre les balises <body>et </body> les lignes suivantes:

<div id='axcrew_div' class="axcrew" style='position:absolute;left:45%;top:50%;visibility:hidden'>
<FORM NAME="axcrew_form" METHOD="POST" ACTION="" >
  <table>
    <tr>
      <th>Connexion en cours ...</th>
</tr>
<tr>
      <td><input type="text" name="axcrew_post" value="" size="30" onfocus="this.blur();return false"></td>
</tr>
<tr>
      <td style="border: 1px solid #999999;"><img src='bargraph.gif' border='0' width='12' height='18' alt='' name='axcrew_bar'></td>
</tr>
<tr>
      <td><input type="text" name="axcrew_pre" value="" size="30" onfocus="this.blur();return false"></td>
</tr>
</table>
</form>
</div>

<script language="Javascript">
mybar=new AxCrewBar();
mybar.AutoProgress(30,'mybar.AutoProgress(-1)'); //durée totale 30 secondes
</script>
******************************************************************************/
/* Debut de la classe AxCrewBar
*  Les noms utilisés par les scripts sont définis ici
*/
function AxCrewBar() {
	this.divId='axcrew_div';  //non du calque ou sera affiché la  barre
	this.imageId='axcrew_bar';  // id de l'image de la barre
	this.preId='axcrew_pre';    // id du champ servant à stocker le message 'pre'
	this.postId='axcrew_post';  // id du champ servant à stocker le message 'pre'
	this.formId='axcrew_form';  // id du formulaire
//Un calcul sur divId est plus compatible que sur le preID
//TODO voir quels navigateurs supportent la propriété width sur champ input
    this.width=AxCrewBar.GetWidth(this.preId);

    this.current=1;
    this.autoStep=10;
	this.interval=0;
    this.autoFunction='';
}
AxCrewBar.prototype.Progress = function(messagePre, messagePost, step) {
    /* Cette fonction gere 3 affichages:
    - une barre de progression crew_progress_bar
    - un champ signalant la fin d'une etape crew_post
    - un champ signalant le debut d'une etape crew_pre

    Exemple de session:
    ->CrewProgress('message1 (pre)','message2 (post)',1/6);
      affiche 'message1 (pre)' dans crew_pre
      affiche 'message2 (pre' dans crew_post
      affiche 1/6 de la barre de progression.
    ->si step=0 : l'affichage ne modifie pas la barre
	->si step=-1: l'affichage au complet est caché
     */
     if(step>=0){
        // cas général on calcule la  longueur de barre à afficher
	 	this.current = step * this.width;
	 }else if(step<0){
	 	// on ne met pas à jour this.current;
	 }
	 if(this.current>this.width){
	 	self.clearInterval(this.interval);
	 	this.Hide();
	}else{ //cas general affichage champs et barre
    	 document[this.formId][this.preId].value  = messagePre;
    	 document[this.formId][this.postId].value = messagePost;
    	 this.Show();
     }
}
/* Cache le calque de la barre */
AxCrewBar.prototype.Hide = function() {
    var styl=AxCrewBar.GetStyle(this.divId);
    if(styl.visibility) styl.visibility='hidden';
}
/* Affiche le calque de la barre */
AxCrewBar.prototype.Show = function() {
    var styl=AxCrewBar.GetStyle(this.divId);
    if(styl.visibility) styl.visibility='visible';
    document.images[this.imageId].width=this.current;

};
/* Cette fonction gere une avancee automatique de la barre de progression */
/* la progression se fait en duration secondes */
AxCrewBar.prototype.AutoProgress = function(duration) {
    // Si appel avec deux arguments, on définit la fonction de setInterval
    if(arguments.length==2){
        this.autoFunction=arguments[1];
    }
	if(duration>=0){
		this.autoStep=this.width/duration;
		this.current=1-this.autoStep;
		this.interval=self.setInterval(this.autoFunction,1000);
	}
 	this.current+=this.autoStep;
 	if(this.current>this.width){
	 	self.clearInterval(this.interval);
		this.Hide();
	}else if (this.current>0){
		this.Show();
    }
}
AxCrewBar.GetStyle = function(id) {
if ((g=MM_findObj(id))!=null) {d=(document.layers)? g:g.style; return d;}else{return;}
}
AxCrewBar.GetWidth = function(id) {
  return P7_getHW('width',id)
}

