function util()
{
}

util.addEvent = function(obj, evType, fn, captura)
{
	captura = (captura == null? false : captura);
	if (obj.addEventListener)
	{
    	obj.addEventListener(evType, fn, captura);
	    return true;
 	} 

	if (obj.attachEvent)
	{
		var r = obj.attachEvent('on' + evType, fn);
		return r;
	} 

	return false;
}

util.getArgs = function ()
{
	var args = new Object();
	var query = location.search.substring(1);
	var pairs = query.split("&");
	for (var i = 0; i < pairs.length; i++)
	{
		var pos = pairs[i].indexOf('=');
		if (pos == -1)
			continue;
			
		var argname = pairs[i].substring(0, pos);
		var value = pairs[i].substring(pos + 1);
		args[argname] = unescape(value);
	}
	
	return args;
}

util.getWindow = function(_URL, _nome, _altura, _largura, _esquerda, _topo, _parametros)
{
	if (_altura == null)
		_altura = screen.height;
	
	_parametros += ', height=' + _altura;
		
	if (_largura == null)
		_largura = screen.width;
		
	_parametros += ', width=' + _largura;
		
	if (_esquerda == null)
		_esquerda = Math.round((screen.width - _largura) / 2);
		
	_parametros += ', left=' + _esquerda;
	
	if (_topo == null)
		_topo = Math.round((screen.Height - _altura) / 2);
		
	_parametros += ', top=' + _topo;
	
	return window.open(_URL, _nome, _parametros);
}

util.habilitarControles = function(_parent, _h)
{
	if (_parent == null)
		_parent = document;
		
	var _ctrArr = new Array('INPUT', 'BUTTON', 'SELECT', 'TEXT', 'A');
	
	for (i = 0; i < _ctrArr.length; i++)
	{
		var _ctr = _parent.getElementsByTagName(_ctrArr[i]);
		for (c = 0; c < _ctr.length; c++)
			_ctr[c].disabled = !_h;
	}
}

util.obterControles = function(_parent)
{
	if (_parent == null)
		_parent = document;
		
	var _retorno = new Array();
	var _ctrArr = new Array('INPUT', 'BUTTON', 'SELECT', 'TEXT', 'A');
	for (i = 0; i < _ctrArr.length; i++)
	{
		var _ctr = _parent.getElementsByTagName(_ctrArr[i]);
		for (c = 0; c < _ctr.length; c++)
			_retorno.push(_ctr[c]);
	}
	
	return _retorno;
}

util.popUp = function(_URL, _nome, _altura, _largura, _esquerda, _topo)
{
	var parametros = 'status=no, scrollbars=no, toolbar=no, location=no';
	return util.getWindow(_URL, _nome, _altura, _largura, _esquerda, _topo, parametros);
}

util.janela = function(_URL, _nome, _altura, _largura, _esquerda, _topo)
{
	var parametros = 'resizable=yes, scrollbars=yes';
	return util.getWindow(_URL, _nome, _altura, _largura, _esquerda, _topo, parametros);
}

util.removeEvent = function(obj, evType, fn, useCapture)
{
	useCapture = (useCapture == null? false : true);
	if (obj.removeEventListener)
	{
		obj.removeEventListener(evType, fn, useCapture);
		return true;
	}

	if (obj.detachEvent)
	{
		var r = obj.detachEvent('on' + evType, fn);
		return r;
	} 

	return false;
}

util.mudarClasseObj = function(_obj, _classe)
{
	_obj.className = _classe;
}

util.txtBoxFormat = function(objForm, strField, sMask, evtKeyPress) 
{
	var i, nCount, sValue, fldLen, mskLen,bolMask, sCod, nTecla;

	if(document.all) 
	{ // Internet Explorer
		nTecla = evtKeyPress.keyCode; 
	}
	else if(document.layers) 
	{ // Nestcape
		nTecla = evtKeyPress.which;
	}

	sValue = objForm[strField].value;

	// Limpa todos os caracteres de formatação que
	// já estiverem no campo.
	sValue = sValue.toString().replace( "-", "" );
	sValue = sValue.toString().replace( "-", "" );
	sValue = sValue.toString().replace( ".", "" );
	sValue = sValue.toString().replace( ".", "" );
	sValue = sValue.toString().replace( "/", "" );
	sValue = sValue.toString().replace( "/", "" );
	sValue = sValue.toString().replace( "(", "" );
	sValue = sValue.toString().replace( "(", "" );
	sValue = sValue.toString().replace( ")", "" );
	sValue = sValue.toString().replace( ")", "" );
	sValue = sValue.toString().replace( " ", "" );
	sValue = sValue.toString().replace( " ", "" );
	fldLen = sValue.length;
	mskLen = sMask.length;

	i = 0;
	nCount = 0;
	sCod = "";
	mskLen = fldLen;

	while (i <= mskLen) 
	{
		bolMask = ((sMask.charAt(i) == "-") || (sMask.charAt(i) == ".") || (sMask.charAt(i) == "/"))
		bolMask = bolMask || ((sMask.charAt(i) == "(") || (sMask.charAt(i) == ")") || (sMask.charAt(i) == " "))

		if (bolMask) 
		{
			sCod += sMask.charAt(i);
			mskLen++; 
		}
		else 
		{
			sCod += sValue.charAt(nCount);
			nCount++;
		}
		i++;
	}

	objForm[strField].value = sCod;

	if (nTecla != 8) 
	{ // backspace
		if (sMask.charAt(i-1) == "9") 
		{ // apenas números...
			return ((nTecla > 47) && (nTecla < 58)); 
		} // números de 0 a 9
		else 
		{ // qualquer caracter...
			return true;
		}
	}
	else 
	{
		return true;
	}
}

