//create the ajaxManager global method
jQuery(function($) {
	//global settings used by this class
	var ajaxSettings = { };
	
	//initialize the ajaxManager
	$.ajaxManager = {
	    initialise : function(options) {
			$.extend(ajaxSettings, $.ajaxManager.defaults, options);
			if(ajaxSettings.debug) {
				alert('init');
			}
		},
		
		ajaxSettings: ajaxSettings,
		
		makeRequest: function() {
		    makeAjaxRequest();
		},
		updateUrl: function(urlData) {
			updateUrl(urlData);
		},
		clearArguments: function() {
			clearArguments();
		},
		onBeforeSend : on_BeforeSend,
		onSuccess : on_Success,
		onError: on_Error,
		onComplete : on_Complete
    };
	
	//available response types
	$.ajaxManager.dataType = {	
	    JSON : 'json',
		HTML : 'html'};

	//available request methods
    $.ajaxManager.requestType = {	
        POST : 'POST',
		GET : 'GET'};										

	//default values
	$.ajaxManager.defaults = { 
        dataType : $.ajaxManager.dataType.JSON,
        requestType : $.ajaxManager.requestType.POST,
        requestUrl : null,
        requestArgs : null,
		debug: false,
		arguments: $.args
        };	

	//function used to make the ajax request
	function makeAjaxRequest() {
		//make the ajax call
		$.ajax({
			type: ajaxSettings.requestType,
			url: ajaxSettings.requestUrl + "?" + ajaxSettings.requestArgs,
			data: '',
			dataType: ajaxSettings.dataType,
			beforeSend: function() {
                $.ajaxManager.onBeforeSend();
            },
            success: function(p_response) {
                $.ajaxManager.onSuccess(p_response);
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                $.ajaxManager.onError(XMLHttpRequest, textStatus, errorThrown);
            },
			complete: function(XMLHttpRequest, textStatus) {
                $.ajaxManager.onComplete(XMLHttpRequest, textStatus);
            }
		});
	}
	
	//function used to get all of the arguments from the querystring
	function updateUrl(urlData) {
		//if we dont have any urlData then we wont have any arguments
		if(!urlData) {
			return;
		}
		
		//ok we need to split off the querystring params
		if(urlData.indexOf('?') > -1) {
			urlData = urlData.substring(urlData.indexOf('?'));
		}
		
		//now append to new params onto the ajax call url
		ajaxSettings.requestArgs = urlData;
		
		if(ajaxSettings.debug) {
			alert(ajaxSettings.requestUrl + ajaxSettings.requestArgs);
		}
	}	

	//funtion used to clear all existing arguments
	function clearArguments() {
		ajaxSettings.arguments.clear();
		if(ajaxSettings.debug) {
			alert('arguments cleared successfully');
		}
	}
	
	//function to be overridden for the BeforSend event
	function on_BeforeSend() {
		if(ajaxSettings.debug) {
			alert('firing on_BeforeSend');
		}
	}
	
	//function to be ovewrridden for the onSuccess event
	function on_Success() {
		if(ajaxSettings.debug) {
			alert('firing on_Success');
		}
	}
	
	//function to be overridden for the OnError event
	function on_Error(XMLHttpRequest, textStatus, errorThrown) {
		if(ajaxSettings.debug) {
			alert('firing on_Error');
		}
		
		alert(errorThrown);
		alert(textStatus);
		alert(XMLHttpRequest);
	}
	
	//function to be overridden for the OnComplete event
	function on_Complete() {
		if(ajaxSettings.debug) {
			alert('firing on_Complete');
		}
	}
});