if ((top.ButtonInit == "undefined") || (top.ButtonInit != true))
{
	/**
	*
	* Button RENDERER definition.
	*
	*/

	function ButtonRenderer(){
	}

	ButtonRenderer.prototype.renderButton = function(buttonId, label){
		var disabled = '';
		if ( ButtonActionManager.disabledButtons[buttonId] != null && ButtonActionManager.disabledButtons[buttonId] == buttonId ) {
			disabled = 'disabled';
		}
		return "<button onclick=\"ButtonActionManager.doButtonAction('"+ buttonId+"')\" id=\""+buttonId+"\" " + disabled + ">"+label+"</button>";
	}
	
	/**
	*
	* Button CLASS definition.
	*
	*/


	/**
	*
	* Button ACTION MANAGER definition.
	*
	* Handles user gestures
	*
	*/

	function ButtonActionManager(){
	}

	ButtonActionManager.handlerList = new Array();
	ButtonActionManager.disabledButtons = new Array();
	ButtonActionManager.buttonRenderer = new ButtonRenderer();

	ButtonActionManager.register = function (handler){
		ButtonActionManager.handlerList[ButtonActionManager.handlerList.length] = handler; 
	}
	ButtonActionManager.doButtonAction = function(id){
		if(ButtonActionManager.isEnabled(id)){
			var len = ButtonActionManager.handlerList.length;
			var handler;
			for(var i=0;i<len;i++){
				ButtonActionManager.handlerList[i].doButtonAction(id);
			}
		}
	}
	ButtonActionManager.changeLabel = function (buttonID,label){
		var element = Component.getDocument().getElementById(buttonID);
		if(element==null || element=="undefined"){
			return;
		}
		element.innerHTML = label;
	}
	ButtonActionManager.disable = function(buttonID){
		var element = Component.getDocument().getElementById(buttonID);
		if(element==null || element=="undefined"){
			return;
		}
		element.disabled = true;

		ButtonActionManager.disabledButtons[buttonID] = buttonID;
		//May also update style to reflect disabled status
	}
	ButtonActionManager.enable = function(buttonID){
		var element = Component.getDocument().getElementById(buttonID);
		if(element==null || element=="undefined"){
			return;
		}
		element.disabled = false;

		ButtonActionManager.disabledButtons[buttonID] = null;
		//May also update style to reflect enabled status
	}
	ButtonActionManager.isEnabled = function(buttonID){
		var button = ButtonActionManager.disabledButtons[buttonID];
		if(button ==null || button=="undefined"){
			return true;
		}
		return false;
	}


	/**
	*
	* Button EVENT MANAGER definition.
	*
	* Handles component updates
	*
	*/

	function ButtonEventManager(){
		this.xmlWrapper = new XmlWrapper();
	}

	ButtonEventManager.prototype.handle = function(publisher, eventName, eventId, payLoad) {
		payLoad = this.xmlWrapper.unWrapXml(payLoad);
		if(eventName == 'changelabel') {
			ButtonActionManager.changeLabel(eventId,payLoad);
		} else if(eventName == 'disable') {
			ButtonActionManager.disable(eventId);
		} else if(eventName == 'enable'){
			ButtonActionManager.enable(eventId);
		}
	}

	top.ButtonEventManager = new ButtonEventManager();

	// subscribe this event manager with the global Event Service
	top.eventService.subscribe("Button","changelabel","-",top.ButtonEventManager);
	top.eventService.subscribe("Button","enable","-",top.ButtonEventManager);
	top.eventService.subscribe("Button","disable","-",top.ButtonEventManager);


	//////////////////////////////////////

	top.ButtonInit = true;
}
	