var days_in_month = new Array(12);
days_in_month[0]  = 31;
days_in_month[1]  = 28;
days_in_month[2]  = 31;
days_in_month[3]  = 30;
days_in_month[4]  = 31;
days_in_month[5]  = 30;
days_in_month[6]  = 31;
days_in_month[7]  = 31;
days_in_month[8]  = 30;
days_in_month[9]  = 31;
days_in_month[10] = 30;
days_in_month[11] = 31;

var month_names = new Array(12);
month_names[0]  = 'Jan';
month_names[1]  = 'Feb';
month_names[2]  = 'March';
month_names[3]  = 'April';
month_names[4]  = 'May';
month_names[5]  = 'June';
month_names[6]  = 'July';
month_names[7]  = 'Aug';
month_names[8]  = 'Sep';
month_names[9]  = 'Oct';
month_names[10] = 'Nov';
month_names[11] = 'Dec';

var weekday= new Array(7);
weekday[0]="Sun";
weekday[1]="Mon";
weekday[2]="Tue";
weekday[3]="Wed";
weekday[4]="Thu";
weekday[5]="Fri";
weekday[6]="Sat";


/*
 * This function opents up the desired date picker calendar.
 */
function date_picker(cal)
{
	document.getElementById(cal).style.display = "block";
}

function date_picker_set_date(cal,date)
{
	var calField = cal.split('_');
	var calendar = '';
	for (i = 0; i < calField.length; i++) {
		if (i > 0) {
			calendar += calendar == '' ? calField[i] : "_" + calField[i];
		}
	}

	document.getElementById(calendar).value = date;
	document.getElementById(cal).style.display = "none";
}

function date_picker_change_month(cal,m,y)
{
	m = parseInt(m);
	y = parseInt(y);
	//alert('Month: ' + m + ' :: Year: ' + y);
	
	var pm; // Previous Month
	var nm; // Next Month
	var py; // Previous Year
	var ny; // Next Year
	var preLoad; // Days to preload the calendar with
	m = m - 1; // To work with JS we need to subtract 1 form the month. I could do this in PHP but i'm not.
	
	if (m > 0) { pm = m - 1; py = y; } else { pm = 11; py = y - 1; }
	if (m == 11) { nm = 0; ny = y + 1; } else { nm = m + 1; ny = y; }
	
	//alert('Month: ' + m + ' :: Year: ' + y);
	
	// We need to calculate the new calender. 
	var newMonth = new Date;
	newMonth.setFullYear(y,m,1);
	
	var prevMonth = new Date;
	prevMonth.setFullYear(py,pm,1);
	
	switch (weekday[newMonth.getDay()])
	{
		case 'Sun':
			preLoad = 0;
			break;
		case 'Mon':
			preLoad = 1;
			break;
		case 'Tue':
			preLoad = 2;
			break;
		case 'Wed':
			preLoad = 3;
			break;
		case 'Thu':
			preLoad = 4;
			break;
		case 'Fri':
			preLoad = 5;
			break;
		case 'Sat':
			preLoad = 6;
			break;
	}
	
	
	
	if (y%4 == 0 || y%100 == 0 || y%400 == 0) { days_in_month[1] == 29 }
	
	var days_in_month_current = days_in_month[m];
	var days_in_month_prev = days_in_month[pm];
	days_in_month_prev = days_in_month_prev - (preLoad - 1);
	var days_in_month_post = 1;
	
	var day_count = 1;
	var day_num = 1;
	var cell_num = 1;
    var dayValue = "";
	
	if (preLoad > 0)
	{
		// Load the previous month dates
		for (i = 0; i < preLoad; i++)
		{
			document.getElementById('cns_datepicker_'+cal+'_cell_'+cell_num).innerHTML = days_in_month_prev;
			document.getElementById('cns_datepicker_'+cal+'_cell_'+cell_num).className = 'cns_datepicker_notcurrentmonth';
			days_in_month_prev++;
			cell_num++;
			day_count++;
		}
	}
	
	// Loop through the rest of the days
	for (i = 0; i < days_in_month_current; i++)
	{
        if (day_num < 10) {
            dayValue = '0'+day_num;
            // alert(dayValue);
        } else {
            dayValue = day_num;
        }

        if ((m+1) < 10) {
            monthValue = '0'+(m+1);
        } else {
            monthValue = m+1;
        }

		document.getElementById('cns_datepicker_'+cal+'_cell_'+cell_num).innerHTML = day_num;
		document.getElementById('cns_datepicker_'+cal+'_cell_'+cell_num).className = 'cns_datepicker_currentmonth';
		document.getElementById('cns_datepicker_'+cal+'_cell_'+cell_num).onclick = "date_picker_set_date('"+cal+"','"+monthValue+"/"+dayValue+"/"+y+"');";
		
		document.getElementById('cns_datepicker_'+cal+'_cell_'+cell_num).setAttribute('onclick',"date_picker_set_date('"+cal+"','"+monthValue+"/"+dayValue+"/"+y+"');");
		
		day_num++;
		day_count++;
		cell_num++;
		
		if (day_count > 7)
		{
			day_count = 1;
		}
	}
	
	// Load the next month if needed
	if (cell_num < 42)
	{
		for (i = cell_num; i < 43; i++)
		{
			document.getElementById('cns_datepicker_'+cal+'_cell_'+cell_num).innerHTML = days_in_month_post;
			document.getElementById('cns_datepicker_'+cal+'_cell_'+cell_num).className = 'cns_datepicker_notcurrentmonth';
			days_in_month_post++;
			cell_num++;
		}
	}
	
	// update the month title
	document.getElementById('cns_datepicker_'+cal+'_month').innerHTML = month_names[m];
	document.getElementById('cns_datepicker_'+cal+'_year').innerHTML = y;
	
	// update the nav
	document.getElementById('cns_datepicker_nav_'+cal+'_prev').setAttribute('onclick',"date_picker_change_month('"+cal+"','"+(pm+1)+"','"+py+"');")
	document.getElementById('cns_datepicker_nav_'+cal+'_next').setAttribute('onclick',"date_picker_change_month('"+cal+"','"+(nm+1)+"','"+ny+"');")
	
}

