霊柩車の運賃計算のプログラム 探しても見つからない!ので書いた。

霊柩車の運賃計算プログラム

ついでに「霊柩運送規約」と「運賃適用方」も掲載(必要ないけどね)
計算方法は、個々の運送業者の該当地区の運輸局に届け出た書類によって違うと思う。
ちょっと解釈が微妙なので不都合があったなら修正します
「〜を超えて」とか「〜まで」とか微妙な表現が惑わせます


使い方の説明は面倒なのでスルーします。
ブラウザは、FireFox で動きます。他は試していません。古いブラウザでは動きません。
プログラムは、わざわざ解りやすく書いたつもりですが、すぐに忘れてしまって思い出すには時間が必要。
どっかのサーバーに置いて、キャッシュさせればいつでもiPadからでもつかえるかな?


HTML と CSS は、プログラムと呼べないと思うけれど、全体で 1800行程度か〜。疲れた。

使い方

以下のプログラム全てをエディタなどにコピペしてファイル名を reikyuu.html のようして保存する。
Firefox のようなブラウザで活用する。これ以上の説明は面倒いのでパス。
(全国・地方の)葬祭業協同組合員以外は使用禁止。改変も禁止。

<!DOCTYPE hrml>
<head>
  <meta charset="utf-8">
  <title>霊柩車運賃適用方</title>

<style>

/*共通CSS*/
* {
  font              : normal medium/155% "HiraMinProN-W3", "ヒラギノ明朝 Pro W3", "MS P明朝", "平成明朝", serif;
}

body {
  width: 186mm;
  margin: 2em auto;
}

h1, h2, h3, h4, th, dt, legend, var, code {
  font-family       : "Hiragino Kaku Gothic ProN", "メイリオ", sans-serif;
  font-weight       : normal;
}

section {
  display: none;
}


h1 {
  text-align        : center;
  font-size         : x-large;
}

h2, h3 {
  font-size         : large;
}

a {
  text-decoration   : none;
  color             : black;
}

a:hover {
  text-decoration   : underline;
  color             : blue;
}

table {
  width             : 100%;
}

tbody th {
  text-align: left;
}

caption {
  text-align: right;
  font-size: small;
}

th, td {
  padding: 0 .5ex;
}
/*霊柩車運賃適用方*/

#TEKIYOU {
  counter-reset     : n0 0;
}

#TEKIYOU h2 {
  counter-reset     : n1 0;
  margin-top        : 1em;
  clear:both;
}

#TEKIYOU h2:before {
  counter-increment : n0 1;
  content           : "(" counter(n0, cjk-ideographic) ") ";
}

#TEKIYOU h3 {
  font-size         : medium;
  margin            : 1ex;
  margin-left       : 4ex;
  counter-reset     : n2 0;
clear:both;
}

#TEKIYOU h3:before {
  counter-increment : n1 1;
  content           : " (" counter(n1) ")";
  margin-left       : -3ex;
}

#TEKIYOU li {
  clear:both;
  margin: 0;
}

#TEKIYOU code {
  font-size: small;
  margin: 1ex 0 3ex 5ex;
  display: block;
}

#TEKIYOU > table:first-of-type tbody tr {
  height: 4em;
}
#TEKIYOU > table:first-of-type > tbody > tr:nth-of-type(2) > th:first-of-type {
  writing-mode: vertical-rl;
  width: 2em;
  text-align: center;
}
@media screen and (-webkit-min-device-pixel-ratio:0) {
  #TEKIYOU > table:first-of-type > tbody > tr:nth-of-type(2) > th:first-of-type {
    color: red;
    text-orientation: upright;
  }
}

var {
  letter-spacing    : 0.3ex;
  color             : #800;
}
var.yen:after  { content: "円"; }
var.wari:after { content: "割"; }

.num {
  text-align        : right;
}
.mid, .center {
  text-align        : center;
}
.right {
  text-align        : right;
}
.hide {
  display           : none;
}

.float {
  float             : left;
  margin            : 0 0 0 5ex;
}

.more_detail {
  text-align        : right;
  width             : 20em;
  float             : right;
  margin            : 0 0 1em 8ex;
}
.more_detail:after {
  content           : "";
  display           : block;
  clear             : both;
}
.more_detail > dt {
  float             : left;
}

.tekiyou5 > dt {
  margin            : 1ex 0 0 2ex;
}
.tekiyou5 > dt:before {
  content           : "(";
}
.tekiyou5 > dt:after {
  content           : ")";
}

/*
---------------------------------------
霊柩運送規約
---------------------------------------
*/

#KIYAKU {
  counter-reset     : jou 0;    /*第n条*/
}

#KIYAKU h2 {
   margin-top       : 2ex;
}

#KIYAKU h2:not(.no_count):before {
  counter-increment : shou 1;
  content           : "第" counter(shou, cjk-ideographic) "章";
  padding-right     : 1em;
}

#KIYAKU h3 {
  counter-increment : setu 1;
  margin-left       : 1ex;
}

#KIYAKU h3:before {
  content           : "第" counter(setu) "節";
  padding-right     : 1em;
}


#KIYAKU_MOKUJI > ol {
  counter-reset     : shou 0;   /*第n章*/
  counter-reset     : setu 0;   /*第n節*/
  margin            : 0 0 0 1ex;
  padding           : 0;
  counter-reset     : shou
}

#KIYAKU_MOKUJI ol {
  list-style        : none;
}

#KIYAKU_MOKUJI > ol > li {
  margin-bottom     : 1ex;
}

#KIYAKU_MOKUJI > ol > li:before {
  counter-increment : shou 1;
  content           : "第" counter(shou, cjk-ideographic) "章";
  counter-reset     : setu 0;
  padding-right     : 2em;
}

#KIYAKU_MOKUJI ol > li > ol > li:before {
  counter-increment : setu 1;
  content           : "第" counter(setu) "節";
  padding-right     : 2em;
}

#KIYAKU_SOUSOKU {
  counter-reset     : shou 0;   /*第n章*/
}

#KIYAKU > dl > dt {
  counter-reset     : kou 0;
  margin            : 1em 0 0 2ex;
}

#KIYAKU > dl > dt:before {
  content           : "(";
}

#KIYAKU > dl > dt:after {
  content           : ")";
}

#KIYAKU > dl > dd {
  counter-increment : kou 1;
  margin-left       : 7ex;
  margin-bottom     : 1ex;
}

#KIYAKU > dl > dt+dd:before,
#KIYAKU > dl > dd.append_jou:before {
  counter-increment : jou 1;
  margin-left       : -5ex;
	white-space       : pre ;
  content           : "第" counter(jou) "条\A";
}

#KIYAKU > dl > dd+dd:before {
  content           : counter(kou);
  margin-left       : -2ex;
}

#KIYAKU > dl ol {
  margin            : 1ex 0 1ex 2ex;
}

#SOUSOKU {
  counter-reset: shou;
}


/*
---------------------------------------
運賃計算
---------------------------------------
*/

#UNTIN fieldset {
  margin            : 2ex;
  border-radius     : 1ex;
  border-style      : ridge;
}

#UNTIN legend {
  color             : #800;
  border-left       : 8px #fa0 solid;
  line-height       : 100%;
  padding           : 0 1ex 0 0.5ex;
}

#UNTIN input:checked + span {
  border-bottom: 2px #f90 solid;
}
#UNTIN input:disabled + span {
  color: silver;
}

