﻿//$Id: checkForm.js,$
//新增了对form的查询条件进行自动拼装的功能getQueryString();
/**
* 检查送出的form的每个表单元素是否符合填写要求
* @fm 需要检查的form元素。
* @return 如果form的所有表单元素都符合要求，将返回true，
* 否则将会报告不符合的原因，同时返回false。
* 示例：
* <form onsubmit="return checkForm(this)">
*  	<input type=submit>
*  	<input name=email title="请填写邮件地址~email!">
* </form>
* 说明：
* 在form表单元素的title属性中指明此表单元素期望的格式。
* 此格式说明如下
*          请填写邮件地址~email!
* 以最后一个"~"为界，前面的是提示信息，后面是格式信息。
* 格式信息请遵守以下规则：
* [number[f]:][type][!]
* 说明：
* number[f]:	一个数值后面跟一个":",表示此域的文本长度不可以超过指定的数值，如果在数值后面有个f表示固定长度必须为多少位
* type可以是如下表达式
*	 email	邮件地址
*	 int		整数
*	 float	浮点数
*	 date		日期
*	 time		时间
*	 hasChinese     含有中文
*	 allChinese	全部是中文
*	 noChinese	没有中文
*	 /.../[gi]	自定义正则式
* !表示此处文本不可以为空。
* 对于<input type=radio > 格式串为
* "请选择一个选项~!"表示此radio组必须选择一个选项
* "请选择一个选项~"表示此radio组的选项可以不选。
* 对于<input type=checkbox >或者<select multiple></select>格式串的意义为
* 说明信息~min:0max:3
* 对于<select ></select>非multiple类型
* "请选择一个选项~!"表示此select不可以选择第一个选项
* "请选择一个选项~"表示此select可以选择第一个选项
*/
function killErrors() {
    return true;
}

