
var checkSexe = function () {
	if (!$('sexe1')) {
		return;
	}
	
	if ($('sexe1').checked) {
		$('nom_jeune_fille').removeProperty('disabled');
	} else {
		$('nom_jeune_fille').setProperty('disabled','disabled');
	}
}

window.addEvent('load', function (event) {
	document.getElements('input[name=sexe]').addEvent('change', checkSexe);
	checkSexe();
});



/* Controle chanp date retraite */
/*
var controle_retraite = function () {
	if ($('doit_cotiser')) {
		$('doit_cotiser').addEvent('click', function (event) {
			event = new Event(event);
			if (this.checked) {
				if ($('id_position') && $('id_position').value.toInt() != 4) {
					$('infos-pro').getElements('.obligatoire').setStyle('display', 'inline');
				}
				$('infos-sniim').getElements('.obligatoire').setStyle('display', 'inline');
			} else {
				$('infos-pro').getElements('.obligatoire').setStyle('display', 'none');
				$('infos-sniim').getElements('.obligatoire').setStyle('display', 'none');
			}
		});
	}
	
	if ($('date_depart_retraite')) {
		// Définis l'affichage du champ date de retraite en fonction de la valeur du champ "position""
		var definir_affichage_reatraite = function () {
			if ($('id_position') && $('id_position').value.toInt() == 4) {
				$('div_date_depart_retraite').setStyle('display','block');
				$('infos-pro').getElements('.obligatoire').setStyle('display', 'none');
				if ($('contact-by')) {
					$('contact-by').setStyle('display', 'none');
				}
			} else {
				$('date_depart_retraite').setProperty('value','');
				$('div_date_depart_retraite').setStyle('display','none');
				if (!$('doit_cotiser') || $('doit_cotiser').checked) {
					$('infos-pro').getElements('.obligatoire').setStyle('display', 'inline');
				}
				if ($('contact-by')) {
					$('contact-by').setStyle('display', 'block');
				}
			}
		}
		
		// Définis l'évènement "onchange" sur le champ "position"
		if ($('id_position') && $('div_date_depart_retraite')) {
			$('id_position').addEvent('change', definir_affichage_reatraite);
		}
		
		// Effectue un premier controle sur le champ
		definir_affichage_reatraite();
	}
	
	
	if ($('participer_accompagnement_carriere')) {
		if (!$('participer_accompagnement_carriere').checked) {
			$('essaimage').setStyle('display', 'none');
		}
		
		$('participer_accompagnement_carriere').addEvent('change', function (event) {
			if (this.checked) {
				$('essaimage').setStyle('display', 'block');
			} else {
				$('essaimage').setStyle('display', 'none');
			}
		});
	}
	
	if ($('contact_ce')) {
		if (!$('contact_ce').checked) {
			$('choix_contact_ce').setStyle('display', 'none');
		}
		
		$('contact_ce').addEvent('click', function (event) {
			if (this.checked) {
				$('choix_contact_ce').setStyle('display', 'block');
			} else {
				$('choix_contact_ce').setStyle('display', 'none');
			}
		});
	}
	
}
window.addEvent('domready', controle_retraite);
*/

window.addEvent('domready', function () {
	if ($('form-inscription')) {
		var formInscription = new controleFormulaire($('form-inscription'));
	}
});


