/*
PRODUCT:  FS JavaScript Popup Date Selector - version 2.01
COPYRIGHT:  June 2004 (c) Future Shock Ltd.
CONTACT:  post@future-shock.net
COMPATIBILITY:
  PC (WinXP): Internet Explorer 4/5/5.5/6, Netscape 4.78/7, Mozilla Firefox 0.8, Opera 7
  Mac (OS9):  Internet Explorer 5.1, Netscape 7.1
  Max (OSX):  Internet Explorer 5.2, Netscape 7.1,Safari 125

This product is NOT freeware or shareware, to use it without licence is breach of copyright and will be prosecuted.
Once a licence is purchased you may amend the CSS and image resources to style the product to your requirements.
*/


// VISIBILITY VARIABLES
var FSarrHiddenElements=new Array();

// CUSTOMIZED VARIABLES
var FSintEmptyDate=""; // Default: "None"
var FSintSplitMode="."; // Default: FSintSplitMode

var FSboolClickHandler=true;

// CONFIGURATION VARIABLES
var FSintFormatMode=1; // date format: 1=dd/mm/yyyy, 0=mm/dd/yyyy (may be overidded in the HTML call to FSfncShowDateSelector)


// PRIVATE VARIABLES - Do not amend anything below this line!
var FSstrImagePathvar;
var FSblnDisableNone;
var FSobjDateDayRef;
var FSobjDateMonthRef;
var FSobjDateYearRef;
var FSobjSelectorRef;
var FSobjCalendarArea;
var FSobjDateTable;
var FSdtToday;
var FSintOneMinute=60 * 1000;
var FSintOneHour=FSintOneMinute * 60;
var FSintOneDay=FSintOneHour * 24;
var FSintSelectedDay=0;
var FSintSelectedMonth=0;
var FSintSelectedYear=0;
var FSintCurrentMonth=0;
var FSintCurrentYear=0;

if (navigator.userAgent.indexOf("Gecko")>0) {
  FSstrBrowser="Gecko";
  document.onclick=FSfncHideDateSelector;
  }
else {
  FSstrBrowser="IE";
  document.onclick=function() {FSfncHideDateSelector(event)};
  }

if ((typeof(HTMLElement)!="undefined") && (!HTMLElement.prototype.insertAdjacentHTML)) {
  HTMLElement.prototype.insertAdjacentHTML = function(where,htmlStr) {
    var r = this.ownerDocument.createRange();
    r.setStartBefore(this);
    var parsedHTML = r.createContextualFragment(htmlStr);
    this.appendChild(parsedHTML);
    }
  }

function FSfncFadeObj(obj, st) {
  obj.style.filter="blendTrans(duration=0.5)";
  obj.filters.blendTrans.apply();
  obj.style.visibility=st;
  obj.filters.blendTrans.play();
}

function FSfncSwitchIds(ids, st) {
  for(var i=0; i<ids.length; i++) {
    obj = document.getElementById(ids[i]);
    if(!obj)
      continue;
    obj.style.visibility=st;
  }
}

