// Dependências: util.js, str.js.
//
// Classe para interpretação de parâmetros codificados num URL.

// Constructor. Se 'optUrl' for omitido, assume a "querystring" de 'window'.
derive (URLParams, Object)
function URLParams (optUrl) {
	var qs
	if (!optUrl)
		qs = window.location.search.substr (1)
	else {
		// Partir os parâmetros de 'optUrl' e a endereço da página.
		var i = optUrl.indexOf ("?")
		qs = i >= 0 ? optUrl.substr (i + 1) : ""
	}
	// Colocar os parâmetros em 'qs' como membros deste objecto.
	qs = unescape (qs).replace (/\+/g, " ")
	var parms = qs.split ("&")
	if (!parms [parms.length - 1]) parms.length--
	for (var i = 0; i < parms.length; ++i) {
		var a = parms [i].split ("=")
		if (a.length < 2) continue
		var nm = a [0], vl = trim (a [1])

		nm && vl && eval ("this." + nm.toLowerCase () + "=\"" + vl + "\"")
	}
}

// Retorna uma "querystring' que reflecte os parâmetros do objecto e os seus valores __actuais__.
proto.getQueryStr = function () {
	var res = "", f = function (nm, vl) {	res = res + nm + "=" + vl + "&"	}

	this.enumFields (f)

	return res ? res.substr (0, res.length - 1) : res
}

// Executar 'func' para cada campo do objecto, passando-lhe o nome e o valor respectivo.
proto.enumFields = function (func) {
	var o = URLParams.prototype
	for (var prp in this) {
		// Considerar apenas os campos que este objecto tem a mais que o seu protótipo; que ão aqueles importados a partir de uma 
		// "querystring".
		var vl = eval ("this." + prp)
		if (prp && vl != null && !eval ("o." + prp))
			func (prp, vl)
	}
}

// Retorna uma 'WebMsg' com os campos deste objecto.
proto.asWebMsg = function () {
	var wm = new WebMsg (), f = function (nm, vl) {	wm.newItem (nm, vl)	}
	this.enumFields (f)
	return wm
}

