////////////////////////////////////////////////////////////////////////////////////////////
//	JavaScript入力補助・入力チェックライブラリ集
//
//	IE4 NN4以上対応
//
//	Modifications History
//		2004/08/10	 1.0	First release
//
//	Copyright(C) WWW.Omakase.Net 2000 all rights reserved.
///////////////////////////////////////////////////////////////////////////////////////////

// Global variables
var AutoFormat = 0;

function ErrorAlert(elm, msg)
{

	alert(msg);
	elm.focus();
	return false;

}

//携帯電話番号自動フォーマット
// (XXXX)XX-XXXX→XXXX-XX-XXXX
// XXXXXXXXXX→XXX-XXXX-XXXX
function HandyPhone_AutoFormat(SrcVal)
{

	var ret = Phone_AutoFormat(SrcVal)
	var Tel = ret.match(/^\d{11}$/);
	if(Tel) {
		var tel1	= ret.substr(0,3);
		var tel2	= ret.substr(3,4);
		var tel3	= ret.substr(7,4);
		ret			= tel1 + "-" + tel2 + "-" + tel3;
		AutoFormat = 1;
	}
	return ret;

}

//電話番号自動フォーマット
// (XXXX)XX-XXXX→XXXX-XX-XXXX
function Phone_AutoFormat(SrcVal)
{

	var ret = SrcVal;
	var Tel = ret.match(/^\(/);
	if(Tel) {
		ret = ret.replace(/^\(/ig,'');
		ret = ret.replace(/\)/ig,'-');
	}
	return ret;

}

//時間自動フォーマット
//AMXX:XX→２４時間制XX:XX
//PMXX:XX→２４時間制XX:XX
//XX:XXAM→２４時間制XX:XX
//XX:XXPM→２４時間制XX:XX
//XXXX→XX:XX
function Time_AutoFormat(SrcVal)
{

	var ret = SrcVal;
	var Time = ret.match(/^\d{4}$/);
	if(Time) {
		hh	= ret.substr(0,2);
		mm	= ret.substr(2,2);
		ret		= hh + ":" + mm;
		AutoFormat = 1;
	}
	Time = ret.match(/AM/i);
	if(Time) {
		ret = ret.replace(/AM/ig,'');
		var hhmmss = ret.split(":");
		var hour = eval(hhmmss[0]);
		if(hour >= 12) {
			hhmmss[0] = "00";
		}
		for(var i=0;i < hhmmss.length;i++) {
			if(hhmmss[i].length == 1) {
				hhmmss[i] = "0" + hhmmss[i];
			}
		}
		ret = hhmmss.join(":");
		AutoFormat = 1;
	}
	Time = ret.match(/PM/i);
	if(Time) {
		ret = ret.replace(/PM/ig,'');
		var hhmmss = ret.split(":");
		var hour = eval(hhmmss[0]);
		if(hour >= 12) {
			hhmmss[0] = 12;
		} else {
			hhmmss[0] = hour + 12;
			if(hhmmss[0] > 23) {
				hhmmss[0] = 23;
			}
		}
		for(var i=0;i < hhmmss.length;i++) {
			if(hhmmss[i].length == 1) {
				hhmmss[i] = "0" + hhmmss[i];
			}
		}
		ret = hhmmss.join(":");
		AutoFormat = 1;
	}
	return ret;

}

//郵便番号自動フォーマット
//XXXXXXX→XXX-XXXX
function Zip_AutoFormat(SrcVal)
{

	var ret = SrcVal;
	var Zip = ret.match(/^\d{7}$/);
	if(Zip) {
		zip1	= ret.substr(0,3);
		zip2	= ret.substr(3,4);
		ret		= zip1 + "-" + zip2;
		AutoFormat = 1;
	}
	return ret;

}

//日付自動フォーマット　
//XXXX-XX-XX →XXXX/XX/XX形式
//XXXX.XX.XX →XXXX/XX/XX形式
//XXXXXXXX →XXXX/XX/XX形式
//[H|S|T|M]XX/XX/XX →XXXX/XX/XX形式
//[H|S|T|M]XX-XX-XX →XXXX/XX/XX形式
//[H|S|T|M]XX.XX.XX →XXXX/XX/XX形式
//西暦２桁XX/XX/XX →XXXX/XX/XX形式
//西暦２桁XXXXXX →XXXX/XX/XX形式
function Date_AutoFormat(SrcVal)
{

	var ret = SrcVal;

	ret = ret.replace(/-/g,'/');
	ret = ret.replace(/\./g,'/');
	var reki = ret.match(/^(H|S|T|M)/i);
	if(reki) {
		if(ret.indexOf("/") != -1) {
			var wymd = ret.split("/");
			wareki	= wymd[0];
			seireki = WarekiToSeireki(wareki);
			ret		= seireki + "/" + wymd[1] + "/"+ wymd[2];
		} else {
			wareki	= ret.substr(0,3);
			mmdd	= str.substring(3,ret.length);
			seireki = WarekiToSeireki(wareki);
			ret		= seireki + mmdd;
		}
		AutoFormat = 1;
	}
	var kDate = ret.match(/^(\d{4})\/(\d{2})\/(\d{2})$/);
	if(!kDate) {
		kDate = ret.match(/^(\d{4})\/(\d{1,2})\/(\d{1,2})$/);
		if(kDate) {
			var wymd = ret.split("/");
			if(wymd[1].length == 1){wymd[1] = "0" + wymd[1]};
			if(wymd[2].length == 1){wymd[2] = "0" + wymd[2]};
			ret		= wymd[0] + "/" + wymd[1] + "/" + wymd[2];
			AutoFormat = 1;
		} else {
			kDate = ret.match(/^\d{8}$/);
			if(kDate) {
				var wyear	= ret.substr(0,4);
				var wmonth	= ret.substr(4,2);
				var wday	= ret.substr(6,2);
				var wkdt	= wyear + "/" + wmonth + "/" + wday;
				var er = Date_Check(wkdt);
				if(er) {
					ret		= wkdt;
					AutoFormat = 1;
				}
			}
		}
	}
	//西暦２桁を救う。。
	wDate = new Date();
	tYear = wDate.getFullYear();

	kDate = ret.match(/^(\d{2})\/(\d{1,2})\/(\d{1,2})$/);
	if(kDate) {
		tYear = parseInt(tYear / 100) *100;
		var wymd = ret.split("/");
		wymd[0] = eval(wymd[0]) + tYear;
		if(wymd[1].length == 1){wymd[1] = "0" + wymd[1]};
		if(wymd[2].length == 1){wymd[2] = "0" + wymd[2]};
		var wkdt	= wymd[0] + "/" + wymd[1] + "/" + wymd[2];
		var er = Date_Check(wkdt);
		if(er) {
			ret		= wkdt;
			AutoFormat = 1;
		}
	}
	kDate = ret.match(/^\d{6}$/);
	if(kDate) {
		tYear = parseInt(tYear / 100) *100;

		var wyear	= ret.substr(0,2);
		var wmonth	= ret.substr(2,2);
		var wday	= ret.substr(4,2);
		wyear		= eval(wyear) + tYear;
		var wkdt	= wyear + "/" + wmonth + "/" + wday;
		var er = Date_Check(wkdt);
		if(er) {
			ret		= wkdt;
			AutoFormat = 1;
		}
	}
	return ret;

}

//入力文字数チェック
function Bytes_Count(SrcVal,len)
{

var sQuart		= "'";
var Singlebyte 	= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 ';
Singlebyte		= Singlebyte + 'ｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾓﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜｦﾝｧｨｩｪｫｯｬｭｮ';
Singlebyte		= Singlebyte + '-()&!"#$%=^~|@`[{;+:*]},<.>/?_\\'+sQuart;
Singlebyte		= Singlebyte + 'ﾞﾟｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾊﾋﾌﾍﾎﾊﾋﾌﾍﾎ';

	var sLength = SrcVal.value.length;
	var sValue	= SrcVal.value
	var temp;
	var count	= 0;

	for(var i=0;i < sLength;i++) {
		temp = sValue.substr(i,1);
		if(Singlebyte.indexOf(temp) == -1) {		//Singlebyteで定義してる以外2byteで加算
			count = count + 2;
		} else {
			count = count + 1;
		}
	}
	if(count > len) {
		alert("制限文字数を超えています。");
		SrcVal.focus();
		return false;
	} else {
		return true;
	}

}

// 日付チェック YYYY/MM/DD
function Date_Check(SrcVal)
{

	if(SrcVal.length != 0) {
		var DateArray = SrcVal.match(/^(\d{4})\/(\d{2})\/(\d{2})$/);
		if(DateArray == null) {
			return false;
		}
		wyear	= SrcVal.substr(0,4);
		wmonth	= eval(SrcVal.substr(5,2));
		wday	= eval(SrcVal.substr(8,2));
		if(month_chk(wmonth)) {
		} else {
			return false;
		}
		dd = lastday(wyear,wmonth);
		if(wday > dd) {
			return false;
		}
	}
	return true;

}

//URLチェック
function URL_Check(SrcVal)
{


	if(SrcVal.length != 0) {
		data = SrcVal.match(/(s?https?|ftp):\/\/[!#-9A-~]+\.+[a-z0-9]/i);
//		data = SrcVal.match(/(s?https?|ftp):\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+/g);
		if(!data) {
			return false;
		}
	}
	return true;

}

//携帯番号チェック
function HandyPhone_Check(SrcVal)
{
	if(SrcVal.length != 0) {
		data = SrcVal.match(/^\d{3}-\d{4}-\d{4}$|^\d{11}$/);
		if(!data) {
			return false;
		}
	}
	return true;
}

//電話番号チェック
//平成１６年６月２８日現在
//市外局番1-5桁-市内局番0-4桁-加入者番号4桁

//先頭がゼロは国内番号固定
//0X-XXXX-XXXX
//0XX-XXX-XXXX
//0XXX-XX-XXXX
//0XXXX-X-XXXX
//0XXXXX-XXXXX
//0XXX-X-XXXX

function Phone_Check(SrcVal)
{
	if(SrcVal.length != 0) {
		var data0 = SrcVal.match(/^0/);
		var data1 = SrcVal.match(/^[0-9-]{11}$|^[0-9-]{12}$/);
		var data2 = SrcVal.match(/^\d{6}-\d{4}$|^\d{4}-\d{1}-\d{4}$|^\d{2}-\d{4}-\d{4}$|^\d{3}-\d{3}-\d{4}$|^\d{4}-\d{2}-\d{4}$|^\d{5}-\d{1}-\d{4}$/);
		if(!data0) {
			return false;
		}
		if(!data1 && !data2) {
			return false;
		}
	}

	return true;
}

//郵便番号チェック
function Zip_Check(SrcVal)
{

	if(SrcVal.length != 0) {
		data = SrcVal.match(/^\d{3}-\d{4}$/);
		if(!data) {
			return false;
		}
	}
	return true;
}

//時間チェック
function Time_Check(SrcVal)
{
	if(SrcVal.length != 0) {
		data = SrcVal.match(/^([01]?[0-9]|2[0-3]):([0-5][0-9])$/);
		if(!data) {
			return false;
		}
	}
	return true;
}


//和暦から西暦変換
function WarekiToSeireki(str)
{

	var ngo = str.charAt(0).toUpperCase();
	var yy = eval(str.substring(1,str.length));
	if((ngo == "H") && (yy > 0) && (yy < 50)) return 1988 + yy;		//　平成
	if((ngo == "S") && (yy > 0) && (yy < 65)) return 1925 + yy;		//　昭和
	if((ngo == "T") && (yy > 0) && (yy < 16)) return 1911 + yy;		//　大正
	if((ngo == "M") && (yy > 0) && (yy < 46)) return 1867 + yy;		//　明治
	return -1;

}

// 日の取得
function lastday(year,month)
{

	day = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	if(month == 2 && leapyear(year)) return 29;
	return day[month-1];

}
//うるう年のチェック
function leapyear(year)
{

	return year%4==0 && (year%100!=0 || year%400==0);

}

//月の範囲チェック
function month_chk(month)
{
	if((month >= 1) && (month <= 12)) return true;
	return false;

}

//数字＆マイナス
function NumberOption_Check(SrcVal)
{
	var i = 0, ch;
	var valid	= "1234567890.-";
	for(ch=SrcVal.charAt(i);ch != "";ch=SrcVal.charAt(i++)) {
		if(valid.indexOf(ch) == -1) {
			return false;
		}
	}
	return true;
}

//数字チェック
function Number_Check(SrcVal)
{
	var i = 0, ch;
	var valid	= "1234567890";
	if(SrcVal.length != 0) {
		for(ch=SrcVal.charAt(i);ch != "";ch=SrcVal.charAt(i++)) {
			if(valid.indexOf(ch) == -1) {
				return false;
			}
		}
	}
	return true;

}

//英数字オプションチェック
function AlphaOption_Check(SrcVal)
{

	var valid	= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890_-";
	var i = 0, ch;
	if(SrcVal.length != 0) {
		for(ch=SrcVal.charAt(i);ch != "";ch=SrcVal.charAt(i++)) {
			if(valid.indexOf(ch) == -1) {
				return false;
			}
		}
	}
	return true;

}

//英数字チェック
function Alpha_Check(SrcVal)
{

	var valid	= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
	var i = 0, ch;
	if(SrcVal.length != 0) {
		for(ch=SrcVal.charAt(i);ch != "";ch=SrcVal.charAt(i++)) {
			if(valid.indexOf(ch) == -1) {
				return false;
			}
		}
	}
	return true;

}

//メールアドレスチェック
function EmailCheck(SrcVal)
{

	if(SrcVal.length != 0) {
		if(trim(SrcVal) == "-") {
			return true;
		} else {
			var i = 0;
			var sLength	= SrcVal.length;
			var valid	= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890._@-%";
			var valid1	= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
			var ok		= 0;
			var temp;
			var name;
			var len = SrcVal.length;
			while(''+SrcVal.charAt(0) == ' ') {
				SrcVal = SrcVal.substring(1,len);
				len = SrcVal.length;
			}
			while(''+SrcVal.charAt(len-1) == ' ') {
				SrcVal = SrcVal.substring(0,(SrcVal.length-1));
				len = SrcVal.length;
			}

			for(var i=0;i < sLength;i++) {
				temp = SrcVal.substr(i,1);
				if(valid.indexOf(temp) == -1) {
					ok = 1;
				}
			}
			if(ok == 1) {
				return false;
			}
			temp = SrcVal.substr(0,1);
			if(valid1.indexOf(temp) == -1) {
				return false;
			}

			sl	= sLength-1;
			temp= SrcVal.substr(sl,1);
			if(valid1.indexOf(temp) == -1) {
				return false;
			}
			i = 0;
			while((i < sLength) && (SrcVal.charAt(i) !="@")) {		// @
				i++;
			}
			if((SrcVal.charAt(i) != "@")) {
				return false;
			} else {
				i+=2;
			}
			while((i < sLength) && (SrcVal.charAt(i) != ".")) {		// .
				i++;
			}
			//there must be at least one character after the .
			if((i >= sLength-1) || (SrcVal.charAt(i) != ".")) {
				return false;
			}
			i = 0;
			while(i < sLength) {
				if(SrcVal.charAt(i) == "@") {
					if(SrcVal.charAt(i+1) == ".") {
						return false
					}
					if(SrcVal.charAt(i+1)=="." && SrcVal.charAt(i+2)=="." ) {
						return false
					} else {
						return true;
					}
				}
				i++
			}
		}
	}
	return true;
}

//文字列の先頭および末尾にあるホワイトスペースを取り除く 
function trim(fieldValue)
{

	var str, beg, end;
	str = fieldValue.toString();
	for(beg=0;((str.charAt(beg) == " ") || (str.charAt(beg) == "　")) && (beg < str.length);beg++);
	for(end=str.length-1;((str.charAt(end) == " ") || (str.charAt(end) == "　")) && (end >= 0);end--);
	if((end+1) != str.length || beg != 0) {
		AutoFormat = 1;
	}
	return str.substring(beg,end+1);

}

//全角カナを半角カナに変換
function KanaHanToZen(SrcVal)
{
var han	= "ｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜｦﾝｧｨｩｪｫｬｭｮｯ､｡ｰ｢｣ﾞﾟ";
var zen	=		"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォャュョッ、。ー「」";
zen		= zen + "　　　　　ガギグゲゴザジズゼゾダヂヅデド　　　　　バビブベボ　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　";
zen		= zen + "　　　　　　　　　　　　　　　　　　　　　　　　　パピプペポ　　　　　　　　　　　　　　　　　　　　　　　　　　　　　";

	str = "";
	for (i=0;i < SrcVal.length;i++){
		c = SrcVal.charAt(i);
		cnext	= SrcVal.charAt(i+1);
		n		= han.indexOf(c,0);
		nnext	= han.indexOf(cnext,0);
		if(n >= 0){
			AutoFormat = 1;
			if(nnext == 60){
				c = zen.charAt(n+60);
				i++;
			} else if(nnext == 61) {
				c = zen.charAt(n+120);
				i++;
			} else {
				c = zen.charAt(n);
			}
		}
		if((n != 60) && (n != 61)){
			str += c;
		}
	}
	return str;
}


//全角英数字を半角英数字に変換
function AlphaNumericZenToHan(SrcVal)
{
var sQuart		= "'";
var han	= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890-.@_/";
han	= han +	'!"#$%&'+ sQuart + '()*+,-./:;<=>?@[\]^_`{|}~';

var zen	= "ＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚ１２３４５６７８９０−．＠＿／";
zen 	= zen + '！”＃＄％＆’（）＊＋，−．／：；＜＝＞？＠［￥］＾＿｀｛｜｝￣';

	str = "";
	for (i=0;i < SrcVal.length;i++) {
		c = SrcVal.charAt(i);
		n = zen.indexOf(c,0);
		if(n >= 0) {
			c = han.charAt(n);
			AutoFormat = 1;
		}
		str += c;
	}
	return str;

}


function FileNameCheck(validString,field)
{

	validString = serverFileName_get(validString);
	var isCharValid = true;
	var i, invalidChar;
	for(i=0;i < validString.length;i++) {
		if(validString.charAt(0) == '.') {
			isCharValid = false;
			validString = validString.substr(1,validString.length-1);
			i = validString.length;
		}
		if(validateCharacter(validString.charAt(i)) == false) {
			isCharValid = false;
			invalidChar = validString.charAt(i);
			validString = validString.substr(0,i) + validString.substr(i+1,validString.length-1);
			i = validString.length;
		}
	}
	if(i < 1) {
		return false;
	}
	if(isCharValid == false) {
//		if(invalidChar) {
//			alert("無効なファイル名です。 ファイル名に'" + invalidChar + "'を含むことできません");
//		} else {
//			alert('無効なファイル名です。');
//		}
//		if(field) {
//			field.value = validString;
//			field.focus();
//			field.select();
//		}
		return false;
	}
	return true;

}

function validateCharacter(character)
{
	if((character >= 'a' && character <= 'z')||( character >='A' && character <='Z') || ( character >= '0' && character <= '9')
||( character =='-')||( character == '.')||( character == '_')

||( character == '~')
||( character == '(')
||( character == ')')
||( character == '[')
||( character == ']')
||( character == '{')
||( character == '}')
||( character == '@')
||( character == '#')
||( character == '$')
||( character == '%')
||( character == '&')
||( character == '+')
||( character == ',')
||( character == ';')
||( character == '=')
) {


		return true;
	} else {
		return false;
	}
}

function serverFileName_get(filename)
{
	var fileName = filename.toLowerCase();
	/* UNIXの場合 */
	var fileget = fileName.substring(fileName.lastIndexOf("/") + 1,fileName.length);

	info = navigator.appVersion.toUpperCase(); /* ＯＳ情報取得 */
	if(info.indexOf("WIN",0) != -1){
		/* Windowsの場合 */
		var fileget = fileName.substring(fileName.lastIndexOf("\\") + 1,fileName.length);
	}
	if(info.indexOf("MAC",0) != -1){
		/* Macintoshの場合 */
		var fileget = fileName.substring(fileName.lastIndexOf("/") + 1,fileName.length);
	}
	return(fileget);

}

