/*
' --------------------------------------------------------------------------------
'
' INTERCRAFT SOLUTIONS INFORMÁTICA LTDA
' 15 DE JULHO DE 2009 - BASE COMUM PARA SOLUÇÕES ICRAFT
' COMPONENTE DE NAVEGAÇÃO
'
' OBSERVAÇÕES:::
'   - xxobservaçãoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
'   - incluir este script inserindo no page_load o comando: incluiscript(page, "icraft.js")
'
' ALTERAÇÕES:::
'   - dd/mmm/yyyy xtécnico xxmotivotodocomletrasminúsculasxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
'   - 16/jun/2009 lucianol debugprint, busca de campo debug ao invés de colocar diretamente em body caso container não seja especificado
'   - 29/jul/2009 lucianol debugprint, caso campo debug exista e esteja com display none, o mesmo é configurado com display block
'   - 29/out/2009 lucianol fechaflash, rotina utilizada pelo icftflash para fechar bloco
'
' IDÉIAS/NECESSIDADES:::
'   - xtecnico xxcomentárioxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
'
' --------------------------------------------------------------------------------
'
'
'
*/
// facilitador que retorna componente mediante seu nome
// método de pesquisa
// 1-window, document ou body
// 2-getelementbyid
// 3-procura elem por nome se existir origem ($...)
// IMPORTANTE:: caso não especifique origem, somente getelementbyid será executado
//     e ao procurar com origem, não esqueça de mencionar name= no controle
function $_(elem, origem) {
    if (elem=="window")
        elem = window; 
    else
    if (elem=="document")
        elem = document;
    else
    if (elem=="body")
        elem = document.getElementsByTagName("body").item(0);
    else
	    if (typeof(elem)=="string") {
	        var elemobj = undefined;
            elemobj = document.getElementById(elem);
            
            if ((elemobj == null) && (origem != undefined)) {
                origem = $_(origem);
                var Prox = new ProcuraElem();
                elemobj = Prox.MaisProxPorNome(elem,origem);
            }
            
            elem = elemobj;
            
      }

    if (elem == null) {
        elem = undefined;
    }
    return elem;
}

// busca array que contém tais características
// elem = filhos deste elemento
// id = máscara de busca por nome
// classe = máscara de busca por classe
// tagname = tipos de elementos procurados
function $$_(origem, id, classe) {
    var ret = new Array()
    elem = $_(origem);
    if (arguments.length==1) {
        for (filho in elem) {
            ret.push(filho);
        }
    } else {
        var Procura = new ProcuraElem()
        ret = Procura.PorMascara(elem,id,classe);
    }
    
    return ret;
}

var UnicoIDGlobal = 0;

// Retorna identificação única do elemento (se possível)
function UnicoID (ctl) {
    if (ctl.uniqueNumber != undefined) {
        return ctl.uniqueNumber;
    }
    UnicoIDGlobal--;
    try {
        ctl.uniqueNumber = UnicoIDGlobal;
        }
    catch(e) {
        UnicoIDGlobal++;    
        return "";
    }
    return ctl.UniqueNumber;
}

// funções como objeto de procura em recursiva de elemento
// a partir de uma origem, seguindo hierarquicamente para baixo e,
// não encontrando, subindo para descer novamente.

