// Bazillyo's Spiffy DHTML Popup Calendar v. 1.0 © 2000 S. Ousta (http://www.geocities.com/bazillyo/calendar/calendarTest.htm)
// Courtesy of SimplytheBest.net (http://simplythebest.net/info/dhtml_scripts.html)

// initialiZe variables...
var ppcIE=((navigator.appName == "Microsoft Internet Explorer") || ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion)==5)));
var ppcNN6=((navigator.appName == "Netscape") && (parseInt(navigator.appVersion)==5));
//var ppcIE=(navigator.appName == "Microsoft Internet Explorer");
var ppcNN=((navigator.appName == "Netscape")&&(document.layers));
var ppcX = 4;
var ppcY = 4;

var IsCalendarVisible;
var calfrmName;
var maxYearList;
var minYearList;
var todayDate = new Date;
var curDate = new Date;
var SelectedDt = new Date;
var curImg;
var curDateBox;
var minDate = new Date;
var maxDate = new Date;
var hideDropDowns;
var IsUsingMinMax;
var FuncsToRun;
var img_del;
var img_close;
var isFrameMode = true;
var isLeftAlign = true;
var id = 'popupcalendar';

img_del=new Image();
img_del.src="images/blank.gif";
//img_del.src="btn_del_small.gif";
img_close=new Image();
img_close.src= "images/blank.gif";
//img_close.src= dir + "images/btn_close_small.gif";
dir = "";

minYearList=todayDate.getFullYear()-90;
maxYearList=todayDate.getFullYear()+90;
IsCalendarVisible=false;

img_Date_UP=new Image();
img_Date_UP.src=dir + "images/calendar_popup.gif";

img_Date_OVER=new Image();
img_Date_OVER.src=dir + "images/calendar_popup.gif";

img_Date_DOWN=new Image();
img_Date_DOWN.src=dir + "images/calendar_popup.gif";

function calSwapImg(whatID, NewImg,override) {
  if (document.images) {
    if (!( IsCalendarVisible && override )) {
      document.images[whatID].src = eval(NewImg + ".src");
    }
  }
  window.status=' ';
  return true;
}

function getOffsetLeft (el) {
  var ol = el.offsetLeft;
  while ((el = el.offsetParent) != null)
  ol += el.offsetLeft;
  return ol;
}

function getOffsetTop (el) {
  var ot = el.offsetTop;
  //alert('ot=' + ot); 
  while((el = el.offsetParent) != null) {
    var scroll_top =  el.scrollTop   
    //alert('scroll_top=' + scroll_top); 
    ot += el.offsetTop;
    //alert('ot=' + ot); 
    //if(scroll_top) ot-=scroll_top;
  }
  //alert('Final ot=' + ot); 
  return ot;
}

function BreakDatex(Dt) {
  var SDt = Dt.split("-");
  //if (SDt.length < 2) return ;

  var Dd  = parseInt(SDt[0]);
  var Mn  = SDt[1];
  var Yr = parseInt(SDt[2]);
  var Mon = '';
  switch(Mn) {
    case 'Jan': Mon='01'; break;
    case 'Feb': Mon='02'; break;
    case 'Mar': Mon='03'; break;
    case 'Apr': Mon='04'; break;
    case 'May': Mon='05'; break;
    case 'Jun': Mon='06'; break;
    case 'Jul': Mon='07'; break;
    case 'Aug': Mon='08'; break;
    case 'Sep': Mon='09'; break;
    case 'Oct': Mon='10'; break;
    case 'Nov': Mon='11'; break;
    case 'Dec': Mon='12'; break;
    default: Mon = Mn
  }
  var returndate
  returndate = Dd + '-' + Mon + '-' + Yr;
  return returndate;
} 

