﻿
// 表单提交验证
function SubmitWithCheck(form, submitButtonID)
{
    var result = true;
    var submitButton = document.getElementById(submitButtonID);
    EnableButton(submitButton, false);    
    
    var xmlHttp = CreateXMLHttpRequest();
    if (xmlHttp != null)    // 若创建 XMLHttpRequest 不成功，则转为服务器端验证
    {    
        ClearOldError();
        xmlHttp.open("POST", "validate.aspx", false);
        xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xmlHttp.send(GetRequestBody(form));

        var vi = eval(xmlHttp.responseText);	// 返回 ValidateInfo 对象，属性: IsValid, FieldName, ErrorMessage
        xmlHttp = null;
        if ((result = vi.IsValid) == false)
        {
	        var span = document.getElementById("msg__" + vi.FieldName);
	        if (span != null) span.innerHTML = vi.ErrorMessage;
	        else alert(vi.ErrorMessage);
            
	        try 
            {
	            var input = form.elements.namedItem(vi.FieldName);
	            input.select();
	            input.focus();
	        }
	        catch(e){}
        }
    }
    
    EnableButton(submitButton, true);
	return result;
}

// 创建浏览器兼容的 XMLHttpRequest 对象
function CreateXMLHttpRequest()
{
    if (typeof(XMLHttpRequest) != "undefined") return new XMLHttpRequest();
    else if (window.ActiveXObject)
    {
        var classes = ["MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0", "MSXML2.XMLHttp.3.0", 
                        "MSXML2.XMLHttp", "Microsoft.XMLHttp"];
        for (var i=0; i<classes.length; ++i)
        {
            try
            {
                xmlHttp = new ActiveXObject(classes[i]);
                return xmlHttp;
            }
            catch (error){}
        }
    }

	return null;
}

function GetRequestBody(form)
{
	var formData = new Array();
	formData.push("_Action_=" + encodeURIComponent(form.action));
	for (i = 0; i<form.elements.length; ++i)
	{
		var elem = form.elements[i];
		if (elem.name == '') continue;

		var value;
		if (elem.type == 'select-one') value = elem.options[elem.selectedIndex].value;
		else if (elem.type == 'checkbox' || elem.type == 'radio')
		{
			if (elem.checked == false) continue;
			value = elem.value;
		}		
		else value = elem.value;
		
		formData.push(elem.name + "=" + encodeURIComponent(elem.value));
	}

    return formData.join("&");
}

// 移除已有的错误提示信息
function ClearOldError()
{
	var spanList = document.getElementsByTagName("span");
	for (var i=0; i<spanList.length; ++i)
	{
		if (spanList[i].id.substring(0,5) == "msg__") spanList[i].innerHTML = "";
	}
}

function EnableButton(button, enabled)
{
    if (button != null) button.disabled = !enabled;
}
