///////////////////////////////////////////////////////////////////////////////////////////////////
// File: calendar.js
// Creator: Monjay Settro, Devbleue Inc.
// Purpose: Localizes Calendar Functions, requires ajax.js
// History:
// 06/05/07, monjay, changed parseInt(value) to parseInt(value, base) because parseInt('08') and 
//                   parseInt('09') to seems like octal rather than decimal numbers to the browser
//                   http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256C85006A6604
// Notes: This could be cleaner... perhaps in time.
///////////////////////////////////////////////////////////////////////////////////////////////////

var calconf;

///////////

function previous_month()
{
   nav_month(-1);
}
function next_month()
{
   nav_month(+1);
}
function nav_month(next_or_previous)
{
   for(var m = 0; m < calconf['themonths'].length; m++)
   {
      if (calconf['selected_month'] == calconf['themonths'][m])
      {
         if ((next_or_previous == +1) &&
            (calconf['themonths'][m] == calconf['themonths'][calconf['themonths'].length-1]))
         {
            calstart(calconf['themonths'][0], 
                     calconf['selected_year'] + next_or_previous, 
                     calconf['selected_subcategory'])
         }
         else if ((next_or_previous == -1) &&
                  (calconf['themonths'][m] == calconf['themonths'][0]))
         {
            calstart(calconf['themonths'][calconf['themonths'].length-1], 
                     calconf['selected_year'] + next_or_previous, 
                     calconf['selected_subcategory'])
         }
         else
         {
            calstart(calconf['themonths'][m + next_or_previous], 
                     calconf['selected_year'], 
                     calconf['selected_subcategory'])
         }
         return true;
      }
   } //for
} //nav_month

///////////////////////////////////////////////////////////////////////////////////////////////////

function day_numbers(selected_month, selected_year)
{
   if (!calconf)
   {
      return false;
   }

   var today = new Date();

   calconf['themonths'] = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December')
   calconf['current_month_number'] = today.getMonth() + 1;
   calconf['current_month']        = calconf['themonths'][today.getMonth()];
   calconf['current_day']          = today.getDate();
   calconf['current_year']         = today.getFullYear();
   calconf['selected_month']       = (!selected_month) ? calconf['current_month'] : selected_month;
   calconf['selected_year']        = (!selected_year)  ? calconf['current_year']  : selected_year;

   // calconf['selected_day'] may or may not be set depending on the
   // comparison of the selected month/year to the current month/year
   if ((calconf['selected_month'] == calconf['current_month']) &&
       (calconf['selected_year'] == calconf['current_year']))
   {
        calconf['selected_day'] = calconf['current_day'];
   }

   var SoM = new Date(calconf['selected_month'] + ' 01, ' + calconf['selected_year']) // start of month

   calconf['selected_month_number']          = SoM.getMonth() + 1;
   calconf['selected_month_last_day_number'] = calc_last_day_of_month(calconf['selected_month'], calconf['selected_year']);
   calconf['selected_month_start_Week1Day']  = SoM.getDay() + 1;

   setCalVal('dataMonthNameYear',   calconf['selected_month'] + ' ' + calconf['selected_year'])
   setCalClass('dataMonthNameYear', 'textMonthNameYear textMonthNameYear' + calconf['selected_month']) //stack 'textMonthNameYear textMonthNameYear<Month>'

   var cellMonthNameStyle = 'cellMonthName'
   for (var m = 0; m < calconf['themonths'].length; m++)
   {
      if (calconf['themonths'][m] == calconf['selected_month'])
      {
         cellMonthNameStyle = cellMonthNameStyle + ' ' + 'cellMonthName' + calconf['themonths'][m];
      }
   }
   setCalClass('cellMonthName', cellMonthNameStyle);

   var day_number      = 0;
   var content         = '';
   var initialized     = new Array;
   var start_numbering = false;

   calconf['days_in_week']  = new Array;

   for (var w = 1; w < 7; w++)
   {
      for (var d = 1; d < 8; d++)
      {
         start_numbering = ((w == 1) && (d == calconf['selected_month_start_Week1Day'])) ? true : start_numbering;
         start_numbering = (day_number == calconf['selected_month_last_day_number']) ? false : start_numbering;

         content = '';
         if (start_numbering)
         {
            content = day_number = day_number + 1

            // Creates calconf['Mondays'] = MM/DD/YYYY, MM/DD/YYYY, MM/DD/YYYY  arrays
            var day_name = calconf['weekdays'][d-1];
                day_name = day_name + 's'

            var day_number_date = two_digits(calconf['selected_month_number']) + '/' + 
                                  two_digits(day_number) + '/' + 
                                  calconf['selected_year']

            if (!initialized[day_name])
            {
               calconf[day_name] = new Array();
               initialized[day_name] = 1;
            }
            calconf[day_name].push(day_number_date);

            if (!calconf['days_in_week'][w])
            {
                calconf['days_in_week'][w] = day_number
            }
            else
            {
               calconf['days_in_week'][w] = calconf['days_in_week'][w] + ',' + day_number;
            }

//alert('*'+calconf['days_in_week'][w]+'*')
//if (day_number == 3) { return }

         } // if (start_numbering)
         
         setCalVal('dataDayWeek' + w + 'Day' + d, content);
         if ((calconf['selected_month'] == calconf['current_month']) &&
             (day_number == calconf['current_day']) &&
             (calconf['selected_year'] == calconf['current_year']))
         {
            setCalClass('dataDayWeek' + w + 'Day' + d, "textDay textDayWeek1 textDayWeek1Day4 todayIndicator todayIndicator" + calconf['selected_month']);
         }
      } //for each day
   } // for each calendar week

   var o = document.getElementById('week6')
   o.className = 'week6off'
   if ((calconf['selected_month_start_Week1Day'] > 5) && (calconf['selected_month_last_day_number'] > 29)) // 04/29/09, monjay, this test should be for greater than 5 and 29 not 6 and 29
   {
      o.className = 'week6'
   }

   o = document.getElementById('week5');
   o.className = 'week5'
   if ((calconf['selected_month_start_Week1Day'] == 1 ) && (calconf['selected_month_last_day_number'] == 28))
   {
      o.className = 'week5off'
   }

   return true
} //days_numbers

