function fn(myform)
{
	var ipt;
	var textboxs = new Array(); // text类型的input集合
	var radioList = new Object(); // radio类型的input集合，因为Radio比较特殊，要一组一组检测，所以这里用一个Hashtable，根据radio的name作为Key来保存所有的Radio集合
	var radioes; // 每一个name对应的Radio集合
	var inputs = myform.getElementsByTagName("INPUT"); // 取form下的所有input

	// 遍历所有INPUT
	//
	for (var i=0; i<inputs.length; i++)
	{
		ipt = inputs[i ];
		if (ipt.type == "text")
		{
			textboxs[textboxs.length] = ipt;
		}
		// 本来只要检测radiobox的，后来要增加checkbox，
		//因为处理方式一样，只要这里修改一下就可以了，但是命名没有同步修改:)
		//
		else if (ipt.type == "radio" || ipt.type == "checkbox")
		{
			radioes = radioList[ipt.name];
			if (!radioes)
			{
				radioes = new Array();
			}
			radioes[radioes.length] = ipt;
			radioList[ipt.name] = radioes;
		}
	}

	// 非空检测
	//
	for (var i=0; i<textboxs.length; i++)
	{
		var txt = textboxs[i ];
		if (txt && txt.value == "")
		{
			alert("please fill:" + txt.name);
			txt.focus();
			return false;
		}
	}

	// 遍历所有Radiobox组
	//
	for (var radioboxName in radioList)
	{
		radioes = radioList[radioboxName];
		var chk = false; // 是否有选中的
		var radio;
		// 检测该组Radio是否都选中了
		//
		for (var j=0; j<radioes.length; j++)
		{
			var radio = radioes[j];
			if (radio.checked)
			{
				chk = true;
				break;
			}
		}
		if (!chk) // 没有选中的
		{
			alert("please select: " + radioboxName);
			return false;
		}
	}

	return true;
}