//------------------------------------------------------------------------------
// 共通宣言
//------------------------------------------------------------------------------
var cnsBanSing         = "\\ / : , ; * ? \" < > | \'";
var cnsMinYear         = 1980;		
var cnsMaxYear         = 2099;

//------------------------------------------------------------------------------
// 文字列サイズチェック
// funGetByte
//       パラメータ
//           strVal              対象文字列
//       戻り値
//           count               文字列サイズ
//
//------------------------------------------------------------------------------
function funGetByte(strVal){
	var i;
	var n;
	var count = 0;
	
	for (i=0; i<strVal.length; i++){
		n = escape(strVal.charAt(i));
		if (n.length < 4) count++; else count+=2;
	}
	return count;
}

//------------------------------------------------------------------------------
// 半角、全角空白除去(文字列前後)
// funTrim
//       パラメータ
//           strVal              対象文字列
//       戻り値
//           strTmp              文字列サイズ
//
//------------------------------------------------------------------------------
function funTrim(strVal){
	var strTmp;
	strVal = strVal.replace(/^ +/, '') ;
	strVal = strVal.replace(/ +$/, '') ;
	strVal = strVal.replace(/^ +/, '') ;
	strVal = strVal.replace(/ +$/, '') ;

	strTmp = strVal;
	return strTmp;
}

//------------------------------------------------------------------------------
// 全角数値を半角数値へ変換する
// funNumDblToSng
//       パラメータ
//           strVal          対象文字列
//       戻り値
//           true:OK / false:NG
//
//------------------------------------------------------------------------------
function funNumDblToSng(strVal) {

	var intBeforCode1 = '０'.charCodeAt(0) ;
	var intBeforCode2 = '９'.charCodeAt(0) + 1;
	var intAfterCode  = '0'.charCodeAt(0) ;
	var intCodeDiff = intAfterCode - intBeforCode1 ;
	var strValTmp = funTrim(strVal);// 文字列（作業用）
	var i ;							// ループ変数

	for (i = intBeforCode1; i <= intBeforCode2; i++) {
		while (strValTmp.indexOf(String.fromCharCode(i), 0) > -1) {
			strValTmp = strValTmp.replace(String.fromCharCode(i), String.fromCharCode(i + intCodeDiff)) ;
		}
	}

	return strValTmp ;
}

//------------------------------------------------------------------------------
// 半角英数のみか確認する
// funIsBnumber
//       パラメータ
//           strVal          対象文字列
//       戻り値
//           true:含まれている / false:含まれていない
//
//------------------------------------------------------------------------------
function funIsBnumber(strVal){
	var blnTmp = false;
	var strTmp = "";
	var i;

	if (strVal.length > 0 ){
		for (i=0;i<strVal.length;i++){
			strTmp = escape(strVal.charAt(i));

			if ( strTmp.charAt(0) == "%" ){
				blnTmp = true;
				break;
			}
		}
	}
	return blnTmp;
}

//------------------------------------------------------------------------------
// 月の最終日取得
// funGetMaxDay
//       パラメータ
//           strYear             対象の年
//           strMonth            対象の月
//       戻り値
//           NumOfDays           最終日
//
//------------------------------------------------------------------------------
function funGetMaxDay(strYear,strMonth){
	var month;
	var year;
	var NumOfDays;

	month  = parseInt(strMonth,10);
	year   = parseInt(strYear,10);

	if (month == 2) {
		if (year%400 == 0) {
			NumOfDays = 29;
		} else if ((year%4 ==0)&&(year%100 != 0)) {
			NumOfDays = 29;
		} else {
			NumOfDays = 28;
		}
	} else if ( (month == 4)||(month == 6)||(month == 9)||(month == 11) ) {
		NumOfDays = 30;
	} else {
		NumOfDays = 31;
	}

	return NumOfDays;
}

