// 共通javascript群

// Cookieアクセス関数群
// Cookieへの書き込みを行う関数（Cookieの有効期限最大）
function setCookie(key, val, path) {
	setCookieByTime(key, val, path, 1000*60*60*24*30);
/*
	var tmp = key + "=" + escape(val) + "; ";
	tmp += "expires=Tue, 31-Dec-2030 23:59:59; ";
	if(path == null){
		path = "/";
	}
	tmp += "path=" + path + "; ";
  document.cookie = tmp;
*/
}

// 20050127 sshimoya add start
// Cookieへの書き込みを行う関数
// 引数timeで有効期限を指定する。timeは1/1000秒を単位とする数値
// pathがnullの場合はルートpathに書き込み、""空文字の場合は
// カレントpathに書き込みを行う。注意が必要。
function setCookieByTime(key, val, path, time) {
	var tmp = key + "=" + escape(val) + "; ";
	var exp = new Date();
	exp.setTime(exp.getTime()+time);
		tmp += "expires=" + exp.toGMTString() + "; ";
	if(path == ""){
		// path指定を行わない
	}else {
		if(path == null){
			path = "/";
		}
		tmp += "path=" + path + "; ";
	}
    document.cookie = tmp;
}

// 20050307 sshimoya for bug fix
function clearCookieWithPath(key, path){
		setCookieByTime(key, "dummy", path, -1000);
}

// Cookieへの書き込みを行う関数
// ブラウザ内で有効なCookieを作成する
function setCookieBrowser(key, val, path) {
	var tmp = key + "=" + escape(val) + "; ";
	if(path == null){
		path = "/";
	}
	tmp += "path=" + path + "; ";
	document.cookie = tmp;
}


// 20050127 sshimoya add end

// Cookieから指定したkeyに対応した値の読み込みを行う関数
function getCookie(key) {
  var tmp1 = " " + document.cookie + ";";
  var xx1 = 0;
	var xx2 = 0;
    var len = tmp1.length;
    while (xx1 < len) {
        xx2 = tmp1.indexOf(";", xx1);
        var tmp2 = tmp1.substring(xx1 + 1, xx2);
        xx3 = tmp2.indexOf("=");
        if (tmp2.substring(0, xx3) == key) {
            return(unescape(tmp2.substring(xx3 + 1, xx2 - xx1 - 1)));
        }
        xx1 = xx2 + 1;
    }
    return("");
}

// 20050307 sshimoya for bug fix
// Cookieの２重登録がないかチェックする。
// Cookieの中でkeyのヒットした個数を返す
function chkWCookie(key){
  var tmp1 = " " + document.cookie + ";";
  var xx1 = 0;
	var xx2 = 0;
  var len = tmp1.length;
		var hitCnt = 0;
  	while (xx1 < len) {
			xx2 = tmp1.indexOf(";", xx1);
    	var tmp2 = tmp1.substring(xx1 + 1, xx2);
    	xx3 = tmp2.indexOf("=");
    	if (tmp2.substring(0, xx3) == key) {
						hitCnt++;
//          return(unescape(tmp2.substring(xx3 + 1, xx2 - xx1 - 1)));
    	}
    	xx1 = xx2 + 1;
  }
  return(hitCnt);
	
}


// 指定したkeyのCookieから、divを区切り文字として
// 指定した値の個数を取得する
function getCookieValueNum(key, div){
	var retVal = 0;
	if(getCookie(key) && getCookie(key).length > 0){
		var cooValArray = getCookie(key).split(div);
		retVal = cooValArray.length;
	}
	return retVal;
}

// 指定したkeyのCookieから、divを区切り文字として
// 指定したindex番目の値を取得する
function getCookieValue(key, index, div){
	var retVal = null;
	if(getCookie(key) && getCookie(key).length > 0){
		var cooValArray = getCookie(key).split(div);
		if(cooValArray && index >= 0 && index < cooValArray.length){
			retVal = cooValArray[index];
		}
	}
	return retVal;
}

// 指定したkeyのCookieから、divを区切り文字として
// 指定したval値が格納されているindex値を逆引きで取得する
// valが存在しなかった場合-1を返却する
function getCookieIndex(key, val, div){
	var cooValArray = getCookie(key).split(div);
	return getArrayIndex(cooValArray, val);
}

// Cookieをクリアする関数
function clearCookie(key) {
    document.cookie = key + "=" + "xx; expires=Tue, 1-Jan-1980 00:00:00;";
}

// 指定したkeyのCookieの値の最後にdivを区切り文字としてvalを追加する
// insertCookieValueがあれば必要ない
/*
function apendCookieValue(key, val, div){
	var tmpVal = "";
	var curCooVal = getCookie(key);
	if(curCooVal != null && curCooVal != ""){
		tmpVal += curCooVal + div;
	}
	tmpVal += val;
	setCookie(key, tmpVal);
}
*/

