var STRERR = {
		E100 : '文字が入力されていません',
		E200 : '半角数字で入力してください',
		E201 : '6～32文字の半角英数字で入力してください',
		E202 : '既に使用済みです',
		E203 : '既に退会処理が完了しているか、登録されていません',
		E301 : '登録できないメールアドレスです',
		E400 : '正しい日付を入力してください'
};
var lastERROR = '';
var checkList = {
		account:		'アカウント',
		pass:			'パスワード',
		birthday:		'誕生日',
//		first_name:		'ファーストネーム',
//		last_name:		'ラストネーム',
		first_name:		'ラストネーム',
		last_name:		'ファーストネーム',
		mail:			'メールアドレス',
		organizatio:	'所属団体/企業,学校',
		country:		'国名',
		street:			'町名/番地/建物名',
		city:			'市区町村名',
		state:			'都道府県名',
		postal_code:	'郵便番号',
		phone:			'電話番号'
};

/**************************************************
 * 空チェック
 * @param val
 * @return
 **************************************************/
function isEmpty(val){
	if(val==null){ return true; }
	if(val==''){ return true; }
	if(val.length<=0){ return true; }
	return false;
}
/**************************************************
 * 数値か
 * @param val
 * @return
 **************************************************/
function isNum(val){
	return !isNaN(val);
}
/**************************************************
 * 半角英数字かどうか
 * @param val
 * @return
 **************************************************/
function isHarf(val){
	if(isEmpty(val)){ return false; }
	if(val.match(/^[0-9a-zA-Z_]{6,32}$/)){
		return true;
	}
	return false;
}
/**************************************************
 * 日付入力欄３つから１つの日付を作成及び、チェック
 * @param val
 * @return
 **************************************************/
function assistDate(objHidden, objYYYY, objMM, objDD){
	var objHidden	= $('formBirthday');
	var objYYYY		= $('by');
	var objMM		= $('bm');
	var objDD		= $('bd');
	if(objHidden==null){ return; }
	objHidden.value = '';
	if(objYYYY.value && objMM.value && objDD.value){
		// hiddenに代入
		objHidden.value = objYYYY.value + '-' + objMM.value  + '-' + objDD.value;
		// ここで日付チェック
		if(!isDate(objHidden.value)){
			objHidden.value = '';
			objYYYY.value	= '';
			objMM.value		= '';
			objDD.value		= '';
			objYYYY.focus();
			return checkEnd(objHidden, STRERR.E400);
		}
	}
	return;
}
/**************************************************
 * 日付チェック
 * @param yyyy-mmmm-dddd
 * @return
 **************************************************/
function isDate(val){
	if(val==null){ return false; }
	if(isEmpty(val)){ return true; }
	var ary = val.split('-');
	var yyyy = ary[0];
	var mmmm = ary[1];
	var dddd = ary[2];
	if(!isNum(yyyy) || !isNum(mmmm) || !isNum(dddd)){
		return false;
	} else {
		if(yyyy.length!=4){
			return false;
		} else {
			if(mmmm < 1 || mmmm > 12){
				return false;
			} else {
				if(dddd <= 0 || dddd > 30 + ((mmmm == 4 || mmmm == 6 || mmmm == 9 || mmmm == 11) ? 0 : 1) || (mmmm == 2 && dddd > 28 + (((yyyy % 4 == 0 && yyyy % 100 !=0) || yyyy % 400 == 0) ? 1 : 0))){
					return false;
				}
			}
		}
	}
	return true;
}
/**************************************************
 * メールアドレスか
 * @param mail
 * @return
 **************************************************/
function isMail(val) {
	if(isEmpty(val)){ return false; }
	if(isNum(val)){ return false; }
//	if(!val.match(/[a-zA-Z0-9_\-\.]+\@[a-zA-Z0-9_\-]+(\.[a-zA-Z0-9_\-]+)+$/)){
	if(!val.match(/^.+\@.+\..+$/)){
		return false;
	}
	return true;
};
/**************************************************
 * 重複チェック
 * @param mail
 * @return
 **************************************************/
function isDuplicationID(obj){
	if(isEmpty(obj.value)){ return false; }
	obj.disabled = true;
	var val = obj.value;
	var res = j$.ajax({
		url: '/account_check?a=' + val,
		async: false
	}).responseText;
	obj.disabled = false;
	return (res==1 ? true : false);
}
function isDuplicationMAIL(obj){
	if(isEmpty(obj.value)){ return false; }
	obj.disabled = true;
	var val = obj.value;
	var res = j$.ajax({
		url: '/mail_check?a=' + val,
		async: false
	}).responseText;
	obj.disabled = false;
	return (res==1 ? true : false);
}

