	$(document).ready(function() {

		var func = function(text,obj){
				return function(){

					/*
						グループの場合は最初の要素にすりかえる
					*/
					var type = $(obj).attr("type");
					if ( type == "radio" || type == "checkbox2" ) {
						var name = $(obj).attr("name");
						obj = "input[name=" + name + "]:first";
//						obj = $(filter);
					}

					/*
						既に別のエラーが出ていた場合は前のを消す
					*/
					if($(obj).next("span.logging_error").length > 0){
						$(obj).next("span.logging_error").remove();
						$(obj).css("background","white");
					}
					$(obj).attr("error_flg",true);
//					console.log($(obj).attr("error_flg"));
					errorCheckAll();
					var top = 0;
					if( $(obj).position().top !== null){
						top = $(obj).position().top +20;
					}
					var left = $(obj).position().left || 0;
					var $errorObj = $("<span class='logging_error'></span>")
							.css("position","absolute")
//							.css("opacity","0.6")
//							.css("border-width","2px")
//							.css("border-style","dotted")
//							.css("border-color","red")
							.css("color","#46acd6")
//							.css("background","black")
							.css("top",top+"px")
							.css("left",left+"px")
							.css("cursor","pointer")
							.text(text)
							.draggable();
					$(obj)
					.after($errorObj)
					.css("background","#fbf3ea");
				}
			};
		var loggingObj = new classLog();
		loggingObj.type="info";
		loggingObj.eventType="load";
		loggingObj.detail={
			eventTarget:"page"
		};
		loggingObj.writeLog(function(){});

		/*
			submit 処理（非同期チェックしてから処理）
		*/
		$('form').submit(function(e){
			$(".required,.req_group")
				.each(function(index){
				var type = $(this).attr("type");
				if ( type == "radio" || type == "checkbox" ){
					var name = $(this).attr("name");
					var w = "input[name=" + name + "]:checked";
					var val = $(w).val();
					if ( typeof val == 'undefined' ) { val = ""; }
				}
				else {
					var val = $(this).val();
				}
				if(!checkEnter(val)){
					/*logger*/
					var loggingObj = new classLogSync();
					loggingObj.type="error";
					loggingObj.eventType="submit";
					loggingObj.detail={
						checkType:"required",
						eventTarget:$(this).attr("name")
//					eventValue:val
					};
					loggingObj.writeLog(func("必須項目です",$(this)));
				}
				});

			if( $("span.logging_error" ).length > 0){
				alert( "エラーの項目が" + $("span.logging_error" ).length + "個あります。\r\n再度ご確認願います" );
				return false;
			}
			else {
				return true;
			}
		});

		/*
				inputタイプ全てにエラーオブジェ削除処理を追加する
		*/

		$("input,textarea")

		.keyup(function(e){
			if($(this).next("span.logging_error").length > 0){
				$(this).next("span.logging_error").remove();
				$(this).css("background","white");
				$(this).attr("error_flg",false);
//				console.log($(this).attr("error_flg"));
					if(errorCheckAll()){
						$(".sub").attr("disabled",false);
					}
			}
		})
		.blur(function(e){
				/*
					グループの場合は最初の要素にすりかえる
				*/
			var type = $(this).attr("type");
			if ( type == "radio" || type == "checkbox" ) {
				var name = $(this).attr("name");
				obj = "input[name=" + name + "]:first";
			}
			else
				obj = this;

			if($(obj).next("span.logging_error").length > 0){
				$(obj).next("span.logging_error").remove();
				$(obj).css("background","white");
				$(obj).attr("error_flg",false);
					if(errorCheckAll()){
						$(".sub").attr("disabled",false);
					}
			}
		});
		/*
				classにrequiredが付いてれば必須チェック
		*/
		$(".required")
		.css("background","#fbf3ea")
		.keyup(function(e){
			if(e.keyCode===9||(e.keyCode >=240&&e.keyCode<=244)){
				e.preventDefault();
				return;
			}
			var val = $(this).val();
			/*logger*/
			var loggingObj = new classLog();
			loggingObj.type="info";
			loggingObj.eventType="keyup";
			loggingObj.detail={
				checkType:"required",
				eventTarget:$(this).attr("name")
//				eventValue:val
			};
			loggingObj.writeLog(function(){});
			if(!checkEnter(val)){
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="error";
				loggingObj.eventType="keyup";
				loggingObj.detail={
					checkType:"required",
					eventTarget:$(this).attr("name")
//					eventValue:val
				};
				loggingObj.writeLog(func("必須項目です",$(this)));
			}else{
				$(this).css("background","white");
				$(this).attr("error_flg",false);
			}
		})
		.blur(function(e){
			var val = $(this).val();
			/*logger*/
			var loggingObj = new classLog();
			loggingObj.type="info";
			loggingObj.eventType="blur";
			loggingObj.detail={
				checkType:"required",
				eventTarget:$(this).attr("name")
//				eventValue:val
			};
			loggingObj.writeLog(function(){});
			if(!checkEnter(val)){
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="error";
				loggingObj.eventType="blur";
				loggingObj.detail={
					checkType:"required",
					eventTarget:$(this).attr("name")
//					eventValue:val
				};
				loggingObj.writeLog(func("必須項目です",$(this)));
			}
		})

		/* select box */
		.exChangeSelect(function(e){
			var val = $(this).val();
			/*logger*/
			var loggingObj = new classLog();
			loggingObj.type="info";
			loggingObj.eventType="select";
			loggingObj.detail={
				checkType:"required",
				eventTarget:$(this).attr("name")
//				eventValue:val
			};
			loggingObj.writeLog(function(){});
			if(!checkEnter(val)){
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="error";
				loggingObj.eventType="select";
				loggingObj.detail={
					checkType:"required",
					eventTarget:$(this).attr("name")
//					eventValue:val
				};
				loggingObj.writeLog(func("必須項目です",$(this)));
			}else{
				$(this).css("background","white");
				$(this).attr("error_flg",false);
				if($(this).next("span.logging_error").length > 0){
					$(this).next("span.logging_error").remove();
					$(this).css("background","white");
					$(this).attr("error_flg",false);
					if(errorCheckAll()){
						$(".sub").attr("disabled",false);
					}
				}
			}
		});


		/* checkbox */
		$(".req_group")
		.blur(function(e){
			var type = $(this).attr("type");
			if ( type != "checkbox" && type != "radio"){
				return ;
			}
			var name = $(this).attr("name");
			var w = "input[name=" + name + "]:checked";
			var val = $(w).val();
//				alert( val );
			if ( typeof val == 'undefined' ) { val = ""; }
			/*logger*/
			var loggingObj = new classLogSync();
			loggingObj.type="info";
			loggingObj.eventType="blur";
			loggingObj.detail={
				checkType:"required",
				eventTarget:$(this).attr("name")
//				eventValue:val
			};
			loggingObj.writeLog(function(){});
			if(!checkEnter(val)){
				/*logger*/
				var loggingObj = new classLogSync();
				loggingObj.type="error";
				loggingObj.eventType="blur";
				loggingObj.detail={
					checkType:"required",
					eventTarget:$(this).attr("name")
//					eventValue:val
				};
				loggingObj.writeLog(func("必須項目です",$(this)));
			}
		})
		.click(function(e){
			var type = $(this).attr("type");
			if ( type == "checkbox" || type == "radio"){
				var name = $(this).attr("name");
				var w = "input[name=" + name + "]:checked";
				var val = $(w).val();
//				alert( val );
				if ( typeof val == 'undefined' ) { val = ""; }
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="info";
				loggingObj.eventType="checked";
				loggingObj.detail={
					checkType:"required",
					eventTarget:$(this).attr("name")
//				eventValue:val
				};
				loggingObj.writeLog(function(){});
				if(!checkEnter(val)){
					/*logger*/
					var loggingObj = new classLogSync();
					loggingObj.type="error";
					loggingObj.eventType="checked";
					loggingObj.detail={
						checkType:"required",
						eventTarget:$(this).attr("name")
//					eventValue:val
					};
					loggingObj.writeLog(func("必須項目です",$(this)));
				}else{
					var	obj = $("input[name=" + name + "]:first");
					$(obj).css("background","white");
					$(obj).attr("error_flg",false);
					if($(obj).next("span.logging_error").length > 0){
						$(obj).next("span.logging_error").remove();
						$(obj).css("background","white");
						$(obj).attr("error_flg",false);
						if(errorCheckAll()){
							$(".sub").attr("disabled",false);
						}
					}
				}
			}
		});






		/*
				classにrepnumが付いてれば全角数値を半角数値に変換する
		*/
		$(".repnum")
		.keyup(function(e){
			/*logger*/
			var loggingObj = new classLog();
			loggingObj.type="info";
			loggingObj.eventType="keyup";
			loggingObj.detail={
				checkType:"replaceNumber",
				eventTarget:$(this).attr("name")
//				eventValue:$(this).val()
			};
			loggingObj.writeLog(function(){});
			if(!checkAscii($(this).val())){
				$(this).val(replaceDoubleNum($(this).val()));
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="warn";
				loggingObj.eventType="keyup";
				loggingObj.detail={
					checkType:"replaceNumber",
					eventTarget:$(this).attr("name")
//					eventValue:$(this).val()
				};
				loggingObj.writeLog(function(){});
			}
		})
		.blur(function(e){
			/*logger*/
			var loggingObj = new classLog();
			loggingObj.type="info";
			loggingObj.eventType="blur";
			loggingObj.detail={
				checkType:"replaceNumber",
				eventTarget:$(this).attr("name")
//				eventValue:$(this).val()
			};
			loggingObj.writeLog(function(){});
			if(!checkAscii($(this).val())){
				$(this).val(replaceDoubleNum($(this).val()));
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="warn";
				loggingObj.eventType="blur";
				loggingObj.detail={
					checkType:"replaceNumber",
					eventTarget:$(this).attr("name")
//					eventValue:$(this).val()
				};
				loggingObj.writeLog(function(){});
			}
		});
		/*
				classにrepphoneが付いてれば全角数値を半角数値に変換する（電話番号用）
		*/
		$(".repphone")
		.keyup(function(e){
			/*logger*/
			var loggingObj = new classLog();
			loggingObj.type="info";
			loggingObj.eventType="keyup";
			loggingObj.detail={
				checkType:"replacePhoneNumber",
				eventTarget:$(this).attr("name")
//				eventValue:$(this).val()
			};
			loggingObj.writeLog(function(){});
			if(!checkAscii($(this).val())){
				$(this).val(replacePhoneNum($(this).val()));
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="warn";
				loggingObj.eventType="keyup";
				loggingObj.detail={
					checkType:"replacePhoneNumber",
					eventTarget:$(this).attr("name")
//					eventValue:$(this).val()
				};
				loggingObj.writeLog(function(){});
			}
		})
		.blur(function(e){
			/*logger*/
			var loggingObj = new classLog();
			loggingObj.type="info";
			loggingObj.eventType="blur";
			loggingObj.detail={
				checkType:"replacePhoneNumber",
				eventTarget:$(this).attr("name")
//				eventValue:$(this).val()
			};
			loggingObj.writeLog(function(){});
			if(!checkAscii($(this).val())){
				$(this).val(replacePhoneNum($(this).val()));
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="warn";
				loggingObj.eventType="blur";
				loggingObj.detail={
					checkType:"replacePhoneNumber",
					eventTarget:$(this).attr("name")
//					eventValue:$(this).val()
				};
				loggingObj.writeLog(function(){});
			}
		});





		/*
				classにnumが付いてれば半角数値0-9チェック
		*/
		$(".num")
		.attr("error_flg",false)
		.keyup(function(e){
			/*logger*/
			var loggingObj = new classLog();
			loggingObj.type="info";
			loggingObj.eventType="keyup";
			loggingObj.detail={
				checkType:"number",
				eventTarget:$(this).attr("name")
//				eventValue:$(this).val()
			};
			loggingObj.writeLog(function(){});
			if(!checkNum($(this).val())){
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="error";
				loggingObj.eventType="keyup";
				loggingObj.detail={
					checkType:"number",
					eventTarget:$(this).attr("name")
//					eventValue:$(this).val()
				};
				loggingObj.writeLog(func("半角数値のみ入力可能です",$(this)));
			}
		})
		.blur(function(e){
			/*logger*/
			var loggingObj = new classLog();
			loggingObj.type="info";
			loggingObj.eventType="blur";
			loggingObj.detail={
				checkType:"number",
				eventTarget:$(this).attr("name")
//				eventValue:$(this).val()
			};
			loggingObj.writeLog(function(){});
			if(!checkNum($(this).val())){
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="error";
				loggingObj.eventType="blur";
				loggingObj.detail={
					checkType:"number",
					eventTarget:$(this).attr("name")
//					eventValue:$(this).val()
				};
				loggingObj.writeLog(func("半角数値のみ入力可能です",$(this)));
			}
		});
		/*
				classにphoneが付いてれば半角数値0-9+ハイフン(-)チェック
		*/
		$(".phone")
		.attr("error_flg",false)
		.keyup(function(e){
			/*logger*/
			var loggingObj = new classLog();
			loggingObj.type="info";
			loggingObj.eventType="keyup";
			loggingObj.detail={
				checkType:"phone",
				eventTarget:$(this).attr("name")
//				eventValue:$(this).val()
			};
			loggingObj.writeLog(function(){});
			if(!checkPhoneNum($(this).val())){
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="error";
				loggingObj.eventType="keyup";
				loggingObj.detail={
					checkType:"phone",
					eventTarget:$(this).attr("name")
//					eventValue:$(this).val()
				};
				loggingObj.writeLog(func("半角数値のみ入力可能です",$(this)));
			}
		})
		.blur(function(e){
			/*logger*/
			var loggingObj = new classLog();
			loggingObj.type="info";
			loggingObj.eventType="blur";
			loggingObj.detail={
				checkType:"phone",
				eventTarget:$(this).attr("name")
//				eventValue:$(this).val()
			};
			loggingObj.writeLog(function(){});
			if(!checkPhoneNum($(this).val())){
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="error";
				loggingObj.eventType="blur";
				loggingObj.detail={
					checkType:"phone",
					eventTarget:$(this).attr("name")
//					eventValue:$(this).val()
				};
				loggingObj.writeLog(func("半角数値のみ入力可能です",$(this)));
			}
		});
		/*
				classにasciiが付いてれば半角英数0x20-0x7eチェック
		*/
		$(".ascii")
		.attr("error_flg",false)
		.keyup(function(e){
			/*logger*/
			var loggingObj = new classLog();
			loggingObj.type="info";
			loggingObj.eventType="keyup";
			loggingObj.detail={
				checkType:"ascii",
				eventTarget:$(this).attr("name")
//				eventValue:$(this).val()
			};
			loggingObj.writeLog(function(){});
			if(!checkAscii($(this).val())){
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="error";
				loggingObj.eventType="keyup";
				loggingObj.detail={
					checkType:"ascii",
					eventTarget:$(this).attr("name")
//					eventValue:$(this).val()
				};
				loggingObj.writeLog(func("半角英数値のみ入力可能です",$(this)));
			}
		})
		.blur(function(e){
			/*logger*/
			var loggingObj = new classLog();
			loggingObj.type="info";
			loggingObj.eventType="blur";
			loggingObj.detail={
				checkType:"ascii",
				eventTarget:$(this).attr("name")
//				eventValue:$(this).val()
			};
			loggingObj.writeLog(function(){});
			if(!checkAscii($(this).val())){
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="error";
				loggingObj.eventType="blur";
				loggingObj.detail={
					checkType:"ascii",
					eventTarget:$(this).attr("name")
//					eventValue:$(this).val()
				};
				loggingObj.writeLog(func("半角英数値のみ入力可能です",$(this)));
			}
		});

		/*
				classにdoubleが付いてれば全角チェック
		*/
		$(".double")
		.attr("error_flg",false)
		.keyup(function(e){
			/*logger*/
			var loggingObj = new classLog();
			loggingObj.type="info";
			loggingObj.eventType="keyup";
			loggingObj.detail={
				checkType:"double",
				eventTarget:$(this).attr("name")
//				eventValue:$(this).val()
			};
			loggingObj.writeLog(function(){});
			if(!checkDoubleChar($(this).val())){
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="error";
				loggingObj.eventType="keyup";
				loggingObj.detail={
					checkType:"double",
					eventTarget:$(this).attr("name")
//					eventValue:$(this).val()
				};
				loggingObj.writeLog(func("全角文字のみ入力可能です",$(this)));
			}
		})
		.blur(function(e){
			/*logger*/
			var loggingObj = new classLog();
			loggingObj.type="info";
			loggingObj.eventType="blur";
			loggingObj.detail={
				checkType:"double",
				eventTarget:$(this).attr("name")
//				eventValue:$(this).val()
			};
			loggingObj.writeLog(function(){});
			if(!checkDoubleChar($(this).val())){
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="error";
				loggingObj.eventType="blur";
				loggingObj.detail={
					checkType:"double",
					eventTarget:$(this).attr("name")
//					eventValue:$(this).val()
				};
				loggingObj.writeLog(func("全角文字のみ入力可能です",$(this)));
			}
		});
		/*
				classにkanaが付いてれば半角カナチェック
		*/
		$(".kana")
		.attr("error_flg",false)
		.keyup(function(e){
			/*logger*/
			var loggingObj = new classLog();
			loggingObj.type="info";
			loggingObj.eventType="keyup";
			loggingObj.detail={
				checkType:"kana",
				eventTarget:$(this).attr("name")
//				eventValue:$(this).val()
			};
			loggingObj.writeLog(function(){});
			if(!checkKana($(this).val())){
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="error";
				loggingObj.eventType="keyup";
				loggingObj.detail={
					checkType:"kana",
					eventTarget:$(this).attr("name")
//					eventValue:$(this).val()
				};
				loggingObj.writeLog(func("半角ｶﾅ文字のみ入力可能です",$(this)));
			}
		})
		.blur(function(e){
			/*logger*/
			var loggingObj = new classLog();
			loggingObj.type="info";
			loggingObj.eventType="blur";
			loggingObj.detail={
				checkType:"kana",
				eventTarget:$(this).attr("name")
//				eventValue:$(this).val()
			};
			loggingObj.writeLog(function(){});
			if(!checkKana($(this).val())){
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="error";
				loggingObj.eventType="blur";
				loggingObj.detail={
					checkType:"kana",
					eventTarget:$(this).attr("name")
//					eventValue:$(this).val()
				};
				loggingObj.writeLog(func("半角ｶﾅ文字のみ入力可能です",$(this)));
			}
		});
		/*
				classにkanaKが付いてれば全角カナチェック
		*/
		$(".kanaK")
		.attr("error_flg",false)
		.keyup(function(e){
			/*logger*/
			var loggingObj = new classLog();
			loggingObj.type="info";
			loggingObj.eventType="keyup";
			loggingObj.detail={
				checkType:"kanaK",
				eventTarget:$(this).attr("name")
//				eventValue:$(this).val()
			};
			loggingObj.writeLog(function(){});
			if(!checkDoubleKanaK($(this).val())){
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="error";
				loggingObj.eventType="keyup";
				loggingObj.detail={
					checkType:"kanaK",
					eventTarget:$(this).attr("name")
//					eventValue:$(this).val()
				};
				loggingObj.writeLog(func("全角カナ文字のみ入力可能です",$(this)));
			}
		})
		.blur(function(e){
			/*logger*/
			var loggingObj = new classLog();
			loggingObj.type="info";
			loggingObj.eventType="blur";
			loggingObj.detail={
				checkType:"kanaK",
				eventTarget:$(this).attr("name")
//				eventValue:$(this).val()
			};
			loggingObj.writeLog(function(){});
			if(!checkDoubleKanaK($(this).val())){
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="error";
				loggingObj.eventType="blur";
				loggingObj.detail={
					checkType:"kanaK",
					eventTarget:$(this).attr("name")
//					eventValue:$(this).val()
				};
				loggingObj.writeLog(func("全角カナ文字のみ入力可能です",$(this)));
			}
		});
		/*
				classにkanaHが付いてれば全角かなチェック
		*/
		$(".kanaH")
		.attr("error_flg",false)
		.keyup(function(e){
			/*logger*/
			var loggingObj = new classLog();
			loggingObj.type="info";
			loggingObj.eventType="keyup";
			loggingObj.detail={
				checkType:"kanaH",
				eventTarget:$(this).attr("name")
//				eventValue:$(this).val()
			};
			loggingObj.writeLog(function(){});
			if(!checkDoubleKanaH($(this).val())){
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="error";
				loggingObj.eventType="keyup";
				loggingObj.detail={
					checkType:"kanaH",
					eventTarget:$(this).attr("name")
//					eventValue:$(this).val()
				};
				loggingObj.writeLog(func("全角かな文字のみ入力可能です",$(this)));
			}
		})
		.blur(function(e){
			/*logger*/
			var loggingObj = new classLog();
			loggingObj.type="info";
			loggingObj.eventType="blur";
			loggingObj.detail={
				checkType:"kanaH",
				eventTarget:$(this).attr("name")
//				eventValue:$(this).val()
			};
			loggingObj.writeLog(function(){});
			if(!checkDoubleKanaH($(this).val())){
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="error";
				loggingObj.eventType="blur";
				loggingObj.detail={
					checkType:"kanaH",
					eventTarget:$(this).attr("name")
//					eventValue:$(this).val()
				};
				loggingObj.writeLog(func("全角かな文字のみ入力可能です",$(this)));
			}
		});
		/*
				classにmailが付いてればメールアドレスチェック
		*/
		$(".mail")
		.attr("error_flg",false)
		.keyup(function(e){
			/*logger*/
			var loggingObj = new classLog();
			loggingObj.type="info";
			loggingObj.eventType="keyup";
			loggingObj.detail={
				checkType:"mail",
				eventTarget:$(this).attr("name")
//				eventValue:$(this).val()
			};
			loggingObj.writeLog(function(){});
			if(!checkMail($(this).val())){
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="error";
				loggingObj.eventType="keyup";
				loggingObj.detail={
					checkType:"mail",
					eventTarget:$(this).attr("name")
//					eventValue:$(this).val()
				};
				loggingObj.writeLog(func("メールアドレスを入力してください",$(this)));
			}
		})
		.blur(function(e){
			/*logger*/
			var loggingObj = new classLog();
			loggingObj.type="info";
			loggingObj.eventType="blur";
			loggingObj.detail={
				checkType:"mail",
				eventTarget:$(this).attr("name")
//				eventValue:$(this).val()
			};
			loggingObj.writeLog(function(){});
			if(!checkMail($(this).val())){
				/*logger*/
				var loggingObj = new classLog();
				loggingObj.type="error";
				loggingObj.eventType="blur";
				loggingObj.detail={
					checkType:"mail",
					eventTarget:$(this).attr("name")
//					eventValue:$(this).val()
				};
				loggingObj.writeLog(func("メールアドレスを入力してください",$(this)));
			}
		});
		$(".sub").attr("disabled",true);
		setFLG(".required",true);
//		setFLG(".ascii",false);

		$(".validate").click(function(){
			if($(this).attr("checked")){
			$(".required,.req_group")
				.each(function(index){
				var type = $(this).attr("type");
				if ( type == "radio" || type == "checkbox" ){
					var name = $(this).attr("name");
					var w = "input[name=" + name + "]:checked";
						var val = $(w).val();
						if ( typeof val == 'undefined' ) { val = ""; }
					}
					else {
						var val = $(this).val();
					}
					if(!checkEnter(val)){
						/*logger*/
						var loggingObj = new classLogSync();
						loggingObj.type="error";
						loggingObj.eventType="validate";
						loggingObj.detail={
							checkType:"required",
							eventTarget:$(this).attr("name")
//					eventValue:val
						};
						loggingObj.writeLog(func("必須項目です",$(this)));
					}
				});

				if( $("span.logging_error" ).length > 0){
					alert( "エラーの項目が" + $("span.logging_error" ).length + "個あります。\r\n再度ご確認願います" );
					$(this).attr("checked",false);
					$(".subm").attr("disabled",true);
				}
				else {
					$(".subm").attr("disabled",false);
				}

			}else{
					$(".subm").attr("disabled",true);
			}
		});
/*
	郵便番号
*/
		$(".yubin")
		.attr("error_flg",false)
		.keyup(function(){
			if($(this).val().length < 3) return;
			var inputtxt = $(this).val();
			var url = "json/"+inputtxt.substr(0,3);
			$.ajax({
				type:"GET",
				url: url,
				data: {},
				success:function(val){
					var obj = $.parseJSON(val);
					var txx = "";
					$(".yubin").next("div.fw_yubin_code_list_box").remove();
					var div = $("<div class='fw_yubin_code_list_box'></div>")
							.css("position","absolute")
//							.css("opacity","0.6")
//							.css("border-width","2px")
//							.css("border-style","dotted")
//							.css("border-color","red")
							.css("color","white")
//							.css("background","black");
/*
							.draggable();
*/
//					$(".yubin").blur();
					if(inputtxt.length >= 7){
						if(obj[inputtxt]){
							if(obj[inputtxt].length == 1){
								$(".state").val(obj[inputtxt][0].kanji.state).trigger("blur");
								$(".city").val(obj[inputtxt][0].kanji.city+obj[inputtxt][0].kanji.townarea).trigger("blur");
								$(".yubin").next("div.fw_yubin_code_list_box").remove();
								$(".city").next("span.logging_error").remove();
								$(".city").css("background","white");
								$(".state").next("span.logging_error").remove();
								$(".state").css("background","white");
							}
						}else{
							var loggingObj = new classLog();
							loggingObj.type="error";
							loggingObj.eventType="keyup";
							loggingObj.detail={
								checkType:"yubin",
								eventTarget:$(".yubin").attr("name")
//								eventValue:inputtxt
							};
							loggingObj.writeLog(func("指定された郵便番号を取得できません",$(".yubin")));
							
						}
					}else{
						var key_cnt = 0;
						for(var key in obj){
							for(var i = 0; i<obj[key].length; i++){
								if(key.substr(0,inputtxt.length) == inputtxt && key.substr(3,4) !== "0000" && obj[key][i].kanji.state.indexOf("掲載が") < 0 && obj[key][i].kanji.city.indexOf("掲載が") < 0 && obj[key][i].kanji.townarea.indexOf("掲載が") < 0){
									key_cnt++;
									div.append(
									$("<p></p>")
									.css("margin","0px")
									.css("padding","0px")
									.css("color","white")
									.click((function(key,obj){
										return function(){
											$(".yubin").val(key);
											$(".state").val(obj.kanji.state).trigger("blur");
											$(".city").val(obj.kanji.city+obj.kanji.townarea).trigger("blur");
											$(".city").next("span.logging_error").remove();
											$(".city").css("background","white");
											$(".state").next("span.logging_error").remove();
											$(".state").css("background","white");
											$(".yubin").next("div.fw_yubin_code_list_box").remove();
										};
									})(key,obj[key][i]))
									.text("["+key+"] "+obj[key][i].kanji.state+" "+obj[key][i].kanji.city+" "+obj[key][i].kanji.townarea));
								}
							}
						}
						if(key_cnt > 0){
							$(".yubin").after(div);
						}else{
							var loggingObj = new classLog();
							loggingObj.type="error";
							loggingObj.eventType="keyup";
							loggingObj.detail={
								checkType:"yubin",
								eventTarget:$(".yubin").attr("name")
//								eventValue:inputtxt
							};
							loggingObj.writeLog(func("指定された郵便番号を取得できません",$(".yubin")));
							
						}
					}
				},
				error:(function(self){
					return function(xhr,code,err){
						var loggingObj = new classLog();
						loggingObj.type="error";
						loggingObj.eventType="blur";
						loggingObj.detail={
							checkType:"yubin",
							eventTarget:$(self).attr("name")
//							eventValue:$(self).val()
						};
						loggingObj.writeLog(func("指定された郵便番号を取得できません",$(self)));
					}
				})($(this))
			});
		})
		.blur(function(){
/*			$(this).next("div.fw_yubin_code_list_box").remove();
			if($(this).val().length != 7){
				var loggingObj = new classLog();
				loggingObj.type="error";
				loggingObj.eventType="blur";
				loggingObj.detail={
					checkType:"required",
					eventTarget:$(this).attr("name"),
					eventValue:$(this).val()
				};
				loggingObj.writeLog(func("郵便番号は7桁で入力してください",$(this)));
			}
*/
		});
		
	});