#UNTIN input[type="output"],
#UNTIN input[type="number"] {
 text-align         : right;
 color              : #c00;
 font-weight        : bold;
 width              : 8em;
 margin-right       : 0.5ex;
}

#UNTIN ul {
  margin            : 0;
  padding           : 0;
}

#UNTIN li {
  list-style        : none;
  margin            : 0 0 0ex 5ex;
  text-indent       : -3ex;
  line-height       : 100%;
}

#UNTIN p {
  margin            : 0;
  padding           : .8ex 0;
  border-bottom     : 1px #ccc dotted;
  line-height       : 100%;
}

#UNTIN span {
  font-size         : small;
  line-height       : 100%;
}

#UNTIN p > span {
  float             : right;
}

#UNTIN dl {
  text-align        : right;
  margin            : 0;
}

#UNTIN dt {
  clear             : both;
  float             : left;
  margin-left       : 5ex;
}

#UNTIN dd {
  border-bottom     : 1px #ccc dotted;
  font-size         : small;
  margin-bottom     : 1ex;
}

#UNTIN input {
  padding           : 0;
  line-height       : 100%;
  font-size         : small;
}

#UNTIN em {
  color             : #080;
  font              : normal small sans-serif;
  padding-left      : 1em;
}

#UNTIN em:before {
  content           : "(";
}

#UNTIN em:after {
 content            : ")";
}

nav em {
  border-bottom     : 2px red solid;
}
</style>


<body>
<!-- ---------------------------------------------- -->

<nav id="MENU">
  <h1>一般貨物自動車運送事業(霊柩)の運賃</h1>
  <ul>
    <li><a href="#KIYAKU">霊柩運送規約</a>
    <li><a href="#TEKIYOU">運賃適用方法</a>
    <li><a href="#UNTIN">運賃計算</a>
  </ul>
  <hr>
  <h2>ご利用にあたって</h2>
  <p>次の事項の規約を厳守していください。
  <ul>
    <li>このプログラムの使用においてい発生した<em>損害等の責任を負いません</em>。
    <li>全国葬祭業協同組合に加盟の<em>組合員事業者以外の使用は認めません</em>。
    <li>このプログラムを改変及び販売して<em>利益を得ることは禁止します</em>。
    <li>作成者に感謝し布施する行為は、使用者の権利として付与されます。
  </ul>
</nav>


<!-- ---------------------------------------------- -->

