/**
 * Fichier de script pour le formulaire d'application en ligne
 * ---
 * Ce fichier repose en grande partie sur les outils fournis par le framework
 * ExtJS 2.0
 * ---
 * @version 1.00 2008-08-01
 * @author Cédric Talbot
 */

// Construction des objets requis

// Fonction de validation d'un numéro de téléphone
var phoneNumValidator = function(value) {
	// Cette fonction utilise la librairie cid-utils
	if (cid.utils.validation.numTel(value)) {
		return true;
	} else {
		return 'Le numéro de téléphone fourni est invalide';
	}
};

// Fonction de validation d'un code postal
var codePostalValidator = function(value) {
	// Cette fonction utilise la librairie cid-utils
	if (cid.utils.validation.codePostal(value)) {
		return true;
	} else {
		return 'Le code postal doit être au format A9A9A9, sans espace';
	}
};

// Items de la section 1
var section1 = [
	{
		fieldLabel:'Prénom',
		name:'prenom',
		grow:true,
		growMin:160,
		width:160
	},
	{
		fieldLabel:'Nom',
		name:'nom',
		grow:true,
		growMin:160,
		width:160
	},
	{
		fieldLabel:'Adresse (# civique, rue, appartement)',
		name:'adresse',
		grow:true,
		growMin:145,
		width:145
	},
	{
		fieldLabel:'Adresse (ville)',
		name:'ville',
		grow:true,
		growMin:145,
		width:145
	},
	{
		fieldLabel:'Adresse (code postal)',
		name:'cp',
		maxLength:6,
		minLength:6,
		maxLengthText:'Le code postal doit être au format A9A9A9, sans espace',
		minLengthText:'Le code postal doit être au format A9A9A9, sans espace',
		validator:codePostalValidator,
		listeners:{
			'blur':{
				fn:function(thisTxtFld) {
					if (thisTxtFld.isValid())
						thisTxtFld.setValue(Ext.util.Format.uppercase(thisTxtFld.getValue()));
				}
			}
		}
	},
	{
		fieldLabel:'Adresse électronique',
		name:'email',
		minLength:5,
		allowBlank:true,
		vtype:'email',
		width:145,
		growMin:145,
		grow:true
	},
	{
		fieldLabel:'Téléphone résidentiel',
		name:'tel_maison',
		maxLength:15,
		maxLengthText:'Le numéro doit être composé au plus de {0} chiffres.',
		minLength:10,
		minLengthText:'Le numéro doit être composé au moins de {0} chiffres.',
		validator:phoneNumValidator,
		allowBlank:true,
		listeners:{
			'blur':{
				fn:function(thisTxtFld) {
					if (thisTxtFld.isValid())
						thisTxtFld.setValue(cid.utils.format.numTel(thisTxtFld.getValue()));
				}
			}
		}
	},
	{
		fieldLabel:'Téléphone portable',
		name:'tel_portable',
		maxLength:15,
		maxLengthText:'Le numéro doit être composé au plus de {0} chiffres.',
		minLength:10,
		minLengthText:'Le numéro doit être composé au moins de {0} chiffres.',
		validator:phoneNumValidator,
		allowBlank:true,
		listeners:{
			'blur':{
				fn:function(thisTxtFld) {
					if (thisTxtFld.isValid())
						thisTxtFld.setValue(cid.utils.format.numTel(thisTxtFld.getValue()));
				}
			}
		}
	},
	{
		fieldLabel:'Téléavertisseur',
		name:'tel_tc',
		maxLength:15,
		maxLengthText:'Le numéro doit être composé au plus de {0} chiffres.',
		minLength:10,
		minLengthText:'Le numéro doit être composé au moins de {0} chiffres.',
		validator:phoneNumValidator,
		allowBlank:true,
		listeners:{
			'blur':{
				fn:function(thisTxtFld) {
					if (thisTxtFld.isValid())
						thisTxtFld.setValue(cid.utils.format.numTel(thisTxtFld.getValue()));
				}
			}
		}
	},
	{
		fieldLabel:'Téléphone autre',
		name:'tel_autre',
		maxLength:15,
		maxLengthText:'Le numéro doit être composé au plus de {0} chiffres.',
		minLength:10,
		minLengthText:'Le numéro doit être composé au moins de {0} chiffres.',
		validator:phoneNumValidator,
		allowBlank:true,
		listeners:{
			'blur':{
				fn:function(thisTxtFld) {
					if (thisTxtFld.isValid())
						thisTxtFld.setValue(cid.utils.format.numTel(thisTxtFld.getValue()));
				}
			}
		}
	}
];

