<!--公共变量定义开始-->
	var MOUSE_X = 0;
	var MOUSE_Y = 0;
	var MOUSE_ELEMENT;
	var Err_RequiredEmpty = "请注意打*号的项是必需的，请填写完整!";
    var Err_Null='数据不能为空.';
    var Err_Long='数据超过允许的长度';
    var Err_Number='非法的数值输入';
    var Err_DateTime='非法的日期/时间';
    var Err_Time='非法的时间';
    var Err_Email='非法的邮件地址';
    var nErr = -1;
    var strErrPrompt = new Array(
       "对不起，您输入了非法的数据区间!",
       "对不起，您选择了非法的日期区间!",
       "对不起，您选择了非法的日期时间区间!"
    );
    var Err_SelectExhi = '请选择展会！';
	var WEB_URL = "http://192.168.253.103";
	var DT_WEB_URL = "http://192.168.253.109";

    var oOptionUnlimited = document.createElement("OPTION");
    oOptionUnlimited.value = "0";
    oOptionUnlimited.text  = "不限";

    var oOptionUnLtd = document.createElement("OPTION");
    oOptionUnLtd.value = "0";
    oOptionUnLtd.text  = "不限";

    var IMGSRC_NODE_OPENED = WEB_URL + "/pub/images/dt2.gif";
    var IMGSRC_NODE_CLOSED = WEB_URL + "/pub/images/dt3.gif";
    var IMGSRC_NODE_SINGAL = WEB_URL + "/pub/images/dt1.gif";

    var IMGSRC_TREE_JOINT_OPENED = WEB_URL + "/pub/images/tree_joint_opened.gif";
    var IMGSRC_TREE_JOINT_CLOSED = WEB_URL + "/pub/images/tree_joint_closed.gif";
    var IMGSRC_TREE_BRANCH = WEB_URL + "/pub/images/tree_branch.gif";
    var IMGSRC_TREE_VLINE = WEB_URL + "/pub/images/tree_vline.gif";

    function Coordinate(nX, nY)
    {
    	this.x = nX;
    	this.y = nY;
    }

<!--公共变量定义结束-->

	//去掉字串左边的空格
	function lTrim(str)
	{
		if (str.charAt(0) == " ")
		{
		//如果字串左边第一个字符为空格
		str = str.slice(1);//将空格从字串中去掉
		//这一句也可改成 str = str.substring(1, str.length);
		str = lTrim(str); //递归调用
		}
		return str;
	}

	//去掉字串右边的空格
	function rTrim(str)
	{
		var iLength;
		iLength = str.length;
		if (str.charAt(iLength - 1) == " ")
		{
		//如果字串右边第一个字符为空格
		str = str.slice(0, iLength - 1);//将空格从字串中去掉
		//这一句也可改成 str = str.substring(0, iLength - 1);
		str = rTrim(str); //递归调用
		}
		return str;
	}

	//去掉字串两边的空格
	function trim(str)
	{
		return lTrim(rTrim(str));
	}

function fPopUpDlg(dialogType){

	var endtarget;
	if(dialogType == "POPUPLIST_EXHI"){
        	endtarget = WEB_URL + "/apptest/form/ExhiList.jsp";
	}
	showx = event.screenX - event.offsetX - 148 ;
	showy = event.screenY - event.offsetY + 24;
     var features= 'height=200,width=400,status=no,toolbar=no,menubar=no,location=no,Resizeable=no,channelmode=no'
                  + ',top ='+ showy +','
                  +'left='+showx;
    window.open(endtarget,'',features);

}
function TimeChk(srcElement)
{
  if (!IsTime(srcElement))
  {
     alert(Err_Time);
     srcElement.select();
  }
}

function TelChk(srcElement)
{
	return true;
}

function IsTime(srcElement){
    var vTime = srcElement.value;
    if (vTime.length!=5)
    {
       return false;
    }
    if (vTime.indexOf(':')!=2)
    {
      return false;
    }
    vHour = vTime.substring(0,2);
    if (!isInt(vHour))
    {
      return false;
    }
    else
    {
       if (eval(vHour)>24)
       {
       	  return false;
       }
    }
    vMin = vTime.substring(3,5);
    if (!isInt(vMin))
    {
       return false;
    }
    else
    {
       if (eval(vMin)>59)
       {
          return false;
       }
    }
    return true;
   }

function SelDate(TargetElement){
	return "undefined" != typeof(window.showModalDialog(WEB_URL + "/js/Calendar4.htm", TargetElement, "dialogHeight=300px; dialogWidth=300px"));
}

function IsInt(Expression)
{
	var Reg=new RegExp("^[0-9]{1,}$", "g");
	var Str=new String();
	Str=Expression;
	return Str.match(Reg);
}

function IsUntrimInt(Expression){
	var Reg=new RegExp("^ {0,}[0-9]{1,} {0,}$", "g");
	var Str=new String();
	Str=Expression;
	return Str.match(Reg);
}

function IsSpace(Expression){
	var Reg=new RegExp("^ {0,}$", "g");
	var Str=new String();
	Str=Expression;
	return Str.match(Reg);
}

function IsDate(Expression){
    var Reg=new RegExp("^[0-9]{4}-[]$", "g");
}

function IsDouble(Expression){
	var Reg=new RegExp("^[0-9]{1,}.?[0-9]{0,}$", "g");
	var Str=new String();
	Str=Expression;
	return Str.match(Reg);
}


function NullChk(srcElement, strPrompt) {
  value = srcElement.value;
  if (IsSpace(value)) {
     alert(strPrompt+Err_Null);
     srcElement.select();
     return false;
  }
  return true;
}

//检查输入框srcElement中是否为空(全是空格也认为是空)。
//  若否，则直接返回True；
//  若是，则按strPrompt提示，根据用户选择的结果返回布尔值。
function DoubleChk(srcElement, strPrompt){
    VALUE=srcElement.value;
    if(IsDouble(VALUE)){
        return confirm(strPrompt);
    }
    return true;
}

//检查输入框srcElement中的值是否为正确的整数值。
//	允许空。若输入框中全部为空格，则将其置空，以避免服务器端取到一个非空的空值。
function IntNumChk(srcElement, bSetZero){
	VALUE=srcElement.value;
	if(IsSpace(VALUE)){
		srcElement.value=bSetZero? "0" : "";
		return true;
	}
	//检查数字输入是否正确。
	if(!IsUntrimInt(VALUE)){
		alert("请正确填写整数。\n注意数字中间不要留有空格。");
		srcElement.select();
		return false;
	}
	return true;
}

//检查输入框srcElement中的值是否为正确的整数值。
//	允许空。若输入框中全部为空格，则将其置空，以避免服务器端取到一个非空的空值。
function DoubleNumChk(srcElement){
	VALUE=srcElement.value;
	if(IsSpace(VALUE)){
		srcElement.value="";
		return true;
	}
	//检查数字输入是否正确。
	if(!IsDouble(VALUE)){
		alert("请正确填写数字。\n注意数字中间不要留有空格。\n若是小数，则小数点前的数字不能省略。");
		srcElement.select();
		return false;
	}
	return true;
}

// 检查两个输入域中的值是否构成一个合法的区间。
function IsValidNumInterval(Element_1, Element_2){
    if ((Element_1.value != "") && (Element_2.value != "")) {
        eval("var bValid = (" + Element_1.value + " <= " + Element_2.value + ")");
        return bValid;
    }
    return true;
}

// 由一个表示日期的字符串(yyyy-mm-dd)返回一个日期型对象。
function getDate(dateString) {
    if (IsSpace(dateString))
        return NaN;
	var date = new Date();
    var str = new String();
    str = dateString;
    first = str.indexOf("-");
    second = str.lastIndexOf("-");
    var length = str.length;
    date.setYear(str.substring(0, first));
    date.setMonth(parseInt(str.substring(first + 1, second)) - 1);
    date.setDate(parseInt(str.substring(second + 1, length)) - 1);
	return date;
}

// 检查两个HTML元素中的值，是否构成一个合法的日期区间。
function IsValidDateInterval(Element_1, Element_2)
{
    var strDate_1 = Element_1.value;
    var strDate_2 = Element_2.value;
    if ((strDate_1 != "") && (strDate_2 != ""))
	{
        var date_1 = getDate(strDate_1);
        var date_2 = getDate(strDate_2);
        return (date_1 <= date_2);
	}
	return true;
}

// 检查两组<input>域构成的“日期-时间”区间是否符合要求。
function IsValidDatetimeInterval(strName_1, strName_2){
    if (document.all(strName_1 + "_date").value == "" || document.all(strName_2 + "_date").value == "")
        return true;
    var date_1 = getDate(document.all(strName_1 + "_date").value);
    var date_2 = getDate(document.all(strName_2 + "_date").value);
    var nHour_1 = parseInt(document.all(strName_1 + "_hour").value);
    var nHour_2 = parseInt(document.all(strName_2 + "_hour").value);
    var nMinute_1 = parseInt(document.all(strName_1 + "_minute").value);
    var nMinute_2 = parseInt(document.all(strName_2 + "_minute").value);

    if (date_1 > date_2)
        return false;
    else if (date_1.valueOf() == date_2.valueOf()) {
        if (nHour_1 > nHour_2)
            return false;
        else if (nHour_1 == nHour_2) {
            if (nMinute_1 > nMinute_2)
                return false;
        }
    }
    return true;
}

