document.observe('dom:loaded', function(){

	$$('button').each(function(node){
		node.removeClassName('disabled');
	});
	
	var forms = $$('form.request');
	OOS.natalio_forms = [];
	forms.each(function(f){
		OOS.natalio_forms.push(new form(f));
	});
	
	// remove current attachments
	$$('a.remove-attachment').invoke('observe', 'click', function(e){
		e.stop();
		
		deleting = confirm( _("¿seguro que quieres borrarlo?") );
		if (!deleting){return false;}
		
		var link = this;
		var req  = new Ajax.Request(link.readAttribute('href'), {
			method : 'post',
			parameters: link.readAttribute('href').toQueryParams(),
			onSuccess: function(){
				var li = link.up(0);
				if(li.hasClassName('muploaded')){
					li.remove();
				}
			}
		});
	
	});
	
	// inicializar locality suggest
	if ($('user-locality')){
		ls = new LocalitiesSuggest($('user-locality'));
	}
});

var form = Class.create({
	multimedia_template : new Template(
		'<li id="#{id}[container#{num}]" class="mu_container">' +
			'<p><label for="#{file_name}[#{num}].mf">#{subject}</label>' +
			'<input class="file" type="file" id="#{file_name}[#{num}].mf" name="#{file_name}[#{num}].mf" size="23px" />' + 
			'<a id="#{id}[container#{num}.quit]" class="action mu_quit" href="/quit">#{quit}</a></p>' +
			'<p><label for="#{description_name}[#{num}].description">#{description_label}</label>' +
			'<input type="text" id="#{description_name}[#{num}].description" name="#{description_name}[#{num}].description" maxlength="255"  /></p>' +
		'</li>'),
	/* array de errores en el formulario */	
	errors : new Array(),
	TEXT_VALIDATION_REQUIRED : _("es necesario que respondas esta pregunta"),
	TEXT_VALIDATION_REEMAIL : _("los emails no coinciden"),
	TEXT_VALIDATION_INT : _("la respuesta deber ser un número"),
	TEXT_CONFIRM_CANCEL : _("¿estás seguro de que quieres cancelar la solicitud de presupuesto?\nsi lo cancelas no podrás recuperar los datos que has rellenado hasta ahora"),

	initialize : function(f){
		this.form = f;
		this.submit = $('submit');
		this.cancel = $('cancel');
		this.fields_required = $$('input.required');
		this.fields_int = $$('input.int');
		this.display_radio_other_text();
		this.display_checkbox_other_text();
		this.manage_fieldsets();
		
		this.load();
	},
	/*
	 * inicializaciones varias
	 */
	load : function(submit){
		this.form.getInputs('radio').invoke('observe','click', this.click_radio_other_text);
		this.form.getInputs('checkbox').invoke('observe','click', this.click_checkbox_other_text);
		$$('div.photo_uploader').each(function(uploader){
			this.inv_upload_photos(uploader.id);
		}.bindAsEventListener(this));
		if(this.cancel){
			this.cancel.observe('click', this.form_cancel.bindAsEventListener(this));
		}
		this.load_info_windows();
		this.load_observers();
	},
	load_observers: function(){
		OOS.observers.each(this.create_observer.bind(this));
	},
	create_observer: function(observer){
		$(observer.question).observe('click', this.click_radio_other_text.bindAsEventListener($(observer.answer),observer.answer));
	},
	/*
	 * submit del form
	 * deshabilitar submit y validación
	 */
	form_submit : function(evt){
		if (this.submit.hasClassName("disabled")){
			evt.stop();
		} else
			this.submit.addClassName("disabled");
	},
	/*
	 * cancelar formulario
	 */
	form_cancel : function(evt){
		if (!confirm(this.TEXT_CONFIRM_CANCEL)){
			evt.stop();
		}
	},
	/*
	 * required : campo obligatorio
	 * email : correo electrónico
	 * reEmail : repetición del correo electrónico
	 * int : campo numérico
	 */
	valid : function(){
		$$('p.error').invoke('remove');
		this.errors.clear();
		for (var i = 0; i < this.fields_required.length; i++){
			var field = this.fields_required[i];
			if (!this.is_present(field)){
				this.errors.push({
					type : node.name,
					elto : node.id,
					msg : this.TEXTO_VALIDACION_REQUIRED
				});
			}			
		}
		if ($('email') && $('reEmail')){
			if ($F('reEmail') != $F('email')){
				this.errors.push({type : "mail", elto: 'email',  msg : this.TEXT_VALIDATION_REEMAIL});
			}
		}
		this.fields_int.each(function(field){
			if (field.present() && isNaN($F(field))){
				this.errors.push({type : "number", elto: field.id,  msg : this.TEXT_VALIDATION_INT});
			}
		});
		return !this.errors.size() > 0;
	},
	/*
	 * TODO:REVISAR
	 */
	insert_errors : function(){
		this.errors.each(function(error){
			if ($(error.elto))
				$(error.elto).insert({before:"<p class='error bl'>" + error.msg +"</p>"});
			else
				$(error.elto).insert({before:"<p class='error'>" + error.msg +"</p>"});
		});

		if ($('description') && !$('validation_error')){
			$('description').insert({after:"<p id='validation_error' class='validation_error'>"+ _("no se ha podido completar el alta, por favor comprueba que has rellenado correctamente todos los datos") +"</p>"});
			window.scroll(0,0);
		}
		this.positioned_fields();
	},
	/*
	 * comprobar campos obligatorios
	 */
	is_present : function(field){
		return !field.present() && !field.id.empty();
	},
	/*
	 * email correcto
	 */
	email_valid : function(mail){
		return mail.match("^([_a-zA-Z0-9-+]+)(\\.[_a-zA-Z0-9-+]+)*@([a-zA-Z0-9-]+)(\\.[a-zA-Z0-9-]+)*(\\.[a-zA-Z]{2,4})$");
	},
	/* corrige error de posicionamiento de inputs en IE */
	positioned_fields : function(){
		$$('input').invoke('makePositioned');
		$$('select').invoke('makePositioned');
	},
	media_limit : 5,
	/* Inserta enlace añadir fotos */	
	inv_upload_photos : function(id){
		var media_indexes = $A($R(0, this.media_limit - 1)).findAll(function(item){
			return !$('requestFormAttachments[' + item + '].description') || !('muploaded_' + item);
		});
		this.imageUploader = new multimedia_uploader(id,'foto', {
			add_media : _("añadir archivos"),
			file_name : 'requestFormAttachments',
			description_name : 'requestFormAttachments',
			more : _("añadir otro archivo"),
			limit : this.media_limit - $$('.muploaded').size(),
			subject : _("archivo"),
			template : this.multimedia_template,
			indexs : media_indexes
		});	
	},
	display_radio_other_text : function(){
		var radios = this.form.getInputs('radio');
		radios.each(function(r){
			if (r.classNames().inspect().include('other') && r.checked)
				r.up().next('div.other-text').removeClassName('hide');
		});
	},
	display_checkbox_other_text : function(){
		var checks = this.form.getInputs('checkbox');
		checks.each(function(c){
			if (c.classNames().inspect().include('other') && c.checked)
				c.up().next('div.other-text').removeClassName('hide');
		});
	},
	/* mostrar / ocular inputs.other-text en radios */
	click_radio_other_text : function(e,radio_name){
		var elto = radio_name != undefined ? $(radio_name) : e.findElement();
		var radios = elto.up('form').getInputs('radio', elto.name);
		var other_text = elto.up().next('div.other-text');
		
		if (other_text != undefined && other_text.down('select')){
			var name = other_text.down('select').name;
			var dep = OOS.depends.toObject()[name];
			var dep_ok = (dep == undefined || dep.all(function(d){
				return $F(d.question) == d.value.toString();
			}));
		}
		// ocultar
		for (var i = 0; i < radios.length; i++){
			if (radios[i].classNames().inspect().include('other') && (
				 e.findElement().type == 'radio' ||
				(e.findElement().type == 'checkbox' && radio_name == radios[i].id)))
				radios[i].up().next('div.other-text').addClassName('hide');
		}
		// mostrar
		if ((dep_ok || other_text && !other_text.down('select')) &&
				elto.checked && elto.classNames().inspect().include('other')){
			other_text.removeClassName('hide');	
		}
	},
	/* mostrar / ocular inputs.other-text en checks */
	click_checkbox_other_text : function(){
		if (this.className.inspect().include('other')){
			if (this.checked)
				this.up().next('div.other-text').removeClassName('hide');
			else
				this.up().next('div.other-text').addClassName('hide');
		}
	},
	load_info_windows : function(){
		$$('a.info_links').invoke('observe', 'click', this.more_info);
	},
	/* recibe el evento el enlace.
	 * recuperamos su title y lo mostramos en la ventana
	 */
	more_info : function(e){
		e.stop();
		if (this.title && !this.title.blank()){
			var params = this.href.toQueryParams();
			if (params.name && !params.name.blank()){
				var box_title = _("más información sobre " + params.name);
				var content = '<div style="margin:2em"><h3 style="margin-bottom:1em; font-size:1.4em;">'+params.name+'</h3><p>' + this.title + '</p></div>';
			}
			else {
				var box_title = _("más información");
				var content = '<div style="margin:2em"><p>' + this.title + '</p></div>';
			}
			var container = new Box('more_info_container', box_title);
			container.setContents(content);			
		}
	},
	manage_fieldsets : function(){
		$$('input.toggle').invoke('observe','click',this.toggle_fieldsets.bindAsEventListener(this));
		$$('input.toggle').each(this.toggle_fieldsets.bindAsEventListener(this));
	},
	toggle_fieldsets : function(evt){
		if (evt.findElement)
			var elto = evt.findElement();
		else
			var elto = evt;
		
		var fieldset_id = 'f-'+elto.id;

		if ($(fieldset_id)){
			if ($F(elto))
				$(fieldset_id).removeClassName('hide');
			else
				$(fieldset_id).addClassName('hide');
		}
	}
});