var controleFormulaire = new Class({
	
	initialize	: function (form) {
		var calendarEntreeEchelon;
		
		this.form = $(form);
		if (!this.form) {
			return;
		}
		
		this._relations = null;
		this._entites = null;
		this._corps = null;
		this._grades = null;
		
		
		var inputText = this.form.getElements('input[type=text]');
		if (inputText.length) {
			inputText.addEvent('change', this.checkInputText.bind(this));
		}
		
		this.bound = {
			'onSubmit'			: this._onSubmit.bind(this),
			'checkEntreeEchelon': this.checkEntreeEchelon.bind(this),
			'startAlertOnUnload': this._startAlertOnUnload.bind(this)
		};
		
		this.form.addEvent('submit', this.bound.onSubmit);
		
		this._allInputs = this.form.getElements('input').extend(this.form.getElements('select'));
		if (this._allInputs.length) {
			this._allInputs.addEvent('change', this.bound.startAlertOnUnload);
		}
		
		if ($('id_position')) {
			$('id_position').addEvent('change', this.checkPosition.bind(this));
		}
		
		if ($('id_affectation')) {
			$('id_affectation').addEvent('change', this.checkAffectation.bind(this));
		}
		
		if ($('id_corps')) {
			$('id_corps').addEvent('change', this.checkCorps.bind(this));
		}
		
		if ($('id_grade')) {
			$('id_grade').addEvent('change', this.checkGrade.bind(this));
		}
		
		if ($('echelon')) {
			$('echelon').addEvent('change', this.checkEchelon.bind(this));
		}
		
		if ($('date_entree_echelon')) {
			$('date_entree_echelon').getElements('select').addEvent('change', this.bound.checkEntreeEchelon);
			/*calendarEntreeEchelon = $('date_entree_echelon').retrieve('calendar');
			if (calendarEntreeEchelon) {
				calendarEntreeEchelon.addEvent('clickdate', this.bound.checkEntreeEchelon);
			}*/
		}
		
		if ($('participer_accompagnement_carriere')) {
			$('participer_accompagnement_carriere').addEvent('click', this.checkEssaimage.bind(this));
			this.checkEssaimage();
		}
		
		if ($('contact_ce')) {
			$('choix_contact_ce').setStyle('display', $('contact_ce').checked?'block':'none');
			$('contact_ce').addEvent('click', function (event) {
				$('choix_contact_ce').setStyle('display', this.checked?'block':'none');
			});
		}
		
		if ($('id_departement_pro') && $('ville_pro') && $('code_postal_pro')) {
			var adressPro = new autoCompleteAddress({
				elCity : $('ville_pro'),
				elCode : $('code_postal_pro'),
				elDepartement : $('id_departement_pro'),
				url : '/actions/other/autocomplete-address.php'
			});
		}
		
		if ($('id_departement_perso') && $('ville_perso') && $('code_postal_perso')) {
			var adressPerso = new autoCompleteAddress({
				elCity : $('ville_perso'),
				elCode : $('code_postal_perso'),
				elDepartement : $('id_departement_perso'),
				url : '/actions/other/autocomplete-address.php'
			});
		}
		
		if ($('id_departement_pro')) {
			$('id_departement_pro').addEvent('change', this.checkDepartement.bind(this));
		}
		
		if ($('id_departement_perso')) {
			$('id_departement_perso').addEvent('change', this.checkDepartement.bind(this));
		}
		
		
		this._morphDisposition();
		
		this._preloadDatas();
	},
	
	
	checkInputText : function (event) {
		event = new Event(event);
		var el = $(event.target);
		if (el && el.getAttribute('maxlength')) {
			var maxChars = el.getAttribute('maxlength').toInt();
			
			if (maxChars && maxChars < el.value.length) {
				alert('Ce champ n\'accepte que '+maxChars+' caractères');
			}
			
		}
	},
	
	
	_onSubmit : function (event) {
		if (!this.checkEntreeEchelon(event)) {
			event.stop();
			return;
		}
		
		window.onbeforeunload = function () {};
	},

	
	_startAlertOnUnload : function (event) {
		this._allInputs.removeEvent('change', this.bound.startAlertOnUnload);
		
		window.onbeforeunload = function (e) {
			return 'Les modifications apportées ne seront pas enregistrées.';
		};
	},
	
	
	checkDepartement : function (event)
	{
		if (event.target.get('id') == 'id_departement_perso') {
			if ($('id_departement_pro') && (!$('div-disabled-id_departement_pro') || $('div-disabled-id_departement_pro').getStyle('display') != 'none')) {
				return;
			}
		}
		
		var id = event.target.get('value');
		if (id > 0 && this._relationsDepartementGroupe[id]) {
			if ($('id_groupe_sniim')) {
				$('id_groupe_sniim').set('value', this._relationsDepartementGroupe[id]);
			}
		}
	},
	
	
	checkEssaimage : function (event) {
		var parentEl, el = $('participer_accompagnement_carriere');

		if (el) {
			parentEl = $('div-disabled-' + el.get('id'));
			
			//console.log(parentEl);
			if (parentEl && parentEl.getStyle('display') == 'none') {
				$('essaimage').setStyle('display', 'none');
				$('contact_sniim').checked = false;
			} else {
				$('essaimage').setStyle('display', el.checked?'block':'none');
			}
			
			if (event != undefined) {
				$('contact_sniim').checked = el.checked;
			}
		}
	},
	
	
	checkPosition : function (event)
	{
		if (this._configFields == null && this._requestPreload.running) {
			checkPosition.delay(1000, this, [event]);
			return;
		}
		
		var el = $('id_position');
		
		this.checkConfigFields();
	},
	
	/**
	 * Contrôle les champs obligatoires et activés/désactivés
	 * @return controleFormulaire
	 */
	checkConfigFields : function ()
	{
		var el, id, fieldsetsError, divsDisabled;
		
		el = $('id_position');
		id = el.get('value');
		
		this.form.getElements('label span.obligatoire').each(function (span) {
			if (!span.hasClass('permanent')) {
				span.setStyle('display', 'none');
			}
		});
		
		if (this._configFields['required'][id]) {
			//console.log(this._configFields['required'][id]);
			// on place les champs obligatoires
			$each(this._configFields['required'][id], function (fieldName, idPosition) {
				var labelEl, spanRequired, firstEl, elField = $(fieldName);
				
				labelEl = this.form.getElement('label[for='+(elField?elField.get('id'):fieldName)+']');
				if (!labelEl) {
					return;
				}
				spanRequired = labelEl.getElement('span.obligatoire');
				if (!spanRequired) {
					spanRequired = new Element('span').addClass('obligatoire')
						.set('text', '*');
					firstEl = labelEl.getFirst();
					if (firstEl) {
						spanRequired.inject(firstEl, 'before');
					} else {
						spanRequired.inject(labelEl, 'bottom');
					}
				} else {
					spanRequired.setStyle('display', 'inline');
				}
			}.bind(this));
			
			// suppression des fieldsets d'erreur si les champs ne sont plus obligatoire
			fieldsetsError = this.form.getElements('fieldset.form-erreur');
			if (fieldsetsError) {
				fieldsetsError.each(function (fieldset) {
					var spanRequired, legend;
					spanRequired = fieldset.getElement('span.obligatoire');
					if (!spanRequired || spanRequired.getStyle('display') == 'none') {
						legend = fieldset.getElement('legend');
						//console.log(legend.get('text').test('obligatoire'));
						if (legend.get('text').contains('obligatoire')) {
							legend.dispose();
							fieldset.getChildren('*').inject(fieldset, 'before');
							fieldset.dispose();
						}
					}
				});
			}
		}
		
		// désactivation des champs inutiles
		if (divsDisabled = this.form.getElements('div.div-disabled-element')) {
			divsDisabled.setStyle('display', 'block');
		}
		
		if (this._configFields['disabled'][id]) {
			this._configFields['disabled'][id].each(function (fieldName) {
				var labelEl, elField, el, next;
				var divDisabled = $('div-disabled-' + fieldName);
				
				if (!divDisabled) {
					elField = $(fieldName);
					divDisabled = new Element('div', {
						id: 'div-disabled-' + fieldName,
						'class': 'div-disabled-element',
						styles: {display: 'none'}
					});
					labelEl = this.form.getElement('label[for='+ (elField?elField.get('id'):fieldName) +']');
					if (labelEl) {
						divDisabled.inject(labelEl, 'before');
						el = labelEl;
						while (el) {
							next = el.getNext();
							divDisabled.adopt(el);
							if (el.get('tag') == 'span' && el.hasClass('clear')) {
								break;
							}
							el = next;
						}
					}
				} else {
					divDisabled.setStyle('display', 'none');
				}
			}.bind(this));
		}
		
		// contrôle l'affichage d'accompagnement de carrière
		this.checkEssaimage();
		
		return this;
	},
	
	
	checkAffectation : function (event)
	{
		if (this._relations == null && this._requestPreload.running) {
			checkAffectation.delay(1000, this, [event]);
			return;
		}
		
		var sa = $('id_structure_affectation');
		var value = sa.get('value');
		
		if (sa) {
			sa.set('html', '<option value="0">Choisissez votre structure d\'affectation</option>');
			var values = this._relations[$('id_affectation').get('value')];
			if (values) {
				values.each(
					function (id) {
						var option = new Element('option', {value: id});
						option.set('text', this._entites[id]);
						sa.adopt(option);
					}.bind(this)
				);
				
				if (values.contains(value)) {
					$('id_structure_affectation').set('value', value);
				}
			}
		}
	},
	
	
	checkCorps : function (event)
	{
		if (this._corps == null && this._requestPreload.running) {
			this.checkCorps.delay(1000, this, [event]);
			return;
		}
		
		var id_corps = $('id_corps').get('value');
		var gradeEl = $('id_grade');
		
		if (gradeEl) {
			var currentGrade = gradeEl.get('value');
			gradeEl.set('html', '<option value="0">Sélectionnez votre grade</option>')
				.set('value', '0');
			
			var ids = [];
			$each(this._grades, function (grade, key) {
				if (id_corps == grade['id_corps']) {
					var option = new Element('option', {value: grade['id']});
					option.set('text', grade['name']);
					gradeEl.adopt(option);
					ids.push(grade['id']);
				}
			});
			
			if (ids.contains(currentGrade)) {
				gradeEl.set('value', currentGrade);
			} else {
				this.checkGrade();
			}
		}
	},
	
	
	checkGrade : function (event)
	{
		if (this._grades == null && this._requestPreload.running) {
			this.checkGrade.delay(1000, this, [event]);
			return;
		}
		
		var id_grade = $('id_grade').get('value');
		var echelonEl = $('echelon');
		var values = this._relationsEchelonsGrades[id_grade];
		
		if (echelonEl) {
			var currentEchelon = echelonEl.get('value');
			echelonEl.set('html', '<option value="0">Sélectionnez votre échelon</option>')
				.set('value', '0');
			
			if (values) {
				$each(values, function (echelon, key) {
					var option = new Element('option', {value: echelon});
					option.set('text', this._echelons[echelon]);
					echelonEl.adopt(option);
				}.bind(this));
				
				if (values.contains(currentEchelon.toInt())) {
					echelonEl.set('value', currentEchelon.toInt());
				} else {
					$('date_entree_echelon').getElements('select').set('value', '');
				}
			}
		}
	},
	
	
	checkEchelon : function (event) {
		$('date_entree_echelon').getElements('select').set('value', '');
	},
	
	
	checkEntreeEchelon : function (event) {
		var tmp, date, duree, day, month, year, grade, corps, echelon, changed,
			noError;
		
		tmp = $('date_entree_echelon').getElements('select');
		
		//tmp = tmp.split('-');
		date = new Date();
		day = tmp[0].get('value');
		month = tmp[1].get('value');
		year = tmp[2].get('value');
		if (!day || !month || !year) {
			return true;
		}
		
		changed = this._lastDateEchelon != year+'-'+month+'-'+day;
		
		if (day.replace(/[0-9]*/g, '') != ''
			|| month.replace(/[0-9]*/g, '') != '' || year.replace(/[0-9]*/g, '') != '') {
			window.alert('La date d\'entrée dans l\'échelon est invalide, merci de corriger l\'erreur.');
			$('date_entree_echelon').setStyle('background-color', '#F00');
			return false;
		}
		
		date.set('date', day)
			.set('mo', month - 1)
			.set('year', year);
		
		if (!date.isValid()) {
			$('date_entree_echelon').setStyle('background-color', '#F00');
			window.alert('La date d\'entrée dans l\'échelon est invalide, merci de corriger l\'erreur.');
			return false;
		}
		
		$('date_entree_echelon').setStyle('background-color', 'transparent');
		//$('date_entree_echelon').set('value', date.format('%d-%m-%Y'));
		
		duree = date.compare('tomorow', 'month');
		
		corps = $('id_corps').get('value');
		grade = $('id_grade').get('value');
		echelon = $('echelon').get('value');
		
		noError = true;
		if ($('id_position').get('value') != 4 && this._dureeGradeEchelon && $type(this._dureeGradeEchelon) == 'array') {
			$each(this._dureeGradeEchelon, function (info) {
				if (info.id_corps == corps && info.id_grade == grade && info.echelon == echelon) {
					if (info.duree_moyenne < duree) {
						if (changed && !window.confirm('Votre durée d\'échelon est supérieure à la durée moyenne de cet échelon, êtes vous sur d\'avoir eu une prolongation de durée d\'échelon?')) {
							$('date_entree_echelon').setStyle('background-color', '#F00');
							$('date_entree_echelon').getElements('select').set('value', '');
							$('echelon').setStyle('background-color', '#F00');
							$('echelon').set('value', '0');
							noError = false;
						}
					}
					/*if (noError && info.duree_maximale < duree) {
						window.alert('Votre durée d\'échelon est supérieure à la valeur maximale possible au vu du statut du corps, merci de corriger les informations concernant votre échelon');
						$('date_entree_echelon').setStyle('background-color', '#F00');
						noError = false;
					}*/
				}
			});
		}
		
		this._lastDateEchelon = year+'-'+month+'-'+day;
		return noError;
	},
	
	
	_preloadDatas : function ()
	{
		this._requestPreload = new Request.JSON({
			url : '/actions/profil/get-datas.php',
			onComplete : this._registerDatas.bind(this)
		});
		this._requestPreload.send();
	},
	
	
	_registerDatas : function (datas)
	{
		this._relations = datas['relations'];
		this._entites = datas['entites'];
		this._corps = datas['corps'];
		this._grades = datas['grades'];
		this._echelons = datas['echelons'];
		this._relationsEchelonsGrades = datas['relationsEchelonsGrades'];
		this._dureeGradeEchelon = datas['dureeGradeEchelon'];
		this._configFields = datas['configForm'];
		this._relationsDepartementGroupe = datas['relationsDepartementGroupe'];
		
		this.checkAffectation();
		this.checkCorps();
		this.checkGrade();
		this.checkPosition();
	},
	
	
	
	/*****************************************************
	 * Change la disposition des éléments du formulaire
	 */
	
	_morphDisposition : function () {
		return; // désactivé
		var menu;
		
		this._opened = null;
		this._menuLinks = null;
		this._fieldsets = [];
		this.bound._menuClick = this._menuCheckClick.bind(this);
		
		menu = $('menu-profil');
		if (!menu) {
			return this;
		}
		
		this._menuLinks = menu.getElements('a');
		if (!this._menuLinks || this._menuLinks.length == 0) {
			return this;
		}
		
		$each(this._menuLinks, function (link) {
			var fieldset = $(link.get('href').replace(/.*#/, ''));
			if (fieldset) {
				this._fieldsets.push(fieldset);
				link.store('fieldset', fieldset);
			}
		}.bind(this));
		
		this._fieldsets = $$(this._fieldsets);
		this._fieldsets.setStyle('display', 'none');
		
		this._menuLinks.addEvent('click', this.bound._menuClick);
	},
	
	
	_menuCheckClick : function (event) {
		if (this._animationOnProgress) {
			return this;
		}
		
		var el, fieldset;
		
		event.stop();
		
		el = $(event.target);
		fieldset = el.retrieve('fieldset');
		
		if (this._opened) {
			if (this._opened != fieldset) {
				this._animationOnProgress = true;
				this._opened.set('tween', {
					onComplete : this._resetFieldset.bind(this, [event])
				}).tween('opacity', 1, 0);
			}
			
			return this;
		}
		
		this._opened = fieldset;
		fieldset.set('tween', {onComplete: function () {
			this._animationOnProgress = false;
			}.bind(this)
		}).tween('opacity', 0, 1).setStyle('display', 'block');
	},
	
	
	_resetFieldset : function (event) {
		this._opened.setStyle('display', 'none');
		this._opened = null;
		this._animationOnProgress = false;
		this._menuCheckClick(event);
		
		return this;
	}
	
	
	
});








