 /*
 /
 / Framework Dispatcher
 /
 / requires: prototype 1.5.1+
*/

// Global AJAX responder
Ajax.Responders.register({
    onCreate: function() {
	if($('global-message')) {
	    $('global-message').show();
	    $('global-message').update("Loading...");
	}
	console.log("++++ Ajax request STARTED...");
    },
    
    onComplete: function() {
	if($('global-message')) {	
	    $('global-message').hide();
	    $('global-message').update("");
	}
	console.log("++++ Ajax request COMPLETE...");		
    }
});


// Dispatcher
//
FwDispatch = {
    punt: function(container_element,callback) {
	$(container_element).update("");
	FwDispatch.send(null,callback,container_element);
    },
    
    content : function(content_url,container_element,js_url,callback,extra,args) {	
	new Ajax.Request(content_url, {
	    requestHeaders: [
		'X-SP5-FwDispatcher',
		'true'],

	    method: 'get',
	    onSuccess: function(transport) {
		
		if($(container_element)) {
		    $(container_element).update(transport.responseText);
		}
		
		if(typeof(callback) == 'function') {
		    if(js_url != null) {
			console.log("About to FwDispatch.getData([%s],[%s],[%s])",js_url,"callback",container_element);
			FwDispatch.getData(js_url,callback,container_element,extra,args);
		    } else {
			FwDispatch.getSP5Data(transport.getResponseHeader('X-SP5-Data'),callback,container_element,extra,args);
		    }
		}

	    }
	})

    },

    getSP5Data : function(hdrText, callback, container_element, extra, args) {
	if(hdrText != null) {
	    var data = evalSafeJSON(hdrText);
	    FwDispatch.send(data,callback,container_element,extra,args);
	} else {
	    FwDispatch.send(null,callback,container_element,extra,args);
	}
    },

    getData : function(js_url,callback,container_element,extra, args) {
	requestHeaders: [
	    'X-SP5-FwDispatcher',
	    'true'],

	new Ajax.Request(js_url, {
	    method: 'get',
	    onSuccess: function (transport) {
		var data = evalSafeJSON(transport.responseText);
		FwDispatch.send(data,callback,container_element,extra,args);
	    }
	})
    },

    send: function(data,callback,container_element,extra,args) {
	if(typeof(callback) == 'string') {
	    console.log("Callback is string... Evaling");
	    callback = eval(callback);
	}
	if(typeof(callback) == 'function') {
	    var data_package = new Array();
	    data_package['container_element'] = container_element;
	    data_package['data']  = data;
	    data_package['extra'] = extra;
	    data_package['args']  = args;
	    callback($H(data_package));
	}
    },

    form: function(form,container_element,js_url,callback,extra,args) {
	if($(form)) {
	    $(form).request({
		requestHeaders: [
		    'X-SP5-FwDispatcher',
		    'true'],

		onComplete: function(transport) {
		    if($(container_element)) {
			$(container_element).update(transport.responseText);
		    }

		    console.log(" >>>>>>>> X-SP5-Data: [%s]",transport.getResponseHeader('X-SP5-Data'));

		    if(js_url != null) {
			console.log("About to FwDispatch.getData([%s],[%s],[%s])",js_url,"callback",container_element);
			FwDispatch.getData(js_url,callback,container_element,null,null);
		    } else {
			FwDispatch.getSP5Data(transport.getResponseHeader('X-SP5-Data'),callback,container_element,extra,args);
		    }

		}
	    });
	}
    },

    getFormData: function(form,callback) {
	if($(form)) {
	    $(form).request({
		requestHeaders: [
		    'X-SP5-FwDispatcher',
		    'true'],

		onComplete: function(transport) {
		    if(typeof(callback) == 'function') {
			var data = evalSafeJSON(transport.responseText);
			FwDispatch.send(data,callback,null,null);
		    }
		}
	    });
	}
    }
}

