
var events = new Hash();


function showCal(m, y, focus){
			
	var text = buildCal(m, y, focus);

	if (document.getElementById){
		document.getElementById("holder").innerHTML=text;
	}
}


function writes(month, year){
	var text = "hello: " + month + " " + year + " main month daysofweek days " + 1;
	if (document.getElementById){
		document.getElementById("holder").innerHTML=text;
	}
}



function addEvent( date, val ){
	events.setItem(date, val);
}


function buildCal(m, y, focus){
	var dim=[31,0,31,30,31,30,31,31,30,31,30,31];

	var oD = new Date(y, m-1, 1); //DD replaced line to fix date bug when current day is 31st
	oD.od=oD.getDay()+1; //DD replaced line to fix date bug when current day is 31st

	var todaydate=new Date() //DD added
	var scanfortoday=(y==todaydate.getFullYear() && m==todaydate.getMonth()+1)? todaydate.getDate() : 0; //DD added

	dim[1]=(((oD.getFullYear()%100!=0)&&(oD.getFullYear()%4==0))||(oD.getFullYear()%400==0))?29:28;
	var text='<div class="main"><table class="main" cols="7" cellpadding="0" border="1" cellspacing="0"><tr align="center">';
	
	text+=buildHeader( m, y );
	
	for(s=0;s<7;s++){
		text+='<td class="daysofweek">'+"SMTWTFS".substr(s,1)+'</td>';
	}
	text+='</tr><tr align="center">';
	for(i=1;i<=42;i++){
		var x=( (i-oD.od>=0) && (i-oD.od<dim[m-1]) )? i-oD.od+1 : '&nbsp;';
		var d=m+'/'+x+'/'+y;
		if( isEventDate( d ) ){
			if( d==focus ){
				
				if( x==scanfortoday){
					text+='<td class="eventsfToday">'+x+'</td>';
				}else{
					text+='<td class="eventsf">'+x+'</td>';
				}
				
			}else{
				if( x==scanfortoday){
					text+='<td class="eventsToday"><a href="javascript:showEvent(\''+d+'\')" class="dayLinkToday">'+x+'</a></td>';
				}else{
					text+='<td class="events"><a href="javascript:showEvent(\''+d+'\')" class="dayLink">'+x+'</a></td>';
				}
			}
		}else{	
			if( x==scanfortoday ){

				text+='<td class="today">'+x+'</td>';
			}else{
				text+='<td class="days">'+x+'</td>';
			}
		}
		if( ( (i)%7==0 )&&( i<36 ) ){
			text+='</tr><tr align="center">';
		}
	}
	return text+='</tr></table></div>';	
}

function showNextEvent( focus ){
        var closestNext = getNextEvent( focus );
        if( closestNext ){
                showEvent( closestNext );
        }
}

function getNextEvent( focus ){
        var fm, fy, fd, farr;
        var m, y, d, arr;

        var closestNext, distance;
        closestNext="";

        var focusDate = new  Date();
        var eventDate = new Date();

        farr = focus.split( "/" );
        fm=farr[0];
        fd=farr[1];
        fy=farr[2];

        focusDate.setFullYear( parseInt(fy), parseInt(fm)-1, parseInt(fd) );

        for (var i in events.items) {
                arr = i.split( "/" );
                m=arr[0];
                d=arr[1];
                y=arr[2];

                eventDate.setFullYear( parseInt(y), parseInt(m)-1, parseInt(d) );

                if( eventDate > focusDate ){
                        if( !closestNext ){
                                closestNext = i;
                                distance = Date.parse(eventDate) - Date.parse(focusDate);
                        }else if( (Date.parse(eventDate) - Date.parse(focusDate)) < distance ){
                                closestNext = i;
                                distance = Date.parse(eventDate) - Date.parse(focusDate);
                        }
		}
        }
	return closestNext;
}

function showPrevEvent( focus ){
	var closestNext = getPrevEvent( focus );
	if( closestNext ){
                showEvent( closestNext );
        }
}

function getPrevEvent( focus ){
        var fm, fy, fd, farr;
        var m, y, d, arr;

        var closestNext, distance;
        closestNext="";

        var focusDate = new  Date();
        var eventDate = new Date();

        farr = focus.split( "/" );
        fm=farr[0];
        fd=farr[1];
        fy=farr[2];

        focusDate.setFullYear( parseInt(fy), parseInt(fm)-1, parseInt(fd) );


        for (var i in events.items) {
                arr = i.split( "/" );
                m=arr[0];
                d=arr[1];
                y=arr[2];

                eventDate.setFullYear( parseInt(y), parseInt(m)-1, parseInt(d) );

                if( eventDate < focusDate ){
                        if( !closestNext ){
                                closestNext = i;
                                distance = Date.parse(focusDate) - Date.parse(eventDate);
                        }else if( (Date.parse(focusDate) - Date.parse(eventDate)) < distance ){
                                closestNext = i;
                                distance = Date.parse(focusDate) - Date.parse(eventDate);
                        }
                }
        }
	return closestNext;
}

function showToday(){
	var todaydate=new Date();
	var curmonth=todaydate.getMonth()+1;
	var curyear=todaydate.getFullYear();
	showCal(curmonth, curyear );
}

