/*
 * AbCore MultiLanguage InputBox
 * version: 0.0.2 (11-JUL-2010)
 * @requires jQuery v1.4.2 or later
 */

/*
 * History:
 * 
 * 0.0.1	First version
 * 0.0.2    Fixed Bug, better security
 */

(function($) {
    
    var _lastIndex = 1;
   
    $.MlInputBox = function(text, defaultValues, onOKClick, onCloseClick, langClassPrefix) {

        var ib = new (function(a, b, c, d, e) {
            //Private variables
            var _index = _lastIndex++;
            var _inputContainer;
            var _textContainer;
            var _self = this;
            //Public variables
            this.autoDestroy = true;
            this.options = {
                onOKClick: null,
                onCloseClick: null,
                okText: 'Ok',
                closeText: 'Close',
                langClassPrefix: 'locale-',
                defaultLang: null,
                defaultLangId: null
            };
            //Private methods
            var _destroy = function() {
                if (!_self.autoDestroy)
                    return;
                _inputContainer.remove();
                _self.options.onOKClick = null;
                _self.options.onCloseClick = null;
                _self.autoDestroy = false;
            };
            var _okClick = function() {
                var datas = {};
                for (var i = 0; i < _self.options.defaultLang.length; i++) {
                    var locale = _self.options.defaultLang[i];
                    var data = _textContainer[i].val();
                    datas[locale] = data;
                }
                if (typeof(_self.options.onOKClick) == 'function')
                    _self.options.onOKClick(datas);
                _self.autoDestroy = true;
                _destroy();
            };
            //Public methods
            this.init = function(a, b, c, d) {
                this.setAutomaticLocales();
                _textContainer = new Array(this.options.defaultLang.length);
                _inputContainer = $('<div id="MultiLanguageInputBox' + _index + '" title="' + a + '"></div>');
                var defs = $.extend(new Array(this.options.defaultLang.length), b);
                this.options.onOKClick = c;
                this.options.onCloseClick = d;
                for ( var i = 0; i < this.options.defaultLang.length; i++) {
                    var locale = this.options.defaultLang[i];
                    var def = (defs[i]) ? defs[i] : '';
                    var cls = this.options.langClassPrefix + locale;
                    _textContainer[i] = $('<input type="text" id="mlibtxt-' + locale + '" class="' + cls + '" value="' + def + '" style="width: 90%" />');
                    _textContainer[i].appendTo(_inputContainer);
                    _textContainer[i].keypress(function(e) {
                        if (e.which == 13) {
                            _self.autoDestroy = false;
                            _inputContainer.dialog('close');
                            _okClick();
                        }
                    });
                    _inputContainer.append('<br />');
                }
                _inputContainer.appendTo($('body'));
            };
            
            this.localize = function(okText, closeText) {
                this.options.okText = okText;
                this.options.closeText = closeText;
            };
            
            this.setAutomaticLocales = function() {
                this.options.defaultLang = $.extend([], $.getLocalized('locales'));
                var found = false;
                for (var i = 0; i < this.options.defaultLang.length; i++) {
                    if (this.options.defaultLang[i] == $.getLocalized('current')) {
                        this.options.defaultLangId = i;
                        found = true;
                        break;
                    }
                }
                if (!found)
                    this.options.defaultLangId = 0;
                this.localize($.getLocalized('okText'), $.getLocalized('closeText'));
            };
            
            this.show = function() {
                var btns = {};
                btns[this.options.okText] = function()
                {
                    _self.autoDestroy = false;
                    $(this).dialog('close');
                    _okClick();
                };
                btns[this.options.closeText] = function()
                {
                    if (typeof(_self.options.onCloseClick) == 'function')
                        _self.options.onCloseClick();
                    _self.autoDestroy = true;
                    $(this).dialog('close');
                };
                _inputContainer.dialog({
                    bgiframe: true,
                    modal: true,
                    buttons: btns,
                    open:  function() {
                        if (_textContainer.length > 0)
                            _textContainer[_self.options.defaultLangId].focus();
                    },
                    close: function()
                    {
                        _destroy();
                    }
                });
            };
            
            if (e != null)
                this.options.langClassPrefix = e;
            this.init(a, b, c, d);

        })(text, defaultValues, onOKClick, onCloseClick, langClassPrefix);
        
        ib.show();
        
    };
    
})(jQuery);

function MlInputBox(text, defaultValues, onOKClick, onCloseClick, langClassPrefix) {
    $.MlInputBox(text, defaultValues, onOKClick, onCloseClick, langClassPrefix);
}
