NlForm = {
	nlMessageExecute : function(_newWindow) {
		var nlMessageExecuteTime;
		if (_newWindow) {
			nlMessageExecuteTime = function() {
				document.getElementById('cmdMessageExecuteNewWindow').click()
				NlForm.unblockContent();
			}
		} else {
			nlMessageExecuteTime = function() {
				document.getElementById('cmdMessageExecute').click();
			};
		}
		// TODO: Deve ser revisado conforme a solicitação 75550
		window.setTimeout(nlMessageExecuteTime, 200);
	},

	// SCROLL
	scrollDialog : function() {
		var _blockDialog = document.getElementById('af_dialog_blocked-area');
		if (_blockDialog) {
			var _formHeight = document.forms['NLForm'].offsetHeight;
			var _blockHeight = _blockDialog.clientHeight;
			var _blockTop = _blockDialog.offsetTop;
			if ((_blockHeight + _blockTop) < _formHeight) {
				_blockDialog.style.top = document.body.scrollTop;
			}
		}
	},
	onScroll : function() {
		var _txtScroll = document.getElementById('txtScroll');
		if (_txtScroll) {
			_txtScroll.value = document.body.scrollTop;
		}
		this.scrollDialog();
	},
	scrollLoad : function(_scrUseFocus) {
		var _txtScroll = document.getElementById('txtScroll');
		var _blockDialog = document.getElementById('af_dialog_blocked-area');
		if (_txtScroll && !_blockDialog) {
			var _scroll = _txtScroll.value;
			var _srlNum = new Number(_scroll);
			if (!isNaN(_srlNum)) {
				if (_scrUseFocus && BrowserDetect.browser == "Explorer") {
					// Se for IE e tem foco inicial, adicona um timeout para
					// fazer o Scroll, pois senao ele para na posicao do foco
					setTimeout('window.scrollTo(document.body.scrollLeft,'
							+ _srlNum + ');', 100);
				} else {
					window.scrollTo(document.body.scrollLeft, _srlNum);
				}
			}
		}
	},

	// BLOCK CONTENT
	_blockedContent : false,
	blockContent : function(_byLoader) {
		if (!_byLoader)
			this._blockedContent = true;

		var _dialog = null;
		if (typeof NlDialog != "undefined") {
			_dialog = NlDialog.getCurrentDialogBounds();
		}
		var _divBlockContent = document.getElementById('divBlockContent');

		if (_dialog == null) {
			var _width = _divBlockContent.parentNode.offsetWidth;
			var _height = _divBlockContent.parentNode.offsetHeight;
			var _left = 0;
			var _top = 0;
			var theElement = _divBlockContent.parentNode;

			while (theElement != null) {
				_left += theElement.offsetLeft;
				_top += theElement.offsetTop;
				theElement = theElement.offsetParent;
			}
		} else {
			var _width = _dialog.width;
			var _height = _dialog.height;
			var _left = _dialog.left;
			var _top = _dialog.top;
		}

		_divBlockContent.style.left = _left;
		_divBlockContent.style.top = _top;
		_divBlockContent.style.width = _width;
		_divBlockContent.style.height = _height;
		_divBlockContent.style.zIndex = '5000';
		_divBlockContent.style.display = 'block';

		// document.getElementById('divBlockFocus').focus();
	},
	unblockContent : function(_byLoader) {
		if (_byLoader && this._blockedContent)
			return;
		if (!_byLoader)
			this._blockedContent = false;
		var _divBlockContent = document.getElementById('divBlockContent');
		_divBlockContent.style.display = 'none';
	},

	// LOADING
	_divLoading : null,
	_blockedLoading : false,
	// Variavel criada para não criar o loader em alguns casos
	_naoIniciarLoader : false,
	_loaderCreated : false,
	loader : function(_state) {
		if (!NlForm._loaderCreated)
			return;
		var _busy = _state == TrRequestQueue.STATE_BUSY;
		if (_busy) {
			// Verifica se não inicia o loader
			if (NlForm._naoIniciarLoader) {
				return;
			}
			this._blockedLoading = true;
			this.blockContent(true);
			var _divBlockContent = document.getElementById('divBlockContent');
			var _widthBlock = _divBlockContent.offsetWidth;
			var _heightBlock = _divBlockContent.offsetHeight;
			var _useHeight = _heightBlock;
			var _leftBlock = _divBlockContent.offsetLeft;
			var _topBlock = _divBlockContent.offsetTop;
			var _scrollTop = document.body.scrollTop;
			var _scrollHeight = document.body.clientHeight;

			_divLoading.style.visibility = "visible";

			var _widthLoad = _divLoading.offsetWidth;
			var _heightLoad = _divLoading.offsetHeight;

			var _left = _leftBlock + (_widthBlock / 2) - (_widthLoad / 2);
			var _top = _topBlock;
			if (_topBlock < _scrollTop) {
				_top = _scrollTop;
				_useHeight = _heightBlock - (_scrollTop - _topBlock);
			}

			if (_heightBlock > (_scrollHeight + _scrollTop - _topBlock)) {
				_useHeight = _useHeight
						- (_heightBlock - (_scrollHeight + _scrollTop - _topBlock));
			}

			if (_useHeight > _heightLoad) {
				_top = _top + (_useHeight / 2) - (_heightLoad / 2);
			}
			_divLoading.style.left = _left;
			_divLoading.style.top = _top;
		} else {
			this._blockedLoading = false;
			this.unblockContent(true);
			_divLoading.style.visibility = "hidden";
		}
	},
	createLoader : function() {
		_divLoading = document.getElementById("divLoading");
		if (_divLoading) {
			var requestQueue = TrPage.getInstance().getRequestQueue();
			var _literner = function(_state) {
				NlForm.loader(_state);
				if (BrowserDetect.browser == "Chrome"
						&& _state == TrRequestQueue.STATE_READY) {
					// Teste para que funcione no Chrome, pois no
					// downloadArquivo é disparado um beforeUnload
					// e fica com o loader e não sai mais
					NlForm.naoIniciarLoader();
				}
			};
			requestQueue.addStateChangeListener(_literner);
			NlForm._loaderCreated = true;
		}
	},

	naoIniciarLoader : function() {
		NlForm._naoIniciarLoader = true;
		setTimeout('NlForm._naoIniciarLoader = false;', 50);
	},

	// WINDOW SIZE
	windowSize : function(_form) {
		var _width = document.body.clientWidth;
		var _height = document.body.clientHeight;
		_form.txtWindowSize.value = _width + "x" + _height;
	},

	setTarget : function(_target) {
		document.getElementById('nlFormTxtTarget').value = _target;
	},

	changeTarget : function(_form) {
		var _txtNewSessionID = document.getElementById('nlFormTxtNewSessionID');
		_txtNewSessionID.value = '';

		var _txtTarget = document.getElementById('nlFormTxtTarget');
		var _target = _txtTarget.value;
		var exp = /^popup\:(\d+)(%?)x(\d+)(%?)$/;
		var pop = exp.exec(_target);
		if (pop != null) {
			_target = "Popup" + Math.round(Math.random() * 1000000);
			var opts = "status=no,toolbar=no,location=no,menubar=no,scrollbars=yes,resizable=yes";
			var _width = new Number(pop[1]);
			var _height = new Number(pop[3]);
			if (pop[2] == "%") {
				_width = parseInt((screen.availWidth * pop[1]) / 100);
				_height = parseInt((screen.availHeight * pop[3]) / 100);
			}
			opts += ",width=" + _width;
			opts += ",height=" + _height;
			opts += ",top=" + parseInt((screen.availHeight - _height) / 2);
			opts += ",left=" + parseInt((screen.availWidth - _width) / 2);
			window.open("", _target, opts);
		}
		if (_target != '') {
			_txtNewSessionID.value = 'true';
		}
		_form.target = _target;
		_txtTarget.value = '';
	},

	getFormData : function(form_name) {
		var form = document.getElementById(form_name);
		var dataString = '';
		function addParam(name, value) {
			dataString += name + '=' + value;
		}
		var elemArray = form.elements;
		for ( var i = 0; i < elemArray.length; i++) {
			var element = elemArray[i];
			if (element.type) {
				var elemType = element.type.toUpperCase();
				var elemName = element.name;
				if (elemType == 'TEXT' || elemType == 'TEXTAREA'
						|| elemType == 'PASSWORD')
					addParam(elemName, element.value);
				else if (elemType == 'CHECKBOX' && element.checked)
					addParam(elemName, element.value ? element.value : 'On');
				else if (elemType == 'RADIO' && element.checked)
					addParam(elemName, element.value);
				else if (elemType.indexOf('SELECT') != -1)
					for ( var j = 0; j < element.options.length; j++) {
						var option = element.options[j];
						if (option.selected)
							addParam(elemName, option.value ? option.value
									: option.text);
					}
			}
		}
		return dataString;
	},

	formChangeMessage : false,

	/**
	 * Inicia a verificação de alteração, inicia o hidden o com valor atual do
	 * formulário
	 */
	initFormChange : function(form_name, evt) {
		document.getElementById('nlForm_FormChangeValues').value = NlForm
				.getFormData(form_name);
		NlForm.setVerifyFormChange(true);
		NlForm.formChangeMessage = false;
	},

	/**
	 * Verifica se houve alteração no formulário
	 */
	checkFormChange : function(form_name, evt) {
		if (typeof evt == 'undefined') {
			evt = window.event;
		}
		NlForm.formChangeMessage = false;
		var _verify = NlForm.getVerifyFormChange();
		NlForm.setVerifyFormChange(true);
		if (!_verify) {
			return;
		}

		var oldValue = document.getElementById('nlForm_FormChangeValues').value;
		var newValue = NlForm.getFormData(form_name);
		NlForm.formChangeMessage = false;
		if ((oldValue != '') && (oldValue != newValue)) {
			NlForm.formChangeMessage = true;
			evt.returnValue = 'MENSAGEM DE TESTE';
		}
		return false;
	},

	setVerifyFormChange : function(verify) {
		document.getElementById('nlForm_VerifyFormChange').value = verify ? 'true'
				: 'false';
	},

	getVerifyFormChange : function() {
		var _verify = document.getElementById('nlForm_VerifyFormChange').value;
		return _verify != 'false';
	},

	execValueChangeEvent : function(_cmp, _valueOld, _required, _invalid) {
		if (_required == true && !_invalid) {
			if (_cmp.value == null || _cmp.value == '') {
				return;
			}
		}
		if (_valueOld != _cmp.value || _invalid == true) {
			nl$('txtIdCompNLChangeValue').value = _cmp.id;
			nl$('cmdExecNLChangeValue').click();
		}
	}
}

