// common
function parse_json(text){
    var res = null;
    try{
        res = eval("(" + text + ")");
    } catch(e){
        return null;
    }
    return res;
}

Event.observe(window, 'load', function(){
    new Ajax.Request(
        __load_url,
        {
            method: 'get',
            parameters: create_parameters(),
            evalJS: false,
            onComplete: replace_tags
        }
    );
});

function create_parameters() {
    var result = __load_parameters;
    return result;
}

// myfolder処理
// パラメータ情報
// 0: id
// 1: 登録の有無
// 2: トークン
function replace_myfolder(myfolders, request_path) {
  request_path = request_path || "";
  for(var i=0; i<myfolders.length; ++i) {
    var tagid = "myfolder_recipe_"+myfolders[i][0];
    var id = myfolders[i][0];
    var inFolder = myfolders[i][1];
    var token = myfolders[i][2];

    if (login_user()) {
      if(inFolder == null) {
        //キャッシュの遅れが原因で存在しないレシピを参照する事がある
        //nothing;
      } else if (inFolder == true) {
        $(tagid).innerHTML = "<a title='MYフォルダから出す' onclick='new Ajax.Request(\"/myfolder/remove_recipe?recipe_id=" + id + "&amp;tk=" + token + "&amp;update_field=myfolder_recipe_" + id + "\", {asynchronous:true, evalScripts:true}); return false;' href='#'><img src='/images/shared/folder_out.gif' alt='MYフォルダから出す'/></a>";
      } else {
        $(tagid).innerHTML = "<a title='MYフォルダに入れる' onclick='new Ajax.Request(\"/myfolder/add_recipe?recipe_id=" + id + "&amp;tk=" + token + "&amp;update_field=myfolder_recipe_" + id + "\", {asynchronous:true, evalScripts:true}); return false;' href='#'><img src='/images/shared/folder_in.gif' alt='MYフォルダに入れる'/></a>";
      }
    } else {
       $(tagid).innerHTML = "<a href='/login?rt=" + request_path + "' title='MYフォルダに入れる'><img alt='MYフォルダに入れる' src='/images/shared/folder_in.gif'></a>";
    }
  }
}

function login_user() {
  var user_type = CookieAccessor.get("user_type")
  return (user_type == "1" || user_type == "2") ? true : false;
}

function replace_tags(original_request) {
    var json = parse_json(original_request.responseText.replace(/^while\(1\);/, ''));
    if(json == null) {
        // エラー処理
        return;
    }

    var ad_funcs = [];
    var ad_size = 0;

    $H(__replace_table).keys().each(function(replace_key) {
        var replace_info = __replace_table[replace_key];
        var load_info = json[replace_key];
        if(!load_info) return;

        if(replace_info == '1') {
            new Insertion.Bottom(replace_key, load_info);
        }

        else {
            var ad_func = function(){
                replace_info.each(function(replace_item){
                    var htmls_for_id = load_info[replace_item.id];
                    if(htmls_for_id == null) {
                        // 取得に失敗してる。
                        return;
                    }

                    if(replace_item.id == 9) {
                        replace_top_tieup(htmls_for_id, replace_item);
                    }
                    else {
                        ad_size ++;
                        replace_htmls(htmls_for_id, replace_item);
                    }
                });
            }
            ad_funcs.push(ad_func);
        }
    });

    show_bottom_impact_banner(json);
    hide_text_ad_wrapper(json);

    ad_funcs.each(function(func){func();});
    if(ad_size > 0){
        $('goiken-box').style.marginTop = '20px';
    }

    // 0924_adtest
    if(json["0924_adtest"] && $('0924_adtest')){
        $('0924_adtest').innerHTML = json["0924_adtest"];
    }

    // ジャックパッケージのマージン処理
    if(!additional_ads_visible(json, [105]) &&
       $('jack_package_bottom') &&
       !Prototype.Browser.IE
      ){
        $('jack_package_bottom').style.margin = '20px';
    }

    if (json["myfolders"]) { replace_myfolder(json["myfolders"], json["request_path"])  }
}

