// -------------------------------------------------------------
// fonctions et paramètres pour 'Le Solfège plaide non-coupable'
// -------------------------------------------------------------

var condO = msie || opera || safari;  // pour index (image onglet)
var condN = msie;
if (condN)
{
	var st    = "font-size";
	var bt    = "&nbsp;";
	var by    = "1.8pt"; //"0.20em";
	var tb    = "2.7pt"; //"0.30em";
	var tbm   = "-3.5pt"; //"-0.35em";
	var tbm2  = "-20px"; //"-0.50em";  // decalage instrument en hauteur(astuce piano_b)
	var tbm3  = "-15pt"; //"-0.50em";  // decalage instrument en hauteur(astuce piano_b)
	var tbmx  = "-3.5pt"; //"-1.0em";
	var tbmm  = "-7.5pt"; //"-.70em";
	//var dtm = "-3pt"; //"-0.20em";
	//var pav = "aIE";
	var pac = "acIE";
	var ppp = "ppIE";
}
else
{
	var st    = "height";   // attribut de style
	var bt    = "";         // texte dans les <div> qui sont utilises pour l'espacement
	var by    = "3.1pt"; //"0.35em";   // epaisseur barre jaune sous titre
	var tb    = "4.5pt"; //"0.50em";   // epaisseur barre bleue intercalaire (avis)
	var tbm   = "-4.5pt"; //"-0.50em";  // decalage instrument en hauteur(avis)
	var tbm2  = "-26px"; //"-0.50em";  // decalage instrument en hauteur(astuces piano_b)
	var tbm3  = "-19.5pt"; //"-0.50em";  // decalage instrument en hauteur(astuces piano_b)
	var tbmx  = "-4.5pt"; //"-0.50em";
	var tbmm  = "-9pt"; //"-1.0em";  // decalage trompette (avis- astuces)
	//var dtm = "-3pt";      // decalage table sous l'image de titre
	//var pav = "a";        // classe des paragraphes (avis)
	var pac   = "ac";       // classe des paragraphes (index)
	var ppp   = "pp";       // classe des paragraphes (retour - cancel)
}
var dtm   = "-3pt";    // decalage table sous l'image de titre
var ty    = "2px";     // epaisseur barre jaune intercalaire (avis)
var posm  = "22px";    // position horizontale instrument
var posm2 = "44px";    // position horizontale instrument
var posm3 = "66px";    // position horizontale instrument
var tyb   = "2px";     // bas jaune de la table (dans chaque col)
var tybb  = "1px";     // intercalaire dans la zone de navigation
var ty4   = "7.2pt";   //"0.8em"; // distance entre les items de navigation
var sp    = "9pt;";    //"1em";  // epaisseur des 'td' intercalaires (commande-form)

function Debut ()
{
	if (arguments.length >= 1)
		var part = arguments[0];
	else
		var part = "";

	if (arguments.length >= 2)
		var nbR = arguments[1];
	else
		var nbR = 2;

	document.write ("<div class='h' id='divMain'>");

	document.write ("<header>");
	document.write ("<img width='820' height='172' src='./images/titre.png' id='img'"
	              + "alt='titre' />");
	document.write ("</header>");

	document.write ("<div style='position: relative; top: " + dtm + ";'>");

	document.write ("<table>");

	document.write ("<tr>");
	document.write ("<td rowspan='" + nbR + "' class='nav'>");
	if (part.length > 0)
	{
		document.write ("<nav>");
		navG(part);
		document.write ("</nav>");
	}
	document.write ("</td>");

}
function Fin ()
{
	if (arguments.length >= 1)  // pour xiti
		var part = arguments[0];
	else
		var part = "";

	if (arguments.length >= 2)
		var der = arguments[1];
	else
		var der = true;

	if (der)
	{
		// barre jaune sur les trois colonnes de droite
		var line = "<div style='background-color: #ff9900; height: 2px;'></div>";
		document.write ("<tr style='vertical-align: bottom; font-size: 0.3em;'>");
		document.write ("	<td>&nbsp;</td>");
		document.write ("	<td class='w' colspan='3'>");
		document.write (line);
		document.write ("	</td>");
		document.write ("</tr>");

		// rangée supplémentaire
		document.write ("<tr>");
		document.write ("	<td class='xi'>");
		if (part.length > 0)
		{
			document.write ("		<div>");
			xiti_nf (part);
			document.write ("		</div>");
		}
		else
			document.write ("&nbsp;");
		document.write ("	</td>");

		document.write ("	<td>&nbsp;</td>");
		document.write ("	<td>&nbsp;</td>");
		document.write ("	<td>&nbsp;</td>");

		document.write ("</tr>");
	}

	// fin de Debut
	document.write ("	</table>");
	document.write ("	</div>");
	document.write ("</div>");

	CopyR ();
}
function CopyR()
{
	document.write ("<footer>");
	document.write ( "<div class='dcpr'></div>");
	document.write ( "<p class='pcpr' id='pCopy'> &copy; 2012 - www.apprendre-la-musique.net</p>");
	document.write ("</footer>");
	return;
}
// -------------------
// fonctions générales
// -------------------

function remNodesFrom (noeud)
{
	var le = noeud.childNodes.length;
	if (le > 0)
	{
		do
		{
			var el = noeud.childNodes[0];
			remNodesFrom (el);
			noeud.removeChild (el);
			le = noeud.childNodes.length;
		}  while (le > 0);
	}
	return;
}
function remOutSpace (strI)
{
	if (typeof strI != "string" ) return (strI);

	// au debut et à la fin seulement

	// au debut
	var regd = new RegExp ("^\\s+", "");
	var strO = strI.replace( regd, "");
	// puis à la fin
	var regf = new RegExp ("\\s+$", "");
	strO = strO.replace( regf, "");

	return (strO);
}
function remSpace (strI)
{
	if (typeof strI != "string" ) return (strI);

	// partout dans la chaine

	var reg = new RegExp ("\\s", "g");
	var strO = strI.replace( reg, "");
	return (strO);
}
function remBlk (strI)
{
	if (typeof strI != "string" ) return (strI);

	// partout dans la chaine

	var reg = new RegExp (" ", "g");
	var strO = strI.replace( reg, "");
	return (strO);
}

// date - heure
var month = new Array (
            "Janvier", "F\u00e9vrier", "Mars", "Avril",
            "Mai", "Juin", "Juillet", "Ao\u00fbt",
            "Septembre", "Octobre", "Novembre", "D\u00e9cembre");

var day = new Array (
          "Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi",
          "Vendredi", "Samedi");

var dayE = new Array (
           "Sun", "Mon", "Tue", "Wed", "Thu",
           "Fri", "Sat");

var dateF, dateE, heureF, heureE, dateFs, dateEs;
function DateHeure (opt)
{
	var aujourdhui = new Date();

	if (!opt || opt == "date" || opt == "dates")
	{
		var fan =  aujourdhui.getFullYear();
		var mois = aujourdhui.getMonth();
		var jour = aujourdhui.getDay();
		var numd = aujourdhui.getDate();

		var mm = mois + 1;
		if (mm < 10)  mm = "0" + mm;
		var dd = numd;
		if (dd < 10) dd = "0" + dd;

		dateF = day[jour]  + " " + numd + " " + month[mois]  + " " + fan ;
		dateE = dayE[jour] + "  " + mm + "/" + dd + "/" + fan ;

		if (opt == "dates")
		{
			dateFs = numd + " " + month[mois]  + " " + fan ;
			dateEs = mm + "/" + dd + "/" + fan ;
		}
	}
	if (!opt || opt == "heure")
	{
		var heure = aujourdhui.getHours();
		var min   = aujourdhui.getMinutes();
		var sec   = aujourdhui.getSeconds();

		var hh = heure;
		if (heure < 12)
			var mer = "AM";
		else
		{
			var mer = "PM";
	  	if (heure >= 13) hh = heure - 12;
		}

		if (hh < 10) hh = "0" + hh;
		if (heure < 10) heure = "0" + heure;
		if (min < 10) min = "0" + min;
		if (sec < 10) sec = "0" + sec;

		heureF = heure + " h " + min + " mn " + sec + " s";
		heureE = hh + ":" + min + ":" + sec + " " + mer;
	}
}