function FSfncShowDateSelectorMulti(DateDayRef,DateMonthRef,DateYearRef,EventRef,DisableNone,MyXOffset,MyYOffset,MyInvisibleFields) {

  if (!MyXOffset)
    MyXOffset = 0;

  if (!MyYOffset)
    MyYOffset = 0;

  if (FSstrBrowser=="IE") {
    FSfncSwitchIds(FSarrHiddenElements, "visible");
    if (!MyInvisibleFields)
      MyInvisibleFields = "";
    FSarrHiddenElements = MyInvisibleFields.split(",");
    FSfncSwitchIds(FSarrHiddenElements, "hidden");
  }


  FSboolClickHandler=false;
  window.setTimeout('FSboolClickHandler=true', 250);

  if (document.getElementById) {
    FSblnDisableNone=DisableNone;
    if (!FSobjSelectorRef) {
      // first show tasks
      FSdtToday=new Date();
      FSdtToday.setHours(0,0,0,0);
      FSfncWriteSelectorHTML();

      FSobjSelectorRef=document.getElementById("FSdateSelector");
      FSobjCalendarArea=document.getElementById("FScalendarArea");
      }
    FSobjDateTable=document.getElementById(DateDayRef.name + "FStable");
    FSobjDateDayRef=DateDayRef;
    FSobjDateMonthRef=DateMonthRef;
    FSobjDateYearRef=DateYearRef;
    FSintSelectedDay=0;

    //var arrCurrentDate=FSobjDateDayRef.value.split(FSintSplitMode);
    arrCurrentDate=new Array();
  	//Day
	arrCurrentDate[0]=FSobjDateDayRef.value;
	//Month
	if(isNaN(FSobjDateMonthRef.value) == true){
		arrCurrentDate[1]=FsfnxGetFormatedMonthNumber(FSobjDateMonthRef.value);
	}
	else{
		arrCurrentDate[1]=FSobjDateMonthRef.value;
	}
	//Year
	if(FSobjDateYearRef.value.length < 4){
		arrCurrentDate[2]= '20' + FSobjDateYearRef.value;
	}
	else{
		arrCurrentDate[2]= FSobjDateYearRef.value;
	}

    // mod
    //var isValidDate = FSfncCheckDateFormat(DateDayRef.value);
    var isValidDate = FSfncCheckDateFormat(arrCurrentDate[0] + FSintSplitMode + arrCurrentDate[1] + FSintSplitMode + arrCurrentDate[2]);

    if (FSobjDateDayRef.value==FSintEmptyDate || isValidDate==false) {
      arrCurrentDate=FSfncDateToString(FSdtToday).split(FSintSplitMode);
      FSintSelectedMonth=arrCurrentDate[0 + FSintFormatMode] - 1;
      }
    else {
      //arrCurrentDate=FSobjDateDayRef.value.split(FSintSplitMode);
      FSintSelectedDay=arrCurrentDate[1 - FSintFormatMode];
      FSintSelectedMonth=arrCurrentDate[0 + FSintFormatMode] - 1;
      }
    FSintSelectedYear=arrCurrentDate[2];
    FSintCurrentMonth=parseInt(FSintSelectedMonth,10);
    FSintCurrentYear=parseInt(FSintSelectedYear,10);
    document.FSdateSelectorForm.FScurrentMonth.selectedIndex=FSintCurrentMonth;
    document.FSdateSelectorForm.FScurrentYear.value=FSintCurrentYear;
    FSfncCreateCalendarArea(FSintSelectedDay,FSintCurrentMonth,FSintCurrentYear);
    if (FSstrBrowser=="Gecko") {
      FSobjSelectorRef.style.left=EventRef.clientX - 90 + 90 + MyXOffset;
      FSobjSelectorRef.style.top=EventRef.clientY + 8 + MyYOffset;
      FSobjSelectorRef.style.visibility="visible";
      }
    else {
      FSobjSelectorRef.style.left=EventRef.clientX - EventRef.offsetX - 82 + document.body.scrollLeft + 82 + MyXOffset;
      FSobjSelectorRef.style.top=EventRef.clientY - EventRef.offsetY + 16 + document.body.scrollTop + MyYOffset;
      FSfncFadeObj(FSobjSelectorRef, "visible");
      }
    }
  }

function FSfncHideDateSelector(TheEvent) {
  if(FSboolClickHandler==false)
    return;
  if (FSstrBrowser=="IE")
    FSfncSwitchIds(FSarrHiddenElements, "visible");
  if (FSobjSelectorRef) {
    if (FSstrBrowser=="Gecko") {
      if (TheEvent) {
        var rel = TheEvent.target;
        while (rel) {if (rel.id=="FSdateSelector") {break} else {rel=rel.parentNode}}
        }
      if (!rel) {FSobjSelectorRef.style.visibility="hidden"}
      return;
      }
    else {
      if ((TheEvent)) {
        // check not clicked on calendar
        if ((TheEvent.clientX+document.body.scrollLeft>FSobjSelectorRef.style.posLeft+1) &&
          (TheEvent.clientX+document.body.scrollLeft<FSobjSelectorRef.style.posLeft+FSobjSelectorRef.style.posWidth+10) &&
          (TheEvent.clientY+document.body.scrollTop>FSobjSelectorRef.style.posTop+1) &&
          (TheEvent.clientY+document.body.scrollTop<FSobjSelectorRef.style.posTop+FSobjSelectorRef.style.posHeight+2)
          ) {return}
        // check not clicked on icon
        if ((TheEvent.clientX+document.body.scrollLeft>FSobjSelectorRef.style.posLeft+81) &&
          (TheEvent.clientX+document.body.scrollLeft<FSobjSelectorRef.style.posLeft+99) &&
          (TheEvent.clientY+document.body.scrollTop>FSobjSelectorRef.style.posTop-17) &&
          (TheEvent.clientY+document.body.scrollTop<FSobjSelectorRef.style.posTop)
          ) {return}
        }
      // FSobjSelectorRef.style.visibility="hidden";
      FSfncFadeObj(FSobjSelectorRef, "hidden");
      }
    }
  else {FSobjSelectorRef=false}
  }