function checkForm(fm) {
    //window.onerror = killErrors;
    //alert(fm.length);
    //return false;
    var vMsg = "";
    var k = 0;
    for (var i = 0; i < fm.length; i++) {
    
        var title = fm[i].title;
        if (title == "") continue; //忽略未定义title的元素
        var p = title.lastIndexOf("~");
        if (p < 0) continue; //忽略title中未定义检查格式的元素
        var info = title.substring(0, p);
        var format = title.substring(p + 1, title.length);
        var format1 = title.substring(p + 1, title.length);
        var format2 = title.substring(p + 1, title.length);
        var name = fm[i].name;
        if (name == "") continue; //忽略没有名字的元素
        var value = trim(fm[i].value);
        //fm[i].value=value;//自动除去送出项的两端的空格
        
        if (fm[i].type == "radio") {
            if (checkRadio(fm, fm[i])) {
                continue;
            }
            else {
                return false;
            }
        }
        if (fm[i].type == "checkbox") {
            if (checkCheckbox(fm, fm[i])) {
                continue;
            }
            else {
                return false;
            }
        }
        if (fm[i].type == "select-one") {
            if (checkSelectOne(fm[i])) {
                continue;
            }
            else {
                return false;
            }
        }
        if (fm[i].type == "select-multiple") {
            if (checkSelectMultiple(fm[i])) {
                continue;
            }
            else {
                return false;
            }
        }
        var notNull = false;
        if (format.charAt(format.length - 1) == "!") {
            notNull = true;
            format = format.substring(0, format.length - 1);
        }
        if (notNull) {
            if (value == "") {
                k = k + 1;
                vMsg += "    " + k + "." + info + "，其内容不可以为空！\n";
            }
        }
        else {
            //内容可以为空时，
            if (value == "")
                continue;
        }

        ///判断是否为int类型
        if (format2.charAt(format2.length - 1) == "!") {
            format2 = format2.substring(0, format2.length - 1);
        }
        var colonP2 = format2.indexOf(":");
        format2 = format2.substring(colonP2 + 1, format2.length);
        var colonP = format.indexOf(":");
        if (format2 != "int") {
            //内容的长度判断
            //var colonP=format.indexOf(":");
            if (colonP > 0) {
                if (format.charAt(colonP - 1) == 'f') {
                    var lengthLimit = format.substring(0, colonP - 1);
                    if (!isNaN(lengthLimit)) {
                        if (value.length != lengthLimit) {
                            k = k + 1;
                            vMsg += "    " + k + "." + info + "，其长度为" + value.length + "位，必须为" + lengthLimit + "位！\n";
                        }
                    }
                }
                else {
                    var lengthLimit = format.substring(0, colonP);
                    if (!isNaN(lengthLimit)) {
                        if (value.length > lengthLimit) {
                            k = k + 1;
                            vMsg += "    " + k + "." + info + "，其长度(" + value.length + ")超过限制" + lengthLimit + "！\n";
                        }
                    }
                }
            }
        }
        format = format.substring(colonP + 1, format.length);
        if (format == "email") {
            //电子邮件格式
            var found = value.match(/\w+@.+\..+/);
            if (found == null) {
                k = k + 1;
                vMsg += "    " + k + "." + info + "，其格式不正确:\n\"" + value + "\"不是一个Email地址！\n";
            }
        }
        else if (format == "int") {
            //整数
            var intVal = parseInt(value);
            if (isNaN(intVal) || intVal != value) {
                k = k + 1;
                vMsg += "    " + k + "." + info + "，其格式不正确:\n" + value + "不是一个整数！\n";
            }
            //内容的值的大小判断
            var colonP = format1.indexOf(":");
            if (colonP > 0) {

                var lengthLimit = format1.substring(0, colonP);
                if (!isNaN(lengthLimit)) {//alert(value);
                    if (parseInt(value) > parseInt(lengthLimit)) {
                        k = k + 1;
                        vMsg += "    " + k + "." + info + "，其值(" + value + ")超过限制" + lengthLimit + "！\n";
                    }
                }
            }
        }
        else if (format == "float") {
            //浮点数
            var floatVal = parseFloat(value);
            if (isNaN(floatVal) || floatVal != value) {
                k = k + 1;
                vMsg += "    " + k + "." + info + "，其格式不正确:\n" + value + "不是一个浮点数！\n";
            }
        }
        else if (format == "date") {
            //日期            
            var found = value.match(/(\d{1,5})-(\d{1,2})-(\d{1,2})/);
            var found2 = value.match(/(\d{1,5})\/(\d{1,2})\/(\d{1,2})/);
            if (found == null || found[0] != value || found[2] > 12 || found[3] > 31) {
                if (found2 == null || found2[0] != value || found2[2] > 12 || found2[3] > 31) {
                    k = k + 1;
                    vMsg += "    " + k + "." + info + "，其格式不正确:\n\"" + value + "\"不是一个日期。日期示例：[2000-01-01]\n";
                }               
            }else
            {            
                var year = trim0(found[1]);
                var month = trim0(found[2]) - 1;
                var date = trim0(found[3]);
                var d = new Date(year, month, date);                        
                if (d.getFullYear() != year || d.getMonth() != month || d.getDate() != date) {
                    k = k + 1;
                    vMsg += "    " + k + "." + info + "，其内容不正确:\n\"" + value + "\"不是一个正确的日期。日期示例：[2000-01-01]\n";
                }
            }
        }
        else if (format == "time") {
            //时间
            var found = value.match(/(\d{2}):(\d{2}):(\d{2})/);
            if (found == null || found[0] != value || found[1] > 23 || found[2] > 59 || found[3] > 59) {
                k = k + 1;
                vMsg += "    " + k + "." + info + "，其格式不正确:\n\"" + value + "\"不是一个时间。时间示例：[05:38:00]\n";
            }
        }
        else if (format == "hasChinese") {
            var _hasChinese = false;
            for (var j = 0; j < value.length; j++) {
                if (value.charCodeAt(j) > 255) {
                    _hasChinese = true;
                    break;
                }
            }
            if (!_hasChinese) {
                k = k + 1;
                vMsg += "    " + k + "." + info + "，其内容需要中文:\n\"" + value + "\"不含有任何中文字符！\n";
            }
        }
        else if (format == "allChinese") {
            for (var j = 0; j < value.length; j++) {
                if (value.charCodeAt(j) <= 255) {
                    k = k + 1;
                    vMsg += "    " + k + "." + info + "，其内容要求全中文:\n\"" + value + "\"含有非中文字符！\n";
                }
            }
        }
        else if (format == "noChinese") {
            for (var j = 0; j < value.length; j++) {
                if (value.charCodeAt(j) > 255) {
                    k = k + 1;
                    vMsg += "    " + k + "." + info + "，其内容要求非中文:\n\"" + value + "\"含有中文字符！\n";
                }
            }
        }
        else if (format != "") {
            //自定义
            try {
                var found = value.match(eval(format));
                if (found == null || found[0] != value) {
                    k = k + 1;
                    vMsg += "    " + k + "." + info + "，其格式不不符合要求:\"" + value + "\"\n提示：[" + format + "]\n";
                }
            }
            catch (e) {
                k = k + 1;
                vMsg += "    " + k + "." + e.name + ":不合法的正则式\"" + format + "\"\n";
            }
        }
    }
    //汇总消息一起提示
    if (trim(vMsg) != "" && trim(vMsg).length > 0) {
        vMsg = "系统警告（" + k + "个）：\n" + vMsg + "";
        alert(vMsg);
        return false;
    }
    return true;
}