function triMult ()
{
	// tri alpha du 1er arg
	// opt - reorg des autres selon le premier
	var na = arguments.length;
	if (na == 0) return;

	var mainT = arguments[0];

	if (!mainT.sort)
	{
		// il faudrait retrouver le stack des appels
		var mesg = "triMult:\n\nLe tableau de reference doit etre alpha ou num";
		alert (mesg);
	}

	var lm = mainT.length;
	if (lm <=0) return;
	if (na == 1)
	{
		mainT.sort ();
		return;
	}
	else
	{
		var oldMain = new Array (lm);
		var found = new Array (lm);
		for (var i=0; i<lm; i++)
		{
			oldMain[i] = mainT[i];
			found[i] = false;
		}

		mainT.sort ();

		// il y a probablement plus futé comme algorithme ...
		// surtout pour des grands tableaux ...

		// nouvel ordre des indices
		var newIndex = new Array (lm);

		for (var i=0; i<lm; i++)
		{
			for (var j=0; j<lm; j++)
			{
				if ( (mainT[i] == oldMain[j]) && (!found[j]) )
				{
					newIndex[i] = j;
					found[j] = true;
					break;
				}
			}
		}
		// reordonner les autres tableaux
		for (var k=1; k<na; k++)
		{
			var oldA = arguments[k];
			var newA = new Array (lm);
			for (var ii=0; ii<lm; ii++)
			{
				newA[ii] = oldA[newIndex[ii]];
			}
			for (var jj=0; jj<lm; jj++)
			{
				oldA[jj] = newA[jj];
			}
		}
	}
}

function cooKie ()
{
	if (arguments.length == 0)
		return (null);

	var opt = arguments[0];
	if (opt == "S")  // set
	{
		var argv    = arguments;
		var argc    = arguments.length;
		var name    = (argc > 1) ? argv[1] : null;
		var value   = (argc > 2) ? argv[2] : null;
		var expires = (argc > 3) ? argv[3] : null;
		var path    = (argc > 4) ? argv[4] : null;
		var domain  = (argc > 5) ? argv[5] : null;
		var secure  = (argc > 6) ? argv[6] : false;
		if (!name || !value) return (null);
		txtCookie = name + "=" + escape (value) +
		((expires == null) ?         "" : ("; expires=" + expires.toGMTString())) +
		((path == null) ?            "" : ("; path=" + escape(path))) +
		((domain == null) ?          "" : ("; domain=" + escape(domain))) +
		((secure == false) ?         "" : ("; secure"));
		document.cookie = txtCookie;
	}
	else if (opt == "G")  // get
	{
		if (arguments.length < 2) return (null);
		var namI = arguments[1];
		var name = remBlk (namI);
		if (name.length <=0 ) return (null);
		var txtCookie = document.cookie;
		if (txtCookie.length <= 0)
		{
			return (null);
		}
		var cook = txtCookie.split(";");
		for (var i=0; i < cook.length; i++)
		{
			var val = cook[i].split("=");
			var nom = remBlk (val[0]);
			if (nom == name)
			{
				return (unescape(val[1]));
			}
		}
	}
	else if (opt == "D")  // delete
	{
		if (arguments.length < 2) return (null);
		var namI = arguments[1];
		var name = remBlk (namI);
		if (name.length <=0 ) return (null) ;
		var txtCookie = document.cookie;
		if (txtCookie.length <= 0)
		{
			return (null);
		}
		var exp = new Date();
		exp.setTime (exp.getTime() - 60000);
		var tim = exp.toGMTString();
		var cook = txtCookie.split(";");
		for (var i=0; i < cook.length; i++)
		{
			var val = cook[i].split("=");
			var nom = remBlk (val[0]);
			if (nom == name)
			{
				var val = cook[i].split("=");
				document.cookie = val[0] + "=" + val[1] + "; expires=" + tim;
				return (null);
			}
		}
	}
	return (null);
}

// bas index.php
function basIndex ()
{
		document.write ("<td colspan='3' style='vertical-align: top;'>");
		var line = "<div style='background-color: #ff9900; height: 2px;" +
		                     " width: 380px; float: left;" + "'></div>";
		document.write (line);
		line = "<span class='prix'>Prix <b>19 &euro;</b> + frais de port</span>";
		document.write (line);
		line = "<div style='background-color: #ff9900; height: 2px;'></div>";
		document.write (line);
		document.write ("</td>");
}

// fin de chaque avis
function finAvis (type)
{
	document.write ("<div style='background-color: #ff9900;" +
	                            st + ": " + ty + ";'>" + bt + "</div>");
	document.write ("<div style='background-color: #577a99;" +
	                            st + ": " + tb + ";'>" + bt + "</div>");
	if (type == "violon")
	{
		document.write ("<img width='56' height='49' src='./images/violon.jpg'" +
		                    " style='position: relative; left: " + posm + ";" +
	                      " top: " + tbm + ";'" +
		                    " alt='violon' />");
	}
	else if (type == "piano")
	{
		document.write ("<img width='56' height='67' src='./images/piano.jpg'" +
		                    " style='position: relative; left: " + posm + ";" +
		                    " top: " + tbm + ";'" +
		                    " alt='piano' />");
	}
	else if (type == "trompette")
	{
		document.write ("<div style='background-color: #ffffff;" +
		                    " position: relative; left: " + posm + "; width: 56px;" +
		                    " top: " + tbmx + ";" +
		                     st + ": " + tb + ";'>" + bt + "</div>");
		document.write ("<img width='56' height='70' src='./images/trompette.gif'" +
		                    " style='position: relative; left: " + posm + ";" +
		                    " top: " + tbmm + ";'" +
		                    " alt='trompette' />");
	}
	else if (type == "piano_b")
	{
		document.write ("<img width='56' height='56' src='./images/piano_b.gif'" +
		                    " style='position: relative; left: " + posm + ";" +
		                    " top: " + tbm + ";'" +
		                    " alt='piano_b' />");
	}
	else if (type == "gram")
	{
		document.write ("<img width='56' height='60' src='./images/gram.gif'" +
		                    " style='position: relative; left: " + posm + ";" +
		                    " top: " + tbm + ";'" +
		                    " alt='grammophone' />");
	}
}

// bas de astuces.php
function basAstuces ()
{
	document.write ("<div style='background-color: #ff9900;" +
	                            st + ": " + ty + ";'>" + bt + "</div>");
	document.write ("<div style='background-color: #577a99;" +
	                            st + ": " + tb + ";'>" + bt + "</div>");

	document.write ("<div style='background-color: #ffffff;" +
	                    " position: relative; left: " + posm + "; width: 56px;" +
	                    " top: " + tbmx + ";" +
	                     st + ": " + tb + ";'>" + bt + "</div>");
	document.write ("<img width='56' height='70' src='./images/trompette.gif'" +
                    " style='position: relative; left: " + posm + ";" +
                    " top: " + tbmm + ";'" +
                    " alt='trompette' />");
}
//---------------------
// pour couverture.html
//---------------------
var img_win = null;
var src  = "./images/couverture.png";
var wi; var hi;

// charger l'image (sans la montrer) pour r�up�er ses dimensions
var img = new Image ();
img.src = src;

function showImg ()
{
	if ( img_win  && !img_win.closed ) return;

	var W = 750; var H = 850;
	img_win = open ("couverture.html", "imgW",
	         "width="+W+",height="+H+"," +
	         "menubar=no,location=no,status=no,toolbar=no,resizable,scrollbars");

	wi = img.width;
	hi = img.height;
	return;
}

//-----------
// navigation
//-----------

var vacOK = false;     // page "Vacances" au lieu de "Commander"
                       // on pourrait faire un test sur la date
                       // mais de toute façon s'il faut changer les dates, il faut
                       // aussi changer le message
                       // alors allons au plus basique

var okCmdF = false;    // paiement par cheque ou cb seulement

var optNav = new Array ();
var optCur = 0;             // page courante
var colCur = "navy"; //"#ff9900"; //"navy"; // couleur de la page courante dans le menu (<span>)

// optNav :
// 0 = argument pour appel à navG
// 1 = texte dans la barre  de navigation
// 2 = page appelée
// 3 = distance du précédent (verticale) - defaut = 0.8em (ty4)

var ko = 0;

optNav[ko] = new Array ("accueil",
                        "Accueil",
                        "./index.php", "36pt");ko++;

optNav[ko] = new Array ("avis",
                        "Avis des lecteurs",
                        "./avis.php", "");ko++;

optNav[ko] = new Array ("comm",
                        "Commander",
                        "./commande-form.php", "", "./vacances.php");ko++;

optNav[ko] = new Array ("", "", "", "9pt");ko++;

optNav[ko] = new Array ("rec",
                        "Recommander<br />ce livre &agrave; un ami",
                        "./recommander.php", "");ko++;

optNav[ko] = new Array ("contact",
                        "Contact",
                        "mailto:apprendre.la.musique@free.fr", "");ko++;
