// 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.
function defFocusCtrl (c) { try {	c.focus ()	} catch (e) {} }
wnd.focusCtrlFunc = defFocusCtrl

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)
		isIE ? focusCtrlFunc (c) : setTimeout (function () {	focusCtrlFunc (c)	}, 50)
	}
	finally {
		c.onblur = f1
		c.onfocus = f2
	}
	return false
}

// Retorna 'true' se qualquer controlo de 'wdFields' estiver vazio.
function isNullField (wdFields) {
	return apply (function (wd) {
		wd.substr && (wd = elmnx (wd))
		return _isNullField (wd, trim (wd.value))
	}, wdFields)
}

// Retorna 'false' se qualquer controlo de 'wdFields' estiver vazio e apresenta uma mensagem ao utilizador. Como efeito 
// secundário, corta eventuais caractéres brancos do final do conteúdo dos controlos.
function reqField (wdFields) {
	return apply (function (wd) {
		wd.substr && (wd = elmnx (wd))
		var str = trim (wd.value)
		var len = str.length
		wd.value.length != len && (wd.value = str)
	
		return _isNullField (wd, str) ? _vError (wd, KMsgReqField) : true
	 }, wdFields)
}

// Retorna 'false' se qualquer controlo de 'wdFields' não tiver exactamente 'len' caractéres.
function reqLen (wdFields, minlen, maxlen, optMsg) {
	maxlen == null && (maxlen = minlen)
	var msgo = optMsg || (minlen == maxlen ? KMsgFieldSizeMustBe : KMsgFieldSizeMustBeBetween)
	return apply (function (wd) {
		var s = trim (wd.value), fldlen = s.length, msg
		fldlen && _isNullField (wd, s) && (fldlen = 0)

		if (fldlen < minlen || fldlen > maxlen) {
			// Preparar mensagem.
			if (fldlen < 1 && minlen > 0)
				msg = KMsgReqField
			else {
				if (minlen == maxlen)
					msg = msgo.replace ("$len", minlen)
				else
					msg = msgo.replace ("$min", minlen).replace ("$max", maxlen)
				msg = msg.replace ("$curlen", fldlen)
			}

			return _vError (wd, msg)
		}
		return true
	}, wdFields)
}

// Retorna 'true' se 'v', o valor de 'c', estiver vazio.
function _isNullField (c, v) {	return !v || (v == c.ghostCap)	}
