/**
 * jQuery.ScrollTo - Easy element scrolling using jQuery.
 * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 5/25/2009
 * @author Ariel Flesler
 * @version 1.4.2
 *
 * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
 */
;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);

/**
 * Cookie plugin
 *
 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 */
 
jQuery.cookie=function(d,c,a){if(typeof c!="undefined"){a=a||{};if(c===null){c="";a.expires=-1}var b="";if(a.expires&&(typeof a.expires=="number"||a.expires.toUTCString)){if(typeof a.expires=="number"){b=new Date;b.setTime(b.getTime()+a.expires*24*60*60*1E3)}else b=a.expires;b="; expires="+b.toUTCString()}var e=a.path?"; path="+a.path:"",f=a.domain?"; domain="+a.domain:"";a=a.secure?"; secure":"";document.cookie=[d,"=",encodeURIComponent(c),b,e,f,a].join("")}else{c=null;if(document.cookie&&document.cookie!=
""){a=document.cookie.split(";");for(b=0;b<a.length;b++){e=jQuery.trim(a[b]);if(e.substring(0,d.length+1)==d+"="){c=decodeURIComponent(e.substring(d.length+1));break}}}return c}};


$(function() {
    // global variable for grabPage
    var pulling = false;
    
    // Check if element is visible based on current scroll position
    
    function isScrolledIntoView(elem) {
        var docViewTop = $(window).scrollTop();
        var docViewBottom = docViewTop + $(window).height();
    
        var elemTop = elem.offset().top;
        var elemBottom = elemTop + elem.height();
    
        return ((elemBottom >= docViewTop) && (elemTop <= docViewBottom));
    }
    
    function setCurrentPost() {
        $("div.post").each(function() {
            if (isScrolledIntoView($(this))) {
                $("div.post").removeClass("current");
                $(this).addClass("current");
                return false;
            }
        });
    }
    
    function toPage(the_link) {
        if (the_link.attr("href")) {
            window.location = the_link.attr("href");
        }
    }
    
    function showLoader() {
        if ($("#curr_page").length && $.cookie("infinite")) {
            if ($.cookie("infinite") == "on") {
                $("#loader").show();
            } else {
                $("#loader").hide();
            }
            $("#infinite_scroll").show();
        }
    }
    
    function grabPage(next_page) {
        if (next_page && !pulling) {
            pulling = true;
            $.get(next_page,
    
            function(data) {
                var pages = data.split("<!--PAGES-->");
                var new_pages = pages[1];
    
                var posts = data.split("<!--POSTS-->");
                var new_posts = posts[1];
                $("div.post:last").after(new_posts);
                $("ul#pagination").html(new_pages);
                pulling = false;
            });
        }
    }
    
    function verifyScrollPosition() {
        if($("#scroll_toggle").length != 0) {
            var currpos = 0.8*($(document).height() - $(window).height());
    
            if ($("#curr_page").length && $("#older").length) {
                showLoader();
    
                if ($(window).scrollTop() > currpos && $.cookie("infinite") == "on") {
                    grabPage($("#older").attr("href"));
                }
            } else {
                $("#loader").hide();
            }
        }
    }
    
    function initialSetup() {
            if ($.cookie("dropdown")) {
                $("#dropdown").show();
            }
        
            if ($("#dropdown").is(":visible")) {
                $("#portrait a").addClass("up_arr").html("&uarr;");
            }
        
            // Hide "s" on search results page when there's only one result
            if ($("div.post").length == 1 && $("div.no_results").length == 0) {
                $("span#plural").hide();
            }
            
            verifyScrollPosition();
            
            if (!$.cookie("infinite")) {
                $.cookie("infinite","on");
            }
        
            if ($.cookie("infinite") == "on") {
                $("#scroll_toggle").attr("checked", "checked");
                $("#on_off").text("On");
            } else {
                $.cookie("infinite", "off");
                $("#on_off").text("Off");
            }
            
            $("ol.notes img.avatar").each(function() {
                var src = $(this).attr("src");
                src = src.replace("_16.png","_30.png");
                $(this).attr("src", src);
            });
            
            if ($("#reblogs ol.notes li:visible").length == 0) {
                $("#reblogs ol.notes").append("<li>No responses yet.</li>");
            }
    }

    initialSetup(); // perform all immediate setup functions

    $(window).keydown(function(e) {
        var j_key = 74;
        var k_key = 75;
        var left_key = 37;
        var right_key = 39;
        var enter_key = 13;

        if (!$("input").hasClass("has_focus")) {
            switch(e.keyCode) {
                case left_key:
                    toPage($("#older"));
                    break;
                case right_key:
                    toPage($("#newer"));
                    break;
                case j_key:
                    if (!$("div.post").hasClass("current")) {
                        setCurrentPost();
                    } else {
                        setCurrentPost();
                        if ($("div.post.current").next().hasClass("post")) {
                            $("div.post.current").removeClass("current")
                            .next().addClass("current");
                        }
                    }
                    $(window).scrollTo("div.post.current");
                    break;
                case k_key:
                    setCurrentPost();
                    if ($("div.post").hasClass("current")) {
                        $("div.post.current").removeClass("current")
                        .prev().addClass("current");
                        $(window).scrollTo("div.post.current");
                    }
                    break;
                case enter_key:
                    if ($("div.post").hasClass("current")) {
                        toPage($("div.post.current a.permalink"));
                    }
            }
        }
    });
    
    /* Ajax pages */

    $(window).scroll(function() {
        verifyScrollPosition();
    });
    
    $("#scroll_toggle").click(function() {
        if ($(this).is(":checked")) {
            $("#on_off").text("On");
            $.cookie("infinite", "on");
            verifyScrollPosition();
        } else {
            $("#on_off").text("Off");
            $.cookie("infinite", "off");
        }
    });
    
    // Dropdown

    $("#portrait a").click(function() {
        $(this).toggleClass("up_arr");
        $("#dropdown").slideToggle();

        if ($(this).hasClass("up_arr")) {
            $(this).html("&uarr;");
            $.cookie("dropdown", "visible");
        } else {
            $(this).html("&darr;");
            $.cookie("dropdown", null);
        }
        return false;
    });

    // Searching

    $("#show_search").click(function() {
        if ($(this).hasClass("on")) {
            $("#q").hide().blur();
        } else {
            $("#q").show().focus();
        }
        $(this).toggleClass("on");
    });
    
    // inline search while typing
    
    $("#q").keyup(function() {
        var query = $(this).val();
            query = query.replace(/^\s+|\s+$/g, "");
        
        var re = new RegExp(query, "gi");
        
        if (query.length > 2) {
            $("div.post").each(function() {
                var text = $(this).text();
                
                if (text.search(re) == -1) {
                    $(this).hide();
                } else {
                    $(this).show();
                }
            });
        } else {
            $("div.post").show();
        }
        
        if ($("div.post:visible").length == 0) {
            $("#content").append('<div class="post nothing"><h3>No inline results. Try pressing enter on your keyboard.</h3></div>');
        } else {
            $("div.post.nothing").remove();
        }
    });

    $("#q").blur(function() {
        if ($(this).val() == "") {
            $(this).hide();
            $("#show_search").removeClass("on");
        }
    });
    
    // followers

    $("#following h2").click(function() {
        $("#following ul li").toggleClass("follow_item")
        .toggleClass("follow_alt");
        window.location = $("a", this).attr("href");
    });
    
    // likes and reblogs
    
    $("#likes img.avatar").live("mouseover", function() {
        $("#likes h4").text($(this).parent("a").attr("title"));
    }).live("mouseout", function() {
        $("#likes h4").text("Likes and Reblogs");
    });
    
    $("#reblogs li").live("mouseover", function() {
        $("#reblogs h4").text($(this).children("a").attr("title"));
    }).live("mouseout", function() {
        $("#reblogs h4").text("Responses");
    });

    // for prettify.js

    prettyPrint();

});
