/*
	 A LITTLE COLLECTION OF FUNCTIONS TO GENERATE A CALENDER
	*************************************************************
	A DIV must exist on the page that you want to display the
	calendar in.  Pass the ID of the DIV to the displayCalender
	function...								----- 27/04/2004 [JB]
	*************************************************************
*/
	var arrDays = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
	var arrMonths = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
	
	var Calendar = new Date();	 // Generate DATE variable for the calendar to work with
	var today = new Date();		// Get TODAYS date
	var selectedDate = new Date();
	
	var selMonth = today.getMonth();
	var selYear = today.getYear();
	var selHours = 0;
	var selMins = 0;
	
	var CalendarDiv = '';
	
	var strDay, strMonth
	
	var ScreenWidth;  // Stores USERS screen width for formatting
	
	var DisplayDiv = '';

    var ctrl;  // Control to Edit	

    var ondatechanged = function(){};
    
    var displayTime = false; // Display time?
    
    


function showDatePicker(boxName, showTime)
{
    displayTime = showTime;

    if (ctrl)
        ctrl.disabled = '';

    ctrl = document.getElementById(boxName);
        
    obj = ctrl;
    var curleft = curtop = 0;
	    if (obj.offsetParent) {
		    curleft = obj.offsetLeft
		    curtop = obj.offsetTop
		    while (obj = obj.offsetParent) {
			    curleft += obj.offsetLeft
			    curtop += obj.offsetTop
		    }
	    }

    if (ctrl.value != '')
    {
        selectedDate = new Date(Date.parse(ctrl.value));
	    selMonth = selectedDate.getMonth();
	    selYear = selectedDate.getYear();
	    selHours = selectedDate.getHours();
	    selMins = selectedDate.getMinutes();
    }
    
    ctrl.disabled = 'disabled';

    calDiv = document.getElementById('datepicker');
        
    calDiv.style.display = 'block';
    calDiv.style.left = curleft + 'px';
    calDiv.style.top = curtop + 'px';
    
    displayCalender('datepicker', boxName);

}
function hideDatePicker()
{
    calDiv = document.getElementById('datepicker');
    calDiv.style.display = 'none';
    if (ctrl)
        ctrl.disabled = '';
}

