function callActionAjax(actionRoute, jsonActionParameter, functionProcessor){
	
	 $.ajax({
	     url: contextPath + actionRoute,
	     type: 'POST',
	     data:  jsonActionParameter, 
		 dataType: "json",
	     success:function(response){ 
	    	 functionProcessor(response);    
	     },
	     error:function(jqXhr, textStatus, errorThrown){

	         alert("Error: " + textStatus + " ::: " + errorThrown + " ::: " + jqXhr);
	     }
	 });
	
}

function validaNuloUndefinido(variable){
	
	if( (variable === null && typeof variable === "object") ||
	    (variable === undefined && typeof variable === "undefined") ||
	    (variable === "" && typeof variable === "string")
	  ){
		return 0;
	   }else {  
		return variable;
	   }
}

function validaParametrosEntrada(estudioEleccion, mesEleccion){
	
	console.log("estudioEleccion: " + estudioEleccion + " mesEleccion: " + mesEleccion);

	
	var estudioNoValida = validaNuloUndefinido(estudioEleccion);
	var mesNoValida = validaNuloUndefinido(mesEleccion);
	var fechaValida = validaFechaMesAnio(mesEleccion);

	
	console.log("estudioValida: " + estudioNoValida + " mesValida: " + mesNoValida);
	
	if (estudioNoValida == 0 || mesNoValida == 0 || fechaValida == 0)
		return 0;
   	 return 1;
}


$(document).ready(function(){	

	$('#fecha').datepicker({ dateFormat: 'mm/yy' });
	
	
    $('#consultaReporte').click(function() { 
    	
    	 var estudioEleccion = $('#estudioEleccion').val();
       	 var mesEleccion = $('#fecha').val();
    	    	
	 if (validaParametrosEntrada(estudioEleccion, mesEleccion) != 0){
	    	generaReporteAmortizacion(estudioEleccion, mesEleccion);
	 }else {
		 showError("No se ha seleccionado un valor valido de estudio y/o fecha o la fecha seleccionada no tiene el formato adecuado MM/YYYY");
		 }
    });
    
    
    $('#generaExcelReporte').click(function() { 
    	
    	 var estudioEleccion = $('#estudioEleccion').val();
       	 var mesEleccion = $('#fecha').val();
    	
   	 if (validaParametrosEntrada(estudioEleccion, mesEleccion) != 0){

   		var url = contextPath +'/contrato/amortizacion/excelAmortizacion.action?idEstudio=' + $("#estudioEleccion").val() + '&fecha='+ $("#fecha").val();
   		window.open(url);
   		 
   	 }else {
		 showError("No se ha seleccionado un valor valido de estudio y/o fecha o la fecha seleccionada no tiene el formato adecuado MM/YYYY");
   		 }
       	
       }); 
	
});


function validaFechaMesAnio(fecha){
	
	var fecha_valida = 0;
	
    fecha = '01/' + fecha;

	try {
	    testdate = $.datepicker.parseDate('dd/mm/yy', fecha);
	    fecha_valida = 1;

	} catch (e)
	{
		fecha_valida = 0;
	}
	
    return fecha_valida;
}


function generaReporteAmortizacion(estudio, fecha){

	  if (validaNuloUndefinido(estudio) == 0)
		  estudio = null;
	  
	  if (validaNuloUndefinido(fecha) == 0)
		  fecha = null;
	  	  
	  var jsonString = '{"idEstudio":' + estudio + ',"fecha": "' + fecha + '"}';	  
	  var stringJson = JSON.parse(jsonString); 	  

	  callActionAjax( "/reporte/amortizacion/cargaInicialReporte", stringJson, procesaDatosReporte);
}

function generaDetalleReporteAmortizacionContrato(contrato, fecha){

	  if (validaNuloUndefinido(contrato) == 0)
		  contrato = null;
	  
	  if (validaNuloUndefinido(fecha) == 0)
		  fecha = null;
	  
	  var jsonString = '{"idContrato":' + contrato + ',"fecha": "' + fecha + '"}';	  	  	  
	  var stringJson = JSON.parse(jsonString);	  
	  var tamanofilasTitulos = $('tr.'+contrato+'collapsed').length;	  	  

	  if (tamanofilasTitulos == 0)
	     callActionAjax( "/reporte/amortizacion/cargaTitulosMontoContrato", stringJson, procesaDatosDetalleContrato);
}

function procesaDatosReporte(datos){
	
	console.log(datos)
	
	var nombreTabla = "reportePagoSuscriptor";
	var nombreTablaContenedor = "facturaDetalleContainerContainer";
	var  nombreAppender = "tablaAmortizacionDetalle"; 
	
	
	var headerTablaRow = tituloReporte (nombreTabla, nombreTablaContenedor, datos.fechasRango);
	
    $('#' + nombreAppender).append(headerTablaRow);
    
	var totalesMontosContratosTamano = datos.totalesMontosContratos.length;
    
    var filaTotalesPorEstudio = detalleReporte(datos.totalesMontosEstudio);
    $('#'+ nombreTabla + ' > tbody:last').append(filaTotalesPorEstudio);


	for (var i=0; i<totalesMontosContratosTamano; i++){
		var fila = detalleContratoReporte(datos.totalesMontosContratos[i]);
	    $('#'+ nombreTabla + ' > tbody:last').append(fila);
	    
	}
	
	$('.header').click(function(){	
		
		 var separado = $(this).attr('id');
	     var idContrato = obtenNSplitPorSeparador(separado, "rId", 1);
		 var mesEleccion = $('#fecha').val();
		 fHideShow(idContrato);
	     	
		 if($(this).attr('search') == '0')
		 {
			 $(this).attr('search', '1');
		     generaDetalleReporteAmortizacionContrato(idContrato, mesEleccion);	 
		 }
	     	     
	});
	
} 

