/**
 * @author DREDroot
 *
 */
dojo.declare("dojom.classes.GridClass", null, 
{
	searchIds: 1,
	controller: null,
	structure_loadCols: null,
	dnd_grid: null,
	mySearches_grid: null,
	newSearches_grids: [],
	mySearchRows_data: [],
	ready: null,
	log: null,
	
	constructor: function (controller_)
	{
		var obj = this;
		this.log = LOG.addClass('GridClass');
			try{
			this.controller = controller_;
			
			var obj = this;	
			this.ready = function(data_){
				try{
					var cols = [];
					
					for(var i=0;i<data_.length;i++)
					{
						if(data_[i]['name']=='image')
						{
							data_[i]['label'] = '<div style="width:80px;"></div>';
							data_[i]['get'] = function(e){
								if(e.grid.model.data[e.rowIndex][data_[0]['field']] != null && e.grid.model.data[e.rowIndex][data_[0]['field']] !="")
									//return '<table width=100% ><tr><td align="center" style="border:dotted 1px gray;"><img src="'+e.trItem.model.data[e.rowIndex][data_[0]['field']]+'" style="height:50px;border:1px; solid: #ccc; "/></td></tr></table>'		
									return '<div style="border:1px solid #dddddd;vertical-align:middle;height:80px;width:80px;"><img src="'+e.grid.model.data[e.rowIndex][data_[0]['field']]+'" style="width:80px;"/></div>';					
								else 
									//return '<table width=100% ><tr><td align="center" style="border:dotted 1px gray;"><img src="images/availble.jpg" style="height:50px;width:50px;border:1px; solid: #ccc; "/></td>';
									return '<div style="border:1px solid #dddddd;height:80px;width:80px;"><img src="images/availble.jpg" style="width:80px;"/></div>';
							}
							cols.push(data_[i]);
						}
						//else if(data_[i]['name'] == 'description')
						//	data_[i]['label'] = '<div style="min-width:300px;">'+data_[i]['label']+'</div>';
						//else if(data_[i]['name'] == 'name')
						//	data_[i]['label'] = '<div style="min-width:150px;">'+data_[i]['label']+'</div>';						
						else
						{
							data_[i]['style'] = 'display:none;';
							cols.push(data_[i]);
						}
					}
					
					cols.push({"name":'details',"label":"Details",'width':'100%',
						"get":function(e){
							var margin_left =  '-30px';
							if (dojo.isIE)
								margin_left = '0px';
								
							return '<ul style="list-style:none;display:block;margin-left:'+margin_left+';margin-top:0;">'
								+'<li><span style="vertical-align:top;color:#333333;font-weight:bold;">'
								+ e.grid.model.data[e.rowIndex][2]
								+'</span></li><li><span style="vertical-align:middle;color:#333333;font-weight:normal;">'
								+ e.grid.model.data[e.rowIndex][3]
								+'</span></li><li><span style="vertical-align:bottom;color:#aaaaaa;font-weight:normal;font-style:italic;">'
								+ e.grid.model.data[e.rowIndex][4] + ' | '+e.grid.model.data[e.rowIndex][5] + ' ~ <span style="text-align:right;color:#333333;font-weight:bold;">Price: $'+e.grid.model.data[e.rowIndex][6]+'</span>'
								+'</span></li></ul>';
						}
					});
							
															
					obj.structure_loadCols = cols;
				}catch(ex){obj.log.error('ready.'+JSON.stringify(ex))}
			}
			dojo.connect(this,"ready",function(){});
			
			if(!window.rowDataCheck)
				window.rowDataCheck = function(inRowIndex,gridId){obj.rowDataCheck(inRowIndex,gridId)};				
			else obj.log.error('can`t create window.rowDataCheck function');
			if(!window.rowDataOpen)
				window.rowDataOpen  = function(inRowIndex,gridId){obj.rowDataOpen(inRowIndex,gridId)};
			else obj.log.error('can`t create window.rowDataOpen function');			
			if(!window.rowDataShow)
				window.rowDataShow  = function(inRowIndex,gridId){obj.rowDataShow(inRowIndex,gridId)};
			else obj.log.error('can`t create window.rowDataShow function');	
			if(!window.selectAllRows)
				window.selectAllRows  = function(gridId){obj.selectAllRows(gridId)};
			else obj.log.error('can`t create window.selectAllRows function');
			this.controller.loadGridColumns(this.ready);						
		}catch(ex){obj.log.error('constructor.'+JSON.stringify(ex))}
	},

	createNewSearchGrid: function(node,id)
	{
		var obj = this;
		try{							
			if(id == null)
			{
				id = this.searchIds;	
				this.searchIds++;
			}			
			if(!node)
			{
				node = document.createElement('div');
			}
			
			obj.log.debug('createNewSearchGrid. id='+id)	
				
			var grid = new dojom.widgets.Grid({
				id: 'search_grid_' + id
			},node);	
			
			obj.log.debug('createNewSearchGrid. grid='+grid.id);
						
			if(!this.structure_loadCols)
			{
				obj.log.debug('structure_loadCols is null');
				dojo.connect(this,"ready",function(data_){
					try{
						grid.setColumnList(obj.structure_loadCols);	
					}catch(ex){obj.log.error('createNewSearchGrid /onReady/.'+JSON.stringify(ex))}
				});
				
			}
			else 
			{	
				try{
					grid.setColumnList(this.structure_loadCols);					
				}catch(ex){obj.log.error('createMySearchGrid /setColumnList/.'+JSON.stringify(ex))}
			}
			
			dojo.connect(grid,'onCellClick',function(e){
	    		try{
			  		obj.rowDataShow(e.rowIndex, id);
			  	}catch(ex){obj.log.error('createNewSearchGrid /rowDataShow/.'+JSON.stringify(ex))}
		  	});
			
			dojo.connect(grid,'onCellDblClick',function(e){
	    		try{
			  		obj.rowDataOpen(e.rowIndex, id);
			  	}catch(ex){obj.log.error('createNewSearchGrid /onRowClick/.'+JSON.stringify(ex))}
		  	});
	    	
			this.newSearches_grids[id] = grid;	    	
			
			dojo.connect(grid,'destroy',function(){
				try{
					obj.newSearches_grids[id] = null
				}catch(ex){obj.log.error('createMySearchGrid /destroy/.'+JSON.stringify(ex))}
			});
			
		}catch(ex){obj.log.error('createNewSearchGrid.'+JSON.stringify(ex))}
		
		 return grid;
	},	
	
	createMySearchGrid: function(node)
	{
		var obj = this;
		try{
			if(obj.mySearches_grid != null)
				return obj.mySearches_grid;								
			
			var id = -1;		
			if(!node)
				node = document.createElement('div');
			
			var gridId = 'mysearch_grid';
			
			var grid = new dojom.widgets.Grid({
				id: gridId
			},node);
			grid.checkRows = [];
			
			
			obj.log.debug('create MySearchGrid '+grid.id);
											
			if(!this.structure_loadCols)
			{				
				dojo.connect(this,"ready",function(data_){
					var cols = [];
					cols.push({"name":'checkbox',"width":"2","label":"<input type='checkbox' onclick='selectAllRows("+id+")'></input>",
						"get":function(e){
							var check = grid.checkRows[e.rowIndex];
							return '<input type="checkbox" onclick="rowDataCheck('
								+e.rowIndex+','
								+id+')"' 
								+(check == true?  'checked=true': '')+'></input>';
						}
					});
					for(var i=0;i<obj.structure_loadCols.length;i++)
						cols.push(obj.structure_loadCols[i]);
											
					grid.setColumnList(cols);
				});
				
			}
			else 
			{													
				var cols = [];
				cols.push({"name":'checkbox',"width":"2","label":"<input type='checkbox' onclick='selectAllRows("+id+")'></input>",
					"get":function(e){
						var check = grid.checkRows[e.rowIndex];
						return '<input type="checkbox" onclick="rowDataCheck('
							+e.rowIndex+','
							+id+')"' 
							+(check == true ?  'checked=true': '')+'></input>';
					}
				});
				for(var i=0;i<this.structure_loadCols.length;i++)
					cols.push(this.structure_loadCols[i]);
								
				grid.setColumnList(cols);
			}	
		  	
		  	obj.log.debug('create MySearchGrid. Load structure:'+grid._thead);
		  	
		  	if(this.mySearchRows_data == null)
		  		this.mySearchRows_data = [];
		  				
			grid.setData(this.mySearchRows_data);			  
			
			dojo.connect(grid,'onCellClick',function(e){
	    		try{	
			  		if(e.colIndex!=0)
			  			obj.rowDataShow(e.rowIndex, id);
			  	}catch(ex){obj.log.error('createMySearchGrid /rowDataShow/.'+JSON.stringify(ex))}
		  	});
			
			dojo.connect(grid,'onCellDblClick',function(e){
				try{	
			  		if(e.colIndex!=0)
			  			obj.rowDataOpen(e.rowIndex, id);
			  	}catch(ex){obj.log.error('createMySearchGrid /onRowClick/.'+JSON.stringify(ex))}
		  	});	
		  	
		  	dojo.connect(grid.model,'insert',function(data){
		  		obj.controller.addToMySearches([data[0]],function(){});
		  	});		  	 			  	  	
			dojo.connect(grid,'destroy',function(){
				try{
					obj.mySearches_grid = null
				}catch(ex){obj.log.error('createMySearchGrid /destroy/.'+JSON.stringify(ex))}
			});
			
			this.mySearches_grid = grid;
		}catch(ex){obj.log.error('createMySearchGrid.'+JSON.stringify(ex))}
			
		return grid;
	},
		
	
	addToMySearches: function(params)
	{
		var obj = this;
		try{						
			var entityId = params['entityId'];
			var entity = params['entity'];
			var gridId = params['gridId'];
			var inIndex = params['inIndex'];
			var gridRow = [];
			
			if(entity !=null)
			{
				entityId = entity['id'];
				gridRow = this.controller.getGridRowFromEntity(entity);
			}
			else if(entityId != null)
			{
				gridRow = this.controller.getGridRowFromEntity(this.controller.getEntity(entityId));
			}
			else if(gridId != null && inIndex != null)
			{
				var grid = this.newSearches_grids[gridId];
				entityId = grid.model.data[inIndex][0];
				gridRow = grid.model.data[inIndex];
			}		
			
			var isAbsent = true;
			for(var j=0; j<this.mySearches_grid.model.data.length; j++)
			{
				if(entityId==this.mySearches_grid.model.data[j][0])
					isAbsent = false;
			}
			
			obj.log.debug('addToMySearches. Params:'+JSON.stringify(params)+', gridRow: '+ JSON.stringify(gridRow) +', add - '+isAbsent);
			
			if(isAbsent)
				this.mySearches_grid.model.insert(gridRow);
									
			
		}catch(ex){obj.log.error('addToMySearches.'+JSON.stringify(ex))}	
		return isAbsent;
	},
	
	rowDataOpen: function()
	{
	},
	
	rowDataShow: function()
	{
	},
	
	rowDataCheck: function(inIndex,gridId)
	{
		var obj = this;
		try{
			var grid;
			if(gridId ==-1)
				grid = this.mySearches_grid;				
			else
				grid = this.newSearches_grids[gridId];			
			
			if(!grid.checkRows)
				grid.checkRows = [];
									
			if(grid.checkRows[inIndex])
				grid.checkRows[inIndex] = false;
			else 
				grid.checkRows[inIndex] = true;
			
			grid.checkAll = false;
			
			obj.log.debug('rowDataCheck. grid : '+grid.id +', row index: '+inIndex+', check: '+grid.checkRows[inIndex]);
			
		}catch(ex){obj.log.error('rowDataCheck.'+JSON.stringify(ex))}
	},
	
	selectAllRows: function(id)
	{
		var obj = this;
		try{
			var grid;
			if(id ==-1)
				grid = this.mySearches_grid;				
			else
				grid = this.newSearches_grids[id];				
			
			if(grid.checkAll)
				grid.checkAll = false;
			else 
				grid.checkAll = true;
						
			for (var i=0;i<grid.model.data.length;i++)
				grid.checkRows[i] = grid.checkAll;
				
			
			grid.refresh();
			
			obj.log.debug('selectAllRows. grid : '+grid.id);
		}catch(ex){obj.log.error('selectAllRows.'+JSON.stringify(ex))}
	},
			
	removeSelectedRows: function(id)
	{
		var obj = this;
		try{		
			var grid;
			if(id ==-1)
				grid = this.mySearches_grid;				
			else
				grid = this.newSearches_grids[id];	
			
			
			if(!grid.checkRows)
				grid.checkRows = [];
						
			var s = [];
			var rows = [];			
				
			for (var i=0;i<grid.model.data.length;i++)
			{
				if(grid.checkRows[i])
				{
					s.push(i)
					rows.push(grid.model.data[i][0])
				}
								
				grid.checkRows[i] = false;
			}
			
			obj.log.debug('removeSelectedRows. Grid: '+grid.id+', delete rows '+JSON.stringify(s));
			grid.model.remove(s);
			return 	rows;
			
		}catch(ex){obj.log.error('removeSelectedRows.'+JSON.stringify(ex))}
	}
	
	
});

