/*
 * Common JavaScript
 * 
 * produced by: t.sakai
 * create date: 2000/08/24
 * How to use:  add the follows on your html file header
 * <SCRIPT LANGUAGE="JavaScript" SRC="script.js">
 * </SCRIPT>
 *
 * History:
 *   date      # version  #  update by  #  comments
 * 2000/08/24     1.00       t.sakai       created  
 *
 */

//空の配列を生成する
function makeArray(n) {
  this.length = n;
  for (var i=0; i < n; i++) { 
    this[i] = "";     
  }
  return this;
}

//戻る
function back() {
  window.history.back();
}

//削除の確認
function isDelete() {
  return confirm('削除してよろしいですか？');
}

//空かNullかどうか確認する
function isEmpty(inputStr) {
  if ( inputStr == null || inputStr == "" ) {
    return true;
  }  
  return false;
}

//空かNullかどうか確認する(メッセージ付き)
function isEmptyMsg(inputObj, itemName) {
  if ( isEmpty( inputObj.value ) ) {
    alert(itemName + "を入力してください。");
    inputObj.focus();
    return true;
  }
  return false;
}

//文字数取得
function getCharCnt(str) {
	var count = 0;
        count  = str.length;	
	return count;
}

//文字バイト数取得
function getByteLeng(str) {
	var i, count = 0;
	for(i=0; i <= str.length-1; i++) {
		if(escape(str.charAt(i)).length > 4) count++;
		count++;
	}
	return count;
}

//ラジオボタンの未チェックを確認
function isRadioChecked(radio) {
	var i = 0;
	var checked = false;
	for(i=0; i <= radio.length-1; i++) {
		if( radio[i].checked ) {
			checked = true;
		}
	}	
	return checked;
}

//ラジオボタンの未チェックを確認(メッセージ付き)
function isRadioCheckedMsg(radio, itemName) {
  if ( !isRadioChecked( radio ) ) {
    alert(itemName + "を選択してください。");
    return false;
  }
  return true;
}

//数値かどうか確認する(必ずisEmpty()と併用すること)
function isNumber(inputVal) {
  oneDecimal = false;
  inputStr = "" + inputVal;
  for ( var i = 0; i < inputStr.length; i++ ) {
    var oneChar = inputStr.charAt(i);
    if ( oneChar == 0 && oneChar == "-" ) {
      continue;
    } 
    if ( oneChar == "." && !oneDecimal ) {
      oneDecimal = true;
      continue;
    }
    if ( oneChar < "0" || oneChar > "9" ) {
      return false;
    } 
  }  
  return true;
}

//数値かどうか確認する(必ずisEmpty()と併用すること。メッセージ付き)
function isNumberMsg(inputObj, itemName) {
  if ( !isNumber( inputObj.value ) ) {
    alert(itemName + "に数値を入力してください。");
    inputObj.select();
    return false;
  }
  return true;
}

//整数かどうか確認する(必ずisEmpty()と併用すること)
function isInteger(inputVal) {
  inputStr = "" + inputVal;
  for ( var i = 0; i < inputStr.length; i++ ) {
    var oneChar = inputStr.charAt(i);
    if ( oneChar == 0 && oneChar == "-" ) {
      continue;
    } 
    if ( oneChar < "0" || oneChar > "9" ) {
      return false;
    }   
  }  
  return true;
}

//正の整数かどうか確認する(必ずisEmpty()と併用すること)
function isPosInteger(inputVal) {
  inputStr = "" + inputVal;
  for ( var i = 0; i < inputStr.length; i++ ) {
    var oneChar = inputStr.charAt(i);
    if ( oneChar < "0" || oneChar > "9" ) {
      return false;
    }    
  }  
  return true;
}

//正の整数かどうか確認する(必ずisEmpty()と併用すること。メッセージ付き)
function isPosIntegerMsg(inputObj, itemName) {
  if ( !isPosInteger( inputObj.value ) ) {
    alert(itemName + "には正の整数を入力してください。");
    inputObj.select();
    return false;
  }
  return true;
}

//数値の範囲確認する
function inRange(inputStr, min, max) {
  num = parseInt(inputStr);
  if ( num >= min && num <= max ) {
    return true;
  }  
  return false;
}

//数値の範囲確認する(メッセージ付き)
function inRangeMsg(inputStr, itemName, min, max) {
  if ( !inRange( inputStr, min, max ) ) {
    alert(itemName + "に範囲内の数値を入力してください。");
    return false;
  }
  return true;
}

/*
* 整数かどうかまたは実数の小数桁数が指定内にあるか確認する
* @return boolean
* @param inputStr ベースとなる文字列
* @param decimal 整数の場合は0, 実数の場合は指定の小数桁数
*/
function inDecimal(inputStr, decimal) {
    //実数
    if (decimal > 0) {
	dotIndex = inputStr.lastIndexOf(".");
	inputStrLeng = inputStr.length;
	decimalMargin = decimal - (inputStrLeng-dotIndex-1);
        //小数桁多い
        if (decimalMargin<0) {
            return false;
        }
    }
    //整数
    else {
        if ( inputStr.indexOf(".") > -1 ) {
            return false;
        }
    }
    return true;
}

