/*******************************************************
*   Funcoes Gerais                                     *
*******************************************************/

function MM_findObj(n, d) { //v3.0
  var p,i,x;  if(!d) d=document; 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); return x;
}
/* Functions that swaps down images. */
function MM_nbGroup(event, grpName) { //v3.0
  var i,img,nbArr,args=MM_nbGroup.arguments;
  if (event == "init" && args.length > 2) {
    if ((img = MM_findObj(args[2])) != null && !img.MM_init) {
      img.MM_init = true; img.MM_up = args[3]; img.MM_dn = img.src;
      if ((nbArr = document[grpName]) == null) nbArr = document[grpName] = new Array();
      nbArr[nbArr.length] = img;
      for (i=4; i < args.length-1; i+=2) if ((img = MM_findObj(args[i])) != null) {
        if (!img.MM_up) img.MM_up = img.src;
        img.src = img.MM_dn = args[i+1];
        nbArr[nbArr.length] = img;
    } }
  } else if (event == "over") {
    document.MM_nbOver = nbArr = new Array();
    for (i=1; i < args.length-1; i+=3) if ((img = MM_findObj(args[i])) != null) {
      if (!img.MM_up) img.MM_up = img.src;
      img.src = (img.MM_dn && args[i+2]) ? args[i+2] : args[i+1];
      nbArr[nbArr.length] = img;
    }
  } else if (event == "out" ) {
    for (i=0; i < document.MM_nbOver.length; i++) {
      img = document.MM_nbOver[i]; img.src = (img.MM_dn) ? img.MM_dn : img.MM_up; }
  } else if (event == "down") {
    if ((nbArr = document[grpName]) != null)
      for (i=0; i < nbArr.length; i++) { img=nbArr[i]; img.src = img.MM_up; img.MM_dn = 0; }
    document[grpName] = nbArr = new Array();
    for (i=2; i < args.length-1; i+=2) if ((img = MM_findObj(args[i])) != null) {
      if (!img.MM_up) img.MM_up = img.src;
      img.src = img.MM_dn = args[i+1];
      nbArr[nbArr.length] = img;
  } }
}

/* Functions that handle preload. */
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];
      }
  }
}

/* Esta função abre uma url em uma nova janela com dados nome e dimensão */
function show_window(url,name,x,y){
  var showpop;
  showpop = window.open(url,name,'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,menubar=no,width='+ x +',height='+ y);
  return;
}

/* Esta função recebe o nome de um formulário e um action e o submete */
function formAction(formname, formaction){
  document.forms[formname].action = formaction;
  document.forms[formname].submit();
  return true;
}

/* Esta função recebe o nome de um formulário e um action e o submete caso a solicitação seja confirmada */
function confirmExcluir(formname, formaction){
  if (confirm("Tem certeza que deseja excluir o(s) item(s) selecionado(s) ?")){
    document.forms[formname].action = formaction;
    document.forms[formname].submit();
  }
  //return true;
}

/* Esta função recebe o nome de um formulário, um action e a mensagem de confirmação e o submete caso a solicitação seja confirmada */
function confirmExcluirMsg(formname, confmess, formaction){
  if (confirm(confmess)){
    document.forms[formname].action = formaction;
    document.forms[formname].submit();
  }
  //return true;
}

/* Esta função recebe o nome de uma url  e uma mensagem de confirmação e redireciona a solicitação seja confirmada */
function confirmExcluirUrlMsg(url, confmess){
  if (confirm(confmess)){
    document.location = url;
  }
  //return true;
}

/* Esta função recebe o nome de um formulário e seleciona todos os checkbox deste dado fornulário */
function Select_all(formname)
{
  for (var i=0;i<document.forms[formname].elements.length;i++){
    var x = document.forms[formname].elements[i];
    if (x.name != 'select_all'){
      x.checked = document.forms[formname].select_all.checked;
    }
  }
}

function Go(formname,elementname,action)
{
if (action ==1)
{
document.forms[formname].elements[elementname].value++;
document.forms[formname].submit();
}
if (action ==0)
{document.forms[formname].elements[elementname].value--;
document.forms[formname].submit();
}
if (action ==2)
{document.forms[formname].elements[elementname].value = 1;
document.forms[formname].submit();
}
}

function Location(link)
{
	window.location.href = link;
}

