pontuacoes = new Array("'",'"','!','@','#','$','%','¨','&','*','(',')','_');
pontuacoes.push('+',',','=','¹','²','³','£','¢','¬','§','´','[','`','{');
pontuacoes.push('ª','~',']','}','^','º','\\','.',';','/','|','<','>',':');
pontuacoes.push('?','°','-','„','“','”','…');

function getElement(elemento){
    return document.getElementById(elemento);
}

function getByTag(tag){
    return document.getElementsByTagName(tag);
}

function definir(elemento, valores){
    if(typeof(elemento)=="undefined"){
        elemento = valores;
    }
    return elemento;
}

function strip(str){
    str = str.replace(/^\s+/, "");
    return str.replace(/\s+$/, "");
}

var estilos = {
    'erro': {'style.border':'1px solid green'},
    'ok':{'style.border':'2px inset white'}
}

function mudaEstilo(elemento, mensagem){

    for (estilo in estilos[mensagem]){
        elemento.x = modelos[mensagem][estilo];
    }
}

function removeElement(element){
    element.parentNode.removeChild(element);
}

function replaceAll(texto, original, novo){
    novo = definir(novo, "");
    while(texto.indexOf(original)!= -1){
        texto = texto.replace(original, novo);
    }
    return texto
}

function Ajax(){};
Ajax.prototype.instancia = function(){
    try{
        return new XMLHttpRequest();
    }
    catch(ee){
        try{
            return new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch(e){
            try{
                return new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(E){
                return false;
            }
        }
    }
}

Ajax.prototype.requisicao = function(onde,url,send,metodo,parametros){
    var ajax = this.instancia();
    var send = definir(send,"");
    var metodo = definir(metodo, "GET");
    if (ajax){
        ajax.open(metodo,url);
        ajax.send();
        ajax.onreadystatechange = function(){
            if(ajax.readyState == 4){
                if(typeof(parametros) != "undefined"){
                    onde(ajax.responseText, parametros);
                }
                else{
                    onde(ajax.responseText);
                }
            }
        }
    }
    else{
        alert("Seu navegador não suporta AJAX.");
    }
}

function validaEmail(email){
    var tam = email.length;
    var aux1 = 0;
    var aux2 = 2;
    while (aux1<tam){
        if ((email.charAt(aux1)=="@")&&(aux1>0)){
            for (aux2+=aux1;aux2<tam;aux2++){
                if ((email.charAt(aux2)==".")&&(aux2<tam-2)){
                    return true;
                }
            }
        }
        aux1++;
    }
    return false;
}

function tirarPontuacao(frase){
    for (i=0;i<pontuacoes.length;i++){
        frase = replaceAll(frase,pontuacoes[i],'');
    }
    return frase;
}

function criarNavegador(navegador,pagAtual, qtdPaginas, url){
    navegador = getElement(navegador);
    navegador.innerHTML = "";
    /* página anterior */
    if (pagAtual>1){
        anterior = pagAtual-1;
        pagAnterior = "<a id='pagAnterior' href='"+url+"pag="+anterior+"'>";
        pagAnterior += "«Anterior</a>&nbsp;";
        navegador.innerHTML += pagAnterior;
    }

    /* número de páginas */
    var inicio=1;
    var fim= (qtdPaginas<=10)? qtdPaginas : 10;
    if ((qtdPaginas>10)&(pagAtual>5)){
        fim = (qtdPaginas>pagAtual+5) ? pagAtual+5 : qtdPaginas;
        inicio = (qtdPaginas>pagAtual+5) ? pagAtual - 4 : qtdPaginas-9;
    }
    if (qtdPaginas>1){
        for(pag=inicio;pag<=fim;pag++){
            fonte = (pag==pagAtual) ? 'bold' : 'normal';
            if (fonte=='normal'){
              navegador.innerHTML += "<a id='pag"+pag+"' href='"+url+"pag="+pag+"';>"+pag+" </a>&nbsp;";
            }else{
              navegador.innerHTML += "<spam id='pag"+pag+"' >"+pag+" </spam>&nbsp;";
            }
            getElement('pag'+pag).style.fontWeight = fonte;
        }
    }


    /* próxima página */
    if (pagAtual<qtdPaginas){
        prox = pagAtual+1;
        pagProxima = "<a id='pagProxima' href='"+url+"pag="+prox+"' ";
        pagProxima+=">&nbsp;Pr&oacute;xima»</a>";
        navegador.innerHTML += pagProxima;
    }

}

//Função para textarea utilizar maxlength também.
function maxLength(obj, limit) {
    if (obj.value.length >= limit) {
        obj.value = obj.value.substring(0, limit-1);
    }
}


/*
**************************************
* String.highlight v1.0              *
* Autor: Carlos R. L. Rodrigues      *
**************************************
*/
String.prototype.highlight = function(f, c, i){
    var r = this, t = /([(){}|*+?.,^$\[\]\\])/g, i = !i ? "i" : "", rf = function(t, i){
        return r.lastIndexOf("<", i) > r.lastIndexOf(">", i) ? t : c(t, p);
    };
    for(var p = -1, l = (f = f instanceof Array ? f : [f]).length; ++p < l;)
        r = r.replace(new RegExp(f[p].replace(t, "\\\$1"), "gm" + i), rf);
    return r;
}
/*function c(s, i){
    return '<span class="bg' + i + '">' + s + '</span>';
}
var s = 'blabla <a href="http://jsfromhell.com">JSFromHell</a>';
document.write(s.highlight(["JS", "from", "o", "l"], c));*/
/*
**************************************
* Event Listener Function v1.4       *
**************************************
*/
addEvent = function(o, e, f, s){
    var r = o[r = "_" + (e = "on" + e)] = o[r] || (o[e] ? [[o[e], o]] : []), a, c, d;
    r[r.length] = [f, s || o], o[e] = function(e){
        try{
            (e = e || event).preventDefault || (e.preventDefault = function(){e.returnValue = false;});
            e.stopPropagation || (e.stopPropagation = function(){e.cancelBubble = true;});
            e.target || (e.target = e.srcElement || null);
            e.key = (e.which + 1 || e.keyCode + 1) - 1 || 0;
        }catch(f){}
        for(d = 1, f = r.length; f; r[--f] && (a = r[f][0], o = r[f][1], a.call ? c = a.call(o, e) : (o._ = a, c = o._(e), o._ = null), d &= c !== false));
        return e = null, !!d;
    }
};

removeEvent = function(o, e, f, s){
    for(var i = (e = o["_on" + e] || []).length; i;)
        if(e[--i] && e[i][0] == f && (s || o) == e[i][1])
            return delete e[i];
    return false;
};

//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/forms/masked-input [v1.0]
//========================================================
// REQUIRES http://www.jsfromhell.com/geral/event-listener
//========================================================

MaskInput = function(f, m){
    function mask(e){
        var patterns = {"1": /[A-Z]/i, "2": /[0-9]/, "4": /[\xC0-\xFF]/i, "8": /./ },
            rules = { "a": 3, "A": 7, "9": 2, "C":5, "c": 1, "*": 8};
        function accept(c, rule){
            for(var i = 1, r = rules[rule] || 0; i <= r; i<<=1)
                if(r & i && patterns[i].test(c))
                    break;
                return i <= r || c == rule;
        }
        var k, mC, r, c = String.fromCharCode(k = e.key), l = f.value.length;
        (!k || k == 8 ? 1 : (r = /^(.)\^(.*)$/.exec(m)) && (r[0] = r[2].indexOf(c) + 1) + 1 ?
            r[1] == "O" ? r[0] : r[1] == "E" ? !r[0] : accept(c, r[1]) || r[0]
            : (l = (f.value += m.substr(l, (r = /[A|9|C|\*]/i.exec(m.substr(l))) ?
            r.index : l)).length) < m.length && accept(c, m.charAt(l))) || e.preventDefault();
    }
    for(var i in !/^(.)\^(.*)$/.test(m) && (f.maxLength = m.length), {keypress: 0, keyup: 1})
        addEvent(f, i, mask);
};

//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/string/capitalize [v1.0]

String.prototype.capitalize = function(){
    return this.replace(/\w+/g, function(a){
        return a.charAt(0).toUpperCase() + a.slice(1).toLowerCase();
    });
};