SIgGroupNotInChangingMode  = 'Registro não está no modo de alteração';
SIgParentNotInChangingMode = 'Registro mestre não está no modo de alteração';
SIgChangesPending          = 'Atenção! Se você continuar todas as modificações pendentes serão perdidas! Clique em "Cancelar" para não perder estas modificações';
SIgValidationErrors        = 'Atenção! Os seguintes erros ocorreram durante a validação deste registro:';
SIgPageChangesPending      = 'Você tem que gravar o registro antes de poder mudar de página!';
SIgNewWindowNotAllowed     = 'Atenção! Não é possível iniciar nova janela desta forma. Se necessário, faça outro login. A janela corrente será considerada desconhecida!';
SAjaxWaitMsg               = 'Aguarde...';
SAjaxReadyMsg              = 'Ok!';

ComboTimeout = 3000;

AjaxWaiting = false;

SID="";

var is_gecko = /gecko/i.test(navigator.userAgent);
var is_ie    = /MSIE/i.test(navigator.userAgent);

PPN = '_PPN_'; // PropName Separator
LRF = '_LRF_'; // Lookup ResultField  Separator
DRF = '_DRF_'; // DepLookup ResultField Separator
TBO = '_TBO_'; // TabOrder Separator para RenderSelectList
STRMAXLEN = 65535; // Usando somente nos substrings
LenTBO = TBO.length;
NBSP = '&nbsp';
CODED_NL = '<BR>';
ErrorCount = 0;
ErrorMessages = "";
ReturnValue = true;
ExceptionMessage = "";
SystemMessage = "";
DefaultControlId = -1;
MAGICCHAR = "|";
MAGICCHAR2 = "#";
SINGLE_QUOTE = "<SQ>";
DOUBLE_QUOTE = "<DQ>";
PARSEPCHAR = '¦';
AListStr = "";
AListStr2 = "";
AListStr3 = "";
AListStr4 = "";
AListStr5 = "";
ARenderSelectList = "";
ARenderGridSelectList = "";
AChangeStatusGroupList = "";
ARenderTopControls = "";
AButtonNewClick = null;
AWindowHRef = "";
ABeforeSubmit = "";
APgcBeforeSubmit = "";
AFormHasDefault = 0;
AlreadySubmitting = 0;
AComboMustSubmit = false;
jeClick = 0
jeChange = 1
IgZoomLevel = 100;
IgOldZoom = 100;
IgResTM = 0;
IgResNext = null;
ALastFormId = "";
IgIsNewContext = false;
AEnqueuedPageChangeIdx = -1;
AEnqueuedPageChangeCtr = null;
AAccessKey = "";
AStartCaption = "";
AEndCaption = "";
ACountGrid=0;

StrIdCompIndex        = 00;
StrIdParentIndex      = 01;
StrIdLeft             = 02;
StrIdTop              = 03;
StrIdWidth            = 04;
StrIdHeight           = 05;
StrIdValue            = 06;
StrIdVisible          = 07;
StrIdEnabled          = 08;
StrIdAlignment        = 09;
StrIdCursor           = 10;
StrIdHint             = 11;
StrIdClassId          = 12;
StrIdAligners         = 13;
StrIdCaption          = 14;
StrIdTabOrder         = 15;
StrIdRecordChanged    = 16;
StrIdDefaultControlId = 17;
StrIdStatus           = 18;
StrIdKeyValues        = 19;
StrIdDataSourceId     = 20;
StrIdDetailGrpList    = 21;
StrIdDetailKeyField   = 22;
StrIdMasterGroupId    = 23;
StrIdClickNew         = 24;
StrIdPopupMenuCount   = 25;
StrIdFormId           = 26;
StrIdBorderIcons      = 27;
StrIdExceptionMessage = 28;
StrIdSystemMessage    = 29;
StrIdHRef             = 30;
StrIdSid              = 31;
StrIdIsQryPadrao      = 32;
StrIdEncodeType       = 33;
StrIdTabVisible       = 34;
StrIdActivePageIndex  = 35;
StrIdLeftTabIndex     = 36;
StrIdTopControlsList  = 37;
StrIdIsWizard         = 38;
StrIdMaxTabs          = 39;
StrIdShowArrows       = 40;
StrIdPageIndex        = 41;
StrIdWizardAccessible = 42;
StrIdReadOnly         = 43;
StrIdDataType         = 44;
StrIdReadOnlyOnEditing= 45;
StrIdDisplayLabel     = 46;
StrIdRequired         = 47;
StrIdFieldIndex       = 48;
StrIdValidChars       = 49;
StrIdPasswordChar     = 50;
StrIdMaxLength        = 51;
StrIdCharCase         = 52;
StrIdMinValue         = 53;
StrIdMaxValue         = 54;
StrIdPrecision        = 55;
StrIdKind             = 56;
StrIdIcon             = 57;
StrIdGroupValidate    = 58;
StrIdGroupCheckPending= 59;
StrIdConfirmMessage   = 60;
StrIdDefault          = 61;
StrIdSubmitButton     = 62;
StrIdItemCount        = 63;
StrIdItemIndex        = 64;
StrIdInsidePgc        = 65;
StrIdSubmittedText    = 66;
StrIdForceEnabled     = 67;
StrIdMasterLookupId   = 68;
StrIdDetailLookupIds  = 69;
StrIdClearOnNew       = 70;
StrIdSubmitOnClick    = 71;
StrIdPageCount        = 72;
StrIdRecCount         = 73;
StrIdGridStyle        = 74;
StrIdAlign            = 75;
StrIdClickOnCheck     = 76;
StrIdSelectedIndex    = 77;
StrIdCalcFields       = 78;
StrIdSumFactor        = 79;
StrIdSumResult        = 80;
StrIdSelectOnClick    = 81;
StrIdCheckedItems     = 82;
StrIdSubmitOnChange   = 83;
StrIdScrollType       = 84;
StrIdDefaultValue     = 85;
StrIdSrc              = 86;
StrIdBrowseButton     = 87;
StrIdLink             = 88;
StrIdCacheBoxIndex    = 89;

ParArray = new Array(100);

if(typeof HTMLElement!="undefined" && !HTMLElement.prototype.insertAdjacentElement) {
  HTMLElement.prototype.insertAdjacentElement = function (where,parsedNode)	{
	switch (where) {
	  case 'beforeBegin':
        this.parentNode.insertBefore(parsedNode,this)
		break;
	  case 'afterBegin':
		this.insertBefore(parsedNode,this.firstChild);
		break;
	  case 'beforeEnd':
		this.appendChild(parsedNode);
		break;
	  case 'afterEnd':
		if (this.nextSibling) 
		  this.parentNode.insertBefore(parsedNode,this.nextSibling);
		else this.parentNode.appendChild(parsedNode);
		break;
	  }
	}
  HTMLElement.prototype.insertAdjacentHTML = function (where,htmlStr) {
	  var r = this.ownerDocument.createRange();
	  r.setStartBefore(this);
	  var parsedHTML = r.createContextualFragment(htmlStr);
	  this.insertAdjacentElement(where,parsedHTML)
	}
	HTMLElement.prototype.insertAdjacentText = function (where,txtStr)
	{
		var parsedText = document.createTextNode(txtStr)
		this.insertAdjacentElement(where,parsedText)
	}
}

String.prototype.trim = function()
{
  return this.replace(/(^\s*)|(\s*$)/g, "");
};

function ResetVars() {
  // Reinicialização das variaveis. Javascript pode não ser recarregado (NEWCONTEXT)
  ErrorCount = 0;
  ErrorMessages = "";
  ReturnValue = true;
  ExceptionMessage = "";
  SystemMessage = "";
  AComboMustSubmit = false;
  ARenderSelectList = "";
  ARenderGridSelectList = "";
  AChangeStatusGroupList = "";
  AEnqueuedPageChangeCtr = null;
  AWindowHRef = "";
  ACountGrid=0;
};

function ResetVarsAfterNewForm() {
  // Reinicialização das variaveis para somente quando mudar de formulario. Javascript pode não ser recarregado (NEWCONTEXT)

  AButtonNewClick = null;
  AFormHasDefault = 0;
  ABeforeSubmit = "";
  APgcBeforeSubmit = "";
  IgResTM = 0;
  IgResNext = null;
  AEnqueuedPageChangeIdx = -1;
  ARenderTopControls = "";
  DefaultControlId = -1;
};

function ResetFormInputs(AForm) {
  eval("document.all." + AForm.id + PPN + "FormTopFirst").value = 0;
  eval("document.all." + AForm.id + PPN + "FormTopPrev").value = 0;
  eval("document.all." + AForm.id + PPN + "FormTopNext").value = 0;
  eval("document.all." + AForm.id + PPN + "FormTopLast").value = 0;
  eval("document.all." + AForm.id + PPN + "FormTopNew").value = 0;
  eval("document.all." + AForm.id + PPN + "FormTopBack").value = 0;
  eval("document.all." + AForm.id + PPN + "FormTopHelp").value = 0;
  eval("document.all." + AForm.id + PPN + "FormTopModify").value = 0;
  eval("document.all." + AForm.id + PPN + "PopupClick").value = 0;
  ResetInputs(AForm);
};

function ResetGroupInputs(AGrp) {
  var j = AGrp.name.indexOf(PPN);
  if (j != -1) {
    var ARealGrp = eval("document.all." + AGrp.name.substr(0,AGrp.name.indexOf(PPN)));
    eval("document.all." + ARealGrp.id + PPN + "PopupClick").value = 0;
  };
};

function GetMainControl(AControl) {
  var j = AControl.name.indexOf(PPN);
  if (j != -1) {
    return eval("document.all." + AControl.name.substr(0,AControl.name.indexOf(PPN)));
  };
  return null;
};

function ResetGridInputs(AGrd) {
  var j = AGrd.name.indexOf(PPN);
  if (j != -1) {
    var ARealGrd = eval("document.all." + AGrd.name.substr(0,AGrd.name.indexOf(PPN)));
    eval("document.all." + ARealGrd.id + PPN + "Submitted").value = 0;
    eval("document.all." + ARealGrd.id + PPN + "Cleared").value = 0;
  };
};

function ResetInputs(AGrp) {
  // Reinicialização dos input fields. Javascript pode não ser recarregado (NEWCONTEXT)
  for(var i=0; i < AGrp.elements.length; i++) {
    var C = AGrp.elements(i);
    switch (parseInt(C.AClassId,10)) {
      case 6  : // TIgEdit
      case 18 : // TIgMemo
      case 10 : // TIgComboBox
      case 11 : // TIgCheckBox
      case 17 : // TIgLookupComboBox
      case 22 : // TIgDepLookup
        C.AHiddenValue = C.value;
        C.AClearOnNew = 1;
        C.AReadOnly = C.readOnly;
        if ((C.AClassId == 10) || (C.AClassId == 17) || (C.AClassId == 22)) {
          eval("document.all." + C.id + PPN + "Submitted").value = 0;
        };
        break;
      case 8 : // TIgButton
        eval("document.all." + C.id + PPN + "Submitted").value = 0;
        break;
      case 15 : // Grid. Verificar se forms.elements acessa ele
        ResetGridInputs(C);
        break;
      case 4 : // Link = Label
        eval("document.all." + C.id + PPN + "Submitted").value = 0;
        break;
      case 12 : // GroupBox
      case 13 : // TabSheet
        ResetGroupInputs(C);
        break;
      case 14 : // PageControl
        C.value = 0; // No caso de PageControl, C é o proprio SbmChg
        break;
    };
  };
};

function IgSetSelectionRange(input, start, end) {
  if (is_gecko)    input.setSelectionRange(start, end);
  else {
    var range = input.createTextRange();
    range.collapse(true);
    range.moveStart("character", start);
    range.moveEnd("character", end - start);
    range.select();
  };
};

function IgGetSelectionStart(input) {
  if (is_gecko)
    return input.selectionStart;
  return Math.abs(document.selection.createRange().moveStart("character", -1000000));
};

function IgGetSelectionEnd(input) {
  if (is_gecko)
    return input.selectionEnd;
  return Math.abs(document.selection.createRange().moveEnd("character", -1000000));
};

function IgTrim(Value) {
  var Result = "";
  var k=0;
  while ((k < Value.length) && (Value.charAt(k) == ' ')) k++;
  var j=Value.length;
  while ((j > 0) && (Value.charAt(j) == ' ')) j--;
  return Value.substr(k,j-k+1);
}

function IgRTrim(Value) {
  if (typeof(Value) == 'string') {
    var j=Value.length;
    while ((j > 0) && (Value.charAt(--j) == ' '));
    return Value.substr(0,j+1);
  } else
    return Value;
}

//function IgHttpDecodeQuotes(AStr) {
//  return unescape(AStr.replace(/\+/g," "));
//}

function IgHttpDecodeQuotes(AStr) {
  return decodeURIComponent(AStr);
}

function IgBuildCacheSelect(ACacheSelect,AKeys,AValues) {
  while(ACacheSelect.childNodes.length>0) { ACacheSelect.removeChild(ACacheSelect.childNodes[0]); }
  var S = "";
  var P = 0;
  for (var f=0; f<AKeys.length; ++f) {
    var ADiv=document.createElement("OPTION");
    ADiv.style.cursor = "default";
    ADiv.AKeyValue = AKeys[f];
    S = IgHttpDecodeQuotes(AValues[f]).trim();
    ADiv.innerHTML = S.replace(/\ /g,'&nbsp;').replace(/\^/g,' '); // no-wrap;
    ACacheSelect.appendChild(ADiv)
  };
  ACacheSelect.selectedIndex = IgComboFindOption(ACacheSelect,ACacheSelect.AEdit.AKeyValue);
}

function IgNewArray(ATabList) {
  if (ATabList == null)
    return new Array(0)
  else {
    if ((ATabList.indexOf(",") == -1) && (!isNaN(parseInt(ATabList,10)))) 
      return eval("new Array('" + ATabList + "')")
    else
      return eval("new Array(" + ATabList + ")");
  };
};

function S1F(AId,AVal) {
  var AObj = document.getElementById("CMP" + AId);
  if (AObj) {
    if (AObj.AClassId == 27) {
      AObj.AKeyValue = AVal;
      if (AObj.AKeyValue == "") AObj.value = "";
      AObj.ASelect.selectedIndex = IgComboFindOption(AObj.ASelect,AObj.AKeyValue);
      if (AObj.ASelect.selectedIndex != -1)
        AObj.value = AObj.ASelect.options(AObj.ASelect.selectedIndex).innerText
      else
        AObj.value = "";
    } else {
      AObj.value = IgHttpDecodeQuotes(AVal);
    };
  };
};

function S3A(AId,ANams,AVals) {
  var AObj = document.getElementById("CMP" + AId);
  if (AObj) {
    var AKeys = IgNewArray(ANams);
    var AValues = IgNewArray(IgHttpDecodeQuotes(AVals));
    IgBuildCacheSelect(AObj.ASelect,AKeys,AValues);
  };
};

function IgAjaxWait() {
  var WaitDIV = document.getElementById('WaitDIV');
  if (WaitDIV == null) {
    WaitDIV = document.createElement("IMG");
    WaitDIV.id = 'WaitDIV';
    document.body.appendChild(WaitDIV);
  }
  WaitDIV.className = "TCtDivAjaxWait";
  WaitDIV.src = '/images/ampulheta.gif';
  AjaxWaiting = true;
}

function IgAjaxReady() {
  var WaitDIV = document.getElementById('WaitDIV');
  if (WaitDIV != null) {
    WaitDIV.className = "TCtDivAjaxReady";
    WaitDIV.src = '/images/spacer.gif';
  };
  AjaxWaiting = false;
}

