// configure jquery objects/plugins ======================

/**
 * Setup the defaults for all jQuery.ajax requests
 *
 * @return void
 * @author Dan Bryant <db@leadingtone.org>
 * @package jquery.cfg.js
 * @version: 1.0
 * @perams:
 *	
 **/
jQuery.ajaxSetup({
	timeout: 30000 // timout all ajax reuqests after 30 seconds
	,error: function(XMLHttpRequest,textStatus,errorThrown){ jqueryAjaxLocalError(XMLHttpRequest,textStatus,errorThrown); } // By default pass jQuery.ajax errors to this handler which is automagically called first if not overridden: can be overridden on a per request basis
	,beforeSend: function(XMLHttpRequest){
		jQuery.loader('show');			
	}
	,complete: function(XMLHttpRequest,textStatus){
		jQuery.loader('hide');
	}
});

function hideAjaxLoader(){
	jQuery('body').loader.hide();
}


/**
 * handle local jQuery.ajax errors from jQuery.ajax({error:function()}) 
 *
 * @return void
 * @author Dan Bryant <db@leadingtone.org>
 * @package jquery.cfg.js
 * @version: 1.0
 * @perams:
 *	
 **/
function jqueryAjaxLocalError(XMLHttpRequest,textStatus,errorThrown){

	var missing = 'undefined';

	// collect the error args
	var errors = new Object;
  	errors.event_timestamp				= $P.time();
  	errors.XMLHttpRequest_status		= $P.isset(XMLHttpRequest.status) ? XMLHttpRequest.status : missing;
  	errors.XMLHttpRequest_statusText	= $P.isset(XMLHttpRequest.statusText) ? XMLHttpRequest.statusText : missing;
  	errors.XMLHttpRequest_responseText	= $P.isset(XMLHttpRequest.responseText) ? XMLHttpRequest.responseText : missing;
  	errors.textStatus					= $P.isset(textStatus) ? textStatus : missing;
  	errors.errorThrown					= $P.isset(errorThrown) ? errorThrown : missing;

	jQuery.jGrowl(
		$P.sprintf(
			'<p>A program error has occurred.</p><p>Please try again later.</p><p>Details:</p><ul><li>http status: %s</li><li>error status: %s</li><li>error: %s</li></ul>',
			errors.XMLHttpRequest_status,
			errors.textStatus,
			errors.errorThrown
		),{ sticky: true, header:'Client-side AJAX Error Occurred' }
	);
}



/**
 * define a global ajaxError handler. Automagically called after the jQuery.ajax({error:functiuon(){}}) handler
 *
 * @return void
 * @author Dan Bryant <db@leadingtone.org>
 * @package jquery.cfg.js
 * @version: 1.0
 * @perams:
 *	
 **/
jQuery(document).ajaxError(function(event, XMLHttpRequest, ajaxOptions, thrownError){

	var missing = 'undefined';

	var errors = new Object;
  	errors.event_timestamp				= $P.isset(event.timestamp) ? event.timestamp : $P.time();
  	errors.XMLHttpRequest_status		= $P.isset(XMLHttpRequest.status) ? XMLHttpRequest.status : missing;
  	errors.XMLHttpRequest_statusText	= $P.isset(XMLHttpRequest.statusText) ? XMLHttpRequest.statusText : missing;
  	errors.XMLHttpRequest_responseText	= $P.isset(XMLHttpRequest.responseText) ? XMLHttpRequest.responseText : missing;
  	errors.ajaxOptions_async			= $P.isset(ajaxOptions.async) ? ajaxOptions.async : missing;
  	errors.ajaxOptions_type			    = $P.isset(ajaxOptions.type) ? ajaxOptions.type : missing;
  	errors.ajaxOptions_dataType		    = $P.isset(ajaxOptions.dataType) ? ajaxOptions.dataType : missing;
  	errors.ajaxOptions_timeout 			= $P.isset(ajaxOptions.timeout) ? ajaxOptions.timeout : missing;
  	errors.ajaxOptions_url				= $P.isset(ajaxOptions.url) ? ajaxOptions.url : missing;

	jQuery.jGrowl(
		$P.sprintf(
			'<p>A program error has occurred.</p><p>please try again later.</p><p>Details:</p><ul><li>status: %s</li><li>statusText: %s</li><li>url: %s</li></ul>',
			errors.XMLHttpRequest_status,
			errors.XMLHttpRequest_statusText,
			errors.ajaxOptions_url
		),{ sticky: true, header: 'Client-side AJAX Error Occurred'}
	);
});