// aqui inicia esta objeto. memória serve para acumular a hierarquia já pesquisada
function ProcuraElem() {
//{
    this.memoria = "";
    }

    // busca hierárquica superior
    ProcuraElem.prototype.MaisProxPorID = function(nomeelem,origem) {
        for (var obj=origem;
            obj!=null;
            obj=obj.parentNode) {
            var ret = this.NosFilhosPorID(nomeelem,obj);
            if (ret != null) return ret;
        }
        return null;
    }

    // busca hierárquica inferior
    ProcuraElem.prototype.NosFilhosPorID = function(nomeelem, origem) {
        if (origem != null) {
            if ( new String(this.memoria+";").indexOf(";"+UnicoID(origem)+";")==-1 ) {
            
                if (origem.id == nomeelem) return origem;
                
                
                  for (i in origem.childNodes) {
                        if (typeof(origem.childNodes[i])=="object"){
                            var ret = this.NosFilhosPorID(nomeelem, origem.childNodes[i]);       
                            if (ret != null) return ret;                    
                        }                    
                  }
                  
                this.memoria += ";" + UnicoID(origem);
            }
        }
        return null;
    }

    // em cada nó, busca hierarquica inferior (nos filhos) antes de subir
    ProcuraElem.prototype.MaisProxPorNome = function(nomeelem,origem) {
        nomeelem = nomeelem.toUpperCase();
        
        
        for (var obj=origem;
                obj!=null;
                obj=obj.parentNode) {
                var ret = this.NosFilhosPorNome(nomeelem,obj);
            if (ret != null) return ret;
        }
        return null;
    }
    
    // se este node não foi pesquisado, este é verificado da seguinte forma:
    //      -mesmo nome
    //      -acabado por "$" seguido de nome (formação para asp.net)
    ProcuraElem.prototype.NosFilhosPorNome = function(nomeelem, origem) {
        if (origem != null) {

            if ( new String(this.memoria+";").indexOf(";"+UnicoID(origem)+";")==-1 ) {
                var nn = NZ(origem.name,"");
                
                if (nn!="") {
                    nn = nn.toUpperCase();
                    if (nn == nomeelem) return origem;
                    var ultpal = nn.slice(-nomeelem.length-1);
                    if ((ultpal == ("$"+nomeelem))) return origem;
                }

                  for (i in origem.childNodes) {
                  
                        if (typeof(origem.childNodes[i])=="object"){
                        
                            var ret = this.NosFilhosPorNome(nomeelem, origem.childNodes[i]);
                            if (ret != null) return ret;                    
                        }
                  }

                this.memoria += ";" + UnicoID(origem);
            }
        }
        return null;
    }

    // recupera a lista de componentes com uma determinada condição
    //      -idmasc para máscara de id ex.: "_pnl.*"
    //      -classemasc para máscara de classes ex.: "^sobre$" (somente classe sobre)
    ProcuraElem.prototype.PorMascara = function(origem, idmasc, classemasc) {
        elems = new Array();
        if (origem != null) {
        
            if (( new String(this.memoria+";").indexOf(";"+UnicoID(origem)+";")==-1 ) || (UnicoID(origem)==undefined)) {
            
                idmasc = NZ(idmasc,"");
                classemasc = NZ(classemasc, "");
                sel = true;

                if (idmasc != "")
                    if (origem.id == undefined)
                        sel = false;
                    else
                        sel = sel && new RegExp(idmasc).test(origem.id);
                      
                if (classemasc != "")
                    if (origem.className == undefined)
                        sel = false;
                    else
                        sel = sel && new RegExp(classemasc).test(origem.className);
          
                if (sel)
                    elems.push(origem);

                for (var z=0;z<origem.childNodes.length;z++) {
                    if (typeof(origem.childNodes[z])=="object")
                        elems = elems.concat(this.PorMascara(origem.childNodes[z],idmasc, classemasc));
                   
                }
                this.memoria += ";" + UnicoID(origem);
            }
        }
        return elems;
    }

    // retorna texto contendo html dos tópicos pesquisados    
    ProcuraElem.prototype.ListaMaisProx = function(nomeelem,origem) {
        var result = "";
        for (var obj=origem;obj!=null;obj=obj.parentNode) {
            result += this.ListaFilhos(nomeelem,obj);
        }
        return result;
    }

    ProcuraElem.prototype.ListaFilhos = function(nomeelem, origem) {
        var result = "";
        if (origem != null) {
            if ( new String(this.memoria+";").indexOf(";"+UnicoID(origem)+";")==-1 ) {
                result += "<li>" + origem.id + "(" + origem.tagName + ")</li>";


                itens = "";
                for (var z=0;z<origem.childNodes.length;z++) {
                    if (typeof(origem.childNodes[z])=="object")
                        result += this.ListaFilhos(nomeelem, origem.childNodes[z]);       
                }
                if (itens!="")
                    result += "<ul>" + itens + "</ul>";
                
                this.memoria += ";" + UnicoID(origem);
            } else {
                result += "<li>evitou pois j&aacute; pesquisou:"+origem.id + "(" + origem.tagName + ")</li>";
            }
        }
        return result;
    }
    
    
