submitcount=0;
function carcalcvalidate(formobject) {

	var f = formobject || document.carcalc;
	var c,m,v;
	var daysout = 2; // days of lead time required (from today)
	var maxlength = 30; // days of max rental
    var startdaysout,enddaysout;

// form carcalc has these fields:

// <INPUT NAME="First" SIZE="10" TYPE="TEXT" MAXLENGTH="20">

	v = sval(c=f.First);
	if (v.length == 0) return abort(c,"運転者の名前を入力して下さい。");
    if (Check_Name_Field(c)) ; else return false;

// <INPUT NAME="Last" SIZE="15" TYPE="TEXT" MAXLENGTH="20">

	v = sval(c=f.Last);
	if (v.length == 0) return abort(c,"運転者のお名前（姓）を入力して下さい。");
    if (Check_Name_Field(c)) ; else return false;

// <INPUT NAME="Age" SIZE="3" TYPE="TEXT" MAXLENGTH="3">

	v = sval(c=f.Age);
	if (v.length == 0) return abort(c,"運転者の年齢を入力して下さい。");
	if (v.match("^[1-9][0-9]+$")) ; // ok, continue
	else return abort(c,"運転者の年齢は整数で入力して下さい。");
	v = nval(c);
	if (v == NaN) return abort(c,"運転者の年齢は数字で入力して下さい。");
	if (v <21) return abort(c, "運転は、21歳以上の方に限ります。");
	if (99 <v) return abort(c, "運転者の年齢が１００歳以上の場合はお電話下さい！");

    v = sval(c=f.email);
    if (v.length == 0) return abort(c,"お客様のメールアドレスを入力して下さい。");
    msg = "Your email address is not valid. Please re-enter it.";
    if (Check_EmailAddress_Field(c)) ; else return false;
    //if (0 == v.search(/\S+@\S+\.\S+/)) ; // ok, continue
    //else return abort(c, msg);

    v = sval(c=f.phone);
    if (v.length == 0) return abort(c,"一つか二つ以上の電話番号を入力して下さい。市街地番号、国名コード等も必要にあわせて入力して下さい。");

// <SELECT NAME="CarLoc" onChange="GetCarCats(0)">

	v = sval(c=f.CarLoc);
	if (v == "XX") return abort(c,"お客様のレンタカーの受け取り場所を選択して下さい。");
       
// <SELECT NAME="CarCat"> (filled in dynamically)

	v = sval(c=f.CarCat);
	if (v == "XX") return abort(c,"ご希望の車種（コンパクト、ミッドサイズ…）を選択して下さい。");
       
    msg = "レンタカーの貸出開始日の設定が正しくありません。";
	if (!CheckDate(f.date1)) return abort(f.date1,msg); 
    startdaysout = sval(f.date1);

// <SELECT NAME="Car_Start_Time">

	v = sval(c=f.Car_Start_Time);
	if (v == "XX") return abort(c,"レンタカー返却の時間を選択して下さい。");

    msg = "レンタカーの返却日の設定が正しくありません。";
	if (!CheckDate(f.date2)) return abort(f.date2,msg);
    enddaysout = sval(f.date2);

// <SELECT NAME="Car_End_Time">

	v = sval(c=f.Car_End_Time);
	if (v == "XX") return abort(c,"レンタカーの返却時間を選択して下さい。");
	if (enddaysout == startdaysout) { // same day, gotta check times
		var start24 = HHMM2min(sval(f.Car_Start_Time));
		if (start24 <0) return abort(c, "レンタカーの受取日を選択し直して下さい。");
		var end24 = HHMM2min(sval(f.Car_End_Time));
		if (end24 <0) return abort(c, "レンタカーの返却日を選択し直して下さい。");
		if (end24 <= start24) return abort(c, "レンタカーの受取日と返却日が同じ日の場合、返却時間は受取時間の前のみとなります。どうぞお時間をお確かめ下さい。");
	}

// <INPUT NAME="CarClubNum" SIZE="16">

	v = (sval(c=f.CarClubNum));
	if (v.length == 0) ; // ok, optional, continue
	else if (v.match(/^\d{8}$/)) ; // ok, continue
	else return abort(c, "ハーツ・ナンバーワン・クラブ番号は、8桁の数字で入力して下さい。");

// <INPUT TYPE="CHECKBOX" NAME="CarInfantSeat">
// <INPUT TYPE="CHECKBOX" NAME="CarToddlerSeat">

// <INPUT TYPE="SUBMIT" VALUE="Book Car Res" NAME="submit">
	c=f.submit;
// Check for double clicking of Submit button:
    if (submitcount > 0) {
        return abort(c, "只今、お客様のお申し込みを手続き中です。もうしばらくお待ち下さい。但し、「戻る」ボタンを何度も押してこのページをご覧頂いている場合、又は他の誤作動が生じた場合には、もう一度更新するか前のページに戻ってから再度ご入力下さい。");
    }
    ++submitcount;
    return true;
} // function carcalcvalidate
