Event.stopObservingElement = function (element)
{
	if (!Event.observers)
	{
		return;
	}

	for (var i = 0; i < Event.observers.length; )
	{
		if (element == Event.observers[i][0])
		{
			Event.stopObserving.apply(this, Event.observers[i]);
			Event.observers.splice(i, 1);
		}
		else
		{
			i++;
		}
	}
}

var BaseKit =
{
	version: 0.3,

	startUp: function()
	{
	},

	serializeWidgets: function()
	{
		var query = BaseKit.Widget.__all.collect(function(widget, index)
		{
			var query = widget.serialize();

			if (!query)
			{
				throw $continue;
			}

			return query;
		});

		return query.join('&');
	}
};

BaseKit.Core =
{
	call: function(destID, method, arg, onStart, onFinish)
	{
		BaseKit.Core.callMulti([{destID:destID, method:method, arg:arg}], onStart, onFinish);
	},

	callMulti: function(actions, onStart, onFinish)
	{
		if (!actions || !actions.length)
		{
			return;
		}

		if (actions.detect(function(action)
		{
			return action.client;
		}))
		{
			actions.each(function(action, index)
			{
				BaseKit.Widget.getByID(action.destID)[action.method](action.arg);
			});
		}
		else
		{
			var parameters = actions.collect(function(action, index)
			{
				var query = '__actions[' + index + '][destID]=' + escape(action.destID) + '&__actions[' + index + '][method]=' + escape(action.method);

				if (action.arg)
				{
					for (var i = 0; i < action.arg.length; i++)
					{
						query += '&__actions[' + index + '][arg][' + i + ']=' + escape(action.arg[i]);
					}
				}
				else
				{
					query += '&__actions[' + index + '][arg]=';
				}

				return query;
			}).join('&');

			parameters += '&' + BaseKit.serializeWidgets();

			var options =
			{
				method: 'post',
				parameters: parameters,
				onComplete: function(request)
				{
					try
					{
// 						Uncomment to see server response (PHP->Javascript)
//						alert(request.responseText);
						eval(request.responseText);

						if (typeof onFinish == 'function')
						{
							onFinish();
						}
					}
					catch(e)
					{
						alert(request.responseText);
					}
				}
			}

// 			Uncomment to see server parameters (Javascript->PHP)
//			alert(options.parameters);

			if (typeof onStart == 'function')
			{
				onStart();
			}

			new Ajax.Request(location.href, options);
		}
	}
};

/*
BaseKit.Tools =
{
	HideSelects: function()
	{
		$A(document.body.getElementsByTagName('select')).each(function(element)
		{
			Element.setStyle(element, {visibility:'hidden'});
		});
	},

	ShowSelects: function()
	{
		$A(document.body.getElementsByTagName('select')).each(function(element)
		{
			Element.setStyle(element, {visibility:'visible'});
		});
	},

	EnableInputs: function()
	{
		$A(document.body.getElementsByTagName('input')).each(function(element)
		{
			element.disabled = false;
		});
	},

	DisableInputs: function()
	{
		$A(document.body.getElementsByTagName('input')).each(function(element)
		{
			element.disabled = true;
		});
	},

	EnableButtons: function()
	{
		$A(document.body.getElementsByTagName('button')).each(function(element)
		{
			element.disabled = false;
		});
	},

	DisableButtons: function()
	{
		$A(document.body.getElementsByTagName('button')).each(function(element)
		{
			element.disabled = true;
		});
	}
};
*/
