// Pacote de rotinas utilitárias em Javascript
// ********************************************
// Autor: Josiel da Silva Oliveira
// Data: 18/02/2002
// ********************************************
// JP Informática S/C Ltda.


var Netscape =((navigator.appName=="Netscape") ? 1 : 0);
var IExplore =((Netscape)    ? 0 : 1);

var now = new Date();

if (Netscape)
{
	window.captureEvents(Event.KEYDOWN | Event.KEYPRESS);
	window.onkeydown=defaultClick;
}

// ***** Rotinas de validação *****
// ********************************

// Validação do form inteiro
function checkForm()
{
      var curForm = document.forms[0];
      var curElem = new Number(0);
      var bValid = new Boolean(true);

      while ((curElem<curForm.length) && (bValid))
      {
            bValid=checkField(curForm.elements[curElem++]);
      }

      return bValid;
}

// Validação de um campo específico
function checkField(o)
{
	var bResult = new Boolean(false);
	var strValue = stripFormat(o);

	if (strValue!="")
	{
                
		var Tipo=o.attributes["tipo"];

		if (Tipo!=undefined)
		{
			if (Tipo.value=="cpf")		bResult=checaCPF(strValue);
			if (Tipo.value=="cnpj")		bResult=checaCNPJ(strValue);
			if (Tipo.value=="number")	bResult=checaNum(strValue);
            if (Tipo.value=="float")	bResult=checaFloat(strValue);
			if (Tipo.value=="date")		bResult=checaData(strValue);
			if (Tipo.value=="cep")		bResult=true;
			if (Tipo.value=="fone")		bResult=true;
			if (Tipo.value=="custom")	bResult=true;
		}
		else
			bResult=true;

                if (bResult==true)
		{
			// Consistência adicional, se houver
			if (o.attributes["onvalid"]!=undefined)
			{
				var re = /this/gi;
				eval("bResult=" + o.attributes["onvalid"].value.replace(re, "o"));
			}
		}
		else
		{
			if (o.attributes["errmsg"]==undefined)
				alert("Campo " + o.name + " inválido!");
			else
				alert(o.attributes["errmsg"].value);

			if (o.type!="hidden") o.focus();
		}
	}
	else
	{
		if ((o.attributes["required"]!=undefined) && (o.attributes["required"].value=="yes"))
		{
			bResult=false;

			// Se não tem mensagem de requerido, assume o padrão
			if (o.attributes["nonemsg"]==undefined)
				alert("O campo " + o.name + " é obrigatório!");
			else
				alert(o.attributes["nonemsg"].value);

			if (o.type!="hidden") o.focus();
		}
		else
			bResult=true;

	}

	return bResult;
}

/*
 |******************************************************************|
 |                                                                  |
 |    Copyright 1998-00 © InterWeb - Todos direitos reservados      |
 |          _                                                       |
 |         | | _  _  _____   __  ___  _  _   __   _                 |
 |         | || \| ||_   _| / _\| _ \| || | / _\ | |       Y2k      |
 |         | ||    |  | |  |  _/|   /|    ||  _/ | _\               |
 | W W W . |_||_|\_|  |_|   \__||_|_\|_/\_| \__| |__/ . C O M . B R |
 |                                                                  |
 |                                                                  |
 |      EQUIPE INTERWEB - WebSite....:  http://www.interweb.com.br  |
 |                        Email......:  info@interweb.com.br        |
 |                                                                  |
 |                                    (Desde 10/12/1998 - 17:53 hs) |
 |******************************************************************|
*/
function checaCPF (CPF)
{
	if (CPF.length != 11 || CPF == "00000000000" || CPF == "11111111111" ||
		CPF == "22222222222" ||	CPF == "33333333333" || CPF == "44444444444" ||
		CPF == "55555555555" || CPF == "66666666666" || CPF == "77777777777" ||
		CPF == "88888888888" || CPF == "99999999999")
		return false;

	soma = 0;

	for (i=0; i < 9; i ++)
		soma += parseInt(CPF.charAt(i)) * (10 - i);

	resto = 11 - (soma % 11);

	if (resto == 10 || resto == 11)
		resto = 0;

	if (resto != parseInt(CPF.charAt(9)))
		return false;

	soma = 0;

	for (i = 0; i < 10; i ++)
		soma += parseInt(CPF.charAt(i)) * (11 - i);

	resto = 11 - (soma % 11);

	if (resto == 10 || resto == 11)
		resto = 0;

	if (resto != parseInt(CPF.charAt(10)))
		return false;

	return true;
 }

 function checaCNPJ (CNPJ)
 {
      if(CNPJ.length == 14)
      {
            var j=5;
            var soma=0;
            for (i=0; i < 12; i++)
            {
                  soma += j-- * (CNPJ.charAt(i) - '0');
                  if (j < 2) j = 9;
            }

            soma = 11 - (soma % 11);
            if (soma > 9) soma = 0;
            if (soma == (CNPJ.charAt(12) - '0'))
            {
                  soma = 0;
                  for (i=0, j = 6; i < 13; i++)
                  {
                        soma += j-- * (CNPJ.charAt(i) - '0');
                        if (j < 2) j = 9;
                  }

                  soma = 11 - (soma % 11);
                  if (soma > 9) soma = 0;
                  if (soma == (CNPJ.charAt(13) - '0'))
                        return true;
            }
      }
      return false;
 }

 function checaNum(sample)
 {
	 return (!isNaN(sample));
 }

 function checaFloat(sample)
 {
        return (!isNaN(sample));
 }

