
function initCal(formName,existingDateFieldPrefix,elementID,startYearA,endYearA,obj){	
    
    fillElementPrefix(existingDateFieldPrefix);
	
	formTarget = formName;
	processDate = new Date();		
	thisMonth = processDate.getMonth();
	thisDay = processDate.getDay();
    todaysDate = processDate.getDate();
	thisYear = processDate.getFullYear();
    startYear = startYearA;
    endYear = endYearA;
	//Set the Current Date to what is shown on the select
    
	curMonth = document.forms[formTarget].elements[eMonth].selectedIndex - 1;
    curMonth = curMonth <= 0 ? thisMonth : curMonth;
	curYear = document.forms[formTarget].elements[eYear].value;
    curYear = curYear == '' ? thisYear : curYear;
	curDay = document.forms[formTarget].elements[eDay].value;
    curDay = curDay == '' ? thisDay : curDay;

	processDate.setDate(curDay);
	processDate.setYear(curYear);
	processDate.setMonth(curMonth);
	drawCal(elementID);	
    showCalendar(elementID,obj);
    calendarOpen = true;
}


function showCalendar(elementID,obj){
    var e = document.getElementById(elementID);   
	e.style.visibility="visible";
    e.style.display="block";	
}

function resetCal(elementID){
	processDate = new Date();   
	document.getElementById('today_'+elementID).innerHTML = processDate.toLocaleDateString();
    drawCal(elementID);
}

function setYear(sVal,elementID){
	var sVal = Number(sVal.value);
	processDate.setFullYear(sVal);
	drawCal(elementID);
}

function setMonth(sVal,elementID){
	var sVal = Number(sVal.value);
	processDate.setMonth(sVal);
	drawCal(elementID);
}

function incMonth(amt,elementID){
	limitReached = false;
	//Corrects safari bug - cant go back from January	
	if (amt <0 && processDate.getMonth() == 0){
        if (processDate.getFullYear() -1 >= startYear){
		    processDate.setYear(processDate.getFullYear() -1);
    		processDate.setMonth(11);
        } else {
            var limitReached = true;
        }
	} else {
        if ((processDate.getMonth() == 11) && (processDate.getFullYear() == endYear) && amt >0){
            var limitReached = true;
        } else {
            processDate.setMonth(processDate.getMonth()+amt);	              
        }
	}
    if (!limitReached){
    	drawCal(elementID);	
    } else {
       document.getElementById(elementID+'_msg').innerHTML = 'Limit Reached';	
    }
}

function incYear(amt,elementID){
	if ((amt < 0 && processDate.getFullYear() == startYear) || (amt > 0 && processDate.getFullYear() == endYear)){
        document.getElementById(elementID+'_msg').innerHTML = 'Limit Reached';	
    } else {
        processDate.setYear(processDate.getFullYear() +amt);
        drawCal(elementID);	
    }
}

