// Conjunto de funciones necesarias para el funcionamiento de
//    algunas funcionalidades comunes a todos los archivos.

var showBlock = true;
var tableTmp = '';
var ajaxTimeout = 30000;
var menuHeight = '400px';

jQuery.fn.exists = function(){return jQuery(this).length>0;}

jQuery.fn.extend({
    highlight: function(search, insensitive, classe){
        var regex = new RegExp("(<[^>]*>)|(\\b"+ search.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1") +")", insensitive ? "ig" : "g");
        return this.html(this.html().replace(regex, function(a, b, c){
        return (a.charAt(0) == "<") ? a : "<strong class=\""+ classe +"\">" + c + "</strong>";
        }));
    }
});

$(document).ready(function() {

    $.ajaxSetup( {
              url: "./",
              type: "GET",
              contentType: "application/xhtml+xml"
    } );       
    
    $().ajaxStart(function() { blockPage('Procesando...'); });
    $().ajaxStop(function() { unblockPage(); });

    $(".run_on_ajax").each(function(){
        eval( $(this).html() );
	$(this).removeClass("run_on_ajax");
    });

});

// Funciones de mensajeria de espera

function blockPage(msg) {

//    if (msg == '') msg = '<h5><img src="images/busy.gif" />'+msg+'</h5>';

//    document.all["div_msg"].display = 'block';
//    document.all["div_msg"].innerHTML = msg;
    
//    alert(msg);
    if (showBlock) $.blockUI('<br><img src="/images/admin/loading.gif" /> <font color="#345298" size="2" face="Trebuchet MS, Arial, Tahoma"><b> '+msg+'</b></font>');

}

function unblockPage() {

//    $("#div_msg").hide();
  $.unblockUI();
    //showBlock = false;

}

function setCursor(set) {

    document.body.style.cursor = set;
	
}
	
function openContent(url, params, id) {

//    blockPage("Procesando..."); 
    
    if ($("#div_"+id).css('display') == 'none' ) {

	$("#busy_"+id).html('&nbsp;&nbsp;&nbsp;<img src="images/rotating_arrow.gif" border="0" width="15">');
	    
	$.ajax({
    	    url: url,
	    data: params,
	    type: "GET",
	    timeout: ajaxTimeout,
//	    async: false,
	    global: true,
    	    processData: true,
	    ifModified: false,
	    contentType: "application/x-www-form-urlencoded",
            dataType: "html",
	    beforeSend: function(objeto){
		    setCursor('wait');
	    },
    	    error: function(objeto, quepaso, otroobj){
		    setCursor('default');
		    $("#busy_"+id).html('');
		    alert("No se pudo completar la operacion: "+quepaso);
	    },
    	    success: function(datos){
		    $("#busy_"+id).html('');
		    $("#div_"+id).html(datos);
		    $("#div_"+id).show();
		    setCursor('default');
		    $(".run_on_ajax").each(function(){
			//alert($(this).html());
			eval( $(this).html() );
			$(this).removeClass("run_on_ajax");
		    });
		    
	    }
        });	    	    
	    
      } else {
	
	$("#div_"+id).hide();	
		  
    }  
    
//    unblockPage();
    return true;
    
}       

function getContent(url, params, id, async) {

    if (async == undefined) async = true;

    var ret;

    blockPage("Procesando..."); 
    
	$.ajax({
    	    url: url,
	    data: params,
	    type: "GET",
	    timeout: ajaxTimeout,
	    async: async,
	    global: true,
    	    processData: true,
	    ifModified: false,
	    contentType: "application/x-www-form-urlencoded",
            dataType: "html",
	    beforeSend: function(objeto){
		    //setCursor('wait');
	    },
    	    error: function(objeto, quepaso, otroobj){
		    //setCursor('default');
		    alert("No se pudo completar la operacion: "+quepaso);
		    ret = false;
	    },
    	    success: function(datos){
    	    	
		    if (id != '') {
		    		$("#"+id).html(datos);
			$("#"+id).show();
			ret = true;
		      } else {
		        ret = datos;
		    }				
		    $(".run_on_ajax").each(function(){
		        eval( $(this).text() );
			$(this).removeClass("run_on_ajax");
		    });
		  //  setCursor('default');
	    }
        });	    	    

    unblockPage();

    return ret;
    
}       

