/**
* ecw_datetime.js
*
* This file contains javascript functions used by mPower-suite
*
* 'Revision: $'
*
* $Header: /JavaScript/calendar.js 7     14/04/06 16:49 Aa $
*
* $History: calendar.js $
 * 
 * *****************  Version 7  *****************
 * User: Aa           Date: 14/04/06   Time: 16:49
 * Updated in $/JavaScript
 * 2032404
 * 
 * *****************  Version 6  *****************
 * User: Aa           Date: 21/03/06   Time: 13:57
 * Updated in $/JavaScript
 * 2032404
 * 
 * *****************  Version 5  *****************
 * User: Gc           Date: 13/04/05   Time: 17:23
 * Updated in $/JavaScript
 * 2019665
 * 
 * *****************  Version 4  *****************
 * User: Gc           Date: 7/01/05    Time: 9:35
 * Updated in $/JavaScript
 * 
 * *****************  Version 3  *****************
 * User: Sf           Date: 13/04/04   Time: 11:55
 * Updated in $/JavaScript
 * 
 * *****************  Version 2  *****************
 * User: Ds           Date: 20/01/04   Time: 10:13
 * Updated in $/JavaScript
*
*
* Functions on this file are concerned with date-time handling
*
* This file is deliverable to clients. 
*
*  Amendment History
*
*  Who  When         Why
*  GC   10-06-02     1006014 Added style.color = "red" to fSetSelectedDay, add a leading 0 if day less than 10 so that a comparrison can be done.
*  GC   13-04-05     2019665 Mark the initial day on the calendar in lightblue
*  AA   21-03-06     2032404 Various updates for calendar
*  AA   14-04-06     2032404 REWORK Various updates for calendar
*###################################################
*/
var dDate = new Date();
var dCurMonth = dDate.getMonth();
var dCurDayOfMonth = dDate.getDate();
var dCurYear = dDate.getFullYear();
var objPrevElement = new Object();

var sForm, sCol, sRow, sOnChange;

var aMonths = new Array( getTerm("{JANUARY}"),
                         getTerm("{FEBRUARY}"),
                         getTerm("{MARCH}"),
                         getTerm("{APRIL}"),
                         getTerm("{MAY}"),
                         getTerm("{JUNE}"),
                         getTerm("{JULY}"),
                         getTerm("{AUGUST}"),
                         getTerm("{SEPTEMBER}"),
                         getTerm("{OCTOBER}"),
                         getTerm("{NOVEMBER}"),
                         getTerm("{DECEMBER}") );


function fToggleColor(myElement) {
  var toggleColor = "#ff0000";
  
  if (myElement.id == "calDateText") {
    if (myElement.color == toggleColor) {
      myElement.color = "";
    } else {
      myElement.color = toggleColor;
    }
  } else if (myElement.id == "calCell") {
    for (var i in myElement.children) {
      if (myElement.children[i].id == "calDateText") {
        if (myElement.children[i].color == toggleColor) {
          myElement.children[i].color = "";
        } else {
          myElement.children[i].color = toggleColor;
        }
      }
    }
  }
}

function num_to_month(nMonth){
  var rval;
  
  switch (parseInt(nMonth, 10)){
    case 1:
      rval = getTerm("{JAN}");
      break;
    case 2:
      rval = getTerm("{FEB}"); 
      break;
    case 3:
      rval = getTerm("{MAR}"); 
      break;
    case 4:
      rval = getTerm("{APR}"); 
      break;
    case 5:
      rval = getTerm("{MAY}"); 
      break;
    case 6:
      rval = getTerm("{JUN}"); 
      break;
    case 7:
      rval = getTerm("{JUL}"); 
      break;
    case 8:
      rval = getTerm("{AUG}"); 
      break;
    case 9:
      rval = getTerm("{SEP}"); 
      break;
    case 10:
      rval = getTerm("{OCT}"); 
      break;
    case 11:
      rval = getTerm("{NOV}"); 
      break;
    case 12:
      rval = getTerm("{DEC}"); 
      break;
  }    
    
  return rval;
}

