   var timeFormat=0;
   var today=new Date();
   var todayWeek=today.getDay();

function buildDateList(listName,xdefault,datetype,notifyfield){
   var tmp,temp,sHTML,bb=10

   var xx=xdefault.lastIndexOf('T00:00:00');
   if(xx>0) xdefault=xdefault.substring(0,xdefault.length+1-xx);
   
   if(xdefault.indexOf('-')==4){
     xdefault=xdefault.substr(5,2)+'/'+xdefault.substr(8,2)+'/'+xdefault.substr(0,4);
   }

   tmp=new Date(xdefault)
   if (isNaN(tmp)) tmp=today;

   var startyear=tmp.getFullYear()-bb,endyear=today.getFullYear()+bb;
   if(datetype=='1'){
     startyear=today.getFullYear()-150,
     endyear=today.getFullYear()+10;
   }

   temp=parseInt(tmp.getMonth()+1)+"/"+tmp.getDate()+"/"+tmp.getFullYear();
   sHTML="<input type='hidden' name='"+listName+"' value='"+temp+"' />\n";
   sHTML+=dateFunction(listName,0,'M',parseInt(tmp.getMonth()+1),1,12,notifyfield)+"\n";
   sHTML+=dateFunction(listName,0,'D',tmp.getDate(),1,getMaxDaysinMonth(tmp.getFullYear(),parseInt(tmp.getMonth()+1)),notifyfield)+"\n"
   if(datetype=='-1')
     sHTML+="<input name='"+listName+"Y' type='hidden' value='"+tmp.getFullYear()+"'/>\n";
   else 
     sHTML+=dateFunction(listName,0,'Y',tmp.getFullYear(),startyear,endyear,notifyfield)+"\n";
 
   return sHTML;
}

function getMaxDaysinMonth(vYear,vMonth)
//  For Month 1--Jan, 12--Dec
{
  if ((vYear==null || parseInt(vYear)<0) || (vMonth==null || parseInt(vMonth)<1 || parseInt(vMonth)>12)) return -1;
  if (vMonth==1 || vMonth==3 || vMonth==5 || vMonth==7 || vMonth==8 || vMonth==10 || vMonth==12)  return 31;
  if (vMonth==4 || vMonth==6 || vMonth==9 || vMonth==11) return 30;
  if ((vMonth==2)&&(isLeapYear(vYear))) {return 29} else {return 28};
}

function isLeapYear(vYear)
{
    if (((vYear % 4)==0) && ((vYear % 100)!=0) || ((vYear % 400)==0)) {return true}
    else {return false};
}

// xName for hidden variable, year,month,week,day droplist object
// mark="Y-year; M-month; W-week; D-day"
// tag=0  initialization, get value from hidden variable
// tag=1  onchange,  indicating by mark
// tag=-1 refresh
function dateFunction(xName,tag,mark,xDefault,minValue,maxValue,notifyfield)
{
	var tmp,xDate,xValue,xOption,tf;
	tag=parseInt(tag);
	mark=mark.toUpperCase();
	var monthName=new Array("January","February","March","April","May","June","July","August","September","October","November","December");
	var weekName=new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");	
	if ((tag==0) || (tag==-1))
	{
          var notifystring="";
          if(notifyfield!=""&&notifyfield!=null){
            notifystring="if(window.notify"+notifyfield+"!=null) notify"+notifyfield+"(\""+xName+"\",document.me.elements[\""+xName+"\"].value);";
          }   
          var sHTML="<select name='"+xName+mark+"' class='content' onchange='javascript:dateFunction(\""+xName+"\",1,\""+mark+"\");"+notifystring+"'>\n";
 
	     for ( var i=minValue; parseInt(i)<=parseInt(maxValue); i++) 
	     {
                      if (tag==-1) {document.me.elements[xName+mark].options[i] = null};  //Do't forget this statement
	          if ((mark=="D")||(mark=="Y")) {xOption=i; xValue=i};
	          if (mark=="M") {xOption=monthName[i-1];xValue=i};
	          if (mark=="W") {xOption=weekName[i-1];xValue=i-1};
	          if (tag==0) 
                      {
                         if (i==xDefault) {tf="selected"} else {tf=''};
                         sHTML+="<option value='"+xValue+"' "+tf+">"+xOption+"</option>\n";
                      }
                      if (tag==-1) 
                     {
		  document.me.elements[xName+mark].options[i-minValue] = new Option(xOption);
		  document.me.elements[xName+mark].options[i-minValue].value = xValue;
		  if (i==xDefault) {document.me.elements[xName+mark].options[i-minValue].selected=true;}
                     }
	    }
                if (tag==0) return sHTML+"</select>";
	 }

	if (tag==1)
	{
	     xValue=document.me.elements[xName+mark][document.me.elements[xName+mark].selectedIndex].value;
                 vDate=new Date(document.me.elements[xName].value);
		if (mark=="Y") 
		{
  		    var theDay=(document.me.elements[xName+"D"][document.me.elements[xName+"D"].selectedIndex].value>getMaxDaysinMonth(xValue,parseInt(vDate.getMonth()+1))?getMaxDaysinMonth(xValue,parseInt(vDate.getMonth()+1)):vDate.getDate());
		    xDate=new Date(xValue,vDate.getMonth(),theDay);
		    if (! isNaN(xDate)) document.me.elements[xName].value=parseInt(xDate.getMonth()+1)+"/"+xDate.getDate()+"/"+xDate.getFullYear();
		    if (getMaxDaysinMonth(vDate.getFullYear(),parseInt(vDate.getMonth()+1))!=getMaxDaysinMonth(xDate.getFullYear(),parseInt(xDate.getMonth()+1))) dateFunction(xName,-1,"D",theDay,1,getMaxDaysinMonth(xDate.getFullYear(),parseInt(xDate.getMonth()+1)));
		}
		if (mark=="M") 
		{
		   var theDay=(document.me.elements[xName+"D"][document.me.elements[xName+"D"].selectedIndex].value>getMaxDaysinMonth(vDate.getFullYear(),xValue)?getMaxDaysinMonth(vDate.getFullYear(),xValue):vDate.getDate());
		   xDate=new Date(vDate.getFullYear(),parseInt(xValue-1),theDay);
		   if (! isNaN(xDate)) document.me.elements[xName].value=parseInt(xDate.getMonth()+1)+"/"+xDate.getDate()+"/"+xDate.getFullYear();
		   if (getMaxDaysinMonth(vDate.getFullYear(),parseInt(vDate.getMonth()+1))!=getMaxDaysinMonth(xDate.getFullYear(),parseInt(xDate.getMonth()+1))) dateFunction(xName,-1,"D",theDay,1,getMaxDaysinMonth(xDate.getFullYear(),parseInt(xDate.getMonth()+1)));
		}
		if (mark=="D") 
		{
		   xDate=new Date(vDate.getFullYear(),vDate.getMonth(),xValue)
		   if (! isNaN(xDate)) document.me.elements[xName].value=parseInt(xDate.getMonth()+1)+"/"+xDate.getDate()+"/"+xDate.getFullYear();
		};
	}
}

