if (isGecko()){
	document.captureEvents(Event.ONKEYPRESS);
	document.captureEvents(Event.ONKEYUP);
	document.captureEvents(Event.ONKEYDOWN);
}

///
//// PERMITE APENAS VALORES NUMERICOS NO CAMPO
//// Adaptada para funcionar no netscape
function onlynum(event) {
	var isNS4 = (navigator.appName=="Netscape") ? 1 : 0;
	if ( !isNS4 ) {
		event = window.event;
		if ( event.keyCode < 45 || event.keyCode > 57) {
			event.returnValue = false;
		}
	} else {
		if ( event.which < 45 || event.which > 57) {
			return false;
		}
	}
}


/************************************************************************************************
*  Calcula o dígito verificador em Mod 11 para o numero informado 								*
*  Autor: Thiago Fernandes Moesch																*
*  Data/Hora: 24/05/2005 - 16:00																*
************************************************************************************************/
function calcDigMod11(numero) {
	var contador;
	var peso;
	var somador;
	var digito;

	somador = 0;
	contador = numero.length-1;
	peso = 2;
	while (contador >= 0) {
		somador += numero.charAt(contador) * peso;
		peso ++;
		if (peso >= 10) {
			peso = 2;
		}
		contador --;
	}

	digito = 11 - (somador % 11);
	if (digito >= 10)
		digito = 0;

	return digito;
}

function verificaDigitoMod11(valor) {
	return (calcDigMod11(valor.substr(0, valor.length - 1)) == valor.charAt(valor.length - 1));
}





/************************************************************************************************
*  aceita apenas valores numericos. deve ser usada em onkeypress								*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 29/08/2003 - 10:32																*
************************************************************************************************/
function stripNaN(objeto, event) {
	var isNS4 = (navigator.appName=="Netscape") ? 1 : 0;
	if ( !isNS4 ) {
		event = window.event;
		if ( event.keyCode <= 47 || event.keyCode > 57) {
			event.returnValue = false;
		}
	} else {
		if ( event.which < 45 || event.which > 57) {
			return false;
		}
	}
}


/************************************************************************************************
*  auto-complete para campos float																*
*  usar no onKeyUp do campo																		*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 29/08/2003 - 10:32																*
************************************************************************************************/
function maskFloat(campo, precision, ev) {

	if ( !precision || isNaN(precision) ) {
		precision = 2;
	}

	if ( !campo.onkeypress ) {
		campo.onkeypress = stripNaN;
	}

	var tammax = 18;
	var result;

	vr = campo.value.replace(/\D/g, '');
	tam = (vr.length <= tammax ? vr.length : tammax);

	if ( tam <= precision) {
		result = vr;
	} else {
		result = '';
		init = tam - precision - 1;
		for (var i = init; i >= 0; i--) {
			result = vr.charAt(i) + result;
			if ( ((init-i+1) % 3 == 0) && (i != 0) ) {
				result = '.' + result;
			}
		}
		result += ',' + vr.substr(init + 1);
		campo.value = result;
	}

	if ( tam > tammax ) {
		if (isGecko()) {
			return false
		} else {
			ev.returnValue = false;
		}
	}
}



// Faz o controle de valores do GET que controlam a ordenação das listagem
function setOrderBy(field, order) {

	var frm = document.forms[0];
	var srch = document.location.search;
	var re = /([^=&?]+\=[^&]*)/g;
	var sURL = document.location.href.replace(srch, '');

	var matches = srch.match(re);
	var qString = '';
	var sTmp = '';

	if ( matches ) {
		for (var i=0; i<matches.length; i++) {
			tmp = matches[i].toString().split('=');
			if ( !tmp[0].match(/^(order|dir)/ig) ) {
				qString += sTmp + matches[i];
				sTmp = '&';
			}
		}
	}

	qString += (qString ? '&' : '') +'order='+ field.toString() +'&dir='+ order.toString();
	frm.action = sURL +'?'+ qString;
	frm.submit();
}


/**********************************************************************
* Funções utilizadas para efeitos de mouseover nos botões
**********************************************************************/
function MM_preloadImages() { //v3.0
	var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
	var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
	if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
	var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.0
	var p,i,x;
	if(!d) {
		d=document; 
	}
	if ( document.getElementById ) {
		x = document.getElementById(n);
		return x;
	}
	if( ( p = n.indexOf("?")) > 0 && parent.frames.length) {
		d = parent.frames[n.substring(p+1)].document;
		n = n.substring(0,p);
	}
	if ( !(x=d[n])&&d.all ) {
		x = d.all[n];
	}
	for (i=0; !x && i < d.forms.length; i++) {
		x = d.forms[i][n];
	}
	for ( i=0; !x && d.layers && i < d.layers.length; i++ ) {
		x = MM_findObj(n,d.layers[i].document);
	}
}

