var Grid = function ObjGrid(Pstr_Classe, Pobj_Documento, Pstr_NomeCampoId) {
				
	this.classe = Pstr_Classe;
	this.idGrid = 'Grd_' + Pstr_Classe;
	this.documento = Pobj_Documento;
	this.tabelaGrid = this.documento.getElementById(this.idGrid);
	this.modelo = this.tabelaGrid.rows[1];
	this.numeroColunasModelo = this.modelo.cells.length;
	this.funcaoClick = null;
	this.altura = '100px';
	this.largura = '600px';
	this.linhasPorPagina = 5;
	this.paginaAtual = 0;
	this.totalRegistros = 0;
	this.totalPaginas = 0;
	this.arrColunasModeloCabecalho = this.tabelaGrid.rows[0];
	this.tabelaGrid.rows[1].style.display = 'none';
	this.corLinhaPar = '#F1F4FA';
	this.corLinhaImpar = '#FFFFFF';
	this.corLinhaSelecionada = '#d7e6f5';
	this.corAuxiliar = '';
	this.arrLinhas = new Array();
	
	this.PreencherCabecalho = function () {
		this.setTotalPaginas();
		this.AtualizarPaginas();
		if ( $('spn_TotalRegistros_' + this.classe) != undefined ) {
			$('spn_TotalRegistros_' + this.classe).innerHTML = this.totalRegistros;
		}
		if ( $('spn_TotalPaginas_' + this.classe) != undefined ) {
			$('spn_TotalPaginas_' + this.classe).innerHTML = this.totalPaginas;
		}
		if ( $('spn_PaginaAtual_' + this.classe) != undefined ) {
			$('spn_PaginaAtual_' + this.classe).innerHTML = this.paginaAtual;
		}
		if ( $('spn_Paginas_' + this.classe) != undefined ) {
			this.PreencherPaginas();
		}
	};
	
	this.PreencherPaginas = function () {
		var Lstr_Paginas = '';
		var Lint_Pagina = 0;
		for ( var i=0; i< this.totalPaginas; i++) {
			Lint_Pagina = Math.ceil(i + 1);
			if ( Lint_Pagina == this.paginaAtual) {
				Lstr_Paginas += '&nbsp;<font color="red" style="font-weight:bold;font-family:Tahoma;font-size:11px;padding:3px;"><u>' + Lint_Pagina + '</u></font>';
			}
			else {
				Lstr_Paginas += '&nbsp;<b><a onmouseover="this.style.cursor=\'pointer\'" onclick="Gobj_' + this.classe + '.IrParaPagina('+Lint_Pagina+')">' + Lint_Pagina + '</a></b>';
			}
		}
		$('spn_Paginas_' + this.classe).innerHTML = Lstr_Paginas;
	}
	
	this.AtualizarPaginas = function () {
		if ( this.paginaAtual > this.totalPaginas) {
			this.paginaAtual = this.totalPaginas;
		}
		var Lint_InicioPagina = ((this.paginaAtual - 1) * this.linhasPorPagina) + 2;
		var Lint_FimPagina = (Lint_InicioPagina + this.linhasPorPagina) - 1;

		for ( var Lint_i = 1; Lint_i < this.tabelaGrid.rows.length; Lint_i++) {
			if ( Lint_i >= Lint_InicioPagina && Lint_i <=Lint_FimPagina ) {
				this.tabelaGrid.rows[Lint_i].style.display = '';
			}
			else {
				this.tabelaGrid.rows[Lint_i].style.display = 'none';
			}
		}
	};
	
	this.IrParaPagina = function (Pint_Pagina) {
		if ( Pint_Pagina == '' || Pint_Pagina == 0) return;
		this.paginaAtual = Math.ceil(Pint_Pagina);
		this.PreencherCabecalho();
	};
	
	this.IrParaPaginaSeguinte = function () {
		if ( this.paginaAtual < this.totalPaginas ){
			this.paginaAtual = Math.ceil(this.paginaAtual) + 1;
			this.PreencherCabecalho();
		}
	};
	
	this.IrParaPaginaAnterior = function () {
		if ( this.paginaAtual > 1 ){
			this.paginaAtual = Math.ceil(this.paginaAtual) - 1;
			this.PreencherCabecalho();
		}
	};
	
	this.IrParaUltimaPagina = function () {
		if ( this.paginaAtual < this.totalPaginas && this.paginaAtual > 1){
			this.paginaAtual = this.totalPaginas;
			this.PreencherCabecalho();
		}
	};
	
	this.IrParaPrimeiraPagina = function () {
		if ( this.paginaAtual > 1 ){
			this.paginaAtual = 1;
			this.PreencherCabecalho();
		}
	};			
	
	if ( Pstr_NomeCampoId != undefined ) {
		this.CampoId = Pstr_NomeCampoId;
	}
	else {
		this.CampoId = 'id';
	}
	
	this.setTotalPaginas = function () {
		this.totalPaginas = Math.ceil(this.totalRegistros / this.linhasPorPagina);
	};	
	
	this.setAltura = function (Pstr_Altura) {
		this.altura = Pstr_Altura;
	};
	
	this.setLargura = function (Pstr_Largura) {
		this.largura = Pstr_Largura;
	};
	
	this.setFuncaoClick = function (Pstr_Funcao) {
		this.funcaoClick = Pstr_Funcao;
	};
	
	this.setLinhasPorPagina = function (Pstr_LinhasPorPagina) {
		this.linhasPorPagina= Pstr_LinhasPorPagina;
	};
	
	this.setCorLinhaPar = function (Pstr_Cor) {
		this.corLinhaPar = Pstr_Cor;
	};	
	
	this.setCorLinhaImpar = function (Pstr_Cor) {
		this.corLinhaImpar = Pstr_Cor;
	};

	this.setCorLinhaSelecionada = function (Pstr_Cor) {
		this.corLinhaSelecionada = Pstr_Cor;
	};		
	
	this.Salvar = function (Pstr_Id, Pobj_Bean) { 				
		var Lstr_idLinha = this.classe + '_' + Pstr_Id;
		var Lobj_Linha = this.documento.getElementById(Lstr_idLinha);
		if ( Lobj_Linha == undefined ) {
			this.AdicionarLinha(Pobj_Bean);
		}
		else {
			this.AlterarLinha(Pstr_Id, Pobj_Bean);
		}
	};
	
	this.AdicionarLinhas = function (Parr_Bean) {
		var Lint_TamanhoArray = Parr_Bean.length;
		//var Lobj_Grid = eval('Gobj_Documento.Gobj_'+this.classe);				
		
		this.Limpar();
		
		for ( var i=0; i < Lint_TamanhoArray; i++ ) {
			this.AdicionarLinha(Parr_Bean[i]);
		}
		this.paginaAtual = 1;
		this.PreencherCabecalho();
	};
	
	this.AdicionarLinha = function (Pobj_Bean) {
		if (Pobj_Bean.length != undefined) {
			if ( this.documento.getElementById(this.classe + '_' + eval('Pobj_Bean[0]')) != undefined ) {
				this.arrLinhas[Pobj_Bean[0]] = Pobj_Bean;
				this.AlterarLinha(eval('Pobj_Bean[0]'), Pobj_Bean);
				return;
			}
		}
		else {
			if ( this.documento.getElementById(this.classe + '_' + eval('Pobj_Bean.' + this.CampoId)) != undefined ) {
				this.arrLinhas[eval('Pobj_Bean.' + this.CampoId)] = Pobj_Bean;
				this.AlterarLinha(eval('Pobj_Bean[0]'), Pobj_Bean);
				return;
			}
		}
		var Lobj_Linha = this.tabelaGrid.insertRow(this.tabelaGrid.rows.length);
		var Lobj_Coluna = null;
		var Lstr_classe = this.classe;
		if (Pobj_Bean.length != undefined) {
			this.arrLinhas[Pobj_Bean[0]] = Pobj_Bean;
			Lobj_Linha.id = this.classe + '_' + eval('Pobj_Bean[0]');
		}
		else {
			Lobj_Linha.id = this.classe + '_' + eval('Pobj_Bean.' + this.CampoId);
			this.arrLinhas[eval('Pobj_Bean.' + this.CampoId)] = Pobj_Bean;
		}

		for ( var Lint_i = 0; Lint_i < this.modelo.cells.length; Lint_i++) {
			Lobj_Coluna = this.documento.createElement("TD");
			Lobj_Coluna = Lobj_Linha.insertCell(Lint_i);
			Lobj_Coluna.className = this.modelo.cells[Lint_i].className;
			Lobj_Coluna.innerHTML = this.PreencherConteudoColuna(this.modelo.cells[Lint_i].innerHTML, Pobj_Bean);
			Lobj_Linha.appendChild(Lobj_Coluna);
		}
		if ( this.funcaoClick != null ) {
			var Lobj_funcao = this.funcaoClick + '(Pobj_Bean, e)';
			Lobj_Linha.onclick = function (e) { eval(Lobj_funcao) };			
			var Lobj_Grid = eval('Gobj_' + this.classe);
			//Lobj_Linha.onclick = function (e) { Gobj_Pagina.Editar(Pobj_Bean, Lstr_classe);	};
			Lobj_Linha.onmouseover = function (e) { Lobj_Grid.OnMouseOver(this) };
			Lobj_Linha.onmouseout = function (e) { Lobj_Grid.OnMouseOut(this) };			
			Lobj_Linha.style.cursor = 'pointer';
		}
		if ((this.tabelaGrid.rows.length % 2) == 0) {
			Lobj_Linha.style.backgroundColor = this.corLinhaPar;
		} else {
			Lobj_Linha.style.backgroundColor = this.corLinhaImpar;
		}
		
		this.totalRegistros = this.totalRegistros + 1;
		this.paginaAtual = Math.ceil(this.totalRegistros / this.linhasPorPagina);
		this.PreencherCabecalho();
	};
	
	this.OnMouseOver = function(Pobj_Linha) {
		if (Pobj_Linha.style.backgroundColor != this.corLinhaSelecionada) {
			this.corAuxiliar = Pobj_Linha.style.backgroundColor;
		}
		Pobj_Linha.style.backgroundColor = this.corLinhaSelecionada;		
	};

	this.OnMouseOut = function(Pobj_Linha) {				
		Pobj_Linha.style.backgroundColor = this.corAuxiliar;		
	};
				
	this.AlterarLinha = function (Pstr_Id, Pobj_Bean) {
		var Lstr_idLinha = this.classe + '_' + Pstr_Id;
		var Lobj_Linha = this.documento.getElementById(Lstr_idLinha);
		var Lobj_Coluna = null;

		for ( var Lint_i = 0; Lint_i < this.modelo.cells.length; Lint_i++) {
			Lobj_Coluna = Lobj_Linha.cells[Lint_i];
			Lobj_Coluna.className = this.modelo.cells[Lint_i].className;
			Lobj_Coluna.innerHTML = this.PreencherConteudoColuna(this.modelo.cells[Lint_i].innerHTML, Pobj_Bean);
		}
		if ( this.funcaoClick != null ) {
			Lobj_Linha.onclick = function (e) { Gobj_Pagina.Editar(Pobj_Bean, this.classe) };
			var Lobj_Grid = eval('Gobj_' + this.classe);
			Lobj_Linha.onmouseover = function (e) { Lobj_Grid.OnMouseOver(this) };
			Lobj_Linha.onmouseout = function (e) { Lobj_Grid.OnMouseOut(this) };			
			Lobj_Linha.style.cursor = 'pointer';
		}
	};

	this.RemoverLinha = function (Pstr_Id) {
		var Lstr_idLinha = this.classe + '_' + Pstr_Id;
		for ( var Lint_i = 0; Lint_i < this.tabelaGrid.rows.length; Lint_i++) {
			if ( this.tabelaGrid.rows[Lint_i].id == Lstr_idLinha ) {
				
				if (isNaN(Pstr_Id)) {
					delete this.arrLinhas[Pstr_Id];					
				} else {
					this.arrLinhas.splice(Pstr_Id, 1);
				}
				
				this.tabelaGrid.deleteRow(Lint_i);
				this.RefazerCores();
				break;
			}
		}
		this.totalRegistros = this.totalRegistros - 1;
		this.PreencherCabecalho();
		if ( this.totalRegistros == 0 ) {
			this.Limpar();
		}
	};
	
	this.RefazerCores = function() {
		for ( var i = 0; i < this.tabelaGrid.rows.length; i++) {
			if ((i % 2) == 0) {
				this.tabelaGrid.rows[i].style.backgroundColor = this.corLinhaImpar;
			} else {
				this.tabelaGrid.rows[i].style.backgroundColor = this.corLinhaPar;
			}
		}
	};
	
	this.BuscarLinha = function (Pstr_Id) {
		return this.arrLinhas[Pstr_Id];
	};	
	
	this.Limpar = function () {
		//var Lint_NumeroLinhas = this.tabelaGrid.rows.length;
		//for ( var Lint_i = 0; Lint_i < Lint_NumeroLinhas; Lint_i++) {
		while (this.tabelaGrid.rows.length > 2) {
			this.tabelaGrid.deleteRow(2);
		}
		
		this.totalPaginas = 0;
		this.totalRegistros = 0;
		this.paginaAtual = 0;
		this.PreencherCabecalho();
		this.tabelaGrid.rows[1].style.display = 'none';
	};	
	
	this.PreencherConteudoColuna = function (Pstr_ConteudoColuna, Pobj_Bean) {
		var Lint_PosicaoInicioCampo = null;
		var Lint_PosicaoFimCampo = null;
		var Lstr_NomeCampo = '';
		var Lstr_ConteudoColuna = Pstr_ConteudoColuna;

		while (Lstr_ConteudoColuna.indexOf('$[[') != -1) {
			Lint_PosicaoInicioCampo = Lstr_ConteudoColuna.indexOf('$[[') + 3;
			Lint_PosicaoFimCampo = Lstr_ConteudoColuna.indexOf(']]');
			Lstr_NomeCampo = Lstr_ConteudoColuna.substring(Lint_PosicaoInicioCampo, Lint_PosicaoFimCampo);
			if (Pobj_Bean.length != undefined) {
				Lstr_ConteudoColuna = Lstr_ConteudoColuna.replace('$[[' + Lstr_NomeCampo + ']]', eval('Pobj_Bean[' + Lstr_NomeCampo + ']'));
			}
			else {
				Lstr_ConteudoColuna = Lstr_ConteudoColuna.replace('$[[' + Lstr_NomeCampo + ']]', eval('Pobj_Bean.' + Lstr_NomeCampo));
			}
		}
		while (Lstr_ConteudoColuna.indexOf('$%5B%5B') != -1) {
			Lint_PosicaoInicioCampo = Lstr_ConteudoColuna.indexOf('$%5B%5B') + 7;
			Lint_PosicaoFimCampo = Lstr_ConteudoColuna.indexOf('%5D%5D');
			Lstr_NomeCampo = Lstr_ConteudoColuna.substring(Lint_PosicaoInicioCampo, Lint_PosicaoFimCampo);
			//if (Pobj_Bean instanceof Array) {
			if (Pobj_Bean.length != undefined) {
				Lstr_ConteudoColuna = Lstr_ConteudoColuna.replace('$%5B%5B' + Lstr_NomeCampo + '%5D%5D', eval('Pobj_Bean[' + Lstr_NomeCampo + ']'));
			}
			else {
				Lstr_ConteudoColuna = Lstr_ConteudoColuna.replace('$%5B%5B' + Lstr_NomeCampo + '%5D%5D', eval('Pobj_Bean.' + Lstr_NomeCampo));
			}
		}		
		return Lstr_ConteudoColuna;
	};				
};
