//
// name    : httpdocs/$sitedir/calendar_functions.js
// purpose : src= for javascript calendar function definitions
// notes   : Included into a page when form_calendar_functions() is called
//           in headhtml.pl for that option=. The form_calendar_functions()
//           just includes the following code in the <head> of the page :-
//              <script language="javascript" type="text/javascript"
//                      src=/$sitedir/calendar_functions.js>
//              </script>
// modified:-
// 001 30/03/05 gbg   Initial issue
// 002 27/04/05 gbg   Added defaultbgimage and togglebgimages args
// 003 23/05/05 gbg   If initial color for any day cell not in togglebgcolors set
//                    background image to defaultbgimage (if any).
// 004 24/05/05 gbg   Added operationmode=>multiselect.togglecolorsonly processing.
//
// 005 27/05/07/KS    Amended to use css for bg image and color and amended for Firefox working
//
// (C) AVPT Ltd. 2005
//
function fToggleColor(myElement, fname) {
   var normalcolor = document.getElementById(fname+"_arg_textcolor").value;
   var hovercolor  = document.getElementById(fname+"_arg_hovertextcolor").value;
   // myElement.id will be fname+calCell+offset, pull out the offset suffix
   // build id for text, fname+calDateText+offset and get that element
   // then toggle its color
   var suffix = myElement.id.substr(7+fname.length);
   var textid = fname + "calDateText" + suffix;
   var thistext = document.getElementById(textid);
   if (thistext.color == hovercolor) {
      thistext.color = normalcolor;
   }else{
      thistext.color = hovercolor;
   }
}
function fSetSelectedDay(myElement, fname){
   var opmode     = document.getElementById(fname+"_arg_operationmode").value;
   // before doing anything check if noselect is specified
   if(opmode!="noselect"){
      var prefix = myElement.id.substr(0,7+fname.length);
      // myElement could be fname+calCell+offset or fname+calDateText+offset
      // in either case the bg color of both needs setting to the next
      // one in the list and recording in the hidden form fields
      if (prefix == fname + "calCell") {
         var suffix = myElement.id.substr(7+fname.length);
      }else{
         var suffix = myElement.id.substr(11+fname.length);
      }
      var offset = suffix;
      var day = offset + 1;
      var cellid = fname + "calCell" + suffix;
      var textid = fname + "calDateText" + suffix;
      var thiscell = document.getElementById(cellid);
      var thistext = document.getElementById(textid);
      // get saved bgcolors from hidden form field for this day
      var hidden = fname + "_day" + offset;
      var savedbgcolors = document.getElementById(hidden).value.split(",");
      var origbgcolor = savedbgcolors[0];
      var oldbgcolor  = savedbgcolors[1];
      // list of colors to toggle through obtained from hidden form field
      var togcolors  = document.getElementById(fname+"_arg_togglebgcolors").value;
      var togglebgcolors = togcolors;
      var bgcolors = togglebgcolors.split(",");
      // scan through them to find what we are currently set to
      var newcolor = "unknown";
      var bgindex = 0;		// 20050427 keep track of color index to use in image list
      for(i=0;i < bgcolors.length;i++){
         if(bgcolors[i]==oldbgcolor){
            newcolor=bgcolors[++i];
            bgindex=i;      // 20050427 keep track of color index to use in image list
            if(i==bgcolors.length){
               newcolor=bgcolors[0];
               bgindex=0;      // 20050427 keep track of color index to use in image list
            }
         }
      }
      if(newcolor=="unknown" && opmode=="multiselect.togglecolorsonly"){ // 20050524
         // 20050524 We do not want cells that have been initially set to a color other
         // 20050524 than one in the togglebgcolors list to be modifiable. So just do
         // 20050524 nothing at this point.
      }else{ //20050524
         if(newcolor=="unknown"){
            // use first in list if none are set yet
            newcolor=bgcolors[0];
            bgindex=0;      // 20050427 keep track of color index to use in image list
         }
         // 20050524 if(opmode!="multiselect"){
         if(opmode!="multiselect" && opmode!="multiselect.togglecolorsonly"){ //20050524
            // if not multiselect mode clear all cells before setting this one
            var hidden_dim = fname + "_daysinmonth";
            var dim = document.getElementById(hidden_dim).value;
            initbgcolors(dim, fname);
         }
         // set bg colour of this cell and text
         thiscell.bgColor = newcolor;
         thistext.bgColor = newcolor;
         // 20050427 get list of bg images from togglebgimages hidden form field and 
         // 20050427 set corresponding bg image, if specified, to the bg color
         var togimages  = document.getElementById(fname+"_arg_togglebgimages").value;
         var togglebgimages = togimages;
         var bgimages = togglebgimages.split(",");

	// 005 on following was - thiscell.background = bgimages[bgindex];

         thiscell.style.backgroundImage = bgimages[bgindex];

         // record new colour in hidden form field for this day
         document.getElementById(hidden).value=origbgcolor+","+newcolor;
      } //20050524
   }
}


