function isLeap (year) {
		return ((year%400 == 0) || (year%100 != 0 && year%4 == 0)) ? 1 : 0;
}

function doy(d, m, y) {
	monCount = new Array (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365);
	return monCount[m-1] + d + (m > 2 && isLeap(y));
}

function civMonthLength (year, month, debug) {
		if (debug == true)
			alert (year + '/' + month);
		if (month != 2 && month < 8) {
			return 30+(month%2); 
		} else if (month >= 8) {
			return 30+((month+1)%2);
		} else {
			return 28 + isLeap(year);
		}		
}

function strip_tags (str) {
	return str.replace(/<[^>]*>/g, '');
}

function format_2digits (a) {
	return (parseInt(a,10) < 10 ? "0" : "") + parseInt(a,10).toString();
}

function getDoys (date, month, year) {
	day_of_year = doy (parseInt(date, 10), parseInt(month, 10), parseInt(year, 10));
	day_of_year_prev = day_of_year - 1 < 1 ? doy (31, 12, year-1) : day_of_year - 1;
	day_of_year_next = day_of_year + 1 > 365 + isLeap(year) ? 1 : day_of_year + 1;
	return new Array (day_of_year, day_of_year_prev, day_of_year_next);
}

function timeadj(t, ampm, roundup) {
	var hour;
	var min;

	var time = t;

	hour = Math.floor(time);
	if (roundup == true)
		min  = Math.ceil((time - hour) * 60.0);
	else
		min  = Math.floor((time - hour) * 60.0);

	if(min >= 60) {
		hour += 1;
		min  -= 60;
	}

	if(hour < 0)
		hour += 24;
		
	if (hour > 23)
		hour -= 24;

	if(ampm) {
		ampm_str = (hour > 11) ? ' pm' : ' am';
		hour %= 12;
		hour = (hour < 1) ? 12 : hour;
	}
	else
		ampm_str = '';

	str = format_2digits(hour) + ':' + format_2digits(min) + ampm_str; 
	return str;
}