<section id="KIYAKU">

  <header>
    <h1>霊柩車運送規約</h1>
    <p class="center">国土交通省告示第1047号
    <p class="right">平成18年8月31日
  </header>


  <nav id="KIYAKU_MOKUJI">
    <header>
      <h2 class="no_count">目次</h2>
    </header>

    <ol>
      <li>
        <a href="#KIYAKU_SOUSOKU">総則(第1条・第2条)</a>

      <li>
        <a href="#KIYAKU_UNSOUGYOUMU"">運送業務</a>
        <ol>
          <li>
            <a href="#KIYAKU_TUUSOKU">通則(第3条・第4条)</a>
          <li>
            <a href="#KIYAKU_HIKIUKE">引き受け(第5条−第10条)</a>
          <li>
            <a href="#KIYAKU_HANSHUTUNYUU">搬出又は搬入(第11条)</a>
          <li>
            <a href="#KIYAKU_UKETORI">受取及び引渡し(第12条)</a>
          <li>
            <a href="#KIYAKU_SIJI">指図(第13条・第14条)</a>
          <li>
            <a href="#KIYAKU_JIKO">事故(第15条)</a>
          <li>
            <a href="#KIYAKU_UNTIN">運賃及び料金(第16条−第21条)</a>
          <li>
            <a href="#KIYAKU_SEKININ">責任(第22条−第30条)</a>
          <li>
            <a href="#KIYAKU_RENRAKU">連絡運輸(第31条−第36条)</a>
        </ol>

      <li>
        附帯業務(第37条)
    </ol>
  </nav>


  <h2 id="KIYAKU_SOUSOKU">総則</h2>
  <dl>
    <dt>
      事業の目的
    <dd>
      当店は、一般貨物自動車運送業務(霊柩自動車を利用して遺体を運送する業務
      (これに附帯するものを含む)に限る。以下同じ)を行います。

    <dt>
      適用範囲
    <dd>
      当店の経営する一般貨物自動車運送業務に関する運送規約はこの運送規約の
      定めるところにより、この運送規約に定めない事項については法令又は慣習によります。
    <dd>
      当店は、前項の規定にかかわらず、法令に反しない範囲で、特約の申込みに応じることがあります。
  </dl>


  <h2 id="KIYAKU_UNSOUGYOUMU">運送業務</h2>
  <h3 id="KIYAKU_TUUSOKU">通則</h3>
  <dl>
    <dt>
     受付日時
    <dd>
      当店は、受付日時を定め、これを主たる事務所その他の営業所の店頭に掲示します。
    <dd>
      前項の受付日時を変更する場合には、あらかじめ、主たる事務所その他の営業所の 店頭に掲示します。

    <dt>
      運送の順序
    <dd>
      当店は、運送の依頼を受けた順序により、遺体の運送を行います。
      ただし、遺体の状況又は行政機関の命令その他正当な事由がある場合には、この限りではありません。
    <dd>
      当店は、前項ただし書の規定により、遺体の運送を引き受けたときは、その日時を指定することがあります。
  </dl>


  <h3 id="KIYAKU_HIKIUKE">引き受け</h3>
  <dl>
    <dt>
      遺体の性質の確認
    <dd>
      当店は、遺体の運送の申込みがあったときは、その遺体の性質を明告することを依頼人に求めることがしります。

    <dt>
      引受拒絶
    <dd>
      当店は、次の各号に掲げる場合には、遺体の運送の引き受けを拒絶することがあります。
      <ol>
        <li>
          当核運送の依頼が、この運送規約によらないものであるとき。
        <li>
          依頼人が、前項の明告をせず、又は第8条第2項の要求に応じなかったとき。
        <li>
          当核運送に適する設備等がないとき。
        <li>
          当核運送に関し、依頼人から特別の負担を求められたとき。
        <li>
          当核うんそうが、法令又は公の秩序若しくは善良の風俗に反するものであるとき。
        <li>
          天災その他やむを得ない事由があるとき。
      </ol>

    <dt>
      運送に関する明告
    <dd>
      依頼人は、当店に次の事項を明告しなければなりません。
      <ol>
        <li>
          出発地及び到着地(団地、アパートその他高層建築物にあっては、その名称及び電話番号を含む。)
        <li>
          運賃、料金、立替金その他の費用(以下「運賃、料金等」という。)の支払いに関する事項
        <li>
          依頼人の氏名又は名称ならびに住所及び電話番号
        <li>
          その他遺体の運送に関し必要な事項
      </ol>

    <dt>
      収納柩等
    <dd>
      依頼人は遺体の性質及び運送距離等に応じて、遺体を適切に運送できるよう柩等に収納しなければなりません。
    <dd>
      当店は、その遺体を収納する柩その他の設備の構造が運送に適さないと認められた場合には、
      依頼人に対して、その改造等を要求することがあります。

    <dt>
      付添人
    <dd>
      当店は、依頼を受けた遺体の運送について、付添人の同乗を要求することがあります。

    <dt>
      連絡運輸又は利用運送
    <dd>
      当店は、依頼人の利益を害しない限り、引き受けた遺体を航空機、鉄道、船舶その他の運送機関と連絡して、
      又は他の一般貨物自動車運送事業を経営する者の行う運送若しくは航空機、鉄道、船舶その他の運送機関を
      利用して運送することがあります。
  </dl>


  <h3 id="KIYAKU_HANSHUTUNYUU">搬出又は搬入</h3>
  <dl>
    <dt>
      搬出又は搬入
    <dd>
      遺体の搬出又は搬入は、当店の責任においてこれを行います。
  </dl>


  <h3 id="KIYAKU_UKETORI">受取及び引渡し</h3>
  <dl>
    <dt>
      受取及び引渡しの場所
    <dd>
      当店は、明告された出発地において当核依頼人等に遺体を引き渡します。
  </dl>


  <h3 id="KIYAKU_SIJI">指図</h3>
  <dl>
    <dt>
      指図
    <dd>
      依頼人は、当店に対して、遺体の運送の停止その他の運送内容の変更につき指ずをすることができます。
    <dd>
      前項に規定する依頼人の権利は、遺体が到着地に到着した後に依頼人がその引渡しを請求したときは、
      消滅します。
    <dd>
      第1項に規定する指図に従って行う運送内容の変更に伴い生じた費用は、依頼人の負担とします。

    <dt>
      指図に応じない場合
    <dd>
      当店は、運送上の支障が生じるおそれがあると認める場合は、前条代項の規定による
      指図に応じないことがあります。
    <dd>
      当店は、前項の規定により、指図に応じないときは、遅滞なく、その旨を依頼人に通知します。
  </dl>


  <h3 id="KIYAKU_JIKO">事故</h3>
  <dl>
    <dt>
      事故の際の措置
    <dd>
      当店は、次の各号に掲げる場合には、遅滞なく、依頼人に対して、相当の期間を定め、
      その対応につき指図を求めます。
      <ol>
        <li>
          遺体の著しい滅失、損傷その他の障害を発見したとき。
        <li>
          当初の運送経路又は運送方法によることができなくなったとき。
        <li>
          相当の期間、当核運送を中断せざるを得ないとき。
      </ol>
    <dd>
      当店は前項各号に掲げる場合において、依頼人の指図を待ついとまのないとき
      又は当店の定めた相当の期間内に前項の指図がないときは、依頼人の利益のために、
      当店の裁量によって、当核遺体の運送の中止又は運送経路若しくは運送方法の変更
      その他の適切な対応をすることがあります。
    <dd>
      当店は、前項の対応をしたときは、遅滞なく、その旨を依頼人に通知します。
    <dd>
      第1項の規定にかかわらず、当店は、運送上の支障が生ずると認める場合には、
      依頼人の指図に応じないことがあります。
    <dd>
      当店は、前項の指図に応じないときは、遅滞なく、その旨を依頼人に通知します。
  </dl>


  <h3 id="KIYAKU_UNTIN">運賃及び料金</h3>
  <dl>
    <dt>
      運賃および料金
    <dd>
    <ol>
      <li>
        当店は、引き受けた運送に対しては、国土交通大臣に届け出るべき運賃及び料金を収受します。
      <li>
        運賃および料金は、主たる事務所その他の営業所の店頭に掲示します。
      <li>
        当店は、収受した運賃および料金の割戻しはしません。
    </ol>

    <dt>
      運賃又は料金の掲示
    <dd>
      当店は、遺体の運送を引き受ける前に、遺体の運送及びそれに必要な柩の調達、
      遺体の柩への収納、保管その他一般貨物自動車運送事業に附帯する業務
      (以下「附帯業務」という)に要する運賃又は料金については、その項目ごとに
      試算を行い、依頼人に提示します。
      この場合において、依頼人が試算の結果の書面による提示を求めた場合には、これに応じます。

    <dt>
      運賃,料金等の収受方法
    <dd>
      当店は、遺体を受け取る時までに、依頼人から運賃、料金等を収受します。
    <dd>
      前項の場合において、運賃、料金等の額が確定しないときは、その概算額の前渡しを受け、
      運賃、料金等の確定後に依頼人に対して、その過不足を払い戻し、又は追徴します。
    <dd>
      当店は、第1項の規定にかかわらず、遺体を引き渡す時までに、運賃、
      料金等を依頼人から収受することを認めることがあります。

    <dt>
      運賃請求権
    <dd>
      当店は、遺体の全部又は一部が天災その他やむを得ない事由又は当店の責めに帰すべき事由により滅失したときは、
      その運賃、料金等を請求しません。
      この場合において、当店は、既に運賃、料金等の全部又は一部を収受しているときは、これを払い戻します。
    <dd>
      当店は、遺体の全部又は一部がその性質または依頼人の責めに帰すべき事由によって滅失したときは、
      運賃、料金等を全額収受します。

    <dt>
      事故等と運賃、料金
    <dd>
      当店は、第13条及び第15条の規定により対応したときは、その対応に応じて、
      又は既に行った運送の割合に応じて、運賃、料金等を収受します。
      ただし、既にその運送について運賃、料金等の全部又は一部を収受している場合においては、
      当核運賃、料金等の不足があるときは依頼人にその支払いを 請求し、当核運賃、
      料金等の余剰があるときはこれを依頼人に払い戻します。

    <dt>
      中止手数料
    <dd>
      当店は、依頼人からの中止の指図応じた場合には、依頼人の責めに帰すことの 事由によるときを除いて、
      中止手数料を請求することがあります。 ただし、依頼人が、遺体の搬入の行われる日の前日までに
      運送の中止の指図を したときは、この限りではありません。
    <dd>
      前項の中止手数料は、第17条の規定により提示した運賃および料金の項目のうち、
      基本額及び乗車定員加算額ならびに特殊仕様車料金の合算額の5割とします。
  </dl>


  <h3 id="KIYAKU_SEKININ">責任</h3>
  <dl>
    <dt>
      責任の始期
    <dd>
      当店の遺体の滅失、損傷又は運送の遅延についての責任は、遺体を依頼人から受け取ったときに始まります。

    <dt>
      責任と挙証
    <dd>
      当店は、自己又は使用人その他運送のために使用した者が遺体の受取、引渡し、
      保管及び運送に関して注意を怠らなかったことを証明しない限り、遺体の滅失、
      損傷又は運送の遅延について損害賠償の責任を負います。

    <dt>
      運送に関する明告の不完全等の責任
    <dd>
      当店は、第7条の規定による依頼人の明告が不実であったために生じた損害については、その責任を負いません。
    <dd>
      前項の場合において、当店が損害を被ったときは、依頼人はその損害を賠償しなければなりません。

    <dt>
      免責
    <dd>
      当店は、次の各号に掲げる事由による滅失、損傷又は運送の遅延その他の損害については、
      損害賠償の責任を負いません。
      <ol>
        <li>
          当核遺体の性質その他これに起因する事由
        <li>
          ストライキ若しくはサボタージュ、社会的騒擾その他の事変
        <li>
          予見できない異常な交通の障害
        <li>
          不可抗力による火災
        <li>
          地震、津波、洪水、暴風雨、地すべり、山崩れその他の天災
        <li>
          法令若しくは公権力の発動による運送の差止め、開封、没収、差し押さえ又は第三者への引渡し
        <li>
          依頼人の故意又は過失
      </ol>

    <dt>
      責任の特別消滅事由
    <dd>
      遺体の一部滅失、損傷又は運送の遅延についての当店の責任は、
      依頼人がこれらについて保留しないで遺体を受け取ったときは消滅します。
    <dd>
      前項の規定は、当店がその損害を知りつつ遺体を引き渡した場合には、適用しません。

    <dt>
      損害賠償の額
    <dd>
      遺体に全部若しくは一部滅失又は損傷があった場合の損害賠償の額については、
      公平な第三者の鑑定又は評価によりその額を決定します。
    <dd>
      遺体の運送が遅延した場合の損害賠償の額は、運賃、料金等の総額を限度とします。

    <dd class="append_jou">
      当店は、前条の規定にかかわらず、当店の故意又は重大な過失によって遺体の滅失、
      損傷又は運送の遅延を生じたときは、それにより生じた一切の損害を賠償します。

    <dt>
      時効
    <dd>
      当店の責任は、依頼人が遺体を受け取った日から1年を経過したときは、時効によって消滅します。
    <dd>
      前項の期間は、遺体の全部滅失の場合においては、その遺体の引渡しを行うべき日であった日からこれを起算します。
    <dd>
     前2項の規定は、当店がその損害を知りつつ依頼人等に告げなかった場合には、適用しません。

    <dt>
      利用運送の際の責任
    <dd>
      当店が、他の一般貨物自動車運送業を経営する者の行う運送又は。航空機、鉄道、
      船舶その他の運送機関を利用して運送を行う場合においても、運送上の責任は、
      この運送約款により当店が負います。
  </dl>


  <h3 id="KIYAKU_RENRAKU">連絡運輸</h3>
  <dl>
    <dt>
      運賃、料金等の収受
    <dd>
      当店は、連絡運輸にかかわる遺体の運送を引き受け、かつ、最初の運送を行う場合
      (以下この節において「連絡運輸の場合」という。)には、遺体を受け取る時までに、
      全運送につての運賃、料金等を収受します。
    <dd>
      当店は、前項の規定にかかわらず、全運送について運賃、料金等を、
      最後の運送を行った運送業者が遺体を引き渡す時までに、依頼人から収受することを認めることがあります。
    <dd>
      第1項の場合において、運賃、料金等の額が確定しないときは、第18条第2項の規定を準用します。

    <dt>
      中間運送人の権利
    <dd>
      連絡運輸の場合には、当店より後に運送を行う運送業者は、当店に代わってその権利を行使します。

    <dt>
      責任の原則
    <dd>
      連絡運輸の場合には、当店は、遺体の滅失、損傷又は運送の遅延について、
      他の運送業者と連帯して損害賠償の責任を負います。

    <dt>
      運送約款等の適用
    <dd>
      連絡運輸の場合には、他の運送業者の行う運送については、その事業者の運送約款又は運送に関する
      規定の定めるところによります。ただし、遺体の滅失、損傷又は運送の遅延による損害が生じた場合であって、
      かつ、その損害を与えた運送業者が明らかでない場合の損害賠償の請求については、この運送約款の
      定めるところによります。

    <dt>
      損害賠償事務の処理
    <dd>
      連絡運輸の場合には、遺体の滅失、損傷又は運送の遅延についての損害賠償は、
      その請求を受けた運送業者が第27条の規定により決定された損害賠償の額を支払います。

    <dt>
      損害賠償請求権の保留
    <dd>
      連絡運輸の場合における第26条第1項の保留は、その運送を行った運送業者のいずれに対しても
      行うことができます。
  </dl>


  <h2>附帯業務</h2>
  <dl>
    <dt>
      附帯業務
    <dd>
      当店は、附帯業務を引き受けた場合には、実際に要した費用をその都度依頼人に説明した上で収受します。
    <dd>
      附帯業務については、別段の定めがある場合を除き、性質の許す限り、第2章の規定を準用します。
  </dl>


  <footer>
    <p class="right">
      <a href="http://www.09net.jp/pc/index.html">(社)全国霊柩自動車協会</a>
    </p>
  </footer>