//---------------------------------------------Create Colours------------------------------------------

function initbgcolors(daysinmonth, fname) {
   var sDateTextColor = document.getElementById(fname+"_arg_textcolor").value;
   for(i=0;i < daysinmonth;i++){
      var hidden = fname + "_day" + i;
      var cellid = fname + "calCell" + i;
      var textid = fname + "calDateText" + i;
      var thiscell = document.getElementById(cellid);
      var thistext = document.getElementById(textid);
      // set cell bgcolor
      var savedbgcolors = document.getElementById(hidden).value.split(",");
      var origbgcolor = savedbgcolors[0];
      var oldbgcolor  = savedbgcolors[1];
      document.getElementById(hidden).value = origbgcolor+","+origbgcolor;
      thiscell.bgColor=origbgcolor;


      // set cell text color
      thistext.color = sDateTextColor;

      // 20050427 find origbgcolor in list of togglebgcolors and if found 
      // 20050427 set corresponding togglebgimage if specified
      var togcolors  = document.getElementById(fname+"_arg_togglebgcolors").value;
      var togglebgcolors = togcolors;
      var bgcolors = togglebgcolors.split(",");
      // 20050427 scan through them to find what we are currently set to
      var bgindex = -1;
      for(j=0;j < bgcolors.length;j++){
         if(bgcolors[j]==origbgcolor){
            bgindex=j;
         }
      }
      // 20050523 if color not in togglebgcolors use defaultbgimage
      if(bgindex > -1){
         // 20050427 set background uri that corresponds to matching togglebgcolor
         var togimages  = document.getElementById(fname+"_arg_togglebgimages").value;
         var togglebgimages = togimages;
         var bgimages = togglebgimages.split(",");

// 005 on following was - thiscell.background = bgimages[bgindex];

         thiscell.style.backgroundImage = bgimages[bgindex];



      }else{

         var defaultbgimage = document.getElementById(fname+"_arg_defaultbgimage").value;

// 005 on following was - thiscell.background = defaultbgimage;

         thiscell.style.backgroundImage = defaultbgimage;
		
      }
   }
}

//------------------------------------------------------------------------------------------------------------------------

function fGetDaysInMonth(iMonth, iYear) {
   var dPrevDate = new Date(iYear, iMonth, 0);
   return dPrevDate.getDate();
}

function fBuildCal(iYear, iMonth, iDayStyle) {
   var aMonth = new Array();
   aMonth[0] = new Array(7);
   aMonth[1] = new Array(7);
   aMonth[2] = new Array(7);
   aMonth[3] = new Array(7);
   aMonth[4] = new Array(7);
   aMonth[5] = new Array(7);
   aMonth[6] = new Array(7);
   var dCalDate = new Date(iYear, iMonth-1, 1);
   var iDayOfFirst = dCalDate.getDay();
   var iDaysInMonth = fGetDaysInMonth(iMonth, iYear);
   var iVarDate = 1;
   var i, d, w;
   if (iDayStyle == 2) {
      aMonth[0][0] = "Sunday";
      aMonth[0][1] = "Monday";
      aMonth[0][2] = "Tuesday";
      aMonth[0][3] = "Wednesday";
      aMonth[0][4] = "Thursday";
      aMonth[0][5] = "Friday";
      aMonth[0][6] = "Saturday";
   } else if (iDayStyle == 1) {
      aMonth[0][0] = "Sun";
      aMonth[0][1] = "Mon";
      aMonth[0][2] = "Tue";
      aMonth[0][3] = "Wed";
      aMonth[0][4] = "Thu";
      aMonth[0][5] = "Fri";
      aMonth[0][6] = "Sat";
   } else {
      aMonth[0][0] = "Su";
      aMonth[0][1] = "Mo";
      aMonth[0][2] = "Tu";
      aMonth[0][3] = "We";
      aMonth[0][4] = "Th";
      aMonth[0][5] = "Fr";
      aMonth[0][6] = "Sa";
   }
   for (d = iDayOfFirst; d < 7; d++) {
      aMonth[1][d] = iVarDate;
      iVarDate++;
   }
   for (w = 2; w < 7; w++) {
      for (d = 0; d < 7; d++) {
         if (iVarDate <= iDaysInMonth) {
            aMonth[w][d] = iVarDate;
            iVarDate++;
         }
      }
   }
   return aMonth;
}