// 指定したkeyのCookieの値にdivを区切り文字として
// indexの位置にvalを挿入する
function insertCookieValue(key, val, div, index){
	var tmpVal = "";
	var curCooVal = getCookie(key);
	var curCooValList = null;
	
	if(curCooVal != null && curCooVal != ""){
		curCooValList = curCooVal.split(div);
	}
	
	curCooValList = insertArrayVal(curCooValList, val, index);
	tmpVal = curCooValList.join(div);

	setCookie(key, tmpVal);
}

// 指定したkeyのCookieの値からdivを区切り文字として
// index配列すべての位置の値を削除する
function deleteCookieValue(key, div, indexes){
	var tmpVal = "";
	var curCooVal = getCookie(key);
	var curCooValList = null;
	if(curCooVal != null && curCooVal != ""){
		curCooValList = curCooVal.split(div);
	}
	
	curCooValList = deleteArrayVal(curCooValList, indexes);
	tmpVal = curCooValList.join(div);

	setCookie(key, tmpVal);

}

// 指定したkeyのCookieの値からdivを区切り文字として
// indexの位置の値をvalの値に置き換える
function replaceCookieValue(key, val, div, index){
	var tmpVal = "";
	var curCooVal = getCookie(key);
	var curCooValList = null;
	if(curCooVal != null && curCooVal != ""){
		curCooValList = curCooVal.split(div);
	}
	
	curCooValList[index] = val;
	tmpVal = curCooValList.join(div);

	setCookie(key, tmpVal);

}

// 指定したkeyのCookieのdivを区切り文字としてoldOrder番目の要素を
// newOrder番目に挿入して再構成したCookieを返す
function sortCookieValue(key, oldOrder, newOrder, div){
	var tmpVal = "";
	var curCooVal = getCookie(key);
	curCooValList = curCooVal.split(div);
	
	curCooValList = sortArrayVal(curCooValList, oldOrder, newOrder);
	
	tmpVal = curCooValList.join(div);
	
	setCookie(key, tmpVal);
}


// 配列操作関数群
// 第1引数の配列の、第3引数のindex番目に、第2引数の値を挿入する関数
function insertArrayVal(arr, val, index){
	// arrがnullもしくは空配列なら新しい配列を作成して値を格納する
	if(arr == null || arr.length == 0){
		arr = new Array();
//		arr.push(val);
		arr = arrayPush(arr, val);
	}else if(index >= arr.length){
	// indexの値が配列の要素数を超えている場合、最後尾に付加する
//		arr.push(val);
		arr = arrayPush(arr, val);
	}else{
	// それ以外の場合はindexの位置にvalを挿入する
		tmpList = new Array();
		var loopMax = arr.length + 1;
		for(var i = 0; i < loopMax; i++){
			if(i == index){
//				tmpList.push(val);
				tmpList = arrayPush(tmpList, val);
			}else{
//				tmpList.push(arr.shift());
				tmpList = arrayPush(tmpList, arrayShift(arr));
			}
		}
		arr = tmpList;
	}
	return arr;
}

// 指定したval値が格納されているindex値を逆引きで取得する
// valが存在しなかった場合-1を返却する。arrがnullだった場合nullを返却する
function getArrayIndex(arr, val){
	var retVal = -1;
	if( arr == null || val == null ){
		return null;
	}
	for(var i = 0; i < arr.length; i++){
		if(arr[i] == val){
			retVal = i;
			break;
		}
	}
	return retVal;
}

// 第1引数の配列の、第2引数のindex配列に入っているすべての
// indexの値を削除する関数。削除した分配列を詰める
function deleteArrayVal(arr, indexes){
	var newArray = new Array();
	if(arr == null || arr.length == 0 || indexes == null || indexes.length == 0){
		newArray = arr;
	}else{
		var hitFlg = false;
		var arrMax = arr.length;
		for (var i = 0; i < arrMax; i++){
//			var curVal = arr.shift();
			var curVal = arrayShift(arr);
			hitFlg = false;
			for(var j = 0; j < indexes.length; j++){
				if(i == indexes[j]){
					hitFlg = true;
					break;
				}
			}
			if(!hitFlg){
//				newArray.push(curVal);
				newArray = arrayPush(newArray, curVal);
			}
		}
	}
	return newArray;
}