//------------------------------------------------------------------------------
// メールアドレスチェック
// funMailAddressCheck
//       パラメータ
//           strMailAddress      対象文字列
//       戻り値
//           true:正常アドレス / false:不正アドレス
//
//------------------------------------------------------------------------------
function funMailAddressCheck(strMailAddress){

	var strMail = new String();
	var strMailTmp = new String();
	var strMailTmp2 = new String();

	if(!funIsHalfChar(strMailAddress)) return false;

	strMail = strMailAddress;
	strMailTmp = strMail.match(/@/g);
	strMailTmp2 = strMail.substring(strMail.indexOf('@')) ;	// "@"以降の文字列

	if (strMail.match(/[\w\.\_\-]+@[\w\.\_\-]+\.[\w\.\_\-]+/i) == null) {
		return false;
	}
	else if (strMail.match(/\,|\;|@\./) != null) {	// ","、";"、"@."が含まれている
		return false;
	}
	else if (strMail.match(/\.$|\..$/) != null) {	// ".",".x"(xは任意1文字)で終わっている
		return false;
	}
	else if (strMailTmp == null) {	// "@"が１つも無い
		return false;
	}
	else if (strMailTmp.length != 1) {	// "@"が２つ以上
		return false;
	}
	else if (strMailTmp2.indexOf('..') > 0) {
		return false;
	}
	else if (strMail.match(/cojp$|\.meico\.co\.jp$|\.melko\.co\.jp$/i) != null) {
		// "cojp",".meico.co.jp",".melko.co.jp"で終わっている
		// 【注】ドメインが存在する場合は、チェックから外す
		return false;
	}
	else {
		return true;
	}
}

function funIsHalfChar(strVal) {

    for(var i = 0; i < strVal.length; i++) {
		if(funIsMutltiByteChar(strVal.charAt(i))) return false;
	}
	return true;
}

function funIsMutltiByteChar(strVal) {

	var str = escape(strVal);

	if(navigator.appName.charAt(0)=='M'){

		//IE
		return (str.charAt(1) == "u");

	}else{

		//NN
		if(str.charAt(0) != "%")
			return false;
		if(str.charAt(1) == "8")
			return true;
		else if(str.charAt(1) == "9") return true;
		else if(str.charAt(1) == "E") return true;
		else if(str.charAt(1) == "F") return true;
		else return false;
	}
}

//------------------------------------------------------------------------------
// 整数値チェック
// funIsInteger
//       パラメータ
//           strVal          対象文字列
//       戻り値
//           true:整数値 / false:整数値以外
//
//------------------------------------------------------------------------------
function funIsInteger(strVal) {

	var strValTmp = strVal ;
	var blnCheck ;

	strValTmp = strValTmp.replace(/^ +/, '') ;		//前空白を除去
	strValTmp = strValTmp.replace(/ +$/, '') ;		//後空白を除去
	strValTmp = strValTmp.replace(/^0+/, '') ;		//前ゼロを削除

	if ((strValTmp == parseInt(strValTmp)) || strValTmp == 0 ) {
		blnCheck = true ;
	}
	else {
		blnCheck = false ;
	}
	return blnCheck ;
}

//------------------------------------------------------------------------------
// 禁止文字チェック
// funSignCheck
//       パラメータ
//           strVal              対象文字列
//       戻り値
//           true:禁止文字含まず / false:禁止文字含む
//
//------------------------------------------------------------------------------
function funSignCheck(strVal){
	var intCnt = 0;
	var strTmp = "";
	var ban_flag = true;

	var arySing = cnsBanSing.split(" ");

	for (intCnt=0;intCnt<arySing.length;intCnt++){
		strTmp = arySing[intCnt];
		if (strVal.indexOf(strTmp,0) >= 0){
			ban_flag = false;
			break;
		}
	}
	return ban_flag;
}

//------------------------------------------------------------------------------
// 日付範囲チェック
// funDateRangeCheck
//       パラメータ
//           strVal              対象文字列
//       戻り値
//           true:範囲内 / false:範囲外
//
//------------------------------------------------------------------------------
function funDateRangeCheck(strVal){
	var strTmp = "";
	var ban_flag = false;
	if ( strVal.length >= 6){
		strTmp = strVal.substring(0,4);
		if ( funIsInteger(strTmp) ){
			if ( parseInt(strTmp,10) >= cnsMinYear && parseInt(strTmp,10) <= cnsMaxYear ){
				ban_flag = true;
			}
		}
	}
	return ban_flag;
}

