$(function() {
    $.fn.FormMessage && $('.leave-message form').FormMessage();
});

/**
 * hypo
 * 2009/12/30
 * version: 0.1
 *
 * ajax提交表单
 * 并用显示返回结果
 */
(function($){
    $.fn.FormMessage = function() {
        $.fn.FormMessage.$msg = $('#message-box');
        if ($.fn.FormMessage.$msg.length == 0) {
            var boxHtml = [];
            boxHtml.push('<div class="message-success" id="message-box" style="display:none;">');
            boxHtml.push('<div class="msg-left"/>');
            boxHtml.push('<div class="msg-body"><p/></div>');
            boxHtml.push('<div class="msg-right"/>');
            boxHtml.push('</div>');
            $.fn.FormMessage.$msg = $(boxHtml.join(''));
            $('body').append($.fn.FormMessage.$msg);
        }
        $.fn.FormMessage.$p = $.fn.FormMessage.$msg.find('.msg-body p');

        return this.each(function() {
            var $form = $(this);
            $form.submit(function() {
                var $form = $(this);
                var data = '';
                var url = $form.attr('action').replace('wp-comments-post.php','')+'wp-content/plugins/ajaxmessage/post.php';

                $form.find('input, textarea').each(function() {
                    var $this = $(this);
                    data += '&'+ $this.attr('name')+ '='+ $this.val();
                });
                data = data.substr(1)+ '&submit=submit';

                $.fn.FormMessage.lock($form); //锁定表单

                $.post(url, data, function(r) {
                    if (r.status == 1) {
                        //成功
                        $.fn.FormMessage.show(r.result, 1, function() {
                            $.fn.FormMessage.clean($form);
                            $.fn.FormMessage.unlock($form);
                        });
                    } else if (r.status == 0) {
                        //错误
                        $.fn.FormMessage.show(r.result, 0, function(){
                            $.fn.FormMessage.unlock($form);
                        });
                    }
                }, 'json');
                return false;
            })
            .ajaxError(function(e,xhr,s) {
                //失败, 未知错误(网络错误,重复提交,频繁提交)
                $.fn.FormMessage.show('提交留言失败, 请稍后再试!', 0, function(){
                    $.fn.FormMessage.unlock($form);
                });
            });
        });
    }

    $.fn.FormMessage.show = function(msg, status, callback) {
        if (status) {
            $.fn.FormMessage.$msg.removeClass('message-fail').addClass('message-success');
        } else {
            $.fn.FormMessage.$msg.removeClass('message-success').addClass('message-fail');
        }

        $.fn.FormMessage.$p.text(msg);
        $.fn.FormMessage.$msg.css('opacity', 0).show();

        setTimeout(function() {
            var $w = $(window);
            var $d = $(document);
            var l = t = 0;

            //修复第一次显示的时候,$msg.width()不刷新!
            $.fn.FormMessage.$msg.css({
                'left':0,
                'top':0
            });

            l = Math.round($d.scrollLeft() + ($w.width()/2 - $.fn.FormMessage.$msg.width()/2));
            t = Math.round($d.scrollTop() + ($w.height()/2 - $.fn.FormMessage.$msg.height()/2)) - 20;

            $.fn.FormMessage.$msg.css({
                'left':l+'px',
                'top':t+100+'px',
                'z-index':'1000'    //此处设置为合适值,确保消息显示在页面最上方
            });

            $.fn.FormMessage.$p.width($.fn.FormMessage.$p.width() > 184? $.fn.FormMessage.$p.width() : 184);

            $.fn.FormMessage.$msg.animate({
                top:t+'px',
                opacity:1.0
            }, 200, 'easeOutExpo', function() {
                setTimeout(function() {
                    $.fn.FormMessage.$msg.animate({
                        //top:'-=50px',
                        opacity:0
                    }, 150, function() {
                        callback && callback();
                        $.fn.FormMessage.$msg.hide();
                        $.fn.FormMessage.$p.empty();
                    });
                }, 2500);
            });
        }, 10);
    }

    $.fn.FormMessage.clean = function($form) {
        $form.get(0).reset();
    }

    $.fn.FormMessage.lock = function($form) {
        $form.addClass('loading').find('input, button, textarea').attr('disabled', 'disabled');
    }

    $.fn.FormMessage.unlock = function($form) {
        $form.removeClass('loading').find('input, button, textarea').removeAttr('disabled').blur();
        $.fn.FormMessage.$p.css('width', 'auto');
    }
})(jQuery);