// Items de la section 2
var section2 = new Array();

// Questions dans cette section.
var questions = new Array(
	"Pouvez-vous parler et comprendre aisément l'anglais et le français, autant à l'oral qu'à l'écrit ?",
	"Avez-vous 18 ans ou plus ?",
	"Possédez-vous un D.E.S. (diplôme d'études secondaires) ou son équivalent ?",
	"Êtes-vous actuellement aux études ?",
	"Pouvez-vous travailler dans un environnement hautement informatisé ?",
	"Pouvez-vous taper à un rythme de 35 mots/minute ou plus ?",
	"Pouvez-vous distinguer les différentes couleurs",
	"Avez-vous une bonne audition ?",
	"Vous est-il possible de travailler en situation de stress prolongée ?",
	"Arrivez-vous à vous concentrer dans un environnement bruyant ?"
);

// Tableau des explications, si nécessaires.
var explications = new Array(
	"Le Groupe Alerte Santé dessert tout le territoire de la montérégie, il est donc nécessaire d'assurer un service adéquat, autant "
	+"à la communauté francophone qu'à la communauté anglophone.  Nous recherchons des candidats suffisamment habile en anglais pour "
	+"aider et supporter des appelants en situation d'urgence.",
	"La <a alt=\"NAED\" title=\"Organisme américain spécialisé dans la répartition d'urgence\" href=\"http://www.emergencydispatch.org\">National Academies of Emergency Dispatch (NAED)</a> exige que ses membres soient âgés d'au moins 18 ans pour être reconnus comme RMU.",
	"Le Groupe Alerte Santé exige l'équivalent d'un D.E.S. : A.E.S. ; D.E.P. ou autre équivalence.",
	"<span class='emphase'>Si oui, veuillez fournir plus de détails dans la section commentaires</span>.",
	"Les RMU doivent composer avec des outils informatisés adaptés à leurs besoins.  Ces logiciels ne sont pas connus du grand public,    mais il est très souhaitable d'être à l'aise avec le travail sur ordinateur.",
	"Les RMU doivent taper des informations à mesure que l'appelant parle et explique la raison de son appel, la rapidité au clavier    est essentielle.",
	"",
	"",
	"",
	""
);

// Cycle les éléments décrits ci-haut pour construire chaque élément du questionnaire
for (var q = 0; q < questions.length; q++) {
	section2.push({
		title:(q+1).toString()+'- '+questions[q],
		layout:'table',
		layoutConfig:{
			columns:3
		},
		items:[
			{
				html:explications[q],
				cellCls:'explication-type1'
			},
			{
				xtype:'radio',
				name:'R'+q,
				boxLabel:'Oui',
				inputValue:'1',
				cellCls:'reponse'
			},
			{
				xtype:'radio',
				name:'R'+q,
				boxLabel:'Non',
				inputValue:'0',
				cellCls:'reponse',
				checked:true
			}
		]
	});
}

// Items de la section 3
var section3 = new Array();

// Ajoute les éléments
section3.push({
	title:"1- Quel type d'emploi recherchez-vous ?",
	layout:'table',
	layoutConfig:{
		columns:4
	},
	items:[
		{
			html:"Nous recherchons des candidats qui pourront combler notre liste de rappel.  Le Groupe Alerte Santé ne peut "
			     +"garantir un minimum d'heures / semaines suite à l'embauche.  Une fois la probation terminée, les RMU "
				 +"définissent leurs disponibilités de façon mensuelle.  Il n'est pas rare que les nouveaux RMU comblent leurs "
				 +"40 heures / semaine dès leur arrivée dans l'équipe.  <u>Vous pouvez cocher plus d'un choix</u>.",
			colspan:4,
			cellCls:'explication-type2'
		},
		{
			xtype:'checkbox',
			name:'tempsPlein',
			boxLabel:'Temps plein',
			cellCls:'reponse'
		},
		{
			xtype:'checkbox',
			name:'tempsPartiel',
			boxLabel:'Temps partiel',
			cellCls:'reponse'
		},
		{
			xtype:'checkbox',
			name:'permanent',
			boxLabel:'Permanent',
			cellCls:'reponse'
		},
		{
			xtype:'checkbox',
			name:'temporaire',
			boxLabel:'Temporaire',
			cellCls:'reponse'
		}
	]
});

