//必須入力チェック
function checkNull(obj,label){

	if(obj.value.match(/^( |　|\t|\n)*$/)){
		obj.focus();
		alert(label+'が入力されていません。');
		return false;
		
	}else{
		return true;
	
	}
	
}


//必須入力チェック（複数選択項目）
function checkSomething(obj, label){
	for(var i=0;i<obj.length;i++){
		if(obj[i].checked == true){
			return true;
		}
	}
	
	obj[0].focus();
	alert(label+'が選択されていません。');
	return false;
}



//必須入力チェック（SELECTフォーム用 NS4対応）
function checkSelected(obj, label){
	var value = obj.options[obj.selectedIndex].value;
	
	if( value.match(/^( |　|\t|\n)*$/) ){
		obj.focus();
		alert(label+'が選択されていません。');
		return false;
	}else{
		return true;
	}
}



// 数字列のチェック
function checkNumber(obj, label){
	
	if( !obj.value.match(/^[0-9]*$/) ){
		obj.focus();
		alert( label+'は、半角数字(0〜9)で入力してください。' );
		return false;
	}else{
		return true;
	}
}


// 半角カナ禁止のチェック
function checkHanKana(obj, label){
	if( obj.value.match(/[ｦ-ﾟ､｡]/) ){
		obj.focus();
		alert( label+'に半角カタカナ文字が含まれています。' );
		return false;
	}else{
		return true;
	}
}





//ひらがなチェック
//modeが1の場合全角スペースと半角スペースを削除してからチェックを行う。
var mode;
function checkHiragana(obj, label, mode){
    var strtmp = obj.value;
    if(mode="1"){
        strtmp = strtmp.replace("　","");
        strtmp = strtmp.replace(" ","");
    }
    if( !strtmp.match(/^[ぁ-ん]*$/) ){
        obj.focus();
        alert( label+'は、ひらがなで入力してください。' );
        return false;
    }else{
        return true;
    }
}



//ひらがなチェック2
function checkHiragana2(obj, label){
	var str = obj.value;
	
	
	var taget;
	target	= "ぁあぃいぅうぇえぉおかがきぎくぐけげこご";
	target += "さざしじすずせぜそぞただちぢっつづてでとど";
	target += "なにぬねのはばぱひびぴふぶぷへべぺほぼぽ";
	target += "まみむめもゃやゅゆょよらりるれろゎわをん";
	target += "？゛゜ゝー−・う゛";
	char_length = ("あ".length);
	
	//str = str.replace(/[　]/g, "");
	if(str.match( /\　/ )){
		obj.focus();
		alert(label+"に全角スペースが含まれています。");
		return false;
	}
	
	//str = str.replace(/[ ]/g, "");
	if(str.match( /\ / )){
		obj.focus();
		alert(label+"に半角スペースが含まれています。");
		return false;
	}
	
	
	//if( str.length == 0 ){ return false }
	
	for( i=0;i<str.length;i=i+char_length ){
		if( target.indexOf(str.charAt(i),0) == -1 ){
			obj.focus();
			alert(label+'は、ひらがなで入力してください。');
			return false;
		}
	}
	return true;
}

//カタカナチェック
function checkKatakana(obj, label){
	var str = obj.value;
	
	var taget;
	target	= "アイウエオカキクケコガギグゲゴァィゥェォヵヶ";
	target += "サシスセソザジズゼゾタチツテトダヂヅデドッ";
	target += "ナニヌネノハヒフヘホバビブベボパピプペポ";
	target += "マミムメモャュョヤユヨラリルレロワヲンヮ";
	target += "？゛゜ゝー−・ヴ";
	char_length = ("ア".length);
	
	if(str.match( /\　/ )){
		obj.focus();
		alert(label+"に全角スペースが含まれています。");
		return false;
	}
	
	if(str.match( /\ / )){
		obj.focus();
		alert(label+"に半角スペースが含まれています。");
		return false;
	}
	
	for( i=0;i<str.length;i=i+char_length ){
		if( target.indexOf(str.charAt(i),0) == -1 ){
			obj.focus();
			alert(label+'は、カタカナで入力してください。');
			return false;
		}
	}
	return true;
}

