
Ext.ns('com.lefthandle.deco');

com.lefthandle.deco.JSONP = (function(){
    var _queue = [],
        _current = null,
        _nextRequest = function() {
            _current = null;
            if(_queue.length) {
                _current = _queue.shift();
    			_current.script.src = _current.url + '?' + _current.params;
    			document.getElementsByTagName('head')[0].appendChild(_current.script);
            }
        };

    return {
        request: function(url, o) {
            if(!url) {
                return;
            }
            var me = this;

            o.params = o.params || {};
            if(o.callbackKey) {
                o.params[o.callbackKey] = 'com.lefthandle.deco.JSONP.callback';
            }
            var params = Ext.urlEncode(o.params);

            var script = document.createElement('script');
			script.type = 'text/javascript';

            if(o.isRawJSON) {
                if(Ext.isIE) {
                    Ext.fly(script).on('readystatechange', function() {
                        if(script.readyState == 'complete') {
                            var data = script.innerHTML;
                            if(data.length) {
                                me.callback(Ext.decode(data));
                            }
                        }
                    });
                } else {
                     Ext.fly(script).on('load', function() {
                        var data = script.innerHTML;
                        if(data.length) {
                            me.callback(Ext.decode(data));
                        }
                    });
                }
            }

            _queue.push({
                url: url,
                script: script,
                callback: o.callback || function(){},
                scope: o.scope || window,
                params: params || null
            });

            if(!_current) {
                _nextRequest();
            }
        },

        callback: function(json) {
            _current.callback.apply(_current.scope, [json]);
            Ext.fly(_current.script).removeAllListeners();
            document.getElementsByTagName('head')[0].removeChild(_current.script);
            _nextRequest();
        }
    }
})();

/**
 * deco
 *
 * provide toolbar on your site
 *
 * @version $Id$
 * @author Keisuke Mutoh
 * @copyright Copyright (c) 2009 Team Left Handle
 * @package deco
 */

/**
 * create namespace
 */
Ext.namespace('com.lefthandle.deco');

/**
 * class com.lefthandle.deco.Toolbar
 */