</section>


<!-- ---------------------------------------------- -->

<section id="TEKIYOU">
  <header>
    <h1>一般貨物自動車運送事業(霊柩の運送に限る)<br>の運賃及び料金並びに適用方</h1>
  </header>


  <h2>運賃額</h2>
  <table border="1">
    <caption class="hosoku">
      <金額は消費税を含む> (円)

    <thead>
      <tr>
        <th colspan="2">車種
        <th>特別車
        <th>普通車

    <tbody>
      <tr>
        <th colspan="2">
          基本額<br>
          <em>(初乗り<var id="距離加算_基底">10</var>キロメートルを含む)</em>
        <td class="num"><var id="基本_特別車">20332</var>
        <td class="num"><var id="基本_普通車">15443</var>
      <tr>
        <th rowspan="2">加算額
        <th>その後、<var id="距離加算_定数">10</var>キロメートルを増す毎の加算額
        <td class="num"><var id="距離加算_特別車">5556</var>
        <td class="num"><var id="距離加算_普通車">4549</var>
      <tr>
        <th>
          乗車定員
          <var id="乗車定員_基底">6</var>名を超える場合<br>
          <var id="乗車定員_定数">3</var>名までを増す毎の加算額
        <td>
        <td class="num"><var id="乗車定員_加算額">1640</var>
  </table>


  <h2>割増率</h2>
  <h3>冬期割増</h3>
  <table border="1">
    <thead>
      <tr>
        <th>地域
        <th>期間
        <th>割増率
    <tbody>
      <tr>
        <td>北海道
        <td class="mid">自11月16日<br>至4月15日
        <td rowspan="2" class="mid">
          <var id="冬期割増率" class="wari">2</var>
      <tr>
        <td>
          青森県、秋田県、山形県、新潟県、長野県、富山県、<br>
          石川県、福井県、鳥取県、島根県の全県<br>
          岩手県のうち北上市、久慈市、遠野市、二戸市<br>
          宮古市(旧下閉伊郡川井村、田老町、新里村のみ)<br>
          八幡平市(旧岩手郡安代町、西根町、松尾村のみ)<br>
          滝沢市、盛岡市(旧岩手郡玉山村のみ)<br>
          二戸郡、九戸郡、上閉伊郡、下閉伊郡、岩手郡<br>
          福島県のうち会津若松市、喜多方市、南会津郡、<br>
          耶麻郡、大沼郡、河沼郡<br>
          岐阜県のうち高山市、飛騨市、下呂市、郡上市、大野郡<br>
          滋賀県のうち長浜市、(旧浅井郡びわ町、浅井町を除く)<br>
          京都府のうち福知山市、舞鶴市、綾部市、宮津市、船井郡<br>
          京丹後市、南丹市(旧桑田郡美山町を除く)、与謝郡<br>
          兵庫県のうち豊岡市、朝来市、養父市、丹波市、美方郡<br>
       <td class="mid">自12月1日<br>至3月31日
  </table>

  <h3>深夜割増</h3>
  <p class="float">
      午後10時から午前5時まで
  <dl class="more_detail">
    <dt>1作業につき
    <dd><var id="深夜作業" class="yen">2269</var>
    <dt><var id="深夜作業_定数">30</var>分までごとに
    <dd><var id="深夜作業_30分毎に" class="yen">1152</var>
  </dl>

  <h3>早朝割増</h3>
  <p class="float">
    午前5時から午前8時まで
  <dl class="more_detail">
    <dt><var id="早朝作業_定数">30</var>分までごとに
    <dd><var id="早朝作業_30分毎に" class="yen">922</var>
  </dl>


  <h3>夜間割増</h3>
  <p class="float">
    午後7時から午後10時まで
  <dl class="more_detail">
    <dt><var id="夜間作業_定数">30</var>分までごとに
    <dd><var id="夜間作業_30分毎に" class="yen">922</var>
  </dl>


  <h2>割引率</h2>
  <ol>
    <li>
      生活保護法に基づく葬祭扶助料の給付をうけて葬儀を営む遺体で葬儀執行時の運送に対し
      <dl class="more_detail">
        <dt>普通車基本額に限り
        <dd><var id="割引率_生活保護" class="wari">5</var>
      </dl>

    <li>
      行旅病人及び行旅死亡人取扱法の適用をうける遺体
      <dl class="more_detail">
        <dt>普通車基本額に限り
        <dd><var id="割引率_行旅人" class="wari">3</var>
      </dl>

    <li>
      官公庁の指示による司法及び行政解剖遺体で葬儀執行時の運送を除き
      <dl class="more_detail">
        <dt>普通車基本額に限り</span>
        <!-- 実務では以下の行の数値を変更すること -->
        <dd><var id="割引率_解剖" class="wari">2</var>
      </dl>

    <li>
      地方自治体の定める葬儀制度のため葬儀執行時の運送及び国公立病院の依頼による献体の運送<br>
      <dl class="more_detail">
        <dt>普通車基本額に限り
        <dd>
          <var class="wari">2</var>以内
          <var id="割引率_献体" class="hide">2</var>
      </dl>
  </ol>


  <h2>諸料金</h2>
  <h3>特殊仕様車料金</h3>
  <ol>
    <li>
      特別車のうち檜、桐、杉を主材質とした白木造りで、彫刻等の造形装飾を施し、
      品質保持のための改装を行っている宮型霊柩車及び紫檀・黒檀の堅木材を主材質とし、
      彫刻、絵画等の造形装飾を有する宮型霊柩車並びに宮型本体部分を純金あるいは純銀張り
      とし、彫刻、絵画等の造形装飾を有する宮型霊柩車。<br>
      または、高級レザー張りルーフ等の室外装飾を施し、納棺室内を高級モケット等の
      クロス張りあるいはステンレス等による特別な装飾、ステンドグラスあるいは
      シャンデリア等の高級な照明設備及び音響装置等、特別な装備を有する洋型霊柩車を
      使用したときは、
      <dl class="more_detail">
        <dt>特殊仕様車料金として
        <dd><var id="特別車加算A" class="yen">27,363</var>
      </dl>

    <li>
      特別車のうち欅、楠、花梨、桂、桜、たもの堅木材を主材質とし、彫刻、絵画等の造形装飾の
      装備を有する宮型霊柩車及び宮型本体部分を金あるいは銀張りとし、彫刻、
      絵画等の造形装飾を有する宮型霊柩車。<br>
      または、レザー張りルーフ等の室外装飾を施し、納棺室内をクロス張り等による特別な装飾、
      照明設備及び音響装置等、特別な装備を有する洋型霊柩車を使用したときは、
      <dl class="more_detail">
        <dt>特殊仕様車料金として
        <dd><var id="特別車加算B" class="yen">13681</var>
      </dl>

    <li>
      特別車のうち標準的な仕様の車両に比して、特別な造形装飾を有する宮型霊柩車。<br>
      または、納棺室内に特別な装飾を施した洋型霊柩車を使用したときは、
      <dl class="more_detail">
        <dt>特殊仕様車料金として
        <dd><var id="特別車加算C" class="yen">6840</var>
      </dl>
  </ol>


  <h3>遺骨宅送料</h3>
  <dl class="more_detail">
    <dt>往復運賃の
    <dd><var id="遺骨託送料" class="wari">5</var>
  </dl>


  <h3>車両留置料</h3>
  <p class="float">
    <var id="車両留置_定数">30</var>分までごとに
  <dl class="more_detail">
    <dt>特別車
    <dd><var id="車両留置_特別車" class="yen">3540</var>
    <dt>普通車
    <dd><var id="車両留置_普通車" class="yen">2495</var>
  </dl>


  <h2>運賃料金適用方</h2>
  <dl class="tekiyou5">
    <dt>
      運賃料金計算の基本
    <dd>
      この運賃料金は、霊柩自動車を使用して車種別に一遺体を運送するごとに計算します。

    <dt>
      車種区分
    <dd>
      特別車とは、車体の構造に高級堅木材等を使用し、彫刻、絵画、金具飾、
      漆塗装による工芸装飾を施したもの(いわゆる宮型霊柩車)。<br>
      または、欧米式の特別な装備装飾を施し、主として葬儀式執行時の用に供されるもの
      (いわゆる洋型霊柩車)。
    <dd>
      普通車とは、特別車以外のもので、主として病院等からの遺体輸送の用に供されるもの
      (いわゆるバン型霊柩車)。<br>
      または、遺体及び随行葬送の遺家族を併せて輸送するもの(いわゆるバス型霊柩車)。

    <dt>
      運賃計算の方法
    <dd>
      運賃は、当該運送に従事する車両の車庫から起算し、依頼人の指定する遺体取卸場所までの
      キロ程によって一回ごとに計算します。

    <dt>
      深夜割増
    <dd>
      深夜割増の適用時間(午後10時から午前5時まで)の運送に対しては所定の割増額を収受します。

    <dt>
      早朝割増
    <dd>
      早朝割増の適用時間(午前5時から8時まで)の運送に対しては所定の割増額を収受します。

    <dt>
      夜間割増
    <dd>
      夜間割増の適用時間(午後7時から10時まで)の運送に対しては所定の割増額を収受します。

    <dt>
      冬期割増
    <dd>
      運送区間中に冬期割増適用地域に該当する部分がある場合には、次の式により算出した金額を加算します。
      <code>
        冬期割増区間の運送距離に対する運賃 × 0.2
      </code>

    <dt>
      割引率
    <dd>
      生活保護法に基づく葬祭扶助料の給付をうけた場合等は所定の割引率を適用します。

    <dt>
      割増率及び割引率の計算
    <dd>
      一運送中に2種類以上の割増率及び割引率が適用される場合は次の順序により計算します。
      <table>
        <tr><th>第1順位 <td>割引
        <tr><th>第2順位 <td>深夜・早朝・夜間割増
        <tr><th>第3順位 <td>冬期割増
      </table>
    <dt>
      遺骨宅送料
    <dd>
      随行葬送の遺家族が遺骨を宅送するため、帰路乗車使用の場合は所定の遺骨宅送料を収受します。

    <dt>
      車両留置料
    <dd>
      車両が遺体の積込場所から最終取卸場所の間、依頼人の責により留置された場合、
      30分を超える部分については所定の車両留置料を収受します。<br>
      また1回の運送において2箇所以上の車両留置があった場合の留置時間はそれぞれについて合計するものとします。

    <dt>
      諸料金の計算
    <dd>
      遺骨宅送料以外の諸料金に対しては割増率は適用しません。

    <dt>
      端数処理
    <dd>
      運賃及び料金の計算に際して、10円未満の端数が生じた場合は、1円単位以下は切り上げます。

    <dt>
      従業員
    <dd>
      運送作業に従事する職員の数は一車両につき一人とします。<br>
      ただし、遺体の性質及び病院関係運送の際の院内作業上必要な場合、
      長距離輸送等により二人以上の乗務となった場合は、別途実費を収受します。

    <dt>
      実費負担
    <dd>
      依頼人の指示により有料自動車道路を使用した場合、その他依頼人の
      要求による運送に伴う特別の負担は実費としてこれを収受します。

    <dd>
      フェリーボート利用料(自動車航送船利用料)<br>
      運送区間中にフェリーボートを利用して運送する場合には、次の式により算出した金額を収受します。
      <code>
       { 使用車両の航送料 + 航送期間中の固定費(<var id="フェリー_算定留置時間">1</var>時間当り車両留置料相当額 × 航送所要時間)} × 2
      </code>

    <dt>
      その他
    <dd>
      その他、この運賃及び料金の適用に関し、本適用方に定めのない事項については、
      法令に反しない範囲内で当事者の取り決めまたは慣習によることができます。

  </dl>
