/********************* 
* Prototypes para acrescentar funcionalidades a objetos já existentes.
**********************/
String.prototype.trim = function() {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

String.prototype.padL = function(nLength, sChar) {
    var sreturn = this;
    while (sreturn.length < nLength) {
        sreturn = String(sChar) + sreturn;
    }
    return sreturn;
}

String.prototype.strReplace = function(str, read, write) {
    try {
        return s.split(read).join(write);
    } catch (e) {
        return s;
    }
}


/*********************
* Método: initNumberField
* Finalidade: inicializar um objeto input para só aceitar numeros.
* Exemplo de Uso: <input type="text" onfocus="initNumberField(this, event);">
**********************/
function initNumberField(field, evt) {

    evt = (evt) ? evt : event;

    field.onkeypress = function(evt) {
        evt = (evt) ? evt : event;
        var oElement = (evt.target) ? evt.target : evt.srcElement;
        var value = oElement.value;
        if (value.trim() != "") {
            var reDigits = /^\d+$/;
            if (reDigits.test(value)) {
                oElement.setAttribute("initValue", oElement.value);
            }
        } else {
            oElement.setAttribute("initValue", "");
        }

    },

	field.onkeyup = function(evt) {
	    evt = (evt) ? evt : event;
	    var oElement = (evt.target) ? evt.target : evt.srcElement;
	    var value = oElement.value;
	    if (value.trim() != "") {
	        var reDigits = /^\d+$/;
	        if (!reDigits.test(value)) {
	            oElement.value = oElement.getAttribute("initValue");
	        }
	    }
	},

	field.onblur = function(evt) {
	    evt = (evt) ? evt : event;
	    var oElement = (evt.target) ? evt.target : evt.srcElement;
	    var value = oElement.value;
	    if (value.trim() != "") {
	        var reDigits = /^\d+$/;
	        if (!reDigits.test(value)) {
	            oElement.value = oElement.getAttribute("initValue");
	        }
	    }
	};
}

/*********************
* Método: initDecimalEdit
* Finalidade: inicializar um objeto input para só aceitar numeros e formatá-los
* Exemplo de Uso: <input type="text" onfocus="initDecimalEdit(this, 3);">
**********************/
function initDecimalEdit(objInput, evt, decimalLength) {

    //No foco tira os pontos se houver e seta os demais eventos.
    try {
        evt = (evt) ? evt : event;
        var oElement = (evt.target) ? evt.target : evt.srcElement;
        var value = oElement.value;
        oElement.value = strReplace(value, ".", "");
        oElement.select();
    } catch (e) { }

    //No evento onkeydown do edit da data seta a função para mascarar.
    objInput.onkeydown = function(evt) {
        evt = (evt) ? evt : event;
        var charCode = (evt.which) ? evt.which : evt.keyCode;
        var oElement = (evt.target) ? evt.target : evt.srcElement;
        var value = oElement.value;
        var letra = String.fromCharCode(charCode);
        var reDigits = /^\d+$/;

        letra = letra.replace("a", "1");
        letra = letra.replace("b", "2");
        letra = letra.replace("c", "3");
        letra = letra.replace("d", "4");
        letra = letra.replace("e", "5");
        letra = letra.replace("f", "6");
        letra = letra.replace("g", "7");
        letra = letra.replace("h", "8");
        letra = letra.replace("i", "9");
        letra = letra.replace("`", "0");

        if (((charCode == 110) || (charCode == 188)) && (value.indexOf(',') == -1)) {
            return true;
        } else {
            return ((reDigits.test(letra)) ||
					(charCode == 8) || 	//backspace 
					(charCode == 9) || 	//tab
					(charCode == 46) || //seta
					(charCode == 39) || //seta
					(charCode == 37) || //delete
					(charCode == 13)
				   );
        }
    };

    //No onkeyup valida a quantidade de casas decimais.
    objInput.onkeyup = function(evt) {
        evt = (evt) ? evt : event;
        var charCode = (evt.which) ? evt.which : evt.keyCode;
        var oElement = (evt.target) ? evt.target : evt.srcElement;
        var value = oElement.value;
        value = strReplace(value, ".", "");

        //Trava pra não digitar mais que três casas decimais
        if (value.indexOf(',') > -1) {
            var aux = value.substring(value.indexOf(','), value.length);
            if (aux.length > 4) {
                oElement.value = value.substring(0, value.indexOf(',') + 4);
            }
        }
    };

    //No onblur formata com pontos e virgulas
    objInput.onblur = function(evt) {
        evt = (evt) ? evt : event;
        var charCode = (evt.which) ? evt.which : evt.keyCode;
        var oElement = (evt.target) ? evt.target : evt.srcElement;
        var value = new String();
        value = oElement.value;

        if (value.trim() != "") {
            //verifica se é um decimal válido
            var reDigits = /^[+-]?((\d+|\d{1,3}(\.\d{3})+)(\,\d*)?|\,\d+)$/;

            if (!reDigits.test(value)) {
                if (oElement.value != "") {
                    oElement.focus();
                    oElement.value = "";
                }
            }

            for (i = 0; i < decimalLength; i++) {
                value += "0";
            }

            if (value.indexOf(',') > -1) {
                value = value.substring(0, value.indexOf(',') + decimalLength + 1);
            }

            value = strReplace(value, ".", "");
            value = strReplace(value, ",", "");
            var s = "";
            for (var i = value.length, j = -decimalLength; i > 0; i--, j++) {
                var num = value.substring(i - 1, i);

                if (j % 3 == 0 && j > 0) {
                    s = num + "." + s;
                } else if (j == 0) {
                    s = num + "," + s;
                } else {
                    s = num + s;
                }
            }

            oElement.value = s;
        }
    };
}

/*********************
* Método: initDateField
* Finalidade: inicializar um objeto input para só datas.
* Exemplo de Uso: <input type="text" size="10" maxlength="10" onfocus="initDateField(this, event, '99/99/9999')"/>
**********************/
function initDateField(field, evt, mask) {

    evt = (evt) ? evt : event;

    field.onkeypress = function(evt) {
        var i, nCount, sValue, fldLen, mskLen, bolMask, sCod, nTecla;

        evt = (evt) ? evt : event;
        var nTecla = (evt.which) ? evt.which : evt.keyCode;
        var objeto = (evt.target) ? evt.target : evt.srcElement;
        var sValue = objeto.value;

        if (nTecla == 8) {
            // Se é backspace permite apagar normalmente.
            return true;
        }

        // Limpa todos os caracteres de formatação q já estiverem no campo.
        sValue = sValue.toString().replace("-", "");
        sValue = sValue.toString().replace("-", "");
        sValue = sValue.toString().replace(".", "");
        sValue = sValue.toString().replace(".", "");
        sValue = sValue.toString().replace("/", "");
        sValue = sValue.toString().replace("/", "");
        sValue = sValue.toString().replace(":", "");
        sValue = sValue.toString().replace(":", "");
        sValue = sValue.toString().replace("(", "");
        sValue = sValue.toString().replace("(", "");
        sValue = sValue.toString().replace(")", "");
        sValue = sValue.toString().replace(")", "");
        sValue = sValue.toString().replace(" ", "");
        sValue = sValue.toString().replace(" ", "");
        fldLen = sValue.length;
        mskLen = mask.length;

        i = 0;
        nCount = 0;
        sCod = "";
        mskLen = fldLen;

        while (i <= mskLen) {
            bolMask = ((mask.charAt(i) == "-") || (mask.charAt(i) == ".") || (mask.charAt(i) == "/") || (mask.charAt(i) == ":"))
            bolMask = bolMask || ((mask.charAt(i) == "(") || (mask.charAt(i) == ")") || (mask.charAt(i) == " "))
            if (bolMask) {
                sCod += mask.charAt(i);
                mskLen++;
            } else {
                sCod += sValue.charAt(nCount);
                nCount++;
            }
            i++;
        }

        objeto.value = sCod;
        if (nTecla != 8) { // backspace
            if (mask.charAt(i - 1) == "9") { // apenas números...
                return ((nTecla > 47) && (nTecla < 58));  // números de 0 a 9
            } else { // qualquer caracter...
                return true;
            }
        } else {
            return true;
        }
    }
}

/******************
* Método: mascara(tipo, this, event)
* Finalidade: Máscara para inputs
******************/
function mascara(tipo, campo, teclaPress) {
    if (window.event) {
        var tecla = teclaPress.keyCode;
    } else {
        tecla = teclaPress.which;
    }

    var s = new String(campo.value);
    // Remove todos os caracteres à seguir: ( ) / - . e espaço, para tratar a string denovo.
    s = s.replace(/(\.|\(|\)|\/|\-| )+/g, '');

    tam = s.length + 1;

    if (tecla != 9 && tecla != 8) {
        switch (tipo) {
            case 'CPF':
                if (tam > 3 && tam < 7)
                    campo.value = s.substr(0, 3) + '.' + s.substr(3, tam);
                if (tam >= 7 && tam < 10)
                    campo.value = s.substr(0, 3) + '.' + s.substr(3, 3) + '.' + s.substr(6, tam - 6);
                if (tam >= 10 && tam < 12)
                    campo.value = s.substr(0, 3) + '.' + s.substr(3, 3) + '.' + s.substr(6, 3) + '-' + s.substr(9, tam - 9);
                break;

            case 'CNPJ':

                if (tam > 2 && tam < 6)
                    campo.value = s.substr(0, 2) + '.' + s.substr(2, tam);
                if (tam >= 6 && tam < 9)
                    campo.value = s.substr(0, 2) + '.' + s.substr(2, 3) + '.' + s.substr(5, tam - 5);
                if (tam >= 9 && tam < 13)
                    campo.value = s.substr(0, 2) + '.' + s.substr(2, 3) + '.' + s.substr(5, 3) + '/' + s.substr(8, tam - 8);
                if (tam >= 13 && tam < 15)
                    campo.value = s.substr(0, 2) + '.' + s.substr(2, 3) + '.' + s.substr(5, 3) + '/' + s.substr(8, 4) + '-' + s.substr(12, tam - 12);
                break;

            case 'TEL':
                if (tam > 2 && tam < 4)
                    campo.value = s.substr(0, 2) + ' ' + s.substr(2, tam);
                if (tam >= 7 && tam < 11)
                    campo.value = s.substr(0, 2) + ' ' + s.substr(2, 4) + '-' + s.substr(6, tam - 6);
                break;

            case 'DATA':
                if (tam > 2 && tam < 4)
                    campo.value = s.substr(0, 2) + '/' + s.substr(2, tam);
                if (tam > 4 && tam < 11)
                    campo.value = s.substr(0, 2) + '/' + s.substr(2, 2) + '/' + s.substr(4, tam - 4);
                break;
        }
    }
}

/******************
* Método: MarcaLinhaGrid(elementRef, backgroundColor)
* Finalidade: Marcador de linha de um objeto GridView.
*             elementRef: linha selecionada.
*             backgroundColor: cor que a linha selecionada ira ficar.
******************/
var g_currentRow = null;
var g_currentRowBackgroundColor = 'White';
function MarcaLinhaGrid(elementRef, backgroundColor) {
    if (typeof elementRef == 'string')
        elementRef = document.getElementById(elementRef);

    if (g_currentRow != null)
        g_currentRow.style.backgroundColor = g_currentRowBackgroundColor;

    g_currentRow = elementRef;
    g_currentRowBackgroundColor = elementRef.style.backgroundColor;

    elementRef.style.backgroundColor = backgroundColor;

}

/******************
* Método: PopUp(name, height, width, Id)
* Finalidade: Metodo que abre janela popup.
******************/
function PopUp(name, height, width, Id) {
    window.open('' + name + '.aspx?Id=' + Id + '', '', 'scrollbars = yes, status = yes, height = ' + height + ', width = ' + width + '');
}

/******************
* Método: ReloadPage(reloadPage)
* Finalidade: Metodo que efetua o recarregamento da pagina pai.
******************/
function ReloadPage(reloadPage) {
    if (reloadPage) {
        window.opener.location.reload();
        //self.close(); 
        //window.close();
        return true;
    }
    else {
        return false;
    }
}

/************************
* Método: 		strReplace
* Finalidade: 	substitui um caracter por outro em uma string
* Parâmetros: 	string, caracter lido, caracter escrito 
************************/
function strReplace(s, r, w) {
    try {
        return s.split(r).join(w);
    } catch (e) {
        return s;
    }
}
/*********************
* Método: configuraMsn
* Finalidade: Determina características do botão do msn
* Exemplo de Uso: configuraMsn("div do msn", largura, altura)
**********************/
function configuraMsn(div, largura, altura, interna) {
    var caminhoImg = "imagens/";
    
    if (interna)
        caminhoImg = "../imagens/";

    /*
    if (navigator.appName == "Microsoft Internet Explorer") {
        
        $("#" + div).css({
            "background": "none",
            "width": "" + largura - 3 + "px",
            "margin-left": "2px",
            "border": "none",
            "cursor": "pointer",
            "height": "25px"
        })
        
        $("#" + div + " canvas").css({
            "background": "none"
        });

        $("#" + div + " > div").css({
            "border": "solid 0px red",
            "width": "" + largura + "px",
            "height": "" + altura + "px",
            "background": "none",
            "cursor": "pointer",
            "display": ""
        });

        alert('fase1');

        /*
        $("#" + div + " > div > a > div").css({
            "border": "solid 0px green",
            "width": "" + largura + "px",
            "height": "" + altura + "px",
            "background": "url( " + caminhoImg + "bg_barra_ON.jpg') top left no-repeat #333333",
            "cursor": "pointer"
        });
        
        alert('fase2');

        var status = $("#" + div + " img").attr("alt");

        alert(status);
        if (status == "Online") {
            $("#" + div).css("background", "url('" + caminhoImg + "bg_barra_ON.jpg') top left no-repeat");
        } else if (status == "Offline") {
            $("#" + div).css("background", "url('" + caminhoImg  + "bg_barra_OFF.jpg') top left no-repeat");
        } else {
            $("#" + div).css("background", "url('" + caminhoImg  + "bg_barra_ON.jpg') top left no-repeat");
        }

        $("#" + div + " img").css({ "display": "none" });

    } else {

        */
        
        $("#" + div).css({
            "background": "none",
            "width": "" + largura + "px",
            "border": "none"
        }).find("canvas").remove();

        $("#" + div + " > div").css({
            "border": "none",
            "width": "" + largura + "px",
            "height": "" + altura + "px",
            "background": "none"
        });


        $("#" + div + " > div > a > div").css({
            "border": "none",
            "width": "" + largura + "px",
            "height": "" + altura + "px",
            "background": "none"
        });

        var status = $("#" + div + " img").attr("alt");

        if (status == "Online") {
            $("#" + div).css("background", "url('" + caminhoImg  + "bg_barra_ON.jpg') top left no-repeat");
        } else if (status == "Offline") {
            $("#" + div).css("background", "url('" + caminhoImg  + "bg_barra_OFF.jpg') top left no-repeat");
        } else {
            $("#" + div).css("background", "url('imagens/bg_barra_ON.jpg') top left no-repeat");
        }

        $("#" + div + " img").css({ "display": "none" });

        $("#topo_msn").show(1000);
    
    //}

}