function y2k(number) { return (number < 1000) ? number + 1900 : number; }

 function checaData(sample)
 {
	// Isola os componentes da data
	var dia = new Number(sample.substring(0, 2));
	var mes = new Number(sample.substring(3, 5))-1;
	var ano = new Number(sample.substring(6, 10));

	var test = new Date(ano,mes,dia);

    if ( (y2k(test.getYear()) == parseInt(ano)) &&
         (parseInt(mes) == test.getMonth()) &&
         (parseInt(dia) == test.getDate()) )
    {
            // Verifica os separadores
            if ((sample.charAt(2)=="/") && (sample.charAt(5)=="/"))
                return true;
            else
                return false;
    }
    else
        return false;
 }


// ***** Funções de máscara *****
// ******************************
function onloadForm()
{
      var curForm = document.forms[0];
      var curElem = new Number(0);
	  var curObj = null;

      while (curElem<curForm.length)
      {
			curObj= curForm.elements[curElem];

			if (curObj.type=="text")
			{
				var curMask=curObj.attributes["mask"];
				var curTipo=curObj.attributes["tipo"];

				// Se a máscara não está definida
				if ((curMask==undefined) && (curTipo!=undefined))
				{
					var curMask=document.createAttribute("mask");

					// Se é um dos tipos predefinidos, assume a máscara padrão
					if (curTipo.value=="date")	curMask.value="99/99/9999";
					if (curTipo.value=="cpf")	curMask.value="999.999.999-99";
					if (curTipo.value=="cnpj")	curMask.value="99.999.999/9999-99";
					if (curTipo.value=="cep")	curMask.value="99999-999";
					if (curTipo.value=="fone")	curMask.value="(999)9999-9999";

					curObj.attributes.setNamedItem(curMask);
				}

				// Inicializa a máscara dos objetos que a contenham
				if (curMask!=undefined)
				{
                                        if ((curTipo.value=="float") || (curTipo.value=="number") || (curTipo.value=="fone"))
                                                curObj.style.textAlign="right";

					// Inicializa a máscara
                                        curObj.defaultvalue=curObj.value.trim();

                                        // Verifica se tem ponto decimal para floats
                                        if ((curTipo.value=="float") && (curObj.defaultValue.indexOf(".")!=-1))
                                        {
                                                var dummyStr=curObj.defaultvalue;
                                                var dotPos=dummyStr.indexOf(".");

                                                curObj.defaultvalue=dummyStr.substring(0, dotPos) + "," + dummyStr.substring(dotPos+1, dummyStr.length);
                                        }

					edformat(curObj);
				}

				// Registra as funções de handling
				if (curTipo!=undefined)
				{
					curObj.onkeydown=onbackspace;
					curObj.onkeypress=ontype;
				}
			}

			curElem++;
	  }

	  return true;
}

