var Class = {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  },
  extend:function(child, parent) {
	  for (var property in parent.prototype) {
		if(!child.prototype[property])
		 child.prototype[property] = parent.prototype[property];
	  }
	  return;
  }
}


/* 
* Message
*
* copyright  Copyright (c) 2008  
* license     
*/
var Message = Class.create();
Message.prototype = 
{
	/* 
	 * initialize 
	 */
	initialize: function() {
	},
	
	/* 
	 * getMessage 
	 *
	 * param  string  msgId 
	 * param  array  variables 
	 * return string
	 */
	getMessage: function( msgId, variables ) {
		variables = checkValue(variables, null);
		var contents =  this.searchMessage(_message_defs, msgId);	
		if(!contents) return false;
		message = this.replaceVariables( contents, variables );		
		return message;
	},
	
	/* 
	 * searchMessage
	 *
	 * param string messages 
	 * param string msgId    
	 * param string extraKey 
	 * return string 
	 */
	searchMessage: function(messages, msgId, extraKey) {
		extraKey = checkValue(extraKey, '');
		for(var i =0; i < messages.length; i ++){
			if(messages[i].messageId == msgId)
				return messages[i].content;
		}
		return null;
	},
	
	/* 
	 * replaceVariables 
	 *
	 * param string message 
	 * param array params  
	 * return string 
	 */
	replaceVariables: function(message, param) {
		message = new String(message);
		numArgs = arguments.length;
		params = checkValue(param, new Array());

		if(numArgs > 2 && !isArray(params))
		{
			params = new Array();
			for( var i = 1; i < numArgs; i ++ )
			{
				argument = new String(arguments[i]);
				params[i-1] = argument;
			}
		}

		if(empty(params))
			return message;
		else
			message = message.replace(/\{[\s]*([0-9]{1,2})[\s]*\}/g,function(value, index){
					if(params[index])
						return params[index];
					else
						return "";
		     }); 
		
		return message;
	}
}
