app.controller('tabellaFunzioniCtrl',
function($scope,$http,$cookies,$window, $location,$timeout, $mdDialog, $q, $routeParams, $mdBottomSheet, $mdMedia, FunzioniOrdinanti, utilsSvc) {

	var vm=this;
	
	vm.maxItems = 0;
	vm.itemsPerPage = 100;
	vm.selectedIndex=-1;
	vm.records=[];
	vm.filter={
		filterText: '',
		orderField:null
	}
	
	
	vm.setSelected=function(idx) {
		vm.selectedIndex = idx;
	}
	
	vm.columnWidths=[
			110,  //0
			150,  //1
			110, //2
			120, //3FunzioneOrdinanFunzioneOrdinantete
			120,  //4
			120, //5
			140, //6
			180 //7
		];
	
	
	vm.largeScreen =function(){
		return utilsSvc.largeScreen();
	}

	
	vm.getListHeight = function() {
		containerHeight = ($window.innerHeight - $('#container').position().top - $('#view').position().top);
		  return {'height':  containerHeight + 'px'};
	};
	vm.getGridItemHeight = function() {
		return utilsSvc.getGridWithButtonHeight();
	}
	$window.addEventListener('resize', onResize);
	function onResize() {
	  $scope.$digest();
	}
	$scope.$on('$destroy', function() {
	  $window.removeEventListener('resize', onResize);
	});
	
	vm.getColumnWidth = //	              }
		//        this.lastStartIdx = index;
		function(idx) {
		return {
				'width': vm.columnWidths[idx] + 'px', 
				'min-width':vm.columnWidths[idx] + 'px',
				'margin-left':'8px',
				'margin-right':'8px'
		};
	}
	
	vm.getMaxListWidth = function() {
		var res=0;
		for (var i=0;i<vm.columnWidths.length;i++)
			res += vm.columnWidths[i]+6+8+10;
		
		if ($('#header').width()>0)
			$('#container').css('width',($('#header').width()+96)+'px');
		else
			$('#container').css('width','100%');
		return {'width': res+ 'px!important;'}
	}
	
	vm.setOrderField = function(field) {
		if (vm.filter.orderField!=field)
			vm.filter.orderField = field;
		else
			vm.filter.orderField = "-" +field;
		
		vm.getTblFunzioni();
	}

	vm.cancellaFunzione=function(idx,event) {
		event.preventDefault();
		event.stopPropagation();		
	
		utilsSvc.showConfirm("Conferma", "Confermi la cancellazione dell'elemento selezionato?")
			.then(function(res){
				FunzioniOrdinanti.Delete({id:vm.records[idx].id})
					.$promise.then(function(data){
						vm.getTblFunzioni();
					})
			})
	}
	
	vm.nuovaFunzione=function(event) {
		FunzioniOrdinanti.New()
			.$promise.then(function(data){
				vm.records.push(data);
				vm.editFunzione(vm.records.length-1,event);
			})
	}
	
	vm.editFunzione = function(idx, ev) {
		$mdDialog.show({
    		targetEvent:ev,
            templateUrl: 'templates/funzioneOrdinante.html',
            controller: 'funzioneOrdinanteCtrl',
            locals: {funzione: vm.records[idx]},
            multiple: true
        }).then(function(res){
        	FunzioniOrdinanti.save(res).$promise.then(
        		function(res){
        			if (res==null ||res.value==null || res.value == '') {
        				vm.getTblFunzioni();
        				utilsSvc.showMessage('Salvataggio modifiche effettuato');
        			} else {
        				utilsSvc.show(res.value);
        			}
        		},
        		function(err){
        			utilsSvc.handleHttpError(err);
        		}
			);
        });	

	}
	
	vm.infiniteItems = {
	          numLoaded_: 0,
	          toLoad_: 0,
	          loading_:false,
	          lastStartIdx:-1,
	          listPromise:null,
	          canceler: $q.defer(),
	          // Required.
	          getItemAtIndex: function(index) {
	        	  if (vm.maxItems==0 || index>vm.maxItems)
	        		  return null;
	        	  if (!vm.infiniteItems.loading_)
	        		  if (index > vm.records.length) {
	        			  this.fetchMoreItems_(index);
	        			  return null;
	        		  }
	            return vm.records [index];
	          },
	          // Required.
	          // For infinite scroll behavior, we always return a slightly
				// higher
	          // number than the previously loaded items.
	          getLength: function() {
        		  return vm.maxItems;
	        	  
	          },
	          fetchMoreItems_: function(index) {
	            if (this.toLoad_ < index) {
	              this.toLoad_ += vm.itemsPerPage;
	              utilsSvc.showWaitMessage('Ricerca in corso...');
	              
	              vm.infiniteItems.loading_ = true;
	              
        		  this.listPromise = FunzioniOrdinanti.ListItems({start: vm.records.length,size:Math.max(vm.records.length+index,vm.itemsPerPage),filter: vm.filter.filterText, orderBy:vm.filter.orderField}).$promise;
		              
	              var mod=this;
		              this.listPromise.then(
			              			function(data){
			              				vm.infiniteItems.loading_ = false;
			              				vm.infiniteItems.toLoad_=0;
			              				utilsSvc.cancelWaitMessage();
			              				vm.records = vm.records.concat(data);
			              				mod.numLoaded_ = vm.records.length;
			              				mod.lastStartIdx = vm.records.length;
			              			},
			              			function(error) {
			              				vm.infiniteItems.loading_ = false;
			              				vm.infiniteItems.toLoad_=0;
			              				utilsSvc.handleHttpError(error);
			              			}
			              	)
            	}
          }
	}	

	

	vm.getTblFunzioni = function(){
		FunzioniOrdinanti.Count({filter:vm.filter.filterText}).$promise.then(
					function(data){
						vm.records=[];
						vm.maxItems = data.value;
						vm.infiniteItems.numLoaded_ = 0;
						vm.infiniteItems.toLoad_ = 0;
					
					}
				);
	}
	
	
	vm.init = function() {
		vm.getTblFunzioni();
	}	
	
	
	vm.init();	
})

.controller("funzioneOrdinanteCtrl",function($scope, $mdDialog,locals){
	
	$scope.funzione = angular.copy(locals.funzione);
	
	if ($scope.funzione.funzioneOrdinante!=null)
		$scope.funzione.funzioneOrdinante = $scope.funzione.funzioneOrdinante.trim();
	if ($scope.funzione.descrizione!=null)
		$scope.funzione.descrizione = $scope.funzione.descrizione.trim();
	
	$scope.confirmDialog = function(){
		$mdDialog.hide($scope.funzione);
	}
	
	$scope.cancelDialog=function(){
		$mdDialog.cancel();
	}
	
})

;