function [ affinity ] = CalcAffinityByCommonNeighbors_Sparse( data, actual_graph_size, num_missing_nodes, num_attr_nodes, attWeight, addMissingAtt )
%UNTITLED Summary of this function goes here
%   Detailed explanation goes here

%since missing nodes are only connected to one node we will artificially
%connect them to their only neighbor's neighbors, and keep the connection to
%the neighbor itself.
    if nargin > 1
        data = ConnectMissingNodesToNeighborsNeighbors(data, actual_graph_size, num_missing_nodes, num_attr_nodes, addMissingAtt);
    end
    
%     affinity = sparse(size(data,1), size(data,2));
%     
%     num_neighbors = full(sum(data));
%     
%     for i = 1 : size(data,1)
%         %i
%         num_neighbors_i = num_neighbors(i);
%         for j = i : size(data,1)
%             num_neighbors_j = num_neighbors(j);
%             num_common_neighbors = nnz((data(i,:)) & (data(j,:)));
%             if data(i,j) > 0
%                 num_common_neighbors = num_common_neighbors + 2; %add one for each direction of the link
%             end
% %             num_common_neighbors = 0;
% %             if data(i,j) == 1
% %                 num_common_neighbors = 1;
% %             end
% %             for k = 1 : size(data,1)
% %                 if data(i,k) == 1 && data(j,k) == 1
% %                     num_common_neighbors = num_common_neighbors + 1;
% %                 end        
% %             end
%             
%             
%             affinity(i,j) = max(max(num_common_neighbors / num_neighbors_i, num_common_neighbors / num_neighbors_j),eps);
%             
%             affinity(j,i) = affinity(i,j);
%         end
%     end
    

%%%%%%%%%%%%%%%% Problematic??
    % Sigal 5.3.13: normalizeWeight
    % make sure that ratio att/link is same w/1-w
    if attWeight < 1 && attWeight >= 0
        normalizeWeight = attWeight/(1-attWeight);
    else
        normalizeWeight = 1;
    end
    data1 = data;
    if num_attr_nodes > 0
        data1(:, 1:num_attr_nodes) = normalizeWeight * data1(:, 1:num_attr_nodes);
        data1(1:num_attr_nodes, :) = normalizeWeight * data1(1:num_attr_nodes, :);
    end
    
    % sigal - oct 12 - bug fix by ron - include the node itself as its friend
    affinity = data1 * data + data1*2;     % give the #common neighbors per node pair (nxn)
    s_rows = sum(data1) + 1;         % give the #neighbors per node (nx1)?
    %%s_cols = sum(data,2);
    

    
    affinity = NormalizeCommonNeighbors(affinity, s_rows); %new mex function
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%     for i = 1 : size(data)
%         affinity(i,:) = affinity(i,:) ./ s_rows(i);
%         affinity(:,i) = affinity(:,i) ./ s_cols(i);
%     end

%     %sigal 29.10.13 - normolize by diagonal min
%     v = diag(affinity);
%     max_val = min(v);
%     %max_val = max(max(affinity));
% 
%     affinity = affinity ./ max_val;
% 
%     for i = 1 : size(affinity,1)
%         affinity(i,i) = 1;
%     end
%     %sigal 29.10.13 - end 
    
end