/**********************************************************/
/*                                                        */
/* 共通javascript(common.js)                              */
/*                                                        */
/* @copyright Sesh                                        */
/*                                                        */
/**********************************************************/
var clickFlg = false;   // ダブルクリック用

/*--------------------------------------------------------
 * fncClickChk
 * 概　要：ダブルクリック禁止
 * 引　数：
 * 戻り値：はい: true いいえ:false
--------------------------------------------------------*/
function fncClickChk() {
    if (!clickFlg) {
        clickFlg = true;
        return true;
    } else {
        // ダブルクリック時は何もしない
        return false;
    }
}

/*--------------------------------------------------------
 * fncEditConfirm
 * 概　要：更新ボタン押下時の確認ダイアログ
 * 引　数：
 * 戻り値：はい: true いいえ:false
--------------------------------------------------------*/
function fncEditConfirm(){

    if(confirm('更新されます。よろしいですか？')){
        return true;
    }else{
        return false;
    }

}
/*--------------------------------------------------------
 * fncDelConfirm
 * 概　要：削除ボタン押下時の確認ダイアログ
 * 引　数：
 * 戻り値：はい: true いいえ:false
--------------------------------------------------------*/
function fncDelConfirm(){

    if(confirm('削除されます。よろしいですか？')){
        return true;
    }else{
        return false;
    }

}

/*--------------------------------------------------------
 * fncSendConfirm
 * 概　要：送信ボタン押下時の確認ダイアログ
 * 引　数：
 * 戻り値：はい: true いいえ:false
--------------------------------------------------------*/
function fncSendConfirm(){

    if(confirm('送信されます。よろしいですか？')){
        return true;
    }else{
        return false;
    }

}

/*--------------------------------------------------------
 * isEmpty
 * 概　要：空かどうか判断する
 * 引　数：
 * 戻り値：はい: true いいえ:false
--------------------------------------------------------*/
function isEmpty(val) {
    if ((val == undefined) || (val == "")) {
        return true;
    } else {
        return false;
    }
}

/*--------------------------------------------------------
 * fncTrim
 * 概　要：文字内の全角、半角スペースを削除
 * 引　数：対象文字列
 * 戻り値：全角、半角スペース削除後の文字列
--------------------------------------------------------*/
function fncTrim(str) {
    
    if (str == undefined || str == "") {
        return str;
    }
    
    str = str.replace(/^[ 　]+/,"");
    str = str.replace(/[ 　]+$/,"");
    
    return str;
}

/*--------------------------------------------------------
 * fncJudgeHankaku
 * 概　要：半角英数字チェック
 * 引　数：対象文字列
 * 戻り値：半角英数字の場合：true、それ以外の文字が含まれている場合：false
--------------------------------------------------------*/
function fncJudgeHankaku(String){

    if ( !/^[a-zA-Z0-9]+$/.test(String)) {
        return false;
    }

    return true;
}

/*--------------------------------------------------------
 * fncJudgeAlpha
 * 概　要：半角英字チェック
 * 引　数：対象文字列
 * 戻り値：半角英字の場合：true、それ以外の文字が含まれている場合：false
--------------------------------------------------------*/
function fncJudgeAlpha(String) {
    if ( !/^[a-zA-Z]+$/.test(String)) {
        return false;
    }

    return true;
}

/*--------------------------------------------------------
 * fncJudgeNumber
 * 概　要：半角数字チェック
 * 引　数：対象文字列
 * 戻り値：半角数字の場合：true、それ以外の文字が含まれている場合：false
--------------------------------------------------------*/
function fncJudgeNumber(String) {
    if ( !/^[0-9]+$/.test(String)) {
        return false;
    }

    return true;
}