// Função para capturar a letra digitada para o controle
function ontype(evt)
{
	var obj = (IExplore ? event.srcElement: evt.target);

        if (obj.readOnly==true) return true;

	if (obj.attributes["mask"]==undefined) return true;

	// Obtém a tecla pressionada
	var curKey = (Netscape? evt.which: event.keyCode);

	// No Netscape, os eventos são gerados antes de se executar
	// a função manipuladora, diferentemente do IE, que gera depois
	// (e, ainda assim, se a função manipuladora retornar false)
	if ((Netscape) && (curKey==8))	edformat(obj);

	if ((curKey>32) && (curKey<127))
	{
                if (IExplore)
                {
                        var curSelection = document.selection.createRange();

                        if ((curSelection!=null) && (curSelection.text==obj.value))
                        {
                                obj.defaultvalue=null;
                                document.selection.empty();
                        }
                }

                // Inclue no campo de edicao
		obj.defaultvalue+=String.fromCharCode(curKey);

		edformat(obj);

		// Impede que outros handlers capturem esse evento
		if (IExplore)
			event.cancelBubble=true;

		return false;

	}

	return true;
}

function onbackspace(evt)
{
	var obj = (IExplore ? event.srcElement: evt.target);

    if (obj.readOnly==true) return true;

	if (obj.attributes["mask"]==undefined) return true;

	// Obtém a tecla pressionada
	var curKey = (Netscape? evt.which: event.keyCode);
	var bProcessed=false;

	switch(curKey)
	{
		case 8:
		{
			// Backspace
			if (obj.defaultvalue.length>0)
				obj.defaultvalue = obj.defaultvalue.substring(0, (obj.defaultvalue.length-1));

			bProcessed=true;

			break;
		}
		case 46:
		{
			// Delete
			obj.defaultvalue="";
			bProcessed=true;
			break;
		}
		case 13:
		{
			bProcessed=true;
			defaultClick(evt);
			break;
		}
	}

	if (bProcessed)
	{
		edformat(obj);

		if (IExplore) event.cancelBubble=true;
	}

	return (!bProcessed);
}