function displayCalender(divName, boxName)
{
	DisplayDiv = boxName;
	CalendarDiv = divName;	    // ID of DIV to contain calendar output
	var CalendarString = '';   // Used for outputting final calendar string	
	
	//document.getElementById(CalendarDiv).style.height = '190px';  // Adjust DIV to fit window
	
	Calendar.setDate(1);    		// Start the calendar day at '1'
	Calendar.setMonth(selMonth);   // Start the calendar month at now
	Calendar.setYear(selYear);    // Start the calendar year at now
	
	var year = Calendar.getYear();	    // Returns year
	var month = Calendar.getMonth();   // Returns month (0-11)
	var weekday = Calendar.getDay();  // Returns day (1-31)
	
	ScreenWidth = 0; //document.body.clientWidth; // Determine Screen Width
	
	if (ScreenWidth < 200) // If its less than 200px then use 3 char month names.
		strMonth = arrMonths[selMonth].toString().substr(0,3);
	else
		strMonth = arrMonths[selMonth].toString();

	//BUILD BASIC CALENDAR TABLE STRING - INCLUDING NEXT & PREV MONTH BUTTONS
	CalendarString += '<div class="calendarTable">';
	CalendarString += '<table width="100%" cellpadding="0" cellspacing="0" align="center" border="0">';
	CalendarString += '<tr bgcolor="#666666">';
	CalendarString += '<td align="center" class="next_year" onClick="javascript: prevYear();" title="back 1 year">&nbsp;|< </td>';
	CalendarString += '<td align="center" class="next_date" onClick="javascript: prevMonth();" title="back 1 month"> << </td>';
	CalendarString += '<td colspan="3" align="center" class="current_date" onclick="javascript: displayDate(selectedDate);">' + strMonth + ' ' + selYear + '</td>';
	CalendarString += '<td align="center" class="next_date" onClick="javascript: nextMonth();" title="forward 1 month"> >> </td>';
	CalendarString += '<td align="center" class="next_year" onClick="javascript: nextYear();" title="forward 1 year"> >|&nbsp;</td>';
	CalendarString += '</tr>';
	
	//SPACER CELLS - USED TO SET COLUMN WIDTHS
	CalendarString += '<tr style="height:1px;line-height:1px;">';
		CalendarString += '<td width="15%" style="border-bottom: 1px solid #000000;">&nbsp;</td>';
		CalendarString += '<td width="14%" style="border-bottom: 1px solid #000000;">&nbsp;</td>';
		CalendarString += '<td width="14%" style="border-bottom: 1px solid #000000;">&nbsp;</td>';
		CalendarString += '<td width="14%" style="border-bottom: 1px solid #000000;">&nbsp;</td>';
		CalendarString += '<td width="14%" style="border-bottom: 1px solid #000000;">&nbsp;</td>';
		CalendarString += '<td width="14%" style="border-bottom: 1px solid #000000;">&nbsp;</td>';
		CalendarString += '<td width="15%" style="border-bottom: 1px solid #000000;">&nbsp;</td>';
	CalendarString += '</tr>';
	
	//BUILD WEEKDAY *HEADERS*
	CalendarString += '<tr class="bg1">';

	for(index=0; index<=6; index++) {
		//ADJUST WEEKDAY HEADERS DEPENDING ON SCREEN SIZE
		if(ScreenWidth < 600)
			if(ScreenWidth < 200) 
				strDay = arrDays[index].toString().substr(0,1);
			else
				strDay = arrDays[index].toString().substr(0,3);
		else
			strDay = arrDays[index].toString();
		//================================================
	
		if (today.getDay() == index && today.getMonth() == Calendar.getMonth() && today.getYear() == Calendar.getYear()) {
			//MAKE TODAY BOLD
			if (index==0)
				CalendarString += '<td class="weekdays" align="center" style="border-left: 1px solid #000000; border-right: 1px solid #000000"><b>' + strDay + '</b></td>';
			else
				CalendarString += '<td class="weekdays" align="center" style="border-right: 1px solid #000000"><b>' + strDay + '</b></td>';
		}
		else {
			if (index==0)
				CalendarString += '<td class="weekdays" align="center" style="border-left: 1px solid #000000; border-right: 1px solid #000000">' + strDay + '</td>';
			else
				CalendarString += '<td class="weekdays" align="center" style="border-right: 1px solid #000000">' + strDay + '</td>';
		}
	}
	
	CalendarString += '</tr>';
	
	//BUILD DATES
	if (Calendar.getDay() != 0) 
		CalendarString += '<tr height="20">';
		
	for(index=0; index < Calendar.getDay(); index++) {
		if (index == 0)
			CalendarString += '<td class="nodate" style="border-left: 1px solid #000000; border-right: 1px solid #000000; border-bottom: 1px solid #000000;">&nbsp;</td>';
		else
			CalendarString += '<td class="nodate" style="border-right: 1px solid #000000; border-bottom: 1px solid #000000;">&nbsp;</td>';			
	}
		
	// LOOPS FOR EACH DAY IN CALENDAR
	for(index=0; index < 31; index++)
	{
	if( Calendar.getDate() > index )
	{
	  // RETURNS THE NEXT DAY TO OUTPUT
	  week_day = Calendar.getDay();
	
	  // START NEW ROW FOR FIRST DAY OF WEEK
	  if(week_day == 0)
	  	CalendarString += '<tr height="20">';
	
	  if(week_day != 7)
	  {
	
	  // SET VARIABLE INSIDE LOOP FOR INCREMENTING PURPOSES
	  var day = Calendar.getDate();
	
	  // HIGHLIGHT SELECTED DATE
	  if(selectedDate.getDate() == Calendar.getDate() && selectedDate.getMonth() == Calendar.getMonth() && selectedDate.getYear() == Calendar.getYear())
	  	CalendarString += '<td class="selected_date" style="border-right: 1px solid #000000; border-bottom: 1px solid #000000; cursor: pointer;" title="SELECTED: ' + arrDays[Calendar.getDay()] + ', ' + Calendar.getDate() + ' ' + arrMonths[Calendar.getMonth()] + ' ' + Calendar.getFullYear() + '" onclick="javascript: displayDate(\'' + Calendar + '\', \'' + boxName + '\');"><b>' + day + '</b></td>';
	  	
	  // HIGHLIGHT TODAY'S DATE
	  else if(today.getDate() == Calendar.getDate() && today.getMonth() == Calendar.getMonth() && today.getYear() == Calendar.getYear())
	  	CalendarString += '<td class="today_date" style="border-right: 1px solid #000000; border-bottom: 1px solid #000000; cursor: pointer;" title="TODAY: ' + arrDays[Calendar.getDay()] + ', ' + Calendar.getDate() + ' ' + arrMonths[Calendar.getMonth()] + ' ' + Calendar.getFullYear() + '" onclick="javascript: displayDate(\'' + Calendar + '\', \'' + boxName + '\');">' + day + '</td>';
	  			
	  // PRINT DAYS
	  else
	  	//IF ITS THE WEEKEND
		switch (week_day) {
		
			case 0 :
	  		CalendarString += '<td class="weekend_date" style="border-left: 1px solid #000000; border-right: 1px solid #000000; border-bottom: 1px solid #000000; cursor: pointer;" title="' + arrDays[Calendar.getDay()] + ', ' + Calendar.getDate() + ' ' + arrMonths[Calendar.getMonth()] + ' ' + Calendar.getFullYear() + '" onclick="javascript: displayDate(\'' + Calendar + '\', \'' + boxName + '\');">' + day + '</td>';
			break

			case 6 :
	  		CalendarString += '<td class="weekend_date" style="border-right: 1px solid #000000; border-bottom: 1px solid #000000; cursor: pointer;" title="' + arrDays[Calendar.getDay()] + ', ' + Calendar.getDate() + ' ' + arrMonths[Calendar.getMonth()] + ' ' + Calendar.getFullYear() + '" onclick="javascript: displayDate(\'' + Calendar + '\', \'' + boxName + '\');">' + day + '</td>';
			break
			
			default : CalendarString += '<td class="weekday_date" style="border-right: 1px solid #000000; border-bottom: 1px solid #000000; cursor: pointer;" title="' + arrDays[Calendar.getDay()] + ', ' + Calendar.getDate() + ' ' + arrMonths[Calendar.getMonth()] + ' ' + Calendar.getFullYear() + '" onclick="javascript: displayDate(\'' + Calendar + '\', \'' + boxName + '\');">' + day + '</td>';
		}
	}

	  // END ROW FOR LAST DAY OF WEEK
	  if(week_day == 7)
	  	CalendarString += '</tr>';
	  }
	
	  // INCREMENTS UNTIL END OF THE MONTH
	  Calendar.setDate(Calendar.getDate()+1);
	
	}// end for loop
	
	week_day++;
	if (week_day < 7) {
		for(i=week_day; i<7; i++)
			CalendarString += '<td class="nodate" style="border-right: 1px solid #000000; border-bottom: 1px solid #000000;">&nbsp;</td>';
			week_day++;
	}
	
	if (week_day == 6)
	  	CalendarString += '</tr>';
		
	
	if (displayTime) {
	    CalendarString += '<tr><td colspan="7" class="timeRow"><select id="selHours">';
	    for (i = 0; i<=23; i++)
	        CalendarString += '<option value="' + (i < 10 ? '0' + i : i) + '"' + (i == selHours ? 'selected="selected"' : '') + '>' + (i < 10 ? '0' + i : i) + '</option>';
	    CalendarString += '</select> : ';
	    CalendarString += '<select id="selMinutes">';
	    for (i = 0; i<=55; i+=5)
	        CalendarString += '<option value="' + (i < 10 ? '0' + i : i) + '"' + (i == selMins ? 'selected="selected"' : '') + '>' + (i < 10 ? '0' + i : i) + '</option>';
	    CalendarString += '</select></td></tr>';
	}
		
	CalendarString += '</table></div>';
	
	CalendarString += '<div class="closeIcon" onclick="javascript:  displayDate(selectedDate);" title="Close DatePicker"></div>';

	if(document.getElementById(CalendarDiv))
		document.getElementById(CalendarDiv).innerHTML = CalendarString; // this line is causing errors
	//alert(week_day);
	//alert(CalendarString);
}


