/* 
# Name: Calendar Builder 
# Version: v1.1
# Author: Justin Smith
# Created: 10/15/2006
# Updated: 7/20/2010
*/

function buildcalendar(year,month,nowrite,nme) {
var monthdays = new Array("31","28","31","30","31","30","31","31","30","31","30","31");
var month_of_year = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
var short_month_name = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
var day_of_week = new Array('S','M','T','W','T','F','S');

var today = new Date();
var yr = (isNaN(year) || year==null) ? today.getFullYear() : year;
var mo = (isNaN(month) || month==null) ? today.getMonth() : month;
var day = today.getDate();

var this_month = new Date(yr, mo, 1);
var days_in_month = monthdays[this_month.getMonth()];
var name_of_month = month_of_year[this_month.getMonth()];
var	first_week_day = this_month.getDay();
var mo = this_month.getMonth();
var next_month = mo + 1;
//
var dt = new Date(this_month.getFullYear(),this_month.getMonth(),1);
dt.setMonth(dt.getMonth() - 1);
var prv_mo = dt.getMonth();
var prv_yr = dt.getFullYear();
//
dt.setMonth(dt.getMonth() + 2);
var nxt_mo = dt.getMonth();
var nxt_yr = dt.getFullYear();

if (((yr % 4 == 0) && (yr % 100 != 0)) || (yr % 400 == 0)) monthdays[1] = "29";

var x = 1;
var y;
var s;
var cal;
	
	// Month and year	
	cal = '<th style="font : 9pt Verdana, Geneva, Arial, Helvetica, sans-serif; background-color: #bfd2ea; border: 1px dotted #bfd2ea" colspan="8">';
	cal += '<img src="../img/button_back2.gif" width="15" height="13" onclick=calchng("' + prv_yr + '","' + prv_mo + '","' + nme + '") id="calimg"> <span style="font-weight: bold;">' + name_of_month + ' ' + year + '</span> <img src="../img/button_forward2.gif" width="15" height="13" onclick=calchng("' + nxt_yr + '","' + nxt_mo + '","' + nme + '") id="calimg">';
	cal+= '</th>';
	
	//Days of week
	var w;
	cal += '<tr>';
	for (w=0; w < 7; w++) {
		cal += '<td align="center" bgcolor="#f4f4ef" style="border-bottom:1px dotted black;border-top:1px dotted black"><strong>' + day_of_week[w] + '</strong></td>';
	}
		cal += '<td align="center" bgcolor="#f4f4ef" style="border-bottom:1px dotted black;border-top:1px dotted black"><strong>WK</strong></td>';
	cal += '</tr>';
	
	//Fill blanks to start date of month
	var s;
	cal += '<tr>';
	for (s=0; s < first_week_day; s++) {
		cal += '<td align="center" style="background-color:#faf9dc;">&nbsp;</td>';
	}
	
	// Fill calendar
	x = first_week_day;
	y = 1;
	while (y <= days_in_month) {
		x %= 7;
		if (x == 0) {
			cal += '</tr><tr>';
		}
		//
		if (y != day) {
			cal += '<td align="center" style="background-color:#ecf2fa;border:1px dotted black" onmouseover=this.style.cursor="default" onclick=adddate("' + nme + '","' + yr + '-' + next_month + '-' + y + '");>' + y + '</td>';
		} else {
			cal += '<td align="center" style="background-color:#f5deb3;font-weight:bold;border:1px dotted black" onmouseover=this.style.cursor="default" onclick=adddate("' + nme + '","' + yr + '-' + next_month + '-' + y + '");>' + y + '</td>';
		}
		//
		if (x == 6) {
			cal += '<td align="center" style="background-color:transparent;font-weight:bold;border:1px dotted black" onmouseover=this.style.cursor="default">' + getWeek(yr,mo,y) + '</td>';
		}
		x++;
		y++;
	}
	y--;
	if (x < 7) {
		while (x < 7) {
			cal += '<td align="center" style="background-color:#faf9dc;">&nbsp;</td>';
			x++;
		}
		cal += '<td align="center" style="background-color:transparent;font-weight:bold;border:1px dotted black" onmouseover=this.style.cursor="default">' + getWeek(yr,mo,y) + '</td>';
	}
	cal += '</tr>';
	if (nowrite == false) document.write(cal);
	return cal;
}

