
// Declaring valid date character, minimum year and maximum year
var dtCh      = "/";
var minYear   = 1900;
var maxYear   = 2100;
var shortMnth = true;
var shortDay  = true;
var shortYear = true;
var today     = new Date();
var days      = "SunMonTueWedThuFriSat";

for(i = 0; i < classes.length; i++)
{
   var day = days.indexOf(classes[i][gi_start_date]) / 3;
   if( day >= 0)
   {
      for(d = 0; d < 7; d++)
      {
         var newDate = new Date(today.getTime() + (d * 86400000));
         var dateStr = newDate + "";
         var day     = dateStr.substring(0, 3);
         if(classes[i][gi_start_date] == day)
         {
            classes[i][gi_start_date] = formatDate(newDate);
         }
      }
   }
}

// Sort the classes
classes.sort(dateSort);

// Convert today to a formatted string
strToday = formatDate(today);

// Set the Short Month Flag
function setShortMonth(bValue)
{
   var bString = bValue + "";
   
   if(bString.indexOf("true") >= 0 || bString.indexOf("false") >= 0)
   {
      if(bValue)
         shortMnth = true;
      else
         shortMnth = false;
   }
}

// Set the Short Day Flag
function setShortDay(bValue)
{
   var bString = bValue + "";
   
   if(bString.indexOf("true") >= 0 || bString.indexOf("false") >= 0)
   {
      if(bValue)
         shortDay  = true;
      else
         shortDay  = false;
   }
}

// Sort the date
function dateSort(a,b)
{
   dateA = new Date(a[gi_start_date]);
   dateB = new Date(b[gi_start_date]);

   classA= a[gi_class];
   classB= b[gi_class];
   
   // compare the classes
   if(classA < classB)
      return 1;
   if(classA > classB)
      return -1
   // the classes are equal, compare the dates
   if(dateCompare(dateA, dateB) < 0)
      return 1;
   if(dateCompare(dateA, dateB) > 0)
      return -1;
   return 0;
}

// Indicate if the date has already passed
function hasDatePassed(theDate)
{
   var today  = new Date();
   var passed = false;

   if(dateCompare(today, theDate) < 0)
      passed = true;
   
   return passed;
}
      
// Compare two dates    
function dateCompare(date1, date2)
{
   var Month1 = 0;
   var Day1   = 0;
   var Year1  = 0;
   var Month2 = 0;
   var Day2   = 0;
   var Year2  = 0;
   var rVal   = 0;

   var Month1 = date1.getMonth() + 1;
   var Day1   = date1.getDate();
   var Year1  = date1.getFullYear();
      
   var Month2 = date2.getMonth() + 1;
   var Day2   = date2.getDate();
   var Year2  = date2.getFullYear();

   if( Year2 > Year1 )
   {
      rVal = 1;
   }
   else if (Year2 < Year1)
   {
      rVal = -1;
   }
   else
   {
      if(Month2 > Month1)
      {
         rVal = 1;
      }
      else if (Month2 < Month1)
      {
         rVal = -1;
      }
      else
      {
         if (Day2 > Day1)
         {
            rVal = 1;
         }
         else if (Day2 < Day1)
         {
            rVal = -1;
         }
      }
   }
   
   return rVal;
}

// Compare two times
function timeCompare(time1, time2)
{

   var rVal   = 0;
   var hour1  = parseInt(time1.substring(0, time1.indexOf(":")));
   var hour2  = parseInt(time2.substring(0, time2.indexOf(":")));
   var min1   = time1.substring(time1.indexOf(":") + 1);
   var min2   = time2.substring(time2.indexOf(":") + 1);
   
   if(min1.substring(min1.length - 1) == "p")
   {
      hour1 = hour1 + 12;
      min1  = min1.substring(0, min1.length - 1);
   }
   else if(min1.substring(min1.length - 1) == "P")
   {
      hour1 = hour1 + 12;
      min1  = min1.substring(0, min1.length - 1);
   }
   else if(min1.substring(min1.length - 1) == "a")
   {
      min1  = min1.substring(0, min1.length - 1);
   }
   else if(min1.substring(min1.length - 1) == "A")
   {
      min1  = min1.substring(0, min1.length - 1);
   }

   if(min2.substring(min2.length - 1) == "p")
   {
      hour2 = hour2 + 12;
      min2  = min2.substring(0, min2.length - 1);
   }
   else if(min2.substring(min2.length - 1) == "P")
   {
      hour2 = hour2 + 12;
      min2  = min2.substring(0, min2.length - 1);
   }
   else if(min2.substring(min2.length - 1) == "a")
   {
      min2  = min2.substring(0, min2.length - 1);
   }
   else if(min2.substring(min2.length - 1) == "A")
   {
      min2  = min2.substring(0, min2.length - 1);
   }
   
   min1  = parseInt(min1);
   min2  = parseInt(min2);

   
   if( hour2 > hour1 )
   {
      rVal = 1;
   }
   else if (hour2 < hour1)
   {
      rVal = -1;
   }
   else
   {
      if(min2 > min1)
      {
         rVal = 1;
      }
      else if (min2 < min1)
      {
         rVal = -1;
      }
   }
   
   return rVal;
}

