//======================================================
// 共通モジュールヘッダ
// 
// 使い方
// <SCRIPT LANGUAGE="JavaScript" SRC="COMM/nss.common.js"></SCRIPT>
//
// 関数一覧
// IsHankaku()		半角カナチェック
// IsPost()			郵便番号チェック
// IsTEL()			電話番号チェック
// IsOUTTEL()		海外用電話番号チェック
// IsMail()			メールアドレスチェック
// IsURL()			ＵＲＬチェック
// IsNumber()		数字チェック
// IsAlpha()		アルファベットチェック
// IsAlnum()		英数字チェック
// IsKana()			全角カナチェック
// GetByteLen()		文字数取得（漢字は２バイトで計算）
// SelectPref()		都道府県を選択する
// GetPrefNumber()	選択した都道府県番号を得る
// GetPrefValue()	選択した都道府県名称を得る
// GetSelectValue()	Selectで選択したValueを得る
// IsIE()			ブラウザがＩＥかどうか調べる
// ChkDate()		年月日の妥当性チェック
// GetAge()			誕生日から年齢を得る
// ChkAge()			誕生日と年齢があっているか
// ChkDateYYYYMM()	年月のチェックをする
// GetRadioChk()	ラジオボタンより値を取得する
// getCookie()		cookieからデータを取得します
// altMsg()			alertメッセージを出力します
//
// 1.00A:    2001/07/16  by Kawashima
//   新規作成
//======================================================

//数字用
NumberStr = '0123456789';
//アルファベット用
UpperStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
LowerStr = 'abcdefghijklmnopqrstuvwxyz';
AlphaStr = UpperStr+LowerStr;
//英数字用
AlnumStr = AlphaStr+NumberStr;

//郵便、ＴＥＬ用
PostStr = NumberStr + '-';
//海外用ＴＥＬ
OUTPostStr = PostStr + ' ';

//メール用
MailStr = AlnumStr + '.@_-+*/';
//ＵＲＬ用
URLStr =  AlnumStr + '.@_-+*/~&%';

var Age_Adlt  = 0;
var Age_Child = 1;
var Age_Baby  = 2;

//メッセージ種別
var MSG_SEL		= 0;		//未選択エラー
var MSG_ONE_SEL = 1;		//未選択エラー（１つ以上）
var MSG_INP		= 2;		//未入力エラー
var MSG_RGT_INP = 3;		//不正入力エラー
var MSG_CHG_INP = 4;		//不正入力エラー（代換文字指定）
var MSG_KANA	= 5;		//半角カタカナエラー
var MSG_NUM		= 6;		//文字数制限エラー

//==============================================================================
// NAME     ：ChkString
// CONTENT  ：文字列チェック
// INPUT    ： base :ベース文字列
// INPUT    ： str  :チェックしたい文字列
// OUTPUT   ：
// Version　：
//   1.00A:    2001/07/16  by Kawashima
//==============================================================================
function ChkString( base , str ){

	err = 0;
	for ( i=0 ; i<str.length ; i++ ){
		if ( base.indexOf( str.charAt(i) ) == -1){
			// エラー！！
			return(false);
		}
	}

	return(true);
}


//==============================================================================
// NAME     ：IsHankaku
// CONTENT  ：半角カナをチェック（文字列）
// INPUT    ：
// OUTPUT   ：
// Version　：
//   1.00A:    2001/07/16  by Kawashima
//==============================================================================
function IsHankaku( text ) {
	var len = text.length;
	var ret = true;
	var str = "";

	for ( i = 0 ; i < len ; i++ ) {
		str = text.substring(i, i+1);
		ret = ChkHankaku(str);
		if ( ret == true ){
			// 半角文字！！
			return(true);
		}
	}

	// 半角文字なし
	return(false);
}
//==============================================================================
// NAME     ：ChkHankaku
// CONTENT  ：半角カナをチェック（１バイト）
// INPUT    ：
// OUTPUT   ：
// Version　：
//   1.00A:    2001/07/16  by Kawashima
//==============================================================================
function ChkHankaku(str) {

	//文字列をエンコードする
	var esc_str = escape(str);

	// ブラウザの種類を得る
	var ms = navigator.appVersion.indexOf("MSIE");
	var nesc = navigator.appName.lastIndexOf("Netscape");

	if(nesc >= 0){
		if ( (esc_str.indexOf('%A') == 0) ||
			(esc_str.indexOf('%B') == 0) ||
			(esc_str.indexOf('%C') == 0) ||
			(esc_str.indexOf('%D') == 0) ){
			return(true);
		}
	}else if(ms > 0){
		if((esc_str.indexOf('%uFF6') == 0) ||
			(esc_str.indexOf('%uFF7') == 0) ||
			(esc_str.indexOf('%uFF8') == 0) ||
			(esc_str.indexOf('%uFF9') == 0) ) {
			return(true);
		}
	}

	return(false);
}

