function trataEvento(obj, event, func) {
 try {
  obj.addEventListener(event, func, false);
 } catch (e) {
  try {
   obj.attachEvent("on"+event, func);
  } catch (e0) {
   if (typeof eval("obj.on"+event) == "function") {
    var existing = eval("obj.on"+event);
    eval("obj.on"+event+" = function () { existing(); func(); }");
   } else {
    eval("obj.on"+event+" = func;");
   }
  }
 }
}

function zebra(a){
 /* argumento "a" é o objeto que contém as tabelas (pode ser um id, a janela etc);
  * mais argumentos podem ser usados e 
  * servem para colocar classes nos tds:
  * inserir número de coluna (início em zero) e nome da classe.
  * exemplos:
  * zebra(document.getElementById("inst-dados"),0);
  * zebra(window,0,"coluna1",1,"coluna2");
  */
 if(a){
  tabelas = a.getElementsByTagName("table");
  for (var i=0, tabL=tabelas.length; i<tabL; i++) {
   var tbodys = tabelas[i].getElementsByTagName("tbody");
   for (var j=0, tbL=tbodys.length; j<tbL; j++) {
    var even = false;
    var trs = tbodys[j].getElementsByTagName("tr");
    for (var k=0, trsL=trs.length; k<trsL; k++){
     trs[k].className += (even)?" even":" odd";
     var tds = trs[k].getElementsByTagName("td");
     even = !even;
     if(arguments.length>1){
      for (var l=1, argL=arguments.length; l<argL; l=l+2){
       if(!tds[arguments[l]].className){tds[arguments[l]].className=arguments[l+1]}
       if((tds[arguments[l]].className)&&(tds[arguments[l]].className.indexOf(arguments[l+1])<0)){
        var classes = tds[arguments[l]].className.split(" ");
        classes.push(arguments[l+1]);
        tds[arguments[l]].className = classes.join(" ");
       }
      }
     }
    }
   }
  }
 }
}