// 检查输入框中的值是否为一个合法的“时”值。
//    允许空，此时将输入框的值置为默认的“00”。
function HourNumChk(srcElement) {
    var bIsHour = true;
    if (IntNumChk(srcElement) == false)
        return false;
    else if (IsSpace(srcElement.value))
        srcElement.value = "00";
    else {
        var nHour = parseInt(srcElement.value);
        if (nHour < 0 || nHour > 24) {
            alert("请注意：小时应介于0点和24点之间!");
            srcElement.select();
            return false;
        }
        else if (srcElement.value.length < 2)
            srcElement.value = "0" + srcElement.value;
    }
    return true;
}

// 检查输入框中的值是否为一个合法的“分”值。
//    允许空，此时将输入框的值置为默认的“00”。
function MinuteNumChk(srcElement) {
    var bIsHour = true;

    if (IntNumChk(srcElement) == false)
        return false;
    else if (IsSpace(srcElement.value))
        srcElement.value = "00";
    else {
        var nMinute = parseInt(srcElement.value);
        if (nMinute < 0 || nMinute > 59) {
            alert("请注意：分钟应介于00和59点之间!");
            srcElement.select();
            return false;
        }
        else if (srcElement.value.length < 2)
            srcElement.value = "0" + srcElement.value;
    }
    return true;
}

<!--整形检测 isInt(theStr) 返回值为true or false-->
function isEmptyNum(str)
{
   if((str==null)||(str.length==0)) return true;
   else return (false);
 }

function isIntDigit(theNum)
{
   var theMask ='-0123456789';
   if (isEmptyNum(theNum)) return (false);
   else if (theMask.indexOf(theNum) == -1) return (false);
   return(true);
}

function isInt(theStr)
{
   var flag =true;
   if(isEmptyNum(theStr)) { flag =false;}
   else
   {
     if ((theStr.indexOf('-')!=-1)&&(theStr.indexOf('-')!=0)) {flag=false;}
	 for (var i=0;i< theStr.length;i++)
       {
         if (isIntDigit(theStr.substring(i,i+1))==false) {
          flag =false ; break;
          }
        }
    }
   return (flag);
}
<!--整形检测结束-->

<!--浮点数检测-->
function isNum(theStr)
{
    if (theStr.length==0) {return false;}
    else return (!isNaN(theStr));
}
<!--浮点数检测结束-->

<!--格式化数据 使用方法为Number.toFixed(n)-->
function Stretch(Q, L, c) { var S = Q
   if (c.length>0) while (S.length<L) { S = c+S }
   return S
}
function StrU(X, M, N) { // X>=0.0
   var T, S=new String(Math.round(X*Number("1e"+N)))
   if (S.search && S.search(/\D/)!=-1) { return ''+X }
   with (new String(Stretch(S, M+N, '0')))
   return substring(0, T=(length-N)) + '.' + substring(T)
}
function Sign(X) { return X<0 ? '-' : ''; }
function StrS(X, M, N) { return Sign(X)+StrU(Math.abs(X), M, N) }
Number.prototype.toFixed= new Function('n','return StrS(this,1,n)')
<!--格式化数据结束-->

<!--字符转化为数字-->
function toNum(theStr)
{
    if (isEmptyNum(theStr)) {return 0;}
    else
    {
        if (isNaN(theStr)) {return 0;}
        else {return (eval(theStr));}
    }
}
<!--字符转化为数字结束-->

<!--textarea长度检测-->
function textCounter(field,maxlimit) {
   if (field.value.length > maxlimit) // if too long...trim it!
   {
    field.value = field.value.substring(0, maxlimit);
    alert(Err_Long);
   }
}
<!--textarea长度检测结束-->

<!-- email 检测-->
function isEmail (emailStr)
{
    var checkTLD=1;
    var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
    var emailPat=/^(.+)@(.+)$/;
    var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
    var validChars="\[^\\s" + specialChars + "\]";
    var quotedUser="(\"[^\"]*\")";
    var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
    var atom=validChars + '+';
    var word="(" + atom + "|" + quotedUser + ")";
    var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
    var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
    var matchArray=emailStr.match(emailPat);

    if (matchArray==null) {
        //alert("Email address seems incorrect (check @ and .'s)");
        return false;
    }
    var user=matchArray[1];
    var domain=matchArray[2];
    for (i=0; i<user.length; i++) {
        if (user.charCodeAt(i)>127) {
            alert("Ths username contains invalid characters.");
            return false;
        }
    }
    for (i=0; i<domain.length; i++) {
        if (domain.charCodeAt(i)>127) {
            //alert("Ths domain name contains invalid characters.");
             return false;
         }
    }
    if (user.match(userPat)==null) {
        //alert("The username doesn't seem to be valid.");
        return false;
    }
    var IPArray=domain.match(ipDomainPat);
    if (IPArray!=null) {
        for (var i=1;i<=4;i++) {
            if (IPArray[i]>255) {
                //alert("Destination IP address is invalid!");
                return false;
            }
        }
        return true;
    }
    var atomPat=new RegExp("^" + atom + "$");
    var domArr=domain.split(".");
    var len=domArr.length;
    for (i=0;i<len;i++) {
        if (domArr[i].search(atomPat)==-1) {
            //alert("The domain name does not seem to be valid.");
            return false;
        }
    }
    if (checkTLD && domArr[domArr.length-1].length!=2 &&
        domArr[domArr.length-1].search(knownDomsPat)==-1) {
        //alert("The address must end in a well-known domain or two letter " + "country.");
        return false;
    }
    if (len<2) {
        //alert("This address is missing a hostname!");
        return false;
    }
    return true;
}

<!-- emailCheck End -->

<!--日历显示-->
var weekend = [0,6];
var weekendColor = "#e0e0e0";
var fontface = "Verdana";
var fontsize = 2;

var gNow = new Date();
var ggWinCal;
isNav = (navigator.appName.indexOf("Netscape") != -1) ? true : false;
isIE = (navigator.appName.indexOf("Microsoft") != -1) ? true : false;

Calendar.Months = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"];

// Non-Leap year Month days..
Calendar.DOMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
// Leap year Month days..
Calendar.lDOMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

function Calendar(p_item, p_WinCal, p_month, p_year, p_format) {
	if ((p_month == null) && (p_year == null))	return;

	if (p_WinCal == null)
		this.gWinCal = ggWinCal;
	else
		this.gWinCal = p_WinCal;

	if (p_month == null) {
		this.gMonthName = null;
		this.gMonth = null;
		this.gYearly = true;
	} else {
		this.gMonthName = Calendar.get_month(p_month);
		this.gMonth = new Number(p_month);
		this.gYearly = false;
	}

	this.gYear = p_year;
	this.gFormat = p_format;
	this.gBGColor = "white";
	this.gFGColor = "black";
	this.gTextColor = "black";
	this.gHeaderColor = "black";
	this.gReturnItem = p_item;
}

Calendar.get_month = Calendar_get_month;
Calendar.get_daysofmonth = Calendar_get_daysofmonth;
Calendar.calc_month_year = Calendar_calc_month_year;
Calendar.print = Calendar_print;

function Calendar_get_month(monthNo) {
	return Calendar.Months[monthNo];
}

function Calendar_get_daysofmonth(monthNo, p_year) {
	/*
	Check for leap year ..
	1.Years evenly divisible by four are normally leap years, except for...
	2.Years also evenly divisible by 100 are not leap years, except for...
	3.Years also evenly divisible by 400 are leap years.
	*/
	if ((p_year % 4) == 0) {
		if ((p_year % 100) == 0 && (p_year % 400) != 0)
			return Calendar.DOMonth[monthNo];

		return Calendar.lDOMonth[monthNo];
	} else
		return Calendar.DOMonth[monthNo];
}

function Calendar_calc_month_year(p_Month, p_Year, incr) {
	/*
	Will return an 1-D array with 1st element being the calculated month
	and second being the calculated year
	after applying the month increment/decrement as specified by 'incr' parameter.
	'incr' will normally have 1/-1 to navigate thru the months.
	*/
	var ret_arr = new Array();

	if (incr == -1) {
		// B A C K W A R D
		if (p_Month == 0) {
			ret_arr[0] = 11;
			ret_arr[1] = parseInt(p_Year) - 1;
		}
		else {
			ret_arr[0] = parseInt(p_Month) - 1;
			ret_arr[1] = parseInt(p_Year);
		}
	} else if (incr == 1) {
		// F O R W A R D
		if (p_Month == 11) {
			ret_arr[0] = 0;
			ret_arr[1] = parseInt(p_Year) + 1;
		}
		else {
			ret_arr[0] = parseInt(p_Month) + 1;
			ret_arr[1] = parseInt(p_Year);
		}
	}

	return ret_arr;
}

function Calendar_print() {
	ggWinCal.print();
}

