// ==UserScript==
// @name           Futaba4ChanStyle
// @namespace      http://www.udp.jp/
// @description    ふたばを4chanのようなajaxな感じで見たい(希望)
// @include        http://*.2chan.net/*
// ==/UserScript==

// var 1.0 - まずは画像をインラインで出すように
// var 1.1 - 二次元裏がぶっ壊れていたので直した


var Futaba4chanStyle = function() {};
Futaba4chanStyle.prototype = 
{
    cache: [],
    
    inject: function()
    {
        if (this.isImageBoard()) {
            // スーパーカスタマイズの始まり
            this.addEvents();
            
            if (window.AutoPagerize && window.AutoPagerize.addFilter) {
                window.AutoPagerize.addFilter(
                    (function(_this) { 
                        return function(page) { _this.addEvents(); }
                    })(this)
                );
            }
        }
    },
    
    isImageBoard: function() 
    {
        var forms = document.forms;
        
        for (var i = 0; forms && i < forms.length; ++i) {
            if (forms[i].action.match(/futaba\.php$/)) {
                return true;
            }
        }
        
        return false;
    },
    
    addEvents: function()
    {
        var thumb = document.getElementsByTagName("img");
        var id = 0;
        for (var i = 0; thumb && i < thumb.length; ++i) {
            var a = thumb[i].parentNode;
            if (a.href.match(/[\d]+\.(htm|jpg|gif|png|jpeg)$/) 
                && a.attributes.getNamedItem("thumb_src") == null) 
            {
                a.addEventListener(
                    "click", 
                    (function(handle, cache) { 
                        return function(e) {
                            handle(e, cache) 
                        }
                    })(this.handle, this.cache),
                    false
                );
                a.attributes.setNamedItem(document.createAttribute("thumb"))
                a.attributes.setNamedItem(document.createAttribute("thumb_src"))
                a.setAttribute("thumb", true);
                a.setAttribute("thumb_src", thumb[i].src);
                thumb[i].setAttribute("width", null);
                thumb[i].setAttribute("height", null);
            }
        }
    },
    
    handle: function (e, cache) 
    {
        var a = e.target.parentNode;
        var img = a.childNodes[0];
        var is_thumb = a.getAttribute("thumb");
        var thumb_src = a.getAttribute("thumb_src");
        
        e.stopPropagation();
        e.preventDefault();
        
        if (is_thumb == "true" /* string */) {
            a.setAttribute("thumb", false);
            
            var cache_src = cache[thumb_src];
            if (cache_src) {
                img.src = cache_src;
            } else {
                if (a.href.match(/htm$/)) {
                    // HTML var板
                    var _this = this;
                    GM_xmlhttpRequest({
                        method: "GET",
                        url: a.href,
                        onload: function(response)
                        {
                            var path = a.href.split('/');
                            var img_url = response.responseText.match(/URL=([^"]+)/); // "
                            var src;
                            
                            if (!img_url || img_url.length < 2) {
                                return;
                            }
                            if (img_url[1].match(/^http/)) {
                                src = img_url[1];
                            } else {
                                path.pop();
                                path.push(img_url[1]);
                                src = path.join('/');
                            }
                            cache[thumb_src] = src;
                            img.src = src;
                            
                        },
                        onerror: function(response)
                        {
                            //
                        }
                    });
                } else {
                    // 画像 var板
                    cache[thumb_src] = a.href;
                    img.src = a.href;
                }
            }
        } else {
            a.setAttribute("thumb", true);
            img.src = thumb_src;
        }
        
    }
};

var futaba4ch = new Futaba4chanStyle;
futaba4ch.inject();


