
var date_Week = new Array('Dom','Seg','Ter','Qua','Qui','Sex','Sáb');
var date_Month = new Array('Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro');

function setCentury(field)
{
  var oDate = new Date();
  var fieldAux = field.value.substr(6,4);
  while(fieldAux.search("_") != -1) fieldAux = fieldAux.replace("_","");
  fieldAux = (fieldAux == "" ? (oDate.getFullYear()+"") : fieldAux );
  if(fieldAux.length < 4)
  {
    fieldAux = parseInt(fieldAux)+"";
    fieldAux = strzero(fieldAux.substr(0,2),2);
    year = (oDate.getFullYear() + '').substr(0,2);
    year = ((fieldAux > 49) ? (year-1) : year) + '';
    fieldAux = year + fieldAux;
  }
  return fieldAux;
}
function setMonth(field)
{
  var oDate = new Date();
  var fieldAux = field.value.substr(3,2);
  while(fieldAux.search("_") != -1) fieldAux = fieldAux.replace("_","");
  fieldAux = (fieldAux == "" || fieldAux.valueOf() == 0 ? ((oDate.getMonth()+1)+"") : fieldAux );
  return strzero(fieldAux,2);
}
function setDay(field)
{
  var oDate = new Date();
  var fieldAux = field.value.substr(0,2);
  while(fieldAux.search("_") != -1) fieldAux = fieldAux.replace("_","");
  fieldAux = (fieldAux == "" || fieldAux <= 0 ? (oDate.getDate()+"") : fieldAux );
  return strzero(fieldAux,2);
}
function setHour(field,type)
{
  var oDate = new Date();
  var fieldAux = field.value.substr(type=="Time" ? 0 : 11,2);
  while(fieldAux.search("_") != -1) fieldAux = fieldAux.replace("_","");
  fieldAux = (fieldAux == "" ? (oDate.getHours()+"") : fieldAux );
  return strzero(fieldAux,2);
}
function setMinutes(field,type)
{
  var oDate = new Date();
  var fieldAux = field.value.substr(type=="Time" ? 3 : 14,2);
  while(fieldAux.search("_") != -1) fieldAux = fieldAux.replace("_","");
  fieldAux = (fieldAux == "" ? (oDate.getMinutes()+"") : fieldAux );
  return strzero(fieldAux,2);
}
function setSeconds(field,type)
{
  var oDate = new Date();
  var fieldAux = field.value.substr(type=="Time" ? 6 : 17,2);
  while(fieldAux.search("_") != -1) fieldAux = fieldAux.replace("_","");
  fieldAux = (fieldAux == "" ? (oDate.getSeconds()+"") : fieldAux );
  return strzero(fieldAux,2);
}
function DateTimeKeyPress(field,type,errorDateMsg)
{
  var iLength = type == "DateTime" ? 19 : (type == "Date" ? 10 : 8 );
  var posCursor = getpos(field), fieldAux, pos;
  var oDate = new Date();
  if(event.keyCode==47 && type!="Time")
  {
    if(posCursor <= 3){pos=0};
    else if(posCursor<=6){pos=3};

    if(posCursor<6)
    {
      fieldAux = field.value.substr(pos,2);
      while(fieldAux.search("_") != -1) fieldAux = fieldAux.replace("_","");
      if(fieldAux != "")
      {
        field.value = ( pos == 3 ? field.value.substr(0,2) + "/": "" ) + 
                      strzero(fieldAux,2)+field.value.substr(pos+2);
        SetCursorToPos(field,posCursor+1);
      }
    }  
    event.returnValue = false;
  }
  else if(event.keyCode==32)
  {
    sDate = setDay(field) + "/" + setMonth(field) + "/" + setCentury(field);
    sTime = setHour(field,type) + ":" + setMinutes(field,type) + ":" + setSeconds(field,type);
    field.value = type == "DateTime" ? sDate + " " + sTime : 
                  type == "Date" ? sDate : sTime ;
    bCheckDate = type == "Time" ? true : CheckDate(field.value.substr(0,10));
    if(!bCheckDate) alert(errorDateMsg);
    SetCursorToPos(field, 19);
    event.returnValue = false;
  }
  else if( event.keyCode < 48 || event.keyCode > 57) event.returnValue = false;
  else if(posCursor>=iLength) event.returnValue = false;
  else
  {
    if(posCursor==2 || posCursor==5 || posCursor==10 || posCursor==13 || posCursor==16)
    {
      ++posCursor
    }   
    field.value = field.value.substr(0,posCursor) + 
                  String.fromCharCode(event.keyCode) +
                  field.value.substr(posCursor+1);
    SetCursorToPos(field,posCursor+1);
    event.returnValue = false;
  }
}
function DateTimeKeyDown(field,type)
{
  var posCursor = getpos(field), fieldAux1, fieldAux2, posAux;
  var iLength = type == "DateTime" ? 19 : (type == "Date" ? 10 : 8 );
  if( event.keyCode == 8 && posCursor > 0)
  {
    if(posCursor==3 || posCursor==6 || posCursor==11 || posCursor==14 || posCursor==17)
    {
      --posCursor
    }   
    field.value = field.value.substr(0,posCursor-1) + "_" +
                  field.value.substr(posCursor);
    SetCursorToPos(field,posCursor-1);
    event.returnValue = false;
  }
  if( event.keyCode == 46 && posCursor < iLength)
  {
    if(posCursor<2) posAux = 2;
    else if(posCursor > 2  && posCursor<5)  posAux = 5;
    else if(posCursor > 5  && posCursor<10) posAux = 10;
    else if(posCursor > 10 && posCursor<13) posAux = 13;
    else if(posCursor > 13 && posCursor<16) posAux = 16;
    else if(posCursor > 16) posAux = iLength;
    if(posCursor!=2 && posCursor!=5 && posCursor!=10 && posCursor!=13 && posCursor!=16)
    {
      fieldAux1 = field.value.substr(0,posAux)
      fieldAux2 = field.value.substr(posAux)
      field.value = fieldAux1.substr(0,posCursor)+fieldAux1.substr(posCursor+1)+"_"+fieldAux2;
    }
    SetCursorToPos(field,posCursor);
    event.returnValue = false;
  }
  if( event.keyCode == 46 && event.ctrlKey)
  {
    field.value = type=="DateTime" ? "__/__/____ __:__:__" : 
                  type=="Date" ? "__/__/____" : "__:__:__";
    SetCursorToPos(field,0);
    event.returnValue = false;
  }
}
function DateTimeBlur(field,type,errorDateMsg,errorTimeMsg)
{
   var bValid = true;
   var oDate  = new Date();
//alert('field='+field.name+'  type='+type+'  errorDateMsg='+errorDateMsg+'  errorTimeMsg='+errorTimeMsg);
   if(type=="Date" || type=="DateTime")
   {
      sDateValue = field.value.substr(0,10);
      sAux = sDateValue;
      while(sAux.search("/") != -1) sAux = sAux.replace("/","");
      while(sAux.search("_") != -1) sAux = sAux.replace("_","");
      if( sAux != "" )
      {
         sDateValue = setDay(field) + "/" + setMonth(field) + "/" + setCentury(field);
         field.value = sDateValue + field.value.substr(10);
      }   
      if( CheckDate(sAux == "" ? sAux : sDateValue));
      else
      {
         alert(errorDateMsg);
         return goToField(field,11);
      }
   }
   
   if(type=="Time" || type=="DateTime")
   {
      sTimeValue = field.value.substr(field.value.length-8)
      if(sTimeValue=="__:__:__") return true;
      while(sTimeValue.indexOf("_") != -1) sTimeValue = sTimeValue.replace("_"," ");
      if(sTimeValue.length < 5) 
      {
         alert(errorTimeMsg);
         return goToField(field,19);
      }
      sHAux = sTimeValue.substr(0,2);
      sHAux = strzero(sHAux=="  " ? "0" : parseInt(sHAux,10) + "",2);
      sMAux = sTimeValue.substr(3,2);
      sMAux = strzero(sMAux=="  " ? "0" : parseInt(sMAux,10) + "",2);
      sSAux = sTimeValue.substr(6,2);
      sSAux = strzero(sSAux=="  " ? "0" : parseInt(sSAux,10) + "",2);
      sTimeValue = sHAux + ":" + sMAux + ":" + sSAux;
      if(sTimeValue.substr(0,2) < 0 || sTimeValue.substr(0,2) > 23) bValid = false;
      if(sTimeValue.substr(3,2) < 0 || sTimeValue.substr(3,2) > 59) bValid = false;
      if(sTimeValue.substr(6,2) < 0 || sTimeValue.substr(6,2) > 59) bValid = false;
      if(!bValid)
      {
         alert(errorTimeMsg);
         return goToField(field,19);
      }
      field.value = (type=="DateTime" ? field.value.substr(0,11) : "") + sTimeValue;
   }
}
function CheckDate(date)
{
   s= date;
   if(s.length == 0) return true;
   var i=0;
   tm= new Array();
   tm[0]= '';tm[1]= '';tm[2]='';tm[3]='';
   sep='';
   md = 0 ;
   while (i< s.length)
   {
      ch= s.substring(i, i + 1);
      if( ch<='9' && ch>='0') tm[md] += ch;
      else if (sep=='') 
      {
         if(ch=='.' || ch=='/' || ch=='-') 
         {
            md++;
            sep=ch;
         }
      }
      else if (ch==sep) 
      {
         md++;
         if(md>2) return false;
      }
      else return false;
      i++;
   }
   if(tm[3]!='') return false;
   if(tm[0].valueOf()<1 || tm[0].valueOf()>31) return false;
   if(tm[1].valueOf()<1 || tm[1].valueOf()>12) return false;
   if((tm[1]==4 || tm[1]==6 || tm[1]==9 || tm[1]==11) && tm[0]==31) return false;
   if(tm[1]==2) 
   {
      isleap = (tm[2] % 4 == 0 && (tm[2] % 100 != 0 || tm[2] % 400 == 0));
      if (tm[0]>29 || (tm[0]==29 && !isleap)) return false;
   }
   return (tm[3]=='');
}