/**
 * Oculta un mensaje de informacion.
 * Se utiliza para ocultar un mensaje del resultado de una peticion http via AJAX
 * @return null
 */
function _hideMsg() {
    $("#out").fadeOut("slow");
}

/**
 * Muestra un mensaje de informacion.
 * Se utiliza para mostrar un mensaje del resultado de una peticion http via AJAX
 * @param msg (String) Mensaje a mostrar
 * @param ok (Boolean) Indica si el mensaje es de ok
 * @return null
 */
var timer;

function _showMsg(message, type) {
    delay = 5000;

	if (timer != null)
		clearTimeout(timer);

    $('#out').removeClass("progress");
    $('#out').removeClass("message");
	$('#out').removeClass("error");

	switch (type) {
		case 1:
			$('#out').addClass("progress");
			break;

		case 2:
			$('#out').addClass("message");
			break;

		case 3:
			$('#out').addClass("error");
			break;
	}

    $('#out').html(message);
	$("#out").show();

    if (type>1)
        timer = setTimeout('_hideMsg()', delay);

}

function showError(message) {	_showMsg(message, 3); }
function showMessage(message) { _showMsg(message, 2); }
function showProgress(message) { _showMsg(message, 1); }




/**
 * Gestiona las respuestas recibidas de peticiones AJAX, siempre y cuando dicha respuesta cumpla con
 * la estructura establecida.
 * @param resp String con la respuesta en formato XML
 * @return null
 */
function _manageAjaxResponse(resp, afterSubmit) {
    $('label').css('background-color', '');

    response = $('response', $(resp)).eq(0);
    
    if (response != null) {
        code = $('code', $(response)).text();
        msg = $('msg', $(response)).text();

        if (afterSubmit != null)
            afterSubmit(code, msg, response);

        if (code > 0)
            showMessage(msg);
        else if (code == -9)
		{
			$('error', $(resp)).each(function() {
                $('label[for=' +$(this).attr('field')+ ']').css('color', '#f00');
            })
			
		}
    
    } else {
        alert("La respuesta del servidor no es compatible");
        
    }
    
    return code;
}

function manageAjaxResponse(resp) {
    return _manageAjaxResponse(resp, null);
}


/**
 * Carga las opciones de un campo select.
 * @param   source String, Nombre del archivo en formato XML, que contiene las opciones.
 * @param   target String, Id del campo select.
 * @param   params String, Parametros que se envian en la peticion.
 * @return  null
 */
function loadOptiosSelect(source, target, params, defaultSelected) {
    
    txt = $("option", $("#" + target)).eq(0).text();

    $("#" + target).empty();
    $("#" + target).addOption("-1", "Cargando..");
    $("#" + target).attr('disabled', 'disabled');
    
    $.ajax({
        url: "./" + source,
        dataType: "xml",
            data: params,
            success: function(xml) {
                $("#" + target).empty();
                $("#" + target).addOption("-1", txt);

                $("option", xml).each(function(){
                    $("#" + target).addOption($(this).attr("value"), $(this).text());
                });

                //if (defaultSelected)
                //    selectByText(target, defaultSelected);

                //else
                //    $("option",  $("#" + target)).eq(0).attr('selected', 'selected');

                $("#" + target).attr('disabled', '');
            }
	});
}

/**
 * Selecciona la opcion del Select que coincida con un valor siempre y cuando este exista.
 * @param select (String) Nombre del Select,
 * @param value (String) Valor de la opcion.
 * @return null
 */
function selectByValue(select, value) {
    $('option', $('#' + select)).each(function(){
        if ($(this).val().toLowerCase() == value.toLowerCase())
            $(this).attr('selected', 'selected');
    })
}

/**
 * Selecciona la opcion del Select que coincida con un valor siempre y cuando este exista.
 * @param select (String) Nombre del Select,
 * @param text (String) Valor de la opcion.
 * @return null
 */
function selectByText(select, text) {
    $('option', $('#' + select)).each(function(){
        if ($(this).text().toLowerCase() == text.toLowerCase())
            $(this).attr('selected', 'selected');
    })
}

/**
 * Selecciona la opcion del Select que coincida con un valor siempre y cuando este exista.
 * @param name (String) Nombre del Select,
 * @param value (String) Valor de la opcion.
 * @param markLabel boolean, 
 * @return null
 */
function selectRadioByValue(name, value, markLabel) {
    radio = $('input:radio[name=' +name+ '][value=' +value+ ']');
    $(radio).attr("checked", "checked");

    if (markLabel) {
        $(radio).parent().css("color", "#900");
        $(radio).parent().css("font-weight", "bold");
    }
}

/**
 * Impide escribir caracteres no numéricos en un input
 * @param	evt Event. Evento de tecla pulsada
 * @return	true si se pulsó un número; false en caso contrario
 */
function onlyNumbers(evt) {
    var charCode = (evt.which) ? evt.which : evt.keyCode;
    if (charCode > 31 && (charCode < 48 || charCode > 57))
    //if (charCode!=46 && charCode!=8 && charCode!=9 && (charCode<48 || charCode>57))
        return false;

    return true;
}

/**
 * Inicializa el calendario
 * @return	null
 */
function initCalendar() {
    $.dpText = {
    	TEXT_PREV_YEAR		:	'A&ntilde;o anterior',
    	TEXT_PREV_MONTH		:	'Mes anterior',
    	TEXT_NEXT_YEAR		:	'A&ntilde;o siguiente',
    	TEXT_NEXT_MONTH		:	'Mes siguiente',
    	TEXT_CLOSE			:	'Cerrar',
    	TEXT_CHOOSE_DATE	:	'Elegir fecha'
    }

    Date.monthNames = ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'];
    Date.abbrMonthNames = ['ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dic'];
    Date.dayNames = ['Domingo', 'Lunes', 'Martes', 'XMiércoles', 'Jueves', 'Viernes', 'Sábado'];
    Date.abbrDayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
    Date.firstDayOfWeek = 1;
    Date.format = 'dd/mm/yyyy';

    $('.date-pick').datePicker({
        startDate: '01/01/2000',
    	endDate: (new Date()).asString()
    });

}

function logout() {
    if (confirm("¿Está seguro de querer terminar su sesión?"))
        window.location="do/logout.jsp";
}