function additional_ads_visible(json, flagged_ad_keys){
    if(!json['ad'])
        return false;

    // 検索連動,ジャック
    // var flagged_ad_keys = ['104', '105'];
    return !flagged_ad_keys.any(function(flagged_key){
        return !!json['ad'][flagged_key]
    });
}

function show_bottom_impact_banner(json){
    var bottom_impact_ad = $('bottom_impact_ad')
    if(!bottom_impact_ad) { return; }
    if(additional_ads_visible(json, [104, 105]) &&
       bottom_impact_ad){
        bottom_impact_ad.style.margin = '30px';
        bottom_impact_ad.innerHTML = '<iframe src="/iframes/impact_ad.html" width="728px" height="90px" frameborder="0px" scrolling="no" style="border: 0px;"></iframe>';
    }
}

function hide_text_ad_wrapper(json){
    var text_ad_wrapper = $('cpc_100_text_wrapper');
    if(!text_ad_wrapper) { return; }
    if(!additional_ads_visible(json, [104]) &&
       text_ad_wrapper){
        text_ad_wrapper.style.display = 'none';
        // イベントバナー対応
        if($('20090601_event_banner_01'))
            $('20090601_event_banner_01').style.display = 'none';
        if($('20090601_event_banner_02'))
            $('20090601_event_banner_02').style.display = 'none';
    }
}

function replace_top_tieup(htmls, replace_item) {
    var TOP_TIEUP_COLUMN_SIZE = 4;
    htmls.each(function(html, index){
        var div_id = replace_item.div_id + '-' + index;
        var class_name = 'tieup-banner';
        html = [
            '<div id=',div_id,' class="',class_name,'">',
            html,
            '</div>'
        ].join('');
        if((index+1) % TOP_TIEUP_COLUMN_SIZE == 0) {
            html += '<div class="clear"></div>';
        }
        new Insertion.Bottom(replace_item.div_id, html);
    });
}

/*
swf広告ストラテジ
DBで&nbsp;<script defer='defer;'>必須

IEの場合
1) document.writeを空functionで上書きして書き込みを抑制し、innerHTMLに挿入する
# 抑制しないと2回書き込みかつ1回目でdocument rootに書き込まれてしまう
2) reEvalでscriptタグを取得してdocument.writeをさらに上書きして書き込む
# この際に&nbsp; / deferをやってないとscriptタグが取得できない

Fx、その他の場合
1) innerHTMLに挿入する
2) reEval

問題点
IEの場合明らかに2度走ってる。
*/
document._write = function(){};

function toggleDocumentWrite(){
    var tmp = document.write;
    document.write = document._write;
    document._write = tmp;
}

function replace_htmls(htmls, replace_item) {
    htmls.each(function(html, index){
        var wrapper_div_id = replace_item.div_id + '-' + index;
        var wrapper_html = [
            "<div id='",wrapper_div_id,"' class='test'>",'</div>'
        ].join('');
        new Insertion.Bottom(replace_item.div_id, wrapper_html);

        if(html.indexOf('swf') >= 0){
            if(Prototype.Browser.IE){
                toggleDocumentWrite();
                window._ad_target = $(wrapper_div_id);
                $(wrapper_div_id).innerHTML = html;
                toggleDocumentWrite();
            }else{
                $(wrapper_div_id).innerHTML = html;
            }
            reEval($(wrapper_div_id));
            $(wrapper_div_id).style.fontSize = '0';
        }else{
            $(wrapper_div_id).innerHTML = html;
        }

    });
}

function reEval(target){
    var tmp_write = document.write;
    var scripts = $A(target.getElementsByTagName('script'));

    document.write = function(){
        var _span = document.createElement('span');
        _span.innerHTML = $A(arguments).join('');
        _tmp_script.parentNode.appendChild(_span, _tmp_script);
    };

    scripts.each(
        function(script){
            window._tmp_script = script;
            eval(script.text);
        }
    );
    document.write = tmp_write;
}