//==============================================================================
// NAME     ：IsPost
// CONTENT  ：郵便番号をチェック
// INPUT    ：
// OUTPUT   ：
// Version　：
//   1.00A:    2001/07/16  by Kawashima
//==============================================================================
function IsPost( text ) {
	var ret = false;
	var chkvalue = text.split('-').join('') // - を除去

	if(         ChkString(PostStr,text) == false ) {
		// 対応以外の文字列が含まれる
		ret = false ;
	} else if ( ( text.length - chkvalue.length ) > 1 ){
		// "-"が多すぎます
		ret = false ;
	} else if ( chkvalue.length != 7 ) {
		// 郵便番号の数字の桁数は半角文字で7桁にしてください
		ret = false ;
	} else {
		ret = true ;
	}

	return ret;

}

//==============================================================================
// NAME     ：IsTEL
// CONTENT  ：電話番号をチェック
// INPUT    ：
// OUTPUT   ：
// Version　：
//   1.00A:    2001/07/16  by Kawashima
//==============================================================================
function IsTEL( text ) {
	var ret = false;

	if(         ChkString(PostStr,text) == false ) {
		// 対応以外の文字列が含まれる
		ret = false ;
	} else {
		ret = true ;
	}

	return ret;

}

//==============================================================================
// NAME     ：IsOUTTEL
// CONTENT  ：海外用電話番号をチェック
// INPUT    ：
// OUTPUT   ：
// Version　：
//   1.00A:    2001/07/16  by Kawashima
//==============================================================================
function IsOUTTEL( text ) {
	var ret = false;

	if(         ChkString(OUTPostStr,text) == false ) {
		// 対応以外の文字列が含まれる
		ret = false ;
	} else {
		ret = true ;
	}

	return ret;

}

//==============================================================================
// NAME     ：IsMail
// CONTENT  ：メールアドレスをチェック
// INPUT    ：
// OUTPUT   ：
// Version　：
//   1.00A:    2001/07/16  by Kawashima
//==============================================================================
function IsMail( text ) {
	var ret = false;

	if(         ChkString( MailStr , text ) == false ) {
		// 対応以外の文字列が含まれる
		ret = false ;
	} else if ( text.indexOf('@') == -1 ){
		//"@"がありません
		ret = false ;
	} else {
		ret = true ;
	}

	return ret;

}

//==============================================================================
// NAME     ：IsURL
// CONTENT  ：ＵＲＬをチェック
// INPUT    ：
// OUTPUT   ：
// Version　：
//   1.00A:    2001/07/16  by Kawashima
//==============================================================================
function IsURL( text ) {
	if(!ChkString( URLStr ,text )){
		// 対応以外の文字列が含まれる
		return false;
	}
	return true;
}

//==============================================================================
// NAME     ：IsNumber
// CONTENT  ：数字かどうかをチェック
// INPUT    ：
// OUTPUT   ：
// Version　：
//   1.00A:    2001/07/16  by Kawashima
//==============================================================================
function IsNumber( text ) {
	var ret = false;

	if(         ChkString( NumberStr , text ) == false ) {
		// 対応以外の文字列が含まれる
		ret = false ;
	} else {
		ret = true ;
	}

	return ret;

}

//==============================================================================
// NAME     ：IsAlpha
// CONTENT  ：アルファベットかどうかをチェック
// INPUT    ：
// OUTPUT   ：
// Version　：
//   1.00A:    2001/07/16  by Kawashima
//==============================================================================
function IsAlpha( text ) {
	var ret = false;

	if(         ChkString( AlphaStr , text ) == false ) {
		// 対応以外の文字列が含まれる
		ret = false ;
	} else {
		ret = true ;
	}

	return ret;

}

//==============================================================================
// NAME     ：IsAlnum
// CONTENT  ：英数字かどうかをチェック
// INPUT    ：
// OUTPUT   ：
// Version　：
//   1.00A:    2001/07/16  by Kawashima
//==============================================================================
function IsAlnum( text ) {
	var ret = false;

	if(         ChkString( AlnumStr , text ) == false ) {
		// 対応以外の文字列が含まれる
		ret = false ;
	} else {
		ret = true ;
	}

	return ret;

}

