/**
 *  init
 */
jQuery(document).ready(function($) {
    // init Facebox
    $("a[rel*=facebox]").facebox();

    $("body").ajaxError(ajax_error);

    // init Tab
    $("#navi > ul").tabs().bind('select.ui-tabs', function(e, ui) {
        var parts_type = ui.panel.id.replace(/[^\d]/g, "");
        var partslist_html = current_parts[parts_type];
        if (partslist_html && $("#partslist_" + parts_type + " table").size() == 0) {
            update_parts_html(parts_type, partslist_html);
            select_item_all();
        }
    });

    // frame select
    var calcurl = parent.location.href;
    if (calcurl && calcurl.indexOf("=") > -1) {
        frameopen(null, "calc");
    } else {
        frameopen(null, "navi");
    }

    // init spec
    load_spec_search_option();

    // init Parts List
    update_all_parts();
});

/*
 *  パーツの検索
 */
var current_parts = {};
var current_options = {};

/**
 *  全パーツを初期化する。
 */
function update_all_parts() {
    $(".update_partslist_button").val("更新中...")
            .removeClass("loaded")
            .addClass("loading").attr("disabled", "disabled");

    $.getJSON("search", {
        all: '1'
    }, function(data){
        current_parts = data;
        var count = 0;
        for (var parts_type in data) {
            if (count > 0) {
                break; // 最初のタブのみ表示
            }
            var partslist_html = data[parts_type];
            update_parts_html(parts_type, partslist_html);
            $(".update_partslist_button").removeClass("loading")
                    .addClass("loaded").attr("disabled", "").val("更新");
            select_item_all();
            count++;
        }
    });
}

/**
 *  指定パーツを初期化する。
 */
function update_parts(parts_type, button_loading) {
    $(button_loading).val("更新中...")
            .removeClass("loaded")
            .addClass("loading").attr("disabled", "disabled");

    $.getJSON("search", {
        type: parts_type,
        options: current_options[parts_type]
    }, function(data){
        var partslist_html = data[parts_type];
        current_parts[parts_type] = partslist_html;
        update_parts_html(parts_type, partslist_html);
        $(button_loading).removeClass("loading")
                .addClass("loaded").attr("disabled", "").val("更新");
    });
}

/**
 *  パーツの選択クリックハンドラ
 */
function click_part(parts_type, part_form) {
    if (part_form.checked) {
        parent.calc.add_item(parts_type, part_form.value, 1);
    } else {
        parent.calc.remove_item(parts_type, parts_type, part_form.value);
    }
}

/**
 *  指定パーツHTMLを更新する。
 */
function update_parts_html(parts_type, partslist_html) {
    $("#partslist_" + parts_type).empty().append(partslist_html);
    $("#partslist_" + parts_type + " table a").each(function(i, element){
        var matches = element.href.match(/\/(\d+)\/$/);
        if (matches) {
            element.id = "link_" + parts_type + "_" + matches[1];
        }
    });
}

/**
 *  検索オプション情報を取得する。
 */
function load_spec_search_option() {
    $.get("searchoption", {
        list: "1"
    }, function(data) {
        if (typeof data == "object") {
            current_options = data;
        } else {
            current_options = {};
        }
    },"json");
}

/**
 *  検索オプション情報を保存する。
 */
function store_spec_search_option(parts_type, button_loading) {
    $(button_loading).val("保存中...")
            .removeClass("loaded")
            .addClass("loading").attr("disabled", "disabled");

    var search_options = $("#spec_search_option").serialize();
    $.post("searchoption", {
        type: parts_type,
        update: "1",
        options: search_options
    }, function(data) {
        $(button_loading).removeClass("loading")
                .addClass("loaded").attr("disabled", "");
        if (data == "0") {
            $(button_loading).val("このウィンドウを閉じるまで保存されます");
            current_options[parts_type] = search_options;
        } else if (typeof data == "object") {
            $(button_loading).val("  設定を保存しました  ");
            current_options = data;
        }
        update_parts(parts_type, "#update_partslist_button_" + parts_type);
        $.facebox.close();
    },
    "json");
}

/**
 *  保存されていた検索オプション情報を反映する。
 */
function reflect_spec_search_option(parts_type) {
    if (!current_options || !current_options[parts_type]) {
        return;
    }
    $("#spec_search_option :checked").removeAttr("checked");

    var options_str = current_options[parts_type];
    var options_array = options_str.split("&");
    var key_count = {};
    for (var i = 0; i < options_array.length; i ++) {
        var option_pair = options_array[i].split("=");
        var key = option_pair[0];
        var value = option_pair[1];
        var eq = 0;
        if (key_count[key] >= 0) {
            eq = key_count[key]++;
        } else {
            key_count[key] = 1;
        }
        var exp = "#spec_search_option input[@name=" + key + "]:eq(" + eq + ")";
        var ret = $(exp).val([value]);
        if (ret.length == 0) {
            exp = "#spec_search_option select[@name=" + key + "]:eq(" + eq + ")";
            ret = $(exp).val([value]);
        }
    }
}

/**
 *  calcurlの全アイテムを選択する。
 */
function select_item_all() {
    var current_items = parent.calc.current_items;
    for (var parts_type in current_items) {
        for (var item_id in current_items[parts_type]) {
            select_item(parts_type, item_id);
        }
    }
}

/**
 *  指定アイテムを選択する。
 */
function select_item(parts_type, item_id) {
    $("#p_" + parts_type + "_" + item_id).attr("checked", "checked");
}

/**
 *  指定アイテムを選択解除する。
 */
function unselect_item(parts_type, item_id) {
    $("#p_" + parts_type + "_" + item_id).removeAttr("checked");
}
