/**
文字コード
 */
//0
var SUJI_ZERO=48;
//9
var SUJI_NINE=57;
//A
var EIJI_LERG_A=65;
//Z
var EIJI_LERG_Z=90;
//a
var EIJI_SMALL_A=97;
//z
var EIJI_SMALL_Z=122;
//r_
var ZENKANA_SMLL_A = 12449;
//qz
var ZENKANA_HYPHEN=12540;
//ｧ・
var HANKANA_SMALL_WO = 65382;
//ﾟ・
var HANKANA_MARU = 65439;
//"q_"
var ZEN_SPAC = 12288;
//" "
var HAN_SPAC = 32;
//"~"チルダ~
var HAN_KIGO_NYOR = 126;
//
var HAN_KIGO_FF = 255;
//マイナス符号
var HUGO_MINUS = 45;


function input_check(form)
{

	//入力有無チェック
   //	alert("**" + form.elements[1].name  );
//	return;
	for( i=0 ; i<form.elements.length ; i++ ){
		if( form.elements[i].value.length == 0 ){
			//必須入力チェック
			if (form.elements[i].name.charAt(0) == "Y"){
				error_disp(MSG_000, form.elements[i]);
				return false;
			}
			continue;
		}

		//全角チェック
		if (form.elements[i].name.charAt(1) == 1){
			if (!zenkk_check(form.elements[i].value)){
				error_disp(MSG_001, form.elements[i]);
				return false;
			}
		}

		//半角・禁則文字チェック
		if (form.elements[i].name.charAt(1) == 2)
		{
			if (!hankk_check(form.elements[i].value)){
				error_disp(MSG_002, form.elements[i]);
				return false;
			}

			if (!illegalchar_check(form.elements[i].value)){
				error_disp(MSG_006, form.elements[i]);
				return false;

			}
		}
	
		//半角数字チェック
		if (form.elements[i].name.charAt(1) == 3){
			if (!suchi_check(form.elements[i].value))
			{
				error_disp(MSG_003, form.elements[i]);
				return false;

			}
		}

		//半角英字チェック
		if (form.elements[i].name.charAt(1) == 4){
			if (!eiji_check(form.elements[i].value))
			{
				error_disp(MSG_004, form.elements[i]);
				return false;
			}
		}



		//メールアドレスチェック
		if (form.elements[i].name.charAt(1) == 5){

			// メールアドレスは未入力時にはチェックしない
			if( form.elements[i].value.length > 0 ){

				if (!hankk_check(form.elements[i].value)){
					error_disp(MSG_002, form.elements[i]);
					return false;
				}
	
				if (!illegalchar_check(form.elements[i].value)){
					error_disp(MSG_006, form.elements[i]);
					return false;
				}
	
				if	(!mailAddr_check(form.elements[i].value)){
					error_disp(MSG_005, form.elements[i]);
					return false;
				}

			}

		}

		//半角英数字チェック
		if (form.elements[i].name.charAt(1) == 6){
			if (!eisu_check(form.elements[i].value)){
				error_disp(MSG_007, form.elements[i]);
				return false;
			}
		}

		//禁則文字チェック
		if (form.elements[i].name.charAt(1) == 7)
		{
			if (!illegalchar_check(form.elements[i].value)){
				error_disp(MSG_006, form.elements[i]);
				return false;

			}
		}
	

		//整数チェック
		if (form.elements[i].name.charAt(1) == 8)
		{
			if (!integer_check(form.elements[i].value)){
				error_disp(MSG_008, form.elements[i]);
				return false;

			}
		}

	}
	return true;

}


/**
    エラー表示
    機能：メッセージを表示し、エラー項目にフォーカスを当てる。
    引数：メッセージ(msg)、対応するオブジェクト(obj)
    戻値：なし
 */
function error_disp(msg, obj)
{
   	alert(msg);
	obj.focus();
	if (obj.type == "text")
   	{
   		 obj.select();
	}
}

/**
    全角チェック
    機能：文字列がすべて全角か判定
    引数：文字列(value)
    戻値：true, false
 */
