////Example: http://haineault.com/blog/62/
////
////// Translation templates (always starts with english)
////$.i18n('en.i42CmsEditor', {
////    'Month': 'Month',
////    'Year':  'Year',
////    'Day':   'Day'
////});
////
////$.i18n('fr.i42CmsEditor', {
////    'Month': 'Mois',
////    'Year':  'Année',
////    'Day':   'Jour'
////});
////
////$.i18n('en');
////alert($.i18n('i42CmsEditor', 'Year')); // returns "Year"
////
////$.i18n('fr');
////alert($.i18n('i42CmsEditor', 'Year')); // returns "Année"
////
////Tip
////
////Encapsulate a shortcut function like this when writing your plugin
////
////(function($){
////
////    function _(str, args) { 
////        return $.i18n('i42CmsEditor', str, args); 
////    }
////
////    // then you can use it like this
////    alert(_('Year')); // returns "Année"
////    
////})(jQuery);
(function($){
	
    $._i18n = { trans: {}, 'default':  'en', language: 'en' };
    $.i18n = function() {
        var getTrans = function(ns, str) {
            var trans = false;
            // check if string exists in translation
            if ($._i18n.trans[$._i18n.language] 
                && $._i18n.trans[$._i18n.language][ns]
                && $._i18n.trans[$._i18n.language][ns][str]) {
                trans = $._i18n.trans[$._i18n.language][ns][str];
            }
            // or exists in default
            else if ($._i18n.trans[$._i18n['default']] 
                     && $._i18n.trans[$._i18n['default']][ns]
                     && $._i18n.trans[$._i18n['default']][ns][str]) {
                trans = $._i18n.trans[$._i18n['default']][ns][str];
            }
            // return trans or original string
            return trans || str;
        };
        
//    	/**
//    	 * toEntity()
//    	 * Change non-ASCII characters to entity representation 
//    	 *
//    	 * @param string str : The string to transform
//    	 * @return string result : Original string with non-ASCII content converted to entities
//    	 *
//    	 */
//    	var toEntity = function (str) {
//    		var result = 'ä';
//    		alert(encodeURI(result));
////    		for (var i=0;i<str.length; i++) {
////    			if (str.charCodeAt(i) > 128){
////    				result += "&#"+str.charCodeAt(i)+";";
////    				alert(result);
////    			}
////    			else
////    				result += str.charAt(i);
////    		}
//    		return result;
//    	};
        // Set language (accepted formats: en or en-US)
        if (arguments.length < 2) {
            $._i18n.language = arguments[0]; 
            return $._i18n.language;
        }
        else {
            // get translation
            if (typeof(arguments[1]) == 'string') {
                var trans = getTrans(arguments[0], arguments[1]);
                // has variables for string formating
                if (arguments[2] && typeof(arguments[2]) == 'object') {
                	//return toEntity($.format(trans, arguments[2]));
                	return $.format(trans, arguments[2]);
                }
                else {
                	//return toEntity(trans);
                	return trans;
                }
            }
            // set translation
            else {
                var tmp  = arguments[0].split('.');
                var lang = tmp[0];
                var ns   = tmp[1] || 'jQuery';
                if (!$._i18n.trans[lang]) {
                    $._i18n.trans[lang] = {};
                    $._i18n.trans[lang][ns] = arguments[1];
                }
                else {
                    $.extend($._i18n.trans[lang][ns], arguments[1]);
                }
            }
        }
    };
})(jQuery);
