var globalurl=".";
var coll = document.getElementsByClassName("collapsible");

for (let i = 0; i < coll.length; i++) {
  coll[i].addEventListener("click", function() {
    this.classList.toggle("active");
    var content = this.nextElementSibling;
    if (content.style.display === "block") {
      content.style.display = "none";
    } else {
      content.style.display = "block";
    }
  });
}

function download(service){
    var url = globalurl + "/api/"+service;
    window.open(url);
}

Array.prototype.removeItem = function(a) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == a) {
            for (var i2 = i; i2 < this.length - 1; i2++) {
                this[i2] = this[i2 + 1];
            }
            this.length = this.length - 1;
            return;
        }
    }
};

// SW loginmain
var WS_waitscreen = false;
var waits=[];
//PARA LLAMAR A TODOS LOS SERVICIOS
function callWS(type, service, params, response){
    var url = globalurl + "/api/"+service+".php";
    waits.push("waitScreen");
    if(WS_waitscreen==false){
        WS_waitscreen=true;
        //Mostrar wait 1 sola vez y registrar en un arreglo global todas las cargas
        var wait = document.createElement("div");
        wait.classList.add("waitScreen")
        wait.setAttribute("id", "waitScreen");
        var spin = document.createElement("div");
        spin.classList.add("spinChar");
        spin.innerHTML = '<i class="fas fa-circle-notch fa-spin"></i>';
        wait.appendChild(spin);
        document.body.appendChild(wait);
    }
    
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
        if (this.readyState == 4) {
            var rsp = "";
            if(this.responseText !== ""){
                rsp = JSON.parse(this.responseText);
                response(this.status, this.responseText);
            }else{
                response(this.status, this.responseText);
            }
            waits.removeItem("waitScreen");
            //var waitScreen = document.getElementsByClassName("waitScreen")[0];
            setTimeout(function(){
                if(WS_waitscreen && waits.length==0){
                    WS_waitscreen = false;
                    var waitScreen = document.getElementById("waitScreen");
                    waitScreen.style.opacity = "";
                    setTimeout(function(){
                        document.getElementsByTagName("body")[0].removeChild(waitScreen);
                    },450);
                }
            },500);
        }
    }
    switch (type){
        case "GET":
            var parsedPars = Object.keys(params).map(function(k) {
                return encodeURIComponent(k) + '=' + encodeURIComponent(params[k]);
            }).join('&');
            xhttp.open(type.toUpperCase(), url + "?" + parsedPars, true);
            xhttp.send();
        break;
        case"POST":
            xhttp.open("POST", url, true);
            var formdata = new FormData();
            for(var key in params){
                formdata.append(key, params[key]);
            }
            xhttp.send(formdata);
        break;
    }
}


//CERRAR SESION no se si en este caso funciona igual
function myLogout(){
    var par = {};
    par.sessionid = sessionStorage.getItem("sessionId");
   callWS("GET", "login/logout", par, respuesta);
    
    function respuesta(status, rsp){
        switch(status){
            case 200:
                sessionStorage.clear();
                gotoPage("login","main","");
                break;
            case 400:
                console.log(JSON.parse(rsp));
                break;
            case 401:
                console.log(JSON.parse(rsp));
                gotoPage("login","main","");
                break;
            case 500:
              // console.log(JSON.parse(rsp));
                break;
            default:
               // console.log(rsp);
        }
    }
}
//Va a una pagina
function gotoPage(id, sid, params){
    esconderHTML(true);
    var url = globalurl + "/";
    var parsedPars = Object.keys(params).map(function(k) {
        return encodeURIComponent(k) + '=' + encodeURIComponent(params[k]);
    }).join('&');
    if (parsedPars.length)
        parsedPars = "&" + parsedPars;
    location.href=url+"?id="+id+"&sid="+sid+parsedPars;
}
//Va a una pagina en una ventana nueva
function gotoNewPage(id, sid){
    var url = globalurl + "/";
    window.open(url+"?id="+id+"&sid="+sid, '_blank');
}