// 正規表現による入力チェック
function checkRegExp(obj, pattern, message){
	if( !obj.value.match(pattern) ){
		obj.focus();
		alert( message );
		return false;
	}else{
		return true;
	}
}



// 電子メールアドレスによるチェック
function checkEmail(obj, label){
	if(obj.value == "") return true;
	var pattern = /^[\!\#\$\%\&\(\)\-\=\^\~\|\+\*\;\:\<\>\[\]\{\}\,\.\?\/\_\\A-Za-z0-9]+@[\!\#\$\%\&\(\)\-\=\^\~\|\+\*\;\:\<\>\[\]\{\}\,\?\/\_\\A-Za-z0-9]+\.[\!\#\$\%\&\(\)\-\=\^\~\|\+\*\;\:\<\>\[\]\{\}\,\.\?\/\_\\A-Za-z0-9]+$/;
	//var pattern = /^[0-9]*$/;
	
	if(!obj.value.match( pattern )){
		obj.focus();
		alert( label+'の入力内容に書式の誤りがあります。\n（書式例：mail@sample.co.jp）');
		return false;
	}else{
		return true;
	}
	
}

// 電話番号によるチェック
function checkTel(obj1,obj2,obj3){
	if(obj1.value == ""){
		obj1.focus();
		alert('電話番号に未入力の項目があります。');
		return false;
	}else if(obj2.value == "") {
		obj2.focus();
		alert('電話番号に未入力の項目があります。');
		return false;
	}else if(obj3.value == "") {
		obj3.focus();
		alert('電話番号に未入力の項目があります。');
		return false;
	}
	return true;
}

function checkTel2(obj,objvalue, label){
	if(objvalue == "") return true;
	
	var pattern = /^[0-9]+-[0-9]+-[0-9]/;
	
	if(!objvalue.match( pattern )){
		obj.focus();
		alert( label+'の入力内容に書式の誤りがあります。\n（書式例：06-1234-5678）');
		return false;
	}else{
		return true;
	}
}
function checkTel3(obj, label){
	if(obj.value == "") return true;
	
	var pattern = /^[0-9]+-[0-9]+-[0-9]/;
	
	if(!obj.value.match( pattern )){
		obj.focus();
		alert( label+'の入力内容に書式の誤りがあります。\n（書式例：06-1234-5678）');
		return false;
	}else{
		return true;
	}
}



//２回入力チェック
function checkRepeatInput(obj1, obj2, label){
	
	if( !(obj1.value == obj2.value) ){
		obj1.focus();
		alert( label+'の入力内容が、確認用の入力内容と一致しません。\nもう一度お確かめください。' );
		return false;
	}else{
		return true;
	}
	
}


//データサイズのチェック
function checkStringLength(obj, length, label){
	if( length < obj.value.length ){
		obj.focus();
		alert( label+'の文字数が'+length+'文字を越えています。' );
		return false;
	}else{
		return true;
	}
	
}




//日付のチェック

function checkDate(obj, label){
	
	if( !obj.value.match(/^[0-9]{8}$/) ){
		obj.focus();
		alert( label+'の入力形式に誤りがあります。\n（例：1979年6月3日生まれの場合 19790603）' );
		return false;
	}
	
	var date	= obj.value;
	var year	= date.substr(0, 4);
	var month	= date.substr(4, 2);
	var day		= date.substr(6, 2);
	
	
	if( year < 1930 || 2030 < year){
		obj.focus();
			alert( label+'は1930〜2030年までの範囲で入力してください。' );
			return false;
	}
	if( month < 1 || 12 < month){
		obj.focus();
			alert( label+'は01〜12月までの範囲で入力してください。' );
			return false;
	}
	if( day < 1 || 31 < day){
		obj.focus();
			alert( label+'は01〜31日までの範囲で入力してください。' );
			return false;
	}
	
	
	//末日の設定
	var lastdayMap = [ 
			null,
			31,28,31,30,31,30,
			31,31,30,31,30,31,
		];
	if( isUruu(year) ) lastdayMap[2]++;
	//うるう年なら末日は29日
	
	
	//末日チェック
	if(lastdayMap[eval(month)] < day){
		obj.focus();
		alert( label+'にご指定の年月日は存在しません。' );
		return false;
	}
	
	return true;
}


function isUruu(year){
	//前提条件 １９３０〜２０３０年
	if( year < 1930 || 2030 < year){
		alert( 'assertion Error(isUruu): 1930〜2030年までの範囲しか指定できません。' );
	}
	
	var flag = false;
	if( year % 4 == 0)   flag = true;	// ４で割り切れる年はうるう年。
	if( year % 100 == 0) flag = false;	// ただし100で割り切れる年はうるう年にしない。
	if( year % 400 == 0) flag = true;	// ただし400で割り切れる年はうるう年。
	//ルール２，３はコメントアウトしてもよい。 範囲は、1930-2030なので
	
	return flag;
}


function checkDateAddHyphen(obj, label){
	
	var pattern = /^[0-9]+-[0-9]+-[0-9]/;
	var pattern2 = /^[0-9-]{10}$/;
	
	if( !obj.value.match(pattern) || !obj.value.match(pattern2) ){
		obj.focus();
		alert( label+'の入力形式に誤りがあります。\n（例：1979年6月3日の場合 1979-06-03）' );
		return false;
	}
	
	var date	= obj.value;	//桁数チェック
	var year	= date.substr(0, 4);
	var month	= date.substr(5, 2);
	var day		= date.substr(8, 2);
	
	if( year < 1930 || 2030 < year){
		obj.focus();
			alert( label+'は1930〜2030年までの範囲で入力してください。' );
			return false;
	}
	if( month < 1 || 12 < month){
		obj.focus();
			alert( label+'は01〜12月までの範囲で入力してください。' );
			return false;
	}
	if( day < 1 || 31 < day){
		obj.focus();
			alert( label+'は01〜31日までの範囲で入力してください。' );
			return false;
	}
	
	//末日の設定
	var lastdayMap = [ 
			null,
			31,28,31,30,31,30,
			31,31,30,31,30,31,
		];
	if( isUruu(year) ) lastdayMap[2]++;
	//うるう年なら末日は29日
	
	
	//末日チェック
	if(lastdayMap[eval(month)] < day){
		obj.focus();
		alert( label+'にご指定の年月日は存在しません。' );
		return false;
	}
	
	return true;
}

function checkTime(obj, label){
	
	var pattern = /^[0-9]+:[0-9]+:[0-9]/;
	var pattern2 = /^[0-9:]{8}$/;
	
	if( !obj.value.match(pattern) || !obj.value.match(pattern2) ){
		obj.focus();
		alert( label+'の入力形式に誤りがあります。\n（例：12時27分9秒の場合 12:27:09）' );
		return false;
	}
	
	var time	= obj.value;	//桁数チェック
	var hour	= time.substr(0, 2);
	var minute	= time.substr(3, 2);
	var second	= time.substr(6, 2);
	
	if( hour < 0 || 24 < hour){
		obj.focus();
			alert( label+'は00〜24時までの範囲で入力してください。' );
			return false;
	}
	
	if(hour==24){
		if(minute != 00 || second != 00){
			obj.focus();
				alert( label+'は24時以降の指定は無効です。' );
				return false;
		}
	}
	
	if( minute < 0 || 59 < minute){
		obj.focus();
			alert( label+'は00〜59分までの範囲で入力してください。' );
			return false;
	}
	if( second < 0 || 59 < second){
		obj.focus();
			alert( label+'は00〜59秒までの範囲で入力してください。' );
			return false;
	}
	
	return true;
}


function checkFreemail(obj){
	var freemails = [
			'excite.co.jp',
			'freemail.ne.jp',
			'inter7.jp',
			'mail.goo.ne.jp',
			'hotmail.com',
			'infoseek.jp',
			'net.atn.ne.jp',
			'cosmos-21.com',
			'freecom.ne.jp',
			'freejpn.com',
			'vivajpn.com',
			'freeserve.ne.jp',
			'fubako.com',
			'gariya.net',
//			'yahoo.co.jp',
			'puchinet.com',
			'saku2.com',
			'zam.jp',
			'tok2.com',
//			'com',
		];
	
	for(var i=0; i<freemails.length; i++){
		if(obj.value.match( new RegExp('(\\@|\\.)('+freemails[i]+')$') )){
			obj.focus();
			//alert("test");
			alert( 'フリーメールはご利用いただけません。' );
			return false;
		}
	}
	return true;
	
}	


function checkKEITAImail(obj){
//	var KEITAImails = $domain_list;
	
	var KEITAImails = [
		'docomo.ne.jp',
		'docomo-camera.ne.jp',
		'mopera.net1',
		'ebilling.ne.jp',
		'docomo-bill.ne.jp',
		'mobachemail.ne.jp',
		'mail.visualnet.mopera.ne.jp',
		'softbank.ne.jp',
		'd.vodafone.ne.jp',
		'h.vodafone.ne.jp',
		't.vodafone.ne.jp',
		'c.vodafone.ne.jp',
		'r.vodafone.ne.jp',
		'k.vodafone.ne.jp',
		'n.vodafone.ne.jp',
		's.vodafone.ne.jp',
		'q.vodafone.ne.jp',
		'ezweb.ne.jp',
		'ezweb.ne.jp',
		'ido.ne.jp',
		'ezweb.ne.jp',
		'ezweb.ne.jp',
		'sky.tkk.ne.jp',
		'sky.tkc.ne.jp',
		'sky.tu-ka.ne.jp'
		];
	
	for(var i=0; i<KEITAImails.length; i++){
		if(obj.value.match( new RegExp('(\\@|\\.)('+KEITAImails[i]+')$') )){
			obj.focus();
			alert( '携帯メールはご利用いただけません。' );
			return false;
		}
	}
	return true;
}	

function checkKEITAImail2(obj){
//	var KEITAImails = $domain_list;
	
	var KEITAImails = [
		'docomo.ne.jp',
		'docomo-camera.ne.jp',
		'mopera.net1',
		'ebilling.ne.jp',
		'docomo-bill.ne.jp',
		'mobachemail.ne.jp',
		'mail.visualnet.mopera.ne.jp',
		'softbank.ne.jp',
		'd.vodafone.ne.jp',
		'h.vodafone.ne.jp',
		't.vodafone.ne.jp',
		'c.vodafone.ne.jp',
		'r.vodafone.ne.jp',
		'k.vodafone.ne.jp',
		'n.vodafone.ne.jp',
		's.vodafone.ne.jp',
		'q.vodafone.ne.jp',
		'ezweb.ne.jp',
		'ezweb.ne.jp',
		'ido.ne.jp',
		'ezweb.ne.jp',
		'ezweb.ne.jp',
		'sky.tkk.ne.jp',
		'sky.tkc.ne.jp',
		'sky.tu-ka.ne.jp'
		];

	for(var i=0; i<KEITAImails.length; i++){
		if(obj.value.match( new RegExp('(\\@|\\.)('+KEITAImails[i]+')$') )){
			//マッチするドメインが存在すればTrueを返す
			return true;
		}
	}
	obj.focus();
	alert( '携帯メールしかご利用いただけません。' );
	return false;
}

// ＩＤチェック
function checkEnNumberId(obj, label){
	
	if( !obj.value.match(/^[a-zA-Z0-9]*$/) ){
		obj.focus();
		alert( label+'は、半角英数字(a-z・A-Z・0〜9)で入力してください。' );
		return false;
	}else{
		return true;
	}
}

// コードチェック
function checkEnNumberCode(obj, label){
	
	if( !obj.value.match(/^[a-zA-Z0-9_]*$/) ){
		obj.focus();
		alert( label+'は、半角英数字(a-z・A-Z・0〜9)、もしくはアンダースコア(_)で入力してください。' );
		return false;
	}else{
		return true;
	}
}
