function Filters() {};

Filters.DateFilterSelect = function(filterName, selectedIndex, params, submit) {
	var from = document.getElementById(filterName+'_from');
	var to = document.getElementById(filterName+'_to');
	var input = Filters._getInput(filterName);
	var selected;
	 
	switch(selectedIndex) {
		case 'all': 
			from.value = '';
			to.value = '';
			selected = '';
			break; 
		case 'today': 
			from.value = params.today;
			to.value = params.today;
			selected = 'today';
			break;
		case 'this_week':
			from.value = params.week_start;
			to.value = params.week_end;
			selected = 'week';
			break;
		case 'last_month':
			from.value = params.last_month_start;
			to.value = params.last_month_end;
			selected = 'last_month';
			break;
		case 'this_month':
			from.value = params.month_start;
			to.value = params.month_end;
			selected = 'month';
			break; 
		case 'unassigned': 
			from.value = params.unassigned;
			to.value = params.unassigned;
			selected = 'unassigned';
			break;
		case 'manual':
			selected = 'manual';
			var winPos = windowPosition();
			var objPos;
			
			if (params.from_to == 'from') {
				objPos = objectPosition(from);
			} else {
				objPos = objectPosition(to);
			}
			
			var event = {};
			event.clientX = objPos.offsetLeft - winPos.scrollLeft;
			event.clientY = objPos.offsetTop - winPos.scrollTop;
			
			eval(params.calendar);
			break;
	}
	
	if (selected == 'unassigned') {
		input.value = input.value.replace(/[^:]*:[^:]*:[^:]*$/, 'unassigned::');
		
		if (submit) input.form.submit();
	} else if (selected != 'manual') {
		input.value = input.value.replace(/[^:]*:[^:]*:[^:]*$/, selected + ':' + from.value + ':' + to.value);
		
		if (submit) input.form.submit();
	}
}

Filters._getInput = function(filterName) {
	return document.getElementById('hidden_'+filterName);
}

Filters.DateFilterFrom = function(filterName, obj, submit) {
	var input = Filters._dateFilterInput(filterName);
	if (input.value.match(/unassigned:[^:]*:[^:]*$/)) {
		var to = document.getElementById(filterName+'_to');
		to.value = '';
	}
	input.value = input.value.replace(/[^:]*:[^:]*:([^:]*)$/, 'manual:'+obj.value+':$1');
	if (submit)
		input.form.submit();
}

Filters.DateFilterTo = function(filterName, obj, submit) {
	var input = Filters._dateFilterInput(filterName);
	if (input.value.match(/unassigned:[^:]*:[^:]*$/)) {
		var from = document.getElementById(filterName+'_from');
		from.value = '';
	}
	input.value = input.value.replace(/[^:]*:([^:]*):[^:]*$/, 'manual:$1:'+obj.value);
	if (submit)
		input.form.submit();
}

Filters._dateFilterInput = function(filterName) {
	var select = document.getElementById(filterName+'_select');
	var input = Filters._getInput(filterName);
	if (select) {
		for (var i = 0; i < select.length; i++) {
			if (select.options[i].value == 'manual')
				select.selectedIndex = i;
		}
	}
	return input;
}

Filters.CheckboxFilter = function(filterName, obj, inverted, submit) {
	var input = Filters._getInput(filterName);
	if (inverted)
		input.value = (obj.checked) ? 'off' : 'on';
	else
		input.value = (obj.checked) ? 'on' : 'off';
	if (submit)
		input.form.submit();
}

Filters.RadioFilter = function(filterName, obj, submit) {
	var input = Filters._getInput(filterName);
	input.value = obj.value;
	if (submit)
		input.form.submit();
}

Filters.SelectFilter = function(filterName, obj, submit) {
	var input = Filters._getInput(filterName);
	input.value = obj.options[obj.selectedIndex].value;
	if (submit)
		input.form.submit();
}

Filters.ValueFilter = function(filterName, obj, submit) {
	var input = Filters._getInput(filterName);
	input.value = obj.value;
	if (submit)
		input.form.submit();
}

Filters.enterPressed = function(e) {
	if (window.event) { // IE
		if (e.keyCode == 13) return true;
	} else if(e.which) { // Netscape/Firefox/Opera
		if (e.which == 13) return true;
	}
	return false;
}