function navG (opt)
{
	if (!opt) return;
	var ki = -1;
	for (var k=0; k<optNav.length; k++)
	{
		if (opt == optNav[k][0])
		{
			ki = k;
			optCur = k;
			break;
		}
	}
	var dec; var page;
	document.write ("<div>");
	document.write ("<div style='height: 36pt;'></div>");
	document.write ("<div class='nav' /></div>");
	for (var k=0; k<optNav.length; k++)
	{
		dec = optNav[k][3];
		if (dec.length == 0) dec = ty4;
		if (optNav[k][0] == "comm")
		{
			if( !vacOK ) page = optNav[k][2];
			else         page = optNav[k][4];
		}
		else page = optNav[k][2];
			
		if (optNav[k][1].length > 0)
		{
			if (k == ki)
			{
			document.write ("<span class='go'  style='color: " + colCur + ";'>" + optNav[k][1] + "</span>");
			}
			else
			{
			document.write ("<a class='go' href='" + page + "'>" + optNav[k][1] + "</a>");
			}
		}
		else
		{
		document.write ("<div style='background-color: transparent; width: 50%; " + st  + ": " + dec + ";'>" + bt + "</div>");
		}
		document.write ("<div class='nav' /></div>");
	}
	document.write ("</div>");
	return;
}
//----------------------------
// description des formulaires
//----------------------------

var docForms = new Array ();
var nbObl;

// bon de commande - chèque ou carte bancaire

var cmdFormFld = new Array ();

nbObl = 0;
// par item : name dans le formulaire, obl tag, format (p, a, n, e), long, label, variable(s) pour confirmation/Paypal
newItemForm (cmdFormFld, "nom",     true,  "p",   0, "Nom",                 "nom");
newItemForm (cmdFormFld, "prenom",  true,  "p",   0, "Pr\u00e9nom",         "prenom");
newItemForm (cmdFormFld, "adr",     true,  "a",   0, "Adresse",             "add1", "add2");
newItemForm (cmdFormFld, "zipcode", true,  "n",   5, "Code postal",         "zip");
newItemForm (cmdFormFld, "ville",   true,  "a",   0, "Ville",               "city");
newItemForm (cmdFormFld, "pays",    true,  "a",   0, "Pays",                "country");
newItemForm (cmdFormFld, "tel",     true,  "n",  10, "T\u00e9l\u00e9phone", "tel");
newItemForm (cmdFormFld, "email",   true,  "e",   0, "E-mail",              "email");
newItemForm (cmdFormFld, "facture", false, "a",   0, "Facture ?");
newItemForm (cmdFormFld, "know",    false, "a",   0, "Comment ?");
newItemForm (cmdFormFld, "nb",      true,  "n",   1, "Quantit\u00e9",       "nb");
// business = "apprendre.la.musique@free.com"
// item_name = "Lire la musique en un clin d'oeil"
// item_number = "LSPNC"
// amount = 'pu'  - prix unitaire
// shipping = 'portL'
// currency_code = "EUR"
// lc = "FR"
// label bouton 'Retour'  + URL retour
// URL cancel

var obj = new Object ();
obj.name = "cmd";
obj.tab  = cmdFormFld;
obj.obl  = nbObl;
docForms[docForms.length] = obj;

// bon de commande - mandat administratif

var cmdaFormFld = new Array ();

nbObl = 0;
// par item : name dans le formulaire, obl tag, format (p, a, n, e), long, label
newItemForm (cmdaFormFld, "etb",      true,  "p",   0, "Etablissement");
newItemForm (cmdaFormFld, "adr",      true,  "a",   0, "Adresse");
newItemForm (cmdaFormFld, "zipcode",  true,  "n",   5, "Code postal");
newItemForm (cmdaFormFld, "ville",    true,  "a",   0, "Ville");
newItemForm (cmdaFormFld, "pays",     true,  "a",   0, "Pays");
//newItemForm (cmdaFormFld, "resp",    true,  "p",   0, "Responsable");
newItemForm (cmdaFormFld, "nom",      true,  "p",   0, "Nom");
newItemForm (cmdaFormFld, "prenom",   true,  "p",   0, "Pr\u00e9nom");
newItemForm (cmdaFormFld, "tel",      true,  "n",  10, "T\u00e9l\u00e9phone");
newItemForm (cmdaFormFld, "email",    true,  "e",   0, "E-mail");
newItemForm (cmdaFormFld, "etbF",     false, "a",   0, "Etablissement facture");
newItemForm (cmdaFormFld, "adrF",     false, "a",   0, "Adresse facture");
newItemForm (cmdaFormFld, "zipcodeF", false, "n",   5, "Code postal facture");
newItemForm (cmdaFormFld, "villeF",   false, "a",   0, "Ville facture");
newItemForm (cmdaFormFld, "nb",       true,  "n",   1, "Quantit\u00e9");

var obj = new Object ();
obj.name = "cmda";
obj.tab  = cmdaFormFld;
obj.obl  = nbObl;
docForms[docForms.length] = obj;

// recommandation

var recFormFld = new Array ();

nbObl = 0;
// par item : name dans formulaire, obl tag, format, longueur, intitul�
newItemForm (recFormFld, "nom",     true, "p", 0, "Votre nom");
newItemForm (recFormFld, "email",   true, "e", 0, "Votre e-mail");
var kAmis = recFormFld.length;  // indice
newItemForm (recFormFld, "amis",    true, "ps", 0, "Vos Amis");
var kEAmis = recFormFld.length; // indice
newItemForm (recFormFld, "eamis",   true, "es", 0, "E-mails de vos amis");
newItemForm (recFormFld, "mesg",    false, "a", 0, "Message");

var obj = new Object ();
obj.name = "rec";
obj.tab  = recFormFld;
obj.obl  = nbObl;
docForms[docForms.length] = obj;

// toc + intro

var loadFormFld = new Array ();

nbObl = 0;
// par item : name dans formulaire, obl tag, format, longueur, intitul�
newItemForm (loadFormFld, "nom",     true, "p", 0, "Votre nom");
newItemForm (loadFormFld, "email",   true, "e", 0, "Votre e-mail");

var obj = new Object ();
obj.name = "load";
obj.tab  = loadFormFld;
obj.obl  = nbObl;
docForms[docForms.length] = obj;

//

function newItemForm (formF, nameF, flag, format, lon, label)
{
	if (!formF || !nameF) return;
	nameF = remOutSpace (nameF);
	if (nameF.length <= 0) return;

	if (!format) format = "a";           // a = alpha num
	if (!lon) lon = 0;                   // any
	if (!label)  label  = "Entr\u00e9e"; // label sur l'interface
	label = remOutSpace (label);

	if (flag == true) nbObl++;

	var fld = new Object ();
	fld.name   = nameF;
	fld.obl    = flag;
	fld.ok     = true;
	fld.format = format;
	fld.lon    = lon;
	fld.label  = label;
	fld.out    = new Array ();

	var numB = 7;
	var numA = numB - 1;
	if (arguments.length > numA)
	{
		var name2 = arguments[numA];
		name2 = remOutSpace (name2);
		if (name2.length >= 0)
		{
			fld.out[0] = new Array (2);
			fld.out[0][0] = name2;
			fld.out[0][1] = "";
		}
		if (arguments.length > numB)
		{
			for (var i = numB; i<arguments.length; i++)
			{
				var n = arguments[i];
				n = remOutSpace (n);
				if (n.length <= 0) continue;
				var mm = fld.out.length;
				fld.out[mm] = new Array (2);
				fld.out[mm][0] = n;
				fld.out[mm][1] = "";
			}
		}
	}

	var ll = formF.length;
	formF[ll] = fld;

	return;
}

var messForm = "";

// ---------------
// bon de commande
// ---------------

// mode de paiement
var optPay = 0;
var optChq = 1;
// nb d'exemplaires - prix du(des) livre(s) - frais de port
var nb; var prixB; var portL;

// calcul du prix à payer

