/*  Fonction : submit_form()   
	params: void   
	retour: void  
	desc: Fonction pricipale de la soumission du formulaire*/
function submit_form(){
	
	init_valide();			//Initialisation des tableaux de données
	
	valide();				//Validation du formulaire
	
	//Afficher les erreurs ou envoyer le email
	flag_err = false
	for (var i=0 ; i<content.length;i++){
		if (erreur[i]!=0)
			flag_err=true;
	}
	if (flag_err == true)
		affiche_erreur();	//Affichage des erreurs
	else{
		popup();
		forme_email();		//Formatage de la chaine de code du email
		envoyer();			//Envoi du email
		
	}
}


/*  Fonction : init_array(nom, t_valide, obli,v_min, v_max)   
	params:		nom = Nom Affiché dans la page 
				t_valide = Type de validation à effectuer
				obli = Flag si le champ est obligatoire
				v_min = Nb de caractère minimum
				v_max = Mb de caractère maximum
	retour: void 
	desc: Ajout des information sur un champ dans les tableaux de données*/
function init_array(nom, t_valide, obli,v_min, v_max){
	s_name.push(nom);		//Ajoute le label affiché sur la page
	type.push(t_valide);	//Ajoute le type de validation à effectuer
	must.push(obli);		//Ajoute le flag pour les champs obligatoires
	min.push(v_min);		//Ajoute le nb min de caractère requis
	max.push(v_max);		//Ajoute le nb max de caractère requis
}


/*  Fonction : init_valide()   
	params: void   
	retour: void 
	desc: Initialisation des tableaux de données*/
function init_valide(){
	
	madate = new Date();	//Date pour vérifier l'année entrée
		
	f_name = new Array();	//Nom du champ dans la Form
	content = new Array();  //Valeur du champ
	erreur=new Array();		//Erreur trouvée [0, vide, min, max, nvalid, choix,minv,hinv,ainv]
	t_input=new Array();	//Type du champ

	s_name = new Array();	//Nom du Champ lors de l'affichage
	type = new Array();		//Type de validation à faire. [0,num,alpha,mois,jour,an,email,liste,postal,aut_pays]
	min = new Array();		//Minimum de caractère
	max = new Array();		//Maximum de caractère
	must=new Array();       //Si le champ est obligatoire
	
	txterreur= new String();//Chaine du code html pour la liste d'erreur
	txtenvoi=new String();	//Chaine du code du email
	
	
	/*--------------------------------------------------------------
	//// Partie à modifier
	--------------------------------------------------------------*/
	
	/*
	Paramètres :
		1- Nom du champ dans les affichages
		2- Type de validation a effectuer [0(aucune), alpha,num,email,mois,jour,an,liste, postal]
		3- Champs obligatoire (true = obligatoire, false = facultatif)
		4- Nb de caractère minimum (null si aucun)
		5- Nb de caractère maximum (null si aucun)
	*/


	init_array("First Name","alpha",true, null, null);
	init_array("Last Name","alpha",true, null, null);
	init_array("Area Code","num",true, 3, 3);
	init_array("Telephone 1","num",true, 3, 3);
	init_array("Telephone 2","num",true, 4, 4);
	init_array("E-mail","email",true, null, null);
	init_array("Event Name","0",false, null, null);
	init_array("Arrival Month","mois",true, null, null);
	init_array("Arrival Day","jour",true, null, null);
	init_array("Arrival Year","an",true, null, null);
	init_array("Departure Month","mois",true, null, null);
	init_array("Departure Day","jour",true, null, null);
	init_array("Departure Year","an",true, null, null);
	init_array("People (Total #)","num",true, null, null);
	init_array("Room Setup","0",false, null, null);
	init_array("Simple Room","num",true, null, null);
	init_array("Double Room","num",true, null, null);
	init_array("Triple Room","num",true, null, null);
	init_array("Quadruple Room","num",true, null, null);
	
	init_array("Breakfast - same room","0",false, null, null);
	init_array("Breakfast - Restaurant","0",false, null, null);
	init_array("Morning Break","0",false, null, null);
	init_array("Lunch - same room","0",false, null, null);
	init_array("Lunch - restaurant","0",false, null, null);
	init_array("Afternoon Break","0",false, null, null);
	init_array("Dinner","0",false, null, null);
	init_array("Reception / Banquet","0",false, null, null);
	init_array("Overhead Projector","0",false, null, null);
	init_array("Television","0",false, null, null);
	init_array("VHS","0",false, null, null);
	init_array("Screen","0",false, null, null);
	init_array("Flipchart","0",false, null, null);
	
	init_array("Company","0",true, null, null);
	init_array("Address ","0",true, null, null);
	init_array("City","alpha",true, null, null);
	init_array("State/Province","alpha",true, null, null);
	init_array("Country","0",true, null, null);
	init_array("Other Country","aut_pays",false, null, null);
	init_array("Postal / ZIP code","postal",true, null, null);
	init_array("Comments","0",false, null, null);
	
	//---------------------------------------------------------------------------
	
	for (var i = 0; i < document.formul.length-2; i++) {
		erreur[i]="0";												//Initialise le code d'erreur du champ
		f_name[i]=document.formul.elements[i].name;					//Ajoute le nom du champ
		t_input[i]=document.formul.elements[i].type;				//Ajout du type du champ
		
		//Test si le champ est une liste pour ajouter la valeur du champ
		if (document.formul.elements[i].type=="select-one")
			content[i]=document.formul.elements[i].selectedIndex;
		else if (document.formul.elements[i].type=="checkbox")
			content[i]=document.formul.elements[i].checked;
		else
			content[i]=document.formul.elements[i].value;
	}
}


