// Code reviewed by Pankaj on 07/22/2003

         // how reliable is this test?
         isIE = (document.all ? true : false);
	 isDOM = (document.getElementById ? true : false);
	 	
         // Initialize arrays.
         var months = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul",
	 "Aug", "Sep", "Oct", "Nov", "Dec");
         var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31,
            30, 31, 30, 31);
	 var displayMonth = new Date().getMonth();
	 var displayYear = new Date().getFullYear();
	 var displayDivName;
	 var displayElement;
	var gDivList;
         function getDays(month, year) {
            // Test for leap year when February is selected.
            if (1 == month)
               return ((0 == year % 4) && (0 != (year % 100))) ||
                  (0 == year % 400) ? 29 : 28;
            else
               return daysInMonth[month];
         }

         function getToday() {
            // Generate today's date.
            this.now = new Date();
            this.year = this.now.getFullYear();
            this.month = this.now.getMonth();
            this.day = this.now.getDate();
         }

         // Start with a calendar for today.
         today = new getToday();

         function newCalendar(eltName,attachedElement) 
         {
	    if (attachedElement) {
	       if (displayDivName && displayDivName != eltName) 
	       {
	       hideElement(displayDivName);
	       }
	       displayElement = attachedElement;
	    }
	    displayDivName = eltName;
            today = new getToday();
            var parseYear = parseInt(displayYear + '');
            var newCal = new Date(parseYear,displayMonth,1);
            var day = -1;
            var startDayOfWeek = newCal.getDay();
            if ((today.year == newCal.getFullYear()) &&
                  (today.month == newCal.getMonth()))
	    {
               day = today.day;
            }
            var intDaysInMonth =
               getDays(newCal.getMonth(), newCal.getFullYear());
            var daysGrid = makeDaysGrid(startDayOfWeek,day,intDaysInMonth,newCal,eltName)
	    if (isIE) {
	       var elt = document.all[eltName];
	       elt.innerHTML = daysGrid;
            } else if (isDOM) {
	       var elt = document.getElementById(eltName);
	       elt.innerHTML = daysGrid;
	    } else {
	       var elt = document.layers[eltName].document;
	       elt.open();
	       elt.write(daysGrid);
	       elt.close();
	    }
	 }

	 function incMonth(delta,eltName) {
	   displayMonth += delta;
	   if (displayMonth >= 12) {
	     displayMonth = 0;
	     incYear(1,eltName);
	   } else if (displayMonth <= -1) {
	     displayMonth = 11;
	     incYear(-1,eltName);
	   } else {
	     newCalendar(eltName);
	   }
	 }

	 function incYear(delta,eltName) {
	   displayYear = parseInt(displayYear + '') + delta;
	   newCalendar(eltName);
	 }

	 function makeDaysGrid(startDay,day,intDaysInMonth,newCal,eltName) {
	    var daysGrid;
	    var month = newCal.getMonth();
	    var year = newCal.getFullYear();
	    var isThisYear = (year == new Date().getFullYear());
	    var isThisMonth = (day > -1)
	    daysGrid = '<table border=1 bordercolor=#000000 cellspacing=0 cellpadding=2><tr><td bgcolor=#FDFDD8 nowrap>';
	    daysGrid += '<font face="courier new, courier" size=2>';
	    daysGrid += '<a href="javascript:hideElement(\'' + eltName + '\')">x</a>';
	    daysGrid += '&nbsp;&nbsp;';
	    daysGrid += '<a href="javascript:incMonth(-1,\'' + eltName + '\')">&laquo; </a>';

	    daysGrid += '<b>';
	    if (isThisMonth) { daysGrid += '<font color=#000000>' + months[month] + '</font>'; }
	    else { daysGrid += months[month]; }
	    daysGrid += '</b>';

	    daysGrid += '<a href="javascript:incMonth(1,\'' + eltName + '\')"> &raquo;</a>';
	    daysGrid += '&nbsp;&nbsp;&nbsp;';
	    daysGrid += '<a href="javascript:incYear(-1,\'' + eltName + '\')">&laquo; </a>';

	    daysGrid += '<b>';
	    if (isThisYear) { daysGrid += '<font color=#000000>' + year + '</font>'; }
	    else { daysGrid += ''+year; }
	    daysGrid += '</b>';

	    daysGrid += '<a href="javascript:incYear(1,\'' + eltName + '\')"> &raquo;</a><br>';
	    daysGrid += '&nbsp;<font color=#555588><b>Su Mo Tu We Th Fr Sa</b></font>&nbsp;<br>&nbsp;';
	    var dayOfMonthOfFirstSunday = (7 - startDay + 1);
	    for (var intWeek = 0; intWeek < 6; intWeek++) {
	       var dayOfMonth;
	       for (var intDay = 0; intDay < 7; intDay++) {
	         dayOfMonth = (intWeek * 7) + intDay + dayOfMonthOfFirstSunday - 7;
		 if (dayOfMonth <= 0) {
	           daysGrid += "&nbsp;&nbsp; ";
		 } else if (dayOfMonth <= intDaysInMonth) {
		   var color = "blue";
		   if (day > 0 && day == dayOfMonth) color="red";
		   daysGrid += '<a href="javascript:setDay(';
		   daysGrid += dayOfMonth + ',\'' + eltName + '\')" '
		   daysGrid += 'style="color:' + color + '">';
		   var dayString = dayOfMonth + "</a> ";
		   if (dayString.length == 6) dayString = '0' + dayString;
		   daysGrid += dayString;
		 }
	       }
	       if (dayOfMonth < intDaysInMonth) daysGrid += "<br>&nbsp;";
	    }
	    return daysGrid + "</td></tr></table>";
	 }

	 function setDay(day,eltName) {
	   displayElement.value = (displayMonth + 1) + "/" + day + "/" + displayYear;
	   hideElement(eltName);
	 }
	 
