/* ********************************************************************

Author : Cindy Z. Johnson

Use addCalItem to add events to calendar in net.data.
Use getCalMonth,getCalYear to show calendars!
Use getCalMonth,getCalYear read the values added by addCalItem.
************************************************************************ */

var bShowYear=false;
var bShowMonth=false;
var audience="";
var inDept="";
var	prevLink="";
var	nextLink="";

var mmDays = new Array(12);
var mmNames = new Array("",
"January", "February", "March", "April","May", "June", "July", 
"August", "September", "October", "November", "December");
var outCal=new Array();

	                   
function calItem(yyyy,someInfo)
{
     this.yyyy = yyyy;
     this.someInfo = someInfo;
}

new calItem();
cal=new Array();

//month array
for (var i=1; i<=12; i++)
{
     cal[i]=new Array();
     //day array     
     for (var k=1; k<=31; k++)
          cal[i][k]=new Array();
//     if (i==12)
//        addInHolidays();
}
     
	                   
calItem.prototype.getCalInfo= function(yyyy)
{
     if ( yyyy==this.yyyy)
          return this.someInfo;
     else
          return "";
}	                   


function anyCalInfo(mm,dd,yyyy)
{
     var strInfo;
     if (cal[mm][dd].length > 0 )
     {
       strInfo = cal[mm][dd][0].getCalInfo(yyyy);
       if (strInfo.length > 0)
            return true;
	}            
     return false          
}	                   



function addCalItem(mm,dd,yyyy,someInfo)
{
     var msg;
     msg=checkYear(yyyy);
     if (msg!=true) return msg;
     
     msg=checkMonth(mm);
     if (msg!=true) return msg;
     
     msg=checkDay(mm,dd,yyyy)   ;
     if (msg!=true) return msg;
     
     var idx=cal[mm][dd].length
     
     cal[mm][dd][idx] = new calItem(yyyy,someInfo);
}


function showPrevYY(yyyy)//this function is not in use
{
var msgCal;
outCal.length=0;
yearCal.outerHTML="aa";
//     document.all["yearCal"].outerHTML="<h1 id=yearCal>hellow</h1>aaaaa";
//     document.all["yearCal"].outerHTML="bbbs";
msgCal=funcShowYear(2003);
if (msgCal != true)
 return msgCal;
outCal.length=0;
return true;
}

function initRequestType()
{
	bShowYear=false;
	bShowMonth=false;
}


function getCalMonth(mm,yyyy)
{
     var msgCal
     outCal.length=0;

     initRequestType()
     bShowMonth=true;
     msgCal=createCal(mm,yyyy)
     
     if (msgCal != true)
     {
          alert(msgCal)
          return false
      }
     return outCal.join("")
}          

 
function getCalYear(yyyy)
{
     var msgCal;
     outCal.length=0;

     initRequestType();
	 bShowYear=true;
     msgCal=funcShowYear(yyyy);

     if (msgCal != true)
     {
          alert(msgCal);
          return false;
      }

     return outCal.join("");
}          


function setPrevNextLinks(mm,yyyy)
{
	//mm=0 is to setPrevNextLinks() year only
	mmNext=1;	
	yyyyNext=parseInt(yyyy)+1;
	if (mm< 12 && mm > 0)
		{mmNext=parseInt(mm)+1; yyyyNext=yyyy;}	     	

	mmPrev=mm-1;
	yyyyPrev=yyyy;
	if (mm==1 || mm==0)
		{ mmPrev=12; yyyyPrev=yyyy-1;}	     	
	
	mmPrev--;/* <select name=viewMonth> is zero based*/
	mmNext--;
		
	//show the words previous, next  for IE4
	var prevSymbol="&#60;"; /*< symbol*/
	var nextSymbol="&#62;";/*> symbol*/
	var version = ""; 
	version += navigator.appVersion;
	if (navigator.appName== "Microsoft Internet Explorer" && version.search(/4/i))
		{prevSymbol="Previous"; nextSymbol="Next";}		
	prevLink='<a href="" class="arrow" onclick="submitLinks('+mmPrev+','+yyyyPrev+');return false">'+prevSymbol+'&nbsp;</a>';
	nextLink='<a href="" class="arrow" onclick="submitLinks('+mmNext+','+yyyyNext+');return false">&nbsp;'+nextSymbol+' </a>';
}

