/*
 * Date: 2005-11-29
 *
 * Copyright (C) 2000-2003 Bytime Technology Inc. All rights reserved.
 *
 * Modify by fan.zy
 *
 * 以下数据检验函数均以待检验字符串是否有错误为基准返回值
 * 如果待检验字符串有错误返回true，否则返回false。
 */

//主函数 
function CheckForm(oForm) 
{ 
    var els = oForm.elements; 
    //遍历所有表元素 
    for(var i=0;i<els.length;i++) 
    { 
        //是否需要验证 
        if(els[i].check) 
        { 
            //取得验证的正则字符串 
            var sReg = els[i].check; 
            //取得表单的值,用通用取值函数 
            var sVal = GetValue(els[i]); 
            //字符串->正则表达式,不区分大小写 
            var reg = new RegExp(sReg,"i"); 
            if(!reg.test(sVal)) 
            { 
                //验证不通过,弹出提示warning 
                alert(els[i].warning); 
                //该表单元素取得焦点,用通用返回函数 
                GoBack(els[i])  
                return false; 
            } 
        } 
    } 
} 

//通用取值函数分三类进行取值 
//文本输入框,直接取值el.value 
//单多选,遍历所有选项取得被选中的个数返回结果"00"表示选中两个 
//单多下拉菜单,遍历所有选项取得被选中的个数返回结果"0"表示选中一个 
function GetValue(el) 
{ 
    //取得表单元素的类型 
    var sType = el.type; 
    switch(sType) 
    { 
        case "text": 
        case "hidden": 
        case "password": 
        case "file": 
        case "textarea": return el.value; 
        case "checkbox": 
        case "radio": return GetValueChoose(el); 
        case "select-one": 
        case "select-multiple": return GetValueSel(el); 
    } 
    //取得radio,checkbox的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数 
    function GetValueChoose(el) 
    { 
        var sValue = ""; 
        //取得第一个元素的name,搜索这个元素组 
        var tmpels = document.getElementsByName(el.name); 
        for(var i=0;i<tmpels.length;i++) 
        { 
            if(tmpels[i].checked) 
            { 
                sValue += "0"; 
            } 
        } 
        return sValue; 
    } 
    //取得select的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数 
    function GetValueSel(el) 
    { 
        var sValue = ""; 
        for(var i=0;i<el.options.length;i++) 
        { 
            //单选下拉框提示选项设置为value="" 
            if(el.options[i].selected && el.options[i].value!="") 
            { 
                sValue += "0"; 
            } 
        } 
        return sValue; 
    } 
} 

//通用返回函数,验证没通过返回的效果.分三类进行取值 
//文本输入框,光标定位在文本输入框的末尾 
//单多选,第一选项取得焦点 
//单多下拉菜单,取得焦点 
function GoBack(el) 
{ 
    //取得表单元素的类型 
    var sType = el.type; 
    switch(sType) 
    { 
        case "text": 
        case "hidden": 
        case "password": 
        case "file": 
        case "textarea": el.focus();var rng = el.createTextRange(); rng.collapse(false); rng.select(); 
        case "checkbox": 
        case "radio": var els = document.getElementsByName(el.name);els[0].focus(); 
        case "select-one": 
        case "select-multiple":el.focus(); 
    } 
} 


/*
 * Date: 2003-12-05
 * Original check functions
 */

//检验字符串是否为空
function checkNull(str)
{
  if (str == "")
  {
    return true;
  }
  else
  {
    return false;
  }
}

//检验字符串长度是否为指定长度
function checkLength(str, length)
{
  if (str.length != length)
  {
    return true;
  }
  else
  {
    return false;
  }
}

//检验字符串是否为合法的数字
function checkNum(str)
{
	var	strTemp	= "0123456789";
	for	(i = 0;	i <	str.length;	i++)
  {
		if (strTemp.indexOf(str.charAt(i)) == -1)
    {
			return true;
		}
	}
	return false;
}

//检验字符串是否为合法的单精度数字
function checkFloat(str)
{
	var	strTemp	= "0123456789";
  var strDot=0;
  if(str=="")
  {
    return true;
  }
  if(str.charAt(0)=="." || str.charAt(str.length-1)==".")
  {
    return true;
  }
	for	(i = 0;	i <	str.length;	i++)
  {
		if (strTemp.indexOf(str.charAt(i)) == -1)
    {
      if(str.charAt(i)!=".")
      {
			 return true;
      }
      else
      {
        strDot++;
        if(strDot>1)
        {
          return true;
        }
      }
		}
	}
	return false;
}

//检验Email地址是否合法
function checkEmail(str)
{
  var at_pos = str.indexOf("@");
  var dot_pos = str.indexOf(".", at_pos);
  if (at_pos < 1 || at_pos == str.length - 1 || dot_pos == -1 || dot_pos == at_pos + 1 || dot_pos == str.length - 1)
  {
    return true;
  }
  else
  {
    return false;
  }
}

//检验身份证号码的长度及和出生年月日信息是否相符
function checkIDCard(IDCard, birthday)
{
  if (IDCard.length == 15)
  {
    if (IDCard.substring(6, 8) == birthday.substring(2, 4) && IDCard.substring(8, 10) == birthday.substring(5, 7) && IDCard.substring(10, 12) == birthday.substring(8, 10))
    {
      return false;
    }
    else
    {
      return true;
    }
  }
  else if (IDCard.length == 18)
  {
    if (IDCard.substring(6, 10) == birthday.substring(0, 4) && IDCard.substring(10, 12) == birthday.substring(5, 7) && IDCard.substring(12, 14) == birthday.substring(8, 10))
    {
      return false;
    }
    else
    {
      return true;
    }
  }
  else
  {
    return true;
  }
}

//对18位的公民身份证号码进行校验
function checkIDCard18(id_card)
{
  var result = true;
  if (id_card.length == 18)
  {
    var wi = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
    var checkCode = new Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2");
    var checkBit = id_card.charAt(17);
    var sum = 0;
    for (i = 0; i < 17; i++) sum += parseInt(id_card.charAt(i)) * wi[i];
    var index = sum % 11;
    if (index == 2)
    {
      if ("X" == checkBit || "x" == checkBit) result = false;
    }
    else if (checkCode[index] == checkBit) result = false;
  }
  return result;
}