</section>


<!-- ---------------------------------------------- -->

<section id="UNTIN">
  <h1>霊柩車運賃計算</h1>
  <form id="REIKYUUSHA_UNTIN">
    <fieldset>
      <legend>運賃額</legend>
      <dl>
        <dt>
          霊柩車の車種
        <dd>
          <label>
            <input type="radio" name="車種" value="特別車">
            <span>特別車</span>
          </label>
          <label>
            <input type="radio" name="車種" value="普通車" checked>
            <span>普通車</span>
          </label>

        <dt>
          特別車
          <em>装飾・材質による料金設定</em>
        <dd>
          <label>
            <input type="radio" name="特別車加算" value="特別車加算A">
            <span>特特上</span>
          </label>
          <label>
            <input type="radio" name="特別車加算" value="特別車加算B">
            <span>特上</span>
          </label>
          <label>
            <input type="radio" name="特別車加算" value="特別車加算C">
            <span>上</span>
          </label>
          <label>
            <input type="radio" name="特別車加算" value="特別車加算なし" checked>
            <span>なし</span>
          </label>


        <dt>
          搬送距離
          <em>10㎞単位で繰上げた距離</em>
        <dd>
          <input type="number" name="走行距離" value="0" min="0" step="0.1">㎞

        <dt>
          乗車定員
          <em>6人を超え3人ごとに対象</em>
        <dd>
          <input type="number" name="乗車定員" value="1">人
      </dl>
    </fieldset>


    <fieldset>
      <legend>割増額</legend>
      <dl>
        <dt>
          冬期割増
          <em>北海道:11月16日〜翌4月15日までの期間</em><br>
          <em>他の対象地域:12月1日〜翌3月31日までの期間</em>

        <dd>
          <br>
          <label>
            <input type="radio" name="冬期期間" value="あり">
            <span>あり</span>
          </label>
          <label>
            <input type="radio" name="冬期期間" value="なし" checked>
            <span>なし</span>
          </label>

        <dt>
          夜間割増
          <em>PM7:00〜PM10:00 / 30分単位</em>
        <dd>
          <input type="number" name="夜間" value="0" min="0" max="180" step="1">分

        <dt>
          深夜割増
          <em>PM10:00〜AM5:00 / 30分単位</em>
        <dd>
          <input type="number" name="深夜" value="0" min="0"  max="560" step="1">分

        <dt>運賃
          早朝割増
          <em>AM5:00〜AM8:00 / 30分単位</em>
        <dd>
          <input type="number" name="早朝" value="0" min="0" max="180" step="1">分

    </fieldset>


    <fieldset>
      <legend>割引率<em>普通車基本額に限り</em></legend>
      <ul>
        <li>
          <label>
            <input type="radio" name="割引" value="なし" checked>
            <span>なし</span>
          </label>

        <li>
          <label>
            <input type="radio" name="割引" value="生活保護">
            <span>
              生活保護法に基づく葬祭扶助料の給付をうけて葬儀を営む遺体で葬儀執行時の運送に対し
            </span>
          </label>

        <li>
          <label>
            <input type="radio" name="割引" value="行旅人">
            <span>
              行旅病人及び行旅死亡人取扱法の適用をうける遺体
            </span>
          </label>

        <li>
          <label>
            <input type="radio" name="割引" value="解剖">
            <span>
              官公庁の指示による司法及び行政解剖遺体で葬儀執行時の運送を除き
            </span>
          </label>

        <li>
          <label>
            <input type="radio" name="割引" value="献体">
            <span>
              地方自治体の定める葬儀制度のための葬儀執行時の運送及び国公立病院の依頼による献体の運送
            </span>
          </label>
      </ul>
    </fieldset>


    <fieldset>
      <legend>諸料金</legend>
      <dl>
        <dt>
          遺骨託送
        <dd>
          <label>
            <input type="radio" name="遺骨託送" value="あり">
            <span>あり</span>
          </label>
          <label>
            <input type="radio" name="遺骨託送" value="なし" checked>
            <span>なし</span>
          </label>

        <dt>
          車両留置
        <dd>
          <input type="number" name="車両留置" min="0" step="1" value="0">分

        <dt>
          実費負担等<em>有料・高速自動車道路料金</em>
        <dd>
          <input type="number" name="実費負担等" value="0">円

        <dt>
          フェリーボート利用料<em>自動車航送船利用料</em>
        <dd>
          <input type="number" name="フェリー_航送所要時間" value="0">時間 /
          <input type="number" name="フェリー_利用料" value="0">円

        <dt>
          その他手数料
        <dd>
          <input type="number" name="手数料" value="0">円
      </dl>
    </fieldset>


    <fieldset>
      <legend>運賃</legend>
      <dl>
        <dt>
          霊柩車運賃
        <dd>
          <input type="output" name="運賃" value="0">円
        <dd>
          <input type="reset" value="リセット">
      </dl>
    </fieldset>
  </form>