/*--------------------------------------------------------
 * fncChkTime
 * 概　要：時間妥当性チェック関数
 * 引　数：対象文字列(hh24mi)
 * 戻り値：正しい場合：true、正しくない場合：false
--------------------------------------------------------*/
function fncChkTime(st_time) {
    str= ""+ st_time;
    blnFlag=isNaN(str);

    if (((str=="") || (blnFlag==true)) || (str.length != 4)) {
        return false;
    } else {
        THOUR = st_time.substr(0,2);
        TMIN = st_time.substr(2,2);
        if (THOUR > 23) {
            return false;
        }
        if (TMIN > 59) {
            return false;
        }
        return true;
    }
}
/*--------------------------------------------------------
 * fncChkDate
 * 概　要：日付妥当性チェック関数
 * 引　数：対象文字列(yyyymmdd)
 * 戻り値：正しい場合：true、正しくない場合：false
--------------------------------------------------------*/
function fncChkDate(hiduke) {

    str= ""+ hiduke;
    blnFlag=isNaN(str);

    if (((str=="") || (blnFlag==true)) || (str.length != 8)) {
        return false;
    } else {

        TYEAR = hiduke.substr(0,4);
        TMNT = hiduke.substr(4,2);
        TDAY = hiduke.substr(6,2);
        var monthDays = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
        year = Number(TYEAR);
        mnt = Number(TMNT) -1;

        //閏年対応
        if (mnt==1) {
            if(((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
                monthDays[1] = 29;
            }
        }

        if ((0>=TDAY) || (TDAY>monthDays[mnt]) || (0>=TMNT) || (TMNT>12)) {
            return false;
        } else return true;
    }
}
/*--------------------------------------------------------
 * fncChkDtForCal
 * 概　要：YYYY-MM-DD形式の日付チェックを行う
 * 引　数：dt: 日付
 *         name: エラーメッセージ用名称
 * 戻り値：ret: チェック結果とエラーメッセージ配列
--------------------------------------------------------*/
function fncChkDtForCal(dt, name) {
   var ret = new Array(true, "");
   if (dt == "") {
       return ret;
   }
   
   if (dt.length != 10) {
       ret = Array(false, name + "の形式が正しくありません");
   } else {
       var Y4 = dt.substr(0,4);
       var bar1 = dt.substr(4,1);
       var M2 = dt.substr(5,2);
       var bar2 = dt.substr(7,1);
       var D2 = dt.substr(8,2);
       if (bar1 != '-' || bar2 != '-') {
           ret = Array(false, name + "の形式が正しくありません");
       } else {
           if ((dt != '') && !fncChkDate(Y4+M2+D2)) {
               ret = Array(false, name + "の形式が正しくありません");
           }
       }
   }
   return ret;
 }
/*--------------------------------------------------------
 * fncGetLength
 * 概　要：文字数チェック関数
 * 引　数：対象文字列
 * 戻り値：対象文字列のバイト数
 * 備　考：全角、半角ともに、２文字とみなす
--------------------------------------------------------*/
function fncGetLength(str) {

    var i;
    var c;
    var cnt = 0;

    for (i=0; i<str.length; i++) {
        c = str.charCodeAt(i);

        cnt += 2;
    }

    return cnt;

}

/*--------------------------------------------------------
 * fncGetLength
 * 概　要：文字数チェック関数
 * 引　数：対象文字列
 * 戻り値：対象文字列のバイト数
 * 備　考：全角１文字は、２文字とみなす
--------------------------------------------------------*/
/*
function fncGetLength(str) {

    var i;
    var c;
    var cnt = 0;

    for (i=0; i<str.length; i++) {
        c = str.charCodeAt(i);

        if ( (c >= 0x0 && c < 0x81) || (c == 0xf8f0) || (c >= 0xff61 && c < 0xffa0) || (c >= 0xf8f1 && c < 0xf8f4)) {
            cnt += 1;
        } else {
            cnt += 2;
        }
    }

    return cnt;

}
*/

/*--------------------------------------------------------
 * fncChkUrl
 * 概　要：URLチェック関数
 * 引　数：対象文字列
 * 戻り値：正しい場合：true　正しくない場合：false
--------------------------------------------------------*/
function fncChkUrl(url_str){
    if (url_str.match(/(http|https):\/\/[!#-9A-~]/i)) {
        return true;
    }else{
        return false;
    }
}

/*--------------------------------------------------------
 * fncChkHostName
 * 概　要：ホスト名チェック関数
 * 引　数：対象文字列
 * 戻り値：正しい場合：true　正しくない場合：false
--------------------------------------------------------*/
function fncChkHostName(host_str) {
    if (host_str.substring(0, 1) == '-') {
        return false;
    } else if (host_str.slice(-1) == '-') {
        return false;
    } else if (!host_str.match(/[^a-z0-9|\-|\.]/)) {
        return true;
    } else {
        return false;
    }
}

/*--------------------------------------------------------
 * fncChkZenkaku
 * 概　要：全角文字が含まれているかチェックする関数
 * 引　数：対象文字列
 * 戻り値：含まれている場合：true　含まれていない場合：false
--------------------------------------------------------*/
function fncChkZenkaku(value) {
    for (var i = 0; i < value.length; ++i) {
        var c = value.charCodeAt(i);
        // 半角カタカナは不許可
        if (c < 256 || (c >= 0xff61 && c <= 0xff9f)) {
            return false;
        }
    }
    
    return true;
}

/*--------------------------------------------------------
 * fncChkKana
 * 概　要：半角カナチェック関数
 * 引　数：対象文字列
 * 戻り値：全て半角カナの場合：true　半角カナ以外が含まれている場合：false
--------------------------------------------------------*/
function fncChkKana(theForm) {
    var text = theForm;
    var ret = true;
    var flg = true;
    var str = "";

    for ( i = 0 ; i < text.length ; i++ ) {
        str = text.substring(i, i+1);
        ret = isHankaku(str);
        if (!ret && str != " "){
            flg = false;
        }
    }
    if(!flg){
        return(false);
    }else{
        return(true);
    }
}

function isHankaku(str) {
    var esc_str = escape(str);
    var ms = navigator.appVersion.indexOf("MSIE");
    var nesc = navigator.appName.lastIndexOf("Netscape");

    if(nesc >= 0){
        if ( (esc_str.indexOf('%A') == 0) ||
            (esc_str.indexOf('%B') == 0) ||
            (esc_str.indexOf('%C') == 0) ||
            (esc_str.indexOf('%D') == 0) ){
            return(true);
        }
    }else if(ms > 0){
        if((esc_str.indexOf('%uFF6') == 0) ||
            (esc_str.indexOf('%uFF7') == 0) ||
            (esc_str.indexOf('%uFF8') == 0) ||
            (esc_str.indexOf('%uFF9') == 0) ) {
            return(true);
        }
    }

    return(false);
}

/*--------------------------------------------------------
 * fnkChkDirName
 * 概　要：ディレクトリ名チェック関数
 * 引　数：対象文字列
 * 戻り値：正しい場合：true　正しくない場合：false
--------------------------------------------------------*/
function fnkChkDirName(str){

    //半角全角英数字、ハイフン、アンダーバー、カンマ以外の文字はエラー
    if (!str.match(/[^a-zA-Z0-9|\-|\_|\.]/)) {
        return true;
    } else {
        return false;
    }

}
/*--------------------------------------------------------
 * fncConfirm
 * 概　要：確認ダイアログ表示
 * 引　数：ダイアログに表示するメッセージ、submitするform名
 * 戻り値：なし
--------------------------------------------------------*/
function fncConfirm(msg,form) {
    var result;
    result = confirm(msg);
    if (result == true) {
        form.submit();
    } else {
        return (false);
    }
}

/*--------------------------------------------------------
 * fncAlert
 * 概　要：アラート表示
 * 引　数：アラートに表示するメッセージ、focusするオブジェクト名
 * 戻り値：なし
--------------------------------------------------------*/
function fncAlert(msg,obj) {
    alert(msg);
    obj.focus();
}

/*--------------------------------------------------------
 * fncMessage
 * 概　要：メッセージ表示
 * 引　数：ダイアログに表示するメッセージ、submitするform名
 * 戻り値：なし
--------------------------------------------------------*/
function fncMessageA(msg, url) {
    twindow.alert(msg);
    url.submit();
    exit;
}
/*--------------------------------------------------------
 * fncNowtime
 * 概　要：フォームへ現在時刻を入れる
 * 引　数：
 * 戻り値：なし
--------------------------------------------------------*/
function fncNowtime() {
    dt = new Date();
    y = dt.getFullYear();
    m = dt.getMonth() + 1;
    d = dt.getDate();
    h = dt.getHours();
    mi = dt.getMinutes();

    document.form_inp.s_year.value = y;
    document.form_inp.s_month.value = m;
    document.form_inp.s_day.value = d;
    document.form_inp.s_hour.value = h;
    document.form_inp.s_min.value = mi;
}
/*--------------------------------------------------------
 * fnclimit
 * 概　要：無期限として2999年12月31日23時59分
 * 引　数：
 * 戻り値：なし
--------------------------------------------------------*/
function fnclimit() {
    dt = new Date();
    y = 9999;
    m = 12;
    d = 31;
    h = 23;
    mi = 59;

    document.form_inp.e_year.value = y;
    document.form_inp.e_month.value = m;
    document.form_inp.e_day.value = d;
    document.form_inp.e_hour.value = h;
    document.form_inp.e_min.value = mi;
}
/*--------------------------------------------------------
 * Nowtime
 * 概　要：フォームへ現在時刻を入れる
 * 引　数：
 * 戻り値：なし
--------------------------------------------------------*/
function Nowtime() {
    dt = new Date();
    y = dt.getFullYear();
    m = dt.getMonth() + 1;
    d = dt.getDate();
    h = dt.getHours();
    mi = dt.getMinutes();

    document.form_inp.s_yy.value = y;
    document.form_inp.s_mm.value = m;
    document.form_inp.s_dd.value = d;
    document.form_inp.s_hh.value = h;
    document.form_inp.s_mi.value = mi;
}
/*--------------------------------------------------------
 * limittime
 * 概　要：無期限として2999年12月31日23時59分
 * 引　数：
 * 戻り値：なし
--------------------------------------------------------*/
function limittime() {
    dt = new Date();
    y = 9999;
    m = 12;
    d = 31;
    h = 23;
    mi = 59;

    document.form_inp.e_yy.value = y;
    document.form_inp.e_mm.value = m;
    document.form_inp.e_dd.value = d;
    document.form_inp.e_hh.value = h;
    document.form_inp.e_mi.value = mi;
}

/*--------------------------------------------------------
 * isArray
 * 概　要：配列かどうかを返す
 * 引　数：data: オブジェクト
 * 戻り値：ret: 配列かどうか
--------------------------------------------------------*/
function IsArray(array)
{
  return !(
    !array ||
    (!array.length || array.length == 0) ||
    typeof array !== 'object' ||
    !array.constructor ||
    array.nodeType ||
    array.item
  );
}

/**
 * チェックボックス、ラジオボタンが選択されているか
 * @param   id   要素ID
 * @return  ret  選択されているか(true:選択、false:選択されていない）
 */
function isCheck(id)
{
    // idが空の場合はfalseを返す
    if ((id == undefined) || (id == "")) {
        return false;
    }
    
    if ($("#" + id).attr("checked") == "checked") {
        // 選択されている
        return true;
    } else {
        // 選択されていない
        return false;
    }
}

// **********************************************************************************
//
//  入力チェック共通関数群
//
// **********************************************************************************

/*--------------------------------------------------------
 * isNecessary
 * 概　要：必須入力チェックを行う
 * 引　数：data: データ配列
 *         name: エラーメッセージ用名称
 * 戻り値：ret: チェック結果とエラーメッセージ配列
--------------------------------------------------------*/
function isNecessary(data, name) {
    var ret = new Array(true, '');

    if (IsArray(data)) {
        for (var i = 0; i < data.length; i++) {
            if (ret[0] && fncTrim(data[i]) == "") {
                ret = Array(false, name + "は必須入力です");
            }
        }
    } else {
        if (fncTrim(data) == "") {
            ret = Array(false, name + "は必須入力です");
        }
    }
    return ret;
}

/*--------------------------------------------------------
 * isOverflow
 * 概　要：桁あふれチェックを行う
 * 引　数：data: データ配列
 *         num: 文字数
 *         name: エラーメッセージ用名称
 * 戻り値：ret: チェック結果とエラーメッセージ配列
--------------------------------------------------------*/
function isOverflow(data, num, name) {
    var ret = new Array(true, "");

    if (IsArray(data)) {
        for (var i = 0; i < data.length; i++) {
            if (data[i] != "") {
                if (ret[0] && data[i].length > num) {
                    ret = Array(false, name + "は" + num + "文字以内で入力してください");
                }
            }
        }
    } else {
        if (data != "") {
            if (data.length > num) {
                ret = Array(false, name + "は" + num + "文字以内で入力してください");
            }
        }
    }
    return ret;
}

/*--------------------------------------------------------
 * isNecOverflow
 * 概　要：必須桁あふれチェックを行う
 * 引　数：data: データ配列
 *         num: 文字数
 *         name: エラーメッセージ用名称
 * 戻り値：ret: チェック結果とエラーメッセージ配列
--------------------------------------------------------*/
function isNecOverflow(data, num, name) {
    var ret = new Array(true, "");

    if (IsArray(data)) {
        for (var i = 0; i < data.length; i++) {
            if (ret[0] && fncTrim(data[i]) == "") {
                ret = Array(false, name + "は必須入力です");
            }
        }
        for (var i = 0; i < data.length; i++) {
            if (ret[0] && data[i].length > num) {
                ret = Array(false, name + "は" + num + "文字以内で入力してください");
            }
        }
    } else {
        if (fncTrim(data) == "") {
            ret = Array(false, name + "は必須入力です");
        }
        if (ret[0] && data.length > num) {
            ret = Array(false, name + "は" + num + "文字以内で入力してください");
        }
    }
    return ret;
}

/*--------------------------------------------------------
 * isNecOverUnderflow
 * 概　要：必須桁あふれ桁落ちチェックを行う
 * 引　数：data: データ配列
 *         min: 最小文字数
 *         max: 最大文字数
 *         name: エラーメッセージ用名称
 * 戻り値：ret: チェック結果とエラーメッセージ配列
--------------------------------------------------------*/
function isNecOverUnderflow(data, min, max, name) {
    var ret = new Array(true, "");

    if (IsArray(data)) {
        for (var i = 0; i < data.length; i++) {
            if (ret[0] && fncTrim(data[i]) == "") {
                ret = Array(false, name + "は必須入力です");
            }
        }
        for (var i = 0; i < data.length; i++) {
            if (ret[0] && ((data[i].length < min) || (data[i].length > max))) {
                ret = Array(false, name + "は" + min + "文字以上" + max + "文字以内で入力してください");
            }
        }
    } else {
        if (fncTrim(data) == "") {
            ret = Array(false, name + "は必須入力です");
        }
        if (ret[0] && ((data.length < min) || (data.length > max))) {
            ret = Array(false, name + "は" + min + "文字以上" + max + "文字以内で入力してください");
        }
    }
    return ret;
}

/*--------------------------------------------------------
 * isNecOverflowNum
 * 概　要：必須桁あふれ数値チェックを行う
 * 引　数：data: データ配列
 *         num: 文字数
 *         name: エラーメッセージ用名称
 * 戻り値：ret: チェック結果とエラーメッセージ配列
--------------------------------------------------------*/
function isNecOverflowNum(data, num, name) {
    var ret = new Array(true, "");

    if (IsArray(data)) {
        for (var i = 0; i < data.length; i++) {
            if (ret[0] && fncTrim(data[i]) == "") {
                ret = Array(false, name + "は必須入力です");
            }
        }
        for (var i = 0; i < data.length; i++) {
            if (ret[0] && !fncJudgeNumber(data[i])) {
                ret = Array(false, name + "は半角数字で入力してください");
            }
        }
        for (var i = 0; i < data.length; i++) {
            if (ret[0] && data[i].length > num) {
                ret = Array(false, name + "は" + num + "文字以内で入力してください");
            }
        }
    } else {
        if (fncTrim(data) == "") {
            ret = Array(false, name + "は必須入力です");
        }
        if (ret[0] && !fncJudgeNumber(data)) {
            ret = Array(false, name + "は半角数字で入力してください");
        }
        if (ret[0] && data.length > num) {
            ret = Array(false, name + "は" + num + "文字以内で入力してください");
        }
    }
    return ret;
}

/*--------------------------------------------------------
 * isLength
 * 概　要：文字数チェックを行う
 * 引　数：data: データ配列
 *         num: 文字数
 *         name: エラーメッセージ用名称
 * 戻り値：ret: チェック結果とエラーメッセージ配列
--------------------------------------------------------*/
function isLength(data, num, name) {
    var ret = new Array(true, "");

    if (IsArray(data)) {
        for (var i = 0; i < data.length; i++) {
            if (ret[0] && data[i].length != num) {
                ret = Array(false, name + "は" + num + "文字で入力してください");
            }
        }
    } else {
        if (data.length != num) {
            ret = Array(false, name + "は" + num + "文字で入力してください");
        }
    }
    return ret;
}


/*--------------------------------------------------------
 * isNumber
 * 概　要：半角数値チェックを行う
 * 引　数：data: データ配列
 *         name: エラーメッセージ用名称
 * 戻り値：ret: チェック結果とエラーメッセージ配列
--------------------------------------------------------*/
function isNumber(data, name) {
    var ret = new Array(true, "");

    if (IsArray(data)) {
        for (var i = 0; i < data.length; i++) {
            if (data[i] != "") {
                if (ret[0] && !fncJudgeNumber(data[i])) {
                    ret = Array(false, name + "は半角数字で入力してください");
                }
            }
        }
    } else {
        if (data != "") {
            if (!fncJudgeNumber(data)) {
                ret = Array(false, name + "は半角数字で入力してください");
            }
        }
    }
    return ret;
}

/*--------------------------------------------------------
 * isAlpha
 * 概　要：半角英字チェックを行う
 * 引　数：data: データ配列
 *         name: エラーメッセージ用名称
 * 戻り値：ret: チェック結果とエラーメッセージ配列
--------------------------------------------------------*/
function isAlpha(data, name) {
    var ret = new Array(true, "");

    if (IsArray(data)) {
        for (i = 0; i < data.length; i++) {
            if (data[i] != "") {
                if (ret[0] && !fncJudgeAlpha(data[i])) {
                    ret = Array(false, name + "は半角英字で入力してください");
                }
            }
        }
    } else {
        if (data != "") {
            if (!fncJudgeAlpha(data)) {
                ret = Array(false, name + "は半角英字で入力してください");
            }
        }
    }
    return ret;
}

/*--------------------------------------------------------
 * isAlphaNumber
 * 概　要：半角英数値チェックを行う
 * 引　数：data: データ配列
 *         name: エラーメッセージ用名称
 * 戻り値：ret: チェック結果とエラーメッセージ配列
--------------------------------------------------------*/
function isAlphaNumber(data, name) {
    var ret = new Array(true, "");

    if (IsArray(data)) {
        for (var i = 0; i < data.length; i++) {
            if (data[i] != "") {
                if (ret[0] && !fncJudgeHankaku(data[i])) {
                    ret = Array(false, name + "は半角英数字で入力してください");
                }
            }
        }
    } else {
        if (data != "") {
            if (!fncJudgeHankaku(data)) {
                ret = Array(false, name + "は半角英数字で入力してください");
            }
        }
    }
    return ret;
}

/*--------------------------------------------------------
 * isAlphaNumberHpUb
 * 概　要：半角英数値ハイフンアンダーバーチェックを行う
 * 引　数：data: データ配列
 *         name: エラーメッセージ用名称
 * 戻り値：ret: チェック結果とエラーメッセージ配列
--------------------------------------------------------*/
function isAlphaNumberHpUb(data, name) {
    var ret = new Array(true, "");

    if (IsArray(data)) {
        for (var i = 0; i < data.length; i++) {
            if (data[i] != "") {
                if (ret[0] && !/^[0-9a-zA-Z\-_]+$/.test(data[i])) {
                    ret = Array(false, name + "に使用できる文字は、半角英数字、「-」、「_」です");
                }
            }
        }
    } else {
        if (data != "") {
            if (!/^[0-9a-zA-Z\-_]+$/.test(data)) {
                ret = Array(false, name + "に使用できる文字は、半角英数字、「-」、「_」です");
            }
        }
    }
    return ret;
}

/*--------------------------------------------------------
* isZenkakuKana
* 概　要：全角カナチェックを行う
* 引　数：data: データ配列
*         name: エラーメッセージ用名称
* 戻り値：ret: チェック結果とエラーメッセージ配列
--------------------------------------------------------*/
function isZenkakuKana(data, name) {
   var ret = new Array(true, "");

   if (IsArray(data)) {
       for (i = 0; i < data.length; i++) {
           if (ret[0] && !data[i].match(/^[ァ-ヴー　]*$/)) {
               ret = Array(false, name + "は全角カナで入力してください");
           }
       }
   } else {
       if (!data.match(/^[ァ-ヴー　]*$/)) {
           ret = Array(false, name + "は全角カナで入力してください");
       }
   }
   return ret;
}

/*--------------------------------------------------------
 * isNumberLength
 * 概　要：数値チェックと文字数チェックを行う
 * 引　数：data: データ配列
 *         num: 文字数
 *         name: エラーメッセージ用名称
 * 戻り値：ret: チェック結果とエラーメッセージ配列
--------------------------------------------------------*/
function isNumberLength(data, num, name) {
    var ret = new Array(true, "");

    if (IsArray(data)) {
        for (i = 0; i < data.length; i++) {
            if (ret[0] && !fncJudgeNumber(data[i])) {
                ret = Array(false, name + "は半角数字で入力してください");
            }
        }
        for (i = 0; i < data.length; i++) {
            if (ret[0] && data[i].length != num) {
                ret = Array(false, name + "は" + num + "文字で入力してください");
            }
        }
    } else {
        if (!fncJudgeNumber(data)) {
            ret = Array(false, name + "は半角数字で入力してください");
        }
        if (ret[0] && data.length != num) {
            ret = Array(false, name + "は" + num + "文字で入力してください");
        }
    }
    return ret;
}

/*--------------------------------------------------------
 * isEqual
 * 概　要：一致チェックを行う
 * 引　数：data1: データ1
 *         data2: データ2
 *         name: エラーメッセージ用名称
 * 戻り値：ret: チェック結果とエラーメッセージ配列
--------------------------------------------------------*/
function isEqual(data1, data2, name) {
    var ret = new Array(true, "");
    if (data1 != data2) {
        ret = Array(false, name + "が一致しません");
    }
    return ret;
}

/*--------------------------------------------------------
 * isYbno
 * 概　要：郵便番号チェックを行う
 * 引　数：ybno1: 郵便番号1
 *         ybno2: 郵便番号2
 *         name: エラーメッセージ用名称
 * 戻り値：ret: チェック結果とエラーメッセージ配列
--------------------------------------------------------*/
function isYbno(ybno1, ybno2, name) {
    var ret = new Array(true, "");
    if ((ybno1 == "") || (ybno2 == "")) {
        ret = Array(false, name + "は必須入力です");
    }
    var str = ybno1 + '-' + ybno2;
    if (ret[0] &&  !str.match(/^[0-9]{3}[\\-]?[0-9]{4}$/)) {
        ret = Array(false, name + "の形式が正しくありません");
    }
    return ret;
}

/*--------------------------------------------------------
 * isTelNo
 * 概　要：電話番号チェックを行う
 * 引　数：ybno1: 電話番号
 *         num: 文字数
 *         name: エラーメッセージ用名称
 * 戻り値：ret: チェック結果とエラーメッセージ配列
--------------------------------------------------------*/
function isTelno(telno, num, name) {
    var ret = new Array(true, "");
    var str = telno.replace(/-/g, '');
    if (ret[0] && telno.length > num) {
        ret = Array(false, name + "は" + num + "文字以内で入力してください");
    }
    if (ret[0] && (!/^[0-9]+$/.test(str))) {
        ret = Array(false, name + "に使用できる文字は半角数字と「-」（半角）です");
    }
    if (ret[0] && ((str.substr(0, 1) != "0") || (str.length < 10))) {
        ret = Array(false, name + "の形式が正しくありません");
    }
    return ret;
}

/*--------------------------------------------------------
 * isTelNo3
 * 概　要：電話番号チェックを行う
 * 引　数：ybno1: 電話番号
 *         num: 文字数
 *         name: エラーメッセージ用名称
 * 戻り値：ret: チェック結果とエラーメッセージ配列
--------------------------------------------------------*/
function isTelno3(telno1, telno2, telno3, name) {
    var ret = new Array(true, "");
    if ((telno1 != "") || (telno2 != "") || (telno3 != "")) {
        if ((telno1 == "") || (telno2 == "") || (telno3 == "")) {
            ret = Array(false, name + "の形式が正しくありません");
        }
        if (ret[0] && (!/^[0-9]+$/.test(telno1) || !/^[0-9]+$/.test(telno2) || !/^[0-9]+$/.test(telno3))) {
            ret = Array(false, name + "は半角数字で入力してください");
        }
    }
    return ret;
}

/*--------------------------------------------------------
 * isEmail
 * 概　要：E-mailチェックを行う
 * 引　数：email: E-mailアドレス
 *         num: 文字数
 *         name: エラーメッセージ用名称
 * 戻り値：ret: チェック結果とエラーメッセージ配列
--------------------------------------------------------*/
function isEmail(email, num, name) {
    var ret = new Array(true, "");
    if (email != "") {
        if (ret[0] && email.length > num) {
            ret = Array(false, name + "は" + num + "文字で入力してください");
        }
        if (ret[0] && !email.match(/^[0-9,A-Z,a-z][0-9,a-z,A-Z,_,\.,-]+@[0-9,A-Z,a-z][0-9,a-z,A-Z,_,\.,-]+\..+$/i)){
            ret = Array(false, name + "の形式が正しくありません");
        }
    }
    return ret;
}

/*--------------------------------------------------------
 * isUri
 * 概　要：URIチェックを行う
 * 引　数：uri: URIアドレス
 *         num: 文字数
 *         name: エラーメッセージ用名称
 * 戻り値：ret: チェック結果とエラーメッセージ配列
--------------------------------------------------------*/
function isUri(uri, num, name) {
    var ret = new Array(true, "");
    if (uri != "") {
        if (ret[0] && uri.length > num) {
            ret = Array(false, name + "は" + num + "文字以内で入力してください");
        }
        if (ret[0] &&  !fncChkUrl(uri)) {
            ret = Array(false, name + "の形式が正しくありません");
        }
    }
    return ret;
}

/*--------------------------------------------------------
 * fncFormKeySet
 * 概　要：フォーム部品の移動をキーに割り当てる
 * 引　数：
 * 戻り値：
--------------------------------------------------------*/
function fncFormKeySet() {
    $("input[type='text'],input[type='textarea'],select").keydown(function() {
        var c = event.keyCode;
        if(c == 13) {
            event.keyCode = 9;
        }
        if(c == 27) {
            event.srcElement.blur();
        }
    });
}

/*--------------------------------------------------------
 * fncFlashError
 * 概　要：エラーオブジェクト背景色を変更する
 * 引　数：data: エラーオブジェクトID配列
 *        classNm: エラーCSSクラス
 * 戻り値：
--------------------------------------------------------*/
function fncFlashError(data, classNm) {
    $("input").removeClass(classNm);
    $("select").removeClass(classNm);
    $("textarea").removeClass(classNm);
    if (IsArray(data)) {
        for (var k = 0; k < data.length; k++) {
            var id = data[k];
            $("input[name='" + id + "']").addClass(classNm);
            $("select[name='" + id + "']").addClass(classNm);
            $("textarea[name='" + id + "']").addClass(classNm);
        }
    } else {
        return false;
    }
}

/*--------------------------------------------------------
 * fncFlashInput
 * 概　要：選択されたinputオブジェクト背景色を変更する
 * 引　数：classNm: CSSクラス
 * 戻り値：
--------------------------------------------------------*/
function fncFlashInput(classNm) {
    $("input[type='text']").focus( function() {$(this).addClass(classNm);});
    $("input[type='password']").focus( function() {$(this).addClass(classNm);});
    $("input[type='checkbox']").focus( function() {$(this).addClass(classNm);});
    $("input[type='radio']").focus( function() {$(this).addClass(classNm);});
    //$("select").focus( function() {$(this).addClass(classNm);});
    $("textarea").focus( function() {$(this).addClass(classNm);});

    $("input[type='text']").blur( function() {$(this).removeClass(classNm);});
    $("input[type='password']").blur( function() {$(this).removeClass(classNm);});
    $("input[type='checkbox']").blur( function() {$(this).removeClass(classNm);});
    $("input[type='radio']").blur( function() {$(this).removeClass(classNm);});
    //$("select").blur( function() {$(this).removeClass(classNm);});
    $("textarea").blur( function() {$(this).removeClass(classNm);});
}

/*--------------------------------------------------------
 * fncGetAdres
 * 概　要：入力された郵便番号から都道府県コードと住所を取得する
 * 引　数：
 * 戻り値：
 * 郵便番号1カラム目                 id="yb_no1"
 * 　　　　2カラム目                 id="yb_no2"
 * 郵便番号の後ろに検索失敗時用ラベル id="yb_no_err"
 * 取得した住所をセットするカラム     id="adres_1"
 * 都道府県選択セレクトボックス       id="tdfk_cd"
 * をそれぞれidを付ける
--------------------------------------------------------*/
function fncGetAdres(){
    var ybno1 = $("#yb_no1").val();
    var ybno2 = $("#yb_no2").val();
    var ybno = ybno1.concat(ybno2);

    $.ajax({
        url: $("#hdnRelPath").val() + "default/common/ajax-ybno/id/" + ybno,
        success: function(data){

            if((data == null) || (data.length == 4)){
                $("#yb_no_err").addClass("errItem");
                $("#yb_no_err").text("郵便番号が存在しません。");
            } else {
                var retdata = eval("("+data+")");

                $("#yb_no_err").removeClass("errItem");
                $("#yb_no_err").text("");
                $("#tdfk_cd").val(retdata.tdfk_cd);
                $("#adres_1").val(retdata.adres);
            }
        }
    });
    return false;
}

/*--------------------------------------------------------
 * fncWaterMark
 * 概　要：テキストボックスにウォーターマークをセットする
 * 引　数：columnId : 項目ID
 *         dspStr  : 表示文字列
 * 戻り値：
--------------------------------------------------------*/
function fncWaterMark(columnId, dspStr) {
    if($("#" + columnId).val() == "") {
        $("#" + columnId).val(dspStr);
        $("#" + columnId).css("color", "#CCCCCC");
    }
    $("#" + columnId).focus(function() {
        if($("#" + columnId).val() == dspStr) {
            $("#" + columnId).val("");
            $("#" + columnId).css("color", "#000000");
        }
    });
    $("#" + columnId).blur(function() {
        if($("#" + columnId).val() == "") {
            $("#" + columnId).val(dspStr);
            $("#" + columnId).css("color", "#CCCCCC");
        }
    });
}

/*--------------------------------------------------------
 * fncWinOpen
 * 概　要：ポップアップウインドウを開く
 * 引　数：url: ポップアップ内に表示するurl
 *        windowname: ウインドウ名
 *        width: ウインドウ横幅
 *        height: ウインドウ縦幅
 * 戻り値：
--------------------------------------------------------*/
function fncWinOpen(url, windowname, width, height){
    var features="location=no, menubar=no, status=yes, scrollbars=yes, resizable=yes, toolbar=no";
    if (width) {
        if (window.screen.width > width)
            features+=", left="+(window.screen.width-width)/2;
        else width=window.screen.width;
            features+=", width="+width;
        }
        if (height) {
            if (window.screen.height > height) {
                features+=", top="+(window.screen.height-height)/2;
            }
        else {
            height=window.screen.height;
        }
        features+=", height="+height;
    }
    var win;
    win = window.open(url,windowname,features);
    win.focus();
}

/*--------------------------------------------------------
 * getWhatDayOfWeek
 * 概　要：任意の年月の第n曜日の日付を求める関数
 * 引　数：year 年
 *         month 月
 *         number 何番目の曜日か、第1曜日なら1。第3曜日なら3
 *         dayOfWeek 求めたい曜日。0-6までの数字で曜日の日?土を指定する
 * 戻り値：日付
--------------------------------------------------------*/
function fncWhatDayOfWeek(year, month, number, dayOfWeek) {
    var firstDt = new Date(year, month - 1, 1);
    var firstDayOfWeek = firstDt.getDay();
    var day = dayOfWeek - firstDayOfWeek + 1;
    if(day <= 0) day += 7;
    var dt = new Date(year, month - 1, day);
    var msTime = dt.getTime();
    msTime += (86400000 * 7 * (number - 1));
    dt.setTime(msTime);
    return dt;
}

/*--------------------------------------------------------
 * fncHoverImage
 * 概　要：hover時に画像を入れ替える
 * 引　数：id 要素ID
 * 戻り値：なし
--------------------------------------------------------*/
function fncHoverImage(id) {
    var orgnSrc = $("#" + id).attr("src");
    if ((orgnSrc == undefined) || (orgnSrc == "")) {
        return false;
    }

    // 拡張子を分割
    var pieces = orgnSrc.split(".");
    $("#" + id).hover(
        function () {
            $(this).attr("src", pieces[0] + "_on." + pieces[1]);
        },
        function () {
            $(this).attr("src", orgnSrc);
    });
}



/**
 * 指定セレクタにdatepickerをセットする
 * @param  selecter  セレクタ
 */
function fncDatePicker(selecter)
{
    var spliter = "-";
    
    // セレクタ指定がない場合はclassを設定
    if (selecter == undefined) {
        selecter = ".datepicker";
    }
    
    $(function () {
        // datepicker初期化
        $(selecter).datepicker({
            showOn: '',  // ダブルクリック制御のため、空を設定
            closeText: '閉じる',
            currentText: '本日：yy/mm/dd',
            //dateFormat: 'yy/mm/dd (D)',
            dateFormat: 'yy' + spliter + 'mm' + spliter + 'dd',
            dayNames: ['日', '月', '火', '水', '木', '金', '土'],
            dayNamesMin: ['日', '月', '火', '水', '木', '金', '土'],
            dayNamesShort: ['日', '月', '火', '水', '木', '金', '土'],
            hideIfNoPrevNext: true,
            maxDate: '+1y',
            minDate: '-1y',
            //minDate: new Date(),
            monthNames: ['/ 01', '/ 02', '/ 03', '/ 04', '/ 05', '/ 06', '/ 07', '/ 08', '/ 09', '/ 10', '/ 11', '/ 12'],
            navigationAsDateFormat: true,
            nextText: 'yy/mm',
            numberOfMonths: 2,
            prevText: 'yy/mm',
            showButtonPanel: true,
            showMonthAfterYear: true,
            showOtherMonths: true,
            stepMonths: 2,
            showAnim: 'show'
        });
        
        
        // 省略入力時の自動フォーマット
        $(selecter).each(function() {
            
            $(this).change(function() {
                
                var ymd = $(this).val();
                var hh = ymd.split(spliter);
                var dt = new Date();
                var dty = dt.getFullYear();
                var dtm = dt.getMonth() + 1;
                
                if (String(dtm).length == 1) {
                    dtm = "0" + dtm;
                }
                
                if (hh.length == 2) {
                    // MM-DDの場合はYYYY-MM-DDに自動フォーマット
                    if(hh[0].length == 1) hh[0] = "0" + hh[0];
                    if(hh[1].length == 1) hh[1] = "0" + hh[1];
                    ymd = dt.getFullYear() + spliter + hh[0] + spliter + hh[1];
                   
                } else if (isNaN(ymd) == false) {
                    // 数値の場合は自動フォーマット
                    
                    if (ymd.length == 1) {
                        // Dの場合
                        ymd = dty + spliter + dtm + spliter + "0" + ymd;
                    } else if (ymd.length == 2) {
                        // DDの場合
                        ymd = dty + spliter + dtm + spliter + ymd;
                    } else if (ymd.length == 4) {
                        // MMDDの場合
                        ymd = dty + spliter + ymd.substr(0, 2) + spliter + ymd.substr(2, 2);
                    } else if (ymd.length == 8) {
                        // YYYYMMDDの場合
                        ymd = ymd.substr(0, 4) + spliter + ymd.substr(4, 2) + spliter + ymd.substr(6, 2);
                    }
                }
                
                // 値のセットと文字色変更
                $(this).val(ymd)
                        .css("color", "#000000");
            })
            .dblclick(function() {
                // ダブルクリック時に開く
                $(this).datepicker( "show" );
            });
        });
    });
}

/**
 * 指定セレクタにjquery.ui.tabsをセットする
 * @param  selecter  セレクタ
 */
function fncUiTabs(selecter, option)
{
    // セレクタ指定がない場合はclassを設定
    if (selecter == undefined) {
        selecter = ".tabs";
    }
    
    // タブの初期化
    var tabs = $(selecter).tabs(option);
    
    // 削除アイコンの判定
    if (option.closeIcon) {
        $(selecter + " ul:eq(0) li a").append("<img src='" + relPath + "img/close_mini.png' class='ui-tabs-close' width='10px' height='10px' alt='削除' title='削除' />")
                                .css("padding", "0.5em 0.5em 0.5em 1em");
    }

    // 削除アイコンクリック時制御の判定
    if (option.close) {
        $(selecter + " ul:eq(0) li a .ui-tabs-close").click(option.close);
    }
    
    return tabs;
}


/**
 * 指定セレクタにjquery.wdTreeをセットする
 * @param  selecter  セレクタ
 * @param  jsonList  jsonList
 * @param  option    オプション
 */
function fncWdTree(selecter, jsonList, option)
{
    var userAgent = window.navigator.userAgent.toLowerCase();
    $.browser.msie8 = $.browser.msie && /msie 8\.0/i.test(userAgent);
    $.browser.msie7 = $.browser.msie && /msie 7\.0/i.test(userAgent);
    $.browser.msie6 = !$.browser.msie8 && !$.browser.msie7 && $.browser.msie && /msie 6\.0/i.test(userAgent);
    
    // セレクタ指定がない場合はidを設定
    if (selecter == undefined) {
        selecter = "#tree";
    }
    
    // 初期値設定
    if (option == undefined) {
        option = new Array();
    }
    
    if (option.showcheck == undefined) {
        option.showcheck = true;
    }
    
    if (option.theme == undefined) {
        option.theme = 'bbit-tree-lines';
    }
    
    function load() {        
        option.data = jsonList;                  
        $("#tree").treeview(option);            
    }
    
    if( $.browser.msie6) {
        load();
    } else {
        $(document).ready(load);
    }

}

/**
 * 指定セレクタにjquery.ui.dialogをセットする
 * @param  selecter  セレクタ
 * @param  option    オプション
 */
function fncDialog(selecter, option)
{
    // セレクタ指定がない場合はclassを設定
    if (selecter == undefined) {
        selecter = ".dialog";
    }
    
    // 初期値設定
    if (option == undefined) {
        option = new Array();
    }
    
    // 幅設定
    if (option.width == undefined) {
        option.width = 405;
    }
    
    // 高さ設定
    if (option.height == undefined) {
        option.height = 560;
    }
    
    // モーダル設定
    if (option.modal == undefined) {
        option.modal = true;
    }
    var test = $(this).dialog('option');
    // ボタン設定
    if (option.buttons == undefined) {
        option.buttons = {
                '閉じる': function() {
                    $(this).dialog('close');
                }
        };
    }
    
    $(function() {
        // dialog初期化
        $(selecter).ajaxDialog(option);
    });
}

//**********************************************************************************
//
//  初期化処理
//
// **********************************************************************************
var relPath;

$(function() {
    // 相対パス定義
    relPath = $("#hdnRelPath").val();
});

