/**
 * Pliega y despliega los fieldsets
 */

/**
 * Muestra u oculta los fieldsets usando animación
 */
A9.toggleFieldset = function(fieldset) {
	if (jQuery(fieldset).is('.collapsed')) {
		var content = jQuery('> div', fieldset);
		jQuery(fieldset).removeClass('collapsed');
		content.hide();
		content.slideDown( {
			duration: 'fast',
			easing: 'linear',
			complete: function() {
			A9.collapseScrollIntoView(this.parentNode);
			this.parentNode.animating = false;
		},
		step: function() {
			// Scroll the fieldset into view
			A9.collapseScrollIntoView(this.parentNode);
		}
		});
		if (jQuery(fieldset).is('.unique')) {
			jQuery(fieldset).siblings('fieldset.collapsible:not(.collapsed)').each(function() {
				A9.toggleFieldset(this);
			});
		}
	}
	else {
		var content = jQuery('> div', fieldset).slideUp('fast', function() {
			jQuery(this.parentNode).addClass('collapsed');
			this.parentNode.animating = false;
		});
	}
};

/**
 * Scroll a given fieldset into view as much as possible.
 */
A9.collapseScrollIntoView = function (node) {
	var h = self.innerHeight || document.documentElement.clientHeight || jQuery('body')[0].clientHeight || 0;
	var offset = self.pageYOffset || document.documentElement.scrollTop || jQuery('body')[0].scrollTop || 0;
	var posY = jQuery(node).offset().top;
	var fudge = 55;
	if (posY + node.offsetHeight + fudge > h + offset) {
		if (node.offsetHeight > h) {
			window.scrollTo(0, posY);
		} else {
			window.scrollTo(0, posY + node.offsetHeight - h + fudge);
		}
	}
};

A9.behaviors.processFieldsets = function (context) {
	jQuery('fieldset.collapsible > legend:not(.processFieldsets-processed)', context).each(function() {
		var fieldset = jQuery(this.parentNode);
		// Expande el fieldset si éste tiene elementos con error
		if (jQuery('input.error, textarea.error, select.error', fieldset).size() > 0) {
			fieldset.removeClass('collapsed');
		}

		/*
		 * Convierte el elemento legend en un enlace y wrapea el contenido
		 * del fieldset en un Div para una animación mas fácil.
		 */
		var text = this.innerHTML;
		jQuery(this).empty().append($('<a href="javascript:;">'+ text +'</a>').click(function() {
			var fieldset = jQuery(this).parents('fieldset:first')[0];
			// Para no animar varias veces

			if (!fieldset.animating) {
				fieldset.animating = true;
				A9.toggleFieldset(fieldset);
			}
			return false;
		}))
		.after(jQuery('<div class="a9_fieldset_wrapper"></div>')
		.append(fieldset.children(':not(legend)')))
		.addClass('processFieldsets-processed');
		if (jQuery(fieldset).is('.collapsed')) {
			jQuery('div.a9_fieldset_wrapper', fieldset).hide();
		}
	});
};
