function NumberZ2H (str) {
	return str.replace(/[０-９]/g, function (m) {
		return m.charCodeAt(0) - "０".charCodeAt(0);
	});
}

$.validator.methods.match = function (value, element, param) {
	return !value || param.test(value);
};

$.validator.methods.ok = function (value, element, param) {
	return param;
};

function swfLoaded () {
	var me = arguments.callee;

	$("object, embed").each(function () {
		if (this.getAttribute("id") == 'external_iconGeneratorSWF') me.swf = this;
	});

	if (me.swf)
		setTimeout(function () {
			me.swf.setText( $("#comment").val() );
		}, 1000);

	var timeid = null;
	$("#comment")
		.focus(function () {
			var t = $(this);
			timeid = setInterval(function () {
				var text = t.val()
				me.swf.setText(text);
			}, 1000);
		})
		.blur(function () {
			me.swf.setText($(this).val());
			clearInterval(timeid);
		});

};

Rules = {};
Rules.signup = {
	rules : {
		email : {
			required: true,
			maxlength: 50,
			email: true
		},

		email_confirm : {
			required: true,
			equalTo: "input[name='email']"
		},

		password : {
			required: true,
			match: /^[a-z0-9]{6,16}$/i,
			ok : function () {
				var con = $("input[name='password_confirm']");
				if ( $("input[name='password']").val() != con.val() ) {
					con.each(function () {
						$(this).valid();
					});
				}
				return true;
			}
		},

		password_confirm : {
			required: true,
			match: /^[a-z0-9]{6,16}$/i,
			equalTo: "input[name='password']"
		},

		'birth_date[1]' : {
			ok: function (e) {
				var y = +$('#birth_date_1').val();
				var m = +$('#birth_date_2').val();
				var d = +$('#birth_date_3').val();
				var t = new Date(y, m - 1, d);
				if (!y && !m && !d) return true;
				return (y == t.getFullYear()) &&
				       (m == t.getMonth() + 1) &&
				       (d == t.getDate());
			}
		},

		'birth_date[2]' : {
			ok: function (e) {
				var y = +$('#birth_date_1').val();
				var m = +$('#birth_date_2').val();
				var d = +$('#birth_date_3').val();
				var t = new Date(y, m - 1, d);
				if (!y && !m && !d) return true;
				return (y == t.getFullYear()) &&
				       (m == t.getMonth() + 1) &&
				       (d == t.getDate());
			}
		},

		'birth_date[3]' : {
			ok: function (e) {
				var y = +$('#birth_date_1').val();
				var m = +$('#birth_date_2').val();
				var d = +$('#birth_date_3').val();
				var t = new Date(y, m - 1, d);
				if (!y && !m && !d) return true;
				return (y == t.getFullYear()) &&
				       (m == t.getMonth() + 1) &&
				       (d == t.getDate());
			}
		},

		mailmagazine_letter_flag : {
			required: true
		},

		nickname : {
			required: true,
			maxlength: 15
		},

		gender : {
		},

//		run_history : {
//			required: true
//		},
//
		run_area : {
			required: true
		},

//		run_area_comment : {
//			maxlength: 
//		},

		comment : {
			required: true,
			ok : function () {
				return !!swfLoaded.swf;
			},
			maxlength: 25
		},

		blog_url : {
			url: true,
			maxlength: 50
		},

		profile : {
			required: true,
			maxlength: 50
		},
		
		athletic_type : {
		},

		sizeOfShirt : {
			required: true
		}

//		passport_flag : {
//			required: true
//		}
	},

	messages : {
		email                    : {
			required             : "メールアドレスを入力してください",
			maxlength            : "半角50文字以内で入力してください",
			email                : "メールアドレスの入力に誤りがあります"
		},
		email_confirm            : {
			required             : "メールアドレスを入力してください",
			maxlength            : "半角50文字以内で入力してください",
			equalTo              : "メールアドレスの入力が一致しません"
		},
		password                 : "半角英数6～16文字で入力してください",
		password_confirm         : {
			required             : "半角英数6～16文字で入力してください",
			equalTo              : "パスワードの入力が一致しません",
			match                : "半角英数6～16文字で入力してください"
		},

		'birth_date[1]'          : {
			required             : "生年月日を入力してください",
			ok                   : "生年月日の入力に誤りがあります"
		},
		'birth_date[2]'          : {
			required             : "生年月日を入力してください",
			ok                   : "生年月日の入力に誤りがあります"
		},
		'birth_date[3]'          : {
			required             : "生年月日を入力してください",
			ok                   : "生年月日の入力に誤りがあります"
		},
		mailmagazine_letter_flag : "共和国レターの購読を選択してください",
		nickname                 : {
			required             : "ニックネームを入力してください",
			maxlength            : "ニックネームは15文字以内で入力してください"
		},
		gender                   : {
			required             : "性別を選択してください"
		},
		run_area                 : "活動エリアを選択してください",
//		run_area_comment         : {
//		},
		comment                  : {
			required             : "ランニングへの思いを入力してください",
			maxlength            : "25文字以内で入力してください",
			ok                   : "ロード完了までお待ちください"
		},
		blog_url                 : {
			url                  : "入力されたURLに誤りがあります",
			maxlength            : "半角50文字以内で入力してください"
		},

		profile                  : "50文字以内で入力してください",
		passport_flag            : "パスポートの有無を選択してください",
		athletic_type            : "種目を選択してください",
		sizeOfShirt              : "Tシャツのサイズを選択してください"
	}
};