var pu = 19;      // prix unitaire du livre ( euros )
var nbport = 5;   // max nb exemplaires pour envoi
function prixL (nameF)
{
	if (arguments.length <= 0) var nameF = "cmd";
	var el  = window.document.getElementById ( "prixL" );
	remNodesFrom (el);
	var elP = window.document.getElementById ( "portL" );
	remNodesFrom (elP);
	var elT = window.document.getElementById ( "totL" );
	remNodesFrom (elT);

	if (arguments.length > 1)
		nb = arguments[1];
	else
		nb = Number (window.document.forms[nameF].nb.value);
	if (nb == 0 || isNaN(nb))
	{
		window.document.forms[nameF].nb.value = " ";
		return;
	}
	else if (nb < 0)
		return;

	if (nb >= nbport)
	{
		alert ("Vous d\u00e9sirez commander " + nb + " exemplaires,\n" +
		       "Merci de nous contacter pour conna\u00eetre les conditions de vente");
		window.document.forms[nameF].nb.value = "1";
		nb = window.document.forms[nameF].nb.value;
	}

	var j = window.document.forms[nameF].pays.value;   // indice pays
	if (j < 0) return;

	// livre(s)
	var p = pu * nb;
	var tp = formatPrix (p);
	prixB = pA; // format US
	if (el.innerHTML)
		el.innerHTML = tp;
	else
	{
		var txt = window.document.createTextNode (tp);
		el.appendChild (txt);
	}

	// frais de port - La Poste
	var f = 0.;     // au delà de 4 - prévoir recommandé et AR ?

	var ind  = PaysT[j].zone;          // indice zone tarifaire
	var ll = tarifP[ind].length;
	for (var nt=0; nt < ll; nt++)
	{
		var o = tarifP[ind][nt];
		if (nb <= o.nbEx)
		{
			f = o.port;
			break;
		}
	}
	var t = formatPrix (f);
	portL = pA;
	if (elP.innerHTML)
		elP.innerHTML = t;
	else
	{
		txt = window.document.createTextNode (t);
		elP.appendChild (txt);
	}

	// total = livre(s) + frais de port
	p += f;
	t = formatPrix (p);
	if (elT.innerHTML)
		elT.innerHTML = t;
	else
	{
		txt = window.document.createTextNode (t);
		elT.appendChild (txt);
	}
}
var pA;  // format US - sans l'unité monétaire
function formatPrix (num)
{
	// " n nnn nnn,cc  "  - format 'à la française'
	// " n,nnn,nnn.cc   " - format 'US' - pour PayPal

	if (isNaN(num)) num = "0";

	var cents = Math.floor((num*100+0.5)%100);
	if (cents < 10)
		cents = "0" + cents.toString();

	var p = Math.floor((num*100+0.5)/100).toString();
	pA = p;
	for (var i = 0; i < Math.floor((p.length-(1+i))/3); i++)
	{
		p  = p.substring(0,p.length-(4*i+3)) + ' ' + p.substring(p.length-(4*i+3));
		pA = pA.substring(0,pA.length-(4*i+3)) + '.' + pA.substring(pA.length-(4*i+3));
	}
	p += ',' + cents;
	pA += '.' + cents;

	p = " " + p + " \u20ac" ;

	return (p);
}

// tarif de La Poste - 1er janvier 2012
//   construit dans l'ordre du nb d'ex croissant (tranche cf prixL)
//   etui super-pac
var tarifP = new Array ();
// 0 = France Métropole
newTarifP (0, 1, 5.52);   
newTarifP (0, 2, 6.27);
newTarifP (0, 3, 6.27);
newTarifP (0, 4, 7.12);
// 1 = France Outre-Mer 1
newTarifP (1, 1, 8.52);
newTarifP (1, 2, 11.77);
newTarifP (1, 3, 15.77);
newTarifP (1, 4, 19.62);
// 2 = France Outre-Mer 2
newTarifP (2, 1, 12.72);
newTarifP (2, 2, 20.57);
newTarifP (2, 3, 27.17);
newTarifP (2, 4, 34.62);
// 3 = Union Européenne et Suisse
newTarifP (3, 1, 8.77);
newTarifP (3, 2, 13.62);
newTarifP (3, 3, 13.62);
newTarifP (3, 4, 22.57);
// 4 = Reste du monde
newTarifP (4, 1, 11.82);
newTarifP (4, 2, 17.97);
newTarifP (4, 3, 17.97);
newTarifP (4, 4, 28.77);
function newTarifP (ind, nb, prix)
{
	// ind  = indice dans tarifP
	// nb   = nb d'exemplaires
	// prix = frais de port
	var na = arguments.length;
	if (na != 3) return;
	for (var i = 0; i < na; i++)
	{
		if (arguments[i].length  <= 0) return;
	}
	if (ind < 0) return;
	if (!tarifP[ind])
		tarifP[ind] = new Array ();
	var ll = tarifP[ind].length;
	tarifP[ind][ll] = new Object ();
	tarifP[ind][ll].nbEx = nb;
	tarifP[ind][ll].port = prix;  // euros
	return;
}

var PaysT = new Array ();
// pays francophones

// nom du pays, code ISO2 pays, code ISO2 langue, indic téléphonique, indice dans tarifP, flag admin

// Métropole
newPays ("France",   "FR", "fr", "33", 0, true);

// Outre-Mer 1
newPays ("Martinique",            "MQ", "fr", "596", 1, true);
newPays ("Guadeloupe",            "GP", "fr", "590", 1, true);
newPays ("Guyane Fran\u00e7aise", "GF", "fr", "594", 1, true);
newPays ("La R\u00e9union",       "RE", "fr", "262", 1, true);
//newPays ("Mayotte",                       "YT", "fr", "269", 1, true);
//newPays ("Saint Pierre et Miquelon",      "PM", "fr", "508", 1, true);
//newPays ("Saint Barth\u00e9lemy",         "BL", "fr", "", 1, true);
//newPays ("Saint Martin",                  "MF", "fr", "", 1, true);

// Outre-Mer 2
newPays ("Polyn\u00e9sie Fran\u00e7aise", "PF", "fr", "689", 2, true);
newPays ("Nouvelle Cal\u00e9donie",       "NC", "fr", "687", 2, true);
//newPays ("Wallis et Futuma",              "WF", "fr", "681", 2, true);
//newPays ("Terres australes et antartiques fran\u00e7aises", "TF", "fr", "", 2, true);
//newPays ("Clipperton",              "?", "fr", "", 2, true);

// Europe et Suisse
newPays ("Belgique",   "BE", "fr",  "32", 3, false);
newPays ("Suisse",     "CH", "fr",  "41", 3, false);
newPays ("Luxembourg", "LU", "fr", "352", 3, false);

// Monde
newPays ("Canada",      "CA", "fr", " 1", 4, false);
//newPays ("Royaume-Uni", "GB", "en", "44", 4, false);

function newPays (ident, cP, cL, cT, indT, fad)
{
	// nom du pays
	// code ISO2 du pays
	// code ISO2 de la langue
	// indicatif téléphonique
	// indice dans la table des tarifs

	var na = arguments.length;
	if (na != 6) return;
	for (var i = 0; i < na; i++)
	{
		if (arguments[i].length  <= 0) return;
	}

	var nb = PaysT.length;
	PaysT[nb] = new Object ();
	PaysT[nb].pays  = ident; // nom du pays
	PaysT[nb].codeP = cP;    // code ISO pays pour Paypal
	PaysT[nb].codeL = cL;    // code ISO langue pour Paypal
	PaysT[nb].codeT = cT;    // code téléphone
	PaysT[nb].zone  = indT;  // zone tarifaire de la Poste (indice dans la table tarifP)
	PaysT[nb].adm   = fad;   // flag administration
}

function listPays (nameF)
{
	// liste des options pour pays - value = indice dans PaysT
	if (!nameF) var nameF = "cmd";
	var menu = window.document.forms[nameF].pays;
	if (!menu) return;

	// tri alpha
	var pp = new Array (); var ip = new Array ();
	for (var i=0; i < PaysT.length; i++)
	{
		pp[i] = PaysT[i].pays;
		ip[i] = i;
	}
	triMult (pp, ip);

	var str = " "; var val = -1; var leg = "";
	var opt; var okSel = false;

	opt = new Option (str, val, okSel, okSel);
	opt.setAttribute ("title", leg);
	menu.options[menu.options.length] = opt;
	for (var j=0; j < pp.length; j++)
	{
		i = ip[j];
		str = PaysT[i].pays;
		if (nameF == "cmda" && !PaysT[i].adm) continue;
		if (PaysT[i].codeP == "FR")
			okSel = true;
		val = i;
		leg = PaysT[i].pays + " - " +  PaysT[i].codeP + " - tel " + PaysT[i].codeT +
		      " - langue " + PaysT[i].codeL + " - port " + PaysT[i].zone;
		opt = new Option (str, val, okSel, okSel);
		opt.setAttribute ("title", leg);
		if (okSel)
		{
			opt.setAttribute ("checked", "checked");
			okSel = false;
		}
		menu.options[menu.options.length] = opt;
	}
	return;
}

//------------------------------
// traitement du bon de commande
//------------------------------

function setFact ()
{
	var ok = window.document.forms["cmd"].facture.checked;
	var el = window.document.getElementById ( "repFact" );
	remNodesFrom (el);
	var t = " non";
	if (ok) t = " oui";
	var txt = window.document.createTextNode (t);
	el.appendChild (txt);
	return;
}