function submitLinks(mm,yyyy)
{
	document.calForm.viewMonth.selectedIndex=mm
	document.calForm.viewYear.value=yyyy
	document.calForm.submit();
}	

function funcShowYear(yyyy)
{
     var msg;

     msg=checkYear(yyyy);
     if (msg!=true) return msg;
     
	 setPrevNextLinks(0,yyyy);     
     outCal[outCal.length]='<table align="center" class="cal" border="1" width="92%" cellspacing="0" summary="Change Year">';
     outCal[outCal.length]='<tr><td colspan="4" class="textYear">'+ prevLink +yyyy+nextLink+'</td></tr><tr>'; 
     
     var calCols=4; 
     var iCol=0;
     for (var i = 1; i <= 12; i++)
     {
     	
          if ( iCol >= calCols )
          {
               outCal[outCal.length]='</tr><tr>';
               iCol=0;
          }
          
          outCal[outCal.length]='<td width="23%" valign="top">';
          createCal(i,yyyy);
          outCal[outCal.length]='</td>';
          iCol++;
     }                         

     outCal[outCal.length]='</table>';
     return true;
}     


function addInHolidays()
{
//     addCalItem(1,1,2001, "<span class=textHoliday>New Year's Day - County Holiday</span>");
//     addCalItem(1,12,2001, "<span class=textHoliday>Lee Jackson Day - County Holiday</span>");
}     