function checkRadio(fm, opt) {
    var title = opt.title;
    if (title == "") return true; //忽略未定义title的元素
    var p = title.lastIndexOf("~");
    if (p < 0) return true; //忽略title中未定义检查格式的元素
    var info = title.substring(0, p);
    var format = title.substring(p + 1, title.length);
    var name = opt.name;
    if (name == "") return true; //忽略没有名字的元素
    if (format == "!") {
        //必须选择一个选项
        if (typeof (fm.all[name].length) == "undefined") {
            //同名radio只有一个
            if (opt.checked) {
                return true;
            }
            else {
                //alert(info+"\n必须选择"+name);
                alert(info + "\n必须选择");
                opt.focus();
                return false;
            }
        }
        else {
            //是一个radio组
            var radios = fm[name];
            for (var j = 0; j < radios.length; j++) {
                if (radios[j].checked == true) return true;
            }
            //alert(info+"\n必须选择"+name+"的一个选项");
            alert(info + "\n必须选择的一个选项");
            opt.focus();
            return false;
        }
    }
    else {
        //可以一个选项也不选
        return true;
    }
}
function checkCheckbox(fm, opt) {
    var title = opt.title;
    if (title == "") return true; //忽略未定义title的元素
    var p = title.lastIndexOf("~");
    if (p < 0) return true; //忽略title中未定义检查格式的元素
    var info = title.substring(0, p);
    var format = title.substring(p + 1, title.length);
    var name = opt.name;
    if (name == "") return true; //忽略没有名字的元素

    var min = format.match(/min:(\d+)\w*/);
    var max = format.match(/\w*max:(\d+)/);

    if (typeof (fm.all[name].length) == "undefined") {
        //只有一个同名checkbox
        if (min != null) {
            if (min[1] == 1 && !opt.checked) {
                //alert(info+"\n必须选上"+name+"选项");
                alert(info + "\n必须选上其中选项");
                opt.focus();
                return false;
            }
        }
    }
    else {
        //一个checkbox组
        var checkboxes = fm.all[name];
        var check_count = 0;
        for (var j = 0; j < checkboxes.length; j++) {
            if (checkboxes[j].checked) check_count++;
        }
        if (min != null) {
            if (min[1] > check_count) {
                //alert(info+"\n"+name+"至少需要选择"+min[1]+"个选项");
                alert(info + "\n至少需要选择" + min[1] + "个选项");
                opt.focus();
                return false;
            }
        }
        if (max != null) {
            if (max[1] < check_count) {
                //alert(info+"\n"+name+"至多可以选择"+max[1]+"个选项");
                alert(info + "\n至多可以选择" + max[1] + "个选项");
                opt.focus();
                return false;
            }
        }
    }
    return true;
}
function checkSelectOne(sel) {
    var title = sel.title;
    if (title == "") return true; //忽略未定义title的元素
    var p = title.lastIndexOf("~");
    if (p < 0) return true; //忽略title中未定义检查格式的元素
    var info = title.substring(0, p);
    var format = title.substring(p + 1, title.length);
    var name = sel.name;
    if (name == "") return true; //忽略没有名字的元素

    if (format == "!" && sel.selectedIndex == 0) {
        //alert(info+"\n"+name+"不可以选择第一个个选项");
        alert(info + "\n不可以选择第一个选项");
        sel.focus();
        return false;
    }
    return true;
}
function checkSelectMultiple(sel) {
    var title = sel.title;
    if (title == "") return true; //忽略未定义title的元素
    var p = title.lastIndexOf("~");
    if (p < 0) return true; //忽略title中未定义检查格式的元素
    var info = title.substring(0, p);
    var format = title.substring(p + 1, title.length);
    var name = sel.name;
    if (name == "") return true; //忽略没有名字的元素

    var min = format.match(/min:(\d+)\w*/);
    var max = format.match(/\w*max:(\d+)/);

    var select_count = 0;
    for (var j = 0; j < sel.length; j++) {
        if (sel[j].selected) select_count++;
    }
    if (min != null) {
        if (min[1] > select_count) {
            //alert(info+"\n"+name+"至少需要选择"+min[1]+"个选项");
            alert(info + "\n至少需要选择" + min[1] + "个选项");
            sel.focus();
            return false;
        }
    }
    if (max != null) {
        if (max[1] < select_count) {
            //alert(info+"\n"+name+"至多可以选择"+max[1]+"个选项");
            alert(info + "\n至多可以选择" + max[1] + "个选项");
            sel.focus();
            return false;
        }
    }
    return true;
}
/**
* 除去字符串变量s两端的空格。
*/
function trim(s) {
    s = s.replace(/^ */, "");
    s = s.replace(/ *$/, "");
    return s;
}
/**
* 除去字符串表示的数值变量开头的所有的"0"。
* 比如
* 	trim0("01")将返回"1"
* 	trim0("1")将返回"1"
* 	trim0("10")将返回"10"
* 	trim0("000")将返回"0"
*/
function trim0(s) {
    if (s.length == 0) return s;
    s = s.replace(/^0*/, "");
    if (s.length == 0) s = "0";
    return s;
}
/**
* 取得一个form对像所送出时内部送出参数的QueryString
* 形如:
* ?accountName=&userName=&email=&area=0&credit_low=&credit_high=&age_low=&age_high=&userLevel=0
*/
function getQueryString(fm) {
    var qStr = "";
    for (var i = 0; i < fm.length; i++) {
        if (!fm[i].disabled) {
            var n = fm[i].name;
            if (n == null) continue;
            if (n.length == 0) continue;
            if (fm[i].type == "select-multiple") {
                var _vs = fm[i].options;
                for (var _j = 0; _j < _vs.length; _j++) {
                    var _opt = _vs(_j);
                    if (_opt.selected) {
                        var v = _opt.value;
                        qStr = qStr + "&" + n + "=" + ec(v);
                    }
                }
            }
            else {
                var v = fm[i].value;
                if (fm[i].type == "radio" || fm[i].type == "checkbox") {
                    if (!fm[i].checked) continue;
                }
                qStr = qStr + "&" + n + "=" + ec(v);
            }
        }
    }
    if (qStr.length > 0) qStr = "?" + qStr.substr(1);
    return qStr;
}
function ec(va) {
    return va.replace(/\n/g, "%0D%0A");
}


