var loadedSearchFrame;
function loadSearchQuery(callback) {
    var ref = getReferer();
    if(!ref) return;
    var SearchEngineList = [
        {
            name: 'google',
            regexp: '^http://www\.google\.(co\.jp|com)',
            query: 'q',
            input_enc_key: 'ie',
            input_enc: ''
        },
        {
            name: 'yahoo',
            regexp: '^http://search\.yahoo\.(co\.jp|com)',
            query: 'p',
            input_enc_key: 'ei',
            input_enc: ''
        },
        {
            name: 'debug',
            regexp: '^http://localhost',
            query: 'q',
            input_enc_key: 'ienc',
            input_enc: ''
        },
        {
            name: 'msn',
            regexp: '^http://search\.(msn\.co\.jp|live\.com)/results\.aspx',
            query: 'q',
            input_enc_key: '',
            input_enc: 'utf-8'
        },
        {
            name: 'baidu',
            regexp: '^http://www\.baidu\.jp/s',
            query: 'wd',
            input_enc_key: 'ie',
            input_enc: ''
        },
        {
            name: 'goo',
            regexp: '^http://search\.goo\.ne\.jp/web\.jsp',
            query: 'MT',
            input_enc_key: 'IE',
            input_enc: 'utf-8'
        },
        {
            name: 'nifty',
            regexp: '^http://search\.nifty\.com/websearch/search',
            query: 'q',
            input_enc_key: '',
            input_enc: 'utf-8'
        },
        {
            name: 'infoseek',
            regexp: '^http://search\.www\.infoseek\.co\.jp/Web',
            query: 'qt',
            input_enc_key: '',
            input_enc: 'utf-8'
        }
    ];
    for(var i = 0; i < SearchEngineList.length; i++) {
        if(ref.match(SearchEngineList[i].regexp)) {
            var params = parseQuery(ref);
            var query = params[SearchEngineList[i].query];
            var input_enc = params[SearchEngineList[i].input_enc_key]
                          || SearchEngineList[i].input_enc
                          || 'utf-8';
            var engine_name = SearchEngineList[i].name;
            if(callback && query && engine_name) {
                callback(query, input_enc, engine_name);
            }
        }
    }

    function parseQuery(str){
        var params = new Object();
        if(typeof(str) == 'undefined') return params;
        if(str.indexOf('?', 0) > -1) str = str.split('?')[1];
        var pairs = str.split('&');
        for(var i = 0; i < pairs.length; i++){
            var pair = pairs[i].split("=");
            if(pair[0] != ''){
                var val = pair[1].replace(/\+/g, ' ');
                params[pair[0]] = decodeURIComponent(val);
            }
        }
        return params;
    }

    function getReferer() {
        var d = document;
        var w = window;
        var ref = '';
        if(w.self == w.parent) {
            var u = d.referrer;
            ref = d.referrer;
            if(d.parent && d.parent != undefined)
                ref = d.parent.referrer;
            if(ref.match(/^(undefined|unknown|bookmark)$/i))
                ref = '';
        }
        return ref;
    }
}

