AjaxProgressController = {
init : function () {
AjaxProgressController.bodyTag = jQuery(jQuery('body')[0]);

AjaxProgressController.ajaxCount = 0;
AjaxProgressController.lastClickedElement = null;
AjaxProgressController.bodyTag.bind('click', AjaxProgressController.clickFunc);
 try {
Wicket.Ajax.registerPreCallHandler(AjaxProgressController.ajaxRequested);
Wicket.Ajax.registerPostCallHandler(AjaxProgressController.ajaxRequestFinished);
Wicket.Ajax.registerFailureHandler(AjaxProgressController.ajaxRequestFinished);
Wicket.throttler.postponeTimerOnUpdate = true;
}
catch(e) {
}
},
isAjaxInProgress : function() {
return AjaxProgressController.ajaxCount > 0;
},
ajaxRequested : function() {
AjaxProgressController.ajaxCount = 1 + AjaxProgressController.ajaxCount;
AjaxProgressController.addBusyAjaxClassToBody();
},
ajaxRequestFinished : function() {
AjaxProgressController.ajaxCount = -1 + AjaxProgressController.ajaxCount;
AjaxProgressController.lastClickedElement = null;
if(!AjaxProgressController.isAjaxInProgress()) {
AjaxProgressController.removeBusyAjaxClassToBody();
}
},
addBusyAjaxClassToBody : function () {
if(!AjaxProgressController.bodyTag.hasClass('ajaxInProgress')) {
AjaxProgressController.bodyTag.addClass('ajaxInProgress');
}
},
removeBusyAjaxClassToBody : function () {
if(AjaxProgressController.bodyTag.hasClass('ajaxInProgress')) {
AjaxProgressController.bodyTag.removeClass('ajaxInProgress');
}
},
clickFunc : function(eventData) {
var clickedElement = (window.event) ? event.srcElement : eventData.target;
  if(clickedElement.tagName.toUpperCase() == 'SPAN') {
clickedElement = $(clickedElement).parent()[0];
}
if (clickedElement.tagName.toUpperCase() == 'BUTTON' || clickedElement.tagName.toUpperCase() == 'A' || clickedElement.parentNode.tagName.toUpperCase() == 'A'
|| (clickedElement.tagName.toUpperCase() == 'INPUT' && (clickedElement.type.toUpperCase() == 'BUTTON' || clickedElement.type.toUpperCase() == 'SUBMIT'))) {
if (!jQuery(clickedElement).closest(".noBusySign").hasClass('noBusySign') && !AjaxProgressController.isAjaxInProgress()) {
AjaxProgressController.ajaxRequested();
}
if (clickedElement === AjaxProgressController.lastClickedElement) {
eventData.stopPropagation();
return false;
}
else {
AjaxProgressController.lastClickedElement = clickedElement;
}
}
}
};
$(document).ready(AjaxProgressController.init);
