/**********************************************************************
 *
 * Classe responsavel pela captura personalizada de elementos de um 
 * formulario e insere na grid, com seus respectivos inputs hidden
 *
 **********************************************************************/
function DataFormToGrid(){

	// Id da tabela da grid na qual se quer trabalhar com os dados
	this.strIdTableGrid = "tableGrid";
	
	// Id do campo que tera seu valor concatenado no id dos inputs hidden
	this.strIdFieldKeyToHidden = "Idt";
	
	// Id do form na qual armazena os elementos (campos)
	this.strIdFormFields = null;		// Id do form na qual armazena a grid
	this.strIdFormGrid = null;
	
	// Id do elemento html que armazena o titlulo do formulario
	this.strIdTitleForm = null;		// Id do elemento botao da acao
	this.strIdButtonForm = null;

	// Array de titulo a serem visualizados na grid
	this.arrTitlesToShowInGrid = new Array();
	
	// Array de campos a serem trabalhados durante a insercao na grid
	this.arrFieldsToInsertIntoGrid = new Array();
	
	/**********************************************************************
	 * Metodo que adiciona o id (identificador) da tabela da grid na qual
	 * se quer trabalhar com os dados
	 *
	 * @param string _strIdTableGrid
	 * @return bool
	 **********************************************************************/
	this.addIdTableGrid = function(_strIdTableGrid){
		
		// Obrigando a passagem de todos os parametros
		if(_strIdTableGrid == undefined){
			return(false);
		}
		
		// Atribuindo o id
		this.strIdTableGrid = _strIdTableGrid;
		
		// Retorno do metodo
		return(true);
	}
	
	/**********************************************************************
	 * Metodo que adiciona o id (identificador) do campo que tera seu 
	 * valor concatenado no id dos inputs hidden
	 *
	 * @param string _strIdTableGrid
	 * @return bool
	 **********************************************************************/
	this.addIdFieldKeyToHidden = function(_strIdFieldKeyToHidden){
		
		// Obrigando a passagem de todos os parametros
		if(_strIdFieldKeyToHidden == undefined){
			return(false);
		}
		
		// Atribuindo o id
		this.strIdFieldKeyToHidden = _strIdFieldKeyToHidden;
		
		// Retorno do metodo
		return(true);
	}
	
	/**********************************************************************
	 * Metodo que adiciona o id (identificador) do form que armazena 	 * os campos 
	 *
	 * @param string _strIdFormFields
	 * @return bool
	 **********************************************************************/
	this.addIdFormFields = function(_strIdFormFields){
		
		// Obrigando a passagem de todos os parametros
		if(_strIdFormFields == undefined){
			return(false);
		}
		
		// Atribuindo o id
		this.strIdFormFields = _strIdFormFields;
		
		// Retorno do metodo
		return(true);
	}		/**********************************************************************
	 * Metodo que adiciona o id (identificador) do form que armazena 	 * a grid
	 *
	 * @param string _strIdFormGrid
	 * @return bool
	 **********************************************************************/
	this.addIdFormGrid = function(_strIdFormGrid){
		
		// Obrigando a passagem de todos os parametros
		if(_strIdFormGrid == undefined){
			return(false);
		}
		
		// Atribuindo o id
		this.strIdFormGrid = _strIdFormGrid;
		
		// Retorno do metodo
		return(true);
	}
	
	/**********************************************************************
	 * Metodo que adiciona o id (identificador) do elemento html 
	 * que armazena o titlulo do formulario	 *
	 * @param string  _strIdTitleForm
	 * @return bool
	 **********************************************************************/
	this.addIdTitleForm = function(_strIdTitleForm){
		
		// Obrigando a passagem de todos os parametros
		if(_strIdTitleForm == undefined){
			return(false);
		}
		
		// Atribuindo o id
		this.strIdTitleForm = _strIdTitleForm;
		
		// Retorno do metodo
		return(true);
	}		/**********************************************************************
	 * Metodo que adiciona o id (identificador) do elemento html 
	 * que armazena os botoes	 *
	 * @param string  _strIdTitleForm
	 * @return bool
	 **********************************************************************/
	this.addIdButtonForm = function(_strIdButtonForm){
		
		// Obrigando a passagem de todos os parametros
		if(_strIdButtonForm == undefined){
			return(false);
		}
		
		// Atribuindo o id
		this.strIdButtonForm = _strIdButtonForm;
		
		// Retorno do metodo
		return(true);
	}
	
	/**********************************************************************
	 * Metodo que adiciona um titulo a ser visualizado na grid
	 *
	 * @param string _strIdFieldForm
	 * @param string _strLabelTitleGrid
	 * @param integer _intWidthTitleGrid
	 * @param integer _intOrderTitleGrid	 * @param string _strCssTextTitle	 * @param string _strCssTextRegister
	 * @return bool
	 **********************************************************************/
	this.addTitleToShowInGrid = function(_strIdFieldForm, _strLabelTitleGrid, _intWidthTitleGrid, _intOrderTitleGrid, _strCssTextTitle, _strCssTextRegister){
		
		// Obrigando a passagem de todos os parametros
		if(_strLabelTitleGrid == undefined){
			return(false);
		}
		
		// Adicionando as informacoes no array de titulos
		var arrTitlesToShowInGridIntern = new Array();
		arrTitlesToShowInGridIntern.push(_strIdFieldForm);
		arrTitlesToShowInGridIntern.push(_strLabelTitleGrid);
		arrTitlesToShowInGridIntern.push(_intWidthTitleGrid);
		arrTitlesToShowInGridIntern.push(_intOrderTitleGrid);		arrTitlesToShowInGridIntern.push(_strCssTextTitle);		arrTitlesToShowInGridIntern.push(_strCssTextRegister);
		this.arrTitlesToShowInGrid.push(arrTitlesToShowInGridIntern);		
		
		// Retorno do metodo
		return(true);
	}

	/**********************************************************************
	 * Metodo que adiciona um campo a ser trabalhado durante a insercao 
	 * na grid
	 *
	 * @param string _strIdFieldForm
	 * @param string _strIdHiddenGrid
	 * @return bool
	 **********************************************************************/
	this.addFieldToInsertIntoGrid = function(_strIdFieldForm, _strIdHiddenGrid){
	
		// Obrigando a passagem de todos os parametros
		if((_strIdFieldForm == undefined)||(_strIdHiddenGrid == undefined)){
			return(false);
		}
		
		// Adicionando as informacoes no array de campos
		var arrFieldsToInsertIntoGridIntern = new Array();
		arrFieldsToInsertIntoGridIntern.push(_strIdFieldForm);
		arrFieldsToInsertIntoGridIntern.push(_strIdHiddenGrid);
		this.arrFieldsToInsertIntoGrid.push(arrFieldsToInsertIntoGridIntern);		
		
		// Retorno do metodo
		return(true);
	}
	
	/**********************************************************************
	 * Metodo que retorna o respectivo id do input hidden de um id de campo
	 *
	 * @param string _strIdFieldForm
	 * @return mix
	 **********************************************************************/
	this.getIdHiddenByIdField = function(_strIdFieldForm){
	
		// Obrigando a passagem de todos os parametros
		if(_strIdFieldForm == undefined){
			return(false);
		}
		
		// Varrendo o array de campos
		for(var i = 0; i < this.arrFieldsToInsertIntoGrid.length; ++i){
		
	    	// Capturando as informacoes contidas em um elemento do array de campos
	    	arrFieldsToInsertIntoGridIntern = this.arrFieldsToInsertIntoGrid[i];
        	strIdFieldForm = arrFieldsToInsertIntoGridIntern[0];
        	strIdHiddenGrid = arrFieldsToInsertIntoGridIntern[1];
        	
			// Caso encontre o elemento parametrizado
        	if(strIdFieldForm == _strIdFieldForm){
        	
        		// Retorna o id do input hidden
        		return(strIdHiddenGrid);
        		break;
        	}
		}
		
		// Retorno do metodo
		return(false);	
	}
	
	/**********************************************************************
	 * Metodo que retorna o respectivo array de informacoes (label, ordem
	 * e comprimento) de um id de campo
	 *
	 * @param string _strIdFieldForm
	 * @return mix
	 **********************************************************************/
	this.getArrInfoTitleByIdField = function(_strIdFieldForm){
	
		// Obrigando a passagem de todos os parametros
		if(_strIdFieldForm == undefined){
			return(false);
		}
	
		// Varrendo o array de campos
		for(var i = 0; i < this.arrTitlesToShowInGrid.length; ++i){
		
	    	// Capturando as informacoes contidas em um elemento do array de campos
	    	arrTitlesToShowInGridIntern = this.arrTitlesToShowInGrid[i];
        	strIdFieldForm = arrTitlesToShowInGridIntern[0];
        	strLabelTitleGrid = arrTitlesToShowInGridIntern[1];
        	intWidthTitleGrid = arrTitlesToShowInGridIntern[2];
        	intOrderTitleGrid = arrTitlesToShowInGridIntern[3];        	strCssTextTitle = arrTitlesToShowInGridIntern[4];        	strCssTextRegister = arrTitlesToShowInGridIntern[5];
        	
			// Caso encontre o elemento parametrizado
        	if(strIdFieldForm == _strIdFieldForm){
        	
        		// Retorna o array de informacoes
        		var arrInfoReturn = new Array();
        		arrInfoReturn.push(strLabelTitleGrid);
        		arrInfoReturn.push(intWidthTitleGrid);
        		arrInfoReturn.push(intOrderTitleGrid);        		arrInfoReturn.push(strCssTextTitle);        		arrInfoReturn.push(strCssTextRegister);
        		return(arrInfoReturn);
        		break;
        	}
		}
		
		// Retorno do metodo
		return(false);
	}
	
	/**********************************************************************
	 * Metodo que executa a insercao dos dados para grid
	 *
	 * @param string _strFunctionExec
	 * @return bool
	 **********************************************************************/
	this.insertIntoGrid = function(_strFunctionExec){
	
		// Capturando o objeto referente a tabela da grid
		var objGridElement = document.getElementById(this.strIdTableGrid);
		
		// Capturando o valor do campo que tera seu valor concatenado no id 
		// dos inputs hidden
		var objFieldKeyToHidden = document.getElementById(this.strIdFieldKeyToHidden);
		var strValueFieldKeyToHidden = objFieldKeyToHidden.value;
		
		// Insere somente quando nao possui o registro na grid
		if(document.getElementById("trGridRegistro[" + strValueFieldKeyToHidden + "]") != undefined){
			alerta("&nbsp;&raquo;&nbsp;Elemento já existente na listagem.", 'Erro de validação', undefined, 55);
			return(false);
		}

		// Strings de HTML
		var strHtmlTr = '<tbody id="tbodyGridRegistro[' + strValueFieldKeyToHidden + ']" name="tbodyGridRegistro"><tr id="trGridRegistro[' + strValueFieldKeyToHidden + ']" name="trGridRegistro" style="background-color: \'#FBFBFB\';" onmouseout="this.style.backgroundColor=\'#FBFBFB\';" onmouseover="this.style.backgroundColor=\'#DFE7EF\';">';
		var strHtmlTd = "";
		var strHtmlInputHidden = "";				// Caso exista a linha indicativa de nenhum registro na grid		if(document.getElementById('tbodyGridRegistro[0]')){
			var objTableGrid = document.getElementById(this.strIdTableGrid);			objTableGrid.removeChild(document.getElementById('tbodyGridRegistro[0]'));
		}
		
		// Varrendo o array de campos
		for(var i = 0; i < this.arrFieldsToInsertIntoGrid.length; ++i){

	    	// Capturando as informacoes contidas em um elemento do array de campos
	    	arrFieldsToInsertIntoGridIntern = this.arrFieldsToInsertIntoGrid[i];
        	strIdFieldForm = arrFieldsToInsertIntoGridIntern[0];
        	strIdHiddenGrid = arrFieldsToInsertIntoGridIntern[1];
        	
        	// Capturando o objeto e valor do campo			strValueFieldForm = this.getValueFromFieldForm(strIdFieldForm);
        	
        	// Concatenando os hidden
        	strHtmlInputHidden += '<input type="hidden" id="' + strIdHiddenGrid + '[' + strValueFieldKeyToHidden + ']" name="' + strIdHiddenGrid + '" value="' + strValueFieldForm + '"/>';
        }
        
        // Array de obrigacao de editar no banco de dados        strHtmlInputHidden += '<input type="hidden" id="inputHiddenBoolDatabase[' + strValueFieldKeyToHidden + ']" name="inputHiddenBoolDatabase" value="1"/>';        		// Caso se tenha parametrizado algum script a ser executado
        if(_strFunctionExec != undefined){
        	_strFunctionExec = replaceAll(_strFunctionExec, "'", "\"");
        	_strFunctionExec = "\'" + _strFunctionExec + "\'";
        }
        
		// Varrendo o array de titulo		var boolAction = false;
		for(var i = 0; i < this.arrTitlesToShowInGrid.length; ++i){		
	    	// Capturando as informacoes contidas em um elemento do array de campos
	    	arrTitlesToShowInGridIntern = this.arrTitlesToShowInGrid[i];
	    	strIdFieldForm = arrTitlesToShowInGridIntern[0];
        	strLabelTitleGrid = arrTitlesToShowInGridIntern[1];
        	intWidthTitleGrid = arrTitlesToShowInGridIntern[2];
        	intOrderTitleGrid = arrTitlesToShowInGridIntern[3];        	strCssTextTitle = arrTitlesToShowInGridIntern[4];        	strCssTextRegister = arrTitlesToShowInGridIntern[5];        	        	// Capturando o objeto e valor do campo
        	strValueFieldForm = this.getValueFromFieldForm(strIdFieldForm);        	        	// Concatenando os tds
        	strHtmlTd += '<td ';
        	if((intWidthTitleGrid != undefined)&&(intWidthTitleGrid != "")){
	        	strHtmlTd += ' width="' + intWidthTitleGrid;	        	if(intWidthTitleGrid.indexOf("%") != -1){	        		strHtmlTd += '" ';	        	} else if(intWidthTitleGrid.indexOf("px") != -1){	        		strHtmlTd += '" ';	        	} else {	        		strHtmlTd += '%" ';	        	}
        	}
        	if( strCssTextRegister != undefined ) strHtmlTd += " style='" + strCssTextRegister + "' ";        	if( strIdFieldForm != undefined ) strHtmlTd += ' onclick="objDataFormToGrid.updateFromGrid(\'' + strValueFieldKeyToHidden + '\',' + _strFunctionExec + ');"';        	strHtmlTd += '>';
	       	if( strIdFieldForm == undefined ){
        		boolAction = true;        		strHtmlTd += '' +        			'	<img src="http://sistemas.anatel.gov.br/psv/imagens/icones/16x16/ico16_visualizardocumento.gif" border="0" hspace="0" vspace="2" alt="Clique para editar." style="cursor:pointer;" onclick="objDataFormToGrid.updateFromGrid(\'' + strValueFieldKeyToHidden + '\',' + _strFunctionExec + ');" />' +
					'	<img src="http://sistemas.anatel.gov.br/psv/imagens/icones/16x16/ico16_desanexar.gif" border="0" hspace="0" vspace="2" alt="Clique para excluir." style="cursor:pointer;" onclick="objDataFormToGrid.deleteFromGrid(\'' + strValueFieldKeyToHidden + '\',' + _strFunctionExec + ');" />' +
					'	' + strHtmlInputHidden;
        	}
        	if( strValueFieldForm == "" ) strValueFieldForm = "&nbsp;";        	strHtmlTd += strValueFieldForm + '</td>'
		}
		if(!boolAction){			// Concatenando o td de acoes
			strHtmlTd += '' +
				'<td width="15%">' +
        		'	<img src="http://sistemas.anatel.gov.br/psv/imagens/icones/16x16/ico16_visualizardocumento.gif" border="0" hspace="0" vspace="2" alt="Clique para editar." style="cursor:pointer;" onclick="objDataFormToGrid.updateFromGrid(\'' + strValueFieldKeyToHidden + '\',' + _strFunctionExec + ');" />' +
				'	<img src="http://sistemas.anatel.gov.br/psv/imagens/icones/16x16/ico16_desanexar.gif" border="0" hspace="0" vspace="2" alt="Clique para excluir." style="cursor:pointer;" onclick="objDataFormToGrid.deleteFromGrid(\'' + strValueFieldKeyToHidden + '\',' + _strFunctionExec + ');" />' +
				'	' + strHtmlInputHidden;
				'</td>';
		}				// Reunindo todos os HTMLs
		var strHtml = strHtmlTr + strHtmlTd + '</tr></tbody>';	
		// Inserindo o HTML na grid				if(document.all){			// @cat
			var objParentGridElement = objGridElement.parentNode;
			var strParentGridElementInnerHTML = replaceAll(objParentGridElement.innerHTML, "</table>", "");			strParentGridElementInnerHTML += strHtml + "</table>";
			objParentGridElement.innerHTML = strParentGridElementInnerHTML;		} else {
			objGridElement.innerHTML += strHtml;		}
		
		// Alterando informacoes do titulo do formulario e botao para incluir		var objTitleForm = document.getElementById(this.strIdTitleForm);
		objTitleForm.innerHTML = "FORMULÁRIO DE INCLUSÃO";
		var objButtonForm = document.getElementById(this.strIdButtonForm);
		if(objButtonForm != undefined){
			if(document.all){
				objButtonForm.onclick = new Function("if(objValidateForm.validateNow())objDataFormToGrid.insertIntoGrid(" + _strFunctionExec + ");");
			} else {
				objButtonForm.setAttribute("onclick", "if(objValidateForm.validateNow())objDataFormToGrid.insertIntoGrid(" + _strFunctionExec + ");");
			}			objButtonForm.setAttribute("src", "http://sistemas.anatel.gov.br/psv/Imagens/Botoes/bot_incluir.gif");
		}
		
		// Capturando o objeto form e o resetando caso exista
		var objForm = document.getElementById(this.strIdFormFields);
		if(objForm != undefined){
			objForm.reset();
			arrResetFields = getElementsByAttribute( document.body , "INPUT" , "resetField" , "true" );			for(var j = 0; j < arrResetFields.length; ++j){				var objResetField = arrResetFields[j];
				var strResetValue = objResetField.getAttribute("resetValue");				objResetField.value = strResetValue;			}
		}
		
		// Caso tenha se parametrizado algum script JS a ser executado
		if(_strFunctionExec != undefined){
			_strFunctionExec = replaceAll(_strFunctionExec, "'", "");
			if(_strFunctionExec == "") _strFunctionExec = undefined;
		}	
		
		// Funcao de mensagem ao usuario
		alerta("Um novo elemento foi inserido na Grid corretamente!", undefined, undefined, undefined, _strFunctionExec);
		
		// Retorno da funcao
		return(true);
	}
	
	/**********************************************************************
	 * Metodo que executa a alteracao dos dados para grid
	 *
	 * @param string _strValueFieldKey
	 * @param string _strFunctionExec
	 * @return bool
	 **********************************************************************/
	this.updateIntoGrid = function(_strValueFieldKey, _strFunctionExec){
	
		// Capturando o objeto referente a tabela da grid
		var objTrElement = document.getElementById("trGridRegistro[" + _strValueFieldKey + "]");
		
		// Capturando o valor do campo que tera seu valor concatenado no id 
		// dos inputs hidden
		var objFieldKeyToHidden = document.getElementById(this.strIdFieldKeyToHidden);
		var strValueFieldKeyToHidden = objFieldKeyToHidden.value;

		// Strings de HTML
		var strHtmlTr = '';		if(document.all) strHtmlTr += '<tbody id="tbodyGridRegistro[' + strValueFieldKeyToHidden + ']" name="tbodyGridRegistro">';		strHtmlTr += '<tr id="trGridRegistro[' + strValueFieldKeyToHidden + ']" name="trGridRegistro" style="background-color: \'#F3F3F3\';" onmouseout="this.style.backgroundColor=\'#F3F3F3\';" onmouseover="this.style.backgroundColor=\'#DFE7EF\';">';
		var strHtmlTd = "";
		var strHtmlInputHidden = "";
		
		// Varrendo o array de campos
		for(var i = 0; i < this.arrFieldsToInsertIntoGrid.length; ++i){

	    	// Capturando as informacoes contidas em um elemento do array de campos
	    	arrFieldsToInsertIntoGridIntern = this.arrFieldsToInsertIntoGrid[i];
        	strIdFieldForm = arrFieldsToInsertIntoGridIntern[0];
        	strIdHiddenGrid = arrFieldsToInsertIntoGridIntern[1];
        	
        	// Capturando o objeto e valor do campo
        	strValueFieldForm = this.getValueFromFieldForm(strIdFieldForm);
        	
        	// Concatenando os hidden
        	strHtmlInputHidden += '<input type="hidden" id="' + strIdHiddenGrid + '[' + strValueFieldKeyToHidden + ']" name="' + strIdHiddenGrid + '" value="' + strValueFieldForm + '"/>';
        }
        
        // Array de obrigacao de editar no banco de dados        strHtmlInputHidden += '<input type="hidden" id="inputHiddenBoolDatabase[' + strValueFieldKeyToHidden + ']" name="inputHiddenBoolDatabase" value="1"/>';        		// Caso se tenha parametrizado algum script a ser executado
        if(_strFunctionExec != undefined){
        	_strFunctionExec = "'" + _strFunctionExec + "'";
        }        		// Varrendo o array de titulo		var boolAction = false;
		for(var i = 0; i < this.arrTitlesToShowInGrid.length; ++i){		
	    	// Capturando as informacoes contidas em um elemento do array de campos
	    	arrTitlesToShowInGridIntern = this.arrTitlesToShowInGrid[i];
	    	strIdFieldForm = arrTitlesToShowInGridIntern[0];
        	strLabelTitleGrid = arrTitlesToShowInGridIntern[1];
        	intWidthTitleGrid = arrTitlesToShowInGridIntern[2];
        	intOrderTitleGrid = arrTitlesToShowInGridIntern[3];        	strCssTextTitle = arrTitlesToShowInGridIntern[4];        	strCssTextRegister = arrTitlesToShowInGridIntern[5];        	        	// Capturando o objeto e valor do campo        	strValueFieldForm = this.getValueFromFieldForm(strIdFieldForm);        	        	// Concatenando os tds
        	strHtmlTd += '<td ';
        	if((intWidthTitleGrid != undefined)&&(intWidthTitleGrid != "")){
	        	strHtmlTd += ' width="' + intWidthTitleGrid;	        	if(intWidthTitleGrid.indexOf("%") != -1){	        		strHtmlTd += '" ';	        	} else if(intWidthTitleGrid.indexOf("px") != -1){	        		strHtmlTd += '" ';	        	} else {	        		strHtmlTd += '%" ';	        	}
        	}
        	if( strCssTextRegister != undefined ) strHtmlTd += " style='" + strCssTextRegister + "' ";        	strHtmlTd += ' onclick="objDataFormToGrid.updateFromGrid(\'' + strValueFieldKeyToHidden + '\',' + _strFunctionExec + ');">';
	       	if( strIdFieldForm == undefined ){
        		boolAction = true;        		strHtmlTd += '' +        			'	<img src="http://sistemas.anatel.gov.br/psv/imagens/icones/16x16/ico16_visualizardocumento.gif" border="0" hspace="0" vspace="2" alt="Clique para editar." style="cursor:pointer;" onclick="objDataFormToGrid.updateFromGrid(\'' + strValueFieldKeyToHidden + '\',' + _strFunctionExec + ');" />' +
					'	<img src="http://sistemas.anatel.gov.br/psv/imagens/icones/16x16/ico16_desanexar.gif" border="0" hspace="0" vspace="2" alt="Clique para excluir." style="cursor:pointer;" onclick="objDataFormToGrid.deleteFromGrid(\'' + strValueFieldKeyToHidden + '\',' + _strFunctionExec + ');" />' +
					'	' + strHtmlInputHidden;
        	}
        	if( strValueFieldForm == "" ) strValueFieldForm = "&nbsp;";        	strHtmlTd += strValueFieldForm + '</td>'
		}
		if(!boolAction){			// Concatenando o td de acoes
			strHtmlTd += '' +
				'<td width="15%">' +
        		'	<img src="http://sistemas.anatel.gov.br/psv/imagens/icones/16x16/ico16_visualizardocumento.gif" border="0" hspace="0" vspace="2" alt="Clique para editar." style="cursor:pointer;" onclick="objDataFormToGrid.updateFromGrid(\'' + strValueFieldKeyToHidden + '\',' + _strFunctionExec + ');" />' +
				'	<img src="http://sistemas.anatel.gov.br/psv/imagens/icones/16x16/ico16_desanexar.gif" border="0" hspace="0" vspace="2" alt="Clique para excluir." style="cursor:pointer;" onclick="objDataFormToGrid.deleteFromGrid(\'' + strValueFieldKeyToHidden + '\',' + _strFunctionExec + ');" />' +
				'	' + strHtmlInputHidden;
				'</td>';
		}
		
		// Reunindo todos os HTMLs		var strHtml = strHtmlTr + strHtmlTd + '</tr>';
		if(document.all) strHtml += '</tbody>';					// Alterando o HTML na grid				if(document.all){			// @cat			var objParentGridElement = objTrElement.parentNode.parentNode.parentNode;
			var objGridElement = objTrElement.parentNode.parentNode;
			var arrChildsGridElement = objGridElement.childNodes;			var strTagGridElement = replaceAll(replaceAll(objGridElement.outerHTML, objGridElement.innerHTML, ""), "</table>", "");
			var strParentGridElementInnerHTML = strTagGridElement;			
			for(var i = 0; i < arrChildsGridElement.length; ++i){				var objChildGridElement = arrChildsGridElement[i];				var strIdChildGridElement = "tbodyGridRegistro[" + _strValueFieldKey + "]";								if(objChildGridElement.getAttribute("id") == strIdChildGridElement){
					strParentGridElementInnerHTML += strHtml;
				} else {
					strParentGridElementInnerHTML += objChildGridElement.outerHTML;
				}			}
			strParentGridElementInnerHTML += "</table>";
			objParentGridElement.innerHTML = strParentGridElementInnerHTML;		} else {			objTrElement.parentNode.innerHTML = strHtml;		}				// Alterando informacoes do titulo do formulario e botao para incluir		var objTitleForm = document.getElementById(this.strIdTitleForm);		objTitleForm.innerHTML = "FORMULÁRIO DE INCLUSÃO";
		var objButtonForm = document.getElementById(this.strIdButtonForm);
		if(objButtonForm != undefined){
			if(document.all){
				objButtonForm.onclick = new Function("if(objValidateForm.validateNow())objDataFormToGrid.insertIntoGrid(" + _strFunctionExec + ");");
			} else {
				objButtonForm.setAttribute("onclick", "if(objValidateForm.validateNow())objDataFormToGrid.insertIntoGrid(" + _strFunctionExec + ");");
			}			objButtonForm.setAttribute("src", "http://sistemas.anatel.gov.br/psv/Imagens/Botoes/bot_incluir.gif");
		}
		
		// Capturando o objeto form e o resetando caso exista
		var objForm = document.getElementById(this.strIdFormFields);
		if(objForm != undefined){
			objForm.reset();			arrResetFields = getElementsByAttribute( document.body , "INPUT" , "resetField" , "true" );			for(var j = 0; j < arrResetFields.length; ++j){				var objResetField = arrResetFields[j];
				var strResetValue = objResetField.getAttribute("resetValue");				objResetField.value = strResetValue;			}
		}
		
		// Caso tenha se parametrizado algum script JS a ser executado
		if(_strFunctionExec != undefined){
			_strFunctionExec = replaceAll(_strFunctionExec, "'", "");
			if(_strFunctionExec == "") _strFunctionExec = undefined;
		}	
		
		// Funcao de mensagem ao usuario
		alerta("Um elemento foi alterado na Grid corretamente!", undefined, undefined, undefined, _strFunctionExec);
		
		// Retorno da funcao
		return(true);
	}
	
	/**********************************************************************
	 * Metodo que executa a delecao dos dados na grid
	 *
	 * @param string _strValueFieldKey
	 * @param string _strFunctionExec
	 * @return bool
	 **********************************************************************/
	this.deleteFromGrid = function(_strValueFieldKey, _strFunctionExec){
		
		// Obrigando a passagem de parametros
		if(_strValueFieldKey == undefined){
			return(false);
		}
		
		// Caso se tenha parametrizado algum script a ser executado
        if(_strFunctionExec != undefined){
        	_strFunctionExec = "'" + _strFunctionExec + "'";
        }
	
		// Capturando o objeto referente a tabela da grid
		var objGridElement = document.getElementById(this.strIdTableGrid);
		
		// Capturando o objeto referente a linha da grid a ser removida
		var objTrToRemove = document.getElementById("trGridRegistro[" + _strValueFieldKey + "]");
		
		// Removendo o elemento da grid
		var objTbodyGridElement = objTrToRemove.parentNode;
		objTbodyGridElement.removeChild(objTrToRemove);				// Alterando informacoes do titulo do formulario e botao para incluir		var objTitleForm = document.getElementById(this.strIdTitleForm);		objTitleForm.innerHTML = "FORMULÁRIO DE INCLUSÃO";
		var objButtonForm = document.getElementById(this.strIdButtonForm);
		if(objButtonForm != undefined){
			if(document.all){
				objButtonForm.onclick = new Function("if(objValidateForm.validateNow())objDataFormToGrid.insertIntoGrid(" + _strFunctionExec + ");");
			} else {
				objButtonForm.setAttribute("onclick", "if(objValidateForm.validateNow())objDataFormToGrid.insertIntoGrid(" + _strFunctionExec + ");");
			}			objButtonForm.setAttribute("src", "http://sistemas.anatel.gov.br/psv/Imagens/Botoes/bot_incluir.gif");
		}
		
		// Funcao de mensagem ao usuario
		alerta("Um elemento foi excluído da Grid corretamente!");
	
		// Retorno da funcao
		return(true);
	}
	
	/**********************************************************************
	 * Metodo que executa a alteracao dos dados na grid
	 *
	 * @param string _strValueFieldKey
	 * @param string _strFunctionExec
	 * @return bool
	 **********************************************************************/
	this.updateFromGrid = function(_strValueFieldKey, _strFunctionExec){

		// Obrigando a passagem de parametros
		if(_strValueFieldKey == undefined){
			return(false);
		}
		
		// Caso tenha se parametrizado algum script JS a ser executado
		if(_strFunctionExec != undefined){
			eval(_strFunctionExec);
		}
		
		// Varrendo o array de campos
		for(var i = 0; i < this.arrFieldsToInsertIntoGrid.length; ++i){

	    	// Capturando as informacoes contidas em um elemento do array de campos
	    	arrFieldsToInsertIntoGridIntern = this.arrFieldsToInsertIntoGrid[i];
        	strIdFieldForm = arrFieldsToInsertIntoGridIntern[0];
        	strIdHiddenGrid = arrFieldsToInsertIntoGridIntern[1];
        	
        	// Capturando o objeto do input hidden
        	objHiddenGrid = document.getElementById(strIdHiddenGrid + '[' + _strValueFieldKey + ']');        	        	// Capturando o objeto do campo
        	objFieldForm = document.getElementById(strIdFieldForm);
        	
        	// Atribuindo o valor do input hidden para o campo do formulario
	        this.setValueFromHiddenToFieldForm(objHiddenGrid, objFieldForm, strIdFieldForm);
        }
        
        // Caso se tenha parametrizado algum script a ser executado
        if(_strFunctionExec != undefined){
        	_strFunctionExec = "'" + _strFunctionExec + "'";
        }
        
        // Alterando informacoes do titulo do formulario e botao para alterar		var objTitleForm = document.getElementById(this.strIdTitleForm);		objTitleForm.innerHTML = "FORMULÁRIO DE ALTERAÇÃO";
		var objButtonForm = document.getElementById(this.strIdButtonForm);
		if(objButtonForm != undefined){
			if(document.all){
				objButtonForm.onclick = new Function("if(objValidateForm.validateNow())objDataFormToGrid.updateIntoGrid('" + _strValueFieldKey + "', " + _strFunctionExec + ");");
			} else {
				objButtonForm.setAttribute("onclick", "if(objValidateForm.validateNow())objDataFormToGrid.updateIntoGrid('" + _strValueFieldKey + "', " + _strFunctionExec + ");");
			}			objButtonForm.setAttribute("src", "http://sistemas.anatel.gov.br/psv/Imagens/Botoes/bot_alterar.gif");
		}				// Retorno da funcao
		return(true);
	}	
	/**********************************************************************
	 * Metodo que retorna o valor de um campo do formulario
	 *
	 * @param string _strIdFieldForm
	 * @return string
	 **********************************************************************/	this.getValueFromFieldForm = function(_strIdFieldForm){
			if( _strIdFieldForm != undefined ){
        	objFieldForm = document.getElementById(_strIdFieldForm);        	if(objFieldForm != undefined){
        		switch(objFieldForm.getAttribute("type")){        		        			case "radio": {        				arrFieldForm = document.getElementsByName(_strIdFieldForm);        				strValueFieldForm = "";
        				for(var j = 0; j < arrFieldForm.length; ++j){
        					objFieldFormIntern = arrFieldForm[j];        					
        					if(objFieldFormIntern.checked == true){
        						strValueFieldForm = objFieldFormIntern.value;        						break;
        					}
        				}
        				break;
        			}
        			case "checkbox": {
        				if(objFieldForm.checked == true){
        					strValueFieldForm = objFieldForm.value;
        				} else {        					strValueFieldForm = "";        				}        				break;
        			}        			default: {
        				strValueFieldForm = objFieldForm.value;	        				break;
        			}        		}
        	} else {        		arrFieldForm = document.getElementsByName(_strIdFieldForm);
        		strValueFieldForm = "";
        		for(var j = 0; j < arrFieldForm.length; ++j){
        			objFieldFormIntern = arrFieldForm[j];        			switch(objFieldFormIntern.getAttribute("type")){        				case "radio": {
        					if(objFieldFormIntern.checked == true){
        						strValueFieldForm = objFieldFormIntern.value;
        					}        					break;
        				}
        			}
        		}
        	}        } else {        	strValueFieldForm = "";        }                // Retorno da funcao
        return(strValueFieldForm);	}		/**********************************************************************
	 * Metodo que atribui o valor do input hidden para um	 * campo do formulario
	 *
	 * @param mix _mixHiddenFieldGrid	 * @param mix _mixFieldForm	 * @param string _strIdFieldForm
	 * @return bool
	 **********************************************************************/	this.setValueFromHiddenToFieldForm = function(_mixHiddenFieldGrid, _mixFieldForm, _strIdFieldForm){
	
		if((_mixHiddenFieldGrid == undefined)||(_strIdFieldForm == undefined)){			return(false);		}
		var objHiddenFieldGrid = (isObject(_mixHiddenFieldGrid)) ? _mixHiddenFieldGrid : document.getElementById(_mixHiddenFieldGrid);		if(_mixFieldForm == undefined){			var objFieldForm = undefined;		} else {
			var objFieldForm = (!isObject(_mixFieldForm)) ? document.getElementById(_mixFieldForm) : _mixFieldForm;		}
		// Atribuindo o valor do input hidden para o campo        if(objHiddenFieldGrid != undefined){        	if(objFieldForm != undefined){
        		switch(objFieldForm.getAttribute("type")){
        			case "radio": {        				arrFieldForm = document.getElementsByName(_strIdFieldForm);        				
        				for(var j = 0; j < arrFieldForm.length; ++j){
        					objFieldFormIntern = arrFieldForm[j];
        					var strFieldFormInternOtherValue = null;        					if(objFieldFormIntern.value == 1){
        						strFieldFormInternOtherValue = "True";
        					}
        					if(objFieldFormIntern.value == 0){
        						strFieldFormInternOtherValue = "False";
        					}
        					if(objFieldFormIntern.value == objHiddenFieldGrid.value){
        						objFieldFormIntern.checked = true;
        					} else {        						if((!isNull(strFieldFormInternOtherValue))&&(strFieldFormInternOtherValue == objHiddenFieldGrid.value)){
        							objFieldFormIntern.checked = true;
        						}        					}
        				}
        				break;
        			}
        			case "checkbox": {        				var strFieldFormOtherValue = null;        				if(objFieldForm.value == 1){
        					strFieldFormOtherValue = "True";
        				}
        				if(objFieldForm.value == 0){
        					strFieldFormOtherValue = "False";
        				}        				if(objFieldForm.value == objHiddenFieldGrid.value){
        					objFieldForm.checked = true;
        				} else {        					if((!isNull(strFieldFormOtherValue))&&(strFieldFormOtherValue == objHiddenFieldGrid.value)){
        						objFieldForm.checked = true;
        					} else {
        						objFieldForm.checked = false;
        					}        				}
        				break;
        			}        			default: {        				objFieldForm.value = objHiddenFieldGrid.value;	
        				break;
        			}        		}        		        	} else {        		arrFieldForm = document.getElementsByName(_strIdFieldForm);        				
        		for(var j = 0; j < arrFieldForm.length; ++j){
        			objFieldFormIntern = arrFieldForm[j];
        			if(objFieldFormIntern.value == objHiddenFieldGrid.value){
        				objFieldFormIntern.checked = true;
        			}
        		}        	}	    }
	
		// Retorno da funcao		return(true);
	}
}
