/* ------------------------------------------------------------
 * 入力チェック用共通 JavaScript 関数
 *
 * 関数一覧：
 *  isEmpty : 未入力チェック
 *  isAllSpace : すべて空白なら false を返す
 *  isAlpha : 半角英字チェック
 *  removeLineBreaks : 改行文字除去
 *  isNumeric : 半角数字チェック
 *  isAlphaNumeric : 半角英数字チェック
 *  isZenKana : 全角カナチェック
 *  includeHankana : 半角カナチェック
 *  isValidDate : 年月日チェック
 *  radioIsChecked : ラジオボタンが選択されているかのチェック
 *  isSelected : select が選択されているかどうかのチェック
 *  byteSize : バイト数算出
 *  byteSizeIsOK : バイト数チェック(以下)
 *  byteSizeBetween : バイト数チェック(範囲)
 *
 * @author	INTEC
 * @version	2004/01/19(Mon)
 */

/**
 * 未入力チェック
 * @param	target チェック対象
 * @return	target が null または length == 0 の場合 true
 */
function isEmpty(target){
	if(target == null || target.length == 0){
		return true;
	} else if( isAllSpace(target) ){
		return true;
	} else {
		return false;
	}
}


/**
 * null check
 * @param	target チェック対象
 * @return	すべて空白なら true を返す
 */
function isAllSpace(target) {
	for ( var i = 0; i < target.length; i++ ){
		c = target.charCodeAt(i);
		if( c != 0x0009 && c != 0x000A && c != 0x000C && c != 0x000D && c != 0x0020 ){
			return false;
		}
	}
	return true;
}
/**
 * 改行文字の除去
 * @param	target 対象文字列
 * @return	改行文字()が除去された文字列
 */
function removeLineBreaks(target){
	if(isEmpty(target)){
		return target;
	}
	return target.replace(/[\n\r]+/g, '');
}
/**
 * 半角英字チェック
 * @param	target チェック対象
 * @return	target が半角英字の場合は true, それ以外は false
 */
function isAlpha(target){
	if(isEmpty(target)){ // 空文字
		return false;
	}

	for(var idx=0 ; idx<target.length ; idx++){
		//英字チェック
		if( !(data=chkAlph.charAt(idx).match(/[a-zA-Z]/)) ){
			return false;
		}
	}
	return true;
}

/**
 * 半角数字チェック
 * @param	target チェック対象
 * @return	target が半角数字の場合は true, それ以外は false
 */
function isNumeric(target){
	if(isEmpty(target)){ // 空文字
		return false;
	}

	for(var idx=0 ; idx<target.length ; idx++){
		//数字チェック
		if( !(data=target.charAt(idx).match(/[0-9]/)) ){
			return false;
		}
	}

	/* 全角数値を許す場合は isNaN を利用する
	if( isNaN(target) ){
		return false;
	} else {
		return true;
	}
	*/

	return true;
}

/**
 * 半角英数字チェック
 * @param	target チェック対象
 * @return	target が半角英数字の場合は true, それ以外は false
 */
function isAlphaNumeric(target){
	if(isEmpty(target)){ // 空文字
		return false;
	}

	for(var idx=0 ; idx<target.length ; idx++){
		//英数字チェック
		if( !(data=target.charAt(idx).match(/[0-9a-zA-Z]/)) ){
			return false;
		}
	}
	return true;
}

/**
 * 半角記号チェック
 * @param	target チェック対象
 * @return	target に半角記号が含まれる場合 true
 */
