var webroot="";

function lTrim(sString)
{
	var i;
	if (sString.length < 1)
		return "";
	for (i = 0; i < sString.length; i++)
		if (sString.charAt(i) != " ")
			break;
	if (i >= sString.length)
		return("");
	else
		return(sString.substring(i, sString.length));
}
function rTrim(sString)
{
	var i;
	if (sString.length < 1)
		return "";
	for (i = (sString.length - 1); i >= 0; i--)
		if (sString.charAt(i) != " ")
			break;
	if (i < 0)
		return("");
	else
		return(sString.substring(0, i + 1));
}
function allTrim(sString)
{
	if (sString.length < 1)
		return "";
	var dString = lTrim(sString);
	dString = rTrim(dString);
	return dString;
}
function isEmpty(sString)
{
	var s = allTrim(sString);
	if (s.length < 1)
		return true;
	else
		return false;
}
function getLength(sString)
{
	var s = allTrim(sString);
	return s.length;
}

function getByteLength(sString){
  if(sString==null)
    return 0;
  if(sString.length==0)
    return 0;

  var sEscape = escape(sString);
  var iLen = sString.length;
  var iUnicodeCount = getInStringCount(sEscape,"%u");

  return iLen+iUnicodeCount;
}

function getInStringCount(src,patten){
  var pos1 = src.indexOf(patten);
  if(pos1<0) return 0;

  var sSplits = src.split(patten);
  return sSplits.length-1;
}

function replace(sSource, sFind, sReplace)
{
	var pos1 = sSource.indexOf(sFind);
	while (pos1 > 0)
	{
		if ((pos1 + sFind.length) >= sSource.length)
		{
			sSource = sSource.substring(1, pos1) + sReplace;
		}
		else
		{
			sSource = sSource.substring(0, pos1) + sReplace + sSource.substring(pos1 + sFind.length, sSource.length);
		}

		pos1 = sSource.indexOf(sFind);
	}
	return sSource;
}

function isNumberPatten(src,sPatten){
  var arr;
  arr = sPatten.split(".");
  if(arr.length==1){
      return isNumber(src,arr[0].length,0);
  }else{
      return isNumber(src,arr[0].length+arr[1].length,arr[1].length);
  }

}

function isNumber(src,precision,scale){
  var integer_part = precision - scale;

  if (integer_part < 0 || precision < 0 || scale < 0)
	      return false;

  var patten;

  if (scale > 0) {
    patten = "^-?\\d{1," + integer_part + "}(\\.\\d{1," + scale + "})?$";
  }
  else {
    patten = "^-?\\d{1," + integer_part + "}$";
  }

  return Matchs(src, patten);
}

function Matchs(src,patten){
  var re;                     // 声明变量。
  re = new RegExp(patten,"g");  // 创建正则表达式对象。
  return re.test(src);
}

function isNumeric(sString)
{
	var s = allTrim(sString);
	if (isNaN(s) == true)
		return false;
	else
		return true;
}
function isInt(sString)
{
	var s = allTrim(sString);
	if (isNumeric(s) == false)
		return false;

	if ((s % 1) == 0)
		return true;
	else
		return false;
}
function DateIsValid(yy, mm, dd)
{
	var t, d, s, minDate, maxDate;

	d = new Date(yy, mm - 1, dd);
	if (isNaN(yy) || isNaN(mm) || isNaN(dd))
		return new Date();

	minDate = new Date(1970, 0, 1);
	maxDate = new Date(9999, 11, 31);
	if (d < minDate)
		d = minDate;
	if (d > maxDate)
		d = maxDate;
	return d;
}
function DateIsValid1(strDate)
{
	strDate = replace(strDate, "-", "/");
	var i = Date.parse(strDate);
	alert(i);

	if (isNaN(i))
		return "";

	var minDate = Date.parse("1/1/1970");
	var maxDate = Date.parse("12/31/9999");

	if (i > maxDate || i < minDate)
		return "";

	var d = new Date(i);
	var s = d.getYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate();

	return s;
}

