/**
 * @author Nakazawa
 */

//デモ用かどうか。デモ用の場合には必ずtrueにしてください
var IS_DEMO     = false;

/*******************************************************************************
 * @brief JS用pp関数
 * @return ポップアップでメッセージを表示（要log4js）
 *******************************************************************************/
function pp(C,B){
	var A=new Log(Log.DEBUG,Log.popupLogger);
	if(B==undefined){
		A.debug("値: "+C);
	}else{
		A.debug(B+": "+C);
	}
}

/*******************************************************************************
 * @brief デモ版かどうかを判断する
 * @return デモ版：メッセージ+true
 *******************************************************************************/
function check_is_demo(){
	
	if(IS_DEMO){
		alert('デモ版のため、こちらの機能は使用できません。');
		return true;
	}
	else{
		return false;
	}

}

/*******************************************************************************
 * @brief 処理前に確認を行う
 * @param form： Submitするフォーム
 * @param value： ○○しますか？の○○の部分（通常はvalue）
 * @param name： ボタンのname属性
 *******************************************************************************/
function confirmAndSubmit(form, value, name, message){
	if(name == 'btn_delete'){
		if(check_is_demo()){return false;}
	}
	
	//引数の数を調べる
	var argLength = arguments.length;
	if(argLength == 3){
		message = value + "します。よろしいですか？";
	}
	if(confirm(message)){
		addHiddenElement(form, name);
		form.submit();
	}
}

/*******************************************************************************
 * @brief ページ移動前に確認を行う
 * @param url： 移動するurl
 * @param message： 確認メッセージ（省略化）
 *******************************************************************************/
function confirmAndMove(url, message){
	//引数の数を調べる
	var argLength = arguments.length;
	if(argLength == 1){
		message = "ページを移動します。よろしいですか？";
	}
	if(confirm(message)){
		location.href = url;
	}
}

/*******************************************************************************
 * @brief Hiddenを作る
 * @param form： 作成するフォーム
 * @param name： Hiddenの名前
 *******************************************************************************/
function addHiddenElement(form, name) { 
	var element = document.createElement('input');
	element.type = 'hidden';
	element.name = name;
	element.value = name;
	form.appendChild(element);
}

/*******************************************************************************
 * @brief テキストボックス等で、残りの文字数を表示する
 * @param in_id： テキストボックスのID
 * @param out_id： 残りの文字数を表示するdivのID
 * @param maxleng: 最大文字数（省略化）
 *******************************************************************************/
function strLengthCount(in_id, out_id, maxleng) {
	//引数の数を調べる
	var argLength = arguments.length;
	if(argLength == 2){
		maxleng = $(in_id).maxLength;
	}

	var limit;
	limit = maxleng - $F(in_id).length;
	//limit = 5 - $F(in_id).length;
	var btn_disable;
	if(limit < 0){
		$(out_id).innerHTML = "<div class='inline-error'>入力文字数制限を越えています。</div>";
		if($(in_id).className!='valerror'){
			$(in_id).className="overlength";
		}
		btn_disable = true;
	}
	else{
		$(out_id).innerHTML = "入力できる文字数は、あと" + limit + "文字です。";
		if ($(in_id).className != 'valerror') {
			$(in_id).className = "";
		}
		btn_disable = false;
	}

	//登録ボタンのみ無効化
	$("btn_update", "btn_create", "btn_confirm").each(function(ele)
	{
		if (ele != null)	{
			ele.disabled = btn_disable;
		}
	});
	
}

/*******************************************************************************
 * @brief 全てのボタンを無効化する
 *******************************************************************************/
function allButtonDisabled(){
	$$("[id^='btn_']").each(function(ele)
	{
	   ele.disable();
	});
}

/*******************************************************************************
 * @brief テキストボックスとテキストエリアのonkeyupイベントを実行する
 * （bodyのonloadに割り当て）
 *******************************************************************************/
function execOnkeyup(){
	$$("[id^='txt_']", "[id^='txa_']").each(function(ele)
	{
		if(ele.onkeyup != undefined){
			ele.onkeyup();
		}
	});
}

/*******************************************************************************
 * @brief 配列かどうかを調べる
 * true:配列
 *******************************************************************************/
function isArray(a){
  return(a.constructor===Array);
}

/**************************************************************************************************
 *
 * 入力チェック関数
 *
 *************************************************************************************************/

// 整数値のチェック
function isNumeric(num){
    if (num.match(/[^0-9]/g)) {
        return false;
    }
    return true;
}