function showCalendar(frmName, dteBox,btnImg, hideDrops, MnDt, MnMo, MnYr, MxDt, MxMo, MxYr,runFuncs) {
  //hideDropDowns = true;
  FuncsToRun = runFuncs;
  calfrmName = frmName;
  //document.forms[frmName].elements['Flag'].value = btnImg;

 	
  var Dt = parent.document.forms[calfrmName][dteBox].value;
  if (Dt != null && Dt != '') { 
  Dt = BreakDatex(Dt);
  }
  curDate = ParseDate(Dt);
  SelectedDt = ParseDate(Dt);
  if (IsCalendarVisible) {
    hideCalendar();
  }
  else {
    if (document.images['calbtn1']!=null ) document.images['calbtn1'].src=img_del.src;
    if (document.images['calbtn2']!=null ) document.images['calbtn2'].src=img_close.src;

    if (hideDropDowns) {toggleDropDowns('hidden');}
    if ((MnDt!=null) && (MnMo!=null) && (MnYr!=null) && (MxDt!=null) && (MxMo!=null) && (MxYr!=null)) {
      IsUsingMinMax = true;
      minDate.setDate(MnDt);
      minDate.setMonth(MnMo-1);
      minDate.setFullYear(MnYr);
      maxDate.setDate(MxDt);
      maxDate.setMonth(MxMo-1);
      maxDate.setFullYear(MxYr);
    }
    else {
      IsUsingMinMax = false;
    }

    curImg = btnImg;
    curDateBox = dteBox;
    var CalWidth = 170;
    if ( ppcIE ) {
      ppcX = getOffsetLeft(document.images[btnImg]);// - CalWidth;
      ppcY = getOffsetTop(document.images[btnImg]) + document.images[btnImg].height;
    }
    else if (ppcNN){
      ppcX = document.images[btnImg].x;// - CalWidth;
      ppcY = document.images[btnImg].y + document.images[btnImg].height;
    }
    if (isLeftAlign) ppcX -= CalWidth;
    if (ppcX < 5) ppcX = 5;


    //-- reading current date from date box
    //var CDt = new Date(curDateBox.Value)
    //domlay('popupcalendar',1,ppcX,ppcY,Calendar(todayDate.getMonth(),todayDate.getFullYear()));
    
    domlay('popupcalendar',1,ppcX,ppcY,Calendar(curDate.getMonth(),curDate.getFullYear()));
    IsCalendarVisible = true;
    
  }
}

function toggleDropDowns(showHow){
  var i; var j;
  for (i=0;i<document.forms.length;i++) {
    for (j=0;j<document.forms[i].elements.length;j++) {
      if (document.forms[i].elements[j].tagName == "SELECT") {
        if (document.forms[i].name != "Cal")
        document.forms[i].elements[j].style.visibility=showHow;
      }
    }
  }
}

function hideCalendar(){
  //domlay('popupcalendar',0,ppcX,ppcY);
  //calSwapImg(curImg, 'img_Date_UP');
  IsCalendarVisible = false;
  //if (hideDropDowns) {toggleDropDowns('visible');}
  document.getElementById('popupcalendar').style.visibility='hidden';
  document.getElementById('popupcalendar').style.display='none';
}



function BreakDate(Dt) {
  var SDt = Dt.split("-");
  if (SDt.length < 2) return ;

  var Dd  = parseInt(SDt[0]);
  var Mn  = SDt[1];
  var Yr = parseInt(SDt[2]);
  var Mon = '';
  switch(Mn) {
    case '01': Mon='Jan'; break;
    case '02': Mon='Feb'; break;
    case '03': Mon='Mar'; break;
    case '04': Mon='Apr'; break;
    case '05': Mon='May'; break;
    case '06': Mon='Jun'; break;
    case '07': Mon='Jul'; break;
    case '08': Mon='Aug'; break;
    case '09': Mon='Sep'; break;
    case '10': Mon='Oct'; break;
    case '11': Mon='Nov'; break;
    case '12': Mon='Dec'; break;
    default: Mon = Mn
  }
  parent.document.forms[calfrmName][curDateBox].value = Dd + '-' + Mon + '-' + Yr;
} 

function calClick() {
  window.focus();
}