function edformat(e)
{
	// Inicializando as variaveis
	var strResult = new String("");

	var strMask = new String(e.attributes["mask"].value);
	var strEdit = new String(e.defaultvalue);

	if (strEdit=="undefined")
	{
		strEdit="";
		e.defaultvalue=strEdit;
	}

	var bInvertMask = new Boolean();

	var edTipo=e.attributes["tipo"].value;

	if ((edTipo=="number") || (edTipo=="fone") || (edTipo=="float"))
		bInvertMask=true;
	else
		bInvertMask=false;

	var iStep = new Number((bInvertMask ? -1:1));

	// Variáveis para o campo de máscara
	var iMaskCursor = new Number((bInvertMask ? strMask.length-1:0));
	var iMaskLen = new Number(strMask.length);

	// Variáveis para o campo de edição
	var iEditCursor = new Number((bInvertMask ? strEdit.length-1:0));
	var iEditLen = new Number(strEdit.length);

	var bSair = new Boolean();

	// Variáveis para os campos flutuantes
	var bFloat = new Boolean();

	bFloat=((edTipo=="float") || (edTipo=="currency"));
	bSair=false;


        // Acertos na posição da máscara para o caso de campos float:
        if (bFloat)
        {
                var editCommaPos=strEdit.indexOf(",");
                var maskCommaPos=strMask.indexOf(",");

                if (editCommaPos==-1)
                        iMaskCursor=maskCommaPos-1;
                else
                {
                        var editFracLength=(strEdit.length-editCommaPos);
                        var maskFracLength=(strMask.length-maskCommaPos);

                        if (editFracLength>maskFracLength) 
                        {
                                // Elimina o caracter sobrando
                                e.defaultvalue=strEdit.substring(0, editCommaPos+maskFracLength);
                                return edformat(e);
                        }
                        else
                                iMaskCursor=maskCommaPos+editFracLength-1;
                }

        }

	if (iMaskCursor<0) iMaskCursor=0;

	while (!bSair)
	{
		// Verifica qual e o caractere da mascara
		var curMask = strMask.charAt(iMaskCursor);

		// Verifica qual e o caractere do edit
		var curEdit = null;

		if ((iEditCursor<iEditLen) && (iEditCursor>=0))
			curEdit=strEdit.charAt(iEditCursor);

                if (curEdit!=null)
                {
                        switch(curMask)
                        {
                                case "9":
                                {
                                        // Consiste o valor numerico
// || (curEdit=='-')
                                        if ((curEdit<48) || (curEdit>57) ||
                                                ((curEdit==',') && (bFloat) && (strEdit.substring(0, iEditCursor).indexOf(',')==-1)))
                                                
                                        {
                                                if (bInvertMask)
                                                        strResult=curEdit + strResult;
                                                else
                                                        strResult+=curEdit;

                                                if ((curEdit==',') || (curEdit=='-'))
                                                        iMaskCursor-=iStep;
                                        }
                                        else
                                        {
                                                // Elimina o caractere espurio
                                                e.defaultvalue=strEdit.substring(0, iEditCursor) + strEdit.substring(iEditCursor+1, strEdit.length+1);
                                                return edformat(e);
                                        }
                                        iEditCursor+=iStep;

                                        break;
                                }
                                case "X":
				{
					if (bInvertMask)
						strResult=curEdit + strResult;
					else
						strResult+=curEdit;

					iEditCursor+=iStep;

                                        break;
				}
                                default:
                                {
                                        // Caracteres normais da mascara
                                        if (bInvertMask)
                                        {
                                                if ((bFloat) && (curEdit=='-'))
                                                {
                                                        strResult=curEdit + strResult;
                                                        iEditCursor+=iStep;
                                                }
                                                else
                                                {
                                                        if ((!bFloat) || (curMask!=','))
                                                                strResult=curMask + strResult;
                                                }
                                        }
                                        else
                                                strResult+=curMask;
                                }
                        } // endswitch
                } // endif

		iMaskCursor+=iStep;

		// O loop acaba quando o cursor da máscara atinge um
		// dos extremos: 0 ou length
		if (bInvertMask)
		{
			// Atingido o inicio da máscara
			if (iMaskCursor<0)
			{
				// Se o campo de edição ainda tem posições, despreza
				if (iEditCursor>=0)
				{
					e.defaultvalue=strEdit.substring(0, strEdit.length-1);
					return edformat(e);
				}
				bSair=true;
			}
		}
		else
		{
			// Alcançado o fim do campo de edição
			if (iMaskCursor>iMaskLen)
			{
				// Se o campo de edição ainda tem posições, despreza
				if (iEditCursor<iEditLen)
				{
					e.defaultvalue=strEdit.substring(0, iEditCursor);
					return edformat(e);
				}
				bSair=true;
			}
		}
	}

	e.value=strResult;

	return false;
}

