var nodes;
var tables;
var nodes_ptables;
var nodes_pkeys;
var nodes_negates;
var sigma = 3.5;
var region_ra;
var region_dec;
var region_r;
var doRegion;
//its important that none of the image paths are substrings of each other
var X_CHECK= '../img/x_selected.png';
var X_OPEN= '../img/x.png';
var X_NEGATE= '../img/x_negate.png';
var X_NEGATE_SELECTED= '../img/x_negate_selected.png';
//also removes
function resetall(){
	nodes=null;nodes_ptables=null;nodes_pkeys=null;nodes_negates=null;region_ra=null;region_r=null;doRegion=false;
}

function addXNode(node,ptable,pkey){
	if(nodes == null){
		nodes = new Array(node);
		nodes_ptables = new Array(ptable);
		nodes_pkeys= new Array(pkey);
		nodes_negates = new Array();
	}else{	
		nodes = CopyIntoArray(nodes,node);
		nodes_ptables = CopyIntoArray(nodes_ptables,ptable);
		nodes_pkeys = CopyIntoArray(nodes_pkeys,pkey);
		nodes_negates= CopyIntoArray(nodes_negates,'false');
	}
}

function addTable(node,table){
	tables = tables == null?new Array(node+':'+table):CopyIntoArray(tables,table);
}

function isPicked(node){
	if(nodes == null)return false;
	for(x=0;x<nodes.length;x++){
		if(node == nodes[x])
			return true;
	}
	return false;
}

//put spaces right before \n, or it will break
function getXQuery(){
	var qry = "SELECT ";
	for(x=0;x<nodes.length;x++){
		if(x>0 && x%3 == 0)qry+=" \n ";
		qry+=getAlias(x)+"."+nodes_pkeys[x];
		if(x<nodes.length-1)qry+=", ";
		
	}
	qry+= " \nFROM ";
	for(x=0;x<nodes.length;x++){
		qry+=" "+nodes[x]+":"+nodes_ptables[x]+" "+getAlias(x);
		if(x<nodes.length-1)
			qry+=",";
		qry+=" \n";		
	}
	if(nodes.length > 1 || doRegion == 'true')
		qry+="WHERE ";
	if(nodes.length > 1){
		qry+="XMATCH(";
		for(x=0;x<nodes.length;x++){
			if(nodes_negates[x]=='true')qry+="!";
			qry+=getAlias(x);
			if(x<nodes.length-1)
				qry+=", ";
		}
		qry+=") < "+sigma;
	}
	if(doRegion == 'true' && nodes.length > 1)qry+=" AND";
	if(doRegion == 'true'){
		qry+=" \n Region(\'Circle J2000 ";
		qry+= region_ra+" "+region_dec+" "+region_r+"\')";
	}
	return qry;
}

function getAlias(number){
	switch(number){
		case 0: return "a";
		case 1: return "b";
		case 2: return "c";
		case 3: return "d";
		case 4: return "e";
		case 5: return "f";
		case 6: return "g";
		case 7: return "h";
		case 8: return "i";
		case 9: return "j";
		case 10: return "k";
		case 11: return "l";
		case 12: return "m";
		case 13: return "n";
		case 14: return "o";
		case 15: return "p";
		case 16: return "q";
		case 17: return "r";
		case 18: return "s";
		case 19: return "t";
	}
}
//returns new array
function CopyIntoArray(array, value){
	var tmp = new Array(array.length+1)
	for(x=0;x<array.length;x++)
		tmp[x] = array[x];
	tmp[tmp.length-1] = value;
	return tmp;
}

function RemoveFromLists(node){
	if(nodes.length <= 1){resetall();return;}
	var tmp = new Array(nodes.length-1);
	var nodeIndex = -1;
	for(x=0;x<nodes.length;x++){
		if(nodes[x] == node){nodeIndex = x;continue;}
		if(nodeIndex == -1)
			tmp[x] = nodes[x];
		else
			tmp[x-1] = nodes[x];
	}
	nodes =tmp;
	var tmp2 = new Array(nodes_ptables.length-1);
	var skipped = false;
	var setMe;
	for(x=0;x<nodes_ptables.length;x++){
		if(x==nodeIndex){skipped=true;continue;}
		setMe = skipped?x-1:x;
		tmp2[setMe] = nodes_ptables[x];
	}
	nodes_ptables = tmp2;

	var tmp3 = new Array(nodes_pkeys.length-1);
	skipped = false;
	for(x=0;x<nodes_pkeys.length;x++){
		if(x==nodeIndex){skipped=true;continue;}
		setMe = skipped?x-1:x;
		tmp3[setMe] = nodes_pkeys[x];
	}
	nodes_pkeys = tmp3;
}

function setNegate(node,setMe){
	for(var x=0;x<nodes.length;x++)
		if(nodes[x] == node)
			nodes_negates[x] = setMe;
}

