var its = (function(){
    // Constants, element IDs
    var v = {
        menuLang: '#menu-languages',
        menuPrim: '#menu-primary',
        loginForm: '#login-form',
        asideGrid: '#iq_aside .grid>ul',
        registrationForm: '#registration-form',
        isSafariMobile: navigator.userAgent.toLowerCase().match(/iP(hone|ad)/i),
        // Cache for objects
        cache: {},
        get: function(id){
            if (this.cache.hasOwnProperty(id)){return this.cache[id];}
            else{
                this.cache[id] = $(this[id]);
                return this.cache[id];
            }
        }
    };return{
        init: function(){
            $('.ui-block').find('.ui-state-selected').click(function(event){event.preventDefault();});           
            var menuLang, menuPrim;
            // Events for the languages menu
            menuLang = v.get('menuLang');
            if (menuLang.size() > 0){
                $('.ui-block', menuLang).click(function(){
                    var z = $(this);
                    if (z.hasClass('ui-state-hover')){
                        z.removeClass('ui-state-hover');
                        $('li:not(.ui-state-selected)', z).slideUp('slow');
                    }else{
                        z.addClass('ui-state-hover');
                        $('li:not(.ui-state-selected)', z).slideDown('fast');
                    }                   
                });
            }
            /*                if (v.isSafariMobile){
            // attach onclick event
            $('.ui-block', menuLang).click(function(){
            var me = $(this);
            if (me.hasClass('ui-state-hover')){
            me.removeClass('ui-state-hover');
            $('li:not(.ui-state-selected)', me).slideUp();
            }
            else{
            me.addClass('ui-state-hover');
            $('li:not(.ui-state-selected)', me).slideDown('fast');
            }
            });
            }
            else{
            $('.ui-block', menuLang).hover(function(){
            $(this).addClass('ui-state-hover');
            $('li:not(.ui-state-selected)', this).slideDown('fast');
            },
            function(){
            $(this).removeClass('ui-state-hover');
            $('li:not(.ui-state-selected)', this).slideUp();
            }
            );
            }
            }
            */
            // Events for the main menu
            menuPrim = v.get('menuPrim');
            if (menuPrim.size() > 0){
                if (v.isSafariMobile){
                    $('.ui-block>li', menuPrim).click(function(){
                        var me = $(this);
                        if (me.hasClass('ui-state-hover')){
                            $(this).removeClass('ui-state-hover').find('ul:first').fadeOut();
                        }else{
                            me.addClass('ui-state-hover');
                            $('ul:first', me).css('min-width', me.outerWidth()).fadeIn();
                        }
                    });
                }else{
                    $('.ui-block>li', menuPrim).hover(function(){
                            var me = $(this);
                            me.addClass('ui-state-hover');
                            $('ul:first', me).css('min-width', me.outerWidth()).fadeIn();
                        },function(){
                            $(this).removeClass('ui-state-hover').find('ul:first').fadeOut();
                        }
                    );
                }
            }
            // jQuery UI buttons
            $('.ui-button-1').button();
            // jQuery UI accordion
            if (v.get('asideGrid').size() > 0){
                v.get('asideGrid').accordion({collapsible: true });
            }
            // Login form validation
            if (v.get('loginForm').size() > 0){
                v.get('loginForm').validate({
                    errorClass: 'ui-state-error',
                    errorElement: 'span',
                    errorPlacement: function (error, element){
                        error.appendTo('.ui-status-error')
                        $('.ui-status-error').show();
                    }, groups: {
                        'login-form': "userName password captcha"
                    }, rules: {
                        userName: { required: true, minlength: 4 }
                    }, messages: { userName: { required: "Please enter your username!"}}
                });
            }
            // Registration form validation
            if (v.get('registrationForm').size() > 0){
                v.get('registrationForm').validate({
                    errorClass: 'ui-state-error',
                    errorElement: 'span',
                    rules: { firstName: "required" },
                    errorPlacement: function (error, element){
                        element.parent().append('<span class="ui-icon ui-icon-alert"></span>').append(error);
                    }
                });
            }
            // Delete cache
            delete v.cache;
        }
    }
} ());
