angular.module("felApp").service('validacion',
        /**
         * 
         * @param {type} $scope Contexto local             
         * @returns {undefined}
         */
                function ($alert) {

                    var validacion = {};

                    validacion.munisDepto = [
                        /* 01 - Guatemala tiene:      */ 17 /* municipios. */,
                        /* 02 - El Progreso tiene:    */  8 /* municipios. */,
                        /* 03 - Sacatepéquez tiene:   */ 16 /* municipios. */,
                        /* 04 - Chimaltenango tiene:  */ 16 /* municipios. */,
                        /* 05 - Escuintla tiene:      */ 13 /* municipios. */,
                        /* 06 - Santa Rosa tiene:     */ 14 /* municipios. */,
                        /* 07 - Sololá tiene:         */ 19 /* municipios. */,
                        /* 08 - Totonicapán tiene:    */  8 /* municipios. */,
                        /* 09 - Quetzaltenango tiene: */ 24 /* municipios. */,
                        /* 10 - Suchitepéquez tiene:  */ 21 /* municipios. */,
                        /* 11 - Retalhuleu tiene:     */  9 /* municipios. */,
                        /* 12 - San Marcos tiene:     */ 30 /* municipios. */,
                        /* 13 - Huehuetenango tiene:  */ 32 /* municipios. */,
                        /* 14 - Quiché tiene:         */ 21 /* municipios. */,
                        /* 15 - Baja Verapaz tiene:   */  8 /* municipios. */,
                        /* 16 - Alta Verapaz tiene:   */ 17 /* municipios. */,
                        /* 17 - Petén tiene:          */ 14 /* municipios. */,
                        /* 18 - Izabal tiene:         */  5 /* municipios. */,
                        /* 19 - Zacapa tiene:         */ 11 /* municipios. */,
                        /* 20 - Chiquimula tiene:     */ 11 /* municipios. */,
                        /* 21 - Jalapa tiene:         */  7 /* municipios. */,
                        /* 22 - Jutiapa tiene:        */ 17 /* municipios. */];

                    validacion.validacionCUI = function (cui) {

                        var numero = cui.substring(0, 8);
                        var depto = parseInt(cui.substring(9, 11));
                        var muni = parseInt(cui.substring(11, 13));
                        var verificador = parseInt(cui.substring(8, 9));
                        var total = 0;
                        var modulo = 0;
                        if (cui.length !== 13) {
                           // $alert(validacion.error("CUI debe contener 13 caracteres"));
                               return false;
                        } else {
                            if (muni === 00 || depto === 00) {
                               // $alert(validacion.error("codigo de departamento o municipio no es correcto"));
                                return false;
                            } else if (depto > validacion.munisDepto.length) {
                               // $alert(validacion.error("Codigo departamento no existe"));
                                return false;
                            } else if (muni > validacion.munisDepto[depto - 1]) {
                              //  $alert(validacion.error("Codigo Municipio no existe"));
                                return false;
                            } else {
                                for (var inicio = 0; inicio < numero.length; inicio++) {
                                    total += parseInt(numero.substring(inicio, inicio + 1)) * (inicio + 2);
                                }
                                modulo = total % 11;
                                if (modulo !== verificador) {
                                   // $alert(validacion.error("CUI invalido"));
                                    return false;
                                } else {
                                    return true;
                                }
                            }
                        }
                    };

                    validacion.validacionNIT = function (pNit) {
                        if (!validacion.isNullOrEmptyOrUndefined(pNit)) {
                            var expresionRegular = /^CF$|^([1-9]{1}[0-9]*[0-9,K]{1})$/;
                            var longitud = parseInt(pNit.length);
                            var valor;
                            var posicion = 0;
                            var suma = 0;
                            var xMod11;
                            var digitoVerificador = pNit.substring(longitud - 1, longitud);
                            if (!expresionRegular.test(pNit)) {

                                return false;
                            }
                            var er = /[0-9]*$/;
                            if (er.test(pNit.substring(1, longitud - 1))) {
                                if (pNit !== 'CF') {
                                    for (var x = longitud; x > 1; x--) {
                                        valor = parseInt(pNit.substring(posicion, posicion + 1));
                                        suma = suma + (valor * x)
                                        posicion++;
                                    }
                                    xMod11 = (11 - (suma % 11)) % 11;
                                    var mod11 = xMod11.toString();
                                    if ((mod11 === "10" && digitoVerificador === "K") || (mod11 === digitoVerificador)) {
                                        return true;
                                    }
                                    else {
                                       // $alert(validacion.error("El texto ingresado no es un NIT válido"));
                                        return false;
                                    }
                                } else {
                                    return true;
                                }
                            }
                        } else {
                          //  $alert(validacion.error("Debe ingresar un NIT valido"));
                            return false;
                        }

                    };
                    
                    validacion.validacionExtranjero = function (pExtranjero) {
                        var expresionRegular = /^([A-Z0-9%/#=\-&]{3,18})$/;

                        if (validacion.isNullOrEmptyOrUndefined(pExtranjero) || !expresionRegular.test(pExtranjero)) {
                           // $alert(validacion.error("El texto ingresado no corresponde a un ID Extranjero."));
                            return false;
                        }

                        return true;
                    };

                                                          
                    validacion.validacionCodigoUUI = function (pUuidDocumento) {
                        // var expresionRegular = /^[0-9A-F]{8}-([0-9A-F]{4}-){3}[0-9A-F]{12}$/;
                        //console.log("validacion");

                       //  var expresionRegular = /^[2]{1}[0-9]{3}-[1-9]{1}[0-9]{0,2}-[1-9]{1}[0-9]{0,6}-[1-9]{1}[0-9]{0,6}$|^[0-9A-F]{8}-([0-9A-F]{4}-){3}[0-9A-F]{12}$/;
                        var expresionRegular = /^[0-9A-F]{8}-([0-9A-F]{4}-){3}[0-9A-F]{12}$/;
                        // var expresionRegular = /^CF$|^([1-9]{1}[0-9]*[0-9,K]{1})$/;
                        if (!expresionRegular.test(pUuidDocumento)) {
                            return false;
                        } else {
                            return true;
                        }

                    };

                    validacion.validacionNumeroAutorizacion = function (pAutorizacion) {    
                        // var expresionRegular = /^[0-9A-F]{8}-([0-9A-F]{4}-){3}[0-9A-F]{12}$/;
                 

                        var expresionRegular = /^[2]{1}[0-9]{3}-[1-9]{1}[0-9]{0,2}-[1-9]{1}[0-9]{0,6}-[1-9]{1}[0-9]{0,6}$/;
                        //  var expresionRegular2 = /^[0-9A-F]{8}-([0-9A-F]{4}-){3}[0-9A-F]{12}$/;
                        // var expresionRegular = /^CF$|^([1-9]{1}[0-9]*[0-9,K]{1})$/;
                        if (!expresionRegular.test(pAutorizacion)) {
                            return false;
                        } else {
                            return true;
                        }

                    };


                    validacion.isNullOrEmptyOrUndefined = function (value) {
                        return !value;
                    };

                    validacion.error = function (contenido) {
                        return {title: 'Error! ', content: contenido,
                            placement: 'top', type: 'danger', show: true, duration: 4};
                    };
                    validacion.info = function (contenido) {
                        return {title: 'Exito! ', content: contenido,
                            placement: 'top', type: 'success', show: true, duration: 4};
                    };


                    return validacion;
                });