function select_img(html_code) {
    var file_name = window.showModalDialog('img_select_index.asp?O_type=Select_Img', '', 'dialogWidth=640px;dialogHeight=480px;help=no;status=no;');
    if (file_name != undefined) {
        File_Name_Array = file_name.split("|");
        try {
            document.all[html_code].value = File_Name_Array[1];
            document.all[html_code + '_Preview'].innerHTML = '<img src=' + File_Name_Array[0] + '/Min_' + File_Name_Array[1] + ' border=0><a href=javascript:OpenWin("' + File_Name_Array[0] + File_Name_Array[1] + '","","");>放大图片</a><br>';
        }
        catch (e) {
            document.all[html_code].value = File_Name_Array[0] + File_Name_Array[1];
        }

    }
}


function select_img_File(html_code) {
    var file_name = window.showModalDialog('img_select_index.asp?O_type=Select_Img', '', 'dialogWidth=640px;dialogHeight=480px;help=no;status=no;');
    if (file_name != undefined) {
        File_Name_Array = file_name.split("|");
        Div_Name = "Div_"
        for (i = 0; i < 5; i++) {
            intTemp = Math.random() * 26;
            Div_Name = Div_Name + String.fromCharCode(65 + intTemp);
        }
        ba = ''
        document.all[html_code].insertAdjacentHTML('beforeBegin', '<table id="' + Div_Name + '" cellpadding="0" cellspacing="0" border="0"><tr><td><input type="hidden" value="' + File_Name_Array[2] + '" name="Product_Img">' + File_Name_Array[1] + '&nbsp;</td><td ><a href="javascript:;" onclick=javascript:document.all("' + Div_Name + '").outerHTML=ba>移除</a>&nbsp;<a href=javascript:OpenWin("' + File_Name_Array[0] + File_Name_Array[1] + '","","");>查看图片</a></td></tr></table>');
    }
}