//日期格式：YYYY-MM-DD
function isDate(strDate){
   var strSeparator = "-"; //日期分隔符
   var strDateArray;
   var intYear;
   var intMonth;
   var intDay;
   var boolLeapYear;

   strDateArray = strDate.split(strSeparator);
   if(strDateArray.length!=3) return false;

   // 月日的长度必须是2
   if(strDateArray[1].length!=2) return false;
   if(strDateArray[2].length!=2) return false;

   intYear = parseInt(strDateArray[0],10);
   intMonth = parseInt(strDateArray[1],10);
   intDay = parseInt(strDateArray[2],10);

   if(isNaN(intYear)||isNaN(intMonth)||isNaN(intDay)) return false;

   if(intMonth>12||intMonth<1) return false;

   if((intMonth==1||intMonth==3||intMonth==5||intMonth==7||intMonth==8||intMonth==10||intMonth==12)&&(intDay>31||intDay<1)) return false;

   if((intMonth==4||intMonth==6||intMonth==9||intMonth==11)&&(intDay>30||intDay<1)) return false;

   if(intMonth==2){
      if(intDay<1) return false;

      boolLeapYear = false;
      if((intYear%100)==0){
	 if((intYear%400)==0) boolLeapYear = true;
      }
      else{
	 if((intYear%4)==0) boolLeapYear = true;
      }

      if(boolLeapYear){
	 if(intDay>29) return false;
      }
      else{
	 if(intDay>28) return false;
      }
   }

   return true;
}

//日期格式：YYYY-MM-DD
//与上一函数的区别在于本函数没有日月长度的限制
function isDate2(strDate){
   var strSeparator = "-"; //日期分隔符
   var strDateArray;
   var intYear;
   var intMonth;
   var intDay;
   var boolLeapYear;

   strDateArray = strDate.split(strSeparator);

   if(strDateArray.length!=3) return false;

   intYear = parseInt(strDateArray[0],10);
   intMonth = parseInt(strDateArray[1],10);
   intDay = parseInt(strDateArray[2],10);

   if(isNaN(intYear)||isNaN(intMonth)||isNaN(intDay)) return false;

   if(intMonth>12||intMonth<1) return false;

   if((intMonth==1||intMonth==3||intMonth==5||intMonth==7||intMonth==8||intMonth==10||intMonth==12)&&(intDay>31||intDay<1)) return false;

   if((intMonth==4||intMonth==6||intMonth==9||intMonth==11)&&(intDay>30||intDay<1)) return false;

   if(intMonth==2){
      if(intDay<1) return false;

      boolLeapYear = false;
      if((intYear%100)==0){
	 if((intYear%400)==0) boolLeapYear = true;
      }
      else{
	 if((intYear%4)==0) boolLeapYear = true;
      }

      if(boolLeapYear){
	 if(intDay>29) return false;
      }
      else{
	 if(intDay>28) return false;
      }
   }

   return true;
}

//检查日期格式：YYYY-MM-DD hh:mm
function isLongDate1(strDate) {
	var intHour;
	var intMinute;

	//检查长度，如果不是16，则报错
	if(strDate.length != 16) return false;

	//	检查前10位是否是形如YYYY-MM-DD的日期格式
	var date1 = strDate.substr(0,10);
	if(!isDate(date1))	return false;

	//	检查时分妙部分是否正确，最大表示为23:59
	intHour = parseInt(strDate.substr(11,2));
	intMinute = parseInt(strDate.substr(14,2));
	if(isNaN(intHour)||isNaN(intMinute)) return false;
	if(intHour > 23) return false;
	if(intMinute > 59) return false;

	return true;
}

function ValidEmail(strEmail)
{
	if (strEmail.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1) {
		return true;
	}else {
	 	alert("电子邮件格式不正确，请重新输入!");
	 	return false;
	}
}

function testfun()
{
	alert('Hello world');
}

function DateToString(o_date)
{
	var s_date;
	s_date=(o_date.getMonth()+1)+'/'+o_date.getDate()+'/'+o_date.getYear();
	return s_date;
}