/*******************************************************************************
 * @brief 指定された文字列が電話番号として有効かチェック
 *
 * @param arg チェック対象文字列
 * @return 有効な場合はtrue、無効な場合はfalse
 *******************************************************************************/
function is_tel(arg)
{
	if (isEmpty(arg))
	{
		return false;
	}
	if (arg.match(/^[0-9]+\-[0-9]+\-[0-9]+$/))
	{
		return true;
	}
	else
	{
		return false;
	}
} 


/*******************************************************************************
 * @brief 指定された文字列が郵便番号として有効かチェック
 *
 * @param arg チェック対象文字列
 * @return 有効な場合はtrue、無効な場合はfalse
 *******************************************************************************/
function is_zip(arg)
{  
	if (isEmpty(arg))
	{
		return false;
	}  
	if (arg.match(/^[0-9]{4}\-[0-9]{3}$/))
	{
		return true;
	}
	else
	{
		return false;
	}
} 

/*******************************************************************************
 * @brief 指定された文字列がメールアドレスとして有効かチェック
 *
 * @param arg チェック対象文字列
 * @return 有効な場合はtrue、無効な場合はfalse
 *******************************************************************************/

function is_email(arg)
{
	if (arg.match(/^([ -~]+)*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/))
	{
		return true;
	}
	else
	{
		return false;
	}
}

/*******************************************************************************
 * @brief Input type Selectに対しオプションを追加します。
 * @param slt_id：追加するInput type Selectのid属性
 * @param slt_text：追加するtext属性
 * @param slt_value：追加するvalue属性
 *******************************************************************************/
function addSelectOption(slt_id, slt_text, slt_value){
	$(slt_id).length++;
	$(slt_id).options[$(slt_id).length-1].text = slt_text;
	$(slt_id).options[$(slt_id).length-1].value = slt_value;
}

/*******************************************************************************
 * @brief Input type Selectに対しオプションを削除します。
 * @param slt_id：削除するInput type Selectのid属性
 * @param slt_value：削除するvalue属性（省略化）
 * slt_valueを省略した場合、すべてのオプション値を削除します。
 *******************************************************************************/
function delSelectOption(slt_id,slt_value){
	if(arguments.length==1){
		var i=0;
		var len=$(slt_id).length;
		while(i<len){
			$(slt_id).options[len-i-1]=null;
			i++;
		}
	}
	else{
		var i=0;
		var arr=new Array();
		var len=$(slt_id).length;
		while(i<len){
			if($(slt_id).options[i].value==slt_value){
				arr.push(i)
			}
			i++
		}
		if(arr.length>0){
			arr=arr.reverse();
			for(var i=0;i<arr.length;i++){
				$(slt_id).options[arr[i]]=null
			}
		}
	}
}

function getSelectText(slt_id){
    var selectText = '';
    var len=$(slt_id).length;
    var i=0;
    while(i<len){
        if($(slt_id).options[i].value==$(slt_id).value){
            selectText = $(slt_id).options[i].text;
        }
    i++}
    return selectText;
}
/*******************************************************************************
 * @brief 連動Selectを作成します。
 * @param url：値を取得するurl
 * @param childSelect：連動するSelect（子側）のid属性
 * @param isNeedEmpty：（先頭に空白のオプションをつけます。）
 * @param emptyText  ：（空の場合のテキストです。）
 * @param defaultValue：リスト作成後設定したい値
 *******************************************************************************/