function displayDate(theDate, boxName)
{
	var d = new Date(theDate);
//	window.opener.document.getElementById('txtTodayDate').innerText = arrDays[d.getDay()] + ', ' + d.getDate() + ' ' + arrMonths[d.getMonth()] + ' ' + d.getYear();
//	window.opener.document.getElementById(theBox).value = arrDays[d.getDay()] + ', ' + d.getDate() + ' ' + arrMonths[d.getMonth()] + ' ' + d.getYear(
	var selDate, selMonth
	if(d.getDate() <= 9)
		selDate = '0' + d.getDate();
	else
		selDate = d.getDate();
		
	if(d.getMonth() <= 9)
		selMonth = '0' + d.getMonth();
	else
		selMonth = d.getMonth();
	
	switch (GLOBAL_DATEFORMAT)
	{
	    case 'dd MMM yyyy' :
	        document.getElementById(DisplayDiv).value = selDate + ' ' + arrMonths[d.getMonth()].toString().substr(0,3) + ' ' + d.getFullYear();    
	        break;
	    case 'dd-MM-yyyy' :
	        document.getElementById(DisplayDiv).value = selDate + '-' + selMonth + '-' + d.getFullYear();
	        break;
	    
	    default :
	        document.getElementById(DisplayDiv).value = arrDays[d.getDay()].toString().substr(0,3) + ', ' + selDate + ' ' + arrMonths[d.getMonth()].toString().substr(0,3) + ' ' + d.getFullYear();    
	        break;
	}
	
	if (displayTime)
	    document.getElementById(DisplayDiv).value += ' ' + document.getElementById('selHours').value + ':' + document.getElementById('selMinutes').value;
	  
	//alert(boxName);
    if (window[boxName+"_ondatechanged"])
        window[boxName+"_ondatechanged"](theDate);
	//ondatechanged(theDate);
	hideDatePicker();
	//window.close();

}


//DISPLAYS 1 MONTH FORWARD
function nextMonth()
{
	if(selMonth < 11) {
		selMonth++;
		displayCalender(CalendarDiv,DisplayDiv);
	} else {
		selMonth = 0
		selYear++;
		displayCalender(CalendarDiv,DisplayDiv);
	}

}

//DISPLAYS 1 MONTH PREVIOUS
function prevMonth()
{
	if(selMonth > 0) {
		selMonth--;
		displayCalender(CalendarDiv,DisplayDiv);
	} else {
		selMonth = 11
		selYear--;
		displayCalender(CalendarDiv,DisplayDiv);
	}
}


//DISPLAYS 1 YEAR FORWARD
function nextYear()
{
	selYear++;
	displayCalender(CalendarDiv,DisplayDiv);
}

//DISPLAYS 1 YEAR PREVIOUS
function prevYear()
{
	selYear--;
	displayCalender(CalendarDiv,DisplayDiv);
}