section3.push({
	title:"2- Êtes-vous disponible pour une formation de 7 semaines à temps complet ?",
	layout:'table',
	layoutConfig:{
		columns:3
	},
	items:[
		{
			html:"Le Groupe Alerte Santé offre une formation rémunérée.  La formation couvre tous les aspects et vous permet "
			     +"d'obtenir toutes les certifications requises, vous devez cependant être présent durant toute la durée "
				 +"de la formation (7 semaines).",
			cellCls:'explication-type1'
		},
		{
			xtype:'radio',
			name:'dispoFormation',
			boxLabel:'Oui',
			inputValue:'1',
			cellCls:'reponse'
		},
		{
			xtype:'radio',
			name:'dispoFormation',
			boxLabel:'Non',
			inputValue:'0',
			cellCls:'reponse',
			checked:true
		}
	]
});

section3.push({
	title:"3- Pouvez-vous nous donner une pleine disponibilité durant votre période de probation de 480 heures (après les 7 semaines "
	      +"de formation) ?",
	layout:'table',
	layoutConfig:{
		columns:3
	},
	items:[
		{
			html:"Pendant la période de probation, vous devez être disponible du lundi au vendredi sur tous les quarts (jour, "
			     +"soir, nuit) et une fin de semaine sur deux.  Après cette période, votre disponibilité devra être définie "
			     +"sur une base mensuelle, en respectant la convention collective.",
			cellCls:'explication-type1'
		},
		{
			xtype:'radio',
			name:'dispoProbation',
			boxLabel:'Oui',
			inputValue:'1',
			cellCls:'reponse'
		},
		{
			xtype:'radio',
			name:'dispoProbation',
			boxLabel:'Non',
			inputValue:'0',
			cellCls:'reponse',
			checked:true
		}
	]
});

// Construit la section 4
var section4 = new Array();

section4.push({
	xtype:'textarea',
	name:'commentaires',
	fieldLabel:'Commentaires',
	grow:true,
	growMin:120,
	height:120,
	width:300
});

