﻿String.prototype.localize = function() {
    var cReturnValue = (i18n[lang]) ? i18n[lang][this] : this;

    if (!cReturnValue) {
        cReturnValue = this;
    } else {
        for (var i = 0; i < arguments.length; i++) {
            cReturnValue = cReturnValue.replace("{" + i + "}", arguments[i]);
        }
    }
    return cReturnValue;
};

jQuery.fn.i18n = function(opts) {
    var prevLang = lang;
    if (typeof opts == 'object' && opts.lang) {
        lang = opts.lang;
    }
    if (prevLang != lang) {
        $(this).filter('div').each(function() {
            var bgImage = $(this).css('background-image');
            if (bgImage.indexOf("_" + prevLang + ".gif") > 0) {
                $(this).css('background-image', bgImage.replace("_" + prevLang + ".gif", "_" + lang + ".gif"));
            }
            else if (bgImage.indexOf("_" + prevLang + ".png") > 0) {
                $(this).css('background-image', bgImage.replace("_" + prevLang + ".png", "_" + lang + ".png"));
            }
        });
    }
    $(this).filter('div,span,p,a,h1,h2,h3,label,td').each(function() {
    if ($(this).attr('id') !== '' && i18n[lang][$(this).attr('id')] !== null && typeof i18n[lang][$(this).attr('id')] != 'undefined') {
            var str = $(this).attr('id').localize();
            if (typeof str == 'string' && str != '') {
                $(this).html(str);
            }
            else if (typeof str == 'object') {
                var msg = str.fmt;
                var i = 0;
                for (var prop in str.args) {
                    msg = msg.replace("{" + (i++) + "}", eval(str.args[prop]));
                }
                if (msg != '')
                    $(this).html(msg);
            }
        }
    });
    $(this).filter('input').each(function() {
    if ($(this).attr('id') !== '' && i18n[lang][$(this).attr('id')] !== null && typeof i18n[lang][$(this).attr('id')] != 'undefined') {
            var str = $(this).attr('id').localize();
            if (str != $(this).attr('id') && str != '') {
                $(this).val(str);
            }
        }
    });
    $(this).filter('select').each(function() {
        var key = $(this).attr('id');
        $(this).children().filter('option').each(function() {
            var subkey = key + $(this).val();
            var str = subkey.localize();
            if (str !== null && str.length > 0 && subkey != str && str != '') {
                $(this).html(str);
            }
        });
    });
    var titleStr = 'title'.localize();
    if (titleStr != '')
        document.title = titleStr;
    return this;
}

jQuery.i18n = function() {
    if (arguments.length == 1 && typeof arguments[0] == 'string') return arguments[0].localize();
    else if (arguments.length == 0) {
        return $('*').filter('[id]').i18n();
    }
    else if (arguments.length == 1 && typeof arguments[0] == 'object') {
        return $('*').filter('[id]').i18n(arguments[0]);
    }
    var str = arguments[0].localize();
    if (typeof str == 'string') {
        for (var i = 1; i < arguments.length; i++) {
            str = str.replace("{" + (i - 1) + "}", arguments[i]);
        }
        return str;
    }
    else if (typeof str == 'object') {
        var fmt = str.fmt;
        var i = 0;
        for (var prop in str.args) {
            fmt = fmt.replace("{" + (i++) + "}", eval(str[prop]));
        }
        return fmt;
    }
    return '';
}