//=============================================================================
// NAME     ：IsKana
// CONTENT  ：全角カタカナかどうかをチェック
// INPUT    ：
// OUTPUT   ：
// Version　：
//   1.00A:    2001/08/21 by T.Nakajima
//=============================================================================
function IsKana(text)
{
	for(i = 0; i < text.length; i++){
		if((text.charAt(i) != ' ') && (text.charAt(i) != '　') && 
		   (text.charAt(i) != 'ー') && (text.charAt(i) != '・') &&
		   (text.charAt(i) < 'ァ' || text.charAt(i) > 'ヶ')){
			return false;
		}
	}
	return true;
}

//==============================================================================
// NAME     ：GetByteLen
// CONTENT  ：文字数取得
// Version　：
//   1.00A:  2001/07/16  by Kawashima
//==============================================================================
function GetByteLen( str) {
   len = 0;
   str = escape(str);
   for (i = 0; i < str.length; i++, len++) {
      if (str.charAt(i) == "%") {
         if (str.charAt(++i) == "u") {
            i += 3;
            len++;
         }
         i++;
      }
   }
   return len;
}

//==============================================================================
// NAME     ：SelectPref
// CONTENT  ：都道府県を選択する
// INPUT    ：str      : 初期値
// INPUT    ：obj_name :オブジェクト名
// OUTPUT   ：
// Version　：
//   1.00A:    2001/07/16  by Kawashima
//==============================================================================
function SelectPref( str , obj_name ){

// <SCRIPT LANGUAGE="JavaScript">
// <!--
// 		SelectPref( "東京都" , "PREF_OBJ" )
// // -->
// </SCRIPT>
	var Pref = new Array (
//**** 2007/01/22 T.kuriyama 初期表示をカラ文字から「選択してください」に修正 ****
//		"",
		"選択してください",
		"北海道", "青森県", "岩手県", "宮城県", "秋田県", "山形県",
		"福島県", "茨城県", "栃木県", "群馬県", "埼玉県", "千葉県",
		"東京都", "神奈川県", "新潟県", "富山県", "石川県", "福井県",
		"山梨県", "長野県", "岐阜県", "静岡県", "愛知県", "三重県",
		"滋賀県", "京都府", "大阪府", "兵庫県", "奈良県", "和歌山県",
		"鳥取県", "島根県", "岡山県", "広島県", "山口県", "徳島県",
		"香川県", "愛媛県", "高知県", "福岡県", "佐賀県", "長崎県",
		"熊本県", "大分県", "宮崎県", "鹿児島県", "沖縄県"
	);

	document.write( "<SELECT NAME='" + obj_name + "'>" );

	// ＮＵＬＬチェック
	//if( str == "" ){
	//	str = Pref[0];
	//}

	for( i=0 ; i<48 ; i++ ){
		if( Pref[i] == str ){
			document.write("<OPTION SELECTED VALUE=" + Pref[i] + ">" + Pref[i]);
		} else {
			document.write("<OPTION VALUE=" + Pref[i] + ">" + Pref[i]);
		}
	}
	document.write("</SELECT>");

	document.close();

}

//==============================================================================
// NAME     ：SelectPrefCustom
// CONTENT  ：都道府県を選択する(初期値「選択してください」Ver)
// INPUT    ：str      : 初期値
// INPUT    ：obj_name :オブジェクト名
// OUTPUT   ：
// Version　：
//   2.00A:    2007/01/22  by T.kuriyama
//==============================================================================
function SelectPrefCustom( str , obj_name ){

	var Pref = new Array (
		"選択してください",
		"北海道", "青森県", "岩手県", "宮城県", "秋田県", "山形県",
		"福島県", "茨城県", "栃木県", "群馬県", "埼玉県", "千葉県",
		"東京都", "神奈川県", "新潟県", "富山県", "石川県", "福井県",
		"山梨県", "長野県", "岐阜県", "静岡県", "愛知県", "三重県",
		"滋賀県", "京都府", "大阪府", "兵庫県", "奈良県", "和歌山県",
		"鳥取県", "島根県", "岡山県", "広島県", "山口県", "徳島県",
		"香川県", "愛媛県", "高知県", "福岡県", "佐賀県", "長崎県",
		"熊本県", "大分県", "宮崎県", "鹿児島県", "沖縄県"
	);

	document.write( "<SELECT NAME='" + obj_name + "'>" );

	for( i=0 ; i<48 ; i++ ){
		if( Pref[i] == str ){
			document.write("<OPTION SELECTED VALUE=" + Pref[i] + ">" + Pref[i]);
		} else {
			document.write("<OPTION VALUE=" + Pref[i] + ">" + Pref[i]);
		}
	}
	document.write("</SELECT>");

	document.close();

}

