// Dependências: valid.js, str.js.
//

// Retorna 'true' se o conteúdo de 'wdField' for um endereço (ou endereços) de e-mail válidos.
// 'optReq' indica se o campo é mandatório ou não. 'optFieldSep' indica um separador que delimita vários
// endereços de e-mail em 'wdField'.
function isEMailField (wdField, optReq, optFieldSep) {
	wdField.substr && (wdField = elmx (wdField))

	var msg = ""
	var str = trim (wdField.value)	
	// Validar...
	if (!_isNullField (wdField, str)) {
		if (!optFieldSep) {
			// Se se tratar de um único endereço, basta validar aqui.
			isValidEMailAddr (str) || (msg = KMsgBadAddr)
		}
		else {
			// Existem vários endereços em 'str'.
			var emails = str.split (optFieldSep), sep = emails.length > 1 ? optFieldSep : "\n"
			str = ""
			// Processar e-mails um-a-um.
			for (var i = 0; i < emails.length; ++i) {
				if (emails [i].length > 0) {
					if (!isValidEMailAddr (emails [i])) {
						msg = KMsgBadAddr
						break
					}
					str = str + trim (emails [i]) + sep
				}
			}
		}
		// Se estiver tudo bem, re-atribuír o conteúdo a 'wdField', mas agora filtrado.
		msg == "" && str != wdField.value && (wdField.value = str)
	}
	else {
		// Reagir se o campo estiver em branco.
		optReq != null && optReq && (msg = KMsgReqField)
	}
	// Se for caso disso, denunciar os erros encontrados.
	return msg != "" ? _vError (wdField, msg) : true
}

// Retorna 'true' se 'addr' for um endereço de e-mail válido.
var _ivemaInvChs
function isValidEMailAddr (addr) {
	// Dividir 'addr' em secções e verificar se todas têm pelo menos o tamanho mínimo necessário.
	var secs = trim (addr).split ("@", 3)
	if (secs.length != 2 || secs [0].length < 1 || secs [1].length < 4)
		return false
	_ivemaInvChs || (_ivemaInvChs = /[\\\/%&\?<>#\s,]/)
	// Garantir que as secções não contêm caractéres inválidos.
	if (secs [0].search (_ivemaInvChs) >= 0 ||
		secs [1].search (_ivemaInvChs) >= 0) return false
	// Caractéres inválidos apenas no domínio.
	if (secs [1].indexOf ("_") >= 0) return false
	// Analisar o nome do servidor.
	secs = secs [1].split (".")
	var i
	for (i = 0; i < secs.length - 1; ++i) {
		if (secs [i].length < 1)
			return false
	}
	// Analisar o domínio global.
	i = secs [i].length
	return i == 2 || i == 3
}