function Calendar_calc_month_year(p_Month, p_Year, incr) {
	/*
	Will return an 1-D array with 1st element being the calculated month
	and second being the calculated year
	after applying the month increment/decrement as specified by 'incr' parameter.
	'incr' will normally have 1/-1 to navigate thru the months.
	*/
	var ret_arr = new Array();

	if (incr == -1) {
		// B A C K W A R D
		if (p_Month == 0) {
			ret_arr[0] = 11;
			ret_arr[1] = parseInt(p_Year) - 1;
		}
		else {
			ret_arr[0] = parseInt(p_Month) - 1;
			ret_arr[1] = parseInt(p_Year);
		}
	} else if (incr == 1) {
		// F O R W A R D
		if (p_Month == 11) {
			ret_arr[0] = 0;
			ret_arr[1] = parseInt(p_Year) + 1;
		}
		else {
			ret_arr[0] = parseInt(p_Month) + 1;
			ret_arr[1] = parseInt(p_Year);
		}
	}

	return ret_arr;
}

// This is for compatibility with Navigator 3, we have to create and discard one object before the prototype object exists.
new Calendar();

Calendar.prototype.getMonthlyCalendarCode = function() {
	var vCode = "";
	var vHeader_Code = "";
	var vData_Code = "";

	// Begin Table Drawing code here..
	vCode = vCode + "<TABLE BORDER=1 BGCOLOR=\"" + this.gBGColor + "\">";

	vHeader_Code = this.cal_header();
	vData_Code = this.cal_data();
	vCode = vCode + vHeader_Code + vData_Code;

	vCode = vCode + "</TABLE>";

	return vCode;
}

Calendar.prototype.show = function() {
	var vCode = "";

	this.gWinCal.document.open();

	// Setup the page...
	this.wwrite("<html>");
	this.wwrite("<head><title>Calendar</title>");
	this.wwrite("</head>");

	this.wwrite("<body " +
		"link=\"" + this.gLinkColor + "\" " +
		"vlink=\"" + this.gLinkColor + "\" " +
		"alink=\"" + this.gLinkColor + "\" " +
		"text=\"" + this.gTextColor + "\">");
	this.wwriteA("<FONT FACE='" + fontface + "' SIZE=2><B>");
	this.wwriteA(this.gMonthName + " " + this.gYear);
	this.wwriteA("</B><BR>");

	// Show navigation buttons
	var prevMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, -1);
	var prevMM = prevMMYYYY[0];
	var prevYYYY = prevMMYYYY[1];

	var nextMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, 1);
	var nextMM = nextMMYYYY[0];
	var nextYYYY = nextMMYYYY[1];

	this.wwrite("<TABLE WIDTH='100%' BORDER=1 CELLSPACING=0 CELLPADDING=0 BGCOLOR='#e0e0e0'><TR><TD ALIGN=center>");
	this.wwrite("[<A HREF=\"" +
		"javascript:window.opener.Build(" +
		"'" + this.gReturnItem + "', '" + this.gMonth + "', '" + (parseInt(this.gYear)-1) + "', '" + this.gFormat + "'" +
		");" +
		"\"><<<\/A>]</TD><TD ALIGN=center>");
	this.wwrite("[<A HREF=\"" +
		"javascript:window.opener.Build(" +
		"'" + this.gReturnItem + "', '" + prevMM + "', '" + prevYYYY + "', '" + this.gFormat + "'" +
		");" +
		"\"><<\/A>]</TD><TD ALIGN=center>");
	this.wwrite("[<A HREF=\"javascript:window.print();\">Print</A>]</TD><TD ALIGN=center>");
	this.wwrite("[<A HREF=\"" +
		"javascript:window.opener.Build(" +
		"'" + this.gReturnItem + "', '" + nextMM + "', '" + nextYYYY + "', '" + this.gFormat + "'" +
		");" +
		"\">><\/A>]</TD><TD ALIGN=center>");
	this.wwrite("[<A HREF=\"" +
		"javascript:window.opener.Build(" +
		"'" + this.gReturnItem + "', '" + this.gMonth + "', '" + (parseInt(this.gYear)+1) + "', '" + this.gFormat + "'" +
		");" +
		"\">>><\/A>]</TD></TR></TABLE><BR>");

	// Get the complete calendar code for the month..
	vCode = this.getMonthlyCalendarCode();
	this.wwrite(vCode);

	this.wwrite("</font></body></html>");
	this.gWinCal.document.close();
}

Calendar.prototype.showY = function() {
	var vCode = "";
	var i;
	var vr, vc, vx, vy;		// Row, Column, X-coord, Y-coord
	var vxf = 285;			// X-Factor
	var vyf = 200;			// Y-Factor
	var vxm = 10;			// X-margin
	var vym;				// Y-margin
	if (isIE)	vym = 75;
	else if (isNav)	vym = 25;

	this.gWinCal.document.open();

	this.wwrite("<html>");
	this.wwrite("<head><title>Calendar</title>");
	this.wwrite("<style type='text/css'>\n<!--");
	for (i=0; i<12; i++) {
		vc = i % 3;
		if (i>=0 && i<= 2)	vr = 0;
		if (i>=3 && i<= 5)	vr = 1;
		if (i>=6 && i<= 8)	vr = 2;
		if (i>=9 && i<= 11)	vr = 3;

		vx = parseInt(vxf * vc) + vxm;
		vy = parseInt(vyf * vr) + vym;

		this.wwrite(".lclass" + i + " {position:absolute;top:" + vy + ";left:" + vx + ";}");
	}
	this.wwrite("-->\n</style>");
	this.wwrite("</head>");

	this.wwrite("<body " +
		"link=\"" + this.gLinkColor + "\" " +
		"vlink=\"" + this.gLinkColor + "\" " +
		"alink=\"" + this.gLinkColor + "\" " +
		"text=\"" + this.gTextColor + "\">");
	this.wwrite("<FONT FACE='" + fontface + "' SIZE=2><B>");
	this.wwrite("Year : " + this.gYear);
	this.wwrite("</B><BR>");

	// Show navigation buttons
	var prevYYYY = parseInt(this.gYear) - 1;
	var nextYYYY = parseInt(this.gYear) + 1;

	this.wwrite("<TABLE WIDTH='100%' BORDER=1 CELLSPACING=0 CELLPADDING=0 BGCOLOR='#e0e0e0'><TR><TD ALIGN=center>");
	this.wwrite("[<A HREF=\"" +
		"javascript:window.opener.Build(" +
		"'" + this.gReturnItem + "', null, '" + prevYYYY + "', '" + this.gFormat + "'" +
		");" +
		"\" alt='Prev Year'><<<\/A>]</TD><TD ALIGN=center>");
	this.wwrite("[<A HREF=\"javascript:window.print();\">Print</A>]</TD><TD ALIGN=center>");
	this.wwrite("[<A HREF=\"" +
		"javascript:window.opener.Build(" +
		"'" + this.gReturnItem + "', null, '" + nextYYYY + "', '" + this.gFormat + "'" +
		");" +
		"\">>><\/A>]</TD></TR></TABLE><BR>");

	// Get the complete calendar code for each month..
	var j;
	for (i=11; i>=0; i--) {
		if (isIE)
			this.wwrite("<DIV ID=\"layer" + i + "\" CLASS=\"lclass" + i + "\">");
		else if (isNav)
			this.wwrite("<LAYER ID=\"layer" + i + "\" CLASS=\"lclass" + i + "\">");

		this.gMonth = i;
		this.gMonthName = Calendar.get_month(this.gMonth);
		vCode = this.getMonthlyCalendarCode();
		this.wwrite(this.gMonthName + "/" + this.gYear + "<BR>");
		this.wwrite(vCode);

		if (isIE)
			this.wwrite("</DIV>");
		else if (isNav)
			this.wwrite("</LAYER>");
	}

	this.wwrite("</font><BR></body></html>");
	this.gWinCal.document.close();
}

Calendar.prototype.wwrite = function(wtext) {
	this.gWinCal.document.writeln(wtext);
}

Calendar.prototype.wwriteA = function(wtext) {
	this.gWinCal.document.write(wtext);
}

Calendar.prototype.cal_header = function() {
	var vCode = "";

	vCode = vCode + "<TR>";
	vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>Sun</B></FONT></TD>";
	vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>Mon</B></FONT></TD>";
	vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>Tue</B></FONT></TD>";
	vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>Wed</B></FONT></TD>";
	vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>Thu</B></FONT></TD>";
	vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>Fri</B></FONT></TD>";
	vCode = vCode + "<TD WIDTH='16%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>Sat</B></FONT></TD>";
	vCode = vCode + "</TR>";

	return vCode;
}