function setFLG(cname,flg){
		if($(cname).length > 0){
			for(var i = 0;i < $(cname).length;i++){
				$($(cname).get(i)).attr("error_flg",flg);
			}
		}
}
function errorCheck(cnama){
	for(var i = 0;i < $(cnama).length;i++){
//	console.log($($(cnama).get(i)).attr("error_flg"));
	var flg = $($(cnama).get(i)).attr("error_flg");
		if(flg == "true"){
//			console.log($(cnama).get(i));
			return false;
		}
	}
	return true;
}
function errorCheckAll(){
					if(!errorCheck(".required")){
//						console.log("required ng");
						$(".sub").attr("disabled",true);
						return false;
					}
					if(!errorCheck(".num")){
//						console.log("num ng");
						$(".sub").attr("disabled",true);
						return false;
					}
					if(!errorCheck(".phone")){
//						console.log("phone ng");
						$(".sub").attr("disabled",true);
						return false;
					}
					if(!errorCheck(".ascii")){
//						console.log("ascrii ng");
						$(".sub").attr("disabled",true);
						return false;
					}
					if(!errorCheck(".double")){
//						console.log("double ng");
						$(".sub").attr("disabled",true);
						return false;
					}
					if(!errorCheck(".kana")){
						$(".sub").attr("disabled",true);
						return false;
					}
					if(!errorCheck(".kanaK")){
						$(".sub").attr("disabled",true);
						return false;
					}
					if(!errorCheck(".kanaH")){
						$(".sub").attr("disabled",true);
						return false;
					}
					if(!errorCheck(".mail")){
						$(".sub").attr("disabled",true);
						return false;
					}
					if(!errorCheck(".yubin")){
						$(".sub").attr("disabled",true);
						return false;
					}
					return true;
}
/**
	logging用
**/
function classLog(type){
	this.type = "info";
	this.eventType = "";
	this.detail = {};
	this.writeLog = function(func){
		var logdata = {
			logtype:this.type,
			eventtype:this.eventType,
			detail:this.detail
		}
		$.ajax({
			type: "POST",
//			url: "other_server.php",
			url: "formcrawler/log.php",
			data: logdata,
			complete:func
		});
	};
}
function classLogSync(type){
	this.type = "info";
	this.eventType = "";
	this.detail = {};
	this.writeLog = function(func){
		var logdata = {
			logtype:this.type,
			eventtype:this.eventType,
			detail:this.detail
		}
		$.ajax({
			type: "POST",
//			url: "other_server.php",
			url: "formcrawler/log.php",
			data: logdata,
			async: false,
			complete:func
		});
	};
}