function IgCreateHttpRequest() {
  var AHttpRequest = false;
  if (window.XMLHttpRequest) {
    AHttpRequest = new XMLHttpRequest();
    if (AHttpRequest.overrideMimeType) {
      AHttpRequest.overrideMimeType("text/xml");
    }
  } else if (window.ActiveXObject) {
    try {
      AHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e) {
      try {
        AHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (e) {}
    }
  }
  if (!AHttpRequest) {
    alert("Não foi possível criar objeto XMLHTTP");
  }
  return AHttpRequest;
}

function IgReturnServerFunction(AHttpRequest) {
  if (AHttpRequest.readyState == 4) {
    if (AHttpRequest.status == 200) {
      IgAjaxReady();
      eval(AHttpRequest.responseText);
    } else {
      alert("Server error: " + AHttpRequest.status + '[' + AHttpRequest.responseText + ']');
      IgAjaxReady();
    }
  }
}

function IgCallServerFunction(AServerFunction,AParameters) {
  var AHttpRequest = IgCreateHttpRequest();
  AHttpRequest.onreadystatechange = function() { IgReturnServerFunction(AHttpRequest); };
  AHttpRequest.open("POST", "/IISGestao.dll/" + AServerFunction, true);
  AHttpRequest.send(document.forms[0].action + "&SID=" + SID + "&" + AParameters);
}

function IgCallServerByButton(AObj) {
  if (!AjaxWaiting) {
    IgAjaxWait();
    eval("document.all." + AObj.name + PPN + "Submitted.value=0");
    IgCallServerFunction("C",AObj.id + PPN + "Submitted=1&" + IgGetValues(AObj.AParent));
  };
}

function IgCallServerByComboBox(AObj) {
  if (!AjaxWaiting) {
    IgAjaxWait();
    eval("document.all." + AObj.name + PPN + "Submitted.value=0");
    IgCallServerFunction("C",AObj.id + PPN + "Submitted=1&" + IgGetValues(AObj.AParent));
  };
}

function IgCallServerByEdit(AObj) {
  if (!AjaxWaiting) {
    IgAjaxWait();
    eval("document.all." + AObj.name + PPN + "Exit.value=0");
    IgCallServerFunction("C",AObj.id + PPN + "Exit=1&" + IgGetValues(AObj.AParent));
  };
}

function IgDecodeNewLines(AValue) {
  while ((P = AValue.indexOf(CODED_NL)) != -1)
    AValue = AValue.substr(0,P) + '\n' + AValue.substr(P+CODED_NL.length,AValue.length);
  return AValue;
}

function IgDecodeQuotes2(AValue) {
  while ((P = AValue.indexOf(SINGLE_QUOTE)) != -1)
    AValue = AValue.substr(0,P) + '\'' + AValue.substr(P+SINGLE_QUOTE.length,AValue.length);
  while ((P = AValue.indexOf(DOUBLE_QUOTE)) != -1)
    AValue = AValue.substr(0,P) + '\"' + AValue.substr(P+DOUBLE_QUOTE.length,AValue.length);
  return IgDecodeNewLines(AValue);
}

function IgRemoveMagicChar(AValue) {
  return(AValue.substring(1,AValue.length-1));
}

function IgEncodeNewLines(AValue) {
  while ((P = AValue.indexOf('\n')) != -1)
    AValue = AValue.substr(0,P-1) + CODED_NL + AValue.substr(P+1,AValue.length);
  return AValue;
}

function IgProcessBeforeSubmit(ABeforeSubmitStr) {
  AListStr = ABeforeSubmitStr;
  while (AListStr != "") {
    AListStr2 = IgGetItemListStr();
    AId = IgGetItemListStr2('#');
    AFunc = IgGetItemListStr2('#');
    eval(AFunc + '("' + AId + '")');
  };
};

function IgFormSubmit(AForm) {
  if (AlreadySubmitting == 0) {
    AlreadySubmitting = 1;
    IgProcessBeforeSubmit(ABeforeSubmit);
    IgProcessBeforeSubmit(APgcBeforeSubmit);
    if (window.DataFrame != null) {
      var StrHtml = '<form name="CMP0" method="post" enctype="' + AForm.enctype + '" action="' + AForm.action + '">';
      var SavedInput = null;
      for(var i=0; i < document.forms(0).elements.length; i++) {
        var C = document.forms(0).elements(i);
        if ((C.name != "") && (C.ATbsSel != false)) // (SelCMPXXX estava sendo incluido) (!= false para incluir C.ATbsSel = null)
          if (C.type=="file")
            SavedInput = C
          else
            StrHtml = StrHtml + '<input name=' + C.name + ' type=' + C.type + ' value="'+C.value + '">';
      };
      StrHtml = StrHtml + '</form>';
      if (window.DataFrame.document.body != null) { // Necessario por causa do misterioso error que acontece quando clica muito rapido
        window.DataFrame.document.body.innerHTML = StrHtml;
        if (SavedInput != null) {
          window.DataFrame.document.all.CMP0.insertAdjacentElement('beforeEnd',SavedInput);
        };
        window.DataFrame.document.all.CMP0.submit();
        if (SavedInput != null) {
          SavedInput.AParent.insertAdjacentElement('beforeEnd',SavedInput);
        };
      } else
        AlreadySubmitting = 0;
    } else {
      AForm.submit();
      AlreadySubmitting = 0;
    };
  };
};

function IgShowAllObjects() {
  Result = '';
  for(var f=0;f<document.all.length;f++)
    Result = Result + f + ":" + document.all(f).id + "; ";
}

function IgGetStyle(aSelectorText) {
  aSelectorText = "." + aSelectorText;
  for(var f=0;f<document.styleSheets(0).rules.length;f++) {
    if (aSelectorText == document.styleSheets(0).rules(f).selectorText)
      return document.styleSheets(0).rules(f).style.cssText;
  };
  alert("NoStyle?");
};

function IgGetItemListStr() {
  P = AListStr.indexOf(MAGICCHAR);
  if (P == -1) {
    Result = AListStr;
    AListStr = '';
  } else {
    Result = AListStr.substr(0,P);
    AListStr = AListStr.substr(P+1,AListStr.length);
  };
  return Result;
};

function IgGetItemListStr2(AMARK) {
  P = AListStr2.indexOf(AMARK);
  if (P == -1) {
    Result = AListStr2;
    AListStr2 = '';
  } else {
    Result = AListStr2.substr(0,P);
    AListStr2 = AListStr2.substr(P+AMARK.length,AListStr2.length);
  };
  return Result;
};

function IgGetItemListStr3(AMARK) {
  P = AListStr3.indexOf(AMARK);
  if (P == -1) {
    Result = AListStr3;
    AListStr3 = '';
  } else {
    Result = AListStr3.substr(0,P);
    AListStr3 = AListStr3.substr(P+AMARK.length,AListStr3.length);
  };
  return Result;
};

function IgGetItemListStr4(AMARK) {
  P = AListStr4.indexOf(AMARK);
  if (P == -1) {
    Result = AListStr4;
    AListStr4 = '';
  } else {
    Result = AListStr4.substr(0,P);
    AListStr4 = AListStr4.substr(P+AMARK.length,AListStr4.length);
  };
  return Result;
};

function IgGetItemListStr5(AMARK) {
  P = AListStr5.indexOf(AMARK);
  if (P == -1) {
    Result = AListStr5;
    AListStr5 = '';
  } else {
    Result = AListStr5.substr(0,P);
    AListStr5 = AListStr5.substr(P+AMARK.length,STRMAXLEN);
  };
  return Result;
};

function IgStartOnClick() {
  ErrorCount = 0;
  ErrorMessages = "";
  ReturnValue = true;
};

function IgEndOnClick() {
  if (ErrorCount > 1)
    ErrorMessages = SIgValidationErrors + "\n\n" + ErrorMessages;
  if (ErrorCount > 0)
    alert(ErrorMessages);
};

function IgChangeReadOnlyE(AGroup,AControl) {
  if ((AGroup.AStatus == 1)  && (AControl.AReadOnlyE)) // gsEditing
    AControl.readOnly = true
  else {
    AControl.readOnly = (AControl.AReadOnly != 0);
  };
};

function IgGroupChangeReadOnlyE(AGroup) {
  if (document.forms(0) != null) {
    for(var i=0; i < document.forms(0).elements.length; i++)
      if (document.forms(0).elements(i).ADtsId == AGroup.ADtsId)
        IgChangeReadOnlyE(AGroup,document.forms(0).elements(i));
  };
};

function IgGetNextTabItem(AInput) {
  var AMin = null;
  var AMinVal = 999999;
  for(var i=0; i < document.forms(0).elements.length; i++) {
    var Item = document.forms(0).elements(i);
    if ((Item != AInput) && (Item.style.visibility != "hidden") && (!Item.readOnly) //&& (Item.ADataType != null)
    && (Item.tabIndex >= AInput.tabIndex) && (Item.tabIndex < AMinVal)) {
      AMin = Item;
      AMinVal = Item.tabIndex;
    };
  };
  return AMin;
};

function IgChangeStatus(AGroup,ANewValue) {
  AGroup.AStatus = ANewValue;
  AStatus = eval("document.all." + AGroup.id + PPN + "Status");
  if (AStatus != null) AStatus.value = ANewValue;
  IgGroupChangeReadOnlyE(AGroup);
};

function IgChangeRecordChanged(AGroup,ANewValue) {
  if ((AGroup != null) && (AGroup.AClassId != 14)) { // Caso especial de PageControl
    AGroup.ARecordChanged = ANewValue;
    var ARecChanged = eval("document.all." + AGroup.id + PPN + "RecordChanged");
    if (ARecChanged != null) ARecChanged.value = ANewValue;
  };
  if ((AGroup != null) && (AGroup.AParent != null) && (ANewValue != 0))
    IgChangeRecordChanged(AGroup.AParent,ANewValue);
};

function IgControlClear(AControl,AClearGrid) {
  if ((!AControl.readOnly) || ((AControl.ADataType != null) && (AControl.ADataType == 14))) // ftAutoInc
    switch (AControl.AClassId) {
      case 6  :                                                      // TIgEdit
      case 18 : AControl.value = ""; AControl.AKeyValue = ""; break; // TIgMemo
      case 10 :                                                      // TIgComboBox
      case 17 :                                                      // TIgLookupComboBox
      case 22 : AControl.value = ""; AControl.AKeyValue = ""; break; // TIgDepLookup
      case 11 : IgCheckBoxChanged(AControl,false); break;            // TIgCheckBox
      case 15 : if (AClearGrid) {                                    // TIgGrid
        eval("document.all." + AControl.id + PPN + "Cleared.value=1");
        var AChkName = AControl.id + PPN + "Cell0";
        var AChk = eval("document.all." + AChkName);
        if (AChk == null) { // Nao limpa o grid se tiver check...Só vai limpar os checks
          var ATable = eval("document.all.Tbl" + AControl.id);
          while (ATable.rows.length > 2) ATable.deleteRow(1);
        } else {
          AChk.checked = false;
          for(var j=1;(eval("AChk=document.all." + AChkName + '_' + j) != null);j++) AChk.checked = false;
          };
        }; break;
      case 16 : AControl.src = "/images/"; break;                    // TIgImage
      case 17 :                                                      // TIgLookupComboBox
      case 22 : AControl.value = ""; AControl.AKeyValue = ""; break; // TIgDepLookup
      case 23 : AControl.editor.SetText(""); break;                  // TIgEditor
      case 20 :                                                      // TIgRadioGroup
        var ARdgName = AControl.id;
        var ARdg = eval("document.all." + ARdgName + "_0");
        if (ARdg != null) {
          ARdg.checked = true;
          for(var j=1;(eval("ARdg=document.all." + ARdgName + '_' + j) != null);j++) ARdg.checked = false;
        };
        break;
      // Grupos
      case  3 :                                                      // TIgForm
      case 12 :                                                      // TIgGroupBox
      case 13 :                                                      // TIgTabSheet
        IgChangeStatus(AControl,0); // gsInserting
        if (AControl.AMasterIdx == null)
          IgClearKeyValue(AControl,"")
        else
          IgClearKeyValue(AControl,AControl.ADetailKFld);
        if ((AControl.AClassId==13) && (AControl.AParent.AActivePageIndex==0))
          IgChangeStatus(document.forms[0],0);
        break;
      case 21 : AControl.value = ""; break;                          // TIgTreeView
    }
};

function IgControlNew(AControl,AClearGrid) {
  if ((AControl.AClearOnNew == 1) && ((!AControl.readOnly) || ((AControl.ADataType != null) && (AControl.ADataType == 14)))) { // ftAutoInc
    switch (AControl.AClassId) {
      case 6  :                                                      // TIgEdit
      case 18 :                                                      // TIgMemo
        if (((AControl.ADataType == 9) || (AControl.ADataType == 11) || (AControl.ADataType == 36)) && (AControl.ADefaultValue == 'CurrentDate')) { //ftDate,ftDateTime,ftTimeStamp
          AControl.value = IgDefaultCurrentDate();
        } else {
          AControl.value = AControl.ADefaultValue;
        };
        AControl.AKeyValue = ""; break;
      case 10 :                                                      // TIgComboBox
        if (AControl.ASelect.options.length >= 1) {
          AControl.AKeyValue = AControl.ADefaultValue;
          if (!IgSelectKeyValue(AControl))
            AControl.value = "";
        } else {
          AControl.value = ""; AControl.AKeyValue = "";
        };
        break;
      case 11 :                                                      // TIgCheckBox
        IgCheckBoxChanged(AControl,(AControl.ADefaultValue=="S"));
        break;
      case 15 : if (AClearGrid) {                                    // TIgGrid
        eval("document.all." + AControl.id + PPN + "Cleared.value=1");
        var AChkName = AControl.id + PPN + "Cell0";
        var AChk = eval("document.all." + AChkName);
        if (AChk == null) { // Nao limpa o grid se tiver check...Só vai limpar os checks
          var ATable = eval("document.all.Tbl" + AControl.id);
          while (ATable.rows.length > 2) ATable.deleteRow(1);
        } else {
          AChk.checked = false;
          for(var j=1;(eval("AChk=document.all." + AChkName + '_' + j) != null);j++) AChk.checked = false;
          };
        };
        break;
      case 16 : AControl.src = "/images/"; break;                    // TIgImage
      case 17 :                                                      // TIgLookupComboBox
      case 22 :                                                      // TIgDepLookup
        if (AControl.ASelect.options.length >= 1) {
          AControl.AKeyValue = AControl.ADefaultValue;
          if (!IgSelectKeyValue(AControl))
            AControl.value = "";
        } else {
          AControl.value = ""; AControl.AKeyValue = "";
        };
        break;
      case 23 : AControl.editor.SetText(""); break;                  // TIgEditor
      case 20 :                                                      // TIgRadioGroup
        var ARdgName = AControl.id;
        var ARdg = eval("document.all." + ARdgName + "_0");
        if (ARdg != null) {
          ARdg.checked = true;
          for(var j=1;(eval("ARdg=document.all." + ARdgName + '_' + j) != null);j++) ARdg.checked = false;
        };
        break;
      // Grupos
      case  3 :                                                      // TIgForm
      case 12 :                                                      // TIgGroupBox
      case 13 :                                                      // TIgTabSheet
        IgChangeStatus(AControl,0); // gsInserting
        if (AControl.AMasterIdx == null)
          IgClearKeyValue(AControl,"")
        else
          IgClearKeyValue(AControl,AControl.ADetailKFld);
        if ((AControl.AClassId==13) && (AControl.AParent.AActivePageIndex==0)) // Se for TbsDadosPrinc, copia status para o form 
          IgChangeStatus(document.forms[0],0);
        break;
      case 21 : AControl.value = ""; break;                          // TIgTreeView
    };
  };
};

function IgControlCancel(AControl) {
  switch (AControl.AClassId) {
    case  6 :                                                                    // TIgEdit
    case 18 : AControl.value = AControl.AHiddenValue; break;                     // TIgMemo
    case 10 :                                                                    // TIgComboBox
    case 17 :                                                                    // TIgLookupComboBox
    case 22 : AControl.value = AControl.AHiddenValue; break;                     // TIgDepLookup
    case 11 : IgCheckBoxChanged(AControl,(AControl.AHiddenValue == "S")); break; // TIgCheckBox
  }
};

function IgGetValue(C) {
  switch (parseInt(C.AClassId,10)) {
    case 18 : // TIgMemo
    case 6  : // TIgEdit
    case 28 : // TAjaxEdit
      return C.id + "=" + escape(C.value) + '&';
      break;
    case 10 : // TIgComboBox
    case 27 : // TAjaxComboBox
      return C.id + PPN + "KeyValue=" + C.AKeyValue + '&';
      break;
    default:
      return "";
  };
};

function IgGetValuesByDts(AGroup) {
  var AStr="";
  for(var i=0; i < document.forms(0).elements.length; i++)
    AStr += IgGetValue(document.forms(0).elements(i));
  return AStr;
};

function IgGetValues(AGroup) {
  if (AGroup.ADtsId != -1)
    return IgGetValuesByDts(AGroup)
  else {
    var AStr="";
    for(var i=0; i < AGroup.all.length; i++) if (AGroup.all(i).AClassId != null) {
      AStr += IgGetValue(AGroup.all(i));
    };
    return AStr;
  };
};

function IgGroupNewByDts(AGroup,AClearGrid) {
  for(var i=0; i < document.all.length; i++) if (document.all(i).ADtsId == AGroup.ADtsId) {
    IgControlNew(document.all(i),AClearGrid);
  };
};

function IgControlFillDefault(AControl) {
  if ((!AControl.readOnly) && (AControl.AClassId != null)) {
    switch (AControl.AClassId) {
      case 6  :                                                      // TIgEdit
      case 18 :                                                      // TIgMemo
        AControl.value = AControl.ADefaultValue;
      case 10 :                                                      // TIgComboBox
        if (AControl.ASelect.options.length >= 1) {
          AControl.AKeyValue = AControl.ADefaultValue;
          if (!IgSelectKeyValue(AControl))
            AControl.value = "";
        };
        break;
      case 11 :                                                      // TIgCheckBox
        IgCheckBoxChanged(AControl,(AControl.ADefaultValue=="S"));
        break;
      case 17 :                                                      // TIgLookupComboBox
      case 22 :                                                      // TIgDepLookup
        if (AControl.ASelect.options.length >= 1) {
          AControl.AKeyValue = AControl.ADefaultValue;
          if (!IgSelectKeyValue(AControl))
            AControl.value = "";
        } else {
          AControl.value = ""; AControl.AKeyValue = "";
        };
        break;
    };
  };
};

function IgFillDefaults() {
  for(var i=0; i < document.forms(0).elements.length; i++) {
    IgControlFillDefault(document.forms(0).elements(i));
  };
};

function IgGroupNew(AGroup) {
  IgChangeRecordChanged(AGroup,0);
  if (AGroup.ADtsId != -1) {
    IgGroupNewByDts(AGroup,false)
    if (AGroup.ADetailGrpList != null) {
      AListStr4 = AGroup.ADetailGrpList;
      while (AListStr4 != "") {
        AGroup = eval("document.all.CMP" + IgGetItemListStr4(';'));
        if ((AGroup != null) && (AGroup.ATbsSel)) IgGroupNewByDts(AGroup,true)
      }
    }
  } else for(var i=0; i < AGroup.all.length; i++) if (AGroup.all(i).AClassId != null) {
    IgControlNew(AGroup.all(i),false);
  }
};

function IgGroupClearByDts(AGroup,AClearGrid) {
  for(var i=0; i < document.all.length; i++) if (document.all(i).ADtsId == AGroup.ADtsId)
    IgControlClear(document.all(i),AClearGrid);
};

function IgGroupClear(AGroup) {
  IgChangeRecordChanged(AGroup,0);
  if (AGroup.ADtsId != -1) {
    IgGroupClearByDts(AGroup,false)
    if (AGroup.ADetailGrpList != null) {
      AListStr4 = AGroup.ADetailGrpList;
      while (AListStr4 != "") {
        AGroup = eval("document.all.CMP" + IgGetItemListStr4(';'));
        if ((AGroup != null) && (AGroup.ATbsSel)) IgGroupClearByDts(AGroup,true)
      }
    }
  } else for(var i=0; i < AGroup.all.length; i++) if (AGroup.all(i).AClassId != null) {
    IgControlClear(AGroup.all(i),false);
  }
};

function IgGroupCancelByDts(ADtsId) {
  for(var i=0; i < document.forms(0).elements.length; i++) if (document.forms(0).elements(i).ADtsId == ADtsId)
    IgControlCancel(document.forms(0).elements(i));
};

function IgGroupCancel(AGroup) {
  IgChangeRecordChanged(AGroup,0);
  if (AGroup.ADtsId != -1)
    IgGroupCancelByDts(AGroup.ADtsId)
  else for(var i=0; i < AGroup.all.length; i++) if (AGroup.all(i).AClassId != null)
    IgControlCancel(AGroup.all(i));
};

function IgGroupValidateByDts(ADtsId) {
  for(var i=0; i < document.forms(0).elements.length; i++) if (document.forms(0).elements(i).ADtsId == ADtsId)
    IgControlValidate(document.forms(0).elements(i));
};

function IgGroupValidate(AGroup) {
  if (AGroup.ADtsId != -1)
    IgGroupValidateByDts(AGroup.ADtsId)
  else for(var i=0; i < AGroup.all.length; i++) {
    if (AGroup.all(i).AClassId != null)
      IgControlValidate(AGroup.all(i));
  };
};

function IgSelectDefaultControl(AGroup) {
  if (AGroup.ADefaultControlId != -1) {
    DefControl = eval("document.all.CMP" + AGroup.ADefaultControlId);
    if (DefControl != null) {
      if (DefControl.style.visibility == "visible") {
        DefControl.focus();
      };
    };
  };
};

function IgButtonNewClick(AButton) {
  IgGroupNew(AButton.AParent);
  IgSelectDefaultControl(AButton.AParent);
};

function IgButtonClearClick(AButton) {
  IgGroupClear(AButton.AParent);
};

function IgButtonCancelClick(AButton) {
  IgGroupCancel(AButton.AParent);
};

function IgButtonBackClick(AButton) {
  if (AButton.ABtnIdx != null) // É Button de GridSheet
    if (AButton.AParent.ARecordChanged != 0)
      if (!confirm(SIgChangesPending)) {
        window.event.returnValue = false;
        return false;
      };
  var AGdsControl = AButton.AParent;
  GDS(AGdsControl.AParent.AComponentIndex,AGdsControl.AComponentIndex,AGdsControl.ACaption,
    AGdsControl.ALeft,AGdsControl.ATop,AGdsControl.AWidth,AGdsControl.AHeight,2,0,AGdsControl.ADefaultControlId,
    AGdsControl.AKeyValues,AGdsControl.ADtsId,AGdsControl.ADetailGrpList,AGdsControl.ADetailKFld,
    AGdsControl.AMasterIdx,AGdsControl.AClickNew,AGdsControl.APpmCnt,AGdsControl.ARowCount,
    AGdsControl.AColCount,AGdsControl.ASelIndex,AGdsControl.AGrdBtnClk,1);
};

function IgCompare(AControl1,AOperator,AControl2,AMessage) {
  C1 = eval("document.all." + AControl1);
  C2 = eval("document.all." + AControl2);
  if (!(eval("C1.value " + AOperator + " C2.value"))) { ErrorCount++; ErrorMessages += " - " + AMessage + "\n"; }
};

function IgClear(AParameters) {
  AListStr2 = AParameters;
  var DestInputNumber = IgGetItemListStr2("$$$");
  var AControl = eval("document.all.CMP" + DestInputNumber);
  IgControlClear(AControl,false);
};

function IgCondConf(AParameters) {
  AListStr2 = AParameters;
  var InputNumber = IgGetItemListStr2("$$$");
  var Operator = IgGetItemListStr2("$$$");
  var Value = IgGetItemListStr2("$$$");
  var Message = IgGetItemListStr2("$$$");
  var CheckEmpty = "(document.all.CMP" + InputNumber + ".value == '')";
  var Exp = "(document.all.CMP" + InputNumber + ".value " + Operator + "'" + Value + "')";
  if (ReturnValue != 0)
    if ((eval(Exp)) && (!eval(CheckEmpty)))
      if (confirm(Message)) {
      } else ReturnValue = false;
};

function IgCopyValue(AParameters) {
  AListStr2 = AParameters;
  var SourceInputNumber = IgGetItemListStr2("$$$");
  var DestInputNumber = IgGetItemListStr2("$$$");
  var SourceInput = eval("document.all.CMP" + SourceInputNumber);
  var DestInput = eval("document.all.CMP" + DestInputNumber);
  if (IgTrim(DestInput.value) == "")
    DestInput.value = SourceInput.value;
};

function IgAppendValue(AParameters) {
  AListStr2 = AParameters;
  var DestInputNumber = IgGetItemListStr2("$$$");
  var SourceInputNumber = IgGetItemListStr2("$$$");
  var AppStr = IgGetItemListStr2("$$$");
  if (AppStr == 'Enter') AppStr = '\\n';
  if (AppStr == 'Space') AppStr = ' ';
  eval("document.all.CMP" + SourceInputNumber + ".value = document.all.CMP" + SourceInputNumber + ".value + document.all.CMP" + DestInputNumber + ".value + '" + AppStr + "'");
};

function IgCondSub(AControl, AParameters) {
  if (eval(AParameters)) {
    var ASub = eval("document.all." + AControl.name + PPN + "Submitted");
    if (ASub != null) ASub.value = 1;
    IgFormSubmit(AControl.AForm);
  }
};

function IgCleanVal(AVal,ANumCasasDec) {
  AVal = IgCleanCurrency(AVal,ANumCasasDec);
  var P = AVal.indexOf(',');
  if ((P != -1) && (AVal != ""))
    AVal = AVal.substr(0,P) + '.' + AVal.substr(P+1,AVal.length);
  if (AVal == "") AVal = "0"
  return parseFloat(AVal);
}

function IgCheckSum(AGrid) {
  var AEdtName = "";
  var ATotal = 0;
  var AEdt = null;
  if (AGrid.ASumFactor != -1) {
    for(var j=0;j<AGrid.ARecCount;j++) {
      AEdtName = AGrid.id + PPN + "Cell" + AGrid.ASumFactor + '_' + (j+1);
      AEdt = eval("document.all." + AEdtName);
      if (AEdt != null) {
        ATotal = ATotal + IgCleanVal(AEdt.value);
      };
    }
  };
  if (AGrid.ASumResult != -1) {
    var AResult = eval("document.all.CMP" + AGrid.ASumResult);
    if (AResult != null) {
      var NumCasasDec = AResult.ANumCasasDec;
      if (NumCasasDec == null) NumCasasDec = 2;
      AResult.value = ATotal;
      P = AResult.value.indexOf(".");
      if (P!=-1) {
        AResult.value = parseFloat(AResult.value).toFixed(NumCasasDec);
        AResult.value = AResult.value.substr(0,P) + AResult.value.substr(P,NumCasasDec+1);
      };
      IgInputFormatValue(AResult);
    };
  };
}

function IgGridFunction(AControl) {
  var AGrid = eval("document.all." + AControl.AGridId);
  var StrCalcFieldsList = AGrid.ACalcFields;
  var StrCalcFields = ""
  var P = 0;
  var Q = 0;
  var FIndex = "";
  var ARow = "";
  var Val = "";
  var I = 0;
  var FReceiver = null;
  var UpdateOnlyIfNotEmpty = false;
  var AReal = 0.0;

  AListStr3 = StrCalcFieldsList;
  while (AListStr3 != '') {
    P = 0; Q = 0; FIndex = ""; ARow = ""; Val = ""; I = 0; FReceiver = null; UpdateOnlyIfNotEmpty = false;
    StrCalcFields = IgGetItemListStr3(';');
    while ((P=StrCalcFields.indexOf("{")) != -1) {
      Q = StrCalcFields.indexOf("}");
      FIndex = StrCalcFields.substr(P+1,Q-P-1)
      if (FIndex.substr(0,1) == "[") {
        UpdateOnlyIfNotEmpty = true;
        FIndex = StrCalcFields.substr(P+2,Q-P-3);
      };
      FIndex = "document.all." + AGrid.id + PPN + "Cell" + FIndex + "_" + AControl.ARow;
      if (I > 0) {
        if (FReceiver.ADataType == 37) // ftCurrency
          FIndex = "IgCleanVal(" + FIndex + ".value," + FIndex + ".ANumCasasDec)"
        else
          FIndex = FIndex + ".value"
      } else {
        FReceiver = eval(FIndex);
        FIndex = FIndex + ".value";
      };
      StrCalcFields = StrCalcFields.substr(0,P) + FIndex + StrCalcFields.substr(Q+1,StrCalcFields.length)
      I++;
    };
    if ((UpdateOnlyIfNotEmpty) && (FReceiver.value.length != 0)) continue;
    var NumCasasDec = FReceiver.ANumCasasDec;
    if (NumCasasDec == null) NumCasasDec = 2;
    if (StrCalcFields != "")
      eval(StrCalcFields);
    P = FReceiver.value.indexOf(".");
    if (P!=-1) {
      FReceiver.value = parseFloat(FReceiver.value).toFixed(NumCasasDec);
      FReceiver.value = FReceiver.value.substr(0,P) + FReceiver.value.substr(P,NumCasasDec+1);
    }
    IgInputFormatValue(FReceiver);
  };
  IgCheckSum(AGrid);
}

function IgBroadcastFunction(AControl) {
  AListStr2 = AControl.AParameters;
  var AInput = null;
  while (AListStr2 != "") {
    var SourceInputNumber = IgGetItemListStr2("$$$");
    SourceInputNumber = SourceInputNumber.substr(0,SourceInputNumber.length-1);
    AInput = eval("document.all.CMP" + SourceInputNumber);
    if (AInput != null) {
      AInput.AFunction = AControl.AFunction;
      AInput.AEventId = AControl.AEventId;
      AInput.AParameters = AControl.AParameters;
    };
  };
  IgCheckJSFunction(AControl.AEventId,AControl); // Para realizar os updates de jfUpdateValue na primeira chamada da tela
};

function IgUpdateValue(AParameters) {
  AListStr2 = AParameters;
  var DestInputNumber = IgGetItemListStr2("$$$");
  var DestInput = eval("document.all.CMP" + DestInputNumber);
  var Exp = "";
  var Val = "";
  var P = 0;
  while (AListStr2 != "") {
    var SourceInputNumber = IgGetItemListStr2("$$$");
    var SourceOperator = SourceInputNumber.substr(SourceInputNumber.length-1,1);
    SourceInputNumber = SourceInputNumber.substr(0,SourceInputNumber.length-1);
    Val = eval("document.all.CMP" + SourceInputNumber + ".value");
    Val = IgCleanCurrency(Val);
    P = Val.indexOf(',');
    if ((P != -1) && (Val != ""))
      Val = Val.substr(0,P) + '.' + Val.substr(P+1,Val.length);
    if (Val == "") Val = "0"
    Exp = Exp + Val + SourceOperator;
  };
  Exp = Exp.substr(0,Exp.length-1);
  Val = eval(Exp).toFixed(2);
  P = Val.indexOf('.');
  if (Val != "") {
    if (P != -1)
      Val = Val.substr(0,P) + ',' + Val.substr(P+1,2)
    else
      Val = Val + ',00'
  }
  DestInput.value = Val;
  IgInputFormatValue(DestInput);
};

function IgUpdateLeftTabIndex(APageIndex,ALeftTabIndex,APageCount,AMaxTabs) {
  if (APageIndex > ALastVisiblePage) ALeftTabIndex++;
  if (APageIndex == ALeftTabIndex-1) ALeftTabIndex--;
  if (APageIndex == 0) ALeftTabIndex = 0;
  if (APageIndex == APageCount-1) ALeftTabIndex = Math.max(0,IgVisiblePageCount(APageCount) - AMaxTabs);
  return ALeftTabIndex;
};

function IgUpdateVisibleInTbsSel(ATbs) {
  for(var i=0; i < ATbs.children.length; i++) {
    var C = ATbs.children.item(i);
    if (C.AParent != null) {
      IgCheckParentInTbsSel(C,C.AParent);
      IgUpdateVisibleInTbsSel(C)
    };
  }
};

function IgTplDeleteArrow(APgc,ArrName) {
  var AArrow = eval("document.all." + ArrName);
  if (AArrow != null) {
    APgc.AParent.removeChild(AArrow);
  };
}

function IgTplRebuildPgcArrows(APgc) {
  IgTplDeleteArrow(APgc,"PgcFirst");
  IgTplDeleteArrow(APgc,"PgcLeft");
  IgTplDeleteArrow(APgc,"PgcRight");
  IgTplDeleteArrow(APgc,"PgcLast");
  if (APgc.AShowArrs) {
    if (APgc.ALeftTabIndex > 0) {
      IgTplPGCArrow(APgc.AParent,105,552,"PgcFirst",0);
      IgTplPGCArrow(APgc.AParent,104,572,"PgcLeft",IgPrevVisible(APgc.ALeftTabIndex-1));
    };
    if (IgVisiblePageCount(APgc.APageCount) > APgc.AMaxTabs + APgc.ALeftTabIndex) {
      IgTplPGCArrow(APgc.AParent,105,592,"PgcRight",IgNextVisible(APgc.ALastVisiblePage+1,APgc.APageCount));
      IgTplPGCArrow(APgc.AParent,105,612,"PgcLast",IgPrevVisible(APgc.APageCount-1));
    };
  };
};

function IgPageChange(AId,APageIndex,ALeftTabIndex) {
  var APgc = eval("document.all." + AId);
  var ATbl = eval("document.all.Tbl" + AId);
  var ATbs = eval("document.all." + APgc.AActiveTbsId);
  ATbs.ATbsSel = false;
  IgUpdateVisibleInTbsSel(ATbs);
  APgc.AActivePageIndex = APageIndex;
  APgc.ALeftTabIndex = ALeftTabIndex;
  ATbl.outerHTML = '<table id=Tbl' + AId + ' style="' + ATbl.style.cssText + '" border=0 cellpadding=0 cellspacing=0>' +
    '<tr>' + IgTplHtmlPages(APgc.AActivePageIndex,APgc.APageCount,APgc.AComponentIndex,APgc.ALeftTabIndex,APgc.AIsWizard,APgc.AMaxTabs) + '<td width=100%></td></tr></table>';
  APgc.ALastVisiblePage = ALastVisiblePage;
  IgTplRebuildPgcArrows(APgc);
  APgc.AActiveTbsId = "CMP" + AComponentIndexArr[APageIndex];
  ATbs = eval("document.all." + APgc.AActiveTbsId);
  ATbs.ATbsSel = true;
  IgUpdateVisibleInTbsSel(ATbs);
  AActiveTbs = eval("document.all." + APgc.AActiveTbsId);
  IgChangeRecordChanged(AActiveTbs,0);
  IgRenderTopControls();
  IgChangeStatusGroupList(); // Vou tirar pq estava muito lento. Nao usar mais ReadOnlyOnEditint na ficha finaceira
  IgResizeEnd();
  AGlobalTbs = ATbs;
  //EnqSelectDefaultControl(); Tirei pq estava selecionando o default control qdo voltava de consulta lookup
}

function EnqSelectDefaultControl() {
  if (window.DataFrame.document.readyState != 'complete') {
    window.setTimeout("EnqSelectDefaultControl()", 100);
  } else {
    IgSelectDefaultControl(AGlobalTbs);
  }
};

function IgPageControlClick(APageControlId,APageIndex) {
  if (AlreadySubmitting != 0) return;
  APageControl = eval("document.all." + APageControlId);
  if (APageControl.AActivePageIndex == APageIndex) return;
  AActiveTbs = eval("document.all." + APageControl.AActiveTbsId);
  if ((AActiveTbs.ADtsId != -1) && (AActiveTbs.AStatus == 0) && (APageControl.AActivePageIndex == 0)) { // gsEditing // Mudei de !=1 (diferente de editing), para ==0 (igual a inserting). Para suportar gsListing
    alert(SIgPageChangesPending);
    return;
  };
  if ((AActiveTbs.ARecordChanged == 1) && (AActiveTbs.ADtsId != -1))
    if (!confirm(SIgChangesPending)) {
      return;
    };
  AParentId = APageControl.AParent.AComponentIndex;
  AId = APageControl.AComponentIndex;
  ALeft = APageControl.style.posLeft;
  ATop = APageControl.style.posTop;
  AHeight = APageControl.style.posHeight;
  AClassId = APageControl.AClassId;
  AIsWizard = APageControl.AIsWizard;
  APageCount = APageControl.APageCount;
  ATopControls = APageControl.ATopControls;
  AActivePageIndex = APageIndex;
  ALastVisiblePage = APageControl.ALastVisiblePage;
  ALeftTabIndex = IgUpdateLeftTabIndex(APageIndex,APageControl.ALeftTabIndex,APageCount,
    APageControl.AMaxTabs);
  if (APageControl.ASbmChg != 0) {
    eval('document.all.' + APageControlId + PPN + 'ActivePageIndex.value="' + AActivePageIndex + '"');
    eval('document.all.' + APageControlId + PPN + 'LeftTabIndex.value="' + ALeftTabIndex + '"');
    eval('document.all.' + APageControlId + PPN + 'SbmChg.value=1');
    IgFormSubmit(APageControl.AForm);
    return;
  };
  APageControl.AParent.removeChild(APageControl);
  ARenderSelectList = "";
  ARenderGridSelectList = "";
  ARenderTopControls = "";
  APgcBeforeSubmit = "";
  AChangeStatusGroupList = "";
  PGC(AParentId,AId,ALeft,ATop,AHeight,AClassId,ALeftTabIndex,AActivePageIndex,APageCount,ATopControls,AIsWizard,
    APageControl.AMaxTabs,APageControl.AShowArrs,APageControl.ASbmChg);
  APageControl = eval("document.all." + APageControlId);
  eval("GRP" + AComponentIndexArr[AActivePageIndex] + "();");
  AActiveTbs = eval("document.all." + APageControl.AActiveTbsId);
  IgChangeRecordChanged(AActiveTbs,0);
  IgRenderSelectList();
  IgRenderGridSelectList();
  IgRenderTopControls();
  IgChangeStatusGroupList(); // Vou tirar pq estava muito lento. Nao usar mais ReadOnlyOnEditint na ficha finaceira
  IgResizeEnd();
};

function IgLinkClick() {
  if (AlreadySubmitting != 0) return;
  var ALnk = window.event.srcElement;
  eval("document.all." + ALnk.id + PPN + "Submitted.value = 1");
  window.event.returnValue = false;
  IgFormSubmit(ALnk.AForm);
};

function IgCheckJSFunction(AEventId,AControl) {
  if ((AControl.AFunction != null) && (AControl.AEventId != null) && (AControl.AEventId == AEventId))
    switch(AControl.AFunction) {
      case 0 : IgCompare(AControl.AControl1,AControl.AOperator,AControl.AControl2,AControl.AMessage); break;
      case 1 : IgClear(AControl.AParameters); break;
      case 2 : IgCondConf(AControl.AParameters); break;
      case 3 : IgCopyValue(AControl.AParameters); break;
      case 4 : IgAppendValue(AControl.AParameters); break;
      case 5 : IgUpdateValue(AControl.AParameters); break;
      case 6 : IgCondSub(AControl,AControl.AParameters); break;
      case "X" : IgGridFunction(AControl); break;
    };
};

function IgButtonKeyDown() {
  var AButton = window.event.srcElement;
  if ((AButton.ACaption == "") && (window.event.keyCode == 13)) { // Little buttons nao se submete com enter. Pra melhorar navegacao com EnterLikeTab
    window.event.returnValue = false;
    IgEnterLikeTab();
  };
};

function IgGridSheetButtonClick() {
  var AButton = window.event.srcElement;
  var AGdsControl = AButton.AParent;
  var AStatus = 0;
  ReturnValue = true;
  if (AButton.AConfirmMessage != "")
    if (ReturnValue != 0)
      if (confirm(AButton.AConfirmMessage)) {
      } else ReturnValue = false;
  if ((AButton.ASubmitButton != 0) || (AGdsControl.AGrdBtnClk != 0)) {
    if (ReturnValue != 0) {
      eval("document.all." + AGdsControl.id + PPN + "Submitted" + AButton.ABtnIdx + ".value = 1");
      IgFormSubmit(AGdsControl.AForm);
    }
  } else if (ReturnValue != 0) {
    if (AButton.ABtnIdx != 2) { // Excluir
      if (AButton.ABtnIdx == 0) AStatus = 0; //gsInserting
      if (AButton.ABtnIdx == 1) AStatus = 1; //gsEditing
      GDS(AGdsControl.AParent.AComponentIndex,AGdsControl.AComponentIndex,AGdsControl.ACaption,AGdsControl.ALeft,
        AGdsControl.ATop,AGdsControl.AWidth,AGdsControl.AHeight,AStatus,0,AGdsControl.ADefaultControlId,
        AGdsControl.AKeyValues,AGdsControl.ADtsId,AGdsControl.ADetailGrpList,AGdsControl.ADetailKFld,
        AGdsControl.AMasterIdx,AGdsControl.AClickNew,AGdsControl.APpmCnt,AGdsControl.ARowCount,
        AGdsControl.AColCount,AGdsControl.ASelIndex,AGdsControl.AGrdBtnClk,1);
    };
  };
  window.event.returnValue = ReturnValue;
};

function IgButtonClick() {
  if (AlreadySubmitting != 0) return false;
  var AButton = window.event.srcElement;
  IgStartOnClick();
  if (AButton.AGroupValidate != 0)
    IgGroupValidate(AButton.AParent);
  switch (AButton.AKind) {
    case 2 : IgButtonNewClick(AButton); break; // New
    case 3 : IgButtonClearClick(AButton); break; // Clear
    case 6 : IgButtonCancelClick(AButton); break; // Cancel
    case 8 : IgButtonBackClick(AButton); break; // Back
  };
  IgEndOnClick();
  if (AButton.AKind == 4) { // Delete
    if (ReturnValue != 0)
      if (AButton.AParent.AStatus == 0) { // gsInserting
        alert(SIgGroupNotInChangingMode);
        window.event.returnValue = false;
        return false;
      };
  };
  if (AButton.AParent.AMasterIdx != null)
    if ((AButton.AKind == 1) || (AButton.AKind == 4)) { // Post ou Delete
      if (ReturnValue != 0) {
        AMaster = eval("document.all.CMP" + AButton.AParent.AMasterIdx);
        if ((AMaster != null) && (AMaster.AStatus == 0)) { // gsInserting
          alert(SIgParentNotInChangingMode);
          window.event.returnValue = false;
          return false;
        };
      };
    };
  if (AButton.AGroupCheckPending != 0)
    if (ReturnValue != 0)
      if (AButton.AParent.ARecordChanged != 0) // gsInserting
        if (!confirm(SIgChangesPending)) {
          window.event.returnValue = false;
          return false;
        };

  if (AButton.AConfirmMessage != "")
    if (ReturnValue != 0)
      if (confirm(AButton.AConfirmMessage)) {
      } else ReturnValue = false;

  IgCheckJSFunction(jeClick,AButton);

  if (AButton.ASubmitButton != 0)
    if (ReturnValue != 0) {
      eval("document.all." + AButton.name + PPN + "Submitted.value = 1");
      if (AButton.AClassId == 26) // AjaxButton
        IgCallServerByButton(AButton);
      else
        IgFormSubmit(AButton.AForm);
    };

  window.event.returnValue = ReturnValue;
};

function IgGridButtonClick() {
  if (AlreadySubmitting != 0) return;
  var AButton = window.event.srcElement;
  if (AButton.AForm == null) // Select ainda nao foi construido (DepLookup em grid). Constrói
    IgCreateSelect(AButton.id.substr(3,AButton.id.length),true);
  var P = AButton.id.indexOf("Cell");
  eval('document.all.' + AButton.AGrid.id + PPN + 'GridBtnSubmitted.value="' + AButton.id.substr(P,AButton.id.lenth) + '"');
  IgFormSubmit(AButton.AForm);
};

function IgControlValidate(AControl) {
  if (AControl.style.visibility == "visible") {
    if ((AControl.ARequired != null) && (AControl.ARequired == 1))
      IgCheckNull(AControl);
    if (AControl.ADataType != null) switch (AControl.ADataType) {
      case 3  : // ftInteger
      case 7  : // ftCurrency
        IgCheckCurrency(AControl);
        break;
      case 14  : // ftAutoInc
        if ((AControl.AMinValue != null) && (AControl.AMinValue != 0))
          IgCheckMinValue(AControl,AControl.AMinValue);
        if ((AControl.AMaxValue != null) && (AControl.AMaxValue != 0))
          IgCheckMaxValue(AControl,AControl.AMaxValue);
        break;
      case 10 : // ftTime
        IgCheckTime(AControl);
        break;
      case 9  : // ftDate
      case 11 : // ftDateTime
      case 36 : // ftTimeStamp
        IgCheckDate(AControl);
        break;
      case 37  : // ftFmtBCD
        IgCheckCurrency(AControl);
        break;
      case 39 : // ftCPF
        IgCheckCPF(AControl);
        break;
      case 40 : // ftCNPJ
        IgCheckCNPJ(AControl);
        break;
      case 45 : // ftMesAno
        IgCheckMesAno(AControl);
        break;
      case 46 : // ftConta
        IgCheckConta(AControl);
        break;
    };
  };
};

function IgEnterLikeTab() {
  if (!AFormHasDefault) {
    var AInput = window.event.srcElement;
    if (window.event.keyCode==13) {
      if (parseInt(AInput.AClassId,10) != 11) { // TIgCheckBox dá GPF se tentar criar textRange em CheckBox
        var txtRange = AInput.createTextRange();
        txtRange.move("character",0);
        txtRange.select();
      };
      AInput = IgGetNextTabItem(AInput);
      if (AInput != null) {
        AInput.focus();
        switch (parseInt(AInput.AClassId,10)) {
          case 6  : // TIgEdit
          case 18 : // TIgMemo
          case 10 : // TIgComboBox
          //case 11 : // TIgCheckBox dá GPF se tentar criar textRange em CheckBox
          case 17 : // TIgLookupComboBox
          case 22 : // TIgDepLookup
            txtRange = AInput.createTextRange();
            txtRange.select();
        };
        window.event.returnValue = false;
      };
    };
  };
};

function IgComboKeyDown() {
  var AComboBox = window.event.srcElement;
  if (window.event.keyCode == 40) { // seta pra baixo
    window.event.returnValue = false;
    if (AComboBox.AImage == null)
      IgCreateSelect(AComboBox.id,true);
    IgShowCombo(AComboBox.AImage);
  };
};

function IgEditKeyPress() {
  var AEdit = window.event.srcElement;
  IgEnterLikeTab();
  if (window.event.returnValue == false) return;
  switch (parseInt(AEdit.ADataType,10)) {
    case 1  : // ftString
    case 25  : // ftWideString
      window.event.returnValue = IgStringKeyPress(AEdit,window.event.keyCode);
      break;
    case 3  : // ftInteger
    case 14  : // ftAutoInc
      window.event.returnValue = IgNumberKeyPress(AEdit,window.event.keyCode);
      break;
    case 7  : // ftCurrency
      window.event.returnValue = IgCurrencyKeyPress(AEdit,window.event.keyCode);
      break;
    case 9  : // ftDate
    case 11 : // ftDateTime
    case 36 : // ftTimeStamp
      window.event.returnValue = IgNumberKeyPress(AEdit,window.event.keyCode);
      break;
    case 37  : // ftFmtBCD
      window.event.returnValue = IgCurrencyKeyPress(AEdit,window.event.keyCode);
      break;
    case 38 : // ftCEP
      window.event.returnValue = IgNumberKeyPress(AEdit,window.event.keyCode);
      break;
    case 39 : // ftCPF
      window.event.returnValue = IgNumberKeyPress(AEdit,window.event.keyCode);
      break;
    case 40 : // ftCNPJ
      window.event.returnValue = IgNumberKeyPress(AEdit,window.event.keyCode);
      break;
    case 43 : // ftPercVal
      window.event.returnValue = IgPercValKeyPress(AEdit,window.event.keyCode);
      break;
    case 44 : // ftDigVer
      window.event.returnValue = IgNumberKeyPress(AEdit,window.event.keyCode);
      break;
    case 45 : // ftMesAno
      window.event.returnValue = IgNumberKeyPress(AEdit,window.event.keyCode);
      break;
    case 46 : // ftConta
      window.event.returnValue = IgContaKeyPress(AEdit,window.event.keyCode);
      break;
    case 47 : // ftCargaHor
      window.event.returnValue = IgCargaHorKeyPress(AEdit,window.event.keyCode);
      break;
  };
}

function IgEditFocus() {
  var AEdit = window.event.srcElement;
  switch (parseInt(AEdit.ADataType,10)) {
    case 7  : // ftCurrency
      IgCurrencyFocus(AEdit);
      break;
    case 10 : // ftTime
      IgTimeFocus(AEdit);
      break;
    case 9  : // ftDate
    case 11 : // ftDateTime
    case 36 : // ftTimeStamp
      IgDateFocus(AEdit);
      break;
    case 37 : // ftFmtBCD
      IgCurrencyFocus(AEdit);
      break;
    case 38 : // ftCEP
      IgCEPFocus(AEdit);
      break;
    case 39 : // ftCPF
      IgCPFFocus(AEdit);
      break;
    case 40 : // ftCNPJ
      IgCNPJFocus(AEdit);
      break;
    case 43 : // ftPercVal
      IgPercValFocus(AEdit);
      break;
    case 44 : // ftDigVer
      IgDigVerFocus(AEdit);
      break;
    case 45 : // ftMesAno
      IgMesAnoFocus(AEdit);
      break;
  };
}

function IgEditBlur() {
  var AEdit = window.event.srcElement
  IgInputFormatValue(AEdit);
  IgCheckJSFunction(jeChange,AEdit);
  if ((AEdit.AClassId == 28) && (AEdit.ASbmOnEx==1)) // AjaxEdit
    IgCallServerByEdit(AEdit);
}

function IgInputFormatValue(AEdit) {
  switch (parseInt(AEdit.ADataType,10)) {
    case 7  : // ftCurrency
      IgCurrencyBlur(AEdit);
      break;
    case 10 : // ftTime
      IgTimeBlur(AEdit);
      break;
    case 9  : // ftDate
    case 11 : // ftDateTime
    case 36 : // ftTimeStamp
      IgDateBlur(AEdit);
      break;
    case 37 : // ftFmtBCD
      IgCurrencyBlur(AEdit);
      break;
    case 38 : // ftCEP
      IgCEPBlur(AEdit);
      break;
    case 39 : // ftCPF
      IgCPFBlur(AEdit);
      break;
    case 40 : // ftCNPJ
      IgCNPJBlur(AEdit);
      break;
    case 43 : // ftPercVal
      IgPercValBlur(AEdit);
      break;
    case 44 : // ftDigVer
      IgDigVerBlur(AEdit);
      break;
    case 45 : // ftMesAno
      IgMesAnoBlur(AEdit);
      break;
    case 46 : // ftConta
      var AMask = AEdit.AMask;
      if (AMask)
        AEdit.value = IgApplyMask(AEdit.value,AMask);
      break;
    case 47 : // ftMesAno
      IgCargaHorBlur(AEdit);
      break;
  };
}

function IgHtmlButtonIcon(AIcon) {
  switch(AIcon) {
    case 0 : return('None');
    case 1 : return('Post');
    case 2 : return('New');
    case 3 : return('NewLittle');
    case 4 : return('Clear');
    case 5 : return('ClearLittle');
    case 6 : return('Delete');
    case 7 : return('DeleteLittle');
    case 8 : return('Search');
    case 9 : return('SearchLittle');
    case 10 : return('Cancel');
    case 11 : return('Ok');
    case 12 : return('Ok');
    case 13 : return('Preview');
    case 14 : return('ListAdd');
    case 15 : return('ListDel');
    case 16 : return('More');
    case 17 : return('Back');
    case 18 : return('Prev');
    case 19 : return('Next');
    case 20 : return('Undo');
    case 21 : return('Print');
    case 22 : return('Baixar');
    case 23 : return('Desdobrar');
    case 24 : return('Recriar');
    case 25 : return('Credito');
    case 26 : return('Estornar');
    case 27 : return('Renum');
    case 28 : return('SearchCod');
    case 29 : return('SearchResp');
    case 30 : return('SearchNome');
    case 31 : return('UpLittle');
    case 32 : return('DownLittle');
    case 33 : return('SearchDoc');
    case 34 : return('Plus');
    case 35 : return('Minus');
  };
  return('None');
};

function IgHtmlColor(AColor) {
  switch(AColor) {
    case 0 : return('');           // clDefault
    case 1 : return('yellow');     // clYellow
    case 2 : return('red');        // clRed
    case 3 : return('limegreen');  // clGreen
    case 4 : return('lime');       // clOlive
    case 5 : return('orange');     // clOrange
    case 6 : return('royalblue');  // clBlue
  };
  return('');
};

function IgHtmlAlignment(AAlignment) {
  switch(AAlignment) {
    case 0 : return('left');
    case 1 : return('right');
    case 2 : return('center');
  };
};

function IgHtmlScroll(AScroll) {
  switch(AScroll) {
    case 0 : return('no');
    case 1 : return('yes');
    case 2 : return('auto');
  };
};

function IgHtmlEncodeType(AEncType) {
  switch(AEncType) {
    case 0 : return('application/x-www-form-urlencoded');
    case 1 : return('multipart/form-data');
  };
};

function IgHtmlVisibility(AVisibility) {
  if (AVisibility != 0) {
    return('visible')
  } else {
    return('hidden');
  }
};

function IgHtmlReadOnly(AReadOnly) {
  if (AReadOnly != 0) {
    return('READONLY')
  } else {
    return('');
  }
};

function IgHtmlBoolean(AValue) {
  if (AValue != 0) {
    return(true)
  } else {
    return(false);
  }
};

function IgHtmlGridFunction(ACalcFields,ASumFactor)
{
  if ((ACalcFields != "") || (ASumFactor != -1)) {
    return('AFunction=X')
  } else
    return('')
};

function IgHtmlCursor(ACursor) {
  switch(ACursor) {
    case -3  : return('crosshair');
    case -21 : return('hand');
    case -20 : return('help');
    case -22 : return('move');
    case -4  : return('text');
    case -11 : return('wait');
    default  : return('default');
  };
};

function IgHtmlDisabled(AEnabled) {
  if (AEnabled != 0)
    return(false)
  else
    return(true);
};

function IgHtmlPassword(APasswordChar) {
  if (APasswordChar != "")
    return('password')
  else
    return('text');
};

function IgHtmlCharCase(ACharCase) {
  switch (ACharCase) {
    case 0 : return('none');
    case 1 : return('uppercase');
    case 2 : return('lowercase');
  };
};

function IgDefaultCurrentDate() {
  var d = new Date();
  var DiaStr = d.getDate().toString();
  var MesStr = (d.getMonth() + 1).toString();
  if (DiaStr.length < 2) DiaStr = '0' + DiaStr.toString();
  if (MesStr.length < 2) MesStr = '0' + MesStr.toString();
  return (DiaStr + "/" + (MesStr) + "/" + d.getFullYear());
}

var HintTimeOutId = 0;
function IgShowHint() {
  var AControl = window.event.srcElement;
  var Hint = AControl.AHint;
  if (document.all.HIN.style.visibility == "hidden") {
    document.all.HIN.style.left = window.event.x - 60;
    document.all.HIN.style.top = window.event.y - 24;
    if (HintTimeOutId == 0) {
      HintTimeOutId = window.setTimeout("document.all.HIN.style.visibility = 'visible'",800);
      document.all.HIN.style.textDecoration = "none";
      document.all.HIN.style.fontFamily = 'Verdana';
//      document.all.HIN.style.fontStyle = 'Verdana';
      document.all.HIN.style.fontWeight = 'Normal';
      document.all.HIN.style.fontSize = 10;
      document.all.HIN.innerHTML="&nbsp" + Hint + "&nbsp";
    };
  };
};

function IgHideHint() {
  window.clearTimeout(HintTimeOutId);
  document.all.HIN.style.visibility = "hidden";
  HintTimeOutId = 0;
};

var IgPopupMenuTimeOutId = 0;
var IgPopupMenuCurObj = null;

function IgPopupMenuMouseOut(ATimeOut) {
  if (ATimeOut == null) ATimeOut=1000;
  window.clearTimeout(IgPopupMenuTimeOutId);
//  IgPopupMenuTimeOutId=window.setTimeout("IgPopupMenuCurObj.PPM.style.visibility='hidden'",ATimeOut);
  IgPopupMenuTimeOutId=window.setTimeout("IgPopupMenuClose()",ATimeOut);
};

function IgPopupMenuItemMouseOver(Athis) {
  window.clearTimeout(IgPopupMenuTimeOutId);
  Athis.style.backgroundColor = "#000066";
  Athis.style.color = "white";
};

function IgPopupMenuItemMouseOut(Athis) {
  Athis.style.backgroundColor = "#D4D0C8";
  Athis.style.color = "#333333";
}

function IgPopupMenuContextMenu() {
  IgPopupMenuClose();
  IgPopupMenuCurObj = window.event.srcElement.AParent;
  if (IgPopupMenuCurObj.PPM != null) {
    window.clearTimeout(IgPopupMenuTimeOutId);
    ATop = IgPopupMenuCurObj.style.posTop;
    ALeft = IgPopupMenuCurObj.style.posLeft;
    IgClientTopLeftToScreen(IgPopupMenuCurObj);
    IgPopupMenuCurObj.PPM.style.left = window.event.clientX - ALeft + 5;
    IgPopupMenuCurObj.PPM.style.top = window.event.clientY - ATop + 5;
    IgPopupMenuCurObj.PPM.style.visibility="visible";
    IgPopupMenuMouseOut(1000)
    window.event.returnValue = false;
  };
};

function IgPopupMenuClose() {
  if ((IgPopupMenuCurObj != null) && (IgPopupMenuCurObj.PPM != null)) {
    IgPopupMenuCurObj.PPM.style.visibility='hidden';
  };
};

function IgPopupMenuClick(AKey) {
  if (AlreadySubmitting != 0) return;
  IgPopupMenuClose();
  eval("document.all." + IgPopupMenuCurObj.id + PPN + "PopupClick.value = " + AKey + ";");
  IgFormSubmit(IgPopupMenuCurObj.AForm);
};

function IgGetDisplayLabel(theObject) {
  if ((theObject.ADisplayLabel == null) || (theObject.ADisplayLabel == ""))
    return theObject.name
  else
    return theObject.ADisplayLabel;
};

function IgCheckCurrency(theObject) {
  return true;
};

function IgCheckNull(theObject) {
  if (theObject.value == "") {
    ErrorCount++;
    theObject.focus();
    ErrorMessages += " - O campo '" + IgGetDisplayLabel(theObject) + "' tem que ser informado\n";
    ReturnValue = false;
    return false;
  };
  return true;
};

function IgFindKeyValue(AComboBox) {
  var I = AComboBox.ASelect.options.length;
  for (var i=0; i<I; i++) {
    if (AComboBox.AKeyValue == AComboBox.ASelect.options[i].AKeyValue) return i;
  };
  return -1;
};

function IgSelectKeyValue(AComboBox) {
  var I = IgFindKeyValue(AComboBox)
  if (I > 0) { // Tambem no caso do branco ele nao atualiza
    var AOption = AComboBox.ASelect.options[I];
    AOption.selected = true;
    AComboBox.value = AOption.innerText;
    AComboBox.AHiddenValue = AOption.innerText;
  } else {
    /*AComboBox.value = "";       Tirei a limpada do value pq esta limpando o submittedtext qdo retornava de consultas.
                                  SubmittedText deve permanecer. Veja por exemplo na tela de relacoes, escreve-se um nome
                                  para o pai depois consulta-se. Se o pai nao existir nao se deve perder o que foi digitado */
    AComboBox.AKeyValue = "";
  };
  return (I>0);
};

function IgFuncKeyPressed(event) {
  return ((event.altKey) || (event.ctrlKey))
};

function IgComboKeyPress() {
  AEdit = window.event.srcElement;
  if (AEdit.readOnly) return;
  IgEnterLikeTab();
  if (AEdit.AImage == null) {
    IgCreateSelect(AEdit.id,false);
  };
  if ((event.keyCode < 0x2f) && (event.keyCode != 32)) return;
  if ((event.keyCode > 218) && (event.keyCode < 223)) return;
  IgChangeRecordChanged(AEdit.AParent,1);
  IgMatchSelect(AEdit.ASelect,event);
};

function IgMatchSelect(ASelect,event) {
  if ((event.keyCode < 0x2f) && (event.keyCode != 32)) return;
  if ((event.keyCode > 218) && (event.keyCode < 223)) return;
  if (!IgFuncKeyPressed(event)) { // Não estou considerando o teste de status=gsInserting por considerar um erro que tal teste tenha q estar aqui. Ocorre bug quando vai mudar nome de filtro (UMntFiltro). Deve ser corrigido lá
    // Novo tratamento de MatchSelect. Só zera KeyValue se não deu "match"
    if (ASelect.AEdit.ATxtRange != null) {
      ASelect.AEdit.ATxtRange.text = "";
      document.selection.clear();
      var vString = ASelect.AEdit.value + String.fromCharCode(event.keyCode);
    } else {
      document.selection.clear();
      var vString = ASelect.AEdit.value + String.fromCharCode(event.keyCode);
    };
    vString = vString.toUpperCase();
    for (var i = 0; i < ASelect.options.length; i++) {
      var selectString = ASelect.options[i].text.toUpperCase();
      if (selectString.indexOf(vString) == 0) {
        ASelect.selectedIndex = i;
        ASelect.AEdit.ATxtRange = ASelect.AEdit.createTextRange();
        //ASelect.AEdit.value = ASelect.AEdit.value + ASelect.options[i].text.substr(vString.length);
        ASelect.AEdit.value = ASelect.options[i].text;
        ASelect.AEdit.ATxtRange.moveStart("character", vString.length);
        ASelect.AEdit.ATxtRange.select();
        ASelect.AEdit.AKeyValue = ASelect.options[i].AKeyValue;
        window.event.returnValue = false;
        return;
      };
    };
    ASelect.AEdit.AKeyValue = ""; // Se chegou até aqui é pq nao tem match, entao zera KeyValue }
    ASelect.AEdit.ATxtRange = null;
  };
};

function IgClientTopToScreen(AControl,ATop) {
  while (AControl.AParent != null) {
    ATop += AControl.AParent.style.posTop;
    AControl = AControl.AParent;
  }
  return ATop;
}

function IgClientLeftToScreen(AControl,ALeft) {
  while (AControl.AParent != null) {
    ALeft += AControl.AParent.style.posLeft;
    AControl = AControl.AParent;
  }
  return ALeft;
}

function IgClientTopLeftToScreen(AControl) {
  while (AControl.AParent != null) {
    ATop += AControl.AParent.style.posTop;
    ALeft += AControl.AParent.style.posLeft;
    AControl = AControl.AParent;
  }
}

function IgCreateSelect(AEditName,ASelectKeyValue) {
  var P = AEditName.indexOf("_");
  var Q = AEditName.indexOf("Cell");
  var AGridName = AEditName.substr(0,P);
  var ASelectName = AGridName + PPN + "Sel" + AEditName.substr(Q+4,AEditName.length);
  var AImageName = "Arr" + AEditName;
  var AButtonName = "Qbn" + AEditName;
  var AEdit = null;
  var AGrid = eval("document.all." + AGridName);

  AGrid.AParent.insertAdjacentHTML('beforeEnd',
    '<select id="' + ASelectName + '" name="' + ASelectName + '" class=T0IgComboBox size=8 ' +
    ' style="position:absolute; visibility:hidden;"></select>');
  AGrid.AParent.insertAdjacentHTML('beforeEnd','<input type=hidden name="' + AGridName + PPN + 'GridBtnSubmitted" value=0>');

  var AComboBox = eval("document.all." + AEditName);
  var ASelect = eval("document.all." + ASelectName);
  var AImage = eval("document.all." + AImageName);
  var AButton = eval("document.all." + AButtonName);
  ASelect.name = ASelect.id;
  ASelect.onclick = IgComboMouseClick;
  ASelect.onmouseout = IgComboMouseOut;
  ASelect.onmouseover = IgComboMouseOver;
  ASelect.onkeypress = IgSelectKeyPress;
  ASelect.tabIndex = 9999;
  ASelect.style.zIndex = ASelect.tabIndex;
  AImage.AEdit = AComboBox;
  ASelect.AEdit = AComboBox;
  AComboBox.ASelect = ASelect;
  AComboBox.AImage = AImage;
  AEdit = AComboBox;
  AEdit.AComponentIndex = 999 + AGrid.AComponentIndex +
    parseInt(AGrid.AColCount,10) * parseInt(AEdit.ARow,10) + parseInt(AEdit.ACol,10);
  var ATimeOutExp = 'IgCloseCombo("' + ASelect.id + '")';
  eval("Lkt" + AEdit.AComponentIndex + "=window.setTimeout('" + ATimeOutExp + "',ComboTimeout);");
  AEdit.AGrid = AGrid;
  AEdit.AForm = AGrid.AForm;
  AEdit.AParent = AGrid.AParent;
  AEdit.AEdtPosTop = null; // Usado nos grids
  AButton.AForm = AGrid.AForm;
  AButton.AGrid = AGrid;
  var ASourceComboBox = eval("document.all.CMP" + AEdit.ACmbIdx);
  IgCopySelectOptions(ASourceComboBox,AComboBox,ASelectKeyValue);
  return AEdit;
};

function IgShowCombo(AImage) {
  if (AImage==null) AImage = window.event.srcElement;
  var AEdit = AImage.AEdit;
  if (AEdit == null) // Select ainda nao foi construido (DepLookup em grid). Constrói
    AEdit = IgCreateSelect(AImage.id.substr(3,AImage.id.length),true);
  var ASelect = AEdit.ASelect;
  if (AEdit.readOnly == 0) {
    eval("window.clearTimeout(Lkt" + AEdit.AComponentIndex + ");");
    if (AEdit.AGrid != null) {
      ATop = AEdit.AGrid.AParent.style.posTop;    /* AParent porque o select é introduzido no parent do Grid */
      ALeft = AEdit.AGrid.AParent.style.posLeft;
      IgClientTopLeftToScreen(AEdit.AGrid.AParent)
      /* offsetY é a coordenada Y dentro da setinha. pode variar de 0 a 14 */
      ASelect.style.posTop = window.event.y - window.event.offsetY - ATop + AEdit.style.posHeight + 2;
      ASelect.style.posLeft = window.event.x - window.event.offsetX - ALeft - AEdit.style.posWidth - 2;
      AEdit.AEdtPosTop = window.event.y - window.event.offsetY - ATop;
    } else {
      ASelect.style.posTop = IgClientTopToScreen(AEdit,AEdit.style.posTop) + AEdit.style.posHeight;
      ASelect.style.posLeft = IgClientLeftToScreen(AEdit,AEdit.style.posLeft)-1;
      AEdit.AEdtPosTop = AEdit.style.posTop;
    };
    if ((AEdit.ASelWidth != null) && (AEdit.ASelWidth != 0)) {
      ASelect.style.posWidth = AEdit.ASelWidth;
    } else
      ASelect.style.posWidth = AEdit.style.posWidth+20;
    if (AEdit.AGrid != null) {
      var ScreenTop = IgClientTopToScreen(AEdit,AEdit.ASelect.style.posTop);
      if (ScreenTop + ASelect.clientHeight > document.body.clientHeight) {
        ASelect.style.posTop = IgClientTopToScreen(AEdit,AEdit.AEdtPosTop) - ASelect.clientHeight - ASelect.clientHeight - 7;
      }
    } else {
      var ScreenTop = ASelect.style.posTop;
      if (ScreenTop + ASelect.clientHeight > document.body.clientHeight) {
        ASelect.style.posTop = IgClientTopToScreen(AEdit,AEdit.AEdtPosTop) - ASelect.clientHeight - 7;
      }
    };
    if (ASelect.style.visibility == 'visible')
      ASelect.style.visibility = 'hidden'
    else {
      ASelect.style.visibility = 'visible';
      ASelect.focus();
    };
  };
};

function IgCloseCombo(ASelectId) {
  var ASelect = eval("document.all." + ASelectId);
  if (ASelect != null) {
    ASelect.style.visibility = 'hidden';
  };
};

function IgComboMouseOut() {
  ASelect = window.event.srcElement;
  ATimeOutExp = 'IgCloseCombo("' + ASelect.id + '")';
  if (ASelect.AEdit) eval("Lkt" + ASelect.AEdit.AComponentIndex + "=window.setTimeout('" + ATimeOutExp + "',ComboTimeout);");
};

function IgCloseComboDelay() {
  AImage = window.event.srcElement;
  AEdit = AImage.AEdit;
  if (AEdit != null) {
    ASelect = AImage.AEdit.ASelect;
    if (ASelect != null) {
      ATimeOutExp = 'IgCloseCombo("' + ASelect.id + '")';
      eval("Lkt" + AEdit.AComponentIndex + "=window.setTimeout('" + ATimeOutExp + "',ComboTimeout);");
    };
  };
};

function IgComboMouseOver(ASelect) {
  ASelect = window.event.srcElement;
  if (ASelect.AEdit) eval("window.clearTimeout(Lkt" + ASelect.AEdit.AComponentIndex + ");");
};

function IgComboClearChildren(AChildIds,AClearRoot) {
  var ALocalStr = AChildIds;
  while (ALocalStr != "") {
    AListStr2 = ALocalStr;
    var AId = IgGetItemListStr2(',');
    ALocalStr = AListStr2;
    var AComboBox = eval("document.all.CMP" + AId);
    if (AComboBox != null) {
      if (AClearRoot) {
        AComboBox.ASelect.selectedIndex = 0;
        AComboBox.AKeyValue="";
        AComboBox.value="";
      };
      IgComboClearChildren(AComboBox.ADtlLkpIds,true)
    };
  };
}

function IgComboRefreshChildren(AComboBox) {
  var ALocalStr = AComboBox.ADtlLkpIds;
  while (ALocalStr != "") {
    AListStr2 = ALocalStr;
    var AId = IgGetItemListStr2(',');
    ALocalStr = AListStr2;
    var AChild = eval("document.all.CMP" + AId);
    if (AChild != null) {
      AChild.readOnly = false;
      IgTplComboSelect(AChild,AComboBox.AKeyValue,-1);
      if ((AComboBox.AKeyValue != '') && (AChild.ASelect.options.length <= 1)) {
        AChild.AKeyValue = '$' // Comando pra refrescar child
        AChild.value = "";
        AComboMustSubmit = true;
      };
      AChild.ASelect.selectedIndex = 0; // seleciona em branco
    };
    IgComboClearChildren(AComboBox.ADtlLkpIds,(!AComboMustSubmit));
    if (AComboBox.AKeyValue == "") IgTplComboDisableChildren(AComboBox.ADtlLkpIds);
  };
}

function IgSelectKeyPress() {
  if (window.event.keyCode == 13) // Enter
    IgComboMouseClick();
};

function IgComboMouseClick() {
  if (AlreadySubmitting != 0) return;
  AComboMustSubmit = false;
  ASelect = window.event.srcElement;
  AEdit = ASelect.AEdit;
  AIdEdit = AEdit.AIdEdit;
  if ((ASelect.selectedIndex < ASelect.options.length) && (ASelect.selectedIndex >= 0)) {
    AEdit.value = ASelect.options[ASelect.selectedIndex].text;
    AEdit.AKeyValue = ASelect.options[ASelect.selectedIndex].AKeyValue;
    IgChangeRecordChanged(AEdit.AParent,1);
    if (AIdEdit != null) AIdEdit.value = ASelect.options[ASelect.selectedIndex].value;
    if (AEdit.AKeyValue == '$') IgFormSubmit(AEdit.AForm);
    if (AEdit.AKeyValue == '#') IgFormSubmit(AEdit.AForm);
    if (AEdit.ASubmitOnClick == 1) {
      eval("document.all." + AEdit.name + PPN + "Submitted.value = 1");
      AComboMustSubmit = true;
    };
    IgComboRefreshChildren(AEdit)
  };
  IgCheckJSFunction(jeClick,AEdit);
  IgCloseCombo(ASelect.id)
  AEdit.focus();
  var txtRange = AEdit.createTextRange();
  txtRange.select();
  if (AComboMustSubmit) {
    if (AEdit.AClassId == 27)
      IgCallServerByComboBox(AEdit);
    else {
      if (AEdit.AGrid) {
        var ACellId =  AEdit.id.substring(AEdit.id.indexOf("Cell"),AEdit.id.length);
        var P = ACellId.indexOf("_");
        eval("document.all." + AEdit.AGrid.id + PPN + "SelectedCol.value = " + ACellId.substring(4,P));
        eval("document.all." + AEdit.AGrid.id + PPN + "SelectedIndex.value = " + ACellId.substring(P+1,ACellId.length));
      };
      IgFormSubmit(AEdit.AForm);
    };
  };
};

function IgCheckMaxValue(theObject,MaxValue) {
  if (theObject.value > MaxValue) {
    ErrorCount++;
    theObject.focus();
    ErrorMessages += " - O campo '" + IgGetDisplayLabel(theObject) + "' não pode ser maior que '" + MaxValue + "'.\n";
    ReturnValue = false;
    return false;
  };
  return true;
};

function IgCheckMinValue(theObject,MinValue) {
  if (theObject.value < MinValue) {
    ErrorCount++;
    theObject.focus();
    ErrorMessages += " - O campo '" + IgGetDisplayLabel(theObject) + "' não pode ser menor que '" + MinValue + "'.\n";
    ReturnValue = false;
    return false;
  };
  return true;
};

function IgDiasMes(Mes,Ano) {
  eval("Mes="+Mes);
  switch (Mes) {
    case  1: return 31;
    case  2: if ((Ano % 4) == 0) return 29; else return 28;
    case  3: return 31;
    case  4: return 30;
    case  5: return 31;
    case  6: return 30;
    case  7: return 31;
    case  8: return 31;
    case  9: return 30;
    case 10: return 31;
    case 11: return 30;
    case 12: return 31;
    default: return 99;
  };
};

function IgCheckDate(theObject) {
  if ((typeof(theObject.value) == 'string') && (theObject.value != "")) {
    DiaStr = theObject.value.substr(0,2);
    MesStr = theObject.value.substr(3,2);
    AnoStr = theObject.value.substr(6,4);
    if ((DiaStr < 1) || (DiaStr > IgDiasMes(MesStr,AnoStr)) || (MesStr < 1) || (MesStr > 12)) {
      ReturnValue = false;
      ErrorCount++;
      theObject.focus();
      ErrorMessages += " - Data inválida no campo '" + IgGetDisplayLabel(theObject) + "'\n";
    };
  } else
    return true;
};

function IgCheckMesAno(theObject) {
  if ((typeof(theObject.value) == 'string') && (theObject.value != "")) {
    MesStr = theObject.value.substr(0,2);
    AnoStr = theObject.value.substr(3,4);
    if ((MesStr < 1) || (MesStr > 12)) {
      ReturnValue = false;
      ErrorCount++;
      theObject.focus();
      ErrorMessages += " - Mês inválido no campo '" + IgGetDisplayLabel(theObject) + "'\n";
    };
  } else
    return true;
};

function IgCheckConta(theObject) {
  if ((typeof(theObject.value) == 'string') && (theObject.value != "")) {
    var Len = theObject.value.length;
    var Err = ((theObject.value.substr(0,1) == '.') || (theObject.value.substr(Len,1) == '.'))
    if ((!Err) && (Len > 0)) {
      var LastChar = theObject.value.charAt(0);
      for(var F=1;(F<Len)&&(!Err);F++) {
        Err = ((LastChar=='.') && (theObject.value.charAt(F)=='.')) /* Nao pode ter dois pontos juntos */
        LastChar = theObject.value.charAt(F)
      };
    }
    if (Err) {
      ReturnValue = false;
      ErrorCount++;
      theObject.focus();
      ErrorMessages += " - Conta inválida no campo '" + IgGetDisplayLabel(theObject) + "'\n";
    };
  } else
    return true;
};

function IgDateFocus(theObject) {
  theObject.value = IgCleanNumber(theObject.value);
  theObject.select();
};

function IgMesAnoFocus(theObject) {
  theObject.value = IgCleanNumber(theObject.value);
  theObject.select();
};

function IgDateBlur(theObject) {
  theObject.value = IgCleanNumber(theObject.value);
  if (theObject.value != "") {
    p1 = theObject.value.indexOf("/");
    p2 = theObject.value.indexOf("/");
    if (p1 == p2) {
      if (p1 == -1) {
        DiaStr = theObject.value.substr(0,2);
        MesStr = theObject.value.substr(2,2);
        AnoStr = theObject.value.substr(4,4);
        CurDate = new Date();
        if (MesStr == "")
          MesStr = (CurDate.getMonth() + 1).toString();
        if (AnoStr == "")
          AnoStr = CurDate.getYear();
        if (parseInt(AnoStr,10) <= 29)
          AnoStr = 2000 + parseInt(AnoStr,10)
        else if (parseInt(AnoStr,10) <= 99)
          AnoStr = 1900 + parseInt(AnoStr,10);
        if (DiaStr.length < 2) DiaStr = '0' + DiaStr.toString();
        if (MesStr.length < 2) MesStr = '0' + MesStr.toString();
        theObject.value = DiaStr + "/" + MesStr + "/" + AnoStr;
      };
    };
  };
};

function IgMesAnoBlur(theObject) {
  theObject.value = IgCleanNumber(theObject.value);
  if (theObject.value != "") {
    p1 = theObject.value.indexOf("/");
    if (p1 == -1) {
      MesStr = theObject.value.substr(0,2);
      AnoStr = theObject.value.substr(2,4);
      CurDate = new Date();
      if (MesStr == "")
        MesStr = (CurDate.getMonth() + 1).toString();
      if (AnoStr == "")
        AnoStr = CurDate.getYear();
      if (parseInt(AnoStr,10) <= 29)
        AnoStr = 2000 + parseInt(AnoStr,10)
      else if (parseInt(AnoStr,10) <= 99)
        AnoStr = 1900 + parseInt(AnoStr,10);
      if (MesStr.length < 2) MesStr = '0' + MesStr.toString();
      theObject.value = MesStr + "/" + AnoStr;
    };
  };
};

function IgCheckTime(theObject) {
  if ((typeof(theObject.value) == 'string') && (theObject.value != "")) {
    HorStr = theObject.value.substr(0,2);
    MinStr = theObject.value.substr(2,2);
    if ((HorStr < 0) || (HorStr > 23) || (MinStr < 0) || (MinStr > 59)) {
      ReturnValue = false;
      ErrorCount++;
      theObject.focus();
      ErrorMessages += " - Hora inválida no campo '" + IgGetDisplayLabel(theObject) + "'\n";
    };
  } else
    return true;
};

function IgTimeFocus(theObject) {
  theObject.value = IgCleanNumber(theObject.value);
  theObject.select();
};

function IgTimeBlur(theObject) {
  theObject.value = IgCleanNumber(theObject.value);
  if (theObject.value != "") {
    HorStr = theObject.value.substr(0,2);
    MinStr = theObject.value.substr(2,2);
    if (HorStr.length < 2) HorStr = '0' + HorStr.toString();
    if (MinStr.length < 2) MinStr = '0' + MinStr.toString();
    if (MinStr.length < 2) MinStr = '0' + MinStr.toString();
    theObject.value = HorStr + ":" + MinStr;
  };
};

function IgCEPFocus(theObject) {
  theObject.value = IgCleanNumber(theObject.value);
  theObject.select();
};

function IgCEPBlur(theObject) {
  theObject.value = IgCleanNumber(theObject.value);
  if (theObject.value != "")
    if (theObject.value.substr(0,1) != " ")
      theObject.value = theObject.value.substr(0,5) + "-" + theObject.value.substr(5,3);
}

function IgDigVerFocus(theObject) {
  theObject.value = IgCleanNumber(theObject.value);
  theObject.select();
};

function IgDigVerBlur(theObject) {
  theObject.value = IgCleanNumber(theObject.value);
  if (theObject.value != "")
    if (theObject.value.substr(0,1) != " ") {
      var L = theObject.value.length;
      if (L > 1)
        theObject.value = theObject.value.substr(0,L-1) + "-" + theObject.value.substr(L-1,1);
    };
}

function IgCleanNumber(AVal) {
  var elimina_texto = AVal;
  var texto_limpo   = "";
  for (var k = 0; k < elimina_texto.length; k++) {
    if ((elimina_texto.charAt(k) >='0') && (elimina_texto.charAt(k) <='9'))
      texto_limpo = texto_limpo + elimina_texto.charAt(k);
  };
  return texto_limpo;
}

function IgCleanCurrency(AVal,ANumCasasDec) {
  if (ANumCasasDec == null) ANumCasasDec = 2
  var elimina_texto = AVal.trim();
  var texto_limpo = "";
  var tem_menos = (elimina_texto.charAt(0) == '-');
  for (var k = 0; k < elimina_texto.length; k++) {
    if (((elimina_texto.charAt(k) >='0') && (elimina_texto.charAt(k) <='9')) || (elimina_texto.charAt(k) == ',') || ((elimina_texto.charAt(k) == '.') && (k >= elimina_texto.length-ANumCasasDec-1)))
      texto_limpo = texto_limpo + elimina_texto.charAt(k);
  };
  if (tem_menos) texto_limpo = '-' + texto_limpo;
  return texto_limpo;
}

function IgCleanPercVal(AVal) {
  var elimina_texto = AVal.trim();
  var texto_limpo = "";
  var tem_menos = (elimina_texto.charAt(0) == '-');
  for (var k = 0; k < elimina_texto.length; k++) {
    if (((elimina_texto.charAt(k) >='0') && (elimina_texto.charAt(k) <='9')) || (elimina_texto.charAt(k) == ',') || (elimina_texto.charAt(k) == '.'))
      texto_limpo = texto_limpo + elimina_texto.charAt(k);
  };
  if (tem_menos) texto_limpo = '-' + texto_limpo;
  return texto_limpo;
}

function IgCurrencyFocus(theObject) {
  theObject.value = IgCleanCurrency(theObject.value,theObject.ANumCasasDec);
  theObject.select();
};

function IgCurrencyBlur(theObject) {
  var NumCasasDec = theObject.ANumCasasDec;
  if (NumCasasDec==null) NumCasasDec = 2;
  var HasMinus = (theObject.value.substring(0,1) == '-');
  theObject.value = IgCleanCurrency(theObject.value,NumCasasDec);
  if (theObject.value != "") {
    if (theObject.value.substr(0,1) != " ") {
      var p = theObject.value.indexOf(",");
      if (p==-1) p = theObject.value.indexOf(".");
      if (p!=-1) {
        var Decimals = theObject.value.substr(p+1,NumCasasDec);
        while (Decimals.length < NumCasasDec) Decimals = Decimals + '0';
        theObject.value = theObject.value.substr(0,p) + Decimals;
      } else
        for (var f=0;f<NumCasasDec;f++) { theObject.value = theObject.value + '0'; }
      var i = 0;
      var j = theObject.value.length;
      while (i < j) {
        if (i==NumCasasDec) theObject.value = theObject.value.substr(0,j-i) + ',' + theObject.value.substr(j-i,NumCasasDec);
        if ((i==(NumCasasDec+4)) || (i==(NumCasasDec+8)) || (i==(NumCasasDec+12)) || (i==(NumCasasDec+16))) theObject.value = theObject.value.substr(0,j-i) + '.' + theObject.value.substr(j-i,i);
        i++;
        j = theObject.value.length;
      };
    };
    if (HasMinus&&theObject.value.substring(0,1)!='-') theObject.value= '-' + theObject.value; 
  };
};

function IgPercValBlur(theObject) {
  var NumCasasDec = theObject.ANumCasasDec;
  if (NumCasasDec == null) NumCasasDec = 2;
  var HasPerc = (theObject.value.indexOf('%') != -1)
  var tem_menos = (theObject.value.charAt(0) == '-');
  theObject.value = IgCleanPercVal(theObject.value);
  if (theObject.value != "")
    if (theObject.value.substr(0,1) != " ") {
      var p = theObject.value.indexOf(",");
      if (p==-1) p = theObject.value.indexOf(".");
      if (p!=-1) {
        var Decimals = theObject.value.substr(p+1,NumCasasDec);
        while (Decimals.length < NumCasasDec) Decimals = Decimals + '0';
        theObject.value = theObject.value.substr(0,p) + Decimals;
      } else
        for (var f=0;f<NumCasasDec;f++) { theObject.value = theObject.value + '0'; }
      var i = 0;
      var j = theObject.value.length;
      while (i < j) {
        if (i==NumCasasDec) theObject.value = theObject.value.substr(0,j-i) + ',' + theObject.value.substr(j-i,NumCasasDec);
        i++;
        j = theObject.value.length;
      };
    };
  if (HasPerc)
    theObject.value = theObject.value + '%';
  if (tem_menos&&theObject.value.substring(0,1)!='-') 
    theObject.value = '-' + theObject.value;
};

function IgCargaHorBlur(theObject) {
  if (theObject.value != "")
    if (theObject.value.substr(0,1) != " ") {
      if (theObject.value == ":") theObject.value = "0:0";
      var p = theObject.value.indexOf(":");
      if (p!=-1) {
        var Decimals = theObject.value.substr(p+1,2);
        while (Decimals.length < 2) Decimals = Decimals + '0';
        theObject.value = theObject.value.substr(0,p) + ':' + Decimals;
      } else {
        theObject.value = theObject.value + ':';
        for (var f=0;f<2;f++) { theObject.value = theObject.value + '0'; }
      };
    };
};

function IgCheckCPF(campo) {
  var Ok = true;
  if (campo.value != "") {
    var CleanValue = IgCleanNumber(campo.value);
    if (CleanValue.length == 11) {
      if (!IgTestaCPF(CleanValue))
        Ok = false;
    } else {
      Ok = false;
    }
    if (!Ok) {
      ReturnValue = false;
      campo.focus();
      ErrorCount++;
      ErrorMessages += " - CPF Inválido\n";
    };
  }
}

function IgTestaCPF(verificar) {
   var digito = verificar.toString();
   var soma1 = 0;
       soma1 = soma1 + 10 * digito.charAt(0);
       soma1 = soma1 +  9 * digito.charAt(1);
       soma1 = soma1 +  8 * digito.charAt(2);
       soma1 = soma1 +  7 * digito.charAt(3);
       soma1 = soma1 +  6 * digito.charAt(4);
       soma1 = soma1 +  5 * digito.charAt(5);
       soma1 = soma1 +  4 * digito.charAt(6);
       soma1 = soma1 +  3 * digito.charAt(7);
       soma1 = soma1 +  2 * digito.charAt(8);
   var divisao1    = soma1 / 11;
   var multiplica1 = parseInt(divisao1,10) * 11;
   var resto1      = soma1 - multiplica1;
   if (resto1 <= 1) {var digi1 = 0} else {var digi1 = 11 - resto1}
   var soma2 = 0;
       soma2 = soma2 + 11 * digito.charAt(0);
       soma2 = soma2 + 10 * digito.charAt(1);
       soma2 = soma2 +  9 * digito.charAt(2);
       soma2 = soma2 +  8 * digito.charAt(3);
       soma2 = soma2 +  7 * digito.charAt(4);
       soma2 = soma2 +  6 * digito.charAt(5);
       soma2 = soma2 +  5 * digito.charAt(6);
       soma2 = soma2 +  4 * digito.charAt(7);
       soma2 = soma2 +  3 * digito.charAt(8);
       soma2 = soma2 +  2 * digi1;
   var divisao2    = soma2 / 11;
   var multiplica2 = parseInt(divisao2,10) * 11;
   var resto2      = soma2 - multiplica2;
   if (resto2 <= 1) {var digi2 = 0} else {var digi2 = 11 - resto2}
   if (digito.charAt(9) == digi1.toString() & digito.charAt(10) == digi2.toString())
     return(true)
   else {
     return(false);
   };
};

function IgCPFFocus(theObject) {
  theObject.value = IgCleanNumber(theObject.value);
  theObject.select();
};

function IgCPFBlur(theObject) {
  theObject.value = IgCleanNumber(theObject.value);
  if (theObject.value != "") {
    while (theObject.value.length < 14) theObject.value = theObject.value.concat('0');
    theObject.value = theObject.value.substr(0,3) + '.' +
      theObject.value.substr(3,3) + '.' +
      theObject.value.substr(6,3) + '-' +
      theObject.value.substr(9,2);
  };
};

function IgCheckCNPJ(campo) {
  if (campo.value != "") {
    var CleanValue = IgCleanNumber(campo.value);
    if (CleanValue.length == 14) {
      if (!IgTestaCNPJ(CleanValue))
        ReturnValue = false;
    } else {
      ReturnValue = false;
    }
    if (!ReturnValue) {
      campo.focus();
      ErrorCount++;
      ErrorMessages += " - CNPJ Inválido\n";
    };
  };
};

function IgTestaCNPJ(verificar){
   var digito = verificar.toString();
   var soma1 = 0;
       soma1 = soma1 + 5 * digito.charAt(0);
       soma1 = soma1 + 4 * digito.charAt(1);
       soma1 = soma1 + 3 * digito.charAt(2);
       soma1 = soma1 + 2 * digito.charAt(3);
       soma1 = soma1 + 9 * digito.charAt(4);
       soma1 = soma1 + 8 * digito.charAt(5);
       soma1 = soma1 + 7 * digito.charAt(6);
       soma1 = soma1 + 6 * digito.charAt(7);
       soma1 = soma1 + 5 * digito.charAt(8);
       soma1 = soma1 + 4 * digito.charAt(9);
       soma1 = soma1 + 3 * digito.charAt(10);
       soma1 = soma1 + 2 * digito.charAt(11);
   var divisao1    = soma1 / 11;
   var multiplica1 = parseInt(divisao1,10) * 11;
   var resto1      = soma1 - multiplica1;
   if (resto1 <= 1) {var digi1 = 0} else {var digi1 = 11 - resto1}
   var soma2 = 0;
       soma2 = soma2 + 6 * digito.charAt(0);
       soma2 = soma2 + 5 * digito.charAt(1);
       soma2 = soma2 + 4 * digito.charAt(2);
       soma2 = soma2 + 3 * digito.charAt(3);
       soma2 = soma2 + 2 * digito.charAt(4);
       soma2 = soma2 + 9 * digito.charAt(5);
       soma2 = soma2 + 8 * digito.charAt(6);
       soma2 = soma2 + 7 * digito.charAt(7);
       soma2 = soma2 + 6 * digito.charAt(8);
       soma2 = soma2 + 5 * digito.charAt(9);
       soma2 = soma2 + 4 * digito.charAt(10);
       soma2 = soma2 + 3 * digito.charAt(11);
       soma2 = soma2 + 2 * digi1;
   var divisao2    = soma2 / 11;
   var multiplica2 = parseInt(divisao2,10) * 11;
   var resto2      = soma2 - multiplica2;
   if (resto2 <= 1) {var digi2 = 0} else {var digi2 = 11 - resto2}
   if (digito.charAt(12) == digi1.toString() & digito.charAt(13) == digi2.toString())
     return(true)
   else {
     return false
   };
};

function IgCNPJFocus(theObject) {
  theObject.value = IgCleanNumber(theObject.value);
  theObject.select();
};

function IgPercValFocus(theObject) {
  var HasPerc = (theObject.value.indexOf('%') != -1)
  theObject.value = IgCleanPercVal(theObject.value);
  if (HasPerc)
    theObject.value = theObject.value + '%';
  theObject.select();
};

function IgCNPJBlur(theObject) {
  theObject.value = IgCleanNumber(theObject.value);
  if (theObject.value != "") {
    while (theObject.value.length < 14) theObject.value = theObject.value.concat('0');
    theObject.value = theObject.value.substr(0,2) + '.' +
      theObject.value.substr(2,3) + '.' +
      theObject.value.substr(5,3) + '/' +
      theObject.value.substr(8,4) + '-' +
      theObject.value.substr(12,2);
  };
};

function IgSetSrcElement(AControl,ASrcElement) {
  AControl.ASrcElement = ASrcElement;
  for(var i=0; i < AControl.children.length; i++) {
    IgSetSrcElement(AControl.children(i),ASrcElement);
  };
};

function IgStringKeyPress(AThis,keyCode) {
  if ((typeof(AThis.AValidChars != "undefined")) && (AThis.AValidChars != null) && (AThis.AValidChars != "")) {
    var C = String.fromCharCode(keyCode);
    if (AThis.AValidChars.indexOf(C) == -1) return (false);
  }
  IgChangeRecordChanged(AThis.AParent,1);
  return(true);
};

function IgNumberKeyPress(theObject,keyCode) {
  if ((keyCode < 48) || (keyCode > 57))
    return(false);
  else {
    IgChangeRecordChanged(theObject.AParent,1);
    return(true);
  };
};

function IgCurrencyKeyPress(theObject,keyCode) {
  if (((keyCode < 48) || (keyCode > 57))  && (keyCode != 44) && (keyCode != 45) && (keyCode != 46))
    return(false);
  else {
    if (theObject.AParent != null) IgChangeRecordChanged(theObject.AParent,1);
    return(true);
  };
};

function IgContaKeyPress(theObject,keyCode) {
  if (((keyCode < 48) || (keyCode > 57))  && (keyCode != 46))
    return(false);
  else {
    if (keyCode >= 32) IgChangeRecordChanged(theObject.AParent,1);
    return(true);
  };
};

function IgApplyMask(AValue,AMask) {
  if (AMask) {
    AValue = AValue.trim();
    if (AValue.length <= AMask.length) {
      I = AValue.length;
      AValue = AValue.substring(0,I) + AMask.substring(I);
    }
  }
  return AValue;
}

function IgContaKeyDown() {
  var AInput = window.event.srcElement;
  var keyCode = window.event.keyCode;
  var Pos = IgGetSelectionStart(AInput);
  var End = IgGetSelectionEnd(AInput);
  var Mask = AInput.AMask;
  if (Mask==null) Mask="";
  if ((((keyCode >= 48) && (keyCode <= 57)) || ((keyCode >= 96) && (keyCode <= 105))) && (Pos < Mask.length)) { // numeros
    if (keyCode >= 96) keyCode-=48;
    if ((End - Pos) == AInput.value.length) AInput.value = Mask;
    AInput.value = AInput.value.substring(0,Pos) + String.fromCharCode(keyCode) + Mask.substring(Pos+1);
    if (Mask.charAt(Pos+1) == '.') Pos = Pos + 1;
    IgSetSelectionRange(AInput,Pos+1,Pos+1);
    IgChangeRecordChanged(AInput.AParent,1);
  } else {
    switch (keyCode) {
      case 8: if (Pos>0) { // backspace
          if (Mask.charAt(Pos-1) == '.') Pos = Pos - 1;
          AInput.value = AInput.value.substring(0,Pos-1) + Mask.substring(Pos-1);
          IgSetSelectionRange(AInput,Pos-1,Pos-1);
          AInput.Key = "";
          IgChangeRecordChanged(AInput.AParent,1);
        }
        break;
      case 37: // left
        if (Mask.charAt(Pos-1) == '.') Pos = Pos - 1;
        IgSetSelectionRange(AInput,Pos-1,Pos-1);
        break;
      case 39: // right
        if (Mask.charAt(Pos+1) == '.') Pos = Pos + 1;
        IgSetSelectionRange(AInput,Pos+1,Pos+1);
        break;
      case 36: // home
        IgSetSelectionRange(AInput,0,0);
        break;
      case 35: // end
        IgSetSelectionRange(AInput,Mask.length,Mask.length);
        break;
      case 46: // delete
        if ((Pos==0)&&(End==AInput.value.length)) AInput.value="";
        AInput.value = IgApplyMask(AInput.value,Mask);
        AInput.Key = "";
        IgSetSelectionRange(AInput,Pos,Pos);
        IgChangeRecordChanged(AInput.AParent,1);
        break;
    }
  }
  if ((keyCode != 9)&&(keyCode!=13)) window.event.returnValue=false;
}

function IgCargaHorKeyPress(theObject,keyCode) {
  if (((keyCode < 48) || (keyCode > 57))  && (keyCode != 58))
    return(false);
  else {
    IgChangeRecordChanged(theObject.AParent,1);
    return(true);
  };
};

function IgPercValKeyPress(theObject,keyCode) {
  if (((keyCode < 48) || (keyCode > 57))  && (keyCode != 44) && (keyCode != 46) && (keyCode != 37))
    return(false);
  else {
    IgChangeRecordChanged(theObject.AParent,1);
    return(true);
  };
};

function IgFormTopIconClick(IconName) {
  if (AlreadySubmitting != 0) return;
  var AForm = document.all.CMP0;
  var AHidField = eval("document.all.CMP0" + PPN + "FormTop" + IconName);
  AHidField.value = 1;
  IgFormSubmit(AForm);
};

function IgFormTopBackClick() {
  IgFormTopIconClick("Back");
};

function IgFormTopHelpClick() {
  IgFormTopIconClick("Help");
};

function IgFormTopNewClick() {
  IgFormTopIconClick("New");
};

function IgFormTopModifyClick() {
  IgFormTopIconClick("Modify");
};

function IgFormTopFirstClick() {
  IgFormTopIconClick("First");
};

function IgFormTopPrevClick() {
  IgFormTopIconClick("Prev");
};

function IgFormTopNextClick() {
  IgFormTopIconClick("Next");
};

function IgFormTopLastClick() {
  IgFormTopIconClick("Last");
};

function IgGetInputByDtsFIndex(ADtsId,AFIndex) {
  for(var i=0; i < document.forms(0).elements.length; i++) if (document.forms(0).elements(i).ADtsId == ADtsId) {
    if (document.forms(0).elements(i).AFIndex != null)
      if (document.forms(0).elements(i).AFIndex == AFIndex)
        return document.forms(0).elements(i);
  };
  return null;
};

function IgClearKeyValue(AGroup,AKFld) {
  AKeyValues = eval("document.all." + AGroup.id + PPN + "KeyValues");
  AListStr2 = AKeyValues.value;
  AResult = "";
  while (AListStr2 != "") {
    KValue = IgGetItemListStr2(MAGICCHAR);
    P = KValue.indexOf("=");
    KFld = KValue.substr(0,P);
    if ((KFld == AKFld) || (AKFld == "")) // "" significa que é para limpar todos
      KVal = ""
    else
      KVal = KValue.substr(P+1,KValue.length-P-1);
    AResult = AResult + KFld + "=" + KVal + MAGICCHAR;
  }
  AResult = AResult.substr(0,AResult.length-1);
  AKeyValues.value = AResult;
}

function IgGridSetKeyValues(AGroup,ARowData) {
  AKeyValues = eval("document.all." + AGroup.id + PPN + "KeyValues");
  AListStr2 = AKeyValues.value;
  AResult = "";
  while (AListStr2 != "") {
    KValue = IgGetItemListStr2(MAGICCHAR);
    P = KValue.indexOf("=");
    KFld = KValue.substr(0,P);
    KVal = ARowData[KFld];
    AResult = AResult + KFld + "=" + KVal + MAGICCHAR;
  }
  AResult = AResult.substr(0,AResult.length-1);
  AKeyValues.value = AResult;
}

function IgComboFindOption(ASelect,AKeyValue) {
  for(var f=0;f<ASelect.options.length;f++) {
    if (ASelect.options(f).AKeyValue == AKeyValue) return f;
  };
  return -1;
};

function IgCheckBoxChanged(ACheckBox,ANewValue) {
  var ATmp = eval("document.all." + ACheckBox.id + PPN + "SubmittedValue");
  if (ANewValue)
    ATmp.value = "S"
  else
    ATmp.value = "N";
  ACheckBox.checked = ANewValue;
};

function IgGetHeaderName(ACheckBox)  {
  var P = ACheckBox.name.indexOf("Cell");
  if (P != -1) {
    var AStr2 = ACheckBox.name.substr(P,ACheckBox.name.length);
    var Q = AStr2.indexOf("_");
    return ACheckBox.name.substr(0,P+Q);
  } else
    return "";
}

function IgCheckBoxAllChecked(ACheckBox,AChecked) {
  var AName = IgGetHeaderName(ACheckBox);
  if (AName != "") {
    AHeaderCheck = eval("document.all." + AName);
    if (AHeaderCheck != null) {
      AHeaderCheck.checked = false;
      j = 1;
      while (eval("Chk=document.all." + AHeaderCheck.name + '_' + (j++)) != null)
        if (!Chk.checked) return;
      AHeaderCheck.checked = true;
    };
  };
}

function IgCheckBoxUncheckAll(ACheckBox) {
  var AName = IgGetHeaderName(ACheckBox);
  j = 1;
  while (eval("Chk=document.all." + AName + '_' + (j++)) != null) {
    Chk.checked = false;
  };
}

function IgCheckBoxHeaderClick() {
  if (AlreadySubmitting != 0) return;
  var ACheckBox = window.event.srcElement;
  var P = ACheckBox.name.indexOf("_");
  var AGrid = eval("document.all." + ACheckBox.name.substr(0,P));
  j = 1;
  while (eval("Chk=document.all." + ACheckBox.name + '_' + (j++)) != null) {
    Chk.checked = ACheckBox.checked;
    IgGridSelectRow(AGrid,parseInt(Chk.Row,10)+1,Chk.checked);
  }
}

function IgCheckBoxItemClick() {
  if (AlreadySubmitting != 0) return;
  var ACheckBox = window.event.srcElement;
  if (ACheckBox.name.indexOf('_Cell0_') == -1) return; // Para distinguir de checkboxes do meio do grid que nao selecionam a linha
  if (ACheckBox.Typ == 2) { // CheckBox
    IgCheckBoxAllChecked(ACheckBox,ACheckBox.checked);
    if (!ACheckBox.checked) {
      var P = ACheckBox.name.indexOf("_");
      var AGrid = eval("document.all." + ACheckBox.name.substr(0,P));
      IgGridSelectRow(AGrid,parseInt(ACheckBox.Row,10)+1,ACheckBox.checked);
    };
    if ((ACheckBox.Clk != 0) && (ACheckBox.checked)) {
      AListStr2 = ACheckBox.name;
      IgGridClick(IgGetItemListStr2(PPN),ACheckBox.Row,true);
    };
  } else if (ACheckBox.Typ == 4) { // RadioButton
    IgCheckBoxUncheckAll(ACheckBox);
    if (ACheckBox.Clk != 0) {
      AListStr2 = ACheckBox.name;
      IgGridClick(IgGetItemListStr2(PPN),ACheckBox.Row);
    };
    ACheckBox.checked = true;
  };
}

function IgCheckBoxClick() {
  if (AlreadySubmitting != 0) return;
  ACheckBox = window.event.srcElement;
  IgCheckBoxChanged(ACheckBox,ACheckBox.checked);
  IgChangeRecordChanged(ACheckBox.AParent,1);
}

function IgRemoveNbSp(AValue) {
  while ((P = AValue.indexOf(NBSP)) != -1)
    AValue = AValue.substr(0,P) + ' ' + AValue.substr(P+NBSP.length,AValue.length);
  return AValue;
}

function IgExtractAccessKey(AValue) {
  AAccessKey = "";
  AStartCaption = "";
  AEndCaption = "";
  if ((P = AValue.indexOf('&')) != -1) {
    AStartCaption = AValue.substr(0,P);
    AEndCaption = AValue.substr(P+2,AValue.length);
    AAccessKey = AValue.substr(P+1,1);
    AValue = AStartCaption + AEndCaption;
  } else
    AEndCaption = AValue;
  return AValue;
}

function IgGridSelectRow(AGrid,ARow,ASelect) {
  AGrid.LastRowSel = ARow;
  var AObjTbl = eval("document.all.Tbl" + AGrid.id);
  if (!AObjTbl) return;
  if (AObjTbl.rows.length <= ARow) return;
  if (ARow<0) return;
  var AObjRow = AObjTbl.rows(ARow);
  var AObjCell = null
  if (AObjRow != null) {
    for(var f=0;f<AObjRow.cells.length;f++) {
      AObjCell = AObjRow.cells(f);
      if (ASelect)
        AObjCell.style.fontWeight='bold'
      else
        AObjCell.style.fontWeight='normal'
    };
  };
}

function IgGridClick(AGridId,ARow,ADontClk) {
  if (AlreadySubmitting != 0) return;
  var AInput = null;
  if (ARow != -1) {
    eval("AGrid = document.all." + AGridId);
    eval("RowData = GrdData" + AGridId + ARow);
    var APrevInput = null
    for(var i=0; i < RowData.length; i++) {
      RowData[i] = IgRemoveNbSp(RowData[i]);
      var AInput = eval("document.all.CMP" + AGrid.AHdrInputIndex[i]);
      if ((AInput != APrevInput) && (AInput != null)) {
        APrevInput = AInput; // Para evitar que lookupscompostos sejam preenchidos mais de uma vez com valores diferentes
        switch (AInput.AClassId) {
          case  6 :                                                       // TIgEdit
          case 28 :                                                       // TAjaxEdit
          case 24 : AInput.value = IgRTrim(RowData[i]);                   // TIgHiddenEdit
                    IgInputFormatValue(AInput);
                    break;
          case 18 : AInput.value = IgDecodeNewLines(RowData[i]); break;   // TIgMemo
          case 27 :                                                       // TAjaxComboBox
          case 10 :                                                       // TIgComboBox
            AInput.AKeyValue = RowData[i];
            AInput.ASelect.selectedIndex = IgComboFindOption(AInput.ASelect,AInput.AKeyValue);
            if (AInput.ASelect.selectedIndex != -1)
              AInput.value = AInput.ASelect.options(AInput.ASelect.selectedIndex).innerText
            else
              AInput.value = "";
            AInput.value = IgTrim(AInput.value);
            break;
          case 17 :                                                       // TIgLookupComboBox
          case 22 :                                                       // TIgDepLookup
            AInput.AKeyValue = RowData[i];
            AInput.value = "";
            for(var j=0;j<AInput.ALookupItemsCount;j++) {
              AInput.value = AInput.value + IgRemoveNbSp(RowData[i+j+1]) + " "; // Marreta para o caso de item nao existir na lista cacheada
            };
//            AInput.ASelect.selectedIndex = ARow+1; // Para que o selectedIndex corresponda à linha do grid que foi clicada
            AInput.ASelect.selectedIndex = IgComboFindOption(AInput.ASelect,AInput.AKeyValue);
            if (AInput.ASelect.selectedIndex == -1) { // Se nao existe o item na lista, inclui
              var AOption = document.createElement("OPTION");
              AOption.AKeyValue = AInput.AKeyValue;
              AOption.style.cssText = IgGetStyle("TIgGridSelectOption");
              AInput.ASelect.options.add(AOption);
              AOption.innerText = AInput.value;
              AInput.ASelect.selectedIndex = IgComboFindOption(AInput.ASelect,AInput.AKeyValue);
            };
            AInput.value = IgTrim(AInput.value);
            AComboMustSubmit = false;
            IgComboRefreshChildren(AInput);
            if (AComboMustSubmit) IgFormSubmit(AInput.AForm);
            break;
          case 11 : IgCheckBoxChanged(AInput,(RowData[i] == "S")); break;  // TIgCheckBox
        };
      };
    };
    IgGridSetKeyValues(AGrid.AParent,RowData);
    IgChangeStatus(AGrid.AParent,1); // gsEditing
    IgChangeRecordChanged(AGrid.AParent,0);
    eval("document.all." + AGrid.id + PPN + "SelectedIndex.value = " + ARow); // Atualiza SelectedIndex em todos os casos, mas só vai submeter se....
    AChk = null;
    var Idx=0;
    while (!ADontClk && AChk==null && Idx<RowData.length) {
      AChkName = AGrid.id + PPN + "Cell" + Idx + "_" + (parseInt(ARow,10)+1); // parseInt pq este lixo do javascript as vezes interpreta como concatenate ????
      AChk = eval("document.all." + AChkName);
      Idx++;
    };
    if (AGrid.LastRowSel)
      IgGridSelectRow(AGrid,AGrid.LastRowSel,false);
    if (AChk != null) {
      if (AChk.Typ == 4) IgCheckBoxUncheckAll(AChk);
      AChk.checked = !AChk.checked;
    };
    IgGridSelectRow(AGrid,parseInt(ARow,10)+1,true);
    //if (AGrid.ASelOnClick == 1) {
      IgGridSelectRow(AGrid,AGrid.LastRowSel,true);
    //}
    if ((AGrid.ASubmitOnClick == 1) && ((AGrid.AGridStyle == 0) || (AGrid.AGridStyle == 2) || (AGrid.AGridStyle == 3))) { // Só submete se for Table. Select só submete no doubleclick
      eval("document.all." + AGrid.id + PPN + "Submitted.value = 1");
      IgFormSubmit(AGrid.AForm);
    };
  };
};

function IgGridSelectClick() {
  if (AlreadySubmitting != 0) return;
  ASelect = window.event.srcElement;
  IgGridClick(ASelect.AGrid.id,ASelect.selectedIndex);
};

function IgGridSelectDblClick() {
  ASelect = window.event.srcElement;
  eval("document.all." + ASelect.AGrid.id + PPN + "SelectedIndex.value = " + ASelect.selectedIndex);
  IgFormSubmit(ASelect.AGrid.AForm);
};

function IgInsertOnForm(AForm,AId,AName,AValue) {
  var Name = AId + PPN + AName;
  var Ctr = eval("document.all." + Name);
  if (Ctr != null) AForm.removeChild(Ctr); // Necessário para nao ser criado de novo nas mudanças de PageControl
  AForm.insertAdjacentHTML('afterBegin',
    '<input type=hidden name="' + Name + '" value=' + AValue + '>');
};

function ResizeControl(C,DHgt,DWdt) {
  if ((C.AAligners & 1) == 1) { // gkBottom
    C.style.posHeight = C.OrgHeight + DHgt;
  };
  if ((C.AAligners & 2) == 2) { // gkRight
    C.style.posWidth = C.OrgWidth + DWdt;
  };
  if ((C.AAligners & 4) == 4) { // gkLeft
    C.style.posLeft = C.OrgLeft + DWdt;
  };
  if ((C.AAligners & 8) == 8) { // gkTop
    C.style.posTop = C.OrgTop + DHgt;
  };
}

function ResizeEditor(C,DHgt,DWdt) {
  var AEdtFrame = document.all.editorComposition0;
  if ((C.AAligners & 1) == 1) { // gkBottom
    C.style.posHeight = C.OrgHeight + DHgt;
    AEdtFrame.style.posHeight = 150 + DHgt;
  };
  if ((C.AAligners & 2) == 2) { // gkRight
    C.style.posWidth = C.OrgWidth + DWdt;
    AEdtFrame.style.posWidth = 596 + DWdt;
  };
  if ((C.AAligners & 4) == 4) { // gkLeft
    C.style.posLeft = C.OrgLeft + DWdt;
  };
  if ((C.AAligners & 8) == 8) { // gkTop
    C.style.posTop = C.OrgTop + DHgt;
  };
}

function ResizeCheckBox(C,DHgt,DWdt) {
  var ATbl = eval("document.all.Tbl" + C.id);
  if ((C.AAligners & 1) == 1) { // gkBottom
    ATbl.style.posHeight = C.OrgHeight + DHgt;
  };
  if ((C.AAligners & 2) == 2) { // gkRight
    ATbl.style.posWidth = C.OrgWidth + DWdt;
  };
  if ((C.AAligners & 4) == 4) { // gkLeft
    ATbl.style.posLeft = C.OrgLeft + DWdt;
  };
  if ((C.AAligners & 8) == 8) { // gkTop
    ATbl.style.posTop = C.OrgTop + DHgt;
  };
}

function ResizeComboBox(C,DHgt,DWdt) {
  if ((C.AAligners & 1) == 1) { // gkBottom
    C.style.posHeight = C.OrgHeight + DHgt;
  };
  if ((C.AAligners & 2) == 2) { // gkRight
    C.style.posWidth = C.OrgWidth + DWdt;
  };
  if ((C.AAligners & 4) == 4) { // gkLeft
    C.style.posLeft = C.OrgLeft + DWdt;
    C.AImage.style.posLeft = C.style.posLeft + C.style.posWidth;
  };
  if ((C.AAligners & 8) == 8) { // gkTop
    C.style.posTop = C.OrgTop + DHgt;
    C.AImage.style.posTop = C.style.posTop + 1;;
  };
};

function IgResizeEnd() {
  var C = IgResNext;
  if (C != null) {
    var DHgt = document.body.offsetHeight - C.AForm.BodyHeight;
    var DWdt = document.body.offsetWidth - C.AForm.BodyWidth;
    if ((DHgt != 0) || (DWdt != 0)) {
      if (DHgt < 0) DHgt = 0;
      if (DWdt < 0) DWdt = 0;
      while (C != null) {
        if (C.AClassId == 11) // Caso especial de CheckBox
          ResizeCheckBox(C,DHgt,DWdt)
        else if ((C.AClassId == 10) || (C.AClassId == 17) || (C.AClassId == 22))   // Casos especiais de ComboBox, LookupComboBox e DepLookup
          ResizeComboBox(C,DHgt,DWdt)
        else if (C.AClassId == 23)
          ResizeEditor(C,DHgt,DWdt)
        else
          ResizeControl(C,DHgt,DWdt)
        C = C.AIgResNext;
      };
    };
  };
};

function IgResize() {
  window.clearTimeout(IgResTM)
  IgResTM = window.setTimeout("IgResizeEnd()",250);
};

function IgTplAlign(AControl) {
  AControl.AIgResNext = null;
  if ((AControl.AAligners != 0) && (AControl.AAligners != null)) {
    AControl.AIgResNext = IgResNext;
    IgResNext = AControl;
    AControl.OrgTop = AControl.style.posTop;
    AControl.OrgLeft = AControl.style.posLeft;
    AControl.OrgWidth = AControl.style.posWidth;
    AControl.OrgHeight = AControl.style.posHeight;
    if (AControl.AClassId == 11) { // Caso especial de CheckBox
      var ATbl = eval("document.all.Tbl" + AControl.id);
      AControl.OrgTop = ATbl.style.posTop;
      AControl.OrgLeft = ATbl.style.posLeft;
      AControl.OrgWidth = ATbl.style.posWidth;
      AControl.OrgHeight = ATbl.style.posHeight;
      ResizeCheckBox(AControl,DHgt,DWdt)
    } else if ((AControl.AClassId == 10) || (AControl.AClassId == 17) || (AControl.AClassId == 22)) { // Casos especiais de ComboBox, LookupComboBox e DepLookup
      ResizeComboBox(AControl,DHgt,DWdt)
    } else if (AControl.AClassId == 23) { // IgTextEditor;
      ResizeEditor(AControl,DHgt,DWdt)
    } else {
      ResizeControl(AControl,DHgt,DWdt)
    };
  };
};

function IgTplPpmCnt(AGroup) {
  AGroup.PPM = null;
  if ((AGroup.APpmCnt != 0) && (AGroup.APpmCnt != null)) {
    AListStr = eval("Ppm" + AGroup.AComponentIndex);
    var AToInsert = AGroup.AForm;
    if (AToInsert == null) AToInsert = AGroup; // Caso de Form
    AToInsert = AGroup;
    var APpmId = "Ppm" + AGroup.id;
    var AHtmlStr =
      '<table id=' + APpmId + ' border=2 class=TIgPopupMenu cellpadding=1 cellspacing=1 ' +
      'style="left:0;top:0;cursor:hand;float:none;position:absolute;z-index:99999;visibility:hidden;" ' +
      'onmouseout="IgPopupMenuMouseOut()">';
    while (AListStr != "") {
      var AKey = IgGetItemListStr();
      var ADsc = IgGetItemListStr();
      AHtmlStr +=
        '<tr onmouseover="IgPopupMenuItemMouseOver(this)" onmouseout="IgPopupMenuItemMouseOut(this)" onclick="IgPopupMenuClick(' + AKey + ')">' +
        '<td>' + ADsc + '</td></tr>';
    };
    AHtmlStr += '</table>';
    AToInsert.insertAdjacentHTML('beforeEnd',AHtmlStr);
    AGroup.PPM = eval("document.all." + APpmId);
  };
};

function IgTplGroup(AForm,AParent,AGroup,AStatus,ARecordChanged,ADefaultControlId,AKeyValues,ADtsId,ADetailGrpList,ADetailKFld,AMasterIdx,AClickNew,AAligners,APpmCnt) {
  if ((ADefaultControlId != -1)&&(DefaultControlId==-1)) DefaultControlId = ADefaultControlId; 
  AGroup.value = "";
  AGroup.AForm = AForm;
  AGroup.AParent = AParent;
  AGroup.AStatus = AStatus;
  AKeyValues = '"' + AKeyValues + '"';
  AGroup.ADtsId = ADtsId;
  AGroup.ADetailGrpList = ADetailGrpList;
  AGroup.ARecordChanged = ARecordChanged;
  AGroup.ADefaultControlId = ADefaultControlId;
  AGroup.ADetailKFld = ADetailKFld;
  AGroup.AMasterIdx = AMasterIdx;
  AGroup.AClickNew = AClickNew;
  AGroup.AClearOnNew = 1;
  AGroup.AAligners = AAligners;
  AGroup.ATbsSel = true;
  if (AParent != null) {
    AGroup.ATbsSel = AParent.ATbsSel;
    IgCheckParentInTbsSel(AGroup,AParent);
  };
  IgTplAlign(AGroup);
  AGroup.APpmCnt = APpmCnt;
  IgTplPpmCnt(AGroup);
  AChangeStatusGroupList = AChangeStatusGroupList + AGroup.id + ';'
  IgInsertOnForm(AForm,AGroup.id,'Status',AStatus + ' AClassId=' + AGroup.AClassId); // Usando pq DIV nao é acessivel através de forms.elemnts
  IgInsertOnForm(AForm,AGroup.id,'RecordChanged',ARecordChanged);
  IgInsertOnForm(AForm,AGroup.id,'KeyValues',AKeyValues);
  IgInsertOnForm(AForm,AGroup.id,'PopupClick','0');
};

function IgCheckParentInTbsSel(AControl,AParent) {
  if (AControl.id.substr(0,3) == "Tbl") {
    AControl = eval("document.all." + AControl.id.substr(3,STRMAXLEN)); // Caso especial de checkbox
  };
  if (AParent.ATbsSel)
    AControl.style.visibility = IgHtmlVisibility(AControl.AVisible)
  else
    AControl.style.visibility = 'hidden';
  AControl.ATbsSel = AParent.ATbsSel;
  if (AControl.AClassId != null)
    switch (AControl.AClassId) {
      case 10 : // ComboBox
      case 17 : // LookupComboBox
      case 22 : // DepLookup
        var AImage = eval("document.all.Arr" + AControl.id);
        if (AImage != null)
          AImage.style.visibility = AControl.style.visibility;
        break;
      case 11 : // CheckBox
        var ATbl = eval("document.all.Tbl" + AControl.id);
        if (ATbl != null)
          ATbl.style.visibility = AControl.style.visibility;
        break;
      case 15 : // Grid
        var ATbl = eval("document.all.Tbl" + AControl.id);
        break;
    };
}

function IgTplControl(AForm,AParent,AControl,ALeft,ATop,AWidth,AHeight,AAlignment,AVisible,AEnabled,ACursor,AHint,AZIndex,AClassId,AComponentIndex,AAligners,DontRunAlign) {
// DontRunAlign é necessario porque input type=file dá pau se rodar o resize anntes de setar o type='file' (em templates.js.UPL)
  AControl.AClassId = AClassId;
  AControl.name = AControl.id;
  AControl.AForm = AForm;
  AControl.AComponentIndex = AComponentIndex;
  AControl.AParent = AParent;
  AControl.style.position = "absolute";
  AControl.tabIndex = AZIndex;
  if (AControl.tabIndex != -1) // Com -1 os labels que estejam em TopControls de PGCs nao aparecem
    AControl.style.zIndex = AControl.tabIndex;
  AControl.style.left = ALeft;
  AControl.style.top = ATop;
  AControl.style.width = AWidth;
  //if (AControl.id == "CMP33") alert("Id:" + AControl.id + ";  Aligners:" + AAligners);
  AControl.style.height = AHeight;
  AControl.style.textAlign = IgHtmlAlignment(AAlignment);
  AControl.style.visibility = IgHtmlVisibility(AVisible);
  AControl.style.cursor = IgHtmlCursor(ACursor);
  AControl.disabled = IgHtmlDisabled(AEnabled);
  AControl.AVisible = AVisible;
  AControl.AHint = AHint;
  AControl.AClearOnNew = 1; // default
  AControl.AAligners = AAligners;
  AControl.ATbsSel = true;
  IgCheckParentInTbsSel(AControl,AParent);
  if (!DontRunAlign) IgTplAlign(AControl);
  if (AControl.disabled != 0) AControl.style.cursor = "default";
  if (AHint != "") {
    AControl.onmousemove = IgShowHint;
    AControl.onmouseout = IgHideHint;
  };
};

function IgTplInput(AInput,AValue,AReadOnly,ARequired,ADataType,ADisplayLabel,ADtsId,AFIndex,ANumCasasDec,AReadOnlyE,ADefaultValue) {
  AInput.AValidChars = null;
  AInput.value = IgRTrim(AValue);
  AInput.AHiddenValue = AValue;
  AInput.ADefaultValue = ADefaultValue;
  AInput.ADtsId = ADtsId;
  AInput.readOnly = (AReadOnly != 0);
  AInput.AReadOnly = AInput.readOnly;
  AInput.AReadOnlyE = (AReadOnlyE != 0);
  AInput.ARequired = ARequired;
  AInput.ADataType = ADataType;
  AInput.ADisplayLabel = ADisplayLabel;
  AInput.AFIndex = AFIndex;
  AInput.ANumCasasDec = ANumCasasDec;
  if (ADataType==46) // ftConta
    AInput.onkeydown = IgContaKeyDown;
  IgInsertOnForm(AInput.AForm,AInput.id,'Exit',0);
  AInput.oncontextmenu = IgPopupMenuContextMenu;
  IgInputFormatValue(AInput);
};

/*
Vou tirar pq estav muito lento no NewContext. Nao usar mais ReadOnlyOnEditint na ficha financeira
*/
function IgChangeStatusGroupList() {
  AListStr3 = AChangeStatusGroupList;
  while (AListStr3 != '') {
    AGroupId = IgGetItemListStr3(';');
    AGroup = eval("document.all." + AGroupId);
    IgGroupChangeReadOnlyE(AGroup);
  };
};

function scrollIntoView(index){
  var row = this.getTemplate("row", index);
  var data = this.getTemplate("layout").getContent("data");
  var left = this.getTemplate("layout").getContent("left");
  var scrollbars = this.getTemplate("layout").getContent("scrollbars");

  try {
    var top, padding = parseInt(data.element().currentStyle.paddingTop,10);
    if (data.element().scrollTop > row.element().offsetTop - padding) {
      top = row.element().offsetTop  - padding;
      left.element().scrollTop = top;
      data.element().scrollTop = top;
      scrollbars.element().scrollTop = top;
    }

    if (data.element().offsetHeight + data.element().scrollTop <
      row.element().offsetTop + row.element().offsetHeight ) {
      top = row.element().offsetTop + row.element().offsetHeight - data.element().offsetHeight;
      left.element().scrollTop = top;
      data.element().scrollTop = top;
      scrollbars.element().scrollTop = top;
    }
  }
  catch(error){
    // ignore errors
  }
}

function IgTplGridWidget(AContainer,ARowCount,AColCount,ASelIndex) {
  var obj = new Active.Controls.Grid;

  obj.AContainer = AContainer;
  obj.setRowProperty("count", ARowCount);
  obj.setColumnProperty("count", AColCount);

  obj.setDataProperty("text", function(i, j){return eval("Grd"+AContainer.AComponentIndex+"["+i+"]["+j+"]")});
  obj.setColumnProperty("text", function(i){return eval("Grc"+AContainer.AComponentIndex+"["+i+"]")});

  obj.setRowHeaderWidth("28px");
  obj.setColumnHeaderHeight("20px");

  obj.setSelectionMultiple(false);

  var alternate = function(){
    return this.getProperty("row/order") % 2 ? "#fcfaf6" : "#ffffff";
  }

  var mark = function() {
    var i = this.getProperty("row/index");
      return (i==2 || i==4 || i==5) ? true : false;
    }
  var row = new Active.Templates.Row;
  row.setStyle("background", alternate);
  row.setClass("mark", mark);
  row.setEvent("onmouseover", "mouseover(this, 'active-row-highlight')");
  row.setEvent("onmouseout", "mouseout(this, 'active-row-highlight')");
  obj.setTemplate("row", row);

  obj.setAction("selectionChanged", function(src) {
    var Index = src.getSelectionProperty("index");
    var ASelIndex = eval("document.all." + src.AContainer.id + PPN + "SelectedIndex");
    ASelIndex.value = Index;
  });

  obj.setSelectionProperty("index", ASelIndex);
  AContainer.insertAdjacentHTML('beforeEnd',obj);
  scrollIntoView.call(obj, ASelIndex);
};

function IgTplGridSelectList(AId) {
  var AGrid = eval("document.all." + AId);
  AListStr = AGrid.ACmbCols;
  var ACmbCol = IgGetItemListStr();
  while (AListStr != "") {
    ACmbCol = IgGetItemListStr();
    for(var j=0;j<AGrid.ARecCount;j++) {
      AEdtName = AId + PPN + "Cell" + ACmbCol + '_' + (j+1);
      var AEdit = eval("document.all." + AEdtName);
      var AComboBox = eval("document.all.CMP" + AEdit.ACmbIdx);
      if (AComboBox) {
        var I = AComboBox.ASelect.options.length;
        for (var k=0; k<I; k++)
          if (AEdit.AKeyValue == AComboBox.ASelect.options[k].AKeyValue) {
            AEdit.value = AComboBox.ASelect.options[k].innerText;
            break;
          };
      };
    };
  };
  IgScrollIntoView(AId);
};

function IgRenderGridSelectList() {
  AListStr3 = ARenderGridSelectList;
  while (AListStr3 != '') {
    var ARenderSelectCmd = IgGetItemListStr3(MAGICCHAR);
    eval(ARenderSelectCmd);
  };
};

function IgInsertIntoSelListAccTabOrder(AZIndex,AStr) {
  var P = ARenderSelectList.indexOf(TBO);
  var Q = -1;
  var StrTBO = '000'.concat(AZIndex);
  StrTBO = TBO + StrTBO.substr(StrTBO.length-3,3)
  var Str = '';
  while (P != -1) {
    IdxTBO = ARenderSelectList.substr(P,LenTBO + 3);
    if (IdxTBO > StrTBO)
      break;
    Str = ARenderSelectList.substr(P+LenTBO,STRMAXLEN);
    Q = Str.indexOf(TBO);
    if (Q != -1) {
      P = P + Q + LenTBO;
    } else {
      P = ARenderSelectList.length + 1; // Se nao achou, insere no final quando sair do loop
      break;
    }
  };
  ARenderSelectList = ARenderSelectList.substr(0,P) + StrTBO + AStr + MAGICCHAR +
    ARenderSelectList.substr(P,STRMAXLEN);
};

function IgRenderSelectList() {
  AListStr3 = ARenderSelectList;
  while (AListStr3 != '') {
    ARenderSelectCmd = IgGetItemListStr3(MAGICCHAR).substr(LenTBO+3,STRMAXLEN);
    eval(ARenderSelectCmd);
  };
};

function IgRenderTopControls() {
  if (ARenderTopControls != "") {
    var APageControl = eval("document.all." + ARenderTopControls);
    if (APageControl != null) {
      AListStr3 = APageControl.ATopControls;
      while (AListStr3 != '') {
        AControl = eval("document.all.CMP" + IgGetItemListStr3(";"));
        if (AControl != null) {
          AControl.readOnly = (APageControl.AActivePageIndex != 0)
          AControl.AReadOnly = AControl.readOnly;
          if (AControl.AClassId == 8) // TIgButton
            AControl.disabled = (APageControl.AActivePageIndex != 0)
        };
      };
    };
  };
};

function IgBuildParArray(ACompStr) {
  AListStr3 = ACompStr;
  while (AListStr3 != "") {
    AParStr = IgGetItemListStr3(PARSEPCHAR);
    ParArray[parseInt(AParStr.substr(0,2),10)] = AParStr.substr(2,STRMAXLEN);
  };
};

function IgRebuildDepLookup(ALookup) {
/* Chamada sempre que for necessário recompor os lookups dependentes.
   - StrIdValue
   - Mudanças em Cbb*
*/
  var AMasterComboBox = eval("document.all." + ALookup.AMasterLkpId);
  if (AMasterComboBox != null)
    var AFilterValue = AMasterComboBox.AKeyValue
  else
    var AFilterValue = "";
  IgTplComboSelect(ALookup,AFilterValue,-1);
};

function IgProcessParArray(AControl,ACompStr) {
  AListStr3 = eval("window.DataFrame." + ACompStr);
  while (AListStr3 != "") {
    var AParStr = IgGetItemListStr3(PARSEPCHAR);
    var AParId = parseInt(AParStr.substr(0,2),10);
    var AParValue = AParStr.substr(2,STRMAXLEN);
    switch (AParId) {
      case StrIdStatus           :
        AControl.AStatus = parseInt(AParValue,10);
        var AStatus = eval("document.all." + AControl.id + PPN + "Status");
        if (AStatus != null) AStatus.value = AControl.AStatus;
        break;
      case StrIdRecordChanged    :
        AControl.ARecordChanged = parseInt(AParValue,10);
        eval("document.all." + AControl.id + PPN + "RecordChanged").value = AControl.ARecordChanged;
        break;
      case StrIdDefaultControlId : DefaultControlId = parseInt(AParValue,10); break;
      case StrIdKeyValues        :
        eval("document.all." + AControl.id + PPN + "KeyValues").value = IgRemoveMagicChar(AParValue);
        break;
      case StrIdExceptionMessage : ExceptionMessage = IgDecodeQuotes2(IgRemoveMagicChar(AParValue)); break;
      case StrIdSystemMessage    : SystemMessage = IgDecodeQuotes2(IgRemoveMagicChar(AParValue)); break;
      case StrIdDataSourceId     : AControl.ADtsId = parseInt(AParValue,10); break;
      case StrIdBorderIcons      :
        var ATD = document.all.TdFormIcons;
        ATD.innerHTML = IgTplFRMBorderIcons("CMP0",parseInt(AParValue,10));
        break;
      case StrIdScrollType       : IgSetScrollType(parseInt(AParValue,10)); break;
      case StrIdDetailGrpList    : AControl.ADetailGrpList = IgRemoveMagicChar(AParValue); break;
      case StrIdDetailKeyField   : AControl.ADetailKFld = parseInt(AParValue,10); break;
      case StrIdMasterGroupId    : AControl.AMasterIdx = parseInt(AParValue,10); break;
      case StrIdClickNew         : AControl.AClickNew = parseInt(AParValue,10); break;
      case StrIdHRef             : AWindowHRef = IgRemoveMagicChar(AParValue); break;
      case StrIdSid              : document.all.SID.value = IgRemoveMagicChar(AParValue); break;
      case StrIdCaption          :
        if (AControl.AClassId == 4) { // TIgLabel
          AControl.innerText = IgRemoveMagicChar(AParValue);
        } else if (AControl.AClassId == 8) { // TIgButton
          AControl.ACaption = IgDecodeQuotes2(IgRemoveMagicChar(AParValue));
          AControl.value = AControl.ACaption;
        };
        break;
      case StrIdSrc              : AControl.src = IgDecodeQuotes2(IgRemoveMagicChar(AParValue)); break;
      case StrIdTabOrder         : AControl.tabIndex = parseInt(AParValue,10); AControl.style.zIndex = AControl.tabIndex; break;
      case StrIdAlignment        : AControl.style.textAlign = IgHtmlAlignment(parseInt(AParValue,10)); break;
      case StrIdVisible          :
        AControl.AVisible = parseInt(AParValue,10);
        if (AControl.ATbsSel) {
          AControl.style.visibility = IgHtmlVisibility(parseInt(AParValue,10));
          if ((AControl.AClassId == 10) || (AControl.AClassId == 17) || (AControl.AClassId == 22))  {
            AControl.AImage.style.visibility = AControl.style.visibility;
          } else if (AControl.AClassId == 11) { // CheckBox
            var ATable = eval("document.all.Tbl" + AControl.id);
            ATable.style.visibility = AControl.style.visibility;
          };
        };
        break;
      case StrIdCursor           : AControl.style.cursor = IgHtmlCursor(parseInt(AParValue,10)); break;
      case StrIdEnabled          : AControl.disabled = IgHtmlDisabled(parseInt(AParValue,10)); break;
      case StrIdHint             : AControl.AHint = IgDecodeQuotes2(IgRemoveMagicChar(AParValue)); break;
      case StrIdAligners         : AControl.AAligners = parseInt(AParValue,10); break;
      case StrIdValidChars       : AControl.AValidChars = IgRemoveMagicChar(AParValue); break;
      case StrIdValue            :
        if ((AControl.AClassId == 10) || (AControl.AClassId == 17) || (AControl.AClassId == 22))  {
          IgRebuildDepLookup(AControl);
          AControl.AKeyValue = IgRemoveMagicChar(AParValue);
          AControl.value = AControl.AKeyValue;
          IgSelectKeyValue(AControl);
          eval("document.all." + AControl.id + PPN + "KeyValue").value = AControl.AKeyValue;
        } else if (AControl.AClassId == 11) { // CheckBox
          IgCheckBoxChanged(AControl,(IgRTrim(IgRemoveMagicChar(AParValue)) == "S"));
        } else if (AControl.AClassId != 8) { // Button
          AControl.value = IgRTrim(IgRemoveMagicChar(AParValue));
        };
        break; // Nao é usado para Button
      case StrIdDefaultValue     : AControl.ADefaultValue = IgDecodeQuotes2(IgRemoveMagicChar(AParValue)); break;
      case StrIdDataSourceId     : AControl.ADtsId = parseInt(AParValue); break;
      case StrIdReadOnly         : AControl.readOnly = (parseInt(AParValue) != 0); break;
      case StrIdReadOnlyOnEditing: AControl.AReadOnlyE = (parseInt(AParValue) != 0); break;
      case StrIdRequired         : AControl.ARequired = parseInt(AParValue); break;
      case StrIdDataType         : AControl.ADataType = parseInt(AParValue); break;
      case StrIdDisplayLabel     : AControl.ADisplayLabel = IgDecodeQuotes2(IgRemoveMagicChar(AParValue)); break;
      case StrIdFieldIndex       : AControl.AFIndex = parseInt(AParValue); break;
      case StrIdPrecision        : AControl.ANumCasasDec = parseInt(AParValue); break;
      case StrIdPasswordChar     : AControl.type = IgHtmlPassword(AParValue); break;
      case StrIdCharCase         : AControl.style.textTransform = IgHtmlCharCase(parseInt(AParValue)); break;
      case StrIdMinValue         : AControl.AMinValue = parseInt(AParValue); break;
      case StrIdMaxValue         : AControl.AMaxValue = parseInt(AParValue); break;
      case StrIdKind             : AControl.AKind = parseInt(AParValue); break;
      case StrIdIcon             : AControl.AIcon = parseInt(AParValue); break;
      case StrIdGroupValidate    : AControl.AGroupValidate = parseInt(AParValue); break;
      case StrIdConfirmMessage   : AControl.AConfirmMessage = IgDecodeQuotes2(IgRemoveMagicChar(AParValue)); break;
      case StrIdSubmitButton     : AControl.ASubmitButton = parseInt(AParValue); break;
      case StrIdSubmitOnClick    : AControl.ASubmitOnClick = parseInt(AParValue); break;
      case StrIdLink             : AControl.href = IgDecodeQuotes2(IgRemoveMagicChar(AParValue)); break;
      case StrIdSubmittedText    :
      /* Mudei para que SubmittedText nunca seja setado do servidor para o client.
         Motivo: Estava zerando Value no LookupComboBox (ver UMntServico apos exclusao no grid).
         Tirei depois que descobri que dá pau em consultas que voltam direto (da segunda vez).
         ver consultaem LcbNaturalidade em MntPessoa2. (Foi corrigido antes da obs abaixo)
         Mudei de novo para que SubmittedText nunca seja setado do servidor para o client
         por que estava apagando o nome da filial no combo id_filial apos excluir uma filial qualquer
         do grid a direita e ter ficado pelo menos mais uma filial neste grid. O nome desta outra nao era
         atualizado no combobox. (UMntEmpresa) */
         // AControl.value = IgRTrim(IgRemoveMagicChar(AParValue));
        break;
      case StrIdForceEnabled     : AControl.AFcEnb = parseInt(AParValue); break;
      case StrIdMasterLookupId   : AControl.AMasterLkpId = IgTplId(parseInt(AParValue)); break;
      case StrIdDetailLookupIds  : AControl.ADtlLkpIds = IgRemoveMagicChar(AParValue); break;
      case StrIdLeft             :
        if (AControl.AClassId == 4) { // TIgLabel
          AControl.style.left = parseInt(AParValue)-40;
        } else if (AControl.AClassId != 0) {
          AControl.style.left = parseInt(AParValue);
        }
        break;
      case StrIdTop              :
        if (AControl.AClassId != 0) AControl.style.top = parseInt(AParValue);
        if ((AControl.AClassId == 10) || (AControl.AClassId == 17) || (AControl.AClassId == 22))  {
          AControl.AImage.style.top = AControl.style.posTop+1;
        };
        break;
      case StrIdClearOnNew       : AControl.AClearOnNew = parseInt(AParValue); break;
      case StrIdPopupMenuCount   : AControl.APpmCnt = parseInt(AParValue); break;
      case StrIdLeftTabIndex     :
        eval("document.all." + AControl.id + PPN + "LeftTabIndex").value = parseInt(AParValue);
        AControl.ALeftTabIndex = parseInt(AParValue);
        break;
      case StrIdPageCount        : AControl.APageCount = parseInt(AParValue); break;
      case StrIdActivePageIndex  : if (AEnqueuedPageChangeIdx != parseInt(AParValue)) {
          AEnqueuedPageChangeIdx = parseInt(AParValue); // Necessario enfileirar pq pagina so pode mudar apos construir os TaSheet
          AEnqueuedPageChangeCtr = AControl;
        };
        break;
      case StrIdSubmitOnChange   : eval("document.all." + AControl.id + PPN + "SbmChg").value = parseInt(AParValue); AControl.ASbmChg = parseInt(AParValue); break;
      case StrIdTopControlsList  : AControl.ATopControls = IgRemoveMagicChar(AParValue); break;
      case StrIdIsWizard         : AControl.AIsWizard = parseInt(AParValue); break;
      case StrIdShowArrows       : AControl.AShowArrs = parseInt(AParValue); break;
      case StrIdMaxTabs          : AControl.AMaxTabs = parseInt(AParValue); break;
      case StrIdMaxLength        : AControl.maxLength = parseInt(AParValue); break;
      case StrIdRecCount         :
        AControl.ARecCount = parseInt(AParValue);
        break;
      case StrIdClickOnCheck     : AControl.ACbxGrdClk = parseInt(AParValue); break;
      case StrIdGridStyle        : AControl.AGridStyle = parseInt(AParValue); break;
      case StrIdSelectedIndex    : eval("document.all." + AControl.id + PPN + "SelectedIndex").value = parseInt(AParValue); break;
      case StrIdCalcFields       : AControl.ACalcFields = IgRemoveMagicChar(AParValue); break;
      case StrIdSumFactor        : AControl.ASumFactor = parseInt(AParValue); break;
      case StrIdSumResult        : AControl.ASumResult = parseInt(AParValue); break;
      case StrIdSelectOnClick    : AControl.ASelOnClick = parseInt(AParValue); break;
      case StrIdWidth            :
        if (AControl.AClassId != 14) { // TIgPageControl nao tem width 
          if (AControl.AClassId == 4) { // TIgLabel
            AControl.style.width = parseInt(AParValue)+40;
          } else if ((AControl.AClassId == 10) || (AControl.AClassId == 17) || (AControl.AClassId == 22))  {
            AControl.style.width = parseInt(AParValue)-20;
          } else if (AControl.AClassId != 0)  {
            AControl.style.width = parseInt(AParValue);
          } else {
            AControl.AWidth = parseInt(AParValue); AControl.BodyWidth = parseInt(AParValue);
          };
        };
        break;
      case StrIdHeight           :
        if (AControl.AClassId != 8) { // TIgButton tem height sempre = 18
          if (AControl.AClassId != 0) {
            AControl.style.height = parseInt(AParValue);
          } else {
            AControl.AHeight = parseInt(AParValue); AControl.BodyHeight = parseInt(AParValue);
          };
        };
        break;
      case StrIdItemIndex : break; // Apenas para nao dar item desconhecido
      case StrIdItemCount : break; // Idem
      case StrIdTabVisible : {
          var ALTabIdx = parseInt(eval("document.all." + AControl.AParent.id + PPN + "LeftTabIndex").value,10);
          IgPageChange(AControl.AParent.id,AControl.AParent.AActivePageIndex,ALTabIdx);
        };
        break;
      default : alert("Id de propriedade desconhecido:" + AParStr + "; CtrlId: " + AControl.id + "; CompStr:" + ACompStr);
    };
  };
};

function IgCopyDataFrameVar(AVarName,ACompId) {
  if (eval("typeof(" + AVarName + ACompId + ")") == "undefined")
    eval(AVarName + ACompId + "=''");
  if (eval("typeof(window.DataFrame." + AVarName + ACompId + ")") != "undefined")
    eval(AVarName + ACompId + "=window.DataFrame." + AVarName + ACompId);
};

function IgSetScrollType(AScrollType) {
  eval("document.all.IGB").scroll = IgHtmlScroll(AScrollType);
};

function IgBuildForm(ACompStr) {
  var AForm = eval("document.all.CMP0");
  var AFormId = ACompStr;
  var IMC = eval("window.DataFrame.IMC");
  IgCopyDataFrameVar("Ppm",0);
  if ((AForm == null) || (AFormId != ALastFormId) || (IMC != 0)) { // Não existe ou foi chamada de menu, deve ser criado
    ANewForm = 1;
    if (AForm != null) { // Formulario anterior deve ser apagado
      document.body.removeChild(document.all.TblFormParent);
    };
    ResetVarsAfterNewForm();
    ALastFormId = AFormId;
    ACompStr = eval("window.DataFrame." + ACompStr);
    IgBuildParArray(ACompStr);
    FRM(IgRemoveMagicChar(ParArray[StrIdFormId]),"IGB",
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdCaption])),
      parseInt(ParArray[StrIdEncodeType]),
      parseInt(ParArray[StrIdBorderIcons]),parseInt(ParArray[StrIdStatus]),parseInt(ParArray[StrIdRecordChanged]),
      parseInt(ParArray[StrIdDefaultControlId]),IgRemoveMagicChar(ParArray[StrIdKeyValues]),0,
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdExceptionMessage])),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdSystemMessage])),
      parseInt(ParArray[StrIdDataSourceId]),
      IgRemoveMagicChar(ParArray[StrIdDetailGrpList]),
      IgRemoveMagicChar(ParArray[StrIdDetailKeyField]),
      parseInt(ParArray[StrIdMasterGroupId]),
      parseInt(ParArray[StrIdClickNew]),IgRemoveMagicChar(ParArray[StrIdHRef]),
      IgRemoveMagicChar(ParArray[StrIdSid]),
      parseInt(ParArray[StrIdWidth]),parseInt(ParArray[StrIdHeight]),AFormId,
      parseInt(ParArray[StrIdPopupMenuCount]));
  } else { // Ja existe o form
    IgProcessParArray(AForm,ACompStr);
  };
  IgSetScrollType(parseInt(ParArray[StrIdScrollType]));
};

