pcalcsubmitcount=0;
psendsubmitcount=0;

function pcalcvalidate(fob) {

	var f = fob;
	var c,m,v,msg;
	var daysout = 1; // days of lead time required (from today)
	var maxlength = 60; // days of max rental

    msg = "チェックインの日付の設定が正しくありません。";
    var cidate = CheckDate(f.date1); // Check In Date
    if (!cidate) return abort(f.date1, msg);

    var syyyy = cidate.getFullYear();
    var smm = 1 + cidate.getMonth();
    var sdd = cidate.getDate();

    msg = "チェックアウトの日付の設定が正しくありません。";
    var codate = CheckDate(f.date2); // Check Out Date
    if (!codate) return abort(f.date2,msg);

    var eyyyy = codate.getFullYear();
    var emm = 1 + codate.getMonth();
    var edd = codate.getDate();

	msg = "チェックインの日は最低 "+daysout+" 日間先の日を入力して下さい。";
	var startdaysout = days_in_future(syyyy, smm, sdd);
	if (startdaysout <daysout) return abort(f.date1, msg);

	msg = "チェックアウトの日は、チェックイン当日かそれ以降の日からとなります。お確かめ下さい。";
	var enddaysout = days_in_future(eyyyy, emm, edd);
	if (enddaysout <startdaysout) return abort(f.date2, msg);

	msg = "チェックアウトの日は "+maxlength+" 日以内からとなります。ご確認下さい。";
	if (startdaysout + maxlength <enddaysout) return abort(f.date2, msg);

	if (VerifyChildren(f)) ; else return false;

    //Check for multiple clicking of submit button:
    if (pcalcsubmitcount > 0) {
        window.alert("只今、お客様の料金を加算しております。もうしばらくお待ち下さい。但しこのページから先へ進まない場合には、もう一度更新し、初めからやり直して下さい。");
        return false;
    }
    ++pcalcsubmitcount;
    return true;
} // function pcalcvalidate

