function calculateNthWeekDayOfMonth(interval, weekday, dPlus) {
            var d = (dPlus != undefined && dPlus != null ? dPlus : new Date());
            var dStart = new Date();
            dStart.setFullYear(d.getFullYear(), d.getMonth(), 1);
            
            var cDay = d.getDay();
            var sDay = dStart.getDay();
            if (sDay > weekday) {
                dStart.setFullYear(d.getFullYear(), d.getMonth(), 8 + (weekday - sDay)); // This is now the first weekday.
            } else {
                if (sDay < weekday) {
                    dStart.setFullYear(d.getFullYear(), d.getMonth(), (weekday + 1) - sDay); // This is now the first weekday.
                }
            }

            // Move up to the interval specified.
            dStart.setDate(dStart.getDate() + ((interval - 1) * 7));
            if (interval == 5) {
                d.setMonth(d.getMonth() + 1);
                if (dStart.getMonth() == d.getMonth()) {
                    dStart.setDate(dStart.getDate() - 7);
                }
                d.setMonth(d.getMonth() - 1);
            }

            if (dStart < d) {
                d.setFullYear(d.getFullYear(), d.getMonth() + 1, 1);
                dStart = calculateNthWeekDayOfMonth(interval, weekday, d);
            }

            return dStart;
        }

        function calculateNextDayOfWeek(weekday) {
            var d = new Date();
            var cDay = d.getDay();

            if (cDay > weekday) {
                d.setDate(d.getDate() + (7 + (weekday - cDay)));
            } else {
                d.setDate(d.getDate() + (weekday - cDay));
            }

            return d;
        }

        function friendlyFormatDateString(d) {
            var wd = new Array();
            wd[0] = "Sun"; wd[1] = "Mon"; wd[2] = "Tue"; wd[3] = "Wed"; wd[4] = "Thu"; wd[5] = "Fri"; wd[6] = "Sat";
            var mo = new Array(); 
            mo[0] = "Jan"; mo[1] = "Feb"; mo[2] = "Mar"; mo[3] = "Apr"; mo[4] = "May"; mo[5] = "Jun";
            mo[6] = "Jul"; mo[7] = "Aug"; mo[8] = "Sep"; mo[9] = "Oct"; mo[10] = "Nov"; mo[11] = "Dec";
            return wd[d.getDay()].toString() + ", " + mo[d.getMonth()].toString() + " " + d.getDate().toString() + ", " + d.getFullYear().toString();
        }
