
function xmlCreateHandler() { 		
	
	xmlHandler = null;
	if (window.XMLHttpRequest) {
		xmlHandler = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		xmlHandler = new ActiveXObject("Microsoft.XMLHTTP");
	}
	
	return xmlHandler;
	
} 	
	
function AjaxCall(url, doFunction, requestHeader, postData, ASynchronous) {
			
	if (!requestHeader) {
		requestHeader = 'GET';
	}
		
	var myHandler = xmlCreateHandler();
	myHandler.onreadystatechange = function() {
		
		if (myHandler.readyState == 4) {
			doFunction(myHandler.responseText);
		}
	};
		
	if (!postData) {
		postData = null;
	}
		
	myHandler.open(requestHeader, url);
		
	myHandler.setRequestHeader('If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT');

	if (requestHeader == 'POST') {
		myHandler.setRequestHeader('Content-Type', 'Application/x-www-form-urlencoded');
	}
		
	myHandler.send(postData);
	
}
	
	
	
/*
	* ajax functionality object; provides cross-browser, ajax related properties and methods.
	* @class ajax object
	* @constructor
	* @param {jQuery} $ The jQuery object
	*/
var ajax = ( function ($) {
	
		
	/**
	    * @namespace Private properties, mainly css identifiers and url's; when identifiers or uri's change, only change here.
	    */
	var config = {
		ajaxLoader : 'ajax_loader',
		loaderImg : '/img/css/ajaxloader/ajax-loader.gif'
	},

	/**
	    * @namespace Private methods
	    */
	privs = {
			
		/**
		* Returns an HTML Object for a dynamic loader
		* @return Object ajaxLoader
		* @private
		*/
		createLoader : function () {
				
			var ajaxLoader = document.createElement('div');
			ajaxLoader.id = config.ajaxLoader;
		
			var loader = new Image();
			loader.src = config.loaderImg;
		
			ajaxLoader.appendChild(loader);
				
			return ajaxLoader;
		}
		
	};
		
		
	/**
	    * @namespace Public methods
	    * @scope ajax
	    */
	return {
			
		/**
	        * Writes an ajaxLoader HTML Object to the DOM tree, at a static position.
	        *
	        * @todo : ajaxLoader needs more flexible position-parameters
	        * @todo: parent element needs to be one of users choice
	        *
	        * @type Object
	        * @param {String} event The event that triggered this function.
	        */
		addStaticLoader : function (event) {
				
			event = event || window.event;
				
			var ajaxLoader = privs.createLoader(),
			obj = event.target || event.srcElement,
			parent = obj.parentNode;
							
			ajaxLoader.style.left = obj.offsetLeft - 36 + 'px';
			ajaxLoader.style.top = '15px';
								
			parent.appendChild(ajaxLoader);
				
			//check for ie
			if ($.browser.msie) {
				ajaxLoader.style.display = 'block';
					
			} else {
				$(ajaxLoader).fadeIn(400);
			};
		},
			
			
		/**
	        * Writes an ajaxLoader HTML Object to the DOM tree, bound to the position of the cursor.
	        * NOTE: can only be applied to mouse events
	        *
	        * @type Object
	        * @param {String} event The mouseevent that triggered this function.
	        */
		addFlexLoader : function (event) {

			var ajaxLoader = privs.createLoader();
				
			document.body.onmousemove = function (event) {
				var loaderPos = document.getElementById(config.ajaxLoader);

				loaderPos.style.left = e.clientX + 'px';
				loaderPos.style.top = e.clientY + 'px';
					
				document.body.appendChild(ajaxLoader);
					
					
				//check for ie
				if ($.browser.msie) {
					ajaxLoader.style.display = 'block';
						
				} else {
					$(ajaxLoader).fadeIn(400);
				};
			};
		},
			
			
		/**
	        * Removes the ajaxLoader HTML Object from the screen.
	        * @type Object
	        */
		removeLoader : function () {
			var loader = document.getElementById(config.ajaxLoader);
			//check for ie
			if ($.browser.msie) {
				$(loader).remove();
					
			} else {
				$(loader).fadeOut(400, function () {
					$(this).remove();
				});
			};
			
		}
		
	};
	
})(jQuery);	
	
	
