/**
 * Administra los comportamientos de la aplicación
 */

/**
 * Objeto A9
 */
var A9 = A9 || { 'settings': {}, 'behaviors': {} };

/**
 * Establece la variable que indica si se debe aplicar el comportamiento JS
 */
A9.jsEnabled = document.getElementsByTagName && document.createElement
	&& document.createTextNode && document.documentElement
	&& document.getElementById;

/**
 * Identificador de la ventana de thickbox
 */
A9.thickboxId = 'TB_window';

/**
 * Establece la variable que indica si la ventana actual esta
 * dentro de thickbox o no
 */
A9.isThickbox = null == window.parent.document.getElementById(
	A9.thickboxId) ? false : true;

/**
 * Establece la variable que indica si el thickbox se muestra
 * completamente o no
 */
A9.thickboxIsReady = false;

/**
 * Procesa todos los comportamientos añadidos
 *
 * Los comportamientos son acciones que se registran en el objeto
 * A9.behaviors como sigue:
 * @code
 *    A9.behaviors.behaviorName = function () {
 *      ...
 *    };
 * @endcode
 *
 * A9.processBehaviors se añade mas adelante al evento ready de jQuery
 * directamente o es ejecutado con retardo dependiendo de si se trata de
 * una ventana común o modal. Cuando se implementa AHAH/AJAX, se debe llamar
 * esta función nuevamente para asegurarse de que se adjuntaron todos los
 * comportamientos al nuevo contenido.
 *
 * Los comportamientos deben usar la clase en formato behaviorName-processed
 * para asegurarse de que los comportamientos se adjuntan sólo una vez a un
 * elemento dado. (Esto asegura que no sean afectados los elementos existentes
 * cuando se procesa el contenido obtenido por AHAH/AJAX.)
 *
 * @param context
 *   Elemento al cual se adjunta el comportamiento. Si no se especifica
 *   ninguno, se usará el elemento document.
 */
A9.processBehaviors = function(context) {
	context = context || document;
	if (A9.jsEnabled) {
		// Ejecutar todos los comportamientos.
		jQuery.each(A9.behaviors, function() {
			this(context);
		});
	}
};

/**
 * Congela el alto del elemento body (como alto mínimo). Usado para prevenir
 * scrolling innecesario cuando se hacen manipulaciones DOM.
 */
A9.freezeHeight = function () {
	A9.unfreezeHeight();
	var div = document.createElement('div');
	jQuery(div).css({
		position: 'absolute',
		top: '0px',
		left: '0px',
		width: '1px',
		height: $('body').css('height')
	}).attr('id', 'a9-freeze-height');
	jQuery('body').append(div);
};

/**
 * Descongela el alto del elemento body
 */
A9.unfreezeHeight = function () {
	jQuery('#a9-freeze-height').remove();
};

A9.checkThickboxIsReady = function (context) {
	if (true == A9.thickboxIsReady) {
		A9.processBehaviors(context);
	} else {
		if ('block' == jQuery(window.parent.document.getElementById(A9.thickboxId)).css('display')) {
			A9.thickboxIsReady = true;
		}
	}
};

if (A9.jsEnabled) {
	// Se aplica clase al elemento html
	jQuery(document.documentElement).addClass('js');
	// Se establece la cookie 'js enabled' para el lado del servidor
	document.cookie = 'has_js=1; path=/';
	// Attach all behaviors.
	jQuery(document).ready(function() {
		// Se elimina el Div de advertencia
		jQuery('#js_disabled_warning').remove();
		// Se procesan los comportamientos
		if (A9.isThickbox) {
			//A9.processBehaviors(this);
			setTimeout('A9.processBehaviors()', 1000);
			//var timerId = setInterval(A9.checkThickboxIsReady, 100);
			//setTimeout('clearInterval(' + timerId + ')', 5000);
		} else {
			A9.processBehaviors(this);
		}
	});
}


