/*
Component   : Calendar
Date        : 04/05/2001
Description : Pops up a calendar object and can return a specified date
              in different formats. The result is stored in a textfield 
              object that is specified. 
Fixes       : Included ability to pass whether past dates can be selected (default off)            
            : Fixed December month to display all days
*/

// Browser Detection
var isIE  = (document.all) ? 1 : 0;
var isNS4 = (document.layers) ? 1 : 0;        
var isNS6 = (document.getElementById && navigator.appName == "Netscape") ? 1 : 0;        

// Day names, month names, days in a month
dayTitle = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
monthTitle = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
daysInMonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31);    

// Current Date        
var currentCalender = new Date();         
var currentDayString = currentCalender.getDay();   
var currentDay = currentCalender.getDate();
var currentMonth = currentCalender.getMonth();
var currentYear = currentCalender.getFullYear();            

// Window Object
var calendarWindow = null;

// Date Formating
var DateFormat = "dd-mm-yyyy"; // yyyy-mm-dd or dd-mm-yyyy                 
var seperator = "/";

// Calendar Width and HEight
var calendarDateWidth = 25; // The width of each date number must be greater then 20;                        
var calendarWidth = calendarDateWidth * 7 - 1;                        
var calendarHeight = (isNS4) ? 131 : 140;
var letterwide = (calendarDateWidth <= 25) ? 1 : 3;



                        
// --------------------------------------------------------------------------------------------------------------------
// Interface to open the Calendar
// Interface to open the Calendar
// form - Form Name
// inputfield - field for result
// pastDates - Whether past dates or not (default yes pastDates) value = null | 'nopast'
// --------------------------------------------------------------------------------------------------------------------
function popupCalendar(form, inputfield, pastDates)
{                           
    // set form properties
    setFormProps(form, inputfield)    
    
    // Set Initial Date        
    if (eval("document."+formname+"."+inputname+".value") == "")
    {
        eval("document."+formname+"."+inputname+".value =" + formatDate(currentCalender, DateFormat, seperator));    
    }
    
    //Allow Past Dates        
    var pastDatesAllowed = (pastDates != null) ? false : true;    
                           
    // Container String
    containerString = "";
    containerString += "<html>\n";
    containerString += "<head>\n";        
    containerString += "<title>Calendar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</title>";
    containerString += "<style type=text/css>";
    containerString += ".calendar{position : absolute;}";            
    containerString += "body{background-color:#828A93; color:#FFFFFF; font-family:Arial; font-size:8pt;}"    
    containerString += "TD{color:#FFFFFF; font-family:Arial; font-size:8pt;}"    
    containerString += ".dateformat{color:#FFFFFF; font-family:Arial; font-size:8pt;}"    
    containerString += ".calendarlink{color:#000000; font-family:Arial; font-size:8pt; text-decoration: none;}"    
    containerString += "A.calendarlink:link{color:#000000; font-family:Arial; font-size:8pt; text-decoration: none;}"
    containerString += "A.calendarlink:visited{color:#000000; font-family:Arial; font-size:8pt; text-decoration: none;}"
    containerString += "A.calendarlink:active{color:#FF0000; font-family:Arial; font-size:8pt; text-decoration: none;}"    
    containerString += "A.calendarlink:hover{color:#FF0000; font-family:Arial; font-size:8pt; text-decoration: none;}"
    containerString += "</style>";
    containerString += "</head>\n";
    containerString += "<body leftmargin=0 topmargin=0 marginwidth=0 marginheight=0 onResize=this.resizeTo("+(calendarWidth+20)+",154)>\n";    
    containerString += "<div id=calendar class=calendar>\n";     
    
    // Generate the calendar                                              
    containerString += generateCalendar(currentMonth, currentYear, pastDatesAllowed, 'initial');                
    
    containerString += "</div>\n";
    containerString += "</body></html>";
    
    // Set in the middle of the screen
    if (screen) {
        y = (screen.availHeight - calendarHeight)/2;
        x = (screen.availWidth - calendarWidth)/2;
    }
        
    // Write the contents of the window        
    calendarWindow = window.open("", "calendarWindow", "width="+(calendarWidth+10)+",height="+calendarHeight+",screenX="+x+",screenY="+y+",top="+y+",left="+x);                    
    calendarWindow.document.write(containerString);        
    calendarWindow.document.close();                                                                      
    calendarWindow.focus();                                                                      
}    

