﻿
/**************************************************************** 
* 機　能： 入力された値が日付をYYYY/MM/DD形式に変換 
* 引　数： InYmd　入力された値 
* 戻り値： YYYY/MM/DD形式の文字列
****************************************************************/
function DataConv(InYmd) {
    var vYear
    var vMonth
    var vDay
    var time = new Date()
    var i
    var vTmp = InYmd

    //エラーチェック
    vTmp = vTmp.replace('/', '')
    vTmp = vTmp.replace('/', '')
    if (isNaN(vTmp)) {
        //数値以外が入力されている。
        return ''
    }

    if (ckDate(InYmd)) {
        //標準の記述方法の場合
        return InYmd
    } else {
        if (InYmd.indexOf('/') != -1) {
            ///で区切られている場合
            var vAry = InYmd.split('/')
            switch (vAry.length) {
                case 2: //m/d
                    vYear = time.getYear()
                    vMonth = vAry[0]
                    vDay = vAry[1]

                    //YYYY/MM/DD形式の文字列作成
                    InYmd = vYear + '/' + PadLeft(vMonth, 2, '0') + '/' + PadLeft(vDay, 2, '0')

                    if (ckDate(InYmd)) {
                        //標準の記述方法の場合
                        return InYmd
                    } else {
                        //ERROR
                        break
                    }

                case 3: //y/mm/dd
                    //vYear = '2'+PadLeft(vAry[0],3,'0')
                    if (parseInt(vAry[0]) >= 1000) {
                        vYear = parseInt(vAry[0])
                    } else {
                        vYear = 2000 + parseInt(vAry[0])
                    }
                    vMonth = vAry[1]
                    vDay = vAry[2]
                    //YYYY/MM/DD形式の文字列作成
                    InYmd = vYear + '/' + PadLeft(vMonth, 2, '0') + '/' + PadLeft(vDay, 2, '0')
                    if (ckDate(InYmd)) {
                        //標準の記述方法の場合
                        return InYmd
                    } else {
                        //ERROR
                        break
                    }

                default:
                    break
            }
        }

        InYmd = InYmd.replace('/', '')
        InYmd = InYmd.replace('/', '')

        switch (InYmd.length) {
            case 8: //YYYYMMDD
                vYear = InYmd.substr(0, 4);
                vMonth = InYmd.substr(4, 2);
                vDay = InYmd.substr(6, 2);
                break

            case 7: //YYYYMMD or YYYYMDD
                vYear = InYmd.substr(0, 4)
                vMonth = InYmd.substr(4, 2)
                vDay = InYmd.substr(6, 2)

                if (1 <= vMonth && vMonth <= 12) {
                    //月が正しい場合
                } else {
                    vMonth = InYmd.substr(4, 1)
                    if (1 <= vMonth && vMonth <= 9) {
                        //月が正しい場合
                        vDay = InYmd.substr(5, 2)
                    } else {
                        //ERROR
                        return ''
                    }
                }
                break

            case 6: //YYYYMD
                vYear = InYmd.substr(0, 4)
                vMonth = InYmd.substr(4, 1)
                vDay = InYmd.substr(5, 1)
                break

            case 2: //MD or DD
                vYear = time.getYear()
                vMonth = time.getMonth() + 1
                vDay = InYmd.substr(0, 2)

                //まずは、DDとして判定する。
                //YYYY/MM/DD形式の文字列作成
                InYmd = vYear + '/' + PadLeft(vMonth, 2, '0') + '/' + PadLeft(vDay, 2, '0')

                if (ckDate(InYmd)) {
                    //標準の記述方法の場合
                    break
                } else {
                    //MDとして判定
                    vYear = time.getYear()
                    vMonth = InYmd.substr(0, 1)
                    vDay = InYmd.substr(1, 1)
                    break
                }

            case 1: //D
                vYear = time.getYear()
                vMonth = time.getMonth() + 1
                vDay = InYmd.substr(0, 1)
                break

            default: //MMDD or MD
                vYear = time.getYear()
                vMonth = InYmd.substr(0, 2)
                vDay = InYmd.substr(2, 2)

                if (1 <= vMonth && vMonth <= 12) {
                    //月が正しい場合
                } else {
                    vMonth = InYmd.substr(0, 1)
                    if (1 <= vMonth && vMonth <= 9) {
                        //月が正しい場合
                        vDay = InYmd.substr(1, 2)
                    } else {
                        //ERROR
                        return ''
                    }
                }
                break
        }

        //YYYY/MM/DD形式の文字列作成
        InYmd = vYear + '/' + PadLeft(vMonth, 2, '0') + '/' + PadLeft(vDay, 2, '0')

        if (ckDate(InYmd)) {
            //標準の記述方法の場合
            return InYmd
        } else {
            //ERROR
            return ''
        }
    }
}

/**************************************************************** 
* 機　能： 右詰めし、左側を指定の文字で埋め、指定の文字数文返す。 
* 引　数： InVal　対象データ 
*		   InWidth　返す文字数 
*		   InChr　埋める文字 
* 戻り値： 文字列 
****************************************************************/
function PadLeft(InVal, InWidth, InChr) {
    var i

    for (i = 0; i < InWidth; i++) {
        InVal = InChr + InVal
    }

    return InVal.substr(InVal.length - InWidth, InWidth)
}