function IgBuildLabel(ACompStr) {
  var ALabel = eval("document.all.CMP" + parseInt(ACompStr.substr(3,3),10));
  if (ALabel == null) { // Não existe, deve ser criado
    ACompStr = eval("window.DataFrame." + ACompStr);
    IgBuildParArray(ACompStr);
    LBL(parseInt(ParArray[StrIdParentIndex]),
      parseInt(ParArray[StrIdCompIndex]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdCaption])),
      parseInt(ParArray[StrIdLeft]),parseInt(ParArray[StrIdTop]),
      parseInt(ParArray[StrIdWidth]),parseInt(ParArray[StrIdHeight]),
      parseInt(ParArray[StrIdAlignment]),parseInt(ParArray[StrIdVisible]),
      parseInt(ParArray[StrIdEnabled]),parseInt(ParArray[StrIdCursor]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdHint])),
      parseInt(ParArray[StrIdClassId]),parseInt(ParArray[StrIdAligners]));
  } else { // Ja existe o form
    IgProcessParArray(ALabel,ACompStr);
  };
};

function IgBuildLink(ACompStr) {
  var ALink = eval("document.all.CMP" + parseInt(ACompStr.substr(3,3),10));
  if (ALink == null) { // Não existe, deve ser criado
    ACompStr = eval("window.DataFrame." + ACompStr);
    IgBuildParArray(ACompStr);
    LNK(parseInt(ParArray[StrIdParentIndex]),
      parseInt(ParArray[StrIdCompIndex]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdCaption])),
      parseInt(ParArray[StrIdLeft]),parseInt(ParArray[StrIdTop]),
      parseInt(ParArray[StrIdWidth]),parseInt(ParArray[StrIdHeight]),
      parseInt(ParArray[StrIdAlignment]),parseInt(ParArray[StrIdVisible]),
      parseInt(ParArray[StrIdEnabled]),parseInt(ParArray[StrIdCursor]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdHint])),
      parseInt(ParArray[StrIdClassId]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdLink])),
      parseInt(ParArray[StrIdSubmitOnClick]),parseInt(ParArray[StrIdAligners]));
  } else { // Ja existe o form
    IgProcessParArray(ALabel,ACompStr);
  };
};