// --------------------------------------------------------------------------------------------------------------------
// Generate the calendar
// --------------------------------------------------------------------------------------------------------------------
function generateCalendar(month, year, pastDatesAllowed, state)
{           
    // Check if month is within bounds    
    // 0 - Jan, 11 - Dec
    if (month < 0) {
        month = 11;
        year = year - 1;    
    }            
    else if (month > 11) {    
        month = 0;
        year = year + 1;    
    }
    
    // Get first day of the month position;
    var currentDateString = monthTitle[month] + " 1, " + year;     
    var firstDayOfMonthString = new Date(currentDateString);        
    var fistDayOfMonth = firstDayOfMonthString.getDay();   
                    
    // Calendar Table                                
    var calendarTable = "";    
    calendarTable += "<table border=0 width="+calendarWidth+" cellpadding=0 cellspacing=0>\n";    
    calendarTable += "<tr>\n";    
    calendarTable += "<td align=center bgcolor=#828A93>\n";    
    calendarTable += "<table border=0 width="+calendarWidth+" cellpadding=0 cellspacing=1>\n";    
    calendarTable += "<tr>\n";
    calendarTable += "<td bgcolor=#003366 colspan=7 align=center>";
    
    // Calendar Controls
    calendarTable += "<table border=0 width= cellpadding=0 cellspacing=0>\n";    
    calendarTable += "<tr>\n";    
    calendarTable += "<td bgcolor=#003366 class=dateformat NOWRAP width=20><a href=\"javascript:opener.generateCalendar(" + month + ", " + (year-1) + ", " + pastDatesAllowed + ")\" title=\"Previous Year\"><img src=images/calendar/calendar_arrowleft.gif border=0 alt=Previous&nbsp;Year><img src=images/calendar/calendar_arrowleft.gif border=0 alt=Previous&nbsp;Year></a></td>\n";
    calendarTable += "<td bgcolor=#003366 class=dateformat NOWRAP width=20><a href=\"javascript:opener.generateCalendar(" + (month-1) + ", " + year + ", " + pastDatesAllowed + ")\" title=\"Previous Month\"><img src=images/calendar/calendar_arrowleft.gif border=0 alt=Previous&nbsp;Month></a></td>\n";
    calendarTable += "<td bgcolor=#003366 class=dateformat NOWRAP align=center width=80>" + monthTitle[month].substring(0,3) + " " + year + "</td>";
    calendarTable += "<td bgcolor=#003366 class=dateformat NOWRAP width=20 align=right><a href=\"javascript:opener.generateCalendar(" + (month+1) + ", " + year + ", " + pastDatesAllowed + ")\" title=\"Nex Month\"><img src=images/calendar/calendar_arrowright.gif border=0 alt=Next&nbsp;Month></a></td>\n";
    calendarTable += "<td bgcolor=#003366 class=dateformat NOWRAP width=20 align=right><a href=\"javascript:opener.generateCalendar(" + month + ", " + (year+1) + ", " + pastDatesAllowed + ")\" title=\"Next Year\"><img src=images/calendar/calendar_arrowright.gif border=0 alt=Next&nbsp;Year><img src=images/calendar/calendar_arrowright.gif border=0 alt=Next&nbsp;Year></a></td>\n";    
    calendarTable += "<tr>\n";    
    calendarTable += "</table>";
    
    calendarTable += "</td>\n";
    calendarTable += "</tr>\n";    
    calendarTable += "<tr>\n";    
    for (i = 0; i <= dayTitle.length - 1; i++) 
    {                         
        calendarTable += "<td class=dateformat width="+calendarDateWidth+" align=center NOWRAP>" + dayTitle[i].substring(0, letterwide) + "</td>\n";
    }        
    calendarTable += "</tr>\n";        
    
    // Handle leap-years
    var maxDaysinMonth = (month == 1 ? (year/4 - Math.floor(year/4) == 0 ? 29 : 28) : daysInMonth[month])
    
    // Prefil calendar with minus values until first day is reached
    var dayCounter = 1 - fistDayOfMonth;            
    
    // Create calendar cells
    for (i = 0; i < 6; i++)
    {        
        calendarTable += "<tr>\n";
        for (j = 0; j <= dayTitle.length - 1; j++) 
        {                             
            // Any day less then one or greater then the max day for that month make empty cell
            if (dayCounter < 1 || dayCounter > maxDaysinMonth) {
                calendarTable += "<td NOWRAP bgcolor=#FFFFFF align=center class=dateformat>&nbsp;</td>\n";            
            }                
            else {   
                // Text field
                var textFieldDate = "'" + monthTitle[month] +  " " + dayCounter  + ", " + year + "'";                
                                
                // Check if current date to highlight
                if (currentDay == dayCounter && currentMonth == month && currentYear == year) {
                    calendarTable += "<td NOWRAP bgcolor=#FFFFFF align=center><a class=calendarlink href=\"javascript:opener.setTextfield("+textFieldDate+")\">"+dayCounter+"</a></td>\n";        
                }   
                // Past dates ?                
                else if ( (dayCounter < currentDay && month == currentMonth && year == currentYear) || (year < currentYear) || (month < currentMonth && year <= currentYear)) {                    
                    
                    if(pastDatesAllowed)
                    {
                        calendarTable += "<td NOWRAP bgcolor=#E0E0E0 align=center><a class=calendarlink href=\"javascript:opener.setTextfield("+textFieldDate+")\">"+dayCounter+"</a></td>\n";        
                    }                                                
                    else
                    {
                        calendarTable += "<td NOWRAP bgcolor=#CCCCCC align=center class=calendarlink>"+dayCounter+"</td>\n";                                                                    
                    }                        
                    
                }                    
                else {                                            
                    calendarTable += "<td NOWRAP bgcolor=#E0E0E0 align=center><a class=calendarlink href=\"javascript:opener.setTextfield("+textFieldDate+")\">"+dayCounter+"</a></td>\n";        
                }                                          
            }                                                                                                                                        
            dayCounter++;            
        }
        calendarTable += "</tr>\n";                    
    }                    
    // Todays Date                
    calendarTable += "<tr>\n";        
    calendarTable += "<td align=center NOWRAP bgcolor=#828A93 colspan=7 class=\"dateformat\">\n";    
    // Add leading zeros
    thecurrentDay = (currentDay < 10) ? "0" + currentDay : currentDay    
    
    calendarTable += "Today's Date: " + dayTitle[currentDayString].substring(0, 3) + ", " + thecurrentDay + " " + monthTitle[currentMonth].substring(0,3) + " " + currentYear;    
    calendarTable += "</td>\n";
    calendarTable += "</tr>\n";        
    calendarTable += "</td>\n";        
    calendarTable += "</table>\n"    
    calendarTable += "</td>\n";        
    calendarTable += "</tr>\n";            
    calendarTable += "</table>\n"            
    calendarTable += "</tr>\n";      
    calendarTable += "</table>\n"          
                                        
    // State first time run, fixes reload issues
    var state = (state != null) ? state : "other";                    
    if (state == "initial") {
        return calendarTable;
    }            
    else {
        changeContent("calendarWindow", "calendar", calendarTable);        
    }            
}    

