
function MM_validateForm() { //v4.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
    if (val) { nm=val.name; if ((val=val.value)!="") {
      if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');  
      p2=val.indexOf('.');
        if (p<1 || p==(val.length-1)){ errors+='- '+nm+' must contain an e-mail address.\n';
             
        }
        else{
           if (p2<1 || p2==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
        }
      } else if (test!='R') { num = parseFloat(val);
        if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
        if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
          min=test.substring(8,p); max=test.substring(p+1);
          if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
    } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }
  } if (errors) alert('The following error(s) occurred:\n'+errors);
  document.MM_returnValue = (errors == '');
}
//-->


function add_favoris()
{
nom_site = "'Makdam Store.com'";
url_site = "'http://www.makdam-store.com";
if (navigator.appName == "Netscape")
alert ('Utilisateur de Netscape, il vous suffit d\'appuyer sur CTRL+d  pour ajouter cette page à vos signets');
else {

addbookmark();
}
}



/*ajouter au favoirs*/
var bookmarkurl="http://www.makdam-store.com"
var bookmarktitle="Makdam Store"
function addbookmark(){
if (document.all)
window.external.AddFavorite(bookmarkurl,bookmarktitle)
}



/*------------------------*/ 
/*fermeture windows*/ 
/*------------------------*/
 function errorSafe() {return true;}
window.onerror = errorSafe; 
function newWin(url,name,rs,sc,mn,tl,lo,wd,hi) {
closeWindow = window.close();}
name.window="menu"
function close_window(url) {
email = window.close(url,"");
}

/* imprimer*/
function imprimer(){window.print();} 

function open_window(votre_page,haut,bas,num)
{
var hauteur_popup=haut;
var H = (screen.height - hauteur_popup) / 2;
var largeur_popup=bas;
var L = (screen.width - largeur_popup) / 2;
pop_up = window.open(votre_page,num,"status=yes,scrollbars=yes,resizable=yes,height="+hauteur_popup+",width="+largeur_popup+",top="+H+",left="+L);
}


function open_window(votre_page,haut,bas,num)
{
var hauteur_popup=haut;
var H = (screen.height - hauteur_popup) / 2;
var largeur_popup=bas;
var L = (screen.width - largeur_popup) / 2;
pop_up = window.open(votre_page,num,"status=yes,scrollbars=no,resizable=no,height="+hauteur_popup+",width="+largeur_popup+",top="+H+",left="+L);
}


function spec(u)
{
	window.open(u,"_self")
}

function flash(tag) {
document.write(tag);
} 



/* autre validation formulaire*/

function Formulaire(formulaire)
// constructeur de la classe (en entrée : l'attribut "name" du formulaire à valider)
{
   // variables membres
   this.form=formulaire; // nom du formulaire
   this.erreurs=new Array(); // tableau des champs contenant des erreurs de saisie

   // tableaux des règles de validation appliquées aux champs
   this.regles=new Array();
   this.messages=new Array();
   this.validations=new Array();
   this.params=new Array();

   // méthodes
   this.regle=regleChamp;
   this.nettoyer=nettoyerChaine;
   this.valider=validerForm;
   this.liste=listeErreurs;
}

function regleChamp(champ, type, message, param)
/* ajoute une règle de validation :
- "champ" est la valeur de l'attribut "name" du champ
- "type" est la règle de validation proprement dite
- "message" est le message d'erreur en cas de validation erronée
- "param" est un paramètre facultatif, utilisé par ceratines règles */
{
   this.regles.push(champ);
   this.validations.push(type);
   this.messages.push(message);
   this.params.push(param);
}

function listeErreurs()
// retourne la liste des erreurs
{
   var x, liste="";
   
   // construction de la chaîne
   for(x=0; x<this.erreurs.length; x++) liste+="- "+this.erreurs[x]+"\n";
   
   return liste;
}