function formatMask(strEdit, strMask, tipo)
{
        var internalEdit=strEdit;

        // Acertos na posição da máscara para o caso de campos float:
        if (tipo=="float")
        {
                // Se a máscara tem posições decimais, corrige o valor
                // do strEdit, adicionando zeros à direita para preencher
                // o comprimento
                var maskCommaPos=strMask.indexOf(",");
                var editCommaPos=internalEdit.indexOf(".");

                if (maskCommaPos!=-1)
                {
                        var pattern="000000000000000000000000000";
                        var editFracLength=(internalEdit.length-editCommaPos);
                        var maskFracLength=(strMask.length-maskCommaPos);

                        if (editCommaPos==-1)
                        {
                                editFracLength=1;
                                internalEdit+=".";
                        }

                        if (editFracLength<maskFracLength)
                                internalEdit+=pattern.substring(0, maskFracLength-editFracLength);
                }
        }

	// Inicializando as variaveis
	var strResult = new String("");
	var bInvertMask = new Boolean();

	if ((tipo=="number") || (tipo=="fone") || (tipo=="float"))
		bInvertMask=true;
	else
		bInvertMask=false;

	var iStep = new Number((bInvertMask ? -1:1));

	var iMaskCursor = new Number((bInvertMask ? strMask.length-1:0));
	var iEditCursor = new Number((bInvertMask ? internalEdit.length-1:0));

	var iMaskLen = new Number(strMask.length);
	var iEditLen = new Number(internalEdit.length);
	var bSair = new Boolean();

	bSair=false;

        // Variáveis para os campos flutuantes
	var bFloat = new Boolean();

	bFloat=((tipo=="float") || (tipo=="currency"));
	bSair=false;
        

	if (iMaskCursor<0) iMaskCursor=0;

	while (!bSair)
	{
		// Verifica qual e o caractere da mascara
		var curMask = strMask.charAt(iMaskCursor);

		// Verifica qual e o caractere do edit
		var curEdit = null;

		if ((iEditCursor<iEditLen) && (iEditCursor>=0))
			curEdit=internalEdit.charAt(iEditCursor);

                if (curEdit!=null)
                {
                        switch (curMask)
                        {
                                case "9":
                                {
                                        // Consiste o valor numerico
                                        if ((curEdit<48) || (curEdit>57) || (curEdit=='-'))
                                        {
                                                if (bInvertMask)
                                                        strResult=curEdit + strResult;
                                                else
                                                        strResult+=curEdit;

                                        }
                                        else
                                        {
                                                if (curEdit=='.')
                                                        iMaskCursor-=iStep;
                                        }
                                        iEditCursor+=iStep;

                                        break;
                                }

                                case "X":
				{
					if (bInvertMask)
						strResult=curEdit + strResult;
					else
						strResult+=curEdit;

					iEditCursor+=iStep;

                                        break;
				}

//                                case "-":
//                                {
//                                        if (curEdit=="-")
//                                        {
//                                                if (bInvertMask)
//                                                        strResult=curEdit + strResult;
//                                                else
//                                                        strResult+=curEdit;
//
//                                                iEditCursor+=iStep;
//                                        }
//
//                                        break;
//
//                                }
                                default:
                                {
                                        // Caracteres normais da mascara
                                        if (bInvertMask)
                                        {
                                                if ((bFloat) && (curEdit=='-'))
                                                {
                                                        strResult=curEdit + strResult;
                                                        iEditCursor+=iStep;
                                                }
                                                else
                                                        strResult=curMask + strResult;
                                        }
                                        else
                                                strResult+=curMask;
                                }
                        } // endswitch
		} // endif

		iMaskCursor+=iStep;

		// O loop acaba quando o cursor da máscara atinge um
		// dos extremos: 0 ou length
		if (bInvertMask)
		{
			// Atingido o inicio da máscara
			if (iMaskCursor<0)
			{
				// Se o campo de edição ainda tem posições, despreza
				bSair=true;
			}
		}
		else
		{
			// Alcançado o fim do campo de edição
			if (iMaskCursor>iMaskLen)
			{
				// Se o campo de edição ainda tem posições, despreza
				bSair=true;
			}
		}
	}

	return strResult;
}
// Fim das funções de máscara





function stripFormatForm()
{
      var curForm = document.forms[0];
      var curElem = new Number(0);
      var curObj = null;

      while (curElem<curForm.length)
      {
            curObj = curForm.elements[curElem];

			if (curObj.attributes["mask"]!=undefined)
				curObj.value=stripFormat(curObj);

            curElem++;
      }

      return true;
}
/* Elimina os caracteres de formatação referentes a mascara
 * de edição.  Para isso, o controle deve ter uma propriedade
 * mask definida
*/

function stripFormat(o)
{
        if (o.attributes["tipo"]==null)
                return o.value;

        var tipo=o.attributes["tipo"].value;

        if (tipo=="float")
        {
                // Troca eventuais vírgular por ponto decimal
                var value=o.defaultvalue;
                var commaPos=value.indexOf(",");

                if (commaPos!=-1)
                {
                        var newValue=value.substring(0, commaPos) + "." + value.substring(commaPos+1, value.length);
                        return newValue;
                }
                else
                        return o.defaultvalue;
        }

        if (tipo=="date")
                return o.value;

        return internal55(o);
}


