var contextMenu;

function objectQGrid(name){
	//this.formName = 'frmEditar';
	this.formName = document.forms[0].name;
	this.name = name;
	this.objectName = 'QGrid';

	this.className;
	this.gridFunction = 'listagemTodos';
	this.arrayFields;
	this.arrayColumns;
	this.secondLine;
	this.fieldSearch;
	this.arrayGroup;
	this.extraPars = '';

	this.idGrid;
	this.contextMenuContainer = 'contextMenu_container';
	this.gridTitle;
	this.isObject = false;

	/**
	* SET's.
	**/
	this.setFormName = function(formName){
		this.formName = formName;
	},

	this.setExtraPars = function(args) {
		this.extraPars = args;
	},

	this.setGridFunction = function(gridFunction){
		this.gridFunction = gridFunction;
	},

	this.setClassName = function(className){
		this.className = className;
	},

	this.setArrayFields = function(arrayFields){
		this.arrayFields = arrayFields.replace(/&/g, '<REPLACE_E>').split(',');
	},

	this.setArrayColumns = function(arrayColumns){
		this.arrayColumns = arrayColumns.replace(/&/g, '<REPLACE_E>').split(',');
		for (var i = 0; i < this.arrayColumns.length; i++)
			this.arrayColumns[i] = codificarHTML(this.arrayColumns[i]);
	},

	this.setSecondLine = function(secondLine){
		this.secondLine = secondLine;
	},

	this.setFieldSearch = function(fieldSearch){
		this.fieldSearch = fieldSearch;
	},

	this.setArrayGroup = function(arrayGroup){
		this.arrayGroup = arrayGroup.split(',');
	},

	this.setIdGrid = function(idGrid){
		this.idGrid = idGrid;
	},

	this.setGridTitle = function(gridTitle){
		this.gridTitle = gridTitle;
	},

	this.setIsObject = function(is){
		this.isObject = is;
	},

	this.setFormName = function(formName) {
		this.formName = formName;
	},

	this.setObjectName = function(objectName) {
		this.objectName = objectName;
	},

	/**
	* EXIBE A DIV DE OPÇÕES DE EXPORTAÇÃO.
	**/
	this.getGridExport = function() {
		var url  = pathWeb + '/framework/qgrid/ajax/getDivExport.php?';
			url += (this.isObject ? 'GRID=' + this.name + 'Object' : '');
			url += '&objectName=' + this.objectName;

		showQWindow(url, {name: 'divExportGrid_' + this.name, title: QLabel[33], width: 350, height: 104});
	},

	/**
	* GERA O ARQUIVO.
	**/
	this.makeFile = function() {
		// Desabilita o botão.
		$('btnExportQGrid').disabled = true;

		// Define a URL.
		var url = pathWeb + '/framework/qgrid/ajax/getFile.php';

		// Monta os parâmetros.
		var pars = Form.serialize(this.formName);
		if (typeof(idBasicForm) != 'undefined')
		{
			var objBasicForm = eval(this.name);
			if ($('dspesquisa'))
			{
				pars += '&' + objBasicForm.nmSearch + '=' + $F('dspesquisa');
			}
		} 

		if (typeof(QSearchProfile) != 'undefined' && this.formName == document.forms[0].name)
			pars += SearchProfile.getFormValue() + '&dsextraparameters=' + SearchProfile.getGridsParameters();

    	if (this.isObject)
			pars += '&GRID=' + this.name + 'Object';

		// Flag de tipo de pesquisa.
        if(!isEmpty('idtipopesquisa'))
        	pars += '&idtipopesquisa=' + $F('idtipopesquisa');

		// Parâmetros da grid.
 		pars += '&CLASSNAME=' + this.className + '&GRIDFUNCTION=' + this.gridFunction + '&SECONDLINE=' + this.secondLine + '&GROUP=' + this.arrayGroup.join(',');
		pars += '&FIELDS=' + this.arrayFields.join(',') + '&COLUMNS=' + this.arrayColumns.join(',') + '&GRIDTITLE=' + codificarHTML(this.gridTitle) + '&idmaxresults=F';
		pars += '&idgrid=' + this.idGrid + '&objectName=' + this.objectName;
		// Tipo de exportação.
		pars += '&idexporttype=' + $F('idexporttype');
		// parametros extra
		pars += '&' + this.extraPars;

		pars = unique(pars.split('&')).join('&');
		
		new Ajax.Request(url, {parameters: pars, method: 'post', showDivQ: true});
	},

	/**
	* EXECUTA O DOWNLOAD DO ARQUIVO.
	**/
	this.downloadFile = function(fileName){
		var url = pathWeb + '/framework/qupload/downloadFile.php';
		var pars = '?filename=' + fileName;

		fechaObjeto('divExportGrid_' + this.name);
		executarLink(url + pars, true, true, false, 100, 600);
	},

	/**
	* EXIBE A TELA DE PERSONALIZAÇÃO DE GRID.
	**/
	this.customizeGrid = function(){
		var url = pathWeb + '/framework/qgrid/ajax/getCustomizeGrid.php';
		var pars = 'idgrid=' + this.idGrid;
		showQWindow(url, {name: 'divCustomizeGrid', parameters: pars, title: QLabel[34], height: 320});
	},

	/**
	* ATUALIZA A GRID DE PERSONALIZAÇÃO DE LAYOUT.
	**/
	this.getCustomizeGrid = function(){
		var url = pathWeb + '/framework/qgrid/ajax/getCustomizeGrid.php';
		var pars = 'Acao=1&idgrid=' + this.idGrid;
		new Ajax.Updater({success: 'gridCustomize'}, url, {parameters: pars, method: 'get', showDivQ: true, evalScripts: true});
	},

	/**
	* ADICIONA UM CAMPO AO LAYOUT DE PERSONALIZAÇÃO DO USUÁRIO.
	**/
	this.addCustomizeField = function(fieldType) {
		if(fieldType == 'field' && isEmpty('nmcampo_grid') || fieldType == 'attribute' && isEmpty('cdtipoatributo_grid'))
			return showQAlert(QLabel[14], {type: 'exclamation'});

		var url = pathWeb + '/framework/qgrid/ajax/getCustomizeGrid.php';
		var pars = 'Acao=2&idgrid=' + this.idGrid + '&nmcampo=' + $F('nmcampo_grid');

		if(fieldType == 'attribute')
			pars += '&cdtipoatributo=' + $F('cdtipoatributo_grid');

		new Ajax.Request(url, {parameters: pars, method: 'get', showDivQ: true});
	},

	/**
	* EXCLUI UM CAMPO DO LAYOUT DE PERSONALIZAÇÃO DO USUÁRIO.
	**/
	this.deleteCustomizeField = function(nrSequencia){
		var url = pathWeb + '/framework/qgrid/ajax/getCustomizeGrid.php';
		var pars = 'Acao=3&idgrid=' + this.idGrid + '&nrsequencia=' + nrSequencia;
		new Ajax.Request(url, {parameters: pars, mehtod: 'get', showDivQ: true});
	},

	/**
	* FUNÇÕES DE CONTROLE DE ORDENAÇÃO DOS CAMPOS DO LAYOUT DO USUÁRIO.
	**/
	this.upCustomizeField = function(nrSequencia){
		var url = pathWeb + '/framework/qgrid/ajax/getCustomizeGrid.php';
		var pars = 'Acao=4&direction=up&idgrid=' + this.idGrid + '&nrsequencia=' + nrSequencia;
		new Ajax.Request(url, {parameters: pars, method: 'get', showDivQ: true});
	},

	this.downCustomizeField = function(nrSequencia){
		var url = pathWeb + '/framework/qgrid/ajax/getCustomizeGrid.php';
		var pars = 'Acao=4&direction=down&idgrid=' + this.idGrid + '&nrsequencia=' + nrSequencia;
		new Ajax.Request(url, {parameters: pars, method: 'get', showDivQ: true});
	},

	/**
	* EXIBE O MENU DE OPÇÕES DE COLUNA DA GRID.
	**/
	this.getColumnOptions = function(dsContextFunction, nmColumn){
		if($(this.contextMenuContainer))
			Element.remove(this.contextMenuContainer);

		var body = document.getElementsByTagName('body')[0];
		var div = document.createElement('div');
		div.id = this.contextMenuContainer;
		div.style.position = 'absolute';

		// CALCULO DE OVERFLOW.
		if((mousePos.x + 220) >= document.body.clientWidth)
			div.style.right = 222;
		else
			div.style.left = mousePos.x;

		div.style.zIndex = layerIndex + 1;
		div.style.top = mousePos.y;
		body.appendChild(div);

		contextMenu = new QMenu('contextMenu');
		contextMenu.createMenu();
		contextMenu.addOption({name: 'optOrder', caption: QLabel[23], image: 'sort.gif', action: dsContextFunction + '(\'0|' + nmColumn + '\');'});
		contextMenu.addOption({name: 'optGroup', caption: QLabel[24], image: 'groupby.gif', action: dsContextFunction + '(\'1|' + nmColumn + '\');'});
		contextMenu.openOptions();
	},

	/**
	* IMPRIME A LISTAGEM.
	**/
	this.printGrid = function(){
		var objBasicForm = null;
		var url = pathWeb + '/framework/qreport/processReport.php';

		// Monta os parâmetros.
		var pars = Form.serialize(this.formName);
		if (typeof(idBasicForm) != 'undefined') {
			objBasicForm = eval(this.name + (this.isObject ? 'Object' : ''));
			if ($('dspesquisa'))
			{
				pars += '&' + objBasicForm.nmSearch + '=' + $F('dspesquisa');
			}
		}
		
		if (typeof(QSearchProfile) != 'undefined' && this.formName == document.forms[0].name)
		{
			pars += SearchProfile.getFormValue() + '&dsextraparameters=' + SearchProfile.getGridsParameters();
		}

    	if (this.isObject) {
			pars += '&GRID=' + this.name + 'Object';
	    	objBasicForm = eval(this.name + 'Object');
    	}

        if (!isEmpty('idtipopesquisa'))
        	pars += '&idtipopesquisa=' + $F('idtipopesquisa');

        pars += '&CLASSNAME=' + this.className + '&GRIDFUNCTION=' + this.gridFunction + '&TITLE=' + this.gridTitle;
		pars += '&FIELDS=' + this.arrayFields.join(',') + '&SECONDLINE=' + this.secondLine + '&GROUP=' + this.arrayGroup.join(',');
		pars += '&idgrid=' + this.idGrid;

		// Tratamento para enviar as configurações para o relatorio
		if (objBasicForm) {
			if (objBasicForm.arrayTotalsGroup)
				pars += "&TOTALSGROUP=" + objBasicForm.arrayTotalsGroup.join(",");
		}

		// MONTA AS COLUNAS DO RELATÓRIO.
		var columnIndex = 0;
		foreach (this.arrayColumns, function(dsColumn) {
			// CAPTURA OS PARÂMETROS DA COLUNA.
			var columnParameters = dsColumn.split(codificarHTML('|'));

			// LABEL DA COLUNA.
			pars += '&arrayColumns[' + columnIndex + '][label]=' + columnParameters[0];

			// LARGURA DA COLUNA.
			if (columnParameters[1])
				pars += '&arrayColumns[' + columnIndex + '][width]=' + columnParameters[1];

			// INCREMENTA O CONTADOR.
			columnIndex++;
		});

		// parametros extra
		pars += '&' + this.extraPars;
		pars = unique(pars.split('&')).join('&');
		
		// EXIBE A TELA DE IMPRESSÃO.
		if (this.isObject) {
			pars += '&GRID=' + this.name + 'Object';
			openWindow({url: url, method: "post", extraparameters: pars});
		} else {
			executarLink(url + '?' + pars, true, true, true);
		}
	},

	/**
	 * Exibe a tela de parametrização de atributos.
	 */
	this.configAttribute = function(nrSequencia, cdTipoAtributo, nmTipoAtributo) {
		var url = pathWeb + '/framework/qgrid/ajax/configAttribute.php';
		var pars = 'grid=' + this.name + '&idgrid=' + this.idGrid + '&nrsequencia=' + nrSequencia + '&cdtipoatributo=' + cdTipoAtributo + '&nmtipoatributo=' + codificarHTML(nmTipoAtributo);
		showQWindow(url, {name: 'divConfigAttribute', title: QLabel[70], parameters: pars, height: 127});
	},

	/**
	 * Processa a parametrização de atributo.
	 */
	this.processAttribute = function() {
		$('btnProcessGridAtributte').disabled = true;

		var url = pathWeb + '/framework/qgrid/ajax/configAttribute.php';
		var pars = 'grid=' + this.name + '&Action=1&idgrid=' + this.idGrid + '&nrsequencia=' + $F('nrsequencia_grid') + '&idtipocalculo=' + $F('idtipocalculo_grid');
		new Ajax.Request(url, {parameters: pars, method: 'get', showDivQ: true});
	}
}