function fSetSelectedDay(myElement){
  var oldValue;
  allowSetChanged(true);
   
  //get the month number
  for (var i = 0; i < aMonths.length; i++){
    
    if(aMonths[i].toUpperCase() == frmCalendarSample.tbSelMonth.value.toUpperCase() ){
      var month = i + 1;
      break;
    }
  }
  
  
  if (myElement.id == "calCell") {
    if (!isNaN(parseInt(myElement.children["calDateText"].innerText))) {
      myElement.bgColor = "#c0c0c0";
      objPrevElement.bgColor = "";
      document.all.calSelectedDate.value = parseInt(myElement.children["calDateText"].innerText);
           
      if ( typeof pageSetCalValue == "function" ){
        pageSetCalValue( sForm, sCol, sRow, (parseInt(document.all.calSelectedDate.value,10)>9?document.all.calSelectedDate.value:'0' + document.all.calSelectedDate.value) + '-' + num_to_month(month) + '-' + document.all.tbSelYear.value );
      } else if ( typeof setCalValue == "function" ){
        setCalValue( sForm, sCol, sRow, (parseInt(document.all.calSelectedDate.value,10)>9?document.all.calSelectedDate.value:'0' + document.all.calSelectedDate.value) + '-' + num_to_month(month) + '-' + document.all.tbSelYear.value , sOnChange);
      }
      top.bodyFrame.formDiv.style.display = "none";    
    }
  }
}

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] = getTerm("{SUNDAY}");
    aMonth[0][1] = getTerm("{MONDAY}");
    aMonth[0][2] = getTerm("{TUESDAY}");
    aMonth[0][3] = getTerm("{WEDNESDAY}");
    aMonth[0][4] = getTerm("{THURDAY}");
    aMonth[0][5] = getTerm("{FRIDAY}");
    aMonth[0][6] = getTerm("{SATURDAY}");
  } else if (iDayStyle == 1) {
    aMonth[0][0] = getTerm("{SUN}");
    aMonth[0][1] = getTerm("{MON}");
    aMonth[0][2] = getTerm("{TUE}");
    aMonth[0][3] = getTerm("{WED}");
    aMonth[0][4] = getTerm("{THU}");
    aMonth[0][5] = getTerm("{FRI}");
    aMonth[0][6] = getTerm("{SAT}");
  } else {
    aMonth[0][0] = getTerm("{SINGLE_SUN}");
    aMonth[0][1] = getTerm("{SINGLE_MON}");
    aMonth[0][2] = getTerm("{SINGLE_TUE}");
    aMonth[0][3] = getTerm("{SINGLE_WED}");
    aMonth[0][4] = getTerm("{SINGLE_THU}");
    aMonth[0][5] = getTerm("{SINGLE_FRI}");
    aMonth[0][6] = getTerm("{SINGLE_SAT}");
  }
  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(iYear, iMonth, iCellWidth, iCellHeight, pForm, pCol, pRow, iDayStyle, pOnChange, pMarkDate) {
  sForm = pForm;
  sCol = pCol;
  sRow = pRow;
  sOnChange = pOnChange;
  container = document.all["calendarContents"];
  nMarkDate = -1;
  try{  
    if (typeof pMarkDate == "number"){
      nMarkDate = pMarkDate;
    }
  }catch (e){
    nMarkDate = -1;
  }
  
  var myMonth, theString;

  myMonth = fBuildCal(iYear, iMonth, iDayStyle);
  theString = "<table cellspacing=0 cellpadding=0 border=0>"
  theString += "<tr>";
  theString += "<th align='center'>" + myMonth[0][0] + "</th>";
  theString += "<th align='center'>" + myMonth[0][1] + "</th>";
  theString += "<th align='center'>" + myMonth[0][2] + "</th>";
  theString += "<th align='center'>" + myMonth[0][3] + "</th>";
  theString += "<th align='center'>" + myMonth[0][4] + "</th>";
  theString += "<th align='center'>" + myMonth[0][5] + "</th>";
  theString += "<th align='center'>" + myMonth[0][6] + "</th>";
  theString += "</tr>";
  for (w = 1; w < 7; w++) {
    theString += "<tr>"
    for (d = 0; d < 7; d++) {
      theString += "<td style='CURSOR:Hand;background:"+(myMonth[w][d]==nMarkDate?"lightblue":"white")+";border:1 solid #EDEDED;' onMouseOver='fToggleColor(this)' onMouseOut='fToggleColor(this)' align='left' valign='middle' width='" + iCellWidth + "' height='" + iCellHeight + "' id=calCell style='CURSOR:Hand' onMouseOver='fToggleColor(this)' onMouseOut='fToggleColor(this)' onclick=fSetSelectedDay(this)>";
      if (!isNaN(myMonth[w][d])) {
        theString += "<font id=calDateText onMouseOver='fToggleColor(this)' onMouseOut='fToggleColor(this)' onclick=fSetSelectedDay(this)>" + myMonth[w][d] + "</font>";
      } else {
        theString += "<font id=calDateText onMouseOver='fToggleColor(this)' onMouseOut='fToggleColor(this)' onclick=fSetSelectedDay(this)> </font>";
      }
      theString += "</td>"
    }
    theString += "</tr>";
  }
  theString += "</table>"
  
  container.innerHTML = theString;
}

function fUpdateCal(iYear, iMonth) {
  
  //check to see if there is a comma in the year
  if (isNaN(iYear)){
    iYear = parseInt(iYear.replace(",", ""));
  }
  
  //make sure the year is a valid number
  if ( isNaN(iYear) || iYear < 0 || iYear > 9999 ){    
    iYear = new Date().getFullYear();
  }
      
  //check to see if iMonth is a month
  //or the first part of a month as a string
  var checkedMonth = matchMonth(iMonth);
  
  //Reset the month field to be the checkedMonth
  frmCalendarSample.tbSelMonth.value = checkedMonth;
  //Reset the year field incase it wasn't a number
  frmCalendarSample.tbSelYear.value = iYear;
  
  //get the month number
  for (var i = 0; i < aMonths.length; i++){
    if(aMonths[i].toUpperCase() == checkedMonth.toUpperCase() ){
      if (i == 0){
        var month = 1;
        break;
      }else{
        var month = i + 1;
        break;
      }
    }
  }
  myMonth = fBuildCal(iYear, month);
  objPrevElement.bgColor = "";
  document.all.calSelectedDate.value = "";
  for (w = 1; w < 7; w++) {
    for (d = 0; d < 7; d++) {
      calCell[((7*w)+d)-7].style.background = "white";
      if (!isNaN(myMonth[w][d])) {
        calDateText[((7*w)+d)-7].innerText = myMonth[w][d];
      } else {
        calDateText[((7*w)+d)-7].innerText = " ";
      }
    }
  }
}

function matchMonth(month){
  var search = month.toUpperCase();
  var foundIndex = -1;
  var foundMonth = aMonths[new Date().getMonth()];
  //loop through each of the months
  for (var i = 0; i < aMonths.length; i++){
    var main = aMonths[i].toUpperCase();
    //find out where the search string begins in the main month string
    foundIndex = main.indexOf(search);
    //if the index is 0 then the search string is part of the beginning of the 
    //main month string
    if(foundIndex == 0){
      foundMonth = aMonths[i];
      break;
    }
  }
  return foundMonth;
}

