/**
 * Royalfish UiMessage class.
 * 2008-01-27:	first initial version
 */

/**
 * RFUiMessage class layout
 * - hideMessage (hides a message for the user)
 */

/**
 * The main class definition
 */
	function RFUiMessage(in_message, in_messagebox_class, in_use_autohide, in_autohide_after) {
		this.message = in_message;
		this.messagebox_class = in_messagebox_class;
		this.use_autohide = in_use_autohide;
		this.autohide_after = in_autohide_after;
		this.active_timer = null;
		
		/**
		 * Generate html message object.
		 */
		this.messagebox_obj = document.createElement('DIV');
		addClassName(this.messagebox_obj, 'message');
		addClassName(this.messagebox_obj, this.messagebox_class);
		
		/**
		 * Append close button
		 */
		temp_div = document.createElement('DIV');
		temp_div.appendChild(document.createTextNode('x'));
		addClassName(temp_div, 'closeButton');
		addClassName(temp_div, 'appearLink');
		this.messagebox_obj.appendChild(temp_div);
		
		/**
		 * Append message text.
		 */
		temp_span = document.createElement('SPAN');
		this.messagebox_obj.appendChild(temp_span);
		temp_span.innerHTML = this.message;
		
		/**
		 * Append message to collection
		 */
		this.message_id = RFUiMessage.add(this);
		
		/**
		 * Set events
		 */
		this.messagebox_obj._super = this;
		temp_div.onclick = function() { this.parentNode._super.close(); };
		this.messagebox_obj.onmouseover = function() { this._super.killTimer(); };
		this.messagebox_obj.onmouseout = function() { this._super.timedClose(); };
	}
	
	RFUiMessage.prototype.show = function() {
		RFUiMessage.container_obj.appendChild(this.messagebox_obj);
		if(this.use_autohide) {
			this.timedClose();
		}
	}
	
	RFUiMessage.prototype.close = function() {
		if(this.messagebox_obj) {
			this.messagebox_obj.parentNode.removeChild(this.messagebox_obj);
		}
	}
	
	RFUiMessage.prototype.timedClose = function() {
		if(this.use_autohide) {
			this.active_timer = window.setTimeout('RFUiMessage.get('+this.message_id+').close()', this.autohide_after);
		}
	}
	
	RFUiMessage.prototype.killTimer = function() {
		if(this.active_timer != null) {
			clearTimeout(this.active_timer);
			this.active_timer = null;
		}
	}

/**
 * All general UiMessage functionality
 */
	RFUiMessage.messages = new Array();
	RFUiMessage.container_obj = false;
	
	/**
	 * Adds a message to the list of messages.
	 */
	RFUiMessage.add = function(in_message) {
		/**
		 * Only if the message is a valid message.
		 */
		if(in_message.show) {
			/**
			 * Append to collection.
			 */
			RFUiMessage.messages.push(in_message);
			
			/**
			 * Initialize container if not initialized yet
			 */
			if(!RFUiMessage.isInitialized()) {
				RFUiMessage.initialize();
			}
			
			/**
			 * Return message id.
			 */
			return (RFUiMessage.messages.length-1);
		}
		else {
			return false;
		}	
	}
	
	/**
	 * Gets the instance of a message.
	 */
	RFUiMessage.get = function(in_index) {
		if(RFUiMessage.messages[in_index] && RFUiMessage.messages[in_index].show) {
			return RFUiMessage.messages[in_index];
		}
		else {
			return false;
		}
	}
	
	/**
	 * Removes a message object.
	 */
	RFUiMessage.remove = function(in_index) {
		RFUiMessage.messages[in_index] = false;
	}
	
	/**
	 * Throws an error message
	 */
	RFUiMessage.throwError = function(in_message) {
		temp_message = new RFUiMessage(in_message, 'error', false);
		temp_message.show();
	}
	
	/**
	 * Throws an warning message
	 */
	RFUiMessage.throwWarning = function(in_message) {
		temp_message = new RFUiMessage(in_message, 'warning', true, 6*1000); 
		temp_message.show();
	}
	
	/**
	 * Throws an information message
	 */
	RFUiMessage.throwInformation = function(in_message) {
		temp_message = new RFUiMessage(in_message, 'information', true, 2*1000);
		temp_message.show();
	}
	
	/**
	 * Throws an succeed message
	 */
	RFUiMessage.throwSucceed = function(in_message) {
		temp_message = new RFUiMessage(in_message, 'succeed', true, 2*1000);
		temp_message.show();
	}
	
	/**
	 * Determine whether the messagebox container is  
	 */
	RFUiMessage.isInitialized = function() {
		if(RFUiMessage.container_obj) {
			return true;
		}
		else {
			return false;
		}
	}
	
	/**
	 * Initialize container
	 */
	RFUiMessage.initialize = function() {
		if(!RFUiMessage.isInitialized()) {
			RFUiMessage.container_obj = document.createElement('DIV');
			RFUiMessage.container_obj.id = 'uiMessageContainer';
			document.body.appendChild(RFUiMessage.container_obj);
		}
	}
	 