function internal55(o)
{
	var objFormat = o.attributes["mask"];
	var sample = o.value;
        var tipo=o.attributes["tipo"];
	var strResult = new String();
	var iCursor = new Number(0);
	var bFound = new Boolean();
        var pattern="                                                      ";

	bFound=false;

	if(objFormat!=undefined)
	{
		var format=objFormat.value;
		var objTipo = o.attributes["tipo"].value;

                if (sample.length<format.length)
                {
                        var diff=format.length-sample.length;

                        if (objTipo=="number")
                                sample=pattern.substring(0, diff) + sample;
                        else
                                sample=sample + pattern.substring(0, diff);
                }

		while (iCursor<format.length)
		{
			var curFormat=format.charAt(iCursor);
			var curChar=sample.charAt(iCursor);

			// Verifica se é um dos caracteres de template
			if ((curFormat=="9") ||
				(curFormat=="X") ||
				((curFormat==",") && ((objTipo=="number") || (objTipo=="float"))))
			{
				// No caso específico do virgula, trocamos por ponto
				if (curFormat==",")
					strResult+=".";
				else
				{
					if ((curFormat=="9") && (curChar==","))
						strResult+=".";
					else
					{
						if (curChar!=" ")
							bFound=true;

						if ((curChar!=" ") || (bFound))
							strResult+=curChar;
					}
				}

			}
			iCursor++;
		}

		// Se não há caracteres na string, elimina-a
		if (!bFound)
			strResult="";
	}
	else
		strResult=sample;

	return strResult;
}



// ******* Rotinas de submit ******
// ********************************
function buildRequest()
{
      bFirst = true;
      strRequest = "";

      for(iElement=0; iElement < document.forms[0].elements.length; iElement++)
      {
            curItem = document.forms[0].elements[iElement];

            if ((curItem.name.length>0) && (curItem.disabled==false))
            {
                  if (bFirst==false)
                        strRequest+="&";

                  switch(curItem.type)
                  {
                        case "select-multiple":
                        {
                              var iSelectedCount=0;
                              for(var iCursor=0;iCursor<curItem.options.length;iCursor++)
                              {
                                    if (curItem.options[iCursor].selected)
                                    {
                                          if (iSelectedCount>0) strRequest+="&";
                                          iSelectedCount++;
                                          strRequest+=curItem.name + "_" + iSelectedCount + "=" + curItem.options[iCursor].value;
                                    }
                              }

                              // Inclue o contador de itens
                              if (iSelectedCount>0) strRequest+="&";
                              strRequest+= curItem.name + "_count=" + iSelectedCount;
                              break;
                        }

                        case "select-one":
                                if (curItem.options.length>0)
				        strRequest+=curItem.name + "=" + curItem.options[curItem.selectedIndex].value;
			        else
				        strRequest+=curItem.name + "=";
                              break;
                        case "checkbox":
                              strRequest+=curItem.name + "=" + curItem.checked;
                              break;
                        default:
                              strRequest+=curItem.name + "=" + curItem.value;
                  }

                bFirst=false;
            }
      }

	  return strRequest;
}


function formSubmit()
{
      window.location.replace(document.forms[0].action + "?" + buildRequest());
}

// Retorna o dia de hoje, formatado como: "DDMMYYYY"
function formatToday()
{
      var now = new Date();
      var dia = new String(now.getDay());
      var mes = new String(now.getMonth());
      var ano = new String(now.getYear());

      var strResult = new String("");

      if (now.getDate()<10) strResult+="0";
      strResult+=now.getDate();

      if (now.getMonth()<10) strResult+="0";
      strResult+=(now.getMonth()+1);

      if (now.getYear()<1000)
            strResult+=(now.getYear()+1900);
      else
            strResult+=now.getYear();

      return strResult;
}


// Dispara evento de click para um elemento default no documento
function defaultClick(e)
{
	var keyCode=(IExplore ? window.event.keyCode:e.which);
	var defaultControl=document.getElementById("defaultEnter");

	if ((keyCode==13) && (defaultControl!=undefined))
	{
		var handler=null;

		if (defaultControl.attributes["onclick"]!=undefined)
			handler=defaultControl.attributes["onclick"].value;
		else
		{
			if (defaultControl.attributes["onClick"]!=undefined)
				handler=defaultControl.attributes["onClick"].value;
		}

		if (handler!=null)
		{
			// Se tem mais de uma instrução, executa apenas a primeira
			// (a segunda costuma ser o 'return false')
			if (handler.indexOf(';')!=-1)
				eval(handler.substring(0, handler.indexOf(';')));
			else
				eval(handler);

			return false;
		}
	}
	else
	{
		if (IExplore)
			return true;
	}
}

