common = {
    path: null,
    activeDir: null,
    activePad: null,
    activePad2: null,
    activeMenu: null,
    baseDir: '/999/',
    baseTitle: '',
    storage: {},
    authUser: false,
    infoPaneCounter: 1,
    bannersCounter: 0,
    go: function(url){
        var l = top.location;
        url = url || l.hash;
        common.path = url.replace(/^[^\#]*\#/, '');
        var dir = common.path.replace(/\?.*/, '');
        var q;
        if (common.activeMenu) 
            $(common.activeMenu).removeClass('active');
        common.activeMenu = null;
        if (dir == '') 
            $.fn.send_message();
        else 
            if (q = dir.match(/^send\-message(\/(.+)|)$/)) 
                $.fn.send_message({
                    number: q[2]
                });
            else 
                if (q = dir.match(/^search(\/(.+)|)$/)) 
                    $.fn.search({
                        number: q[2]
                    });
                else 
                    if (q = dir.match(/^messages\/number\/(\d+)$/)) 
                        $.fn.messages({
                            number: q[1]
                        });
                    else 
                        if (q = dir.match(/^my\-messages(\/(.+)|)$/)) 
                            $.fn.my_messages(q[2] ? {
                                number: q[2]
                            } : {});
                        else 
                            if (q = dir.match(/^index(\/(conf-already|conf-error|recover-error|recovered)|)$/)) 
                                $.fn.send_message({
                                    report: q[2]
                                });
                            else 
                                if (dir == 'register') 
                                    $.fn.register();
                                else 
                                    if (dir == 'rating') 
                                        $.fn.rating();
                                    else 
                                        if (q = dir.match(/^profile\/(number\/|)(\d+)$/)) 
                                            $.fn.profile(q[1] == '' ? {
                                                id: q[2]
                                            } : {
                                                number: q[2]
                                            });
                                        else 
                                            if (q = dir.match(/^my-profile(\/(conf-ok)|)$/)) 
                                                $.fn.my_profile({
                                                    report: q[2]
                                                });
                                            else 
                                                if (q = dir.match(/^my\-numbers(\/(registered)|)$/)) 
                                                    $.fn.my_numbers({
                                                        report: q[2]
                                                    });
                                                else 
                                                    if (dir == 'my-presets') 
                                                        $.fn.my_presets();
                                                    else 
                                                        if (dir == 'help') 
                                                            $.fn.help();
                                                        else 
                                                            if (dir == 'recover') 
                                                                $.fn.recover();
                                                            else 
                                                                if (dir == 'recover-enter') 
                                                                    $.fn.recover_enter();
                                                                else {
                                                                    l.replace(l.protocol + '\/\/' + l.host + l.pathname + common.path);
                                                                    return
                                                                }
        if (common.activeMenu) 
            $(common.activeMenu).addClass('active');
        l.replace('#' + common.path);
        common.activeDir = dir;
        common.loadInfoPanes();
        common.loadBanners();
        return false
    },
    show: function($o){
        var t = $o.find('h1.header').html() || '';
        $('h2.first').html(t);
        document.title = t + ' :: ' + common.baseTitle;
        if (common.activePad) 
            common.activePad.hide();
        if (common.activePad2) 
            common.activePad2.hide();
        common.activePad = $o;
        common.activePad2 = null;
        $o.show()
    },
    isEmail: function(s){
        return s.match(/^[0-9a-zA-Z\-_\.]+@[0-9a-zA-Z\-_]+\.[0-9a-zA-Z\-_\.]+$/) ? true : false
    },
    turingImg: function($o){
        var m = document.cookie.match(/SID\=([^\;]+)/);
        m = m ? unescape(m[1]) : '';
        $o.find('img.turing').attr('src', '/turing/' + m + '.png?' + (new Date()).getTime())
    },
    menuTop: function(){
        var $e = $('div#center8');
        var $m = $e.find('div.center-top');
        if (!$m.length) 
            $m = $e.append('<div class="center-top"></div>').find('div.center-top');
        $m.html('');
        var a = [['send-message', 'Отправить сообщение на номер авто'], ['rating', 'Водители'], ['search', 'Автомобили и номера', function(e){
            $('form.quick-search input.number0').focus().parent().parent()[0].scrollIntoView();
            return false
        }
], ['help', 'Помощь']];
        var i;
        var c = a.length - 1;
        for (i in a) 
            $('<a href="#' + a[i][0] + '" id="top-' + a[i][0] + '"' + (i == c ? ' class="last">' : '>') + a[i][1] + '</a>').appendTo($m).click(a[i][2] ? a[i][2] : new Function('e', "return common.go('" + a[i][0] + "');"))
    },
    newMessages: function(n){
        $('#menu-my-messages').html('Мои сообщения <b>(непрочитанных: ' + n + ')</b>')
    },
    logout: function(){
        common.authUser = false;
        common.userMenu();
        common.go()
    },
    userMenu: function(){
        var $o = $('div.user-menu');
        var isInit = common.storage.userMenu ? true : false;
        common.storage.userMenu = true;
        if (!isInit) {
            var i;
            var a = ['my-numbers', 'my-messages', 'my-profile', 'my-presets', 'logout'];
            for (i in a) 
                $('#menu-' + a[i]).attr('href', '#' + a[i]).click(a[i] == 'logout' ? function(){
                    $.get(common.baseDir + 'logout', common.logout);
                    return false
                }
 : new Function('e', "return common.go('" + a[i] + "');"))
        }
        if (common.authUser) {
            $o.find('h1').html(common.authUser.nick == '' ? 'Вы не ввели имя' : common.authUser.nick).parent().show();
            $('form.login').hide()
        }
        else {
            $o.hide();
            $('form.login').show()
        }
    },
    numberHtml: function(m){
        if (typeof m == 'string') 
            m = m.match(/^([а-яА-Я])(\d{3})([а-яА-Я]{2})(\d{2,3})$/);
        return (m ? '<div class="left"><b class="c1">' + m[1].toUpperCase() + '</b><b class="c2">' + m[2] + '</b><b class="c3">' + m[3].toUpperCase() + '</b></div><b class="c4' + (m[4] > 99 ? ' long' : '') + '">' + m[4] + '</b>' : '')
    },
    loadInfoPanes: function(){
        if (++common.infoPaneCounter < 2) 
            return;
        common.infoPaneCounter = 0;
        $.fn.info_panes()
    },
    loadBanners: function(){
        if (++common.bannersCounter < 2) 
            return;
        common.bannersCounter = 0;
        $.fn.banners()
    },
    submitDisable: function($o){
        $o.find('input.submit').attr('disabled', 'true')
    },
    submitEnable: function($o){
        $o.find('input.submit').removeAttr('disabled')
    }
};
$(window).load(function(){
    if ($.browser.msie) 
        $('body').addClass('iex');
    $('div.page-loader').hide();
    $('#right1').show();
    common.baseTitle = document.title;
    common.menuTop();
    common.userMenu();
    $.fn.quick_search();
    $.fn.login();
    common.go()
});
uploadFrameLoad = function(){
};
$.fn.send_message = function(options){
    var $obj = $('form.send-message');
    var $numbers = [$obj.find('input.number0'), $obj.find('input.number1'), $obj.find('input.number2'), $obj.find('input.number3')];
    var $enterNumber = $obj.find('div.enter-number');
    var $vote = $obj.find('select.vote');
    var $message = $obj.find('textarea.message');
    var $anonymous = $obj.find('label.anonymous');
    var $turing = $obj.find('input.turing');
    var $agree = $obj.find('input.agree');
    var $agreement = $obj.find('div.agreement');
    var $lagree = $obj.find('label.agree');
    var isInit = common.storage.send_message ? true : false;
    common.storage.send_message = {
        defaults: {
            numbers: ['X', '000', 'XX', '00'],
            message: 'Введите текст сообщения'
        },
        number: ''
    };
    var storage = common.storage.send_message;
    var defaults = storage.defaults;
    common.activeMenu = '#top-send-message';
    options = options ||
    {};
    var checkNumber0 = function(){
        var v = $numbers[0].val();
        if (v != defaults.numbers[0]) {
            v = v.replace(/[^а-яА-Я]/g, '');
            $numbers[0].val(v)
        }
        if (v != '' && v != defaults.numbers[0]) 
            return checkNumber1(v);
        storage.number = v;
        $enterNumber.show();
        $obj.find('div.region').hide();
        return false
    };
    var checkNumber1 = function(p){
        var v = $numbers[1].val();
        if (v != defaults.numbers[1]) {
            v = v.replace(/\D/g, '');
            $numbers[1].val(v)
        }
        if (v.length == 3 && v != defaults.numbers[1]) 
            return checkNumber2(p + v);
        storage.number = p + v;
        $enterNumber.show();
        return false
    };
    var checkNumber2 = function(p){
        var v = $numbers[2].val();
        if (v != defaults.numbers[2]) {
            v = v.replace(/[^а-яА-Я]/g, '');
            $numbers[2].val(v)
        }
        if (v.length == 2 && v != defaults.numbers[2]) 
            return checkNumber3(p + v);
        storage.number = p + v;
        $enterNumber.show();
        return false
    };
    var checkNumber3 = function(p){
        var $n = $obj.find('div.region');
        var v = $numbers[3].val();
        if (v != defaults.numbers[3]) {
            v = v.replace(/\D/g, '');
            $numbers[3].val(v)
        }
        if (v.length < 2) {
            storage.number = v;
            $enterNumber.show();
            return false
        }
        var m = v;
        v = v == '' || v == defaults.numbers[3] ? p + '98' : p + v;
        $enterNumber.hide();
        if (v != storage.number) {
            storage.number = v;
            $n.addClass('no-user').html(m == 78 || m == 98 ? 'СПБ' : 'вне СПБ').show();
            $.post(common.baseDir + 'send-message/user', {
                'number': v
            }, function(data){
                if (data.href) 
                    $n.removeClass('no-user').html('<a class="number number-best" href="' + data.href + '">' + common.numberHtml(v) + '</a>').find('a').click(function(e){
                        return common.go(data.href)
                    })
            }, 'json')
        }
        return checkVoteMessage()
    };
    var checkVoteMessage = function(){
        var $o = $obj.find('div.vote-message');
        var mv = $message.val();
        if ($vote.val() == 0 && (mv == '' || mv == defaults.message)) {
            $o.show();
            return false
        }
        $o.hide();
        return checkMessage()
    };
    var checkMessage = function(){
        var $o = $obj.find('div.message');
        if ($message.val().length > 2000) {
            $o.show();
            return false
        }
        $o.hide();
        return checkTuring()
    };
    var checkTuring = function(){
        var $o = $obj.find('div.turing');
        var v = $turing.val();
        if (v == '') {
            $o.show();
            return false
        }
        $o.hide();
        return checkAgree()
    };
    var checkAgree = function(){
        if ($agree[0].checked) {
            $lagree.removeClass('alert');
            return true
        }
        $lagree.addClass('alert').show();
        return false
    };
    var checkForm = function(){
        $obj.find('div.status').hide();
        var sc = checkNumber0();
        sc ? common.submitEnable($obj) : common.submitDisable($obj);
        return sc
    };
    var checkReports = function(){
        var i;
        var a = ['conf-already', 'conf-error', 'recover-error', 'recovered'];
        for (i in a) {
            var $o = $obj.find('div.' + a[i]);
            if (options.report && options.report == a[i]) 
                $o.show();
            else 
                $o.hide()
        }
    };
    if (!isInit) {
        $numbers[0].focus(function(e){
            $numbers[0][0].select();
            checkForm()
        }).blur(function(e){
            if ($numbers[0].val() == '') 
                $numbers[0].val(defaults.numbers[0]);
            checkForm()
        }).keyup(function(e){
            if ($numbers[0].val().length == defaults.numbers[0].length) 
                $numbers[1].focus();
            else 
                checkForm()
        });
        $numbers[1].focus(function(e){
            $numbers[1][0].select();
            checkForm()
        }).blur(function(e){
            if ($numbers[1].val() == '') 
                $numbers[1].val(defaults.numbers[1]);
            checkForm()
        }).keyup(function(e){
            if ($numbers[1].val().length == defaults.numbers[1].length) 
                $numbers[2].focus();
            else 
                checkForm()
        });
        $numbers[2].focus(function(e){
            $numbers[2][0].select();
            checkForm()
        }).blur(function(e){
            if ($numbers[2].val() == '') 
                $numbers[2].val(defaults.numbers[2]);
            checkForm()
        }).keyup(function(e){
            if ($numbers[2].val().length == defaults.numbers[2].length) 
                $numbers[3].focus();
            else 
                checkForm()
        });
        $numbers[3].focus(function(e){
            $numbers[3][0].select();
            checkForm()
        }).blur(function(e){
            if ($numbers[3].val() == '') 
                $numbers[3].val(defaults.numbers[3]);
            checkForm()
        }).keyup(function(e){
            checkForm()
        });
        $vote.blur(function(e){
            checkForm()
        }).change(function(e){
            checkForm()
        });
        $message.focus(function(e){
            if ($message.val() == defaults.message) 
                $message.val('');
            checkForm()
        }).blur(function(e){
            if ($message.val() == '') 
                $message.val(defaults.message);
            checkForm()
        }).keyup(function(e){
            checkForm()
        });
        $turing.focus(function(e){
            checkForm()
        }).blur(function(e){
            checkForm()
        }).keyup(function(e){
            checkForm()
        });
        $agree.blur(function(e){
            checkForm()
        }).click(function(e){
            checkForm()
        });
        $obj.find('a.reload').click(function(e){
            common.turingImg($obj);
            $turing.val('');
            $turing.focus();
            return false
        });
        $obj.find('a.close').click(function(e){
            $agreement.hide();
            return false
        });
        $obj.find('a.agreement').click(function(e){
            $agreement.addClass('loading').show();
            $.get(common.baseDir + 'agreement', function(data){
                $agreement.removeClass('loading').find('div.content').html(data)
            });
            return false
        });
        $obj.submit(function(e){
            if (checkForm()) {
                var mv = $message.val() == defaults.message ? '' : $message.val();
                var nv = storage.number;
                $message.addClass('loading');
                common.submitDisable($obj);
                $.post(common.baseDir + 'send-message', {
                    number: nv,
                    vote: $vote.val(),
                    message: mv,
                    anonymous: $obj.find('input.anonymous')[0].checked ? 1 : 0,
                    turing: $turing.val()
                }, function(data){
                    var $o = $obj.find('div.status');
                    var i;
                    $message.removeClass('loading');
                    if (data.sc) {
                        for (i in $numbers) 
                            $numbers[i].val(defaults.numbers[i]);
                        $vote.val(0);
                        $message.val(defaults.message);
                        $turing.val('');
                        checkForm();
                        $o.html(data.mg ? data.mg : mv == '' ? 'Оценка успешно принята' : 'Сообщение успешно отправлено').show();
                        common.turingImg($obj)
                    }
                    else {
                        $o.html(data.mg || '').show();
                        if (data.lt) 
                            common.submitEnable($obj);
                        else 
                            $obj.find('a.reload').click()
                    }
                }, 'json')
            }
            return false
        })
    }
    var i;
    if (options.number && options.number.length > 5) {
        var v = unescape(options.number);
        $numbers[0].val(v.charAt(0));
        $numbers[1].val(v.substr(1, 3));
        $numbers[2].val(v.substr(4, 2));
        $numbers[3].val(v.substr(6, 3))
    }
    else 
        for (i in $numbers) 
            $numbers[i].val(defaults.numbers[i]);
    if (common.authUser) {
        $anonymous.show();
        $agree[0].checked = true;
        $lagree.hide()
    }
    else {
        $anonymous.hide();
        $lagree.show()
    }
    $obj.find('div.agreement').hide();
    common.turingImg($obj);
    checkForm();
    checkReports();
    common.show($obj);
    $.fn.rating(true)
};
$.fn.register = function(){
    if (common.authUser) {
        common.go('index');
        return
    }
    var $obj = $('form.register');
    var $email = $obj.find('input.email');
    var $password = $obj.find('input.password');
    var $defaultPassword = $obj.find('div.default-password');
    var $repassword = $obj.find('input.repassword');
    var $defaultRepassword = $obj.find('div.default-repassword');
    var $turing = $obj.find('input.turing');
    var $agree = $obj.find('input.agree');
    var $agreement = $obj.find('div.agreement');
    var $lagree = $obj.find('label.agree');
    var isInit = common.storage.register ? true : false;
    common.storage.register = {
        defaults: {
            email: 'Email',
            turing: 'Число на рисунке'
        },
        email: ''
    };
    var storage = common.storage.register;
    var defaults = storage.defaults;
    var checkEmail = function(){
        var $o = $obj.find('div.email');
        var v = $email.val();
        if (v == '' || v == defaults.email) {
            $o.html('Пожалуйста, введите Email').show();
            storage.email = v;
            return false
        }
        else 
            if (!common.isEmail(v)) {
                $o.html('Неверно введен Email').show();
                storage.email = v;
                return false
            }
        if (v != storage.email) {
            storage.email = v;
            $.post(common.baseDir + 'is-registered/email', {
                'email': v
            }, function(data){
                if (data.exists) {
                    $o.html('Email уже зарегистрирован').show();
                    common.submitDisable($obj)
                }
            }, 'json')
        }
        $o.hide();
        return checkPassword()
    };
    var checkPassword = function(){
        var $o = $obj.find('div.password');
        var v = $password.val();
        if (v != '') 
            $defaultPassword.hide();
        if (v == '') {
            $o.html('Пожалуйста, задайте пароль').show();
            return false
        }
        $o.hide();
        return checkRepassword()
    };
    var checkRepassword = function(){
        var $o = $obj.find('div.repassword');
        var v = $repassword.val();
        if (v == '') {
            $o.html('Пожалуйста, повторите пароль').show();
            return false
        }
        else 
            if (v != $password.val()) {
                $o.html('Пароль и повторный пароль должны совпадать').show();
                return false
            }
        $o.hide();
        return checkTuring()
    };
    var checkTuring = function(){
        var $o = $obj.find('div.turing');
        var v = $turing.val();
        if (v == '' || v == defaults.turing) {
            $o.show();
            return false
        }
        $o.hide();
        return checkAgree()
    };
    var checkAgree = function(){
        if ($agree[0].checked) {
            $lagree.removeClass('alert');
            return true
        }
        $lagree.addClass('alert').show();
        return false
    };
    var checkForm = function(){
        $obj.find('div.status').hide();
        var sc = checkEmail();
        sc ? common.submitEnable($obj) : common.submitDisable($obj);
        return sc
    };
    if (!isInit) {
        $email.focus(function(e){
            if ($email.val() == defaults.email) 
                $email.val('');
            checkForm()
        }).blur(function(e){
            if ($email.val() == '') 
                $email.val(defaults.email);
            checkForm()
        }).keyup(function(e){
            checkForm()
        });
        $password.focus(function(e){
            $defaultPassword.hide();
            checkForm()
        }).blur(function(e){
            if ($password.val() == '') 
                $defaultPassword.show();
            checkForm()
        }).keyup(function(e){
            checkForm()
        });
        $defaultPassword.click(function(e){
            $password.focus()
        });
        $repassword.focus(function(e){
            $defaultRepassword.hide();
            checkForm()
        }).blur(function(e){
            if ($repassword.val() == '') 
                $defaultRepassword.show();
            checkForm()
        }).keyup(function(e){
            checkForm()
        });
        $defaultRepassword.click(function(e){
            $repassword.focus()
        });
        $turing.focus(function(e){
            if ($turing.val() == defaults.turing) 
                $turing.val('');
            checkForm()
        }).blur(function(e){
            if ($turing.val() == '') 
                $turing.val(defaults.turing);
            checkForm()
        }).keyup(function(e){
            checkForm()
        });
        $agree.blur(function(e){
            checkForm()
        }).click(function(e){
            checkForm()
        });
        $obj.find('a.reload').click(function(e){
            common.turingImg($obj);
            $turing.val('');
            $turing.focus();
            return false
        });
        $obj.find('a.close').click(function(e){
            $agreement.hide();
            return false
        });
        $obj.find('a.agreement').click(function(e){
            $agreement.addClass('loading').show();
            $.get(common.baseDir + 'agreement', function(data){
                $agreement.removeClass('loading').find('div.content').html(data)
            });
            return false
        });
        $obj.submit(function(e){
            if (checkForm()) {
                var $loader = $obj.find('div.loader');
                $loader.show();
                common.submitDisable($obj);
                $.post(common.baseDir + 'register', {
                    email: $email.val(),
                    password: $password.val(),
                    turing: $turing.val()
                }, function(data){
                    $loader.hide();
                    if (data.sc) {
                        $email.val(defaults.email);
                        $password.val('');
                        $repassword.val('');
                        $turing.val(defaults.turing);
                        checkForm();
                        common.authUser = data.authUser;
                        common.userMenu();
                        common.go('my-numbers/registered')
                    }
                    else {
                        $obj.find('div.status').html(data.mg || '').show();
                        if (data.lt) 
                            common.submitEnable($obj);
                        else 
                            $obj.find('a.reload').click()
                    }
                }, 'json')
            }
            return false
        })
    }
    if ($password.val() == '') 
        $defaultPassword.show();
    else 
        $defaultPassword.hide();
    if ($repassword.val() == '') 
        $defaultRepassword.show();
    else 
        $defaultRepassword.hide();
    common.turingImg($obj);
    checkForm();
    common.show($obj)
};
$.fn.login = function(){
    var $obj = $('form.login');
    if (common.authUser) 
        $obj.hide();
    else 
        $obj.show();
    var $email = $obj.find('input.email');
    var $password = $obj.find('input.password');
    var $status = $obj.find('div.status');
    var isInit = common.storage.login ? true : false;
    common.storage.login = true;
    var checkEmail = function(){
        var v = $email.val();
        return v == '' ? false : checkPassword()
    };
    var checkPassword = function(){
        var v = $password.val();
        return v == '' ? false : true
    };
    var checkForm = function(){
        var sc = checkEmail();
        sc ? common.submitEnable($obj) : common.submitDisable($obj);
        return sc
    };
    if (!isInit) {
        $email.focus(function(e){
            $email[0].select();
            checkForm()
        }).blur(function(e){
            checkForm()
        }).keyup(function(e){
            $status.hide();
            checkForm()
        });
        $password.focus(function(e){
            $password[0].select();
            checkForm()
        }).blur(function(e){
            checkForm()
        }).keyup(function(e){
            $status.hide();
            checkForm()
        });
        $obj.find('a.recover').click(function(e){
            return common.go('recover')
        });
        $obj.find('a.register').click(function(e){
            return common.go('register')
        });
        $obj.submit(function(e){
            if (checkForm()) {
                var $loader = $obj.find('div.loader');
                $loader.show();
                common.submitDisable($obj);
                $.post(common.baseDir + 'login', {
                    email: $email.val(),
                    password: $password.val(),
                    remember: $obj.find('input.remember')[0].checked ? 1 : 0
                }, function(data){
                    $loader.hide();
                    if (data.authUser) {
                        $email.val('');
                        $password.val('');
                        $status.hide();
                        common.authUser = data.authUser;
                        common.userMenu();
                        $('div#main')[0].scrollIntoView();
                        common.go('my-numbers')
                    }
                    else {
                        $status.show();
                        common.submitEnable($obj);
                        $email.focus()
                    }
                }, 'json')
            }
            return false
        })
    }
    checkForm()
};
$.fn.recover = function(){
    if (common.authUser) {
        common.go('index');
        return
    }
    var $obj = $('form.recover');
    var $email = $obj.find('input.email');
    var $number = $obj.find('input.number');
    var isInit = common.storage.recover ? true : false;
    common.storage.recover = {
        defaults: {
            email: 'Email',
            number: 'Номер авто'
        },
        email: '',
        number: ''
    };
    var storage = common.storage.recover;
    var defaults = storage.defaults;
    var checkEmail = function(){
        var $o = $obj.find('div.email');
        var v = $email.val();
        var ev = v == '' || v == defaults.email;
        var nv = $number.val();
        if (ev && (nv == '' || nv == defaults.number)) {
            $o.html('Пожалуйста, введите Email или номер авто').show();
            storage.email = v;
            return false
        }
        else 
            if (ev) {
                $o.hide();
                storage.email = v;
                return checkNumber()
            }
            else 
                if (!common.isEmail(v)) {
                    $o.html('Неверно введен Email').show();
                    storage.email = v;
                    return false
                }
        if (v != storage.email) {
            storage.email = v;
            $.post(common.baseDir + 'is-registered/email', {
                'email': v
            }, function(data){
                if (!data.exists) {
                    $o.html('Такой Email не зарегистрирован').show();
                    common.submitDisable($obj)
                }
            }, 'json')
        }
        $o.hide();
        return checkNumber()
    };
    var checkNumber = function(){
        var $o = $obj.find('div.number-alert');
        var v = $number.val();
        var ev = $email.val();
        if (ev != '' && ev != defaults.email && (v == '' || v == defaults.number)) {
            $o.hide();
            storage.number = v;
            return true
        }
        if (v.match(/^[а-яА-Я]\d{3}[а-яА-Я]{2}\d{2,3}$/)) {
            if (v != storage.number) {
                storage.number = v;
                $.post(common.baseDir + 'is-registered/number', {
                    'number': v
                }, function(data){
                    if (!data.exists) {
                        $o.html('Такой номер не зарегистрирован').show();
                        common.submitDisable($obj)
                    }
                }, 'json')
            }
            $o.hide();
            return true
        }
        storage.number = v;
        $o.html('Неверно введен номер авто').show();
        return false
    };
    var checkForm = function(){
        $obj.find('div.status').hide();
        var sc = checkEmail();
        sc ? common.submitEnable($obj) : common.submitDisable($obj);
        return sc
    };
    if (!isInit) {
        $email.focus(function(e){
            if ($email.val() == defaults.email) 
                $email.val('');
            checkForm()
        }).blur(function(e){
            if ($email.val() == '') 
                $email.val(defaults.email);
            checkForm()
        }).keyup(function(e){
            checkForm()
        });
        $number.focus(function(e){
            if ($number.val() == defaults.number) 
                $number.val('');
            checkForm()
        }).blur(function(e){
            if ($number.val() == '') 
                $number.val(defaults.number);
            checkForm()
        }).keyup(function(e){
            checkForm()
        });
        $obj.submit(function(e){
            if (checkForm()) {
                var $loader = $obj.find('div.loader');
                $loader.show();
                common.submitDisable($obj);
                $.post(common.baseDir + 'recover', {
                    email: $email.val() == defaults.email ? '' : $email.val(),
                    number: $number.val() == defaults.number ? '' : $number.val()
                }, function(data){
                    $loader.hide();
                    var $o = $obj.find('div.status');
                    if (data.sc) {
                        $email.val(defaults.email);
                        $number.val(defaults.number);
                        $o.html('На ваш Email отправлено сообщение. Пожалуйста, проверьте почту').show()
                    }
                    else {
                        $o.html(data.mg || '').show();
                        common.submitEnable($obj)
                    }
                }, 'json')
            }
            return false
        })
    }
    checkForm();
    common.show($obj)
};
$.fn.recover_enter = function(){
    if (!common.authUser) {
        common.go('index');
        return
    }
    var $obj = $('form.recover-enter');
    var $password = $obj.find('input.password');
    var $defaultPassword = $obj.find('div.default-password');
    var $repassword = $obj.find('input.repassword');
    var $defaultRepassword = $obj.find('div.default-repassword');
    var isInit = common.storage.recover_enter ? true : false;
    common.storage.recover_enter = {};
    var checkPassword = function(){
        var $o = $obj.find('div.password');
        var v = $password.val();
        if (v != '') 
            $defaultPassword.hide();
        if (v == '') {
            $o.html('Пожалуйста, задайте пароль').show();
            return false
        }
        $o.hide();
        return checkRepassword()
    };
    var checkRepassword = function(){
        var $o = $obj.find('div.repassword');
        var v = $repassword.val();
        if (v == '') {
            $o.html('Пожалуйста, повторите пароль').show();
            return false
        }
        else 
            if (v != $password.val()) {
                $o.html('Пароль и повторный пароль должны совпадать').show();
                return false
            }
        $o.hide();
        return true
    };
    var checkForm = function(){
        $obj.find('div.status').hide();
        var sc = checkPassword();
        sc ? common.submitEnable($obj) : common.submitDisable($obj);
        return sc
    };
    if (!isInit) {
        $password.focus(function(e){
            $defaultPassword.hide();
            checkForm()
        }).blur(function(e){
            if ($password.val() == '') 
                $defaultPassword.show();
            checkForm()
        }).keyup(function(e){
            checkForm()
        });
        $defaultPassword.click(function(e){
            $password.focus()
        });
        $repassword.focus(function(e){
            $defaultRepassword.hide();
            checkForm()
        }).blur(function(e){
            if ($repassword.val() == '') 
                $defaultRepassword.show();
            checkForm()
        }).keyup(function(e){
            checkForm()
        });
        $defaultRepassword.click(function(e){
            $repassword.focus()
        });
        $obj.submit(function(e){
            if (checkForm()) {
                var $loader = $obj.find('div.loader');
                $loader.show();
                common.submitDisable($obj);
                $.post(common.baseDir + 'recover-enter', {
                    password: $password.val()
                }, function(data){
                    $loader.hide();
                    var $o = $obj.find('div.status');
                    if (data.sc) {
                        $password.val('');
                        $repassword.val('');
                        $defaultPassword.show();
                        $defaultRepassword.show();
                        common.go('index/recovered')
                    }
                    else {
                        $o.html(data.mg || 'Ошибка. Пожалуйста, повторите попытку').show();
                        common.submitEnable($obj)
                    }
                }, 'json')
            }
            return false
        })
    }
    if ($password.val() == '') 
        $defaultPassword.show();
    else 
        $defaultPassword.hide();
    if ($repassword.val() == '') 
        $defaultRepassword.show();
    else 
        $defaultRepassword.hide();
    checkForm();
    common.show($obj)
};
$.fn.my_numbers = function(options){
    if (!common.authUser) {
        common.go('index');
        return
    }
    var $obj = $('div.my-numbers');
    var $tpl = $obj.find('form.template');
    var $mark = $obj.find('select.mark');
    var $add = $obj.find('a.add');
    var isInit = common.storage.my_numbers ? true : false;
    common.storage.my_numbers = {
        defaults: {
            numbers: ['X', '000', 'XX', '00'],
            model: 'Модель авто'
        },
        items: {}
    };
    common.activeMenu = '#menu-my-numbers';
    options = options ||
    {};
    var numberAdd = function(options){
        return $tpl.clone().insertBefore($add).removeClass('template').my_number(options)
    };
    var show = function(){
        $.post(common.baseDir + 'my-numbers/get-list', {}, function(data){
            $('div.page-loader').hide();
            $add.show();
            checkReports();
            if (data[0]) {
                var i;
                for (i in data) {
                    var $o = $obj.find('form[name=my-number-' + data[i].id + ']');
                    if ($o.length) 
                        $o.my_number(data[i]);
                    else 
                        numberAdd(data[i])
                }
                if (i > 8) 
                    $add.hide()
            }
            else 
                if (!common.storage.my_numbers.items[0]) 
                    numberAdd().find('h2.add').show()
        }, 'json')
    };
    var checkReports = function(){
        var i;
        var a = ['registered'];
        for (i in a) {
            var $o = $obj.find('div.' + a[i]);
            if (options.report && options.report == a[i]) 
                $o.show();
            else 
                $o.hide()
        }
    };
    $obj.find('form.my-number').hide();
    $add.hide();
    common.show($obj);
    $('div.page-loader').show();
    if (isInit) 
        show();
    else {
        $.post(common.baseDir + 'my-numbers/get-marks', {}, function(data){
            var i;
            if (data) 
                for (i in data) 
                    $('<option value="' + i + '">' + data[i] + '</option>').appendTo($mark);
            show()
        }, 'json');
        $add.click(function(e){
            numberAdd().find('h2.add').show();
            return false
        })
    }
};
$.fn.my_number = function(options){
    options = options ||
    {
        id: 0,
        number: '',
        mark: 0,
        model: '',
        imgL: '',
        imgS: '',
        messages: 0,
        votes: {}
    };
    var $obj = $(this);
    var $id = $obj.find('input[name=id]');
    var $photo = $obj.find('a.photo');
    var $numbers = [$obj.find('input.number0'), $obj.find('input.number1'), $obj.find('input.number2'), $obj.find('input.number3')];
    var $enterNumber = $obj.find('div.enter-number');
    var $mark = $obj.find('select.mark');
    var $model = $obj.find('input.model');
    var $messages = $obj.find('a.messages');
    var $votes = $obj.find('div.votes');
    var $remove = $obj.find('input.remove-number');
    var $removeDlg = $obj.find('div.remove-number');
    var isInit = common.storage.my_numbers.items[options.id] ? true : false;
    common.storage.my_numbers.items[options.id] = options;
    var storage = common.storage.my_numbers.items[options.id];
    var defaults = common.storage.my_numbers.defaults;
    var checkNumber0 = function(){
        var v = $numbers[0].val();
        if (v != defaults.numbers[0]) {
            v = v.replace(/[^а-яА-Я]/g, '');
            $numbers[0].val(v)
        }
        if (v != '' && v != defaults.numbers[0]) 
            return checkNumber1(v);
        storage.number = v;
        $enterNumber.show();
        return false
    };
    var checkNumber1 = function(p){
        var v = $numbers[1].val();
        if (v != defaults.numbers[1]) {
            v = v.replace(/\D/g, '');
            $numbers[1].val(v)
        }
        if (v.length == 3 && v != defaults.numbers[1]) 
            return checkNumber2(p + v);
        storage.number = p + v;
        $enterNumber.show();
        return false
    };
    var checkNumber2 = function(p){
        var v = $numbers[2].val();
        if (v != defaults.numbers[2]) {
            v = v.replace(/[^а-яА-Я]/g, '');
            $numbers[2].val(v)
        }
        if (v.length == 2 && v != defaults.numbers[2]) 
            return checkNumber3(p + v);
        storage.number = p + v;
        $enterNumber.show();
        return false
    };
    var checkNumber3 = function(p){
        var v = $numbers[3].val();
        if (v != defaults.numbers[3]) {
            v = v.replace(/\D/g, '');
            $numbers[3].val(v)
        }
        if (v.length < 2) {
            storage.number = v;
            $enterNumber.show();
            return false
        }
        storage.number = v == '' || v == defaults.numbers[3] ? p + '98' : p + v;
        $enterNumber.hide();
        return checkMark()
    };
    var checkMark = function(){
        var $o = $obj.find('div.mark');
        if ($mark.val() == 0 && !($model.val() == '' || $model.val() == defaults.model)) {
            $o.show();
            return false
        }
        $o.hide();
        return true
    };
    var checkForm = function(){
        $obj.find('div.status').hide();
        var sc = checkNumber0();
        sc ? common.submitEnable($obj) : common.submitDisable($obj);
        return sc
    };
    var imgLoad = function(u, $o){
        var u = $o ? u : options.imgL;
        ($o || $photo).html(u == '' ? '<u>Добавить фото</u>' : '<u>Загрузить другое фото</u>').css('background-image', u == '' ? 'none' : "url('" + u + "')")
    };
    var imgChanged = function(u, id){
        var s = common.storage.my_numbers.items[id];
        s.imgL = u.imgL;
        s.imgS = u.imgS;
        if (common.authUser.imgS == '') 
            common.authUser.imgL = common.authUser.imgS = u.imgS;
        imgLoad(u.imgL, $('form[name=my-number-' + id + '] a.photo'));
        checkForm()
    };
    var votesStr = function(n){
        n = '' + n;
        var a = parseInt(n.substr(-1));
        return '<b>' + n + ' ' + (a < 2 || a > 4 || n.substr(-2, 1) == '1' ? 'человек' : 'человека') + '</b>'
    };
    var beforeShow = function(){
        imgLoad();
        $obj.attr('name', 'my-number-' + options.id);
        $id.val(options.id);
        if (options.id) 
            $obj.removeClass('no-photo');
        else 
            $obj.addClass('no-photo');
        var i;
        if (options.number && options.number.length > 5) {
            var v = unescape(options.number);
            $numbers[0].val(v.charAt(0));
            $numbers[1].val(v.substr(1, 3));
            $numbers[2].val(v.substr(4, 2));
            $numbers[3].val(v.substr(6, 3))
        }
        else 
            for (i in $numbers) 
                $numbers[i].val(defaults.numbers[i]);
        $mark.val(options.mark);
        $model.val(options.model || defaults.model);
        if (options.messages) 
            $messages.html('Сообщений: ' + options.messages).show();
        else 
            $messages.hide();
        var i;
        var driver = '';
        var car = '';
        var driverOptions = {
            100: 'хорошим',
            110: 'гонщегом',
            120: 'джентельменом',
            130: 'секси',
            300: 'плохим',
            310: 'тормозом',
            320: 'наглецом',
            330: 'уродом'
        };
        var carOptions = {
            200: 'хорошим',
            210: 'ракетой',
            220: 'чистюлей',
            230: 'гламурным',
            400: 'плохим',
            410: 'черепахой',
            420: 'неряхой',
            430: 'развалюхой'
        };
        for (i in options.votes) 
            if (driverOptions[i]) 
                driver += '<li>' + votesStr(options.votes[i]) + driverOptions[i] + ':</li>';
            else 
                if (carOptions[i]) 
                    car += '<li>' + votesStr(options.votes[i]) + carOptions[i] + ':</li>';
        if (driver == '' && car == '') 
            $votes.hide();
        else 
            $votes.html((driver == '' ? '' : '<p>Назвали водителя</p><ul>' + driver + '</ul>') + (car == '' ? '' : '<p>Назвали автомобиль</p><ul>' + car + '</ul>')).show()
    };
    var destroy = function(){
        delete common.storage.my_numbers.items[$id.val()];
        $obj.remove();
        $('div.my-numbers a.add').show()
    };
    if (!isInit || !options.id) {
        $numbers[0].focus(function(e){
            $numbers[0][0].select();
            checkForm()
        }).blur(function(e){
            if ($numbers[0].val() == '') 
                $numbers[0].val(defaults.numbers[0]);
            checkForm()
        }).keyup(function(e){
            checkForm()
        });
        $numbers[1].focus(function(e){
            $numbers[1][0].select();
            checkForm()
        }).blur(function(e){
            if ($numbers[1].val() == '') 
                $numbers[1].val(defaults.numbers[1]);
            checkForm()
        }).keyup(function(e){
            checkForm()
        });
        $numbers[2].focus(function(e){
            $numbers[2][0].select();
            checkForm()
        }).blur(function(e){
            if ($numbers[2].val() == '') 
                $numbers[2].val(defaults.numbers[2]);
            checkForm()
        }).keyup(function(e){
            checkForm()
        });
        $numbers[3].focus(function(e){
            $numbers[3][0].select();
            checkForm()
        }).blur(function(e){
            if ($numbers[3].val() == '') 
                $numbers[3].val(defaults.numbers[3]);
            checkForm()
        }).keyup(function(e){
            checkForm()
        });
        $mark.blur(function(e){
            checkForm()
        }).change(function(e){
            checkForm()
        });
        $model.focus(function(e){
            if ($model.val() == defaults.model) 
                $model.val('');
            checkForm()
        }).blur(function(e){
            if ($model.val() == '') 
                $model.val(defaults.model);
            checkForm()
        }).keyup(function(e){
            checkForm()
        });
        $photo.click(function(e){
            common.submitDisable($obj);
            $votes.image_edit({
                type: 1,
                id: options.id,
                imgL: options.imgL,
                imgS: options.imgS,
                change: imgChanged,
                cancel: checkForm
            });
            return false
        });
        $messages.attr('href', '#my-messages/' + options.id).click(function(e){
            return common.go('my-messages/' + options.id)
        });
        $remove.click(function(e){
            $remove.hide();
            $removeDlg.find('h1').html('Удалить номер' + (options.number == '' ? '?' : ' ' + options.number + '?'));
            $removeDlg.find('div.error').hide();
            $removeDlg.show();
            return false
        });
        $removeDlg.find('input.yes').click(function(e){
            if ($id.val() == 0) {
                destroy();
                return false
            }
            $removeDlg.addClass('removing').find('input.yes').attr('disabled', 'true');
            $removeDlg.find('input.no').attr('disabled', 'true');
            $.post(common.baseDir + 'my-numbers/remove', {
                id: $id.val()
            }, function(data){
                $removeDlg.removeClass('removing').find('input.yes').removeAttr('disabled');
                $removeDlg.find('input.no').removeAttr('disabled');
                if (data.sc) 
                    destroy();
                else 
                    $removeDlg.find('div.error').html(data.mg || 'Ошибка. Пожалуйста, повторите попытку!').show()
            }, 'json');
            return false
        });
        $removeDlg.find('input.no').click(function(e){
            $removeDlg.hide();
            $remove.show();
            return false
        });
        $obj.submit(function(e){
            if (checkForm()) {
                var $loader = $obj.find('div.loader');
                var a = {
                    id: $id.val(),
                    number: storage.number,
                    mark: $mark.val(),
                    model: $model.val() == defaults.model ? '' : $model.val()
                };
                $loader.show();
                common.submitDisable($obj);
                $.post(common.baseDir + 'my-numbers/save', a, function(data){
                    var $o = $obj.find('div.status');
                    $loader.hide();
                    common.submitEnable($obj);
                    $obj.find('h2.add').hide();
                    if (data.sc) {
                        options.id = data.id;
                        options.number = a.number;
                        options.mark = a.mark;
                        options.model = a.model;
                        options.messages = data.messages;
                        options.votes = data.votes;
                        beforeShow();
                        $o.html('Данные сохранены').show()
                    }
                    else 
                        $o.html(data.mg || 'Ошибка. Пожалуйста, повторите попытку!').show()
                }, 'json')
            }
            return false
        })
    }
    beforeShow();
    checkForm();
    return $obj.show()
};
$.fn.image_edit = function(options){
    var $obj = $('form.image-edit');
    var $file = $obj.find('input.file');
    var uploader = $('iframe.upload-frame')[0];
    var $type = $obj.find('input[name=type]');
    var $id = $obj.find('input[name=id]');
    var $remove = $obj.find('a.remove');
    var isInit = common.storage.image_edit ? true : false;
    common.storage.image_edit = {
        options: options
    };
    var checkForm = function(){
        $obj.find('div.file').hide();
        var sc = $file.val() != '';
        sc ? common.submitEnable($obj) : common.submitDisable($obj);
        return sc
    };
    if (!isInit) {
        $file.focus(function(e){
            checkForm()
        }).blur(function(e){
            checkForm()
        }).keyup(function(e){
            checkForm()
        }).change(function(e){
            checkForm()
        });
        $obj.find('a.cancel').click(function(e){
            common.storage.image_edit.options.cancel();
            $obj.hide();
            return false
        });
        $remove.click(function(e){
            $.post(common.baseDir + 'image-remove', {
                type: $type.val(),
                id: $id.val()
            }, function(data){
                common.storage.image_edit.options.change({
                    imgL: '',
                    imgS: ''
                }, $id.val());
                $obj.hide()
            }, 'json');
            return false
        });
        uploadFrameLoad = function(){
            var $o = $obj.find('div.file');
            var data = {};
            var mg = 'Не удалось загрузить файл. Пожалуйста, повторите попытку!';
            $obj.removeClass('image-loading');
            common.submitEnable($obj);
            try {
                if (uploader.contentDocument && uploader.contentDocument.body && uploader.contentDocument.body.textContent) 
                    eval('var data=' + uploader.contentDocument.body.textContent + ';');
                else 
                    if (uploader.contentWindow && uploader.contentWindow.document && uploader.contentWindow.document.body && uploader.contentWindow.document.body.innerText) 
                        eval('var data=' + uploader.contentWindow.document.body.innerText + ';')
            } 
            catch (e) {
                $o.html(mg).show();
                return
            }
            if (data.sc) {
                common.storage.image_edit.options.change({
                    imgL: data.imgL,
                    imgS: data.imgS
                }, $id.val());
                $obj.hide()
            }
            else 
                $o.html(data.mg || mg).show()
        };
        $obj.attr('action', common.baseDir + 'image-edit').submit(function(e){
            if (checkForm()) {
                common.submitDisable($obj);
                $obj.addClass('image-loading');
                return true
            }
            return false
        })
    }
    $type.val(options.type);
    $id.val(options.id);
    if (options.imgL) 
        $remove.show();
    else 
        $remove.hide();
    checkForm();
    $obj.insertBefore($(this)).show();
    $file.focus()
};
$.fn.my_profile = function(options){
    if (!common.authUser) {
        common.go('index');
        return
    }
    var $obj = $('form.my-profile');
    var $nick = $obj.find('input.nick');
    var $phone = $obj.find('input.phone');
    var $email = $obj.find('input.email');
    var $sex = {
        male: $obj.find('input#my-profile-sex-m'),
        female: $obj.find('input#my-profile-sex-f')
    };
    var $connect = $obj.find('input.connect');
    var $about = $obj.find('textarea.about');
    var isInit = common.storage.my_profile ? true : false;
    common.storage.my_profile = {
        defaults: {
            nick: 'Имя',
            phone: 'Телефон',
            email: 'Email',
            about: 'Немного о себе'
        },
        email: common.authUser.email
    };
    var storage = common.storage.my_profile;
    var defaults = storage.defaults;
    common.activeMenu = '#menu-my-profile';
    options = options ||
    {};
    var checkEmail = function(){
        var $o = $obj.find('div.email');
        var v = $email.val();
        if (v == '' || v == defaults.email) {
            $o.html('Пожалуйста, введите Email').show();
            storage.email = v;
            return false
        }
        else 
            if (!common.isEmail(v)) {
                $o.html('Неверно введен Email').show();
                storage.email = v;
                return false
            }
        if (v != storage.email) {
            storage.email = v;
            $.post(common.baseDir + 'is-registered/email', {
                'email': v
            }, function(data){
                if (data.exists && data.uid != common.authUser.id) {
                    $o.html('Email уже зарегистрирован другим пользователем').show();
                    common.submitDisable($obj)
                }
            }, 'json')
        }
        $o.hide();
        return checkAbout()
    };
    var checkAbout = function(){
        var $o = $obj.find('div.about');
        if ($about.val().length > 2000) {
            $o.show();
            return false
        }
        $o.hide();
        return true
    };
    var checkForm = function(){
        $obj.find('div.status').hide();
        var sc = checkEmail();
        sc ? common.submitEnable($obj) : common.submitDisable($obj);
        return sc
    };
    var imgLoad = function(){
        var u = common.authUser.imgL;
        $obj.find('a.photo').html(u == '' ? '<u>Добавить аватар</u>' : '<u>Редактировать аватар</u>').css('background-image', u == '' ? 'none' : "url('" + u + "')")
    };
    var imgChanged = function(u, id){
        common.authUser.imgL = u.imgL;
        common.authUser.imgS = u.imgS;
        imgLoad();
        checkForm()
    };
    var beforeShow = function(){
        $.post(common.baseDir + 'email-confirmed', {}, function(data){
            var $o = $obj.find('p.notify-email');
            var $e = $obj.find('div.notify-email').hide();
            if (data.confirmed) 
                $o.hide();
            else {
                $o.show();
                if (!isInit) 
                    $o.find('a').click(function(e){
                        $o.addClass('loading');
                        $.post(common.baseDir + 'email-confirm-resend', {}, function(res){
                            $o.removeClass('loading');
                            if (res.sc) {
                                $o.hide();
                                $e.html('Сообщение успешно отправлено на Ваш контактный Email').show()
                            }
                            else 
                                $e.html('Не удалось отправить сообщение. Пожалуйста, повторите попытку!').show()
                        }, 'json');
                        return false
                    })
            }
        }, 'json');
        imgLoad();
        $nick.val(common.authUser.nick || defaults.nick);
        $phone.val(common.authUser.phone || defaults.phone);
        $email.val(common.authUser.email);
        $sex.male[0].checked = common.authUser.sex == 1 ? true : false;
        $sex.female[0].checked = common.authUser.sex == 2 ? true : false;
        $connect[0].checked = common.authUser.connect;
        $about.val(common.authUser.about || defaults.about)
    };
    var checkReports = function(){
        var i;
        var a = ['conf-ok'];
        for (i in a) {
            var $o = $obj.find('div.' + a[i]);
            if (options.report && options.report == a[i]) 
                $o.show();
            else 
                $o.hide()
        }
    };
    if (!isInit) {
        $nick.focus(function(e){
            if ($nick.val() == defaults.nick) 
                $nick.val('')
        }).blur(function(e){
            if ($nick.val() == '') 
                $nick.val(defaults.nick)
        });
        $phone.focus(function(e){
            if ($phone.val() == defaults.phone) 
                $phone.val('')
        }).blur(function(e){
            if ($phone.val() == '') 
                $phone.val(defaults.phone)
        });
        $email.focus(function(e){
            if ($email.val() == defaults.email) 
                $email.val('');
            checkForm()
        }).blur(function(e){
            if ($email.val() == '') 
                $email.val(defaults.email);
            checkForm()
        }).keyup(function(e){
            checkForm()
        });
        $about.focus(function(e){
            if ($about.val() == defaults.about) 
                $about.val('');
            checkForm()
        }).blur(function(e){
            if ($about.val() == '') 
                $about.val(defaults.about);
            checkForm()
        }).keyup(function(e){
            checkForm()
        });
        $obj.find('a.photo').click(function(e){
            common.submitDisable($obj);
            $obj.find('p.notify-email').image_edit({
                type: 0,
                id: common.authUser.id,
                imgL: common.authUser.imgL,
                imgS: common.authUser.imgS,
                change: imgChanged,
                cancel: checkForm
            });
            return false
        });
        $obj.find('a.preview').attr('href', '#profile/' + common.authUser.id).click(function(e){
            return common.go('profile/' + common.authUser.id)
        });
        $obj.submit(function(e){
            if (checkForm()) {
                var $loader = $obj.find('div.loader');
                $loader.show();
                common.submitDisable($obj);
                var a = {
                    nick: $nick.val() == defaults.nick ? '' : $nick.val(),
                    phone: $phone.val() == defaults.phone ? '' : $phone.val(),
                    email: $email.val(),
                    sex: $sex.male[0].checked ? 1 : $sex.female[0].checked ? 2 : 0,
                    connect: $connect[0].checked ? 1 : 0,
                    about: $about.val() == defaults.about ? '' : $about.val()
                };
                $.post(common.baseDir + 'my-profile', a, function(data){
                    $loader.hide();
                    var $o = $obj.find('div.status');
                    if (data.sc) {
                        var u = common.authUser;
                        u.nick = a.nick;
                        u.phone = a.phone;
                        u.email = a.email;
                        u.sex = a.sex;
                        u.connect = a.connect ? true : false;
                        u.about = a.about;
                        common.userMenu();
                        $o.html(data.mg || 'Личные данные сохранены').show()
                    }
                    else {
                        $o.html(data.mg || 'Ошибка. Пожалуйста, повторите попытку').show()
                    }
                    common.submitEnable($obj)
                }, 'json')
            }
            return false
        })
    }
    beforeShow();
    checkForm();
    checkReports();
    common.show($obj)
};
$.fn.my_presets = function(){
    if (!common.authUser) {
        common.go('index');
        return
    }
    var $obj = $('form.my-presets');
    var $oldpassword = $obj.find('input.oldpassword');
    var $defaultOldpassword = $obj.find('div.default-oldpassword');
    var $password = $obj.find('input.password');
    var $defaultPassword = $obj.find('div.default-password');
    var $repassword = $obj.find('input.repassword');
    var $defaultRepassword = $obj.find('div.default-repassword');
    var $showphone = $obj.find('input.show-phone');
    var $showemail = $obj.find('input.show-email');
    var $notifyemail = $obj.find('input.notify-email');
    var isInit = common.storage.my_presets ? true : false;
    common.storage.my_presets = {};
    common.activeMenu = '#menu-my-presets';
    var checkOldpassword = function(){
        var $o = $obj.find('div.oldpassword');
        var v = $oldpassword.val();
        if (v != '') 
            $defaultOldpassword.hide();
        if (v == '') {
            if ($password.val() == '' && $repassword.val() == '') {
                $obj.find('div.password').hide();
                $obj.find('div.repassword').hide();
                $o.hide();
                return true
            }
            $o.html('Пожалуйста, введите текущий пароль').show();
            return false
        }
        $o.hide();
        return checkPassword()
    };
    var checkPassword = function(){
        var $o = $obj.find('div.password');
        var v = $password.val();
        if (v != '') 
            $defaultPassword.hide();
        if (v == '') {
            $o.html('Пожалуйста, задайте пароль').show();
            return false
        }
        $o.hide();
        return checkRepassword()
    };
    var checkRepassword = function(){
        var $o = $obj.find('div.repassword');
        var v = $repassword.val();
        if (v == '') {
            $o.html('Пожалуйста, повторите пароль').show();
            return false
        }
        else 
            if (v != $password.val()) {
                $o.html('Пароль и повторный пароль должны совпадать').show();
                return false
            }
        $o.hide();
        return true
    };
    var checkForm = function(){
        $obj.find('div.status').hide();
        var sc = checkOldpassword();
        sc ? common.submitEnable($obj) : common.submitDisable($obj);
        return sc
    };
    var beforeShow = function(){
        $.post(common.baseDir + 'email-confirmed', {}, function(data){
            var $o = $obj.find('p.notify-email');
            var $e = $obj.find('div.notify-email').hide();
            if (data.confirmed) 
                $o.hide();
            else {
                $o.show();
                if (!isInit) 
                    $o.find('a').click(function(e){
                        $o.addClass('loading');
                        $.post(common.baseDir + 'email-confirm-resend', {}, function(res){
                            $o.removeClass('loading');
                            if (res.sc) {
                                $o.hide();
                                $e.html('Сообщение успешно отправлено на Ваш контактный Email').show()
                            }
                            else 
                                $e.html('Не удалось отправить сообщение. Пожалуйста, повторите попытку!').show()
                        }, 'json');
                        return false
                    })
            }
        }, 'json');
        $showphone[0].checked = common.authUser.showphone;
        $showemail[0].checked = common.authUser.showemail;
        $notifyemail[0].checked = common.authUser.notifyemail;
        if ($oldpassword.val() == '') 
            $defaultOldpassword.show();
        else 
            $defaultOldpassword.hide();
        if ($password.val() == '') 
            $defaultPassword.show();
        else 
            $defaultPassword.hide();
        if ($repassword.val() == '') 
            $defaultRepassword.show();
        else 
            $defaultRepassword.hide()
    };
    if (!isInit) {
        $oldpassword.focus(function(e){
            $defaultOldpassword.hide();
            checkForm()
        }).blur(function(e){
            if ($oldpassword.val() == '') 
                $defaultOldpassword.show();
            checkForm()
        }).keyup(function(e){
            checkForm()
        });
        $defaultOldpassword.click(function(e){
            $oldpassword.focus()
        });
        $password.focus(function(e){
            $defaultPassword.hide();
            checkForm()
        }).blur(function(e){
            if ($password.val() == '') 
                $defaultPassword.show();
            checkForm()
        }).keyup(function(e){
            checkForm()
        });
        $defaultPassword.click(function(e){
            $password.focus()
        });
        $repassword.focus(function(e){
            $defaultRepassword.hide();
            checkForm()
        }).blur(function(e){
            if ($repassword.val() == '') 
                $defaultRepassword.show();
            checkForm()
        }).keyup(function(e){
            checkForm()
        });
        $defaultRepassword.click(function(e){
            $repassword.focus()
        });
        $obj.submit(function(e){
            if (checkForm()) {
                var $loader = $obj.find('div.loader');
                $loader.show();
                common.submitDisable($obj);
                $.post(common.baseDir + 'my-presets', {
                    showphone: $showphone[0].checked ? 1 : 0,
                    showemail: $showemail[0].checked ? 1 : 0,
                    notifyemail: $notifyemail[0].checked ? 1 : 0,
                    oldpassword: $oldpassword.val(),
                    password: $password.val()
                }, function(data){
                    $loader.hide();
                    var $o = $obj.find('div.status');
                    if (data.sc) {
                        $oldpassword.val('');
                        $password.val('');
                        $repassword.val('');
                        $defaultOldpassword.show();
                        $defaultPassword.show();
                        $defaultRepassword.show();
                        common.authUser.showphone = $showphone[0].checked;
                        common.authUser.showemail = $showemail[0].checked;
                        common.authUser.notifyemail = $notifyemail[0].checked;
                        $o.html('Настройки сохранены').show()
                    }
                    else {
                        $o.html(data.mg || 'Ошибка. Пожалуйста, повторите попытку').show()
                    }
                    common.submitEnable($obj)
                }, 'json')
            }
            return false
        })
    }
    beforeShow();
    checkForm();
    common.show($obj)
};
$.fn.messages = function(options){
    var $obj = $('div.user-messages');
    var $numberTpl = $obj.find('div.messages.template');
    var $tpl = $obj.find('div.message.template');
    var $messagesList = $obj.find('div.messages-list').empty();
    var $status = $obj.find('h1.status').hide(), $register = $obj.find('div.register'), isInit = common.storage.messages ? true : false;
    common.storage.messages = true;
    options = options ||
    {};
    common.show($obj);
    $('div.page-loader').show();
    $.post(common.baseDir + 'messages', options, function(data){
        $('div.page-loader').hide();
        if (data && data[0]) {
            var i;
            for (i in data) {
                var $n = $numberTpl.clone().appendTo($messagesList).addClass(i > 0 ? '' : 'first').removeClass('template'), $number = $n.find('div.number'), $owner = $n.find('a.owner'), $send = $n.find('a.send');
                $number.html(common.numberHtml(data[i].number));
                if (data[i].uid) 
                    $owner.attr('href', '#profile/number/' + data[i].id).click(new Function('e', "return common.go('profile/number/" + data[i].id + "');"));
                else 
                    $owner.hide();
                $send.attr('href', '#send-message/' + data[i].number).click(new Function('e', "return common.go('#send-message/" + escape(data[i].number) + "');"));
                var j;
                for (j in data[i].items) {
                    var v = data[i].items[j];
                    var $o = $tpl.clone().appendTo($n).removeClass('template');
                    var $photo = $o.find('a.photo');
                    var $vote = $o.find('div.vote');
                    var $message = $o.find('p.message');
                    if (v.uid) 
                        $photo.attr('href', '#profile/' + v.uid).html('<u>' + (v.nick == 'Об отправителе...' ? '' : v.nick) + '</u>').addClass(v.imgS == '' ? 'no-photo' : '').css('background-image', v.imgS == '' ? 'none' : "url('" + v.imgS + "')").click(new Function('e', "return common.go('profile/" + v.uid + "');")).parent().addClass(v.imgS == '' ? '' : 'is-photo');
                    else 
                        $photo.hide();
                    $o.find('div.date').html(v.date);
                    var s = '';
                    if (v.vote) {
                        var driverOptions = {
                            100: 'хорошим',
                            110: 'гонщегом',
                            120: 'джентельменом',
                            130: 'секси',
                            300: 'плохим',
                            310: 'тормозом',
                            320: 'наглецом',
                            330: 'уродом'
                        };
                        var carOptions = {
                            200: 'хорошим',
                            210: 'ракетой',
                            220: 'чистюлей',
                            230: 'гламурным',
                            400: 'плохим',
                            410: 'черепахой',
                            420: 'неряхой',
                            430: 'развалюхой'
                        };
                        if (driverOptions[v.vote]) 
                            s = 'Водителя назвали ' + driverOptions[v.vote];
                        else 
                            if (carOptions[v.vote]) 
                                s = 'Автомобиль назвали ' + carOptions[v.vote]
                    }
                    if (s == '') 
                        $vote.hide();
                    else 
                        $vote.html(s);
                    $o.find('p.message').html(v.message)
                }
            }
            if (!isInit) 
                $register.find('a').click(function(e){
                    return common.go('register')
                });
            $register.show()
        }
        else 
            $status.html(data.mg || 'Нет сообщений').show()
    }, 'json')
};
$.fn.my_messages = function(options){
    if (!common.authUser) {
        common.go('index');
        return
    }
    var $obj = $('form.my-messages');
    var $numberTpl = $obj.find('div.messages.template');
    var $tpl = $obj.find('div.message.template');
    var $messagesList = $obj.find('div.messages-list').empty();
    var $status = $obj.find('h1.status').hide();
    common.activeMenu = '#menu-my-messages';
    options = options ||
    {};
    common.show($obj);
    $('div.page-loader').show();
    if (!common.storage.my_messages) 
        common.storage.my_messages = {
            checkAll: function(id){
                var $o = $obj.find('div[name=number-' + id + ']');
                var c = $o.find('input.change-all')[0].checked;
                $o.find('input.checkbox').each(function(i, o){
                    o.checked = c
                })
            },
            remove: function(id){
                var $o = $obj.find('div[name=number-' + id + ']'), $loader = $o.find('loader'), $alert = $o.find('div.alert').hide(), a = [], p = '', c = 0;
                $o.find('input.checkbox:visible').each(function(i, o){
                    if (o.checked) {
                        var m = $(o).parent().find('input[name=id]').val();
                        a.push(m);
                        p += '-' + m
                    }
                    else 
                        ++c
                });
                if (a.length) {
                    $loader.show();
                    $.post(common.baseDir + 'remove-messages', {
                        ids: p
                    }, function(data){
                        $loader.hide();
                        if (data.sc) {
                            var i;
                            for (i in a) 
                                $o.find('div[name=message-' + a[i] + '] input.checkbox').hide().parent().find('div.removed').html('Подана заявка на удаление сообщения').show();
                            $alert.html('Заявка на удаление сообщений отправлена').show()
                        }
                        else 
                            $alert.html(data.mg || 'Не удалось удалить сообщения. Пожалуйста, повторите попытку!').show()
                    }, 'json')
                }
                else 
                    $alert.html('Пожалуйста, выберите сообщения!').show();
                return false
            }
        };
    $.post(common.baseDir + 'my-messages', options, function(data){
        $('div.page-loader').hide();
        if (data && data[0]) {
            var i;
            for (i in data) {
                var $n = $numberTpl.clone().appendTo($messagesList).addClass(i > 0 ? '' : 'first').removeClass('template').attr('name', 'number-' + i);
                var $f = $n.find('div.footer');
                var $number = $n.find('div.number');
                $number.html(common.numberHtml(data[i].number));
                var j, f = false;
                for (j in data[i].items) {
                    var v = data[i].items[j], $o = $tpl.clone().insertBefore($f).removeClass('template').attr('name', 'message-' + v.id), $answer = $o.find('a.answer'), $photo = $o.find('a.photo'), $vote = $o.find('div.vote'), $removed = $o.find('div.removed'), $message = $o.find('p.message');
                    $o.find('input[name=id]').val(v.id);
                    if (v.number) 
                        $answer.attr('href', '#send-message/' + v.number).click(new Function('e', "return common.go('send-message/" + escape(v.number) + "');"));
                    else 
                        $answer.hide();
                    if (v.uid) 
                        $photo.attr('href', '#profile/' + v.uid).html('<u>' + (v.nick == 'Об отправителе...' ? '' : v.nick) + '</u>').addClass(v.imgS == '' ? 'no-photo' : '').css('background-image', v.imgS == '' ? 'none' : "url('" + v.imgS + "')").click(new Function('e', "return common.go('profile/" + v.uid + "');")).parent().addClass(v.imgS == '' ? '' : 'is-photo');
                    else 
                        $photo.hide();
                    $o.find('div.date').html(v.date + (v.unread ? ' (непрочитанное сообщение)' : '')).addClass(v.unread ? 'unread' : '');
                    var s = '';
                    if (v.vote) {
                        var driverOptions = {
                            100: 'хорошим',
                            110: 'гонщегом',
                            120: 'джентельменом',
                            130: 'секси',
                            300: 'плохим',
                            310: 'тормозом',
                            320: 'наглецом',
                            330: 'уродом'
                        };
                        var carOptions = {
                            200: 'хорошим',
                            210: 'ракетой',
                            220: 'чистюлей',
                            230: 'гламурным',
                            400: 'плохим',
                            410: 'черепахой',
                            420: 'неряхой',
                            430: 'развалюхой'
                        };
                        if (driverOptions[v.vote]) 
                            s = 'Вас назвали ' + driverOptions[v.vote];
                        else 
                            if (carOptions[v.vote]) 
                                s = 'Ваше авто назвали ' + carOptions[v.vote]
                    }
                    if (s == '') 
                        $vote.hide();
                    else 
                        $vote.html(s);
                    if (v.removed) {
                        $o.find('input.checkbox').hide();
                        if (v.removed == 1) 
                            $removed.html('Подана заявка на удаление сообщения');
                        else 
                            $removed.html('Вам отказано в удалении данного сообщения').addClass('declined')
                    }
                    else {
                        f = true;
                        $removed.hide()
                    }
                    $o.find('p.message').html(v.message)
                }
                if (f) {
                    $f.find('input.change-all').click(new Function('e', 'common.storage.my_messages.checkAll(' + i + ');'));
                    $f.find('a.remove').click(new Function('e', 'return common.storage.my_messages.remove(' + i + ');'))
                }
                else 
                    $f.hide().parent().append('<br />')
            }
        }
        else 
            $status.html(data.mg || 'Нет сообщений').show();
        $('#menu-my-messages').html('Мои сообщения')
    }, 'json')
};
$.fn.profile = function(options){
    var $obj = $('div.profile');
    var $tpl = $obj.find('div.template');
    var $photo = $obj.find('div.user-photo').hide();
    var $nick = $obj.find('h2.title').hide();
    var $email = $obj.find('a.email').hide();
    var $phone = $obj.find('div.phone').hide();
    var $sex = $obj.find('div.sex').hide();
    var $connect = $obj.find('div.connect').hide();
    var $about = $obj.find('div.about').hide();
    var $autosHeader = $obj.find('h1.autos').hide();
    var $autosList = $obj.find('div.autos-list').empty();
    var $status = $obj.find('h1.status').hide();
    common.activeMenu = '#top-rating';
    var votesStr = function(n){
        n = '' + n;
        var a = parseInt(n.substr(-1));
        return '<b>' + n + ' ' + (a < 2 || a > 4 || n.substr(-2, 1) == '1' ? 'человек' : 'человека') + '</b>'
    };
    common.show($obj);
    $('div.page-loader').show();
    $.post(common.baseDir + 'profile', options, function(data){
        $('div.page-loader').hide();
        if (data && data.sc) {
            if (data.nick) 
                $nick.html(data.nick).show();
            if (data.id) {
                $('h2.first').html('Информация об автовладельце');
                document.title = 'Информация об автовладельце :: ' + common.baseTitle
            }
            else {
                $('h2.first').html('Информация о номере');
                document.title = 'Информация о номере :: ' + common.baseTitle
            }
            if (data.imgL) 
                $photo.css('background-image', "url('" + data.imgL + "')").show();
            if (data.email) 
                $email.attr('href', 'mailto:' + data.email).html(data.email).show();
            if (data.phone) 
                $phone.html('Телефон: ' + data.phone).show();
            if (data.sex) 
                $sex.html('Пол: ' + (data.sex == 1 ? 'мужской' : 'женский')).show();
            if (data.connect) 
                $connect.show();
            if (data.about) 
                $about.show().find('p').html(data.about);
            if (data.items[0]) {
                var i;
                if (data.id) 
                    $autosHeader.show();
                for (i in data.items) {
                    var v = data.items[i];
                    var $o = $tpl.clone().appendTo($autosList).removeClass('template').addClass(data.id ? '' : 'first');
                    var $numberPhoto = $o.find('div.photo');
                    var $title = $o.find('h2.title');
                    var $number = $o.find('div.number');
                    var $messages = $o.find('div.messages');
                    var $message = $o.find('div.message');
                    var $votes = $o.find('div.votes');
                    if (v.imgL == '') 
                        $numberPhoto.hide();
                    else 
                        $numberPhoto.css('background-image', "url('" + v.imgL + "')").show();
                    if (v.title == '') 
                        $title.hide();
                    else 
                        $title.html(v.title).show();
                    $number.html(common.numberHtml(v.number));
                    if (v.messages) 
                        $messages.html('<a href="#messages/number/' + v.id + '">Сообщений: ' + v.messages + '</a>').find('a').click(new Function('e', "return common.go('messages/number/" + v.id + "');"));
                    else 
                        $messages.hide();
                    $message.html('<a href="#send-message/' + v.number + '">Отправить сообщение</a>').find('a').click(new Function('e', "return common.go('send-message/" + escape(v.number) + "');"));
                    var j;
                    var driver = '';
                    var car = '';
                    var driverOptions = {
                        100: 'хорошим',
                        110: 'гонщегом',
                        120: 'джентельменом',
                        130: 'секси',
                        300: 'плохим',
                        310: 'тормозом',
                        320: 'наглецом',
                        330: 'уродом'
                    };
                    var carOptions = {
                        200: 'хорошим',
                        210: 'ракетой',
                        220: 'чистюлей',
                        230: 'гламурным',
                        400: 'плохим',
                        410: 'черепахой',
                        420: 'неряхой',
                        430: 'развалюхой'
                    };
                    for (j in v.votes) 
                        if (driverOptions[j]) 
                            driver += '<li>' + votesStr(v.votes[j]) + driverOptions[j] + ':</li>';
                        else 
                            if (carOptions[j]) 
                                car += '<li>' + votesStr(v.votes[j]) + carOptions[j] + ':</li>';
                    if (driver == '' && car == '') 
                        $votes.hide();
                    else 
                        $votes.html((driver == '' ? '' : '<p>Назвали водителя</p><ul>' + driver + '</ul>') + (car == '' ? '' : '<p>Назвали автомобиль</p><ul>' + car + '</ul>')).show();
                    $o.show()
                }
            }
        }
        else 
            $status.html(data.mg || 'Нет информации о пользователе').show()
    }, 'json')
};
$.fn.search = function(options){
    var $obj = $('div.search');
    var $tpl = $obj.find('div.template');
    var $autosList = $obj.find('div.autos-list').empty();
    common.activeMenu = '#top-search';
    var votesStr = function(n){
        n = '' + n;
        var a = parseInt(n.substr(-1));
        return '<b>' + n + ' ' + (a < 2 || a > 4 || n.substr(-2, 1) == '1' ? 'человек' : 'человека') + '</b>'
    };
    var setTitle = function(t){
        $('h2.first').html(t);
        document.title = t + ' :: ' + common.baseTitle
    };
    common.show($obj);
    $('div.page-loader').show();
    $.post(common.baseDir + 'search', {
        'number': unescape(options.number)
    }, function(data){
        $('div.page-loader').hide();
        if (data && data.count) {
            setTitle('Найдено номеров: ' + data.count);
            var i;
            for (i in data.items) {
                var v = data.items[i];
                var $o = $tpl.clone().appendTo($autosList).removeClass('template').addClass(i > 0 ? '' : 'first').addClass(v.imgL == '' ? 'no-photo' : '');
                var $photo = $o.find('div.photo');
                var $title = $o.find('h2.title');
                var $number = $o.find('div.number');
                var $owner = $o.find('div.owner');
                var $messages = $o.find('div.messages');
                var $message = $o.find('div.message');
                var $votes = $o.find('div.votes');
                if (v.imgL == '') 
                    $photo.hide();
                else 
                    $photo.css('background-image', "url('" + v.imgL + "')").show();
                if (v.title == '') 
                    $title.hide();
                else 
                    $title.html(v.title).show();
                $number.html(common.numberHtml(v.number));
                if (v.uid) 
                    $owner.html('<a href="#profile/number/' + v.id + '">' + (v.nick ? 'Владелец:' + v.nick : 'Информация о владельце') + '</a>').find('a').click(new Function('e', "return common.go('profile/number/" + v.id + "');"));
                else 
                    $owner.hide();
                if (v.messages) 
                    $messages.html('<a href="#messages/number/' + v.id + '">Сообщений: ' + v.messages + '</a>').find('a').click(new Function('e', "return common.go('messages/number/" + v.id + "');"));
                else 
                    $messages.hide();
                $message.html('<a href="#send-message/' + v.number + '">Отправить сообщение</a>').find('a').click(new Function('e', "return common.go('send-message/" + escape(v.number) + "');"));
                var j;
                var driver = '';
                var car = '';
                var driverOptions = {
                    100: 'хорошим',
                    110: 'гонщегом',
                    120: 'джентельменом',
                    130: 'секси',
                    300: 'плохим',
                    310: 'тормозом',
                    320: 'наглецом',
                    330: 'уродом'
                };
                var carOptions = {
                    200: 'хорошим',
                    210: 'ракетой',
                    220: 'чистюлей',
                    230: 'гламурным',
                    400: 'плохим',
                    410: 'черепахой',
                    420: 'неряхой',
                    430: 'развалюхой'
                };
                for (j in v.votes) 
                    if (driverOptions[j]) 
                        driver += '<li>' + votesStr(v.votes[j]) + driverOptions[j] + ':</li>';
                    else 
                        if (carOptions[j]) 
                            car += '<li>' + votesStr(v.votes[j]) + carOptions[j] + ':</li>';
                if (driver == '' && car == '') 
                    $votes.hide();
                else {
                    $votes.html((driver == '' ? '' : '<p>Назвали водителя</p><ul>' + driver + '</ul>') + (car == '' ? '' : '<p>Назвали автомобиль</p><ul>' + car + '</ul>')).show();
                    if (v.imgL == '') 
                        $votes.insertBefore($photo)
                }
                $o.show()
            }
        }
        else 
            setTitle('Ни один номер на найден')
    }, 'json')
};
$.fn.info_panes = function(){
    var buildAutoworld = function(data){
        if (!data.autoworld) 
            return;
        var k, $o = $('#autoworld div.items').html('');
        for (k in data.autoworld) {
            $o.append('<a href="/autoworld.php?news_id=' + k + '">' + data.autoworld[k] + '</a>');
        }
        $o.parent().show()
    };
    var buildNumberMessages = function(data){
        if (!data.numberMessages) 
            return;
        var k, m = data.numberMessages, $o = $('#number-messages div.items').html('');
        for (k in m) 
            $('<a href="#messages/number/' + m[k].numberid + '">' + m[k].message + '</a>').appendTo($o).click(new Function('e', "return common.go('messages/number/" + m[k].numberid + "');"));
        $o.parent().show()
    };
    var reload = function(){
        $.post(common.baseDir + 'info-panes', {}, function(data){
            if (common.authUser) {
                if (data.logout) 
                    common.logout();
                else 
                    if (data.messages) 
                        common.newMessages(data.messages)
            }
            buildAutoworld(data);
            buildNumberMessages(data)
        }, 'json')
    };
    reload()
};
$.fn.help = function(){
    var $c7 = $('#center7');
    var $obj = $c7.find('div.help');
    common.activeMenu = '#top-help';
    if ($obj.length) 
        common.show($obj);
    else {
        if (common.activePad) 
            common.activePad.hide();
        $('div.page-loader').show();
        $.get(common.baseDir + 'help', function(data){
            $('div.page-loader').hide();
            common.show($('<div class="help">' + data + '</div>').appendTo($c7))
        })
    }
};
$.fn.quick_search = function(){
    var $obj = $('form.quick-search');
    var $numbers = [$obj.find('input.number0'), $obj.find('input.number1'), $obj.find('input.number2'), $obj.find('input.number3')];
    var $status = $obj.find('div.status');
    var formAction = false;
    var isInit = common.storage.quick_search ? true : false;
    common.storage.quick_search = {
        defaults: {
            numbers: ['X', '000', 'XX', '00']
        },
        number: ''
    };
    var storage = common.storage.quick_search;
    var defaults = storage.defaults;
    var checkNumber0 = function(){
        var v = $numbers[0].val();
        if (v != defaults.numbers[0]) {
            v = v.replace(/[^а-яА-Я]/g, '');
            $numbers[0].val(v)
        }
        if (v != '' && v != defaults.numbers[0]) 
            return checkNumber1(v);
        storage.number = v;
        $status.hide();
        return false
    };
    var checkNumber1 = function(p){
        var v = $numbers[1].val();
        if (v != defaults.numbers[1]) {
            v = v.replace(/\D/g, '');
            $numbers[1].val(v)
        }
        if (v.length == 3 && v != defaults.numbers[1]) 
            return checkNumber2(p + v);
        storage.number = p + v;
        $status.hide();
        return false
    };
    var checkNumber2 = function(p){
        var v = $numbers[2].val();
        if (v != defaults.numbers[2]) {
            v = v.replace(/[^а-яА-Я]/g, '');
            $numbers[2].val(v)
        }
        if (v.length == 2 && v != defaults.numbers[2]) 
            return checkNumber3(p + v);
        storage.number = p + v;
        $status.hide();
        return false
    };
    var checkNumber3 = function(p){
        var v = $numbers[3].val();
        if (v != defaults.numbers[3]) {
            v = v.replace(/\D/g, '');
            $numbers[3].val(v)
        }
        v = v == defaults.numbers[3] ? p : p + v;
        if (v != storage.number) {
            var $loader = $obj.find('div.loader');
            $loader.show();
            $.post(common.baseDir + 'quick-search', {
                'number': v
            }, function(data){
                $loader.hide();
                formAction = data.count ? '#search/' + escape(v) : data.href || false;
                if (formAction) 
                    $status.html('<a' + (data.number ? ' class="number number-best"' : '') + ' href="' + formAction + '">' + (data.href ? data.number ? common.numberHtml(data.number) : data.title : 'Схожих номеров: ' + data.count) + '</a>').show().find('a').click(function(e){
                        return common.go(formAction)
                    });
                else 
                    $status.html('Владелец номера не найден').show()
            }, 'json')
        }
        storage.number = v;
        return true
    };
    var checkForm = function(){
        var sc = checkNumber0();
        sc ? common.submitEnable($obj) : common.submitDisable($obj);
        return sc
    };
    if (!isInit) {
        $numbers[0].focus(function(e){
            $numbers[0][0].select();
            checkForm()
        }).blur(function(e){
            if ($numbers[0].val() == '') 
                $numbers[0].val(defaults.numbers[0]);
            checkForm()
        }).keyup(function(e){
            if ($numbers[0].val().length == defaults.numbers[0].length) 
                $numbers[1].focus();
            else 
                checkForm()
        });
        $numbers[1].focus(function(e){
            $numbers[1][0].select();
            checkForm()
        }).blur(function(e){
            if ($numbers[1].val() == '') 
                $numbers[1].val(defaults.numbers[1]);
            checkForm()
        }).keyup(function(e){
            if ($numbers[1].val().length == defaults.numbers[1].length) 
                $numbers[2].focus();
            else 
                checkForm()
        });
        $numbers[2].focus(function(e){
            $numbers[2][0].select();
            checkForm()
        }).blur(function(e){
            if ($numbers[2].val() == '') 
                $numbers[2].val(defaults.numbers[2]);
            checkForm()
        }).keyup(function(e){
            if ($numbers[2].val().length == defaults.numbers[2].length) 
                $numbers[3].focus();
            else 
                checkForm()
        });
        $numbers[3].focus(function(e){
            $numbers[3][0].select();
            checkForm()
        }).blur(function(e){
            if ($numbers[3].val() == '') 
                $numbers[3].val(defaults.numbers[3]);
            checkForm()
        }).keyup(function(e){
            checkForm()
        });
        $obj.submit(function(e){
            if (checkForm() && formAction) 
                common.go(formAction);
            return false
        })
    }
    checkForm()
};
$.fn.rating = function(nOwner){
    var isOwner = nOwner ? false : true;
    $obj = $('form.rating');
    var buildRandNew = function(data){
        var i;
        var a = [['randUsers', 'rand-users', 'profile/'], ['newUsers', 'new-users', 'profile/'], ['randNumbers', 'rand-numbers', 'profile/number/'], ['newNumbers', 'new-numbers', 'profile/number/']];
        for (i in a) {
            var $o = $obj.find('.' + a[i][1]);
            if (data[a[i][0]] && data[a[i][0]][0]) {
                var j;
                var $n = $o.find('div.items').empty();
                var e = data[a[i][0]];
                for (j in e) 
                    $('<a href="#' + a[i][2] + e[j].id + '">' + (e[j].number ? '<div class="number">' + common.numberHtml(e[j].number) + '</div>' : '<u>' + e[j].nick + '</u>') + '</a>').css('background-image', 'url(' + common.baseDir + 'img/' + e[j].img + ')').appendTo($n).click(new Function('e', "return common.go('" + a[i][2] + e[j].id + "');"));
                $o.show()
            }
            else 
                $o.hide()
        }
    };
    var buildMaxRated = function(data){
        if (!data.maxRated) 
            return;
        var i;
        for (i in data.maxRated) {
            var a = data.maxRated[i];
            var c;
            switch (a.type) {
                case 100:
                    c = 'best-users';
                    h = 'profile/';
                    break;
                case 200:
                    c = 'best-numbers';
                    h = 'profile/number/';
                    break;
                case 300:
                    c = 'worst-users';
                    h = 'profile/';
                    break;
                case 400:
                    c = 'worst-numbers';
                    h = 'profile/number/';
                    break
            }
            var $o = $obj.find('.' + c);
            var $n = $o.find('div.items').empty();
            var j;
            for (j in a.items) 
                $('<a href="#' + h + a.items[j].id + '">' + (a.items[j].number ? '<div class="number ' + (a.type == 200 ? 'number-best' : 'number-worst') + '">' + common.numberHtml(a.items[j].number) + '</div>' : '<u>' + a.items[j].nick + '</u>') + '</a>').css('background-image', a.items[j].img ? 'url(' + common.baseDir + 'img/' + a.items[j].img + ')' : 'none').addClass(a.items[j].img ? '' : 'no-photo').appendTo($n).click(new Function('e', "return common.go('" + h + a.items[j].id + "');"));
            $o.show()
        }
    };
    if (isOwner) 
        $('div.page-loader').show();
    $.post(common.baseDir + 'rating', {
        'all': 1
    }, function(data){
        $('div.page-loader').hide();
        buildRandNew(data);
        buildMaxRated(data);
        if (isOwner) 
            common.show($obj);
        else 
            common.activePad2 = $obj.show()
    }, 'json')
};