function domlay(id,trigger,lax,lay,content) {
  /*
  * Cross browser Layer visibility / Placement Routine
  * Done by Chris Heilmann (mail@ichwill.net)
  * Feel free to use with these lines included!
  * Created with help from Scott Andrews.
  * The marked part of the content change routine is taken
  * from a script by Reyn posted in the DHTML
  * Forum at Website Attraction and changed to work with
  * any layername. Cheers to that!
  * Welcome DOM-1, about time you got included... :)
  */
  // Layer visible
  if (trigger=="1"){
    if (document.layers) document.layers[''+id+''].visibility = "show"
    else if (document.all) document.all[''+id+''].style.visibility = "visible"
    else if (document.getElementById) document.getElementById(''+id+'').style.visibility = "visible"
    document.getElementById(id).style.display = "block"
  }
  // Layer hidden
  else if (trigger=="0"){
    if (document.layers) document.layers[''+id+''].visibility = "hide"
    else if (document.all) document.all[''+id+''].style.visibility = "hidden"
    else if (document.getElementById) document.getElementById(''+id+'').style.visibility = "hidden"
  }
  // Set horizontal position
  if (lax){
    if (document.layers){document.layers[''+id+''].left = lax}
    else if (document.all){document.all[''+id+''].style.left=lax}
    else if (document.getElementById){document.getElementById(''+id+'').style.left=lax+"px"}
  }
  // Set vertical position
  if (lay){
    if (document.layers){document.layers[''+id+''].top = lay}
    else if (document.all){document.all[''+id+''].style.top=lay}
    else if (document.getElementById){document.getElementById(''+id+'').style.top=lay+"px"}
  }
  // change content

  if (content){
  	if( isFrameMode) {
         window.frames[id].document.body.innerHTML = content;  
  	} else if (document.layers){
      sprite=document.layers[''+id+''].document;
      // add father layers if needed! document.layers[''+father+'']...
      sprite.open();
      sprite.write(content);
      sprite.close();
    }  else if (document.all) {
      document.all[''+id+''].innerHTML = content;
    } else if (document.getElementById){
      //Thanx Reyn!
      rng = document.createRange();
      el = document.getElementById(''+id+'');
      rng.setStartBefore(el);
      htmlFrag = rng.createContextualFragment(content)
      while(el.hasChildNodes()) el.removeChild(el.lastChild);
      el.appendChild(htmlFrag);
      // end of Reyn ;)
    }
  }
}