function select_img_down_file(html_code) {
    var file_name = window.showModalDialog('img_select_index.asp?O_type=Select_Img', '', 'dialogWidth=640px;dialogHeight=480px;help=no;status=no;');
    if (file_name != undefined) {
        File_Name_Array = file_name.split("|");
        Div_Name = "Div_"
        for (i = 0; i < 5; i++) {
            intTemp = Math.random() * 26;
            Div_Name = Div_Name + String.fromCharCode(65 + intTemp);
        }
        ba = ''
        document.all[html_code].insertAdjacentHTML('beforeBegin', '<table id="' + Div_Name + '" cellpadding="0" cellspacing="0" border="0"><tr><td><input type="hidden" value="' + File_Name_Array[2] + '" name="Product_down_file">' + File_Name_Array[1] + '&nbsp;</td><td ><a href="javascript:;" onclick=javascript:document.all("' + Div_Name + '").outerHTML=ba>移除</a>&nbsp;<a href=javascript:OpenWin("' + File_Name_Array[0] + File_Name_Array[1] + '","","");>查看档案</a></td></tr></table>');
    }
}

//弹出窗口
function OpenWin(http_url,width,height) {
//            if (navigator.appName != 'Netscape') //如果用户的浏览器是IE
//                showModelessDialog('test1.aspx', 'userinfo', 'dialogwidth=500px;dialogheight=400px;status=no');
//            else
//                showModalDialog('test1.aspx', 'userinfo', 'dialogwidth=500px;dialogheight=400px;status=no');
    if (navigator.appName!='Netscape') //如果用户的浏览器是IE
    {
        mHeight = document.body.clientHeight+3;
        mWidth = document.body.clientWidth+3;
    }
    else //如果用户的浏览器是NetScape
    {
        mHeight = document.documentElement.scrollHeight+3;
        mWidth = document.body.scrollWidth+3;
    }
    if(width=="")
        width=mWidth;
    if(height=="")
        height=mWidth;

    if (http_url != '') {
        window.showModelessDialog(http_url, '', 'dialogWidth='+width+';dialogHeight='+height+';help=no;status=no;');
    }
    else {
        alert('请选择文件!');
    }
}

function open_win_pay(http_url) {
    if (http_url != '') {
        window.showModalDialog(http_url, '', 'dialogWidth=820px;dialogHeight=600px;help=no;status=no;');
    }
    else {
        alert('请选择文件!');
    }
}

function open_win_file(http_url) {
    if (http_url != '') {
        window.open(http_url, '', 'Width=665,Height=480,resizable=yes');
    }
    else {
        alert('请选择文件!');
    }
}

function funEditor(html_code) {
    window.open('/webedit/return.asp?return_name=' + html_code, 'Rate', 'width=590,height=380,left=100,top=50,scrollbars=1')
}


function runCode(obj) {
    var winname = window.open('', "_blank", '');
    winname.document.open('text/html', 'replace');
    winname.document.writeln(obj.value);
    winname.document.close();
}
function bbimg(o) {
    var zoom = parseInt(o.style.zoom, 10) || 100; zoom += event.wheelDelta / 12; if (zoom > 0) o.style.zoom = zoom + '%';
    return false;
}

//格式化数值
function Format(num, dotLen) {
    //将num按小数位为dotLen来进行格式化  如无小数位参数则为2位小数
    var dot = 0
    var num1 = 0
    if (typeof dotLen == "undefined" || dotLen == null)
        dot = 2
    else
        dot = dotLen
    if (isNaN(parseFloat(num)))
        return 0
    else
        num1 = parseFloat(num)
    var n1 = Math.pow(10, dot)
    if (n1 == 0)
        var iValue = Math.round(num1)
    else
        var iValue = Math.round(num1 * n1) / n1
    var sValue = iValue.toString();
    if (sValue.indexOf(".") == -1) {
        sValue = sValue + ".00";
    }
    else {
        if (sValue.indexOf(".") == sValue.length - 1) {
            sValue = sValue + "00";
        }
        else if (sValue.indexOf(".") == sValue.length - 2) {
            sValue = sValue + "0";
        }
    }
    return sValue
}


