/*
    quickpager for movable type.
    require jquery-1.2.1
*/

if(typeof $a == 'undefined'){
    $a = new Object;
    $a.Class = function(){
        var klass = function(){
            this.initialize.apply(this,arguments)
        };
        return klass;
    };
}


QuickPager = new $a.Class();

QuickPager.Config = {
    'nextLink': function(target){
        var target = target || document.body;
        return $('*[@class="link_to_previous"] ',target).children('a').get(0);
    },
    'insertBefore': function(target){
        var target = target || document.body;
        return $('*[@class="foot_navi"]',target).get(0);
    },
    'entries': function(target){
        var target = target || document.body;
        return $('*[@class="asset-content"]',target).parent('div');
    },
    'buttonContainer': function(target){
        var target = target || document.body;
        return $('*[@class="link_to_previous"]',target).get(0);
    }
};
var QP = QuickPager;

QuickPager.prototype = {
    initialize: function(){
        //if(QP.instance) return;
        var linkNode = QP.Config.nextLink(); 
        if(linkNode.href)this.nextLink = linkNode.href;
        else return ;
        this.linkNode = linkNode;
        this.insertBefore = QP.Config.insertBefore();
        this.busy = false;
        this.addButton();
        QP.instance = this;
    },
    addButton: function(){
        var loadButton = document.createElement('input'),
            container = QP.Config.buttonContainer(),
            self = this;
        loadButton.setAttribute('value','load');
        loadButton.setAttribute('type', 'button');
        container.appendChild(loadButton);
        $(loadButton).bind('click',function(){self.load()});
    },
    load: function(){
        if(this.busy)return;
        var self = this;
        this.busy = true;
        $.get(self.nextLink, null,function(res){
                var page = self.parse(res);
                self.insertEntries(page);
                self.busy = false;
        });
    },
    insertEntries: function(nextPage){
        var loadedEntries = nextPage[0],
            nextLink = nextPage[1],
            nextLinkText = $(nextLink).text(),
            self = this;
        loadedEntries.each(function(){
            $(self.insertBefore).before($(this));
        });
        this.setLink(null,nextLink.href,nextLinkText);
    },
    setLink: function(target,url,text){
        var target = $(target || this.linkNode);
        this.nextLink = url;
        target.attr('href',url);
        target.html(text);
    },
    parse: function(res){
        var page = res,
            start = page.indexOf('<div id=\"alpha\">'),
            end = page.indexOf('<div id=\"beta\">');
        page = page.slice(start,end);
        var pageDOM = document.createElement('div');
        pageDOM.innerHTML = page;
        var entries = QP.Config.entries(pageDOM);
        var nextLink = QP.Config.nextLink(pageDOM);
        return [entries, nextLink];
    }
};


//main
$(function(){
    var q = new QuickPager();
});