function modPP(nameF)
{
	if (arguments.length <= 0) var nameF = "cmd";

	var pprad  = window.document.getElementById ( "PP" );  // radio - carte
	var ppprad = window.document.getElementById ( "PPP" ); // texte - carte
	var asrad  = window.document.getElementById ( "AS" );  // radio - cheque
	var pasrad = window.document.getElementById ( "ASP" ); // texte - cheque
	var marad  = window.document.getElementById ( "MA" );  // radio - mandat administratif
	var pmarad = window.document.getElementById ( "MAP" ); // texte - mandat administratif

	var j = window.document.forms[nameF].pays.value;   // indice pays
	if (j < 0)
		var cp = "";
	else
		var cp = PaysT[j].codeP;
	if (cp == "FR")
	{
		pasrad.style.color = "#333333";
		asrad.removeAttribute ("disabled");
		asrad.checked = false;

		if (marad)
		{
			pmarad.style.color = "#333333";
			marad.removeAttribute ("disabled");
			marad.checked = false;
		}

		pprad.checked = true;
	}
	else
	{
		pasrad.style.color = "#999999";
		asrad.setAttribute ("disabled", "disabled");
		asrad.checked = false;

		if (marad)
		{
			pmarad.style.color = "#999999";
			marad.setAttribute ("disabled", "disabled");
			marad.checked = false;
		}

		pprad.checked = true;
	}
}
function modP (nameF)
{
	if (arguments.length <= 0)
		var nameF = "cmd";

	if (nameF == "cmda")
	{
		optPay = optChq+2;
		return;
	}

	var but = document.getElementsByName ("mode");
	var mode = "";
	for (var i=0; i < but.length; i++)
	{
		if (but[i].checked)
		{
			mode = but[i].value;
			break;
		}
	}
	if (mode == "PP")     // paiement par carte bancaire
		optPay = optChq+1;
	else if (mode == "AS") // paiement par cheque bancaire
		optPay = optChq;
	else if (mode == "MA") // paiement par mandat administratif
		optPay = optChq+2;
	else
		alert ("N'oubliez pas de choisir votre mode de paiement");
	return;
}

var pays; var codP = ""; var paysN; var codL; var indJ = -1;
var prenom = ""; var nom = "";
var add1 = ""; var add2 = ""; var zip = ""; var city = "";
var email = ""; var tel = "";

function validCmd (form, flds)
{
	messForm = "";

	var j = form.pays.value;
	if (j >= 0)
	{
		paysN = PaysT[j].pays;     // nom du pays
		pays  = PaysT[j].codeP;    // code pays pour Paypal -ISO2
		codL  = PaysT[j].codeL;    // code langue pour Paypal -ISO2
		codP  = PaysT[j].codeT;    // code telephone pays
		indJ  = j;                 // pour commande-confirm.html
	}

	var name; var jind; var value; var ok;
	nbF = 0;
	for (var i=0; i<form.length; i++)
	{
		name = form[i].name;
		if (name.length <= 0) continue;

		ok = true;
		jind = -1;
		for (var j=0; j<flds.length; j++)
		{
			if (flds[j].name != name) continue
			flds[j].ok = true;

			value = remOutSpace (form[i].value);
			if (value.length <= 0)
			{
				if (flds[j].obl == true)
					flds[j].ok = false;
				break;
			}
			else
			{
				if (name == "pays")
				{
					if (indJ < 0)
					{
						flds[j].ok = false;
						break;
					}
				}
			}

			if (varInv ("0", value) == false)
			{
				messForm += "\n'" + flds[j].label + "' ?????????????????? ";
				form[i].value = "";
				ok = false;
				flds[j].ok = false;
				break;
			}

			jind = j;
			if (flds[j].obl == true)
				nbF++;

			var format = flds[j].format;
			if (format == "a") // alpha num : pas de contrainte de format ni de longueur
				break;

			else if (format == "p") // nom ou prenom : lettres apostrophe tiret blanc accents-divers
			{
				var forma = format;
				if (optPay == (optChq+1) ) forma = "pp";   // pas d'accents pour Paypal
				if (varInv (forma, value) == false)
				{
					messForm += "\n\u002d '" + flds[j].label + "' : contient des caract\u00e8res invalides";
					ok = false;
					flds[j].ok = false;
				}
			}

			else if (format == "n")  // code postal - t�l�phone
			{
				if (pays != "FR") break;        // adapter au pays
				value = remSpace (value);       // supprime les espaces dans la chaîne
				var ll = flds[j].lon;
				if (ll > 0)
				{
					if (value.length != ll)
					{
						messForm += "\n\u002d '" + flds[j].label + "' doit contenir " + ll +
						           " chiffres";
						ok = false;
						flds[j].ok = false;
						break;
					}
				}
				if (varInv (format, value) == false)
				{
					messForm += "\n\u002d '" + flds[j].label + "' : contient des caract\u00e8res invalides";
					ok = false;
					flds[j].ok = false;
					break;
				}
			}
			else if (format == "e")  // e-mail  a____a@b____b.e__e
			{
				if (varInv (format, value) == false)
				{
					messForm += "\n\u002d '" + flds[j].label + "' : syntaxe incorrecte";
					ok = false;
					flds[j].ok = false;
					break;
				}
			}
			break;
		}
		if ( (ok == true) && (jind >= 0))
		{
			var lll = flds[jind].out.length;
			if (lll <= 0) continue;
			var min = 0;
			var li = 0;
			var strO  = "";
			for (var vi = min; vi < value.length; vi++)
			{
				var n = value.charCodeAt (vi);
				if (n != 10)
					strO += value.charAt (vi);
				else
				{
					variable = flds[jind].out[li][0];
					if (strO.length > 0)
					{
						window[variable] = strO;
						li++;
					}
					min = vi + 1;
					strO = "";
					if (li >= lll) break;
				}
			}
			if ( (strO.length> 0) && (li < lll) )
			{
				variable = flds[jind].out[li][0];
				window[variable] = strO;
			}
		}
	}
		// ecrire un cookie avec le nb d'exemplaires, pour le retour de PayPal
	if (optPay == (optChq+1))
		cooKie ("S", "nbEx", nb);
		// on utilise un cookie pour garder le nb d'exemplaires
		// on pourrait également utiliser une version php avec retour des variables
		// liées à la commande
		// (retour.php vs retour.html - cf commande_confirm.php)
	return;
}

var pr_win   = null;

function printCmd (nameF)
{
	cancelPrint ();

	if (arguments.length <= 0)
		var nameF = "cmd";
	if (nameF == "cmd")
		var url = "./commande-confirm.html";
	else if (nameF == "cmda")
		var url = "./commande-confirmA.html";
	else
		var url = "";

	// ouvrir la fenetre contenant le formulaire imprimable
	// id page 'bon de commande' mais en remplacant les images par des titres

	if (window.outerHeight)
		var hF = window.outerHeight;
	else
		var hF = parseInt (screen["availHeight"]) - 150; // approx

	var mes = "width=600,height=" + hF +",";
	mes += "menubar=no,status=no,toolbar=no,";
	mes += "resizable=yes,scrollbars=yes";
	pr_win = open (url, "prW", mes);
}

function cancelPrint ()
{
	if (pr_win && !pr_win.closed)
	{
		pr_win.close();
		pr_win = null;
	}
}

function cnvInStr (strI, el)
{
	if (!el) return;

	// pour montrer ligne à ligne un texte contenant des <lf>
	// venant d'un <textarea wrap="physical">

	strI = remOutSpace (strI);
	if (strI.length <= 0) return;

	if (el.innerHTML)
		strInner (el, strI);    // el.innerHTML
	else
		strElAp (el, strI);     // el.appendChild
	return;
}
function strElAp (el, strI)
{
// ajouter des noeuds par 'appendChild'
	var txt; var br;
	var strO  = "";

	remNodesFrom (el);
	for (var i = 0; i < strI.length; i++)
	{
		var n = strI.charCodeAt (i);
		if (n != 10)
			strO += strI.charAt (i);
		else
		{
			if (strO.length > 0)
			{
				txt = window.document.createTextNode (strO);
				el.appendChild (txt);
				strO = "";
			}
			br = window.document.createElement("BR");
			el.appendChild (br);
		}
	}
	if (strO.length > 0)
	{
		txt = window.document.createTextNode (strO);
		el.appendChild (txt);
	}
	return;
}
function strInner (el, strI)
{
// remplir l'element par 'innerHTML'
	var inner = "";
	for (var i = 0; i < strI.length; i++)
	{
		var n = strI.charCodeAt (i);
		if (n != 10)
			inner += strI.charAt (i);
		else
			inner += "<br />";
	}
	if (inner.length > 0)
		el.innerHTML = inner;
	return;
}

// ------------------------
// confirmation de commande
// ------------------------

var main_win = null;
var hFCC;

// transfert des variables pour le formulaire de PayPal

var trPropO = new Array ();
var nbTP = -1;

