//Abstract equivalence functions return an array with the labels of the other
//sets that have the same prime forms.

function equiv(seta, setb) {
	if (tLevel(seta, setb) != -1) {
		return true;
	}
}


function realNearEquivalence() {
	for (var i = 0; i < master.length; i++) {
		for (var j = 0; j < master.length; j++) {
			master[i][REAL_NEAR_EQUIV][master[i][REAL_NEAR_EQUIV].length] =
				nearEquiv(master[i][MINSPAN], master[j][MINSPAN]);
		}
	}
}
function absNearEquivalence() {
	for (var i = 0; i < master.length; i++) {
		for (var j = 0; j < master.length; j++) {
			master[i][ABS_NEAR_EQUIV][master[i][ABS_NEAR_EQUIV].length] =
				nearEquiv(master[i][PRIME], master[j][PRIME]);
		}
	}
}
function nearEquiv(seta, setb) {
	if ( Math.abs(seta.length - setb.length) > 1)
		return false;
	else {
		if ( Math.abs(seta.length - setb.length) == 1 ) {
			var difference = 0;
			var shorterSet;
			var longerSet;
			if (seta.length < setb.length) {
				shorterSet = seta;
				longerSet = setb;
			}
			else {
				shorterSet = setb;
				longerSet = seta;
			}
			for (var i = 0; i < shorterSet.length; i++) {
				if (longerSet.search(shorterSet.charAt(i)) == -1)
					difference++;
			}
			if (difference > 0)
				return false;
			else
				return true;			
		}
		else {
			var difference = 0;
			for (var i = 0; i < seta.length; i++) {
				if (setb.search(seta.charAt(i)) == -1)
					difference++;
			}
			if (difference > 1)
				return false;
			else
				return true;
			
		}
	}

}