function FSfncCreateCalendarArea(TheDay,TheMonth,TheYear) {
  var dtFirstOfMonth=new Date(TheYear,TheMonth,1);
  switch (dtFirstOfMonth.getDay()) {
    case 0: var OffsetDays=6; break;
    case 1: var OffsetDays=7; break;
    default: var OffsetDays=dtFirstOfMonth.getDay() - 1;
    }
  var dtCalendarStart=new Date(dtFirstOfMonth.getTime() - (FSintOneDay * OffsetDays));
  var dtCalendarEnd=new Date(dtCalendarStart.getTime() + (FSintOneDay * 41));
  var strCalendar="<TABLE BORDER='0' CELLPADDING='2' CELLSPACING='0' CLASS='FScalendar'>";
  strCalendar+="<TR CLASS='FScalendarTitles' ALIGN='center'><TD WIDTH='22'>Mo</TD><TD WIDTH='22'>Di</TD><TD WIDTH='22'>Mi</TD><TD WIDTH='22'>Do</TD><TD WIDTH='22'>Fr</TD><TD WIDTH='22'>Sa</TD><TD WIDTH='22'>So</TD></TR>";
  for (var i=0; i<=41; i++) {
    if (i % 7 == 0) {strCalendar+="<TR ALIGN='center'>"}
    var StyleString="";
    var dtTheDay=new Date(dtCalendarStart.getTime() + (FSintOneDay * i));
    if (dtTheDay.getTime()==FSdtToday.getTime()) {
      if ((dtTheDay.getMonth()==FSintSelectedMonth) && (dtTheDay.getDate()==FSintSelectedDay) && (dtTheDay.getFullYear()==FSintSelectedYear)) {StyleString+="background-image: url(" + FSstrImagePath + "today_selected.gif); background-repeat:no-repeat; "}
      else {StyleString+="background-image: url(" + FSstrImagePath + "today.gif); background-repeat:no-repeat; "}
      }
    else if ((dtTheDay.getMonth()==FSintSelectedMonth) && (dtTheDay.getDate()==FSintSelectedDay) && (dtTheDay.getFullYear()==FSintSelectedYear)) {StyleString+="background-image: url(" + FSstrImagePath + "selected.gif); background-repeat:no-repeat; "}
    if (dtTheDay.getMonth()!=TheMonth) {var LinkClass="FSnotInMonth"} else {var LinkClass="FSinMonth"}
    strCalendar+="<TD STYLE='" + StyleString + "'><A HREF='Javascript: void FSfncSetDate(\"" + FSfncDateToString(dtTheDay) + "\")' CLASS='" + LinkClass + "'>" + dtTheDay.getDate() + "</A></TD>";
    if (i%7==6) {strCalendar+="</TR>"}
    }
  strCalendar+="<TABLE>";
  FSobjCalendarArea.innerHTML=strCalendar;
  }

function FSfncSetDate(TheDate) {
  if ((TheDate==FSintEmptyDate) && (FSblnDisableNone==true)) {alert("This date cannot be set to None."); return false}
  FSintSelectedDay=0;
  
  var arrDate=TheDate.split(FSintSplitMode);
  
  FSobjDateDayRef.value=arrDate[1 - FSintFormatMode];
  if(FSobjDateDayRef.value != arrDate[1 - FSintFormatMode]) FSobjDateDayRef.value = arrDate[1 - FSintFormatMode].substr(1,1);
  
  FSobjDateMonthRef.value=arrDate[0 + FSintFormatMode];
  
  if(FSobjDateYearRef.value.length < 4){
	FSobjDateYearRef.value=arrDate[2].substr(2,2);
  }
  else{
	FSobjDateYearRef.value=arrDate[2];
  }
  //FSobjDateDayRef.value=TheDate;
  FSfncHideDateSelector();
}