nbTP++; trPropO[nbTP] = "optPay";   // paiement par cheque ou carte bancaire
nbTP++; trPropO[nbTP] = "nb";       // nombre de livres
nbTP++; trPropO[nbTP] = "prixB";    // prix du(des) livres
nbTP++; trPropO[nbTP] = "portL";    // frais de port
nbTP++; trPropO[nbTP] = "prenom";   // prénom de l'acheteur
nbTP++; trPropO[nbTP] = "nom";      // nom de l'acheteur
nbTP++; trPropO[nbTP] = "add1";     // adresse (1ere ligne)
nbTP++; trPropO[nbTP] = "add2";     // suite de l'adresse (2eme ligne - if any)
nbTP++; trPropO[nbTP] = "zip";      // code postal
nbTP++; trPropO[nbTP] = "city";     // ville
nbTP++; trPropO[nbTP] = "pays";     // code ISO pays
nbTP++; trPropO[nbTP] = "paysN";    // nom pays
nbTP++; trPropO[nbTP] = "email";    // e-mail de l'acheteur
nbTP++; trPropO[nbTP] = "codP";     // indicatif téléphonique
nbTP++; trPropO[nbTP] = "tel";      // num téléphone de l'acheteur
nbTP++; trPropO[nbTP] = "codL";     // code ISO de la langue du pays
nbTP++; trPropO[nbTP] = "indJ";     // indice du pays dans PaysT
nbTP++; trPropO[nbTP] = "etb";      // etablissement public
nbTP++; trPropO[nbTP] = "resp";     // responsable de l'achat

function transF (nameF)
{
	// valeurs formulaires
	// suppose meme nom (nameF) et meme contenu dans les 2 formulaires (sauf les boutons)
	var name; var value; var el; var jind; // var kind;
	var from_win = main_win;
	var to_win   = pr_win;

	//var from = from_win.document.forms.cmd;
	//var to   = to_win.document.forms.cmd;
	var from = from_win.document.forms[nameF];
	var to   = to_win.document.forms[nameF];

	for (var i=0; i<from.length; i++)
	{
		name = from[i].name;
		if (name.length <= 0) continue;
		value = remOutSpace (from[i].value);
		if (name == "facture")
		{
			if (from[i].checked)
				value = "oui";
			else
				value = "non";
		}
		if (value.length <= 0) continue;
		value = " " + value;

		if (name == "pays")
		{
			var nb = Number (value);
			value = " " + PaysT[nb].pays;
		}

		el = window.document.getElementById (name);
		if (el)
			cnvInStr (value, el);    // dans vision du formulaire (id)

		jind = -1;
		for (var j=0; j<to.length; j++)
		{
			if (to[j].name == name)
			{
				jind = j;
				break;
			}
		}
		if (jind >= 0)  // dans formulaire (name)
		{
			if (name == "pays")
				to[name].value = indJ;   // pour prixL
			else if (name == "facture")
				to[name].checked = from[i].checked;
			else
				to[name].value = value;
		}
	}
	// calculer et afficher le montant à payer
	prixL (nameF);

	return;
}

// ------------------------
// validation de formulaire - general
// ------------------------

// pour positionnement
var dimY = new Array ();
function coordY (el)
{
	dimY[0] += el.offsetLeft;
	dimY[1] += el.offsetTop;
	var en = el.offsetParent;
	if (en)
		coordY (en);
	else
		return;
}

var nbF;
function verifForm (formN)
{
	messForm = "";

	var x = 0; var y = 0;

	var div = window.document.getElementById ( "cmdErr" );
	if (div)
	{
		remNodesFrom (div);
		div.style.visibility = "hidden";
	}
	else
	{
		messForm += "Pas de cadre pour le message d'erreur";
		//alert (messForm);
		setErrFr (messForm);

		window.scrollTo (x, y);
		messForm = "";
		return (false);
	}

	if (!formN)
	{
		messForm += "Pas de nom de formulaire";
		//alert (messForm);
		setErrFr (messForm);

		window.scrollTo (x, y);
		messForm = "";
		return (false);
	}

	var form = window.document.forms[formN];
	if (!form)
	{
		messForm += "Le formulaire '" + formN + "' n\'existe pas dans la page.";
		//alert (messForm);
		setErrFr (messForm);

		window.scrollTo (x, y);
		messForm = "";
		return (false);
	}

	var flds = ""; var nbObl = 0;
	for (var i=0; i<docForms.length; i++)
	{
		if (formN == docForms[i].name)
		{
			flds  = docForms[i].tab;
			nbObl = docForms[i].obl;
			break;
		}
	}

	if (flds.length <= 0)
	{
		messForm += "Pas de desciption du formulaire '" + formN + "'";
		//alert (messForm);
		setErrFr (messForm);

		window.scrollTo (x, y);
		messForm = "";
		highForm (formN);
		return (false);
	}

	// verifier que les champs obligatoires sont remplis et valides

	if ((formN == "cmd") || (formN == "cmda"))
	{
		cancelPrint ();
		validCmd (form, flds);
	}
	else
	{
		validForm (form, flds);
		if (formN == "rec")
		{
			if (nbPs != nbEs)
			{
				messForm += "\n\nChacun de vos amis doit avoir une adresse e-mail, et une seule";
				flds[kAmis].ok = false;
				flds[kEAmis].ok = false;
			}
		}
	}

	if (messForm.length > 0)
		messForm += "\n\nCorriger les champs erron\u00e9s";
	if (nbF != nbObl)
		messForm += "\n\nRenseigner tous les champs obligatoires";

	if (messForm.length > 0)
	{
		if (formN == "rec")
			messForm += "\npuis envoyer \u00e0 nouveau.\nMerci";
		else
			messForm += "\npuis confirmer \u00e0 nouveau.\nMerci";
		//alert (messForm);
		setErrFr (messForm);

		if (formN == "load")
		{
			if (div.offsetLeft || div.offsetTop)
			{
				dimY[0] = 0; dimY[1] = 0;
				coordY (div);
				x = dimY[0];  // left
				y = dimY[1];  // top
			}
		}

		window.scrollTo (x, y);
		messForm = "";
		highForm (formN);
		return (false);
	}
	else
	{
		highForm (formN);
		if ((formN == "cmd") || (formN == "cmda"))
			printCmd(formN);  // confirmation de commande
		return (true);
	}
}
var nbPs; var nbEs;
function validForm (form, flds)
{
	messForm = "";

	nbPs = 0; nbEs = 0; nbF = 0;
	var name; var jind; var value; var ok;
	for (var i=0; i<form.length; i++)
	{
		name = form[i].name;
		if (name.length <= 0) continue;

		ok = true;
		jind = -1;
		for (var j=0; j<flds.length; j++)
		{
			if (flds[j].name != name) continue
			flds[j].ok = true;

			value = remOutSpace (form[i].value);
			if (value.length <= 0)
			{
				if (flds[j].obl == true)
					flds[j].ok = false;
				break;
			}

			if (varInv ("0", value) == false)
			{
				messForm += "\n'" + flds[j].label + "' ?????????????????????????? ";
				form[i].value = "";
				ok = false;
				flds[j].ok = false;
				break;
			}

			jind = j;
			if (flds[j].obl == true)
				nbF++;

			var format = flds[j].format;
			if (format == "a") // alpha num : pas de contrainte de format ni de longueur
				break;

			else if (format == "p")   // lettres apostrophe tiret blanc
			{
				if (varInv (format, value) == false)
				{
					messForm += "\n\u002d '" + flds[j].label + "' : contient des caract\u00e8res invalides";
					ok = false;
					flds[j].ok = false;
				}
			}

			else if (format == "pp")  // pas d'accent
			{
				if (varInv (format, value) == false)
				{
					messForm += "\n\u002d '" + flds[j].label + "' : contient des caract\u00e8res invalides";
					ok = false;
					flds[j].ok = false;
				}
			}

			else if (format == "n")  // chiffres
			{
				value = remSpace (value);       // supprime les espaces dans la chaîne
				var ll = flds[j].lon;
				if (ll > 0)
				{
					if (value.length != ll)
					{
						messForm += "\n\u002d '" + flds[j].label + "' doit contenir " + ll +
						           " chiffres";
						ok = false;
						flds[j].ok = false;
						break;
					}
				}
				if (varInv (format, value) == false)
				{
					messForm += "\n\u002d '" + flds[j].label + "' : contient des caract\u00e8res invalides";
					ok = false;
					flds[j].ok = false;
					break;
				}
			}

			else if (format == "e")  // e-mail  a____a@b____b.e__e
			{
				if (varInv (format, value) == false)
				{
					messForm += "\n\u002d '" + flds[j].label + "' : syntaxe incorrecte ou contient des caract\u00e8res invalides";
					ok = false;
					flds[j].ok = false;
				}
			}

			else if (format == "es")  // e-mail1 ; e-mail2 ; ...
			{
				var lst = value.split (";");
				for (var k=0; k<lst.length; k++)
				{
					var em = remOutSpace (lst[k]);
					if (em.length <= 0) continue;
					if (varInv ("e", em) == false)
					{
						messForm += "\n\u002d '" + flds[j].label + "' : syntaxe incorrecte";
						ok = false;
						flds[j].ok = false;
						break;
					}
					else
						nbEs++;
				}
			}

			else if (format == "ps")  // nnn ; mmm ; ppp
			{
				var lst = value.split (";");
				for (var k=0; k<lst.length; k++)
				{
					var em = remOutSpace (lst[k]);
					if (em.length <= 0) continue;
					if (varInv ("p", em) == false)
					{
						messForm += "\n\u002d '" + flds[j].label + "' : contient des caract\u00e8res invalides";
						ok = false;
						flds[j].ok = false;
						break;
					}
					else
						nbPs++;
				}
			}

		}
	}
	return;
}

