<!--//
String.prototype.ucFirst = function () {
   return this.substr(0,1).toUpperCase() + this.substr(1,this.length);
}

/**
 * Javascript class to manage clientside status messages
 */
function PageMessages() {
	var pageMessages		= new Array();
	var msgIconLayers		= new Array();
	
	// Create unique array to hold each type of message
	var messageLevels = new Array('OK', 'INFO', 'WARN', 'ERROR', 'DEBUG');
	for (var i=0; i < messageLevels.length; i++) {
		pageMessages[messageLevels[i]] = new Array();
	}
	
	var hightlightClass		= 'highlightField';

	this.addMessage 		= addMessage;
	this.clearMessage		= clearMessage;
	
	this.layoutMessages		= layoutMessages;
	this.hasMessages		= hasMessages;
	this.clearMessages		= clearMessages;
	
	this.setMsgIcon			= setMsgIcon;
	this.showConfirm		= showConfirm;
	this.showAlert			= showAlert;
	this.getText			= getText;
	this.removeHightlight	= removeHighlight;
	this.highlightField		= highlightField;

	
	/**
	 * Add message to page
	 **/
	function addMessage(key, value, level) {
		if (level == '') {
			level = 'INFO';
		}
		
		clearMessage(key, level);
		
		message				= new Array();
		message['key']		= getText(key);
		message['value']	= getText(value);
		
		pageMessages[level].push(message);
		layoutMessages();
	}
	
	
	/**
	 * Sets a message icon
	 */
	function setMsgIcon(layer, icon, message) {
		
		// If we have a message set the message and icon
		// If we don't have a message we hide the layer
		if (message != '' && message != 'undefined') { 
			message = getText(message);
			
			if ($(layer)) { 
				msgIconLayers[layer] = layer;
				$(layer).update('&nbsp;<img src="images/admin_icons/' + icon + '.gif" alt="' + message + '" title="' + message + '" style="vertical-align:middle;" />');
				$(layer).show();
			} 
		} else { 
			if ($(layer)) {
				$(layer).hide();
			}
			
			try {
				msgIconLayers[layer] = layer;
			} catch (error) {
				// Do nowt
			}
		}
	}
	

	/**
 	 * Clears the page messages
	 */
	function clearMessages(level) {
		// Clear all icon layers
		for (var layer in msgIconLayers) { 
			setMsgIcon(layer, '', '');
			delete msgIconLayers[layer];
		}

		// clear any field highlighting
		$$('.' + hightlightClass).each(function (element) {
			removeHighlight(element)
		});

		
		if (level) {
			pageMessages[level] = new Array();
		} else {
			for (var i=0; i < messageLevels.length; i++) {
				pageMessages[messageLevels[i]] = new Array();
			}
		}

		layoutMessages();
	}
	
	/**
	 * Clear the error value
	 */
	function clearMessage(key, level) {
		key = getText(key);
	
		if (!pageMessages[level]) {
			return;
		}
		
		for (var i=0; i < pageMessages[level].length; i++) {
			if (pageMessages[level][i]['key'] == key) {
				pageMessages[level][i] = null;
			}
		}
		
		pageMessages[level] = pageMessages[level].compact();
		layoutMessages();
	}
	
	
	/**
	 * Add highlighting to a field
	 */
	function highlightField(field) {
		if ($(field))
			$(field).addClassName(hightlightClass);
	}
	
	/**
	 * Remove highlighting from a field
	 */
	function removeHighlight(field) {
		if ($(field))
			$(field).removeClassName(hightlightClass);
	}
	
	
	/**
	 * Layout messages
	 **/
	function layoutMessages() {
		messageLevels.each(function (level) {
			var layer		= 'page' + level.toLowerCase().ucFirst() + 'Layer';
			var listLayer	= 'page' + level.toLowerCase().ucFirst() + 'ListLayer';
			var ul			= 'page' + level.toLowerCase().ucFirst() + 'Ul';

			if (hasMessages(level) <= 0) {
				if ($(layer)) {
					$(layer).hide();
				}
			} else {
				var ulHTML = '<ul id="' + ul + '" style="list-style-type:square;">';
				for (var i=0; i < pageMessages[level].length; i++) {
					if (!pageMessages[level][i]['value'] == '') {
						ulHTML += '<li><b>' + pageMessages[level][i]['key'] + '</b> - ' + pageMessages[level][i]['value'] + '</li>';
					}
				}
				ulHTML += "</ul>";
				
				if ($(listLayer) && $(layer)) {
					$(listLayer).update(ulHTML);
					$(layer).show();
				}
			}
		});
	}
	
	
	/**
	 * Returns true if messages exist
	 */
	function hasMessages(level) {
		if (level) {
			return pageMessages[level].length > 0;
		} else {
			var msg_count = 0;
			for (var i=0; i < messageLevels.length; i++) {
				msg_count += pageMessages[messageLevels[i]].length;
			}
			
			return msg_count > 0;
		}
		
		return false;
	}
	
	
	/**
	 * Wrapper to standard js alert message
	 */
	function showAlert(msg) {
		return alert(getText(msg));
	}
	
	
	/**
	 * Wrapper to standard js alert message
	 */
	function showConfirm(msg) {
		return confirm(getText(msg));
	}
	
	
	/**
	 * Get text wrapper
	 */
	function getText(msg) {
		try {
			// check in the gettext
			if (l != null && l[msg] != null) {
				return l[msg];
			} else {
				return msg;
			}
		} catch (error) {
			return msg;
		}
	}
	
	
}
pageMessages = new PageMessages();


/**
 * Javascript class that wraps around the above for FG/TC code backward compatability
 */
function PageErrors() {
	this.addError 			= addError;
	this.clearError			= clearError;
	this.layoutErrors 		= layoutErrors;
	this.hasErrors			= hasErrors;
	this.clearErrors		= clearErrors;
	this.setMsgIcon			= setMsgIcon;
	this.showConfirm		= showConfirm;
	this.showAlert			= showAlert;
	this.getText			= getText;
	this.removeHightlight	= removeHighlight;
	this.highlightField		= highlightField;

	function addError(key, value) {
		pageMessages.addMessage(key, value, 'ERROR');
	}

	function setMsgIcon(layer, icon, message) {
		pageMessages.setMsgIcon(layer, icon, message);
	}

	function clearErrors() {
		pageMessages.clearMessages();
	}

	function removeHighlight(field) {
		pageMessages.removeHighlight(field);
	}

	function highlightField(field) {
		pageMessages.highlightField(field);
	}

	function clearError(key) {
		pageMessages.clearMessage(key, 'ERROR');
	}

	function layoutErrors() {
		pageMessages.layoutMessages();
	}

	function hasErrors() {
		return pageMessages.hasMessages('ERROR');
	}

	function showAlert(msg) {
		return pageMessages.showAlert(msg);
	}

	function showConfirm(msg) {
		return pageMessages.showConfirm(msg);
	}

	function getText(msg) {
		return pageMessages.getText(msg);
	}
}
pageErrors = new PageErrors();
//-->
