function [oldvariable,sqrList] = expandforindex(sqrList,candidates,nonconvindex);
%EXPANDFORINDEX Internal function for organizing nonlinear variables

% Author Johan Löfberg
% $Id: expandforindex.m,v 1.4 2004/08/06 09:02:52 johanl Exp $


% Expand the incoming variables

if 1
z = sqrList(:,1);

x1_list = find(z==candidates(2));
if candidates(2)==candidates(1)
    x2_list = x1_list;
else
    x2_list = find(z==candidates(1));
end

temp = [];
if isempty(x1_list)
    temp = candidates(2);
else
    temp = sqrList(x1_list,2:end);
end
if isempty(x2_list)
    temp = [temp candidates(1)];
else
    temp = [temp sqrList(x2_list,2:end)];
end
temp = sort(temp(find(any(temp,1))));

oldsqrList = sqrList;
if length(temp)>size(sqrList,2)-1
    % This one cannot already exist
    index = [];
    
    %sqrList = [sqrList zeros(size(sqrList,1),1+size(sqrList,2)-length(temp));nonconvindex temp(end:-1:1)];   
    sqrList = [sqrList zeros(size(sqrList,1),1+length(temp)-size(sqrList,2));nonconvindex temp(end:-1:1)];   
else
%    sqrList = [sqrList;nonconvindex temp(end:-1:1) zeros(1,size(sqrList,2)-length(temp)-1)];
%    searchfor = sqrList(end,2:end);

    searchfor = [temp(end:-1:1) zeros(1,size(sqrList,2)-length(temp)-1)];
    searchin = sqrList(:,2:end);
    
    % Simple Hash
    key = sum(searchfor);
    tbl = sum(searchin,2);
    
    possible = find(tbl==key);
    
    index = findrows(searchin(possible,:),searchfor);
    if isempty(index)
         sqrList = [sqrList;nonconvindex temp(end:-1:1) zeros(1,size(sqrList,2)-length(temp)-1)];
    else
         index = possible(index);
    end
end

%searchfor = sqrList(end,2:end);
%index = findrows(sqrList(1:end-1,2:end),searchfor);

if length(index)>1
    index
end

if ~isempty(index)
    oldvariable = sqrList(index,1);
    sqrList = oldsqrList;
else
    oldvariable = [];
end



else


% Expand the list to begin with
if isempty(sqrList)
    sqrList = [nonconvindex candidates];
else
    sqrList = [sqrList; nonconvindex candidates(2) candidates(1) zeros(1,size(sqrList,2)-3)];        
end
bottom = size(sqrList,1); 

%%FIXz = sqrList(1:bottom,1);
z = sqrList(:,1);

x1_list = find(z==candidates(2));
if candidates(2)==candidates(1)
    x2_list = x1_list;
else
    x2_list = find(z==candidates(1));
end

temp = [];
if isempty(x1_list)
    temp = sqrList(bottom,2);
else
    temp = sqrList(x1_list,2:end);
end
if isempty(x2_list)
    temp = [temp sqrList(bottom,3)];
else
    temp = [temp sqrList(x2_list,2:end)];
end
temp = sort(temp(find(any(temp,1))));
sqrList(bottom,2:2+length(temp)-1)=temp(end:-1:1);%fliplr(sort(temp));

bottom = bottom+1;

searchfor = sqrList(end,2:end);
index = findrows(sqrList(1:end-1,2:end),searchfor);

if ~isempty(index)
    oldvariable = sqrList(index,1);
    sqrList = sqrList(1:end-1,:);
else
    oldvariable = [];
end

end