function isDataValid(DataType,DataValue)
{
	//此函数只处理以下数据类型
	//1.数字
	//2.字符
	//3.日期
	//4.整数
	var ret;

	if(DataType=="数字" || DataType=="整数" || DataType=="NUMBER" || DataType=="INTEGER" || DataType=="NUMERIC")
	{
	//	window.alert("type is numeric: "+ DataValue);
		ret = isNumeric(DataValue);
		if(!ret)
		  window.alert("请正确输入数字");
		return ;
	}

	if(DataType=="CHAR")
	{
	//	window.alert("type is char: "+ DataValue);
		ret = isEmpty(DataValue);
		if(ret)
		  window.alert("请输入值");
		return !ret;
	}

	if(DataType=="DATE")
	{
	//	window.alert("type is Date: "+ DataValue);
		ret = isDate(DataValue);
		if(!ret)
		  window.alert("日期输入有误，请检查日期输入格式\n\r4位年份，2位月份，2位日（YYYY-MM-DD）");
		return ret;
	}//
//	window.alert("type is unknown: "+ DataValue);
	return true;
}

function isDataValid2(DataType,DataValue,required)
{
	//此函数只处理以下数据类型
	//1.数字
	//2.字符
	//3.日期
	//4.整数

    //该函数能处理必输项
    var ret;

	if(DataType=="数字" || DataType=="整数" || DataType=="NUMBER" || DataType=="INTEGER" || DataType=="NUMERIC" )
	{

	       // window.alert("type is numeric: "+ DataValue);
		if(isEmpty(DataValue) && !required) return true;
		if(isEmpty(DataValue) && required){
//                 window.alert("请输入值");
		 return false;}
		ret = isNumeric(DataValue);
//                if(!ret)
//                  window.alert("请正确输入数字");
		return ret;
	}

	if(DataType=="CHAR")
	{
		ret = isEmpty(DataValue);
		if(!required) return true;
		if(ret)
		  window.alert("请输入值");
		return !ret;
	}

	if(DataType=="DATE")
	{
		if(isEmpty(DataValue) && !required) return true;
		ret = isDate(DataValue);
		if(!ret)
		  window.alert("日期输入有误，请检查日期输入格式\n\r4位年份，2位月份，2位日（YYYY-MM-DD）");
		return ret;
	}

	if(DataType=="LONGDATE1")
	{
		if(isEmpty(DataValue) && !required) return true;
		ret = isLongDate1(DataValue);
		if(!ret)
		  window.alert("日期输入有误，请检查日期输入格式\n\r必须形如（YYYY-MM-DD hh:mm）");
		return ret;
	}
//	window.alert("type is unknown: "+ DataValue);
	return true;
}

function isDataValid3(DataType,DataValue)
{
	//此函数只处理以下数据类型
	//1.数字
	//2.字符
	//3.日期
	//4.整数
  //  只返回有效性校验（boolean型），而不提示出错信息
	var ret;

	if(DataType=="数字" || DataType=="整数" || DataType=="NUMBER" || DataType=="INTEGER" || DataType=="NUMERIC")
	{
		ret = isNumeric(DataValue);
		return ret;
	}

	if(DataType=="CHAR")
	{
		ret = isEmpty(DataValue);
		return !ret;
	}

	if(DataType=="DATE")
	{
	      ret = isDate(DataValue);
	      return ret;
	}
	return true;
}

function getFormatDateFormSfzhm(strSfzhm,delimiter){
  return FormatDate8T11(getDateFromSfzhm(strSfzhm),delimiter);
}

function getDateFromSfzhm(strSfzhm){
  return strSfzhm.substr(6,8);
}

function FormatDate8T11(strDate,delimiter){
  return strDate.substr(0,4) + delimiter + strDate.substr(4,2) + delimiter + strDate.substr(6,2);
}

