/*
	UTILIDADES
*/

function stripTags(txt){
	return txt.replace(/<br[ ]*\/?>|<\/p>/gi, "\n").replace(/<\/?[^>]+>/gi, '');
}

/*
	FUNCIONES PARA EL MANEJO DE ACCIONES POR ENVIO DE FORMULARIO
*/

var ACTION_TIMEOUT = 4*1000; //en milisegundos

var sendingForm = new Array();

var E_AJAX_ERROR = 32768;

function formAction(form, successHandler, errorHandler){
	if(errorHandler == null)
		errorHandler = jsonRespErrorHandler;
	form = $(form);
	var action = form.attr('action');
	if(form.find("input[name=output]").size() == 0) //No tiene establecido el output
		form.append('<input type="hidden" name="output" value="json" />');
	else
		form.find("input[name=output]").attr('value', 'json');
	if(typeof(form.attr('target')) != 'undefined' && form.attr('target') != '')
		var iframe_id = form.attr('target');
	else{
		var iframe_id = 'marco_sendForm'+Math.round(Math.random()*10000);
		while($('#'+iframe_id).size() > 0)
			iframe_id = 'marco_sendForm'+Math.round(Math.random()*10000);
		form.attr('target', iframe_id);
	}
	sendingForm[iframe_id] = true;
	if($('#'+iframe_id).size() == 0)
		$('body').append('<iframe id="'+iframe_id+'" name="'+iframe_id+'" width="0" height="0" frameborder="0"></iframe>');
	$('#'+iframe_id).one('load', function(){
		var ifid = iframe_id;
		if(sendingForm[ifid]){
			sendingForm[ifid] = false;
			var json = {};
			try{
				var html = $('#'+ifid).get(0).contentWindow.document.body.innerHTML;
			}catch(e){
				var html = '';
				json['errors'] = new Array({
					'number':E_AJAX_ERROR,
					'type':'E_AJAX_ERROR',
					'string':"No se pudo ejecutar la acción "+action+" correctamente. Por favor, contáctese con el webmaster del sitio para informarle lo sucedido.\nMuchas gracias.",
					'file':'[Current file]',
					'line':'no data'});
			}
			if(json['errors'] == null){
				try{
					eval('json = '+html+';');
				}catch(e){
					json['errors'] = new Array({
						'number':E_AJAX_ERROR,
						'type':'E_AJAX_ERROR',
						'string':"No se pudo ejecutar la acción "+action+" correctamente. Por favor, contáctese con el webmaster del sitio para informarle lo sucedido.\nMuchas gracias.",
						'file':'[Current file]',
						'line':'no data'});
				}
			}
			if(json['errors'] != null && json['errors'].length > 0)
				errorHandler(json['errors']);
			else
				successHandler(json);
		}
	});
	form.submit();
	setTimeout(function(){
		var ifid = iframe_id;
		if(sendingForm[ifid]){
			sendingForm[ifid] = false;
			var error = new Array({
				'number':E_AJAX_ERROR,
				'type':'E_AJAX_ERROR',
				'string':"No se pudo ejecutar la acción "+action+" correctamente. Por favor, contáctese con el webmaster del sitio para informarle lo sucedido.\nMuchas gracias.",
				'file':'[Current file]',
				'line':'no data'});
			errorHandler(error);
		}
	}, ACTION_TIMEOUT);
	return false;
}


/*
	FUNCIONES PARA EL MANEJO DE ACCIONES A TRAVES DE AJAX
*/

function ajaxAction(url, params, successHandler, errorHandler){
	if(params == null)
		params = {};
	if(errorHandler == null)
		errorHandler = jsonRespErrorHandler;
	params['output'] = 'json';
	$.ajax({
		'async':true,
		'cache':false,
		'type':'post',
		'url':url,
		'data':params,
		'dataType':'text',
		'success':function (XMLHttpRequest, textStatus) {
			var html = XMLHttpRequest;
			var json = {};
			try{
				eval('json = '+html+';');
			}catch(e){
				json['errors'] = new Array({
					'number':E_AJAX_ERROR,
					'type':'E_AJAX_ERROR',
					'string':"No se pudo ejecutar la acción "+url+" correctamente. Por favor, contáctese con el webmaster del sitio para informarle lo sucedido.\nMuchas gracias.",
					'file':'[Current file]',
					'line':'no data'});
			}
			if(json['errors'] != null && json['errors'].length > 0)
				errorHandler(json['errors']);
			else
				successHandler(json);
		},
		'error':function (XMLHttpRequest, textStatus, errorThrown){
			var error = new Array({
				'number':E_AJAX_ERROR,
				'type':'E_AJAX_ERROR',
				'string':"No se pudo ejecutar la acción "+url+" correctamente. Por favor, contáctese con el webmaster del sitio para informarle lo sucedido.\nMuchas gracias.",
				'file':'[Current file]',
				'line':'no data'});
			errorHandler(error);
		},
		'timeout':ACTION_TIMEOUT
	});
	return false;
}

//Prefijo de errores por violaciones de dominio
var DOMAIN_RESTRICTION_ERROR_PREFIX = '#';

function jsonRespErrorHandler(errors){
	if(errors.length > 0){
		var dRPrefixLen = DOMAIN_RESTRICTION_ERROR_PREFIX.length;
		var errores = new Array();
		for(var n = 0; n < errors.length; n++){
			if(errors[n]['string'].substr(0, dRPrefixLen) == DOMAIN_RESTRICTION_ERROR_PREFIX){
				var error = errors[n]['string'].substr(dRPrefixLen);
				var partes = error.split("\n");
				var field = partes[0];
				partes[0] = '';
				errores.push('Errores en el campo '+field+':'+partes.join("\n - "));
			}else
				errores.push(errors[n]['string']);
		}
		alert(errores.join("\n"));
	}
}