function nettoyerChaine(chaine)
// supprime les espaces en début et fin de chaîne (équivalent à la fonction PHP "trim()")
{
   regex=new RegExp("(^ +)|( +$)", "g");
   chaine=chaine.replace(regex, "");

   return chaine;
}

function validerForm()
// valide le formulaire : chaque champ doit vérifier les règles qui lui ont été définies
{
   var x, regex, msg="";
   eval("var formulaire=document."+this.form+";");
   
   // si aucune règle n'a été définie, la validation est toujours vraie
   if(!this.regles.length) return true;
   
   // on examine chaque champ
   for(x=0; x<this.regles.length; x++)
   {
      // on effectue au préalable un petit nettoyage sur le champ à valider
      eval("formulaire."+this.regles[x]+".value=this.nettoyer(formulaire."+this.regles[x]+".value);");
      
      switch(this.validations[x])
      {
		/*case "check":	  
	  	'	 eval('if(formulaire.'+this.regles[x]+'.checked) this.erreurs.push(this.messages[x]);');
          
            break;*/
         // le champ doit avoir le même contenu qu'un autre
         case "comparaison":
            eval("if(formulaire."+this.regles[x]+".value!='"+this.params[x]+"') this.erreurs.push(this.messages[x]);");
            break;
            
         /* le champ doit avoir une certaine longueur : c'est le dernier paramètre sous la forme "min,max"
         (0 signifiant pas de minimum ou de maximum) */
         case "longueur":
            eval("var longueur=formulaire."+this.regles[x]+".value.length;");
            if(longueur)
            {
               var temp=this.params[x].split(",( +)?");
               mini=parseInt(temp[0]);
               maxi=parseInt(temp[1]);
               
               if((mini && longueur<mini) || (maxi && longueur>maxi)) this.erreurs.push(this.messages[x]);
            }
            break;

         // le champ (uniquement s'il est rempli) doit vérifier une expression régulière
         case "regex":
            switch(this.params[x])
            {
               // quelques exemples...
               case "mail":
                  regex=new RegExp("^[a-z0-9_]([.-]?[a-z0-9_]+)+@[a-z0-9_]([.-]?[a-z0-9_]+)+\.([a-z]{2,4}|[a-z]{6})$", "gi");
                  break;
                  
               case "alpha_num":
                                      regex=new RegExp("^[éèàùêâôîâëö.:,_ ' \n a-z0-9]+$", "gi");
                  break;
                  
               case "num":
                    regex=new RegExp("^[/ 0-9]+$", "g");
                  break;
                  
               case "unedate":
                  regex=new RegEx("^[0-3][0-9][/-.](0[1-9]|1[0-2])[/-.][0-9]{4}$", "g");
                  break;
                  
				     case "code_postal":
                  regex=new RegExp("^(0[1-9]|[1-9][0-9])[0-9]{3}$", "g");
                  break;  
				  
               // par défaut (non vide)
               default:
                  regex=new RegExp("^.+$", "g");

            }
            
            eval('if(formulaire.'+this.regles[x]+'.value!="" && !regex.exec(formulaire.'+this.regles[x]+'.value)) this.erreurs.push(this.messages[x]);');
            break;
            
         case "requis":
         default:
         // le champ doit juste être rempli
            eval('if(formulaire.'+this.regles[x]+'.value=="") this.erreurs.push(this.messages[x]);');
      }
   }
   
   // en cas d'erreur, on affiche les différents messages
   if(this.erreurs.length)
   {
      var msg="Le formulaire comporte des erreurs :\n\n"+this.liste()+"\nVeuillez remplir correctement les champs.";
      alert(msg);
      return false;
   }
   
   // en cas de succès, on envoie le formulaire
   
   
   
   return true;
}


	function DivStatus( nom, numero )
		{
			var divID = nom + numero;
			if ( document.getElementById && document.getElementById( divID ) ) // Pour les navigateurs récents
				{
					Pdiv = document.getElementById( divID );
					PcH = true;
		 		}
			else if ( document.all && document.all[ divID ] ) // Pour les veilles versions
				{
					Pdiv = document.all[ divID ];
					PcH = true;
				}
			else if ( document.layers && document.layers[ divID ] ) // Pour les très veilles versions
				{
					Pdiv = document.layers[ divID ];
					PcH = true;
				}
			else
				{
					
					PcH = false;
				}
			if ( PcH )
				{
					Pdiv.className = ( Pdiv.className == 'cachediv' ) ? '' : 'cachediv';
				}
		}
		
	/*
	* Cache tous les divs ayant le même préfixe
	*/
	function CacheTout( nom )
		{	
			var NumDiv = 1;
			if ( document.getElementById ) // Pour les navigateurs récents
				{
					while ( document.getElementById( nom + NumDiv) )
						{
							SetDiv = document.getElementById( nom + NumDiv );
							if ( SetDiv && SetDiv.className != 'cachediv' )
								{
									DivStatus( nom, NumDiv );
								}
							NumDiv++;
						}
				}
			else if ( document.all ) // Pour les veilles versions
				{
					while ( document.all[ nom + NumDiv ] )
						{
							SetDiv = document.all[ nom + NumDiv ];
							if ( SetDiv && SetDiv.className != 'cachediv' )
								{
									DivStatus( nom, NumDiv );
								}
							NumDiv++;
						}
				}
			else if ( document.layers ) // Pour les très veilles versions
				{
					while ( document.layers[ nom + NumDiv ] )
						{
							SetDiv = document.layers[ nom + NumDiv ];
							if ( SetDiv && SetDiv.className != 'cachediv' )
								{
									DivStatus( nom, NumDiv );
								}
							NumDiv++;
						}
				}
		}
	
	/*
	* Montre tous les divs ayant le même préfixe
	*/
	function MontreTout( nom )
		{	
			var NumDiv = 1;
			if ( document.getElementById ) // Pour les navigateurs récents
				{
					while ( document.getElementById( nom + NumDiv) )
						{
							SetDiv = document.getElementById( nom + NumDiv );
							if ( SetDiv && SetDiv.className != '' )
								{
									DivStatus( nom, NumDiv );
								}
							NumDiv++;
						}
				}
			else if ( document.all ) // Pour les veilles versions
				{
					while ( document.all[ nom + NumDiv ] )
						{
							SetDiv = document.all[ nom + NumDiv ];
							if ( SetDiv && SetDiv.className != '' )
								{
									DivStatus( nom, NumDiv );
								}
							NumDiv++;
						}
				}
			else if ( document.layers ) // Pour les très veilles versions
				{
					while ( document.layers[ nom + NumDiv ] )
						{
							SetDiv = document.layers[ nom + NumDiv ];
							if ( SetDiv && SetDiv.className != '' )
								{
									DivStatus( nom, NumDiv );
								}
							NumDiv++;
						}
				}
		}
		
	/*
	* Inverse les divs: Cache les divs visible et montre le divs cachés :)
	*/
	function InverseTout( nom )
		{	
			var NumDiv = 1;
			if ( document.getElementById ) // Pour les navigateurs récents
				{
					while ( document.getElementById( nom + NumDiv ) )
						{
							SetDiv = document.getElementById( nom + NumDiv );
							DivStatus( nom, NumDiv );
							NumDiv++;
						}
				}
			else if ( document.all ) // Pour les veilles versions
				{
					while ( document.all[ nom + NumDiv ] )
						{
							SetDiv = document.all[ nom + NumDiv ];
							DivStatus( nom, NumDiv );
							NumDiv++;
						}
				}
			else if ( document.layers ) // Pour les très veilles versions
				{
					while ( document.layers[ nom + NumDiv ] )
						{
							SetDiv = document.layers[ nom + NumDiv ];
							DivStatus( nom, NumDiv );
							NumDiv++;
						}
				}
		}