function ValidaCampo(formname, elementname, name)
//chamada: <input name="nome" onKeyUp="ValidaCampo('formname', 'formname', 'Descrição');">
{
	if (document.forms[formname])
		if (document.forms[formname].elements[elementname])	
		{
			var invalidchar = "'";
			var Texto = document.forms[formname].elements[elementname].value;
			for (var i = 0; i< Texto.length; i++)
			{
				if (invalidchar.indexOf(Texto.charAt(i)) != -1){Texto = Texto.replace(Texto.charAt(i), ""); i--;}
			}
			document.forms[formname].elements[elementname].value = Texto;
		}
}

function ValidaCombo(formname, elementname, name)
{
	var selected = false;
	for(var i = 1; i < document.forms[formname].elements[elementname].options.length; i++)
	{
		if (document.forms[formname].elements[elementname].options[i].selected)
			selected = true;
	}
	
	if (!selected)
	{
		alert("O campo \"" + name + "\" deve ser selecionado.");
		return false;
	}
	return true;
}

//Verifica se não existe nenhum campo do tipo checkbox selecionado
function ValidaCheck(formname, name)
{
	var checked = false;
	for(var i = 0; i < document.forms[formname].length; i++)
	{
		if (document.forms[formname].elements[i].type == "checkbox")
			if (document.forms[formname].elements[i].checked)
				checked = true;
	}
	
	if (!checked)
	{
		alert("Não existe nenhum(a) \"" + name + "\" selecionado(a).");
		return false;
	}
	return true;
}

//Verifica se não existe nenhum campo do tipo checkbox selecionado com nome diferente de all
function ValidaAllCheck(formname, name)
{
	var checked = false;
	for(var i = 0; i < document.forms[formname].length; i++)
	{
		if (document.forms[formname].elements[i].type == "checkbox")
		  if (document.forms[formname].elements[i].name.substr(0,3) != "all")
			if (document.forms[formname].elements[i].checked)
					checked = true;
	}
	
	if (!checked)
	{
		alert("Não existe nenhum(a) \"" + name + "\" selecionado(a).");
		return false;
	}
	return true;
}

function FormataData(formname, elementname, teclapres){
//chamada: <input name="dtnasc" onKeyUp="FormataData('formname', 'dtnasc', event);">
	if (document.forms[formname])
	{		
		var num = "0123456789";
		var tecla = teclapres.keyCode;
		var vr = document.forms[formname].elements[elementname].value;
		vr = vr.substr(0, 10);
		if ( tecla != 9 && tecla != 8 ){
			for (var i = 0; i< vr.length; i++)
			{
				if (num.indexOf(vr.charAt(i)) == -1){vr = vr.replace(vr.charAt(i), ""); i--;}
			}
			document.forms[formname].elements[elementname].value = vr;
			var tam = vr.length + 1;

			if ( tam > 2 && tam < 5 )
				document.forms[formname].elements[elementname].value = vr.substr( 0, 2 ) + '/' + vr.substr( 2, 2 );
			if ( tam >= 5)
				document.forms[formname].elements[elementname].value = vr.substr( 0, 2 ) + '/' + vr.substr( 2, 2 ) + '/' + vr.substr( 4, 4 ); 
		}

	}
}

function FormataFloat(formname, elementname, decimal, separador, maximo, teclapres){
//chamanda: <input name="float" onKeyUp="FormataFloat('formname', 'float', 2, ',', 5, event);"
	if (document.forms[formname])
	{		
		var num = "0123456789";
		var tecla = teclapres.keyCode;
		var vr = document.forms[formname].elements[elementname].value;
		vr = vr.substr(0, maximo);
		if ( tecla != 9 && tecla != 8 ){
			for (var i = 0; i< vr.length; i++)
				if (num.indexOf(vr.charAt(i)) == -1){vr = vr.replace(vr.charAt(i), ""); i--;}
			document.forms[formname].elements[elementname].value = vr;
			var tam = vr.length;
		
			if ((tam > decimal) && (decimal > 0))
				document.forms[formname].elements[elementname].value = vr.substr( 0, (vr.length-decimal) ) + separador + vr.substr( (vr.length-decimal), decimal );
		}
	}
}