//------------------------------------------------------------------------------
// 日付形式チェック（YYYY/MM/DD用）
// funDateChk
//       パラメータ
//           strVal              対象文字列
//       戻り値
//           true:形式が正しい / false:形式に誤り
//
//------------------------------------------------------------------------------
function funDateChk(strVal,strMsg){
	var aryTmp;
	var strYear;
	var strMonth;
	var strDay;
	var intTmp;


	if (funGetByte(strVal) == 0){
		alert(strMsg + "を入力してください。");
		return false;
	}

	aryTmp = strVal.split("/");

	if (aryTmp.length != 3){
		alert(strMsg + "の日付形式へ誤りがあります。");
		return false;
	}
	strYear  = aryTmp[0];
	strMonth = aryTmp[1];
	strDay   = aryTmp[2];
	intTmp = funGetMaxDay(strYear,strMonth);

	if (isNaN(strYear) || isNaN(strMonth) || isNaN(strDay)){
		alert(strMsg + "の日付形式へ誤りがあります。");
		return false;
	}

	if (funGetByte(strYear) != 4 || funGetByte(strMonth) != 2 || funGetByte(strDay) != 2){
		alert(strMsg + "はYYYY/MM/DD形式で入力してください。");
		return false;
	}

	if (parseInt(strYear,10) < cnsMinYear || parseInt(strYear,10) > cnsMaxYear){
		alert(strMsg + "の「年」は"+ cnsMinYear +"から"+ cnsMaxYear +"の範囲で入力してください。");
		return false;
	}

	if (parseInt(strMonth,10) < 1 || parseInt(strMonth,10) > 12){
		alert(strMsg + "の「月」は1から12の範囲で入力してください。");
		return false;
	}

	if (parseInt(strDay,10) < 1 || parseInt(strDay,10) > intTmp ){
		alert(strMsg + "の「日」は1から"+ intTmp + "の範囲で入力してください。");
		return false;
	}
	return true;
}

//------------------------------------------------------------------------------
// 時間形式チェック（HH:MM用）
// funTimeChk
//       パラメータ
//           strVal              対象文字列
//       戻り値
//           true:形式が正しい / false:形式に誤り
//
//------------------------------------------------------------------------------
function funTimeChk(strVal,strMsg){
	var aryTmp;
	var strHour;
	var strMinute;

	if (funGetByte(strVal) == 0){
		alert(strMsg + "を入力してください。");
		return false;
	}

	aryTmp = strVal.split(":");
	if (aryTmp.length != 2){
		alert(strMsg + "の時間形式に誤りがあります。");
		return false;
	}

	strHour   = aryTmp[0];
	strMinute = aryTmp[1];

	if (isNaN(strHour) || isNaN(strMinute)){
		alert(strMsg + "の時間形式に誤りがあります。");
		return false;
	}

	if (funGetByte(strHour) != 2 || funGetByte(strMinute) != 2){
		alert(strMsg + "はHH:MM形式で入力してください。");
		return false;
	}

	if (parseInt(strHour,10) < 0 || parseInt(strHour,10) > 23){
		alert(strMsg + "の「時」は0から23の範囲で入力してください。");
		return false;
	}

	if (parseInt(strMinute,10) < 0 || parseInt(strMinute,10) > 59){
		alert(strMsg + "の「分」は0から59の範囲で入力してください。");
		return false;
	}

	return true;
}

//------------------------------------------------------------------------------
// 郵便番号チェック( 999 または 999-9999 )
//------------------------------------------------------------------------------
function fnuCheckZipCode(obj){
  var retval=true;
  var value=obj.value;
  if (value=='') retval=true; // 無入力時
  else {
    var del=value.indexOf('-');
    if (del==-1)
      retval=(value.length==3?(checkNumber(value)>0):false);
    else if (del!=3 || (value.length-del)!=5)
      retval=false;
    else if (checkNumber(value.substring(0,del))==0 ||
             checkNumber(value.substring(del+1))==0){
      retval=false;
    }
  }

  return retval;
}