function fDrawCal(fieldname) {
   var iYear           = document.getElementById(fieldname+"_arg_year").value;
   var iMonth          = document.getElementById(fieldname+"_arg_month").value;
   var iCellWidth      = document.getElementById(fieldname+"_arg_boxwidth").value;
   var iCellHeight     = document.getElementById(fieldname+"_arg_boxheight").value;
   var sDateTextColor  = document.getElementById(fieldname+"_arg_textcolor").value;
   var sDateTextFont   = document.getElementById(fieldname+"_arg_font_family").value;
   var sDateTextSize   = document.getElementById(fieldname+"_arg_font_size").value;
   var sDateTextWeight = document.getElementById(fieldname+"_arg_font_weight").value;
   var iDayStyle       = document.getElementById(fieldname+"_arg_daystyle").value;
   var cellpadding     = document.getElementById(fieldname+"_arg_cellpadding").value;
   var cellspacing     = document.getElementById(fieldname+"_arg_cellspacing").value;
   var border          = document.getElementById(fieldname+"_arg_border").value;
   var bordercolor     = document.getElementById(fieldname+"_arg_bordercolor").value;
   var hovertextcolor  = document.getElementById(fieldname+"_arg_hovertextcolor").value;
   var defaultbgcolor  = document.getElementById(fieldname+"_arg_defaultbgcolor").value;
   var togglebgcolors  = document.getElementById(fieldname+"_arg_togglebgcolors").value;
   var operationmode   = document.getElementById(fieldname+"_arg_operationmode").value;
   var bgcolor         = document.getElementById(fieldname+"_arg_bgcolor").value;
   var caltitle         = document.getElementById(fieldname+"_arg_caltitle").value;
   // 20050427 get new defaultbgimage and togglebgimages hidden form fields
   var defaultbgimage  = document.getElementById(fieldname+"_arg_defaultbgimage").value;



//alert(defaultbgimage);


   var togglebgimages  = document.getElementById(fieldname+"_arg_togglebgimages").value;
   var myMonth;
   if(iDayStyle=="vshort"){iDayStyle=0};
   if(iDayStyle=="short" ){iDayStyle=1};
   if(iDayStyle=="long"  ){iDayStyle=2};
   myMonth = fBuildCal(iYear, iMonth, iDayStyle);
   document.write("<table style='background-color:"+bgcolor+";border:"+border+"px solid "+bordercolor+";' cellpadding="+cellpadding+" cellspacing="+cellspacing+">")
   if (caltitle!="") {
      document.write("<tr><td align='center' style='font-weight:bold;border:"+border+"px solid "+bordercolor+";' colspan='7'>" + caltitle + "</td></tr>");
   }

//These statements build up the top of the calender with the default days

//alert(iCellHeight);

   document.write("<tr>");
   document.write("<td align='center' style='border:"+border+"px solid "+bordercolor+";color:" + sDateTextColor + "; font-family:" + sDateTextFont + ";font-size:" + sDateTextSize + ";font-weight: " + sDateTextWeight + "'>" + myMonth[0][0] + "</td>");
   document.write("<td align='center' style='border:"+border+"px solid "+bordercolor+";color:" + sDateTextColor + "; font-family:" + sDateTextFont + ";font-size:" + sDateTextSize + ";font-weight: " + sDateTextWeight + "'>" + myMonth[0][1] + "</td>");
   document.write("<td align='center' style='border:"+border+"px solid "+bordercolor+";color:" + sDateTextColor + "; font-family:" + sDateTextFont + ";font-size:" + sDateTextSize + ";font-weight: " + sDateTextWeight + "'>" + myMonth[0][2] + "</td>");
   document.write("<td align='center' style='border:"+border+"px solid "+bordercolor+";color:" + sDateTextColor + "; font-family:" + sDateTextFont + ";font-size:" + sDateTextSize + ";font-weight: " + sDateTextWeight + "'>" + myMonth[0][3] + "</td>");
   document.write("<td align='center' style='border:"+border+"px solid "+bordercolor+";color:" + sDateTextColor + "; font-family:" + sDateTextFont + ";font-size:" + sDateTextSize + ";font-weight: " + sDateTextWeight + "'>" + myMonth[0][4] + "</td>");
   document.write("<td align='center' style='border:"+border+"px solid "+bordercolor+";color:" + sDateTextColor + "; font-family:" + sDateTextFont + ";font-size:" + sDateTextSize + ";font-weight: " + sDateTextWeight + "'>" + myMonth[0][5] + "</td>");
   document.write("<td align='center' style='border:"+border+"px solid "+bordercolor+";color:" + sDateTextColor + "; font-family:" + sDateTextFont + ";font-size:" + sDateTextSize + ";font-weight: " + sDateTextWeight + "'>" + myMonth[0][6] + "</td>");
   document.write("</tr>");
   var day = 0;
   var id = "";
   for (w = 1; w < 7; w++) {

      document.write("<tr>");

      for (d = 0; d < 7; d++) {

         if (!isNaN(myMonth[w][d])) {

            if (operationmode == "noselect") {

               var cursorstyle = "cursor:arrow";

            }else{

               var cursorstyle = "cursor:hand";

            }

            id = fieldname + "calCell" + day;

            // 20050427 added "background-repeat: no-repeat; background-attachment: fixed; background-position: bottom right; " to style= in following line
            

	//005	//document.write("<td id=" + id + "  align='left' valign='top' style='background-repeat: no-repeat; background-attachment: fixed; background-position: bottom right; border:"+border+"px solid "+bordercolor+";" + cursorstyle + ";width:" + iCellWidth + ";height:" + iCellHeight + ";' onload='fToggleColor(this,\"" + fieldname + "\")' onmouseover='fToggleColor(this,\"" + fieldname + "\")' onmouseout='fToggleColor(this,\"" + fieldname + "\")' onclick='fSetSelectedDay(this,\"" + fieldname + "\")'>");
            
		document.write("<td id=" + id + " class='avptcalcells' cursorstyle; onload='fToggleColor(this,\"" + fieldname + "\")' onmouseover='fToggleColor(this,\"" + fieldname + "\")' onmouseout='fToggleColor(this,\"" + fieldname + "\")' onclick='fSetSelectedDay(this,\"" + fieldname + "\")'>");  //005
            	

		id = fieldname + "calDateText" + day++;

            	document.write("<font id=" + id + " style='" + cursorstyle + ";font-family:" + sDateTextFont + ";font-size:" + sDateTextSize + ";font-weight:" + sDateTextWeight + "' onclick='fSetSelectedDay(this,\"" + fieldname + "\")'>" + myMonth[w][d] + "</font>");
     
	    } else {

            	document.write("<td align='left' valign='top' style='border:"+border+"px solid "+bordercolor+";width:" + iCellWidth + ";height:" + iCellHeight + ";' >");
            	
		document.write("<font style='cursor:hand;font-family:" + sDateTextFont + ";font-size:" + sDateTextSize + ";font-weight:" + sDateTextWeight + "'> </font>");
         
	     }
         document.write("</td>");
      }
      document.write("</tr>");
   }
   document.write("</table>");

   var hidden_dim = fieldname + "_daysinmonth";   document.getElementById(hidden_dim).value=day;

   initbgcolors(day, fieldname);
}
