/* global $:true */
/* global PrimeFaces:false */

/* exported safeGetPrimeFacesWidget */

function safeGetPrimeFacesWidget(widgetVar) {
    "use strict";
    var version = $.fn.jquery;
    var major = parseInt(version);
    var minor = 0;

    var index = version.indexOf('.');
    if (index !== -1) {
        minor = parseInt(version.substr(index + 1));
    }

    if (major > 1 || (major === 1 && minor > 9)) {
        /* Se a versão do jQuery for superior a "1.9", usa-se o novo modo do PF. */
        return PrimeFaces.widgets[widgetVar];
    }

    return window[widgetVar];
}

function getTempoSaudacao() {
    var data = new Date();

    if (data.getHours() >= 0 && data.getHours() <= 12) {
        return "BOM DIA";
    } else if (data.getHours() >= 13 && data.getHours() <= 18) {
        return "BOA TARDE";
    } else if (data.getHours() >= 19 && data.getHours() <= 23) {
        return "BOA NOITE";
    }

    return "";
}

function charLimit(el, maxLength) {
    if (el) {
        return el.value.length <= maxLength;

    }
    return true;
}

function characterCount(el, maxLength, idToPrint) {
    if (el) {
        var charCount = document.getElementById(idToPrint);
        if (el.value.length > maxLength) el.value = el.value.substring(0, maxLength);
        if (charCount) charCount.innerHTML = maxLength - el.value.length;
    }
    return true;
}

function setLimitToPrimefacesTextArea(idPrime, maxLength, idToPrint) {
    var query = $('#' + idPrime);
    query.keypress(function () {
        return charLimit(query[0], maxLength);
    });
    query.keyup(function () {
        return characterCount(query[0], maxLength, idToPrint);
    });
    charLimit(query[0], maxLength);
    characterCount(query[0], maxLength, idToPrint);
}

/*FUNCOES DO COMPONENTE DE NUMERO E VIRGULA - INICIO*/

function hasVirgula(value) {
    var regex = /\,/;

    return regex.test(value);
}

function countNumerosDepoisDaVirgula(value) {
    if (typeof value == 'undefined') {
        return 0;
    }

    var array = value.split(',');

    if (array.length > 1) {
        return value.split(',')[1].length;
    }
}

function countNumerosAntesDaVirgula(value) {
    if (typeof value == 'undefined') {
        return 0;
    }

    var array = value.split(',');

    if (array.length > 1) {
        return value.split(',')[0].length;
    } else {
        return value.length;
    }
}

function countNumerosAntesDaVirgulaNegativo(value) {
    if (typeof value == 'undefined') {
        return 0;
    }

    var array = value.split(',');


    if (array.length > 1) {
        if (array[0] == '-') {
            return value.split(',')[0].length - 1;
        } else {
            return value.split(',')[0].length;
        }
    } else {
        return value.length;
    }
}

function cursorDepoisVirgula(element, value) {
    var array = value.split(',');
    return mQuery(element).caret().start > array[0].length;
}

function retirarNumerosExcedentesAposVirgula(value, numerosDepoisVirgula) {
    return value.substring(0, value.length - (countNumerosDepoisDaVirgula(value) - numerosDepoisVirgula));
}

function retirarNumerosExcedentesAntesVirgula(value, numerosAntesVirgula) {
    return value.substring(countNumerosAntesDaVirgula(value), countNumerosAntesDaVirgula(value) - numerosAntesVirgula);
}


/*FUNCOES DO COMPONENTE DE NUMERO E VIRGULA - FIM*/

/**
 * Traduz o editor do primefaces
 * @param Alias do jQuery, no projeto anatel normalmente se utiliza o mQuery
 */
function traduzirEditor($) {
    $(".ui-editor-button").each(function () {
        var title = $(this).attr("title").toLowerCase(), newTitle = title;
        switch (title) {
            case "bold":
                newTitle = "Negrito";
                break;
            case "italic":
                newTitle = "Itálico";
                break;
            case "underline":
                newTitle = "Sublinhado";
                break;
            case "align text left":
                newTitle = "Alinhado à esquerda";
                break;
            case "center":
                newTitle = "Centralizado";
                break;
            case "align text right":
                newTitle = "Alinhado à direita";
                break;
            case "justify":
                newTitle = "Justificado";
                break;
            case "insert hyperlink":
                newTitle = "Inserir link";
                break;
            case "remove hyperlink":
                newTitle = "Remover link";
                break;
            case "font":
                newTitle = "Fonte";
                break;
            case "font size":
                newTitle = "Tamanho da Fonte";
                break;
            case "style":
                newTitle = "Estilo";
                break;
            case "font color":
                newTitle = "Cor da Fonte";
                break;
            case "text highlight color":
                newTitle = "Cor do Realce do Texto";
                break;
            case "strikethrough":
                newTitle = "Tachado";
                break;
            case "remove formatting":
                newTitle = "Remover Formatação";
                break;
            case "bullets":
                newTitle = "Lista não Ordenada";
                break;
            case "numbering":
                newTitle = "Lista Ordenada";
                break;
            case "outdent":
                newTitle = "Diminuir Recuo";
                break;
            case "indent":
                newTitle = "Aumentar Recuo";
                break;
            case "undo":
                newTitle = "Desfazer";
                break;
            case "redo":
                newTitle = "Refazer";
                break;
            case "insert horizontal rule":
                newTitle = "Inserir Linha Horizontal";
                break;
            case "insert image":
                newTitle = "Inserir Imagem";
                break;
            case "cut":
                newTitle = "Cortar";
                break;
            case "copy":
                newTitle = "Copiar";
                break;
            case "paste":
                newTitle = "Colar";
                break;
            case "paste as text":
                newTitle = "Colar como Texto";
                break;
            case "print":
                newTitle = "Imprimir";
                break;
            case "show source":
                newTitle = "Mostrar código HTML";
                $(this).click(function () {
                    traduzirEditor($);
                });
                break;
            case "show rich text":
                newTitle = "Esconder código HTML";
                $(this).click(function () {
                    traduzirEditor($);
                });
                break;
            default:
                break;
        }
        $(this).attr("title", newTitle);
    });
}
