String.implement({
	toQueryObject: function(){
		var o = {};
		$A(this.replace(/(^.*\?)|(#.*$)/g,'').split('&')).each(function(p){
			p = p.split("=");
			o[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
		});
		return o;
	}
});

var ajax_chart_data = {};

function embed_ajax_chart(ajax_component_id, width, height) {
	var area_id = 'chart_' + ajax_component_id;
	swfobject.embedSWF("/www_utils/swf/open-flash-chart.swf", area_id,
						width, height, "9.0.0", "expressInstall.swf",
						{"get-data":"ofc_get_data", "id":ajax_component_id},
						{wmode: "transparent"}, false);
}

function ofc_ready(ajax_component_id) {
}

function ofc_get_data(ajax_component_id) {
	return ajax_chart_data[ajax_component_id];
}

function findSWF(movieName) {
	return $(movieName);
}

function ajax_chart_clicked(index, ajax_component_id) {
	ajax_component_send(ajax_component_id, {index: index});
}

function ajax_chart_open_as_image(ajax_component_id, width, height) {
	var area_id = 'chart_' + ajax_component_id;
	var img = "<div style='padding: 10px 10px;'><div style='border:1px solid #606060;'><img src='data:image/png;base64," + $(area_id).get_img_binary() + "' /></div></div>"

	show_popup(img, 'chart_' + ajax_component_id, {height:height+22, width: width+22, offsetX: -12, offsetY: -12});
}

function ajax_normalize_data(data) {

	switch ($type(data)){
		case 'string': case 'element': var str = $(data).toQueryString(); break;
		case 'object': case 'hash': var str = Hash.toQueryString(data); break;
		case false: return null;
	}

	return str.toQueryObject();
}

function ajax_create_request(url, ajax_data, ajax_options) {

	ajax_options.url  = url;
	ajax_options.method = 'post';
	
	ajax_options.data = ajax_normalize_data(ajax_data);
	
	var ajaxRequest = new Request(ajax_options);
	return ajaxRequest;
}

function ajax_component_send(ajax_component_id, data)
{
	var ajax_object = eval('ajax_object_' + ajax_component_id);

	var anchor=$(ajax_object.update_target);
	if (!anchor)
		return false;
		
	if (typeof data == "string")
		data = $(data);
		
	var ajax_data = AlloyJS.Ajax.mergeData(data, {	ajax_component_id: ajax_object.ajax_component_id, 
													persistent_signature: ajax_object.persistent_signature
													});

	var options = {	
				onComplete: function(){
					AlloyJS.Ajax.refresh();
				}	
			};


	AlloyJS.Ajax.loadHTML(ajax_object.url, ajax_object.update_target, ajax_data, options);
}

function ajax_component_invoke(ajax_component_id, method_name, data) {

	var ajax_object = eval('ajax_object_' + ajax_component_id);
	
	var ajax_options = {
		async: false,
		onFailure: function(xhr) {
			$(ajax_object.update_target).set('html', "<div class='error'><h2>AJAX Request Failure</h2><h3>" + xhr.statusText + "</h3>" + xhr.responseText + "</div>");
		}
	}

	var ajax_data = ajax_normalize_data(data);
	ajax_data.persistent_signature = ajax_object.persistent_signature;
	ajax_data.persistent_action = "invoke";

	var ajaxRequest = ajax_create_request(ajax_object.url, ajax_data, ajax_options);
	ajaxRequest.send();
	var object = JSON.decode(ajaxRequest.response.text);

	return object;
}