//------------------------------------------------------------------------------
// 英字「全角→半角」変換
// funAlpDblToSng
//       パラメータ
//           strVal              対象文字列
//       戻り値
//           変換実施後の文字列
//
//------------------------------------------------------------------------------
function funAlpDblToSng(strVal) {

	var intBeforCode1 = 'Ａ'.charCodeAt(0) ;
	var intBeforCode2 = 'Ｚ'.charCodeAt(0) + 1;
	var intAfterCode  = 'A'.charCodeAt(0) ;
	var intCodeDiff = intAfterCode - intBeforCode1 ;
	var strValTmp = funTrim(strVal) ;		// 文字列（作業用）
	var i ;							// ループ変数

	for (i = intBeforCode1; i <= intBeforCode2; i++) {
		while (strValTmp.indexOf(String.fromCharCode(i), 0) > -1) {
			strValTmp = strValTmp.replace(String.fromCharCode(i), String.fromCharCode(i + intCodeDiff)) ;
		}
	}

	intBeforCode1 = 'ａ'.charCodeAt(0) ;
	intBeforCode2 = 'ｚ'.charCodeAt(0) + 1;
	intAfterCode  = 'a'.charCodeAt(0) ;
	intCodeDiff = intAfterCode - intBeforCode1 ;

	for (i = intBeforCode1; i <= intBeforCode2; i++) {
		while (strValTmp.indexOf(String.fromCharCode(i), 0) > -1) {
			strValTmp = strValTmp.replace(String.fromCharCode(i), String.fromCharCode(i + intCodeDiff)) ;
		}
	}

	//特定の記号
	var strSngByte = new Array('@', '-', '.', ',','_') ;
	var strDblByte = new Array('＠', '－', '．' ,'，','＿') ;

	for (i = 0; i < strDblByte.length; i++) {
		while (strValTmp.indexOf(strDblByte[i], 0) > -1) {
			strValTmp = strValTmp.replace(strDblByte[i], strSngByte[i]) ;
		}
	}
	return strValTmp ;
}

//------------------------------------------------------------------------------
// カタカナ「半角→全角」変換
// funKataSngToDbl
//       パラメータ
//           strVal              対象文字列
//       戻り値
//           変換実施後の文字列
//
//------------------------------------------------------------------------------
function funKataSngToDbl(strVal) {
	// strVal           文字列

	var strSngByte = new Array('｢', '｣', '､', '｡', '･', 'ｶﾞ', 'ｷﾞ', 'ｸﾞ', 'ｹﾞ', 'ｺﾞ', 'ｻﾞ', 'ｼﾞ', 'ｽﾞ', 'ｾﾞ', 'ｿﾞ', 'ﾀﾞ', 'ﾁﾞ', 'ﾂﾞ', 'ﾃﾞ', 'ﾄﾞ', 'ﾊﾞ', 'ﾋﾞ', 'ﾌﾞ', 'ﾍﾞ', 'ﾎﾞ', 'ｳﾞ', 'ﾊﾟ', 'ﾋﾟ', 'ﾌﾟ', 'ﾍﾟ', 'ﾎﾟ', 'ｧ', 'ｨ', 'ｩ', 'ｪ', 'ｫ', 'ｬ', 'ｭ', 'ｮ', 'ｯ', 'ｰ', 'ｱ', 'ｲ', 'ｳ', 'ｴ', 'ｵ', 'ｶ', 'ｷ', 'ｸ', 'ｹ', 'ｺ', 'ｻ', 'ｼ', 'ｽ', 'ｾ', 'ｿ', 'ﾀ', 'ﾁ', 'ﾂ', 'ﾃ', 'ﾄ', 'ﾅ', 'ﾆ', 'ﾇ', 'ﾈ', 'ﾉ', 'ﾊ', 'ﾋ', 'ﾌ', 'ﾍ', 'ﾎ', 'ﾏ', 'ﾐ', 'ﾑ', 'ﾒ', 'ﾓ', 'ﾔ', 'ﾕ', 'ﾖ', 'ﾗ', 'ﾘ', 'ﾙ', 'ﾚ', 'ﾛ', 'ﾜ', 'ｦ', 'ﾝ', 'ﾞ', 'ﾟ') ;
	var strDblByte = new Array('「', '」', '、', '。', '・', 'ガ', 'ギ', 'グ', 'ゲ', 'ゴ', 'ザ', 'ジ', 'ズ', 'ゼ', 'ゾ', 'ダ', 'ヂ', 'ヅ', 'デ', 'ド', 'バ', 'ビ', 'ブ', 'ベ', 'ボ', 'ヴ', 'パ', 'ピ', 'プ', 'ペ', 'ポ', 'ァ', 'ィ', 'ゥ', 'ェ', 'ォ', 'ャ', 'ュ', 'ョ', 'ッ', 'ー', 'ア', 'イ', 'ウ', 'エ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ', 'シ', 'ス', 'セ', 'ソ', 'タ', 'チ', 'ツ', 'テ', 'ト', 'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ', 'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ヤ', 'ユ', 'ヨ', 'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ヲ', 'ン', '゛', '゜') ;
	var strValTmp = funTrim(strVal);// 文字列（作業用）
	var i ;							// ループ変数

	for (i = 0; i < strSngByte.length; i++) {
		while (strValTmp.indexOf(strSngByte[i], 0) > -1) {
			strValTmp = strValTmp.replace(strSngByte[i], strDblByte[i]) ;
		}
	}

	return strValTmp ;
}