function CountMaxChar(formname, elementname, name, maxcharname, maxchar) {
//chamada: <textarea name="Mensagem1" cols="15" rows="3" onChange="javascript:CountMaxChar('formname', 'Fielname', 'Descrição', 'maxcaracteres', 200);" onKeyUp="javascript:CountMaxChar('formname', 'Fielname', 'Descrição', maxcaracteres, 200););"></textarea>
    var Texto = document.forms[formname].elements[elementname].value;
	document.forms[formname].elements[maxcharname].value = maxchar - Texto.length;
 
	if ( document.forms[formname].elements[maxcharname].value < 1) {
		document.forms[formname].elements[maxcharname].value = 0;
		document.forms[formname].elements[elementname].value = Texto.substring(0, maxchar);
		alert("O campo \"" + name + "\" não deve ter mais que \"" + maxchar + "\" caracteres.");
	}
}

function CountAtual(formname,elementname,maxcharname,maxchar)
{
  if(document.forms[formname].elements[elementname].value.length > maxchar)
    document.forms[formname].elements[elementname].value = document.forms[formname].elements[elementname].value.substring(0,maxchar-1);
  else
    document.forms[formname].elements[maxcharname].value = maxchar - document.forms[formname].elements[elementname].value.length;
}


//Função que retorna o número de dias de Fevereiro para um ano de entrada.
function numDaysFeb(ano)
{
	// Fevereiro tem 29 dias em anos divisiveis por 4, exceto se divisíveis por 100 e não por 400
    return (((ano % 4 == 0) && ( (!(ano % 100 == 0)) || (ano % 400 == 0))) ? 29 : 28 );
}

//Função que retorna se uma data é valida ou não.
function ValidaData(dtStr)
{
	var minYear=1900;
	var maxYear=2100;
	var MonthDays = new Array(12)
	for(var i=0;i<12;i++)
		MonthDays[i] = new Array(2)
	MonthDays[0][0] = "Janeiro"
	MonthDays[0][1] = 31
	MonthDays[1][0] = "Fevereiro"
	MonthDays[1][1] = 29
	MonthDays[2][0] = "Março"
	MonthDays[2][1] = 31
	MonthDays[3][0] = "Abril"
	MonthDays[3][1] = 30
	MonthDays[4][0] = "Maio"
	MonthDays[4][1] = 31
	MonthDays[5][0] = "Junho"
	MonthDays[5][1] = 30
	MonthDays[6][0] = "Julho"
	MonthDays[6][1] = 31
	MonthDays[7][0] = "Agosto"
	MonthDays[7][1] = 31
	MonthDays[8][0] = "Setembro"
	MonthDays[8][1] = 30
	MonthDays[9][0] = "Outubro"
	MonthDays[9][1] = 31
	MonthDays[10][0] = "Novembro"
	MonthDays[10][1] = 30
	MonthDays[11][0] = "Dezembro"
	MonthDays[11][1] = 31
	
	var valid = true;
	
	var num = "0123456789/";
	for (var i = 0; i< dtStr.length; i++)
		//caso caracter inválido
		if (num.indexOf(dtStr.charAt(i)) == -1) valid = false;

	var pos1=dtStr.indexOf("/");
	var pos2=dtStr.indexOf("/",pos1+1);
	var strDay=dtStr.substring(0,pos1);
	var strMonth=dtStr.substring(pos1+1,pos2);
	var strYear=dtStr.substring(pos2+1);
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	//tira zeros a esquerda
	for (var i = 1; i <= 3; i++) {
		if (strYear.charAt(0)=="0" && strYear.length>1) strYear=strYear.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYear)
	
	if (pos1==-1 || pos2==-1 || dtStr.indexOf("/",pos2+1)!=-1 || !valid )
		valid = false;
	else if (strYear.length != 4 || year==0 || year<minYear || year>maxYear)
		valid =  false;
	else if (month<1 || month>12)
		valid = false;
	else if ((day<1 || day>31) || (month==2 && day>numDaysFeb(year)) || (day > MonthDays[month-1][1]))
		valid = false;
	return valid;
}