</section>


<!-- ---------------------------------------------- -->
運賃
<script>


//_________________________________________________

(function () {/*
  ------------------------------------------------------
   [霊柩車の運賃の計算]

   * 最初に「運賃適用方」のページから運賃計算における算定条件を抜き出しておく。
   * これにより算定条件の変更があった場合、スクリプトを修正するのではなく、
     HTML側(var要素)の修正だけで済む。
   * form 要素の各エレメントの要素の name 属性と value 値をオブジェクト化した
     引数をもとに計算を行う
   * 戻り値は、オブジェクト型を返す。料金は、 obj["price"] に格納されている。
   * スクリプトは極力簡素に書いたつもり。
  ------------------------------------------------------*/

  const
    UNTIN_PARAMATER = new Object,
    doc = document,
    comma_reg = /,/g;


  function toNumber (str) {
    str = str.trim ().replace (comma_reg, '');
    return isNaN (str) ? null: parseFloat (str, 10);
  }


  Array.from (doc.querySelectorAll ('#TEKIYOU var'))
    .forEach (e => UNTIN_PARAMATER[e.id] = toNumber (e.textContent));

  //___________________

  //運賃計算処理
  function getUntin (d) {
    const
      UNTIN = new Object,
      P = UNTIN_PARAMATER,
      int = Math.floor,
      ceil = Math.ceil;

    //車種による算定
    UNTIN['特別車加算'] = 0;
    switch (d['車種']) {

    case '普通車' :
      UNTIN['基本額'] = P['基本_普通車'];
      //ここに乗車定員の算定を書くべきだが…
      break;

    case '特別車' :
      UNTIN['基本額'] = P['基本_特別車'];
      if ('特別車加算なし' !== d['特別車加算'])
        UNTIN['特別車加算'] = P[d['特別車加算']];
      break;

    default :
      throw new Error ('車種の設定に間違いがあります。');
      break;
    }


    //距離による算定(初乗りまでの料金は、10キロ以下なのか未満なのか?(以下を採用))
    let kyori = d['走行距離'];
    if (
      'undefined' === typeof kyori ||
      isNaN (kyori) ||
      kyori < 0
    )
      throw new Error ('走行距離の値が異常です');

    UNTIN['距離加算'] = (P['距離加算_基底'] < kyori)
      ? int (kyori / P['距離加算_定数']) * P['距離加算_' + d['車種']]
      : 0;


    //乗車定員による算定(普通車のみ)
    if ('普通車' === d['車種']) {
      let over = d['乗車定員'] - P['乗車定員_基底'];
      UNTIN['乗車定員'] = (0 < over)
        ? int ((over - 1) / P['乗車定員_定数'] + 1) * P['乗車定員_加算額']
        : 0;
    }
    else
      UNTIN['乗車定員'] = 0;


    //割引率の算定
    if ('普通車' === d['車種']) {
      let waribiki_type = d['割引'];
      switch (waribiki_type) {
      case 'なし' :
        UNTIN['割引額'] = 0;
        break;

      case '生活保護' : case '行旅人' : case '解剖' : case '献体' :
        UNTIN['割引額'] = -int (UNTIN['基本額'] * P['割引率_' + waribiki_type] / 10);
        break;

      default :
        throw new Error ('無効な割引が指定されました');
        break;
      }
    }
    else
      UNTIN['割引額'] = 0;


    //夜間・深夜・早朝作業時間は、作業工程日数が2日以上あることも考慮し上限制限は排除。
    //夜間割増(PM7:00-PM10:00, /30min)
    let yakan = d['夜間'];
    if (
      'undefined' === typeof yakan
      || isNaN (yakan)
      || yakan < 0
    )
      throw new Error ('無効な夜間時間が指定されました');

    UNTIN['夜間割増'] = (0 < yakan)
      ? int (yakan / P['夜間作業_定数'] + 1) * P['夜間作業_30分毎に']
      : 0;


    //深夜割増(PM10:00-AM5:00, /30min)
    let sinya = d['深夜'];
    if (
      'undefined' === typeof sinya
      || isNaN (sinya)
      || sinya < 0
    )
      throw new Error ('無効な深夜時間が指定されました');

    UNTIN['深夜割増'] = (0 < sinya)
      ? P['深夜作業'] +
        int (sinya / P['深夜作業_定数'] + 1) * P['深夜作業_30分毎に']
      : 0;


    //早朝割増(AM5:00-AM8:00, /30min)
    let soutyou = d['早朝'];
    if (
      'undefined' === typeof soutyou
      || isNaN (soutyou)
      || soutyou < 0
    )
      throw new Error ('無効な早朝時間が指定されました');

    UNTIN['早朝割増'] = (0 < soutyou)
      ? int (soutyou / P['早朝作業_定数'] + 1) * P['早朝作業_30分毎に']
      : 0;


    //冬期割増額の算出
    // = ((基本額)-(割引額)+(夜間+深夜+早朝)) * 0.2
    let sub_price =
      UNTIN['基本額'] + UNTIN['特別車加算'] +
      UNTIN['距離加算'] + UNTIN['乗車定員'] +
      UNTIN['割引額'] +
      UNTIN['夜間割増'] + UNTIN['深夜割増'] + UNTIN['早朝割増'];

    switch (d['冬期期間']) {
    case 'あり' : case 1 : case true :
      UNTIN['冬期割増額'] = int (sub_price * P['冬期割増率'] / 10);
      break;

    case 'なし' : case 0 : case false :
      UNTIN['冬期割増額'] = 0;
      break;

    default :
      throw new Error ('冬期期間の指定が不正です');
    }


    //遺骨託送料
    switch (d['遺骨託送']) {
    case 'あり' : case 1 : case true :
      UNTIN['遺骨託送料'] =
        int (((sub_price + UNTIN['冬期割増額']) * P['遺骨託送料']) / 10);
      break;

    case 'なし' : case 0 : case false :
      UNTIN['遺骨託送料'] = 0;
      break;

    default :
      throw new Error ('遺骨託送の値が不正です');
      break;
    }


    //車両留置
    let ryuuti = d['車両留置'];
    if (
      'undefined' === typeof ryuuti
      || isNaN (ryuuti)
      || ryuuti < 0
    )
      throw new Error ('車両留置時間の値が不正です');

    UNTIN['車両留置'] =
      ceil (ryuuti / P['車両留置_定数']) * P['車両留置_' + d['車種']]
      //現実には車両留置時間が0分などありえないが、0円も定義上必要なのか。


    //実費負担等(有料・高速自動車道路料金)
    UNTIN['実費負担等'] = d['実費負担等'] || 0;


    //フェリーボート利用料
    let
      fp = d['フェリー_利用料'],
      ft = d['フェリー_航送所要時間'],
      fh = P['フェリー_算定留置時間'];

    if (
      'undefined' === typeof fp || 'undefined' === typeof ft
      || isNaN (fp) || isNaN (ft) || fp < 0 || ft < 0
    )
      throw new Error ('フェリー利用料の項目の値が不正です');

    //{ 使用車両の航送料 + 航送期間中の固定費(1時間当り車両留置料相当額 × 航送所要時間)} × 2
    let
      one_hour = fh * 60, //時から分へ
      koteihi = ceil (one_hour / P['車両留置_定数']) * P['車両留置_' + d['車種']];

    UNTIN['フェリーボート利用料'] = (fp + koteihi * ft) * 2;


    //その他・手数料
    UNTIN['その他・手数料'] = d['手数料'] || 0;


    // 諸料金の合計を算出
    // let price = UNTIN.values.reduce ((a, b) => a + b);
    let price = 0;
    for (let key in UNTIN)
      if (UNTIN.hasOwnProperty (key))
        price += UNTIN[key];

    //端数処理
    UNTIN.price = ceil (price / 10) * 10;

console.log(UNTIN);
    return UNTIN;
  }

  //___________________________

  this.getUntin = getUntin;

}) ();