//==============================================================================
// NAME     ：GetPrefNumber
// CONTENT  ：選択した都道府県番号を得る
// INPUT    ：
// OUTPUT   ：
// Version　：
//   1.00A:    2001/07/16  by Kawashima
//==============================================================================
function GetPrefNumber( obj ){
	return (obj.selectedIndex);
}

//==============================================================================
// NAME     ：GetPrefValue
// CONTENT  ：選択した都道府県名称を得る
// INPUT    ：
// OUTPUT   ：
// Version　：
//   1.00A:    2001/07/16  by Kawashima
//==============================================================================
function GetPrefValue( obj ){
	return (obj.options[obj.selectedIndex].value);
}

//==============================================================================
// NAME     ：GetSelectValue
// CONTENT  ：Selectで選択したValueを得る
// INPUT    ：
// OUTPUT   ：
// Version　：
//   1.00A:    2001/07/16  by Kawashima
//==============================================================================
function GetSelectValue(obj)
{

	return (obj.options[obj.selectedIndex].value);

}

//==============================================================================
// NAME     ：IsIE
// CONTENT  ：ブラウザがＩＥかどうか調べる
// INPUT    ：
// OUTPUT   ：
// Version　：
//   1.00A:    2001/07/19  by Kawashima
//==============================================================================
function IsIE()
{
	if ( navigator.appName == "Netscape" ) {
		return(false);
	} else {
		return(true);
	}

}

//==============================================================================
// NAME     ：ChkDate
// CONTENT  ：年月日の妥当性チェック
// INPUT    ：
// OUTPUT   ：
// Version　：
//   1.00A:    2001/07/19  by Kawashima
//==============================================================================
function ChkDate( y , m , d )
{
	// 数字のチェック
	if( !IsNumber(y) || !IsNumber(m) || !IsNumber(d) ){
		return false;
	}
	
	// ４桁以外ならエラー
	if( y.length != 4){
		return false;
	}

	// 月のチェックをする
	if( m < 1 || 12 < m ){
		return( false );
	}

	// 日のチェックをする
	if( d < 1 || daymonth(y,m) < d ){
		return( false );
	}

	return( true );
}

//==============================================================================
// NAME     ：daymonth
// CONTENT  ：月の日数を求める
// INPUT    ：
// OUTPUT   ：
// Version　：
//   1.00A:    2001/07/19  by Kawashima
//==============================================================================
function daymonth( year, month ) {
	var day = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

	// 閏年を判別
	if( month==2 && (year%4==0 && year%100!=0 || year%400==0) ) return 29;

	return day[month-1];
}

//===========================================================================
// NAME     ：GetAge
// CONTENT  ：誕生日から年齢を得る
// Version　：
//   1.00A:  2001/07/16  by Kawashima
//===========================================================================
function GetAge( date , birthday ) {
	var buff,date_y,birthday_y;

	date_y = date.getYear();
	if ( date_y < 1900) {
	    date_y += 1900;
	}
	birthday_y = birthday.getYear();
	if ( birthday_y < 1900) {
	    birthday_y += 1900;
	}

	buff = new Date( date_y, birthday.getMonth(), birthday.getDay() );

	if ( buff.getTime() <= date.getTime() ){
		return date_y - birthday_y;
	} else {
		return date_y - birthday_y - 1;
	}

}

//===========================================================================
// NAME     ：ChkAge
// CONTENT  ：誕生日と年齢があっているか
// Version　：
//   1.00A:  2001/07/16  by Kawashima
//===========================================================================
function ChkAge( date , birthday , age_mode ) {

	var age;

	//誕生日と年齢があっているか
	age = GetAge( date , birthday );

	if(         age_mode == Age_Adlt ){
		// 大人チェック
		if( age >= 12 ){
			return true;
		} else {
			return false;
		}
	} else if ( age_mode == Age_Child ){
		// 子供チェック
		if ( 2 <= age && age < 12 ){
			return true;
		} else {
			return false;
		}
	} else if ( age_mode == Age_Baby ){
		// 幼児チェック
		if ( 0 <= age && age < 2 ){
			return true;
		} else {
			return false;
		}
	}

}

//=============================================================================
// NAME     ：ChkDateYYYYMM
// CONTENT  ：年月のチェックをする
// INPUT    ：yyyy :年
//          ：mm   :月
// OUTPUT   ：true :成功した場合
//          ：false:失敗した場合
// Version  ：
//   1.00A:    2001/08/02  by T.Nakajima
//=============================================================================
function ChkDateYYYYMM(yyyy,mm)
{
	// ４桁以外ならエラー
	if( yyyy.length != 4){
		return false;
	}
	
	// 数字のチェック
	if( !IsNumber(yyyy) || !IsNumber(mm) ){
		return false;
	}
	
	// 月の範囲は１月から１２月までです
	if( mm < 1 || mm > 12){
		return false;
	}
	
	return true;
}