function MM_swapImage() { //v3.0

  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
	  
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
   
}
/**********************************************************************/


/************************************************************************************************
* Descrição: exibe/oculta um elemento
* Parâmetros de Entrada:
*	theID (string) - id do objeto a ser ocultado/exibido
*	action (char) - 'S' para  exibir e 'H' para ocultar. caso nao seja informado, nega o status atual
* Parâmetros de saída: [NENHUM]
************************************************************************************************/
var show = 'S';
var hide = 'H';

function showHide(theID, action) {
	var strDsp;
	var obj = MM_findObj(theID);
	if (obj) {
		if (action) {
			strDsp = (action == show ? '' : 'none');
		} else {
			var aux = (obj.length ? obj[0] : obj).style.display;
			strDsp = (aux == 'block' || !aux ? 'none' : '');
		}
		if (obj.length && !obj.type) {
			for (var i=0; i<obj.length; i++) {
				obj[i].style.display = strDsp;
			}
		} else {
			obj.style.display = strDsp;
		}
	}
	//alert(obj.outerHTML);
	//return ( (strDsp == 'block') ? true : false);
}



/************************************************************************************************
* Descrição: submit um form e dispara o evento 'onsubmit', para que funcione o autocomplete no Internet Explorer
* Parâmetros de Entrada:
*	frm (objeto) - instancia de um objeto do tipo form
* Parâmetros de saída: [NENHUM]
************************************************************************************************/
function submitForm(frm) {
	if ( !frm ) {
		frm = document.forms[0];
	}
	frm.submit();
	try	{
		frm.fireEvent('onsubmit')
	} catch (e) {
		// do nothing
	}
}


function isGecko(event) {
	return (navigator.appName=="Netscape");
}


/************************************************************************************************
*  Verifica a existencia de um valor em um array												*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 20/11/2001 - 12:07																*
************************************************************************************************/
function inArray(theArray, theValue) {
	for (var i=0; i<theArray.length; i++) {
		if ( theArray[i].toString().toLowerCase() == theValue.toString().toLowerCase() )
			return true;
	}
	return false;
}





/************************************************************************************************
*  Abre popup para pesquisa de entidades														*
*  Autor: Carlos Eduardo Maciel																	*
************************************************************************************************/
var buscaEntidadeFld;
var codEntidadeFld;

function buscaEntidade(fld, fld2, showAll, params) {

	buscaEntidadeFld = fld
	if ( fld2 ) {
		codEntidadeFld = fld2;
	}

	var strParams = (showAll ? 'showAll='+ showAll.toString() : '');
	if ( params ) {
		if ( params.lengh ) {
			for (var key in params) {
				strParams += '&'+ key +'='+ params[key];
			}
		} else {
			strParams += '&'+ params;
		}
	}

	var wnd = window.open("/busca-entidade.asp?"+ strParams, "wndBuscaEntidade", "width=550,height=380");
	wnd.focus();
}




/************************************************************************************************
*  Abre popup para pesquisa de coordenadorias													*
*  Autor: Carlos Eduardo Maciel																	*
************************************************************************************************/
var buscaCoordenadoriaFld;
var codCoordenadoriaFld;

function buscaCoordenadoria(fld, fld2) {

	buscaCoordenadoriaFld = fld
	if ( fld2 ) {
		codCoordenadoriaFld = fld2;
	}
	var wnd = window.open("/busca-coordenadoria.asp", "wndBuscaCoordenadoria", "width=550,height=380");
	wnd.focus();
}



/************************************************************************************************
*  centraliza uma janela																		*
*  Autor: Carlos Eduardo Maciel																	*
************************************************************************************************/
function centerWindow(w, h, wnd) {
	fixSize(w, h);
	if ( !wnd ) {
		wnd = window;
	}
	if ( screen ) {
		lft = (screen.availWidth - intval(wnd.width))/2;
		tp = (screen.availHeight - intval(wnd.height))/2;

		// janelas normais
		try {
			if ( !wnd.dialogWidth ) {
				wnd.moveTo( lft , tp );

			// modal dialogs
			} else {
				wnd.dialogLeft = lft.toString() +'px';
				wnd.dialogTop = tp.toString() +'px';
			}
		} catch (e) {
			// do nothing
		}
	}
}


