/**
 * @author arnaudgs
 */
var SearchEngineVillagePrice = new Class({
	Implements : Options,
	options : {
		root : 'searchEngineVillagePrice'
		
	},
	toggle : null, //object CMToggle
	alertBox : null,
	alertBoxShown : false,
	initialize : function(options) {
		this.setOptions(options);
		this.root = $(this.options.root);
		if (!this.root) return; //si le block n'existe pas
		
		this.toggle = new CMToggle({
			root : this.root,
			checkBeforeToggle : this.checkItemBeforeToggle.bind(this)
		});
		
		this.initEncadrementEnfants();
		
	},
	
	/**
	 * cette method permet de lancer l'ouverture du toggle ou non en fonction de la valeur de retour.
	 * On va checker si le toggle qui est actuellement ouvert n'a pas de champs de formulaire, et s'il en a,
	 * que aucun ne soit coché/sélectionné
	 * @param {Object} item
	 */
	checkItemBeforeToggle : function(currentItem, clickedItem) {
		//on affiche le message qu'une seule fois sur l'ensemble du bloc
		if(this.alertBoxShown) return true;
		if(this.alertBox) return false;
		this.clickedItem = clickedItem;
		var fields = this.getItemFields(currentItem);
		if(fields.length==0) return true;
		if(this.allFieldsEmpty(fields))
			return true;
		else {
			this.showAlertConfirm(currentItem);
			return false;
		}
	},
	
	getItemFields : function(item) {
		return item ? $(item.root).getElements('input,select,textarea') : [];
	},
	
	showAlertConfirm : function(item) {
		this.alertBoxShown = true;
		this.alertBox = new Element('div', {'class':'alertBox u_bgColor', html:[
//			'<p>', Properties.alertConfirmChangeToggleSearchVillage,
			'<p>', FormValidatorMessage.alertConfirmChangeToggle,
			'</p>',
//			'<p class="txtC"><a href="#" class="confbtn u_bgColor u_hoverWhite yes">',Properties.alertConfirmYes,'</a><a href="#" class="confbtn u_bgColor  u_hoverWhite no LMargin">',Properties.alertConfirmNo,'</a></p>'
			'<p class="txtC"><a href="#" class="confbtn u_bgColor u_hoverWhite yes">',FormValidatorMessage.alertConfirmYes,'</a><a href="#" class="confbtn u_bgColor  u_hoverWhite no LMargin">',FormValidatorMessage.alertConfirmNo,'</a></p>'
		].join('')});
		var size = $(item.content).getSize();
		this.alertBox.setStyles({
			width : size.x - (Browser.Engine.trident?30:20) - parseInt(this.alertBox.getStyle('padding-left'),10) - parseInt(this.alertBox.getStyle('padding-right'),10),
			left : 10
		});
		if(document.all) $(item.content).addClass('hideSelects');
		$(item.content).adopt(this.alertBox);
		this.alertBox.addEvent('click', this.alertBoxClickHandler.bindWithEvent(this, item));
	},
	
	alertBoxClickHandler : function(e,item) {
		new Event(e).stop();
		new Event(e).preventDefault();
		if (e.target.nodeName.toLowerCase() == "a" && $(e.target).hasClass('confbtn')) {
			if ($(e.target).hasClass('yes')) {
				this.toggle.toggle(this.clickedItem);
				//this.clearFields(this.getItemFields(item));
			}
			this.alertBox.dispose();
			$(item.content).removeClass('hideSelects');
			delete(this.alertBox);
		}
	},
	
	allFieldsEmpty : function(fields) {
		for (var i = 0; i<fields.length; i++) {
			var f = fields[i];
			
			switch(f.nodeName.toLowerCase()) {
				case 'select' : 
					if (f.selectedIndex>0)
						return false;
				break;
				case 'input' :
					switch(f.type) {
						case 'checkbox' : 
						case 'radio'	:
							if (f.checked) return false;
						break;
						case 'text'	:
							if (f.value!='' && !f.value.match(/M{1,2}.*A{2,4}/)) return false;
						break;	
					}
				break;
				case 'textarea' :
					if(f.value!=null)
						return false;
			}
		}
		return true;
	},
	
//	clearFields : function(fields) {
//		for (var i = 0; i<fields.length; i++) {
//			var f = fields[i];
//			
//			switch(f.nodeName.toLowerCase()) {
//				case 'input' : 
//					if (f.type=='text') f.value = '';
//					if (f.checked) f.checked = false;
//					break;
//				case 'select' :
//					f.selectedIndex = 0;
//					break;
//				case 'textarea' :
//					 f.value = '';
//			}
//		}
//	},
	
	initEncadrementEnfants : function() {
		var enc = $('encadrementEnfant');
		if(!enc) return;
		enc.getElements('input[type=radio]').each(function(radio){
			radio.addEvent('click', this._encadrementEnfantRadioClickHandler.bind(this));
		},this);
		this._setEncadrementEnfantCheckBoxDisabled('disabled');
	},
	
	_encadrementEnfantRadioClickHandler : function(e) {
		var radio = e.target;
		var disabled = (radio.id == 'encadrementEnfantAvecEnfant')  ? '' : 'disabled';
		this._setEncadrementEnfantCheckBoxDisabled(disabled);
	},
	
	_setEncadrementEnfantCheckBoxDisabled : function(disabled) {
		$('encadrementEnfantContainer').getElements('input').each(function(inp){
			inp.disabled = disabled;
		});
	}
})

