function sim_start() {
    // エラーチェック
    if(errCheck(document.sim)) { 
        return false;
    }

    // 計算
    calc(document.sim);

    // 結果表示
    document.getElementById('BOXED_SIM_output').style.display = 'block';
    //document.getElementById('BOXED_SIM_output').style.display = "";
//alert(document.getElementById('BOXED_SIM_output').style.display);
    return false;
}

function calc(obj) {
    // 決め打ち係数
    var stylist_salary   = 25; // スタイリスト給与(万円)
    var assistant_salary = 17; // アシスタント給与(万円)
    var construction = 50 // 工事費(面積*万円)

    var owner       = obj.owner.value;                      // オーナー名:owner
    var days        = parseInt(obj.days.value);             // 営業日数:days
    var area        = parseInt(obj.area.value);             // 営業面積:area
    var ave_price   = parseInt(obj.ave_price.value) / 10000;// 平均単価:ave_price
    var set_num     = parseInt(obj.set_num.value);          // セット面数:set_num
    var stylist_num = parseInt(obj.stylist_num.value);          // スタイリスト人数:set_num
    var assistant_num  = parseInt(obj.assistant_num.value);       // アシスタント人数:set_num
    var ave_guest   = parseInt(obj.ave_guest.value);        // 平均客数:ave_guest
    var shampoo_num = parseInt(obj.shampoo_num.value);      // シャンプー台数:shampoo_num
    var rent        = parseInt(obj.rent.value);             // 賃貸料:rent
    var deposit     = parseInt(obj.deposit.value);          // 自己資金:deposit
    var repayment   = parseInt(obj.repayment.value);        // 返済年数:repayment

    var expenses = 0;
    var use_subtotal = 0;
    var total_rent_price = 0;

    // オーナー
    document.getElementById('ownern').innerHTML = owner;
    //document.getElementById('owner_print').innerHTML = owner;
    // スタイリスト人数(最低1)
    document.getElementsByName('stylist_num').value = stylist_num;
    // スタイリスト給与
    //document.getElementsByName('stylist_salary').value = stylist_salary;
    document.sim['stylist_salary'].value = stylist_salary;
    //document.getElementById('vstylist_salary').innerHTML = stylist_salary;
    // アシスタント人数(最低1)
    document.getElementsByName('assistant_num').value = assistant_num;
    // アシスタント給与
    //document.getElementsByName('assistant_salary').value = assistant_salary;
    document.sim['assistant_salary'].value = assistant_salary;
    //document.getElementById('vassistant_salary').innerHTML = assistant_salary;
    // 建物取得金額(敷5礼1)
    document.getElementById('tatemono').innerHTML = addCom(rent * 6);
    // 仲介手数料
    document.getElementById('chuukai').innerHTML = addCom(rent);
    // 前家賃
    document.getElementById('mae_yachin').innerHTML = addCom(rent);
    // 費用小計
    document.getElementById('hiyou_subtotal').innerHTML = addCom(rent * 8);
    // 内装工事費用、汁器備品費用
    document.getElementById('construction').innerHTML = addCom(area * construction);
    // 印刷物、その他広告費
    document.getElementById('ad_price').innerHTML = addCom(area * 2.25);
    // 材料仕入れ
    document.getElementById('stock_price').innerHTML = addCom(area);
    // 開店までの家賃
    document.getElementById('rent_price').innerHTML = addCom(rent);
    // 運転資金
    document.getElementById('use_price').innerHTML = addCom((rent + stylist_num * stylist_salary + assistant_num * assistant_salary) * 2);
    // 運転資金小計
    use_subtotal = (area * 2.25) + (area) + (rent) + ((rent + stylist_num * stylist_salary + assistant_num * assistant_salary) * 2);
    document.getElementById('use_subtotal').innerHTML = addCom(use_subtotal);
    // 売り上げ目標(1日)
    document.getElementById('amount_day').innerHTML = addCom(ave_price * ave_guest);
    // 売り上げ目標(1ヶ月)
    amount = ave_price * ave_guest * days;
    document.getElementById('amount_month').innerHTML = addCom(amount);
    // 借入金
    total_rent_price = rent * 8 + (area * construction) + use_subtotal - deposit;
    document.getElementById('total_rent_price').innerHTML = addCom(total_rent_price);
    // 返済金額
    document.getElementById('repayment_month').innerHTML = addCom(Math.round(total_rent_price / (repayment * 12)));
    // 返済回数
    document.getElementById('repayment_num').innerHTML = addCom(repayment * 12);
    // 材料費
    document.getElementById('stock_month').innerHTML = addCom(amount * 0.1);
    // 光熱費
    document.getElementById('lhe').innerHTML = addCom(amount * 0.03);
    // 雑費
    document.getElementById('misc').innerHTML = addCom(amount * 0.01);
    // 広告費
    document.getElementById('advertisement').innerHTML = addCom(amount * 0.02);
    // 利益積立金
    document.getElementById('save').innerHTML = addCom(amount * 0.02);
    // 人件費
    document.getElementById('personnel').innerHTML = addCom(stylist_num * stylist_salary + assistant_num * assistant_salary);
    // 店舗家賃
    document.getElementById('house_rent').innerHTML = addCom(rent);
    // 経費合計
    expenses = amount * 0.18 + rent + (stylist_num * stylist_salary + assistant_num * assistant_salary) + (total_rent_price / (repayment * 12));
    document.getElementById('expenses').innerHTML = addCom(expenses);
    // 利益
    document.getElementById('gain').innerHTML = addCom(amount - expenses);
    // シミュレータフラグ
    //document.getElementsByName('sim_flg').value = 1;
    document.sim['sim_flg'].value = 1;
    //alert(document.sim['sim_flg'].value);

    return false;
}