//_________________________________________________

(function () {
/*------------------------------------------------------
  form要素以下の要素の名前から、オブジェクト形式のデータに変換する
  ------------------------------------------------------*/

  // ischecked e => e.checked;
  function isSelected (e) {
    return e.selected;
  }

  function getSelectedOptions (opts) {
    // return Array.from (opts).filter (e => e.selected).map (e => e.value)
    var values = [ ];
    var i, e;

    for (i = 0; e = opts[i]; i++)
      if (e.selected)
        values.push (e.value);

    return values;
  }



  function getFormValues (form) {
    var values = { };
    var form = form || document.forms[0];

    if (! form)
      throw new Error ('form要素がありません');

    var es = form.elements;
    var e, cnt, name, val;

    for (cnt = 0; e = es[cnt]; cnt++) {
      if (name = e.name) {
        val = null;

        switch (e.tagName) {
        case 'INPUT' :
          switch (e.getAttribute ('type')) {
          case 'submit' : case 'button' :
          case 'image' : case 'reset' :
            continue;
            break;
          case 'radio' : case 'checkbox' :
            if (! e.checked)
              continue;
          default :
            val = isNaN (e.value) ? e.value: +e.value;//変換可能ならば数値に
          }
          break;

        case 'TEXTAREA' :
          val = e.value;
          break;

        case 'SELECT' :
          val = (e.multiple)
            ? getSelectedOptions (e.options)
            : e.options[e.selectedIndex].value
          break;

        default :
          continue;
        }

        if ('undefined' === typeof values[name])
          values[name] = val;
        else
          values[name] = [].concat (values[name], val);
      }
    }
    return values;
  }



  //___________


  this.getFormValues = getFormValues;
}) ();