function IgBuildCheckBox(ACompStr) {
  var ACheckBox = eval("document.all.CMP" + parseInt(ACompStr.substr(3,3),10));
  if (ACheckBox == null) { // Não existe, deve ser criado
    ACompStr = eval("window.DataFrame." + ACompStr);
    IgBuildParArray(ACompStr);
    CHB(parseInt(ParArray[StrIdParentIndex]),
      parseInt(ParArray[StrIdCompIndex]),
      IgRemoveMagicChar(ParArray[StrIdValue]),
      parseInt(ParArray[StrIdLeft]),parseInt(ParArray[StrIdTop]),
      parseInt(ParArray[StrIdHeight]),IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdCaption])),
      parseInt(ParArray[StrIdVisible]),parseInt(ParArray[StrIdEnabled]),
      parseInt(ParArray[StrIdCursor]),IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdHint])),
      parseInt(ParArray[StrIdTabOrder]),parseInt(ParArray[StrIdClassId]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdDisplayLabel])),
      parseInt(ParArray[StrIdReadOnly]),parseInt(ParArray[StrIdRequired]),
      parseInt(ParArray[StrIdDataSourceId]),parseInt(ParArray[StrIdFieldIndex]),
      parseInt(ParArray[StrIdReadOnlyOnEditing]),parseInt(ParArray[StrIdAligners]),
      IgRemoveMagicChar(ParArray[StrIdDefaultValue]));
  } else { // Ja existe o form
    IgProcessParArray(ACheckBox,ACompStr);
  };
};