/************************************************************************************************
*  Autor: Carlos Eduardo Maciel																	*
*  Descrição: resize de janelas e popups														*
************************************************************************************************/
var TYPE_IFRAME = 1;
var TYPE_POPUP  = 2;

function fixSize(w, h) {
	var wType = (window.opener ? TYPE_POPUP : TYPE_IFRAME);
	if( !w ) {
		w = document.body.scrollWidth + (wType == TYPE_POPUP ? 10 : 0);
	}
	if ( !h ) {
		h = document.body.scrollHeight + (wType == TYPE_POPUP ? 31 : 0);
	}
	// janelas normais
	if ( !window.dialogWidth) {
		window.resizeTo(w , h);

	// modal dialogs
	} else {
		window.dialogWidth = w.toString() +'px';
		window.dialogHeight = (h + 20).toString() +'px';
	}
	window.width = w;
	window.height = h;
	
}

/************************************************************************
*	Autor: Carlos Eduardo Maciel
*	Descrição: retorna o valor inteiro de um determinado valor
************************************************************************/
function intval(v) {
	v = parseInt(v*1);
	if ( isNaN(v) ) v = 0;
	return v;
}



/************************************************************************
*	Autor: Carlos Eduardo Maciel
*	Descrição: valida campos de entidade
************************************************************************/
function validaEntidade(fieldName, alias) {

	var frm = document.forms[0];
	var hiddenField	= frm.elements[fieldName];
	var textField	= frm.elements['txt_'+ fieldName];
	var oRadio		= frm.elements[fieldName +'_tipo'];
	var error		= false;
	if ( !alias ) {
		alias = 'Entidade';
	}

	if ( oRadio[1].checked ) {
		if ( !textField.value ) {
			alert('Informe a '+ alias +'!');
			error = true;
		} else if ( textField.value.length != 10 ) {
			alert(alias +' inválida!');
			error = true;
		}
	}

	if ( error ) {
		textField.select();
	}
	return !error;
}


/************************************************************************************************
*	Autor: Carlos Eduardo Maciel																*
*	Descrição: abre uma popup																	*
************************************************************************************************/
function openWindow(sURL, winName, hasScrollBar) {
	var scBar = ''
	if (!winName) winName = 'janela'
	if (hasScrollBar) var scBar = ',scrollbars=yes';
	newWin = window.open(sURL, winName, 'width=1,height=1'+ scBar);
	newWin.focus();
	return newWin;
}


/************************************************************************************************
*  Autor: Carlos Eduardo Maciel																	*
*  Descrição: submete um form para a url e target definidos										*
************************************************************************************************/
function submitTo(frm, url, wName, width, height, resetCurrent) {
	var _tgt = frm.target;
	var _act = frm.action;
	if ( wName ) {
		if ( wName != 'blank' ) {
			var w = openWindow(url, wName);
			if ( width || height ) {
				try {
					w.resizeTo(intval(width), intval(height));
				} catch (e) {
					//do nothing
				}
			}
		}
		frm.target = wName;
	}
	frm.action = url;
	frm.submit();
	if (resetCurrent) {
		document.location.href = 'about:blank';
	}
	frm.target = _tgt;
	frm.action = _act;
	return w;
}



/************************************************************************************************
*  Autor: Carlos Eduardo Maciel																	*
*  Descrição: abre pagina de impressao
************************************************************************************************/
function printPage(title, strSQL) {
	if ( !strSQL ) {
		strSQL = document.forms[0].printSQL.value;
	}
	var wnd = window.open('/imprime-recordset.asp?titulo='+ (title ? title.toString() : '') +'&sql='+ escape(strSQL), '');
	return void(0);
}



/************************************************************************************************
*  Autor: Carlos Eduardo Maciel																	*
*  Descrição: busca a entidade selecionada em campos de busca de entidade no padrao				*
*				fnMostraCampoEntidade()															*
************************************************************************************************/
function getEntidade(fname) {
	var frm = document.forms[0];
	return (frm.elements[fname +'_tipo'][0].checked ? 0 : frm.elements['txt_'+ fname].value);
}


/************************************************************************************************
*  Autor: Alvaro Ferreira afweb@terra.com.br													*
*  Descrição: compara duas datas																	*
*																								*
************************************************************************************************/
function fnComparadata(campopai,campo) {
	var data1= Date.parse(new Date(campopai.value.substring(6,10),campopai.value.substring(3,5), campopai.value.substring(0,2)));
	var data2= Date.parse(new Date(campo.value.substring(6,10),campo.value.substring(3,5), campo.value.substring(0,2)));
	return (data2 < data1);
}