function createCal(mm,yyyy)
{
     //mm=1 IS JAN
     var msg;

     msg=checkYear(yyyy);
     if (msg!=true) return msg;
     
     msg=checkMonth(mm);
     mm=parseInt(mm)
     if (msg!=true) return msg;
     
     //DOW=day of week
     var startDOW = (new Date(yyyy, mm-1, 1)).getDay()+1;
     
     //DM=days in month
     var daysMM = getdaysMM(mm,yyyy);
     
     var calCols=7; 
     
     if (bShowMonth == true )
     {
        //monthly cal 
        outCal[outCal.length]='<table class="cal" border="1" cellspacing="0" cellpadding="3" summary="calendar table">';
        if ( calTypeRequest == "textSmall" ) 
    	    outCal[outCal.length]='<tr><td colspan="7" class="textMonthSmall" valign="center">';
		else 
	        outCal[outCal.length]='<tr><td colspan="7" class="textMonth" valign="center" width="100%">';
		outCal[outCal.length]= prevLink + mmNames[mm]+ '&nbsp;'+ yyyy + nextLink+'</td></tr>';
        outCal[outCal.length]='<tr><td width="12%" class="textDOW">'+
        	(calTypeRequest == "textSmall" ? "Sun":"&nbsp;&nbsp;Sunday&nbsp;&nbsp;&nbsp;") + '</td>';
        outCal[outCal.length]='<td width="15%" class="textDOW">'+
        	(calTypeRequest == "textSmall" ? "Mon":"&nbsp;&nbsp;Monday&nbsp;&nbsp;&nbsp;") + '</td>';
        outCal[outCal.length]='<td width="15%" class="textDOW">'+
        	(calTypeRequest == "textSmall" ? "Tue":"&nbsp;&nbsp;Tuesday&nbsp;&nbsp;") + '</td>';
        outCal[outCal.length]='<td width="15%" class="textDOW">'+
        	(calTypeRequest == "textSmall" ? "Wed":"&nbsp;Wednesday&nbsp;") + '</td>';
        outCal[outCal.length]='<td width="15%" class="textDOW">'+
        	(calTypeRequest == "textSmall" ? "Thu":"&nbsp;Thursday&nbsp;&nbsp;") + '</td>';
        outCal[outCal.length]='<td width="15%" class="textDOW">'+
        	(calTypeRequest == "textSmall" ? "Fri":"&nbsp;&nbsp;Friday&nbsp;&nbsp;&nbsp;") + '</td>';
        outCal[outCal.length]='<td width="12%" class="textDOW">'+
        	(calTypeRequest == "textSmall" ? "Sat":"&nbsp;&nbsp;Saturday&nbsp;") + '</td></tr>';
     }          
     else if (bShowYear == true)
     {
     	
          outCal[outCal.length]='<center><table class="cal" border="0" width="91%" cellspacing="0" cellpadding="1" summary="Yearly Calendar">';
          outCal[outCal.length]='<tr><td colspan="7" class="textMonth4Year">';
          outCal[outCal.length]=mmNames[mm] + '&nbsp;' + yyyy +'</td></tr>';
          outCal[outCal.length]='<tr><td align="right" class="textDOW">S</td>';
          outCal[outCal.length]='<td align="right" class="textDOW">M</td>';
          outCal[outCal.length]='<td align="right" class="textDOW">T</td>';
          outCal[outCal.length]='<td align="right" class="textDOW">W</td>';
          outCal[outCal.length]='<td align="right" class="textDOW">T</td>';
          outCal[outCal.length]='<td align="right" class="textDOW">F</td>';
          outCal[outCal.length]='<td align="right" class="textDOW">S&nbsp;</td></tr>';
     }           
     
     
     var calCount=1;
     while ( calCount <= daysMM)
     {
     	  if (calCount != 1)
     	  	outCal[outCal.length]='</tr>';
          outCal[outCal.length]='<tr>';
          for (var iCol=0; iCol < calCols; iCol++)
          {
                if (startDOW > 1 || calCount > daysMM)
                { //write empty cells
                    outCal[outCal.length]="<td>&nbsp;</td>";
                    startDOW--;
                }
                else
                { //write calendar info
                    if (bShowMonth == true)
                    {
					     if ( calTypeRequest == "textSmall" )
					     { //small calendar
					     	if (anyCalInfo(mm,calCount,yyyy))
	                         	outCal[outCal.length]="<td class='textDaySmall'>" + calCount + "&nbsp;&nbsp;<br><br></td>";
                         	else
	                         	outCal[outCal.length]="<td class='textDaySmallWhite'>" + calCount + "&nbsp;&nbsp;<br><br></td>";
                         }
                        else
                         { //big calendar
	                         outCal[outCal.length]="<td valign='top' class='textDayMonthly'><span class='textDay'>"+calCount+"</span><br>"
	                         getCalData(mm,calCount,yyyy);
	                         outCal[outCal.length]="</td>";
                        }
                    }
                    else
                    {
                         getCalDay(mm,calCount,yyyy);
                    }                                                  
                         
                    calCount++;
                }
          }
     }
     outCal[outCal.length]="</tr></table>";
     if (bShowYear == true)
		outCal[outCal.length]="</center>";
     return true;
}

//returns the days in the month for a given month and year
function getdaysMM(mm,yyyy)
{
     mmDays[1] = 31; 

     if (0 == yyyy % 4 && ((yyyy % 100 != 0) || (yyyy % 400 == 0)) ) 
          mmDays[2] = 29; 
     else
          mmDays[2] = 28; 

     mmDays[3] = 31; mmDays[4] = 30; mmDays[5] = 31; mmDays[6] = 30; 
     mmDays[7] = 31; mmDays[8] = 31; mmDays[9] = 30; mmDays[10] = 31; mmDays[11] = 30; mmDays[12] = 31; 
    
     return mmDays[mm];
}


