Array.prototype.intersection = function(arr2)  {
  var returnArray = new Array(); var y = 0;
  for(var x=0;x<this.length;x++)  {
    if(arr2.contains(this[x]))  {
      returnArray[y++] = this[x];
    }}  return y==0?null:returnArray;
}

Array.prototype.contains = function(r)  {
  for(var x=0;x<this.length;x++)  {
    if(this[x]==r)  {
      return true;
    }}  return false;
}

Array.prototype.binarycontains = function(r) {
	var left=0;
	var right=this.length-1;
	var middle;
	while(right >= left) {
		middle = (left + right)/2;
		if(r == this[middle]) return true;
		else if(r < this[middle]) right = middle -1;
		else left = middle + 1;
	}
	return false;
}


function getLeftChosen(num) {
	var leftchosen = new Array;
	for(var i=0;i<num;i++) {
		if(chosen[i]) {
			leftchosen[leftchosen.length] = chosen[i];
		}
	}
	return leftchosen;
}

function populateMe(num) {
	var cid = channels[num];
	var leftchosen = getLeftChosen(num);
	var mypages;
	if(pages[cid]) {
		mypages = pages[cid];
	} else {
		mypages = new Array;
	}
	if(leftchosen.length > 0) {
		for(var i=0;i<leftchosen.length;i++) {
			if(mypages && relations[leftchosen[i]]) {
				mypages = mypages.intersection(relations[leftchosen[i]]);
			} else {
				mypages = [];
			}
		}	
	}            	
	var thischosen;
	if(chosen) {
		thischosen = chosen[num];
	}
	sel = document.as.elements["c" + cid];
    sel.options.length = 1;
    setVal = false;
    if(mypages && mypages.length>0) {
		for(var i=0;i<mypages.length;i++) {
			sel.options.length = sel.options.length + 1;
	        sel.options[i+1].value = mypages[i];
	        sel.options[i+1].text = allnames[""+mypages[i]];
	        if(mypages[i] == thischosen) { //behŒll val, om val finns i nya listan
	        	sel.options[i+1].selected = true;
	        	//sel.selectedIndex = i+1;
	        	setVal = true;
	        }
        }
        if(!setVal) {
        	setChosen(num,null);
        }
	}
}

function redrawDDs(start) {
	for(var i=start;i<channels.length;i++) {
		populateMe(i);
	}
}

function initFiltered() {
	redrawDDs(0);
}

function resetDDs() {
	for(var i=0;i<channels.length;i++) {
		setChosen(i,null);
		populateMe(i);
	}
	els = document.as.elements;
	for(var i=0;i<els.length;i++) {
		if(els[i].type == "text") {
			els[i].value = "";
		}
	}
}

function selVal(sel) {
	return sel.options[sel.selectedIndex].value;
}
	
function selChange(sel,num) {
	setChosen(num,selVal(sel));
	redrawDDs(num);
}

function joinChosen() {
	var txt = "";	
	for(var i=0;i<chosen.length;i++) {
		if(chosen[i]) {
			txt = txt + chosen[i];
		}
		if(i != chosen.length-1) {
			txt = txt + "|";
		}
	}
	return txt;
}

function setChosen(num,val) {
	chosen[num] = val;
	document.as.elements[form_name].value = joinChosen();
}