// 数値型を小数第三位を切り上げつつ三桁ごとにカンマを入れる
function addCom(value){
    var val1 = '' + value;
    var val2 = '';

    // 切り上げ
    val1 = Math.ceil(val1 * 100) / 100;

    val1 = '' + val1;
    while(val1 != (val2 = val1.replace(/^([+-]?\d+)(\d\d\d)/, "$1,$2"))) {

        val1 = val2;
    }

    return val1;
}

// エラーチェック
function errCheck(value) {
    var arr_length = new Array();
    arr_length['owner'] = 50;
    arr_length['days'] = 31;
    arr_length['area'] = 999;
    arr_length['ave_price'] = 990000;
    arr_length['stylist_num'] = 99;
    arr_length['assistant_num'] = 99;
    arr_length['set_num'] = 99;
    arr_length['ave_guest'] = 999;
    arr_length['shampoo_num'] = 99;
    arr_length['rent'] = 999999;
    arr_length['deposit'] = 999999;
    arr_length['repayment'] = 20;

    var arr_form_name = new Array();
    arr_form_name['owner'] = 'オーナー名';
    arr_form_name['days'] = '営業日数';
    arr_form_name['area'] = '営業面積';
    arr_form_name['ave_price'] = '客一人当たりの平均単価';
    arr_form_name['stylist_num'] = 'スタイリスト';
    arr_form_name['assistant_num'] = 'アシスタント';
    arr_form_name['set_num'] = 'セット面数';
    arr_form_name['ave_guest'] = '一日あたりの平均客数';
    arr_form_name['shampoo_num'] = 'シャンプー面数';
    arr_form_name['rent'] = '店舗賃貸料';
    arr_form_name['deposit'] = '自己資金';
    arr_form_name['repayment'] = '返済回数';

    var errMes = '';

    for(i = 0; value.length > i; i++) {
        fname = value[i].name;

        if(fname == 'calc' || fname == 'reset' || fname == 'print' || fname == 'sim_flg' || fname == 'send_sim' ||
           fname == 'stylist_salary' || fname == 'assistant_salary') continue;

        // 値チェック
        if(fname == 'owner') {
            if(value[i].value.length < 1 || value[i].value.length > arr_length[fname]) errMes += arr_form_name[fname] + "は" + arr_length[fname] + "文字以内での入力をお願いします。\n";
        } else if(fname != 'deposit') {
            value[i].value = replaceNumF2H(value[i].value);
            if(value[i].value < 1 || value[i].value > arr_length[fname] || value[i].value.match(/[^0-9]/g)) errMes += arr_form_name[fname] + "は1～" + arr_length[fname] + "以内の自然数で入力をお願いします。\n";
        } else {
            value[i].value = replaceNumF2H(value[i].value);
            if(value[i].value < 0 || value[i].value > arr_length[fname] || value[i].value.match(/[^0-9]/g)) errMes += arr_form_name[fname] + "は0～" + arr_length[fname] + "以内の自然数で入力をお願いします。\n";
        }

//        if(fname != 'owner') {
//            // 数値チェック
//            value[i].value = replaceNumF2H(value[i].value);
//            if(value[i].value.match(/[^0-9]/g)) errMes += arr_form_name[fname] + "は自然数での入力をお願いします。\n";
//        }
    }

    if(errMes.length > 0) {
        alert(errMes);
        return true;
    } else if(value['deposit'].value == 0) {
        if(!confirm('自己資金は0円で計算してよろしいですか？')) {
            return true;
        } else {
            value['deposit'].value = 0;
        }
    }

    return false;
}

function chksim_flg() {
    if(document.sim['sim_flg'].value == 1 && errCheck(document.sim) == false) {
        document.sim.action = 'simulation_form.php';
        document.sim.submit();
        return false;
    }
    //alert(document.sim['sim_flg'].value);
    alert('先にシミュレーションの実行をお願いします。');
    return false;
}

//全角数字置き換え(全角→半角)
function replaceNumF2H(val){
    if (val.length == 0) return val;

    half = new Array(0,1,2,3,4,5,6,7,8,9);
    full = new Array("０","１","２","３","４","５","６","７","８","９");
    
    for(var i = 0; i < full.length; i++){
        while(val.indexOf(full[i]) != -1){
            val = val.replace(full[i],half[i]);
        }
    }
    return val;
}