//this function is used to compare two date,author:rautinee
//判断两个时间大小
function compareDate(DateOne, DateTwo) {
    var OneMonth = DateOne.substring(5, DateOne.lastIndexOf("-"));
    var OneDay = DateOne.substring(DateOne.length, DateOne.lastIndexOf("-") + 1);
    var OneYear = DateOne.substring(0, DateOne.indexOf("-"));

    var TwoMonth = DateTwo.substring(5, DateTwo.lastIndexOf("-"));
    var TwoDay = DateTwo.substring(DateTwo.length, DateTwo.lastIndexOf("-") + 1);
    var TwoYear = DateTwo.substring(0, DateTwo.indexOf("-"));

    if (Date.parse(OneMonth + "/" + OneDay + "/" + OneYear) > Date.parse(TwoMonth + "/" + TwoDay + "/" + TwoYear)) {
        return true;
    }
    else {
        return false;
    }
}
function MenuOnMouseOver(obj) {
    obj.className = 'menubar_button';
}

function MenuOnMouseOut(obj) {
    obj.className = 'menubar_button_on';
}

//删除提醒
function DelData(DeleteUrl) {
    if (confirm("您确定要删除当前记录吗?\n\n注意:删除后不能恢复!")) {
        window.location.href = DeleteUrl;
    }
}

//移动select中选项
function moveUpDown(aim, obj) {//Obj是需用移动的对象;
    //document.my.up.disabled=false;
    //document.my.down.disabled=false; 
    //var Obj=document.my.a; 

    var Obj = document.getElementById(obj);
    if (aim == "up")//如果向上移动;
    {

        if (Obj.length - Obj.selectedIndex == Obj.length) {
            alert("已是最靠上的一项了，无法再向上移动！");
            return;
        }
        else if (Obj.selectedIndex != -1) {
            oldSelected = Obj.selectedIndex;
            oldText = Obj.options[Obj.selectedIndex].text;
            oldValue = Obj.options[Obj.selectedIndex].value;
            Obj.options[Obj.selectedIndex] = new Option(Obj.options[Obj.selectedIndex - 1].text, Obj.options[Obj.selectedIndex - 1].value)
            //当前选择的项值与文字等于该选择上一项的值与文字;
            Obj.options[oldSelected - 1] = new Option(oldText, oldValue);
            //原选择项的上一项的值与文字等于原选择的值与文字;
            Obj.options[oldSelected - 1].selected = true;
            //原选择项的上一项被选中状态;

        }
        else {
            alert("请选择您要移动的一项！"); return;

        }
    }
    else if (aim == "down")//向下移动;
    {
        if (Obj.selectedIndex == -1) {
            alert("请选择您要移动的一项！"); return;
        }
        else if (Obj.length - Obj.selectedIndex == 1) {
            alert("已是最靠下的一项了，无法再向下移动！");
            return;
        }
        else {
            current_ = Obj.selectedIndex;
            current_text = Obj.options[Obj.selectedIndex].text;
            current_value = Obj.options[Obj.selectedIndex].value;
            Obj.options[Obj.selectedIndex] = new Option(Obj.options[Obj.selectedIndex + 1].text, Obj.options[Obj.selectedIndex + 1].value);
            //新建一项，当前选择项值等于当前选择之下一项值;
            //Obj.options[Obj.selectedIndex].text=Obj.options[Obj.selectedIndex+1].text;
            //Obj.options[Obj.selectedIndex].value=Obj.options[Obj.selectedIndex+1].value;
            //得到当前项下一项的值与文字;
            //Obj.options[current_+1]=new Option(current_text,current_value)  
            Obj.options[current_ + 1].text = current_text;
            Obj.options[current_ + 1].value = current_value;
            //原选择中的项的下一项的文字与值分别等于原选择项的值与文字，以实现替换;        
            Obj.options[current_ + 1].selected = true; //选择原选择项的下一项;
        }

    }

}

//选中给定的列表框中所有的项。如果obj为null，则列表框为自身。
function selectAll(obj) {
    if (obj == null) obj = element;
    if (obj.tagName != "SELECT") return;
    var length = obj.options.length;
    for (var i = 0; i < length; i++) {
        obj.options[i].selected = true;
    }
}

//确认操作提醒
function doConfirm(frm) {
    if (confirm('确定要执行操作吗！')) {
        return (true);
    } else {
        return (false);
    }
}