function ValidateNull(form){
  var prop;

  for(var i=0;i< form.elements.length;i++){
    prop = form.elements[i];
    if(prop.name!=""){
      if(prop["className"]=="required"){
	if(isEmpty(prop["value"])){
		  if(typeof prop["alt"]!='undefined')
			alert("\""+prop["alt"]+"\""+"必填！");
		else
			alert("\""+prop["title"]+"\""+"必填！");
		prop.focus();
		return false;
	}
	if(prop["type"].toLowerCase()=="checkbox" && prop["checked"]==false){
		alert("\""+prop["alt"]+"\""+"必选！");
		return false;
	}
      }
    }
  }
  return ValidateLength(form);
}

function ValidateLength(form){
 var prop;
 var comment = null;
 var maxlength = null;
  for(var i=0;i< form.elements.length;i++){
    prop = form.elements[i];
    if(prop.type=="text"){
      if(prop.alt==null || prop.alt.length!=0){
	comment = prop.alt;
      }
      if(prop.title==null || prop.title.length!=0){
	comment = prop.title;
      }
      if(comment==null){
	comment='';
      }
      /*if(typeof prop.maxlength == "undefined"){*/
	maxlength = prop.maxLength;
      /*}else{
	maxlength = prop.maxlength;
      }*/

      if(maxlength!=null){
	 if(getByteLength(prop.value)>maxlength){
	  if(comment.length==0){
	    alert("未知名字段长度不能大于"+maxlength + "位(中文字算2位)");
	    prop.focus();
	    prop.select();
	    return false;
	  }else{
	    alert('"'+comment+'"长度不能大于'+maxlength + "位(中文字算2位)");
	    prop.focus();
	    prop.select();
	    return false;
	  }
	}
      }
    }
  }
  return true;
}

var oBao = null;
var oSel;
var oNullvaluetext;
function GetFitDictionaryContent(str,sel,nullvaluetext)        //根据用户权限取得联动
{
    if(oBao == null){
        oSel = sel;
        oNullvaluetext = nullvaluetext;
        oBao = new ActiveXObject("Microsoft.XMLHTTP");
        oBao.open("GET","/"+webroot+"/servgetfitlist?"+str,true);
        oBao.onreadystatechange = GetFitDictionaryContent;
        oBao.send();
    }else {
        if (oBao.readyState == 4) {
            if (oBao.status == 200) {
                //服务器端处理返回的是经过escape编码的字符串.
                var strRet = unescape(oBao.responseText);
                oBao = null;
   	        if(strRet.indexOf("(error)")!=-1){
                    alert("下载字典表出错");
                    return;
                }
                if(strRet.indexOf("(null)")!=-1){
                    return;
                }
                //通过XMLHTTP返回数据,开始构建Select.
                BuildSel(strRet,oSel,oNullvaluetext);
            } else {
                alert('There was a problem with the request.');
	    }
        }
    }
}

function GetDictionaryContent(str,sel,nullvaluetext)
{
/*
 *--------------- GetResult(str) -----------------
 * GetResult(str)
 * 功能:通过XMLHTTP发送请求,返回结果.
 * 参数:str,字符串,发送条件.
 * 参数:sel,要构建的Select
 * 实例:GetResult(document.all.userid.value);
 * author:wanghr100(灰豆宝宝.net)
 * update:2004-5-27 19:02
 *--------------- GetResult(str) -----------------
 */
    var oBao = new ActiveXObject("Microsoft.XMLHTTP");
    oBao.open("GET","/"+webroot+"/getdictionarylist?"+str,false);
    oBao.send();
    //服务器端处理返回的是经过escape编码的字符串.
    //通过XMLHTTP返回数据,开始构建Select.

    var strRet = unescape(oBao.responseText);
    oBao = null;
    if(strRet.indexOf("(error)")!=-1){
      alert("下载字典表出错");
      return;
    }
    if(strRet.indexOf("(null)")!=-1){
      return;
    }

    BuildSel(strRet,sel,nullvaluetext);
}

function GetServerText(str)
{
    var oBao = new ActiveXObject("Microsoft.XMLHTTP");
    oBao.open("GET","/"+webroot+"/getdictionarylist?"+str,false);
    oBao.send();
    var strRet = unescape(oBao.responseText);
    return strRet;
}

