/*
 * Ajax request Manager
 * (only for dhtmlx requests)
 * 
 * @author clement.beudot
 */

// The registry stores all current connection in order to disable them
// when changing the page without finishing current ajax call

var ajaxCallRegistry = (function() {
	var _reg = {};
	var _handler = function() { 
		var _activeRequests = ajaxCallRegistry.getAll();
		for (var index in _activeRequests) {
			try
			  {
				if (_activeRequests[index].status != 200) {
					_activeRequests[index].abort();
				}
			  }
			catch(err)
			  {
				_activeRequests[index].abort();
			  }
			return null;
		}
	 }
	
	return {
		'getAll' : function() {
			return _reg;
		},
		'set' : function(key, obj) {
			_reg[key] = obj;
			if (_reg.length === 1) {
				$(window).bind("beforeunload", _handler);
			}
			return _reg[key];
		},
		'remove' : function(key) {
			if (_reg.hasOwnProperty(key)) {
				delete _reg[key];
				if (_reg.length === 0) {
					$(window).unbind("beforeunload", _handler);
				}
			} else {
				throw new Error('Non registered element ' + key + ' in registry');
			}
		},
		'removeAll' : function() {
			_reg = {};
			$(window).unbind("beforeunload", _handler);
			return _reg;
		}
	}
})();

function ajaxRequestManagerDhtmlxErrorHandler(type, desc, erData)
{
	if (type == 'LoadXML' || type == 'DataStructure') {
		return false;
	} else {
		throw new Error(type, desc, erData);
	}
}