function getValues(url, params, async) {

    if (async == undefined) async = true;

    var ret;

	$.ajax({
    	    url: url,
	    data: params,
	    type: "GET",
	    timeout: ajaxTimeout,
	    async: async,
	    global: true,
    	    processData: true,
	    ifModified: false,
	    contentType: "application/x-www-form-urlencoded",
            dataType: "html",
	    beforeSend: function(objeto){
		    setCursor('wait');
	    },
    	    error: function(objeto, quepaso, otroobj){
		    setCursor('default');
		    ret = false;
	    },
    	    success: function(datos){
		    ret = datos;
		    setCursor('default');
	    }
        });	    	    

    return ret;
    
}       

function addContent(url, params, id) {

    var ret;

    //blockPage("Procesando..."); 
    
	$.ajax({
    	    url: url,
	    data: params,
	    type: "GET",
	    timeout: ajaxTimeout,
//	    async: false,
	    global: true,
    	    processData: true,
	    ifModified: false,
	    contentType: "application/x-www-form-urlencoded",
            dataType: "html",
	    beforeSend: function(objeto){
		    setCursor('wait');
	    },
    	    error: function(objeto, quepaso, otroobj){
		    setCursor('default');
		    alert("No se pudo completar la operacion: "+quepaso);
		    ret = false;
	    },
    	    success: function(datos){
		    html = $("#"+id).html();
    		    $("#"+id).html(html+datos);
		    $("#"+id).show();
		    ret = true;
		    setCursor('default');
	    }
        });	    	    

    //unblockPage();

    return ret;
    
}    

function getHTML(url, params, id,isconfirm,async){
// esta funcion obtiene el html de una url, y lo pega en el div llamado id
// permite la confirmacion antes de saltar a la url

	if (isconfirm=='true'){
		confirm(function(){
				$.modal.close();
				getContent(url, params, id, async);
				
		});
	
	}else{
		getContent(url, params, id, async);
	}
}

function confirm(callback) {
// esta funcion mestra el cuadro de dialogo de confirmacion

	$('#confirm').modal({
		close:false, 
		overlayId:'confirmModalOverlay',
		containerId:'confirmModalContainer', 
		persist:true,
		onShow: function (dialog) {
			//dialog.data.find('.message').append(message);

			// if the user clicks "yes"
			dialog.data.find('.yes').click(function () {
				// call the callback
				if ($.isFunction(callback)) {
					callback.apply();
				}
				 //close the dialog
				$.modal.close();
			});
		}
	});
}   

function rowColor(tableclass){
// esta funcion colorea las filas de una tabla de clase tableclass

	$("table." + tableclass + "  tbody tr").mouseover( function() {
		$(this).addClass("highlight");
	}).mouseout( function() {
		$(this).removeClass("highlight");
	});
	
   $("table." + tableclass + "  tbody tr:odd").addClass("odd");
   $("table." + tableclass + "  tbody tr:even").addClass("even");
   
}

function submitForm(form,validate,id_target,rmethod)
{	
// esta funcion hace el submit de un formulario por ajax, y deja el resultado en el div llamado id_target
// opcionalmente permite la validacion de los campos del mismo

	if (rmethod!='post') rmethod='get';

    if (validate==true)
	 	valid = $('#'+form.id).validate({errorClass: "formError"}).form();
		 	else
				valid=true;
	 
	 if (valid){ 
		
		$('#'+form.id).ajaxSubmit({target:'#'+id_target,method:rmethod});
		return true;
	   }else{
	   	return false;
	   }   
 	
}