Calendar.prototype.cal_data = function() {
	var vDate = new Date();
	vDate.setDate(1);
	vDate.setMonth(this.gMonth);
	vDate.setFullYear(this.gYear);

	var vFirstDay=vDate.getDay();
	var vDay=1;
	var vLastDay=Calendar.get_daysofmonth(this.gMonth, this.gYear);
	var vOnLastDay=0;
	var vCode = "";

	/*
	Get day for the 1st of the requested month/year..
	Place as many blank cells before the 1st day of the month as necessary.
	*/

	vCode = vCode + "<TR>";
	for (i=0; i<vFirstDay; i++) {
		vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(i) + "><FONT SIZE='2' FACE='" + fontface + "'>&nbsp;</FONT></TD>";
	}

	// Write rest of the 1st week
	for (j=vFirstDay; j<7; j++) {
		vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j) + "><FONT SIZE='2' FACE='" + fontface + "'>" +
			"<A HREF='#' " +
				"onClick=\"self.opener.document." + this.gReturnItem + ".value='" +
				this.format_data(vDay) +
				"';window.close();\">" +
				this.format_day(vDay) +
			"</A>" +
			"</FONT></TD>";
		vDay=vDay + 1;
	}
	vCode = vCode + "</TR>";

	// Write the rest of the weeks
	for (k=2; k<7; k++) {
		vCode = vCode + "<TR>";

		for (j=0; j<7; j++) {
			vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j) + "><FONT SIZE='2' FACE='" + fontface + "'>" +
				"<A HREF='#' " +
					"onClick=\"self.opener.document." + this.gReturnItem + ".value='" +
					this.format_data(vDay) +
					"';window.close();\">" +
				this.format_day(vDay) +
				"</A>" +
				"</FONT></TD>";
			vDay=vDay + 1;

			if (vDay > vLastDay) {
				vOnLastDay = 1;
				break;
			}
		}

		if (j == 6)
			vCode = vCode + "</TR>";
		if (vOnLastDay == 1)
			break;
	}

	// Fill up the rest of last week with proper blanks, so that we get proper square blocks
	for (m=1; m<(7-j); m++) {
		if (this.gYearly)
			vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j+m) +
			"><FONT SIZE='2' FACE='" + fontface + "' COLOR='gray'>&nbsp;</FONT></TD>";
		else
			vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j+m) +
			"><FONT SIZE='2' FACE='" + fontface + "' COLOR='gray'>" + m + "</FONT></TD>";
	}

	return vCode;
}

Calendar.prototype.format_day = function(vday) {
	var vNowDay = gNow.getDate();
	var vNowMonth = gNow.getMonth();
	var vNowYear = gNow.getFullYear();

	if (vday == vNowDay && this.gMonth == vNowMonth && this.gYear == vNowYear)
		return ("<FONT COLOR=\"RED\"><B>" + vday + "</B></FONT>");
	else
		return (vday);
}

Calendar.prototype.write_weekend_string = function(vday) {
	var i;

	// Return special formatting for the weekend day.
	for (i=0; i<weekend.length; i++) {
		if (vday == weekend[i])
			return (" BGCOLOR=\"" + weekendColor + "\"");
	}

	return "";
}

Calendar.prototype.format_data = function(p_day) {
	var vData;
	var vMonth = 1 + this.gMonth;
	vMonth = (vMonth.toString().length < 2) ? "0" + vMonth : vMonth;
	var vMon = Calendar.get_month(this.gMonth).substr(0,3).toUpperCase();
	var vFMon = Calendar.get_month(this.gMonth).toUpperCase();
	var vY4 = new String(this.gYear);
	var vY2 = new String(this.gYear.substr(2,2));
	var vDD = (p_day.toString().length < 2) ? "0" + p_day : p_day;

	switch (this.gFormat) {
		case "MM\/DD\/YYYY" :
			vData = vMonth + "\/" + vDD + "\/" + vY4;
			break;
		case "MM\/DD\/YY" :
			vData = vMonth + "\/" + vDD + "\/" + vY2;
			break;
		case "MM-DD-YYYY" :
			vData = vMonth + "-" + vDD + "-" + vY4;
			break;
		case "MM-DD-YY" :
			vData = vMonth + "-" + vDD + "-" + vY2;
			break;

		case "DD\/MON\/YYYY" :
			vData = vDD + "\/" + vMon + "\/" + vY4;
			break;
		case "DD\/MON\/YY" :
			vData = vDD + "\/" + vMon + "\/" + vY2;
			break;
		case "DD-MON-YYYY" :
			vData = vDD + "-" + vMon + "-" + vY4;
			break;
		case "DD-MON-YY" :
			vData = vDD + "-" + vMon + "-" + vY2;
			break;

		case "DD\/MONTH\/YYYY" :
			vData = vDD + "\/" + vFMon + "\/" + vY4;
			break;
		case "DD\/MONTH\/YY" :
			vData = vDD + "\/" + vFMon + "\/" + vY2;
			break;
		case "DD-MONTH-YYYY" :
			vData = vDD + "-" + vFMon + "-" + vY4;
			break;
		case "DD-MONTH-YY" :
			vData = vDD + "-" + vFMon + "-" + vY2;
			break;

		case "DD\/MM\/YYYY" :
			vData = vDD + "\/" + vMonth + "\/" + vY4;
			break;
		case "DD\/MM\/YY" :
			vData = vDD + "\/" + vMonth + "\/" + vY2;
			break;
		case "DD-MM-YYYY" :
			vData = vDD + "-" + vMonth + "-" + vY4;
			break;
		case "DD-MM-YY" :
			vData = vDD + "-" + vMonth + "-" + vY2;
			break;
	        case "YYYY-MM-DD" :
	        	vData = vY4 + "-" + vMonth + "-" + vDD;
	        	break;

		default :
			vData = vMonth + "\/" + vDD + "\/" + vY4;
	}

	return vData;
}

function Build(p_item, p_month, p_year, p_format) {
	var p_WinCal = ggWinCal;
	gCal = new Calendar(p_item, p_WinCal, p_month, p_year, p_format);

	// Customize your Calendar here..
	gCal.gBGColor="white";
	gCal.gLinkColor="black";
	gCal.gTextColor="black";
	gCal.gHeaderColor="darkgreen";

	// Choose appropriate show function
	if (gCal.gYearly)	gCal.showY();
	else	gCal.show();
}

