
(function() {

	var translate = function(text)
	{
		var xlate = translateLookup(text);
		
		if (typeof xlate == "function")
		{
			xlate = xlate.apply(this, arguments);
		}
		else if (arguments.length > 1)
		{
			var aps = Array.prototype.slice;
			var args = aps.call( arguments, 1 );
  
			xlate = formatter(xlate, args);
		}
		
		return xlate;
	};
	
	// I want it available explicity as well as via the object
	translate.translate = translate;
	var defaultFormatter = (function() {
		var re = /#=([^#]+)#/g;
		return function(s, args) {
			return s.replace(re, function(_, match){ return args[match]; });
		}
	}());
	var formatter = defaultFormatter;
	translate.setFormatter = function(newFormatter)
	{
		formatter = newFormatter;
	};
	
	translate.format = function()
	{
		var aps = Array.prototype.slice;
		var s = arguments[0];
		var args = aps.call( arguments, 1 );
  
		return formatter(s, args);
	};
	
	var translation = null;
	translate.setTranslation = function(newTranslation)
	{
		translation = newTranslation;
	};
	
	function translateLookup(target)
	{
		if (translation == null || target == null)
		{
			return target;
		}
		
		try{
			var result = translation[target.toLowerCase()];
			if (result == null)
			{
				return target;
			}
			
			return result;
		}catch(err){
			console.log(err);
		}
	};
	
	window._ = translate;

})();

/*
To be appended:
-----
var language_map = {"en-value":"translated-value"};
            
$(function() {
    _.setTranslation(language_map);
});
-----

Usage: _('en-value')
Example: alert(_('en-value')); //will alert the translated value if found
*/

var language_map = {"en":"en"};
            
        $(function() {
            _.setTranslation(language_map);
        });