// Construit le FormPanel et ajoute les éléments
var demande = new Ext.form.FormPanel({
	title:'Application en ligne',
	defaults:{
		xtype:'fieldset',
		collapsible:true,
		collapsed:false,
		autoHeight:true,
		labelWidth:200
	},
	frame:true,
	bodyStyle:'padding:5px 15px 5px 15px;',
	items:[
		{
			title:'Section 1 - Identification',
			defaults:{
				xtype:'textfield',
				allowBlank:false,
				blankText:'Vous devez fournir ce renseignement',
				maxLength:50,
				maxLengthText:'Le nombre maximal de caractères est de {0}.',
				validationEvent:'blur'
			},
			items:section1
		},
		{
			title:'Section 2 - Exigences de base',
			items:section2
		},
		{
			title:'Section 3 - Informations complémentaires',
			items:section3
		},
		{
			title:'Section 4 - Soumission',
			items:section4
		}
	],
	buttons:[
		{
			text:'Soumettre',
			handler:function(thisBtn, event) {
				Ext.Msg.show({
					title:'Soumission de votre candidature.',
					msg:'Vous allez soumettre les données inscrites, voulez-vous procéder ?',
					icon:Ext.MessageBox.QUESTION,
					buttons:Ext.Msg.YESNO,
					fn:function(choix) {
						if (choix == 'yes') {
							// Récupère le formulaire de demande
							var dem = thisBtn.findParentByType('form');
							
							// Soumet la demande
							dem.form.submit({
								url:'../demandes/index.php/embauche/save',
								method:'POST',
								waitTitle:'Transmission des données...',
								waitMsg:'Nous traitons votre candidature, veuillez patienter.<br /><br />Si le délai de traitement dépasse 30 secondes, communiquez avec nous au 450-670-0911.',
								timeout:15000,
								success:function(form, action) {
									// Récupère le ID de candidature
									var id = action.result.id;
									
									// Construit la fenêtre de confirmation + envoi de CV									
									var cv_window = new Ext.Window({
										title:'Fin du processus',
										id:'cv-form-window',
										width:500,
										height:400,
										modal:true,
										resizable:false,
										layout:'border',
										items:[
											{
												title:'Candidature complétée !',
												region:'north',
												bodyStyle:'padding:5px',
												cls:'emphase',
												html:'<p>Vous avez complété le processus de demande d\'emploi en ligne.</p><br />'
													+'<p><span class="emphase">Votre numéro de confirmation est <strong><u>'+ id +'</u></strong>.</span></p><br />'
													+'<p>Veuillez noter que seuls les candidats retenus seront contactés.</p><br />'
													+'<p>Si vous désirez obtenir d\'autres informations, communiquez avec nous au 450-670-0911 et ayez votre numéro de confirmation.</p>'
											},
											{
												title:'Envoyez-nous votre CV',
												region:'center',
												bodyStyle:'padding:5px',
												items:[
													{
														xtype:'form',
														fileUpload:true,
														labelWidth:200,
														items:[
															{
																xtype:'hidden',
																name:'MAX_FILE_SIZE',
																value:'1000000'
															},
															{
																xtype:'textfield',
																inputType:'file',
																fieldLabel:'Joindre votre C.V., le fichier ne doit pas dépasser 1 Méga octet.',
																name:'fichier_cv',
																validationEvent:'blur',
																allowBlank:false,
																blankText:'Vous devez sélectionner le fichier qui correspond à votre CV sur votre disque dur en cliquant sur le bouton PARCOURIR.'
															}
														],
														buttons:[
															{
																text:'Envoyer le CV',
																handler:function(thisBtn, event) {
																	var cv_form = thisBtn.findParentByType('form');
																	cv_form.getForm().submit({
																		url:'../demandes/index.php/embauche/save_cv/'+id,
																		method:'POST',
																		success:function(form, action) {
																			Ext.Msg.alert("Transmission de CV","Votre CV a été ajouté à votre dossier de candidature.");
																		},
																		failure:function(form, action) {
																			if (action.failureType == Ext.form.Action.CLIENT_INVALID)
																				var errorTxt = "Il faut fournir un nom de fichier pour le transfert.";
																			if (action.failureType == Ext.form.Action.SERVER_INVALID)
																				var errorTxt = action.result.errors.msg;
																			if (action.failureType == Ext.form.Action.CONNECT_FAILURE)
																				var errorTxt = "Le serveur refuse la connexion, veuillez transférer votre cv au <u>emploi@alerte.cc</u> pour compléter votre demande d'emploi <strong>en prenant soin d'indiquer votre numéro de confirmation : "+id+"</strong>.";
																			
																			Ext.Msg.show({
																				title:"Erreur durant Transmission de CV",
																				msg:errorTxt,
																				icon:Ext.Msg.ERROR,
																				buttons:Ext.Msg.OK
																			});
																		}
																	})
																}
															}
														]
													}
												],
												buttons:[{
													text:'Terminer',
													handler:function(thisBtn, event) {
														window.top.location="http://www.alerte.cc/emploi/";
													}
												}]
											}
										]
									});
									
									// Montre la fenêtre
									cv_window.show();
								},
								failure:function(form, action) {
									if (action.failureType == Ext.form.Action.CLIENT_INVALID)
										var errorTxt = "Le formulaire est invalide, veuillez corriger les champs soulignés en rouge et réessayer.";
									if (action.failureType == Ext.form.Action.CONNECT_FAILURE)
										var errorTxt = "Le serveur refuse la connexion, veuillez communiquer avec nous au 450-670-0911 pour compléter votre demande d'emploi.";
									
									Ext.Msg.show({
										title:'Erreur de soumission',
										msg:errorTxt,
										icon:Ext.Msg.ERROR,
										buttons:Ext.Msg.OK
									});
								}
							});
						}
					}
				});
			}
		}
	]
});

// Au chargement complet du DOM, la fonction onReady() s'exécute
Ext.onReady(function() {
	// Initialise l'engin de quicktips
	Ext.QuickTips.init();
	
	// Positionne le message d'erreur de validation pour tous les éléments
	Ext.form.Field.prototype.msgTarget = 'side';
	
	// Affiche le formulaire
	demande.render('form_container');
});