// Miscellaneous Functions

function popup_print(url)
{
	window.open(url, null, config='height=520, width=660, toolbar=no, menubar=yes, scrollbars=yes, resizable=yes, location=no, directories=no, status=yes'); 
	return false;	
}

// Date input functions

function adjust_day(id, prefix)
{
	var obj_day = getObj(prefix+"_day_"+id);
	var obj_year = getObj(prefix+"_year_"+id);
	var obj_month = getObj(prefix+"_month_"+id);
	var new_days = get_days(obj_month.value, obj_year.value);
	var selected_day = obj_day.value; 
	empty_select(obj_day.id);
	fill_select(new_days, selected_day, obj_day.id);
}

function get_days(monthnum, year)
{
	if ( ( monthnum == 1 ) 
	|| ( monthnum == 3 ) 
	|| ( monthnum == 5 )
	|| ( monthnum == 7 )
	|| ( monthnum == 8 )
	|| ( monthnum == 10 )
	|| ( monthnum == 12 ) )
		return 31;
	else if ( monthnum == 2 )
		if (year % 100 == 0)	// a century
			if (year % 400 == 0)	// a century divisible by 400
				return 29;
			else					// not a leap year (divisible by 100)
				return 28;
		else					// not a century
			if (year % 4 == 0)		// divisible by 4
				return 29;
			else					// not a leap year
				return 28;
	else
		return 30;
}

function empty_select(selectID)
{
	var selectObj = getObj(selectID);

	for ( i = selectObj.length - 1; i >= 28; i-- )
		selectObj.remove(i);
}

function fill_select(days_in_month, selected_day, selectID)
{
	var selectObj = getObj(selectID);
	
	for ( i = 29; i <= days_in_month; i++)
		selectObj.options.add( new Option(i) );
		
	if (selected_day)
		selectObj.options[selected_day - 1].selected = true;
}

function accept_numeric(obj)
{
	var key_code = window.event.keyCode;
	if ( is_numeric_keycode(key_code) )
		window.event.returnValue = true;
	else
		window.event.returnValue = false;
}

function is_numeric_keycode(key_code)
{
	return ( ( key_code >= 48 && key_code <= 57) || ( key_code >= 96 && key_code <= 105) || ( key_code == 8 ) || ( key_code == 9 ) || ( key_code == 46 ) )
}