/*--------------------------*/
	
function y2k(number) { return (number < 1000) ? number + 1000 : number; }

/*--------------------------*/

function getWeek(year,month,day) {
    var when = new Date(year,month,day);
    var newYear = new Date(year,0,1);
    var offset = 7 + 1 - newYear.getDay();
    if (offset == 8) offset = 1;
    var daynum = ((Date.UTC(y2k(year),when.getMonth(),when.getDate(  ),0,0,0) - Date.UTC(y2k(year),0,1,0,0,0)) /1000/60/60/24) + 1;
    var weeknum = Math.floor((daynum-offset+7)/7);
    if (weeknum == 0) {
        year--;
        var prevNewYear = new Date(year,0,1);
        var prevOffset = 7 + 1 - prevNewYear.getDay();
        if (prevOffset == 2 || prevOffset == 8) weeknum = 53; else weeknum = 52;
    }
    return weeknum;
}

/*--------------------------*/

	var tmr;
	function showmini(e,n)
	{
		var x;
		var y;
		if (window.event) {
			x = (window.event.clientX) - 5;
			y = (window.event.clientY) - 5;
		} else {
			x = (e.clientX) - 5;
			y = (e.clientY) - 5;			
		}
		//
		var cl = document.getElementById("calout");
		if (document.getElementById("calout") != null) document.body.removeChild(document.getElementById("calout"));
		//
		var outter = document.createElement('div');
		outter.setAttribute('id','calout');
		outter.className = 'calout';
		outter.style.position = 'absolute';
		outter.style.top = y + 'px';
		outter.style.left = x + 'px';
		outter.style.border = '1px solid black';
		outter.style.width = '200px';
		outter.style.height = '200px';
		//
		if (window.addEventListener) {
			outter.addEventListener('mouseover', oncal, false);
			outter.addEventListener('mouseout', offcal, false);
			outter.addEventListener('click', function(event) { clkcal(event); }, false);
		} else {
			outter.attachEvent('onmouseover', oncal);
			outter.attachEvent('onmouseleave', offcal);
			outter.attachEvent('onclick', function(event) { clkcal(event); });		
		}
		//
		var vdata;
		var today = new Date();
		var yr;
		if (window.event) {
			yr = today.getYear();
		} else {
			yr = today.getYear() + 1900;
		}
		var mo = today.getMonth();
		var cdata = buildcalendar(yr,mo,'True',n);
		//
		vdata = '<table style="width:100%;height:100%" align="center" cellpadding="0" cellspacing="0" border="0">';
		vdata += cdata;
		vdata += '</table>';
		//
		outter.innerHTML = vdata;
		document.body.appendChild(outter);
	}

/*--------------------------*/
	
	var blnOut = false;
	function caltmr()
	{
		if (blnOut == false) {
			window.clearInterval(tmr);
			document.body.removeChild(document.getElementById('calout'));
		}
	}
	
/*--------------------------*/	
	
	function offcal()
	{
		tmr = setInterval('caltmr()', 800);
		blnOut = false;
	}
	
/*--------------------------*/	
	
	function oncal()
	{
		window.clearInterval(tmr);
		blnOut = true;
	}
	
/*--------------------------*/	
	
	function clkcal(e)
	{
		window.clearInterval(tmr);
		blnOut = true;
		//document.body.removeChild(document.getElementById('calout'));
	}
	
/*--------------------------*/	
	
	function calchng(yr,mo,n)
	{		
		var calbox = document.getElementById('calout');
		calbox.innerHTML = "";
		
		var cdata = buildcalendar(yr,mo,'True',n);
		var vdata;
		vdata = '<table style="width:100%;height:100%" align="center" cellpadding="0" cellspacing="0" border="0">';
		vdata += cdata;
		vdata += '</table>';
		calbox.innerHTML = vdata;
	}
/*--------------------------*/	

function adddate(id,v)
{
		document.getElementById(id).value = v;
}