// Compara dois campos de tipo="date"
function compareDateFields(dt1, dt2)
{
    // Checagem dos parâmetros
	if (dt1.attributes["tipo"].value!="date") return 0;
	if ((dt2!=undefined) && (dt2.attributes["tipo"].value!="date")) return 0;

	if (dt2!=undefined)
            return compareDates(stripFormat(dt1), stripFormat(dt2));
	else
            return compareDates(stripFormat(dt1), dt2);
}

function compareDates(dt1, dt2)
{
        var dia = new Number(dt1.substring(0, 2));
	var mes = new Number(dt1.substring(3, 5))-1;
	var ano = new Number(dt1.substring(6, 10));

	// Cria o objeto de data
	var test = new Date(ano,mes,dia);

	// Cria o outro objeto de data com base nos dias
	var other;

	if (dt2!=undefined)
	{
                var dia = new Number(dt2.substring(0, 2));
        	var mes = new Number(dt2.substring(3, 5))-1;
	        var ano = new Number(dt2.substring(6, 10));

		// Cria o objeto de data
		other = new Date(ano,mes,dia);
	}
	else
		other= new Date(now.getYear() + (IExplore ? 0:1900), now.getMonth(), now.getDate());

	return test.compare(other);

}

// Compara dois campos de tipo="date"
function daysBetweenFields(dt1, dt2)
{
        // Checagem dos parâmetros
	if (dt1.attributes["tipo"].value!="date") return 0;
	if ((dt2!=undefined) && (dt2.attributes["tipo"].value!="date")) return 0;

	if (dt2!=undefined)
            return daysBetween(stripFormat(dt1), stripFormat(dt2));
	else
            return daysBetween(stripFormat(dt1), dt2);
}

function daysBetween(dt1, dt2)
{
	var dia = new Number(dt1.substring(0, 2));
	var mes = new Number(dt1.substring(3, 5))-1;
	var ano = new Number(dt1.substring(6, 10));

	// Cria o objeto de data
	var test = new Date(ano,mes,dia);

	// Cria o outro objeto de data com base nos dias
	var other;

	if (dt2!=undefined)
	{
		var dia = new Number(dt2.substring(0, 2));
		var mes = new Number(dt2.substring(3, 5))-1;
		var ano = new Number(dt2.substring(6, 10));

		// Cria o objeto de data
		other = new Date(ano,mes,dia);
	}
	else
		other= new Date(now.getYear() + (IExplore ? 0:1900), now.getMonth(), now.getDate());

	return test.countDays(other);

}

String.prototype.trim = function()
{
      var str = this.replace(/^\s*/, "");
      str = str.replace(/\s*$/, "");
      return str;
}

Date.prototype.compare = function (otherDate)
{
	var thisValue=this.getTime();
	var otherValue=otherDate.getTime();

	if (thisValue==otherValue)
		return 0;
	else
	{
		if (thisValue<otherValue)
			return -1;
		else
			return 1;
	}
}

Date.prototype.countDays = function (otherDate)
{
        var k = 24 * 60 * 60 * 1000;            // Quantidade de milissegundos num dia
        var thisValue=this.getTime();
        var otherValue=otherDate.getTime();

        return (Math.round(Math.abs(thisValue-otherValue)/k));
}



function showPanel(panel)
{
        var lstShow=document.getElementsByName(panel + "_on");
        var lstHide=document.getElementsByName(panel + "_off");

        refreshPanel(lstShow, lstHide);
}

function hidePanel(panel)
{
        var lstShow=document.getElementsByName(panel + "_off");
        var lstHide=document.getElementsByName(panel + "_on");

        refreshPanel(lstShow, lstHide);
}

function refreshPanel(lstShow, lstHide)
{
        for(curElem=0;curElem<lstShow.length;curElem++)
        {
                lstShow[curElem].style.display="";
        }

        for(curElem=0;curElem<lstHide.length;curElem++)
        {
                lstHide[curElem].style.display="none";
        }
}