function esconderHTML(hide){
    var html = document.getElementsByTagName("html")[0];
    if (html !== null)
        if (!hide)
            html.setAttribute("style", "opacity:1");
        else
            html.removeAttribute("style");
}


function getParameterByName(name) {
    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
    results = regex.exec(location.search);
    return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}

//Javier
//funcion usada para cargar los botones contraer/expanir en formularios extensos
function expandBtns(){
    var btns = document.getElementsByClassName("expand");
    for(var i=0; i<btns.length; i++){
        btns[i].addEventListener("click", function(){
            cnt = document.getElementById(this.getAttribute("sect"));
            if(this.innerHTML == "+"){
                cnt.style.height = cnt.scrollHeight+"px";
                this.style.lineHeight = "";
                this.innerHTML = "-";
            }else{
                cnt.style.height = "";
                this.style.lineHeight = "17px";
                this.innerHTML = "+";
            }
        });
    }
}
function expandAll(){
    var btns = document.getElementsByClassName("expand");
    for(var i=0; i<btns.length; i++){
        btns[i].innerHTML = "-";
        var cnt = document.getElementById(btns[i].getAttribute("sect"));
        cnt.style.height = cnt.scrollHeight+"px";
    }
}
function closesecAll(){
    var btns = document.getElementsByClassName("expand");
    for(var i=0; i<btns.length; i++){
        btns[i].innerHTML = "+";
        var cnt = document.getElementById(btns[i].getAttribute("sect"));
        cnt.style.height = "";
    }
}
function drawSelect(select, read, rsp, selected, first = ""){
    //rsp - (array) Registros
    //select - donde se insertan las opciones
    //first - si no está vacío crea un opcion sin value
    //selected - selecciona una opción especifica
    //read - campo a partir del cual muestra el LBL
    select.innerHTML = "";
    var opt;
    if(first !== ""){
        opt = "";
        opt = document.createElement("option");
        opt.setAttribute("value", "");
        opt.innerHTML = first;
        select.appendChild(opt);
    }
    for(var i=0; i<rsp.length; i++){
        opt = document.createElement("option");
        opt.setAttribute("value", rsp[i].id);
        opt.innerHTML = rsp[i][read];
        if(selected !== null && selected !== "" && selected !== undefined){
            if(rsp[i].id == selected)
                opt.setAttribute("selected", "");
        }
        select.appendChild(opt);
    }
}


