//-----------------------------------------Begin------------------------------------------//
  
  /*    
  ===================================================================
  NAME: dates
  TYPE: javascript (User Defined Functions)
  VERSION: 1.07.06.17
  CREATED ON: 7/1/04
  AUTHOR: Dean Dal Bozzo, dean@pagefx.com
  ===================================================================  

  DESIGNED FOR: development purposes.

  DESCRIPTION: functions for performing date calculations. 

  NOTES: Javascript baseline date 1/1/1970.
  
  USAGE: 
    
  ATTRIBUTES: See functions listed below.
    
  OUTPUT: See functions listed below.
  
  EXAMPLES:
    This file contains the following Date funtions: 
      dayName(date,format*)    Returns the string calendar day name       (ie., Tuesday)
      monthName(date,format*)  Returns the string calendar month name     (ie., July)
      dayPrefix(date)          Returns the day number and a prefix        (ie., 1st) Highest number 31
      fullYear(date)           Returns 4 digit year                       (ie., 2003)
      isLeapYear(date)         Returns 1 or 0
      daysInYear(date)         Returns the total days is a year           (ie., 365)
      dayOfYear(date)          Return the total days elasped in a year    (ie., 182)
      daysLeftInYear(date)     Returns the total days remaining is a year (ie., 183)
      quarter(date)            Returns the quarter number                 (ie., 3)
      daysInQuarter(date)      Returns the total days in a quarter        (ie., 92)
      daysInMonth(date)        Returns the total days in a month          (ie., 31)
      weekNumber(date)         Returns the week number in a given year    (ie., 27)
      julianDate(date)         Returns Julian date                        (ie., 2454267.8982)
      today()                  Returns today's date                       (ie., 6/17/2007)
      numberPrefix(number)     Returns the number with a prefix           (ie., 1st, 2nd, 3rd, 4th) Any whole number
      
      (date is string date)
      
    *OPTIONAL

  UPDATES: 
    9/23/05  fixed bug in numberPrefix()
    6/17/07 Added Julian Date & today function and modified fullYear function
  ===================================================================    
  */

  //==DATE FUNCTIONS===========================================================//
    
    //--DAY NAME-(as a string)------------------------------------------//
    function dayName(d,fmt) {
      var result, dnIDX, dn;
      
      d      = new Date(d);
      dnIDX  = d.getDay();
      
      dn     = new Array(7)
      dn[0]  = "Sunday";
      dn[1]  = "Monday";
      dn[2]  = "Tuesday";
      dn[3]  = "Wednesday";
      dn[4]  = "Thursday";
      dn[5]  = "Friday";
      dn[6]  = "Saturday";
  
      result = dn[dnIDX];
  
      if(fmt){
        if(fmt.toLowerCase() == 'abbr'){
          result = dn[dnIDX].substring(0,3);
        }
      }
    
      return result;
    }
    
    //--MONTH NAME-(as a string)----------------------------------------//
    function monthName(d,fmt) {
      var result, mnIDX, mn;
      
      d       = new Date(d);
      mnIDX   = d.getMonth();
    
      mn      = new Array (12);
      mn[0]   = "January";
      mn[1]   = "February";
      mn[2]   = "March";
      mn[3]   = "April";
      mn[4]   = "May";
      mn[5]   = "June";
      mn[6]   = "July";
      mn[7]   = "August";
      mn[8]   = "September";
      mn[9]   = "October";
      mn[10]  = "November";
      mn[11]  = "December";
    
      result = mn[mnIDX];
  
      if(fmt){
        if(fmt.toLowerCase() == 'abbr'){
          result = mn[mnIDX].substring(0,3);
        }
      }
    
      return result;
    }

    //--DAY AND PREFIX-(as a string)------------------------------------//
    function dayPrefix(d){
      d        = new Date(d);
      var day  = d.getDate();   
    
      return numberPrefix(day);  // shared function call
    }

    //--FULL YEAR-------------------------------------------------------//
    function fullYear(d){
      var result, newDate;
        
      var dateAry = d.split('/');
      var newDate = dateAry[2].length < 4 ? dateAry[0] + '/' + dateAry[1] + '/20' + dateAry[2]: d;
      
      newDate  = new Date(newDate);
      result   = newDate.getFullYear();
    
      return result;
    }

    //--LEAP YEAR-(Checks for a leap year)------------------------------//
    function isLeapYear(d){
      var result, days;
    
      days    = daysInYear(d);   // shared function call
      result  = 0;
  
      if(days == 366){
        result = 1;
      }
      return result;
    }

    //--DAYS IN A YEAR--------------------------------------------------//
    function daysInYear(d){
      var result, year, dayMil, jan, dec;
      
      year   = fullYear(d);  // shared function call
      dayMil = 1000*60*60*24;
  
      jan    = new Date(year,1,1,00,00,00);
      jan    = jan.getTime();
  
      dec    = new Date(year,12,31,23,59,59);
      dec    = dec.getTime();
    
      result = Math.round((dec-jan)/dayMil);
  
      return result;
    }

    //--DAY OF YEAR-----------------------------------------------------//
    function dayOfYear(d){
      var result, month, day, year, days;
      
      year   = fullYear(d);  // shared function call      
      d      = new Date(d);
      month  = d.getMonth();
      day    = d.getDate();      
      days   = 0;
         
      for(m=1; m <= month; m++){
        days += daysInMonth(m + '/1/' + year);
      }
    
      result = days + day; 
      
      return result;
    }

    //--DAYS LEFT IN YEAR-----------------------------------------------//
    function daysLeftInYear(d){
      var result, totalDays, currentDay;
      
      totalDays   = daysInYear(d);   // shared function call
      currentDay  = dayOfYear(d);    // shared function call
  
      result      = totalDays - currentDay;
      
      return result;
    }

    //--QUARTER---------------------------------------------------------//
    function quarter(d){
      var result, tdy, qtr1, qtr2, qtr3, qtr4;
      
      tdy     = dayOfYear(d);        // shared function call
      qtr1    = 90 + isLeapYear(d);  // shared function call
      qtr2    = qtr1 + 91;  
      qtr3    = qtr2 + 92;  
      qtr4    = qtr3 + 92;
      result  = 1;
  
      // Compare today with the totals days in each quarter
      if(tdy > qtr1){
        result = 2;
      }
      if(tdy > qtr2){
        result = 3;
      }
      if(tdy > qtr3){
        result = 4;
      }
  
      return result;
    }

    //--DAYS IN  A QUATER-----------------------------------------------//
    function daysInQuarter(d){
      var result, qtrIDX, qtr1, daysInQtrs;
      
      qtrIDX  = quarter(d);
      qrt1    = 90 + isLeapYear(d);    // shared function call
  
      // 0 added to compensate for array index
      daysInQtrs  = new Array(0,qrt1,91,92,92);

      result = daysInQtrs[qtrIDX];
      
      return result;
    }


    //--DAYS IN A MONTH-------------------------------------------------//
    function daysInMonth(d){
      var result, mIDX, feb, daysInMonths;
      
      feb   = 28 + isLeapYear(d);    // shared function call
          
      d     = new Date(d);
      mIDX  = d.getMonth();      
  
      daysInMonths = new Array(31,feb,31,30,31,30,31,31,30,31,30,31); 
    
      result = daysInMonths[mIDX];
      
      return result;
    }

    //--WEEK NUMBER-----------------------------------------------------//
    function weekNumber(d){
      var result, monthNo, dayNo, year, weekMil, jan, day;
      
      year     = fullYear(d);  // shared function call
      
      d        = new Date(d);
      monthNo  = d.getMonth()+1;
      dayNo    = d.getDate();      
  
      weekMil  = 1000*60*60*24*7;
  
      jan = new Date(year,1,1,00,00,00);
      jan = jan.getTime();
  
      day = new Date(year,monthNo,dayNo,23,59,59);
      day = day.getTime();
  
      result = Math.round(((day-jan)/weekMil)+1);
  
      return result;
    }
    
    //--JULIAN DATE-----------------------------------------------------//
    function julianDate(d){
      var result, A, B, C, D;
         
      var year  = fullYear(d);  // shared function call 
         
      d  = new Date(d);       
         
      var day    = d.getDate();
      var month  = d.getMonth() +1;
             
         
      if(month == 1 || month == 2){
        year--;
        month += 12;
      }
         
        
      // Check if date is in the Gregorian Calendar.  Gregorian calendar started 10/15/1582 by Pope Gregory XIII
      if(year > 1582 || (year == 1582 && month > 10) || (year == 1582 && month == 10 && day >= 15)){
        A = year / 100;
        B = 2 - A + A / 4;
      }
        
      C = 365.25 * year;
      D = 30.6001 * (month + 1);
        
      result = B + C + D + day + 1720994;
        
      return result;
    }
    
    //--TODAY's DATE----------------------------------------------------//
    function today(){
      var result;     
         
      d  = new Date();       
         
      var day    = d.getDate();
      var month  = d.getMonth() +1;
      var year   = d.getFullYear();

      result = month + '/' + day + '/' +  year;
        
      return result;
    }
  //==End Date Functions===================================================//
        
  //--NUMBER PREFIX-(as a string)-------------------------------------//
  function numberPrefix(n){
    var result, re, matched, lastNo, prefix;
    
    re = /^(\d*(\d(\d+))|\d*(\d)+)$/
    
    // Extract digits
    matched = re.exec(n);    
    lastNo  = matched[4];
    
    // Check if last two digits are in range of 11-13 and force prefix if within the range
    // Check if we have a digit greater than 9
    if(matched[2] != undefined){
      // number is greater than 9 so set use the correct array
      lastNo = matched[3];
       
      // Check for 11-13
      if(matched[2] > 10 && matched[2] < 14){
        // force prefix to display 'th'
        lastNo = 4;
      }
    }
         
    lastNo = parseInt(lastNo);
     
    switch (lastNo){
      case 1:
        prefix = 'st';
      break;
        
      case 2:
        prefix = 'nd';
      break;
        
      case 3:
        prefix = 'rd';
      break;
        
      default:
        prefix = 'th';
      break;
    }     
    
    result = n + prefix;
     
    return result;
  }
  //----------------------------------End All-----------------------------------------------//