//}


// exclui controle da página
function RemoveElemento(nomecontrole) {
    nomecontrole = $_(nomecontrole);
    nomecontrole.parentNode.removeChild(nomecontrole);
    document.body.visible=true;
}

// esconde elemento da página
function EscondeElemento(nomecontrole, origem) {
    nomecontrole = $_(nomecontrole, origem);
    nomecontrole.style.visibility = "hidden";
    document.body.visible = true;
}

// mostra elemento da página
function MostraElemento(nomecontrole, origem) {
    nomecontrole = $_(nomecontrole, origem);
    nomecontrole.style.visibility = "visible";
}

// convert valores inexistentes ou indefinidos em algum default
function NZ(valor, def) {
    try {
        if (valor!=undefined)
            return valor;
    } catch (ex) {}
    return def;
}

// não só converte inexistentes e indefinidos como também considerados nulos de tipos
function NZV(valor, def) {
    try {
        valor = NZ(valor, def);
        if ((valor=="") || (valor==0)) {
            return def;
        }
        return valor;
    }
    catch (ex) {}
    return def;
}

// rotina para carrega evento para um determinado objeto
function CarregaEvento(obj, evento, funcao) {
    var ctl = $_(obj);
    if (ctl.attachEvent != undefined) {
        ctl.attachEvent(evento, funcao)
    } else {
        switch (evento.toLowerCase()) {
            case "scriptcommand":
                ctl.scriptcommand = funcao;
                break;
            case "playstatechange":
                ctl.playstatechange = funcao;
                break;
            case "markerhit":
                ctl.markerhit = funcao;
                break;
            default:
                AdicionaFuncao(ctl, evento, funcao);
        }
    }
}            

// rotina inclu função em uma função já existente
function AdicionaFuncao(obj, evento, funcao) {
   obj[evento] = new Function(InteriorDeFuncao(obj[evento])+";"+InteriorDeFuncao(funcao));
}

// rotina retorna texto de interior da função sem sua especificação
function InteriorDeFuncao(funcao) {
    var x = new String(funcao);
    var posini = x.indexOf("{");
    var posfim = x.lastIndexOf("}");
    x = x.substring(posini+1,posfim-1);
    return x;
}

// contatena valores em inner
function DebugPrint(container, texto) {
    var obj;
    if (arguments.length==1) {
        obj = $_('debug');
        
        if (obj==undefined) {
            obj = document.body;
        } else
        {
            if (obj.style.display == "none") {
                obj.style.display = "block";
            }
        }
            
        TxtToInner(container + "<br />",obj);
        return;
    } 
    obj = $_(container);
    TxtToInner(texto + "<br />", obj);
}

// coloca texto dentro de inner de obj
function TxtToInner(texto, destino) {
    destino = $_(destino);
    destino.innerHTML += texto + "<br/>";
}

// coloca value dentro de inner de obj
function ValueToInner(origem, destino) {
    origem = $_(origem);
    destino = $_(destino);
    destino.innerHTML = origem.value;
}


// busca filhos do elemento em uma lista texto separando os itens por vírgula
function FilhosTxt(elem,html, taminner) {
    html = NZV(html,false);
    taminner = NZV(taminner,-1);
    var txt = "";
    elem = $_(elem);
    for (obj in elem) {
	    if (html==true) {
                txt += "<b>" + obj + "</b>=";
                try {
                    if (taminner>=0 && (obj == "innerHTML" || obj == "textContent"))
                        txt += elem[obj].substr(0,taminner);
                    else
                        txt += elem[obj];
                } catch(ex) {
                    txt += "[erro]";
                }
                txt += "<br/>";
	    } else {
                txt += obj + ":";
                try {
                    if (taminner>=0 && (obj == "innerHTML" || obj == "textContent"))
                        txt += elem[obj].substr(0,taminner);
                    else
                        txt += elem[obj];
                } catch(ex) {
                    txt += "[erro]";
                }
                txt +=  "; ";
        }
    }
    return txt;
}