//选中选择框
function Check_CheckBox(e) {
    e = getEvent();
    var xObj = e.srcElement || e.target;

    //var xObj = window.event.srcElement;
    if (xObj.tagName == "INPUT") {
        if (xObj.type == "checkbox") {
            var xname = xObj.name;
            var xBoolean = xObj.checked;
            if (xBoolean == true)
                xBoolean = false;
            else
                xBoolean = true;
            for (var i = 0; i < document.getElementsByName(xname).length; i++) {
                document.getElementsByName(xname)[i].checked = xBoolean;

            }
        }
    }
}


function getEvent() {
    var i = 0;
    if (document.all) return window.event;
    func = getEvent.caller;
    while (func != null) {
        var arg0 = func.arguments[0];
        if (arg0) {
            if (arg0.constructor == MouseEvent) {
                return arg0;
            }
        }
        func = func.caller;
    }
    return null;
}

//判断是否是时间
function isDateTime(str){
  var a = str.match(/^(\d{0,4})-(\d{0,2})-(\d{0,2}) (\d{0,2}):(\d{0,2}):(\d{0,2})$/);
  if (a == null) return false;
  if ( a[2]>=13 || a[3]>=32 || a[4]>=24 || a[5]>=60 || a[6]>=60) return false;

  str=str.slice(0, str.search(" "))
  var t=new Date(str.replace(/\-/g,'/'));   
  var ar = str.split(/[-/:]/);   
  if(ar[0] != t.getYear() || ar[1] != t.getMonth()+1 || ar[2] != t.getDate())   
    return false;   

  return true;
}


//检查 2009-05-02 12:10:20 格式的日期
function isDateTimeSecond(str){
  var a = str.match(/^(\d{0,4})-(\d{0,2})-(\d{0,2}) (\d{0,2}):(\d{0,2}):(\d{0,2})$/);
  if (a == null) return false;
  if ( a[2]>=13 || a[3]>=32 || a[4]>=24 || a[5]>=60 || a[6]>=60) return false;

  str=str.slice(0, str.search(" "))
  var t=new Date(str.replace(/\-/g,'/'));   
  var ar = str.split(/[-/:]/);   
  if(ar[0] != t.getYear() || ar[1] != t.getMonth()+1 || ar[2] != t.getDate())   
    return false;   

  return true;
}

//检查 2009-05-02 格式的日期
function isDateTimeDay(DateStr){
    var sDate=DateStr.replace(/(^\s+|\s+$)/g,''); 
    if(sDate=='') return true;   
        var t=new Date(sDate.replace(/\-/g,'/'));   
        var ar = sDate.split(/[-/:]/);   
        if(ar[0] != t.getYear() || ar[1] != t.getMonth()+1 || ar[2] != t.getDate())   
        {   
            return false;   
        }   
    return true;   
}

  
function TimeSubtract(mSTime, mETime)
{
if(!isDateTime(mSTime) || !isDateTime(mETime) ) 
 {
   return "error";
 }     
 var sDt = new Date(mSTime.replace(/-/, '/').replace(/-/, '/'));
 var eDt = new Date(mETime.replace(/-/, '/').replace(/-/, '/'));
 return parseInt((eDt-sDt)/1000);     
}

//计算两个日期以秒为单位的差
function TimeSubtractSecond(mSTime, mETime)
{
if(!isDateTime(mSTime) || !isDateTime(mETime) ) 
 {
   return "error";
 }     
 var sDt = new Date(mSTime.replace(/-/, '/').replace(/-/, '/'));
 var eDt = new Date(mETime.replace(/-/, '/').replace(/-/, '/'));
 return parseInt((eDt-sDt)/1000);     
}

//计算两个日期以天为单位的差
function TimeSubtractDay(mSTime, mETime)
{
if(!isDateTimeDay(mSTime) || !isDateTimeDay(mETime) ) 
 {
   return "error!";
 }      
 var sDt = new Date(mSTime.replace(/-/, '/').replace(/-/, '/'));
 var eDt = new Date(mETime.replace(/-/, '/').replace(/-/, '/'));
 return parseInt((eDt-sDt)/86400000);   
}
  
  //指定页面区域内容导入Excel  mSheetName-工作表名称 mPrintTable-导入表名称
