NlUtil = {
	findElement: function(_campo, _idSrc, _idFind){
		var _idValue = _campo.id;
		var _idx = _idValue.indexOf(_idSrc);
		var _prefix = _idValue.substring(0, _idx);
		return document.getElementById(_prefix + _idFind);
	},
	
	/**
	 *	O elemento HTML onde foi executado o evento
	 */
	getElementEvent: function(evt){
		var ie_var = "srcElement";
		var moz_var = "target";
		// "target" for Mozilla, Netscape, Firefox et al. ; "srcElement" for IE
		evt[moz_var] ? _element = evt[moz_var] : _element = evt[ie_var];
		return _element;
	},
	
	setFocus: function(_foco){
		if (_foco) {
			if (_foco.select) {
				_foco.select();
			}
			_foco.focus();
		}
	},
	
	trim: function(_str){
		try {
			return _str.replace(/^\s+|\s+$/g, "");
		} catch (e) {
			return _str;
		}
	},
	
	lpad: function(str, pSize, pCharPad){
		var dif = pSize - str.length;
		var ch = String(pCharPad).charAt(0);
		for (; dif > 0; dif--) {
			str = ch + str;
		}
		return (str);
	},
	
	rpad: function(str, pSize, pCharPad){
		var dif = pSize - str.length;
		var ch = String(pCharPad).charAt(0);
		for (; dif > 0; dif--) {
			str = str + ch;
		}
		return (str);
	}
}

function addListener(comp, type, callback){
	if (comp.addEventListener) {
		comp.addEventListener(type, callback, false);
	} else if (comp.attachEvent) {
		comp.attachEvent("on" + type, callback, false);
	}
}

function removeListener(comp, type, callback){
	if (comp.removeEventListener) {
		comp.removeEventListener(type, callback, false);
	} else if (comp.detachEvent) {
		comp.detachEvent("on" + type, callback, false);
	}
}

function fireClick(_element, evt){
	if (_element.fireEvent) {
		_element.fireEvent("onclick");
	} else if (document.createEvent) {
		var evObj = document.createEvent('MouseEvents');
		evObj.initMouseEvent('click', true, true, window, 1, evt.screenY, evt.screenY, evt.clientX, evt.clientY, evt.ctrlKey, evt.altKey, evt.shiftKey, evt.metaKey, 0, null);
		_element.dispatchEvent(evObj);
	}
}

function nlTable(_tableDiv){
	var _table = null;
	var list = _tableDiv.getElementsByTagName("table");
	for (i = 0; i < list.length; i++) {
		if (list[i].className == "af_table_content") {
			_table = list[i];
			break;
		}
	}
	
	if (_table != null) {
		var _fnMouseover = function(evt){
			var _element = nlTableFindComp(evt);
			var _click = _element.getAttribute("nlRowClick");
			if (_element.className.search("selectedRow") < 0) {
				_element.className = "hoverRow" + (_click ? " clickRow" : "");
			} else {
				_element.className = "selectedRow" + (_click ? " clickRow" : "");
			}
		}
		
		var _fnMouseout = function(evt){
			var _element = nlTableFindComp(evt);
			if (_element.className.search("selectedRow") < 0) {
				_element.className = "";
			}
		}
		
		var _fnClick = function(evt){
			var _element = NlUtil.getElementEvent(evt);
			if (_element) {
				if (_element.tagName == "A") { return; }
				if (_element.tagName == "INPUT") { return; }
				if (_element.tagName == "BUTTON") { return; }
				if (_element.tagName == "IMG" && _element.className.search("nlPanelPopup") >= 0) { return; }
				if (_element.tagName == "DIV" && _element.id.search("nlSelectCommand") >= 0) { return; }
				
				var _tr = nlTableFindComp(evt);
				
				var _divs = _tr.getElementsByTagName("DIV");
				for (i = 0; i < _divs.length; i++) {
					if (_divs[i].className && _divs[i].className.search("nlSelectCommand\\w*_group") >= 0) {
						for (j = 0; j < _divs[i].childNodes.length; j++) {
							if (_divs[i].childNodes[j].tagName == "DIV" &&
							_divs[i].childNodes[j].id.search("nlSelectCommand\\w*_btnShow_") >= 0 &&
							_divs[i].childNodes[j].style.display != "none") {
								//Cancela a propagacao do evento
								evt.cancelBubble = true;
								fireClick(_divs[i].childNodes[j], evt);
								return;
							}
						}
						return;
					}
				}
				
				var _links = _tr.getElementsByTagName("A");
				for (i = 0; i < _links.length; i++) {
					fireClick(_links[i], evt);
					return;
				}
			}
		}
		
		for (i = 0; i < _table.rows.length; i++) {
			if (_table.rows[i].cells[0].tagName != 'TH') {
				addListener(_table.rows[i], "mouseover", _fnMouseover);
				addListener(_table.rows[i], "mouseout", _fnMouseout);
				addListener(_table.rows[i], "click", _fnClick);
				_table.rows[i].setAttribute("nlRowAnimation", true);
				
				var _links = _table.rows[i].getElementsByTagName("A");
				if (_links.length > 0) {
					_table.rows[i].setAttribute("nlRowClick", true);
				}
			}
		}
	}
}

function nlTableFindComp(evt){
	var _element = NlUtil.getElementEvent(evt);
	while (!_element.getAttribute("nlRowAnimation")) {
		_element = _element.parentNode;
	}
	return _element;
}

function elementPosition(element){
    var parent = element;
    
    selectedPosX = 0;
    selectedPosY = 0;
    
    while (parent != null) {
        selectedPosX += parent.offsetLeft;
        selectedPosY += parent.offsetTop;
        parent = parent.offsetParent;
    }
    
    return {
        x: selectedPosX,
        y: selectedPosY
    };
}
