// Dependências: str.js.
//
// Funções para validação de campos de um formulário. Cada uma destas funções valida o tipo (ou 
// outro aspecto qualquer) de um dado campo. Em caso de este não corresponder ao pretendido, é 
// apresentada uma mensagem e o campo em causa é activado.

// Função para seleccionar um determinado controlo. É dado uma por defeito mas pode ser alterada.
var focusCtrlFunc = defFocusCtrl
function defFocusCtrl (c) { c.focus () }

function _vError (c, msg) {
	var f1 = c.onblur, f2 = c.onfocus, e = wnd.event
	try {
		e && stopEvent (e)
		c.onblur = c.onfocus = null
		focusCtrlFunc (c)
		alert (msg)
		focusCtrlFunc (c)
	}
	finally {
		c.onblur = f1
		c.onfocus = f2
	}
	return false
}

// Retorna 'true' se 'wdField' estiver vazio.
function isNullField (wdField) {
	wdField.substr && (wdField = elmnx (wdField))
	return !rtrim (wdField.value)
}

// Retorna 'false' se 'wdField' estiver vazio e apresenta uma mensagem ao utilizador. Como efeito 
// secundário, corta eventuais caractéres brancos do final do conteúdo de 'wdField'.
function reqField (wdField) {
	wdField.substr && (wdField = elmnx (wdField))
	var str = rtrim (wdField.value)
	var len = str.length
	if (wdField.value.length != len) {
		wdField.value = str
	}
	return len < 1 ? _vError (wdField, KMsgReqField) : true
}

// Retorna 'false' se 'wdField' não tiver exactamente 'len' caractéres.
function reqLength (wdField, minlen, maxlen) {
	var fldlen = wdField.value.length

	if (fldlen < minlen || fldlen > maxlen) {
		// Preparar mensagem.
		if (fldlen < 1 && minlen > 0)
			msg = KMsgReqField
		else {
			msg = minlen == maxlen ?
				KMsgFieldSizeMustBe.replace ("$len", minlen)
					:
				KMsgFieldSizeMustBeBetween.replace ("$min", minlen).replace ("$max", maxlen)
			msg = msg.replace ("$curlen", fldlen)
		}

		return _vError (wdField, msg)
	}
	return true
}