// Redimensionar iFrame
util.redimIFrame = function(AIFrame, minHeight, minWidth)
{
	minHeight = (minHeight == null? 0: minHeight);
	minWidth = (minWidth == null? 0: minWidth);
	
	var tags = AIFrame.contentWindow.document.body.getElementsByTagName('*');
//	var _ifrmHeight = AIFrame.contentWindow.document.body.clientHeight;
//	var _ifrmWidth = AIFrame.contentWindow.document.body.clientWidth;
	var _ifrmHeight = 0;
	var _ifrmWidth = 0;
	
	for (t = 0; t < tags.length; t++)
	{
		_ifrmHeight = (_ifrmHeight < tags[t].offsetHeight? tags[t].offsetHeight : _ifrmHeight);
		_ifrmWidth = (_ifrmWidth < tags[t].offsetWidth? tags[t].offsetWidth : _ifrmWidth);
	}

	AIFrame.height = (minHeight > _ifrmHeight? minHeight: _ifrmHeight) + 19;
	AIFrame.width = (minWidth > _ifrmWidth? minWidth: _ifrmWidth) + 17;
}


/*Formatados de campos*/
util.formata = function(campo, mask, evt) 
{
	if(document.all) 
	{ // Internet Explorer
		key = evt.keyCode; 
	}
	else
	{ // Nestcape
		key = evt.which;
	}
	if (key == 8) 
	{
		return true;
	}
	
	string = campo.value;  
	i = string.length;
	
	if (i < mask.length) 
	{
		if (mask.charAt(i) == '?') 
		{
			return (key > 47 && key < 58);
		}
		else
		{
			if (mask.charAt(i) == '!') {  return true;  }
			for (c = i; c < mask.length; c++) 
			{
				if (mask.charAt(c) != '?' && mask.charAt(c) != '!')
				campo.value = campo.value + mask.charAt(c);
				else if (mask.charAt(c) == '!')
				{
					return true;
				} 
				else 
				{
					return (key > 47 && key < 58);
				}
			}
		}
	}
	else return false;
}

util.validaEmail = function (obj, required) 
{
	if (required == undefined)
		required = true; //se não for especificado, assume que é obrigatório
		
	if (obj == null)
		return !required; //se o e-mail for nulo mas não for obrigatório retorna 1
		
	if (obj.value.length == 0)
		return !required; //se o campo estiver vazio mas não for obrigatório retorna 1
		
	return (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{1,3})+$/.test(obj.value));//retorna true se a regra for obdecida
} 

util.mascara = function(_evento, _mascara)
{
	// Variáveis da função
	var obj = (_evento.srcElement? _evento.srcElement : _evento.target);
	var code = (_evento.keyCode? _evento.keyCode : _evento.which);
	var txt  = obj.value.replace(/[^\d]+/gi,'');
	var ret  = '';
	
	// Cancela se o evento for Backspace
	
	if(code == 9 || code == 8 || txt.length == _mascara.replace(/[^#]+/g,'').length)	
		return false;
	
	// Loop na máscara para aplicar os caracteres
	for(var x = 0, y = 0, z = _mascara.length; x < z && y < txt.length; )
	{
			if(_mascara.charAt(x)!='#')
			{
					ret += _mascara.charAt(x); 
					x++;
			}
			else
			{
					ret += txt.charAt(y); y++; x++;
			}
	}
	
	// Retorno da função
	obj.value = ret;
}

util.beginDrag = function(_elemento, _evento, _onmove, _onrelease)
{
	// Tratador que captura eventos mousemove.
	var moveHandler = function(e)
	{
		if (!e)
			e = window.event;
		
		// Move o elemento para a posiçao atual do mouse.
		_elemento.style.left = (e.clientX - Dx) + 'px';
		_elemento.style.top = (e.clientY - Dy) + 'px';
		
		// Impedir que outro código consulte o evento.
		if (e.stopPropagation)
			e.stopPropagation(); // DOM Nível 2
		else
			e.cancelBubble = true; // IE	
			
		if (_onmove != null)
			_onmove();
	}
	
	// Tratador que captura eventos mouseup
	var upHandler = function(e)
	{
		if (!e)
			e = window.event;
		
		// Remove registro dos tratadores de captura de evento.
		util.removeEvent(document, 'mousemove', moveHandler);
		util.removeEvent(document, 'mouseup', upHandler);

		// Impedir que outro código consulte o evento.
		if (e.stopPropagation)
			e.stopPropagation(); // DOM Nível 2
		else
			e.cancelBubble = true; // IE
			
		if (_onrelease)
			_onrelease();
	}
	
	// Calcula a distância entre o canto superior esquerdo do elemento e o clique do mouse.
	var Dx = _evento.clientX - parseInt(_elemento.style.left);
	var Dy = _evento.clientY - parseInt(_elemento.style.top);

	// Impedir que outro código consulte o evento.
	if (_evento.stopPropagation)
		_evento.stopPropagation(); // DOM Nível 2
	else
		_evento.cancelBubble = true; // IE
		
	// Impedir qualquer açao default.
	if (_evento.preventDefault)
		_evento.preventDefault(); // DOM Nível 2
	else
		_evento.returnValue = false; // IE
		
	// Registra tradatores de evento que responderao aos eventos mousemove e mouseup.
	util.addEvent(document, 'mousemove', moveHandler);
	util.addEvent(document, 'mouseup', upHandler);		
}