
function cloneSelector(baseDiv, dummyName) {
  var divFS = document.getElementById(baseDiv);
  var divNr = 0;
  var selObjList = divFS.getElementsByTagName("div");
  for(divNr = 0; divNr < selObjList.length; divNr++) {
    selObj = selObjList[divNr];
    if (selObj.id == ("fieldSelect_"+divNr) ) {
      divNr++;
    }
  }
  if (divNr > 0) { divNr--; }
  var refObj = document.getElementById(baseDiv+selDivNameBase +"0");
  var newObj = document.createElement("DIV");
  divNr++;
  newObj.innerHTML = refObj.innerHTML.replace(new RegExp(dummyName+"0"), dummyName+divNr);
  divFS.appendChild(newObj);

  var newMain = findMain(document.forms[0][dummyName+divNr], dummyName);
  newMain.selectedIndex = 0;
  wChainSelectUpdateChild(newMain,findSub(newMain),dummyName);
  var newSub = findSub(newMain, dummyName);
  newSub.selectedIndex = 0;
  wChainSelectUpdateParent(newSub,newMain,dummyName);

  window.setTimeout("wChainSelectInitialize(findMain(document.forms[0]."+dummyName+divNr+", '"+dummyName+"'), findSub(document.forms[0]."+dummyName+divNr+", '"+dummyName+"'))",10);
}

function findObj(refObj, target, dir) {
  var myForm = document.forms[0];
  var notFound = 1;
  var findNow = -1;
    for(i=0;i<myForm.length && notFound; i++) {
      if (myForm[i] == refObj) {
	// Start searching
	findNow = i;
      }
    }
  if (dir < 0) {
    for(i=findNow;i>=0 && notFound; i--) {
      if (myForm[i].name == target ) {
	notFound = 0;
	return myForm[i];
      }
    }
  } else {
    for(i=findNow;i<myForm.length && notFound; i++) {
      if (myForm[i].name == target ) {
	notFound = 0;
	return myForm[i];
      }
    }
  }
  return null;
}

// ---- Code from http://www.irt.org/script/916.htm
function deleteOption(object,index) {
    object.options[index] = null;
}

function addOption(object,text,value,selected) {
    var defaultSelected = false;
    if (selected == "") { selected = false; }
    // var selected = false;
    var optionName = new Option(text, value, selected, selected)
    object.options[object.length] = optionName;
    object.options[object.length-1].selected = selected;
    if (selected) { object.selectedIndex = object.length - 1; }
    
}

  function caretSort(c,d) {
    if ((0+a) == a) {
	    alert("number");
      // is number
      return eval(a) - eval(b);
    } else {
      minlen = a.length;
      if (b.length < minlin) { minlen = b.length; }
      for(i = 0; i < minlen; i++) {
	      if (a[i] < b[i]) {
		      return -1;
	      } else if (a[i] == b[i]) {
	      } else {
		      return 1;
	      }
      }
      if (b.length > i) {
	      return -1;
      }
      return 0;
    }
  }


function sortOptions(what,selected) {
    var copyOption = new Array();
    for (var i=1;i<what.options.length;i++)
        copyOption[i-1] = new Array(what[i].value,what[i].text);

    // copyOption.sort(function(a,b) { return a < b; });
    // copyOption.sort(function(a,b) { return caretSort(a,b); });
    copyOption.sort(caretSort);

    for (var i=what.options.length-1;i>0;i--)
        deleteOption(what,i);

    var selectThis = false;
    for (var i=0;i<copyOption.length;i++) {
        if (copyOption[i][1] == selected) {
		selectThis = true;
        } else {
		selectThis = false;
	}
        if (i > 0 && copyOption[i][1] != copyOption[i-1][1]) {
		addOption(what,copyOption[i][1],copyOption[i][0],selectThis)
	} else if (i == 0) {
		addOption(what,copyOption[i][1],copyOption[i][0],selectThis)
	}
    }
}

// ---- End of borrowed code. Now modified.

function findMain(refObj, dir) { return findObj(refObj, "df1Cat_id", dir); }
function findSub(refObj)  { return findObj(refObj, "df1Subcat_id"); }