function Calendar(whatMonth,whatYear) {
  var output = '';
  var datecolwidth;
  var startMonth;
  var startYear;
  startMonth=whatMonth;
  startYear=whatYear;

  curDate.setMonth(whatMonth);
  curDate.setFullYear(whatYear);
  curDate.setDate(todayDate.getDate());
  if (ppcNN6) {
    output += '<form name="Cal"><table width="185" border="3" class="cal-Table" cellspacing="0" cellpadding="0"><tr>';
  }
  else {
    output += '<table width="185" border="3" class="cal-Table" cellspacing="0" cellpadding="0"><form name="Cal"><tr>';
  }

  //output += '<td class="cal-HeadCell" align="center" width="100%"><a href="javascript:clearDay();"><img name="calbtn1" src="btn_del_small.gif" border="0" width="12" height="10"></a>&nbsp;&nbsp;<a href="javascript:scrollMonth(-1);" class="cal-DayLink">&lt;</a>&nbsp;<SELECT class="cal-TextBox" NAME="cboMonth" onChange="changeMonth();">';
  output += '<td class="cal-HeadCell" align="center" width="100%">'
  output += '<table border="0" cellpadding="2" cellspacing="0" width="100%">\n<tr>\n';
  output += '<td><a href="javascript:parent.scrollMonth(-1);" ><img border="0" src="'+ dir + 'Images/LeftArrow.gif" width="12" height="14"></a></td>'
  output += '<td><a href="javascript:parent.scrollMonth(1);" ><img border="0" src="' + dir + 'Images/RightArrow.gif" width="12" height="14"></a></td>'
  output += '<td width="50%">&nbsp;</td>'
  output +=
  '<td><SELECT class="cal-TextBox" NAME="cboMonth" onChange="parent.changeMonth();">';
  for (month=0; month<12; month++) {
    if (month == whatMonth) output += '<OPTION VALUE="' + month + '" SELECTED>' + names[month] + '<\/OPTION>';
    else output += '<OPTION VALUE="' + month + '">' + names[month] + '<\/OPTION>';
  }
  output += '<\/SELECT></td>'

  output += '<td><SELECT class="cal-TextBox" NAME="cboYear" onChange="parent.changeYear();">';
  for (year=minYearList; year<maxYearList; year++) {
    if (year == whatYear) output += '<OPTION VALUE="' + year + '" SELECTED>' + year + '<\/OPTION>';
    else output += '<OPTION VALUE="' + year + '">'+ year + '<\/OPTION>';
  }
  output += '<\/SELECT></td>'
  output += '<td width="50%">&nbsp;</td>'
  output += '<td><a href="javascript:parent.hideCalendar();"><img border="0" src="' + dir + 'images/Close.GIF" width="16" height="14"></a></td>'
  output += '</tr></table>';
  output += '<\/td><\/tr><tr><td width="100%" align="center">';

  firstDay = new Date(whatYear,whatMonth,1);
  startDay = firstDay.getDay();

  if (((whatYear % 4 == 0) && (whatYear % 100 != 0)) || (whatYear % 400 == 0))
  days[1] = 29;
  else
  days[1] = 28;

  output += '<table width="185" cellspacing="1" cellpadding="2" border="0"><tr>';

  for (i=0; i<7; i++) {
    if (i==0 || i==6) {
      datecolwidth="15%"
    }
    else
    {
      datecolwidth="14%"
    }
    output += '<td class="cal-HeadCell" width="' + datecolwidth + '" align="center" valign="middle">'+ dow[i] +'<\/td>';
  }

  output += '<\/tr><tr>';

  var column = 0;
  var Rows = 0;
  var lastMonth = whatMonth - 1;
  var lastYear = whatYear;
  if (lastMonth == -1) { lastMonth = 11; lastYear=lastYear-1;}

  for (i=0; i<startDay; i++, column++) {
    output += getDayLink((days[lastMonth]-startDay+i+1),true,lastMonth,lastYear);
  }

  for (i=1; i<=days[whatMonth]; i++, column++) {
    output += getDayLink(i,false,whatMonth,whatYear);
    if (column == 6) {
      Rows = Rows + 1;
      output += '<\/tr><tr>';
      column = -1;
    }
  }

  var nextMonth = whatMonth+1;
  var nextYear = whatYear;
  if (nextMonth==12) { nextMonth=0; nextYear=nextYear+1;}

  if (column > 0) {
    for (i=1; column<7; i++, column++) {
      output +=  getDayLink(i,true,nextMonth,nextYear);
    }
    output += '<\/tr>';
  }
  else {
    Rows = Rows - 1;
    i = 1
    output = output.substr(0,output.length-4); // remove the <tr> from the end if there's no last row
  }
  
  for(; Rows < 5; Rows++) {
  	output += '<tr>'
    for (column=1; column<=7; i++, column++) {
      output +=  getDayLink(i,true,nextMonth,nextYear);
    }
    output += '</tr>'  
  }
  output += '<\/table><\/td><\/tr>';



  if (ppcNN6) {
    output += '<\/table><\/form>';
  }
  else {
    output += '<\/form><\/table>';
  }
  curDate.setDate(1);
  curDate.setMonth(startMonth);
  curDate.setFullYear(startYear);
  return output;
}

