// JavaScript Document

function decode_utf8( s )
{
    return decodeURIComponent( escape( s ) );
}

function nl2br(str)
{
   return str.replace(/\n/g, "<br />");
}

function digitarFone(c, e) { 
    var fone = c.value;
    var tam = fone.length;
    if (!isTeclaEspecial(e) ){
        if (tam > 14){
            e.stop();
        }
        if (inStr("1234567890()-", e.key, 0) == -1){
            e.stop();
        }
        fone = cleanStr(fone,"0123456789");
        tam = fone.length;        
        if (tam > 1) {
            if (e.key != "(") fone = fone.substr(0,2) + "(" + fone.substr(2, tam);
        }    
        if (tam > 3) {
            if (e.key != ")") fone = fone.substr(0,5) + ")" + fone.substr(5, tam);
        }    
        if (tam > 7) {
            if (e.key != "-") fone = fone.substr(0,10) + "-" + fone.substr(10, tam);
        }    
        c.value = fone;
    }
}

function digitarFone2(c, e) {
    var fone = c.value;
    var tam = fone.length;
    if (!isTeclaEspecial(e) ){
        if (tam > 14){
            e.stop();
        }
        if (inStr("1234567890()-", e.key, 0) == -1){
            e.stop();
        }
        fone = cleanStr(fone,"0123456789");
        tam = fone.length;
        if (tam==7){ // 9999-9999
            fone = fone.substr(0,4) + "-" + fone.substr(4, 4);
        } else if (tam==10){ // (48)9999-9999
            if (fone.substr(0,4) == "0800" || fone.substr(0,4) == "0300"){
                fone = fone.substr(0,4) + " " + fone.substr(4,3) + "-" + fone.substr(7, 3);
            } else {
                fone = "(" + fone.substr(0,2) + ")" + fone.substr(2, 4) + "-" + fone.substr(6, 4);
            }
        } else if (tam==12){ // (48)9999-9999
            if (fone.substr(0,4) == "0800" || fone.substr(0,4) == "0300"){
                fone = fone.substr(0,4) + " " + fone.substr(4,3) + "-" + fone.substr(7, 4);
            } else {
                fone = fone.substr(0,2) + "(" + fone.substr(2,2) + ")" + fone.substr(4, 4) + "-" + fone.substr(8, 4);
            }
        }
        c.value = fone;
    }
}

function isTeclaEspecial(e){
    if ( (e.key == 'c' && e.control) || (e.key == 'x' && e.control) || 
        (e.key == 'v' && e.control) || (e.shift) || (e.key == "end") ||
        (e.key == "backspace") || (e.key == "delete") || (e.key == "left") ||
        (e.key == "right") || (e.key == "tab") ){
        return true;
    } else {
        return false;
    }
}

// retira caracteres invalidos da string
function cleanStr(str,validos) {
    var i,temp = "";
    for (i=0;i<str.length;i++){
        if (validos.indexOf(str.charAt(i)) != -1){
            temp += str.charAt(i);
        }
    }
    return temp;
}

function inStr(texto,c,posInicial) {
    if (posInicial<0) posInicial=0;
    
    for(var i=posInicial; i<texto.length;i++) {
        if(texto.charAt(i)==c) return i;
    }
    return -1;
}

function preencherComboGenerico(jsonObj, comboId, qtdCarac){
    //alert(jsonObj);
    /* 
     * Verifica se foi informado o tamanho máximo de caracteres na combo.
     * Se não foi, então coloca o valor default deste método. 
     */
    var qtdMaxCarac = 20; // valor default.
    if (qtdCarac > 0){
        qtdMaxCarac = qtdCarac;
    }
    
    var combo = document.getElementById(comboId);
    limparCombo(combo);
    //var elemOpt = document.createElement("OPTION");
    //var text = document.createTextNode("");
    //elemOpt.setAttribute("value",0);
    //elemOpt.appendChild(text);
    //combo.appendChild(elemOpt);
    
    if (jsonObj != null){
        for (var i = 0; i < jsonObj.length; i++){
          
            // Verifica se é necessário diminuir o tamanho do texto que vai na combo.
            var nomeTmp = "";
            if ((jsonObj[i].nome).length > qtdMaxCarac) {
                nomeTmp = (jsonObj[i].nome).substring(0,qtdMaxCarac) + '...';
            }
            else {
                nomeTmp = jsonObj[i].nome;
            }

            elemOpt = document.createElement("OPTION");
            text = document.createTextNode(nomeTmp);
            elemOpt.setAttribute("value",jsonObj[i].id);
            elemOpt.appendChild(text);
            combo.appendChild(elemOpt);
        }
    }   
    
}

function limparCombo(combo){
    for (var i = combo.options.length - 1; i > 0; i--){
        combo.options[i] = null;
    }
    combo.selectedIndex = -1;
}

function htmlspecialchars_decode (string, quote_style) {
    // Convert special HTML entities back to characters  
    // 
    // version: 1103.1210
    // discuss at: http://phpjs.org/functions/htmlspecialchars_decode
    // +   original by: Mirek Slugen
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Mateusz "loonquawl" Zalega
    // +      input by: ReverseSyntax
    // +      input by: Slawomir Kaniecki
    // +      input by: Scott Cariss
    // +      input by: Francois
    // +   bugfixed by: Onno Marsman
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
    // +      input by: Ratheous
    // +      input by: Mailfaker (http://www.weedem.fr/)
    // +      reimplemented by: Brett Zamir (http://brett-zamir.me)
    // +    bugfixed by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: htmlspecialchars_decode("<p>this -&gt; &quot;</p>", 'ENT_NOQUOTES');
    // *     returns 1: '<p>this -> &quot;</p>'
    // *     example 2: htmlspecialchars_decode("&amp;quot;");
    // *     returns 2: '&quot;'
    var optTemp = 0,
        i = 0,
        noquotes = false;
    if (typeof quote_style === 'undefined') {
        quote_style = 2;
    }
    string = string.toString().replace(/&lt;/g, '<').replace(/&gt;/g, '>');
    var OPTS = {
        'ENT_NOQUOTES': 0,
        'ENT_HTML_QUOTE_SINGLE': 1,
        'ENT_HTML_QUOTE_DOUBLE': 2,
        'ENT_COMPAT': 2,
        'ENT_QUOTES': 3,
        'ENT_IGNORE': 4
    };
    if (quote_style === 0) {
        noquotes = true;
    }
    if (typeof quote_style !== 'number') { // Allow for a single string or an array of string flags
        quote_style = [].concat(quote_style);
        for (i = 0; i < quote_style.length; i++) {
            // Resolve string input to bitwise e.g. 'PATHINFO_EXTENSION' becomes 4
            if (OPTS[quote_style[i]] === 0) {
                noquotes = true;
            } else if (OPTS[quote_style[i]]) {
                optTemp = optTemp | OPTS[quote_style[i]];
            }
        }
        quote_style = optTemp;
    }
    if (quote_style & OPTS.ENT_HTML_QUOTE_SINGLE) {
        string = string.replace(/&#0*39;/g, "'"); // PHP doesn't currently escape if more than one 0, but it should
        // string = string.replace(/&apos;|&#x0*27;/g, "'"); // This would also be useful here, but not a part of PHP
    }
    if (!noquotes) {
        string = string.replace(/&quot;/g, '"');
    }
    // Put this in last place to avoid escape being double-decoded
    string = string.replace(/&amp;/g, '&');
 
    return string;
}