// 配列のoldOrder番目の要素をnewOrder番目に挿入して再構成した配列を返す
function sortArrayVal(oldList, oldOrder, newOrder){
	var newList = new Array(oldList.length);
	
	newList[newOrder] = oldList[oldOrder];
	
		if(newOrder >= 0 && newOrder < oldList.length){
			var i = 0;
			var j = 0;
			for(i = 0; i < oldList.length; i++){
				if(i != oldOrder){
					if(j == newOrder){
						j++;
					}
					newList[j] = oldList[i];
					j++;
				}
			}
	
			return newList;
		}else{
			return oldList;
		}
}

// 交換法によるソート
// 引数destは配列の入れ子で[0]にソートキーの配列、
// [1]に値の配列が格納されている必要がある
function changeSortArray( dest ){
	if( dest != null && dest[0] != null && dest[1] != null ){
		var keys = dest[0];
		var vals = dest[1];
		var tmpKey;
		var tmpVal;
		for( j = keys.length - 1; j >= 0; j-- ){
			for( i = 0; i <= j - 1; i++ ){
				if( keys[i] >= keys[i+1] ){
					tmpKey = keys[i+1];
					tmpVal = vals[i+1];
					keys[i+1] = keys[i];
					vals[i+1] = vals[i];
					keys[i] = tmpKey;
					vals[i] = tmpVal;
				}
			}
		}
		dest[0] = keys;
		dest[1] = vals;
	}
	return dest;
}

// 指定されたオブジェクトの中からチェックされているもののindexの配列を返す
function getCheckedIndex(obj){
	if(!obj){
		return null;
	}
	var values = new Array();
	var index = 0;
	var boxNum = obj.length;
	if(boxNum > 1){
    	for (i = 0; i < obj.length; i++) {
          	if (obj[i].checked == true) {
				values[index] = i;
				index++;
          	}
      	}
	}else{
		if (obj.checked == true){
			values[0] = 0;
		}
	}
	return values;
}
// 指定されたオブジェクトの中からチェックされているもののvalueの配列を返す
function getCheckedValue(obj){
	if(!obj){
		return null;
	}
	var values = new Array();
	var index = 0;
	var boxNum = obj.length;
	if(boxNum > 1){
  	for (i = 0; i < obj.length; i++) {
    	if (obj[i].checked == true) {
				values[index] = obj[i].value;
				index++;
     	}
    }
	}else{
		if (obj.checked == true){
			values[index] = obj.value;
		}
	}
	return values;
}

// 指定したオブジェクトすべてのvalueが格納された配列を返す関数
function getObjectAllValue(obj){
	if(!obj){
		return null;
	}
	var values = new Array();
	var boxNum = obj.length;
	if(boxNum > 1){
	  	for (i = 0; i < obj.length; i++) {
				values[i] = obj[i].value;
	    }
	}else{
		values[0] = obj.value;
	}
	return values;
}

/*
// 同名(同id)チェックボックスの中からチェックされているものの値の配列を返す
// ネスケに対応していないので削除。getCheckedValueを使うこと
function getCheckedValueById(id){
	var valArray = new Array();
	if (document.all.item(id).length) {
		for (i = 0; i < document.all.item(id).length; i++) {
			if(document.all.item(id, i).checked){
				valArray.push(document.all.item(id, i).value);
			}
	   	}
	} else {
		if(document.all.item(id).checked){
			valArray.push(document.all.item(id).value);
		}
	}
	return valArray;
}
*/


// キーボード操作からの「戻る」と「更新」を無効化する関数
// IE のみ対応可能。NN では中途半端な対応になるので、IE のみ対応する。
// window.document.onkeydown = disableKeyFunc; で読み込むこと
function disableKeyFunc(e){ 
	if (navigator.appName == "Microsoft Internet Explorer") {
		var keycode = event.keyCode; 
				
		// Alt+←→ とCtrl+R を無効化
		if(((event.keyCode == 37 || event.keyCode == 39) && event.altKey == true) || 
		  (event.keyCode == 82 && event.ctrlKey == true)){
			return false;
		}
				
		// BackSpace の無効化
		if( keycode == 8 ){
			//テキストボックス、パスワードボックスは許す 
      for (i = 0; i < document.all.tags("INPUT").length; i++) { 
          if (document.all.tags("INPUT")(i).name == window.event.srcElement.name && 
              (document.all.tags("INPUT")(i).type == "text" || document.all.tags("INPUT")(i).type == "password") && 
               document.all.tags("INPUT")(i).readOnly == false){ 
              return true; 
          } 
      } 
      //テキストエリアは許す 
      for (i = 0; i < document.all.tags("TEXTAREA").length; i++) { 
          if (document.all.tags("TEXTAREA")(i).name == window.event.srcElement.name && 
              document.all.tags("TEXTAREA")(i).readOnly == false){ 
              return true; 
          } 
      }
				
			event.keyCode = 0;
			return false;
		}
				
		// F5 の無効化
		if( keycode == 116 ){
			event.keyCode = 0;
			return false;
		}
				
	}else{
		// NN ではF5やタブなどがすべて「e.which == 0」になってしまうので
		// 処理を行わない。何か処理を行う場合はここに記述する
//		if (e.which == 8 || e.which == 0 || e.which == 114) { 
//　		return false; 
//　　}
	}
}