function show_calendar() {
	/*
		p_month : 0-11 for Jan-Dec; 12 for All Months.
		p_year	: 4-digit year
		p_format: Date format (mm/dd/yyyy, dd/mm/yy, ...)
		p_item	: Return Item.
	*/

	p_item = arguments[0];
	if (arguments[1] == null)
		p_month = new String(gNow.getMonth());
	else
		p_month = arguments[1];
	if (arguments[2] == "" || arguments[2] == null)
		p_year = new String(gNow.getFullYear().toString());
	else
		p_year = arguments[2];
	if (arguments[3] == null)
		//p_format = "MM/DD/YYYY";
		p_format = "YYYY-MM-DD";
	else
		p_format = arguments[3];

	vWinCal = window.open("", "Calendar",
		"width=250,height=250,status=no,resizable=no,top=200,left=200");
	vWinCal.opener = self;
	ggWinCal = vWinCal;

	Build(p_item, p_month, p_year, p_format);
}
/*
Yearly Calendar Code Starts here
*/
function show_yearly_calendar(p_item, p_year, p_format) {
	// Load the defaults..
	if (p_year == null || p_year == "")
		p_year = new String(gNow.getFullYear().toString());
	if (p_format == null || p_format == "")
		p_format = "MM/DD/YYYY";

	var vWinCal = window.open("", "Calendar", "scrollbars=yes");
	vWinCal.opener = self;
	ggWinCal = vWinCal;

	Build(p_item, null, p_year, p_format);
}
<!--日历显示结束-->




	/**
	 * name: getLeftPos(objName)
	 * purpose: 取得一个HTML Element的模坐标值
	 * parameter: objName --Element的ID name.
	 * return: 横坐标
	 */
	function getLeftPos(objName)
	{
		var posLeft = 0;
		var obj1 = document.all(objName);
		while( obj1 != null )
		{
			posLeft += obj1.offsetLeft;
			obj1 = obj1.offsetParent;
		}
		return posLeft;
	}

	/**
	 * name: getTopPos(objName)
	 * purpose: 取得一个HTML Element的纵坐标值
	 * parameter: objName --Element的ID name.
	 * return: 纵坐标.
	 */
	function getTopPos(objName)
	{
		var posTop = 0;
		var obj1 = document.all(objName);
		while( obj1 != null )
		{
			posTop += obj1.offsetTop;
			obj1 = obj1.offsetParent;
		}
		return posTop;
	}


	/**
	 * name: getSelectValue(selectName)
	 * purpose:	取得一个select控件已选的一个或多个值,如有多个值，中间用逗号隔开
	 * parameter:	selectName	--控件name
	 * return:	已选定的值，如有多个，中间用逗号隔开
	 */
	function getSelectValue(selectName)
	{
		var objSelect = document.all(selectName);
		var selectedValue = "";
		for(var i = 0; i < objSelect.options.length; i++)
		{
			if (objSelect.options(i).selected)
			{
				if (objSelect.options(i).value != "")
					selectedValue += objSelect.options(i).value + ",";
			}
		}
		return selectedValue.substring(0, selectedValue.length - 1);
	}


	/**
	 * name: getSelectText(selectName)
	 * purpose:	取得一个select控件已选的一个或多个值的文本,如有多个值，中间用逗号隔开
	 * parameter:	selectName	--控件name
	 * return:	已选定的值，如有多个，中间用逗号隔开
	 */
	function getSelectText(selectName)
	{
		var objSelect = document.all(selectName);
		var selectedText = "";
		for(var i = 0; i < objSelect.options.length; i++)
		{
			if (objSelect.options(i).selected)
			{
				if (objSelect.options(i).value != "")
					selectedText += objSelect.options(i).text + ",";
			}
		}
		return selectedText.substring(0, selectedText.length - 1);
	}

	/**
	 * name: setSelectValue(selectName, strValue)
	 * purpose: 设定一个select控件的值
	 * parameter: selectName	--select控件的name;
	 *			  strValue  	--预选值，如有多个值，中间用逗号隔开
	 */
	function setSelectValue(selectName, strValue)
	{
		if ( strValue == "" ) return;

		var objSelect	= document.all(selectName);

		var strArray = strValue.split(",");
		for ( var i = 0; i < objSelect.options.length; i++)
		{
			objSelect.options(i).selected = false;
			for ( var k = 0; k < strArray.length; k++ )
			{
				if ( objSelect.options(i).value == strArray[k] )
				{
					objSelect.options(i).selected = true;
					break;
				}
			}
		}
	}


	/**
	 * 检查一个checkbox是否有被check的记录
	 * checkElementName -- HTML元素的name
	 * return: 如果有check的记录，返回true,反之，false
	 */
    function hasChecked(checkElementName)
    {
        var objCheck = document.all(checkElementName);

        if ( objCheck != null )
        {
            var len = objCheck.length;
            if ( isNaN(parseInt(len)) ) return objCheck.checked;
            for ( var i = 0; i < len; i++ )
                if ( objCheck[i].checked ) return true;
        }
        return false;
    }

	/**
	 * checkBox全选
	 * checkElementName -- HTML元素的name
	 * return: none
	 */
    function checkAll(checkElementName)
    {
        var objCheck = document.all(checkElementName);

        if ( objCheck != null )
        {
            var len = objCheck.length;
            if ( isNaN(parseInt(len)) ) objCheck.checked = true;
            for ( var i = 0; i < len; i++ )
                objCheck[i].checked = true;
        }
    }

	/**
	 * checkBox的check全取消
	 * checkElementName -- HTML元素的name
	 * return: none
	 */
    function cancelCheck(checkElementName)
    {
        var objCheck = document.all(checkElementName);

        if ( objCheck != null )
        {
            var len = objCheck.length;
            if ( isNaN(parseInt(len)) ) objCheck.checked = false;
            for ( var i = 0; i < len; i++ )
                objCheck[i].checked = false;
        }
    }

	/**
	 * 对checkbox值取反，即选定的变成不选定，反之变成选定
     * checkElementName可以是多个checkbox名，中间用逗号隔开
	 * checkElementName -- HTML元素的name
	 * return: none
	 */
	function reverseCheck(checkElementName){

		if(checkElementName.charAt(0) == ",")
		{
			//去掉前面逗号
	   		checkElementName = checkElementName.substring(1, checkElementName.length - 1);
	   	}

		if(checkElementName.charAt(checkElementName.length - 1) == ",")
		{
			//去掉后面逗号
	   		checkElementName = checkElementName.substring(0,checkElementName.length - 1);
	   	}

		 checkElementNameArray = checkElementName.split(",");

		 for(var iStep = 0; iStep < checkElementNameArray.length; iStep++){
		 	var objArray = document.all(checkElementNameArray[iStep]);
		 	if(objArray != null){
		    	var len = objArray.length;
		    	if ( isNaN(parseInt(len)) )
		    	{
		    		if ( objArray.checked )
		    			objArray.checked = false;
		    		else
		    			objArray.checked = true;

		    		continue;
		    	}
		     	for(var ii = 0; ii < len; ii++){
			   		if(objArray[ii].checked == true){
			        	objArray[ii].checked = false;
			   		} else {
			   	    	objArray[ii].checked = true;
			   		}
		    	}
			}
		}
	}

	/**
	 * name: getCheckValue(chkName)
	 * purpose:	取得一个checkbox控件已选的一个或多个值,如有多个值，中间用逗号隔开
	 * parameter:	chkName	--控件name
	 * return:	已选定的值，如有多个，中间用逗号隔开
	 */
	function getCheckValue(chkName)
	{
		var objCheck = document.all(chkName);
		var chkedValue = "";

		var chkLen = objCheck.length;
		if ( isNaN(parseInt(chkLen)) )
		{
			if ( objCheck.checked ) return objCheck.value;
		}

		for(var i = 0; i < chkLen; i++)
		{
			if (objCheck[i].checked)
			{
				if (objCheck[i].value != "")
					chkedValue += objCheck[i].value + ",";
			}
		}
		return chkedValue.substring(0, chkedValue.length - 1);
	}

    /**
     * 获取一组checkbox或radio对象中，被选中的对象的值构成的数组。
     */
	function GetCheckedValueArray(elementName, strPropertyName) {
		var obj = GetObject(elementName);
	 	var arrChecked = new Array();
		var nLength = GetLength(elementName);
		switch (nLength) {
			case 0:
				break;
			case 1:
				if (obj.checked) {
					arrChecked[0] = GetElementProperty(obj, strPropertyName);
				}
				break;
			default:
				for (var i = 0, j = 0; i < nLength; i++) {
					if (obj.item(i).checked) {
			            arrChecked[j++] = GetElementProperty(obj.item(i), strPropertyName);
			        }
				}
		}
	    return arrChecked;
	}


    function GetCheckedPropertyValue(elementName, strPropertyName)
    {
		var obj = GetObject(elementName);
		var strSeparator = ", ";
	 	var strValues = "";
		var nLength = GetLength(elementName);
		switch (nLength) {
			case 0:
				break;
			case 1:
				if (obj.checked) {
					strValues += GetElementProperty(obj, strPropertyName);
				}
				break;
			default:
				for (var i = 0; i < nLength; i++) {
					if (obj.item(i).checked) {
			            strValues += ((strValues == "")? "" : strSeparator)
			            	+ GetElementProperty(obj.item(i), strPropertyName);
			        }
				}
		}
	    return strValues;
    }

    function GetElementProperty(oElement, strPropertyName) {
		if (strPropertyName == null)
			return oElement.value;
		else
			return eval("oElement." + strPropertyName);
	}


	/**
	 * 若有多个被选中，则用', '分隔。
	 */
    function GetCheckedValue(elementName) {
		var obj = GetObject(elementName);
		var nLength = GetLength(elementName);
		var strValue = "";
		switch (nLength) {
			case 0:
				break;
			case 1:
				if (obj.checked)
					strValue = obj.value;
				break;
			default:
				for (var i = 0; i < nLength; i++) {
					if (obj.item(i).checked) {
						if (strValue == "")
							strValue = obj.item(i).value;
						else
							strValue += "," + obj.item(i).value;
			        }
				}
		}
	    return strValue;

    }

	function SetCheckedValue(elementName, strValue)
	{
		var obj = GetObject(elementName);
		var nLength = GetLength(elementName);
		var nChecked = 0;
		switch (nLength) {
			case 0:
				break;
			case 1:
				if (obj.value == strValue) {
					obj.checked = true;
					nChecked++;
				}
				break;
			default:
				for (var i = 0; i < nLength; i++) {
					if (obj.item(i).value == strValue) {
						obj.item(i).checked = true;
						nChecked++;
			        }
				}
		}
		return nChecked;
	}

	/**
	 * name: setCheckValue(checkElementName, strValue)
	 * purpose: 设定一个checkbox控件的值
	 * parameter: checkElementName	--checkbox控件的name;
	 *			  strValue  	--预选值，如有多个值，中间用逗号隔开
	 */
	function setCheckValue(checkElementName, strValue)
	{
		if ( strValue == "" ) return;

		var objCheckbox	= document.all(checkElementName);
        cancelCheck(checkElementName);

		var strArray = strValue.split(",");

		for ( var i = 0; i < strArray.length; i++)
		{

			chkOptionLen = objCheckbox.length;
			if ( isNaN(parseInt(chkOptionLen)) )
			{
				if ( objCheckbox.value == strArray[i] )
					objCheckbox.checked;
				continue;
			}

			for ( var k = 0; k < chkOptionLen; k++ )
			{
				if ( objCheckbox[k].value == strArray[i] )
				{
					objCheckbox[k].checked = true;
					break;
				}
			}
		}
	}
//删除表中的一行
function delRows(tableIdName,iRowIndex){
	var tb=document.all(tableIdName);
	if(tb && tb.tagName=="TABLE")
	{
	   tb.deleteRow(iRowIndex) ;
	}
}
//在table中增加tr行
//tableIdName:table表的ID号名称，类型为字符串
//trClassName:tr行的样式类名称，类型为字符串
//arrHtml:tr行的td中的内容，类型为字符串数组
function addDetails(tableIdName,trClassName,arrHtml)
{
	var tb=document.all(tableIdName);
	if(tb && tb.tagName=="TABLE")
	{

	   var rowId=tb.rows.length;
	   var row=tb.insertRow(rowId);
	   var cols=arrHtml.length;
	   if(row)
	   {
	      row.className=trClassName ;
	      for(var j=0;j<cols;j++)
	      {
		 var cell=row.insertCell(j);
		 if(cell)
		 {
		    cell.innerHTML=arrHtml[j];
		 }
	       }
	    }
	}
}