// para resolver a diferença entre firefox e explorer no que diz respeito 'a evento
function EventResolv(e) {
    if (e!=undefined) {
        return e;
    }
    return window.event;
}

// evita erro quando não existe a propriedade retornando valor default
function Prop(obj, prop, def) {
    try {
        return NZ(obj[prop],def);
    } catch (e) {
    }
    return def;
}

// rotina para arrastar elementos da tela.
// para utilizar, basta chamar diretamente no código Arrasta.Prepara(param) onde:
// params =
// 1-nome dos campos separados por ";"
// 2-lista de campos, resultado de $$_(...) por exemplo
function Arrasta() {};
//{

   Arrasta.elementos = "";
   Arrasta.controle = null;

   Arrasta.Verifica = function(e) {
        EventResolv(e).returnValue = true;        
    }
   
   Arrasta.Inicia = function(e) {
        e = EventResolv(e);
        if (e.button!=2) {
            var src = Prop(e,"srcElement",e.target);

            if ( new String(Arrasta.elementos+";").indexOf(";"+UnicoID(src)+";")!=-1 ) {
        
                Arrasta.controle = src;
                Arrasta.controle.origX = Arrasta.controle.offsetLeft;
                Arrasta.controle.origY = Arrasta.controle.offsetTop;
                Arrasta.controle.clickX = EventResolv(e).clientX;
                Arrasta.controle.clickY = EventResolv(e).clientY;
            
            }
        }
   }
   
   Arrasta.Movimenta = function(e) {
        e = EventResolv(e);
        
        if ((e.button!=2) && (Arrasta.controle != null)) {
        
       
            DX = e.clientX-Arrasta.controle.clickX;
            DY = e.clientY-Arrasta.controle.clickY;
            
           Arrasta.controle.style.left = (Arrasta.controle.origX+DX) + "px";            
           Arrasta.controle.style.top = (Arrasta.controle.origY+DY) + "px";
           
            e.returnValue = false;
            e.cancelBubble = true;
        }
   }
   
   Arrasta.Solta = function(e) {
        if (Arrasta.controle != null)
            Arrasta.controle = null;
   }
   
   Arrasta.Prepara = function(elems) {
      Arrasta.elementos = "";
      if (typeof(elems) == "string") {
        elems = split(elems,";");
        for (i in elems) {
            Arrasta.elementos += ";" + UnicoID($_(elems[i]));
        }
      } else {
          for (i in elems) {
            Arrasta.elementos += ";" + UnicoID(elems[i]);
          }
      }

      if (Arrasta.elementos != "") {
          document.ondragstart = Arrasta.Verifica;
          document.onmousedown = Arrasta.Inicia;
          document.onmousemove = Arrasta.Movimenta;
          document.onmouseup = Arrasta.Solta;
      }
   }
    
//}



// abre janela popup com altura e largura especificada
// será centralizada apresentando como título a descricao
function PopUp(url, largura, altura, descricao, atributos){
    if (largura==undefined)
        largura = 550;
    if (altura==undefined)
        altura = 410;
    if (descricao==undefined)
        descricao = 'Informativo';
    var esquerda = ((screen.width)/2)-(largura/2);
    var topo = ((screen.height)/2)-(altura/2);
    if (atributos==undefined)
        atributos = "width="+largura+", height="+altura+", top="+topo+", left="+esquerda+", scrollbars=yes, status=no, toolbar=no, location=no, directories=no, menubar=no, resizable=yes, fullscreen=no";
    return window.open(url, descricao, atributos);
}