function setErrFr (mess)
{
	var div = window.document.getElementById ( "cmdErr" );
	remNodesFrom (div);

	var newTAB = window.document.createElement("TABLE");  // <table>
	newTAB.setAttribute ("cellspacing", "0");
	newTAB.setAttribute ("cellpadding", "0");
	newTAB.setAttribute ("border", "0");
	newTAB.setAttribute ("width", "100%");
	var str = "border-collapse: collapse;";
	if (msie)
		newTAB.style.cssText = str;
	else
		newTAB.setAttribute ("style", str);
	var newB = window.document.createElement("TBODY");  // <tbody>	- indispensable
	                                                      // pour MSIE et Konqueror
	var newTR = window.document.createElement("TR");      // <tr>
	var newTD = window.document.createElement("TD");      // <td>
	newTD.setAttribute ("width", "54px");
	var newIMG = window.document.createElement("IMG");
	newIMG.setAttribute ("src", "images/icon_critalert.gif");
	newIMG.setAttribute ("height", "34px");
	newIMG.setAttribute ("width", "34px");
	newIMG.setAttribute ("align", "center");
	newIMG.setAttribute ("hspace", "10");
	newTD.appendChild (newIMG);
	newTR.appendChild (newTD);

	newTD = window.document.createElement("TD");      // <td>
	if (msie)
	{
		str  = "font-family: Arial, helvetica, sans-serif;";
		str += "color:        	#000000;";
		str += "font-size:    	8pt;";
		str += "text-align:   	left;";
		newTD.style.cssText = str;
	}
	else
		newTD.setAttribute ("class", "tderr");
	var lines = mess.split("\n");
	var newTXT; var first = true;
	for (var i=0; i<lines.length; i++)
	{
		if (lines[i].length>0)
		{
			newTXT = window.document.createTextNode (lines[i]);
			newTD.appendChild (newTXT);
			newBR = window.document.createElement("BR");          // <br>
			newTD.appendChild (newBR);
			first = false;
		}
		else
		{
			if (first) continue;
			newBR = window.document.createElement("BR");          // <br>
			newTD.appendChild (newBR);
		}
	}
	newTR.appendChild (newTD);        // </td>
	newB.appendChild (newTR);         // </tr>
	newTAB.appendChild (newB);        // </tbody>
	div.appendChild (newTAB);         // </table>

	div.style.visibility = "visible";
	return;
}

var colorN = "#333333";  /* couleur normale voir lspnc.css */
var colorI = "#ff0000";  /* couleur erreur rgb(255,0,0)  */

function highForm (formN, opt)
{
	if (!formN || formN.length <= 0) return;
		// changer la couleur de l'intitulé des champs erronés
		// ...FormFld[j].ok = true  -> couleur normale
		// ...FormFld[j].ok = false -> autre
	var reset = false;
	if (opt && (opt == "reset") ) reset = true;

	var form = window.document.forms[formN];
	if (!form) return;

	var flds = "";
	for (var i=0; i<docForms.length; i++)
	{
		if (formN == docForms[i].name)
		{
			flds = docForms[i].tab;
			break;
		}
	}
	if (flds.length <= 0) return;

	var name; var el;
	for (var i=0; i<form.length; i++)
	{
		name = form[i].name;
		if (name.length <= 0) continue;

		for (var j=0; j<flds.length; j++)
		{
			if (flds[j].name != name) continue
			el  = window.document.getElementById ( name );
			if (!el ) continue;
			if (reset) flds[j].ok = true;
			if (flds[j].ok == true)
				el.style.color = colorN;
			else
				el.style.color = colorI;
		}
	}
	return;
}

function resetForm (formN)
{
	var div = window.document.getElementById ( "cmdErr" );
	if (div)
	{
		remNodesFrom (div);
		div.style.visibility = "hidden";
	}

	highForm (formN, "reset");
	if (formN == "cmd" || formN == "cmda")
		prixL (formN);
}

function varInv (format, str)
{
	if (format == "0") // pour éviter les entrées malveillantes
	{
		var ia = str.indexOf ("<");
		if (ia >= 0)
		{
			var ib = str.indexOf (">");
			if (ib > ia)
				var sstr = str.substring (ia, ib+1);  // tag
			else
				var sstr = str.substring (ia);  // tag
			var strl = remBlk (sstr.toLowerCase () );
			ia = strl.indexOf ("<script");
			if (ia >= 0)
				return (false);
			ia = strl.indexOf ("<object");
			if (ia >= 0)
				return (false);
			ia = strl.indexOf ("<applet");
			if (ia >= 0)
				return (false);
			ia = strl.indexOf ("<embed");
			if (ia >= 0)
				return (false);
			ia = strl.indexOf ("<?");
			if (ia >= 0)
				return (false);
			ia = strl.indexOf ("<%");
			if (ia >= 0)
				return (false);
		}
	}
	else if (format == "pp")  // nom et prénom pour Paypal : pas d'accent
	{
		var reg = new RegExp ("[A-Za-z' -]+", "");
		var m = str.match (reg);
		//debMatch (str, m);
		if (!m || (m[0] != str) )
			return (false);
	}
	else if (format == "p")  // nom et prénom pour 'recommander'
	{
		// voir pour tous les autres accents, tilde, etc
		var reg = new RegExp (
	"[A-Za-z' -\u00e9\u00e8\u00ea\u00eb\u00ee\u00ef\u00f9\u00fb\u00fc\u00f4\u00e0\u00e2\u00e7]+",
	"");
	 //  �     �     �     �     �     �     �     �     �     �     ��    �     �
		//var reg = new RegExp ("[\\w' -]+", "");  // pas vrai pour tous les navigateurs
		//var reg = new RegExp ("[\\w\\p{Mn}' -]+", "");
		var m = str.match (reg);
		//debMatch (str, m);
		if (!m || (m[0] != str) )
			return (false);
	}
	else if (format == "n")  // chiffres
	{
		if (arguments.length >= 3)
		{
			var l = arguments[2];
			if (l > 0)
				var reg = new RegExp ("\\d{" + l + "}", "");
			else
				var reg = new RegExp ("\\d+", "");
		}
		else
			var reg = new RegExp ("\\d+", "");
		var m = str.match (reg);
		//debMatch (str, m);
		if (!m || (m[0] != str) )
			return (false);
	}
	else if (format == "e")  // adresse e-mail - pas d'accent
	{
		var reg = new RegExp (
		          "^(\\w|-|\\.)+@((\\w|-)+\\.)+[A-Za-z]{2,6}$", "");
		          //"^([A-Za-z0-9_-]+\\.)+@([A-Za-z0-9_-]+\\.)+[A-Za-z]{2,6}$", ""); // pb online.net
		         // "^(([A-Za-z0-9_-])+\\.)+@(([A-Za-z0-9_-])+\\.)+[A-Za-z]{2,6}$", "");
		// "^([A-Za-z0-9_-]+)(([.]?([A-Za-z0-9_-]+))*)@([A-Za-z0-9_-]+)[.](([.]?([A-Za-z0-9_-]+))*)$",
		// "^(\\w|-|\\.)+@((\\w|-)+\\.)+[a-z]{2,6}$",
		var m = str.match (reg);
		//debMatch (str, m);
		if (!m || (m[0] != str) )
			return (false);
	}
	return (true);
}

// --------
// audience
// --------