//=============================================================================
// NAME     ：GetRadioChk
// CONTENT  ：ラジオボタンより値を取得する
// INPUT    ：radio :ラジオボックス名
// OUTPUT   ：選択されていた場合はその値、選択されていなければ返り値なし
// Version  ：
//   1.00A:    2001/08/03  by T.Nakajima
//=============================================================================
function GetRadioChk(radio)
{
	for(i=0;i<radio.length;i++){
		if(radio[i].checked){
			return radio[i].value;
		}
	}
	return "";
}

//=============================================================================
// NAME 	：getCookie
// CONTENT	：cookieからデータを取得します
// INPUT	：name :項目名
// Version	：
//	 1.00A:    2001/08/21  by M.Kawabata
//=============================================================================
function getCookie(name){
	tmp = document.cookie + ";";
	tmp1 = tmp.indexOf(name, 0);
	if(tmp1 != -1){
		tmp = tmp.substring(tmp1, tmp.length);
		start = tmp.indexOf("=", 0)+1;
		end = tmp.indexOf(";", start);
		return(unescape(tmp.substring(start, end)));
	}
	return("");
}

//=============================================================================
// NAME 	：altMsg
// CONTENT	：alertメッセージを出力します
// INPUT	：idx :メッセージ種別, str :項目名, val :パラメータ文字列
// Version	：
//	 1.00A:    2001/08/28  by M.Kawabata
//=============================================================================
function altMsg(idx, str, val){

/*
	switch (idx) {
		case MSG_SEL:
			alert(str + "を選択してください。");
			break;
		case MSG_ONE_SEL:
			alert(str + "は１つ以上選択してください。");
			break;
		case MSG_INP:
			alert(str + "を入力してください。");
			break;
		case MSG_RGT_INP:
			alert(str + "を正しく入力してください。");
			break;
		case MSG_CHG_INP:
			alert(str + "は" + val + "で入力してください。");
			break;
		case MSG_KANA:
			alert(str + "に半角カタカナが含まれています。半角カタカナ以外の文字で入力してください。");
			break;
		case MSG_NUM:
			alert(str + "は半角" + val + "文字/全角" + Math.floor(val/2) + "文字までで入力してください。");
			break;
		default :
			alert("メッセージの指定に誤りがあります。管理者に連絡してください。");
	}
*/

	if( idx == MSG_SEL ){
		alert(str + "を選択してください。");
	} else if( idx == MSG_ONE_SEL ){
		alert(str + "は１つ以上選択してください。");
	} else if( idx == MSG_INP ){
		alert(str + "を入力してください。");
	} else if( idx == MSG_RGT_INP ){
		alert(str + "を正しく入力してください。");
	} else if( idx == MSG_CHG_INP ){
		alert(str + "は" + val + "で入力してください。");
	} else if( idx == MSG_KANA ){
		alert(str + "に半角カタカナが含まれています。半角カタカナ以外の文字で入力してください。");
	} else if( idx == MSG_NUM ){
		alert(str + "は半角" + val + "文字/全角" + Math.floor(val/2) + "文字までで入力してください。");
	} else {
		alert("メッセージの指定に誤りがあります。管理者に連絡してください。");
	}

}

//==============================================================================
// NAME     ：SelectMove
// CONTENT  ：バス・徒歩を選択する
// INPUT    ：str      : 初期値
// INPUT    ：obj_name :オブジェクト名
// OUTPUT   ：
// Version　：
//   2.00A:    2007/01/22  by T.kuriyama
//==============================================================================
function SelectMove( str , obj_name ){

	var Pref = new Array ("選択してください","バス", "徒歩");

	document.write( "<SELECT NAME='" + obj_name + "'>" );

	for( i=0 ; i<3 ; i++ ){
		if( Pref[i] == str ){
			document.write("<OPTION SELECTED VALUE=" + Pref[i] + ">" + Pref[i]);
		} else {
			document.write("<OPTION VALUE=" + Pref[i] + ">" + Pref[i]);
		}
	}
	document.write("</SELECT>");

	document.close();

}

//==============================================================================
// NAME     ：GetPrefNumber
// CONTENT  ：選択したバス・徒歩番号を得る
// INPUT    ：
// OUTPUT   ：
// Version　：
//   2.00A:    2007/01/22  by T.kuriyama
//==============================================================================
function GetMoveNumber( obj ){
	return (obj.selectedIndex);
}
