//SC:2008
SBCOM.namespace("moojax.json");
SBCOM.namespace("jquery");

SBCOM.jquery.doJsonRequest = function(options) {
	if(!jQuery) return;

	var defaults = {
		type:"GET",
		url:null,
		data:null,
		dataType:"jsonp",
		onSuccess:null,
		onFail:null
	};
	var settings = jQuery.extend({}, defaults, options);
	SBCOM.utils.doLog("doJsonRequest: "+settings.url);
	try { // Catch browser security exceptions.
		jQuery.ajax({
			type:		settings.type,
			url:		settings.url,
			data:		settings.data == null ? {} : settings.data,
			dataType:	settings.dataType,
			success:	settings.onSuccess,
			error:		settings.onFail
		});
	} catch(error) {
		SBCOM.utils.doLog("jQuery: ajax: error: "+error);
	}
}

SBCOM.moojax.json.doRequest = function(dataUrl, params, callback, objBound, callBackKey, queryString) {
	if(params == null) params = new Object();
	if(!params.showComments) params.showComments = false;

	var request;
	try {
		//SBCOM.utils.doLog("doRequest: before: "+dataUrl);
		request = new MooJsonP(dataUrl,
			{	data: params,
				onComplete: callback,
				callBackKey: callBackKey == null ? 'callback' : callBackKey,
				queryString: queryString
				//onComplete: callback.bind(objBound)
			}).request();
		//SBCOM.utils.doLog("doRequest: after: "+dataUrl);
	} catch(error) {
		SBCOM.utils.doLog("SB: json.doRequest: error: "+error+" | "+dataUrl);
	}
}

/*
 * Fire off a mootools ajax request: dispatches a call to a callback method: parser(xml, package)
 * 
 * @param: dataUrl relative xml feed  
 * @param: method http request method
 * @param: params an Object with properties to send in the request. params = {}
 * @param: requestPackage an Object with properties used during a request. requestPackage = {} 
 *			requestPackage.parser = callback function to parse the xml
 *			requestPackage.* = optional properties you would like passed back to the callback 
 */
SBCOM.moojax.doLoadData = function(dataUrl, method, params, requestPackage) {
	if(params == null) params = new Object();
	if(!params.showComments) params.showComments = false;

	var opts = {url:dataUrl,
		method: (method == null || method == '' ? 'get' : method),
		data:params,
		headers: {'If-Modified-Since': 'Sat, 1 Jan 2000 00:00:00 GMT'}}; // uncache request

	var req = new Request(opts);
	req.addEvent('success', function(text, xml) {
		//xml["package"] = this["package"]; // damn IE. static object in IE.
		/* -- parse xml -- IE/Firefox/Chrome
		SBCOM.utils.doLog("REQ internal response3: "+xml.documentElement.nodeName);
		SBCOM.utils.doLog("REQ internal response3: "+xml.documentElement.getAttribute('status'));
		SBCOM.utils.doLog("REQ internal response3: "+xml.documentElement.getElementsByTagName('title')[0].nodeName);
		*/

		SBCOM.moojax.doHandleData(xml.documentElement, requestPackage);
	});

	req.addEvent('failure', function(err) {
		SBCOM.utils.doLog("SB: doLoadData: FAIL: "+err);
		//SBCOM.utils.doLog("SB: doLoadData: not loaded: "+err+" | "+dataUrl);
	});

	req.addEvent('complete', function(txt, xml) {
		//SBCOM.utils.doLog("SB: REQ: COMPLETE: "+(txt != null)+" | "+xml+"]");
	});

	try {
		req.send();
	} catch(error) {
		SBCOM.utils.doLog("SB: doLoadData: error: "+error+" | "+dataUrl);
	}
}

SBCOM.moojax.doHandleData = function(xml, requestPackage) {
	if(xml != null && requestPackage && requestPackage.parser) requestPackage.parser.call(requestPackage.parser, xml, requestPackage);
	else SBCOM.utils.doLog('SB: doHandleData: error: No parser!');	
}