// リセットボタン押下時などにに行われる処理
// 手動でリセットを行う（load時に戻すのではなくすべて消去）
// 第1引数 formObj はリセットするフォームオブジェクト
// 第2引数 exceptList はリセットを除外されるオブジェクト名の配列
function resetFormWhite(formObj, exceptList){
	if(formObj.elements){
		var elems = formObj.elements;
		for(var i = 0; i < elems.length; i++){
			var inputObj = elems[i];
			// 除外判定処理
			var exceptFlg = false;
			if(exceptList && exceptList.length > 0){
				for(var j = 0; j < exceptList.length; j++){
					if(inputObj.name == exceptList[j]){
						exceptFlg = true;
						break;
					}
				}
			}
			if(!exceptFlg){
				// reset処理。オブジェクトの種類によって処理を分岐
				switch (inputObj.type){
					case "text":
					case "password":
					case "textarea":
						inputObj.value = "";
						break;
					case "checkbox":
					case "radio":
						inputObj.checked = false;
						break;
					case "select-one":
						inputObj.selectedIndex = -1;
						break;
					default:
						// button, submit, reset, hidden
						break;
				}
			}
		}
	}
}

// 現在の時刻をyyyymmddhhmiss形式で返す関数
function getNowTime(){
	date = new Date();
	var yyyy = date.getFullYear();
	var mm = date.getMonth() + 1;
	var dd = date.getDate();
	var hh = date.getHours();
	var mi = date.getMinutes();
	var ss = date.getSeconds();
//	if (yy < 2000) { yy += 1900; }
	if (mm < 10) { mm = "0" + mm; };
	if (dd < 10) { dd = "0" + dd; };
	if (hh < 10) { hh = "0" + hh; };
	if (mi < 10) { mi = "0" + mi; };
	if (ss < 10) { ss = "0" + ss; };
	
	return yyyy.toString() + mm + dd + hh + mi + ss;

}

function arrayPush(arr, val){
	arr[arr.length] = val;
	return arr;
}

function arrayShift(arr){
	if( arr && arr.length > 0){
		var len = arr.length;
		var val = arr[0];
		for(i = 0; i < len - 1; i++){
			arr[i] = arr[i+1]
		}
		arr[arr.length - 1] = null;
	}
	return val;
}


// 文字列の両側にある空白(半角・全角対応)を削除した文字列を返す関数
function trim(strTemp)
{
	//LTRIM
	var strRet = ltrim(strTemp);
	//RTRIM
	return rtrim(strRet);

}

// 文字列の左にある空白(半角・全角対応)を削除した文字列を返す関数
function ltrim(strTemp)
{
	var nLoop = 0;
	var strReturn = strTemp;
	while (nLoop < strTemp.length)
	{
		if ((strReturn.substring(0, 1) == " ") || (strReturn.substring(0, 1) == "　"))
		{
			strReturn = strTemp.substring(nLoop + 1, strTemp.length);
		}
		else
		{
			break;
		}
		nLoop++;
	}
	return strReturn;
}


// 文字列の右にある空白(半角・全角対応)を削除した文字列を返す関数
function rtrim(strTemp)
{
	var nLoop = 0;
	var strReturn = strTemp;
	while (nLoop < strTemp.length)
	{
		if ((strReturn.substring(strReturn.length - 1, strReturn.length) == " ") || (strReturn.substring(strReturn.length - 1, strReturn.length) == "　"))
		{
			strReturn = strTemp.substring(0, strTemp.length - (nLoop + 1));
		}
		else
		{
			break;
		}
		nLoop++;
	}
	return strReturn;
}


/**
 * チェックBOXのチェックを切り替える関数
 * 20060609 sshimoya add for history mailform display
 */
function changeCheck(chkObj){
	if(chkObj){
		chkObj.checked = !chkObj.checked;
	}
}

/**
 * 指定されたIDのチェックBOXのチェックを切り替える関数
 * 20060609 sshimoya add for history mailform display
 */
function changeCheckById(chkId){
	if(chkId && document.getElementById(chkId)){
		changeCheck(document.getElementById(chkId));
	}
}

/**
 * 文字列の "&amp;" -> "&" に逆エスケープする関数
 * xmlファイルで記述した"&amp;"をHTML表示時に"&"で表現するため
 * 20060612 sshimoya add for history mailform display
 */
function ampUnEscape(str){
	str = str.replace(/\&amp;/g, "&");
	return str;
}