// Identificação padronizada do navegador
function Nav() {};
//{
    Nav.IE = (navigator.appName == "Microsoft Internet Explorer");
    Nav.IE5 = Nav.IE && (navigator.userAgent.indexOf('MSIE 5') != -1);
    Nav.IE50 = Nav.IE && (navigator.userAgent.indexOf('MSIE 5.0') != -1);
    Nav.IE6 = Nav.IE && (navigator.userAgent.indexOf('MSIE 6') != -1);
    Nav.IE7 = Nav.IE && (navigator.userAgent.indexOf('MSIE 7') != -1);
    Nav.IE8 = Nav.IE && (navigator.userAgent.indexOf('MSIE 8') != -1);
    Nav.Gecko = navigator.userAgent.indexOf('Gecko') != -1;
    Nav.Safari = navigator.userAgent.indexOf('Safari') != -1;
    Nav.Opera = navigator.userAgent.indexOf('Opera') != -1;
    Nav.Mac = navigator.userAgent.indexOf('Mac') != -1;
    Nav.NS7 = navigator.userAgent.indexOf('Netscape/7') != -1;
    Nav.NS71 = navigator.userAgent.indexOf('Netscape/7.1') != -1;
    Nav.NS8 = navigator.userAgent.indexOf('Netscape/8') != -1;
    if (Nav.Opera) {
        Nav.IE = true;
        Nav.Gecko = false;
        Nav.Safari = false;
    }
//}


// atribui url a location de frame
function AtribFrameLocation(Frame, URL) {
    if (frames[Frame].location) {
        frames[Frame].location.href = URL;
    } else {
        $_(Frame).src = URL;
	}
}