function buildCalendarHtml(calendarHtml,elementID){
    var Months = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
    currentDate = new Date();
    var string = '';
    string += '<table class="calendar" cellpadding="0" cellspacing="0"><tr><td colspan="7" style="width:auto !important">';
    string += '<div id="today_'+elementID+'" class="dateField">'+currentDate.toLocaleDateString()+'</div> </td> </tr>';
    string += '<tr><td colspan="7"><table class="calendarNav" cellpadding="0" cellspacing="0"><tr>';
    prevMonth  = '<td rowspan="2" ><a href="javascript:incMonth(-1,\''+elementID+'\')">&lt;&lt; </a></td>';
    string += prevMonth+'<td rowspan="2"><select name="cal_month" id="cal_month" onchange="setMonth(this,\''+elementID+'\')">';
    
    var selectedMonth = processDate.getMonth();
    
    //Highlight selected month
    for (var j=0 ; j<12 ; j++)
    {	
        var selectedOption = (j == selectedMonth) ? ' selected="selected "'  : ''  ;			
        string += '<option value="'+j+'" '+selectedOption+' >'+Months[j]+'</option>';                
    }
    string += '</select></td>';
    string += '<td rowspan="2"><a href="javascript:incMonth(1,\''+elementID+'\')">&gt;&gt;</a></td>';
    string += '<td rowspan="2" style="text-align:right; !important">';
    
    //Draw select boxes for year
    yearSelection = '<select name="cal_year" id="cal_year" onchange="setYear(this,\''+elementID+'\')">';
    var selectedYear = processDate.getFullYear();

    for(var p=0; p <= endYear - startYear ; p++){
        var theYear = endYear - p;
        var selectedOption = (theYear == selectedYear) ? 'selected="selected"' : '';
        yearSelection += '<option value="'+theYear+'"  '+selectedOption+'>'+theYear+'</option>'; 
    }

    yearSelection += '</select>';
    
    string += yearSelection;    
    string += '&nbsp;</td><td><a href="javascript:incYear(1,\''+elementID+'\')" class="calUpArrow"></a></td></tr>';
    string += '<tr><td><a href="javascript:incYear(-1,\''+elementID+'\')" class="calDownArrow"></a></td></tr>';
    string += '</table></td></tr>';
    string += calendarHtml;
    string += '<tr bgcolor="#EEEEEE">';
    string += '<td colspan="7">';
    string += '<table class="calendarNav"><tr><td>';
    string += '<div id="'+elementID+'_msg" style="width:90px"></div>';
    string += '</td>';
    string += '<td style="text-align:right"><input type="button" name="cancel" value=" cancel " onclick="disableField(\''+elementID+'\')"/>&nbsp;</td>';
    string += '<td align="right">';
    string += '<input type="button" name="today" value=" today "  onclick="resetCal(\''+elementID+'\')"/>&nbsp;';
    string += '</td></tr></table>';
    string += '</td></tr></table>'; 
    
    return string;
}

function drawCal(elementID)
{	
    //String stores calendar html string.
    var string = '';

	var MonthDays = new Array(31,28,31,30,31,30,31,31,30,31,30,31);	
	var daysOfWeek = new Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');	
	var totalDays;
	processDate.setDate(1);	
	
	processedMonth = processDate.getMonth();
	if (thisMonth == 1) { // February
      if (thisYear%400==0 || (thisYear%4 == 0 && thisYear%100!=0) ) totalDays +=1;
   	}
	
	startDay = processDate.getDay();
	totalDays = MonthDays[processedMonth];	
	
	theYear = processDate.getFullYear();
	
	counter = 1;
	
	string += '<tr>';
	for (var i = 0; i < 7 ; i ++)
		string += '<th>'+daysOfWeek[i]+'</th>';
	string += '</tr>';
    
	for (var i=0;i<6;i++)
	{
		if (counter-startDay > totalDays){
			break;
		}
		string += '<tr>';
		for (var j=0;j<7;j++)
		{				
			var itsToday = (((counter-startDay)==todaysDate) && (processDate.getMonth() == thisMonth) && (processDate.getFullYear() == thisYear))? 'class="today"':'';					
                        
			string += '<td >';
			if (counter-startDay >0  && (counter-startDay <=totalDays)){
				var theDay = counter-startDay-1;
                string += '<a '+itsToday+' href="javascript:updateElements('+theDay+');closeCalendar(\''+elementID+'\')" >'+(counter-startDay)+'</a>';
			}
			string += '</td>';
			counter++;
		}		
		string += '</tr>';
	}		
	
	var calendarHtml = '';
	if (document.all){
		var frameHtml = '<iframe src="" class="ieCalendarIframe" scrolling="no" frameborder="0"></iframe>';	
		calendarHtml += frameHtml;
	}
    calendarHtml += buildCalendarHtml(string,elementID);
   
    document.getElementById(elementID).innerHTML = calendarHtml;	
	
}

function fillElementPrefix(prefix){	
	eMonth = prefix+'[Month]';
	eYear = prefix+'[Year]';
	eDay = prefix+'[Day]';		
	setFields = true;
}

function closeCalendar(elementID){
	calendarOpen = false;
	disableField(elementID);
}

function updateElements(day){
   	yearIndex = (endYear - processDate.getFullYear());
	document.forms[formTarget].elements[eYear].selectedIndex = yearIndex + 1;
	document.forms[formTarget].elements[eMonth].selectedIndex = processDate.getMonth() +1;
	document.forms[formTarget].elements[eDay].selectedIndex = day +1; 
}