function zenkk_check(value)
{
	var i = 0;
	var cdValue = "";
    //文字列の1文字目から最終文字まで走査
	while (i < value.length)
	{
        //文字コード取得
        cdValue = value.charCodeAt(i);
        //" "〜yの上に¨がついた文字(半角英数記号)、
        //もしくは"ｦ"〜"ﾟ"(半角カタカナ)の文字コードであれば"false"
		if (
				((cdValue >= HAN_SPAC) && (cdValue <= HAN_KIGO_FF)) || 
				((cdValue >= HANKANA_SMALL_WO) && (cdValue <= HANKANA_MARU))
			)
		{
			return false;
		}
		i++;
	}
	return true;
}

/**
    半角チェック
    機能：文字列がすべて半角文字か判定
    引数：文字列(value)
    戻値：true, false
 */
function hankk_check(value)
{
	var i = 0;
	var cdValue = "";
	
	while (i < value.length)
	{
		cdValue = value.charCodeAt(i);
		if ((cdValue >= HAN_SPAC) && (cdValue <= HAN_KIGO_NYOR))
		{
		}
		else
		{
			return false;
		}
		i++;
	}
	return true;
}

/**
    英数チェック
    機能：文字列がすべて英数字か判定
    引数：文字列(value)
    戻値：true, false
 */
function eisu_check(value)
{
	var i = 0;
	var cdValue = "";
	
	while (i < value.length)
	{
		cdValue = value.charCodeAt(i);
		if (
					((cdValue >= EIJI_LERG_A) && (cdValue <= EIJI_LERG_Z)) || 
					((cdValue >= EIJI_SMALL_A) && (cdValue <= EIJI_SMALL_Z)) || 
					((cdValue >= SUJI_ZERO) && (cdValue <= SUJI_NINE)) || 
					(cdValue == HAN_SPAC)
			)
		{
		}
		else
		{
			return false;
		}
		i++;
	}
	return true;
}


/**
    半角英字チェック
    機能：文字列がすべて半角英字か判定
    引数：文字列(value)
    戻値：true, false
 */

function eiji_check(value)
{
	var i = 0;
	var cdValue = "";
	
	while (i < value.length)
	{
		cdValue = value.charCodeAt(i);
		if (
					((cdValue >= EIJI_LERG_A) && (cdValue <= EIJI_LERG_Z)) || 
					((cdValue >= EIJI_SMALL_A) && (cdValue <= EIJI_SMALL_Z))
			)
		{
		}
		else
		{
			return false;
		}
		i++;
	}
	return true;
}


/**
    半角数字チェック
    機能：文字列がすべて半角数字か判定
    引数：文字列(value)
    戻値：true, false
 */

function suchi_check(value)
{
	if ((value.substr(0, 1) == " ") || (value.substr(0, 1) == "."))
	{
		return false;
	}
	if (isNaN(value) == false)
	{
		return true;
	}
	else
	{
		return false;
	}
}

/**
    メールアドレスチェック
    機能：メールアドレスか判定
    引数：文字列(value)
    戻値：true, false
 */
function mailAddr_check(value)
{

	var data= value.match(/^\S+@\S+\.\S+$/);
	if(!data || !value){
		return false;
	}
	return true;
}
/**
    禁則文字チェック
    機能：禁則文字有無の判定
    引数：文字列(value)
    戻値：true, false
 */

function illegalchar_check(value)
{
	if((value.indexOf("'") >=0)		// 
	|| (value.indexOf("\"")>=0)		//  
	|| (value.indexOf(",") >=0)		//
	|| (value.indexOf("|") >=0)		// 
	|| (value.indexOf("\t")>=0)		// 
	|| (value.indexOf("\\")>=0)		// 
	|| (value.indexOf("−")>=0)){		// 
		return false;			 // 
	} 
	return true;			// 
} 

/**
    整数チェック
    機能：整数の判定
    引数：文字列(value)
    戻値：true, false
 */

function integer_check(value)
{
	var i = 0;
	var cdValue = "";
	
	if (isNaN(value) == true) {
		return false;
	} else {
		while (i < value.length)
		{
			cdValue = value.charCodeAt(i);
			if (i==0) {
				if (!( ( (cdValue >= SUJI_ZERO) && (cdValue <= SUJI_NINE) ) || (cdValue == HUGO_MINUS) ) )
				{
					return false;
				}
			} else {
				if (!( (cdValue >= SUJI_ZERO) && (cdValue <= SUJI_NINE) ))
				{
					return false;
				}
			}
			i++;
		}
	}
	return true;
}
