var dateSelector = null;

function DateSelector() {
  var currentDateFieldObj = null;
  var currentDate = new Date();
  var currentYear = currentDate.getFullYear();
  var currentMonth = currentDate.getMonth();
  var currentDay = currentDate.getDate();
  
  var defaultYear = currentYear;
  var defaultMonth = currentMonth;
  var defaultDay = currentDay;  
  
  var siteURLRoot = "";
  var currentCalendarDivID = "";
  var monthInString = ["January","February","March","April","May","June","July","August","September","October","November","December"];
  
  initCurrentDate = function () {
    currentDate = new Date();
    currentYear = currentDate.getFullYear();
    currentMonth = currentDate.getMonth();
    currentDay = currentDate.getDate();
  }
  
  this.showCalendar = function(formName, fieldName, calendarDivID, dateString) {  
    //remove current calendar if it has already been displayed for other date field
    if (calendarDivID != currentCalendarDivID) this.removeCalendar(currentCalendarDivID);
    
    var dateParts = dateString.split('/')
    
    if (dateParts.length == 3) {
	  var month = parseInt(dateParts[0]);
	  var day = parseInt(dateParts[1]);
	  var year = parseInt(dateParts[2]);
	  if (month >=1 && month <= 12 && day >= 1 && day <= 31 && year >= 1900 && year <= 9999) {
	    defaultYear = year;
	    defaultMonth = month - 1;
	    defaultDay = day;
	  }
	}    
    currentDateFieldObj = eval("document." + formName + "." + fieldName);
            
    currentYear = defaultYear;
    currentMonth = defaultMonth;
    currentDay = defaultDay;   
    
    currentDate = new Date(currentYear, currentMonth, currentDay);  
    currentCalendarDivID = calendarDivID;  
    //siteURLRoot = getSiteURLRoot(window.location.href);
    
    var calendarDivObj = document.getElementById(currentCalendarDivID);
    if (calendarDivObj) {
      if (calendarDivObj.style.display == "block") {
        calendarDivObj.style.display = "none";
        return;
      } else {
        calendarDivObj.style.display = "block";
    	populateTable({year:currentYear, month:currentMonth, day:currentDay});  
      }
    } else { //calendar didn't exist
      populateTable({year:currentYear, month:currentMonth, day:currentDay});     
    }
  }
  
  this.removeCalendar = function (calendarDivID) {
    var calendarDivObj = document.getElementById(calendarDivID);
    if (calendarDivObj) {
      calendarDivObj.innerHTML = "";
      calendarDivObj.style.display = "none";
    }
    initCurrentDate ();
  }
  
  this.jumpMonths = function (numMonths) {
    currentMonth = currentMonth + numMonths;
    if (currentMonth >= 12) {
      currentYear++;
      currentMonth = currentMonth - 12;
      currentDay = 0;
    } else if (currentMonth < 0) {
      currentMonth = currentMonth + 12;
      currentYear--;
      currentDay = 0;
    }
    
    populateTable(currentCalendarDivID, {year:currentYear, month:currentMonth, day:currentDay});
  }
  
  // day of week of month's first day
  getFirstDay = function (theYear, theMonth){
    var firstDate = new Date(theYear,theMonth,1);
    return firstDate.getDay();
  }
  
  // number of days in the month
  getMonthLen= function (theYear, theMonth) {
    var nextMonth = new Date(theYear, theMonth + 1, 1);
    nextMonth.setHours(nextMonth.getHours() - 3);
    return nextMonth.getDate();
  }
  
  this.selectDate = function (day) {
    currentDateFieldObj.value = "" + (currentMonth + 1) + "/" + day + "/" + currentYear;
    this.removeCalendar(currentCalendarDivID);  
  }
  
  populateTable = function (dateStruct) {
    var calendarBGImage = siteURLRoot + "/scripts/images/bg_calendar.gif";
    var closeImage = siteURLRoot + "/scripts/images/icon_close.gif";
    var rightArrowImage = siteURLRoot + "/scripts/images/icon_arrow_right.gif";
    var leftArrowImage = siteURLRoot + "/scripts/images/icon_arrow_left.gif";
    var calendarTableTopHTML = '' +
    					    '<table border="0" width="100%" cellpadding="0" cellspacing="0" style="font-size:10px;line-height:140%;">' +
    				        '  <tr align="center">' +
    				        '    <td width="14%"><b>S</b></td>' +
    				        '    <td width="14%"><b>M</b></td>' +
    				        '    <td width="14%"><b>T</b></td>' +
    				        '    <td width="14%"><b>W</b></td>' +
    				        '    <td width="14%"><b>T</b></td>' +
    				        '    <td width="15%"><b>F</b></td>' +
    				        '    <td width="15%"><b>S</b></td>' +
    				        '  </tr>';
    var calendarTableBottomHTML = '</table>';
    var calendarTableMiddleHTML = "";    
    var firstDayOfTheMonth = getFirstDay(currentYear, currentMonth);
    var numDaysOfTheMonth = getMonthLen(currentYear, currentMonth);
    var numTableRows = Math.ceil((firstDayOfTheMonth + numDaysOfTheMonth) / 7);
    var cellNum = 0;
    var currentDateOutputNum = 0;
    var currentDateOutputStr = "";
    for (var i = 0; i < numTableRows; i++) {
      calendarTableMiddleHTML = calendarTableMiddleHTML + '<tr align="center">';
      for (var j = 0; j < 7; j++) {
        cellNum++;
        currentDateOutputNum = cellNum - firstDayOfTheMonth;
        if (currentDateOutputNum > 0 && currentDateOutputNum <= numDaysOfTheMonth) {
          currentDateOutputStr = '' + currentDateOutputNum;
          
          currentDateOutputStr = '<a href="javascript:dateSelector.selectDate(' + currentDateOutputNum + ')" style="font-family:Arial;color:#787878;font-size:11px;line-height:140%;text-decoration:none;">' + currentDateOutputStr + '</a>';          
        } else {
          currentDateOutputStr = "&nbsp;";
        }
        if (defaultYear == currentYear && defaultMonth == currentMonth && defaultDay == currentDateOutputNum) {
    	  calendarTableMiddleHTML = calendarTableMiddleHTML +
    							  '<td bgcolor="#cccccc">' + currentDateOutputStr + '</td>';    
        } else {
          calendarTableMiddleHTML = calendarTableMiddleHTML +
    							  '<td>' + currentDateOutputStr + '</td>'; 
        }
      }
      calendarTableMiddleHTML = calendarTableMiddleHTML + '</tr>';
    }
    var calenderHTML = '<div style="display:block;width:147px;height:138px;padding:10px 10px 10px 10px;background-image:url(' + calendarBGImage + ');background-repeat:no-repeat;">' +
    				   '  <div style="height:15px;padding:0px 0px 0px 0px;margin:0px 0px 0px 0px;">' +
    				   '    <table border="0" width="100%" height="15" cellpadding="0" cellspacing="0" style="font-size:11px;line-height:140%;">' +
    				   '      <tr>' +
    				   '        <td width="18" align="right">' +
    				   '          <a href="javascript:dateSelector.jumpMonths(-1)"><img src="' + leftArrowImage +'" border="0"></a>' +
    				   '        </td>' +
    				   '        <td align="center">' + monthInString[currentMonth] + " " + currentYear + '</td>' +
    				   '        <td width="18" align="left">' +
    				   '          <a href="javascript:dateSelector.jumpMonths(1)"><img src="' + rightArrowImage +'" border="0"></a>' +
    				   '        </td>' +
    				   '        <td width="20" align="right">' +
    				   '          <a href="javascript:dateSelector.removeCalendar(\'' + currentCalendarDivID + '\')"><img src="' + closeImage + '" border="0" alt="close"></a>' +
    				   '        </td>' +
    				   '      </tr>' +
    				   '    </table>' +    				   
    				   '  </div>' +   				   
    				   
    				   '  <div style="padding:15px 7px 7px 6px;">' + calendarTableTopHTML + calendarTableMiddleHTML + calendarTableBottomHTML + '</div>' +
    				   '</div>';		   
    				   
    				   
    var calendarDivObj = document.getElementById(currentCalendarDivID);
    calendarDivObj.innerHTML = calenderHTML;
  }  
  
  getSiteURLRoot = function (href) {
    var endIndex = href.indexOf("/admin/");
    if (endIndex > 0) {
      return href.substring(0, endIndex);
    } else {
      return "";
    }
  }

}

function createDateSelector () {
  dateSelector = new DateSelector();
}

if (window.attachEvent) {window.attachEvent('onload', createDateSelector);}
else if (window.addEventListener) {window.addEventListener('load', createDateSelector, false);}
else {document.addEventListener('load', createDateSelector, false);} 

