var uploader   = new UploaderEX("cargaFeesDiv"); // Se crear el objeto para
var datosSubir = null;						     // cargar archivos
var modificarPeriodo;
var indiceAnio;
var tipoMinimoFechas;
var seccionTerminos;

var terminosController = function($scope, $filter, terminosService, minimosService, revenueService, releaseService, precioService) {
		  	 	 	 	 	
	$scope.abiertoPremier  = "";
	$scope.abiertoLibreria = "";
	$scope.abiertoEst      = "";
	$scope.fechaInicioCto  = null;	 
	$scope.fechaFinCto     = null;				
	$scope.tiposCambio     = null;
	$scope.operacionExcepcion = null;
	$scope.indicePeriodoExcepcion = null;
	$scope.tituloExcepcionEleccion = null;

	$scope.formatos       = null;
	$scope.tablaExcepciones = null;
	$scope.tablaPivote = null;
	
	//variables de premium
	$scope.tablaMinGarPrem    = null;
	$scope.tablaMinAnioPrem   = null;
	$scope.tipoMinPrem        = null;
	$scope.tablaReleasePrem   = null;
	$scope.tablaPreciosPrem   = null;
	$scope.tablaPreciosAplicaPrem   = null;
	$scope.tablaRevenuePrem   = null;
	$scope.tablaExcepcionesPrem = null;
	$scope.paisesPrem         = null;
	$scope.tablaPreciosPagoPPEPrem = null;
	
	//variables de premier
	$scope.tablaMinGarPre    = null;
	$scope.tablaMinAnioPre   = null;
	$scope.tipoMinPre        = null;
	$scope.tablaReleasePre   = null;
	$scope.tablaPreciosPre   = null;
	$scope.tablaPreciosAplicaPre = null;
	$scope.tablaRevenuePre   = null;
	$scope.tablaExcepcionesPre  = null;
	$scope.paisesPre         = null;
	$scope.tablaPreciosPagoPPEPre = null;

	
	//variables de libreria
	$scope.tablaMinGarLib    = null;
	$scope.tablaMinAnioLib   = null;
	$scope.tipoMinLib        = null;
	$scope.tablaPreciosLib   = null;
	$scope.tablaRevenueLib   = null;
	$scope.tablaRevenueLibBox  = null;
	$scope.tablaRevenueLibGl  = null;
	$scope.tablaExcepcionesLib  = null;
	$scope.paisesLib         = null;
	$scope.tablaPreciosPagoPPELib = null;
	$scope.tablaPreciosAplicaLib = null;
	$scope.tipoRevenueLib     =  null;				

	
	//variables de movies
	$scope.tablaMinGarMov    = null;
	$scope.tablaMinAnioMov   = null;
	$scope.tipoMinMov        = null;
	$scope.tablaPreciosMov   = null;												
	$scope.categoriasMov     = null;
	$scope.categoriasAgregarMov  = null;
	$scope.tipoRevenueMov     =  null;				
	$scope.tablaRevenueMovGl  =  null;
	$scope.tablaRevenueMovBox =  null;
	$scope.tablaExcepcionesMov  = null;
	$scope.paisesMov         = null;
	$scope.tablaPreciosPagoPPEMov = null;
	$scope.tablaPreciosAplicaMov = null;
	
	//variables de series
	$scope.tablaMinGarSer    = null;
	$scope.tablaMinAnioSer   = null;
	$scope.tipoMinSer        = null;
	$scope.tablaPreciosSer   = null;												
	$scope.categoriasSer     = null;
	$scope.categoriasAgregarSer  = null;
	$scope.tipoRevenueSer     =  null;				
	$scope.tablaRevenueSerGl  =  null;
	$scope.tablaRevenueSerBox =  null;
	$scope.tablaExcepcionesSer  = null;
	$scope.paisesSer         = null;
	$scope.tablaPreciosPagoPPESer = null;
	$scope.tablaPreciosAplicaSer = null;
	$scope.contratoStatus = null;

	
	//$scope.valorCeldaOriginal =  null;
			
	terminosService.obtenerTerminos().then(function(data){	
		$scope.inicializarDatosTerminos(data);					
	});    
		 			
	$scope.inicializarDatosTerminos = function(response) {
		 var data = response.comun;
		 $scope.fechaInicioCto  = data.fechaInicio;
		 $scope.fechaFinCto     = data.fechaFin;		  
		 $scope.tipoCambio      = data.tipoCambio;		 		
		 $scope.inflacion       = data.inflacion
		 $scope.contratoStatus = response.contrato.idEstatus;
		 		 
		 $scope.tiposCambio     = [];
		 $scope.tiposCambio.push({desc:"Selecciona un Valor", value: "0"})
		 
		 for(var i=0; i<data.tiposCambio.length; i++)
			 $scope.tiposCambio.push(data.tiposCambio[i]);
		     
		 if($scope.tipoCambio == null)
			$scope.tipoCambio = "0";
		 
		 $scope.formatos       = data.formatos;
		 
		 var pestana = data.pestana;
		 		 
		 if(pestana == "premium")
		 {			 
			 $('.nav-tabs a[href="#home"]').tab('show');
			 $scope.inicializarPremium();
		 }			
		 if(pestana == "premier")
		 {
			 $('.nav-tabs a[href="#menu1"]').tab('show');
			 $scope.inicializarPremier();
		 }			 
		 if(pestana == "libreria")
		 {
			 $('.nav-tabs a[href="#menu2"]').tab('show');
			 $scope.inicializarLibreria();
		 }			 
		 if(pestana == "movies")
		 {
			 $('.nav-tabs a[href="#menu3"]').tab('show');
			 $scope.inicializarMovies();
		 }			
		 if(pestana == "series")
		 {
			 $('.nav-tabs a[href="#menu4"]').tab('show');
			 $scope.inicializarSeries();
		 }			 		 
	};
	
	$scope.inicializarPremium = function() {
		
		terminosService.inicializarTablas("obtenerPremium").then(function(data) {		
			data = data.data.premium;
			
			var res = minimosService.inicializarMinimos(data.minimos, "Prem");			
			$scope.tablaMinGarPrem    = res.tablaMinGar;
			$scope.tablaMinAnioPrem   = res.tablaMinAnio;
			$scope.tipoMinPrem        = res.tipoMin;
			$scope.paisesPrem = data.precio.paises;
			
			minimosService.inicializarDivMinimos($scope.tipoMinPrem, "Prem");
			
			$scope.tablaReleasePrem   = releaseService.crearTablaRelease(data.release, null, null);
			$scope.tablaPreciosPrem   = precioService.crearTablaPrecios(data.precio.precio, $scope.paisesPrem, null);
			$scope.tablaPreciosAplicaPrem = data.precio.aplica;
			$scope.tablaPreciosPagoPPEPrem = data.precio.pagoPPE;
			$scope.tablaRevenuePrem   = revenueService.crearTablaRevenue(data.revenue.revenue, data.revenue.periodos, null);
			$scope.tablaExcepcionesPrem = revenueService.generaModeloTablaExcepciones( data );
			
		});
									
	};
	
	$scope.inicializarPremier = function() {
		
		terminosService.inicializarTablas("obtenerPremier").then(function(data) {		
			data = data.data.premium;	
			
			var res = minimosService.inicializarMinimos(data.minimos, "Pre");
			$scope.tablaMinGarPre    = res.tablaMinGar;
			$scope.tablaMinAnioPre   = res.tablaMinAnio;
			$scope.tipoMinPre        = res.tipoMin;
			$scope.paisesPre = data.precio.paises;
			
			minimosService.inicializarDivMinimos($scope.tipoMinPre, "Pre");
			
			$scope.tablaReleasePre   = releaseService.crearTablaRelease(data.release, null, null);
			$scope.tablaPreciosPre   = precioService.crearTablaPrecios(data.precio.precio, $scope.paisesPre, null);
			$scope.tablaPreciosAplicaPre = data.precio.aplica;	
			$scope.tablaPreciosPagoPPEPre = data.precio.pagoPPE;
			$scope.tablaRevenuePre   = revenueService.crearTablaRevenue(data.revenue.revenue, data.revenue.periodos, null);			
			$scope.tablaExcepcionesPre = revenueService.generaModeloTablaExcepciones( data );

		});									
	};
	
	$scope.inicializarLibreria = function() {
		
		terminosService.inicializarTablas("obtenerLibreria").then(function(data) {		
			data = data.data.libreria;
			
			var res = minimosService.inicializarMinimos(data.minimos, "Lib");
			
			$scope.tablaMinGarLib    = res.tablaMinGar;
			$scope.tablaMinAnioLib   = res.tablaMinAnio;
			$scope.tipoMinLib        = res.tipoMin;
			$scope.paisesLib = data.precio.paises;
			
			minimosService.inicializarDivMinimos($scope.tipoMinLib, "Lib");
			
			$scope.tablaPreciosLib     = precioService.crearTablaPrecios(data.precio.precio, $scope.paisesLib, null);
			$scope.tablaPreciosAplicaLib = data.precio.aplica;	
			$scope.tablaPreciosPagoPPELib = data.precio.pagoPPE;

			var revenue = {
					datosRevenueBox: [["1", "23", "rele1", "50", "50", "20", "20"]],
					datosRevenueBoxEncabezados : ["2016", "2017"]
			};
			
			$scope.tablaRevenueLibBox  = revenueService.crearTablaRevenueBox(data.revenue.datosRevenueBox, data.revenue.periodos);
			$scope.tablaExcepcionesLib = revenueService.generaModeloTablaExcepciones( data );
	 
			if(data.revenue.revenueGlobal)				
				   $scope.tipoRevenueLib  = "global";
			else $scope.tipoRevenueLib  = "box";
			
			var gl = [[null, null, null]];
			if(data.revenue.datosRevenueGlobal.length != 0)
				gl = data.revenue.datosRevenueGlobal;
			
			
			$scope.tablaRevenueLibGl = {encabezados:[], metadatos:null, columnasEliminar: null, datos:null, mensajes : null, valida:true, nombre: "Revenue"};
			$scope.tablaRevenueLibGl.datos  =  revenueService.poblaModeloTitulosExcepcionTabla(gl);

			
			if ($scope.tipoMinLib == "categoria"){
				$("#tRevBox").find('*').attr('disabled', false);
				$("#boxRevenueLibreria").attr('disabled', false);
			}
			else	{
				$("#tRevBox").find('*').attr('disabled', true);
				$("#boxRevenueLibreria").attr('disabled', true);
				
				if($scope.tipoRevenueLib == "box")
					$scope.tipoRevenueLib = "global";
			}
		    							
		});
									
	};
	
	$scope.inicializarMovies= function() {
		
		terminosService.inicializarTablas("obtenerMovies").then(function(data) {		
			data = data.data.movies;
			var res = minimosService.inicializarMinimos(data.minimos, "Mov");

			$scope.tablaMinGarMov    = res.tablaMinGar;
			$scope.tablaMinAnioMov   = res.tablaMinAnio;
			$scope.tipoMinMov        = res.tipoMin;
			$scope.paisesMov = data.precio.paises;
			
			minimosService.inicializarDivMinimos($scope.tipoMinMov, "Mov");
			
			$scope.tablaPreciosMov       = precioService.crearTablaPrecios(data.precio.precio, $scope.paisesMov, null);
			$scope.tablaPreciosMov.datos = precioService.ajustarTablaPrecio($scope.tablaPreciosMov.datos);
			$scope.categoriasMov         = data.categorias;						
			$scope.categoriasAgregarMov  = precioService.crearCategoriasAgregar(data.categorias, $scope.formatos, data.precio.precio);
			$scope.tablaPreciosAplicaMov = data.precio.aplica;	
			$scope.tablaPreciosPagoPPEMov = data.precio.pagoPPE;
			
			$scope.tablaRevenueMovBox =  revenueService.crearTablaRevenueMovie(data.revenue.datosRevenueBox, data.revenue.periodos, null);				
			$scope.tablaExcepcionesMov = revenueService.generaModeloTablaExcepciones( data );
			
			if(data.revenue.revenueGlobal)				
				   $scope.tipoRevenueMov  = "global";
			else $scope.tipoRevenueMov  = "box";
			
			
			var gl = [[null, null, null]];
			if(data.revenue.datosRevenueGlobal.length != 0)
				gl = data.revenue.datosRevenueGlobal;
			$scope.tablaRevenueMovGl = {encabezados:[], metadatos:null, columnasEliminar: null, datos:null, mensajes : null, valida:true, nombre: "Revenue"};
			$scope.tablaRevenueMovGl.datos  =  revenueService.poblaModeloTitulosExcepcionTabla(gl);
		
		});
									
	};
	
	$scope.inicializarSeries = function() {
		
		terminosService.inicializarTablas("obtenerSeries").then(function(data) {		
			data = data.data.series;
			var res = minimosService.inicializarMinimos(data.minimos, "Ser");
			
			$scope.tablaMinGarSer    = res.tablaMinGar;
			$scope.tablaMinAnioSer   = res.tablaMinAnio;
			$scope.tipoMinSer        = res.tipoMin;
			$scope.paisesSer = data.precio.paises;

			minimosService.inicializarDivMinimos($scope.tipoMinSer, "Ser");
						
			$scope.tablaPreciosSer       = precioService.crearTablaPrecios(data.precio.precio, $scope.paisesSer, null);
			$scope.tablaPreciosSer.datos = precioService.ajustarTablaPrecio($scope.tablaPreciosSer.datos);
			$scope.categoriasSer         = data.categorias;						
			$scope.categoriasAgregarSer  = precioService.crearCategoriasAgregar(data.categorias, $scope.formatos, data.precio);
			$scope.tablaPreciosAplicaSer = data.precio.aplica;	
			$scope.tablaPreciosPagoPPESer = data.precio.pagoPPE;
			
			$scope.tablaRevenueSerBox =  revenueService.crearTablaRevenueMovie(data.revenue.datosRevenueBox, data.revenue.periodos, null);			
			$scope.tablaExcepcionesSer = revenueService.generaModeloTablaExcepciones( data );
			
			if(data.revenue.revenueGlobal)				
				   $scope.tipoRevenueSer  = "global";
			else $scope.tipoRevenueSer  = "box";
			
			
			var gl = [[null, null, null]];
			if(data.revenue.datosRevenueGlobal.length != 0)
				gl = data.revenue.datosRevenueGlobal;
			$scope.tablaRevenueSerGl = {encabezados:[], metadatos:null, columnasEliminar: null, datos:null, mensajes : null, valida:true, nombre: "Revenue"};
			$scope.tablaRevenueSerGl.datos  =  revenueService.poblaModeloTitulosExcepcionTabla(gl);

		});
									
	};
	
	//Funciones para minimos
	$scope.inicializarDivsMinimos = function(tipo, seccion) {		
		minimosService.inicializarDivMinimos(tipo, seccion);
		
		if(seccion == "Lib"){
			if (tipo == "categoria"){
				$("#tRevBox").find('*').attr('disabled', false);
				$("#boxRevenueLibreria").attr('disabled', false);
			}
			else	{
				$("#tRevBox").find('*').attr('disabled', true);
				$("#boxRevenueLibreria").attr('disabled', true);
				
				if($scope.tipoRevenueLib == "box")
					$scope.tipoRevenueLib = "global";
			}	
		}
	};
	
	$scope.editarTablaMinGarantizados = function(operacion, index, encabezado, seccion, minimos, revenue) {		
		var res = minimosService.editarTablaMinGarantizados(operacion, index, encabezado, minimos, null, null, revenue);		
		if(seccion == "premium")	
		   $scope.tablaMinGarPrem  = res.tablaMinGar;
		if(seccion == "premier")	
		   $scope.tablaMinGarPre   = res.tablaMinGar;
		if(seccion == "libreria")	
		   $scope.tablaMinGarLib   = res.tablaMinGar;
		if(seccion == "movies")	
		   $scope.tablaMinGarMov   = res.tablaMinGar;
		if(seccion == "series")	
		   $scope.tablaMinGarSer   = res.tablaMinGar;
	};

	$scope.editarTablaMinGarantizadosAnio = function(operacion, index, encabezado, seccion, minimos) {
		var res = minimosService.editarTablaMinGarantizadosAnio(operacion, index, encabezado, minimos);		
		if(seccion == "premium")
		   $scope.tablaMinAnioPrem = res;
		if(seccion == "premier")
		   $scope.tablaMinAnioPre = res;
		if(seccion == "libreria")
		   $scope.tablaMinAnioPre = res;
		if(seccion == "movies")
		   $scope.tablaMinAnioMov = res;
		if(seccion == "series")
		   $scope.tablaMinAnioSer = res;
	};
	
	$scope.actualizarMinCelda = function(fila, columna, valor, seccion, tipoMin, minAnio, minCate, revBox) {		
		
		var res = minimosService.actualizarMinCelda(fila, columna, valor, tipoMin, minAnio, minCate);		
		if(seccion == "premium")
		{
			$scope.tablaMinAnioPrem = res.tablaMinAnio;
			$scope.tablaMinGarPrem  = res.tablaMinGar;	
		}
		if(seccion == "premier")
		{
			$scope.tablaMinAnioPre = res.tablaMinAnio;
			$scope.tablaMinGarPre  = res.tablaMinGar;	
		}
		if(seccion == "libreria")
		{
			$scope.tablaMinAnioLib = res.tablaMinAnio;
			$scope.tablaMinGarLib  = res.tablaMinGar;
			
			if(revBox){
				revBox.datos[fila][0].valor = minCate.datos[fila][0].valor;
				revBox.datos[fila][1].valor = minCate.datos[fila][1].valor;
				revBox.datos[fila][2].valor = minCate.datos[fila][2].valor;
			}
			
		}
		if(seccion == "movies")
		{
			$scope.tablaMinAnioMov = res.tablaMinAnio;
			$scope.tablaMinGarMov  = res.tablaMinGar;	
		}
		if(seccion == "series")
		{
			$scope.tablaMinAnioSer = res.tablaMinAnio;
			$scope.tablaMinGarSer  = res.tablaMinGar;	
		}
	};
	
	$scope.modificarFechasAnioMinimos = function(indice, evento, tipo, seccion) {		
		var fecha;
		if(tipo == "categoria")
		   fecha = evento.srcElement.textContent;
		else if(tipo == "anio")
		  fecha = evento.srcElement.value;
				
		var cadenas = fecha.split("-");		
		$("#fechaPerInicio").val(cadenas[0]);
		$("#fechaPerFin")   .val(cadenas[1]);
		$("#modificarPeriodo").modal("show");
		modificarPeriodo = true;
		indiceAnio       = indice;
		tipoMinimoFechas = tipo;		
		seccionTerminos  = seccion;
	};
	
	$scope.actualizarFechasMinimos = function() {				
		var fecha = $("#fechaPerInicio").val() + "-" + $("#fechaPerFin").val();			
		
		if(seccionTerminos == "premium")
		{
			if(tipoMinimoFechas == "categoria")		
			   $("#tabMinCatPrem").find("thead tr").find("th:nth-child(" + (indiceAnio + 1) + ")").text(fecha);				
			else if(tipoMinimoFechas == "anio")							
			   $scope.tablaMinAnioPrem.datos[indiceAnio][0].valor = fecha;	
		}
		if(seccionTerminos == "premier")
		{
			if(tipoMinimoFechas == "categoria")		
			   $("#tabMinCatPre").find("thead tr").find("th:nth-child(" + (indiceAnio + 1) + ")").text(fecha);				
			else if(tipoMinimoFechas == "anio")							
			   $scope.tablaMinAnioPre.datos[indiceAnio][0].valor = fecha;	
		}
		if(seccionTerminos == "libreria")
		{
			if(tipoMinimoFechas == "categoria")		
			   $("#tabMinCatLib").find("thead tr").find("th:nth-child(" + (indiceAnio + 1) + ")").text(fecha);				
			else if(tipoMinimoFechas == "anio")							
			   $scope.tablaMinAnioLib.datos[indiceAnio][0].valor = fecha;	
		}
		if(seccionTerminos == "movies")
		{
			if(tipoMinimoFechas == "categoria")		
			   $("#tabMinCatMov").find("thead tr").find("th:nth-child(" + (indiceAnio + 1) + ")").text(fecha);				
			else if(tipoMinimoFechas == "anio")							
			   $scope.tablaMinAnioMov.datos[indiceAnio][0].valor = fecha;	
		}
		if(seccionTerminos == "series")
		{
			if(tipoMinimoFechas == "categoria")		
			   $("#tabMinCatSer").find("thead tr").find("th:nth-child(" + (indiceAnio + 1) + ")").text(fecha);				
			else if(tipoMinimoFechas == "anio")							
			   $scope.tablaMinAnioSer.datos[indiceAnio][0].valor = fecha;	
		}
		$("#modificarPeriodo").modal("hide");
	};	
				
	$scope.agregarPeriodos = function(seccion, tipo) {		
		$("#chInflacion")   .prop('checked', false)
		$("#perNuevo")      .prop('checked', false)
		$("#perAnt")        .prop('checked', false)
	    $("#fechaAgInicio") .val('');
		$("#fechaAgFin")    .val('');		
		$("#agregarPeriodo").modal('show');		
		tipoMinimoFechas = tipo;		
		seccionTerminos  = seccion;
	};

	$scope.agregarNuevoPeriodo = function() {		
		if($("#fechaAgInicio").val() == "" || $("#fechaAgFin").val() == "")		
		   $("#labErroAgPer").text("No se han ingresado las fechas del periodo").show();		
		else
		{						
			if(seccionTerminos == "premium")
			{
				if(tipoMinimoFechas == "categoria")			
				   $scope.tablaMinGarPrem  = minimosService.agregarPeriodoCategoria($scope.tablaMinGarPrem, "fechaAgInicio", "fechaAgFin", "perAnt", "perNuevo");								
				else			
				   $scope.tablaMinAnioPrem = minimosService.agregarPeriodoAnio($scope.tablaMinAnioPrem, "fechaAgInicio", "fechaAgFin", "perAnt", "perNuevo");	
			}
			if(seccionTerminos == "premier")
			{
				if(tipoMinimoFechas == "categoria")			
				   $scope.tablaMinGarPre  = minimosService.agregarPeriodoCategoria($scope.tablaMinGarPre, "fechaAgInicio", "fechaAgFin", "perAnt", "perNuevo");								
				else			
				   $scope.tablaMinAnioPre = minimosService.agregarPeriodoAnio($scope.tablaMinAnioPre, "fechaAgInicio", "fechaAgFin", "perAnt", "perNuevo");	
			}
			if(seccionTerminos == "libreria")
			{
				if(tipoMinimoFechas == "categoria")			
				   $scope.tablaMinGarLib  = minimosService.agregarPeriodoCategoria($scope.tablaMinGarLib, "fechaAgInicio", "fechaAgFin", "perAnt", "perNuevo");								
				else			
				   $scope.tablaMinAnioLib = minimosService.agregarPeriodoAnio($scope.tablaMinAnioLib, "fechaAgInicio", "fechaAgFin", "perAnt", "perNuevo");	
			}
			if(seccionTerminos == "movies")
			{
				if(tipoMinimoFechas == "categoria")			
				   $scope.tablaMinGarMov  = minimosService.agregarPeriodoCategoria($scope.tablaMinGarMov, "fechaAgInicio", "fechaAgFin", "perAnt", "perNuevo");								
				else			
				   $scope.tablaMinAnioMov = minimosService.agregarPeriodoAnio($scope.tablaMinAnioMov, "fechaAgInicio", "fechaAgFin", "perAnt", "perNuevo");	
			}
			if(seccionTerminos == "series")
			{
				if(tipoMinimoFechas == "categoria")			
				   $scope.tablaMinGarSer  = minimosService.agregarPeriodoCategoria($scope.tablaMinGarSer, "fechaAgInicio", "fechaAgFin", "perAnt", "perNuevo");								
				else			
				   $scope.tablaMinAnioSer = minimosService.agregarPeriodoAnio($scope.tablaMinAnioSer, "fechaAgInicio", "fechaAgFin", "perAnt", "perNuevo");	
			}
			$("#agregarPeriodo").modal("hide");	
		}			
	};
	
	//funciones para releases
	$scope.editarTablaRelease = function(operacion, index, tipo, release, precios, revenue) {						
		var res = releaseService.editarTablaRelease(operacion, index, release,  precios, revenue, null, null, $scope.formatos);		
		if(tipo == "premium")
		{
			$scope.tablaReleasePrem = res.tablaRelease;  
			$scope.tablaPreciosPrem = res.tablaPrecios;
			$scope.tablaRevenuePrem = res.tablaRevenue;	
		}
		if(tipo == "premier")
		{
			$scope.tablaReleasePre = res.tablaRelease;  
			$scope.tablaPreciosPre = res.tablaPrecios;
			$scope.tablaRevenuePre = res.tablaRevenue;	
		}		
	};

	$scope.actualizarReleaseCelda = function(fila, columna, valorOriginal, tablaRelease, tablaRevenue , tablaPrecios) {
		
		var res = releaseService.actualizarReleaseCelda(fila, columna, tablaRelease, tablaRevenue , tablaPrecios, $scope.formatos, valorOriginal);
		if(tipo == "premium")
		{
			$scope.tablaReleasePrem = res.tablaRelease;  
			$scope.tablaPreciosPrem = res.tablaPrecios;
			$scope.tablaRevenuePrem = res.tablaRevenue;	
		}
		if(tipo == "premier")
		{
			$scope.tablaReleasePre = res.tablaRelease;  
			$scope.tablaPreciosPre = res.tablaPrecios;
			$scope.tablaRevenuePre = res.tablaRevenue;	
		} 				
	};
			
	//funciones para precio
	$scope.actualizarPrecioCelda = function(fila, columna, valor, seccion, tablaPrecios) {		
		if(seccion == "premium")
		   $scope.tablaPreciosPrem = precioService.actualizarPrecioCelda(fila, columna, valor, tablaPrecios);
		if(seccion == "premier")
		   $scope.tablaPreciosPre = precioService.actualizarPrecioCelda(fila, columna, valor, tablaPrecios);
		if(seccion == "libreria")
		{
			 var valClean =  $filter('numDigNormal')(valor.srcElement.value);		  
			  if(!isNaN(valClean) && parseFloat(valClean) > 0)
			  {
				  if(valClean == "")			  
					 $scope.tablaPreciosLib.datos[fila][columna].valor = null;    		  
				  else if(columna % 2 == 0)
		  	  {        		      			
		  		 $scope.tablaPreciosLib.datos[fila][columna].valor = $filter('numDigMoneda')(valor.srcElement.value,4); 
		  		 $scope.tablaPreciosLib.datos[fila][columna-1].valor = null;        		        			 
		  	  }    		    	
				  else
				  {
					 $scope.tablaPreciosLib.datos[fila][columna].valor = $filter('numDigMoneda')(valor.srcElement.value,4); 
		   		 $scope.tablaPreciosLib.datos[fila][columna+1].valor = null;
				  }
			  }
			  else    	      		        	  
				valor.srcElement.value = null;    	
		}
		if(seccion == "movies")
		   $scope.tablaPreciosMov = precioService.actualizarPrecioCelda(fila, columna, valor, tablaPrecios);
		if(seccion == "series")
		   $scope.tablaPreciosSer = precioService.actualizarPrecioCelda(fila, columna, valor, tablaPrecios);
	};
						
	$scope.abrirAgregarCategorias = function(seccion) {
		var prefix;
		if(seccion == "movies")
		{
			$scope.categoriasAgregarMov = precioService.ajustarCategoriasAgregar($scope.categoriasAgregarMov);
			prefix = "Mov";
		}
		if(seccion == "series")
		{
			$scope.categoriasAgregarSer = precioService.ajustarCategoriasAgregar($scope.categoriasAgregarSer);
			prefix = "Ser";
		}
		$("#agregarCategoriaMovies"+prefix).modal("show");						 
	};
				
	$scope.ajustarTablasPrecio = function(data, seccion, categoriasAgregar, paises) {				
		var prefix;
		var datos = precioService.ajustarTablasPrecio(data, categoriasAgregar, paises);
		 		  
		 if(seccion == "movies")
		 {
			 $scope.tablaPreciosMov = precioService.crearTablaPrecios(datos, paises, null);
			 $scope.tablaPreciosMov.datos = precioService.ajustarTablaPrecio($scope.tablaPreciosMov.datos);
			 prefix = "Mov";			 
			 $scope.ajustarCatRevenueBoxMovies($scope.tablaPreciosMov, seccion, $scope.tipoRevenueMov);
		 }
		 if(seccion == "series")
		 {
			 $scope.tablaPreciosSer = precioService.crearTablaPrecios(datos, paises, null);
			 $scope.tablaPreciosSer.datos = precioService.ajustarTablaPrecio($scope.tablaPreciosSer.datos);
			 prefix = "Ser";
			 $scope.ajustarCatRevenueBoxMovies($scope.tablaPreciosSer, seccion, $scope.tipoRevenueSer);
		 }  		
		$("#agregarCategoriaMovies"+prefix).modal("hide");
	};
	
	
	//funciones para revenue
	$scope.actualizarRevenueCelda = function(fila, columna, valor, seccion) {
		
		if(seccion == "premium")
		   $scope.tablaRevenuePrem.datos = revenueService.actualizarRevenueCelda(fila, columna, valor,$scope.tablaRevenuePrem.datos);
		if(seccion == "premier")
		   $scope.tablaRevenuePre.datos = revenueService.actualizarRevenueCelda(fila, columna, valor,$scope.tablaRevenuePre.datos);
		if(seccion == "movies")
		{
			if( $scope.tipoRevenueMov  ==  null)
				showError("se debe seleccionar un tipo de revenue.");
			else
			{
				if($scope.tipoRevenueMov  ==  'box')				
				   $scope.tablaRevenueMovBox.datos = revenueService.actualizarRevenueCelda(fila, columna, valor,$scope.tablaRevenueMovBox.datos);				   				
				else				
					$scope.tablaRevenueMovGl.datos = revenueService.actualizarRevenueCelda(fila, columna, valor,$scope.tablaRevenueMovGl.datos);														
			}								
		}
		if(seccion == "series")
		{
			if( $scope.tipoRevenueSer  ==  null)
				showError("se debe seleccionar un tipo de revenue.");
			else
			{
				if($scope.tipoRevenueSer  ==  'box')				
				   $scope.tablaRevenueSerBox.datos = revenueService.actualizarRevenueCelda(fila, columna, valor,$scope.tablaRevenueSerBox.datos);				   				
				else				
					$scope.tablaRevenueSerGl.datos = revenueService.actualizarRevenueCelda(fila, columna, valor,$scope.tablaRevenueSerGl.datos);														
			}								
		}

	};
	
	$scope.abrirModalRevenue = function(seccion) {		
		seccionTerminos = seccion;
		$("#fechaPerInicioRev") .val('');
		$("#fechaPerFinRev")    .val('');
		$("#labErroPerRev").hide();
		$("#aceptarPerEdRev").hide();
		$("#aceptarPerRev").show();
		$("#modificarPeriodoRev").modal('show');		
	};
	
	$scope.agregarPreiodoRevenue = function() {		
		
		if($("#fechaPerInicioRev") .val() == "" && $("#fechaPerFinRev").val() == "")
			$("#labErroPerRev").text("Se debe registrar el periodo").show();
		else
		{
			var fecha = $("#fechaPerInicioRev").val() +"-"+ $("#fechaPerFinRev").val();
			if(seccionTerminos == "premium")
			{
				 $scope.tablaRevenuePrem.encabezados.push({"valor":fecha, "colspan":"1"});
				 $scope.tablaRevenuePrem.subEncabezadosPrecio.push("% DLA");
				 $scope.tablaRevenuePrem.subEncabezadosPrecio.push("% ESTUDIO");			
				 
				 for(var i=0; i<$scope.tablaRevenuePrem.datos.length; i++)
				 {
					 $scope.tablaRevenuePrem.datos[i].push({"valor" : null});
					 $scope.tablaRevenuePrem.datos[i].push({"valor" : null});	 
				 }				 
			}
			if(seccionTerminos == "premier")
			{
				 $scope.tablaRevenuePre.encabezados.push({"valor":fecha, "colspan":"1"});
				 $scope.tablaRevenuePre.subEncabezadosPrecio.push("% DLA");
				 $scope.tablaRevenuePre.subEncabezadosPrecio.push("% ESTUDIO");			
				 
				 for(var i=0; i<$scope.tablaRevenuePre.datos.length; i++)
				 {
					 $scope.tablaRevenuePre.datos[i].push({"valor" : null});
					 $scope.tablaRevenuePre.datos[i].push({"valor" : null});	 
				 }				 
			}
			if(seccionTerminos == "movies")
			{
				if( $scope.tipoRevenueMov  ==  null)
					showError("se debe seleccionar un tipo de revenue.");
				else
				{
					if($scope.tipoRevenueMov  ==  'box')
					{						
					   $scope.tablaRevenueMovBox.encabezados.push({"valor":fecha, "colspan":"1"});
     				   $scope.tablaRevenueMovBox.subEncabezados.push("% DLA");
					   $scope.tablaRevenueMovBox.subEncabezados.push("% ESTUDIO");			
						 
					   for(var i=0; i<$scope.tablaRevenueMovBox.datos.length; i++)
					   {
						  $scope.tablaRevenueMovBox.datos[i].push({"valor" : null});
						  $scope.tablaRevenueMovBox.datos[i].push({"valor" : null});	 
					   }
					}
					else
					{
						var fila = [];
						
						revenueService.eliminaFilasVaciasEnTabla($scope.tablaRevenueMovGl.datos);
						revenueService.eliminaFilasVaciasEnTabla($scope.tablaRevenueMovGl.datos, 1);

						fila.push({"valor" : fecha});
						fila.push({"valor" : null});
						fila.push({"valor" : null});
						$scope.tablaRevenueMovGl.datos.push(fila);
					}										
				}								
			}
			if(seccionTerminos == "series")
			{
				if( $scope.tipoRevenueSer  ==  null)
					showError("se debe seleccionar un tipo de revenue.");
				else
				{
					if($scope.tipoRevenueSer  ==  'box')
					{						
					   $scope.tablaRevenueSerBox.encabezados.push({"valor":fecha, "colspan":"1"});
     				   $scope.tablaRevenueSerBox.subEncabezados.push("% DLA");
					   $scope.tablaRevenueSerBox.subEncabezados.push("% ESTUDIO");			
						 
					   for(var i=0; i<$scope.tablaRevenueSerBox.datos.length; i++)
					   {
						  $scope.tablaRevenueSerBox.datos[i].push({"valor" : null});
						  $scope.tablaRevenueSerBox.datos[i].push({"valor" : null});	 
					   }
					}
					else
					{
						var fila = [];
						
						revenueService.eliminaFilasVaciasEnTabla($scope.tablaRevenueSerGl.datos);
						revenueService.eliminaFilasVaciasEnTabla($scope.tablaRevenueSerGl.datos, 1);
						
						fila.push({"valor" : fecha});
						fila.push({"valor" : null});
						fila.push({"valor" : null});
						$scope.tablaRevenueSerGl.datos.push(fila);
					}										
				}								
			}
			if(seccionTerminos == "libreria")
			{
				if( $scope.tipoRevenueLib  ==  null)
					showError("se debe seleccionar un tipo de revenue.");
				else
				{
					if($scope.tipoRevenueLib  ==  'box')
					{						
					   $scope.tablaRevenueLibBox.encabezados.push({"valor":fecha, "colspan":"1"});
     				   $scope.tablaRevenueLibBox.subEncabezadosPrecio.push("% DLA");
					   $scope.tablaRevenueLibBox.subEncabezadosPrecio.push("% ESTUDIO");			
						 
					   for(var i=0; i<$scope.tablaRevenueLibBox.datos.length; i++)
					   {
						  $scope.tablaRevenueLibBox.datos[i].push({"valor" : null});
						  $scope.tablaRevenueLibBox.datos[i].push({"valor" : null});	 
					   }
					}
					else
					{
						var fila = [];
						
						revenueService.eliminaFilasVaciasEnTabla($scope.tablaRevenueLibGl.datos);
						revenueService.eliminaFilasVaciasEnTabla($scope.tablaRevenueLibGl.datos, 1);
						
						fila.push({"valor" : fecha});
						fila.push({"valor" : null});
						fila.push({"valor" : null});
						$scope.tablaRevenueLibGl.datos.push(fila);
					}										
				}								
			}
		}
		
		$("#modificarPeriodoRev").modal('hide');		
	};
	
	
	$scope.abrirModalRevenueFechas = function(seccion, tabla, fila, columna) {
		
		var valor = "";

		if (fila != null){
			valor = tabla[fila][0].valor;
		    indiceAnio = fila;
		}
		else if(columna != null){
			valor = tabla[columna].valor;
		    indiceAnio = columna;
		}
		
		if(valor && valor != null){
		
		    seccionTerminos = seccion;
		    $("#fechaPerInicioRev") .val(valor.split("-")[0]);
		    $("#fechaPerFinRev")    .val(valor.split("-")[1]);
		    $("#labErroPerRev").hide();
		    $("#aceptarPerEdRev").show();
		    $("#aceptarPerRev").hide();		
		    $("#modificarPeriodoRev").modal('show');
		
		}
	};
	
	$scope.editarPeriodoRevenue = function(columna, valor) {
		
		if($("#fechaPerInicioRev") .val() == "" && $("#fechaPerFinRev").val() == "")
			$("#labErroPerRev").text("Se debe registrar el periodo").show();
		else
		{		
			var valor = $("#fechaPerInicioRev") .val() +"-"+ $("#fechaPerFinRev").val();
			
			if(seccionTerminos == "premium")							
				$scope.tablaRevenuePrem.encabezados[indiceAnio].valor = valor;
			if(seccionTerminos == "premier")							
				$scope.tablaRevenuePre.encabezados[indiceAnio].valor = valor;
			if(seccionTerminos == "movies")
			{
				if( $scope.tipoRevenueMov  ==  null)
					showError("se debe seleccionar un tipo de revenue.");
				else
				{
					if($scope.tipoRevenueMov  ==  'box')					
					   $scope.tablaRevenueMovBox.encabezados[indiceAnio].valor = valor;     				   					
					else										
						$scope.tablaRevenueMovGl.datos[indiceAnio][0].valor = valor;													
				}								
			}
			if(seccionTerminos == "series")
			{
				if( $scope.tipoRevenueSer  ==  null)
					showError("se debe seleccionar un tipo de revenue.");
				else
				{
					if($scope.tipoRevenueSer  ==  'box')					
					   $scope.tablaRevenueSerBox.encabezados[indiceAnio].valor = valor;     				   					
					else										
						$scope.tablaRevenueSerGl.datos[indiceAnio][0].valor = valor;													
				}								
			}
		    if(seccionTerminos == "libreria")
			{
				if( $scope.tipoRevenueLib  ==  null)
					showError("se debe seleccionar un tipo de revenue.");
				else
				{
					if($scope.tipoRevenueLib  ==  'box')				
					   $scope.tablaRevenueLibBox.encabezados[indiceAnio].valor = valor;    
					else				
						$scope.tablaRevenueLibGl.datos[indiceAnio][0].valor = valor;	
				}								
			}
		    
			 $("#modificarPeriodoRev").modal('hide');
		 }	
	};
	
	$scope.ajustarCatRevenueBoxMovies = function(tablaPrecio, seccion, tipoRevenue) {
		
		var cats = [];
		
							
			for(var i=0; i< tablaPrecio.datos.length; i++)
			{
			   if(tablaPrecio.datos[i][0].valor != null)
				   cats.push(tablaPrecio.datos[i][0].valor);
			}
		
			var tablaRevenue = seccion == 'movies' ? $scope.tablaRevenueMovBox : $scope.tablaRevenueSerBox;
			
			var temp = tablaRevenue.datos;
			tablaRevenue.datos = [];
			for(var i=0; i<cats.length; i++)
			{
				var encontrada = false;
				for(var j=0; j<temp.length; j++)
				{
					if(temp[j][0].valor != null)
					{					
						if(cats[i] == temp[j][0].valor)
						{
							var fila = [];
							for(var k=0; k<temp[j].length; k++)								
								fila.push( {"valor" : temp[j][k].valor} );
							tablaRevenue.datos.push(fila);
							encontrada = true;
						}	
					}				
				}	
				if(!encontrada)
				{
					var fila = [];
					for(var k=0; k<temp[0].length; k++)
					   fila.push( {"valor" : null} );
					fila[0].valor = cats[i];
					tablaRevenue.datos.push(fila);
				}
			}
			
			if(seccion == 'movies')
			   $scope.tablaRevenueMovBox.datos = tablaRevenue.datos;
			if(seccion == 'series')
			   $scope.tablaRevenueSerBox.datos = tablaRevenue.datos;
		
	};
	
	//funciones para importar exceles					
	$scope.cargarDatos = function() {
		uploader.startUpload("modalCarga");
	};
	
	$scope.verificarDatos = function() {
		
		$('#modalImportarArchivo').modal('hide');
		if (datosSubir != null && datosSubir.datosMatriz != null) 
		{			
			if(uploader.operacion == "minimos")			
			   this.importarMinimos(datosSubir.datosMatriz);
			if(uploader.operacion == "release")
			   this.importarRelease(datosSubir.datosMatriz);
			if(uploader.operacion == "precio")
			   this.importarPrecio(datosSubir.datosMatriz);						
		}
	};
	
	$scope.abrirModalMinimos = function(seccion) {		
		seccionTerminos = seccion;
		terminosService.generaVarCarga("cargaFeesDiv", seccion, "minimos", "");				
	};
	
	$scope.importarMinimos = function(data) {				
		if(seccionTerminos == "premium")
		{
			var res = minimosService.importarExcelMin(data, $scope.tablaMinGarPrem, null, null);
		    $scope.tablaMinGarPrem = res.tablaMinGar;
		}
		if(seccionTerminos == "premier")
		{
			var res = minimosService.importarExcelMin(data, $scope.tablaMinGarPre, null, null);
		    $scope.tablaMinGarPre = res.tablaMinGar;
		}
		if(seccionTerminos == "libreria")
		{
			var res = minimosService.importarExcelMin(data, $scope.tablaMinGarLib, null, null);
		    $scope.tablaMinGarLib = res.tablaMinGar;
		}
		if(seccionTerminos == "movies")
		{
			var res = minimosService.importarExcelMin(data, $scope.tablaMinGarMov, null, null);
		    $scope.tablaMinGarMov = res.tablaMinGar;
		}
		if(seccionTerminos == "series")
		{
			var res = minimosService.importarExcelMin(data, $scope.tablaMinGarSer, null, null);
		    $scope.tablaMinGarSer = res.tablaMinGar;
		}
	};
	
	$scope.abrirModalRelease = function(seccion) {
		seccionTerminos = seccion;
		terminosService.generaVarCarga("cargaFeesDiv", seccion, "release", "");				
	};
	
	$scope.importarRelease = function(data) {		
		if(seccionTerminos == "premium")
		{
			var res = releaseService.importarExcelRelease(data, $scope.tablaReleasePrem, $scope.tablaPreciosPrem, $scope.tablaRevenuePrem, null, null, $scope.formatos);
			$scope.tablaReleasePrem = res.tablaRelease;  
			$scope.tablaPreciosPrem = res.tablaPrecios;
			$scope.tablaRevenuePrem = res.tablaRevenue;
		}
		if(seccionTerminos == "premier")
		{
			var res = releaseService.importarExcelRelease(data, $scope.tablaReleasePre, $scope.tablaPreciosPre, $scope.tablaRevenuePre, null, null, $scope.formatos);
			$scope.tablaReleasePre = res.tablaRelease;  
			$scope.tablaPreciosPre = res.tablaPrecios;
			$scope.tablaRevenuePre = res.tablaRevenue;
		}							
	};
	
	$scope.abrirModalPrecio = function(seccion) {
		seccionTerminos = seccion;		
		terminosService.generaVarCarga("cargaFeesDiv", seccion, "precio", "");		
	};
	
	$scope.importarPrecio = function(data) {				
		if(seccionTerminos == "premium")
		   $scope.tablaPreciosPrem = precioService.importarExcelPrecio(data, $scope.tablaPreciosPrem);
		if(seccionTerminos == "premier")
		   $scope.tablaPreciosPre = precioService.importarExcelPrecio(data, $scope.tablaPreciosPre);
		if(seccionTerminos == "libreria")
		{
			data.splice(0, 2);		
			for(var i=0; i<$scope.tablaPreciosLib.datos.length; i++)
			{
				for(var j=0; j<$scope.tablaPreciosLib.datos[0].length; j++)
				{
					if(j>0 && data[i].fila[j] != null && data[i].fila[j] != "")
						$scope.tablaPreciosLib.datos[i][j].valor = $filter('numDigMoneda')(data[i].fila[j],4);
					else
						$scope.tablaPreciosLib.datos[i][j].valor = data[i].fila[j];	
				}
			}			
		}
		if(seccionTerminos == "movies")
		   $scope.tablaPreciosMov = precioService.importarExcelPrecio(data, $scope.tablaPreciosMov);
		if(seccionTerminos == "series")
			   $scope.tablaPreciosSer = precioService.importarExcelPrecio(data, $scope.tablaPreciosSer);
	};
	
	//funcion para exportar excel
	$scope.exportarExcel = function(seccion, operacion, datos, encabezados) {
		var enc = [];					   			
		datos   = terminosService.crearMatriz(datos);				
		
		var prefix;
		if(seccion == "premium")
			prefix = "Prem";
		if(seccion == "premier")
			prefix = "Pre";
		if(seccion == "libreria")
			prefix = "Lib";
		if(seccion == "movies")
			prefix = "Mov";
		if(seccion == "series")
			prefix = "Ser";
			
		if(operacion == "min_cat" || operacion == "min_anio")
		   enc = minimosService.obtenerEncabezadosExportar(operacion, encabezados, "tabAnioMin"+prefix);				
		else if(operacion == "release")		
		   enc = releaseService.obtenerEncabezadosExportar();		   			
		else if(operacion == "precio")
		{			
			if(seccion == "libreria")
			{
				var temp = datos;
				var fila = [];				
				fila.push("Formato");
					
				for(var i=0; i<(datos[0].length-2)/2;i++)
				{
					fila.push("ML");
				    fila.push("Dolares");
				}
					
				var datos1 = [];
				datos1.push(fila);
					
				for(var i=0; i<temp.length;i++)
					datos1.push(temp[i]);
				datos = datos1;	
					
				enc[0] = "Precio por evento";				
				for(var i=0; i<encabezados.length;i++)
				{
					enc.push(encabezados[i].valor);
					enc.push("");
				}
			}
			else
			{
				var res = precioService.obtenerEncabezadosExportar(datos, encabezados);
			    enc   = res.encabezados;
			    datos = res.datos;	
			}			
		}		   					    			
		terminosService.descargarArchivo(seccion, operacion, $("#idCto").val(), datos, enc).then(function(data) {  });				
	};
	
	//funciones para guardar terminos secciones
	$scope.guardarPremium = function() {
		var continuar = true;
		var tablas = [];
		
		continuar = minimosService.validarMinimos($scope.tablaMinAnioPrem, $scope.tablaMinGarPrem, $scope.tipoMinPrem, "tabMinCatPrem", "tabAnioMinPrem");
		
		if(continuar)
		   continuar = releaseService.validarRelease($scope.tablaReleasePrem);
		   
		if(continuar)
		   continuar = revenueService.validarRevenue($scope.tablaRevenuePrem, null, false, false);
		   
		if($scope.tablaPreciosAplicaPrem && continuar)
		   continuar = precioService.validaPrecioPremium($scope.tablaPreciosPrem, 2);	

		if(continuar)		
		   continuar = terminosService.validarTipoCambio($scope.tipoCambio);		
		
		if (continuar) 
		{			
			var minimos = { idCatEli   : null, idCatMin : null, 
					         aniosMin   : minimosService.obtenerMinAniosGuardar($scope.tipoMinPrem, "tabMinCatPrem", "tabAnioMinPrem"),			
					         minimos    : terminosService.crearMatriz($scope.tablaMinGarPrem), 
					         minimosAnio: terminosService.crearMatriz($scope.tablaMinAnioPrem),
					         tipoMin    : $scope.tipoMinPrem
					        };
			 
			var terminos = {										
					"releaseL"     : terminosService.crearMatriz($scope.tablaReleasePrem),					
					"revenue"      : { revenueL :     terminosService.crearMatriz($scope.tablaRevenuePrem), 
						               periodos :     terminosService.crearArregloEncabezados($scope.tablaRevenuePrem)
					},
					"precio"       : { precioL  : terminosService.crearMatriz($scope.tablaPreciosPrem), aplica : $scope.tablaPreciosAplicaPrem, paises : $scope.paisesPrem, pagoPPE : $scope.tablaPreciosPagoPPEPrem},										
					"minimos"      : {
						minimosCa   :  minimos.minimos,
						minimosAn   :  minimos.minimosAnio,
				    	anios       :  minimos.aniosMin,
				    	tipoMin     :  minimos.tipoMin			
					},
					"excepciones"   :{ 
			                           periodos : revenueService.generaMatrizPeriodos($scope.tablaExcepcionesPrem.periodos),
			                           lista :    revenueService.generaMatrizExcepciones($scope.tablaExcepcionesPrem.excepciones)
					},
					"comun"        :{
						 tipoCambio  : $scope.tipoCambio,
						 inflacion   : $("#inflacionTx").val() == "" ? null : $("#inflacionTx").val(),
						 fechaInicio : null,
						 fechaFin	 : null						
					}
			}	    		    		    
			
			var data     = { "premium" : terminos, idContrato: $("#idCto").val() };
			
			terminosService.guardar(data, "guardarPremium").then(function(data) {				    
					if (data.error != null)
						showError(data.error);
					else
					{
						showMessage("Se han guardado los datos de la seccion Premium.");
						$scope.inicializarPremium();																		
					}
            });
			
		}
	};
	
	$scope.guardarPremier = function() {
		var continuar = true;
		var tablas = [];

		continuar = minimosService.validarMinimos($scope.tablaMinAnioPre, $scope.tablaMinGarPre, $scope.tipoMinPre, "tabMinCatPre", "tabAnioMinPre");
		
		if(continuar)
		   continuar = releaseService.validarRelease($scope.tablaReleasePre);
		
		 if(continuar)
		   continuar = revenueService.validarRevenue($scope.tablaRevenuePre, null, false. false);
		
		if($scope.tablaPreciosAplicaPre && continuar)
		   continuar = precioService.validaPrecioPremium($scope.tablaPreciosPre, 2);
		
		if(continuar)		
		   continuar = terminosService.validarTipoCambio($scope.tipoCambio);		
		
		if (continuar) 
		{			
			var minimos = { idCatEli   : null, idCatMin : null, 
					         aniosMin   : minimosService.obtenerMinAniosGuardar($scope.tipoMinPre, "tabMinCatPre", "tabAnioMinPre"),			
					         minimos    : terminosService.crearMatriz($scope.tablaMinGarPre), 
					         minimosAnio: terminosService.crearMatriz($scope.tablaMinAnioPre),
					         tipoMin    : $scope.tipoMinPre
					        };
			
			var terminos = {															
					"releaseL"     : terminosService.crearMatriz($scope.tablaReleasePre),					
					"revenue"      : { revenueL : terminosService.crearMatriz($scope.tablaRevenuePre), periodos: terminosService.crearArregloEncabezados($scope.tablaRevenuePre)},
					"precio"       : { precioL  : terminosService.crearMatriz($scope.tablaPreciosPre), aplica : $scope.tablaPreciosAplicaPre, paises : $scope.paisesPre, pagoPPE : $scope.tablaPreciosPagoPPEPre},										
					"minimos"      : {
						minimosCa   :  minimos.minimos,
						minimosAn   :  minimos.minimosAnio,
				    	anios       :  minimos.aniosMin,
				    	tipoMin     :  minimos.tipoMin			
					},
					"excepciones"   :{
                        periodos : revenueService.generaMatrizPeriodos($scope.tablaExcepcionesPre.periodos),
                        lista :    revenueService.generaMatrizExcepciones($scope.tablaExcepcionesPre.excepciones)
		            },
					"comun"        :{
						 tipoCambio  : $scope.tipoCambio,
						 inflacion   : $("#inflacionTx").val() == "" ? null : $("#inflacionTx").val(),
						 fechaInicio : null,
						 fechaFin	 : null						
					}
			}	    		    		    
			
			var data     = { "premium" : terminos, idContrato: $("#idCto").val() };
			
			
			terminosService.guardar(data, "guardarPremier").then(function(data) {				    
					if (data.error != null)
						showError(data.error);
					else
					{
						showMessage("Se han guardado los datos de la seccion Premier.");
						$scope.inicializarPremier();																		
					}
            });			
		}
	};
	
	$scope.guardarLibreria = function() {
		var continuar = true;
		var tablas = [];
		
		continuar = minimosService.validarMinimos($scope.tablaMinAnioLib, $scope.tablaMinGarLib, $scope.tipoMinLib, "tabMinCatLib", "tabAnioMinLib");
	    
		if(continuar){
			if($scope.tipoRevenueLib  ==  'box'){
				var opciones = [];
				for(var i=2; i<$scope.tablaRevenueLibBox.datos[0].length; i++)
					opciones.push(i);

				continuar = revenueService.validarRevenue($scope.tablaRevenueLibBox, opciones, false, false);
			}
			else{
				 
				$scope.tablaRevenueLibGl.encabezados = revenueService.generaPeriodos($scope.tablaRevenueLibGl.datos);
			    continuar = revenueService.validarRevenue($scope.tablaRevenueLibGl, null, false, false);
	   
			}
		}
			
		if($scope.tablaPreciosAplicaLib && continuar)
			   continuar = precioService.validaPrecioPremium($scope.tablaPreciosLib, 1);

		if(continuar)		
		   continuar = terminosService.validarTipoCambio($scope.tipoCambio);		
		
		if (continuar) 
		{			
			var minimos = { idCatEli   : null, idCatMin : null, 
					         aniosMin   : minimosService.obtenerMinAniosGuardar($scope.tipoMinLib, "tabMinCatLib", "tabAnioMinLib"),			
					         minimos    : terminosService.crearMatriz($scope.tablaMinGarLib), 
					         minimosAnio: terminosService.crearMatriz($scope.tablaMinAnioLib),
					         tipoMin    : $scope.tipoMinLib
					        };
			
			var terminos = {																		
					
					"revenue"      : { 
						               revenueGlobal : $scope.tipoRevenueLib == 'global'? true : false, 
						 		       revenueBox    : $scope.tipoRevenueLib == 'box'   ? true : false,	
									   periodos:    revenueService.generaMatrizPeriodos($scope.tablaRevenueLibBox.encabezados),
								       datosGlobal   : terminosService.crearMatriz($scope.tablaRevenueLibGl),
						               datosBox :   revenueService.generaMatrizExcepciones($scope.tablaRevenueLibBox.datos)
						             },
					"precio"       : { precioL  : terminosService.crearMatriz($scope.tablaPreciosLib), aplica : $scope.tablaPreciosAplicaLib, paises : $scope.paisesLib, pagoPPE : $scope.tablaPreciosPagoPPELib},										

					"minimos"      : {
						minimosCa   :  minimos.minimos,
						minimosAn   :  minimos.minimosAnio,
				    	anios       :  minimos.aniosMin,
				    	tipoMin     :  minimos.tipoMin			
					},
					"excepciones"   :{
                        periodos : revenueService.generaMatrizPeriodos($scope.tablaExcepcionesLib.periodos),
                        lista :    revenueService.generaMatrizExcepciones($scope.tablaExcepcionesLib.excepciones)
		            },
					"comun"        :{
						 tipoCambio  : $scope.tipoCambio,
						 inflacion   : $("#inflacionTx").val() == "" ? null : $("#inflacionTx").val(),
						 fechaInicio : null,
						 fechaFin	 : null						
					}
			}	    		    		    
			
			var data     = { "libreria" : terminos, idContrato: $("#idCto").val() };
			
			terminosService.guardar(data, "guardarLibreria").then(function(data) {				    
					if (data.error != null)
						showError(data.error);
					else
					{
						showMessage("Se han guardado los datos de la seccion Libreria.");
						$scope.inicializarLibreria();																		
					}
            });			
		}
	};

	$scope.guardarMovies = function() {
		var continuar = true;
		var tablas = [];
		
		continuar = minimosService.validarMinimos($scope.tablaMinAnioMov, $scope.tablaMinGarMov, $scope.tipoMinMov, "tabMinCatMov", "tabAnioMinMov");
		
		if(continuar){
			if($scope.tipoRevenueMov  ==  'box'){
			   if($scope.tablaPreciosAplicaMov)
			      continuar = revenueService.validarRevenue($scope.tablaRevenueMovBox, null, false, false);
			}
			else{
				$scope.tablaRevenueMovGl.encabezados = revenueService.generaPeriodos($scope.tablaRevenueMovGl.datos);
			    continuar = revenueService.validarRevenue($scope.tablaRevenueMovGl, null, false, false);
			}
		}
		   
		if($scope.tablaPreciosAplicaMov && continuar)
		  continuar = precioService.validaPrecioPremium($scope.tablaPreciosMov, 2);	
		
		if(continuar)		
		   continuar = terminosService.validarTipoCambio($scope.tipoCambio);		
		
		if (continuar) 
		{			
			var minimos = { idCatEli   : null, idCatMin : null, 
					         aniosMin   : minimosService.obtenerMinAniosGuardar($scope.tipoMinMov, "tabMinCatMov", "tabAnioMinMov"),			
					         minimos    : terminosService.crearMatriz($scope.tablaMinGarMov), 
					         minimosAnio: terminosService.crearMatriz($scope.tablaMinAnioMov),
					         tipoMin    : $scope.tipoMinMov
					        };
					
			var terminos = {																		
					"revenue"      : { revenueGlobal : $scope.tipoRevenueMov == 'global'? true : false, 
							 		   revenueBox    : $scope.tipoRevenueMov == 'box'   ? true : false,					
									   periodos      : terminosService.crearArregloEncabezados($scope.tablaRevenueMovBox),
									   datosGlobal   : terminosService.crearMatriz($scope.tablaRevenueMovGl),
									   datosBox      : terminosService.crearMatriz($scope.tablaRevenueMovBox)
									 },
					"precio"       : {  precioL :terminosService.crearMatrizMovies($scope.tablaPreciosMov), aplica : $scope.tablaPreciosAplicaMov, paises : $scope.paisesMov, pagoPPE : $scope.tablaPreciosPagoPPEMov},										
					"minimos"      : {
						minimosCa   :  minimos.minimos,
						minimosAn   :  minimos.minimosAnio,
				    	anios       :  minimos.aniosMin,
				    	tipoMin     :  minimos.tipoMin			
					},
					"excepciones"   :{
                        periodos : revenueService.generaMatrizPeriodos($scope.tablaExcepcionesMov.periodos),
                        lista :    revenueService.generaMatrizExcepciones($scope.tablaExcepcionesMov.excepciones)
		            },
					"comun"        :{
						 tipoCambio  : $scope.tipoCambio,
						 inflacion   : $("#inflacionTx").val() == "" ? null : $("#inflacionTx").val(),
						 fechaInicio : null,
						 fechaFin	 : null						
					}
			}	    		    		    
			
			var data     = { "movies" : terminos, idContrato: $("#idCto").val() };
						
			terminosService.guardar(data, "guardarMovies").then(function(data) {				    
					if (data.error != null)
						showError(data.error);
					else
					{
						showMessage("Se han guardado los datos de la seccion.");
						$scope.inicializarMovies();																		
					}
            });			
		}
	};

	$scope.guardarSeries = function() {
		var continuar = true;
		var tablas = [];
		
		continuar = minimosService.validarMinimos($scope.tablaMinAnioSer, $scope.tablaMinGarSer, $scope.tipoMinSer, "tabMinCatSer", "tabAnioMinSer");
		   
		if(continuar){
			if($scope.tipoRevenueSer  ==  'box'){
				if($scope.tablaPreciosAplicaSer)
				   continuar = revenueService.validarRevenue($scope.tablaRevenueSerBox, null, false, false);
			}
			else{
				$scope.tablaRevenueSerGl.encabezados = revenueService.generaPeriodos($scope.tablaRevenueSerGl.datos);
				continuar = revenueService.validarRevenue($scope.tablaRevenueSerGl, null, false, false);
			}
		}
		   
		if($scope.tablaPreciosAplicaSer && continuar)
			  continuar = precioService.validaPrecioPremium($scope.tablaPreciosSer, 2);	
		
		if(continuar)		
		   continuar = terminosService.validarTipoCambio($scope.tipoCambio);		
		
		if (continuar) 
		{			
			var minimos = { idCatEli   : null, idCatMin : null, 
					         aniosMin   : minimosService.obtenerMinAniosGuardar($scope.tipoMinSer, "tabMinCatSer", "tabAnioMinSer"),			
					         minimos    : terminosService.crearMatriz($scope.tablaMinGarSer), 
					         minimosAnio: terminosService.crearMatriz($scope.tablaMinAnioSer),
					         tipoMin    : $scope.tipoMinSer
					        };
			
			var terminos = {																		
					"revenue"     : {  revenueGlobal : $scope.tipoRevenueSer == 'global'? true : false, 
							 		   revenueBox    : $scope.tipoRevenueSer == 'box'   ? true : false,					
									   periodos      : terminosService.crearArregloEncabezados($scope.tablaRevenueSerBox),
									   datosGlobal   : terminosService.crearMatriz($scope.tablaRevenueSerGl),
									   datosBox      : terminosService.crearMatriz($scope.tablaRevenueSerBox)
									 },

					"precio"       : {  precioL :terminosService.crearMatrizMovies($scope.tablaPreciosSer), aplica : $scope.tablaPreciosAplicaSer, paises : $scope.paisesSer, pagoPPE : $scope.tablaPreciosPagoPPESer},										
					"minimos"      : {
						minimosCa   :  minimos.minimos,
						minimosAn   :  minimos.minimosAnio,
				    	anios       :  minimos.aniosMin,
				    	tipoMin     :  minimos.tipoMin			
					},
					"excepciones"   :{
                        periodos : revenueService.generaMatrizPeriodos($scope.tablaExcepcionesSer.periodos),
                        lista :    revenueService.generaMatrizExcepciones($scope.tablaExcepcionesSer.excepciones)
		            },
					"comun"        :{
						 tipoCambio  : $scope.tipoCambio,
						 inflacion   : $("#inflacionTx").val() == "" ? null : $("#inflacionTx").val(),
						 fechaInicio : null,
						 fechaFin	 : null						
					}
			}	    		    		    
			
			var data     = { "series" : terminos, idContrato: $("#idCto").val() };
						
			terminosService.guardar(data, "guardarSeries").then(function(data) {				    
					if (data.error != null)
						showError(data.error);
					else
					{
						showMessage("Se han guardado los datos de la seccion.");
						$scope.inicializarSeries();																		
					}
            });			
		}
	};

	$scope.setColspan = function(x) {
		return x.colspan;
	};
	
	$scope.abrirModalExcepcion = function(tablaExcepcionesOrigen) {
		$scope.tablaExcepciones = angular.copy(tablaExcepcionesOrigen);
		$scope.tablaBackup = angular.copy(tablaExcepcionesOrigen);
		$scope.tablaPivote = tablaExcepcionesOrigen;
		
		$("#etiquetaErrorExcepcion").hide();
		$("#excepcionDialog").modal('show');		
	};
	
	$scope.eligeTituloExcepcion = function(eleccion, tablaOrigen, tablaDestino){
		
		var eliminados = [];
		var empty = [];
		var vaciosContador = 0;
		
		var columnas = ($scope.tablaExcepciones.conceptos.length / 2) + 1;

		for(var x=0 ; x<tablaDestino.length; x++)
		   for(var y=(tablaDestino[x].length / 2)  ; y<columnas; y++){
			   tablaDestino[x].push({"valor" : null});
			   tablaDestino[x].push({"valor" : null});
		   }
		
		for(var x=0 ; x<tablaOrigen.length; x++)
		   for(var y=(tablaOrigen[x].length / 2)  ; y<columnas; y++){
			   tablaOrigen[x].push({"valor" : null});
			   tablaOrigen[x].push({"valor" : null});
		   }

		if(!revenueService.esTituloArregloInvalido(eleccion, 2, true)){
		   revenueService.eliminaFilasVaciasEnTabla(tablaDestino, 2);
		   
		   for(var x=0; x<tablaOrigen[0].length; x++)
			   empty.push({"valor" : ""});
		
		   var index = tablaOrigen.indexOf(eleccion);
		   var eleccion = tablaOrigen[index];
		
		   tablaDestino.push(eleccion);
		   tablaOrigen.splice(index, 1);
		   
		   if(tablaOrigen.length == 0)tablaOrigen.push(empty);
		}
		
	};
	
	$scope.abrirModalPeriodosExcepcion = function(seccion, operacion, tabla, indice) {	
		var fechaInicial = "";
		var fechaFinal = "";
		
		seccionTerminos = seccion;	
		$scope.operacionExcepcion = operacion;
		$scope.indicePeriodoExcepcion = indice;
		
		if(tabla && !isNaN(indice) && tabla[indice].valor){
			fechaInicial = tabla[indice].valor.split("-")[0];
			fechaFinal = tabla[indice].valor.split("-")[1];
		}
		
		$("#fechaInicialPeriodoExcepcion").val(fechaInicial);
		$("#fechaFinalPeriodoExcepcion").val(fechaFinal);
					
		$("#botonAceptarAgregarPeriodoExcepcion").show();
		
		$("#etiquetaErrorPeriodo").hide();

		$("#excepcionDialog").modal('hide');		
		$("#periodosExcepcion").modal('show');		
	};
	

	$scope.operaPeriodoExcepcion = function(tabla) {	
		
	var fechaInicial = $("#fechaInicialPeriodoExcepcion") .val();
	var fechaFinal = $("#fechaFinalPeriodoExcepcion").val();
		
	if( fechaInicial == "" &&  fechaFinal == "")
			$("#etiquetaErrorPeriodo").text("Se debe registrar el periodo").show();
	else {
		var fechaFin    = minimosService.generarFechaHora(fechaFinal).getTime();		
		var fechaInicio = minimosService.generarFechaHora(fechaInicial).getTime();

        if(fechaFin <= fechaInicio)
			$("#etiquetaErrorPeriodo").text("La fecha final debe ser mayor a la fecha inicial").show();
		else
		{
			var fecha = fechaInicial + "-" + fechaFinal;

			if ($scope.operacionExcepcion == 'AGREGAR'){

			     tabla.periodos.push({"valor":fecha});
			     tabla.conceptos.push("% DLA");
			     tabla.conceptos.push("% ESTUDIO");			
				 
				 for(var i=0; i<tabla.excepciones.length; i++)
				 {
					 tabla.excepciones[i].push({"valor" : null});
					 tabla.excepciones[i].push({"valor" : null});	 
				 }				 

			}
			if ($scope.operacionExcepcion == 'EDITAR'){
				tabla.periodos[$scope.indicePeriodoExcepcion].valor = fecha;
			}
			
			$("#periodosExcepcion").modal('hide');
			$("#excepcionDialog").modal('show');	
		}
	}

	};
	
	$scope.cancelarModalExcepciones = function( tabla ) {		
		tabla = angular.copy($scope.tablaBackup);
		$("#excepcionDialog").modal('hide');		
	};
	
	$scope.aceptarModalExcepciones = function( tabla ) {

    	var resultado = {validacion : true, mensaje: ""};
    	
		if(!(tabla.excepciones.length == 1 && revenueService.esTituloArregloInvalido(tabla.excepciones[0], null, true)))
		   resultado = revenueService.validaDatosTablaVacios(tabla.excepciones, null, false);
		
		if(resultado.validacion)
			resultado = revenueService.validaPeriodosTabla(tabla.periodos);
		
		if(!resultado.validacion){
			tabla = angular.copy($scope.tablaBackup);
			$("#etiquetaErrorExcepcion").text( resultado.mensaje ).show();
		}
		else{
			$("#excepcionDialog").modal('hide');	
			revenueService.copiaReferenciaTablaModelo(tabla, $scope.tablaPivote); 
		}
	};
	
	
	$scope.eliminaPeriodoExcepcion = function(indice, tabla) {
		
		if(tabla && tabla.excepciones[0] && tabla.excepciones[0].length > 4){
		   for(var x=0 ; x<tabla.excepciones.length; x++)
			   tabla.excepciones[x].splice((indice+1)*2, 2);
		   
		   for(var x=0 ; x<tabla.titulos.length; x++)
			   tabla.titulos[x].splice((indice+1)*2, 2);
		   
		   tabla.conceptos.splice(indice*2, 2);
		   tabla.periodos.splice(indice, 1);
		}
	};
	
	//funciones para revenue
	$scope.calculaRevenueCelda = function(fila, columna, tabla) {
		revenueService.calculaRevenueCelda(fila, columna, tabla);
	};
	
	

};

registraController("terminosController", terminosController);