///////////////////////////////////////////////////////////////////////////////////////////////////

function day_names(nameLength)
{
   if (calconf)
   {
      calconf['weekdays'] = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
      calconf['weekdays_name_size'] = 10
      calconf['weekdays_name_size'] = 1

      for(var d = 1; d < 8; d++)
      {
          setCalVal('dataDayName' + d, calconf['weekdays'][d-1].substr(0, calconf['weekdays_name_size']));
      }
      return true
   }
   return false
}

///////////

function clear_calendar(selected_subcategory)
{
   var clear_all = true;
       clear_all = ((calconf.length) && (selected_subcategory == calconf['selected_subcategory'])) ? false : clear_all;

   remove_occurences();
   if (clear_all)
   {
      //remove day_numbers, reset styles...
      for (w = 1; w < 7; w++)
      {
         for (d = 1; d < 8; d++)
         {
             if (w == 1)
             {
                 //setCalVal('dataDayName' + d, '&nbsp;');
             }
             setCalVal('dataDayWeek' + w + 'Day' + d, '');
             setCalClass('dataDayWeek' + w + 'Day' + d, "textDay textDayWeek1 textDayWeek1Day4 todayIndicatorOff");
         }
      }
      setCalVal('dataMonthNameYear', '&nbsp; &nbsp;');
   }
   remove_calendar_config(selected_subcategory)
   return true;
}

///////////////////////////////////////////////////////////////////////////////////////////////////

function calstart(selected_month, selected_year, selected_subcategory)
{
   //if (!selected_month) { selected_month = 'July'; selected_year = '2007'; selected_subcategory = 'Subcategory2'; }
   var ok = true;

   calwait(true);
   if (!calconf)
   {
      ok = calinit();
   }   
   if (ok)
   {
      ok = clear_calendar(selected_subcategory);
   }
   if (ok)
   {
      ok = day_names();
   }
   if (ok)
   {
      ok = day_numbers(selected_month, selected_year);
   }   
   if (ok)
   {
      config_data(selected_subcategory);
      return true;
   }
   return ok;
}
function calinit()
{
   calconf = new Array();

   calconf['pipe'] = new Array();
   calconf['pipe']['config'] = false;
   calconf['pipe']['occurences'] = false;

   calconf['xml'] = new Array();
   calconf['xml']['config'] = false;
   calconf['xml']['occurences'] = false;

   calconf['init'] = true;
   return true;
}
function calwait(on)
{
   if (on)
   {
caldebug('calwait() - on')
      setCalVal('wait', '<table border="1" cellspacing="4"><tr><td valign="middle" align="center">Loading...</td></tr></table>');
      setCalClass('wait', 'wait');
   }
   else
   {
caldebug('calwait() - off')
      setCalClass('wait', 'wait waitOff');
   }
}

function caldebug(msg)
{
   // for production: if (false)... + css debug { display: none; ... }
   // for development: if (true)... + css debug { display: block; ... }
   if (false)
   {
      var v = getCalVal('debug')
      var s = (v) ? '<br/>' : ''
      var t = new Date;
      var p = two_digits(t.getHours())+':'+two_digits(t.getMinutes())+':'+two_digits(t.getSeconds())+'.'+t.getMilliseconds()+': '
      setCalVal('debug', v + s + p + replace_markup(msg));
   }
}

function calerror(code, msg, solution)
{
   if (!solution)
   {
      solution = "Please contact the GWC Calendar Administrator and indicate this error message."
   }
   var msg =  "[important]" +
              "~~~ ~~~ ~~~ ~~~" +
              "[newline]" +
              "Calendar Error " + code +
              "[newline]" +
              "~~~ ~~~ ~~~ ~~~" +
              "[newline]" +
              msg + 
              "[newline]" +
              "~~~ ~~~ ~~~ ~~~" +
              "[newline]" +
              solution  +
              "[newline]" +
              "~~~ ~~~ ~~~ ~~~" +
              "[important]"

   setCalVal('eventDetails', replace_markup(msg));
}

///////////////////////////////////////////////////////////////////////////////////////////////////