function createFrame(str, input_enc, engine_name) {
    if (!str) return;
    if (input_enc != 'utf-8' && input_enc != 'UTF-8' && engine_name != 'google') return;
    var search_url = 'http://search.livedoor.com/search/';
    var search_id = 'artemisjs_sl';
    var image_base_url = 'http://parts.blog.livedoor.jp/img/static/search_frame/';
    var iframe = document.createElement("iframe");
    iframe.frameBorder           = 0;
    iframe.id                    = 'search_frame';
    iframe.allowTransparency     = 'true';
    iframe.style.zIndex          = 2;
    iframe.style.position        = 'absolute';
    iframe.style.top             = '5px';
    iframe.style.right           = '5px';
    iframe.style.height          = '87px';
    iframe.style.width           = '237px';
    iframe.style.margin          = 0;
    iframe.style.scrolling       = 'no';
    document.getElementsByTagName("body")[0].appendChild(iframe);

    var iframedoc = document.all ? iframe.contentWindow.document : iframe.contentDocument;
    iframedoc.open();
    iframedoc.writeln('<?xml version="1.0" encoding="' + input_enc + '"?>'
                   + '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" '
                   + '"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
                   + '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">'
                   + '<head>'
                   + '<meta http-equiv="Content-Type" content="text/html; charset='
                   + input_enc
                   + '" />'
                   + '<meta http-equiv="Content-Style-Type" content="text/css" />'
                   + '<meta http-equiv="Content-Script-Type" content="text/javascript" />'
                   + '<style type="text/css">'
                   + '* { margin: 0; padding: 0; }'
                   + 'html { position:absolute; top:0; left:0;}'
                   + 'body { font-weight: bold; background-color: transparent; position:absolute; top:0; left:0;}'
                   + 'a { text-decoration: none; position: relative; z-index: 4; }'
                   + 'a img { border: none; }'
                   + 'div.searchFrame { width: 235px; height: 87px; word-break: break-all; word-wrap: break-word; overflow: hidden; background-image: url(' + image_base_url + 'frame.png); background-repeat: no-repeat; }'
                   + 'div.searchframe { width: 237px; height: 87px; background: none; position: absolute; top: 0px; left: 0px; }'
                   + 'div.searchframetrick { width: 237px; height: 87px; filter:Progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=crop,src=' + image_base_url + 'frame.png); background: none; position: absolute; top: 0px; left: 0px; }'
                   + 'a.help_btn { position: absolute; right: 24px; top: 5px; z-index: 3; }'
                   + 'a.close_btn { position: absolute; right: 5px; top: 5px; z-index: 3; }'
                   + 'p.more { font-size: 14px; position: absolute; top: 14px; left: 15px; z-index: 1; }'
                   + 'p.more a { color: #fff; }'
                   + 'a.re-search { display: block; position: relative; z-index: 2; width: 235px; height: 87px; text-align: center; text-decoration: underline; }'
                   + 'a.re-search span { display: block; padding-top: 34px; padding-left: 15px; text-align: left; }'
                   + '</style>'
                   + '</head>'
                   + '<body>'

                   + '<div class="searchFrameTrick"></div>'
                   + '<div class="searchFrame">'
                   + '<a href="http://helpguide.livedoor.com/help/blog/qa/grp447#3863" class="help_btn" target="_parent"><img src="' + image_base_url + 'help.gif" width="17" height="16" /></a>'
                   + '<a href="javascript:void(0);" onclick="var d = parent.window.document; var search_frame = d.getElementById(\'search_frame\'); search_frame.parentNode.removeChild(search_frame);"  class="close_btn"><img src="' + image_base_url + 'close.gif" width="17" height="16" /></a>'
                   + '<p class="more">'
                   + '<a href="' + search_url + '?c=' + search_id + '&ie=' + input_enc + '&q=' + encodeURIComponent(str) + '" target="_parent">'
                   + decodeURIComponent('%E3%81%95%E3%82%89%E3%81%AB%E6%A4%9C%E7%B4%A2%CE%B2')
                   + '</a>'
                   + '</p>'
                   + '<a href="' + search_url + '?c=' + search_id + '&ie=' + input_enc + '&q=' + encodeURIComponent(str) + '" target="_parent" class="re-search">'
                   + '<span>'
                   + str
                   + '</span>'
                   + '</a>'
                   + '</div>'
                   + '</body></html>' );
    iframedoc.close();
}

function showSearchFrame() {
    if (!loadedSearchFrame) {
        loadedSearchFrame = 1;
        loadSearchQuery(function(query, input_enc, engine_name) {
            createFrame(query, input_enc, engine_name);
        });
    }
};

function addLoadEvent(func) {
    if(typeof window.addEventListener == 'function'){
        window.addEventListener('load', func, false);
        return true;
    } else if(typeof window.attachEvent == 'object'){
        window.attachEvent('onload', func);
        return true;
    }

    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            oldonload();
            func();
        };
    }
}

addLoadEvent(showSearchFrame);