function procesaDatosDetalleContrato(datos){
	
	var idContrato = datos.idContrato;
		
    var totalesMontoTitulosTamano = datos.montosTitulos.length;

	for (var i=totalesMontoTitulosTamano-1; i>=0; i--){
		var fila = detalleTitulosReporte(datos.montosTitulos[i], idContrato);
	    $('#rId'+ idContrato).after(fila);	    		 
	}
	
	 $('#rId'+ idContrato).attr('search', '0'); 
} 


function tituloReporte (idNombreTabla, idNombreTablaContainer, fechas){
	
    var fechasTamano = fechas.length;

	 
    $('#' + idNombreTablaContainer).remove();

	var header = '<div id="'+ idNombreTablaContainer +'" >'+
	             '<table id="'+idNombreTabla +'" class="table table-striped table-hover">'+
	             '<thead>'+
		            '<tr class="encabezado" >'+
			              '<th></th>';
	
			              for (var i=0; i<fechasTamano; i++){  
			            	  header = header + '<th class="text-right"><div>' + fechas [i] + '</div></th>';
			              }
			              
			    header = header +  '<th><div>ACUMULADO</div></th>'+
		            '</tr>'+
	             '</thead>'+
	             '<tbody>'+
	             '</tbody>'+
                 '</table>'+
	             '</div>';
                  
	return header;
}

function detalleReporte(objetoDetalle){
	
	var reporteTotalesContratoTamano = objetoDetalle.montoMes.length;
	var montosPorMes = objetoDetalle.montoMes;

    var fila = '<tr class="danger">' ;
    
    fila = fila + '<td>'+
                     '<div><h6><strong>'+
                          objetoDetalle.descripcion +
                     '</strong></h6></div>'+  
                  '</td>';
                 
    for (var i=0; i<reporteTotalesContratoTamano; i++){  
    	
	       var n = parseFloat(montosPorMes[i].monto);

            fila = fila +  '<td class="text-right">'+
                             '<div><h6><strong>'+
                             "$ " + n.formatDLA() +
                             '</strong></h6></div>'+   
	                       '</td>';
    }

    fila = fila +  '</tr>';

    return fila;
}

function detalleContratoReporte(objetoDetalle){
	
	var reporteTotalesContratoTamano = objetoDetalle.montoMes.length;
	var montosPorMes = objetoDetalle.montoMes;

    var fila = '<tr id="rId'+ objetoDetalle.id +'" class="header success" search="0">' ;
    
    fila = fila + '<td id="rId'+ objetoDetalle.id +'-cId0" >'+
                     '<div><h6><strong class="text-danger">'+
                          objetoDetalle.descripcion +
                     '</strong></h6></div>'+  
                  '</td>';
                 
    for (var i=0; i<reporteTotalesContratoTamano; i++){  
    	
	       var n = parseFloat(montosPorMes[i].monto);

            fila = fila +  '<td id="rId'+ objetoDetalle.id +'-cId'+ (i + 1) +'" class="text-right" >'+
                             '<div><h6><strong>'+
                             "$ " + n.formatDLA() +
                             '</strong></h6></div>'+   
	                       '</td>';
    }

    fila = fila +  '</tr>';

    return fila;
}

function detalleTitulosReporte(objetoDetalle, contrato){
	
	var reporteTotalesContratoTamano = objetoDetalle.montoMes.length;
	var montosPorMes = objetoDetalle.montoMes;

    var fila = '<tr id="'+ objetoDetalle.id +'" class="'+contrato+'collapsed">' ;
    
    fila = fila + '<td>'+
                     '<div><h6><strong class="text-info">'+
                          objetoDetalle.descripcion +
                     '</strong></h6></div>'+  
                  '</td>';
    
    for (var i=0; i<reporteTotalesContratoTamano; i++){  
    	
    	    var n = parseFloat(montosPorMes[i].monto);
    	    
            fila = fila +  '<td  align="right">'+
                             '<div><h6><strong>'+
                             "$ " + n.formatDLA()  +
                             '</strong></h6></div>'+   
	                       '</td>';
    }

    fila = fila +  '</tr>';

    return fila;
}

function fHideShow( pnuId )
{
	if( $( "." + pnuId + "collapsed:visible" ).length > 0 )
		$( "." + pnuId + "collapsed" ).hide();
	else
		$( "." + pnuId + "collapsed" ).show();
}


function obtenNSplitPorSeparador(cadena, separador, nOcurrencia) {
	var ocurrencias = cadena.split(separador);
	return ocurrencias[nOcurrencia];
}