Ext.namespace('CC.b');
Ext.namespace('CC.b.mod');

CC.b.mod.projekt = function() {
	return{
		config : {},
		init : function() {
			CC.f.mod.projekt.init();
		}
	};
} ();


Ext.namespace('CC.f');
Ext.namespace('CC.f.mod');

CC.f.mod.projekt = function() {
	return {
		ajaxUrl : CC_baseURL +'projekt/',
		grids : {},
		formItems : [],
		windows: [],
		tree : {},
		map : {},
		categoryId : null,
		projectId : null,

		init : function() {
			eval('this.' + CC.b.mod.projekt.config.start_event + '();');
		},


		formatDate : function(value, cell, record, row, col, store) {
			var reg = /-/g;
			return Ext.util.Format.date(new Date(value.replace(reg, '/')), 'Y.m.d.');
		},


//*************************************************************************************************
// Main grid
//*************************************************************************************************

		list : function() {
			var module = CC.f.mod.projekt;
			var moduleBack = CC.b.mod.projekt;
			var gridConf = moduleBack.config.grids['main'];

			module.grids['main'] = {
				gridStore : null,
				grid : null
			};

			var store = new Ext.data.Store({
				proxy : new Ext.data.HttpProxy(
					{
						url : this.ajaxUrl + 'extBaselisting', 
						method : 'POST'
					}
				),
				reader : new Ext.data.JsonReader(
					{
						id : 'ID',
						root : 'results',
						totalProperty : 'total'
					},
					gridConf.colsParam
				)
			});

			module.grids.main.gridStore = store;

			gridConf.cmParam[gridConf.cmParam.length - 1].renderer = function(value, cell, record, row, col, store) {
				return '<img src="/images/icons/szerkesztes.png" onclick="CC.f.mod.projekt.displayEditWindow(' + record.id + ')" class="actionIcon" />' +
					'<img src="/images/icons/torles.png" onclick="CC.f.mod.projekt.doDelete(' + record.id + ')" class="actionIcon" />';
			};
			
			var grid = new Ext.grid.EditorGridPanel({
				id : 'projectMainGrid',
				ds : store,
				cm : new Ext.grid.ColumnModel(gridConf.cmParam),
				stripeRows : true,
				trackMouseOver : true,
				loadMask : true,
				width : '100%',
				tbar : [
					{
						text : moduleBack.config.textNewProject,
						handler : module.newProject,
			            cls: 'x-btn-text-icon add'
					},
					{ xtype : 'tbfill' },
					{
						xtype : 'label',
						text : moduleBack.config.textShowDetails + ':',
						style : 'padding:0 2px;'
					},
					{
						xtype : 'combo',
						id : 'DETAILTYPE',
						dataIndex : 'DETAILTYPE',
						displayField : 'text',
						valueField : 'value',
						mode : 'remote',
						triggerAction : 'all',
						store : new Ext.data.JsonStore({
							autoLoad : true,
							url : this.ajaxUrl + 'extComboDetailType',
				  			fields : ['value', 'text'],
				  			root : 'result',
				  			listeners : {
								load : function(store, records, options) {
									Ext.getCmp('DETAILTYPE').setValue(moduleBack.config.defaultDetailType);
								}
							}
						}),
				   		autoLoad : true,
				   		editable : false,
				   		forceSelection : true,
						allowBlank : false,
						width : 100,
						listeners : {
							'select' : function(combo, record, index) {
				                var view = grid.getView();
  				                view.showPreview = index;
  				                view.refresh();
							}
						}
					}
			  	],
				bbar : [
					/*{
						text : ' ',
						handler : function() {
							store.reload( { params : { categoryId : module.categoryId } } );
						},
			            cls: 'x-btn-icon refresh',
					},*/
					/*{
        				xtype : 'pagingtoolbar',
	        			id : 'projektPagingtoolbar',
	                	pageSize : 15,
	                	width : 300,
	                	//border:false,
	                	//bodyBorder: false,
	                	store : store,
	                	displayInfo : true,
	                	//mode: 'slider',
	                	autoLoad : false
            		},
					{
            			xtype : 'tbfill'
            		},*/
            		{
			  	    	xtype : 'orderbar',
			   	    	config : {
			        		gridId : 'projectMainGrid'
			        	}
			        }
			  	],
		        viewConfig: {
		            enableRowBody : true,
		            showPreview : Ext.getCmp('DETAILTYPE') != null ?
		            		Ext.getCmp('DETAILTYPE').getValue() : moduleBack.config.defaultDetailType,
		            getRowClass : function(record, rowIndex, p, store){
		                if(this.showPreview) {
		                	p.body = '<img src="../js/ext-2.2/resources/images/default/grid/wait.gif" style="width:16px;height:16px;border:0;margin:0 0 4px 4px;"/>';
		                	var cv = Ext.getCmp('DETAILTYPE').getValue();
		                	var dt = cv != '' ? cv : moduleBack.config.defaultDetailType;
		        			CC.help.ajax.doAjax({
        						url : CC.f.mod.projekt.ajaxUrl + 'extDetail',
        						params : {
        							projectId : record.data.ID,
        							detailType : dt,
        							rowIndex : rowIndex
        						},
        						success : function(result) {
        							var o = document.getElementById('projectMainGrid');
        							if(!o) return;
        							var t = document.getElementById('projectMainGrid').childNodes[0].childNodes[1].childNodes[0].childNodes[0].childNodes[1].childNodes[0].childNodes[result.rowIndex].childNodes[0];
        							o = t.rows[1].cells[0].childNodes[0];
        							o.innerHTML = result.detailView;
        						}
        					});
		                    return 'x-grid3-row-expanded';
		                }
		                return 'x-grid3-row-collapsed';
		            }
		        },
				selModel : new Ext.grid.RowSelectionModel({ singleSelect : false }),
				listeners : {
		        	'rowdblclick' : this.gridDblClick
		        }
			});
			module.grids.main.grid = grid;

			module.tree = new Ext.TreeBar({
				moduleName : 'projekt',
				gridName : 'main',
				dataIndex : 'categoryTree',
				title : CC.b.mod.projekt.config.treeTitle,
				urlGetData : this.ajaxUrl + 'extCategorytree',
				urlGetTreeFormItem : this.ajaxUrl + 'extCategoryForm',
				urlTreeHandler : this.ajaxUrl + 'extCategoryHandle',
				urlTreeDelete : this.ajaxUrl + 'extCategoryTreeDelete',
				dblClickEvent : function(node) {
					var id = node.attributes['ID'];
					module.categoryId = id;
					document.getElementById('treeBarFilter').innerHTML = '<span class="ellipsis" style="float:right;font-weight:bold;width:84px;text-align:left;" title="' + node.attributes['text'] + '">' + node.attributes['text'] + '</span>Szűrés:';
					store.reload( { params : { categoryId : id } } );
				},
				buttons : {
					create : moduleBack.config.buttonCreateMenu,
					edit : moduleBack.config.buttonEditMenu,
					del : moduleBack.config.buttonDeleteMenu
				},
				changeParent : function() {
					var category = this.obj.tree.selModel.getSelectedNode().attributes[this.obj.gridPkField];
					var prevId = this.obj.previousNode;
					var data = module.grids.main.grid.getSelectionModel().getSelections();
					if(category != null && data.length > 0) {
						var ids = {};
						ids['category'] = category;
						ids['products'] = {};
						for(i in data) {
							if(typeof datas[i] == 'object') ids['products'][i] = { ID : datas[i].id };
						}
						CC.help.ajax.doAjax({
							singleInstance : true,
							url : module.ajaxUrl + 'extAssignData',
							params : { formData : Ext.encode(ids) },
							success : function(result) {
								module.categoryId = prevId;
								store.reload({ params : { categoryId : prevId }});
							}
						});
					}
				},
				textConfirmDelete : moduleBack.config.confirmCategoryDelete
			});
			var view = Ext.getCmp('CCWiew');
			var west = CC.main.layout.west;
			west.add(module.tree);
			west.setWidth(200);
			west.on('resize',
				function() {
					var h = view.getSize().height - 95 //82;
					module.tree.setTBHeight(h);
				}
			);

			var center = CC.main.layout.center;
			center.on('resize',
				function() {
					var grid = module.grids.main.grid;
					var h = view.getSize().height - 94 //81;
					grid.setHeight(h);
					grid.show();
				}
			);
			center.add(grid);			
			center.doLayout();
			center.setHeight(center.getSize().height);

			view.doLayout();
			store.load();
			this.map.items = [];
			this.map.items.news = [];
			this.map.items.olds = [];
			module.map.drawMode = 'point';
		},


		newProject : function() {
			CC.f.mod.projekt.displayEditWindow(-1);
		},


		gridDblClick : function(gridObject, rowIndex){
			var sel = CC.f.mod.projekt.grids.main.grid.selModel.selections;
			var key = typeof sel.keys == 'object' ? sel.keys[0] : sel.keys;
			CC.f.mod.projekt.displayEditWindow(key);
		},


		doDelete : function(id) {
			Ext.MessageBox.confirm('', CC.b.mod.projekt.config.confirmDelete, 
				function(btn) {
					if(btn == 'yes') CC.f.mod.projekt.deleteDb(id, false);
				}
			);
		},


		deleteDb : function(id, confirmed) {
			var module = CC.f.mod.projekt;
			var params = { projectId : id };
			if(confirmed) params['confirmed'] = true;
			CC.help.ajax.doAjax({
				url : module.ajaxUrl + 'extBasedelete',
				params : params,
				success : function(result) {
					if(result.success) {
						module.grids.main.gridStore.reload();
						return;
					}
					if(!result.confirm) {
						Ext.MessageBox.alert(CC.b.enter.config.msgError, result.message);
						return;
					}
					Ext.MessageBox.confirm('', result.message, 
						function(btn) {
							if(btn == 'yes') module.deleteFromDatabase(pDbId, true);
						}
					);
				}
			});
		},


		doPrint : function(id) {
			var module = CC.f.mod.projekt;
			CC.help.ajax.doAjax({
				url : module.ajaxUrl + 'extIsPrintable',
				params : { projectId : id },
				success : function(result) {
					if(result.success) window.open(module.ajaxUrl + 'PrintProjekt/ID/' + id);
					else Ext.MessageBox.alert(CC.b.enter.config.msgError, result.message);
				}
			});
		},


//*************************************************************************************************
// Editform
//*************************************************************************************************

		displayEditWindow : function(id) {
			var module = CC.f.mod.projekt;
			var moduleBack = CC.b.mod.projekt;

			module.projectId = id; 
			CC.help.ajax.doAjax({
				singleInstance : true,
				url : module.ajaxUrl + 'extBaseform',
				params : { projectId : id },
				success : function(result) {
					if(result.success != null && result.success == false && result.message != null) {
						Ext.MessageBox.show(
							{
								title : CC.b.enter.config.msgError,
								msg : result.message,
								buttons : Ext.MessageBox.OK,
								icon : Ext.MessageBox.ERROR
							}
						);
						return;
					}

					moduleBack.config.formData.editForm = result;
					var form = moduleBack.config.formData.editForm;
					CC.help.form.makeItems(form.items, 'projekt', 'edit', moduleBack.config.grids.main);
					CC.help.form.showWindow(form.items, 'projekt', 'edit', 'doSaveRecord', form.window.edit);
					module.windows.edit.dbId = id;
					
					
					

					var map = module.map;
					map.items = [];
					map.items.news = [];
					map.items.olds = [];
					map.drawMode = 'point';
					
					var coords = Ext.getCmp('MAP_COORDINATES2$main').getValue();
					if(coords != '') {
						var c = Ext.decode(coords);
						map.items.olds = c.points;
						map.center = c.center;
						map.zoom = c.zoom;
					} else {
						map.center = { y : 47.49331270499548, x : 19.06402587890625 };
						map.zoom = 13;
					}
					
					Ext.Ajax.request({
						url : module.ajaxUrl + 'extGetMap',
						success : function(response, options) {
							Ext.getCmp('MAP$main').body.update(response.responseText);
							setTimeout(
								function() {
									mapLoad(module);
								}, 500
							); 
						}
					});
				}
			});
		},


		doSaveRecord : function() {
			var module = CC.f.mod.projekt;
			var ok = CC.help.form.validateForm(module.formItems.edit);
			if(ok) {
				var data = CC.help.form.getFormData(module.formItems.edit);
				var id = module.windows.edit.dbId;
				data['default']['ID'] = id;
				CC.help.ajax.doAjax({
					url : module.ajaxUrl + 'extBaseSave',
					params : { formdata : Ext.encode(data) },
					success : function(result) {
						if(!result.success) Ext.MessageBox.alert(CC.b.enter.config.msgError, result.message);
						module.grids.main.gridStore.reload();
					}
				});
			} else {
				Ext.MessageBox.alert(CC.b.enter.config.msgError, CC.b.enter.config.msgCheckField);
			}
			return ok;
		},


//*************************************************************************************************
// Documents
//*************************************************************************************************

		showAdddocumentsForm : function() {
			CC.f.mod.projekt.displayDocumentEditWindow(null);
		},


		documentGridDblClick : function(gridObject, rowIndex){
			var sel = CC.f.mod.projekt.grids.document.grid.selModel.selections;
			var id = typeof sel.keys == 'object' ? sel.keys[0] : sel.keys;
			CC.f.mod.projekt.displayDocumentEditWindow(id);
		},


		displayDocumentEditWindow : function(id) {
			var module = CC.f.mod.projekt;
			CC.help.ajax.doAjax({
				singleInstance : true,
				url: module.ajaxUrl +'extDocumentForm',
				params : { ID : id },
				success: function(result) {
					var moduleBack = CC.b.mod.projekt;
					moduleBack.config.formData.documentEditForm = result;
					var form = moduleBack.config.formData.documentEditForm;
					CC.help.form.makeItems(form.items, 'projekt', 'editDocument', moduleBack.config.grids.documents);
					CC.help.form.showWindow(form.items, 'projekt', 'editDocument', 'documentSave', form.window.editDocument);
					module.windows.editDocument.dbId = id;
				}
			});
		},
	

		documentSave : function() {
			var module = CC.f.mod.projekt;
			var ok = CC.help.form.validateForm(module.formItems.editDocument);
			if(ok) {
				var data = CC.help.form.getFormData(module.formItems.editDocument);
				var id = module.windows.editDocument.dbId;
				data['default']['ID'] = id;
				
				CC.help.ajax.doAjax({
					url : module.ajaxUrl + 'extDocumentSave',
					params : { formdata : Ext.encode(data) },
					success : function(result) {
						if(!result.success) Ext.MessageBox.alert(CC.b.enter.config.msgError, result.message);
						module.grids.documents.gridStore.reload();
					}
				});
			} else {
				Ext.MessageBox.alert(CC.b.enter.config.msgError, CC.b.enter.config.msgCheckField);
			}
			return ok;
		},


		deleteDocument : function(id) {
			Ext.MessageBox.confirm('', CC.b.mod.projekt.config.confirmDeleteDocument, 
				function(btn) {
					if(btn == 'yes') CC.f.mod.projekt.deleteDocumentDb(id);
				}
			);
		},


		deleteDocumentDb : function(id) {
			CC.help.ajax.doAjax({
				url : CC.f.mod.projekt.ajaxUrl +'extDocumentDelete',
				params : { ID : id },
				success : function(result) {
					if(result.success) CC.f.mod.projekt.grids.documents.grid.store.reload();
					else Ext.MessageBox.alert(CC.b.enter.config.msgError, result.message);
				}
			});
		},


//*************************************************************************************************
// Attached files
//*************************************************************************************************

		downloadFile : function(id) {
			var module = CC.f.mod.projekt;
			var record = getGridRecord(module.grids.files.grid.getStore(), 'ID', id);
			window.open(module.ajaxUrl + 'ExtFileDownload?file=' + record.PATH);
		},


		deleteFile : function(id) {
			Ext.MessageBox.confirm('', 
				CC.b.mod.projekt.config.confirmDeleteFile, 
				function(btn) {
					if(btn == 'yes') CC.f.mod.projekt.deleteFileDb(id);
				}
			);
		},


		deleteFileDb : function(id) {
			var params = { ID: id };
			CC.help.ajax.doAjax({
				url : CC.f.mod.projekt.ajaxUrl + 'extFileDelete',
				params : params,
				success : function(result) {
					if(result.success) CC.f.mod.projekt.grids.files.gridStore.reload();
					else Ext.MessageBox.alert(CC.b.enter.config.msgError, result.message);
				}
			});
		},


//*************************************************************************************************
// Map
//*************************************************************************************************
		mapSave : function() {
	        Ext.MessageBox.show({
	            msg: 'Saving your data, please wait...',
	            progressText: 'Saving...',
	            width:300,
	            wait:true,
	            waitConfig: {interval:200},
	            icon:'ext-mb-download', 
	            animEl: 'mb7'
	        });

			if (CC.f.mod.projekt.map.drawMode == 'area')
				CC.f.mod.projekt.endArea();
			
			var items = CC.f.mod.projekt.map.items; 
			var center = G_map.getCenter();
			var datas = {
				points : items.olds.concat(items.news),
				center : {
					x : center.x,
					y : center.y
				},
				zoom : G_map.getZoom()
			};
			CC.help.ajax.doAjax({
				url : CC.f.mod.projekt.ajaxUrl + 'extMapSave',
				params : { formdata : Ext.encode(datas) },
				success: function(result) {
					if(!result.success){ Ext.MessageBox.alert(CC.b.enter.config.msgError, result.message);}
					else{
						 Ext.MessageBox.hide();
						 Ext.MessageBox.show({
					           title: CC.b.mod.projekt.config.mapSaveTitle,
					           msg: CC.b.mod.projekt.config.mapSave,
					           buttons: Ext.MessageBox.OK,
					           animEl: 'mb9',
					           icon: Ext.MessageBox.INFO
					     });
						 
						 Ext.getCmp('MAPSAVE$main').disable();

					}
				}
			});
		},


		mapReset : function() {
			CC.f.mod.projekt.map.items.news = [];
			mapLoad(CC.f.mod.projekt);
		},


		mapRedraw : function() {
			mapLoad(CC.f.mod.projekt);
		},

		startAreaPrompt : function(){
			 Ext.MessageBox.prompt(CC.b.mod.projekt.config.mapStartAreaPromptTitle,CC.b.mod.projekt.config.mapStartAreaPrompt , CC.f.mod.projekt.startArea);
		},
		
		
		startArea : function(btn,txt) {
			if (btn != 'ok')
				return;
		
			Ext.MessageBox.show({
		           title: CC.b.mod.projekt.config.mapStartAreaTitle,
		           msg: CC.b.mod.projekt.config.mapStartArea,
		           buttons: Ext.MessageBox.OK,
		           animEl: 'mb9',
		           icon: Ext.MessageBox.INFO
		    });
			var map = CC.f.mod.projekt.map;
			map.drawMode = 'area';
			map.area = {
				xtype : 'area',
				infoHtml : txt,
				points : []
			};
			Ext.getCmp('MAPSAVE$main').enable();
		},


		endArea : function() {
			var map = CC.f.mod.projekt.map;
			map.items.news.push(map.area);
			var areaTemp = {};
			Ext.apply(areaTemp, map.area);
			map.area = {};
			G_map.addOverlay(createSmartShape(areaTemp));
			map.drawMode = 'point';	
		},
		
		mapClear : function() {
			CC.help.ajax.doAjax({
				url : CC.f.mod.projekt.ajaxUrl + 'extMapClear',
				params : {},
				success: function(result) {
					if(!result.success){ Ext.MessageBox.alert(CC.b.enter.config.msgError, result.message);}
					else{
						CC.f.mod.projekt.map.items.olds= [];
						CC.f.mod.projekt.map.items.news = [];
						mapLoad(CC.f.mod.projekt);					
					}
					
				}
			});
		},
		
		fileGridRefresh : function(){		
			CC.f.mod.projekt.grids.files.gridStore.reload();
		}


	};

} ();


function uploaderStatusChanged( afterFunction ) {
	alert(afterFunction);
	eval(afterFunction);
}