function includeSymbols(target){
	//文字数チェック
	if(isEmpty(target)){
		return false;
	}
	for(var idx=0 ; idx<target.length ; idx++){
		//全角かなチェック
		if( !(data=target.charAt(idx).match(/[@!"#$%'=~\? _ +-.<>\[\]\(\)]/)) ){
			return false;
		}
	}
	return true;
}

/**
 * 全角カナチェック
 * @param	target チェック対象
 * @return	全角カナのみで構成されている場合は true, それ以外は false
 */
function isZenKana(target){
	//文字数チェック
	if(isEmpty(target)){
		return false;
	}

	for(var idx=0 ; idx<target.length ; idx++){
		//全角かなチェック
		if( !(data=target.charAt(idx).match(/[ァ-ヶー−、　。，．・：；？！゛゜´｀¨＾￣＿―‐／｜‘’“”（）［］｛｝「」【】＠〜]/)) ){
			return false;
		}
	}
	return true;
}	

/**
 * 半角カナチェック.
 * target に半角カナが含まれる場合、true を返す.
 * @param	target チェック対象
 * @return	半角カナが含まれる場合は true を返す.
 */
function includeHankana(target){
	//文字数チェック
	if( isEmpty(target) ){
		return false;
	}
	
	for(var idx=0; idx<target.length ; idx++){
		// 半角カナチェック
		if( data=target.charAt(idx).match(/[ｦ-ﾟ]/) ){
			return true;
		}
	}
	return false;
}

/**
 * 年月日チェック
 * @param	yyyy 年
 * @param	mm 月
 * @param	dd 日
 * @return	日付が正しい場合は true
 */
function isValidDate(syyyy,smm,sdd){
	// 各月の最終日
    var lastday = new Array( 0,31,28,31,30,31,30,31,31,30,31,30,31 );

	if( isEmpty(syyyy) || isEmpty(smm) || isEmpty(sdd) ){
		//alert("hoge"+syyyy+"/"+smm+"/"+sdd);
		return false;
	}
	if( !isNumeric(syyyy) || !isNumeric(smm) || !isNumeric(sdd) ){
		return false;
	}
	if( syyyy.length != 4 ){
		return false;
	}

	var yyyy = parseInt(syyyy);
	var mm = parseInt(smm);
	var dd = parseInt(sdd);
	if( smm.match(/0./) ){ // 02 => 2
		mm = parseInt(smm.substring(1));
		//alert("mm = "+mm);
	}
	if( sdd.match(/0./) ){ // 09 => 9
		dd = parseInt(sdd.substring(1));
		//alert("dd = "+dd);
	}

	//うるう年の2月
	//4で割り切れ、かつ100で割り切れない年はうるう年(例外：400で割り切れる年は閏年)
	if( mm == 2 && (((yyyy%4)==0 && (yyyy%100)!=0) || (yyyy%400)==0) ){
		if( 1<=dd && dd<=29 ){
			return true;
		}
	} else if( 1<=dd && dd<=lastday[mm] ){
		return true;
	}
	//alert("aiueo:"+syyyy+"/"+smm+"/"+sdd+"-"+yyyy+"/"+mm+"/"+dd);
	return false;
}

/**
 * ラジオボタンがチェックされているかをチェック
 * @param	radios チェック対象ラジオボタングループ
 * @return	チェックされていれば true, そうでなければ false
 */
function radioIsChecked(radios){
	//単一ラジオボタンチェック
	if(!radios.length){
		if(radios.checked){ //チェックされている
			return true;
		} else {
			return false;
		}
	}
	//複数ラジオボタンチェック
	for(var cnt=0 ; cnt < radios.length ; cnt++){
		if( radios[cnt].checked){ // チェックされている
			return true;
		}
	}

	//チェックされていない
	return false;
}

/**
 * select において、インデックスが1以上ならtrue, 1未満なら
 * false を返す
 * @param	sel SELECTオブジェクト(値じゃないので注意)
 * @return	選択されていれば true、そうでなければfalse
 */
function isSelected(sel){
	if( sel.selectedIndex < 1 ) return false;
	else return true;
}


/**
 * バイト数の算出
 * @param	target 計算対象
 * @return	バイト数
 */
function byteSize(target){
	var len = 0; // バイト数

	for (var idx = 0; idx < target.length; idx++) {
		var c = target.charCodeAt(idx);
		// Shift_JIS: 0x0 〜 0x80, 0xa0  , 0xa1   〜 0xdf  ,
		//			  0xfd   〜 0xff
		// Unicode  : 0x0 〜 0x80, 0xf8f0, 0xff61 〜 0xff9f, 
		//			  0xf8f1 〜 0xf8f3
		if ( (c >= 0x0 && c < 0x81) || (c == 0xf8f0) || (c >= 0xff61 && c < 0xffa0) || (c >= 0xf8f1 && c < 0xf8f4)) {
			len += 1;	//半角文字
		} else {
			len += 2;	//全角文字
		}
	}
	return len;
}

/**
 * バイト数チェック
 * 第一引数の文字列のバイト数を計算し、第二引数で与えられた
 * 数よりも小さい場合は true を返す
 * @param	target チェック対象
 * @param	size バイト数
 * @return	target のバイト数 < size なら true、それ以外は false
 */
function byteSizeIsOK(target, size){
	// 引数が空白文字列なら true
	if( target.length < 1 ) return true;

	var len = byteSize(target);
	if( len <= size ) return true;
	else return false;
}

/**
 * バイト数チェック
 * 第一引数の文字列のバイト数を計算し、第二引数で与えられた
 * 数以上、第三引数で与えられた数以下であれば true を返す
 * @param	target チェック対象
 * @param	size1 最小バイト数
 * @param	size2 最大バイト数
 * @return	size1 <= target のバイト数 <= size2 なら true
 */
function byteSizeBetween(target, size1, size2){
	// 引数が空白文字列なら true
	if( target.length < 1 && size1 == 0 ){
		return true;
	}

	var len = byteSize(target);
	if( size1 <= len && len <= size2 ) return true;
	else return false;
}

function openBrWindow(theURL,winName,features) 
{
 		window.open(theURL,winName,features);
}

function OpenWin(theURL) 
{
 		window.open(theURL);
}



// EOF
