var waiterTimeToWaitBefore = 1000;
var waiterIsActive=false;
var waiterDivId="waitDivId";
var waiterDiv=null;
var waiterTimeoutId=-1;

function RequeteAjax(sParams,sUrl,sMethod,sContainer,sFunction){
	if(!waiterIsActive)
	{
		waiterTimeoutId=setTimeout("showWaitDiv()",waiterTimeToWaitBefore);
		new Ajax.Request(sUrl, {
			method: sMethod,
			onSuccess: function(transport){
				var response = transport.responseText;
				if(response!=''){
					//alert("Success! \n\n" + response);
					if(sContainer!=''){
						document.getElementById(sContainer).innerHTML=response;
						if(sFunction!=undefined){
							setTimeout(sFunction,500);
						}
					}
	            }
			},
			onComplete: function(transport) {
			    setTimeout("hideWaitDiv()",waiterTimeToWaitBefore);
			},
			onFailure: function(){
				alert('Ping ? No Response');
			},
			on404: function(){
				alert('404 Error');
			},
			encoding: 'UTF-8',
			parameters: sParams
		});
	}
}

function RequeteAjaxAvecCallback(sParams,sUrl,sMethod,sContainer, jsFunction){
	if(!waiterIsActive)
	{
		waiterTimeoutId=setTimeout("showWaitDiv()",waiterTimeToWaitBefore);
		new Ajax.Request(sUrl, {
			method: sMethod,
			onSuccess: function(transport){
				var response = transport.responseText;
				if(transport.responseText!=''){
					var response = transport.responseText;
					//alert("Success! \n\n" + response);
					if(sContainer!=''){
						document.getElementById(sContainer).innerHTML=response;
					}
					if (jsFunction!=null && jsFunction!=""){
						eval(jsFunction);
					}
	            }
			},
			onComplete: function(transport) {
				hideWaitDiv();
			},
			onFailure: function(){
				alert('Ping ? No Response');
			},
			on404: function(){
				alert('404 Error');
			},
			encoding: 'UTF-8',
			parameters: sParams
		});
	}
}

function RequeteAjaxAvecMsgEtCallback(sParams,sUrl,sMethod,sContainer,sContainerMsg,successMsg,errorMsg,jsFunction,jsErrorFunction){
	if(!waiterIsActive)
	{
		waiterTimeoutId=setTimeout("showWaitDiv()",waiterTimeToWaitBefore);
		new Ajax.Request(sUrl, {
			method: sMethod,
			onSuccess: function(transport){
				var response = transport.responseText;
				if(transport.responseText!=''){
					var response = transport.responseText;
					//alert("Success! \n\n" + response);
					if(sContainer!=''){
						document.getElementById(sContainer).innerHTML=response;					
					}
	            }
				if (sContainerMsg!=null){
					if (successMsg!=null){
						if (successMsg == ""){
							document.getElementById(sContainerMsg).innerHTML="Ajax Success !";
						}
						else {
							document.getElementById(sContainerMsg).innerHTML=successMsg;
						}
					}
				}
				if (jsFunction!=null && jsFunction!=""){
					//alert('EVAL jsFunction := ' + jsFunction);
					eval(jsFunction);
				}
				else {	
					//alert('jsFunction := ' + jsFunction);
				}
	
			},
			onComplete: function(transport) {
			    setTimeout("hideWaitDiv()",waiterTimeToWaitBefore);
			},
			onFailure: function(){
				alert('Ping ? No Response');
				if (sContainerMsg!=null){
					if (errorMsg!=null){
						if (errorMsg == ""){
							document.getElementById(sContainerMsg).innerHTML="Ajax Failed !";
						}
						else {
							document.getElementById(sContainerMsg).innerHTML=errorMsg;
						}
					}
				}
				if (jsErrorFunction!=null && jsErrorFunction!=""){
					//alert('EVAL jsErrorFunction := ' + jsErrorFunction);
					eval(jsErrorFunction);
				}
				else {	
					//alert('jsErrorFunction := ' + jsErrorFunction);
				}
			},
			on404: function(){
				alert('404 Error');
				if (sContainerMsg!=null){
					if (errorMsg!=null){
						if (errorMsg == ""){
							document.getElementById(sContainerMsg).innerHTML="Ajax Failed (404 error) !";
						}
						else {
							document.getElementById(sContainerMsg).innerHTML=errorMsg;
						}
					}
				}
				if (jsErrorFunction!=null && jsErrorFunction!=""){
					//alert('EVAL jsErrorFunction := ' + jsErrorFunction);
					eval(jsErrorFunction);
				}
				else {	
					//alert('jsErrorFunction := ' + jsErrorFunction);
				}
	
			},
			encoding: 'UTF-8',
			parameters: sParams
		});
	}
}


function showWaitDiv()
{
	getWaiterDiv().style.display = "block";
}

function hideWaitDiv()
{
	if(waiterTimeoutId!=-1)
	{
		clearTimeout(waiterTimeoutId);
		waiterTimeoutId=-1;
	}
	getWaiterDiv().style.display = "none";
}

function getWaiterDiv()
{
	return $(waiterDivId);
}