diff --git a/presentation/lookAndFeel/knowledgeTree/js/datePicker.js b/presentation/lookAndFeel/knowledgeTree/js/datePicker.js
new file mode 100644
index 0000000..ae10f23
--- /dev/null
+++ b/presentation/lookAndFeel/knowledgeTree/js/datePicker.js
@@ -0,0 +1,578 @@
+
+
+
+
+
+
+var weekend = [0,6];
+var weekendColor = "#e0e0e0";
+var fontface = "Verdana";
+var fontsize = 2;
+
+var gNow = new Date();
+var ggWinCal;
+isNav = (navigator.appName.indexOf("Netscape") != -1) ? true : false;
+isIE = (navigator.appName.indexOf("Microsoft") != -1) ? true : false;
+
+Calendar.Months = ["January", "February", "March", "April", "May", "June",
+"July", "August", "September", "October", "November", "December"];
+
+// Non-Leap year Month days..
+Calendar.DOMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
+// Leap year Month days..
+Calendar.lDOMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
+
+function Calendar(p_item, p_WinCal, p_month, p_year, p_format) {
+ if ((p_month == null) && (p_year == null)) return;
+
+ if (p_WinCal == null)
+ this.gWinCal = ggWinCal;
+ else
+ this.gWinCal = p_WinCal;
+
+ if (p_month == null) {
+ this.gMonthName = null;
+ this.gMonth = null;
+ this.gYearly = true;
+ } else {
+ this.gMonthName = Calendar.get_month(p_month);
+ this.gMonth = new Number(p_month);
+ this.gYearly = false;
+ }
+
+ this.gYear = p_year;
+ this.gFormat = p_format;
+ this.gBGColor = "white";
+ this.gFGColor = "black";
+ this.gTextColor = "black";
+ this.gHeaderColor = "black";
+ this.gReturnItem = p_item;
+ this.gAfterToday = true;
+}
+
+Calendar.get_month = Calendar_get_month;
+Calendar.get_daysofmonth = Calendar_get_daysofmonth;
+Calendar.calc_month_year = Calendar_calc_month_year;
+Calendar.print = Calendar_print;
+
+function Calendar_get_month(monthNo) {
+ return Calendar.Months[monthNo];
+}
+
+function Calendar_get_daysofmonth(monthNo, p_year) {
+ /*
+ Check for leap year ..
+ 1.Years evenly divisible by four are normally leap years, except for...
+ 2.Years also evenly divisible by 100 are not leap years, except for...
+ 3.Years also evenly divisible by 400 are leap years.
+ */
+ if ((p_year % 4) == 0) {
+ if ((p_year % 100) == 0 && (p_year % 400) != 0)
+ return Calendar.DOMonth[monthNo];
+
+ return Calendar.lDOMonth[monthNo];
+ } else
+ return Calendar.DOMonth[monthNo];
+}
+
+function Calendar_calc_month_year(p_Month, p_Year, incr) {
+ /*
+ Will return an 1-D array with 1st element being the calculated month
+ and second being the calculated year
+ after applying the month increment/decrement as specified by 'incr' parameter.
+ 'incr' will normally have 1/-1 to navigate thru the months.
+ */
+ var ret_arr = new Array();
+
+ if (incr == -1) {
+ // B A C K W A R D
+ if (p_Month == 0) {
+ ret_arr[0] = 11;
+ ret_arr[1] = parseInt(p_Year) - 1;
+ }
+ else {
+ ret_arr[0] = parseInt(p_Month) - 1;
+ ret_arr[1] = parseInt(p_Year);
+ }
+ } else if (incr == 1) {
+ // F O R W A R D
+ if (p_Month == 11) {
+ ret_arr[0] = 0;
+ ret_arr[1] = parseInt(p_Year) + 1;
+ }
+ else {
+ ret_arr[0] = parseInt(p_Month) + 1;
+ ret_arr[1] = parseInt(p_Year);
+ }
+ }
+
+ return ret_arr;
+}
+
+function Calendar_print() {
+ ggWinCal.print();
+}
+
+function Calendar_calc_month_year(p_Month, p_Year, incr) {
+ /*
+ Will return an 1-D array with 1st element being the calculated month
+ and second being the calculated year
+ after applying the month increment/decrement as specified by 'incr' parameter.
+ 'incr' will normally have 1/-1 to navigate thru the months.
+ */
+ var ret_arr = new Array();
+
+ if (incr == -1) {
+ // B A C K W A R D
+ if (p_Month == 0) {
+ ret_arr[0] = 11;
+ ret_arr[1] = parseInt(p_Year) - 1;
+ }
+ else {
+ ret_arr[0] = parseInt(p_Month) - 1;
+ ret_arr[1] = parseInt(p_Year);
+ }
+ } else if (incr == 1) {
+ // F O R W A R D
+ if (p_Month == 11) {
+ ret_arr[0] = 0;
+ ret_arr[1] = parseInt(p_Year) + 1;
+ }
+ else {
+ ret_arr[0] = parseInt(p_Month) + 1;
+ ret_arr[1] = parseInt(p_Year);
+ }
+ }
+
+ return ret_arr;
+}
+
+// This is for compatibility with Navigator 3, we have to create and discard one object before the prototype object exists.
+new Calendar();
+
+Calendar.prototype.getMonthlyCalendarCode = function() {
+ var vCode = "";
+ var vHeader_Code = "";
+ var vData_Code = "";
+
+ // Begin Table Drawing code here..
+ vCode = vCode + "
";
+
+ vHeader_Code = this.cal_header();
+ vData_Code = this.cal_data();
+ vCode = vCode + vHeader_Code + vData_Code;
+
+ vCode = vCode + "
";
+
+ return vCode;
+}
+
+Calendar.prototype.show = function() {
+ var vCode = "";
+
+ this.gWinCal.document.open();
+
+ // Setup the page...
+ this.wwrite("");
+ this.wwrite("Calendar");
+ this.wwrite("");
+
+ this.wwrite("");
+ this.wwriteA("");
+ this.wwriteA(this.gMonthName + " " + this.gYear);
+ this.wwriteA("
");
+
+ // Show navigation buttons
+ var prevMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, -1);
+ var prevMM = prevMMYYYY[0];
+ var prevYYYY = prevMMYYYY[1];
+
+ var nextMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, 1);
+ var nextMM = nextMMYYYY[0];
+ var nextYYYY = nextMMYYYY[1];
+
+ this.wwrite("
");
+
+ // Get the complete calendar code for the month..
+ vCode = this.getMonthlyCalendarCode();
+ this.wwrite(vCode);
+
+ this.wwrite("");
+ this.gWinCal.document.close();
+}
+
+Calendar.prototype.showY = function() {
+ var vCode = "";
+ var i;
+ var vr, vc, vx, vy; // Row, Column, X-coord, Y-coord
+ var vxf = 285; // X-Factor
+ var vyf = 200; // Y-Factor
+ var vxm = 10; // X-margin
+ var vym; // Y-margin
+ if (isIE) vym = 75;
+ else if (isNav) vym = 25;
+
+ this.gWinCal.document.open();
+
+ this.wwrite("");
+ this.wwrite("Calendar");
+ this.wwrite("");
+ this.wwrite("");
+
+ this.wwrite("");
+ this.wwrite("");
+ this.wwrite("Year : " + this.gYear);
+ this.wwrite("
");
+
+ // Show navigation buttons
+ var prevYYYY = parseInt(this.gYear) - 1;
+ var nextYYYY = parseInt(this.gYear) + 1;
+
+ this.wwrite("
");
+
+ // Get the complete calendar code for each month..
+ var j;
+ for (i=11; i>=0; i--) {
+ if (isIE)
+ this.wwrite("");
+ else if (isNav)
+ this.wwrite("");
+
+ this.gMonth = i;
+ this.gMonthName = Calendar.get_month(this.gMonth);
+ vCode = this.getMonthlyCalendarCode();
+ this.wwrite(this.gMonthName + "/" + this.gYear + "
");
+ this.wwrite(vCode);
+
+ if (isIE)
+ this.wwrite("
");
+ else if (isNav)
+ this.wwrite("");
+ }
+
+ this.wwrite("
");
+ this.gWinCal.document.close();
+}
+
+Calendar.prototype.wwrite = function(wtext) {
+ this.gWinCal.document.writeln(wtext);
+}
+
+Calendar.prototype.wwriteA = function(wtext) {
+ this.gWinCal.document.write(wtext);
+}
+
+Calendar.prototype.cal_header = function() {
+ var vCode = "";
+
+ vCode = vCode + "";
+ vCode = vCode + "| Sun | ";
+ vCode = vCode + "Mon | ";
+ vCode = vCode + "Tue | ";
+ vCode = vCode + "Wed | ";
+ vCode = vCode + "Thu | ";
+ vCode = vCode + "Fri | ";
+ vCode = vCode + "Sat | ";
+ vCode = vCode + "
";
+
+ return vCode;
+}
+
+Calendar.prototype.cal_data = function() {
+ var vDate = new Date();
+ vDate.setDate(1);
+ vDate.setMonth(this.gMonth);
+ vDate.setFullYear(this.gYear);
+
+ var vFirstDay=vDate.getDay();
+ var vDay=1;
+ var vLastDay=Calendar.get_daysofmonth(this.gMonth, this.gYear);
+ var vOnLastDay=0;
+ var vCode = "";
+
+ /*
+ Get day for the 1st of the requested month/year..
+ Place as many blank cells before the 1st day of the month as necessary.
+ */
+
+ vCode = vCode + "";
+ for (i=0; i ";
+ }
+
+ // Write rest of the 1st week
+ for (j=vFirstDay; j<7; j++) {
+ vCode = vCode + "| " +
+ this.format_link(vDay) +
+ " | ";
+ vDay=vDay + 1;
+ }
+ vCode = vCode + "
";
+
+ // Write the rest of the weeks
+ for (k=2; k<7; k++) {
+ vCode = vCode + "";
+
+ for (j=0; j<7; j++) {
+ vCode = vCode + "| " +
+ this.format_link(vDay) +
+ " | ";
+ vDay=vDay + 1;
+
+ if (vDay > vLastDay) {
+ vOnLastDay = 1;
+ break;
+ }
+ }
+
+ if (j == 6)
+ vCode = vCode + "
";
+ if (vOnLastDay == 1)
+ break;
+ }
+
+ // Fill up the rest of last week with proper blanks, so that we get proper square blocks
+ for (m=1; m<(7-j); m++) {
+ if (this.gYearly)
+ vCode = vCode + " | ";
+ else
+ vCode = vCode + "" + m + " | ";
+ }
+
+ return vCode;
+}
+
+Calendar.prototype.format_link = function(vDay) {
+ var vNowDay = gNow.getDate();
+ var vNowMonth = gNow.getMonth();
+ var vNowYear = gNow.getFullYear();
+
+ if (this.gAfterToday &&
+ // also, all the days in years < this year
+ ( (this.gYear < vNowYear) ||
+ // handles all the days before today in the current month and year
+ ( vDay <= vNowDay && this.gMonth == vNowMonth && this.gYear == vNowYear) ||
+ // also, all the rest of the months < than this month in the current year
+ (this.gMonth < vNowMonth && this.gYear == vNowYear)
+ )
+ ) {
+ return (this.format_day(vDay));
+ } else {
+ return ("" +
+ this.format_day(vDay) +
+ "");
+ }
+}
+
+Calendar.prototype.format_day = function(vday) {
+ var vNowDay = gNow.getDate();
+ var vNowMonth = gNow.getMonth();
+ var vNowYear = gNow.getFullYear();
+
+ if (vday == vNowDay && this.gMonth == vNowMonth && this.gYear == vNowYear)
+ return ("" + vday + "");
+ else
+ return (vday);
+}
+
+Calendar.prototype.write_weekend_string = function(vday) {
+ var i;
+
+ // Return special formatting for the weekend day.
+ for (i=0; i