function buildTimeList(listName,xDefault,iType)
{
   var sHTML,tf,sH,sM,sAP,iMax;
   var now=new Date();
   if (xDefault==null || xDefault=='') {xDefault=now.getHours()+':'+((now.getMinutes()-now.getMinutes()%5)<10?'0':'')+(now.getMinutes()-now.getMinutes()%5)} 
   sHTML="<input type='hidden' name='"+listName+"' value='"+xDefault+"' />\n"
   if (iType==null) {iType=0} else {iType=parseInt(iType)};  //0-12; 1-24
   if (xDefault.indexOf(":")==-1) {sH=xDefault; sM=0} 
   else {sH=xDefault.substring(0,xDefault.indexOf(":")); sM=xDefault.substring(xDefault.indexOf(":")+1,xDefault.length)}

   iMax=24;
   if (iType==0)
   {
      iMax=12;
      if (sH>11) {if (sH>12) sH=sH-12; sAP="PM"} else {if (sH==0) sH=12; sAP="AM"}
   };
   sHTML+="<select class='content' size='1' name='"+listName+"H' onchange='timeListonChange(\""+listName+"\","+iType+")'>\n";
   for (var i=1;i<=iMax;i++)
   {
      if (i==sH) {tf="selected='selected'"} else {tf=""};
      sHTML+="<option value='"+i+"' "+tf+">"+((i<10)?'0'+i:i)+"</option>\n"
   }
   sHTML+="</select>\n"
   sHTML+="<select class='content' size='1' name='"+listName+"M' onchange='timeListonChange(\""+listName+"\","+iType+")'>\n";
   for (i=0;i<60; i+=5)
   {
      if (i==sM) {tf="selected='selected'"} else {tf=""};
      sHTML+="<option value='"+((i<10)?'0'+i:i)+"' "+tf+">"+((i<10)?'0'+i:i)+"</option>\n"
   }
   sHTML+="</select>\n";
   if (iType==0)
   {
      sHTML+="<select class='content' size='1' name='"+listName+"AMPM' onchange='timeListonChange(\""+listName+"\","+iType+")'>\n";
      sHTML+="<option value='0' "+((sAP=="AM")?selected='selected':'')+">AM</option>\n"
      sHTML+="<option value='12' "+((sAP=="PM")?selected='selected':'')+">PM</option>\n"
      sHTML+="</select>\n"
   }
   return sHTML;
}

function timeListonChange(obj,iType)
{
  var h,m,ap;
  if (iType==null) {iType=0} else {iType=parseInt(iType)};  //0-12; 1-24
  h=document.me.elements[obj+'H'][document.me.elements[obj+'H'].selectedIndex].value;
  m=document.me.elements[obj+'M'][document.me.elements[obj+'M'].selectedIndex].value;
  if (iType==0)
  {
      ap=document.me.elements[obj+'AMPM'][document.me.elements[obj+'AMPM'].selectedIndex].value;
      if (h==12)
      { 
         if (ap==0) {h=0} else {h=12}
      } else { h=parseInt(h)+parseInt(ap);}
 
  } 
  document.me.elements[obj].value=h+":"+m;
  //alert("["+document.me.elements[obj].value+"]")
  return;
}