/************************************************************************************************
*  Autor: Carlos Eduardo Maciel																	*
*  Descrição: chama popup de exibição de sorteio														*
************************************************************************************************/
function mostraSorteio(nroSerie) {
	if ( !nroSerie ) {
		nroSerie = '';
	}
	var wnd = window.open('/sorteados.asp?serie='+ nroSerie.toString(), 'wndSorteio', 'fullscreen=yes');
}


/************************************************************************************************
*	Autor: Carlos Eduardo Maciel																*
*	Descrição: centraliza uma janela															*
************************************************************************************************/
function fixPosition(w, h, mw, mh) {

	fixSize(w, h);

	// Verifica se a janela nao excedeu o tamanho maximo
	if (mw && window.width > mw) {
		w = mw
	}

	if (mh && window.height > mh) {
		h = mh
	}

	fixSize(w, h);

	if ( screen ) {

		lft = (screen.availWidth - intval(window.width))/2;
		tp = (screen.availHeight - intval(window.height))/2;

		// janelas normais
		if ( !window.dialogWidth ) {
			window.moveTo( lft , tp );

		// modal dialogs
		} else {
			window.dialogLeft = lft.toString() +'px';
			window.dialogTop = tp.toString() +'px';
		}

	}
}



/************************************************************************************************
*  Autor: Carlos Eduardo Maciel																	*
*  Descrição: resize de janelas e popups														*
************************************************************************************************/
var TYPE_IFRAME = 1;
var TYPE_POPUP  = 2;

function fixSize(w, h) {

	var wType = (window.opener ? TYPE_POPUP : TYPE_IFRAME);
	if( !w ) {
		w = document.body.scrollWidth + (wType == TYPE_POPUP ? 10 : 0);
	}
	if ( !h ) {
		h = document.body.scrollHeight + (wType == TYPE_POPUP ? 31 : 0);
	}

	try {
		// janelas normais
		if ( !window.dialogWidth) {
			window.resizeTo(w , h);

		// modal dialogs
		} else {
			window.dialogWidth = w.toString() +'px';
			window.dialogHeight = (h + 20).toString() +'px';
		}
		window.width = w;
		window.height = h;

	} catch (e) {
		//do nothing
	}
}


/*********************************************************************
*	Autor: Carlos Eduardo Maciel
*	Descrição: maxlength para textarea
*********************************************************************/
function showCharsLeft(field, maxChars) {
	if ( !maxChars ) {
		maxChars = intval(field.maxLen);
	}
	var	objOutput = field.form.elements[field.name +'_output'];
	var typedChars = field.value.length;
	var outputValue = maxChars - typedChars;
	if( outputValue < 0 ) {
		field.style.color = 'red';
		field.value = field.value.substr(0, maxChars);
	} else {
		objOutput.value = outputValue;
		if ( outputValue > 0 ) {
			field.style.color = 'black';
		}
	}
}


/************************************************************************
*	Autor: Carlos Eduardo Maciel
*	Descrição: retorna o valor numerico de um determinado valor
************************************************************************/
function doubleval(v) {
	v = v.toString().replace(/\D*$/, '').replace(/\./g, '').replace(',','.');
	v = parseFloat(v*1);
	if ( isNaN(v) ) {
		v = 0;
	}
	return v;
}



/*********************************************************************
*	Autor: Carlos Eduardo Maciel
*	Descrição: formata uma data em formato ISO YYYY-MM-DD
*********************************************************************/
function toISODate(strDate) {
	var reBR =  /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/;
	var reISO = /^\d{4}\-\d{1,2}\-\d{1,2}$/;
	if ( strDate.toString().match(reBR) ) {
		var tmp = strDate.split('/');
		r = tmp[2] +'-'+ right('00'+ tmp[1], 2) +'-'+ right('00'+ tmp[0], 2);
	} else if ( strDate.match(reISO) ) {
		r = strDate;
	} else {
		r = '';
	}
	return r;
}



/*********************************************************************
*	Autor: Carlos Eduardo Maciel
*	Descrição: formata uma data em formato brasileiro DD/MM/YYY
*********************************************************************/
function toBRDate(strDate) {
	var reBR =  /^\d{1,2}\/\d{1,2}\/\d{4}$/;
	var reISO = /^(\d{4})\-(\d{1,2})\-(\d{1,2})$/;
	if ( strDate.match(reISO) ) {
		var tmp = strDate.split('-');
		return right('00'+ tmp[2], 2) +'/'+ right('00'+ tmp[1], 2) +'/'+ tmp[0];
	} else if ( strDate.match(reBR) ) {
		return strDate;
	} else {
		return '';
	}
}