//_________________________________


(function () {
  //load後、数値の部分に3桁区切りでカンマを挿入


  //String.replaceで使われる
  function cbfunc_replace (s) {
    return s.replace(/([0-9]+?)(?=(?:[0-9]{3})+$)/g, '$1,');
  }

  //カンマを取り去る
  function deleteComma (n) {
    return n.replace (/,/g, '');
  }

  //3桁ごとに置き換える
  function comma3 (num) {
    let
      n = String (num),
      r = /^[0-9]{4,}$/.test (n);

    return r ? n.replace(/^([-+]?[0-9]+)(?=\.|$)/, cbfunc_replace): num;
  }


  //置き換えるのは var 要素
  Array.from (document.querySelectorAll ('var')).forEach (e =>
    e.textContent = comma3 (e.textContent))


  //___________________________

  //dt要素の前後の余分な空白を削除する
  function expTrim (node) {
    if (node.hasChildNodes ()) {
      Array.from (node.childNodes).forEach (expTrim);
    }
    else if (3 === node.nodeType) {
      let t = node.textContent.trim ();
      if (null === t)
        node.parentNode.removeChild (node);
      else
        node.nodeValue = t;
    }
  }

  Array.from (document.querySelectorAll ('dt')).forEach (expTrim)


  //___________________________

  //セクションの先頭と末尾に[戻る]を追加する
  let
    d = document,
    p = d.createElement ('p'),
    a = d.createElement ('a');

  p.style.textAlign = 'right';
  p.className = 'print_none';

  a.textContent = '[メニューに戻る]';
  a.href = '#MENU';
  p.appendChild (a);

  Array.from (d.querySelectorAll ('section'))
    .forEach (sec => sec.insertBefore (p.cloneNode (true), sec.firstChild));

  p = p.cloneNode (true);
  p.appendChild (d.createTextNode (' / '));
  p.style.cssText += 'margin-top: 4em; border-top: 3px silver solid; text-align: right;';

  //セクション要素の末尾に追加する([topに戻る]付き)
  a = a.cloneNode (true);
  a.textContent = '[TOPに戻る]';
  a.href="#";
  p.appendChild (a);

  Array.from (d.querySelectorAll ('section'))
    .forEach (sec => sec.appendChild (p.cloneNode (true)));


//___________________________

  //メニュー(nav要素)から選択されたページ(section)を開く
  function open_section ({target}) {
    if ('A' !== target.tagName)
      return;

    let href = target.getAttribute ('href');

    if (0 !== href.indexOf ('#'))
      return;

    href = href.slice (1);
    let menu_id = ['UNTIN', 'TEKIYOU', 'KIYAKU', 'MENU'];
    if (menu_id.includes (href) || 0 < menu_id.indexOf (href)) {
      Array.from (document.querySelectorAll ('body > nav, body > section'))
        .forEach (sec => sec.style.display = sec.id === href ? 'block': 'none');
    }
  }

  d.addEventListener ('click', open_section, false);
  open_section ({target: d.querySelector ('a[href="#UNTIN"]')});


  //___________________________
  //車種の選択で普通車が選ばれた時、特別車追加料金の設定を無効にする
  function toDisabledHandler ({target}) {
    if ('INPUT' !== target.tagName) return;
    if ('radio' !== target.type) return;
    if ('車種' !== target.name) return;

    let
      es = target.form.elements,
      radio = es['特別車加算'],
      state = '普通車' === target.value,
      waribiki = es['割引'];

    Array.from (radio).forEach (e => e.disabled = state);
    Array.from (waribiki).forEach (e => e.disabled = ! state);
  }

  document.addEventListener ('click', toDisabledHandler, false);
  toDisabledHandler (
    {target: document.querySelector ('input[name="車種"]:checked')});

  //___________________________
  //イベントハンドらから呼ばれる
  function fare_calc () {
    let
      doc = document,
      form = doc.querySelector ('#REIKYUUSHA_UNTIN'),
      objData = getFormValues (form),//運賃の計算のための情報を集める
      untin = getUntin (objData),
      output = form.querySelector ('input[type="output"]');

    output.value = comma3 (untin.price);

    console.log (untin);
  }

  //___________________________

  //運賃計算(リアルタイムに計算するための)のイベント処理
  function formEventHandler (event) {
    let
      target = event.target,
      tag    = target.tagName;

    if (target.disabled)
      return;

    switch (tag) {
    case 'INPUT' :
      let type = target.type;

      switch (type) {
      case 'button' :
        break;

      default :
        break;
      }

      fare_calc ();
      break;

    case 'TEXTAREA' : case 'SELECT' :
      fare_calc ();
      break;
    }
  }

  //event の設定
  let form = document.querySelector ('#REIKYUUSHA_UNTIN');
  form.addEventListener ('click', formEventHandler, false);
  form.addEventListener ('blur', formEventHandler, false);
  form.addEventListener ('change', formEventHandler, false);

  //___________________________


  fare_calc ();
}) ();


//_______________________________________

//エンターキーによる入力項目を移動可能にする
(function () {

  
  function filter (n) {
    switch (n.tagName) {
    
    case 'INPUT' :
      if ('hidden' === n.type) break;
    case 'TEXTAREA' :
    case 'SELECT' :
      if (n.disabled) break;
      if (n.readOnly) break;
      return NodeFilter.FILTER_ACCEPT;
    }
    
    return NodeFilter.FILTER_SKIP;
  }

  
  function getStartNode () {
    this.currentNode = this.root;
    return this.firstChild ();
  }


  function getEndNode () {
    this.currentNode = this.root;
    return this.lastChild ();  
  }
  

  function handleEvent (event) {
    var e      = event.target;
    var walker = this.walker;

    if (! /INPUT|TEXTAREA|SELECT/.test (e.tagName)) return;

    switch (event.keyCode) {
    
    case 27 :
      return e.blur ();

    case 13 :
      if (event.ctrlKey) {
        switch (e.type) {
        
        case 'radio' : case 'checkbox' :
          e.checked = ! e.checked;
        case 'submit' : case 'reset' : case 'button' :
        case 'textarea' : case 'select' :
          break;
        }
      }
      else {
        walker.currentNode = e;
        n = event.shiftKey
        ? walker.previousNode () || getEndNode.call (walker)
        : walker.nextNode ()     || getStartNode.call (walker);
        n.focus ();
      }
    }
  }
  


  function init () {
    document.addEventListener ('keypress', this, false);

    this.walker = document.createTreeWalker (
      this.root,
      NodeFilter.SHOW_ELEMENT,
      filter,
      true
    );
    
  }

  //________________________________
  
  var root = document.querySelector ('#REIKYUUSHA_UNTIN');

  var KeyHandler = new Object;

  KeyHandler.handleEvent  = handleEvent;
  KeyHandler.root         = root;
  KeyHandler.disabled     = false;
  KeyHandler.walker       = null;
  KeyHandler.init         = init;
  
  KeyHandler.init ();

}) ();



</script>