var timerAlerta
function alerta(txt,tempo){
	clearTimeout(timerAlerta)
	if(!document.getElementById('msg')){
		m = document.createElement('div')
		m.id = 'msg'
		document.body.appendChild(m)
	}else m = document.getElementById('msg')
	m.innerHTML = txt
	m.style.visibility = 'visible'	
	function oculta(){
		if(m.style) m.style.visibility = 'hidden'
	}
	timerAlerta = setTimeout(oculta,tempo?tempo:3000)
}
function validaCaixa(caixa,tipo){
	if(caixa.value){
		if(tipo=='data'){
			if(d = verificaData(caixa.value)) caixa.value = d
			else{
				caixa.value=''
				alerta("Tipo 'data' inválido.")
				caixa.focus()
			}
		}else if(tipo=='hora'){
			if(h = verificaHora(caixa.value)) caixa.value = h
			else{
				caixa.value = ''
				alerta("Tipo 'hora' inválido.")
				caixa.focus()
			}
		}else if(!er(caixa.value,tipo)){
			caixa.value=''
			alerta("Tipo '"+tipo+"'&nbsp;inválido.")
			caixa.focus()
		}		
	}
}
function er(str,padrao){
	var Er
	switch(padrao){
		case 'alpha':
			Er = /^[a-zA-z]+$/
			break
		case 'nomeProprio':
			Er = /^[a-zA-Záéíóúçãõ. ]{3,}$/
			break
		case 'inteiro':
			Er = /^[0-9]+$/
			break
		case 'telefone':
			Er = /^((\([0-9]{2}\))||([0-9]{2}))?[0-9]{3,4}-?[0-9]{4}$/
			break
		case 'cep':
			Er = /^[0-9]{5}-?[0-9]{3}$/
			break
		case 'cpf':
			Er = /^([0-9]{9}\-?[0-9]{2}|[0-9]{3}.[0-9]{3}.[0-9]{3}\-[0-9]{2})$/
			break
		case 'rg':
			Er = /^([0-9]{8}\-?[0-9a-zA-Z]|[0-9]{2}.[0-9]{3}.[0-9]{3}\-[0-9a-zA-Z])$/
			break
		case 'nome':
			Er = /^([a-z]|[A-Z]|á|é|í|ó|ú|Á|É|Í|Ó|Ú|ã|õ|Ã|Õ|â|ê|Â|Ê|ü|Ü| )+$/
			break
		case 'numeroBeneficio':
			Er = /^[0-9]{9,11}$/
			break
		case 'agencia':
			Er = /^[0-9]{4}-?[0-9]$/
			break
		case 'conta':
			//123456789012-25		
			Er = /^[0-9]{12}-?[0-9]{2}$/
			break
		case 'insc':
			Er = /^[0-9]{13}-?[0-9]$/
			break
		case 'matricula':
			Er = /^([0-9]{7}-?[0-9]|[0-9].[0-9]{3}.[0-9]{3}-[0-9])$/
			break
		case 'placa':
			Er = /^([a-z]|[A-Z]){3}-?[0-9]{4}$/
			break
		case 'cnpj':
			Er = /^([0-9]{12}-?[0-9]{2}|([0-9]{2}.[0-9]{3}.|[0-9]{5})[0-9]{3}\/[0-9]{4}-[0-9]{2})$/
			break
		case 'numero':
			Er = /^[0-9]*[.,]?[0-9]+$/
			break
		case 'email':
			Er = /^([a-z]|[A-Z])([a-z]|[A-Z]|[0-9]|_)*@([a-z]|[A-Z])+.com(.([a-z]|[A-Z]){2})?$/
			break
		case 'login':
			Er = /^[a-zA-Z0-9_]{4,}$/
			break
		case 'senha':
			Er = /^[a-zA-Z0-9_]{4,}$/
			break
		case 'endereco':
			Er = /^.*$/
			break
		case 'telefone_simples':
			Er = /^[0-9]{4}-?[0-9]{4}$/
			break
		default:
			return false
	}
	return Er.test(str)
}
function verificaData(strData){
	function eData(dia,mes,ano){
		//19/11/2006 09:42
		var dia = parseFloat(dia)
		var mes = parseFloat(mes)-1
		var ano = parseFloat(ano)
		var data = new Date(ano, mes, dia, 0, 0, 0)
		var d = data.getDate()
		var m = data.getMonth()
		var a = data.getFullYear()
		return (d==dia && m==mes && a==ano)
	}
	padrao = /([0-9]|\/)+/		
	if(!padrao.test(strData)) return false
	hoje = new Date()
	mesHoje = hoje.getMonth() + 1
	anoHoje = hoje.getFullYear()
	strData = strData.split('/')
	switch(strData.length){
		case 1:
			switch(strData[0].length){
				case 1:
					dia = strData[0]
					mes = mesHoje
					ano = anoHoje
					break
				case 2:
					dia = strData[0]
					mes = mesHoje
					ano = anoHoje
					break
				case 4:
					dia = strData[0].substr(0,2)
					mes = strData[0].substr(2,2)
					ano = anoHoje
					break
				case 6:
					dia = strData[0].substr(0,2)
					mes = strData[0].substr(2,2)
					ano = strData[0].substr(4,2)						
					break
				case 8:
					dia = strData[0].substr(0,2)
					mes = strData[0].substr(2,2)
					ano = strData[0].substr(4,4)	
					break
				default:
					return false						
			}
			break
		case 2:
			dia = strData[0]
			mes = strData[1]
			ano = anoHoje
			break
		case 3:
			dia = strData[0]
			mes = strData[1]
			ano = strData[2]
			break
		default:
			return false			
	}
	ano = parseFloat(ano)
	if(ano<=30) ano+=2000
	else if(ano>30 && ano<=99) ano+=1900		
	if(eData(dia,mes,ano)){
		mes+=''
		dia = ('00' + dia).substr(dia.length,2)
		mes = ('00' + mes).substr(mes.length,2)
		return dia + '/' + mes + '/' + ano
	}else return false		
}
function verificaHora(strHora){
	horario = strHora.split(':')
	switch(horario.length){
		case 1:
			switch(horario[0].length){
				case 1:
				case 2:
					horas = horario[0]
					minutos = 0
					break
				case 4:
					horas = horario[0].substr(0,2)
					minutos = horario[0].substr(2,2)
					break
				default:
					return false
			}
			break
		case 2:
			horas = horario[0]
			minutos = horario[1]
			break
		default:
			return false
	}
	horas = parseFloat(horas)
	minutos = parseFloat(minutos)
	if(horas<0||horas>23||minutos<0||minutos>59) return false	
	if(horas<10) horas = '0' + horas
	if(minutos<10) minutos = '0' + minutos
	return horas+':'+minutos
}
function toFloat(strNum){
	return (er(strNum,'numero')?parseFloat(strNum.replace(',','.')):false)
}
function criaData(strData){
	var objData=new Date()
	arr = strData.split(' ')
	vetorData = arr[0].split('/')
	objData.setFullYear(vetorData[2],parseFloat(vetorData[1])-1,vetorData[0])
	if(arr[1]){
		vetor = arr[1].split(':')
		objData.setHours(vetor[0],vetor[1],(vetor[2]?vetor[2]:0),0)
	}else objData.setHours(0,0,0,0)
	return objData
}
function criaHora(strHora){
	var objHora = new Date()
	objHora.setFullYear(0,0,0)
	objHora.setHours(esq(strHora,2),dir(strHora,2),0,0)
	return objHora
}
function validaIntervalo(caixa,tipo,minimo,maximo){
	validaCaixa(caixa,tipo)
	if(caixa.value){
		switch(tipo){
			case 'numero':
			case 'inteiro':
				numero = toFloat(caixa.value)
				if(numero<minimo || numero>maximo){
					alerta('Número fora do intervalo de '+(''+minimo).replace('.',',')+' a '+(''+maximo).replace('.',',')+'.')
					caixa.value = ''
					caixa.focus()					
				}
				break			
			case 'data':
				if(typeof(minimo)=='string'){
						strMinimo = minimo
						minimo = criaData(minimo)
				}else if(minimo!=null) strMinimo = minimo.getDate() + '/' + (minimo.getMonth()+1) + '/' + minimo.getFullYear()
				if(typeof(maximo)=='string'){
					strMaximo = maximo
					maximo = criaData(maximo)
				}else if(maximo!=null) strMaximo = maximo.getDate() + '/' + (maximo.getMonth()+1) + '/' + maximo.getFullYear()
				dataCaixa = criaData(caixa.value)				
				if(maximo){
					if(minimo){
						if(dataCaixa<minimo || dataCaixa>maximo){
							alerta('Data fora do intervalo permitido ('+strMinimo+' e '+strMaximo+').')
							caixa.value = ''
							caixa.focus()
						}						
					}
					else{
						if(dataCaixa > maximo){
							alerta('Data maior que o permitido ('+strMaximo+').')
							caixa.value = ''
							caixa.focus()
						}
					}
				}else{
					if(minimo){
						if(dataCaixa < minimo){
							alerta('Data menor que o permitido ('+strMinimo+').')
							caixa.value = ''
							caixa.focus()
						}
					}
				}
				break
		}
	}
}
function Enter(e,funcao){
	e = e || window.event
	if(e.keyCode==13) funcao()
}
function numberFormat(numero,casas,separadorMilhar,separadorDecimal){ //21/08/2007 10:18
	if(typeof(numero)=='string') numero = toFloat(numero)
	var parteInteira = new Array()	
	casas = typeof(casas)=='undefined'?2:casas
	separadorMilhar = typeof(separadorMilhar)=='undefined'?'.':separadorMilhar
	separadorDecimal = typeof(separadorDecimal)=='undefined'?',':separadorDecimal
	numero = numero.toFixed(casas)
	partesNumero = (''+numero).split('.')
	separadorDecimal = separadorDecimal || ','
	while(partesNumero[0].length>3){
		parteInteira.unshift(partesNumero[0].substr(partesNumero[0].length-3))
		partesNumero[0] = partesNumero[0].substr(0,partesNumero[0].length-3)
	}
	if(partesNumero[0].length) parteInteira.unshift(partesNumero[0])	
	return casas!=0?(parteInteira.join(separadorMilhar) + separadorDecimal + partesNumero[1]):parteInteira.join(separadorMilhar)
}
function posicaoElemento(elemento){
	var esquerda = topo = 0
	if(elemento.offsetParent){
		do{
			esquerda+=elemento.offsetLeft
			topo+=elemento.offsetTop
		}while(elemento = elemento.offsetParent)
	}
	return [esquerda,topo]
}
function mostraCelula(celula){
	celula.style.display = navigator.appName=='Netscape'?'table-cell':'block'
}