/*********************************************************************
*	Autor: Carlos Eduardo Maciel
*	Descrição: recebe uma string no formato ISO e retorna o UTC de uma data
*********************************************************************/
function isoToUTC(strISO) {
	var strInvoke = 'Date.UTC('+ strISO.replace(/[\-\:\ ]/g,',') +', 3)';
	dt1 = eval(strInvoke);
	dt1 = new Date(dt1);
	dt1.setMonth( dt1.getMonth()-1 );
	return dt1.valueOf();
}


/*********************************************************************
*	Autor: Carlos Eduardo Maciel
*	Descrição: diferenca entre duas datas (dt1 - dt2)
*********************************************************************/
function dateDiff(dType, dt1, dt2) { //dt1 e dt2 em formato 'YYYY-MM-DD'

	var second	= 1000;
	var minute	= second * 60;
	var hour	= minute* 60;
	var day		= hour * 24;
	var week	= day * 7;
	var year	= day * 365;

	var dt = new Date;
	var strToday= dt.getFullYear() +'-'+ (dt.getMonth()+1) +'-'+ dt.getDate();
	var strNow	= strToday +' '+ dt.getHours() +':'+ dt.getMinutes();

	// Cria datas UTC
	//====================================================
	dt1 = (dt1 == 'now' ? strNow : (dt1 == 'today' ? strToday  : dt1));
	dt2 = (dt2 == 'now' ? strNow : (dt2 == 'today' ? strToday  : dt2));

	dt1 = isoToUTC(dt1);
	dt2 = isoToUTC(dt2);

	//subtrai
	tDiff = dt1 - dt2;
	//alert(dt1 +' ::: '+ dt2 +' = '+ tDiff);

	switch (dType.toLowerCase()) {
		case 's':
			div = second;
			break;
		case 'm':
			div = month;
			break;
		case 'n':
			div = minute;
			break;
		case 'h':
			div = hour;
			break;
		case 'd':
			div = day;
			break;
		case 'w':
			div = week;
			break;
	}

	r = Math.floor(tDiff / div);
	return(r);
}



/*********************************************************************
*	Autor: Carlos Eduardo Maciel
*	Descrição: retorna valores selecionados de radios e checkboxes
*********************************************************************/
function getInputValues(field) {
	if ( !field.length ) {
		field = new Array(field);
	}
	var isCheckbox = (field[0].type == 'checkbox');
	var arrValues = new Array();
	for (var i=0; i<field.length; i++) {
		if ( field[i].checked || field[i].type == "hidden" || field[i].type == "text") {
			arrValues[arrValues.length] = field[i].value;
		}
	}
	return (isCheckbox ? arrValues : (arrValues.length ? arrValues[0] : false));
}



/*********************************************************************
*	Autor: Carlos Eduardo Maciel
*	Abre página de login do SOE
*********************************************************************/
function openSOELogin() {
	var wnd = openWindow('/admin/SLD-ADMIN-CONSULTAR_LoginOk.asp', 'wndSOELogin', false);
	wnd.resizeTo(500, 400);
	return wnd;
}



/*********************************************************************
*	Autor: Carlos Eduardo Maciel
*	Descrição: Verifica se o usuario está logado
*********************************************************************/
function isLogged() {

	var xml = new ActiveXObject('Microsoft.XMLDOM');
	var retorno  = false;
	xml.async = false;

	if ( xml.load('/include/SessionState.asp') ) {

		var nodes = xml.selectNodes("/SessionState/SOE_Logado");
		if ( nodes.length ) {
			retorno = (nodes[0].text == "true");
		} else {
			retorno = false;
		}
	}

	if ( !retorno ) {
		alert("Sua sessão expirou!");
		var wnd = openSOELogin();
	}

	return retorno;
}

/************************************************************************************************
*  auto-complete para campos de Data  MES/ANO													*
*  Autor: Eduardo Ughini																		*
*  Data/Hora: 26/05/2006																		*
************************************************************************************************/
function setDateMesAno(campo, autoComplete) {
	var ignoreKeys = Array(8,9,13,16,17,35,36,37,39,46);
	str = campo.value.replace(/\D/g,'');
	if (str) {
		if ( !inArray(ignoreKeys, window.event.keyCode) ) {
			var s1 = str.substr(0,2);
			var s2 = str.substr(2,4);
			str = s1 +(s1.length==2 ? '/' : '') + s2 
			campo.value = str;
			if ( autoComplete ) {
				setDateComplete(campo);
				str = campo.value;
			}
			/*if ( str.match(/^\d{2}\/\d{2}\/\d{4}$/) ) {
				focusNext(fld);
			}*/
		}
	}
}