/**
	2byte数値の強制半角変換
**/
function replaceDoubleNum(val){
	var result = val;
	for(var i = 0; i < val.length; i++){
		var char = val.charCodeAt(i);
		if(charCordCheck(char,0xff10,0xff19)){
			//全角数値なら
			result = result.replace(val.charAt(i),String.fromCharCode(char-0xfee0));
		}
	}
	return result;
}
/**
	2byte数値(電話番号用)の強制半角変換
**/
function replacePhoneNum(val){
	var result = val;
	for(var i = 0; i < val.length; i++){
		var char = val.charCodeAt(i);
		if(charCordCheck(char,0xff10,0xff19)){
			//全角数値なら
			result = result.replace(val.charAt(i),String.fromCharCode(char-0xfee0));
		}
		if(charCordCheck(char,0xff0d,0xff0d) || charCordCheck(char,0x30fc,0x30fc) || charCordCheck(char,0x2015,0x2015) || charCordCheck(char,0x2212,0x2212)){
			result = result.replace(val.charAt(i),String.fromCharCode(0x2d));
		}
	}
	return result;
}
/**
	数値チェック
**/
function checkNum(val){
	return charCheck(val,0x30,0x39);
}
/**
	電話番号用数値チェック0-9とハイフン(-)
**/
function checkPhoneNum(val){
	for(var i = 0; i < val.length; i++){
		var char = val.charCodeAt(i);
		if(!charCordCheck(char,0x30,0x39) && !charCordCheck(char,0x2d,0x2d)){
			return false;
		}
	}
	return true;
}
/**
	全角
**/
function checkDoubleChar(val){
	for(var i = 0; i < val.length; i++){
		var char = val.charAt(i);
		if(escape(char).length < 4){
			return false;
		}
	}
	return true;
}
/**
	全角カナ
**/
function checkDoubleKanaK(val){
	return charCheck(val,0x30a1,0x30f6);
}
/**
	全角かな
**/
function checkDoubleKanaH(val){
	return charCheck(val,0x3041,0x3093);
}
/**
	半角カナ
**/
function checkKana(val){
	return charCheck(val,0xff61,0xffa0);
}

/**
	半角英数
**/
function checkAscii(val){
	return charCheck(val,0x20,0x7e);
}
/**
	全角英数(保留)
	function checkDoubleAscii(val){
		return charCheck(val,0xff10,0xff5a);
	}
**/
/**
	mail
**/
function checkMail(val){
	if(!checkEnter(val)){
		return true;
	}
//	return val.match(/[!#-9A-~]+@+[0-9a-z]+\.[0-9a-z|.]*[0-9a-z]$/);
	return val.match(/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/g);
}
/**
	必須チェック
**/
function checkEnter(val){
	if(val === "" || val.length <= 0){
		return false;
	}
	return true;
}
function charCheck(val,start,end){
	for(var i = 0; i < val.length; i++){
		if(!charCordCheck(val.charCodeAt(i),start,end)){
			return false;
		}
	}
	return true;
}
function charCordCheck(char,start,end){
	if(char < start || char > end){
		return false;
	}
	return true;
}