function addTableRowAt(tableIdName,trClassName,tdClassName,arrHtml,rowIndex)
{
	var tb=document.all(tableIdName);
	var i = rowIndex;
	if(tb && tb.tagName=="TABLE")
	{
	   var rowId=tb.rows.length - 1;
	   if (rowId < i || i < 0)
	   {
	   		i = rowId;
	   }
	   var row=tb.insertRow(i);
	   var cols=arrHtml.length;
	   if(row)
	   {
	      row.className=trClassName ;
	      for(var j=0;j<cols;j++)
	      {
		 var cell=row.insertCell(j);
		 if(cell)
		 {
		 	cell.className=tdClassName;
		    cell.innerHTML=arrHtml[j];
		 }
	       }
	    }
	}
}

	/**
	 * 在表格中动态增加一行
	 * @param trName --需要复制的trName名
	 * @param funcInit --复制一行后需执行的函数。
	 *                   注意：该函数执行时会传递一个index参数（已复制多少行的index,从0开始)
	 */
	function addRow(trName, funcInit)
	{
		var objTr = document.all(trName);

		var len = objTr.length;
		if ( isNaN(parseInt(len)) )
		{
			objTr.insertBefore(objTr.cloneNode(true));
			len = 1;
		} else {
			objTr[len - 1].insertBefore(objTr[len - 1].cloneNode(true));
		}
		funcInit(len);	//传递index给初始化函数
	}

	/**
	 * 在表格中删除一行
	 * @param trName --需要删除的trName名，只删除同ID名tr的最后一行，如只发现一个tr,拒绝删除。
	 */
	function deleteRow(trName)
	{
		var objTr = document.all(trName);

		var len = objTr.length;
		if ( isNaN(parseInt(len)) || len <= 1 )
		{
			alert("不能删除所有行！");
		} else {
			objTr[len - 1].removeNode(true);
		}
	}


/**
 * 在一个对象集合中找到具体某个对象的index,该对象通常由this获得
 * @param obj -需要获得index的对象
 * @return 该对象的index
 */
function findObjIndex(obj)
{
	var objCollection = document.all(obj.name);
	var objLen = objCollection.length;
	if ( isNaN(objLen) ) return NaN;

	for ( var i = 0; i < objLen; i++ )
	{
		if ( obj == objCollection[i] )
			return i;
	}
	return NaN;
}

/**
 * 取得两个日期间隔的天数
 * @param dateValue1 -表启始日期的字符串，yyyy-mm-dd格式
 * @param dateValue2 -表结束日期的字符串，yyyy-mm-dd格式
 * @return 返回间隔的天数
 */
function getDayInterval(dateValue1, dateValue2)
{
	var objDate1 = dateValue1;
	if (isNaN(objDate1))
		objDate1 = getDate(dateValue1);
	var objDate2 = dateValue2;
	if (isNaN(objDate2))
		objDate2 = getDate(dateValue2);

	if ( isNaN(objDate1) || isNaN(objDate2) )
		return 0;

	var dayMill = 24 * 60 * 60 * 1000;

	var date1Mill = objDate1.getTime();
	var date2Mill = objDate2.getTime();

	return (date2Mill - date1Mill) / dayMill;
}

/**
 * 将yyyy-mm-dd格式的字符串转换成Date对象，如果是非法的格式，返回NaN
 * 也可以用此方法判断是否为合法的日期字符串
 * @param strDate -代表日期的字符串
 */
function transDate(strDate)
{
	if ( strDate == null || strDate == "" ) return NaN;

	var eleArray = strDate.split("-");
	if ( eleArray.length != 3 ) return NaN;

	return new Date(eleArray[0], eleArray[1], eleArray[2]);
}

/**
 * 激活名称被字符串数组所包含的所有元素。
 * @return
 */
function Enable(strElements)
{
    SetAbility(strElements, false);
}

/**
 * 禁止名称被字符串数组所包含的所有元素。
 * @return
 */
function Disable(strElements)
{
    SetAbility(strElements, true);
}

function SetAbility(strElements, bDisabled)
{
    for (var i = 0; i < strElements.length; i++) {
        if (document.all(strElements[i]) == null)
            continue;
        else if (isNaN(document.all(strElements[i]).length))
            document.all(strElements[i]).disabled = bDisabled;
        else {
            for (j = 0; j < document.all(strElements[i]).length; j++)
                document.all(strElements[i], j).disabled = bDisabled;
        }
    }
}

function SetEnable(elementName, bInheritable)
{
	SetEnability(elementName, true, bInheritable);
}

function SetDisable(elementName, bInheritable)
{
	SetEnability(elementName, false, bInheritable);
}

/**
 * 设置元素是否可用。
 * @param bEnabled
 *     元素是否可用
 * @param bInheritable
 *     元素的子元素是否继承其disabled属性
 */
function SetEnability(elementName, bEnabled, bInheritable)
{
	var oElement = GetObject(elementName);
	var nLength = GetLength(elementName);
	switch (nLength) {
		case 0:
			return;
		case 1:
			oElement.disabled = !bEnabled;
			if (bInheritable != false)
				SetChildrenEnability(oElement, bEnabled, bInheritable);
			return;
		default:
			for (var i = 0; i < nLength; i++) {
				oElement.item(i).disabled = !bEnabled;
				SetChildrenEnability(oElement.item(i), bEnabled, bInheritable);
			}
			return;
	}
}

function SetChildrenEnability(oParentElement, bEnabled, bInheritable)
{
	for (var i = 0; i < oParentElement.children.length; i++) {
		SetEnability(oParentElement.children(i), bEnabled, bInheritable);
	}
}

function openWindow(URL, nHeight, nWidth)
{
	var sFeatures = "menubar=no, toolbar=no, scrollbars=yes, resizable=yes";
	nHeight = parseInt(nHeight);
	nWidth = parseInt(nWidth);
	if (!isNaN(nHeight))
		sFeatures += ", height=" + nHeight;
	if (!isNaN(nWidth))
		sFeatures += ", width=" + nWidth;
    window.open(URL, "_blank", sFeatures);

}

/**
 * 如果单位发生改变，则input框的值根据汇率发生相应改变
 */
function changePrice(inputName, toMoneyType, fToRmb)
{
	var objInput;
	if ( typeof(inputName) == "object" )
		objInput = inputName;
	else
		objInput = document.all(inputName);

	if ( toMoneyType == 1 )	//由美元转换成人民币
	{
		objInput.value = (objInput.value * fToRmb).toFixed(2);
	} else {					//由人民币转换成美元
		objInput.value = (objInput.value / fToRmb).toFixed(2);
	}
}

// 取得一组<input type="radio">中被选中的对象的值(.value)。
function getRadioValue(optionElement)
{
    for (var i = 0; i < optionElement.length; i++)
    {
        if (optionElement[i].checked)
            return optionElement[i].value;
    }
    return null;
}


/**
 * 装载并解析xml文档，更新目标<select>对象的<option>子集。
 */
function changeSelect(
    sltTarget,
    strXMLUrl,
    strParamNameOfValue,
    strParamNameOfText,
    strDefaultValue,
    bOptionUnLtdNeeded
    )
{
    sltTarget.innerText = "";

    var oOption = document.createElement("OPTION");
    oOption.value = oOptionUnLtd.value;
    oOption.text  = oOptionUnLtd.text ;
    if (bOptionUnLtdNeeded)
        sltTarget.add(oOption);

    // 加载指定的XML文件。若加载失败，终止函数执行。
    var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async = false;

    if (!xmlDoc.load(strXMLUrl)) {
        return false;
    }

    // 解析XML流，并生成option对象添加到目标select对象中。
    var itemList = xmlDoc.documentElement.childNodes;
    for (i = 0; i < itemList.length; i++) {
        var oOption   = document.createElement("OPTION");
        oOption.value    = itemList.item(i).getAttribute(strParamNameOfValue);
        oOption.text     = itemList.item(i).getAttribute(strParamNameOfText);
        sltTarget.add(oOption);
        oOption.selected = (oOption.value == strDefaultValue);
    }
    return true;
}

