
function check_holiday (dt_date) {

// check simple dates (month/date - no leading zeroes)
var n_date = dt_date.getDate(),
n_month = dt_date.getMonth() + 1;
var s_date1 = n_month + '/' + n_date;

if ( s_date1 == '1/1' // New Year's Day
|| s_date1 == '1/2' // Day After New Years
|| s_date1 == '7/4' // Independence Day
|| s_date1 == '7/3' // Independence Day
|| s_date1 == '12/25' // Christmas Day
|| s_date1 == '12/26' // Day After Christmas
) return true;

// weekday from beginning of the month (month/num/day)
var n_wday = dt_date.getDay(),
n_wnum = Math.floor((n_date - 1) / 7) + 1;
var s_date2 = n_month + '/' + n_wnum + '/' + n_wday;

if (
s_date2 == '9/1/1' // Labor Day, first Monday in September
|| s_date2 == '11/4/4' // Thanksgiving Day, fourth Thursday in November
|| s_date2 == '11/4/5' // Day After Thanksgiving
) return true;

// weekday number from end of the month (month/num/day)
var dt_temp = new Date (dt_date);
dt_temp.setDate(1);
dt_temp.setMonth(dt_temp.getMonth() + 1);
dt_temp.setDate(dt_temp.getDate() - 1);
n_wnum = Math.floor((dt_temp.getDate() - n_date - 1) / 7) + 1;
var s_date3 = n_month + '/' + n_wnum + '/' + n_wday;

if ( s_date3 == '5/1/1' // Memorial Day, last Monday in May
) return true;

return false;
}
var DAY = 1000*60*60*24
var myDate = new Date();
//myDate.setFullYear(2008,11,29);
myDate.setHours(myDate.getHours() + 8);
var free = new Date();
free.setTime(myDate.getTime() + 10*DAY );
var lightning = new Date();
lightning.setTime(myDate.getTime());
lightning = addBusinessDays(lightning,4);

var quick = new Date();
quick.setTime(myDate.getTime());
quick = addBusinessDays(quick,6);


var offsetFree = 0;
var offsetQuick = 0;
var offsetLightning = 0;

function addBusinessDays(shipDate, days) {
var newDate = new Date();
newDate.setTime(myDate.getTime()-1*DAY); // start today
var daysUsed = 0;
while (daysUsed < days) {
	newDate.setTime(newDate.getTime() + 1*DAY);
	if (newDate.getDay() == 0 || newDate.getDay() == 6 || check_holiday(newDate) )
		;
	else 
		daysUsed++;
	//shipDate.setTime(newDate.getTime());
    }
	return newDate;
}

for (var i = 0;i<=10 ;i++ )
{
	
	var myNewDate = new Date();
	myNewDate.setTime(myDate.getTime() + i*DAY);
	//alert(myNewDate + " " + check_holiday(myNewDate));
	if (check_holiday(myNewDate))
		offsetFree++;
	

}

free.setTime(free.getTime() + offsetFree*DAY);

if (check_holiday(free))
{
	free.setTime(free.getTime() + 1*DAY);
}

if (free.getDay() == 0) {
if (offsetFree == 0) {
	free.setTime(free.getTime() -2*DAY); // go back to friday if no holiday bump
	}
else
	free.setTime(free.getTime() + 1*DAY); // go to monday
}
if (free.getDay() == 6) {
if (offsetFree == 0) {
	free.setTime(free.getTime() -1*DAY); // go back to friday if no holiday bump
	}
	else
		free.setTime(free.getTime() + 2*DAY); // go to monday
}

if (check_holiday(free)) // friday or monday holiday
{
if (free.getDay() == 5) 
	free.setTime(free.getTime() + 3*DAY);
else 
	free.setTime(free.getTime() + 1*DAY);
}
if 

((lightning.getMonth() == 11) && (lightning.getDate() == 24) )
	lightning.setTime(lightning.getTime() + 5*DAY);