function filter() {
	hideproviders();
	var someresults = 0;
	var filterset = new Array;
	var filterform = document.getElementById('filter');
	var chkbxs = filterform.getElementsByTagName('input');
	var andor = document.getElementById('andor');
	var loose = 0;
	if (andor.options[andor.selectedIndex].value == 'or') {
		loose = 1;
	}
	
	for (var i=0; i<chkbxs.length; i++) {
		if (chkbxs[i].checked) {
			/* locate(chkbxs[i].value); */
			filterset.push(chkbxs[i].value);
		}
	}
	/* alert(filterset.length + ' filters in use'); */
	if (filterset.length > 0) {
		hideproviders();
	} else {
		showproviders();
		someresults = 1;
	}
	var count = new Array;
	for (var i=0; i<filterset.length; i++) {
		var pids = locate(filterset[i]);
		for (var pid in pids) {
			/* alert('Found ' + pid); */
			count[pid] = (count[pid] || 0) + 1;
		}
	}
	for (var pid in count) {
		/* alert('Checking ' + pid + ' which has ' + count[pid] + ' matches'); */
		if ((count[pid] == filterset.length) || loose == 1) {
			/* alert(pid + ' matches ' + filterset.length); */
			document.getElementById(pid).style.display = 'block';
			someresults = 1;
		}
	}
	if (someresults == 0) {
		showalert();
	} else {
		hidealert();
	}
	collapse();
}

function collapse() {
	var divs = document.getElementsByTagName('div');
	for (var i=0; i<divs.length; i++) {
		if (divs[i].className == 'pdetails') {
			divs[i].style.display = 'none';
		}
	}
}

function hidealert() {
	document.getElementById('alert').style.display = 'none';
	/* alert(document.getElementById('alert').style.display); */
}

function showalert() {
	document.getElementById('alert').style.display = 'block';
}

function hideproviders() {
	var divs = document.getElementsByTagName('div');
	for (var i=0; i<divs.length; i++) {
		if (divs[i].className == 'provider') {
			divs[i].style.display = 'none';
		}
	}
}

function showproviders() {
	var divs = document.getElementsByTagName('div');
	for (var i=0; i<divs.length; i++) {
		if (divs[i].className == 'provider') {
			divs[i].style.display = 'block';
		}
	}
	hidealert();
}

function locate(filterval) {
	/* alert("Looking for " + filterval); */
	var pids = new Array;
	var dds = document.getElementsByTagName('dd');
	for (var i=0; i<dds.length; i++) {
		if (dds[i].className == filterval) {
			var provider = dds[i].parentNode.parentNode;
			/* alert(provider.id + " contains " + filterval); */
			/* provider.style.display = 'block'; */
			pids[provider.id] = 1;
		}
	}
	return pids;
}