function getDayLink(linkDay,isGreyDate,linkMonth,linkYear) {
  var templink;
  if (!(IsUsingMinMax)) {
    if (isGreyDate) {
      templink='<td align="center" class="cal-GreyDate">' + linkDay + '<\/td>';
    }
    else {
      if (isDayToday(linkDay)) {
        templink='<td align="center" class="cal-DayCell">' + '<a class="cal-TodayLink" onmouseover="self.status=\' \';return true" href="javascript:parent.changeDay(' + linkDay + ');">' + linkDay + '<\/a>' +'<\/td>';
      } else if (isSelectedDay(linkDay, linkMonth, linkYear)) {
        templink='<td align="center" class="cal-HeadCell">' + '<a class="cal-DayLink" onmouseover="self.status=\' \';return true" href="javascript:parent.changeDay(' + linkDay + ');">' + linkDay + '<\/a>' +'<\/td>';
      } else {
        templink='<td align="center" class="cal-DayCell">' + '<a class="cal-DayLink" onmouseover="self.status=\' \';return true" href="javascript:parent.changeDay(' + linkDay + ');">' + linkDay + '<\/a>' +'<\/td>';
      }
    }
  }
  else {
    if (isDayValid(linkDay,linkMonth,linkYear)) {
      if (isGreyDate){
        templink='<td align="center" class="cal-GreyDate">' + linkDay + '<\/td>';
      }
      else {
        if (isDayToday(linkDay)) {
          templink='<td align="center" class="cal-DayCell">' + '<a class="cal-TodayLink" onmouseover="self.status=\' \';return true" href="javascript:parent.changeDay(' + linkDay + ');">' + linkDay + '<\/a>' +'<\/td>';
        } else {
          templink='<td align="center" class="cal-DayCell">' + '<a class="cal-DayLink" onmouseover="self.status=\' \';return true" href="javascript:parent.changeDay(' + linkDay + ');">' + linkDay + '<\/a>' +'<\/td>';
        }
      }
    }
    else {
      templink='<td align="center" class="cal-GreyInvalidDate">'+ linkDay + '<\/td>';
    }
  }
  return templink;
}

function isDayToday(isDay) {
  if ((curDate.getFullYear() == todayDate.getFullYear()) && (curDate.getMonth() == todayDate.getMonth()) && (isDay == todayDate.getDate())) {
    return true;
  }
  else {
    return false;
  }
}

function isSelectedDay(linkDay, linkMonth, linkYear) {
  /*
  window.alert("linkDay=" + linkDay + ",linkMonth="+ linkMonth +",linkYear=" +linkYear + "\n" +
  "SelectedDt.getDate()="+SelectedDt.getDate()+", SelectedDt.getMonth()="+SelectedDt.getMonth()+", SelectedDt.getFullYear()=" + SelectedDt.getFullYear() +"\n" +
  "SelectedDt=" +SelectedDt)
  */
  if ((SelectedDt.getFullYear() == linkYear) && (SelectedDt.getMonth() == linkMonth) && (SelectedDt.getDate() == linkDay)) {
    return true;
  }
  else {
    return false;
  }
}

function isDayValid(validDay, validMonth, validYear){

  curDate.setDate(validDay);
  curDate.setMonth(validMonth);
  curDate.setFullYear(validYear);

  if ((curDate>=minDate) && (curDate<=maxDate)) {
    return true;
  }
  else {
    return false;
  }
}

function padout(number) { return (number < 10) ? '0' + number : number; }

function clearDay() {
  eval('document.' + calfrmName + '.' + curDateBox + '.value = \'\'');
  hideCalendar();
  if (FuncsToRun!=null)
  eval(FuncsToRun);
}

function changeDay(whatDay) {
  curDate.setDate(whatDay);
  parent.document[calfrmName][curDateBox].value = 
    curDate.getDate() + '-' + 
    names[curDate.getMonth()] + '-' + 
    curDate.getFullYear() + '"'
  hideCalendar();
  if (FuncsToRun!=null)
  eval(FuncsToRun);
  parent.BreakDate(parent.document[calfrmName][curDateBox].value)
}