function IgBuildEdit(ACompStr) {
  var AEdit = eval("document.all.CMP" + parseInt(ACompStr.substr(3,3),10));
  if (AEdit == null) { // Não existe, deve ser criado
    ACompStr = eval("window.DataFrame." + ACompStr);
    IgBuildParArray(ACompStr);
    EDT(parseInt(ParArray[StrIdParentIndex]),
      parseInt(ParArray[StrIdCompIndex]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdValue])),
      parseInt(ParArray[StrIdLeft]),parseInt(ParArray[StrIdTop]),
      parseInt(ParArray[StrIdWidth]),parseInt(ParArray[StrIdHeight]),
      parseInt(ParArray[StrIdAlignment]),parseInt(ParArray[StrIdVisible]),
      parseInt(ParArray[StrIdEnabled]),parseInt(ParArray[StrIdCursor]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdHint])),
      parseInt(ParArray[StrIdTabOrder]),parseInt(ParArray[StrIdClassId]),
      ParArray[StrIdPasswordChar],parseInt(ParArray[StrIdMaxLength]),
      parseInt(ParArray[StrIdCharCase]),parseInt(ParArray[StrIdDataType]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdDisplayLabel])),
      parseInt(ParArray[StrIdReadOnly]),parseInt(ParArray[StrIdRequired]),
      parseInt(ParArray[StrIdMinValue]),parseInt(ParArray[StrIdMaxValue]),
      parseInt(ParArray[StrIdDataSourceId]),parseInt(ParArray[StrIdFieldIndex]),
      parseInt(ParArray[StrIdPrecision]),parseInt(ParArray[StrIdReadOnlyOnEditing]),
      IgRemoveMagicChar(ParArray[StrIdValidChars]),parseInt(ParArray[StrIdAligners]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdDefaultValue])));
  } else { // Ja existe o form
    IgProcessParArray(AEdit,ACompStr);
  };
};

