function ToolBarButton(title, alt, onclick, $hidden, prefix)
{
	this.Title = title || '';
	this.CheckTitleModule();
	this.Alt = RemoveTranslationLink(alt || '');

	if (typeof(onclick) == 'function') {
		this.onClick = onclick;
	}
	else {
		this.onClick = function() {
			if (eval('typeof('+this.Title+')') == 'function')
				eval(this.Title + '()');
		}

	}

	this.imgObject = null;
	this.Enabled = true;
	this.Hidden = $hidden ? true : false;
	this.ToolBar = null;
	this.Prefix = prefix ? prefix : '';
}

ToolBarButton.prototype.CheckTitleModule = function()
{
	if (this.Title.match(/([^:]+):(.*)$/)) {
		// has module set directly
		this.Title = RegExp.$2;
		this.Module = RegExp.$1;
	}
	else {
		// use default module
		this.Module = 'kernel';
	}
}

ToolBarButton.prototype.IconsPath = function()
{
	if (typeof(img_path) == 'undefined') {
		//alert('error: toolbar image path not set');
	}
	return img_path.replace('#MODULE#', this.Module) + 'toolbar/';
}

ToolBarButton.prototype.GetHTML = function() {
	return '<input type="button" class="button" id="' + this.GetToolID() + '" value="' + this.Alt + '" />';
}

ToolBarButton.prototype.GetToolID = function() {
	return this.Prefix == '' ? 'tool_' + this.Title : 'tool_['+this.Prefix+'][' + this.Title+']'
}

ToolBarButton.prototype.Init = function() {

	img = document.getElementById(this.GetToolID());
	this.imgObject = img;
	img.btn = this;
	/*this.SetOnMouseOver();
	this.SetOnMouseOut();*/
	this.SetOnClick();
	if (this.Hidden) this.Hide();
}

/*ToolBarButton.prototype.SetOnMouseOver = function() {
	this.imgObject.onmouseover = function() {
		this.src = this.btn.IconsPath() + this.btn.ToolBar.IconPrefix + this.btn.Title + '_f2.gif';
	};
}

ToolBarButton.prototype.SetOnMouseOut = function() {
	this.imgObject.onmouseout = function() {
		this.src = this.btn.IconsPath() + this.btn.ToolBar.IconPrefix + this.btn.Title + '.gif';
	};
}*/

ToolBarButton.prototype.SetOnClick = function() {
	/*this.imgObject.onmouseout = function() {
		this.src = this.btn.IconsPath() + this.btn.ToolBar.IconPrefix + this.btn.Title + '.gif';
	};*/
	this.imgObject.inClick = false;
	if (typeof(this.onClick) != 'function') {
		this.imgObject.onclick = function() {
			if (this.inClick) return;
			this.inClick = true;
			if (eval('typeof('+this.btn.Title+')') == 'function')
				eval(this.btn.Title + '()');
			this.inClick = false;
		}
	}
	else {
		this.imgObject.onclick = function() {
			if (this.inClick) return;
			this.inClick = true;
			this.btn.onClick();
			this.inClick = false;
		}
	}

	// the following lines are correct, as long as mozilla understands 'pointer', but IE 'hand',
	// do not change the order of these lines!
//	if (is.ie6up || is.gecko) {
		this.imgObject.style.cursor = 'pointer';
//	}
//	else {
		// somehow set cursor hand for IE 5/ 5.5
//		this.imgObject.style = 'cursor: hand';
//	}
}

ToolBarButton.prototype.Disable = function() {
	if ( !this.Enabled ) return;
	/*this.imgObject.src = this.IconsPath() + this.ToolBar.IconPrefix + this.Title + '_f3.gif';
	this.imgObject.onmouseover = null;
	this.imgObject.onmouseout = null;*/
	this.imgObject.disabled = true;
	this.imgObject.onclick = null;
	this.imgObject.className = 'button-disabled';
	this.imgObject.style.cursor = 'default';
	this.Enabled = false;
}

ToolBarButton.prototype.Enable = function() {
	if (this.Enabled) return;
	/*this.imgObject.src = this.IconsPath() + this.ToolBar.IconPrefix + this.Title + '.gif';
	this.SetOnMouseOver();
	this.SetOnMouseOut();*/
	this.imgObject.disabled = false;
	this.imgObject.className = 'button';
	this.SetOnClick();
	this.Enabled = true;
}

ToolBarButton.prototype.Hide = function() {
	this.imgObject.style.display = 'none';
	this.Hidden = true;
}

ToolBarButton.prototype.Show = function() {
	this.imgObject.style.display = '';
	this.Hidden = false;
}

/* ----------- */

function ToolBarSeparator(title) //extends ToolBarButton
{
	this.Title = title;
}
ToolBarSeparator.prototype = new ToolBarButton;

ToolBarSeparator.prototype.GetHTML = function() {
	return "\r\n";  //' <img id="' + this.GetToolID() + '" src="' + this.IconsPath() + 'tool_divider.gif">';
}

ToolBarSeparator.prototype.Init = function() {
	/*img = document.getElementById(this.GetToolID());
	this.imgObject = img;
	img.btn = this;*/
}

ToolBarSeparator.prototype.Enable = function() { }
ToolBarSeparator.prototype.Disable = function() { }

/* ----------- */


function ToolBar(icon_prefix, $module)
{
	this.Module = $module ? $module : 'kernel';
	this.IconPrefix = icon_prefix ? icon_prefix : 'tool_';
	this.Buttons = new Array();
}

ToolBar.prototype.AddButton = function(a_button)
{
	a_button.ToolBar = this;
	this.Buttons[a_button.Title] = a_button;
}

ToolBar.prototype.Render = function($container)
{
	if ($container) {
		$container.innerHTML = ''; // container will contain only buttons
		for (var i in this.Buttons) {
			btn = this.Buttons[i];
			$container.innerHTML += btn.GetHTML();
		}

		// init all buttons after because objects are not yet created directly after assigning to innerHTML
		for (var i in this.Buttons) {
			btn = this.Buttons[i];
			btn.Init();
		}
	}
	else {
		for (var i in this.Buttons) {
			btn = this.Buttons[i];
			document.write( btn.GetHTML() );
			btn.Init();
		}
	}
}

ToolBar.prototype.EnableButton = function(button_id) {
	if(this.ButtonExists(button_id)) this.Buttons[button_id].Enable();
}

ToolBar.prototype.DisableButton = function(button_id) {
	if(this.ButtonExists(button_id)) this.Buttons[button_id].Disable();
}

ToolBar.prototype.HideButton = function(button_id) {
	if(this.ButtonExists(button_id)) this.Buttons[button_id].Hide();
}

ToolBar.prototype.ShowButton = function(button_id) {
	if(this.ButtonExists(button_id)) this.Buttons[button_id].Show();
}

ToolBar.prototype.SetEnabled = function(button_id, $enabled) {
	var $ret = $enabled ? this.EnableButton(button_id) : this.DisableButton(button_id);
}

ToolBar.prototype.SetVisible = function(button_id, $visible) {
	var $ret = $visible ? this.ShowButton(button_id) : this.HideButton(button_id);
}

ToolBar.prototype.GetButtonImage = function(button_id) {
	if( this.ButtonExists(button_id) ) return this.Buttons[button_id].imgObject;
}

ToolBar.prototype.ButtonExists = function(button_id) {
	return typeof(this.Buttons[button_id]) == 'object';
}