/*  Fonction : forme_email()   
	params: void   
	retour: void  
	desc: Formation de la chaine de code du email*/
function forme_email(){
	
	txtenvoi="mailto:events@go-montreal.com?subject=Event_Planning&body=";
	for (var i = 0;i<f_name.length;i++){
		if(t_input[i]=="checkbox"){
			if(content[i]==true)
				txtenvoi+="Option : "+s_name[i]+"   ";
		}
		else if(t_input[i]=="select-one")
			txtenvoi+=s_name[i]+" : "+document.formul.elements[i].options[content[i]].text+"         "; //Ajout du nom et de la valeur de chaque champ
		else		
			txtenvoi+=s_name[i]+" : "+content[i]+"            ";										//Ajout du nom et de la valeur de chaque champ
	}
}


/*  Fonction : envoyer()  
	params: void   
	retour: void  
	desc: Envoi du email*/
function envoyer(){
	location.href=txtenvoi;		//Simulation d'un lien mailto
}


/*  Fonction : valide()  
	params: void   
	retour: void  
	desc: Validation des champs*/
function valide(){
	var sejour=true				//Flag si les champs requis pour la vérification des dates sont valides
	val_sejour=true				//Flag si l'intervale entre les 2 dates est positives.
	amois=new Array();			//Tableau des 2 mois
	ajour=new Array();			//Tableau des 2 jours
	aan=new Array();			//Tableau des 2 années
	for (var i = 0; i<f_name.length;i++){
		
		//Validation des champs vides
		if (must[i] & type[i]!="liste" & type[i]!="0"){
			if (!valide_vide(content[i]))
				erreur[i]="vide";
		}
		
		if (erreur[i]!="vide"){
			
			switch(type[i]){
				default:							//Validation numérique
					if(!valide_num(content[i]))
						erreur[i]="nvalid";
					break;

				case "0":
					break;
				
				case "alpha":						//Validation alphabétique
					if(!valide_alpha(content[i]))
						erreur[i]="nvalid";
					break;

				case "liste":						//Validation de choix de liste
					if(!valide_liste(content[i]))
						erreur[i]="choix";
					break;

				case "email":						//Validation du email
					if(!valide_email(content[i]))
						erreur[i]="nvalid";
					break;

				case "postal":						//Validation de code Postal	
					if(!valide_postal(content[i],content[i-2]))
						erreur[i]="nvalid";
					break;
					
				case "aut_pays":					//Validation du pays si Autre est sélectionner dans la liste
					if(content[i-1]==2){
						if (!valide_vide(content[i]))
							erreur[i]="vide";
						else if(!valide_alpha(content[i]))
							erreur[i]="nvalid";
					}
					
				
			}

			/*
			if(type[i]=="num" | type[i]=="mois" | type[i]=="an" |type[i]=="jour"){
				if(!valide_num(content[i]))
					erreur[i]="nvalid";
			}
			
			
			if(type[i]=="alpha"){
				if(!valide_alpha(content[i]))
					erreur[i]="nvalid";
			}
			
			
			if(type[i]=="liste"){
				if(!valide_liste(content[i]))
					erreur[i]="choix";
			}
			
			
			if (type[i]=="email"){
				if(!valide_email(content[i]))
					erreur[i]="nvalid";
			}
			
					
			if (type[i]=="postal"){
				if(!valide_postal(content[i],content[i-1],3))
					erreur[i]="nvalid";
			}*/

		}
		
		if (erreur[i]== "0"){
			
			//Validation du nb minimum de caractères requis
			if(min[i]!=null){
				if(!valide_min(content[i],min[i]))
					erreur[i]="min";
			}
			
			//Validation du nombre maximum de caractères requis
			if(max[i]!=null){
				if(!valide_max(content[i],max[i]))
					erreur[i]="max";
			}
			
			//Validation du mois
			if(type[i]=="mois"){
				amois.push(content[i]);
				if(!valide_mois(content[i]))
					erreur[i]="minv";
			}

			//Validation du jour
			if(type[i]=="jour"){
				ajour.push(content[i]);
				if(!valide_jour(content[i]))
					erreur[i]="jinv";
			}

			//Validation de l'année
			if(type[i]=="an"){
				aan.push(content[i]);
				if(!valide_an(content[i]))
					erreur[i]="ainv";
			}

		}

	}
	for (var i = 0;i<f_name.length;i++){
		
		//Test si la validation de l'intervalles des dates est possible
		if(type[i]=="mois" | type[i]=="jour" | type[i]=="an"){
			if (erreur[i] !="0")
				sejour = false;
		}
	}

	//Test si l'intervalle entre les 2 dates est positives
	if (sejour==true){
		if(!valide_sejour(amois[0],ajour[0],aan[0],amois[1],ajour[1],aan[1]))
			val_sejour=false;
	}

}