//Função que gera mensagens para uma data de entrada invalida.
function ValidaDataMsg(dtStr, name)
{
	var minYear=1900;
	var maxYear=2100;
	var MonthDays = new Array(12)
	for(var i=0;i<12;i++)
		MonthDays[i] = new Array(2)
	MonthDays[0][0] = "Janeiro"
	MonthDays[0][1] = 31
	MonthDays[1][0] = "Fevereiro"
	MonthDays[1][1] = 29
	MonthDays[2][0] = "Março"
	MonthDays[2][1] = 31
	MonthDays[3][0] = "Abril"
	MonthDays[3][1] = 30
	MonthDays[4][0] = "Maio"
	MonthDays[4][1] = 31
	MonthDays[5][0] = "Junho"
	MonthDays[5][1] = 30
	MonthDays[6][0] = "Julho"
	MonthDays[6][1] = 31
	MonthDays[7][0] = "Agosto"
	MonthDays[7][1] = 31
	MonthDays[8][0] = "Setembro"
	MonthDays[8][1] = 30
	MonthDays[9][0] = "Outubro"
	MonthDays[9][1] = 31
	MonthDays[10][0] = "Novembro"
	MonthDays[10][1] = 30
	MonthDays[11][0] = "Dezembro"
	MonthDays[11][1] = 31
	
	var valid = true;
	
	var num = "0123456789/";
	for (var i = 0; i< dtStr.length; i++)
		//caso caracter inválido
		if (num.indexOf(dtStr.charAt(i)) == -1) valid = false;

	var pos1=dtStr.indexOf("/");
	var pos2=dtStr.indexOf("/",pos1+1);
	var strDay=dtStr.substring(0,pos1);
	var strMonth=dtStr.substring(pos1+1,pos2);
	var strYear=dtStr.substring(pos2+1);
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	//tira zeros a esquerda
	for (var i = 1; i <= 3; i++) {
		if (strYear.charAt(0)=="0" && strYear.length>1) strYear=strYear.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYear)
	
	if (pos1==-1 || pos2==-1 || dtStr.indexOf("/",pos2+1)!=-1 || !valid ){
		alert("O formato correto para o campo \"" + name + "\" deve ser : dd/mm/aaaa");
		valid = false;
	}
	else if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		alert("O ano no campo \"" + name + "\" deve conter 4 dígitos entre " + minYear + " e " + maxYear+".");
		valid =  false;
	}	
	else if (month<1 || month>12){
		alert("O mês no campo \"" + name + "\" deve estar entre 01 e 12.");
		valid = false;
	}
	else if ((day<1 || day>31) || (month==2 && day>numDaysFeb(year)) || (day > MonthDays[month-1][1])){
		if (month==2)
			alert("O dia no campo \"" + name + "\" deve conter 2 dígitos. \nPara o mês "+ MonthDays[month-1][0] + " deve estar entre 01 e " + numDaysFeb(year) +".");
		else
			alert("O dia no campo \"" + name + "\" deve conter 2 dígitos. \nPara o mês "+ MonthDays[month-1][0] + " deve estar entre 01 e " + MonthDays[month-1][1] +".");
		valid = false;
	}
	
	return valid
}

//Função que gera mensagens para uma data de entrada invalida e dá o foco no campo do formulario.
function ValidaDt(formname, elementname, name)
{
	if (!ValidaDataMsg(document.forms[formname].elements[elementname].value, name))
	{
		document.forms[formname].elements[elementname].select();
		document.forms[formname].elements[elementname].focus();
	}
}

//Função que gera mensagens para uma data de entrada invalida e dá o foco no campo do formulario.
function ValidaSDt(formname, elementname, name)
{
  if(document.forms[formname].elements[elementname].value != '')
  {
    if (!ValidaDataMsg(document.forms[formname].elements[elementname].value, name))
    {
      document.forms[formname].elements[elementname].select();
      document.forms[formname].elements[elementname].focus();
    }
  }
}

/* Função para comparar dois valores (v1 e v2) */
function Cmp(v1, cmp, v2) {
	cmp = parseInt(cmp);
	switch(cmp) {
		case 1:
			if (v1 == v2)
				return true;
		break;
		case 2:
			if (v1 != v2)
				return true;
		break;
		case 3:
			if (v1 < v2)
				return true;
		break;
		case 4:
			if (v1 <= v2)
				return true;
		break;
		case 5:
			if (v1 > v2)
				return true;
		break;
		case 6:
			if (v1 >= v2)
				return true;
		break;
	}
	return false;
}

/* Esta função abre uma url em uma nova janela com dados nome e dimensão */
function show_window_calend(url,name,x,y){
  var showpop;
  showpop = window.open(url,name,'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,menubar=no,width='+ x +',height='+ y);
  return;
}