// Check for integer
function isInteger(s)
{
   var i;
   for (i = 0; i < s.length; i++)
   {   
      // Check that current character is number.
      var c = s.charAt(i);
      if (((c < "0") || (c > "9"))) 
         return false;
    }
    // All characters are numbers.
    return true;
}

// Remove extra chars
function stripCharsInBag(s, bag)
{
   var i;
   var returnString = "";
   // Search through string's characters one by one.
   // If character is not in bag, append to returnString.
   for (i = 0; i < s.length; i++)
   {   
      var c = s.charAt(i);
      if (bag.indexOf(c) == -1) 
         returnString += c;
   }
   return returnString;
}

// Look for days in february
function daysInFebruary (year)
{
   // February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}

// Get the days in the month
function DaysArray(n) 
{
   for (var i = 1; i <= n; i++) 
   {
      this[i] = 31;
      if (i==4 || i==6 || i==9 || i==11) 
      {
         this[i] = 30;
      }
      if (i==2) 
      {
         this[i] = 29;
      }
   } 
   return this;
}

// Determine if a string is a date
function isDate(dtStr)
{
   dtStr = dtStr + "";
   
   var daysInMonth = DaysArray(12);
   var pos1=dtStr.indexOf(dtCh);
   var pos2=dtStr.indexOf(dtCh,pos1+1)
   var strMonth=dtStr.substring(0,pos1);
   var strDay=dtStr.substring(pos1+1,pos2);
   var strYear=dtStr.substring(pos2+1);
   strYr=strYear;

   if (strDay.charAt(0)=="0" && strDay.length>1) 
      strDay=strDay.substring(1);
   if (strMonth.charAt(0)=="0" && strMonth.length>1) 
      strMonth=strMonth.substring(1);
   for (var i = 1; i <= 3; i++) 
   {
      if (strYr.charAt(0)=="0" && strYr.length>1) 
         strYr=strYr.substring(1);
   }
   
   month=parseInt(strMonth);
   day=parseInt(strDay);
   year=parseInt(strYr);
   
   if (pos1==-1 || pos2==-1)
   {
      alert("The date format should be : mm/dd/yyyy");
      return false;
   }
   if (strMonth.length<1 || month<1 || month>12)
   {
      alert("Please enter a valid month");
      return false;
   }
   if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month])
   {
      alert("Please enter a valid day");
      return false;
   }
   if (strYear.length != 4 || year==0 || year<minYear || year>maxYear)
   {
      alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear);
      return false;
   }
   if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false)
   {
      alert("Please enter a valid date");
      return false;
   }

   return true;
}

// Format a date
function formatDate(theDate)
{
   var  month = theDate.getMonth() + 1;
   if(month < 10)
      month = "0" + month;
   else
      month = ""  + month;
   var daynum = theDate.getDate();
   if(daynum < 10)
      daynum = "0" + daynum;
   else
      daynum = "" + daynum;
   var year   = theDate.getFullYear() + "";
   var strDate = month + dtCh + daynum + dtCh + year + "";
   
   return (strDate);
   
}  

// Create a long date format
function formatLongDate(theDate, addYear)
{
   var monthArray = new Array("January", 
                              "February",
                              "March",
                              "April",
                              "May",
                              "June",
                              "July",
                              "August",
                              "September",
                              "October",
                              "November",
                              "December");
   
   var dayArray   = new Array("Monday", 
                              "Tuesday",
                              "Wednesday",
                              "Thursday",
                              "Friday",
                              "Saturday",
                              "Sunday");
   
   var strDate = theDate + "";
   var day     = strDate.substring(0,3);
   var month   = monthArray[theDate.getMonth()];
   var daynum  = theDate.getDate();
   var strDate = "";
   
   if(!shortDay)
   {
      // get the day name
      for(i = 0; i < 7; i++)
      {
         if(dayArray[i].indexOf(day) >= 0)
         {
            day = dayArray[i];
         }
      }
   }
   if(! isNaN(daynum))
   {
      day = day + ", ";
      strDate = day + month + " " + daynum;
   
      if(addYear)
      {
         year = theDate.getFullYear() + "";
         if(shortYear)
            year = year.substring(0,4);
         strDate = strDate + ", " + year;
      }
   }
   else
   {
      strDate = "&nbsp;";
   }
   
   return (strDate);
   
}  