function GetSubDictionary(dic_name,dic_code_prefix,dic_code_postfix,dic_code_midfix,conEx,sel){
  GetDicContent(dic_name,dic_code_prefix,dic_code_postfix,dic_code_midfix,conEx,sel,"---请选择---");
}
//根据个人权限联动
function GetFitSubDictionary(dic_name,dic_code_prefix,userId,resId,operId,sel){
  GetFitDicContent(dic_name,dic_code_prefix,userId,resId,operId,sel,"---请选择---");
}

function GetFitDicContent(dic_name,dic_code_prefix,userId,resId,operId,sel,nullvaluetext)
{
	var str = null;
	str = "dic_name="+dic_name;
	if(dic_code_prefix!=null){
	  str = str + "&&dic_code_prefix="+dic_code_prefix;
	}
	if(userId!=null){
	  str = str + "&&userId="+userId;
	}
	if(resId!=null){
	  str = str + "&&resId="+resId;
	}
	if(operId!=null){
	  str = str + "&operId="+operId;
	}
	GetFitDictionaryContent(str,sel,nullvaluetext);
}



function GetDicContent(dic_name,dic_code_prefix,dic_code_postfix,dic_code_midfix,conEx,sel,nullvaluetext)
{
	var str = null;
	str = "dic_name="+dic_name;
	if(dic_code_prefix!=null){
	  str = str + "&&dic_code_prefix="+dic_code_prefix;
	}
	if(dic_code_postfix!=null){
	  str = str + "&&dic_code_postfix="+dic_code_postfix;
	}
	if(dic_code_midfix!=null){
	  str = str + "&&dic_code_midfix="+dic_code_midfix;
	}
	if(conEx!=null){
	  str = str + "&condition="+conEx;
	}
	GetDictionaryContent(str,sel,nullvaluetext);
}

function BuildSel(str,sel,nullvaluetext)
{
/*
 *--------------- BuildSel(str,sel) -----------------
 * BuildSel(str,sel)
 * 功能:通过str构建Select.
 * 参数:str,字符串,由服务端返回的.有特定结构"字符串1,字符串2,字符串3"
 * 参数:sel,要构建的Select
 * 实例:BuildSel(unescape(oBao.responseText),document.all.sel2)
 * author:wanghr100(灰豆宝宝.net)
 * update:2004-5-27 19:02
 *--------------- BuildSel(str,sel) -----------------
 */
    //先清空原来的数据.
    var selvalue = sel.value;
    sel.options.length=0;
    if(nullvaluetext!=null){
      sel.options[sel.options.length]=new Option(nullvaluetext,"");
    }

    var arrstr = new Array();
    var arrrow = new Array();
    arrstr = str.split(";;");
    //开始构建新的Select.
    for(var i=0;i<arrstr.length;i++)
    {
	arrrow = arrstr[i].split("::");
	if(arrrow.length==1){
	   sel.options[sel.options.length]=new Option(arrrow[0],arrrow[0]);
	}else if(arrrow.length==2){
	   sel.options[sel.options.length]=new Option(arrrow[1],arrrow[0]);
	}
    }
    if(sel.length!=0){
      sel.value = selvalue;
      if(sel.selectedIndex==-1){
	sel.selectedIndex=0;
      }
    }
}

function IDT18(strTemp){
  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;

  if(strTemp.length!=15 && strTemp.length!=18){
    return strTemp;
  }

  if(strTemp.length==15){
    strTemp = strTemp.substr(0,6) + '19' + strTemp.substr(6,strTemp.length-6);
  }else{
    strTemp = strTemp.substr(0,17);
  }

  for(i = 0; i < strTemp.length; i ++){
    nTemp += strTemp.substr(i, 1) * arrInt[i];
  }

  strTemp += arrCh[nTemp % 11];

  return strTemp;
}

function ValidateIDNOWithMsg(strSfzhm,ignorenull){
  var iRet = ValidateIDNO(strSfzhm);
  switch(iRet){
    case 1:
	    if(ignorenull){
	 alert("身份证号码不能为空!");
	    }
	break;
    case 2:
	    alert("身份证号码长度必须为15位或18位");
	break;
    case 3:
	    alert("身份证号码必须为15位数字或18位数字(最后一位可以为X)!");
	break;
    case 4:
	    alert("身份证号码有误，正确的应为:"+IDT18(strSfzhm));
	break;
    default:
	    break;
  }
  return iRet;
}

