/**
 * Empty check
 * @param {String} v
 */
function isEmpty(v)
{
    v = v.replace(/[ \t]+/g, ''); // トリミング
    return ((v == null) || (v.length == 0));
}

/**
 * 値が登録されているか
 *  * @param {String} v
 */
function isRequired(v)
{
    return !isEmpty(v);
}

/**
 * 数値が登録されているか
 * @param {String} v
 */
function isNumber(v)
{
    return (isEmpty(v) || (!isNaN(v) && !/^\s+$/.test(v)));
}

/**
 * 正数が登録されているか
 * @param {String} v
 */
function isPdigit(v)
{
    return (isEmpty(v) || v.match(/^[1-9][0-9]*$/));
}

/**
 * 整数が登録されているか
 * @param {String} v
 */
function isInteger(v)
{
    return (isEmpty(v) || v.match(/^[+-]?[1-9][0-9]*$/) || v == '0');
}

function isAlpha(v)
{
    return (isEmpty(v) || v.match(/^[a-zA-Z]+$/));
}

function isAlNum(v)
{
    return (isEmpty(v) || v.match(/^[a-zA-Z0-9]+$/));
}
function isAlNum2(v)
{
    return (isEmpty(v) || v.match(/^[a-zA-Z0-9\-]+$/));
}

function isEmail(v)
{
    return (isEmpty(v) || v.match(/\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/));
}

function isUri(v)
{
    return (isEmpty(v) || v.match(/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i));
}

function isHex(v)
{
    return(isEmpty(v) || v.match((/^[0-9a-fA-F]+$/)));
}

function isYmd(v)
{
    return (isEmpty(v) || v.match(/^2\d{3}\/(0?[1-9]|1[0-2])\/(0?[1-9]|[12][0-9]|3[01])$/));
}

function pattarnValidation()
{
    var errIds = Array();
    $$(".required").each(function(ele){
        if(!isRequired(ele.value)){
            errIds.push(ele.id);
        }
    });
    $$(".vali-Num").each(function(ele){
         if (!errIds.include(ele.id)) {
            if (!isNumber(ele.value)) {
                errIds.push(ele.id);
            }
        }
    });

    $$(".vali-Pdigit").each(function(ele){
        if (!errIds.include(ele.id)) {
            if (!isPdigit(ele.value)) {
                errIds.push(ele.id);
            }
        }
    });

    $$(".vali-Int").each(function(ele){
        if (!errIds.include(ele.id)) {
            if (!isInteger(ele.value)) {
                errIds.push(ele.id);
            }
        }
    });

    $$(".vali-Alpha").each(function(ele){
        if (!errIds.include(ele.id)) {
            if (!isAlpha(ele.value)) {
                errIds.push(ele.id);
            }
        }
    });

    $$(".vali-AlNum").each(function(ele){
        if (!errIds.include(ele.id)) {
            if (!isAlNum(ele.value)) {
                errIds.push(ele.id);
            }
        }
    });
    $$(".vali-AlNum2").each(function(ele){
        if (!errIds.include(ele.id)) {
            if (!isAlNum2(ele.value)) {
                errIds.push(ele.id);
            }
        }
    });

    $$(".vali-Mail").each(function(ele){
        if (!errIds.include(ele.id)) {
            if (!isEmail(ele.value)) {
                errIds.push(ele.id);
            }
        }
    });

    $$(".vali-Uri").each(function(ele){
        if (!errIds.include(ele.id)) {
            if (!isUri(ele.value)) {
                errIds.push(ele.id);
            }
        }
    });

    $$(".vali-Hex").each(function(ele){
        if (!errIds.include(ele.id)) {
            if (!isHex(ele.value)) {
                errIds.push(ele.id);
            }
        }
    });

    $$(".vali-Ymd").each(function(ele){
        if (!errIds.include(ele.id)) {
            if (!isYmd(ele.value)) {
                errIds.push(ele.id);
            }
        }
    });
    return errIds;
}

/**
 * 文字数がmin以上max以下か
 * 全角１文字を2カウント
 * @param {element} id
 * @param {Integer} min
 * @param {Integer} max
 */
function lengthValidation(id, min, max)
{
    var i, len, str;
    var rs = true;
    len = 0;
    str = escape($(id).value);
    for (i = 0; i < str.length; i++, len++) {
        if (str.charAt(i) == "%") {
            if (str.charAt(++i) == "u") {
                i += 3;
                len++;
            }
            i++;
        }
    }
    if(len < min || len > max) {
        rs = false;
    }
    return rs;
}

/**
 * 文字数がmin以上max以下か
 * 全角１文字も1カウント
 * @param {element} id
 * @param {Integer} min
 * @param {Integer} max
 * @return Boorean
 */
function mblengthValidation(id, min, max)
{
    var i, len, str;
    var rs = true;
    str = escape($(id).value);
    len = 0;
    for (i = 0; i < str.length; i++, len++) {
        if (str.charAt(i) == "%") {
            if (str.charAt(++i) == "u") {
                i += 3;
            }
            i++;
        }
    }
    if(len < min || len > max) {
        rs = false;
    }
    return rs;
}

/**
 * 数値範囲がmin,max間におさまっているか
 * @param {Object} id
 * @param {Object} min
 * @param {Object} max
 */

function numRangeValidation(id, min, max)
{
    if(!isNumber($(id).value)) {
        return false;
    }

    var val = parseFloat($(id).value);
    var rs = true;
    if(val < min || val > max) {
        rs = false;
    }
    return rs;
}

function intRangeValidation(id, min, max)
{
    if(!isInteger($(id).value)) {
        return false;
    }
    var val = $(id).value - 0;
    var rs = true;
    if(val < min || val > max) {
        rs = false;
    }
    return rs;
}