//Get form name and input field name
function setFormProps(form, inputfield)
{
    formname = form;       
    inputname = inputfield;       
}    

// Set the textfield;
function setTextfield(value)
{               
    eval("document."+formname+"."+inputname+".value = " + formatDate(value, DateFormat, seperator));            
    if ((calendarWindow != null) && (!calendarWindow.closed)) {
       calendarWindow.close();
    }
}     

function formatDate(dateString, DateFormat, seperator)
{        
    var formatCalender = new Date(dateString);         
    var formatDateString = formatCalender.getDay();   
    var formatDateDay = formatCalender.getDate();
    var formatDateMonth = formatCalender.getMonth() + 1;
    var formatDateYear = formatCalender.getFullYear();            
    
    formatDateDay = (formatDateDay < 10) ? "0" + formatDateDay : formatDateDay;
    formatDateMonth = (formatDateMonth < 10) ? "0" + formatDateMonth : formatDateMonth;    
    
    
    if(DateFormat == "yyyy-mm-dd") {        
        return "'" + formatDateYear + seperator + formatDateMonth + seperator + formatDateDay + "'";    
    }        
    else {
        return "'" + formatDateDay + seperator + formatDateMonth + seperator + formatDateYear + "'";    
    }                
    
}       

// --------------------------------------------------------------------------------------------------------------------
// Alter the contenet of a layer, in a window object
// --------------------------------------------------------------------------------------------------------------------

function changeContent(windowName, layerName, text)
{    
    if (isIE) {
        eval(windowName).document.all[layerName].innerHTML = text;   
    }    
    else if (isNS4) {	                        
        eval(windowName).document.layers[layerName].document.open();        
        eval(windowName).document.layers[layerName].document.write(text);
        eval(windowName).document.layers[layerName].document.close();	        
    }    
    else if (isNS6) {
        // New Style
        eval(windowName).document.getElementById(layerName).innerHTML = text;        
    }	    
}