/** ------------------------------------------------------ */
/** FAQ SYSTEM COMMON JavaScript                           */
/** ------------------------------------------------------ */

/**
 * ■エレメントの値を取得します。
 * エレメントが存在しなくてもエラーとしません。("" を返します。)
 */
function jsComGetElementValueById(id){
	var obj = document.getElementById(id);
	var value = "";
	if( obj != null ){
		value = obj.value;
	}
	return value;
}

/**
 * ■エレメントの値を設定します。
 * エレメントが存在しなくてもエラーとしません。
 */
function jsComSetElementValueById(id,value){
	var obj = document.getElementById(id);
	if( obj != null ){
		obj.value = value;
	}
}

/**
 * ■エレメントのチェック状態を取得します。
 * エレメントが存在しなくてもエラーとしません。(false を返します。)
 */
function jsComGetElementCheckedById(id){
	var obj = document.getElementById(id);
	var checkedvalue = false;
	if( obj != null ){
		value = obj.checked;
	}
	return value;
}

/**
 * ■エレメントにフォーカスを設定します。
 * エレメントが存在しなくてもエラーとしません。
 */
function jsComSetFocusById(id,value){
	var obj = document.getElementById(id);
	if( obj != null ){
		obj.focus();
	}
}

/**
 * ■カンマ区切りフォーマット
 * @param x 数値文字列
 */
function jsComFormatNumber(x) {
	if( x == null || x.length == 0 ) {
		return x;
	}
    var s = "" + x; // 確実に文字列型に変換する。
    var p = s.indexOf(".");
    if (p < 0) { // 小数点が見つからなかった時
        p = s.length; // 仮想的な小数点の位置とする
    }
    var r = s.substring(p, s.length); // 小数点の桁と小数点より右側の文字列。
    for (var i = 0; i < p; i++) { // (10 ^ i) の位について
        var c = s.substring(p - 1 - i, p - 1 - i + 1); // (10 ^ i) の位のひとつの桁の数字。例では "4", "3", "7", "5", "8", "2", "9", "3", "8", "5", "9" の順になる。
        if (c < "0" || c > "9") { // 数字以外のもの(符合など)が見つかった
            r = s.substring(0, p - i) + r; // 残りを全部付加する
            break;
        }
        if (i > 0 && i % 3 == 0) { // 3 桁ごと、ただし初回は除く
            r = "," + r; // カンマを付加する
        }
        r = c + r; // 数字を一桁追加する。
    }
    return r;
}

/** ↓↓↓↓↓社外公開対応201006↓↓↓↓↓ **/
//var INPUT_ASSIST_ENQUETE  = "今後のサポート情報作製の参考とさせていただきますので、この情報に関するご意見、ご要望がございましたらこちらへ記入して、「送信する」ボタンを押していただきますようお願いいたします。（最大200文字まで）。　 　　 　　 　";
//var INPUT_ASSIST_ENQUETE  = "今後のサポート情報作成の参考とさせていただききますので、この情報に関するご意見、ご要望がございましたらこちらへ記入して、「送信する」ボタンを押して頂きますようお願いいたします。なお、頂いたご意見、ご要望に対しての回答はいたしかねますので、ご了承ください。（最大200文字まで）";
var INPUT_ASSIST_ENQUETE  = "今後のサポート情報作成への参考のため、このQ＆Aに関するご意見 ・ ご要望がございましたら、こちらへ記入してください。(最大200文字まで)";
/** ↑↑↑↑↑社外公開対応201006↑↑↑↑↑ **/

/**
 * ■入力エリア用アシスト文字列制御（汎用）
 * @param id オブジェクトID
 * @param assistvalue アシスト文字列
 * @param color_normal 通常文字色
 * @param color_info アシスト文字色
 * @note jsSetInputAssistFunction("idText","質問文を入力してください", "#000000", "#bbbbbb" );
 */
function jsComSetInputAssistFunction( id, assistvalue, color_normal, color_info ){
	var obj = document.getElementById(id);
	
	if( obj != null ){
		if( obj.value == null || obj.value == "" || obj.value == assistvalue ) {
			obj.style.color = color_info;
			obj.value = assistvalue;
		} else {
			obj.style.color = color_normal;
		}
		obj.onfocus = function () {
			if( this.value != null && this.value == assistvalue ){
				this.value = "";
			}
			obj.style.color = color_normal;
		};
		obj.onmousedown = function () {
			if( this.value != null && this.value == assistvalue ){
				this.value = "";
			}
			obj.style.color = color_normal;
			obj.focus();
		};
		obj.onblur = function () {
			if( this.value == null || this.value == "" ){
				obj.style.color = color_info;
				obj.value = assistvalue;
			}
		};
		
		obj.ondrop = function () {
			if (obj.style.color == color_info) {
				obj.style.color = color_normal;
				obj.value = "";
			}
		}
	}
}