function FSfncAdvanceDate(Adjuster) {
  if ((Adjuster==12) || (Adjuster==-12)) {FSintCurrentYear=FSintCurrentYear + (Adjuster / 12)}
  else {
    FSintCurrentMonth=FSintCurrentMonth + Adjuster;
    if (FSintCurrentMonth==-1) {FSintCurrentMonth=11; FSintCurrentYear--}
    if (FSintCurrentMonth==12) {FSintCurrentMonth=0; FSintCurrentYear++}
    }
  document.FSdateSelectorForm.FScurrentMonth.selectedIndex=FSintCurrentMonth;
  document.FSdateSelectorForm.FScurrentYear.value=FSintCurrentYear;
  FSfncCreateCalendarArea(FSintSelectedDay,FSintCurrentMonth,FSintCurrentYear);
  }

function FSfncChangeMonth(Adjuster) {
  FSintCurrentMonth=Adjuster-1;
  FSfncCreateCalendarArea(FSintSelectedDay,FSintCurrentMonth,FSintCurrentYear);
  }

function FSfncDateToString(TheDate) {
  if (FSintFormatMode==1) {return (TheDate.getDate()<10 ? "0" + TheDate.getDate() : TheDate.getDate()) + FSintSplitMode + (TheDate.getMonth()<9 ? "0" + (TheDate.getMonth() + 1) : (TheDate.getMonth() + 1)) + FSintSplitMode + TheDate.getFullYear()}
  else {return (TheDate.getMonth()<10 ? "0" + TheDate.getMonth() : TheDate.getMonth()) + FSintSplitMode + (TheDate.getDate()<9 ? "0" + (TheDate.getMonth() + 1) : (TheDate.getMonth() + 1)) + FSintSplitMode + TheDate.getFullYear()}
  }

function FSfncCheckDate(thisDateField) {if (!FSfncCheckDateFormat(thisDateField.value)) {alert("Date is not valid"); thisDateField.value=thisDateField.defaultValue}}

function FSfncCheckDateFormat(thisDate) {
  if (thisDate.indexOf(FSintSplitMode)==-1) {return false}
  var ArrayDate = thisDate.split(FSintSplitMode);
  if (ArrayDate.length!=3) {return false}
  if ((isNaN(ArrayDate[0])) || (ArrayDate[0]=="")) {return false}
  if ((isNaN(ArrayDate[1])) || (ArrayDate[1]=="")) {return false}
  if ((isNaN(ArrayDate[2])) || (ArrayDate[2]=="")) {return false}
  var daysInMonth = new Array(0,31,29,31,30,31,30,31,31,30,31,30,31);
  if ((parseInt(ArrayDate[1 - FSintFormatMode],10)<1) || (parseInt(ArrayDate[1 - FSintFormatMode],10)>daysInMonth[parseInt(ArrayDate[0 + FSintFormatMode],10)])) {return false}
  if ((parseInt(ArrayDate[0 + FSintFormatMode],10)==2) && (parseInt(ArrayDate[1 - FSintFormatMode],10)>FSfncDaysInFebruary(parseInt(ArrayDate[2],10)))) {return false}
  if ((parseInt(ArrayDate[0 + FSintFormatMode],10)<1) || (parseInt(ArrayDate[0 + FSintFormatMode],10)>12)) {return false}
  return true;
  }

function FSfncDaysInFebruary(year) {return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 )}

