//MUST include BasicFunction.js

// convert character Furigane type to 2byte
function convertStringTo2ByteKana(value) {
    value = hankakuToZenkaku2Byte(value);
    value = hiraganaToKatakana(value);
    return value;
}

// convert character Furigane type to 2byte
function convertStringTo2Byte(value) {
   // value = hankakuToZenkaku2Byte(value);
    return value;
}
// Same as Above
function checkZenkakuTo2ByteBlur(obj, msg) {
    checkZenkakuTo2Byte(obj, msg);
    obj.style.backgroundColor = '#FFFACD';
}

//return true if the string is Hankaku
function checkHankaku2(obj, msg) {
    str = obj.value;
    if (trimAll(str) == "") return true;
    var tmp = str.match(/[0-9a-zA-Z\+\-\/\*\,\. ]+/g);
    if (tmp != str) {
        alert(msg);
        obj.focus();
        return false;
    }
    return true;
}

//return true if the string is Zenkaku
function checkZenkaku2(obj, msg) {
    var okstr = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.,<>?/[]{}|\\\~`!\@#$%^&*()_-+=:;"\'';
    var str = obj.value;
    var err = 0;
    for (i = 0; i < str.length; i++) {
        if (okstr.indexOf(str.charAt(i)) != -1)
            err++;
    }
    if (err > 0) {
        //if message is null 
        var message = MSG_NOT_ZENKAKU;
        //if message is not null
        if (msg == null) msg = "";
        if (msg != "") message = 'には' + message;
        alert(msg + message);
        obj.focus();
        return false;
    }
    return true;
}

//return true if the string is Hankaku
function isHankakuChar(Fld) {
    var Cnt, Moji, MojiCnt, btype_ck;
    if (Fld.value == "") {
        return true;
    }
    //if(FldName!=""||FldName!=null) 
    //msg = FldName+"には"+MSG_NOT_HANKAKU;

    Moji = escape(Fld.value);
    MojiCnt = Moji.length;
    btype_ck = "A";
    for (Cnt = 0; Cnt < MojiCnt; Cnt++) {
        switch (btype_ck) {
            case "A":
                if (Moji.substr(Cnt, 2) == "%u") {
                    if (Moji.substr(Cnt, 6) >= "%uFF60" && Moji.substr(Cnt, 6) <= "%uFF9F") {
                        Cnt = Cnt + 5;
                    } else {
                        //alert(msg);
                        Fld.focus();
                        return false;
                    }
                } else {
                    if (Moji.substr(Cnt, 1) == "%") {
                        if (Moji.substr(Cnt, 3) == "%D7" || Moji.substr(Cnt, 3) == "%F7" || Moji.substr(Cnt, 3) == "%B1") {
                            //alert(msg);
                            Fld.focus();
                            return false;
                        }
                        Cnt = Cnt + 2;
                    }
                }
                break;
            case "B":
                if (("%80" <= Moji.substr(Cnt, 3) && Moji.substr(Cnt, 3) <= "%9F") || Moji.substr(Cnt, 3) == "%3F") {
                    //alert(msg);
                    Fld.focus();
                    return false;
                    Cnt = Cnt + 2;
                } else {
                    Cnt = Cnt + 2;
                }
                break;
        }
    }
    return true;
}
//return true if the string is Zenkaku
function isZenkakuChar(Fld) {
    var Cnt, Moji, MojiCnt, WorkCnt, btype_ck, Moji1;
    if (Fld.value == "") {
        return true;
    }
    //if(FldName!=""||FldName!=null) 
    //msg = FldName+"には"+MSG_NOT_ZENKAKU;
    Moji = escape(Fld.value);
    Moji1 = Fld.value;
    MojiCnt = Moji.length;
    btype_ck = "A";
    for (Cnt = 0; Cnt < MojiCnt; Cnt++) {
        switch (btype_ck) {
            case "A":
                if (Moji.substr(Cnt, 2) == "%u") {
                    if (Moji.substr(Cnt, 6) >= "%uFF60" && Moji.substr(Cnt, 6) <= "%uFF9F") {
                        //alert(msg);
                        Fld.focus();
                        return false;
                    } else {
                        Cnt = Cnt + 5;
                    }
                } else {
                    if (Moji.substr(Cnt, 3) == "%D7" || Moji.substr(Cnt, 3) == "%F7" || Moji.substr(Cnt, 3) == "%B1") {
                        Cnt = Cnt + 2;
                    } else {
                        //alert(msg);
                        Fld.focus();
                        return false;
                    }
                }
                break;
            case "B":
                if (Moji.substr(Cnt, 1) == "%") {
                    if (("%80" <= Moji.substr(Cnt, 3) && Moji.substr(Cnt, 3) <= "%9F") || ("%E0" <= Moji.substr(Cnt, 3) && Moji.substr(Cnt, 3) <= "%EA")) {
                        WorkCnt = Cnt;
                        WorkCnt = WorkCnt + 3;
                        if (Moji.substr(WorkCnt, 1) == "%") {
                            Cnt = Cnt + 5;
                        } else {
                            Cnt = Cnt + 3;
                        }
                    } else {
                        if (Moji.substr(Cnt, 3) == "%3F") {
                            if (Moji1.indexOf("?", 0) >= 0) {
                                //alert(msg);
                                Fld.focus();
                                return false;
                            } else {
                                Cnt = Cnt + 2;
                            }
                        } else {
                            //alert(msg);
                            Fld.focus();
                            return false;
                        }
                    }
                } else {
                    //alert(msg);
                    Fld.focus();
                    return false;
                }
                break;
        }
    }
    return true;
}
function checkRoman(msg) {
    msg = trimAll(msg);
    if (msg == '') return true;
    var i, msg2;
    //許容範囲を増やす場合はここで文字を増やせばよい
    var checkStr = new String(" 0123456789ｧｨｩｪｫｬｭｮｯｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜｦﾝ｡｢｣､ｰ･ﾟﾞ　０１２３４５６７８９ァィゥェォャュョッアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン。「」、ー・  ヴ　　ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ+");

    //スペースを取り除く
    msg2 = msg.replace(/ /g, "");
    if (msg2.length == 0) {
        return false;
    }

    for (i = 0; i < msg2.length; i++) {
        if (checkStr.indexOf(msg2.charAt(i), 0) == -1) {
            return false;
        }
    }
    return true;
}
function checkZenkakuKana(Fld, FldName) {
    // if( !checkZenkaku( Fld, FldName ) ) return false;
    if (!checkRoman(Fld.value)) { alert(FldName + 'に全角カタカナのみを入力してください'); return false; }
    return true;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////
function zz_hankakuToZenkaku2Byte(aaa) {
    var str = aaa;

    //検索文字列を変換するための変換文字列配列
    var Kana1 = new Array("ｶﾞ", "ｷﾞ", "ｸﾞ", "ｹﾞ", "ｺﾞ", "ｻﾞ", "ｼﾞ", "ｽﾞ", "ｾﾞ", "ｿﾞ", "ﾀﾞ", "ﾁﾞ",
		"ﾂﾞ", "ﾃﾞ", "ﾄﾞ", "ﾊﾞ", "ﾋﾞ", "ﾌﾞ", "ﾍﾞ", "ﾎﾞ", "ﾊﾟ", "ﾋﾟ", "ﾌﾟ", "ﾍﾟ", "ﾎﾟ", "ｦ", "ｧ",
		"ｨ", "ｩ", "ｪ", "ｫ", "ｬ", "ｭ", "ｮ", "ｯ", "ｰ", "ｱ", "ｲ", "ｳ", "ｴ", "ｵ", "ｶ", "ｷ", "ｸ", "ｹ",
		"ｺ", "ｻ", "ｼ", "ｽ", "ｾ", "ｿ", "ﾀ", "ﾁ", "ﾂ", "ﾃ", "ﾄ", "ﾅ", "ﾆ", "ﾇ", "ﾈ", "ﾉ", "ﾊ", "ﾋ",
		"ﾌ", "ﾍ", "ﾎ", "ﾏ", "ﾐ", "ﾑ", "ﾒ", "ﾓ", "ﾔ", "ﾕ", "ﾖ", "ﾗ", "ﾘ", "ﾙ", "ﾚ", "ﾛ", "ﾜ", "ﾝ");
    var Kana2 = new Array("ガ", "ギ", "グ", "ゲ", "ゴ", "ザ", "ジ", "ズ", "ゼ", "ゾ", "ダ", "ヂ",
		"ヅ", "デ", "ド", "バ", "ビ", "ブ", "ベ", "ボ", "パ", "ピ", "プ", "ペ", "ポ", "ヲ", "ァ",
		"ィ", "ゥ", "ェ", "ォ", "ャ", "ュ", "ョ", "ッ", "ー", "ア", "イ", "ウ", "エ", "オ", "カ",
		"キ", "ク", "ケ", "コ", "サ", "シ", "ス", "セ", "ソ", "タ", "チ", "ツ", "テ", "ト", "ナ",
		"ニ", "ヌ", "ネ", "ノ", "ハ", "ヒ", "フ", "ヘ", "ホ", "マ", "ミ", "ム", "メ", "モ", "ヤ",
		"ユ", "ヨ", "ラ", "リ", "ル", "レ", "ロ", "ワ", "ン");
    while (str.match(/[ｦ-ﾝ]/)) {                              //半角カタカナがある場合
        for (var i = 0; i < Kana1.length; i++) {            
            str = str.replace(Kana1[i], Kana2[i]);  //文字列置換
        }
    }    
    return str;
}

function hankakuToZenkaku2Byte(motoText1) {
    var motoText = zz_hankakuToZenkaku2Byte(motoText1);

    txt = " 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZｧｨｩｪｫｬｭｮｯｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜｦﾝ｡｢｣､ｰ･ﾟﾞ";
    zen = "　０１２３４５６７８９ａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺァィゥェォャュョッアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン。「」、ー・  ";
    dzenset = "　　　　　　　　　　　　　　　　　　　　　　ヴ　　ガギグゲゴザジズゼゾダヂヅデド　　　　　バビブベボ";
    hzenset = "　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　パピプペポ";
    str = "";
    for (i = 0; i < motoText.length; i++) {
        c = motoText.charAt(i);
        if (i < motoText.length - 1)
            u = motoText.charAt(i + 1);
        else u = "";
        n = txt.indexOf(c, 0);
        if (n >= 0 && u == "ﾟ") {
            cpychr = hzenset.charAt(n);
            str += cpychr;
            u = "";
        }
        else if (n >= 0 && u == "ﾞ") {
            cpychr = dzenset.charAt(n);
            str += cpychr;
            u = "";
        }
        else if ((n >= 0) && ((c != "ﾟ") && (c != "ﾞ"))) {
            c = zen.charAt(n);
            str += c;
        }
        if ((n < 0) && ((c != "ﾟ") && (c != "ﾞ")))
            str += c;
    }
    return str;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////

function hiraganaToKatakana(motoText) {
    txt = "ぁぃぅぇぉゃゅょっあいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんがぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽ";
    zen = "ァィゥェォャュョッアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ";
    str = "";
    for (i = 0; i < motoText.length; i++) {
        c = motoText.charAt(i);
        n = txt.indexOf(c, 0);
        if (n >= 0) {
            c = zen.charAt(n);
            str += c;
        }
        if (n < 0)
            str += c;
    }
    return str;
}
//
// Add Functions in here
////