/**
 * ■指定されたURLを新しいウインドウを開く
 */
function jsComOpenWin( vUrl, vWinName ) {
	var win = window.open( vUrl, jsComReplace(vWinName, "-", "_") );
}

/**
 * ■置換
 */
function jsComReplace( vValue, vBefore, vAfter ){
	var vTemp = vValue;
	vTemp = vTemp.split(vBefore);
	vTemp = vTemp.join(vAfter);
	return vTemp;
}

/**
 * ■Enterキー が押された場合は true を返す。
 * Shift+Enterの場合は場合は false を返す。
 * ex:jsComIsEnter(event);"
 * @param event
 */
function jsComIsEnter(event){
    if ( event.type == 'keydown' && event.keyCode ) {
        if ( event.keyCode == '13') {
            if ( ! event.shiftKey ) {
                return true;
            } else {
                return false;
            }
        }
    }
    return false;
}

/**
 * ■オブジェクトをDisablesにする。
 * @param obj オブジェクト
 */
function jsComDisabled( obj ){
	if( obj != null ){
		obj.disabled = true;
	}
}

/**
 * ■オブジェクトをDisablesにする。
 * @param id オブジェクトID
 */
function jsComDisabledById( id ){
	jsComDisabled(document.getElementById(id));
}

var INPUT_ASSIST_SEARCH1   = "質問したい内容を文章または単語で入力し、検索ボタンを押してください。　　　　　　";
var INPUT_ASSIST_SEARCH0   = "メール　インターネット　などの単語を入力し、検索ボタンを押してください。　　　　　　";

/** ↓↓↓↓↓社外公開対応201006↓↓↓↓↓ **/
//var INPUT_ASSIST_NOSEARCH  = "FAQ番号を入力　　　　　　";
var INPUT_ASSIST_NOSEARCH  = "Q&A番号を入力　　　　　　";
/** ↑↑↑↑↑社外公開対応201006↑↑↑↑↑ **/

/**
 * ■検索文エリア用入力アシスト文字列取得
 * 完全一致/あいまいの状態を判断して返します。
 */
function jsComGetQueryAssistValueByIsConcept(){
	var obj = document.getElementById('idIsConcept');
	if( obj != null ){
		if( obj.checked ){
			return INPUT_ASSIST_SEARCH0;
		} else {
			return INPUT_ASSIST_SEARCH1;
		}
	} else {
		return INPUT_ASSIST_SEARCH1;
	}
	return INPUT_ASSIST_SEARCH1;
}

/**
 * ■検索文エリア用入力アシスト文字列か否かを返す。
 * trim（半角スペース/全角スペース）対応版
 */
function jsComIsAssistSearchValue(value){
	if( value != null ){
		if( value == INPUT_ASSIST_SEARCH0 || value == INPUT_ASSIST_SEARCH1 ){
			return true;
		}
	}
	return false;
}

/**
 * ■入力エリア用アシスト文字列制御（検索文エリア専用）
 * @param color_normal 通常文字色
 * @param color_info アシスト文字色
 */
function jsComSetInputAssistFunctionForQueryArea( color_normal, color_info ){
	var obj = document.getElementById("idQUERY");
	var assistvalue = jsComGetQueryAssistValueByIsConcept();
	
	if( obj != null ){
		if( obj.value == null || obj.value == "" || jsComIsAssistSearchValue(obj.value) ) {
			obj.style.color = color_info;
			obj.value = assistvalue;
		} else {
			obj.style.color = color_normal;
		}
		
		obj.onfocus = function () {
			if( this.value != null && jsComIsAssistSearchValue(obj.value) ){
				this.value = "";
			}
			obj.style.color = color_normal;
		};
		
		obj.onmousedown = function () {
			if( this.value != null && jsComIsAssistSearchValue(obj.value) ){
				this.value = "";
			}
			obj.style.color = color_normal;
			obj.focus();
		};
		
		obj.onblur = function () {
			if( this.value == null || this.value == "" ){
				obj.style.color = color_info;
				obj.value = assistvalue;
			}
		};
		
		obj.ondrop = function () {
			if (obj.style.color == color_info) {
				obj.style.color = color_normal;
				obj.value = "";
			}
		}
		
	}
}

/**
 * ■文字列一致検索用：語句数チェック
 * @return 語句数が６以上の場合はアラートを表示し false を返します。(コントロールフォーカス処理有り)
 *         完全一致でない場合や語句数が５未満の場合は true を返します。
 */
