function TerminoService() {

	this.verificarPago = function(pago) {
		var resultado = { validacion: true, mensaje: null };
		if (pago.monto == null || pago.monto == "")
			resultado.mensaje = "Monto no debe ser vac\u00EDo.";
		else if (isNaN(pago.monto))
			resultado.mensaje = "El monto debe ser un n\u00FAmero correcto.";

		if (pago.fecha == null || pago.fecha == "")
			resultado.mensaje = "Fecha no debe ser vac\u00EDa.";
		if (resultado.mensaje != null)
			resultado.validacion = false;
		return resultado;
	};

	this.verificarTitulo = function(titulo) {

		var resultado = { validacion: true, mensaje: null };
		if (titulo.porcentaje == null)
			mensaje = "Porcentaje no debe ser vac\u00EDo.";
		if (resultado.mensaje != null)
			resultado.validacion = false;
		return resultado;
	};
}

TerminoService.prototype.validarTermino = function(termino, costo) {
	var mensaje = "";
	var valido = true;

	if (valido) {
		if (termino.numeroTitulos == null || termino.numeroTitulos == "" || isNaN(termino.numeroTitulos) || parseInt(termino.numeroTitulos) < 0) {
			valido = false;
			mensaje = "El campo N\u00FAmero de T\u00EDtulos no es v\u00E1lido.";
		}
	}

	if (valido) {
		if (termino.costoContrato == null || termino.costoContrato == "" || isNaN(termino.costoContrato) || parseInt(termino.costoContrato) < 0) {
			valido = false;
			mensaje = "El campo Costo de Contrato no es v\u00E1lido.";
		}
	}

	if (valido) {
		//Se valida que se registre algun tipo de pago
		if (termino.pagoAnticipado == null && termino.pagoMensual == null &&
			termino.pagoInicioExhibicion == null && termino.pagoPeriodicos == null) {
			mensaje = "Se debe registrar alguna forma de pago.";
			valido = false;
		}
		else {
			//Se valida el registro del pago anticipado sea correcto
			if (termino.pagoAnticipado != null) {
				var resultado = this.verificarPago(termino.pagoAnticipado);
				if (!resultado.validacion)
					mensaje = "Verificar Pago Anticipado. " + resultado.mensaje
				valido = resultado.validacion;

				//Se valida que la fecha de inicio sea menor o igual a fecha inicio del contrato
				if (valido) {
					var fechIniCto = $("#fechaInicioCto").val().substring(0, 10).split("-");
					var validoFec = false;

					var anioCto = parseInt(fechIniCto[0]);
					var mesCto = parseInt(fechIniCto[1]);
					var mesPago = parseInt($("#antFecha").val().split("/")[0]);
					var anioPago = parseInt($("#antFecha").val().split("/")[2]);

					if (anioPago < anioCto)
						validoFec = true;
					else if (anioPago == anioCto)
						validoFec = mesPago <= mesCto ? true : false;

					if (!validoFec) {
						valido = false;
						mensaje = "Fecha de inicio del pago anticipado debe ser menor o igual a fecha inicio del contrato.";
					}
				}
			}

			if (valido && termino.pagoPeriodicos != null) {
				for (var i = 0; i < termino.pagoPeriodicos.length; i++) {
					var resultado = this.verificarPago(termino.pagoPeriodicos[i]);
					if (valido) {
						if (!resultado.validacion)
							mensaje = "Verificar Pagos Peri\u00F3dicos. " + resultado.mensaje
						valido = resultado.validacion;
					}
				}

				if (valido) {
					if (Math.round(costo) != Math.round(termino.costoContrato)) {
						valido = false;
						mensaje = "La suma de los periodos m\u00E1s el anticipo, no cumple el total del costo del contrato.";
					}
				}
			}
		}
	}
	return { mensaje: mensaje, valido: valido };
};

TerminoService.prototype.obtenerTerminos = function() {
	$.post(contextPath + '/contrato/license/terminos/indexobtenerTermino.action')
		.done(function(response) {
			if (response.mensaje != null)
				showError("Error al procesar la operaci\u00F3n.");
			else {
				registrarDatosContrato(response.contrato, response.termino);
				registrarDatosTermino(response.termino);

				if (parseInt(response.contrato.idEstatus) != 1)
					deshabilitarForma();
				else {
					deshabilitarForma();
					var perfil = new PerfilController();
					perfil.ejecutarPerfil(parseInt($("#pmn").val()));
				}
			}
		});
};


TerminoService.prototype.guardarTerminos = function(termino) {
	$.post(contextPath + '/contrato/license/terminos/indexguardarTermino.action', { mensaje: JSON.stringify(termino) })
		.done(function(response) {
			if (response.mensaje != null)
				showError("Error al procesar la operaci\u00F3n.");
			else {
				limpiarForma();
				registrarDatosContrato(response.contrato, response.termino);
				registrarDatosTermino(response.termino);
				showMessage("Datos guardados correctamente.")
			}
		});
};

TerminoService.prototype.obtenerMontoProgramado = function(termino) {
	var totalPeriodos = 0.0;
	if (termino.pagoPeriodicos != null) {
		for (var i = 0; i < termino.pagoPeriodicos.length; i++) {
			if (termino.pagoPeriodicos[i].monto != null && termino.pagoPeriodicos[i].monto != "")
				totalPeriodos = totalPeriodos + parseFloat(termino.pagoPeriodicos[i].monto);
		}
	}

	if (termino.pagoAnticipado != null && (termino.pagoAnticipado.monto != null && termino.pagoAnticipado.monto != ""))
		totalPeriodos = totalPeriodos + parseFloat(termino.pagoAnticipado.monto);
	return totalPeriodos;
};