//------------------------------------------------------------------------------
// スペース入力チェック
// funSpaceChk
//       パラメータ
//           strVal              対象文字列
//       戻り値
//           true:スペース含まず / false:スペース含む
//
//------------------------------------------------------------------------------
function funSpaceChk(strVal) {
　if(strVal.search(/ /)>-1) return false;
　if(strVal.search(/'&nbsp;/)>-1) return false;
  return true;
}

//------------------------------------------------------------------------------
// マウスオーバーによる画像切替
// MouseOver
//       パラメータ
//           nNumber              画像のインデックス
//       戻り値
//           なし
//
//------------------------------------------------------------------------------
function MouseOver(nNumber)
{
  strUrl = "./images/sidetitle0" + nNumber +"_r.jpg";
  strImageName = "imgNum" + nNumber;
  document.images[strImageName].src = strUrl;
}

//------------------------------------------------------------------------------
// マウスアウトによる画像切替
// MouseOut
//       パラメータ
//           nNumber              画像のインデックス
//       戻り値
//           なし
//
//------------------------------------------------------------------------------
function MouseOut(nNumber)
{
  strUrl = "./images/sidetitle0" + nNumber + ".jpg";
  strImageName = "imgNum" + nNumber;
  document.images[strImageName].src = strUrl;
}

//------------------------------------------------------------------------------
// ウィンドウの幅／高さ取得
// getViewPort
//       パラメータ
//           なし
//       戻り値
//           {width: width, height: height}
//                                スタイル(幅／高さ)
//
//------------------------------------------------------------------------------
var getViewPort = function() {
 	var width, heiht;
 	if (self.innerHeight) {
		// all except Explorer
		width = self.innerWidth;
		height = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) {
		// Explorer 6 Strict Mode
		width = document.documentElement.clientWidth;
		height = document.documentElement.clientHeight;
	} else if (document.body) {
		// other Explorers
		width = document.body.clientWidth;
		height = document.body.clientHeight;
	}
	return {width: width, height: height};
}

//------------------------------------------------------------------------------
// リサイズ
// resize
//       パラメータ
//           なし
//       戻り値
//           なし
//
//------------------------------------------------------------------------------
var resize = function(event) {
	var inner = document.getElementById('inner');
	var viewport = getViewPort();
	var height = viewport.height; // header.height + footer.heightを引く場合はマイナス
	inner.style.height = (height <= 0 ? 0 : height) + 'px';
}

//------------------------------------------------------------------------------
// バックグラウンド切替
// b
//       パラメータ
//           x                    divタグid
//           y                    色替えフラグ(0:マウスアウト、1:オンマウス赤、2:オンマウス青)
//       戻り値
//           なし
//
//------------------------------------------------------------------------------
var bg;
function b(x,y) {

	if(y==1) {
		bg ="#ffeeee";
	}
	else if(y==2) {
		bg ="#e8eef9";
	}
	else {
//		bg = "#ffffff";
		bg = "";
	}

	if(document.getElementById) {
		document.getElementById(x).style.background=bg;
	}
	//IE4用
	else if(document.all) {
		document.all(x).style.background=bg;
	}
}
