Como evitar envio duplo com jQuery no aplicativo ASP.NET com UpdatePanels

Eu tenho um aplicativo ASP.NET de intranet que às vezes é lento para responder. Meu requisito é evitar envio duplo e, idealmente, fornecer feedback ao usuário de que o formulário já foi enviado.

Os exemplos que encontrei mostram como desativar um botão de envio, mas isso não é suficiente, pois no meu aplicativo, o envio pode acontecer:

De um botão de envio.De qualquer controle com AutoPostBack = true (que envia usando javascript AFAIK).De qualquer um dos itens acima dentro de um UpdatePanel - nesse caso, como entendi, o POST é feito usando AJAX, e eu precisaria reativar quando a chamada do AJAX estiver completa.

Estou pensando em algo como exibir um pop-up de sobreposição / modal, talvez com uma imagem de progresso animada que seria exibida durante o envio. E no caso de um UpdatePanel, oculto quando a chamada AJAX é concluída.

Alguém tem um exemplo que pode ser facilmente integrado em páginas ASP.NET como acima? Ou indique quais eventos eu precisaria conectar para exibir / ocultar a sobreposição.

ATUALIZAR

A resposta de @Aristos me pegou a maior parte do caminho. A parte principal é manipular PageRequestManager.endRequest para ocultar o diálogo de progresso quando uma chamada AJAX for concluída.

Há um caso em que ainda tenho um problema: se um botão de envio resultar em um download de arquivo, não tenho um evento que possa usar para ocultar meu diálogo de progresso.Essa questão tem uma resposta que pode fazer o truque, vou tentar.

questionAnswers(1)

yourAnswerToTheQuestion