function xiti_nf (page)
{
	// pour le test
	if (!okServ)
	{
		/*
		document.write ('<img src="./images/hit.xiti"' +
		                ' width="39" height="25" border="0"' +
		                ' alt="Audi" title="Pour test local" />');
		*/
		return;
	}

	document.write ('<a style="text-align: right;"' +
	                ' href="http://www.xiti.com/xiti.asp?s=259682"' +
	                ' target="_blank">');

	document.write ('<img ');

	var Xt_param = "s=259682&p=" + page;
	var Xt_i = ' src="http://logv31.xiti.com/hit.xiti?' + Xt_param;

	var Xt_h = new Date();
	var hl = Xt_h.getHours() + 'x' + Xt_h.getMinutes() + 'x' + Xt_h.getSeconds();
	Xt_i += '&hl=' + hl;

	if(parseFloat(navigator.appVersion)>=4)
	{
		var Xt_s = screen;
		var scr = Xt_s.width + 'x' + Xt_s.height + 'x' + Xt_s.pixelDepth + 'x' + Xt_s.colorDepth;
		Xt_i += '&r=' + scr;
	}

	try {var Xt_r = top.document.referrer;}
	catch(e) {var Xt_r = document.referrer; }
	Xt_r = Xt_r.replace(/[<>"]/g, '').replace(/&/g, '$');
	Xt_i += '&ref=' + Xt_r;

	document.write (Xt_i);

	document.write (' width="39" height="25" border="0"' +
	                ' alt="Audi" title="Mesurez votre audience"');

	document.write (' /></a>');

	return;
}

//-----------------
// retour de PayPal
//-----------------

var nbExL = 0;
function getPar ()
{
	nbExL = cooKie ("G", "nbEx");  // get
	cooKie ("D", "nbEx");          // delete
	return;
}

// --------------
// pour debugging
// --------------

var policeD = policeU;
var deb_win = null;
function debug (msg)
{
	if ( ! deb_win  || (deb_win.closed) )
	{
		deb_win = open ("", "debugW",
		                "width=600,height=300,resizable,scrollbars");
		deb_win.document.open ("text/html");
		deb_win.document.write ("<head>");
		deb_win.document.write ("<title>Debug</title>");
		deb_win.document.write ("<style type='text/css'>");
		deb_win.document.write ("p.titZ");
		deb_win.document.write ("{");
		deb_win.document.write ("font-size:       24px;");
		deb_win.document.write ("font-weight:     bold;");
		deb_win.document.write ("text-decoration: underline;");
		deb_win.document.write ("text-align:      center;");
		deb_win.document.write ("}");
		deb_win.document.write ("</style>");
		deb_win.document.write ("</head>");
		deb_win.document.write ("<body style='font-family: " + policeD +
		                        "; font-size: 16px'>");
		deb_win.document.write ("<p class='titZ'>Informations</p>");
 		deb_win.document.write ("<center>");
		deb_win.document.write ("<input type='button' name='Ret' " +
		                        "value=' Close '");
		deb_win.document.write (" onClick='window.close();' />");
		deb_win.document.write ("</center>");
	}
	deb_win.document.write (msg);
	return;
}
function charInStr (strI)
{
	var ll = strI.length;
	var nl = String(ll).length;
	debug ("<pre>");
	debug ("<br />String = " + strI);
	for (var i = 0; i < ll; i++)
	{
		debug ("<br />");
		var c = strI.charAt (i);
		var n = strI.charCodeAt (i);

		var ii = String(i);
		if (ii.length < nl)
		{
			do { ii = " " + ii;} while (ii.length < nl);
		}
		if (n <= 9)
			n = "  " + n;
		else if (n <= 99)
			n = " " + n;
		debug ("(" + ii + ") = " + c + " - " + n + " / ");
	}
	debug ("</pre>");
	return;
}
function prAny (tab, tita)
{
	var nb = (arguments.length == 3 ? arguments[2] : 1);
	if (nb == 0) nb = 1;
	var ni = (nb >= 1 ? 1 : Math.abs(nb));

	// un element de tab = libelle + valeur
	// |nb| = nb elements a imprimer par ligne :
	// > 0  stockes nb par nb dans une ligne de tab
	// < 0  stockes un par un dans une ligne de tab

	debug ("<table cellspacing='0' cellpadding='0' border='0'>");
	for ( var ii=0; ii<tab.length; ii+=ni)
	{
		if ( (remBlk(tab[ii][0]).length > 0) )
		{
			if (nb > 0)
			{
				debug ("<tr>");
				debug ("<td valign='top'>" + tita + "</td>");
				for (var jj=0; jj<nb; jj++)
				{
					if (jj > 0)
 						debug ("<td valign='top'>&nbsp;&nbsp;-&nbsp;</td>");
					debug ("<td valign='top'>&nbsp;" + tab[ii][2*jj] + "</td>");
					debug ("<td valign='top'>&nbsp;=&nbsp;</td>");
					debug ("<td valign='top'>" + tab[ii][2*jj+1] + "</td>");
				}
				debug ("</tr>");
			}
			else
			{
				debug ("<tr>");
				debug ("<td valign='top'>" + tita + "</td>");
				for (var jj=0; jj<ni; jj++)
				{
					if (jj > 0)
 						debug ("<td valign='top'>&nbsp;&nbsp;-&nbsp;</td>");
					debug ("<td valign='top'>&nbsp;" + tab[ii+jj][0] + "</td>");
					debug ("<td valign='top'>&nbsp;=&nbsp;</td>");
					debug ("<td valign='top'>" + tab[ii+jj][1] + "</td>");
				}
				debug ("</tr>");
			}
		}
		else
 		{
 			debug ("</table><br />");
			debug ("<table cellspacing='0' cellpadding='0' border='0'>");
 		}
	}
	debug ("</table>");
}
function debDim (opt)
{
	//--------------------------------------------------------
	//screen properties
	var sProp = new Array (
		"width", "height",
		"availWidth", "availHeight",
		"top", "left",
		"availTop", "availLeft",
		"colorDepth", "pixelDepth",
		" ", " "
		);
	//window properties
	var wProp = new Array (
		"pageXOffset", "pageYOffset",
		"innerWidth",  "innerHeight",
		"outerWidth",  "outerHeight",
		"screenX",     "screenY",
		"screenLeft",  "screenTop",
		"scrollX",     "scrollY",
		" ", " "
		);
	// body properties
	var bProp = new Array (
		"clientWidth", "clientHeight",
		"offsetLeft", "offsetTop", "offsetWidth", "offsetHeight",
		"scrollLeft", "scrollTop", "scrollWidth", "scrollHeight",
		" ", " "
		);
	// document properties
	var dProp = new Array (
		"width", "height",
		" ", " "
		);
	var k = 0;
	var dataD = new Array ();
	for (var i=0; i < sProp.length; i+=2)
	{
		dataD[k] = new Array ();
		if (remBlk(sProp[i]).length > 0)
		{
			dataD[k][0] = "screen." + sProp[i];
			dataD[k][1] = screen[sProp[i]];
			dataD[k][2] = "screen." + sProp[i+1];
			dataD[k][3] = screen[sProp[i+1]];
		}
		else
		{
			dataD[k][0] = " "; dataD[k][1] = " ";
			dataD[k][2] = " "; dataD[k][3] = " ";
		}
		k++;
	}
	for (var i=0; i < wProp.length; i+=2)
	{
		dataD[k] = new Array ();
		if (remBlk(wProp[i]).length > 0)
		{
			dataD[k][0] = "window." + wProp[i];
			dataD[k][1] = window[wProp[i]];
			dataD[k][2] = "window." + wProp[i+1];
			dataD[k][3] = window[wProp[i+1]];
		}
		else
		{
			dataD[k][0] = " "; dataD[k][1] = " ";
			dataD[k][2] = " "; dataD[k][3] = " ";
		}
		k++;
	}
	if ( opt && (opt == "all") )
	{
		for (var i=0; i < dProp.length; i+=2)
		{
			dataD[k] = new Array ();
			if (remBlk(dProp[i]).length > 0)
			{
			dataD[k][0] = "document." + dProp[i];
			dataD[k][1] = document[dProp[i]];
			dataD[k][2] = "document." + dProp[i+1];
			dataD[k][3] = document[dProp[i+1]];
			}
			else
			{
				dataD[k][0] = " "; dataD[k][1] = " ";
				dataD[k][2] = " "; dataD[k][3] = " ";
			}
			k++;
		}
		for (var i=0; i < bProp.length; i+=2)
		{
			dataD[k] = new Array ();
			if (remBlk(bProp[i]).length > 0)
			{
				dataD[k][0] = "body." + bProp[i];
				dataD[k][1] = document.body[bProp[i]];
				dataD[k][2] = "body." + bProp[i+1];
				dataD[k][3] = document.body[bProp[i+1]];
			}
			else
			{
				dataD[k][0] = " "; dataD[k][1] = " ";
				dataD[k][2] = " "; dataD[k][3] = " ";
			}
			k++;
		}
	}
	debug ("<p style='font-size: 20px;'>" + nameNav + " - window = " + window.name +
	       " - doc = " + window.location + "</p>");
	prAny (dataD, " ", 2);
	//--------------------------------------------------------
}
function debMatch (str, m)
{
	debug ("str = " + str + "<br />");
	if (m)
	{
		for (var k = 0; k < m.length; k++)
			debug (" - m[" + k + "] = " + m[k] + "<br />");
	}
}
	//--------------------------------------------------------
var msg = "";
function formsL() 
{
	msg = "nb formulaires : " + document.forms.length + "\n";
	for (var i = 0; i < document.forms.length; i++)
	{ 
		msg += "f " + i + "\n";
		for (var j = 0; j < document.forms[i].elements.length; j++)
		{
			msg += document.forms[i].elements[j].type;
			if (document.forms[i].elements[j].name) msg += " - " + document.forms[i].elements[j].name;
			msg += "\n";
		}
	}
	alert (msg);
}
	//--------------------------------------------------------