function jsComWordsCheck(value){
	var count = jsComGetWordsCount(value);
	//CHECK
	if( count > 5 ){
		var vMsg = "キーワードに 6 個以上の語句は指定できません。(指定数：" + count + "個）\n"
		vMsg += "5 個以下で指定してください。"
		alert(vMsg);
		var obj1 = document.getElementById("idQUERY");
		if ( obj1 != null ) {
			obj1.focus();
		}
		return false;
	}
	
	return true;
}

/**
 * ■文字列一致検索用：語句数取得
 * @param value 検索文
 * @return 区切り文字で分けられた語句数を返す。
 */
function jsComGetWordsCount(value){
	var count = -1;
	
	//CHECK
	if( value==null || value.length==0 ){
		return count;
	}
	
	//全角スペース・半角スペース
	var wordsArray = value.split(/[　| ]/);
	if( wordsArray != null && wordsArray.length > 0 ){
		count = wordsArray.length;
	}
	return count;
}

/**
 * ■オブジェクトのスタイル（display）設定値を返します。
 * @param obj オブジェクト
 * @return 設定値："block" または "none"
 */
function jsComGetStyleDisp(obj){
	if( obj != null ){
		if( obj.style.display == "none" ){
			return "none";
		} else {
			return "block";
		}
	}
	return "block";
}
/**
 * ■オブジェクトのスタイル（display）設定値を返します。
 * @param id オブジェクトID
 * @return 設定値："block" または "none"
 */
function jsComGetStyleDispById(id){
	var obj = document.getElementById(id);
	return jsComGetStyleDisp(obj);
}

/**
 * ■オブジェクトのスタイル（display）設定値の反対を返します。
 * @param obj オブジェクト
 * @return 設定値："block" または "none"
 */
function jsComGetStyleDispNext(obj){
	if( obj != null ){
		if( obj.style.display == "none" ){
			return "block";
		} else {
			return "none";
		}
	}
}
/**
 * ■オブジェクトのスタイル（display）設定値の反対を返します。
 * @param id オブジェクトID
 * @return 設定値："block" または "none"
 */
function jsComGetStyleDispNextById(id){
	var obj = document.getElementById(id);
	return jsComGetStyleDispNext(obj);
}

/**
 * ■オブジェクトのスタイル設定（display）
 * @param obj オブジェクト
 * @param dispmode block / none
 */
function jsComSetStyleDisp(obj,dispmode){
	if( obj != null ){
		obj.style.display = dispmode;
	}
}
/**
 * ■オブジェクトのスタイル設定（display）
 * @param id オブジェクトID
 * @param dispmode block / none
 */
function jsComSetStyleDispById(id,dispmode){
	var obj = document.getElementById(id);
	jsComSetStyleDisp(obj,dispmode);
}

/**
 * ■オブジェクトのclassを設定する。
 * @param obj オブジェクト
 * @param classname クラス名
 */
function jsComSetClassName( obj, classname ){
	if( obj != null ){
		obj.className = classname;
	}
}

/**
 * ■オブジェクトのclassを設定する。
 * @param id オブジェクトID
 * @param classname クラス名
 */
function jsComSetClassNameById( id, classname ){
	jsComSetClassName(document.getElementById(id), classname);
}


/**
 * ■innerHTMLの取得
 * @param obj オブジェクト
 * @return innerHTML
 */
function jsComGetInnerHTML(obj){
	if( obj != null ){
		return obj.innerHTML;
	}
	return null;
}
/**
 * ■innerHTMLの取得
 * @param id オブジェクトID
 * @return innerHTML
 */
function jsComGetInnerHTMLById(id){
	var obj = document.getElementById(id);
	return jsComGetInnerHTML(obj);
}

/**
 * ■innerHTMLの設定
 * @param obj オブジェクト
 * @value innerHTML
 */
function jsComSetInnerHTML(obj,value){
	if( obj != null ){
		obj.innerHTML = value;
	}
}
/**
 * ■innerHTMLの設定
 * @param id オブジェクトID
 * @return innerHTML
 */
function jsComSetInnerHTMLById(id,value){
	var obj = document.getElementById(id);
	jsComSetInnerHTML(obj,value);
}

/**
 * ■フォーカスの設定
 * @param obj オブジェクト
 */
function jsComSetFocus(obj){
	if( obj != null ){
		obj.focus();
	}
}
/**
 * ■フォーカスの設定
 * @param id オブジェクトID
 */
function jsComSetFocusById(id){
	var obj = document.getElementById(id);
	jsComSetFocus(obj);
}