function ValidateIDNO(strSfzhm){
/*  var patten = "^(\\d{15})|([0123456789X]{18})$";*/
  if(strSfzhm==null || strSfzhm.length==0){
    return 1;
  }
  if(strSfzhm.length!=15 && strSfzhm.length!=18){
    return 2;
  }

  var patten1 = "^\\d{15}$";
  var patten2 = "^\\d{17}[0123456789X]$";
  if(!Matchs(strSfzhm,patten1) && !Matchs(strSfzhm,patten2)){
    return 3;
  }

  if(strSfzhm.length==18){
    var strID18 = IDT18(strSfzhm);
    if(strID18!=strSfzhm){
      return 4;
    }
  }
  return 0;
}

function CorrectIDNO(strSfzhm,ignorenull){

  if(ValidateIDNO(strSfzhm,ignorenull)==0){
    return IDT18(strSfzhm);
  }

  return strSfzhm;
}

  /*
将合法的15位身份证转变为18位
如果输入18位则不变
参数：i_citizen_id 合法的身份证号码
     i_century “19”或者“20”
返回值：失败：-1；成功：18位身份证
提示语句：无
*/
function pub_certno15to18(i_citizen_id,i_century) {
	var citizen_id = new String(i_citizen_id);
	var century = new String(i_century);
	var new_citizen_id = new String();

	var tmp = new String();
	var id = new Array(18);
	var i = 1;

	//加权因子W
	var w = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);

	if (citizen_id.length == 18)
		return citizen_id;
	else if (citizen_id.length!=15||century.length!=2)
		return -1;

	for(i=1;i<=15;i++) {
		tmp = citizen_id.charAt(i-1);
		if(tmp<"0"||tmp>"9")
			return -1;
		if(i<=6)
			id[i-1] = parseInt(tmp,10);
		else
			id[i+1] = parseInt(tmp,10);
	}

	for(i=7;i<=8;i++) {
		tmp = century.charAt(i-7);
		if(tmp<"0"||tmp>"9")
		return -1;
		id[i-1] = parseInt(tmp,10);
	}

	var count = 0;
	for(i=1;i<=17;i++) {
		count += id[i-1] * w[i-1];
	}
	id[17] = count - Math.floor(Math.floor(count/11)*11);
	id[17] = 12 - id[17];
	id[17] = id[17] - Math.floor(Math.floor(id[17]/11)*11);
	if(id[17] == 10)
		new_citizen_id = citizen_id.substr(0,6) + century + citizen_id.substr(6,9) + "X";
	else
		new_citizen_id = citizen_id.substr(0,6) + century + citizen_id.substr(6,9) + id[17];

	return new_citizen_id;
}
  //校验身份证
function checkSfzh(sfzh) {
	if (sfzh==null || sfzh=="")
		return true;

	if (sfzh.length == 15) {
		var pattern = /^([0-9]){6}([0-9]){2}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])([0-9]){3}$/;
		if(pattern.test(sfzh)) {
			return true;
		}
		else {
			alert("您输入的身份证号有误!");
			return false;
		}

	}
	else if (sfzh.length == 18) {
		var pattern = /^([0-9]){6}(18|19|20)([0-9]){2}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])([0-9]){3}([0-9]|x|X)$/;
		if(pattern.test(sfzh)) {
		  var id15 = sfzh.substr(0,6) + sfzh.substr(8,9);
		  //alert(id15);
		  if(sfzh!=pub_certno15to18(id15,"19"))
		  {
		    alert("您输入的身份证号有误!");
		    return false;
		  }
		  return true;
		}
		else {
			alert("您输入的身份证号有误!");
			return false;
		}
	}
	else {
		alert("您输入的身份证号长度不符(请输入15或18位)!");
		return false;
	}
  }

