String.prototype.startsWith = function(match) {
    if (match.length > this.length) return false;
    return match==this.substring(0, match.length);
}
String.prototype.endsWith = function(match) {
    if (match.length > this.length) return false;
    return match==this.slice(~match.length + 1);
}
String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g, "");
}

    // 表示制御関連

    /**
     * 再描画
     *   .style.float を適用しているdivまわりで表示がおかしくなるのでこれで回避
     */
    function repaint() {
        document.body.style.visibility = "visible";
    }

    // 入力チェック関連

    function isEmpty(v) {
        return ((v==null) || (v.trim()==""));
    }
    function isAlphabetAndNumber(v) {
        return (v.match(/[^a-z|^0-9]/gi))? false: true;
    }
    /**
     * 文字数が範囲内に収まっているか
     * ※あくまで文字数をチェックする
     *   v="あいうえお"の時、v.lengthは5を返す
     */
    function lengthIsBetween(v, stt, end) {
        return ((v.length>=stt) && (v.length<=end));
    }

    // フォーム操作関連

    /**
     * ラジオボックス初期選択
     */
    function setRadioChecked(elemName, val) {
        var elems = document.getElementsByName(elemName);
        if (val==null || val=="") return;
        if (!elems) {
            // none
            return;
        } else if (!elems.length) {
            // only one
            if (elems.value==val)
                elems.checked = true;
        } else {
            // multiple
            for (var i=0; i<elems.length; i++) {
                if (elems[i].value==val) {
                    elems[i].checked = true;
                    return;
                }
            }
        }
    }
    /**
     * ラジオボックスが選択されているか
     */
    function checkedRadioExists(elemName) {
        var elems = document.getElementsByName(elemName);
        if (!elems) {
            // none
            return true;
        } else if (!elems.length) {
            // only one
            return elems.checked;
        } else {
            // multiple
            for (var i=0; i<elems.length; i++) {
                if (elems[i].checked==true)
                    return true;
            }
            return false;
        }
    }

    /**
     * チェックボックス初期選択
     */
    function setCheckboxChecked(elemName, vals) {
        var elems = document.getElementsByName(elemName);
        if (vals==null || vals=="") return;
        var arrVal = vals.split(",");
        if (!elems) {
            // none
            return;
        } else if (!elems.length) {
            // only one
            for (var i=0; i<arrVal.length; i++) {
                if (elems.value==arrVal[i]) {
                    elems.checked = true;
                    return;
                }
            }
        } else {
            for (var i=0; i<arrVal.length; i++) {
                for (var j=0; j<elems.length; j++) {
                    if (elems[j].value==arrVal[i]) {
                        elems[j].checked = true;
                        break;
                    }
                }
            }
        }
    }
    function checkAllCheckbox(elemName, b) {
        var elems = document.getElementsByName(elemName);
        if (!elems) {
            // none
            return;
        } else if (!elems.length) {
            // only one
            elems.checked = b;
        } else {
            // multiple
            for (var i=0; i<elems.length; i++)
                elems[i].checked = b;
        }
    }
    /**
     * チェックボックスが選択されているか
     */
    function checkedCheckboxExists(elemName) {
        var elems = document.getElementsByName(elemName);
        if (!elems) {
            // none
            return true;
        } else if (!elems.length) {
            // only one
            return elems.checked;
        } else {
            // multiple
            for (var i=0; i<elems.length; i++) {
                if (elems[i].checked==true)
                    return true;
            }
            return false;
        }
    }