function FSfncWriteSelectorHTML() {
  var selectorHTML='' +
    '<FORM ACTION="#" METHOD="GET" NAME="FSdateSelectorForm" onSubmit="return false">' +
    '<TABLE BORDER="0" CELLPADDING="1" CELLSPACING="0" WIDTH="188" HEIGHT="178" ID="FSdateSelector" STYLE="width:190px; height:180px; position:absolute; z-index:200;">' +
    '<TR HEIGHT="22" CLASS="FSbuttonsRow">' +
    '<TD WIDTH="30" ALIGN="left"><INPUT TYPE="image" SRC="' + FSstrImagePath + 'but_prev.gif" WIDTH="18" HEIGHT="18" HSPACE="1" onClick="FSfncAdvanceDate(-1)"></TD>' +
    '<TD>' +
    '<SELECT NAME="FScurrentMonth" CLASS="FSmonthRolldown" onChange="FSfncChangeMonth(this.selectedIndex + 1)">' +
    '<OPTION>Januar</OPTION>' +
    '<OPTION>Februar</OPTION>' +
    '<OPTION>März</OPTION>' +
    '<OPTION>April</OPTION>' +
    '<OPTION>Mai</OPTION>' +
    '<OPTION>Juni</OPTION>' +
    '<OPTION>Juli</OPTION>' +
    '<OPTION>August</OPTION>' +
    '<OPTION>September</OPTION>' +
    '<OPTION>Oktober</OPTION>' +
    '<OPTION>November</OPTION>' +
    '<OPTION>Dezember</OPTION>' +
    '</SELECT>' +
    '</TD>' +
    '<TD><INPUT TYPE="text" NAME="FScurrentYear" VALUE="2004" READONLY CLASS="FSyearInput"></TD>' +
    '<TD><INPUT TYPE="image" SRC="' + FSstrImagePath + 'but_yeard.gif" WIDTH="18" HEIGHT="9" onClick="FSfncAdvanceDate(12)"><BR><INPUT TYPE="image" SRC="' + FSstrImagePath + 'but_yearu.gif" WIDTH="18" HEIGHT="9" onClick="FSfncAdvanceDate(-12)"></TD>' +
    '<TD WIDTH="30" ALIGN="right"><INPUT TYPE="image" SRC="' + FSstrImagePath + 'but_next.gif" WIDTH="18" HEIGHT="18" HSPACE="1" onClick="FSfncAdvanceDate(1)"></TD>' +
    '</TR>' +
    '<TR HEIGHT="133" BGCOLOR="#FFFFFF"><TD COLSPAN="5" ALIGN="center" ID="FScalendarArea"></TD></TR>' +
    '<TR HEIGHT="22" CLASS="FSbuttonsRow">' +
    '<TD COLSPAN="5">' +
    '<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%">' +
    '<TR>' +
    '<TD ALIGN="left"><!--<INPUT TYPE="image" SRC="' + FSstrImagePath + '/but_today.gif" WIDTH="38" HEIGHT="18" HSPACE="1" onClick="FSfncSetDate(FSfncDateToString(FSdtToday))">--></TD>' +
    '<TD ALIGN="center" ID="FSdateToday">Heute: ' + FSfncDateToString(FSdtToday) + '</TD>' +
    '<TD ALIGN="right"><!--<INPUT TYPE="image" SRC="' + FSstrImagePath + 'but_none.gif" WIDTH="38" HEIGHT="18" HSPACE="1" onClick="FSfncSetDate(\'None\')">--></TD>' +
    '</TR>' +
    '</TABLE>' +
    '</TD>' +
    '</TR>' +
    '</TABLE>' +
    '</FORM>';
  document.body.insertAdjacentHTML("BeforeEnd",selectorHTML);

  }

function FSfncWriteFieldHTML(FormName,FieldName,FieldValue,FieldWidth,ImagePath,DisableNone,UseOnClick) {

  FSstrImagePath=ImagePath;
  if (FSstrImagePath.charAt(FSstrImagePath.length)!=FSintSplitMode) {FSstrImagePath=FSstrImagePath + FSintSplitMode};
  if (document.getElementById) {
    if (UseOnClick==true) {var ActionEvent="onClick"} else {var ActionEvent="onMouseOver"}
    var formFieldHTML='' +
      '<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" BGCOLOR="#FFFFFF" CLASS="FSdateSelect" ID="' + FieldName + 'FStable" WIDTH="' + FieldWidth + '" HEIGHT="22" STYLE="width:' + FieldWidth + 'px">' +
      '<TR>' +
      '<TD><INPUT TYPE="text" NAME="' + FieldName + '" VALUE="' + FieldValue + '" CLASS="FSdateField" SIZE="9" MAXLENGTH="10" onChange="FSfncCheckDate(this)" READONLY></TD>' +
      '<TD ALIGN="right"><IMG SRC="' + FSstrImagePath + 'calendar.gif" HEIGHT="16" WIDTH="16" HSPACE="3" ' + ActionEvent + '="FSfncShowDateSelector(document.' + FormName + '.' + FieldName + ',event,' + DisableNone + ')" STYLE="cursor:hand"></TD>' +
      '</TR>' +
      '</TABLE>';
    document.write(formFieldHTML);
    }
  else {
    var formFieldHTML='<INPUT TYPE="text" NAME="' + FieldName + '" VALUE="' + FieldValue + '" SIZE="9" MAXLENGTH="10" onChange="FSfncCheckDate(this)" STYLE="width:' + FieldWidth + 'px; height:22px">'
    document.write(formFieldHTML);
    }
  }



<!-- Future Shock - Server 1 -->