/**************************************************
 * 入力形式チェック
 * @param obj
 * @return
 **************************************************/
function check(obj){
	// 重複起動防止
	if(flgCheckNow){ flgCheckNow = false; return true; }
	flgCheckNow = true;
	// 入力値取得
	var val = obj.value;
	// 未入力の場合チェックしない
	if(obj==null)	{ return true; }
	if(isEmpty(val)){ return true; }
	// 入力形式チェック
	switch (obj.name) {
		case 'account':
			if(!isHarf(val)){ return checkEnd(obj, STRERR.E201); }
			break;
		case 'pass':
			if(!isHarf(val)){ return checkEnd(obj, STRERR.E201); }
			break;
		case 'mail':
			if(!isMail(val)){ return checkEnd(obj, STRERR.E301); }
			break;
		case 'birthday':
			if(!isDate(val)){ return checkEnd(obj, STRERR.E400); }
			break;
		case 'postal_code':
		case 'phone':
			if(!isNum(val)){ return checkEnd(obj, STRERR.E200); }
			break;
	}
	return true;
};
var flgCheckNow = false;
/**************************************************
 * エラーがあった場合の後処理(エラーのときだけ呼び出す)
 * @param obj
 * @param err
 * @return
 **************************************************/
function checkEnd(obj, err){
	var dispName = '[' + checkList[obj.name] + ']';
	obj.value = '';
	if(obj.name=='birthday'){
		$('by').focus();
	}else{
		obj.focus();
	}
	alert(dispName + err);
	flgCheckNow = false;
	return false;
};
/**************************************************
 * 実行時呼び出し、全ての項目のチェックを行う。
 * ※必須項目チェックもここで行う
 * @param formObj
 * @return
 **************************************************/
function checkFull(formObj){
	var strConfirm = new Array();
	var cnt = 0;
	
	var isJoin = (formObj.action.indexOf('entry', 0)>-1 ? true : false);
	
	if(isJoin){
		strConfirm[cnt++] = 'この内容で登録してよろしいですか';
	}else{
		strConfirm[cnt++] = '退会手続きを進めてよろしいですか';
	}
	strConfirm[cnt++] = '------------------------------';
	
	// 全ての項目について再チェック
	for(var i=0; i<formObj.length; i++){
		if(formObj[i].name<=0){ continue; }
		
		// 入力内容確認用文言作成
		if(checkList[formObj[i].name]){
			strConfirm[cnt++] = '[' + checkList[formObj[i].name] + ']';
			strConfirm[cnt++] = '  ' + formObj[i].value;
		}
		
		// 必須項目チェック
		var val = formObj[i].value;
		switch (formObj[i].name) {
			case 'account':
				if(formObj[i]==null)	{ return checkEnd(formObj[i], STRERR.E100); }
				if(isEmpty(val))		{ return checkEnd(formObj[i], STRERR.E100); }
				
				if(isJoin){
					// 入会(joinのチェック)
					if(isDuplicationID(formObj[i])){ return checkEnd(formObj[i], STRERR.E202); }
				}else{
					// 退会(leaveのチェック)
					if(!isDuplicationID(formObj[i])){ return checkEnd(formObj[i], STRERR.E203); }
				}
				break;
			case 'pass':
			case 'first_name':
//			case 'last_name':
				if(formObj[i]==null)	{ return checkEnd(formObj[i], STRERR.E100); }
				if(isEmpty(val))		{ return checkEnd(formObj[i], STRERR.E100); }
				break;
			case 'mail':
				if(formObj[i]==null)	{ return checkEnd(formObj[i], STRERR.E100); }
				if(isEmpty(val))		{ return checkEnd(formObj[i], STRERR.E100); }
				if(isDuplicationMAIL(formObj[i])){ return checkEnd(formObj[i], STRERR.E202); }
				break;
		}
		
		// 入力形式チェック
		var res = check(formObj[i]);
		if(!res){ return false; }
	}
	
	// submitを１度だけ行うようにする
	if(flgSubmitLock){
		// submitがロックされているのでfalseを返す
		return false;
	}else{
		if(window.confirm(strConfirm.join('\n'))){
			flgSubmitLock = true;
			return true;
		}else{
			return false;
		}
	}
}
var flgSubmitLock = false;


