

function showCalendar(anchorname, datefield, dateformat, defaultDate)
{
    if(defaultDate ==null || defaultDate =="")
    {
    	defaultYear=null;
    	defaultMonth=null;
    	defaultDay=null;
    }
    else
    {
   	
	if(verifyDate(defaultDate))
	{
	   	defaultDate=convertDateTo10Char(defaultDate);
	   	defaultMonth = defaultDate.substr(0,2) ;
		defaultDay = defaultDate.substr(3,2);
		defaultYear = defaultDate.substr(6,4);
		
		if (defaultMonth.indexOf('0')==0)
		defaultMonth=defaultMonth.substring(1);
		
		if (defaultDay.indexOf('0')==0)
		defaultDay=defaultDay.substring(1);
		//alert("defaultDay "+defaultDay+"       "+"defaultMonth "+defaultMonth);
		defaultDay=parseInt(defaultDay);
		defaultYear=parseInt(defaultYear);
		defaultMonth=parseInt(defaultMonth);
	}
	else
	{
		alert(alert_msg);
	    	defaultYear=null;
    		defaultMonth=null;
    		defaultDay=null;
	}
    }
    popupCalendar = new PopupCalendar(anchorname, datefield, dateformat, defaultYear, defaultMonth, defaultDay);
}
//true means date format is ok
function verifyDate(inDate)
{
	if(inDate.length>10 || inDate.length < 8||DateFormatNotCorrect(inDate))
	{
		return false;
	}

	if(inDate.length==9 || inDate.length == 8)
	{
		inDate=convertDateTo10Char(inDate);
	}			

	var CorrectFormat = /[0-1][0-9]\/[0-3][0-9]\/[0-9][0-9][0-9][0-9]/;	
	
	// Test to see if the format of the date is correct.
	if (CorrectFormat.test(inDate))
	return true;
	else
	return false;

}

var alert_msg=JS_message4;//the date is not correct, use today

var use_css=false;
var use_layers=false;   
if (document.all)    { use_css    = true; }
if (document.layers) { use_layers = true; }

var CALWINDOW;

// Write out default styles to document or return string
function writestyles(doc)
{
    var result = "";
    result += "<STYLE>\n";
    result += "TD.cal { font-family:arial; font-size: 8pt; }\n";
    result += "TD.calmonth { font-family:arial; font-size: 8pt; text-align: right;}\n";
    result += "TD.caltoday { font-family:arial; font-size: 8pt; text-align: right; color: white; background-color:Lime; border-width:1; border-type:solid; border-color:#800000; }\n";
    result += "INPUT.caltoday { font-family:arial; font-size: 8pt; width:47px; height: 20px; }\n";
    result += "A.cal { text-decoration:none; color:#000000; }\n";
    result += "A.calthismonth { text-decoration:none; color:#000000; }\n";
    result += "A.calothermonth { text-decoration:none; color:#808080; }\n";
    result += "</STYLE>\n";
    if (doc != "")
    {
        doc.write(result);
    }
    else
    {
        return result;
    }
}
writestyles(this.document);

function PopupCalendar(anchorname, datefield, dateformat, defaultYear, defaultMonth, defaultDay)
{
    this.anchorname = anchorname;
    this.datefield = datefield;
    this.dateformat = dateformat;
    this.monthNames = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
    
    this.getOffsetLeft = PopupCalendar_getOffsetLeft;
    this.getOffsetTop = PopupCalendar_getOffsetTop;
    //this.moveTo(screen.width/2,screen.height/2)
    this.hideCalendar = PopupCalendar_hideCalendar;
    this.outputCalendar = PopupCalendar_outputCalendar;
    this.printDate = PopupCalendar_printDate;
	
    /*	
    // Find position relative to anchor
    if (use_css)
    {
        var x = this.getOffsetLeft(document.all[anchorname]);
        var y = this.getOffsetTop(document.all[anchorname]);
    }
    else
    {
        var found=0;
        for (var i=0; i<document.anchors.length; i++)
        {
            if (document.anchors[i].name == anchorname)
            {
                var x=document.anchors[i].x;
                var y=document.anchors[i].y;
                found=1;
                break;
            }
        }
        if (found == 0)
        {
            for (var j=0; j<document.layers.length; j++)
            {
                for (var i=0; i<document.layers[j].document.anchors.length; i++)
                {
                    if (document.layers[j].document.anchors[i].name == anchorname)
                    {
                        var x=document.layers[j].document.anchors[i].x;
                        var y=document.layers[j].document.anchors[i].y;
                        found=1;
                        break;
                    }
                }
            }
        }
        if (found == 0)
        {
            return;
        }
        x=x-window.pageXOffset;
        y=y-window.pageYOffset;
    }
	//    x = x-152;
    y = y+20;
    // WRITE CALENDAR TO POPUP WINDOW
    if (use_layers)
    {
        var windowx = window.screenX;
        var windowy = window.screenY + (window.outerHeight-24-window.innerHeight);
    }
    if (use_css)
    {
        var windowx = window.screenLeft;
        var windowy = window.screenTop;
    }
    */
    
    //x = x + windowx;
    //y = y + windowy;
    x=(window.screen.width-170)/2;
    y=(window.screen.height-180)/2;
    if (!CALWINDOW || CALWINDOW.closed)
    {
        CALWINDOW = window.open("about:blank","calwindow","status=no,width=150,height=160,screenX="+x+",left="+x+",screenY="+y+",top="+y+",resizable");
    //CALWINDOW.moveTo((window.screen.width-150)/2,(window.screen.height-160)/2);
    }
    // Write output to popup window
    this.outputCalendar(defaultYear, defaultMonth, defaultDay);

}

