if (undefined == onenight) {
    var onenight = {
        env: null,
        locale: null,
        init: function() {
            this.env    = (typeof(env) !== "undefined") ? env : null;
            this.locale = (typeof(locale) !== "undefined") ? locale : null;
        },

        log: function(msg) {
            if ("development" == onenight.env && typeof(console) !== "undefined") {
                console.log(msg);
            }

        },
        translate: function(str) {
            if ("undefined" == typeof(onenight.locales)) {
                onenight.log("Onenight: locales are not loaded");
                return str;
            }
            var locale = onenight.locales[onenight.locale];
            if (!locale) {
                onenight.log("Onenight: unknown locale requested '" + onenight.locale + "'");
                return str;
            }

            var value = locale[str];
            if (!value) {
                onenight.log("Onenight: untranslated item found '" + str + "'");
                return str;
            }
            return value;
        }
    };
}

$(function() {
    onenight.init();
});

_t = onenight.translate;

onenight.loginForm = {
    init: function() {
        if ($('#login_field_span').length && $('#password_field_span').length) {
            if ($('#username').val().length > 0) {
                $('#login_field_span').hide();
                $('#password_field_span').hide();
            }
            $('#username').bind("focus", function() {
                $('#login_field_span').hide();
            });
            $('#login_field_span').bind("click", function() {
                $('#username').focus();
            });
            $('#password').bind("focus", function() {
                $('#password_field_span').hide();
            });
            $('#password_field_span').bind("click", function() {
                $('#password').focus();
            });
        }
        $("#login_box_form").ajaxForm({
            dataType: 'json',
            success: function(response) {
                if (!response.success) {
                    alert(response.errors[0]);
                } else {
                    if (response.redirect_url) {
                        window.location = response.redirect_url;
                    } else {
                        window.location = "/user";
                    }
                }
            }
        });
        return this;
    },

    initDialog: function() {
        $("#login-box").dialog({
            title: _t("Log in"),
            modal: true,
            autoOpen: false,
            height: 280,
            width: 450,
            draggable: false,
            resizable: false
        });
        $("#popup-login-form-link").bind("click", function() {
            $("#login-box").dialog("open");
        });
        return this;
    }
};

onenight.translateForm = {
    init: function() {
        $("body").bind("contextmenu", function() { return false; });

        $("#translate-form-block").dialog({
            title: _t("Translate"),
            modal: true,
            autoOpen: false,
            height: 360,
            width: 420,
            draggable: false,
            resizable: false
        });

        $("#translate-form").ajaxForm({
            dataType: "json",
            success: function(response) {
                //$("div:contains(" + response.data.oldValue + ")").html(response.data.newValue);
                $("#translate-form-block").dialog("close");
                var elements = $("body *").filter(function() {
                    var $this = $(this);
                    return $this.hasClass("translate") && $this.html() == response.data.oldValue;
                });
                $.each(elements, function(i, elem) {
                    $(elem).html(response.data.newValue);
                });
            }
        });

        $("#translate-reset-button").bind("click", function() {
            $("#translate-form-block").dialog("close");
        });
        
        onenight.translateForm.initElements();
        $("body").ajaxComplete(function() {
            onenight.translateForm.initElements();
        });


        return this;
    },

    initElements: function() {
        var elements = $("body *").filter(function() {
            var $this = $(this);
            //return ($this.hasClass("translate") || $this.children().length == 0) && $.trim($this.text()).length > 0;
            return $this.hasClass("translate") && $.trim($this.html()).length > 0;
        });
        $.each(elements, function(i, elem) {
            $(elem).css("border", "#0000FF 1px dotted");
            $(elem).unbind("mousedown").bind("mousedown", function(event) {
                if (2 == event.button) {
                    event.preventDefault();
                    var value = $(elem).hasClass("translate") ? $.trim($(elem).html()) : $.trim($(elem).text());
                    $.getJSON(
                        "/index/translate/do/get?lang=" + onenight.locale,
                        {value: value},
                        function(response) {
                            if (!response.success) {
                                alert(response.error);
                                return;
                            }
                            var key = response.data.key ? response.data.key : value;
                            $("#translate-key").val(key);
                            $("#translate-message").val(key);
                            $.each(response.data.lang, function(i, val) {
                                $("#translate-lang-" + i).val(val);
                            });
                            $("#translate-form-block").dialog("open");
                        }
                    );
                }
            });
        });
        return this;
    }
};

$(function() {
    // add custom JQuery Validate validators
    if ($.validator !== undefined) {
        $.validator.addMethod("lengthInWords", function(value, element, param) {
            return value && value.split(/\s+/).length >= param;
        }, $.validator.format(_t("Please enter at least {0} words.")));
    }

    $("#search-menu").mouseover(function() {
        $("#search-menu-sub").show();
    });
    $("#search-menu").mouseout(function() {
        $("#search-menu-sub").hide();
    });
    $("#force_update").click(function() {
        $("#check_updates").load("/index/checkupdates/update/1");
    });
});