Rules.passport = {
	rules : {
		name1 : {
			required: "#passport_flag_1:checked",
			ok: function () {
				return $("#name1").val() && $("#name2").val();
			},
			maxlength : function () {
				return (/^.{1,8}$/.test($("#name1").val()) && /^.{1,8}$/.test($("#name2").val())) ? 99 : 0;
			}
		},

		name2 : {
			required: "#passport_flag_1:checked",
			ok: function () {
				return $("#name1").val() && $("#name2").val();
			},
			maxlength : function () {
				return (/^.{1,8}$/.test($("#name1").val()) && /^.{1,8}$/.test($("#name2").val())) ? 99 : 0;
			}
		},

		name_kana1 : {
			required: "#passport_flag_1:checked",
			ok: function () {
				return $("#name_kana1").val() && $("#name_kana2").val();
			},
			maxlength : function () {
				return (/^.{1,8}$/.test($("#name_kana1").val()) && /^.{1,8}$/.test($("#name_kana2").val())) ? 99 : 0;
			}
		},

		name_kana2 : {
			required: "#passport_flag_1:checked",
			ok: function () {
				return $("#name_kana1").val() && $("#name_kana2").val();
			},
			maxlength : function () {
				return (/^.{1,8}$/.test($("#name_kana1").val()) && /^.{1,8}$/.test($("#name_kana2").val())) ? 99 : 0;
			}
		},

		'zip[1]' : {
			required: "#passport_flag_1:checked",
			ok: function () {
				return /^\d{3}$/.test(NumberZ2H($("#zip_1").val())) && /^\d{2,4}$/.test(NumberZ2H($("#zip_2").val()));
			}
		},

		'zip[2]' : {
			required: "#passport_flag_1:checked",
			ok: function () {
				return /^\d{3}$/.test(NumberZ2H($("#zip_1").val())) && /^\d{2,4}$/.test(NumberZ2H($("#zip_2").val()));
			}
		},
		m_prefecture_code : {
		},
		address1 : {
			required: "#passport_flag_1:checked",
			maxlength: 25
		},

		address2 : {
			maxlength: 25
		},

		'tel[1]' : {
			required: "#passport_flag_1:checked",
			ok: function () {
				return /^\d{1,4}$/.test(NumberZ2H($("#tel_1").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#tel_2").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#tel_3").val()));
			}
		},

		'tel[2]' : {
			required: "#passport_flag_1:checked",
			ok: function () {
				return /^\d{1,4}$/.test(NumberZ2H($("#tel_1").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#tel_2").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#tel_3").val()));
			}
		},

		'tel[3]' : {
			required: "#passport_flag_1:checked",
			ok: function () {
				return /^\d{1,4}$/.test(NumberZ2H($("#tel_1").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#tel_2").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#tel_3").val()));
			}
		},

		'mobile[1]' : {
			required: function () {
				var m1 = $("#mobile_1").val();
				var m2 = $("#mobile_2").val();
				var m3 = $("#mobile_3").val();
				return !!(m1 || m2 || m3)
			},
			ok: function () {
				var m1 = $("#mobile_1").val();
				var m2 = $("#mobile_2").val();
				var m3 = $("#mobile_3").val();
				if (!m1 && !m2 && !m3) return true;
				return /^\d{1,4}$/.test(NumberZ2H(m1)) &&
				       /^\d{1,4}$/.test(NumberZ2H(m2)) &&
				       /^\d{1,4}$/.test(NumberZ2H(m3));
			}
		},

		'mobile[2]' : {
			required: function () {
				var m1 = $("#mobile_1").val();
				var m2 = $("#mobile_2").val();
				var m3 = $("#mobile_3").val();
				return !!(m1 || m2 || m3)
			},
			ok: function () {
				var m1 = $("#mobile_1").val();
				var m2 = $("#mobile_2").val();
				var m3 = $("#mobile_3").val();
				if (!m1 && !m2 && !m3) return true;
				return /^\d{1,4}$/.test(NumberZ2H(m1)) &&
				       /^\d{1,4}$/.test(NumberZ2H(m2)) &&
				       /^\d{1,4}$/.test(NumberZ2H(m3));
			}
		},

		'mobile[3]' : {
			required: function () {
				var m1 = $("#mobile_1").val();
				var m2 = $("#mobile_2").val();
				var m3 = $("#mobile_3").val();
				return !!(m1 || m2 || m3)
			},
			ok: function () {
				var m1 = $("#mobile_1").val();
				var m2 = $("#mobile_2").val();
				var m3 = $("#mobile_3").val();
				if (!m1 && !m2 && !m3) return true;
				return /^\d{1,4}$/.test(NumberZ2H(m1)) &&
				       /^\d{1,4}$/.test(NumberZ2H(m2)) &&
				       /^\d{1,4}$/.test(NumberZ2H(m3));
			}
		},

		mobile_email : {
			email: true,
			maxlength: 50
		}
	},

	messages : {
		name1                    : {
			required             : "姓名を入力してください",
			ok                   : "姓名を入力してください",
			maxlength            : "8文字以内で入力してください"
		},
		name2                    : {
			required             : "姓名を入力してください",
			ok                   : "姓名を入力してください",
			maxlength            : "8文字以内で入力してください"
		},
		name_kana1               : {
			required             : "ふりがな（姓名）を入力してください",
			ok                   : "ふりがな（姓名）を入力してください",
			maxlength            : "8文字以内で入力してください"
		},
		name_kana2               : {
			required             : "ふりがな（姓名）を入力してください",
			ok                   : "ふりがな（姓名）を入力してください",
			maxlength            : "8文字以内で入力してください"
		},

		'zip[1]'                 : {
			required             : "郵便番号を入力してください",
			ok                   : "郵便番号の入力に誤りがあります"
		},
		'zip[2]'                 : {
			required             : "郵便番号を入力してください",
			ok                   : "郵便番号の入力に誤りがあります"
		},
		m_prefecture_code        : {
			required             : "都道府県を選択してください"
		},
		address1                 : {
			required             : "住所を入力してください",
			maxlength            : "25文字以内で入力してください"
		},
		address2                 : {
			maxlength            : "25文字以内で入力してください"
		},

		'tel[1]'                 : {
			required             : "電話番号を入力してください",
			ok                   : "電話番号の入力に誤りがあります"
		},
		'tel[2]'                 : {
			required             : "電話番号を入力してください",
			ok                   : "電話番号の入力に誤りがあります"
		},
		'tel[3]'                 : {
			required             : "電話番号を入力してください",
			ok                   : "電話番号の入力に誤りがあります"
		},
		'mobile[1]'              : "携帯電話番号の入力に誤りがあります",
		'mobile[2]'              : "携帯電話番号の入力に誤りがあります",
		'mobile[3]'              : "携帯電話番号の入力に誤りがあります",
		mobile_email             : {
			email                : "携帯メールアドレスの入力に誤りがあります",
			maxlength            : "半角50文字以内で入力してください"
		}
	}
};
Rules.inquiry = {
	rules : {
		email : {
			required: true,
			maxlength: 50,
			email: true
		},

		subject : {
			maxlength: 50,
			required: true
		},

		inquiry_type : {
			required: true
		},

		body : {
			maxlength: 800,
			required: true
		}
	},

	messages : {
		email                    : {
			required             : "メールアドレスを入力してください",
			maxlength            : "半角50文字以内で入力してください",
			email                : "メールアドレスの入力に誤りがあります"
		},

		subject                  : {
			required             : "件名を入力してください",
			maxlength            : "全角50文字以内で入力してください"
		},

		inquiry_type             : {
			required             : "種別を選択してください"
		},

		body                     : {
			required             : "本文を入力してください",
			maxlength            : "全角800文字以内で入力してください"
		}
	}
};
Rules.runnight = {
	rules : {
		'birth_date[1]' : {
			required: true,
			ok: function (e) {
				var y = +$('#birth_date_1').val();
				var m = +$('#birth_date_2').val();
				var d = +$('#birth_date_3').val();
				var t = new Date(y, m - 1, d);
				if (!y && !m && !d) return true;

				var time = new Date(y + 20, m - 1, d);
				var diff = ((new Date).getTime() - time.getTime());
				if (diff < 0) {
					$("#parental_consent_flag").parent().parent().show();
					$("#parental_emergency_contact_number_1").parent().parent().show();
				} else {
					$("#parental_consent_flag").parent().parent().hide();
					$("#parental_consent_flag").attr('checked', false);
					$("#parental_emergency_contact_number_1").parent().parent().hide();
					
				}

				return (y == t.getFullYear()) &&
				       (m == t.getMonth() + 1) &&
				       (d == t.getDate());
			}
		},

		'birth_date[2]' : {
			required: true,
			ok: function (e) {
				var y = +$('#birth_date_1').val();
				var m = +$('#birth_date_2').val();
				var d = +$('#birth_date_3').val();
				var t = new Date(y, m - 1, d);
				if (!y && !m && !d) return true;

				var time = new Date(y + 20, m - 1, d);
				var diff = ((new Date).getTime() - time.getTime());
				if (diff < 0) {
					$("#parental_consent_flag").parent().parent().show();
					$("#parental_emergency_contact_number_1").parent().parent().show();
				} else {
					$("#parental_consent_flag").parent().parent().hide();
					$("#parental_consent_flag").attr('checked', false);
					$("#parental_emergency_contact_number_1").parent().parent().hide();
				}

				return (y == t.getFullYear()) &&
				       (m == t.getMonth() + 1) &&
				       (d == t.getDate());
			}
		},

		'birth_date[3]' : {
			required: true,
			ok: function (e) {
				var y = +$('#birth_date_1').val();
				var m = +$('#birth_date_2').val();
				var d = +$('#birth_date_3').val();
				var t = new Date(y, m - 1, d);
				if (!y && !m && !d) return true;

				var time = new Date(y + 20, m - 1, d);
				var diff = ((new Date).getTime() - time.getTime());
				if (diff < 0) {
					$("#parental_consent_flag").parent().parent().show();
					$("#parental_emergency_contact_number_1").parent().parent().show();
				} else {
					$("#parental_consent_flag").parent().parent().hide();
					$("#parental_consent_flag").attr('checked', false);
					$("#parental_emergency_contact_number_1").parent().parent().hide();
				}

				return (y == t.getFullYear()) &&
				       (m == t.getMonth() + 1) &&
				       (d == t.getDate());
			}
		},

		gender : {
			required : true
		},

//		run_history : {
//			required : true
//		},

		marathon_experience_flag : {
			required : true
		},

		full_marathon_hour : {
			ok : function () {
				return /^\d{0,2}$/.test(NumberZ2H($("#full_marathon_hour").val()));
			}
		},

		full_marathon_minute : {
			ok : function () {
				return /^\d{0,2}$/.test(NumberZ2H($("#full_marathon_minute").val()));
			}
		},

		half_marathon_hour : {
			ok : function () {
				return /^\d{0,2}$/.test(NumberZ2H($("#half_marathon_hour").val()));
			}
		},

		half_marathon_minute : {
			ok : function () {
				return /^\d{0,2}$/.test(NumberZ2H($("#half_marathon_minute").val()));
			}
		},

		ten_kilometer_hour : {
			ok : function () {
				return /^\d{0,2}$/.test(NumberZ2H($("#ten_kilometer_hour").val()));
			}
		},

		ten_kilometer_minute : {
			ok : function () {
				return /^\d{0,2}$/.test(NumberZ2H($("#ten_kilometer_minute").val()));
			}
		},

		'emergency_contact_number[1]' : {
			required: true,
			ok: function () {
				return /^\d{1,4}$/.test(NumberZ2H($("#emergency_contact_number_1").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#emergency_contact_number_2").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#emergency_contact_number_3").val()));
			}
		},

		'emergency_contact_number[2]' : {
			required: true,
			ok: function () {
				return /^\d{1,4}$/.test(NumberZ2H($("#emergency_contact_number_1").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#emergency_contact_number_2").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#emergency_contact_number_3").val()));
			}
		},

		parental_consent_flag : {
			required : function () {
				var y = +$('#birth_date_1').val();
				var m = +$('#birth_date_2').val();
				var d = +$('#birth_date_3').val();
				log([y, m, d]);
				var t = new Date(y + 20, m - 1, d);
				var diff = ((new Date).getTime() - t.getTime());
				return diff < 0;
			}
		},

		'emergency_contact_number[3]' : {
			required: true,
			ok: function () {
				return /^\d{1,4}$/.test(NumberZ2H($("#emergency_contact_number_1").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#emergency_contact_number_2").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#emergency_contact_number_3").val()));
			}
		},

		'parental_emergency_contact_number[1]' : {
			required: "#parental_consent_flag:checked",
			ok: function () {
				return /^\d{1,4}$/.test(NumberZ2H($("#parental_emergency_contact_number_1").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#parental_emergency_contact_number_2").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#parental_emergency_contact_number_3").val()));
			}
		},

		'parental_emergency_contact_number[2]' : {
			required: "#parental_consent_flag:checked",
			ok: function () {
				return /^\d{1,4}$/.test(NumberZ2H($("#parental_emergency_contact_number_1").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#parental_emergency_contact_number_2").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#parental_emergency_contact_number_3").val()));
			}
		},

		'parental_emergency_contact_number[3]' : {
			required: "#parental_consent_flag:checked",
			ok: function () {
				return /^\d{1,4}$/.test(NumberZ2H($("#parental_emergency_contact_number_1").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#parental_emergency_contact_number_2").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#parental_emergency_contact_number_3").val()));
			}
		},

		assembly_place : {
			required: true
		}

	},

	messages : {
		gender : "性別を選択してください",
		marathon_experience_flag : "参加経験を選択してください",
		full_marathon_hour : {
			required             : "記録を入力してください",
			ok                   : "記録の入力に誤りがあります"
		},

		full_marathon_minute : {
			required             : "記録を入力してください",
			ok                   : "記録の入力に誤りがあります"
		},

		half_marathon_hour : {
			required             : "記録を入力してください",
			ok                   : "記録の入力に誤りがあります"
		},

		half_marathon_minute : {
			required             : "記録を入力してください",
			ok                   : "記録の入力に誤りがあります"
		},

		ten_kilometer_hour : {
			required             : "記録を入力してください",
			ok                   : "記録の入力に誤りがあります"
		},
		ten_kilometer_minute : {
			required             : "記録を入力してください",
			ok                   : "記録の入力に誤りがあります"
		},
		parental_consent_flag : {
			required             : "未成年の方は親権者の同意が必須です"
		},
		'emergency_contact_number[1]'                 : {
			required             : "緊急連絡先を入力してください",
			ok                   : "緊急連絡先の入力に誤りがあります"
		},
		'emergency_contact_number[2]'                 : {
			required             : "緊急連絡先を入力してください",
			ok                   : "緊急連絡先の入力に誤りがあります"
		},
		'emergency_contact_number[3]'                 : {
			required             : "緊急連絡先を入力してください",
			ok                   : "緊急連絡先の入力に誤りがあります"
		},
		'parental_emergency_contact_number[1]'                 : {
			required             : "親権者の緊急連絡先を入力してください",
			ok                   : "親権者の緊急連絡先の入力に誤りがあります"
		},
		'parental_emergency_contact_number[2]'                 : {
			required             : "親権者の緊急連絡先を入力してください",
			ok                   : "親権者の緊急連絡先の入力に誤りがあります"
		},
		'parental_emergency_contact_number[3]'                 : {
			required             : "親権者の緊急連絡先を入力してください",
			ok                   : "親権者の緊急連絡先の入力に誤りがあります"
		},
		assembly_place : {
			required             : "参加希望場所を入力してください"
		}

	}
};
Rules.nightrunners = {
	rules : {
		'birth_date[1]' : {
			required: true,
			ok: function (e) {
				var y = +$('#birth_date_1').val();
				var m = +$('#birth_date_2').val();
				var d = +$('#birth_date_3').val();
				var t = new Date(y, m - 1, d);
				if (!y && !m && !d) return true;
				return (y == t.getFullYear()) &&
				       (m == t.getMonth() + 1) &&
				       (d == t.getDate());
			}
		},

		'birth_date[2]' : {
			required: true,
			ok: function (e) {
				var y = +$('#birth_date_1').val();
				var m = +$('#birth_date_2').val();
				var d = +$('#birth_date_3').val();
				var t = new Date(y, m - 1, d);
				if (!y && !m && !d) return true;
				return (y == t.getFullYear()) &&
				       (m == t.getMonth() + 1) &&
				       (d == t.getDate());
			}
		},

		'birth_date[3]' : {
			required: true,
			ok: function (e) {
				var y = +$('#birth_date_1').val();
				var m = +$('#birth_date_2').val();
				var d = +$('#birth_date_3').val();
				var t = new Date(y, m - 1, d);
				if (!y && !m && !d) return true;
				return (y == t.getFullYear()) &&
				       (m == t.getMonth() + 1) &&
				       (d == t.getDate());
			}
		},

		'mobile[1]' : {
			ok: function () {
				var m1 = $("#mobile_1").val();
				var m2 = $("#mobile_2").val();
				var m3 = $("#mobile_3").val();
				if (!m1 && !m2 && !m3) return true;
				return /^\d{1,4}$/.test(NumberZ2H(m1)) &&
				       /^\d{1,4}$/.test(NumberZ2H(m2)) &&
				       /^\d{1,4}$/.test(NumberZ2H(m3));
			}
		},

		'mobile[2]' : {
			ok: function () {
				var m1 = $("#mobile_1").val();
				var m2 = $("#mobile_2").val();
				var m3 = $("#mobile_3").val();
				if (!m1 && !m2 && !m3) return true;
				return /^\d{1,4}$/.test(NumberZ2H(m1)) &&
				       /^\d{1,4}$/.test(NumberZ2H(m2)) &&
				       /^\d{1,4}$/.test(NumberZ2H(m3));
			}
		},

		'mobile[3]' : {
			ok: function () {
				var m1 = $("#mobile_1").val();
				var m2 = $("#mobile_2").val();
				var m3 = $("#mobile_3").val();
				if (!m1 && !m2 && !m3) return true;
				return /^\d{1,4}$/.test(NumberZ2H(m1)) &&
				       /^\d{1,4}$/.test(NumberZ2H(m2)) &&
				       /^\d{1,4}$/.test(NumberZ2H(m3));
			}
		},

		'host_store_id[]' : {
			required: true
		},

		mobile_email : {
			email: true,
			maxlength: 50
		}
	},
	messages : {
		'host_store_id[]' : {
			required : "参加店舗を選択してください"
		}
	}
};
$.extend(Rules.nightrunners.rules,    Rules.runnight.rules);
$.extend(Rules.nightrunners.messages, Rules.runnight.messages);
delete Rules.nightrunners.rules.gender;



Rules.berlin = {
	rules : {
		name1 : {
			required: true,
			ok: function () {
				return $("#name1").val() && $("#name2").val();
			},
			maxlength : function () {
				return (/^.{1,8}$/.test($("#name1").val()) && /^.{1,8}$/.test($("#name2").val())) ? 99 : 0;
			}
		},

		name2 : {
			required: true,
			ok: function () {
				return $("#name1").val() && $("#name2").val();
			},
			maxlength : function () {
				return (/^.{1,8}$/.test($("#name1").val()) && /^.{1,8}$/.test($("#name2").val())) ? 99 : 0;
			}
		},

		name_kana1 : {
			required: true,
			ok: function () {
				return $("#name_kana1").val() && $("#name_kana2").val();
			},
			maxlength : function () {
				return (/^.{1,8}$/.test($("#name_kana1").val()) && /^.{1,8}$/.test($("#name_kana2").val())) ? 99 : 0;
			}
		},

		name_kana2 : {
			required: true,
			ok: function () {
				return $("#name_kana1").val() && $("#name_kana2").val();
			},
			maxlength : function () {
				return (/^.{1,8}$/.test($("#name_kana1").val()) && /^.{1,8}$/.test($("#name_kana2").val())) ? 99 : 0;
			}
		},

		passport_got_flag : {
			required: true
		},

		name_alpha1 : {
			required: true,
			ok: function () {
				return $("#name_alpha1").val() && $("#name_alpha2").val();
			}
//			maxlength : function () {
//				return (/^.{1,8}$/.test($("#name_alpha1").val()) && /^.{1,8}$/.test($("#name_alpha2").val())) ? 99 : 0;
//			}
		},

		name_alpha2 : {
			required: true,
			ok: function () {
				return $("#name_alpha1").val() && $("#name_alpha2").val();
			}
//			maxlength : function () {
//				return (/^.{1,8}$/.test($("#name_alpha1").val()) && /^.{1,8}$/.test($("#name_alpha2").val())) ? 99 : 0;
//			}
		},

		gender : {
			required: true
		},

		nationality_flag : {
			required: true
		},

		smoker_flag : {
			required: true
		},

		full_marathon_experience_flag : {
			required: true
		},

		personal_best_hour : {
			ok: function () {
				if ( $("#personal_best_hour").val() == "" 
				  && $("#personal_best_minute").val() == "" 
				  && $("#personal_best_second").val() == "" 
				) {
					return true;
				} else {
					return /^\d{1,4}$/.test(NumberZ2H($("#personal_best_hour").val())) &&
					       /^\d{1,4}$/.test(NumberZ2H($("#personal_best_minute").val())) &&
					       /^\d{1,4}$/.test(NumberZ2H($("#personal_best_second").val()));
				}
			}
		},

		personal_best_minute : {
			ok: function () {
				if ( $("#personal_best_hour").val() == "" 
				  && $("#personal_best_minute").val() == "" 
				  && $("#personal_best_second").val() == "" 
				) {
					return true;
				} else {
					return /^\d{1,4}$/.test(NumberZ2H($("#personal_best_hour").val())) &&
					       /^\d{1,4}$/.test(NumberZ2H($("#personal_best_minute").val())) &&
					       /^\d{1,4}$/.test(NumberZ2H($("#personal_best_second").val()));
				}
			}
		},

		personal_best_second : {
			ok: function () {
				if ( $("#personal_best_hour").val() == "" 
				  && $("#personal_best_minute").val() == "" 
				  && $("#personal_best_second").val() == "" 
				) {
					return true;
				} else {
					return /^\d{1,4}$/.test(NumberZ2H($("#personal_best_hour").val())) &&
					       /^\d{1,4}$/.test(NumberZ2H($("#personal_best_minute").val())) &&
					       /^\d{1,4}$/.test(NumberZ2H($("#personal_best_second").val()));
				}
			}
		},

		wear_size_top_flag : {
			required: true
		},

		wear_size_bottom_flag : {
			required: true
		},

		shoe_size : {
			required: true,
			match : /^\d+$/
		},

		attend_flag : {
			required: true
		},

		'zip[1]' : {
			required: true,
			ok: function () {
				return /^\d{3}$/.test(NumberZ2H($("#zip_1").val())) && /^\d{2,4}$/.test(NumberZ2H($("#zip_2").val()));
			}
		},

		'zip[2]' : {
			required: true,
			ok: function () {
				return /^\d{3}$/.test(NumberZ2H($("#zip_1").val())) && /^\d{2,4}$/.test(NumberZ2H($("#zip_2").val()));
			}
		},

		address1 : {
			required: "#passport_flag_1:checked",
			maxlength: 25
		},

		address2 : {
			maxlength: 25
		},

		'tel[1]' : {
			required: true,
			ok: function () {
				return /^\d{1,4}$/.test(NumberZ2H($("#tel_1").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#tel_2").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#tel_3").val()));
			}
		},

		'tel[2]' : {
			required: true,
			ok: function () {
				return /^\d{1,4}$/.test(NumberZ2H($("#tel_1").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#tel_2").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#tel_3").val()));
			}
		},

		'tel[3]' : {
			required: true,
			ok: function () {
				return /^\d{1,4}$/.test(NumberZ2H($("#tel_1").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#tel_2").val())) &&
				       /^\d{1,4}$/.test(NumberZ2H($("#tel_3").val()));
			}
		},
		'birth_date[1]' : {
			required: true,
			ok: function (e) {
				var y = +$('#birth_date_1').val();
				var m = +$('#birth_date_2').val();
				var d = +$('#birth_date_3').val();
				var t = new Date(y, m - 1, d);
				if (!y && !m && !d) return true;
				return (y == t.getFullYear()) &&
				       (m == t.getMonth() + 1) &&
				       (d == t.getDate());
			}
		},

		'birth_date[2]' : {
			required: true,
			ok: function (e) {
				var y = +$('#birth_date_1').val();
				var m = +$('#birth_date_2').val();
				var d = +$('#birth_date_3').val();
				var t = new Date(y, m - 1, d);
				if (!y && !m && !d) return true;
				return (y == t.getFullYear()) &&
				       (m == t.getMonth() + 1) &&
				       (d == t.getDate());
			}
		},

		'birth_date[3]' : {
			required: true,
			ok: function (e) {
				var y = +$('#birth_date_1').val();
				var m = +$('#birth_date_2').val();
				var d = +$('#birth_date_3').val();
				var t = new Date(y, m - 1, d);
				if (!y && !m && !d) return true;
				return (y == t.getFullYear()) &&
				       (m == t.getMonth() + 1) &&
				       (d == t.getDate());
			}
		},

		'mobile[1]' : {
			ok: function () {
				var m1 = $("#mobile_1").val();
				var m2 = $("#mobile_2").val();
				var m3 = $("#mobile_3").val();
				if (!m1 && !m2 && !m3) return true;
				return /^\d{1,4}$/.test(NumberZ2H(m1)) &&
				       /^\d{1,4}$/.test(NumberZ2H(m2)) &&
				       /^\d{1,4}$/.test(NumberZ2H(m3));
			}
		},

		'mobile[2]' : {
			ok: function () {
				var m1 = $("#mobile_1").val();
				var m2 = $("#mobile_2").val();
				var m3 = $("#mobile_3").val();
				if (!m1 && !m2 && !m3) return true;
				return /^\d{1,4}$/.test(NumberZ2H(m1)) &&
				       /^\d{1,4}$/.test(NumberZ2H(m2)) &&
				       /^\d{1,4}$/.test(NumberZ2H(m3));
			}
		},

		'mobile[3]' : {
			ok: function () {
				var m1 = $("#mobile_1").val();
				var m2 = $("#mobile_2").val();
				var m3 = $("#mobile_3").val();
				if (!m1 && !m2 && !m3) return true;
				return /^\d{1,4}$/.test(NumberZ2H(m1)) &&
				       /^\d{1,4}$/.test(NumberZ2H(m2)) &&
				       /^\d{1,4}$/.test(NumberZ2H(m3));
			}
		},

		'host_store_id[]' : {
			required: true
		},

		mobile_email : {
			email: true,
			maxlength: 50
		},

		blog_report_commit_flag : {
			required : true
		},

		attend_comment : {
			required : true
		}
	},

	messages : {
		name_alpha1              : {
			required             : "ローマ字氏名を入力してください",
			ok                   : "ローマ字氏名を入力してください",
			maxlength            : "8文字以内で入力してください"
		},
		name_alpha2              : {
			required             : "ローマ字氏名を入力してください",
			ok                   : "ローマ字氏名を入力してください",
			maxlength            : "8文字以内で入力してください"
		},
		name_kana1               : {
			required             : "ふりがな（姓名）を入力してください",
			ok                   : "ふりがな（姓名）を入力してください",
			maxlength            : "8文字以内で入力してください"
		},
		name_kana2               : {
			required             : "ふりがな（姓名）を入力してください",
			ok                   : "ふりがな（姓名）を入力してください",
			maxlength            : "8文字以内で入力してください"
		},

		passport_got_flag        : "応募にはパスポートが必要です",

		nationality_flag              : "国籍を選択してください",
		smoker_flag                   : "喫煙の習慣を選択してください",
		
		full_marathon_experience_flag : "フルマラソンのご経験を選択してください",
		personal_best_hour            : {
			ok                   : "自己ベストタイムの入力に誤りがあります"
		},
		personal_best_minute          : {
			ok                   : "自己ベストタイムの入力に誤りがあります"
		},
		personal_best_second          : {
			ok                   : "自己ベストタイムの入力に誤りがあります"
		},
		
		wear_size_top_flag            : "ウェアサイズ上下を選択してください",
		wear_size_bottom_flag         : "ウェアサイズ上下を選択してください",
		shoe_size                     : "シューズサイズを入力してください",

		blog_report_commit_flag       : "チェックしてください",
		attend_comment                : "意気込みを入力してください"
	}
};



$.extend(Rules.berlin.rules,    Rules.runnight.rules);
$.extend(Rules.berlin.messages, Rules.runnight.messages);

$(function () {

	var data = {
		errorElement: "div",
		errorClass: "balloon",

		errorPlacement: function(error, element) {
			var td = element.parent('td');
			var name = element.attr("name");
			if (/^(address[12]|m_prefecture_code|zip\[\d\]|.+(hour|minute)|wear_size_(top|bottom)_flag|full_marathon_experience_flag)$/.test(name)) {
				var tr = td.parent().parent();
				while (!tr.is("tr")) tr = tr.parent();
				tr.addClass("error");
			} else {
				if (!td.length) td = element.parent().parent('td');
				td.parent().addClass("error");
			}
			error.appendTo( td.next('td.signupTblHelp, td.signupTblHelp2').empty() );
		},

		success : function (label) {
			var t = label[0].parentNode;

			label.parent().empty().append('<div class="boxIconCheck"><img width="14" height="14" border="0" alt="" src="/img/signup/icon_check.png"/></div>');

			while (t) {
				var $t = $(t);
				if ($t.find("div.balloon").length) {
					break;
				} else {
					$t.removeClass("error");
				}
				t = t.parentNode;
			}
		},

		rules : {
		},

		messages : {
		}
	};

	$.extend(data.rules, Rules.signup.rules);
	$.extend(data.messages, Rules.signup.messages);
	$.extend(data.rules, Rules.passport.rules);
	$.extend(data.messages, Rules.passport.messages);
	if (location.pathname.match("/mypage/settings")) {
		delete data.rules["password"];
		delete data.rules["password_confirm"];
		data.rules["zip[1]"].required = true;
		data.rules["birth_date[1]"].required = true;
		data.rules["birth_date[2]"].required = true;
		data.rules["birth_date[3]"].required = true;

		if ($("#external_iconGeneratorSWF").length) {
			data.submitHandler = function (form) {
				if ($("#pageflow_event").val() != "doInput") return true;
				var ret = swfLoaded.swf.postImage();
				return false;
			};
		}
	} else
	if (location.pathname.match("/signup_event")) {
		if ($("#external_iconGeneratorSWF").length) {
			data.submitHandler = function (form) {
				if ($("#pageflow_event").val() != "doInput") return true;
				var ret = swfLoaded.swf.postImage();
				return false;
			};
		}
		$.each(data.rules, function (k, v) {
			if (v.required == "#passport_flag_1:checked") {
				data.rules[k].required = true;
			}
		});
		$.extend(data.rules, Rules.signup.rules);
		$.extend(data.messages, Rules.signup.messages);
	} else
	if (location.pathname.match("/signup_expo")) {
		// nothing to do
	} else
	if (location.pathname.match("/signup")) {
		$.each(data.rules, function (k, v) {
			if ( k.match("birth_date") ) {
				data.rules[k].required = true;
			}
		});
		Rules.signup.rules.gender.required = true;
		Rules.passport.rules.m_prefecture_code.required = true;
		delete Rules.passport.rules.address1.required;
		
		if ($("#external_iconGeneratorSWF").length) {
			data.submitHandler = function (form) {
				if ($("#pageflow_event").val() != "doInput") return true;
				var ret = swfLoaded.swf.postImage();
				return false;
			};
		}
	} else
	if (location.pathname.match("/nightrunners/osaka/entry")) {
		$.extend(data.rules, Rules.runnight.rules);
		$.extend(data.messages, Rules.runnight.messages);
		$.each(data.rules, function (k, v) {
			if (v.required == "#passport_flag_1:checked") {
				data.rules[k].required = true;
			}
		});
	} else
	if (location.pathname.match("/nightrunners/sendai/entry")) {
		$.extend(data.rules, Rules.runnight.rules);
		$.extend(data.messages, Rules.runnight.messages);
		$.each(data.rules, function (k, v) {
			if (v.required == "#passport_flag_1:checked") {
				data.rules[k].required = true;
			}
		});
	} else
	if (location.pathname.match("/nightrunners/fukuoka/entry")) {
		$.extend(data.rules, Rules.runnight.rules);
		$.extend(data.messages, Rules.runnight.messages);
		$.each(data.rules, function (k, v) {
			if (v.required == "#passport_flag_1:checked") {
				data.rules[k].required = true;
			}
		});
	} else
	if (location.pathname.match("/nightrunners/invitation")) {
		if ($("#external_iconGeneratorSWF").length) {
			data.submitHandler = function (form) {
				if ($("#pageflow_event").val() != "doInput") return true;
				var ret = swfLoaded.swf.postImage();
				return false;
			};
		}
		$.extend(data.rules, Rules.nightrunners.rules);
		$.extend(data.messages, Rules.nightrunners.messages);
	} else
	if ( location.pathname.match("/nightrunners/harajuku/entry") || location.pathname.match("/nightrunners/yokohama/entry") || location.pathname.match("/nightrunners/nagoya/entry") ) {
		$.each(data.rules, function (k, v) {
			if (v.required == "#passport_flag_1:checked") {
				data.rules[k].required = true;
			}
		});
	} else
	if (location.pathname.match("/berlin/entry")) {
		$.extend(data.rules, Rules.berlin.rules);
		$.extend(data.messages, Rules.berlin.messages);
		delete data.rules.comment;
		$("input[name='full_marathon_experience_flag']").click( (function () {
			if (!$(this).length) return arguments.callee;
			if (Number($(this).val())) {
				$("#full_marathon_experience_flag").parent().parent().find("th span.essential").remove();
				$("#personal_best_hour, #personal_best_minute, #personal_best_second, #personal_best_recorded_at_1, #personal_best_recorded_at_2")
					.css("background", "")
					.removeAttr("disabled");
				$("#full_marathon_experience_flag").parent().parent().find("th").find("strong:gt(0)").append('<span class="essential">*</span>');
			} else {
				$("#personal_best_hour, #personal_best_minute, #personal_best_second, #personal_best_recorded_at_1, #personal_best_recorded_at_2")
					.css("background", "#ddd")
					.attr("disabled", "disabled");
				$("#full_marathon_experience_flag").parent().parent().find("th span.essential").remove();
			}

			return arguments.callee;
		}).call($('input[name="full_marathon_experience_flag"]:checked')) );
	} else
	if (location.pathname.match("/inquiry")) {
		$.extend(data.rules, Rules.inquiry.rules);
		$.extend(data.messages, Rules.inquiry.messages);
	} else
	if (location.pathname.match("/runnight")) {
		$.each(data.rules, function (k, v) {
			if (v.required == "#passport_flag_1:checked") {
				data.rules[k].required = true;
			}
		});
		$.extend(data.rules, Rules.runnight.rules);
		$.extend(data.messages, Rules.runnight.messages);
	} else
	if (location.pathname.match("/mypage/passport")) {
		$.each(data.rules, function (k, v) {
			if (v.required == "#passport_flag_1:checked") {
				data.rules[k].required = true;
			}
		});
	} else
	if (location.pathname.match("/life/challenge/yokohama_monitor/entry")) {
		$.each(data.rules, function (k, v) {
			if (v.required == "#passport_flag_1:checked") {
				data.rules[k].required = true;
			} else
			if ( k.match("birth_date") ) {
				data.rules[k].required = true;
			}
		});
		Rules.signup.rules.gender.required = true;
		Rules.signup.rules.athletic_type.required = true;
		
	} else
	if (location.pathname.match("/life/challenge/cherry_marathon/entry")) {
		$.each(data.rules, function (k, v) {
			if (v.required == "#passport_flag_1:checked") {
				data.rules[k].required = true;
			} else
			if ( k.match("birth_date") ) {
				data.rules[k].required = true;
			}
		});
		Rules.signup.rules.gender.required = true;
		Rules.signup.rules.athletic_type.required = true;
		Rules.signup.rules.sizeOfShirt.required = true;
		
	} else
	if ( location.pathname.match("/life/challenge/running_lecture/entry") ) {
		$.each(data.rules, function (k, v) {
			if (v.required == "#passport_flag_1:checked") {
				data.rules[k].required = true;
			} else
			if ( k.match("birth_date") ) {
				data.rules[k].required = true;
			}
			Rules.signup.rules.gender.required = true;
			Rules.passport.rules.m_prefecture_code.required = true;
		});
	} else
	if ( location.pathname.match("/life/challenge/london/entry") ) {
		$.extend(data.rules, Rules.passport.rules);
		$.extend(data.messages, Rules.passport.messages);
		$.extend(data.rules, Rules.berlin.rules);
		$.extend(data.messages, Rules.berlin.messages);
		$.each(data.rules, function (k, v) {
			if (v.required == "#passport_flag_1:checked") {
				data.rules[k].required = true;
 			}
 		});
	}
	
	log(data.rules);
	log(data.messages);

	$("table.signupTbl tr").each(function () {
		var tr = $(this);
		tr.find("input,textarea,select").focus(function () {
			var t = $(this);
			t.addClass("active");
			tr.addClass("active");
			setTimeout(function () {
				t.valid();
			}, 3000);
		}).blur(function () {
			var $t = $(this);
			$t.removeClass("active");
			tr.removeClass("active");

			if ($t.attr("name").match(/^(zip|tel|mobile|emergency_contact_number)|(hour|minute|second)$/)) {
				$t.val(NumberZ2H($t.val()));
			}
		});
	});

	$("table.signupTbl select").change(function () {
		$(this).valid();
	});

	// http://dev.adirepublic.jp/img/signup/btn_career_01.gif
	function imgradio (name) {
		var wrapper = $("<ul class='career wrapper'/>");

		var selected = false;
		var parent = null;
		var buttons = [];
		$('input[name="run_history"]').each(function () {
			var input = $(this);
			var num   = String(+input.val() + 100).slice(1);
			var label = input.parent().hide();
			var src   = "/img/signup/btn_career_" + num + ".gif";
			var b = {
				input : input,
				src   : src,
				sel   : src.replace(/\.gif/, '_sel.gif'),
				img   : $("<img/>").attr({ alt: label.text(), src: src })
			};
			buttons.push(b);

			wrapper.append(b.img);
			b.img.wrap("<li><a href='javascript:void(0)'/></li>")
				.click(function () {
					$.each(buttons, function () {
						this.input.removeAttr('checked');
						this.img.attr('src', this.src);
					});
					b.input.attr('checked', 'checked');

					b.img.attr('src', b.sel);
				})
				.hover(
					function over () {
						b.img.attr('src', b.src.replace(/\.gif/, '_o.gif'));
					},
					function out () {
						b.img.attr('src', b.input.is(":checked") ? b.sel : b.src);
					}
				);

			if (input.is(":checked")) {
				selected = true;
				b.img.click();
			}
			parent = label.parent();
		});

		if (parent) parent.append(wrapper);
		if (!selected && buttons[0]) {
			buttons[0].img.click();
		}
	}

	$("ul.career").remove();
	imgradio();


	$("input[name='passport_flag']").click( (function () {
		if (!$(this).length) return arguments.callee;
		if (Number($(this).val())) {
			$("#h3PassportAddress + table").css("opacity", 1).find("input, select").removeAttr("disabled");
			// $("#h3PassportAddress + table").block({ message: null });
		} else {
			$("#h3PassportAddress + table").css("opacity", 0.5).find("input, select").attr("disabled", "disabled");
			// $("#h3PassportAddress + table").unblock();
		}

		return arguments.callee;
	}).call($('input[name="passport_flag"]:checked')) );

//	if (!$("input[name='passport_flag']").length) {
//		delete data.rules['passport_flag'];
//	}

	$("#zip_1").parent().find("a").click(function () {
		if ( $("#zip_1").valid() ) {
			$.getJSON("/api/address", { zip: NumberZ2H($("#zip_1").val() + $("#zip_2").val()) }, function (d) {
				d = d.data;
				if (d.pref_code) {
					$("#m_prefecture_code").val(d.pref_code);
					$("#address1").val(d.address);
				}
			});
		};
		return false;
	});

	var error = $("#h2Input").next();
	if (!error.is(".caution")) {
		error = $('<div class="caution"></div>');
		$("#h2Input").after(error);
	}
	if (!$("form div.balloon").length) {
		error.empty();
	}
	$("div.boxSignup02 form, div.boxSignup03 form").bind("invalid-form.validate", function (e, validator) {

		if (validator.numberOfInvalids()) {
			error.text("入力内容に不備があります。該当箇所をメッセージに従って入力してください。");
		} else {
			error.empty();
		}

//		if ($("#marathon_experience_flag_1").is(":checked")) {
//			var full_marathon_hour = $("#full_marathon_hour").val(), full_marathon_minute = $("#full_marathon_minute").val();
//			var half_marathon_hour = $("#half_marathon_hour").val(), half_marathon_minute = $("#half_marathon_minute").val();
//			var ten_kilometer_hour = $("#ten_kilometer_hour").val(), ten_kilometer_minute = $("#ten_kilometer_minute").val();
//
//			if (
//				!full_marathon_hour && !full_marathon_minute &&
//				!half_marathon_hour && !half_marathon_minute &&
//				!ten_kilometer_hour && !ten_kilometer_minute
//			   ) {
//
//				validator.formatAndAdd($("#full_marathon_hour")[0], {
//					method: "required"
//				});
//			} else {
//			}
//
//			if ( (/^\d{1,2}$/.test(NumberZ2H()) && /^\d{1,2}$/.test(NumberZ2H())) ||
//			     (/^\d{1,2}$/.test(NumberZ2H()) && /^\d{1,2}$/.test(NumberZ2H())) ||
//			     (/^\d{1,2}$/.test(NumberZ2H()) && /^\d{1,2}$/.test(NumberZ2H())) ) {
//
//				validator.formatAndAdd($("#full_marathon_hour")[0], {
//					method: "custom"
//				});
//			}
//		}
	}).validate(data);

});

function posttedImage (status) { try {
	var form  = $("div.boxSignup02 form").unbind().submit();
//	var sform = form.clone().empty().unbind();
//
//	var params = $("div.boxSignup02 form").serializeArray();
//	params.push({ name: 'commit', value: 1 });
//
//	$.each(params, function () {
//		$("<input type='hidden'/>").attr({ name : this.name, value: this.value }).appendTo(sform);
//	});
//
//	log(  form.serializeArray() );
//	log( sform.serializeArray() );
//
//	sform.appendTo(document.body);
//	sform.submit();
} catch (e) { log(e) } };
