Sao duas funcoes interessantes do Javascript,com elas podemos definir um intervalo detempo que um evento ira acontecer.A sintaxe das duas funcoes e identica. O que muda e como agem.Sintaxe:window.setTimeout(funcao(), intervalo_em_milisegundos);window.setInterval(funcao(), intervalo_em_milisegundos);As duas funcoes irao chamar uma segunda funcao passada por parametro no intervalo determinado tambem por parametro.Sendo a setTimeout() chamando a funcao uma unica vez. Enquanto a setInterval() chama a funcao infinitamente sempre no mesmo intervalo de tempo.Para pausar a funcao usa-se clearInterval(). Passando como parametro o nome do seu intervalo.Ex:var intervalo = window.setInterval(lerolero, 1000);function lerolero() {window.alert(Popup);}clearInterval(intervalo);Juntando as duas funcoes podemos brincar fazendo por exemplo um script que simula um sorteio.Ex:var intervalo = window.setInterval(function() {//aqui ficaria o que a funcao vai fazer}, 50);window.setTimeout(function() {clearInterval(intervalo);}, 3000);Explicando: A setInterval() vai executar o que for definido dentro de uma funcao passada como parametro em 50 em 50 milisegundos. Isso durante 3000 milisegundos (3 segundos), que e o tempo definido na setTimeout() para entrar na funcao que pausa a setInterval.Deu pra entender ne? Veja o script um pouco mais incrementado em funcionamento aqui.mais sobre:http://javascript.about.com/library/blstvsi.htmhttp://www.w3schools.com/js/js_timing.asp O bootstrap e um dos arquivos mais importantes na arquitetura de um sistema, pois toda requisicao (seja ela via Ajax ou nao) passa por ele, ou seja toda vez que um usuario vai executar uma funcionalidade que chame algum arquivo, vai antes passar pelo bootstrap pra depois ser liberado.Aproveitando isso podemos capturar alguns erros que acontecem nesse momento, como erros de sessao ou de algum controller ou action que nao existe, e trata-los.Como ?Primeira coisa que vamos fazer e colocar um try catch no nosso bootstrap (geralmente nomeado de index.php).... require_once "Zend/Loader/Autoloader.php";try{//configuracoes do seu sistema... $controlador->dispatch();}catch( Zend_Exception $oException ){//aqui capturamos o erro e tratamos ele if(get_class($oException) == 'Zend_Controller_Dispatcher_Exception'){ print '<script type="text/javascript">document.location = "seusistema/index/pagina404/"</script>'; }else{ $dao = new ErroDAO(); $dao->gravarLogErro($oException); print '<script type="text/javascript">alert('opa, aconteceu um erro, mas ja estamos trabalhando para concerta-lo.');</script>'; }}ExplicandoNo catch temos o objeto $oException que contem uma serie de informacoes sobre o problema que ocorreu. Logo abaixo pegamos esse objeto e comparamos para saber se foi um erro do tipo "Zend_Controller_Dispatcher_Exception".if(get_class($oException) == 'Zend_Controller_Dispatcher_Exception')Com isso podemos saber se foi um problema de chamar um controller ou action que nao existe. Dentro desse if ha um codigo javascript para redireciona-lo para uma pagina 404, (pagina nao encontrada).No else, ou seja, caso o problema seja outro, enviamos o objeto $oException para uma DAO que vai trata-lo e gravar em alguma tabela. Assim podemos posteriormente gerar relatorios de erros capturados e tomar as medidas necessarias para corrigi-los.E logo depois uma mensagem para o usuario!Voce pode mudar esse codigo da forma que preferir, ou que melhor atender os requisitos do seu sistema. O importante nesse momento e o objeto $oException.Com o objeto $oException, podemos pegar outras informacoes contidas nele, para saber o que aconteceu, aonde foi o erro e etc...//ALGUMAS INFORMACOES GERADAS PELO ERRO.$oException->getCode();$oException->getFile();$oException->getLine();$oException->getMessage();$oException->getTraceAsString();Voce pode usar essas informacoes da maneira que preferir, enviando por email para o programador responsavel, mostrando na tela, gravando em banco como no exemplo...Espero ter ajudado. Hoje eu estava me preparando para fazer um post aqui para falar de uma funcionalidade do mootools e percebi que tinha que instalar-lo no