/*
* 整数かどうかまたは実数の小数桁数が指定内にあるか確認する(メッセージ付き)
* @return boolean
* @param inputStr ベースとなる文字列
* @param itemName 入力項目名
* @param decimal 整数の場合は0, 実数の場合は指定の小数桁数
*/
function inDecimalMsg(inputStr, itemName, decimal) {
  if ( !inDecimal( inputStr, decimal ) ) {
    if (decimal>0) {
        alert(itemName + "に範囲内の小数桁を入力してください。");
    } else {
        alert(itemName + "に範囲内の整数を入力してください。");
    }
    return false;
  }
  return true;
}

//数値の複合確認する
function isValid(inputStr, itemName, min, max, decimal) {
  if ( isEmptyMsg( inputStr, itemName ) ) {
    return false;
  } else if ( !isNumberMsg( inputStr, itemName ) ) {
    return false;
  } else if ( !inRangeMsg( inputStr, itemName, min, max ) ) {
    return false;
  } else if ( !inDecimalMsg( inputStr, itemName, decimal ) ) {
    return false;
  }
  return true;
}

//日付かどうか確認する
function isDate(str) {
  if (str.length != 10) { return false }

  for (j=0; j<str.length; j++) {
    if ((j == 2) || (j == 5)) {
      if (str.charAt(j) != "/") { return false }
    } else {
      if ((str.charAt(j) < "0") || (str.charAt(j) > "9")) { return false }
    }
  }

  var month = str.charAt(0) == "0" ? parseInt(str.substring(1,2)) : parseInt(str.substring(0,2));
  var day = str.charAt(3) == "0" ? parseInt(str.substring(4,5)) : parseInt(str.substring(3,5));
  var begin = str.charAt(6) == "0" ? (str.charAt(7) == "0" ? (str.charAt(8) == "0" ? 9 : 8) : 7) : 6;
  var year = parseInt(str.substring(begin, 10));

  if (day == 0) { return false }
  if (month == 0 || month > 12) { return false }
  if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
    if (day > 31) { return false }
  } else {
    if (month == 4 || month == 6 || month == 9 || month == 11) {
      if (day > 30) { return false }
    } else {
      if (year%4 != 0) {
        if (day > 28) { return false }
      } else {
        if (day > 29) { return false }
      }
    }
  }
  return true;
}

//１０進数を１６進数に変換する
function toHex(dec) {
  hexChars = "0123456789ABCDEF";
  if ( dec > 255 ) {
    return null;
  }
  var i = dec % 16;
  var j = ( dec - i ) / 16;
  result = "0X";
  result += hexChars.charAt(j);
  result += hexChars.charAt(i);
  return result;
}

//JavaScriptでは 0 で始まる数は８進数として扱われて
//しまうので、先頭の 0 を取り除く
function stripZeros(inputStr) {
  var result = inputStr;
  while ( result.charAt(0) == "0" ) {
    result = result.substring( 1, result.length );
  }
  return result;
}

//メッセージを表示させる
function showMessage(msg) {
  alert(msg);
  return true;
}

//ステータスバーにメッセージを表示させる
function showStatus(msg) {
  window.status = msg;
  return true;
}

//クッキーのデコードされた値を返す内部の関数
function getCookieVal(offset) {
  var endstr = document.cookie.indexOf(";", offset);
  if ( endstr == -1 ) {
    endstr = document.cookie.length;
  } 
  return unescape(document.cookie.substring(offset, endstr));
}

//"name"によって指定されたクッキーの値を返す関数
function getCookie(name) {
  var arg = name + "=";
  var alen = arg.length;
  var clen = document.cookie.length;
  var i = 0;
  while ( i < clen ) {
    var j = i + alen;
    if ( document.cookie.substring(i, j) == arg ) {
      return getCookieVal(j);
    }
    i = document.cookie.indexOf("", i) + 1;
    if ( i == 0 ) break;
  }
  return null;
}

//クッキーを生成、更新する
function setCookie(name, value) {
  var argv = setCookie.arguments;
  var argc = setCookie.arguments.length;
  var expires = ( argc > 2 ) ? argv[2] : null;
  var path = ( argc > 3 ) ? argv[3] : null;
  var domain = ( argc > 4 ) ? argv[4] : null;
  var secure = ( argc > 5 ) ? argv[5] : false;
  document.cookie = name + "=" + escape(value) +
  (( expires == null ) ? "" : ("; expires=" + expires.toGMTString())) +
  (( path == null ) ? "" : ("; path=" + path)) +
  (( domain == null ) ? "" : ("; domain=" + domain)) +
  (( secure == true ) ? "; secure" : "");
}

//クッキーを削除する
function deleteCookie(name) {
  var exp = new Date();
  exp.setTime(exp.getTime() - 1);
  var cval = getCookie(name);
  if ( cval != null ) {
    document.cookie = name + "=" + cval + "; expires="
    + exp.toGMTString();
  }  
}

/*
* 部分文字列を置き換える
* @replaceString: ベースとなる文字列
* @oldPattern   : 置き換え元の部分文字列
* @newPattern   : 置き換え後の部分文字列
*/
function replaceString( replaceString, oldPattern, newPattern) {
	
  	if ( oldPattern == newPattern || oldPattern == "" ) {
		return replaceString;
	}

	var strL = "";
	var strR = replaceString;
	var result = "";
	var len = 0;
	var oldLen = oldPattern.length;
	var idx = strR.indexOf(oldPattern);
	while ( idx >= 0 ) {
		len = strR.length;
		strL = strR.substring(0,idx);
		strR = strR.substring(idx+oldLen, len+1);
 		result += strL + newPattern;
		idx = strR.indexOf(oldPattern);
	} 
	result += strR;
	return result;	
}



