var now_date = new Date();

var month_nums = new Array();
month_nums['jan'] = 1;
month_nums['feb'] = 2;
month_nums['mar'] = 3;
month_nums['apr'] = 4;
month_nums['may'] = 5;
month_nums['jun'] = 6;
month_nums['jul'] = 7;
month_nums['aug'] = 8;
month_nums['sep'] = 9;
month_nums['oct'] = 10;
month_nums['nov'] = 11;
month_nums['dec'] = 12;

var day_offsets = new Array();
day_offsets['tod'] = 0;
day_offsets['tom'] = 1;
day_offsets['yes'] = -1;
day_offsets['sun'] = (0-now_date.getDay()+7)%7;
day_offsets['mon'] = (1-now_date.getDay()+7)%7;
day_offsets['tue'] = (2-now_date.getDay()+7)%7;
day_offsets['wed'] = (3-now_date.getDay()+7)%7;
day_offsets['thu'] = (4-now_date.getDay()+7)%7;
day_offsets['fri'] = (5-now_date.getDay()+7)%7;
day_offsets['sat'] = (6-now_date.getDay()+7)%7;

var week_offsets = new Array();
week_offsets['las'] = -1;
week_offsets['thi'] = 0;
week_offsets['nex'] = 1;

function format_date_input(which) {
	var input = document.getElementById(which);
	var week_offset = 0;
	if (input && input.value) {
		separators = /[\s,\/-]/;
		date_fields = input.value.split(separators);
		var year = null;
		var mon = null;
		var day = null;
		for (i=0; i < date_fields.length; i++) {
			cur_item = date_fields[i];
			re_numbers_first = /^(\d+)/;
			if (result_array = re_numbers_first.exec(cur_item)) {
				cur_item = result_array[1];
			} else {
				cur_item = cur_item.substr(0,3).toLowerCase();
			}
			if (cur_item > 1000) {
				year = Math.round(cur_item);
			} else if (mon && day && !year) {
				for (j = -1; j <= 1; j++) {
					if (cur_item == (now_date.getFullYear()+j).toString().substr(-2)) {
						year = now_date.getFullYear()+j;
					}
				}
			} else if (month_nums[cur_item] > 0) {
				mon = month_nums[cur_item];
			} else if (!mon && cur_item > 0 && cur_item <= 12) {
				mon = Math.round(cur_item);
			} else if (mon && cur_item > 0 && cur_item <= 31) {
				day = Math.round(cur_item);
			} else if (day_offsets[cur_item] != null) {
				year = now_date.getFullYear();
				mon = now_date.getMonth()+1;
				day = now_date.getDate()+week_offset*7+day_offsets[cur_item];
			} else if (week_offsets[cur_item] != null) {
				week_offset = week_offsets[cur_item.toLowerCase()];
			}
		}
		if (mon && day) {
			var return_date;
			if (year) {
				return_date = new Date(year,mon-1,day);
			} else {
				var min_diff = null;
				var temp_date;

				for (i = -1; i <= 1; i++) {
					temp_date = new Date(now_date.getFullYear() + i, mon-1, day);
					var cur_diff = Math.abs(temp_date.getTime() - now_date.getTime());
					if (!min_diff || cur_diff <= min_diff) {
						min_diff = cur_diff;
						return_date = temp_date;
					}
				}
			}
			input.value = format_date(return_date);
			input.style.color = 'black';
		} else {
			input.style.color = 'red';
		}
	}
	return true;
}

function format_date(the_date) {
	var delimiter = '/';
	var date_string = the_date.getDate()+delimiter+the_date.getFullYear();

	if ((the_date.getDate()).toString().length < 2) {
		date_string = '0'+date_string;
	}
	date_string = (the_date.getMonth()+1)+delimiter+date_string;
	if ((the_date.getMonth()+1).toString().length < 2) {
		date_string = '0'+date_string;
	}
	return date_string;
}