function   AllAreaExcel(mSheetName,mPrintTable)     
{   
  var oXL= new ActiveXObject("Excel.Application");     
  var oWB=oXL.Workbooks.Add();     
  var oSheet=oWB.ActiveSheet;       
  var sel=document.body.createTextRange();
  //指定工作表名称 
  oSheet.name= mSheetName;
  //PrintA是table的id   
  sel.moveToElementText(mPrintTable);   
  sel.select();   
  sel.execCommand("Copy");   
  oSheet.Paste();   
  oXL.Visible=true;	      
}

//按钮焦点跳转
function SubmitKeyClick(button) {
    if (event.keyCode == 13) {
        event.keyCode = 9;
        event.returnValue = false;
        document.all[button].click();
    }
} 


//这个可以验证15位和18位的身份证，并且包含生日和校验位的验证。   
//如果有兴趣，还可以加上身份证所在地的验证，就是前6位有些数字合法有些数字不合法。 

function isIdCardNo(num) {
    num = num.toUpperCase();
    //身份证号码为15位或者18位，15位时全为数字，18位前17位为数字，最后一位是校验位，可能为数字或字符X。   
    if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) {
        alert('输入的身份证号长度不对，或者号码不符合规定！\n15位号码应全为数字，18位号码末位可以为数字或X。');
        return false;
    }
    //校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。 
    //下面分别分析出生日期和校验位 
    var len, re;
    len = num.length;
    if (len == 15) {
        re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
        var arrSplit = num.match(re);

        //检查生日日期是否正确 
        var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);
        var bGoodDay;
        bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
        if (!bGoodDay) {
            alert('输入的身份证号里出生日期不对！');
            return false;
        }
        else {
            //将15位身份证转成18位 
            //校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。 
            var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
            var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
            var nTemp = 0, i;
            num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6);
            for (i = 0; i < 17; i++) {
                nTemp += num.substr(i, 1) * arrInt[i];
            }
            num += arrCh[nTemp % 11];
            return num;
        }
    }
    if (len == 18) {
        re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
        var arrSplit = num.match(re);

        //检查生日日期是否正确 
        var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);
        var bGoodDay;
        bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
        if (!bGoodDay) {
            alert(dtmBirth.getYear());
            alert(arrSplit[2]);
            alert('输入的身份证号里出生日期不对！');
            return false;
        }
        else {
            //检验18位身份证的校验码是否正确。 
            //校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。 
            var valnum;
            var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
            var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
            var nTemp = 0, i;
            for (i = 0; i < 17; i++) {
                nTemp += num.substr(i, 1) * arrInt[i];
            }
            valnum = arrCh[nTemp % 11];
            if (valnum != num.substr(17, 1)) {
                alert('18位身份证的校验码不正确！应该为：' + valnum);
                return false;
            }
            return num;
        }
    }
    return false;
}
//严格的验证
var aCity = { 11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江 ", 31: "上海", 32: "江苏", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山东", 41: "河南", 42: "湖北 ", 43: "湖南", 44: "广东", 45: "广西", 46: "海南", 50: "重庆", 51: "四川", 52: "贵州", 53: "云南", 54: "西藏 ", 61: "陕西", 62: "甘肃", 63: "青海", 64: "宁夏", 65: "新疆", 71: "台湾", 81: "香港", 82: "澳门", 91: "国外 " }
function cidInfo(sId) {
    var iSum = 0
    var info = ""
    if (!/^d{17}(d|x)$/i.test(sId)) return false;
    sId = sId.replace(/x$/i, "a");
    if (aCity[parseInt(sId.substr(0, 2))] == null) return "Error:非法地区";
    sBirthday = sId.substr(6, 4) + "-" + Number(sId.substr(10, 2)) + "-" + Number(sId.substr(12, 2));
    var d = new Date(sBirthday.replace(/-/g, "/"))
    if (sBirthday != (d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate())) return "Error:非法生日";
    for (var i = 17; i >= 0; i--) iSum += (Math.pow(2, i) % 11) * parseInt(sId.charAt(17 - i), 11)
    if (iSum % 11 != 1) return "Error:非法证号";
    return aCity[parseInt(sId.substr(0, 2))] + "," + sBirthday + "," + (sId.substr(16, 1) % 2 ? "男" : "女")
}
//document.write(cidInfo("380524198002300016"),"<br/>");
//document.write(cidInfo("340524198002300019"),"<br/>")
//document.write(cidInfo("340524197711111111"),"<br/>")
//document.write(cidInfo("34052419800101001x"),"<br/>");