function IgBuildMemo(ACompStr) {
  var AEdit = eval("document.all.CMP" + parseInt(ACompStr.substr(3,3),10));
  if (AEdit == null) { // Não existe, deve ser criado
    ACompStr = eval("window.DataFrame." + ACompStr);
    IgBuildParArray(ACompStr);
    MEM(parseInt(ParArray[StrIdParentIndex]),
      parseInt(ParArray[StrIdCompIndex]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdValue])),
      parseInt(ParArray[StrIdLeft]),parseInt(ParArray[StrIdTop]),
      parseInt(ParArray[StrIdWidth]),parseInt(ParArray[StrIdHeight]),
      parseInt(ParArray[StrIdAlignment]),parseInt(ParArray[StrIdVisible]),
      parseInt(ParArray[StrIdEnabled]),parseInt(ParArray[StrIdCursor]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdHint])),
      parseInt(ParArray[StrIdTabOrder]),parseInt(ParArray[StrIdClassId]),
      parseInt(ParArray[StrIdDataType]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdDisplayLabel])),
      parseInt(ParArray[StrIdReadOnly]),parseInt(ParArray[StrIdRequired]),
      parseInt(ParArray[StrIdDataSourceId]),parseInt(ParArray[StrIdFieldIndex]),
      parseInt(ParArray[StrIdInsidePgc]),parseInt(ParArray[StrIdAligners]));
  } else { // Ja existe o form
    IgProcessParArray(AEdit,ACompStr);
  };
};

function IgBuildComboBox(ACompStr) {
  var ACompId = parseInt(ACompStr.substr(3,3),10);
  var ALookup = eval("document.all.CMP" + ACompId);
  eval("Lkt" + ACompId + "=0");
  IgCopyDataFrameVar("Cbb",ACompId);
  if (ALookup == null) { // Não existe, deve ser criado
    ACompStr = eval("window.DataFrame." + ACompStr);
    IgBuildParArray(ACompStr);
    CBB(parseInt(ParArray[StrIdParentIndex]),
      parseInt(ParArray[StrIdCompIndex]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdValue])),
      parseInt(ParArray[StrIdLeft]),parseInt(ParArray[StrIdTop]),
      parseInt(ParArray[StrIdWidth]),parseInt(ParArray[StrIdHeight]),
      parseInt(ParArray[StrIdAlignment]),parseInt(ParArray[StrIdVisible]),
      parseInt(ParArray[StrIdEnabled]),parseInt(ParArray[StrIdCursor]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdHint])),
      parseInt(ParArray[StrIdTabOrder]),parseInt(ParArray[StrIdClassId]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdDisplayLabel])),
      parseInt(ParArray[StrIdReadOnly]),parseInt(ParArray[StrIdRequired]),
      parseInt(ParArray[StrIdDataType]),parseInt(ParArray[StrIdDataSourceId]),
      parseInt(ParArray[StrIdItemIndex]),parseInt(ParArray[StrIdItemCount]),
      parseInt(ParArray[StrIdFieldIndex]),parseInt(ParArray[StrIdSubmitOnClick]),
      parseInt(ParArray[StrIdInsidePgc]),parseInt(ParArray[StrIdReadOnlyOnEditing]),
      parseInt(ParArray[StrIdAligners]),IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdDefaultValue])));
  } else { // Ja existe
    IgProcessParArray(ALookup,ACompStr);
    if (eval("window.DataFrame.Cbb" + ACompId) != null)  { // Mudou items. Tem que refazer
      var AMasterComboBox = eval("document.all." + ALookup.AMasterLkpId);
      if (AMasterComboBox != null)
        var AFilterValue = AMasterComboBox.AKeyValue
      else
        var AFilterValue = "";
      IgTplComboSelect(ALookup,AFilterValue,-1);
    };
  };
};

function IgBuildLookupComboBox(ACompStr) {
  var ACompId = parseInt(ACompStr.substr(3,3),10);
  var ALookup = eval("document.all.CMP" + ACompId);
  eval("Lkt" + ACompId + "=0");
  IgCopyDataFrameVar("Cbb",ACompId);
  IgCopyDataFrameVar("Cbv",ACompId);
  if (ALookup == null) { // Não existe, deve ser criado
    ACompStr = eval("window.DataFrame." + ACompStr);
    IgBuildParArray(ACompStr);
    LCB(parseInt(ParArray[StrIdParentIndex]),
      parseInt(ParArray[StrIdCompIndex]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdSubmittedText])),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdValue])),
      parseInt(ParArray[StrIdLeft]),parseInt(ParArray[StrIdTop]),
      parseInt(ParArray[StrIdWidth]),parseInt(ParArray[StrIdHeight]),
      parseInt(ParArray[StrIdAlignment]),parseInt(ParArray[StrIdVisible]),
      parseInt(ParArray[StrIdEnabled]),parseInt(ParArray[StrIdCursor]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdHint])),
      parseInt(ParArray[StrIdTabOrder]),parseInt(ParArray[StrIdClassId]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdDisplayLabel])),
      parseInt(ParArray[StrIdReadOnly]),parseInt(ParArray[StrIdRequired]),
      parseInt(ParArray[StrIdDataType]),parseInt(ParArray[StrIdDataSourceId]),
      parseInt(ParArray[StrIdItemIndex]),parseInt(ParArray[StrIdItemCount]),
      parseInt(ParArray[StrIdFieldIndex]),parseInt(ParArray[StrIdSubmitOnClick]),
      parseInt(ParArray[StrIdInsidePgc]),parseInt(ParArray[StrIdReadOnlyOnEditing]),
      parseInt(ParArray[StrIdMasterLookupId]),IgRemoveMagicChar(ParArray[StrIdDetailLookupIds]),
      parseInt(ParArray[StrIdClearOnNew]),parseInt(ParArray[StrIdAligners]),
      parseInt(ParArray[StrIdForceEnabled]),IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdDefaultValue])));
  } else { // Ja existe
    IgProcessParArray(ALookup,ACompStr);
    if (eval("window.DataFrame.Cbb" + ACompId) != null) { // Mudou items. Tem que refazer
      IgRebuildDepLookup(ALookup);
    };
  };
};

function IgEvalGridData(ACompId, ARecCount) {
  var j = 0;
  while (j < ARecCount) {
    eval("Grd" + ACompId + j + "=window.DataFrame.Grd" + ACompId + j);
    j++;
  }
}

function IgBuildGrid(ACompStr) {
  var ACompId = parseInt(ACompStr.substr(3,3),10);
  var AGrid = eval("document.all.CMP" + ACompId);
  IgCopyDataFrameVar("Grc",ACompId);
  if (AGrid == null) { // Não existe, deve ser criado
    ACompStr = eval("window.DataFrame." + ACompStr);
    IgBuildParArray(ACompStr);
    var ARecCount = parseInt(ParArray[StrIdRecCount]);
    IgEvalGridData(ACompId,ARecCount);
    GRD(parseInt(ParArray[StrIdParentIndex]),
      parseInt(ParArray[StrIdCompIndex]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdValue])),
      parseInt(ParArray[StrIdLeft]),parseInt(ParArray[StrIdTop]),
      parseInt(ParArray[StrIdWidth]),parseInt(ParArray[StrIdHeight]),
      parseInt(ParArray[StrIdAlignment]),parseInt(ParArray[StrIdVisible]),
      parseInt(ParArray[StrIdEnabled]),parseInt(ParArray[StrIdCursor]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdHint])),
      parseInt(ParArray[StrIdTabOrder]),parseInt(ParArray[StrIdClassId]),
      parseInt(ParArray[StrIdDataSourceId]),parseInt(ParArray[StrIdGridStyle]),
      parseInt(ParArray[StrIdAlign]),parseInt(ParArray[StrIdSubmitOnClick]),
      parseInt(ParArray[StrIdClickOnCheck]),ARecCount,
      parseInt(ParArray[StrIdSelectedIndex]),IgRemoveMagicChar(ParArray[StrIdCalcFields]),
      parseInt(ParArray[StrIdSumFactor]),parseInt(ParArray[StrIdSumResult]),
      parseInt(ParArray[StrIdInsidePgc]),parseInt(ParArray[StrIdSelectOnClick]),
      parseInt(ParArray[StrIdAligners]));
  } else { // Ja existe
    IgProcessParArray(AGrid,ACompStr);
    StyTIgGridTableEvenRow = IgGetStyle("TIgGridTableEvenRow");
    StyTIgGridTableOddRow = IgGetStyle("TIgGridTableOddRow");
    StyTIgGridTableEvenRowCell = IgGetStyle("TIgGridTableEvenRowCell");
    StyTIgGridTableOddRowCell = IgGetStyle("TIgGridTableOddRowCell");
    StyEditStyle = IgGetStyle("TTableIgEdit")
    StyComboStyle = IgGetStyle("TTableIgCombo")
    var ARecCount = AGrid.ARecCount;
    var ACbxGrdClk = AGrid.ACbxGrdClk;
    IgEvalGridData(ACompId,ARecCount);
    var j = 0;
    var ASelIndex = eval("document.all." + AGrid.id + PPN + "SelectedIndex.value");
    var ATable = eval("document.all.Tbl" + AGrid.id);
    if (eval("Grc" + ACompId) != null) { // Sempre tem que refazer header. por causa das variaveis HdrXXXX
      eval("AListStr = Grc" + ACompId);
      AGrid.AGridHeader = "";
      HdrInputIndex = null;
      HdrVisible = null;
      if (AGrid.AGridStyle != 3)
        AGrid.AGridHeader = IgTplGridHeader(AId,ATable,IgGetStyle("TIgGridTitleRow"),0)
      else
        AGrid.AGridHeader = "";
      AGrid.AHdrInputIndex = HdrInputIndex;
      AGrid.AHdrVisible = HdrVisible;
    };
    HdrInputIndex = AGrid.AHdrInputIndex;
    HdrVisible = AGrid.AHdrVisible;
    ATableText = '<TABLE id=' + ATable.id + ' width=100% height=100% cellspacing=0 cellpadding=1 border=2>' +
      AGrid.AGridHeader;
    while (j < ARecCount) {
      if (eval("Grd" + ACompId + j) != null) { // Mudou esta linha. Tem que refazer
        ARow = IgGridRow(AGrid, "CMP" + ACompId, ACompId, ASelIndex, ACbxGrdClk, j, AGrid.AInPGC);
        ATableText = ATableText + ARow + '</TR>';
      } else
        ATableText = ATableText + ATable.rows(j+1).outerHTML;
      j++;
    };
    ATableText = ATableText + '<TR style="HEIGHT: 100%"><TD></TD></TR></TABLE>';
    ATable.outerHTML = ATableText;
  };
};

