
	var ajaxActions = new Array() ;
	var ajaxActionsName = new Array() ;
	var ajaxActionsStatus = new Array() ;
	unloadWindow = false ;
	
	function abortAjaxCalls() {
		var numberOfAjaxActions = ajaxActions.length ;
		var numberOfAjaxActionsInProgress = 0 ;
		var ajaxActionsToStart = new Array() ;
		for (var i = 0 ; i < numberOfAjaxActions ; i++) {
			var thisStatus = ajaxActionsStatus[i] ;
			if (thisStatus == "in progress") {
				if (browserType == "Internet Explorer" && platformType == "Windows") {
					eval(ajaxActionsName[i] + ".onreadystatechange = function () { }") ;
					eval(ajaxActionsName[i] + ".abort()") ;
				} else {
					eval(ajaxActionsName[i] + ".onreadystatechange = null") ;
					eval(ajaxActionsName[i] + " = false") ;
				}
			}
		}
		
	}
	
	function startNewAjaxAction() {
		if (unloadWindow == true) {
			// leaving page, do not start a new Ajax request
			return false ;
		}
		var maxNumberOfSimultaneousAjaxActions = 2 ;
		var numberOfAjaxActions = ajaxActions.length ;
		var numberOfAjaxActionsInProgress = 0 ;
		var ajaxActionsToStart = new Array() ;
		for (var i = 0 ; i < numberOfAjaxActions ; i++) {
			var thisStatus = ajaxActionsStatus[i] ;
			if (thisStatus == "in progress") {
				numberOfAjaxActionsInProgress ++ ;
				if (numberOfAjaxActionsInProgress >= maxNumberOfSimultaneousAjaxActions) {
					// all slots filled, check again in a second
					setTimeout("startNewAjaxAction()",1000) ;
					return true ;
				}
			} else if (thisStatus == "ready") {
				ajaxActionsToStart.push(i) ;
			}
		}
		
		if (ajaxActionsToStart.length == 0) {
			// finished
			return true ;
		}
		for (var i = 0 ; i < maxNumberOfSimultaneousAjaxActions - numberOfAjaxActionsInProgress; i++) {
			var ajaxActionToStart = ajaxActionsToStart[i] ;
			if (ajaxActions[ajaxActionToStart]) {
				ajaxActionsStatus[ajaxActionToStart] = "in progress" ;
				eval (ajaxActions[ajaxActionToStart]) ;
			}
		}
		setTimeout("startNewAjaxAction()",1000) ;
	}
	
	function endAjaxAction(action) {
		var numberOfAjaxActions = ajaxActions.length ;
		for (var i = 0 ; i < numberOfAjaxActions ; i++) {
			if (ajaxActions[i] == action) {
				ajaxActionsStatus[i] = "done" ;
				if (browserType == "Internet Explorer" && platformType == "Windows") {
					eval(ajaxActionsName[i] + ".onreadystatechange = function () { } ") ;
					eval(ajaxActionsName[i] + ".abort()") ;
				} else {
					eval(ajaxActionsName[i] + ".onreadystatechange = null") ;
					eval(ajaxActionsName[i] + " = false") ;
				}
				break ;
			}
		}
		return true ;
	}