function scrollMonth(amount) {
  var monthCheck;
  var yearCheck;

  if(isFrameMode) {
	  monthCheck = window.frames[id].document.forms["Cal"].cboMonth.selectedIndex + amount;
  } else if (ppcIE) {
    monthCheck = document.forms["Cal"].cboMonth.selectedIndex + amount;
  }  else if (ppcNN) {
    monthCheck = document.popupcalendar.document.forms["Cal"].cboMonth.selectedIndex + amount;
  }
  if (monthCheck < 0) {
    yearCheck = curDate.getFullYear() - 1;
    if ( yearCheck < minYearList ) {
      yearCheck = minYearList;
      monthCheck = 0;
    }
    else {
      monthCheck = 11;
    }
    curDate.setFullYear(yearCheck);
  }
  else if (monthCheck >11) {
    yearCheck = curDate.getFullYear() + 1;
    if ( yearCheck > maxYearList-1 ) {
      yearCheck = maxYearList-1;
      monthCheck = 11;
    }
    else {
      monthCheck = 0;
    }
    curDate.setFullYear(yearCheck);
  }

  if(isFrameMode) {
	curDate.setMonth(window.frames[id].document.forms["Cal"].cboMonth.options[monthCheck].value );  
  } else if (ppcIE) {
    curDate.setMonth(document.forms["Cal"].cboMonth.options[monthCheck].value);
  }
  else if (ppcNN) {
    curDate.setMonth(document.popupcalendar.document.forms["Cal"].cboMonth.options[monthCheck].value );
  }
  domlay('popupcalendar',1,ppcX,ppcY,Calendar(curDate.getMonth(),curDate.getFullYear()));
}

function changeMonth() {
  if(isFrameMode) {
  	var FORM = window.frames[id].document.forms["Cal"];
    curDate.setMonth(FORM.cboMonth.options[FORM.cboMonth.selectedIndex].value);
    domlay('popupcalendar',1,ppcX,ppcY,Calendar(curDate.getMonth(),curDate.getFullYear()));
  } else if (ppcIE ) {
    curDate.setMonth(document.forms["Cal"].cboMonth.options[document.forms["Cal"].cboMonth.selectedIndex].value);
    domlay('popupcalendar',1,ppcX,ppcY,Calendar(curDate.getMonth(),curDate.getFullYear()));
  }
  else if (ppcNN ) {
    curDate.setMonth(document.popupcalendar.document.forms["Cal"].cboMonth.options[document.popupcalendar.document.forms["Cal"].cboMonth.selectedIndex].value);
    domlay('popupcalendar',1,ppcX,ppcY,Calendar(curDate.getMonth(),curDate.getFullYear()));
  }
}

function changeYear() {
  if(isFrameMode) {
  	var FORM = window.frames[id].document.forms["Cal"];
    curDate.setFullYear(FORM.cboYear.options[FORM.cboYear.selectedIndex].value);
    domlay('popupcalendar',1,ppcX,ppcY,Calendar(curDate.getMonth(),curDate.getFullYear()));
  } else if (ppcIE ) {
    curDate.setFullYear(document.forms["Cal"].cboYear.options[document.forms["Cal"].cboYear.selectedIndex].value);
    domlay('popupcalendar',1,ppcX,ppcY,Calendar(curDate.getMonth(),curDate.getFullYear()));
  } else if (ppcNN) {
    curDate.setFullYear(document.popupcalendar.document.forms["Cal"].cboYear.options[document.popupcalendar.document.forms["Cal"].cboYear.selectedIndex].value);
    domlay('popupcalendar',1,ppcX,ppcY,Calendar(curDate.getMonth(),curDate.getFullYear()));
  }

}

function makeArray0() {
  for (i = 0; i<makeArray0.arguments.length; i++)
  this[i] = makeArray0.arguments[i];
}

function ParseDate(Dt) {
  var SDt = Dt.split("-");
  if (SDt.length < 2) {
    return new Date();
  }

  var Dd  = parseInt(SDt[0]);
  var Mn  = SDt[1];
  var Yr = parseInt(SDt[2]);

  if (isNaN(Dd)) return new Date();
  if (isNaN(Yr)) return new Date();

  var M  = 0
  for(M=0; M <= 11; M++) {
    if(Mn == names[M]) break;
  }
  return new Date(Yr,M,Dd)
}

var names     = new makeArray0('01','02','03','04','05','06','07','08','09','10','11','12');
var days      = new makeArray0(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var dow       = new makeArray0('S','M','T','W','T','F','S');

