/**
*	Carga una url en un div popin.
*/
function execute(url, callback, confirmation) {
	$().ajaxError(function(response, request, ajax, error){
		$('#loader').hide();
		messageShow('ERROR: "' + error + '"\n<pre>' + request.responseText + '</pre>');
		formBlocked = false;
	});
	if (confirmation &&!confirm(confirmation)) return false;
	url = BASEURL + url;
	querySep = (url.search(/\?/) != -1) ? '&' : '?';
	url = url + querySep +'random=' + Math.random();
	$('#loader').show();
	$.getJSON(url, function(result) {
		processResponse(result);
		if (callback && typeof(callback) == 'function') {
			callback(result);
		}
	});
	return false;
}
var formBlocked = false;

/**
 * Envia el contenido de un formulario usando AJAX
 */
function sendForm(targetForm) {
	//if (formBlocked) return false;
	if (typeof(targetForm) == 'string') {
		targetForm = document.getElementById(targetForm);
	}
	if (!targetForm.tagName || targetForm.tagName != 'FORM') {
		alert('Se esperaba un formulario');
		return false;
	}
	var query = new Array();
	for (var i = 0; i < targetForm.elements.length; i++) {
		inputItem = targetForm.elements[i];
		if (inputItem.name != '') {
			if ((inputItem.type == 'checkbox' || inputItem.type == 'radio') && !inputItem.checked) continue;
			query.push(encodeURIComponent(inputItem.name) + '=' + encodeURIComponent(inputItem.value));
		}
	}
	$('#loader').show();
	formBlocked = true;
	$.ajax({
		url: targetForm.action,
		dataType: 'json',
		type: 'post',
		data: query.join('&'),
		success: processResponse
	});
}

/**
 * Procesa las respuestas del servidor.
 */
function processResponse(response) {
	formBlocked = false;
	$('#loader').hide();
	if (!response.action) return false;
	switch (response.action) {
		case 'load':
			for (var i = 0; i < response.jscript.length; i++) {
				loadScript(response.jscript[i]);
			}
			for (var i = 0; i < response.styles.length; i++) {
				loadStyleSheet(response.styles[i]);
			}
			popinShow(response.html);
			break
		case 'insert':
			for (var i = 0; i < response.jscript.length; i++) {
				loadScript(response.jscript[i]);
			}
			for (var i = 0; i < response.styles.length; i++) {
				loadStyleSheet(response.styles[i]);
			}
			$(response.DOM).html(response.html);
			break
		case 'reload':
			window.location.href = window.location.href.replace('#', '');
			break;
		case 'open':
			window.location.href = BASEURL + response.url;
			break;
		case 'callback':
			$('#loader').show();
			$.getJSON(BASEURL + response.url, processResponse);
		case 'error':
			for (i in response.data) {
				input = $('#' + response.data[i]).addClass('invalid').blur(function() { $(this).removeClass('invalid'); }).get(0);
			}
		default:
			if (!response.messages || response.messages.length == 0) break;
			messageShow(response.messages);
	}
}

$().ready(function() {
	if (window.flash_messages) {
		messageShow(flash_messages);
	}
});

function messageShow(messageContent) {
	if (typeof(messageContent) == 'object') {
		messageContent = '<ul><li>' + messageContent.join('</li><li>') + '</li></ul>';
	}
	popinShow('<div id="l_messages" class="popinClose">' + messageContent + '</div>');
}

function loadStyleSheet(filename) {
	for (var i = 0; i < document.styleSheets.length; i++) {
		if ((document.styleSheets[i].href) && (document.styleSheets[i].href.indexOf(filename) != -1)) return false;
	}
	$('head').append('<link rel="stylesheet" type="text/css" href="' + BASEDIR + filename + '" />');
}

function loadScript(filename) {
	var found = false;
	$('script').each(function() {
		if (this.type == 'text/javascript' && this.src.indexOf(filename) != -1) return true;
	});
	$('head').append('<script type="text/javascript" src="' + BASEDIR + filename + '"></script>');
}

function popinShow(contents, className) {
	zdepth = 10 + $('.popin_window').length;
	var popinId = 'popin_' + parseInt(Math.random() * 1000);
	className = className ? className + ' popin_window' : 'popin_window';
	$('body').prepend('<div id="' + popinId + '" class="' + className + '"></div>');
	$('#' + popinId).html(contents);
	popinLeft = ($(window).width() - $('#' + popinId + ' > div').width()) / 2;
	popinTop = ($(window).height() - $('#' + popinId + ' > div').height()) / 2;
	styles = 'display:none;position:absolute;left:' + popinLeft + 'px;top:' + popinTop + 'px;z-index:' + zdepth;
	$('#' + popinId).attr('style', styles);
	popinOverlay();
	$('#' + popinId + ' .popinClose').bind('click', function() {
		popinClose(popinId);
	});
	$('#' + popinId).fadeIn('slow');
}

function popinClose(popinId) {
	$('#' + popinId).fadeOut('', function() { $('#' + popinId).remove(); });
	if ($('.popin_window').length > 1) return false;
	$('#overlay').fadeOut('', function() {
		$('#overlay').remove(); 
	});
}

function popinOverlay() {
	if ($('#overlay').length != 0) return false;
	$('body').prepend('<div id="overlay"></div>');
	var overlay = document.getElementById('overlay');
	styles = 'cursor:wait;background-color:black;filter:alpha(opacity=80);-moz-opacity:.80;opacity:.80;';
	$('#overlay').attr('style', styles);
	$(overlay).css({height: $('body').height() + 'px'});
	$(overlay).show();
}