<!--
/*
'' ============================================================================================
'' 项目名称：Focus Mailing List
'' 项目版本：V1.0
'' 项目描述：
'' 文件名称：js/js_check_input.js
'' 文件描述：[JavaScript] 输入信息检测函数库
'' 公司名称：Luen Thai Holdings Limited - SD2
'' 开发人员：刘怒 Johnny LiuNu
'' 创建日期：2007-7-4 10:23:52
'' 修订日期：2007-7-5 1:37:12
'' 版权信息：Copyright (C) 2007

'' 项目升级时需读取以下生成工具的版权信息
'' 开发工具：风越ASP代码生成器 [FireAsp Creator]
'' 版 本 号：完全版 V4.0
'' 官方网站：http://www.sino8848.com

'' 模板名称：
'' 模板开发：
'' 创建日期：
'' ============================================================================================
*/

/// ---------------------------------------------------
// 检测输入字符的合法性
// 控件提示名称，控件名称, 检测方式，允许最大长度，允许为空否
function CheckInputData(strCtrlShowName, ctrlName, checkType, iMaxLen, bAllowEmpty)
{
    var strMsg = "";
    var strValue = "";    
    var cType, i;
    var allElements = document.getElementsByName(ctrlName);    
    
    for(i = 0; i < allElements.length; i++)
    {
        var ctrl = allElements[i];
        cType = ctrl.type;

        // 判断指定控件类型
        switch(cType.toLowerCase())
        {
            case "text" :
            case "password" :
            case "file" :
            case "hidden" :
            case "textarea" :
            case "button" :
            case "submit" :
            case "reset" :
                strValue = ctrl.value;
            case "checkbox" :
            case "radio" :
                if (ctrl.checked)
                {               
                    strValue = ctrl.value;
                }
                break;
            case "select-one" :
                if (ctrl.selectedIndex >= 0)
                {
                    strValue = ctrl.options[ctrl.selectedIndex].value;
                }
                break;
            case "select-multiple" :
                var s;
                for (s = 0; s < ctrl.options.length; s++)
                {
                    if (ctrl.options[s].selected)
                    {
                        strValue += ctrl.options[s].value;
                    }
                }
                break;
        }

        //检测checkbox、radio时，相同名称的一组控件，如有一个控件有内容即通过非空检验，另外判断
        if (bAllowEmpty == false && strValue.length == 0 && cType.toLowerCase() != "checkbox" && cType.toLowerCase() != "radio")
        {
            strMsg = strMsg + "不允许为空值!\n";
        }

        if (/^[\d]+$/ig.test(iMaxLen.toString()))
        {
            if (strValue.length > iMaxLen)
                strMsg = strMsg + "长度不能超过 " + iMaxLen.toString() + "个字符!\n";
        }

        // 有输入内容方判断其内容合法性
        if (checkType.length > 0 && strValue.length > 0)
        {
            var strPattern, strRegExMsg;
            strPattern = "";
            strRegExMsg = "";

            /// 注意：传入模板变量(patternStr)中的/要转换为//
            switch (checkType)
            {
                case "NoSpecialChar" :
                    strPattern = "^[a-zA-Z0-9_\\u4e00-\\u9fa5]+$";
                    strRegExMsg = "仅允许为英文、数字、下划线、汉字组成的字符串!";
                    break;
                case "OnlyWords" :
                    strPattern = "^[a-zA-Z0-9_]+$";
                    strRegExMsg = "仅允许为英文、数字及下划线组成的字符串!";
                    break;
                case "OnlyWordsBlank" :
                    strPattern = "^[a-zA-Z0-9_ ]+$";
                    strRegExMsg = "仅允许为英文、数字、下划线及半角空格组成的字符串!";
                    break;
                case "OnlyLetters" :
                    strPattern = "^[a-zA-Z]+$";
                    strRegExMsg = "仅允许为26个字母组成的字符串!";
                    break;
                case "OnlyChinese" :
                    strPattern = "^[\\u4e00-\\u9fa5]+$";
                    strRegExMsg = "仅允许为中文字符!";
                    break;
                case "OnlyInt" :
                    strPattern = "^[\\d]+$";
                    strRegExMsg = "仅允许为整数数字!";
                    break;
                case "OnlyDecimal" :
                    strPattern = "^\\d*\\.?\\d+$";
                    strRegExMsg = "仅允许为小数数字!";
                    break;
                case "OnlyDateOrTime" :
                    strPattern = "^(\\d{4}[\\-]?\\d{1,2}[\\-]?\\d{1,2})?([ ]?)(\\d{1,2}[:]?\\d{1,2}[:]?\\d{1,2})?$";
                    strRegExMsg = "日期或时间格式不正确!";
                    break;
                case "OnlyDateAndTime" :
                    strPattern = "^(\\d{4}[\\-]?\\d{1,2}[\\-]?\\d{1,2})([ ]?)(\\d{1,2}[:]?\\d{1,2}[:]?\\d{1,2})$";
                    strRegExMsg = "必须输入日期+时间两部分的完整内容";
                    break;
                case "OnlyDate" :
                    strPattern = "^(\\d{4}[\\-]?\\d{1,2}[\\-]?\\d{1,2})$";
                    strRegExMsg = "仅允许输入日期，不能输入时间部分！";
                    break;
                case "OnlyTime" :
                    strPattern = "^(\\d{1,2}[:]?\\d{1,2}[:]?\\d{1,2})$";
                    strRegExMsg = "仅允许输入时间，不能输入日期部分！";
                    break;
                case "OnlyEmail" :
                    strPattern = "^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$";
                    strRegExMsg = "Email格式不正确！";
                    break;
                case "OnlyUrl" :
                    strPattern = "^(http|https|ftp):\\/\\/[^\\r\\n\\\"' ]+(/[\\w- ./?%&=]*)?$";
                    strRegExMsg = "网址格式不正确！";
                    break;
                case "OnlyIP" :
                    strPattern = "^[\\d]{1,3}\\.[\\d]{1,3}\\.[\\d]{1,3}\\.[\\d]{1,3}$";
                    strRegExMsg = "IP格式不正确！";
                    break;
                case "OnlyIDNumber" :
                    strPattern = "^\\d{15}|\\d{18}$";
                    strRegExMsg = "身份证号码格式不正确！";
                    break;
                case "OnlyCNTel" :
                    strPattern = "^(\\d{3}|\\d{4})?[\\-]?(\\d{8}|\\d{7})$";
                    strRegExMsg = "国内电话号码格式不正确！";
                    break;
                case "OnlyCNMobile" :
                    strPattern = "^(\\d{2}|\\d{3})?[\\-]?(\\d{11})$";
                    strRegExMsg = "国内手机号码格式不正确！";
                    break;
            }

            // 正则表达式模板为空则在上面已经判断，直接引用判断结果，否则使用表达式判断
            if (strPattern.length == 0 || (strPattern.length > 0 && RegExpCheck(strPattern, strValue) == false))
            {
                strMsg = strMsg + strRegExMsg + "\n";
            }
        }

        strMsg = CheckInputDataSetCtrl(strCtrlShowName, ctrlName, strMsg);
    }

    // 检测checkbox、radio时，相同名称的一组控件，如有一个控件有内容即通过非空检验
    if (bAllowEmpty == false && strValue.length == 0 && (cType.toLowerCase() == "checkbox" || cType.toLowerCase() == "radio"))
    {
        strMsg = strMsg + "不允许为空值!\n";
        strMsg = CheckInputDataSetCtrl(strCtrlShowName, ctrlName, strMsg);
    }
        
    return strMsg;
}

// 高亮未通过检测的控件
function CheckInputDataSetCtrl(strCtrlShowName, ctrlName, strMsg)
{
    try
    {
        var allElements = document.getElementsByName(ctrlName);
        for(i = 0; i < allElements.length; i++)
        {
            var ctrl = allElements[i];
            if (strMsg.length > 0)
            {   
                strMsg = "所输入 [" + strCtrlShowName + "] 的内容有误：" + strMsg + "\n";
                ctrl.focus();
                ctrl.style.backgroundColor = "yellow";                
            }
            else
            {
                ctrl.style.backgroundColor = "white";
            }
        }
    }
    catch(e)
    {
        strMsg = "控件不具备相应属性.请修改如下代码：\n" + e.description;
    }
    return strMsg;
}
/// ---------------------------------------------------
-->