function showClosestEvent(){
	var todaydate=new Date();
        var curmonth=todaydate.getMonth()+1;
        var curyear=todaydate.getFullYear();
	var curday=todaydate.getDate();
	var today=curmonth+'/'+curday+'/'+curyear;
	var dte="";
	if( isEventDate( today ) ){
		dte = today;
	}
	if( dte == "" ){
		dte = getNextEvent( today );
	}
	if( dte == "" ){
		dte = getPrevEvent( today );
	}
	if( dte != "" ){
		//showCal( m, y, focus );
		showEvent( dte );
	}else{
		showCal( curmonth, curyear );
	}
}

function showEvent( focus ){
	var eventText="";
	var arr=focus.split("/");
	var m=arr[0];
	var d=arr[1];
	var y=arr[2];
	showCal( m, y, focus );
	eventText='<div class="main"><table class="main" cellpadding="0" border="1" cellspacing="0"><tr align="center" class="month"><td>';
	eventText+='<table border=0 cellpadding=0 cellspacing=0 width=100%><tr class="month">';
	eventText+='<td align="left"><a href="javascript:showPrevEvent(\''+focus+'\')"><img src="inc/cal/prev.gif" border=0></a></td><td align="center"><a href="javascript:showCal('+m+','+y+',\''+focus+'\')" class="headerLink">'+buildDate(d,m,y)+'</a></td><td align="right"><a href="javascript:showNextEvent(\''+focus+'\')"><img src="inc/cal/next.gif" border=0></a></td>';
	//buildDate(d,m,y);
	eventText+='</tr></table>';
	eventText+='</tr><tr align="left" valign="top"><td class="days">';
	

	//eventText += '<div class="eventText">'+events.items[focus]+'</div>';
	for (var i in events.items) {
		if( i==focus ){
			eventText += '<div class="eventText">'+events.items[i]+'</div>';
			break;
		}
	}
	
	eventText+='</td></tr></table></div>';
	if (document.getElementById){
		document.getElementById("events").innerHTML=eventText;
	}
}

function isEventDate( d ){
	var ret=0;
	for (var i in events.items) {
		if( i==d ){
			ret=1;
			break;
		}
	}
	return ret;
}

function buildDate(day,month,year){
        var mn=['January','February','March','April','May','June','July','August','September','October','November','December'];
        var text="";
        text+=mn[month-1]+' '+day+', '+year;
        return text;
}

function buildHeader(month, year){
	var mn=['January','February','March','April','May','June','July','August','September','October','November','December'];
	var text="";
	text+='<td colspan="7" align="center" class="month">';
	
	text+='<table border=0 cellpadding=0 cellspacing=0 width=100%><tr><td align=left>';
	
	//Decrement Year
	text+='<a href="javascript:showCal(';
	text+= month + ',' + (year-1);
	text+=')"><img src=\"inc/cal/prev_year.gif\" border=0></a>';
	
	//Decrement Month
	text+='<a href="javascript:showCal(';
	text+= decMonth( month, year );
	text+=')"><img src=\"inc/cal/prev.gif\" border=0></a>';
	
	text+='</td><td align=center class=\'month\'>';
	text+='<a href="javascript:showToday()" class="headerLink">'+mn[month-1]+' - '+year+'</a>';
	text+='</td><td align=right>';
	
	//Increment Month
	text+='<a href="javascript:showCal(';
	text+= incMonth( month, year );
	text+=')"><img src=\"inc/cal/next.gif\" border=0></a>';
	
	//Increment Year
	text+='<a href="javascript:showCal(';
	text+= month + ',' + (parseInt(year)+1);
	text+=')"><img src=\"inc/cal/next_year.gif\" border=0></a>';
	
	text+='</td></tr></table>';
	text+='</td></tr><tr align="center">';
	return text;
}


function incMonth( month, year ){

	var nMonth;
	var nYear;
	var text = "";

	if( parseInt(month) == 12 ){
		nMonth = 1;
		nYear = parseInt(year) + 1;
	}else{
		nMonth = parseInt(month) + 1;
		nYear = year;
	}

	text = nMonth + ', ' + nYear;
	return ( text );
}


function decMonth( month, year ){

	var nMonth;
	var nYear;
	var text = "";

	if( parseInt(month) == 1 ){
		nMonth = 12;
		nYear = parseInt(year) - 1;
	}else{
		nMonth = parseInt(month) - 1;
		nYear = year;
	}

	text = nMonth + ', ' + nYear;
	return ( text );
}


function Hash()
{
	this.length = 0;
	this.items = new Array();
	for (var i = 0; i < arguments.length; i += 2) {
		if (typeof(arguments[i + 1]) != 'undefined') {
			this.items[arguments[i]] = arguments[i + 1];
			this.length++;
		}
	}
   
	this.removeItem = function(in_key)
	{
		var tmp_value;
		if (typeof(this.items[in_key]) != 'undefined') {
			this.length--;
			var tmp_value = this.items[in_key];
			delete this.items[in_key];
		}
	   
		return tmp_value;
	}

	this.getItem = function(in_key) {
		return this.items[in_key];
	}

	this.setItem = function(in_key, in_value)
	{
		if (typeof(in_value) != 'undefined') {
			if (typeof(this.items[in_key]) == 'undefined') {
				this.length++;
			}

			this.items[in_key] = in_value;
		}
	   
		return in_value;
	}

	this.hasItem = function(in_key)
	{
		return typeof(this.items[in_key]) != 'undefined';
	}
}