/*-------------------------------- MD5 function------------------------------- */
function MD5(string) {

   function RotateLeft(lValue, iShiftBits) {
           return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
   }

   function AddUnsigned(lX,lY) {
           var lX4,lY4,lX8,lY8,lResult;
           lX8 = (lX & 0x80000000);
           lY8 = (lY & 0x80000000);
           lX4 = (lX & 0x40000000);
           lY4 = (lY & 0x40000000);
           lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
           if (lX4 & lY4) {
                   return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
           }
           if (lX4 | lY4) {
                   if (lResult & 0x40000000) {
                           return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
                   } else {
                           return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
                   }
           } else {
                   return (lResult ^ lX8 ^ lY8);
           }
   }

   function F(x,y,z) { return (x & y) | ((~x) & z); }
   function G(x,y,z) { return (x & z) | (y & (~z)); }
   function H(x,y,z) { return (x ^ y ^ z); }
   function I(x,y,z) { return (y ^ (x | (~z))); }

   function FF(a,b,c,d,x,s,ac) {
           a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
           return AddUnsigned(RotateLeft(a, s), b);
   };

   function GG(a,b,c,d,x,s,ac) {
           a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
           return AddUnsigned(RotateLeft(a, s), b);
   };

   function HH(a,b,c,d,x,s,ac) {
           a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
           return AddUnsigned(RotateLeft(a, s), b);
   };

   function II(a,b,c,d,x,s,ac) {
           a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
           return AddUnsigned(RotateLeft(a, s), b);
   };

   function ConvertToWordArray(string) {
           var lWordCount;
           var lMessageLength = string.length;
           var lNumberOfWords_temp1=lMessageLength + 8;
           var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
           var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
           var lWordArray=Array(lNumberOfWords-1);
           var lBytePosition = 0;
           var lByteCount = 0;
           while ( lByteCount < lMessageLength ) {
                   lWordCount = (lByteCount-(lByteCount % 4))/4;
                   lBytePosition = (lByteCount % 4)*8;
                   lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount)<<lBytePosition));
                   lByteCount++;
           }
           lWordCount = (lByteCount-(lByteCount % 4))/4;
           lBytePosition = (lByteCount % 4)*8;
           lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
           lWordArray[lNumberOfWords-2] = lMessageLength<<3;
           lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
           return lWordArray;
   };

   function WordToHex(lValue) {
           var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
           for (lCount = 0;lCount<=3;lCount++) {
                   lByte = (lValue>>>(lCount*8)) & 255;
                   WordToHexValue_temp = "0" + lByte.toString(16);
                   WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
           }
           return WordToHexValue;
   };

   function Utf8Encode(string) {
           string = string.replace(/\r\n/g,"\n");
           var utftext = "";

           for (var n = 0; n < string.length; n++) {

                   var c = string.charCodeAt(n);

                   if (c < 128) {
                           utftext += String.fromCharCode(c);
                   }
                   else if((c > 127) && (c < 2048)) {
                           utftext += String.fromCharCode((c >> 6) | 192);
                           utftext += String.fromCharCode((c & 63) | 128);
                   }
                   else {
                           utftext += String.fromCharCode((c >> 12) | 224);
                           utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                           utftext += String.fromCharCode((c & 63) | 128);
                   }

           }

           return utftext;
   };

   var x=Array();
   var k,AA,BB,CC,DD,a,b,c,d;
   var S11=7, S12=12, S13=17, S14=22;
   var S21=5, S22=9 , S23=14, S24=20;
   var S31=4, S32=11, S33=16, S34=23;
   var S41=6, S42=10, S43=15, S44=21;

   string = Utf8Encode(string);

   x = ConvertToWordArray(string);

   a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;

   for (k=0;k<x.length;k+=16) {
           AA=a; BB=b; CC=c; DD=d;
           a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);
           d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
           c=FF(c,d,a,b,x[k+2], S13,0x242070DB);
           b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
           a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
           d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);
           c=FF(c,d,a,b,x[k+6], S13,0xA8304613);
           b=FF(b,c,d,a,x[k+7], S14,0xFD469501);
           a=FF(a,b,c,d,x[k+8], S11,0x698098D8);
           d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
           c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
           b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
           a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
           d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
           c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
           b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
           a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);
           d=GG(d,a,b,c,x[k+6], S22,0xC040B340);
           c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
           b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
           a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);
           d=GG(d,a,b,c,x[k+10],S22,0x2441453);
           c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
           b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
           a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
           d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
           c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
           b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);
           a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
           d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
           c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);
           b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
           a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
           d=HH(d,a,b,c,x[k+8], S32,0x8771F681);
           c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
           b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
           a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
           d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
           c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
           b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
           a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
           d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
           c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
           b=HH(b,c,d,a,x[k+6], S34,0x4881D05);
           a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
           d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
           c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
           b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
           a=II(a,b,c,d,x[k+0], S41,0xF4292244);
           d=II(d,a,b,c,x[k+7], S42,0x432AFF97);
           c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
           b=II(b,c,d,a,x[k+5], S44,0xFC93A039);
           a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
           d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
           c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
           b=II(b,c,d,a,x[k+1], S44,0x85845DD1);
           a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
           d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
           c=II(c,d,a,b,x[k+6], S43,0xA3014314);
           b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
           a=II(a,b,c,d,x[k+4], S41,0xF7537E82);
           d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
           c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
           b=II(b,c,d,a,x[k+9], S44,0xEB86D391);
           a=AddUnsigned(a,AA);
           b=AddUnsigned(b,BB);
           c=AddUnsigned(c,CC);
           d=AddUnsigned(d,DD);
           }

       var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);

       return temp.toLowerCase();
}