function getChildOptions(url, childSelect, isNeedEmpty, emptyText, defaultValue){
	if(arguments.length==3){
        emptyText = '--';
        defaultValue　= '';
    }
    if(arguments.length==4)
    {
        defaultValue　= '';
        if(emptyText==""){
            emptyText = '--';
        }
    }

    if($(childSelect) == null){
		return false;
	}
	$(childSelect).disabled=true;

	if(url.indexOf("?", 0) == -1){
		url = url + "?dummyparam=" + Math.floor(Math.random()*100000+1);
	}
	else{
		url = url + "&dummyparam=" + Math.floor(Math.random()*100000+1);
	}
	var myAjax=new Ajax.Request(url,{
		method:"get",
		onSuccess:function(httpobj){
			$(childSelect).length=0;
			
			if(httpobj.responseText.length>0){
				if(isNeedEmpty){
					addSelectOption(childSelect,emptyText,"");
				}
				var json;
				var jsonobj = eval("json="+httpobj.responseText); 

				if(jsonobj.length==0){
					delSelectOption(childSelect,"");
					addSelectOption(childSelect,emptyText,"");
                    
				}
				else{
					if(jsonobj.length==1){						
						var ele=document.createElement("option");
						ele.value=jsonobj;
						ele.appendChild(document.createTextNode(jsonobj));
						ele.setAttribute("value",jsonobj);
						$(childSelect).appendChild(ele);
					}
					else{
						for(var jsonitem in jsonobj){
							var ele=document.createElement("option");
							ele.value=jsonobj[jsonitem];
							ele.appendChild(document.createTextNode(jsonobj[jsonitem]));
							ele.setAttribute("value",jsonitem);
							$(childSelect).appendChild(ele);
						}
					}
				}
				$(childSelect).disabled=false;
                if(defaultValue　!= ""){
                    $(childSelect).value = defaultValue;
                }
			}
			else{
				addSelectOption(childSelect,emptyText,"");
				$(childSelect).disabled=false;
			}
		}
	})
}

/**
 * @select連動で次の次の階層以降のセレクトボックスを空にする
 * @param commonId:共通部分のid
 * @param currentKey:今現在のkey
 * commonId + currentKeyで今現在のid属性になること
 */
function delChildOptions(commonId, currentKey){
	var delKey = currentKey + 2;
	var key;
	$$("[id^=" + commonId + "]").each(function(ele){
		key = ele.id.replace(commonId, "");
		if(key >= delKey){
			delSelectOption(ele.id);
			addSelectOption(ele.id,"－－","");
		}
	});
}

/**
 * @Sortableを使った並べ替えで、結果をhiddenに格納する
 * @param ulid:並べ替え対象のulのid
 * @param hdnid:結果を格納するhiddenのid
 */
function getSortResult(ulid, hdnid){
	var sort='';
	$$('ul#' + ulid + ' li').each(function(ele)	
	{	   
		if(sort == ''){
			sort = ele.value;
		}
		else{
			sort = sort + ',' + ele.value;
		}	
	   
	});
	$(hdnid).value = sort;	
	return true;
}

/**
 * クリック：全てチェック/全て外すリンク
 * @param true:チェック / false:外す
 * @param チェックボックスのID
 */
function doAllCheck( _state, cn ) {
	if(cn == '') cn = 'chk_';

	$$("input[id^='" + cn + "']").each(function(_obj) {
    	_obj.checked = _state;
	});
}

//パスワード作成
function MakePass(p1, p2, PassNum){
	var TempText  = '';
	var PassList  = '';
	var PassStr01 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
	var PassStr02 = 'abcdefghijklmnopqrstuvwxyz';
	var PassStr03 = '1234567890';

	while (PassList.length < PassNum){
		TempText  = PassStr01.charAt(Math.random()*PassStr01.length);
		PassList += TempText;
		PassStr01 = PassStr01.replace(TempText,"");

		if (PassList.length == PassNum) break;

		TempText  = PassStr02.charAt(Math.random()*PassStr02.length);
		PassList += TempText;
		PassStr02 = PassStr02.replace(TempText,"");

		if (PassList.length == PassNum) break;

		TempText  = PassStr03.charAt(Math.random()*PassStr03.length);
		PassList += TempText;
		PassStr03 = PassStr03.replace(TempText,"");

		if (PassList.length == PassNum) break;
	}

	$(p1).value = PassList;
	$(p2).value = PassList;
	execOnkeyup();
}

/**
 * クリック：カラーピッカー
 * 
 * @param string _id 色入力テキストボックスのID
 * @return void
 */
var _objWinColorPicker;
function doColorPicker( _id )
{
	try { _objWinColorPicker.close(); } catch(e) {}
	_objWinColorPicker = window.open( '../bas/select_color.php?ctrl=' + _id, 'cp', 'width=240,height=240,menubar=no,toolbar=no,location=no,status=no,resizable=no,scrollbars=no' );
	_objWinColorPicker.focus();
}


/**
 * クリック：配色の初期化ボタン
 * 
 * @param void
 * @return void
 */
function doResetColor()
{
	if($('cmn_is_color_0') != null){
		$('cmn_is_color_0').checked = true;
	}
	
	$('cmn_body_bgcolor').value = '';
	$('cmn_body_text'   ).value = '';
	$('cmn_body_link'  ).value = '';
	$('cmn_body_vlink'  ).value = '';
	$('cmn_body_alink'  ).value = '';
}