function checkYear(yyyy) 
{
     if (yyyy < 1601 || yyyy > 2899 ) 
          return "Year out of range. Year must be between 1601 and 2899";
     else
     {
	     if (isNaN(yyyy))
	          return "Year out of range. Year must be between 1601 and 2899";
         return true;
      }
}

function checkDay(mm,dd,yyyy)
{
     var daysMM = getdaysMM(mm,yyyy);

     if (dd < 1 || dd > 31 || dd > daysMM)     
          return "Day value " + "'"+ dd +"'" + "not valid for month" + mmNames[mm] + ".";
     else
          return true;
}


function checkMonth(mm)
{
     if (mm < 1 || mm > 12) 
          return "Invalid month.  Month must be between 1 and 12.";
     else 
          return true;
}



var pops=null;

function popUpData(mm,dd,yyyy)
{
     var strInfo;
     var deptEvent=false;
     if (pops)
	if ( !pops.closed )
	   pops.close()
     pops=window.open('', 'popUpData', 'scrollbars=yes,width=350,height=350,resizable=yes');
     pops.document.write('<html><head><title>' +  dd + '&nbsp;'+ mmNames[mm] + '&nbsp;' + yyyy+'</title>');
	 pops.document.write('<style type="text/css">'
		+'BODY { FONT-SIZE: 10pt; BACKGROUND-IMAGE: none; COLOR: black; FONT-FAMILY: Arial, Verdana, sans-serif; BACKGROUND-COLOR: white }'
		+'.backgroundA { FONT-SIZE: 10pt; COLOR: black; BACKGROUND-COLOR: #cddbeb; text-align: left }'
		+'.backgroundB { FONT-SIZE: 10pt; COLOR: black; text-align: left }'
		+'.deptColor { FONT-SIZE: 10pt; COLOR: #28b76b; FONT-WEIGHT: bold }'
		+'.dateTitle { FONT-SIZE: 12pt; FONT-WEIGHT: bold }'
		+'</style>')
     pops.document.write('</head><body>');
     
     //get dow
 		var dow=new Date(yyyy,mm-1,dd);
		var dayCount = new Array ("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday")
		nDay=dow.getDay();//0=sun, 1=mon .. 6=sat
		
     
     pops.document.write('<br><span class="dateTitle">' + dd + '&nbsp;'+ mmNames[mm] + '&nbsp;' + yyyy+' ('+dayCount[nDay]+')</span><br><br>');

     for (var i=0; i < cal[mm][dd].length; eval(i++) )
     {
          strInfo = cal[mm][dd][i].getCalInfo(yyyy);
          if (strInfo.search(/deptColor/i) >= 0) //search for string 'deptColor', then there is a dept event
          	deptEvent=true
          if (strInfo.length > 0)
               pops.document.write(strInfo + '<br>');
     }

	if (deptEvent)
		pops.document.write(deptMsg);

     pops.document.write('</body></html>');
     pops.focus();
     pops.document.close();
}
     
function getCalDay(mm,dd,yyyy)
{
     if ( anyCalInfo(mm,dd,yyyy))
          outCal[outCal.length]='<td align="right"><a href="#" class="linkStyle" onclick="javascript:popUpData(' +mm+','+dd+','+ yyyy+');return false">'+dd+"</a></td>";
     else 
          outCal[outCal.length]="<td align='right'>"+dd+"</td>";
}

function getCalData(mm,dd,yyyy)
{
     var strInfo;
     var minCalCell=3;
     var cntCalCell=0;

     for (var i=0; i < cal[mm][dd].length; eval(i++) )
     {
          strInfo = cal[mm][dd][i].getCalInfo(yyyy);
          if (strInfo.length > 0)
          {
               outCal[outCal.length]=strInfo + "<br>";
               cntCalCell++;
          }
     }

     //write out at least minCalCell (thats 5 lines)
     for (; cntCalCell < minCalCell; cntCalCell++)
          outCal[outCal.length]='&nbsp;<br>';
}