function IgBuildTabSheet(ACompStr) {
  var ATabId = parseInt(ACompStr.substr(3,3),10);
  var ATabSheet = eval("document.all.CMP" + ATabId);
  IgCopyDataFrameVar("Ppm",ATabId);
  if (ATabSheet == null) { // Não existe, deve ser criado
    ACompStr = eval("window.DataFrame." + ACompStr);
    IgBuildParArray(ACompStr);
    TBS(parseInt(ParArray[StrIdParentIndex]),
      parseInt(ParArray[StrIdCompIndex]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdCaption])),
      parseInt(ParArray[StrIdLeft]),parseInt(ParArray[StrIdTop]),
      parseInt(ParArray[StrIdWidth]),parseInt(ParArray[StrIdHeight]),
      parseInt(ParArray[StrIdStatus]),parseInt(ParArray[StrIdRecordChanged]),
      parseInt(ParArray[StrIdDefaultControlId]),IgRemoveMagicChar(ParArray[StrIdKeyValues]),
      parseInt(ParArray[StrIdClassId]),parseInt(ParArray[StrIdDataSourceId]),
      IgRemoveMagicChar(ParArray[StrIdDetailGrpList]),
      IgRemoveMagicChar(ParArray[StrIdDetailKeyField]),
      parseInt(ParArray[StrIdMasterGroupId]),
      parseInt(ParArray[StrIdClickNew]),parseInt(ParArray[StrIdPopupMenuCount]));
  } else { // Ja existe
    IgProcessParArray(ATabSheet,ACompStr);
  };
};

function IgBuildGroupBox(ACompStr) {
  var AGbxId = parseInt(ACompStr.substr(3,3),10);
  var AGroupBox = eval("document.all.CMP" + AGbxId);
  IgCopyDataFrameVar("Ppm",AGbxId);
  if (AGroupBox == null) { // Não existe, deve ser criado
    ACompStr = eval("window.DataFrame." + ACompStr);
    IgBuildParArray(ACompStr);
    GBX(parseInt(ParArray[StrIdParentIndex]),
      parseInt(ParArray[StrIdCompIndex]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdCaption])),
      parseInt(ParArray[StrIdLeft]),parseInt(ParArray[StrIdTop]),
      parseInt(ParArray[StrIdWidth]),parseInt(ParArray[StrIdHeight]),
      parseInt(ParArray[StrIdVisible]),parseInt(ParArray[StrIdStatus]),
      parseInt(ParArray[StrIdRecordChanged]),parseInt(ParArray[StrIdDefaultControlId]),
      IgRemoveMagicChar(ParArray[StrIdKeyValues]),parseInt(ParArray[StrIdClassId]),
      parseInt(ParArray[StrIdTabOrder]),parseInt(ParArray[StrIdDataSourceId]),
      IgRemoveMagicChar(ParArray[StrIdDetailGrpList]),
      IgRemoveMagicChar(ParArray[StrIdDetailKeyField]),
      parseInt(ParArray[StrIdMasterGroupId]),parseInt(ParArray[StrIdClickNew]),
      parseInt(ParArray[StrIdAligners]),parseInt(ParArray[StrIdPopupMenuCount]));
  } else { // Ja existe
    IgProcessParArray(AGroupBox,ACompStr);
  };
};

function IgBuildPageControl(ACompStr) {
  var APageId = parseInt(ACompStr.substr(3,3),10);
  var APage = eval("document.all.CMP" + APageId);
  IgCopyDataFrameVar("Pgs",APageId);
  if (APage == null) { // Não existe, deve ser criado
    ACompStr = eval("window.DataFrame." + ACompStr);
    IgBuildParArray(ACompStr);
    PGC(parseInt(ParArray[StrIdParentIndex]),
      parseInt(ParArray[StrIdCompIndex]),
      parseInt(ParArray[StrIdLeft]),parseInt(ParArray[StrIdTop]),
      parseInt(ParArray[StrIdHeight]),parseInt(ParArray[StrIdClassId]),
      parseInt(ParArray[StrIdLeftTabIndex]),parseInt(ParArray[StrIdActivePageIndex]),
      parseInt(ParArray[StrIdPageCount]),
      IgRemoveMagicChar(ParArray[StrIdTopControlsList]),
      parseInt(ParArray[StrIdIsWizard]),parseInt(ParArray[StrIdMaxTabs]),
      parseInt(ParArray[StrIdShowArrows]),parseInt(ParArray[StrIdSubmitOnChange]));
  } else { // Ja existe
    IgProcessParArray(APage,ACompStr);
  };

};

function IgBuildButton(ACompStr) {
  var AButton = eval("document.all.CMP" + parseInt(ACompStr.substr(3,3),10));
  if (AButton == null) { // Não existe, deve ser criado
    ACompStr = eval("window.DataFrame." + ACompStr);
    IgBuildParArray(ACompStr);
    BTN(parseInt(ParArray[StrIdParentIndex]),
      parseInt(ParArray[StrIdCompIndex]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdCaption])),
      parseInt(ParArray[StrIdLeft]),parseInt(ParArray[StrIdTop]),
      parseInt(ParArray[StrIdWidth]),parseInt(ParArray[StrIdHeight]),
      parseInt(ParArray[StrIdAlignment]),parseInt(ParArray[StrIdVisible]),
      parseInt(ParArray[StrIdEnabled]),parseInt(ParArray[StrIdCursor]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdHint])),
      parseInt(ParArray[StrIdTabOrder]),parseInt(ParArray[StrIdClassId]),
      parseInt(ParArray[StrIdKind]),parseInt(ParArray[StrIdIcon]),
      parseInt(ParArray[StrIdGroupValidate]),parseInt(ParArray[StrIdGroupCheckPending]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdConfirmMessage])),
      parseInt(ParArray[StrIdSubmitButton]),parseInt(ParArray[StrIdDefault]),
      parseInt(ParArray[StrIdAligners]));
  } else { // Ja existe o form
    IgProcessParArray(AButton,ACompStr);
  };
};

function IgBuildImage(ACompStr) {
  var AImageId = "document.all.CMP" + parseInt(ACompStr.substr(3,3),10);
  var AImage = eval(AImageId);
  if (AImage == null) { // Não existe, deve ser criado
    ACompStr = eval("window.DataFrame." + ACompStr);
    IgBuildParArray(ACompStr);
    IMG(parseInt(ParArray[StrIdParentIndex]),
      parseInt(ParArray[StrIdCompIndex]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdSrc])),
      parseInt(ParArray[StrIdLeft]),parseInt(ParArray[StrIdTop]),
      parseInt(ParArray[StrIdWidth]),parseInt(ParArray[StrIdHeight]),
      parseInt(ParArray[StrIdVisible]),
      parseInt(ParArray[StrIdEnabled]),parseInt(ParArray[StrIdCursor]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdHint])),
      parseInt(ParArray[StrIdTabOrder]),parseInt(ParArray[StrIdClassId]),
      IgDecodeQuotes2(IgRemoveMagicChar(ParArray[StrIdCaption])),
      parseInt(ParArray[StrIdReadOnly]),parseInt(ParArray[StrIdRequired]),
      parseInt(ParArray[StrIdDataSourceId]),parseInt(ParArray[StrIdFieldIndex]),
      parseInt(ParArray[StrIdBrowseButton]),parseInt(ParArray[StrIdAligners]));
  } else { // Ja existe o form
    IgProcessParArray(AImage,ACompStr);
  };
};

function IgStartTimer() {
  Debug1 = new Date();
};

function IgEndTimer() {
  var Debug2 = new Date();
  alert(Debug2.valueOf() - Debug1.valueOf());
};

function STT() {
  IgIsNewContext = true;
  ResetVars();
  if (document.forms.length > 0)
    ResetFormInputs(document.forms(0));
  AListStr5 = window.DataFrame.VRL;
  if (AListStr5.substr(0,8) == "HtmlCode") {
    location.href = AListStr5.substr(8,STRMAXLEN);
  } else {
    var ACompStr = "";
    var ATipoStr = "";
    ANewForm = 0;
    while (AListStr5 != "") {
      ACompStr = IgGetItemListStr5(";");
      ATipoStr = ACompStr.substr(0,3);
      switch (ATipoStr) {
        case "FRM" : IgBuildForm(ACompStr); break;
        case "LBL" : IgBuildLabel(ACompStr); break;
        case "LNK" : IgBuildLink(ACompStr); break;
        case "EDT" : IgBuildEdit(ACompStr); break;
        case "MEM" : IgBuildMemo(ACompStr); break;
        case "BTN" : IgBuildButton(ACompStr); break;
        case "CBB" : IgBuildComboBox(ACompStr); break;
        case "LCB" : IgBuildLookupComboBox(ACompStr); break;
        case "TBS" : IgBuildTabSheet(ACompStr); break;
        case "PGC" : IgBuildPageControl(ACompStr); break;
        case "GRD" : IgBuildGrid(ACompStr); break;
        case "GBX" : IgBuildGroupBox(ACompStr); break;
        case "CHB" : IgBuildCheckBox(ACompStr); break;
        case "IMG" : IgBuildImage(ACompStr); break;
      };
    };
    if ((AEnqueuedPageChangeIdx != -1) && (AEnqueuedPageChangeCtr != null)) {
      eval("document.all." + AEnqueuedPageChangeCtr.id + PPN + "ActivePageIndex").value = AEnqueuedPageChangeIdx;
      var ALTabIdx = parseInt(eval("document.all." + AEnqueuedPageChangeCtr.id + PPN + "LeftTabIndex").value,10);
      AEnqueuedPageChangeCtr.AActivePageIndex = AEnqueuedPageChangeIdx;
      IgPageChange(AEnqueuedPageChangeCtr.id,AEnqueuedPageChangeIdx,ALTabIdx);
    };
    EnqLST();
  };
  AlreadySubmitting = 0;
};

function EnqLST() {
  if (window.DataFrame.document.readyState != 'complete') {
    window.setTimeout("EnqLST()", 100);
  } else {
    LSTAllways();
    if (ANewForm != 0) {
      LSTOnNewForm();
    };
    var UniqueId = window.DataFrame.document.uniqueID;
    eval("document.all.CMP0" + PPN + "UniqueId").value = UniqueId; // CMP0 é o form
  }
};

function FocusDefaultControl() {
  if (DefaultControlId != -1) {
    var DefC = eval("document.all.CMP" + DefaultControlId);
    if (DefC != null) {
      if (DefC.style.visibility == "visible") {
        DefC.focus();
      };
    };
  };
}

function LST() { // Coisas a serem feitas depois que todas as funcoes de template ja foram executadas
  var UniqueId = document.uniqueID;
  eval("document.all.CMP0" + PPN + "UniqueId").value = UniqueId; // CMP0 é o form
  LSTAllways();
  LSTOnNewForm();
  SID = document.all.SID.value;
};

function LSTAllways() { // LST para cada fim de dialog step
  IgRenderSelectList();
  IgRenderGridSelectList();
  IgRenderTopControls();
  if (ExceptionMessage != "") alert(ExceptionMessage)
  if (SystemMessage != "") alert(SystemMessage);
  if (IgIsNewContext == 0)
    FocusDefaultControl()
  else if (eval("window.DataFrame.IMC") != 0) {
    FocusDefaultControl();
  }
  if (AWindowHRef != "") {
    window.open(AWindowHRef,"_blank","directories=no,scrollbars=yes,location=no,menubar=no,status=no,toolbar=no,resizable=yes");
  };
};

function LSTOnNewForm() { // LST para sempre que muda de formulario
  if (parseInt(window.navigator.appVersion.substr(window.navigator.appVersion.indexOf('MSIE ')+5,1)) < 6)
    document.body.innerHTML = '<a href=http://www.microsoft.com/downloads/search.aspx?displaylang=pt-br&categoryid=6>Para a execução deste programa é necessário o Internet Explorer versao 6 ou superior. Clique aqui e faça o download</a>'
  else {
    window.onresize=IgResize;
    IgChangeStatusGroupList(); // Vou tirar pq estava muito lento. Nao usar mais ReadOnlyOnEditint na ficha finaceira
    IgResizeEnd();
    if ((AButtonNewClick != null) && (AButtonNewClick.AParent.AClickNew != 0)) {
      IgButtonNewClick(AButtonNewClick);
    } //else Descomentar depois que ajustar os defaults dos formularios (Value para DefaultValue)
      // IgFillDefaults();
    window.scrollTo(0,0);
  };
};

function IgTplHtmlBorderIcons(AFormId,ABorderIcons) {
  Result = '';
  if ((ABorderIcons % 2)) // { biBack }
    Result = Result + IgTplFRMBorderIcon(AFormId,"Voltar","FormTopBack");
  if ((ABorderIcons >> 1) % 2) // biNew }
    Result = Result + IgTplFRMBorderIcon(AFormId,"Incluir","FormTopNew");
  if ((ABorderIcons >> 2) % 2) // { biModify }
    Result = Result + IgTplFRMBorderIcon(AFormId,"Alterar","FormTopModify");
  if ((ABorderIcons >> 3) % 2) // { biFirst }
    Result = Result + IgTplFRMBorderIcon(AFormId,"","FormTopFirst");
  if ((ABorderIcons >> 4) % 2) // { biPrev }
    Result = Result + IgTplFRMBorderIcon(AFormId,"","FormTopPrev");
  if ((ABorderIcons >> 5) % 2) // { biNext }
    Result = Result + IgTplFRMBorderIcon(AFormId,"","FormTopNext");
  if ((ABorderIcons >> 6) % 2) // { biLast }
    Result = Result + IgTplFRMBorderIcon(AFormId,"","FormTopLast");
  if ((ABorderIcons >> 7) % 2) // { biLast }
    Result = Result + IgTplFRMBorderIcon(AFormId,"Ajuda","FormTopHelp");
  return(Result);
};

function IgTplAdjustStyle(AControl,AParent,AControlClassId) {
  if (AParent.AClassId == 13) if (AParent.AParent.AClassId == 14) // TIgTabSheet && TIgPageControl
    if (ATabVisibleArr[0] == 0) {
      AParent.AParent.style.width = ""; // default?
      switch (AControlClassId) {
        case 6  : AControl.style.cssText = IgGetStyle("T0IgEdit"); break;        // TIgEdit
        case 10 :                                                                // TIgComboBox
        case 17 :                                                                // TIgLookupComboBox
        case 22 : AControl.style.cssText = IgGetStyle("T0IgComboBox"); break;    // TIgDepLookup
        case 11 : AControl.style.cssText = IgGetStyle("T0IgCheckBox"); break;    // TIgCheckBox
        case 18 :                                                                // TIgRadioButton
        case 19 : AControl.style.cssText = IgGetStyle("T0IgRadioButton"); break; // TIgRadioButton
      }
    }
}

function IgTplPgcEsqSoSel(APageIndex) {
  return IgTplPGCBorderSides("EsqSoSel",APageIndex);
};

function IgTplPgcBackSel(ACaption,APageIndex,AIsWizard,AWzAcc) {
  if ((AIsWizard) && (AWzAcc == 0))
    return IgTplPGWBorderBack("BackSel",ACaption,APageIndex)
  else
    return IgTplPGCBorderBack("BackSel",ACaption,APageIndex);
};

function IgTplPgcEsqSoNSel(APageIndex) {
  return IgTplPGCBorderSides("EsqSoNSel",APageIndex);
};

function IgTplPgcBackNSel(ACaption,APageIndex,AIsWizard,AWzAcc) {
  if ((AIsWizard) && (AWzAcc == 0))
    return IgTplPGWBorderBack("BackNSel",ACaption,APageIndex);
  else
    return IgTplPGCBorderBack("BackNSel",ACaption,APageIndex);
};

function IgTplPgcEsqNSelSel(APageIndex) {
  return IgTplPGCBorderSides("EsqNSelSel",APageIndex);
};

function IgTplPgcDirSelNSel(APageIndex) {
  return IgTplPGCBorderSides("DirSelNSel",APageIndex);
};

function IgTplPgcDirNSelNSel(APageIndex) {
  return IgTplPGCBorderSides("DirNSelNSel",APageIndex);
};

function IgTplPgcEsqNSelNSel(APageIndex) {
  return IgTplPGCBorderSides("EsqNSelNSel",APageIndex);
};

function IgTplPgcDirSoSel(APageIndex) {
  return IgTplPGCBorderSides("DirSoSel",APageIndex);
};

function IgTplPgcDirSoNSel(APageIndex) {
  return IgTplPGCBorderSides("DirSoNSel",APageIndex);
};

function IgNextVisible(I,APageCount) {
  var Result = false;
  while ((!Result) && (I < APageCount)) {
    Result = (ATabVisibleArr[I] != 0);
    I++;
  };
  return (I-1);
};

function IgPrevVisible(I) {
  var Result = false;
  while ((!Result) && (I >= 0)) {
    Result = (ATabVisibleArr[I] != 0);
    I--;
  };
  return (I+1);
};

function IgTplHasVisible(I,APageCount) {
  var Result = false;
  while ((!Result) && (I < APageCount-1)) {
    Result = (ATabVisibleArr[I+1] != 0);
    I++;
  };
  return (Result);
};

function IgIsLastPage(i,j,APageCount,ALeftTabIndex,AMaxTabs) {
  return ((i == (APageCount-1)) || (j == (AMaxTabs+ALeftTabIndex-1)));
}

function IgTplHtmlPage(AActivePageIndex,APageCount,AComponentIndex,ALeftTabIndex,I,AIsWizard,AMaxTabs,AWzAcc) {
  var Result = '';
  if (I == ALeftTabIndex) { // Primeira aba
    if (I == AActivePageIndex) { // Page selected
      Result = IgTplPgcEsqSoSel(I) + IgTplPgcBackSel(ACaption,I,AIsWizard,AWzAcc);
    } else {
      Result = IgTplPgcEsqSoNSel(I) + IgTplPgcBackNSel(ACaption,I,AIsWizard,AWzAcc);
    }
  } else { // Nao é a primeira aba
    if (I == AActivePageIndex) { // Page selected
      Result = IgTplPgcBackSel(ACaption,I,AIsWizard,AWzAcc);
    } else {
      Result = IgTplPgcBackNSel(ACaption,I,AIsWizard,AWzAcc);
    }
  };
  if ((!IgIsLastPage(I,j,APageCount,ALeftTabIndex,AMaxTabs)) && (IgTplHasVisible(I,APageCount))) { // Se houver mais abas
    if (I == AActivePageIndex) { // Page selected
      Result = Result + IgTplPgcDirSelNSel(I);
    } else {
      if ((I+1) == AActivePageIndex) { // Se proxima estiver selecionada
        Result = Result + IgTplPgcEsqNSelSel(I);
      } else {
        if (I > AActivePageIndex) { // Já passou pela selecionada
          Result = Result + IgTplPgcDirNSelNSel(I);
        } else {
          Result = Result + IgTplPgcEsqNSelNSel(I);
        }
      }
    }
  } else {
    if (I == AActivePageIndex) { // Page selected
      Result = Result + IgTplPgcDirSoSel(I);
    } else {
      Result = Result + IgTplPgcDirSoNSel(I);
    }
  }
  return (Result);
};           8

function IgVisiblePageCount(APageCount) {
  Result = 0;
  for(var i=0; i < APageCount; i++)
    if (ATabVisibleArr[i] != 0) Result++;
  return Result;
}

function IgTplHtmlPages(AActivePageIndex,APageCount,AComponentIndex,ALeftTabIndex,AIsWizard,AMaxTabs) {
  var Result = '';
  eval("AListStr = Pgs" + AComponentIndex);
  I = 0;
  ALastVisiblePage = APageCount; // defalt, caso nao passe pelo for abaixo
  ACaptionArr = new Array(1);
  APageIndexArr = new Array(1);
  ATabVisibleArr = new Array(1);
  AComponentIndexArr = new Array(1);
  AWzAccArr = new Array(1);
  while (AListStr != "") {
    eval("ACaptionArr[" + I + "] = IgGetItemListStr()");
    eval("APageIndexArr[" + I + "] = parseInt(IgGetItemListStr(),10)");
    eval("ATabVisibleArr[" + I + "] = parseInt(IgGetItemListStr(),10)");
    eval("AComponentIndexArr[" + I + "] = parseInt(IgGetItemListStr(),10)");
    eval("AWzAccArr[" + I + "] = parseInt(IgGetItemListStr(),10)");
    I++;
  };
  j = ALeftTabIndex; // j contem contador das paginas efetivamente mostradas
  ALastPage = Math.min(APageCount,AMaxTabs+ALeftTabIndex) - 1;
  for(var i=ALeftTabIndex; i < APageCount; i++) {
    ACaption = ACaptionArr[i];
    APageIndex = APageIndexArr[i];
    AWzAcc = AWzAccArr[i];
    if ((ATabVisibleArr[i] != 0) && (j < AMaxTabs+ALeftTabIndex)) {
      Result = Result + IgTplHtmlPage(AActivePageIndex,APageCount,AComponentIndex,ALeftTabIndex,i,AIsWizard,AMaxTabs,AWzAcc);
      ALastVisiblePage = i;
      j++;
    };
  };
  return (Result);
};

function IgTplId(AId) {
  if (AId == -1)
    return "_X_X_X_" // Pra retornar sempre null
  else
    return ("CMP" + AId);
};

function IgTplCellHdrs(AGrid,ACellHdrs) {
  var ATable = eval("document.all.Tbl" + AGrid.id);
  var Row=ATable.insertRow(0);
  Row.style.cssText = IgGetStyle("TIgGridTitleRowCell");
  Row.style.textAlign = 'center';
  var LastCol=-1;
  var Col=0;
  var Cell=null;
  for(var i=0; i < ACellHdrs.length; i++) {
    Cell = Row.insertCell(-1);
    Cell.innerHTML = ACellHdrs[i][0];
    Col = parseInt(ACellHdrs[i][1],10);
    Cell.colSpan = Col-LastCol;
    LastCol = Col;
  };
};

function IgTplGridHeader(AId,ATable,AStyleRule,IsSelect) {
  var StyTIgGridTitleRowCell = IgGetStyle("TIgGridTitleRowCell");
  var ARow = '<TR style="' + AStyleRule + '">';
  i = 0;
  eval("GrdCol" + AId + " = new Array(1)");
  ALine = "";
  eval("HdrCaption = new Array(1)");
  eval("HdrFName = new Array(1)");
  eval("HdrVisible = new Array(1)");
  eval("HdrWidth = new Array(1)");
  eval("HdrColControl = new Array(1)");
  eval("HdrDataType = new Array(1)");
  eval("HdrMaxLength = new Array(1)");
  eval("HdrCharCase = new Array(1)");
  eval("HdrInputIndex = new Array(1)");
  eval("HdrComboOptions = new Array(1)");
  eval("HdrReadOnly = new Array(1)");
  while (AListStr != "") {
    eval("HdrCaption[" + i + "] = IgGetItemListStr()");
    eval("HdrFName[" + i + "] = IgGetItemListStr()");
    eval("HdrVisible[" + i + "] = parseInt(IgGetItemListStr(),10)");
    eval("HdrWidth[" + i + "] = parseInt(IgGetItemListStr(),10)");
    eval("HdrColControl[" + i + "] = parseInt(IgGetItemListStr(),10)");
    eval("HdrDataType[" + i + "] = parseInt(IgGetItemListStr(),10)");
    eval("HdrMaxLength[" + i + "] = parseInt(IgGetItemListStr(),10)");
    eval("HdrCharCase[" + i + "] = parseInt(IgGetItemListStr(),10)");
    eval("HdrInputIndex[" + i + "] = parseInt(IgGetItemListStr(),10)");
    eval("HdrComboOptions[" + i + "] = IgGetItemListStr()");
    eval("HdrReadOnly[" + i + "] = IgGetItemListStr()");
    if ((HdrVisible[i] != 0) && (IsSelect == 0)) {
      if ((HdrColControl[i] == 2) && (HdrComboOptions[i] == ""))  // ctCheckBox
        AinnerHTML = '<input type=checkbox name=' + AId + PPN + "Cell" + i + ' onclick="IgCheckBoxHeaderClick()">'
      else if (HdrColControl == 4) // ctRadioButton
        AinnerHTML = ''
      else
        AinnerHTML = HdrCaption[i];
      ACell = '<TD style="' + StyTIgGridTitleRowCell + '">' + AinnerHTML + '</TD>';
      ARow = ARow + ACell;
    };
    i++;
  };
  return ARow + '</TR>';
//  if (IsSelect == 0) {
//    ACell = ARow.insertCell();
//    ACell.style.cssText = AStyleRule;
//    ACell.innerHTML = ALine;
//  };
};

function IgChecked(AValue) {
  if (AValue == 'S')
    return 'checked'
  else
    return ''
};

function IgSelected(AValue,AOption) {
  if (AValue == AOption)
    return 'selected'
  else
    return ''
};

function IgHtmlAlignFromData(ADataType) {
  switch (parseInt(ADataType,10)) {
    case 7  : // ftCurrency
    case 10 : // ftTime
    case 9  : // ftDate
    case 11 : // ftDateTime
    case 36 : // ftTimeStamp
    case 37 : // ftFmtBCD
    case 43 : // ftPercVal
      return('right');
      break;
  };
  return('left');
};

function IgScrollIntoView(AGridId) {
  var ASelIndex = eval("document.all." + AGridId + PPN + "SelectedIndex.value");
  if (ASelIndex > -1) {
    var AGrid = eval("document.all." + AGridId);
    if (AGrid.AGridStyle != 4) {
      var ASelId = eval("document.all." + AGridId + "R" + ASelIndex);
      ASelId.scrollIntoView(false);
    };
  };
};

function IgGridRow(AGrid, AId, AComponentIndex, ASelIndex, ACbxGrdClk, j, AInPGC) {
  var ARow = "";
  eval("GrdData" + AId + j + " = new Array(1)");
  if ((j % 2) == 0) {
    ARow = StyTIgGridTableEvenRow;
    ABkColor = '#DCDC8D';
  } else {
    ARow = StyTIgGridTableOddRow;
    ABkColor = '#E2E2A0';
  };
  eval("AListStr = Grd" + AComponentIndex + j);
  var AColor = IgHtmlColor(parseInt(IgGetItemListStr(),10));
  if (AColor != '')
    ABkColor = AColor;
  ARow = '<TR id=' + AGrid.id + 'R' + j + ' style="' + ARow + '; background-color: ' + ABkColor + '">';
  var i = 0;
  var AChkName = "";
  var AEdtName = "";
  var AGridZIndex = AGrid.tabIndex;
  while (AListStr != "") {
    AValue = IgGetItemListStr();
	AinnerHTML = '';
    eval("GrdData" + AId + j + "[" + i + "] = AValue");
    if ((HdrVisible != null) && (HdrVisible[i] != 0)) {
      switch (HdrColControl[i]) {
        case 0 :                                                    // ctNone;
          if (AGrid.AGridStyle == 0)
            AinnerHTML = "<a onclick=javascript:IgGridClick('" + AId + "'," + j + ")>" + AValue + "</a>"
          else
            AinnerHTML = AValue;
          break;
        case 1 : // ctEdit;
          AEdtName = AId + PPN + "Cell" + i + '_' + (j+1);
          var MaxLength = HdrMaxLength[i];
          if (MaxLength != -1) {
            AStrMaxLen = ' MAXLENGTH=' + MaxLength
          } else
            AStrMaxLen = '';
          // j=linha; i=coluna
          AinnerHTML = '<input type=text id=' + AEdtName + ' name=' + AEdtName + ' value="' + AValue + '" ' + AStrMaxLen +
            ' tabindex=' + ACountGrid + parseInt(10 + i + 1,10) + parseInt(10 + j + 1,10) +
            ' ' + IgHtmlReadOnly(HdrReadOnly[i]) + ' AReadOnly=' + HdrReadOnly[i] + ' style="' + StyEditStyle + '; text-transform:' + IgHtmlCharCase(HdrCharCase[i]) + '; text-align:' + IgHtmlAlignFromData(HdrDataType[i]) +
            '; width:' + HdrWidth[i] * 5 + '; " ' + ' ADataType=' + HdrDataType[i] +
            ' ADtsId=' + AGrid.ADtsId + ' AGridId=' + AGrid.id + ' AEventId=1 ' + IgHtmlGridFunction(AGrid.ACalcFields,AGrid.ASumFactor) + ' onkeypress="IgEditKeyPress()" onfocus="IgEditFocus()"' +
            ' onblur="IgEditBlur()" AClassId=6 ARow=' + (j+1) + '>';
          break;
        case 2 : // ctCheckBox;
          AChkName = AId + PPN + "Cell" + i + '_' + (j+1);
          AinnerHTML = '<input type=checkbox name=' + AChkName + ' ' +
            IgChecked(AValue) + ' onclick="IgCheckBoxItemClick()" Typ=2 Row=' + j +
            ' Clk=' + ACbxGrdClk + ' ADtsId=' + AGrid.ADtsId + '>';
          break;
        case 3 : // ctComboBox;
          AinnerHTML = '<select name=' + AId + PPN + "Cell" + i + '_' + (j+1) + ' value="' + AValue +
            '" style="' + StyComboStyle + '" ADtsId=' + AGrid.ADtsId + '>';
          AListStr4 = HdrComboOptions[i];
          AOptionsHTML = "";
          while (AListStr4 != '') {
            var AItem = IgGetItemListStr4(MAGICCHAR2);
            P = AItem.indexOf("=");
            if (P != -1) {
              AVal = AItem.substr(0,P);
              ADsc = AItem.substr(P+1,AItem.length);
            } else {
              AVal = AItem;
              ADsc = AItem;
            };
            AOptionsHTML = AOptionsHTML +
              '<option value="' + AVal + '" ' + IgSelected(AValue,AVal) + '>' + ADsc
          };
          AinnerHTML = AinnerHTML + AOptionsHTML +  '</select>';
          break;
        case 4 : // ctRadioButton
          AChkName = AId + PPN + "Cell" + i + '_' + (j+1);
          AStrChecked = IgChecked(AValue);
          if (j == ASelIndex) AStrChecked = 'checked';
          AinnerHTML = '<input type=radio name=' + AChkName + ' ' +
            AStrChecked + ' onclick="IgCheckBoxItemClick()" Typ=4 Row=' + j +
            ' Clk=' + ACbxGrdClk + ' ADtsId=' + AGrid.ADtsId +'>';
          break;
        case 5 : // ctDepLookup;
          AEdtName = AId + PPN + "Cell" + i + '_' + (j+1);
          AinnerHTML = '<table cellpadding=0 cellspacing=0><tr><td><input type=text id=' + AEdtName +
            ' name=' + AEdtName + ' AKeyValue="' + AValue + '" ' + IgHtmlReadOnly(HdrReadOnly[i]) +
            ' tabindex=' + ACountGrid + parseInt(10 + i + 1,10) + parseInt(10 + j + 1,10) +
            ' AReadOnly=' + HdrReadOnly[i] +
            ' ACmbIdx="' + HdrComboOptions[i] + '" style="' + StyEditStyle + '; text-transform:' + IgHtmlCharCase(HdrCharCase[i]) +
            '; width:' + HdrWidth[i] * 5 + ';" ' +
            ' ADataType=1 ADtsId=' + AGrid.ADtsId + ' AGridId=' + AGrid.id +
            ' AEventId=1 ' + IgHtmlGridFunction(AGrid.ACalcFields,AGrid.ASumFactor) +
            ' onkeypress="IgComboKeyPress()" onfocus="IgEditFocus()" onblur="IgEditBlur()" ' +
            ' AClassId=6 ARow=' + (j+1) + ' ACol=' + i + '></td>' +
            '<td><img id="Arr' + AEdtName + '" src=/images/setacombo.gif' +
            ' onmousedown="IgShowCombo()" onmouseout="IgCloseComboDelay()"></td>' +
            '<td><input type=button id="Qbn' + AEdtName + '" class=TIgButton onclick="IgGridButtonClick()" ' +
            'style="cursor=hand; width=17; height=16; background: beige url(/images/IgButtonSearch.gif) no-repeat center center">' +
            '</td></tr></table><input type=hidden name="' + AId + PPN + 'KeyValue' + i + '_' + (j+1) + '" value="' + AValue + '">';
          var ACmbCol = MAGICCHAR + i + MAGICCHAR;
          if (AGrid.ACmbCols.indexOf(ACmbCol) == -1)
            AGrid.ACmbCols = AGrid.ACmbCols + i + MAGICCHAR;
          var ABfsStr = AEdtName + "#IgGridCbxBeforeSubmit" + MAGICCHAR;
          if (AInPGC==0)
            ABeforeSubmit = ABeforeSubmit + ABfsStr
          else
            APgcBeforeSubmit = APgcBeforeSubmit + ABfsStr;
          break;
      };
      if ((j % 2) == 0)
        ACell = StyTIgGridTableEvenRowCell;
      else
        ACell = StyTIgGridTableOddRowCell;
      ACell = '<TD style="' + ACell + '; background-color: ' + ABkColor + '">' + AinnerHTML + '</TD>';
      ARow = ARow + ACell;
    };
    i++;
  };
  return(ARow);
};