/*  Fonction : valide_sejour(mois1,jour1,an1,mois2,jour2,an2)   
	params: void   
	retour: mois1,jour1,an1,mois2,jour2,an2  : Datte d'arrivée et de départ
	desc: Validation que la date de départ est plus avancée que la date d'arrivée*/
function valide_sejour(mois1,jour1,an1,mois2,jour2,an2){
	
	date1=new Date(mois1,jour1,an1);	//Date d'arrivée
	date2=new Date(mois2,jour2,an2);	//Date de départ
	if (date2>=date1)
		return true;
}


/*  Fonction : valide_mois(texte)   
	params: texte   
	retour: boolean  
	desc: Validation du mois*/
function valide_mois(texte){
	if (texte<=12)
		return true;
}


/*  Fonction : valide_jour(texte)   
	params: texte   
	retour: boolean  
	desc: Validation du jour*/
function valide_jour(texte){
	if (texte<=31)
		return true;	
}


/*  Fonction : valide_an(texte)   
	params: texte   
	retour: boolean  
	desc: Validation de l'année par rapport à l'année courante*/
function valide_an(texte){	
	if (texte>=madate.getYear())
		return true;		
}


/*  Fonction : valide_liste(val)   
	params: val : valeur du choix   
	retour: boolean  
	desc: Validation du choix dans la liste déroulante*/
function valide_liste(val){
	
	if (val!=0)
		return true;	
}


/*  Fonction : valide_postal(texte, state, sep)   
	params: texte = chaine de caractère à valider
			country = index du choix dans la liste déroulante
			
	retour: boolean  
	desc: Validation du code postal*/
function valide_postal(texte, country){
	postal=true;
	
	//Test si l'état est américains ou canadien
	if (country==1){
	
		//---------US-----------------
		if(texte.length==5){
			if(!valide_num(texte))		//Invalide si il n.est pas composé uniquement de chiffre
				postal=false;
		}
		else
			postal=false;				//Invalide si il n'a pas 5 chiffres
	}

		//-------Canada--------------
	if(country==0){
		if(texte.length == 6){
			for (var i=0; i<texte.length;i++){
				caract=texte.charAt(i);
				if (i % 2 == 0) {
					if (caract >= "0" & caract <="9")	//Invalide si les caractères impair ne sont pas des lettres
						postal=false;
				}
				else{
					if (caract < "0" | caract >"9")	//Invalide si les caractères pairs sont invalides
						postal=false;
				}
			}
		}
		else
			postal=false;								//Invalide si il n'est pas composé de 6 caractère
	}
	
	if(postal==true)
		return true;
	
}


/*  Fonction : valide_min(texte, taille)   
	params: texte = chaine de caractère à tester
			taille = nb minimal de caractère  
	retour: boolean  
	desc: Validation du nb minimal de caractères requis*/
function valide_min(texte,taille){
	if (texte.length >= taille)
		return true;
}


/*  Fonction : valide_mois(texte, taille)   
	params: texte = chaine de caractère à tester
			taille = nb maximal de caractère 
	retour: boolean  
	desc: Validation du nb maximal de caractères requis*/
function valide_max(texte,taille){
	if (texte.length <= taille)
		return true;
}


/*  Fonction : valide_email(texte)   
	params: texte   
	retour: boolean  
	desc: Validation de l'adresse électronique*/
function valide_email(texte){
	var i = 1;
    
    // trouver le @
    while ((i < texte.length) && (texte.charAt(i) != "@"))
    { i++
    }

    if ((i >= texte.length) || (texte.charAt(i) != "@")) return false;  //Invalide s'il n'y a pas de @ ou s'il est le premier caractère
    else i += 2;

    // trouver le . après le @
    while ((i < texte.length) && (texte.charAt(i) != "."))				//Invalide s'il n'y a pas de "." après le @, si le "." des coller au @
    { i++
    }

    // . ne doit pas être le dernier caractère
    if ((i >= texte.length - 1) || (texte.charAt(i) != ".")) return false;//Invalide si le point est à la fin de la chaine
    else return true;
}