com.lefthandle.deco.Toolbar = function() {
    this.specifyurl = "";
    this.canonicalurl = "";
    this.shorturl = "";
    this.toolbar = null;
    this.itemset = [];
    this.pulldownset = [];
    this.bitlyid = "rhosoi";
    this.bitlyapikey = "R_f5efa132f962e2276377fa3ff61e26c9";
    this.token = "7ebc61106a154442";
}
com.lefthandle.deco.Toolbar.prototype = {
    init: function() {
        var toolbar = Ext.getBody().createChild("<div id='deco-toolbar' style='display:none;'></div>",Ext.getBody().first());
        var logo = toolbar.createChild("<div class='deco-logo' style='display:none;'><img src='http://cdn.lefthandle.com/deco/lhlogo.gif' height='21' alt='チームLeft Handle' /></div>");
        com.lefthandle.deco.obj.itemset.push(logo.id);
        logo.on("click", function(e,t) {
            com.lefthandle.deco.obj.showPulldown(t);
        });
        var pulldown = Ext.getBody().createChild("<div id='deco-pulldown-logo' class='deco-pulldown-logo'><div class='deco-pulldown-closer'><a href='javascript: com.lefthandle.deco.obj.showPulldown(\""+logo.id+"\");'><img src='http://cdn.lefthandle.com/icons/silkicon/cross.png' width='8' height='8' /></a></div><h2>Left Handle DECO ツールバー αバージョン</h2><p>Webサイトにソーシャルネットワークへのコネクションと、閲覧者コミュニケーション機能を追加するツールバーです</p><p>どなたでも利用可能<br />詳しくは<a href='http://lefthandle.com/decoToolbar/' target='_blank' style='color: #f00;'>こちら</a>で</p></div>");
        com.lefthandle.deco.obj.pulldownset.push([logo.id,pulldown.id]);

        var content = "<div class='deco-button deco-button-left-bg' style='display:none;'><span class='deco-button-right-bg'>";
        content += "<img src='http://cdn.lefthandle.com/deco/twitter.gif' width='16' heigth='16' style='vertical-align: bottom; margin-right: 2px;' />";
        
        content += "Twitterでつぶやく";
        content += "</span></div>";
        var child = toolbar.createChild(content);
        com.lefthandle.deco.obj.itemset.push(child.id);
        child.on("mouseover", function(e,t) {
            this.replaceClass("deco-button-left-bg","deco-button-hover-left-bg");
            this.child("span").replaceClass("deco-button-right-bg","deco-button-hover-right-bg");
        });
        child.on("mouseout", function(e,t) {
            this.replaceClass("deco-button-hover-left-bg","deco-button-left-bg");
            this.child("span").replaceClass("deco-button-hover-right-bg","deco-button-right-bg");
        });
        child.on("click", function(e,t) {
            com.lefthandle.deco.obj.twitterPost();
        });

        var content = "<div class='deco-button deco-button-left-bg' style='display:none;'><span class='deco-button-right-bg'>";
        content += "<img src='http://cdn.lefthandle.com/icons/silkicon/book.png' width='16' heigth='16' style='vertical-align: bottom; margin-right: 2px;' />";
        
        content += "ブックマークする";
        content += "</span></div>";
        var child = toolbar.createChild(content);
        com.lefthandle.deco.obj.itemset.push(child.id);
        child.on("mouseover", function(e,t) {
            this.replaceClass("deco-button-left-bg","deco-button-hover-left-bg");
            this.child("span").replaceClass("deco-button-right-bg","deco-button-hover-right-bg");
        });
        child.on("mouseout", function(e,t) {
            this.replaceClass("deco-button-hover-left-bg","deco-button-left-bg");
            this.child("span").replaceClass("deco-button-hover-right-bg","deco-button-right-bg");
        });
        child.on("click", function(e,t) {
            com.lefthandle.deco.obj.showPulldown(t);
        });
        var pulldown = Ext.getBody().createChild("<div id='deco-pulldown-1' class='deco-pulldown'><div class='deco-pulldown-closer'><a href='javascript: com.lefthandle.deco.obj.showPulldown(\""+child.id+"\");'><img src='http://cdn.lefthandle.com/icons/silkicon/cross.png' width='8' height='8' /></a></div></div>");
        com.lefthandle.deco.obj.pulldownset.push([child.id,pulldown.id]);
        var mitem = "<div id='deco-pulldown-menu-0' class='deco-pulldown-menu  deco-pulldown-left-bg'></div>";

        var sitem = "<span class='deco-pulldown-menu-child deco-pulldown-right-bg'>";
        sitem += "<img src='http://cdn.lefthandle.com/icons/16x16/delicious.gif' width='16' heigth='16' style='vertical-align: bottom; margin-right: 2px;' />";
        
        sitem += "delicious";
        sitem += "</span>";
        var mchild = pulldown.createChild(mitem);
        mchild.createChild(sitem);
        mchild.on("mouseover", function(e,t) {
            var item = Ext.get(this.id);
            item.replaceClass("deco-pulldown-left-bg","deco-pulldown-hover-left-bg");
            item.child(".deco-pulldown-menu-child").replaceClass("deco-pulldown-right-bg","deco-pulldown-hover-right-bg");
        });
        mchild.on("mouseout", function(e,t) {
            var item = Ext.get(this.id);
            item.replaceClass("deco-pulldown-hover-left-bg","deco-pulldown-left-bg");
            item.child(".deco-pulldown-menu-child").replaceClass("deco-pulldown-hover-right-bg","deco-pulldown-right-bg");
        });
        mchild.on("click", function(e,t) {
            com.lefthandle.deco.obj.deliciousPost();
        });
        var mitem = "<div id='deco-pulldown-menu-1' class='deco-pulldown-menu  deco-pulldown-left-bg'></div>";

        var sitem = "<span class='deco-pulldown-menu-child deco-pulldown-right-bg'>";
        sitem += "<img src='http://cdn.lefthandle.com/icons/16x16/yahoo.gif' width='16' heigth='16' style='vertical-align: bottom; margin-right: 2px;' />";
        
        sitem += "Yahoo!ブックマーク";
        sitem += "</span>";
        var mchild = pulldown.createChild(mitem);
        mchild.createChild(sitem);
        mchild.on("mouseover", function(e,t) {
            var item = Ext.get(this.id);
            item.replaceClass("deco-pulldown-left-bg","deco-pulldown-hover-left-bg");
            item.child(".deco-pulldown-menu-child").replaceClass("deco-pulldown-right-bg","deco-pulldown-hover-right-bg");
        });
        mchild.on("mouseout", function(e,t) {
            var item = Ext.get(this.id);
            item.replaceClass("deco-pulldown-hover-left-bg","deco-pulldown-left-bg");
            item.child(".deco-pulldown-menu-child").replaceClass("deco-pulldown-hover-right-bg","deco-pulldown-right-bg");
        });
        mchild.on("click", function(e,t) {
            com.lefthandle.deco.obj.yahooPost();
        });
        var mitem = "<div id='deco-pulldown-menu-2' class='deco-pulldown-menu  deco-pulldown-left-bg'></div>";

        var sitem = "<span class='deco-pulldown-menu-child deco-pulldown-right-bg'>";
        sitem += "<img src='http://cdn.lefthandle.com/icons/16x16/hatena.gif' width='16' heigth='16' style='vertical-align: bottom; margin-right: 2px;' />";
        
        sitem += "はてなブックマーク";
        sitem += "</span>";
        var mchild = pulldown.createChild(mitem);
        mchild.createChild(sitem);
        mchild.on("mouseover", function(e,t) {
            var item = Ext.get(this.id);
            item.replaceClass("deco-pulldown-left-bg","deco-pulldown-hover-left-bg");
            item.child(".deco-pulldown-menu-child").replaceClass("deco-pulldown-right-bg","deco-pulldown-hover-right-bg");
        });
        mchild.on("mouseout", function(e,t) {
            var item = Ext.get(this.id);
            item.replaceClass("deco-pulldown-hover-left-bg","deco-pulldown-left-bg");
            item.child(".deco-pulldown-menu-child").replaceClass("deco-pulldown-hover-right-bg","deco-pulldown-right-bg");
        });
        mchild.on("click", function(e,t) {
            com.lefthandle.deco.obj.hatenaPost();
        });
        var mitem = "<div id='deco-pulldown-menu-3' class='deco-pulldown-menu  deco-pulldown-left-bg'></div>";

        var sitem = "<span class='deco-pulldown-menu-child deco-pulldown-right-bg'>";
        sitem += "<img src='http://cdn.lefthandle.com/icons/16x16/livedoor.gif' width='16' heigth='16' style='vertical-align: bottom; margin-right: 2px;' />";
        
        sitem += "livedoorクリップ";
        sitem += "</span>";
        var mchild = pulldown.createChild(mitem);
        mchild.createChild(sitem);
        mchild.on("mouseover", function(e,t) {
            var item = Ext.get(this.id);
            item.replaceClass("deco-pulldown-left-bg","deco-pulldown-hover-left-bg");
            item.child(".deco-pulldown-menu-child").replaceClass("deco-pulldown-right-bg","deco-pulldown-hover-right-bg");
        });
        mchild.on("mouseout", function(e,t) {
            var item = Ext.get(this.id);
            item.replaceClass("deco-pulldown-hover-left-bg","deco-pulldown-left-bg");
            item.child(".deco-pulldown-menu-child").replaceClass("deco-pulldown-hover-right-bg","deco-pulldown-right-bg");
        });
        mchild.on("click", function(e,t) {
            com.lefthandle.deco.obj.livedoorPost();
        });
        var mitem = "<div id='deco-pulldown-menu-4' class='deco-pulldown-menu  deco-pulldown-left-bg'></div>";

        var sitem = "<span class='deco-pulldown-menu-child deco-pulldown-right-bg'>";
        sitem += "<img src='http://cdn.lefthandle.com/icons/16x16/nifty.gif' width='16' heigth='16' style='vertical-align: bottom; margin-right: 2px;' />";
        
        sitem += "ニフティクリップ";
        sitem += "</span>";
        var mchild = pulldown.createChild(mitem);
        mchild.createChild(sitem);
        mchild.on("mouseover", function(e,t) {
            var item = Ext.get(this.id);
            item.replaceClass("deco-pulldown-left-bg","deco-pulldown-hover-left-bg");
            item.child(".deco-pulldown-menu-child").replaceClass("deco-pulldown-right-bg","deco-pulldown-hover-right-bg");
        });
        mchild.on("mouseout", function(e,t) {
            var item = Ext.get(this.id);
            item.replaceClass("deco-pulldown-hover-left-bg","deco-pulldown-left-bg");
            item.child(".deco-pulldown-menu-child").replaceClass("deco-pulldown-hover-right-bg","deco-pulldown-right-bg");
        });
        mchild.on("click", function(e,t) {
            com.lefthandle.deco.obj.niftyPost();
        });
        var mchild = pulldown.createChild("<div class='deco-pulldown-separator'></div>");
        var mitem = "<div id='deco-pulldown-menu-6' class='deco-pulldown-menu  deco-pulldown-left-bg'></div>";

        var sitem = "<span class='deco-pulldown-menu-child deco-pulldown-right-bg'>";
        sitem += "<img src='http://cdn.lefthandle.com/icons/silkicon/book.png' width='16' heigth='16' style='vertical-align: bottom; margin-right: 2px;' />";
        
        sitem += "ブラウザにブックマーク";
        sitem += "</span>";
        var mchild = pulldown.createChild(mitem);
        mchild.createChild(sitem);
        mchild.on("mouseover", function(e,t) {
            var item = Ext.get(this.id);
            item.replaceClass("deco-pulldown-left-bg","deco-pulldown-hover-left-bg");
            item.child(".deco-pulldown-menu-child").replaceClass("deco-pulldown-right-bg","deco-pulldown-hover-right-bg");
        });
        mchild.on("mouseout", function(e,t) {
            var item = Ext.get(this.id);
            item.replaceClass("deco-pulldown-hover-left-bg","deco-pulldown-left-bg");
            item.child(".deco-pulldown-menu-child").replaceClass("deco-pulldown-hover-right-bg","deco-pulldown-right-bg");
        });
        mchild.on("click", function(e,t) {
            com.lefthandle.deco.obj.doBookmark();
        });
        

        var child = toolbar.createChild("<div class='deco-sep' style='display:none;'></div>");
        com.lefthandle.deco.obj.itemset.push(child.id);
        var content = "<div class='deco-button deco-button-left-bg deco-atode' style='display:none;'><span class='deco-button-right-bg'>";
        content += "<img src='http://cdn.lefthandle.com/icons/silkicon/page.png' width='16' heigth='16' style='vertical-align: bottom; margin-right: 2px;' />";
        
        content += "あとでよむ";
        content += "</span></div>";
        var child = toolbar.createChild(content);
        com.lefthandle.deco.obj.itemset.push(child.id);
        child.on("mouseover", function(e,t) {
            this.replaceClass("deco-button-left-bg","deco-button-hover-left-bg");
            this.child("span").replaceClass("deco-button-right-bg","deco-button-hover-right-bg");
        });
        child.on("mouseout", function(e,t) {
            this.replaceClass("deco-button-hover-left-bg","deco-button-left-bg");
            this.child("span").replaceClass("deco-button-hover-right-bg","deco-button-right-bg");
        });
        child.on("click", function(e,t) {
            com.lefthandle.deco.obj.showPulldown(t);
        });
        var pulldown = Ext.getBody().createChild("<div id='deco-pulldown-3' class='deco-pulldown2'><div class='deco-pulldown-closer'><a href='javascript: com.lefthandle.deco.obj.showPulldown(\""+child.id+"\");'><img src='http://cdn.lefthandle.com/icons/silkicon/cross.png' width='8' height='8' /></a></div></div>");
        com.lefthandle.deco.obj.pulldownset.push([child.id,pulldown.id]);
        var mitem = "<input id='deco-atode-button' type='button' value='あとでよむに追加' onclick='com.lefthandle.deco.obj.addAtode()' />";
        mitem += "<div id='deco-atode-listbox'>";
        mitem += "<ul id='deco-atode-list'>";
        mitem += "<li id='deco-atode-empty'>（まだありません）</li>";
        mitem += "</ul>";
        mitem += "</div>"
        var mchild = pulldown.createChild(mitem);
        
        var content = "<div class='deco-urlman deco-button-left-bg' style='display:none;'><span class='deco-button-right-bg'>";
        content += "<img src='http://cdn.lefthandle.com/icons/silkicon/link.png' width='16' heigth='16' style='vertical-align: bottom; margin-right: 2px;' />";
        
        content += "URLマネージャ";
        content += "</span></div>";
        var child = toolbar.createChild(content);
        com.lefthandle.deco.obj.itemset.push(child.id);
        child.on("mouseover", function(e,t) {
            this.replaceClass("deco-button-left-bg","deco-button-hover-left-bg");
            this.child("span").replaceClass("deco-button-right-bg","deco-button-hover-right-bg");
        });
        child.on("mouseout", function(e,t) {
            this.replaceClass("deco-button-hover-left-bg","deco-button-left-bg");
            this.child("span").replaceClass("deco-button-hover-right-bg","deco-button-right-bg");
        });
        child.on("click", function(e,t) {
            com.lefthandle.deco.obj.showPulldown(t);
        });
        var pulldown = Ext.getBody().createChild("<div id='deco-pulldown-4' class='deco-pulldown'><div class='deco-pulldown-closer'><a href='javascript: com.lefthandle.deco.obj.showPulldown(\""+child.id+"\");'><img src='http://cdn.lefthandle.com/icons/silkicon/cross.png' width='8' height='8' /></a></div></div>");
        com.lefthandle.deco.obj.pulldownset.push([child.id,pulldown.id]);
        var mitem = "<div id='deco-pulldown-menu-6' class='deco-pulldown-menu'><div>";
        mitem += "<div class='deco-urlman-label'>指定URL:</div>";
        mitem += "<input type='text' id='deco-url' class='deco-urlman-input' value='' />";
        mitem += "<div class='deco-urlman-label'>Canonical URL:</div>";
        mitem += "<input type='text' id='deco-url-canonical' class='deco-urlman-input' value='' />";
        mitem += "<div class='deco-urlman-label'>Short URL:</div>";
        mitem += "<input type='text' id='deco-url-shorturl' class='deco-urlman-input' value='' />";
        mitem += "</div></div>";
        var mchild = pulldown.createChild(mitem);
        com.lefthandle.deco.obj.getCanonicalUrl();
        

        toolbar.createChild("<div style='clear:both'></div>");
        com.lefthandle.deco.obj.toolbar = toolbar;
        var show = new Ext.util.DelayedTask(com.lefthandle.deco.obj.showItems);
        show.delay(1000);
    },

    showItems: function() {
        //com.lefthandle.deco.obj.toolbar.setStyle("display","block");
        com.lefthandle.deco.obj.toolbar.show(true);
        for(var i=0;i<com.lefthandle.deco.obj.itemset.length;i++) {
            var item = Ext.get(com.lefthandle.deco.obj.itemset[i]);
            item.setStyle("display","block");
        }
    },

    addAtode: function() {
        var url = com.lefthandle.deco.obj.getCanonicalUrl();
        com.lefthandle.deco.JSONP.request("http://deco.lefthandle.net/addAtode/",{
            callbackKey: 'callback',
            params: {
                url: url,
                title: document.title,
                token: "7ebc61106a154442"
            },
            callback: function(data) {
                if(data.result==1) {
                    // add url to list 
                    var mitem = "<li class='deco-atode-item'><a href='"+data.url+"' target='_blank' title='"+data.title+"'>"+data.title+"</a>&nbsp;<a class='deco-atode-delete' href='javascript: com.lefthandle.deco.obj.deleteAtode(\""+data.title+"\",\""+data.url+"\");'>(削除)</a></li>";
                    if(Ext.get("deco-atode-empty")!=undefined) {
                        Ext.get("deco-atode-empty").remove();
                    }
                    Ext.get("deco-atode-list").createChild(mitem);
                    var list = Ext.query("#deco-atode-list .deco-atode-item");
                    if(list.length==1) {
                        var b = Ext.query(".deco-atode");
                        Ext.get(b[0]).addClass("deco-atode-havelist");
                    }
                }
            }
        });
    },

    deleteAtode: function(title,url) {
        com.lefthandle.deco.JSONP.request("http://deco.lefthandle.net/removeAtode/",{
            callbackKey: 'callback',
            params: {
                url: url,
                title: title,
                token: "7ebc61106a154442"
            },
            callback: function(data) {
                if(data.result==1) {
                    // delete url from list
                    var list = Ext.query("#deco-atode-list .deco-atode-item");
                    for(var i=0;i<list.length;i++) {
                       var aitem = list[i].firstChild;
                       if(aitem.href==url) {
                           Ext.get(list[i]).remove();
                           if(list.length==1) {
                              mitem = "<li id='deco-atode-empty'>（まだありません）</li>";
                              Ext.get("deco-atode-list").createChild(mitem);

                              var b = Ext.query(".deco-atode");
                              Ext.get(b[0]).removeClass("deco-atode-havelist");
                           }
                           break;
                       }
                    }
                }
            }
        });
    },
        
    twitterPost: function() {
        var twitterid = "rhosoi";
        var hashtag = "ryocom";

        if(!twitterid) {
            return;
        }

        var canonicalurl = com.lefthandle.deco.obj.getCanonicalUrl();
        var url="http://twitter.com/home?status=";
        if(hashtag!="") {
            url += encodeURIComponent("#"+hashtag+" ");
        }
        url += encodeURIComponent(document.title+" "+canonicalurl);
        url += encodeURIComponent(" (via @"+twitterid+")");
        var a = function(){
            if(!window.open(url,'_blank')) {
                location.href=url;
            }
        };
        if(/Firefox/.test(navigator.userAgent)){
            setTimeout(a,0);
        } else {
            a();
        }
    },

    deliciousPost: function() {
        var canonicalurl = com.lefthandle.deco.obj.getCanonicalUrl();
        var url = "http://delicious.com/post?url="+encodeURIComponent(canonicalurl)+"&amp;title="+document.title;
        var a = function(){
            if(!window.open(url,'_blank')) {
                location.href=url;
            }
        };
        if(/Firefox/.test(navigator.userAgent)){
            setTimeout(a,0);
        } else {
            a();
        }
    },

    yahooPost: function() {
        var canonicalurl = com.lefthandle.deco.obj.getCanonicalUrl();
        var url = "http://bookmarks.yahoo.co.jp/bookmarklet/showpopup?t="+document.title+"&amp;u="+encodeURIComponent(canonicalurl)+"&amp;opener=bm&amp;ei=UTF-8"
        var a = function(){
            if(!window.open(url,'popup','width=550px,height=480px,status=1,location=0,resizable=1,scrollbars=0,left=100,top=50',0)) {
                location.href=url;
            }
        };
        if(/Firefox/.test(navigator.userAgent)){
            setTimeout(a,0);
        } else {
            a();
        }
    },

    hatenaPost: function() {
        var canonicalurl = com.lefthandle.deco.obj.getCanonicalUrl();
        var url = "http://b.hatena.ne.jp/append?"+encodeURIComponent(canonicalurl);
        var a = function(){
            if(!window.open(url,'_blank')) {
                location.href=url;
            }
        };
        if(/Firefox/.test(navigator.userAgent)){
            setTimeout(a,0);
        } else {
            a();
        }
    },

    livedoorPost: function() {
        var canonicalurl = com.lefthandle.deco.obj.getCanonicalUrl();
        var url = "http://clip.livedoor.com/clip/add?link="+encodeURIComponent(canonicalurl)+"&amp;title="+document.title+"&amp;jump=ref";
        var a = function(){
            if(!window.open(url,'_blank')) {
                location.href=url;
            }
        };
        if(/Firefox/.test(navigator.userAgent)){
            setTimeout(a,0);
        } else {
            a();
        }
    },

    niftyPost: function() {
        var canonicalurl = com.lefthandle.deco.obj.getCanonicalUrl();
        var url = "http://clip.nifty.com/create?url="+encodeURIComponent(canonicalurl)+"&amp;title="+document.title;
        var a = function(){
            if(!window.open(url,'_blank')) {
                location.href=url;
            }
        };
        if(/Firefox/.test(navigator.userAgent)){
            setTimeout(a,0);
        } else {
            a();
        }
    },

    doBookmark: function() {
        if(Ext.isIE) {
            window.external.AddFavorite(com.lefthandle.deco.obj.getCanonicalUrl(),document.title);
        } else {
            window.sidebar.addPanel(document.title,com.lefthandle.deco.obj.getCanonicalUrl(),'');
        }
    },

    showPulldown: function(target) {
        var pulldown = "";

        var item = Ext.get(target).parent();
        for(var i=0;i<com.lefthandle.deco.obj.pulldownset.length;i++) {
            if(com.lefthandle.deco.obj.pulldownset[i][0]==item.id) {
                pulldown = Ext.get(com.lefthandle.deco.obj.pulldownset[i][1]);
                break;
            }
        }
        if(pulldown=="") {
            var item = Ext.get(target);
            for(var i=0;i<com.lefthandle.deco.obj.pulldownset.length;i++) {
                if(com.lefthandle.deco.obj.pulldownset[i][0]==item.id) {
                    pulldown = Ext.get(com.lefthandle.deco.obj.pulldownset[i][1]);
                    break;
                }
            }
        }

        if(pulldown) {
            if(pulldown.getTop()==0) {
                var ppos = item.getXY();
                if(item.getStyle("float")=="left") {
                    pulldown.setLeft(ppos[0]);
                    pulldown.setTop(ppos[1]+item.getHeight());
                } else {
                    if(pulldown.dom.className=="deco-pulldown-logo") {
                        pulldown.setLeft(ppos[0]-(315-item.getWidth()));
                    } else {
                        pulldown.setLeft(ppos[0]-item.getWidth());
                    }
                    pulldown.setTop(ppos[1]+item.getHeight());
                }
            }
            com.lefthandle.deco.obj.slideToggle(pulldown);
        }
    },

    slideToggle: function(e) {
		if(e.isVisible()) {
            e.slideOut('t',{
			    useDisplay:true
            });
        } else {
            e.slideIn('t',{
                useDisplay:true
            });
		}
    },

    getCanonicalUrl: function() {
        if(com.lefthandle.deco.obj.shorturl!="") {
            return com.lefthandle.deco.obj.shorturl;
        }
        if(com.lefthandle.deco.obj.canonicalurl!="") {
            return com.lefthandle.deco.obj.canonicalurl;
        }
        if(com.lefthandle.deco.obj.specifyurl!="") {
            return com.lefthandle.deco.obj.specifyurl;
        }        

        // specify url
        com.lefthandle.deco.obj.specifyurl = document.location.href;

        // canonical url
        var links = Ext.query("link");
        for(var i=0;i<links.length;i++) {
            if(links[i].rel=="canonical") {
                com.lefthandle.deco.obj.canonicalurl = links[i].href;
                break;
            }
        }        


        var url = (com.lefthandle.deco.obj.canonicalurl)?com.lefthandle.deco.obj.canonicalurl:com.lefthandle.deco.obj.specifyurl;
        com.lefthandle.deco.JSONP.request("http://api.bit.ly/shorten",{
             callbackKey: 'callback',
             params: {
                version: "2.0.1",
                format: "json",
                longUrl: url,
                login: com.lefthandle.deco.obj.bitlyid,
                apiKey: com.lefthandle.deco.obj.bitlyapikey,
                history: 1
            },
            callback: function(data) {
                com.lefthandle.deco.obj.shorturl = eval("data.results['"+url+"'].shortUrl");
                Ext.get("deco-url-shorturl").dom.value = com.lefthandle.deco.obj.shorturl;
            }
        });

        Ext.get("deco-url").dom.value = com.lefthandle.deco.obj.specifyurl;
        Ext.get("deco-url-canonical").dom.value = com.lefthandle.deco.obj.canonicalurl;
    }
}

