function trimString(v)
{
    if (v == null)
        return null;
    else
        return v.replace(/^\s+|\s+$/g, '');
}

function validName(v)
{
    v = trimString(v);
    if (v == null || v == "")
        return false;

    if (v.length < 3)
        return false;

    return true;
}

function validEmail(v)
{
    var  at, dot;

    v = trimString(v);
    if (v == null || v == "")
        return false;

    if (v.length < 3)
        return false;

    at  = v.indexOf("@");
    dot = v.lastIndexOf(".");
    if (at < 1 || dot - at < 2)
        return false;

    return true;
}

function filterURL(v)
{
    var  proto, path;
    var  colon, dot, slash;

    v = trimString(v);
    if (v == null || v == "")
        return null;

    if (v.length < 3)
        return null;

    // check protocol
    colon = v.indexOf(":");
    if (colon >= 0)
    {
        proto = v.substring(0, colon);
        if (proto != "http" && proto != "https")
            return null;
        path = v.substring(colon + 1);
        while (path.length > 0 && path.charAt(0) == "/")
            path = path.substring(1);
    }
    else
    {
        proto = "http";
        path  = v;
    }

    // check path
    slash = path.indexOf("/");
    dot   = path.indexOf(".");
    if (dot <= 0 || (slash >= 0 && slash < dot))
        return null;

    return proto + "://" + path;
}

function validPhone(v)
{
    var  i;
    var  d;

    v = trimString(v);
    if (v == null || v == "")
        return false;

    d = 0;
    for (i = 0; i < v.length; i++)
    {
        if ("0123456789".indexOf(v.charAt(i)) >= 0)
            d++;
        else if ("+()/.- ".indexOf(v.charAt(i)) < 0)
            return false;
    }
    if (d < 7)
        return false;

    return true;
}

function validBetaKey(v)
{
    var  i;

    v = trimString(v);
    if (v == null || v == "")
        return false;

    if (v.length < 20)
        return false;

    if (v.match(/[^0-9A-Z]/))
        return false;

    return true;
}