/*------------------------------------------------------------------*/
//Funcion aplicable para validar los campos email
function checkEmail(email) {
    var re=/^([\da-z_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
    if( email.value === null || email.value.length === 0 || /^\s+$/.test(email.value) ){
        //document.getElementById("alerta").innerHTML = ' <div class="stdalert">Ingrese su correo electrónico</div>'
        return false;
    // validar campo email
    }else if(!re.exec(email.value)){
        //document.getElementById("alerta").innerHTML = ' <div class="stdalert">Ingrese una dirección de correo electrónico válido</div>'
        return false;
    }
	return true;
}

//Funcion aplicable para validar campo contraseña
function checkPassword(pass){
    if( pass.value === null || pass.value.length === 0 || /^\s+$/.test(pass.value) ){
        //document.getElementById("alerta").innerHTML = ' <div class="stdalert">Ingrese su contraseña</div>'
        return false;
    }
    
    return true;
}

function isOkPass(p){
    console.log("me llaman");
    var anUpperCase = /[A-Z]/;
    var aLowerCase = /[a-z]/; 
    var aNumber = /[0-9]/;
    var aSpecial = /[!|@|#|$|%|^|&|*|(|)|-|_|.|=|+|\/]/;
    var obj = {};
    obj.result = true;

    if(p.length < 8){
        obj.result=false;
        obj.error="Not long enough!"
        return obj;
    }

    var numUpper = 0;
    var numLower = 0;
    var numNums = 0;
    var numSpecials = 0;
    for(var i=0; i<p.length; i++){
        if(anUpperCase.test(p[i]))
            numUpper++;
        else if(aLowerCase.test(p[i]))
            numLower++;
        else if(aNumber.test(p[i]))
            numNums++;
        else if(aSpecial.test(p[i]))
            numSpecials++;
    }

    if(numUpper < 1 || numLower < 1 || numNums < 1 || numSpecials <1){
        obj.result=false;
        obj.error="Wrong Format!";
        console.log("return", obj);
        return obj;
    }
    console.log("return", obj);
    return obj;
}

function moveCursorToEnd(el) {
    if (typeof el.selectionStart == "number") {
        el.selectionStart = el.selectionEnd = el.value.length;
    } else if (typeof el.createTextRange != "undefined") {
        el.focus();
        var range = el.createTextRange();
        range.collapse(false);
        range.select();
    }
}

function formatAmount(fields){
    for(var i=0;i<fields.length;i++){
        var ele = document.getElementById(fields[i]);
        ele.addEventListener("keyup",function(e){
            //debugger;
            if(e.keyCode !== 190 && e.keyCode !== 188 && e.keyCode !== 110 && e.keyCode !== 189)
                this.value = this.value.replace(new RegExp('', 'g'),'');
        });
        ele.addEventListener("focusin",function(){
            var val = this.getAttribute("dataNumber");
            this.value = val;
            this.setAttribute("type","number");
            eletmp=this;
            setTimeout(function(){
                eletmp.dispatchEvent(new Event("click"));
            },100);
        });
        ele.addEventListener("focusout",function(){
            this.setAttribute("dataNumber",parseFloat(this.value).toFixed(decimCoin));
            this.value = "";
            this.setAttribute("type","text");
            this.value = number_format(this.getAttribute("dataNumber"), decimCoin);
        });
        ele.addEventListener("click",function(){
            moveCursorToEnd(this); 
        });
    }
    
}

function number_format(amount, decimals) {

    amount += ''; // por si pasan un numero en vez de un string
    amount = parseFloat(amount.replace(/[^0-9\.-]/g, '')); // elimino cualquier cosa que no sea numero o punto o negativo

    decimals = decimals || 0; // por si la variable no fue fue pasada

    // si no es un numero o es igual a cero retorno el mismo cero
    if (isNaN(amount) || amount === 0) 
        return parseFloat(0).toFixed(decimals);

    // si es mayor o menor que cero retorno el valor formateado como numero
    amount = '' + amount.toFixed(decimals);

    var amount_parts = amount.split('.'),
        regexp = /(\d+)(\d{3})/;

    while (regexp.test(amount_parts[0]))
        amount_parts[0] = amount_parts[0].replace(regexp, '$1' + '.' + '$2');

    return amount_parts.join(',');
}