function parseXMLToTable(
	tblTarget,
    strXMLUrl,
    strParamNameOfValue,
    strParamNameOfText,
    strDefaultValue,
    strInputName,
    strInputType,
    bUnLtdNeeded,
    nItemsPerLine,
    strSeparator
	)
{
	bUnLtdNeeded == IsTrue(bUnLtdNeeded);
	if (nItemsPerLine == null || isNaN(nItemsPerLine))
		nItemsPerLine = 1;

	var j = 0;
	var oTR, oTD;
	while (tblTarget.rows.length > 0) {
		tblTarget.rows(0).removeNode(true);
	}

    if (bUnLtdNeeded) {
		oTR = tblTarget.insertRow();
		oTD = oTR.insertCell();
    	oTD.innerHTML = "<input type=\"" + strInputType
    		+ "\" name=\"" + strInputName + "\" value=\"0\">";
    	j++;
    }

    // 加载指定的XML文件。若加载失败，终止函数执行。
    var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async = false;

    if (!xmlDoc.load(strXMLUrl)) {
        return false;
    }

    // 解析XML流，并生成option对象添加到目标select对象中。
    var itemList = xmlDoc.documentElement.childNodes;
    for (i = 0; i < itemList.length; i++, j++) {
    	if (j % nItemsPerLine == 0)
    		oTR = tblTarget.insertRow();
    	oTD = oTR.insertCell();
    	oTD.innerHTML = "<input type=\"" + strInputType
    		+ "\" name=\"" + strInputName
    		+ "\" value=\"" + itemList.item(i).getAttribute(strParamNameOfValue)
    		+ "\" alt=\"" + itemList.item(i).getAttribute(strParamNameOfText)
    		+ "\">" + itemList.item(i).getAttribute(strParamNameOfText);
    }
    return true;
}

function Hide(strElement) {
    SetDisplay(strElement, "none");
}

function Show(strElement, bOnEventPosition) {
    SetDisplay(strElement, "inline");
    var oElement = GetObject(strElement);
    if (bOnEventPosition == true) {
    	if (event != null) {
	    	oElement.style.left = event.x;
	    	oElement.style.top = event.y;
    	}
    }
}

function SetDisplay(strElement, strDisplay) {
	var oElement = GetObject(strElement);
	if (oElement == null)
		return;
	if (typeof(strDisplay) == "string")
		strDisplay = strDisplay.toLowerCase();
	if (strDisplay == true || strDisplay == "true")
		strDisplay = "inline";
	else if (strDisplay == false || strDisplay == "false")
		strDisplay = "none";
    if (oElement == null)
        return false;
    var nLength = oElement.length;
    if (isNaN(nLength))
    	oElement.style.display = strDisplay;
    for (var i = 0; i < nLength; i++) {
        oElement.item(i).style.display = strDisplay;
    }
    return true;
}

// 取元素数组的长度。
function GetLength(elementName)
{
    var obj = GetObject(elementName);
    if (obj == null)
        return 0;
    var nLength = obj.length;
    if (isNaN(nLength) || document.all(obj.name, 1) == null)
        nLength = 1;
    return nLength;
}

function GetChildrenLength(elementName)
{
	var obj = GetObject(elementName);
	if (obj == null)
		return -2;
	if (GetLength(elementName) > 1)
		return -1;
	return obj.children.length;
}

/**
 * 取得一组checkbox或radio对象中(每一个)被选中的元素的序号。
 * @return
 *     正常   IndexValue
 *     异常
 *          -1 对象不存在
 *          -2 没有元素被选中
 */

function GetCheckedIndex(strElementName)
{
    var nLength = GetLength(strElementName);
    if (nLength <= 0)
        return -1;
    for (var i = 0; i < nLength; i++) {
        if (document.all(strElementName, i).checked)
            return i;
    }
    return -2;
}

/**
 * 返回一组同名checkbox元素中被选中元素的序号组成的数组。
 * @param strElementName
 *     元素(checkbox)名(或ID)
 * @param bValidOnDisabled (default: true)
 *     当元素disabled属性为真时，是否将元素计入。
 */
function GetCheckedIndexArray(elementName, bValidOnDisabled) {
	var obj = GetObject(elementName);
 	var arrChecked = new Array();
	var nLength = GetLength(elementName);
	if (bValidOnDisabled == null)
		bValidOnDisabled = true;
	switch (nLength) {
		case 0:
			break;
		case 1:
			if (obj.checked && (!obj.disabled || bValidOnDisabled)) {
				arrChecked[0] = 0;
			}
			break;
		default:
		for (var i = 0, j = 0; i < nLength; i++) {
			if (obj.item(i).checked &&
				(!obj.item(i).disabled || bValidOnDisabled)) {
	            arrChecked[j++] = i;
	        }
		}
	}
    return arrChecked;
}

function GetCheckedLength(elementName, bValidOnDisabled) {
	return GetCheckedIndexArray(elementName, bValidOnDisabled).length;
}

/**
 * 根据表单元素的不同类别，引用不同的方法取其值。
 */
function GetValue(elementName) {
	var oElement = GetObject(elementName);
	if (oElement == null)
		return;
	if (GetLength(elementName) > 1)
		oElement = oElement.item(0);
    if (oElement.tagName == "SELECT")
        return getSelectValue(elementName);
    if (oElement.tagName == "INPUT")
        if (oElement.type == "radio" || oElement.type == "checkbox")
            return GetCheckedValue(elementName);
        else if (oElement.type == "text" || oElement.type == "hidden")
            return oElement.value;
}

/**
 * 若参数为一对象，则直接返回此对象；若参数为一字符串，则返回以此字符串为ID的对象(或对象集合)。
 */
function GetObject(elementName) {
	var obj;
	if (typeof elementName == "object") {
		obj = elementName;
	}
	else {
		obj = document.all(elementName);
	}
	return obj;
}

/**
 * 重设对话框的尺寸。
 * @bKeepCenter
 *     是否将对话框的中心保持在原位置
 */
function ResizeDialog(oDialog, nHeight, nWidth, bKeepCenter) {
	if (bKeepCenter != false) {
	    oDialog.dialogTop = parseInt(parent.dialogTop) -
	        (nHeight - parseInt(parent.dialogHeight)) / 2;
	    oDialog.dialogLeft = parseInt(parent.dialogLeft) -
	        (nWidth - parseInt(parent.dialogWidth)) / 2;
	}
    oDialog.dialogHeight = nHeight + "px";
    oDialog.dialogWidth  = nWidth + "px";
}


function GenNumSelectOptions(nFirst, nLast, nDefaultValue) {
    var strHtml = "";
	for (var i = nFirst; i <= nLast; i++) {
        strHtml += "<option value='" + i + "'>" + i + "</option>";
    }
    document.write(strHtml);
}

function Move(strElement, nHorizontal, nVertical) {
	var oElement = GetObject(strElement);
	oElement.style.left = oElement.offsetLeft + nHorizontal;
	oElement.style.top = oElement.offsetTop + nVertical;
}

function SetMousePosition() {
	MOUSE_X = event.x;
	MOUSE_Y = event.y;
}

function ReleaseMouseElement() {
	MOUSE_ELEMENT = null;
}

function MoveMouseElement() {
	if (MOUSE_ELEMENT != null) {
		var nHorizontal = event.x - MOUSE_X;
		var nVertical   = event.y - MOUSE_Y;
		Move(MOUSE_ELEMENT, nHorizontal, nVertical);
		MOUSE_X = event.x;
		MOUSE_Y = event.y;
	}
}

function Init_Func_MoveWithMouse() {
	var strHTML =
		  "\n<script language=\"JavaScript\" for=\"document\" event=\"onmousedown\">"
		+ "\n\tSetMousePosition();"
		+ "\n</script>"
		+ "\n"
		+ "\n<script language=\"JavaScript\" for=\"document\" event=\"onmouseup\">"
		+ "\n\tReleaseMouseElement();"
		+ "\n</script>"
		+ "\n"
		+ "\n<script language=\"JavaScript\" for=\"document\" event=\"onmousemove\">"
		+ "\n\tMoveMouseElement();"
		+ "\n</script>";
	document.write(strHTML);
}

function IsVacant(str) {
	return (str == null || IsSpace(str));
}

function GetIndex(elementName, currentElement) {
	var oElement = GetObject(elementName);
	var nLength = GetLength(elementName);
	switch (nLength) {
		case 0:
			return -2;
		case 1:
			if (oElement == currentElement)
				return 0;
			break;
		default:
			for (var i = 0; i < nLength; i++) {
				if (oElement.item(i) == currentElement)
					return i;
			}
	}
	return -1;
}

function SetVisibility(elementName, strVisibility) {
	var oElement = GetObject(elementName);
	if (oElement == null)
		return;
	if (strVisibility == true)
		strVisibility = "visible";
	else if (strVisibility == false)
		strVisibility = "hidden";
	oElement.style.visibility = strVisibility;
}

function GetParentElement(oElement, parentTagName) {
    oElement = oElement.parentNode;
	while (oElement.tagName != null && oElement.tagName != parentTagName) {
		oElement = oElement.parentNode;
	}
	return oElement;
}

function GetParentDiv(oElement) {
	return GetParentElement(oElement, "DIV");
}

function GetParentTR(oElement) {
	return GetParentElement(oElement, "TR");
}

function GetParentTable(oElement) {
	return GetParentElement(oElement, "TABLE");
}

function GetParentTH(oElement) {
    return GetParentElement(oElement, "TH");
}

