/**
 *  init
 */
jQuery(document).ready(function($) {
    $().click(unblock_handler);
    init_blockUI_option();
});

/**
 *  init blockUI option
 */
var inited_blockUI = false;
function init_blockUI_option() {
    // blockUI option
    if (document.body.id == "partslist") {
        $.extend($.blockUI.defaults.overlayCSS, { backgroundColor: '#930' });
        $.blockUI.defaults.pageMessage = "<h1 class=\"framebutton\">パーツを選択</h1>";
    } else if (document.body.id == "calc") {
        $.extend($.blockUI.defaults.overlayCSS, { backgroundColor: '#393' });
        $.blockUI.defaults.pageMessage = "<h1 class=\"framebutton\">パーツの合計金額を確認</h1>";
    } else if (document.body.id == "kakaku") {
        $.extend($.blockUI.defaults.overlayCSS, { backgroundColor: '#001789' });
        $.blockUI.defaults.pageMessage = "<h1 class=\"framebutton\">価格.com</h1>";
    }
    $.blockUI.defaults.closeMessage = "このフレームを開く";
    $.blockUI.defaults.fadeIn = false;
    $.blockUI.defaults.fadeOut = false;
    $.extend($.blockUI.defaults.overlayCSS, { cursor: 'pointer' });
    $.extend($.blockUI.defaults.pageMessageCSS, { cursor: 'pointer', padding: '1px', top: '0', left: '35%', margin: '0' });
    inited_blockUI = true;
}

/**
 *  指定フレームを開く
 */
function frameopen(event, name) {
    if (parent.current_window == name) {
        return false;
    }
    if (!inited_blockUI) {
        init_blockUI_option();
    }
    var linktag = null;
    event = jQuery.event.fix( event || window.event || {} );
    var target = event.target;
    while (target) {
        if (target.tagName && target.tagName.toUpperCase() == 'A') {
            event.preventDefault();
            event.stopPropagation();
            linktag = target;
            break;
        }
        target = target.parentNode;
    }
    var frameset1 = parent.document.getElementById("topframe");
    if (name == "navi") {
        frameset1.rows = get_frame_rows(0);
        unblock_this_page("navi");
        block_this_page("calc");
        block_this_page("kakaku");
    } else if (name == "calc") {
        frameset1.rows = get_frame_rows(1);
        block_this_page("navi");
        unblock_this_page("calc");
        block_this_page("kakaku");
    } else if (name == "kakaku") {
        var open_flg = false;
        if (linktag) {
            var matches = linktag.id.match(/link_(\d+)_(\d+)/);
            if (matches) {
                parent.kakaku.open_tab(matches[1], matches[2], linktag.href);
                open_flg = true;
            }
        }
        if (!open_flg) {
            var pos = parent.kakaku.current_pos + parent.kakaku.pos_offset;
            frameset1.rows = get_frame_rows(pos);
        }
        block_this_page("navi");
        block_this_page("calc");
        unblock_this_page("kakaku");
    } else {
        frameset1.rows = get_frame_rows(name);
        block_this_page("navi");
        block_this_page("calc");
        unblock_this_page("kakaku");
    }
    parent.current_window = name;
}

/**
 *  framesetのrowsを返す。
 */
function get_frame_rows(pos, count_offset) {
    var rows = [];
    var frame_count = get_frame_count();
    if (count_offset) {
        frame_count += count_offset;
    }
    for (var i = 0; i < frame_count; i++) {
        if (i == pos) {
            rows.push("100%");
        } else if (i == 2 && pos > 2) {
            rows.push(get_kakaku_tabs_height());
        } else if (i < 3) {
            rows.push("30");
        } else {
            rows.push("0");
        }
    }
    return rows.join(",");
}

/**
 *  frameの数を返す。
 */
function get_frame_count() {
    var frameset = parent.document.getElementById("topframe");
    return $(frameset).children("frame").size();
}

/**
 *  価格.comのタブの高さを返す。
 */
function get_kakaku_tabs_height() {
    if (parent.kakaku && parent.kakaku.document.getElementById("tabs")) {
        var tabs = parent.kakaku.document.getElementById("tabs");
        var ul = tabs.getElementsByTagName("ul")[0];
        return ul.clientHeight;
    }
    return 30;
}

/**
 *  現在開いているフレームを返す。
 */
function get_current_frame() {
    var frameset = parent.document.getElementById("topframe");
    var rows = frameset.rows.split(",");
    for (var i = 0; i < rows.length; i++) {
        if (rows[i] == "100%") {
            return i;
        }
    }
    return 0;
}

/**
 *  マスククリックでマスクを解除するためのハンドラ
 */
function unblock_handler(e) {
    if ((e.keyCode && e.keyCode == 27) || (e.type == 'click')) {
        frameopen(e, window.name);
    }
    return true;
}

/**
 *  指定のページ（フレーム）をマスクする。
 */
function block_this_page(target) {
    if (eval("parent." + target).document.body) {
        eval("parent." + target).block_page();
    } else {
        setTimeout(function(){
            block_this_page(target);
        }, 200);
    }
}

/**
 *  指定のページ（フレーム）のマスクを解除する。
 */
function unblock_this_page(target) {
    if (eval("parent." + target).document.body) {
        eval("parent." + target).unblock_page();
    } else {
        setTimeout(function(){
            unblock_this_page(target);
        }, 200);
    }
}

/**
 *  現在のページ（フレーム）をマスクする。
 */
function block_page() {
    $.blockUI();
    $("body").data("blocked", true).css("padding-top", "30px");
}

/**
 *  現在のページ（フレーム）のマスクを解除する。
 */
function unblock_page() {
    if ($("body").data("blocked")) {
        $.unblockUI();
        $("body").data("blocked", false);
        $("body").data("blocked", true).css("padding-top", "0");
    }
}