function toggleDatePicker(eltName,formElt,lDivList) {

  var x = formElt.indexOf('.');
  var formName = formElt.substring(0,x);
  var formEltName = formElt.substring(x+1);
  //Modified by Manish Tiwari on 21/04/2003 Since it is a global variable it hides all those divs which are
  // being used in the second field of to date.
  gDivList = '';
  newCalendar(eltName,document.forms[formName].elements[formEltName]);
  toggleVisible(eltName);
  gDivList = lDivList;
  if (lDivList != '') 
  {
	//alert(lDivList);
		var DivArray = lDivList.split(",");
		for(i=0;i<= DivArray.length-1;i++)
		{
			getDivStyle(DivArray[i]).visibility = 'hidden';
		}
	}
}
function fixPosition(divname) {
 divstyle = getDivStyle(divname);
 positionerImgName = divname + 'Pos';
 // hint: try setting isPlacedUnder to false
 isPlacedUnder = false;
 if (isPlacedUnder) {
  setPosition(divstyle,positionerImgName,true);
 } else {
  setPosition(divstyle,positionerImgName)
 }
}
function SetToDate(to,from)
{
	var ObjTo = eval("document."+to);
	var ObjFrom = eval("document."+from);
	var ObjFrom1 = TrimTheString(ObjFrom.value);
	if (ObjFrom1.length <= 0  ) return 0;
	
	if (IsEmpty(TrimTheString(ObjTo.value )))
	{	
		var CheckDate=IsDate(ObjFrom);
		if (CheckDate == false)
		{
		   return 0;
		}
		else   
		ObjTo.value = ObjFrom.value; 
	}	   	
}
function IsWhitespace ( pszStringtoCheck )
{
	var reWhitespace = /^\s+$/
	return ( IsEmpty ( pszStringtoCheck ) || reWhitespace.test ( pszStringtoCheck ) );
}
function IsEmpty ( pszStringtoCheck ) {
	return ( ( pszStringtoCheck == null ) || ( pszStringtoCheck.length == 0 ) )
}
				
function TrimTheString ( pszStringtoTrim )
{
	var bflag = true;
	var i = 0;
	if ( IsWhitespace ( pszStringtoTrim ) == true )		return "";
	while ( ( i < pszStringtoTrim.length ) && ( bflag ) )
	{
		retChar = pszStringtoTrim.charAt ( i++ );
		if ( retChar != " " ) bflag = false;
	}
	if ( bflag ) return "";
	var j = pszStringtoTrim.length-1;
	bflag = true;
	while ( ( j >= 0 ) && ( bflag ) ) 
	{
		retChar = pszStringtoTrim.charAt ( j-- );
		if ( retChar != " " ) bflag = false;
	}
	if ( bflag ) return "";
	pszStringtoTrim = pszStringtoTrim.substring ( i-1 ,j+2 );
	return pszStringtoTrim;
}

function SetFromDate(from,to)
{
	var ObjFrom = eval("document."+from);
	var ObjTo = eval("document."+to);
	var ObjTo1 = TrimTheString(ObjTo.value);
	if (ObjTo1.length <= 0  ) return 0;
	if (ObjTo1.length > 0 && IsEmpty(TrimTheString(ObjFrom.value )) )
	{
		
		
		var CheckDate=IsDate(ObjTo);
		if (CheckDate == false) 
		{
		    return 0;
		}
		else
		{    
			var ObjDate = new Date(ObjTo.value);
			var YesDate = new Date(addDays(-1,ObjDate));
			var DD= YesDate.getDate();
			var MM=YesDate.getMonth();
			var MM1=eval(MM+1)
			var YY=YesDate.getYear();
			var SetDate=MM1+"/"+DD+"/"+YY
			ObjFrom.value=SetDate;
		}
	}	
}
function addDays(intDays,datDate){
	datStart =Date.parse(datDate)
	datEnd = datStart + intDays*(24*60*60*1000)
	datFinal = new Date(datEnd)
	return datFinal
}

function IsDate ( pszFieldObj )
{
	var szTheDate = TrimTheString( eval ( pszFieldObj ).value )
	var reTheRegExp = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
	
	var aMatchArray = szTheDate.match(reTheRegExp); // is the format ok?
	
	if (aMatchArray == null) 
	{
		
		alert("Please enter date as either mm/dd/yyyy.");
		
		return false;
	}

	nMonth = aMatchArray[1]; // parse date into variables
	nDay = aMatchArray[3];
	nYear = aMatchArray[5];
	
	if ( nYear < 1900 )
	{
		alert("Year must be greater than 1900.");
		return false;
	}

	if ( nMonth < 1 || nMonth > 12 ) // check month range
	{
		alert("Month must be between 1 and 12.");
		return false;
	}

	if ( nDay < 1 || nDay > 31 ) 
	{
		alert("Day must be between 1 and 31.");
		return false;
	}

	if ( ( nMonth == 4 || nMonth == 6 || nMonth == 9 || nMonth == 11) && nDay == 31 ) 
	{
		alert("Month " + nMonth + " does not have 31 days!")
		return false;
	}

	if ( parseInt ( nMonth ) == 2) // check for february 29th
	{
		var isleap = ( nYear % 4 == 0 && ( nYear % 100 != 0 || nYear % 400 == 0 ) );
		if ( parseInt ( nDay ) > 29 || ( parseInt ( nDay ) == 29 && !isleap ) ) 
		{
			alert("February " + nYear + " doesn't have " + nDay + " days!");
			return false;
		}
	}
	return true; // date is valid
}