function PopupCalendar_getOffsetLeft (el)
{
    var scrollamount = document.body.scrollLeft;
    var ol = el.offsetLeft;
    while ((el = el.offsetParent) != null) { ol += el.offsetLeft; }
    ol = ol - scrollamount;
    return ol;
}

function PopupCalendar_getOffsetTop (el)
{
    var scrollamount = document.body.scrollTop;
    var ot = el.offsetTop;
    while((el = el.offsetParent) != null) { ot += el.offsetTop; }
    ot = ot - scrollamount;
    return ot;
}

function PopupCalendar_hideCalendar()
{
    if (CALWINDOW && !CALWINDOW.closed)
    {
        CALWINDOW.close();
    }
}
    
function PopupCalendar_outputCalendar(defaultYear, defaultMonth, defaultDay)
{
    var now = new Date();
    var year = now.getFullYear();
    var month = now.getMonth()+1;
    
    if (defaultYear != null && defaultYear != "")
    year = defaultYear;
    else
    defaultYear=year;
    
    if (defaultMonth != null && defaultMonth != "")
    month = defaultMonth;
    else
    {
    	defaultMonth=month;
    	defaultDay=now.getDate();	
    }
    
    
    var daysinmonth= new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);

    if ( ( (year%4 == 0)&&(year%100 != 0) ) || (year%400 == 0) )
    { // leap year
        daysinmonth[2] = 29;
    }
    var current_month = new Date(year,month-1,1);
    
    var display_year = year;
    var display_month = month;
    var display_date = 1;

    var offset = 0;
    var weekday= current_month.getDay();
    if (weekday > 0)
    {
        display_month--;
        if (display_month < 1) { display_month = 12; display_year--; }
        display_date = daysinmonth[display_month]-weekday+1;
    }
    
    var next_month = month+1;
    var next_month_year = year;
        
    if (next_month > 12) { next_month=1; next_month_year++; }
    var last_month = month-1;
    var last_month_year = year;
    if (last_month < 1) { last_month=12; last_month_year--; }
    
    var date_class;
    var result = "";
    result += "<HTML><HEAD><title>Choose Date</title>"+writestyles('')+"<BODY MARGINWIDTH=0 MARGINHEIGHT=0 TOPMARGIN=0 RIGHTMARGIN=0 LEFTMARGIN=0 onBlur='window.focus()'>\n";
    result += '<FORM>\n';
    result += '<CENTER><TABLE WIDTH=100% BORDER=0 BORDERWIDTH=0 CELLSPACING=0 CELLPADDING=0>\n';
    result += '<TR BGCOLOR="#C0C0C0">\n';
    result += '    <TD CLASS="cal" WIDTH=22 ALIGN=CENTER VALIGN=MIDDLE><B><A CLASS="cal" HREF="javascript:window.opener.popupCalendar.outputCalendar('+last_month_year+','+last_month+')">&lt;&lt;</A></B></TD>\n';
    result += '    <TD CLASS="cal" WIDTH=100 ALIGN=CENTER>'+this.monthNames[month-1]+' '+year+'</TD>\n';
    result += '    <TD CLASS="cal" WIDTH=22 ALIGN=CENTER VALIGN=MIDDLE><B><A CLASS="cal" HREF="javascript:window.opener.popupCalendar.outputCalendar('+next_month_year+','+next_month+')">&gt;&gt;</A></B></TD>\n';
    result += '</TR>\n';
    result += '</TABLE>\n';
    result += '<TABLE WIDTH=120 BORDER=0 CELLSPACING=1 CELLPADDING=0 ALIGN=CENTER>\n';
    result += '<TR>\n';
    result += '    <TD CLASS="cal" ALIGN=RIGHT WIDTH=14%>S</TD>\n';
    result += '    <TD CLASS="cal" ALIGN=RIGHT WIDTH=14%>M</TD>\n';
    result += '    <TD CLASS="cal" ALIGN=RIGHT WIDTH=14%>T</TD>\n';
    result += '    <TD CLASS="cal" ALIGN=RIGHT WIDTH=14%>W</TD>\n';
    result += '    <TD CLASS="cal" ALIGN=RIGHT WIDTH=14%>T</TD>\n';
    result += '    <TD CLASS="cal" ALIGN=RIGHT WIDTH=14%>F</TD>\n';
    result += '    <TD CLASS="cal" ALIGN=RIGHT WIDTH=14%>S</TD>\n';
    result += '</TR>\n';
    result += '<TR><TD COLSPAN=7 ALIGN=CENTER><IMG SRC="graypixel.gif" WIDTH=120 HEIGHT=1></TD></TR>\n';
    for (var row=1; row<=6; row++)
    {
        result += '<TR>\n';
        for (var col=1; col<=7; col++)
        {
            if (display_month == month)
            {
                date_class = "calthismonth";
            }
            else
            {
                date_class = "calothermonth";
            }
            if ((display_month == defaultMonth) && (display_date==defaultDay) && (display_year==defaultYear))
            {
                td_class="caltoday";
            }
            else
            {
                td_class="calmonth";
            }
            result += '    <TD CLASS="'+td_class+'"><A HREF="javascript:window.opener.popupCalendar.printDate('+display_year+','+display_month+','+display_date+');window.opener.popupCalendar.hideCalendar();" CLASS="'+date_class+'">'+display_date+'</A></TD>\n';
            display_date++;
            if (display_date > daysinmonth[display_month])
            {
                display_date=1;
                display_month++;
            }
            if (display_month > 12)
            {
                display_month=1;
                display_year++;
            }
        }
        result += '</TR>\n';
    }
    result += '<TR><TD COLSPAN=7 ALIGN=CENTER><IMG SRC="graypixel.gif" WIDTH=120 HEIGHT=1></TD></TR>\n';
    result += '<TR>\n';
    result += '    <TD COLSPAN=7 ALIGN=CENTER>\n';
    result += '        <INPUT CLASS="caltoday" TYPE="button" VALUE="Today" onClick="window.opener.popupCalendar.printDate('+now.getFullYear()+','+(now.getMonth()+1)+','+now.getDate()+');window.opener.popupCalendar.hideCalendar();">\n';
    result += '        <BR>\n';
    result += '    </TD>\n';
    result += '</TR>\n';
    result += '</TABLE>\n';
    result += '</CENTER>\n';
    result += '</TD></TR>\n';
    result += '</TABLE>\n';
    result += '</FORM>\n';
    result += '</BODY></HTML>\n';

    CALWINDOW.document.open();
    CALWINDOW.document.write(result);
    CALWINDOW.document.close();
}

function PopupCalendar_printDate(year,month,date)
{
    var yyyy = new String(year);
    var yy = yyyy.substring(2, 4);
    var M = month;
    var MM = (M<10?'0':'') + M;
    var MMM = this.monthNames[month-1].substring(0, 3);
    var MMMM = this.monthNames[month-1];
    var d = date;
    var dd = (date<10?'0':'') + date;
    var retVal = this.dateformat;

    retVal = retVal.replace(/yyyy/,yyyy);
    retVal = retVal.replace(/yy/,yy);
    if (retVal.match(/MMMM/)) retVal = retVal.replace(/MMMM/,MMMM)
    else if (retVal.match(/MMM/)) retVal = retVal.replace(/MMM/,MMM)
    else if (retVal.match(/MM/)) retVal = retVal.replace(/MM/,MM)
    else if (retVal.match(/M/)) retVal = retVal.replace(/M/,M);
    retVal = retVal.replace(/dd/,dd);
    retVal = retVal.replace(/d/,d);
    this.datefield.value=retVal;
}



