/*
 * hyCMS
 * Copyright(C)2008 by Friedrich Gräter
 * Published under the terms of the Lesser GNU General Public License v2
 *
 * WidgetKit backend: Button widget
 *
 * Please Note: This module has to be clean from all dependencies to predicateJS!
 *
 *				Also this module requires "widget-kit.css" to be
 *				embedded to the parent site for styling the widgets.
 *
 */

/*
 * wk_Buttons
 *
 * Translate all available button stocks to their styling type.
 *
 */
wk_Buttons = {
	"text":			"text",

	// Native
	"ok":			"ok",
	"cancel":		"cancel",
	
	"new":			"new",

	"left":			"left",
	"right":		"right",
	"up":			"up",
	"down":			"down",	
	
	"plus":			"plus",
	"minus":		"minus",
	
	"save":			"save",
	"inspect":		"inspect",
	"settings":		"settings",	

	"delete":		"delete",
	
	"more":			"more",
	
	// Derived
	"append":		"new",
	"close":		"cancel",
	
	"previous":		"left",
	"next":			"right",
	
	"yes":			"ok",
	"no":			"cancel",
	
	"add":			"plus",
	"remove":		"minus",

	"rename":		"settings",	
	"help":			"inspect"
};

/*
 * wk_createButton(id, stock, caption, relatedDocument)
 *
 * Creates a button widget. The widget will use a given stock (see wk_Buttons).
 * If the stock is "text" a text-button will be created with the given caption.
 *
 * The button will have the following methods:
 *
 *		enable			Enable the button
 *		disable			Disable the button
 *
 * It will throw the following events:
 *
 *		action			User clicked the button
 *
 */
function wk_createButton(id, stock, caption, relatedDocument)
{
	if (relatedDocument == null)
		relatedDocument = document;

	var view = relatedDocument.createElement("span");
	var realStock = wk_Buttons[stock];
	
	// Define type
	view.wk_type = "button";
	view.id = id;

	// Configure view
	view.className = "wk_button_"+realStock;

	wk_registerDOMEvent(view, "mousedown", 
		function(event) {
			if (view.wk_isDisabled) {
				// Disable click
				return wk_skipEvent(event);
			}	
		
			view.className = "wk_buttonClicked_"+realStock; 
			
			// No dragging
			return wk_skipEvent(event);
		}
	);
	
	wk_registerDOMEvent(view, "mouseup", 
		function(event) { 
			if (view.wk_isDisabled) {
				// Disable click
				return wk_skipEvent(event);
			}	

			view.className = "wk_button_"+realStock; 
		}
	);

	wk_registerDOMEvent(view, "mouseout", 
		function(event) { 
			if (view.wk_isDisabled) {
				// Disable click
				return wk_skipEvent(event);
			}	
			
			view.className = "wk_button_"+realStock; 
		}
	);


	if (stock != "text") {
		view.setAttribute("title", caption)
	}
	 else {
		view.appendChild( relatedDocument.createTextNode(caption) );
	}
	
	// Declare Events
	wk_declareEvents(view, "action");
	
	// Setup event redirection
	wk_eventRedirection(view, "click", "action", function() { if (view.wk_isDisabled) return false; } );
	
	// Methods
	view.enable = function()
	{
		view.className = "wk_button_"+realStock;
		view.wk_isDisabled = false;
	}
	
	view.disable = function()
	{
		view.className = "wk_buttonDisabled_"+realStock;
		view.wk_isDisabled = true;
	}
	
	// FIXME: use computed height
	view.style.height = Config.WidgetKit.buttonHeight + "px";
	
	if (stock != "text")
		view.style.width = Config.WidgetKit.buttonWidth + "px";
	
	return view;	
}


