function form_check(chk, chk2){

 switch (arguments.length) { 
//   case 0: arg1 = 'default1'; 
     case 1: chk2 = new Array(); //chk2（入力OR条件チェック用変数の非設定時のデフォルト指定）
//   case 2: arg3 = 'default3'; 
 } 

	var mstr = {};
	mstr.numeric = '0123456789';
	mstr.mail = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-.@';
	mstr.tell = '0123456789-';
	mobiles = Array('docomo.ne.jp', 'ezweb.ne.jp', 'ido.ne.jp', 'softbank.ne.jp', 'd.vodafone.ne.jp', 'h.vodafone.ne.jp', 't.vodafone.ne.jp', 'c.vodafone.ne.jp', 'k.vodafone.ne.jp', 'q.vodafone.ne.jp', 'n.vodafone.ne.jp', 's.vodafone.ne.jp', 'r.vodafone.ne.jp', 'jp-d.ne.jp', 'jp-h.ne.jp', 'jp-t.ne.jp', 'jp-c.ne.jp', 'jp-k.ne.jp', 'jp-q.ne.jp', 'jp-n.ne.jp', 'jp-s.ne.jp', 'jp-r.ne.jp', 'disney.ne.jp', 'pdx.ne.jpx', 'di.pdx.ne.jp', 'dj.pdx.ne.jp', 'dk.pdx.ne.jp', 'wm.pdx.ne.jp', 'willcom.com', 'emnet.ne.jp'
);

	var msgs = '';
	for(var i = 0; i < chk.length; i = i + 3){

		var name = new Array();
		name[0] = chk[i];

//OR条件チェックが定義されてるなら、該当するチェック項目が、OR条件チェック対象かどうか調べ
//該当するなら、そのOR条件対象についても同時にチェックする！

		if(chk2.length){
			for(var j = 0; j < chk2.length; j = j+ 1){
				if(chk2[j].indexOf(chk[i]) != -1){
					name = chk2[j].split('<>');
					continue;
				}
			}
		}

		var wrong_data = 0;
		var err_count  = 0;
		for(var k = 0; k < name.length; k = k+1){
			
			var err = 0;
			var mob_err = 0;
			var data_type = '';
			var val = fval(name[k]);

			if(!val){
				err = 1;	
			}else{

				if(chk[i+2] == 'numeric'
					&& !check_str(val, mstr.numeric)){
					data_type = '[半角数字]';
				}else if(chk[i+2] == 'tell'
					&& !check_str(val, mstr.tell)){
					data_type = '[半角数字およびハイフン]';
				}else if((chk[i+2] == 'mail' || chk[i+2] == 'pc_mail' || chk[i+2] == 'mob_mail') 
					&& !check_str(val, mstr.mail)){
					data_type = '[半角英数字]';
				}else if(chk[i+2] == 'pc_mail'){
					for (var j = 0; j < mobiles.length; j++){
						if (val.indexOf(mobiles[j]) != -1) err++;
					}
					data_type = (err!=0)?('[携帯メール不可]'):(null);
				}else if(chk[i+2] == 'mob_mail'){
					for (var j = 0, err = 1; j < mobiles.length; j++){
						if (val.indexOf(mobiles[j]) != -1) err = 0;
					}
					data_type = (err!=0)?('[携帯メールのみ]'):(null);
				}
			}
			
//			alert(name[k]+'/'+val+'/'+err+'/'+data_type);

//OR条件チェックの場合「全部がだめ」が問題なのでエラー数を数える。
			if(err){ err_count++; }

//エラーメッセージとしては、該当チェック項目時のみ記憶する
			if(name[k] == chk[i]){
				if(data_type){wrong_data = 1;}
				if(data_type || err){
					var msg = "・" + chk[i+1] + data_type + "\n";
				}
			}
			
		}

//不正データか、OR条件時に全部だめならエラー記録
		if(wrong_data || err_count == name.length){
			msgs += msg;
		}
	}

	if(msgs){
		alert("下記項目が未入力または正しくありません。\n" + msgs);
		return false;
	}else{
		return true;	
	}
}

///////////////////////////////////////////

function fval(nm){

	var k = 0;
	var ret;
	var rets = Array();
	var obj = document.getElementsByName(nm);
	
	if(!obj){
		return false;	
	}
	
	if(obj[0].tagName == 'TEXTAREA'){

		return obj[0].value;

	}else if(obj[0].tagName == 'SELECT'){

		for (i = 0; i < obj[0].options.length; i++) {
			if (obj[0].options[i].selected) {
				if(obj[0].options[i].value){
					rets[k] = obj[0].options[i].value;
					k++;
				}
			}
		}
		return rets.join('<>');

	}else if(obj[0].getAttribute("type") == 'checkbox'){

		for(i = 0; i < obj.length; i++){
			if(obj[i].checked){
				rets[k] = obj[i].value; 
				k++;
			}
		}
		return rets.join('<>');
		
	}else if(obj[0].getAttribute("type") == 'radio'){

		for(i = 0; i < obj.length; i++){
			if(obj[i].checked){
				ret = obj[i].value;
			}
		}
		return ret;

	}else if(obj[0].getAttribute("type") == 'text'){
		return obj[0].value;
	}else if(obj[0].getAttribute("type") == 'file'){
		return obj[0].value;
	}else if(obj[0].getAttribute("type") == 'hidden'){
		return obj[0].value;
	}

	return false;	
}

function check_str(str, okstr){
	err = 0;
	for (var i = 0; i < str.length; i++){
	  if (okstr.indexOf(str.charAt(i)) == -1) err++;
	}
	if (err!=0) return false;
	else return true;
}