/*  Fonction : valide_vide(texte)   
	params: texte   
	retour: boolean  
	desc: Validation des champs vide*/
function valide_vide(texte){
	if (texte != "")
		return true;
}


/*  Fonction : valide_num(texte)   
	params: texte   
	retour: boolean  
	desc: Validation d'entrée numérique*/
function valide_num(texte){
	var mot_bon=true;
	for (var j = 0 ; j < texte.length ; j++){
		ch_bon=true;
		caract = texte.charAt(j);
		if (caract < "0" | caract >"9")
			ch_bon=false;
		if (ch_bon == false){
			mot_bon=false;
			return false;
		}
	}
	return true;
}


/*  Fonction : valide_alpha(texte)   
	params: texte   
	retour: boolean  
	desc: Validation d'entrée alphabétique*/
function valide_alpha(texte){
	mot_bon=true;
	for (var j = 0 ; j < texte.length ; j++){
		ch_bon=true;
		caract = texte.charAt(j);
		if (caract >= "0" & caract <="9")
			ch_bon=false;
		if (ch_bon == false){
			mot_bon=false;
			return false;
		}
	}
	return true;
}


/*  Fonction : affiche_erreur()   
	params: void   
	retour: void  
	desc: Affichage des erreurs*/
function affiche_erreur(){
	affiche=false;
	
	txterreur+='<HEAD><TITLE>Validation errors</TITLE></HEAD><BODY bgcolor="#ffeecc"><font size="3"  color="#000066" face="Verdana, Arial, Helvetica, sans-serif">';
	
	for (var i = 0;i<f_name.length;i++){
		if(erreur[i]=="vide")
			affiche=true;
	}

	if (affiche==true){
		txterreur+="- These field must be completed :<blockquote><font size=2>";
		for (var i = 0;i<f_name.length;i++){
			if(erreur[i]=="vide")
				txterreur+=s_name[i]+'<br>';
		}
		txterreur+="</font></blockquote>";			
	}
	
	affiche=false;
	for (var i = 0;i<f_name.length;i++){
		if(erreur[i]=="nvalid")
			affiche=true;
	}

	if (affiche==true){
		txterreur+="- These field are invalid :<blockquote><font size=2>";
		for (var i = 0;i<f_name.length;i++){
			if(erreur[i]=="nvalid")
				txterreur+=s_name[i]+'<br>';
		}
		txterreur+="</font></blockquote><br><br>";			
	}

	for (var i = 0;i<f_name.length;i++){
		
		switch(erreur[i]){
			case "minv":
				txterreur+="<font size=2>- <U>"+s_name[i]+"</U> must be between 1 and 12</font><br>";
				break;
			
			case "jinv":
				txterreur+="<font size=2>- <U>"+s_name[i]+"</U> must be between 1 and 31</font><br>";
				break;

			case "ainv":
				txterreur+="<font size=2>- <U>"+s_name[i]+"</U> must be higher or equal to "+madate.getYear()+"</font><br>";
				break;

			case "min":
				txterreur+="<font size=2>- <U>"+s_name[i]+"</U> field must have at least "+min[i]+" characters</font><br>";
				break;

			case "max":
				txterreur+="<font size=2>- <U>"+s_name[i]+"</U> field must have a maximum of "+max[i]+" characters</font><br>";
				break;

			case "choix":
				txterreur+="<font size=2>- You have to do a choice for the <U>"+s_name[i]+" field</U></font><br>";
				break;
		}
	}
	if(!val_sejour){
		txterreur+="<font size=2>- Departure date must be higher than Arrival date</font><br>";
	}
	
	txterreur+='<form name="form1"><input type="button" name="Fermer" value="Close this Window" onClick="window.close();"></form>';
	txterreur+='</font></body>';

	msgWindow=window.open("","displayWindow","menubar=no scrollbars=yes width=520"); 
	msgWindow.document.write(txterreur);
}
function popup(){
	var popup=window.open("","fenetrePop","width=400,height=150,left="+((screen.width-300)/2)+",top="+((screen.height-300)/2));
	popup.document.write("<html><head><title> Tankyou!</title>");
	popup.document.write("</head><body>");
	popup.document.write("<center><img src='image/LOGO_west.gif'></center>")
	popup.document.write("<center><b>Thank-you for your request. Some one will contact you within 24 hours.</b></center>");
	popup.document.write("</body></html>");
	popup.document.close();
}
