$(function(){

    $("a[rel=external]").each(function(){
        $(this).attr('target', '_blank');
    });

    //var _post = $('#post');
    var _posts = $('div.post');

    var _post = $('#post');

    $('#sneak-peek').dxSlider();
    $('#contact form select').SelectCustomizer();

    // init navigation
    $('#nav > ul > li').hoverIntent({
         sensitivity: 1,
         interval: 100,
         over: function(){
            var fn = $(this);
            fn.addClass('active').find('ul').show();
        },
         timeout: 600,
         out:function(){
            var fn = $(this);
            fn.removeClass('active').find('ul').hide();
        }
    });
    
    // init archives
    (function() {
        var archives = $('#archives');
        var years = archives.find('div.years > ul');
        years.filter(':last').show();
        archives.find('a.up, a.down').click(function(){
            var fn = $(this);
            var o = years.filter(':visible');
            var n = fn.hasClass('up') ? o.prev() : o.next();
            if (n.length) {
                o.hide();
                n.show();
            }
            return false;
        });
    })();

    var init_multi_posts = function() {
        _posts.find('a.toggle').click(function(e, isComment){
            e.preventDefault();

            var fn = $(this);
            var post = fn.parents('div.post');
            var more = post.find('div.more');

            function _init_more() {
                more.slideDown(400, function(){
                    post.find('.comments .list').jScrollPane({
                        scrollbarWidth:7,
                        dragMinHeight:31,
                        dragMaxHeight:31
                    });

                    if (isComment) {
                        post.find('div.postmeta').scrollTo();
                    } else {
                        post.scrollTo();
                    }
                });
            }

            if (more.is(':visible')) {
                more.hide();
                post.removeClass('open-post');
            } else {
                // close other posts
                post.addClass('open-post')
                    .siblings('.open-post').find('a.toggle').trigger('click');
                // load post into more
                if (!post.hasClass('content-loaded')) {
                    var loading = post.find('div.loading');
                    fn.hide();
                    loading.show();
                    more.load(_template_dir + '/load-post.php?id=' + fn.attr('rel'), function(){
                        post.addClass('content-loaded');
                        _init_more();
                        _init_comment_form(more.find('form'));
                        loading.hide();
                        fn.show();
                    });
                } else {
                    _init_more();
                }
            }
        });

        _posts.find('.preview .image').click(function(){
            $(this).parent().find('a.toggle').trigger('click');
        });
    }

    function init_single_post()
    {
        _posts.find('.comments .list').jScrollPane({
            scrollbarWidth:7,
            dragMinHeight:31,
            dragMaxHeight:31
        });
    }
    if (_post.length) {
        init_single_post();
    } else if (_posts.length) {
        init_multi_posts();
    }

    if (_posts.length) {
        _posts.find('.meta .buttons a.comment').live('click', function(){
            var fn = $(this);
            var meta = fn.parents('div.meta');
            var comment = meta.find('form.comment-form');
            comment.slideToggle();
            return false;
        });

        _posts.find('.open-comments a').click(function(){
            var fn = $(this);
            var post = fn.parents('div.post');
            var meta = post.find('div.postmeta');
            if (!post.find('.more').is(':visible')) {
                post.find('div a.toggle').trigger('click', [true]);
            } else {
                meta.scrollTo();
            }
            return false;
        });

        // validate comment forms
        var validateOptions = {
            rules:{
                author:{required:true, minlength:2},
                email:{required:true, email:true},
                comment:{required:true}
            },
            messages:{
                author:{required:'Please provide your name',},
                email:{required:'Please provide your correct email address'},
                comment:{required:'Please provide your message'}
            },
            ignoreTitle: true,
            onkeyup: false,
            onfocusout: false,
            showErrors:function(errorMap, errorList){
                $.each(errorList, function(key, elm){
                    $(elm.element)
                       .animate( {opacity: 0.2}, 175 )
                       .animate( {opacity: 1}, 150 )
                       .animate( {opacity: 0.2}, 150 )
                       .animate( {opacity: 1}, 150 )
                       .animate( {opacity: 0.2}, 150 )
                       .animate( {opacity: 1}, 150 );
                });
            },
            invalidHandler: function(form) {
                $(form.currentTarget).find("input[type=text], textarea").blur();
            }
        };

        function _init_comment_form(form) {
            $(form).find('input[type=text], textarea').labelify();
            $(form).validate(validateOptions);
        }

        $('div.post form.comment-form').each(function(key, form){
            _init_comment_form(form);
        });


        // image voting
        var voteForImage = function() {
            var fn = $(this);
            var link = fn.attr('href');
            var votesHandler = fn.parent().find('.votes em');
            fn.remove();
            $.get(link, {}, function(data){
                if (data != 'error') {
                    votesHandler.text(data);
                }
            });
            return false;
        }
        $('div.post .vote-image a').live('click', voteForImage);
    }

    var footerInfo = $('#footer-info');
    var footerContainerHeight = Math.max($('.container-categories', footerInfo).height(),$('.container-recent', footerInfo).height());
    $('.container', footerInfo).height(footerContainerHeight);
});