// prepara variável para envio ao aspnet a partir do javascript
function UrlJSEncode(Txt) {
    Txt = escape(Txt);
    Txt = Txt.replace(/\_/g,"%5F");
    Txt = Txt.replace(/\//g,"%2F");
    Txt = Txt.replace(/\?/g,"%3F");
    Txt = Txt.replace(/=/g,"%3D");
    Txt = Txt.replace(/&/g,"%26");
    Txt = Txt.replace(/@/g,"%40");
    Txt = Txt.replace(/\%/g,"_");
    return Txt;
}

function UrlJSDecode(Txt) {
    Txt = Txt.replace(/\_/g, "%");
    return unescape(Txt);
}

// carrega em select ou dropdownlist itens separados por ponto e vírgula
function OpcaoCarrega(select, itens) {
    itens = itens.split(";");
    var opcao;
    for(var z=0;z<itens.length;z+=2) {
        opcao = document.createElement("option");
        opcao.value = itens[z];
        opcao.innerText = itens[z+1];
        select.appendChild(opcao);
    }
}

// função para gerar postback no aspnet
function doPostBack(eventTarget, eventArgument) {
    var form = document.forms['form1'];
    if (!form)
        form = document.forms(0);
    if (!form.onsubmit || (form.onsubmit() != false)) {
        form.__EVENTTARGET.value = eventTarget;
        form.__EVENTARGUMENT.value = eventArgument;
        form.submit();
    }
}

// para trocar todo conteúdo. ainda não fiz teste de performance para ver qual mais rápida: esta ou regex 
function ReplaceAll(texto,encontrar,substituir) {
	while (texto.indexOf(encontrar)!=-1) {
		texto = texto.replace(encontrar,substituir);
	}
	return texto;
}


// função que retorna posição na tela x, considerando deslocamento
function ScrollLeft() {
   var x = (window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft);
   return x?x:0;
}

// função que retorna posição y na tela considerando deslocamento
function ScrollTop() {
   var y = (window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop);
   return y?y:0;
}


// para centralizar objeto
function Centraliza(ctl) {
    ctl=$_(ctl);
    var doc=document.body;
    ctl.style.left = (doc.clientWidth-ctl.clientWidth)/2+ScrollLeft() + "px";
    ctl.style.top = (screen.height-ctl.clientHeight)/4+ScrollTop();
}




////////////////////////////
// rotinas sendo revisadas


function AtivaSetas(limite,conteudo,cima,baixo) {

    var limitectl = $_(limite);
    var conteudoctl = $_(conteudo);
    var cimactl = $_(cima);
    var baixoctl = $_(baixo);
    
    if(conteudoctl.clientHeight>(limitectl.clientHeight-40)) {
        baixoctl.style.visibility = "visible";
        cimactl.style.visibility = "visible";
    }

    var comm = "AtivaSetasTempo('" + limite + "','" + conteudo + "',-10)";
    CarregaEvento(baixoctl,"onmouseover", new Function("$_('" + baixo + "').AtivaSetasRolando = setInterval(\"" + comm + "\",100);"));
    
    comm = "AtivaSetasTempo('" + limite + "','"+conteudo+"',10)";
    CarregaEvento(cimactl,"onmouseover", new Function("$_('" + cima + "').AtivaSetasRolando = setInterval(\"" + comm + "\",100);"));
    
    CarregaEvento(baixoctl,"onmouseout", new Function("if (NZV($_('" + baixo + "').AtivaSetasRolando,'')!='') clearInterval($_('" + baixo + "').AtivaSetasRolando);"));
    
    CarregaEvento(cimactl,"onmouseout", new Function("if (NZV($_('" + cima + "').AtivaSetasRolando,'')!='') clearInterval($_('" + cima + "').AtivaSetasRolando);"));

    comm = "$_('"+conteudo+"').style.marginTop='0px'";
    CarregaEvento(cimactl,"onclick", new Function("setTimeout(\"" + comm + "\",0); if (NZV($_('" + baixo + "').AtivaSetasRolando,'')!='') clearInterval($_('"+baixo+"').AtivaSetasRolando); if (NZV($_('" + cima + "').AtivaSetasRolando,'')!='') clearInterval($_('" + cima + "').AtivaSetasRolando);"));

    comm = "$_('"+conteudo+"').style.marginTop=RetiraUnid($_('" + conteudo + "').style.marginTop)-$_('" + limite + "').clientHeight*.65+'px';AtivaSetasTempo('" + limite + "','" + conteudo + "',-1)";
    CarregaEvento(baixoctl,"onclick", new Function("setTimeout(\"" + comm + "\",0); if (NZV($_('" + baixo + "').AtivaSetasRolando,'')!='') clearInterval($_('" + baixo + "').AtivaSetasRolando); if (NZV($_('" + cima + "').AtivaSetasRolando,'')!='') clearInterval($_('" + baixo + "').AtivaSetasRolando);"));
    
}

function RetiraUnid(param) {
    return parseInt(NZV(param,"0"));
}

function AtivaSetasTempo(limite,conteudo,desl) {
    var limitectl = $_(limite);
    var conteudoctl = $_(conteudo);
    var marg = RetiraUnid(conteudoctl.style.marginTop)+desl;
    var limitsup = limitectl.clientHeight-conteudoctl.clientHeight-40;
    if ((desl<0)&&(marg<limitsup)) {
        marg = limitsup;
    }
    if ((desl>0)&&(marg>0)) {
        marg = 0;
    }
    conteudoctl.style.marginTop = marg+"px";
}

function EntraMasc(obj, masc,e) {
   var tecla = (window.event)?event.keyCode:e.which;       
   if (tecla == 59){
        var data = new Date();
        dia = data.getDate();
        mes = data.getMonth() + 1;
        ano = data.getFullYear();
        hora = data.getHours();
        minuto = data.getMinutes();
        segundo = data.getSeconds();
        if (dia < 10){
            dia = "0" + dia;
        }
        if (mes < 10){
            mes = "0" + mes;
        }
        if (hora < 10){
            hora = "0" + hora;
        }
        if (minuto < 10){
            minuto = "0" + minuto;
        }
        if (segundo < 10){
            segundo = "0" + segundo;
        }
        switch (masc) {
            case "[0-9]{1,2}($|/($|[0-9]{0,4}))":
                obj.value = mes + "/" + ano;
                return false;
            case "[0-9]{1,2}($|/($|[0-9]{1,2}($|/($|[0-9]{0,4}))))":
                obj.value = dia + "/" + mes + "/" + ano;
                return false;
            case "[0-9]{1,2}($|/($|[0-9]{1,2}($|/($|[0-9]{0,4}($| ($|[0-9]{1,2}($|:($|[0-9]{1,2}($|:($|[0-9]{1,2}))))))))))":
                obj.value = dia + "/" + mes + "/" + ano + " " + hora + ":" + minuto + ":" + segundo;
                return false;
            case "[0-9]{1,2}($|/($|[0-9]{1,2}($|/($|[0-9]{0,4}($| ($|[0-9]{1,2}($|:($|[0-9]{1,2}))))))))":
                obj.value = dia + "/" + mes + "/" + ano + " " + hora + ":" + minuto;
                return false;
        }            
   }
   var achou = false;
   if (masc.charAt(0) == ">") {
        achou = true;
        masc = masc.substring(1);
        carac = String.fromCharCode(tecla);
        if (carac != carac.toUpperCase()) {
                tecla = carac.toUpperCase().charCodeAt(0);
        }
    }        
    var pretend = obj.value + String.fromCharCode(tecla);
    
    switch (masc) {
        case "":
            masc = ".*";
            break;
        case "MM/yyyy":
            masc = "[0-9]{1,2}($|/($|[0-9]{0,4}))";  
            break; 
        case "dd/MM/yyyy":
            masc = "[0-9]{1,2}($|/($|[0-9]{1,2}($|/($|[0-9]{0,4}))))";  
            break; 
        case "dd/MM/yyyy HH:mm:ss":
            masc = "[0-9]{1,2}($|/($|[0-9]{1,2}($|/($|[0-9]{0,4}($| ($|[0-9]{1,2}($|:($|[0-9]{1,2}($|:($|[0-9]{1,2}))))))))))"
            break;
        case "dd/MM/yyyy HH:mm":
            masc = "[0-9]{1,2}($|/($|[0-9]{1,2}($|/($|[0-9]{0,4}($| ($|[0-9]{1,2}($|:($|[0-9]{1,2}))))))))"
            break;
        case "real":
            masc = "[-+]{0,1}[0-9]*[\\.,]{0,1}[0-9]*";
            break;
        case "inteiro":
            masc = "[-+]{0,1}[0-9]*";
            break;
        case "inteiro+":
            masc = "[+]{0,1}[0-9]*";
            break;
    }

        
    var Re = new RegExp("^"+masc+"$");
    var ar = Re.exec(pretend);
    obj.onkeyup = function(){
        if (achou) {
            obj.value = obj.value.toUpperCase();
        }
        if ((tecla == 46) && (ar !=null)){
            switch (masc) {
                case "[-+]{0,1}[0-9]*[\\.,]{0,1}[0-9]*":
                    obj.value = obj.value.substring(0,obj.value.length - 1) + ',';
                case "real":
                    obj.value = obj.value.substring(0,obj.value.length - 1) + ',';
            }
        tecla = null;
        }
    } 
    return (ar != null);  
}

function ValidaMasc(obj, masc,e) { 

    var pretend = obj.value;
    var valid = true;
    var Re;
    var ar;
    
    if (masc.charAt(0) == ">") {
        masc = masc.substring(1);
        obj.value = obj.value.toUpperCase();
    }
  
    if (obj.value != "") {
        switch (masc) {
            case "":
                valid = true;
                break;
               
            case "MM/yyyy":
                Re = new RegExp("^[0-9]{1,2}/[0-9]{0,4}$");
                ar = Re.exec(pretend);
                valid = (ar != null);
                break; 
            case "dd/MM/yyyy":
                Re = new RegExp("[0-9]{1,2}($|/($|[0-9]{1,2}($|/($|[0-9]{0,4}))))");
                ar = Re.exec(pretend);
                valid = (ar != null);
                if (valid) 
                    valid = (isDate(obj.value, /^([0-9]{1,2})[\/]([0-9]{1,2})[\/]([0-9]{1,4})$/, {d: 1, m: 2, y: 3})==0);
                break; 
            case "dd/MM/yyyy HH:mm:ss":
                Re = new RegExp("[0-9]{1,2}($|/($|[0-9]{1,2}($|/($|[0-9]{0,4}($| ($|[0-9]{1,2}($|:($|[0-9]{1,2}($|:($|[0-9]{1,2}))))))))))");
                ar = Re.exec(pretend);
                valid = (ar != null);
                break; 
            case "dd/MM/yyyy HH:mm":
                Re = new RegExp("[0-9]{1,2}($|/($|[0-9]{1,2}($|/($|[0-9]{0,4}($| ($|[0-9]{1,2}($|:($|[0-9]{1,2}))))))))");
                ar = Re.exec(pretend);
                valid = (ar != null);
                break; 
            case "real":
                Re = new RegExp("[-+]{0,1}[0-9]*[\\.,]{0,1}[0-9]*");
                ar = Re.exec(pretend);
                valid = (ar != null);
                obj.value = obj.value.replace(new RegExp(".","gi"), "," );
                break;
            case "inteiro":
                Re = new RegExp("[-+]{0,1}[0-9]*");
                ar = Re.exec(pretend);
                valid = (ar != null);
                break; 
            case "inteiro+":
                Re = new RegExp("[+]{0,1}[0-9]*");
                ar = Re.exec(pretend);
                valid = (ar != null);
                break; 
        }
        
        if (!valid) {
            alert("Preenchimento '" + obj.value + "' invalido para este campo. Veja o formato de acordo com a mascara '" + masc + "'.");
            obj.value = "";
            obj.focus();
        }
        
    }
}

function isDate(y, m, d){
    var h,i,s;
    if(typeof y == "string" && m instanceof RegExp && d){
        if(!m.test(y)) return 1;
            s = RegExp["$" + d.s], i = RegExp["$" + d.i], h = RegExp["$" + d.h], y = RegExp["$" + d.y], m = RegExp["$" + d.m] , d = RegExp["$" + d.d];
        }           
    d = Math.abs(d) || 0, m = Math.abs(m) || 0, y = Math.abs(y) || 0, h = Math.abs(h) || 0, i = Math.abs(i) || 0, s = Math.abs(s) || 0;
    return arguments.length != 3 ? 1 : d < 1 || d > 31 ? 2 : m < 1 || m > 12 ? 3 : /4|6|9|11/.test(m) && d == 31 ? 4
        : m == 2 && (d > ((y = !(y % 4) && (y % 1e2) || !(y % 4e2)) ? 29 : 28)) ? 5 : h < 0 || h > 23 ? 6 : i < 0 || i > 59 ? 7 : s < 0 || s > 59 ? 8: 0;
}



function CriaBotoesSubmit(controle, container, botoes, eventos, eventopadrao) {
    var container = $_(container);    
    var ar = botoes.toString().split(";");
    var ev = eventos.toString().split("{|}");
    var result = "";
    for (z=0;z<ar.length;z++) {
    
        var coma = "";
        var param = "";
        if (z<ev.length) {
            coma = ev[z];
        }
        coma = NZV(coma,eventopadrao);
        
        if (coma.toString().substr(0,11).toLowerCase() == "javascript:") {
            param = "";
            coma += "return false;";
        } else {
           param = coma;
           coma = "javascript:__doPostBack('" + coma + "','');return false;"
        }

        var id = controle + "_" + container.id + "_btn" + z;
        result += "<input type=\'submit\' value=\'" + ar[z] + "\' id=\'" + id + "\' param=\'" + param + "\' onclick=\'" + ReplaceAll(coma,"'","\"") + "\' />";
    }
    
    container.innerHTML = result;
}

function FechaFlash(ControlId) {
    $_(ControlId + "_btnClose").click();
}

function RedimensionaFlash(ControlId, Largura, Altura, FlashId) {
    if (FlashId == undefined) {
       FlashId = ControlId;
    }
    var flash = $_(FlashId);
    flash.setAttribute("width",Largura);
    flash.setAttribute("height",Altura);
    var lnk = $_(ControlId + "_lnkPopup");
    if (lnk!=undefined) 
        lnk.click();
}

