(function($) {
		$.fn.htmlI18N = function(str_key, params) {
			if (str_key == undefined) {
				if (this.length) {
					return this[0].innerHtml;
				}
				else {
					return null;
				}
			}
			else {
				this.empty().append(getI18N(str_key, params));
			}
        };
})(jQuery);

// Return a boolean value telling whether 
// the first argument is an Array object. 

function isArray() {	
	if (typeof arguments[0] == 'object') {  
		var criterion = arguments[0].constructor.toString().match(/array/i); 
		return (criterion != null);
	}
	return false;
}

function getI18N(k, o) {
	var s = '';
	if(_translator[k]) {
		s = _translator[k];
	}
	else {
		s = k;
	}
	if(o && isArray(o)) {
		for(var i=0; i < o.length; i++) {
			var pattern = '{' + i + '}';
			var antipattern = '\\{' + i + '\\}';
			var index = 0;
			while(index <= s.length && index != -1) {
				index = s.indexOf(pattern, index);
				var antiindex = s.indexOf(antipattern);
				if(index != -1 && antiindex != index) {
					s = s.replace(pattern, o[i]);
				}
				else {
					s = s.replace(antipattern, pattern);
				}
			}
		}
	}
	
	return s;
}


var _translator;
var _language = getLanguage();
getTranslations();

function getLanguage() {
	var l = $.cookie('lang');
	if (l == null || l == '')
	{
		$.ajax({
			type: 'GET',
			url: '../portal/masterdata',
			data: {'q':'getInstallationDefaults'},
			dataType: 'json',
			cache: false,
			async: false,
			success: function(r) {
				if (r.result == 'success')
				{
					if (r.lang != null && r.lang != '')
					{
						l = r.lang;
						$.cookie('lang', l, {'path' : '/'});
						return l;
					}
				}
				$.cookie('lang', 'en', {'path' : '/'});
				return 'en';
			},
			error: function(r){
				$.cookie('lang', 'en', {'path' : '/'});
				return 'en';
			}
		});
	}
	
	return l;
}

function getPageName() {
	var st = window.location.toString();
	return st.substring(st.lastIndexOf("/")+1,st.indexOf(".",st.lastIndexOf("/")));
}

function updateTranslations(js) {
	$.ajax({
		type: 'POST',
		url: '../js/lang/' + _language + '/' + js,
		data: {},
		dataType: 'json',
		cache: false,
		async: false,
		success: function(r)
		{
			for (var o in r)
			{
				_translator[o] = r[o];
			}
		},
		error: function(r){}
	});
}

function getTranslations(){
	while (_language == null || _language == '')
		_language = getLanguage();
	$.ajax({
		type: 'POST',
		url: '../js/lang/' + _language + '/' +  getPageName() + '.js',
		data: {},
		dataType: 'text',
		cache: false,
		async: false,
		success: function(r)
		{
			$.ajax({
				type: 'POST',
				url: '../js/lang/' + _language + '/_all.js',
				data: {},
				dataType: 'text',
				cache: false,
				async: false,
				success: function(o) {
					r = o + r;
				}
			});
			_translator = eval('(' + r + ')');
		},
		error: function(r) {}
	});
}

function translate() {
	$("span[@class*='lang']").each( function (i) {
		$(this).html(_translator[this.id]);
	});
	$("input[@class*='lang']").each( function (i) {
		$(this).val(_translator[this.id]);
	});
	$("select[@class*='lang']").each( function (i) {
		var opts = $(this)[0].options;
		for(var i=0; i<opts.length; i++) {
			opts[i].text = _translator[opts[i].id];
		}
	});
}

$(document).ready(function() {
	translate();
});