function IgTplGridTable(AId,ATable,AGrid,AComponentIndex,ACbxGrdClk,ARecCount,AInPGC) {
  eval("AListStr = Grc" + AComponentIndex);
  StyTIgGridTableEvenRow = IgGetStyle("TIgGridTableEvenRow");
  StyTIgGridTableOddRow = IgGetStyle("TIgGridTableOddRow");
  StyTIgGridTableEvenRowCell = IgGetStyle("TIgGridTableEvenRowCell");
  StyTIgGridTableOddRowCell = IgGetStyle("TIgGridTableOddRowCell");
  StyEditStyle = IgGetStyle("TTableIgEdit")
  StyComboStyle = IgGetStyle("TTableIgCombo")
  AGrid.AGridHeader = "";
  HdrInputIndex = null;
  HdrVisible = null;
  if (AGrid.AGridStyle != 3)
    AGrid.AGridHeader = IgTplGridHeader(AId,ATable,IgGetStyle("TIgGridTitleRow"),0)
  else
    AGrid.AGridHeader = "";
  j = 0; AChkName = ""; // Para checar o "AllChecked"
  var ARow = "";
  var i = 0;
  var ASelIndex = eval("document.all." + AGrid.id + PPN + "SelectedIndex.value");
  ATableText = '<TABLE id=' + ATable.id + ' width=100% height=100% cellspacing=0 cellpadding=1 border=2>' +
    AGrid.AGridHeader;
  AGrid.AHdrInputIndex = HdrInputIndex;
  AGrid.AHdrVisible = HdrVisible;
  AGrid.ACmbCols = MAGICCHAR;
  while (j < ARecCount) {
    ARow = IgGridRow(AGrid, AId, AComponentIndex, ASelIndex, ACbxGrdClk, j, AInPGC);
    j++;
    ATableText = ATableText + ARow + '</TR>';
  };
  ATableText = ATableText + '<TR style="HEIGHT: 100%"><TD></TD></TR></TABLE>';
  ATable.outerHTML = ATableText;
  AGrid.AColCount = i;
  AGrid.ARecCount = ARecCount;
  if (AChkName != "") {
    AChk = eval("document.all." + AChkName);
    IgCheckBoxAllChecked(AChk); // Pra checar header se página for carregada com tudo checado
  };
  if ((ASelIndex != -1) && (AGrid.ASelOnClick == 1))
    IgGridSelectRow(AGrid,parseInt(ASelIndex,10)+1,true);
};

function IgTplGridSelect(AId,ATable,ASelect,AComponentIndex) {
  eval("AListStr = Grc" + AComponentIndex);
  StyTIgGridSelectOption = IgGetStyle("TIgGridSelectOption");
  ASelect.style.cssText = StyTIgGridSelectOption;
  ASelect.style.width = "100%";
  ASelect.onclick = IgGridSelectClick;
  ASelect.ondblclick = IgGridSelectDblClick;
  IgTplGridHeader(AId,ATable,IgGetStyle("TIgGridTitleRow"),1);
  j = 0;
  while (eval("typeof(Grd" + AComponentIndex + j + ")") != "undefined") {
    eval("GrdData" + AId + j + " = new Array(1)");
    AOption = document.createElement("OPTION");
    AOption.style.cssText = StyTIgGridSelectOption;
    ASelect.options.add(AOption);
    eval("AListStr = Grd" + AComponentIndex + j);
    var AColor = IgHtmlColor(parseInt(IgGetItemListStr(),10));
    i = 0; ALine = "";
    while (AListStr != "") {
      AValue = IgGetItemListStr();
      eval("GrdData" + AId + j + "[" + i + "] = AValue");
      eval("Visible = GrdCol" + AId + "[" + i + "].Visible");
      eval("Width = GrdCol" + AId + "[" + i + "].Width");
      if (Visible != 0) {
        while (AValue.length < Width) AValue = AValue + " ";
        ALine = ALine + AValue + " ";
      };
      i++;
    };
    AOption.innerText = ALine;
    j++;
  };
  ASelect.size = 30;
};

function IgImageClick() {
  var AImage = window.event.srcElement;
  eval("document.all." + AImage.id + PPN + "Submitted.value = 1");
  IgFormSubmit(AImage.AForm);
}

function IMG(AParentId,AId,ASRC,ALeft,ATop,AWidth,AHeight,AVisible,AEnabled,ACursor,AHint,AZIndex,AClassId,
  ACaption,AReadOnly,ARequired,ADtsId,AFIndex,ABrowseButton,AAligners,ASubmit) {
  AComponentIndex = AId;
  AFormId = IgTplId(0);
  AParentId = IgTplId(AParentId);
  AId = IgTplId(AId);
  var AForm = eval("document.all." + AFormId);
  var AParent = eval("document.all." + AParentId);
  AParent.insertAdjacentHTML('beforeEnd','<image id=' + AId + '></image>');
  var AImage = eval("document.all." + AId);
  AImage.src = ASRC;
  if (ABrowseButton != 0) {
    AParent.insertAdjacentHTML('beforeEnd','<input type=file id=' + AId + PPN + 'Image>');
    var AInput = eval("document.all." + AId + PPN + "Image");
    AInput.style.cssText = IgGetStyle("T" + AParent.AClassId + "IgEdit");
    IgTplControl(AForm,AParent,AInput,ALeft,ATop + AHeight + 2, AWidth, 21, 0, AVisible,AEnabled,ACursor,AHint,AZIndex,
      AClassId,AComponentIndex,AAligners);
  };
  AImage.ABrowseButton = ABrowseButton;
  AImage.AClassId = AClassId;
  AImage.name = AId;
  AImage.AForm = AForm;
  AImage.AComponentIndex = AComponentIndex;
  AImage.AParent = AParent;
  AImage.style.left = ALeft;
  AImage.style.top = ATop;
  AImage.style.height = AHeight;
  AImage.style.position = "absolute";
  AImage.tabIndex = AZIndex;
  AImage.style.zIndex = AImage.tabIndex;
  AImage.style.visibility = IgHtmlVisibility(AVisible);
  AImage.style.cursor = IgHtmlCursor(ACursor);
  AImage.alt = ACaption;
  AImage.ADtsId = ADtsId;
  AImage.AFIndex = AFIndex;
  AImage.AAligners = AAligners;
  IgInsertOnForm(AForm,AImage.id,'Submitted','0' + ' AClassId=' + AClassId);
  if (ASubmit==1) AImage.onclick=IgImageClick;
  IgTplAlign(AImage);
};

function IgComboBoxBeforeSubmit(AComboBoxId) {
  var AComboBox = eval("document.all." + AComboBoxId);
  var AKeyValue = eval("document.all." + AComboBoxId + PPN + "KeyValue");
  if ((AComboBox != null) && (AKeyValue != null)) {
    AKeyValue.value = AComboBox.AKeyValue;
    while (AComboBox.value.charAt(L=AComboBox.value.length-1) == " ") // rtrim
      AComboBox.value = AComboBox.value.substr(0,L);
    if ((AComboBox.value == "") && (AKeyValue.value != '$') && (AKeyValue.value != '#'))
      AKeyValue.value = "";
  };
}

function IgGridCbxBeforeSubmit(AComboBoxId) {
  var AComboBox = eval("document.all." + AComboBoxId);
  var P = AComboBoxId.indexOf("Cell");
  var Q = AComboBoxId.indexOf("_");
  var AKeyValue = eval("document.all." + AComboBoxId.substr(0,Q) + PPN + "KeyValue" + AComboBoxId.substr(P+4,AComboBoxId.length));
  if ((AComboBox != null) && (AKeyValue != null)) {
    AKeyValue.value = AComboBox.AKeyValue;
    while (AComboBox.value.charAt(L=AComboBox.value.length-1) == " ") // rtrim
      AComboBox.value = AComboBox.value.substr(0,L);
    if ((AComboBox.value == "") && (AKeyValue.value != '$') && (AKeyValue.value != '#'))
      AKeyValue.value = "";
  };
};

function IgMemoBeforeSubmit(AMemoId) {
  var AMemo = eval("document.all." + AMemoId);
  var ATextValue = eval("document.all." + AMemoId + PPN + "TextValue");
  if ((AMemo != null) && (ATextValue != null)) {
    ATextValue.value = IgEncodeNewLines(AMemo.value);
    AMemo.value = "";
  };
}

function IgTextEdBeforeSubmit(ATedId) {
  var ATed = eval("document.all." + ATedId);
  var ATextValue = eval("document.all." + ATedId + PPN + "TextValue");
  if ((ATed != null) && (ATextValue != null)) {
    ATextValue.value = IgEncodeNewLines(ATed.editor.GetHTML());
  };
}

function IgTplComboDisableChildren(AChildIds) {
  var ALocalStr = AChildIds;
  while (ALocalStr != "") {
    AListStr2 = ALocalStr;
    var AId = IgGetItemListStr2(',');
    ALocalStr = AListStr2;
    var AComboBox = eval("document.all.CMP" + AId);
    if (AComboBox != null) if (AComboBox.AFcEnb) {
      AComboBox.readOnly = true;
      AComboBox.AReadOnly = true;
      if (AComboBox.AKeyValue == "") IgTplComboDisableChildren(AComboBox.ADtlLkpIds)
    };
  };
}

function IgCopySelectOptions(ASourceComboBox,ADestComboBox,ASelectKeyValue) {
  var ASourceSelect = ASourceComboBox.ASelect;
  var ADestSelect = ADestComboBox.ASelect;
  var F = ADestSelect.options.length
  for(var f=0;f<F;f++) ADestSelect.options.remove(0);
  F = ASourceSelect.options.length
  for(var f=0;f<F;f++) {
    var ADestOption = document.createElement("OPTION");
    var ASourceOption = ASourceSelect.options(f);
    ADestOption.AKeyValue = ASourceOption.AKeyValue;
    ADestSelect.options.add(ADestOption);
    ADestOption.innerText = ASourceOption.innerText;
    ADestOption.value = ASourceOption.value;
    ADestOption.AChdRefVal = ASourceOption.AChdRefVal;
    ADestOption.ARefVal = ASourceOption.ARefVal;
    ADestOption.AFldVal = ASourceOption.AFltVal;
  };
  ADestComboBox.ALookupItemsCount = ASourceComboBox.ALookupItemsCount;
  ADestComboBox.ADtlLkpIds = ASourceComboBox.ADtlLkpIds;
  I = IgFindKeyValue(ADestComboBox);
  if (I > 0) { // Tambem no caso do branco ele nao atualiza
    ADestOption = ADestComboBox.ASelect.options[I];
    ADestOption.selected = true;
    if (ASelectKeyValue) {
      ADestComboBox.value = ADestOption.innerText;
      ADestComboBox.AHiddenValue = ADestOption.innerText;
    };
  }
  if (ADestComboBox.AKeyValue == "") IgTplComboDisableChildren(ADestComboBox.ADtlLkpIds);
};

function IgTplComboSelect(AComboBox,AFilterValue,AItemIndex) {
  var AVisibles = "";
  eval("AListStr = Cbb" + AComboBox.AComponentIndex);
  var ASelect = eval("document.all.Sel" + AComboBox.id);
  var F = ASelect.options.length
  for(var f=0;f<F;f++) ASelect.options.remove(0);
  var I = 0;
  if (eval("typeof(Cbv" + AComboBox.AComponentIndex + ")") != "undefined")
    eval("AVisibles = Cbv" + AComboBox.AComponentIndex);
  while ((AListStr != "") && (AListStr != null)) {
    var AVal = IgGetItemListStr();
    var ADsc = IgGetItemListStr();
    var ALen = ADsc.length;
    var ADsc = ADsc.substring(1,ADsc.length-1); // Tirando as aspas
    AListStr2 = ADsc;
    var ASavedDsc = IgGetItemListStr2(DRF)
    var AChdRefVal = IgGetItemListStr2(DRF)
    var ARefVal = IgGetItemListStr2(DRF)
    var AFltVal = IgGetItemListStr2(DRF)
    ADsc = ASavedDsc;
    if ((AFltVal == AFilterValue) || (AFilterValue == "") || (AVal == '')) { // Filtrando valores do DepCombo
      var AOption = document.createElement("OPTION");
      AOption.AKeyValue = AVal; // Salvar porque será necessario na hora de submeter a opcao corrente
      ASelect.options.add(AOption);
      J = 0;
      if (AVisibles != "") {
        AListStr2 = ADsc;
        ADsc = "";
        while (AListStr2 != "") {
          ALookupItem = IgGetItemListStr2(LRF);
          AVis = AVisibles.charAt(J);
          if (AVis == '1') ADsc = ADsc + ALookupItem + " ";
          J++;
        };
      };
      while (ADsc.charAt(L=ADsc.length-1) == " ") ADsc = ADsc.substr(0,L);
      AOption.innerText = ADsc;
      AOption.value = AVal;
      AOption.AChdRefVal = AChdRefVal;
      AOption.ARefVal = ARefVal;
      AOption.AFltVal = AFltVal
      AComboBox.ALookupItemsCount = Math.max(AComboBox.ALookupItemsCount,J); // Por causa do (Refresh), nem todos têm o mesmo numero de items
      I++;
    };
  };
  IgSelectKeyValue(AComboBox);
  if (AComboBox.AKeyValue == "") IgTplComboDisableChildren(AComboBox.ADtlLkpIds);
  if ((AComboBox.AClassId == 17) || (AComboBox.AClassId == 22))
    if (AComboBox.ALookupItemsCount == 0) AComboBox.ALookupItemsCount = 1; // Tem que ter pelo menos 1 LookupResult
};

function IgTplComboBox(AComboBoxId,ALeft,ATop,AWidth,AItemIndex,AInPGC) {
  var AComboBox = eval("document.all." + AComboBoxId);
  var SavedValue = AComboBox.value;
  AComboBox.onkeypress = IgComboKeyPress;
  AComboBox.ATxtRange = null;
  AComboBox.AParent.insertAdjacentHTML('beforeEnd',IgTplCBBArrow("Arr" + AComboBox.id));
  var AImage = eval("document.all.Arr" + AComboBox.id);
  if (!AComboBox.disabled) {
    AImage.onmousedown = IgShowCombo;
    AImage.onmouseout = IgCloseComboDelay;
  };
  AImage.style.position = "absolute";
  AImage.style.left = ALeft+AWidth-20;
  AImage.style.top = ATop + 1;
  AImage.style.height = 18;
  AImage.style.visibility = AComboBox.style.visibility;
  var ASelect = eval("document.all.Sel" + AComboBox.id);
  if (ASelect)
    AComboBox.AForm.removeChild(ASelect); // Como foi criado no Form, nao é removido automaticamente na mudança de pagina do PGC 
  AComboBox.AForm.insertAdjacentHTML('beforeEnd',IgTplCBBSelect("Sel" + AComboBox.id,AComboBox.AParent)); // AForm no lugar de AParent para evitar bug do select no IE7
  AComboBox.AParent.insertAdjacentHTML('beforeEnd','<input type=hidden name="' + AComboBox.id + PPN + 'KeyValue" value="">')
  var ABfsStr = AComboBoxId + "#IgComboBoxBeforeSubmit" + MAGICCHAR;
  if (AInPGC==0)
    ABeforeSubmit = ABeforeSubmit + ABfsStr
  else
    APgcBeforeSubmit = APgcBeforeSubmit + ABfsStr;
  var ASelect = eval("document.all.Sel" + AComboBox.id);
  IgTplAdjustStyle(ASelect,AComboBox.AParent,AComboBox.AClassId);
  ASelect.style.position = "absolute";
  ASelect.style.visibility = "hidden";
  ASelect.onclick = IgComboMouseClick;
  ASelect.onmouseout = IgComboMouseOut;
  ASelect.onmouseover = IgComboMouseOver;
  ASelect.onkeypress = IgSelectKeyPress;
  ASelect.AEdit = AComboBox;
  ASelect.tabIndex = 9999;
  ASelect.style.zIndex = ASelect.tabIndex;
  AComboBox.ASelect = ASelect;
  AComboBox.ALookupItemsCount = 0;
  AImage.AEdit = AComboBox;
  AComboBox.AImage = AImage;
  var AMasterComboBox = eval("document.all." + AComboBox.AMasterLkpId);
  if (AMasterComboBox != null)
    AFilterValue = AMasterComboBox.AKeyValue
  else
    AFilterValue = "";
  IgTplComboSelect(AComboBox,AFilterValue,AItemIndex);
  // if (SavedValue != '(Refresh)') AComboBox.value = SavedValue;
  IgTplAlign(AComboBox);
};

function IgFrmComboBox(AFrameId,ALeft,ATop,AWidth,AItemIndex,AInPGC) {
  var AFrame = eval("document.frames('" + AFrameId + "')");
  if (AFrame.document.readyState != 'complete') {
    window.setTimeout("IgFrmComboBox('" + AFrameId + "'," + ALeft + "," + ATop + "," + AWidth + "," + AItemIndex + "," + AInPGC + ")", 100);
  } else {
    var AFrameBody = AFrame.document.body;
    AFrameBody.style.margin = 0;
    AFrameBody.insertAdjacentHTML('beforeEnd','<input id=' + AFrameId.substring(3,STRMAXLEN) + ' class=T0IgComboBox>');
  };
};

function IgTplRadioGroup(ARadioId,ALeft,ATop,AWidth,AItemIndex) {
  var ARadio = eval("document.all." + ARadioId);
  eval("AListStr = Rdb" + ARadio.AComponentIndex);
  var I = 0;
  var AName = ARadioId;
  while (AListStr != "") {
    AListStr2 = IgGetItemListStr();
    var AL = parseInt(IgGetItemListStr(),10);
    var AT = parseInt(IgGetItemListStr(),10);
    var AH = parseInt(IgGetItemListStr(),10);
    var AW = parseInt(IgGetItemListStr(),10);
    var AValue = IgGetItemListStr2("=");
    ADsc = AListStr2;
    var AId = ARadioId + "_" + I;
    AChecked = (I==AItemIndex);
    RDB(ARadio.AParent.id,AId,AName,ADsc,AL,AT,AW,AH,ARadio.style.zIndex,ARadio.AClassId,AValue,AChecked);
    I++;
  };
};

function IgGetElementsByTagName(str) {
  if (str=="*")
    return document.all
  else
    return document.all.tags(str)
};

function IgExtractCoords(S0) {
  CoordS0 = S0.substr(01,3);
  CoordS1 = S0.substr(05,3);
  CoordS2 = S0.substr(09,3);
  CoordS3 = S0.substr(13,3);
};

function IgRefresh(IgCurrZoom) {
  IgCurrZoom = IgCurrZoom + 40;
  IgOldZoom=IgZoomLevel;
  IgZoomLevel=IgCurrZoom;
  if (document.all)
    document.getElementsByTagName=IgGetElementsByTagName;
  var obj = document.getElementsByTagName("img")
  for (var i=0;i < obj.length;i++) {
    var el = obj[i];
    IgExtractCoords(el.id);
    el.style.posTop = parseInt(CoordS1,10)*IgZoomLevel/100;
    el.style.posLeft = parseInt(CoordS0,10)*IgZoomLevel/100;
    el.style.posHeight = parseInt(CoordS2,10)*IgZoomLevel/100;
    el.style.posWidth = parseInt(CoordS3,10)*IgZoomLevel/100;
  }
  var obj = document.getElementsByTagName("span")
  for (var i=0;i < obj.length;i++) {
    var el = obj[i];
    el.style.verticalAlign = "bottom";
    if(el.style.fontSize) {
      IgExtractCoords(el.id);
      el.style.fontSize = (parseInt(CoordS0,10)*IgZoomLevel/100) + 'px';
      el.style.width = (parseInt(CoordS1,10)*IgZoomLevel/100);
    }
  }
  var obj = document.getElementsByTagName("div")
  for (var i=0;i < obj.length;i++) {
    var el = obj[i];
    IgExtractCoords(el.id);
    el.style.posTop = parseInt(CoordS1,10)*IgZoomLevel/100;
    el.style.posLeft = parseInt(CoordS0,10)*IgZoomLevel/100;
    el.style.posHeight = parseInt(CoordS2,10)*IgZoomLevel/100;
    el.style.posWidth = parseInt(CoordS3,10)*IgZoomLevel/100;
  }
}

function LBT(AParentId,AId,ACaption,ALeft,ATop,AWidth,AHeight,AAlignment,AVisible,
  AEnabled,ACursor,AHint,AZIndex,AClassId,AKind,AIcon,AGroupValidate,AGroupCheckPending,
  AConfirmMessage,ASubmitButton,ADefault,AAligners,AFMntFormName) {

  BTN(AParentId,AId,ACaption,ALeft,ATop,AWidth,AHeight,AAlignment,AVisible,
    AEnabled,ACursor,AHint,AZIndex,AClassId,AKind,AIcon,AGroupValidate,AGroupCheckPending,
    AConfirmMessage,ASubmitButton,ADefault,AAligners);
  var AButton = eval("document.all." + IgTplId(AId));
  AButton.AFMntFormName = AFMntFormName;
};

function IgTplGridButton(ABtnIdx,AParent,AForm,AIcon,ACaption,ALeft,ATop,AWidth,AHeight,AZIndex,
  AConfirmMessage,ASubmitButton) {
  ACaption = IgExtractAccessKey(ACaption);
  var AId = AParent.id + "_" + ABtnIdx;
  BTA(AId,AParent.id,AIcon,ACaption);
  var AButton = eval("document.all." + AId);
  IgTplControl(AForm,AParent,AButton,ALeft,ATop,AWidth,AHeight,2,1,1,-21,"",AZIndex,8,-1,8);
  IgInsertOnForm(AParent,AParent.id,'Submitted' + ABtnIdx,0);
  AButton.ABtnIdx = ABtnIdx;
  AButton.AKind = 0;
  AButton.AIcon = AIcon;
  AButton.AGroupValidate = false;
  AButton.AGroupCheckPending = false;
  AButton.AConfirmMessage = AConfirmMessage;
  AButton.ASubmitButton = ASubmitButton;
  AButton.ACaption = ACaption;
  AButton.onclick = IgGridSheetButtonClick;
  AButton.onkeydown = IgButtonKeyDown;
};

function GDS(AParentId,AId,ACaption,ALeft,ATop,AWidth,AHeight,AStatus,ARecordChanged,
  ADefaultControlId,AKeyValues,ADtsId,ADetailGrpList,ADetailKFld,AMasterIdx,AClickNew,
  APpmCnt,ARowCount,AColCount,ASelIndex,AGrdBtnClk,AChamadaInterna) {

  var AGdsControl = eval("document.all.CMP" + AId);
  if (AGdsControl != null) {
    AGdsControl.AParent.removeChild(AGdsControl);
  };
  if (AStatus == 2) { // gsListing
    TBS(AParentId,AId,ACaption,ALeft,ATop,AWidth,AHeight,AStatus,ARecordChanged,
      ADefaultControlId,AKeyValues,13,ADtsId,ADetailGrpList,ADetailKFld,AMasterIdx,AClickNew,APpmCnt);
    AGdsControl = eval("document.all.CMP" + AId);
    AGdsControl.style.position = "";
    AGdsControl.style.width = AWidth;
    AGdsControl.style.height = AHeight - 20;
    IgInsertOnForm(AGdsControl,AGdsControl.id,'SelectedIndex',ASelIndex);
    IgTplGridWidget(AGdsControl,ARowCount,AColCount,ASelIndex)
    AGdsControl.AAligners = 3; // gkBottom + gkRight
    IgTplAlign(AGdsControl);
    IgTplGridButton(0,AGdsControl,AGdsControl.AForm,2,"&Incluir", 4,AHeight+2,75,18,1,"",0);
    IgTplGridButton(1,AGdsControl,AGdsControl.AForm,1,"&Alterar",79,AHeight+2,75,18,1,"",0);
    IgTplGridButton(2,AGdsControl,AGdsControl.AForm,6,"&Excluir",154,AHeight+2,75,18,1,"Confirma?",1);
  } else {
    if (AChamadaInterna == 1) { // Mesmo comportamento de mudança de página. Prepara tudo para re-renderização
      ARenderSelectList = "";
      ARenderGridSelectList = "";
      ARenderTopControls = "";
      APgcBeforeSubmit = "";
      AChangeStatusGroupList = "";
    };
    eval("GRP" + AId + "();");
    AGdsControl = eval("document.all.CMP" + AId);
    IgInsertOnForm(AGdsControl,AGdsControl.id,'SelectedIndex',ASelIndex);
    if (AChamadaInterna == 1) { // Se chamou do server, rotinas abaixo sao executadas pelo LST()
      IgChangeRecordChanged(AGdsControl,0);
      IgRenderSelectList();
      IgRenderGridSelectList();
      IgRenderTopControls();
      IgChangeStatusGroupList(); // Vou tirar pq estava muito lento. Nao usar mais ReadOnlyOnEditint na ficha finaceira
      IgResizeEnd();
    };
  };
  AGdsControl = eval("document.all.CMP" + AId);
  AGdsControl.ACaption = ACaption;
  AGdsControl.ALeft = ALeft;
  AGdsControl.ATop = ATop;
  AGdsControl.AWidth = AWidth;
  AGdsControl.AHeight = AHeight;
  AGdsControl.ARowCount = ARowCount;
  AGdsControl.AColCount = AColCount;
  AGdsControl.ASelIndex = ASelIndex;
  AGdsControl.AKeyValues = AKeyValues;
  AGdsControl.AGrdBtnClk = AGrdBtnClk;
};

function IgLoadForm(AFormName) {
//  alert(document.body.outerHTML);
//  document.body.insertAdjacentHTML('beforeEnd','<iframe id=DataFrame frameborder=0 scrolling=no style="position:absolute;left:0;top:0;width:0;height:0;visibility:hidden" src="/IISGestao.dll/' + AFormName + '"></iframe>');
//  alert(document.body.outerHTML);
};