function GetParentTD(oElement) {
    return GetParentElement(oElement, "TD");
}
function SetElementProperty(oElement, strPropertyName, strPropertyValue, bInheritable)
{
	if (strPropertyName == null)
		oElement.value = strPropertyValue;
	else
		eval("oElement." + strPropertyName + "=\"" + strPropertyValue + "\"");

	if (bInheritable)
		for (var i = 0; i < oElement.children.length; i++) {
			SetElementProperty(oElement.children(i), strPropertyName, strPropertyValue, bInheritable);
		}
}

/**
 * 设置元素的属性值。
 * @param elementName
 *    元素名称或对象
 * @param attributeName
 *    属性名称
 * @param value
 *    属性值
 */
function SetAttribute(elementName, attributeName, value, bInheritable) {
	var oElement = GetObject(elementName);
	var nLength = GetLength(elementName);
	switch (nLength) {
		case 0:
			return;
		case 1:
			var namedItem = document.createAttribute(attributeName);
			namedItem.value = value;
			oElement.attributes.setNamedItem(namedItem);
			if (bInheritable == true)
				SetChildrenAttribute(oElement, attributeName, value, bInheritable);
			return;
		default:
			for (var i = 0; i < nLength; i++) {
				var namedItem = document.createAttribute(attributeName);
				namedItem.value = value;
				oElement.item(i).attributes.setNamedItem(namedItem);
				if (bInheritable == true)
					SetChildrenAttribute(oElement.item(i), attributeName, value, bInheritable)
			}
			return;
	}
}

function SetChildrenAttribute(oParentElement, attributeName, value, bInheritable)
{
	for (var i = 0; i < oParentElement.children.length; i++) {
		SetAttribute(oParentElement.children(i), attributeName, value, bInheritable);
	}
}

var CONTROL_NAME = new Array();
CONTROL_NAME["text"] = "text";
CONTROL_NAME["select"] = "select";

/**
 * 在一组控件中选择指定的控件并使能、使可视。
 * @param targetElementNamePrefix
 *	   控件名的前缀
 * @param controlName
 *     指定的控件类型
 * ［注］这组控件应当具有相同的前缀名，且以控件类型作为后缀。如
 *    <input type="button" id="sample_button">
 *    <select id="sample_select">...</select>
 *    <input type="text" id="sample_text">
 */
function SelControl(targetElementNamePrefix, controlName) {
    for (var i in CONTROL_NAME) {
        var bOn = (i == controlName);
        var strName = targetElementNamePrefix + "_" + i;
        if (document.all(strName) == null)
            continue;
        SetDisplay(strName, bOn);
        SetEnability(strName, bOn);
    }
}

function LoadImage(targetImg, imageSrc, restrainedWidth, restrainedHeight) {
    var oImage = new Image();
    oImage.src = imageSrc;
    restrainedWidth  += 0.0;
    restrainedHeight += 0.0;
    while (oImage.width == 0) {
        oImage.width += 1;
    }
    while (oImage.height == 0) {
        oImage.height += 1;
    }
    if ( (0.0 + oImage.width) / oImage.height >
        restrainedWidth / restrainedHeight ) {
        targetImg.width  = restrainedWidth;
        targetImg.height = oImage.height * (restrainedWidth / oImage.width);
    }
    else {
        targetImg.height = restrainedHeight;
        targetImg.width  = oImage.width * (restrainedHeight / oImage.height);
    }
    targetImg.src = oImage.src;
}

function ShowAltInDiv(strDivName)
{
    /**
     * “标题”或“简要内容”可能较长，对于长度超过限制的字段，
     * 在列表中只显示部分内容(缩略显示)。当鼠标移到相应的<TD>
     * 元素上时，判断此字段是否属于缩略显示，若是，则在事先定义
     * 好的<div id="divLongString">中显示其完整内容。同时
     * 重新定位div元素，使之覆盖在原<TD>位置上。
     */
    var srcElement = event.srcElement;
    var strAlt = srcElement.alt;
    var strText = srcElement.innerText;
    var oTable = GetParentTable(srcElement);
    var oDiv = GetObject(strDivName)
    if (strAlt.length > strText.length) {
        oDiv.style.display = "inline";
        oDiv.innerText = srcElement.alt;
        oDiv.style.width = srcElement.offsetWidth - 1;
        oDiv.style.left = srcElement.offsetLeft + oTable.offsetLeft + 1;
        oDiv.style.top = srcElement.offsetTop + oTable.offsetTop + 1;
    }

}


//Email
function SendEmail()
{
	//用于激活“待办事宜提示”功能。
	 var ls_OpenType = "toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=yes,resizable=yes,width=300,height=200";
	 var lw_Main = window.open("/pub/EF/email.jsp", "", ls_OpenType);
	 lw_Main.resizeTo(640, 480);
	 lw_Main.moveTo(0, 0);
}


// 认领进帐单
function ClaimIncome()
{
	 var ls_OpenType = "toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=yes,resizable=yes,width=300,height=200";
	 var lw_Main = window.open("", "", ls_OpenType);
	 lw_Main.resizeTo(640, 480);
	 lw_Main.moveTo(0, 0);
}

// 去报销
function ClaimOutgoing()
{
	 var ls_OpenType = "toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=yes,resizable=yes,width=300,height=200";
	 var lw_Main = window.open("", "", ls_OpenType);
	 lw_Main.resizeTo(640, 480);
	 lw_Main.moveTo(0, 0);
}



// 用户登陆
function Logon(thisuserid)
{
	if(thisuserid==null)
			thisuserid="";
	 var ls_OpenType = "toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=yes,resizable=yes,width=300,height=200";
	 var lw_Main = window.open("/pub/EF/logon.jsp?userid="+thisuserid, "", ls_OpenType);
	 lw_Main.resizeTo(640, 480);
	 lw_Main.moveTo(0, 0);
}
//登陆退出
function LogOut( thisuserid)
{
	if(thisuserid==null)
			thisuserid="";
	 var ls_OpenType = "toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=yes,resizable=yes,width=300,height=200";
	 var lw_Main = window.open("/pub/EF/logon.jsp?userid="+thisuserid, "", ls_OpenType);
	 lw_Main.resizeTo(640, 480);
	 lw_Main.moveTo(0, 0);
}

function GetAbsoluteCoordinate(oElement)
{
	var nOffsetTop = 0;
	var nOffsetLeft = 0;
    while (oElement.tagName != "BODY") {
    	if (oElement.tagName == "TH" || oElement.tagName == "TD" || oElement.tagName == "TABLE")
    	{
    		nOffsetLeft += oElement.offsetLeft;
    		nOffsetTop += oElement.offsetTop;
    	}
    	oElement = oElement.parentNode;
    }
    var coor = new Coordinate(nOffsetLeft, nOffsetTop);
    return coor;
}

function SetAbsoluteCoordinate(oElement, nX, nY)
{
	oElement.style.left = nX;
	oElement.style.top = nY;
}

function IsTrue(vBoolean)
{
	if (vBoolean == true)
		return true;
	else if (typeof(vBoolean) == "string") {
		if (vBoolean.toLowerCase() == "true")
			return true;
	}
	return false;
}

function FormInspect(oForm)
{
    var collText = oForm.tags("INPUT");
    var nLength = collText.length;
    for (var i = 0; i < nLength; i++) {
        if (collText(i).noblank == "true" &&  IsSpace(collText(i).value)) {
        	if (collText(i).showname == null)
	            alert("请将信息填写完整。\n注意，带*号的是必填项。");
        	else
        		alert(collText(i).showname + "必须填写!");
            collText(i).select();
            return false;
        }
        if (collText(i).nozero == "true" && collText(i).value == "0") {
        	if (collText(i).showname == null)
	            alert("请将信息填写完整。\n注意，带*号的是必填项。");
        	else
        		alert("请选择" + collText(i).showname + "!");
        	return false;
        }
    }
    return true;
}

function isPostCode(str)
{
	if (str.length!=6 || !IsUntrimInt(str)) return false;
	return true;
}

function isNoLongerThan(Expression, nLength)
    {
	return (Expression.length<=nLength);
    }

function chkNoLongerThan(srcElement)
    {
	VALUE=srcElement.value;
	nMaxLength=srcElement.maxlength;
	if(!isNoLongerThan(VALUE,nMaxLength))
	    {
		alert(srcElement.showname+"输入不正确。\n请正确填写长度不长于"+nMaxLength+"的字符串。");
		srcElement.select();
		srcElement.value = srcElement.value.substring(0, nMaxLength);
		return false;
	   }
	return true;
    }

/**
 * 根据给定日期值和差值求出新的日期值。
 * @param dDate
 *     日期对象
 * @param nDayAfter
 *     从当前日期往后推算的天数
 * @return
 *     新的日期对象
 */
function getNewDate(dDate, nDayAfter)
{
    var dayMill = 24 * 60 * 60 * 1000;
    dDate.setTime(dDate.getTime() + dayMill * nDayAfter);
    return dDate;
}

/**
 * 将日期对象转换成字符串。
 * @param dDate
 *     日期对象
 * @return
 *     对应的日期字符串
 */
function getDateString(dDate) {
    return "" + dDate.getYear()
        + "-" + (dDate.getMonth() + 1)
        + "-" + (dDate.getDate() + 1);
}