/**************************************************************** 
* 機　能： 入力された値が日付でYYYY/MM/DD形式になっているか調べる 
* 引　数： datestr　入力された値 
* 戻り値： 正：true　不正：false 
****************************************************************/
function ckDate(datestr) {
    // 正規表現による書式チェック 
    if (!datestr.match(/^\d{4}\/\d{2}\/\d{2}$/)) {
        return false;
    }
    var vYear = datestr.substr(0, 4) - 0;
    var vMonth = datestr.substr(5, 2) - 1; // Javascriptは、0-11で表現 
    var vDay = datestr.substr(8, 2) - 0;
    // 月,日の妥当性チェック 
    if (vMonth >= 0 && vMonth <= 11 && vDay >= 1 && vDay <= 31) {
        var vDt = new Date(vYear, vMonth, vDay);
        if (isNaN(vDt)) {
            return false;
        } else if (vDt.getFullYear() == vYear && vDt.getMonth() == vMonth && vDt.getDate() == vDay) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

/****************************************************************
* 機　能： 入力された値を#,##0形式に変換
* 引　数： x　入力された値
* 戻り値： #,##0形式の文字列
****************************************************************/
function NumericConv(x) { // 引数の例としては 95839285734.3245
    var s = '' + x; // 確実に文字列型に変換する。例では '95839285734.3245'
    s = s.replace(/,/g, '');
    var p = s.indexOf('.'); // 小数点の位置を0オリジンで求める。例では 11
    if (p < 0) { // 小数点が見つからなかった時
        p = s.length; // 仮想的な小数点の位置とする
    }
    var r = s.substring(p, s.length); // 小数点の桁と小数点より右側の文字列。例では '.3245'
    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; // 例では "95,839,285,734.3245"
}




function Utizei(InKingaku, InZei) {
    var s = '' + InKingaku; // 文字列型に変換
    var i = InZei - 0;      // 数値型に変換

    s = s.replace(/,/g, "");

    s -= 0;                 // 数値型に変換

    return Math.floor(s / (1 + (i / 100)));
}

function Sotozei(InKingaku, InZei) {
    var s = '' + InKingaku; // 文字列型に変換
    var i = InZei - 0;      // 数値型に変換

    s = s.replace(/,/g, "");

    s -= 0;                 // 数値型に変換

    return Math.floor(s * (1 + (i / 100)));
}

function jSyouhizei(InKomi, InNuki) {
    InKomi = '' + InKomi; // 文字列型に変換
    InNuki = '' + InNuki; // 文字列型に変換

    InKomi = InKomi.replace(/,/g, "");
    InNuki = InNuki.replace(/,/g, "");

    InKomi -= 0;                 // 数値型に変換
    InNuki -= 0;                 // 数値型に変換

    return InKomi - InNuki;


}

function Syouhizei(InKingaku, InZeiritu, InBB) {
    var s = '' + InKingaku; // 文字列型に変換
    InZeiritu = (InZeiritu - 0) / 100;      // 数値型に変換
    s = s.replace(/,/g, "");

    s -= 0; // 数値型に変換

    switch (InBB) {
        case 1:
            //四捨五入
            reValue = Math.round(Math.abs(s) * InZeiritu);
            if (s < 0) {
                reValue = reValue * -1
            }
            
            
            break

        case 2:
        //切捨て
            reValue = Math.floor(Math.abs(s) * InZeiritu);
            if (s < 0) {
                reValue = reValue * -1
            }
            break

        default:
            reValue = Math.round(Math.abs(s) * InZeiritu);
            if (s < 0) {
                reValue = reValue * -1
            }
            break

    }

    return reValue;
    
}

function cint(InValue) {
    InValue = InValue.replace(/,/g, "");

    InValue -= 0;                 // 数値型に変換

    return InValue;
}


function keta(InValue, keta) {
    var strValue = '' + InValue; // 文字列型に変換
    var intKeta = keta - 0;      // 数値型に変換

    if(InValue != ''){
        for (i = 0; i < intKeta; i++) {
            strValue = '0' + strValue;
        }
        strValue = strValue.slice(-intKeta);
        
    }else{
        strValue="";
    }
    
        return strValue;


    }





// -----------------------------------------------------------------------
// ラジオボタン name="my_radio" の値を取得
function getRadio(InName) {
    var radioGroup = InName;
    for (i = 0; i < radioGroup.length; i++) {
        if (radioGroup[i].checked == true) {
            return radioGroup[i].value
        }
    }
}


function openBrWindow(strUrl, w, t) {
    window.opener = self.location;
    window.open(strUrl, "_blank", "screenX=0,screenY=0,top=0,left=0,width=" + w + ",height=" + t + ",toolbar=no,resizable=yes,scrollbars=yes");
}


//BackSpaceキー押下防止 
function onKeyDown(e) { 

    if (navigator.appName == "Microsoft Internet Explorer") { 

        //ALT＋←ダメ 
        if( event.keyCode == 0x25 && event.altKey == true ) { 
            //alert("ALT＋←はダメ！"); 
            return false ; 
        } 
        //テキストボックス、パスワードボックスは許す 
        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; 
            } 
        } 
        //BackSpaceダメ 
        if( event.keyCode == 8 ) { 
            //alert("BackSpaseはダメ！"); 
            return false ; 
        } 
　    } else 
　        if (navigator.appName == "Netscape") { 
　            if (e.which == 8) { 
　　            return false; 
　　        } 
    } 
} 