function psendvalidate(fob) {

	if (!fob) return true;

	var f = fob;
	var c, m, v;
	var idx, msg;

// <INPUT TYPE="radio" VALUE="..." NAME="hotratebutton">

    msg = "旅行パックの種類を選択して下さい。";
    var bchecked = false; // buttonchecked

    if (f.hotratebutton) {
        if (f.hotratebutton.type == "radio") {
            if (f.hotratebutton.checked) bchecked = true;
        } else if (f.hotratebutton.length) {
            for (idx = 0; idx <f.hotratebutton.length; ++idx) {
                if (f.hotratebutton[idx].checked) {
                    bchecked = true;
                    break;
                }
            }
        } else if (f.hotratebutton.type == "hidden") {
            bchecked = true;
        } else {
            bchecked = true;
        }
        if (!bchecked) return abort(f.hotratebutton[0], msg);
    }

// <input type="text" name="First_Name" size="10">

	if (c = f.First_Name) {
		msg = "主な連絡先の、お客様の名前を入力して下さい。";
		c.value = c.value.replace(/^\s+|\s+$/g,"");
		v = sval(c);
        if (v=="") { return abort(c, msg); }
	    if (Check_Name_Field(c)) ; else return false;
	}

// <input type="text" name="Last_Name" size="15">

	if (c = f.Last_Name) {
		msg = "主な連絡先の、お客様の名字を入力して下さい。";
		c.value = c.value.replace(/^\s+|\s+$/g,"");
		v = sval(c);
        if (v=="") { return abort(c, msg); }
	    if (Check_Name_Field(c)) ; else return false;
	}

// <input size="36" name="Address" type="text" maxlength="72">

	if (c = f.Address) {
		c.value = c.value.replace(/^\s+|\s+$/g,"");
	    if (Check_Address_Field(c)) ; else return false;
	}

// <input type="text" name="Client Email Address" size="20">

	if (c = f["Client Email Address"]) {
		msg = "当社から、お客様の申し込みされた内容と確認のメールをお送りする為、お客様のメールアドレスを入力して下さい。";
		c.value = c.value.replace(/\s/g,"");
		v = sval(c);
        if (v=="") { return abort(c, msg); }
	    if (Check_EmailAddress_Field(c)) ; else return false;
		if (0 == v.search(/\S+@\S+\.\S+/)) ; // ok, continue
		else return abort(c, msg);
	}

// <input name="Phone Number" type="text" size="46" maxlength="80">

	if (c = f["Phone Number"]) {
		msg = "当社からお客様のご予約内容をお送りする為、お客様の連絡先の電話番号を入力して下さい。電話番号は、数字、スペース、ダッシュをのみ使用して下さい。";
		c.value = c.value.replace(/^\s+|\s+$/g,"");
		v = sval(c);
        if (v=="") { return abort(c, msg); }
		if (v.match(/[-0-9 ]+$/)) ; // ok, continue
		else return abort(c, msg);
	}

// <input name="Fax Number" type="text" size="30" maxlength="80">

	if (c = f["Fax Number"]) c.value = c.value.replace(/^\s+|\s+$/g,"");

// <input size="20" name="City" type="text" maxlength="30">

	if (c = f.City) c.value = c.value.replace(/^\s+|\s+$/g,"");

// <select name="State"><option value="AL">Alabama (AL)

// <input size="10" maxlength="10" name="Zip" type="text">

	if (c = f.Zip) c.value = c.value.replace(/^\s+|\s+$/g,"");

// <input size="30" name="Country" type="text" maxlength="50">

	if (c = f.Country) c.value = c.value.replace(/^\s+|\s+$/g,"");

// <SELECT NAME="Car_Pickup_Time"><OPTION>6:00A
// <SELECT NAME="Car_Dropoff_Time"><OPTION>6:00A
// <SELECT NAME="Inter_Start1"><OPTION>Honolulu, Oahu (HNL) 
// <SELECT NAME="Inter_End1"><OPTION>Honolulu, Oahu (HNL) 
// <SELECT NAME="Inter_Start1_Month"><OPTION VALUE="Jan">
// <SELECT NAME="Inter_Start1_Day"><OPTION VALUE="01">
// <SELECT NAME="Inter_Start1_Year"><OPTION VALUE="2004">
// <SELECT NAME="Inter_Start1_Time"><OPTION>5:00 AM 
// <SELECT NAME="Inter_Start2"><OPTION>Honolulu, Oahu (HNL) 
// <SELECT NAME="Inter_End2"><OPTION>Honolulu, Oahu (HNL) 
// <SELECT NAME="Inter_Start2_Month"><OPTION VALUE="Jan">
// <SELECT NAME="Inter_Start2_Day"><OPTION VALUE="01"> 
// <SELECT NAME="Inter_Start2_Year"><OPTION VALUE="2004">
// <SELECT NAME="Inter_Start2_Time"><OPTION>5:00 AM 

// TODO: use hidden NUMGUESTS, NUMPAYINGGUESTS, NUMFREECHILDREN for these ?

// <input name="Passenger1_Name_First" type="text" size="10" maxlength="20">
// <input name="Passenger1_Name_Last" type="text" size="20" maxlength="40">
// <input name="Passenger1_Age" type="text" size="2">

	for (idx = 1; idx <= 6; ++idx) {
		if (c = f["Passenger" + idx + "_Name_First"]) {
			msg = "旅行者様のお名前を入力して下さい。 " + idx + ".";
			if (! c.value.match(/\S/)) return abort(c, msg);
		}
		if (c = f["Passenger" + idx + "_Name_Last"]) {
			msg = "旅行者様のお名前（姓）を入力して下さい。 " + idx + ".";
			if (! c.value.match(/\S/)) return abort(c, msg);
		}
	} // for

//    if ((c = f["Passenger1_Age"]) && FieldExists('Car_Pickup_Time')) {

	if (c = f["Passenger1_Age"]) {
		msg = "運転手の方の年齢を入力してください。";
        if (c.value.match(/^[0-9]+$/)) ; // ok, continue: age is filled in
        else {
            var d=f["Car_Option"];
            if (d.value > 0) return abort(c, msg);
        }
	}

// <SELECT NAME="Smoking_Pref"><OPTION SELECTED>SMOKING
// <SELECT NAME="Bedding_Pref"><OPTION SELECTED>BEDDING
// <SELECT NAME="Occasion_Pref"><OPTION SELECTED>OCCASION
// <textarea name="Client_Comments" rows="7" cols="60"></textarea> 

// <input type="submit" name="Submit" value="Click Here To Book This Hotel - We Will Contact You For Payment.">

// Construction alert
	if (c = f["constructionalert"]) {
        m = "建物に関する注意事項をお読み頂いた後、チェックボックスにチェックを入れてください。";
        if (!c.checked) return abort(c, m);
    }

//Check for multiple clicking of submit button:

	if (psendsubmitcount > 0) {
		window.alert("只今、お客様の情報を再確認中です。もうしばらくお待ち下さい。但しこのページから先へ進まない場合には、もう一度更新し、初めからやり直して下さい。");
	return false;
	}
	++psendsubmitcount;
	return true;

} // function psendvalidate