/**
 * create com.lefthandle.deco.Toolbar object
 */
com.lefthandle.deco.obj = new com.lefthandle.deco.Toolbar();

/**
 * start point
 */
if(Ext.isIE) {
    window.attachEvent("onload", function() {
        // load css
        var link = document.createElement("link");
        link.setAttribute("rel", "stylesheet");
        link.setAttribute("href", "http://deco.lefthandle.net/css/preset/black/style.css");
        link.setAttribute("type", "text/css");
        document.getElementsByTagName('head')[0].appendChild(link);

        // waiting for loading css
        var count = 0;
        while(1) {
            if(count >= 1000) {
                break;
            }
            var found = false;
            for(var i=0;document.styleSheets.length;i++) {
                if(document.styleSheets[i].href=="http://deco.lefthandle.net/css/preset/black/style.css") {
                    found = true;
                    break;
                }
            }
            if(found) {
                break;
            }
            count ++;
        }
        
        // initialize toolbar
        com.lefthandle.deco.obj.init();
    });
} else {
    Ext.onReady( function() {
        // load css
        Ext.get(document.getElementsByTagName('head')[0]).createChild({
            tag: 'link',
            href: "http://deco.lefthandle.net/css/preset/black/style.css",
            rel: 'stylesheet',
            type: 'text/css'
        });

        // waiting for loading css
        var count = 0;
        while(1) {
            if(count >= 1000) {
                break;
            }
            var found = false;
            for(var i=0;document.styleSheets.length;i++) {
                if(document.styleSheets[i].href=="http://deco.lefthandle.net/css/preset/black/style.css") {
                    found = true;
                    break;
                }
            }
            if(found) {
                break;
            }
            count ++;
        }
    
        // initialize toolbar
        com.lefthandle.deco.obj.init();
    });
}
