var sXML;
var objOptRecList = null;
var objOptBox1 = null;
var objOptBox2 = null;
var objOptBox3 = null;
var objPreis = null;
var objWertNameCol = null;

// Aufbereitung des XML-Stream in Objekte
function InitDataObjects(OptBox1, OptBox2, OptBox3, Preis, XML, WertNameCol)
{

  var i1 = 0;
  var nOptWert1;
  var nOptWert2;
  var nOptWert3;
  var sOptWert1;
  var sOptWert2;
  var sOptWert3;
  var Result = "";
  sXML = XML.value;
 // XML.value = "";
  var objDom = new XMLDoc(sXML, xmlError)
  
  objOptBox1 = OptBox1;
  objOptBox2 = OptBox2;
  objOptBox3 = OptBox3;
  objPreis = Preis;
  objWertNameCol = WertNameCol;
  
  objOptRecList = new OptRecList(0);
  //get the root node <Items>
  var objDomTree = objDom.docNode;
  //get all of the elements named "Item"
  
  var Items = objDomTree.getElements("Item");
  //alert("Anzahl " + Items.length);
   
  for (i1 in Items)
  {
  	 if (Items[i1].getElements("Optwert1")[0])
  	 {
  	    sOptWert1 = Items[i1].getElements("Optwert1")[0].getText();
  	    nOptWert1 = Items[i1].getElements("Optwert1")[0].getAttribute("id");
  	 }
  	 else
  	 {
  	    nOptWert1 = 0;
  	    sOptWert1 = "";
     }  	 
     
  	 if (Items[i1].getElements("Optwert2")[0])
  	 {
  	    sOptWert2 = Items[i1].getElements("Optwert2")[0].getText();
  	    nOptWert2 = Items[i1].getElements("Optwert2")[0].getAttribute("id");
  	 }
  	 else
  	 {
  	    nOptWert2 = 0;
  	    sOptWert2 = "";
     }  	 
  	 if (Items[i1].getElements("Optwert3")[0])
  	 {
  	    sOptWert3 = Items[i1].getElements("Optwert3")[0].getText();
  	    nOptWert3 = Items[i1].getElements("Optwert3")[0].getAttribute("id");
  	 } 
  	 else
  	 {
  	    nOptWert3 = 0;
  	    sOptWert3 = "";
     }  	 
  	 objOptRecList.add(new OptRec(nOptWert1, nOptWert2, nOptWert3, sOptWert1, sOptWert2, sOptWert3, Items[i1].getElements("Preis")[0].getText()));
  }
  
  FillComboBox(0);
}

function xmlError(e)
{
//there was an error, show the user
alert(e);
} //end function xmlError


// Class OptRec
function OptRec(nOptWert1, nOptWert2, nOptWert3, sOptWert1, sOptWert2, sOptWert3, nPreis)
{
	this.nOptWert1 = nOptWert1;
	this.nOptWert2 = nOptWert2;
	this.nOptWert3 = nOptWert3;
	this.sOptWert1 = sOptWert1;
	this.sOptWert2 = sOptWert2;
	this.sOptWert3 = sOptWert3;
	this.nPreis = nPreis;
}

// Class OptItem
function OptItem(sOptWert, nOptWert)
{
	this.sOptWert = sOptWert;
	this.nOptWert = nOptWert;
}

// Class OptRecList
function OptRecList(size)
{
	this.size = size;
	this.lst = new Array(size);
	this.add = OptRecList_add;
}

// Method OptRecList.add()
function OptRecList_add(oObj)
{
	this.lst.push(oObj);
	this.size = this.lst.length;
}

// Class OptItemList
function OptItemList(size)
{
	this.size = size;
	this.lst = new Array(size);
	this.add = OptItemList_add;
	this.sort = OptItemList_sort;
}

// Method OptItemList.add()
function OptItemList_add(oObj)
{
	var i1 = 0;
	var nAdd = true;
	
	if (!oObj || !oObj.nOptWert || !oObj.sOptWert) return;
	for (i1 in this.lst)
	{
	  if (this.lst[i1].nOptWert == oObj.nOptWert)
	  {
	    nAdd = false;
	    break;
	  }
	}
	if (nAdd)
	{
	  this.lst.push(oObj);
	  this.size = this.lst.length;
	}
}

// Method OptItemList.sort()
function OptItemList_sort()
{
  if (this.size > 1) this.lst.sort(OptItemComp);
}

// Function OptItemComp
function OptItemComp(obj1, obj2)
{
  var s1 = "";
  var s2 = "";
  
  if ((obj1.sOptWert + "") < (obj2.sOptWert + "")) return -1;
  if ((obj1.sOptWert + "") > (obj2.sOptWert + "")) return 1;
  return 0;
}

function FillComboBox(InitiatorNr)
{
  var i1 = 0;
  var i2 = 0;
  var nCount = 0;
  var nSelId1 = 0;
  var nSelId2 = 0;
  var nSelId3 = 0;
  var nSelRec = 0;
  var objOptItemList1 = null;
  var objOptItemList2 = null;
  var objOptItemList3 = null;

  if (! InitiatorNr) InitiatorNr = 0;
  if (InitiatorNr > 0)
  {
    if (objOptBox1 && objOptBox1.options.length > 0) nSelId1 = objOptBox1.options[objOptBox1.selectedIndex].value;
    if (objOptBox2 && objOptBox2.options.length > 0) nSelId2 = objOptBox2.options[objOptBox2.selectedIndex].value;    
    if (objOptBox3 && objOptBox3.options.length > 0) nSelId3 = objOptBox3.options[objOptBox3.selectedIndex].value;
  }   

  switch(InitiatorNr)
  {
    case 1:
      // Options-Listen fuer Comboboxen initalisieren.
      objOptItemList2 = new OptItemList(0);
      objOptItemList3 = new OptItemList(0);
      // Optionen in Comboboxen loeschen.
      if (objOptBox2) objOptBox2.options.length = 0;
      if (objOptBox3) objOptBox3.options.length = 0;
      // Werte aus Optionsrecords in Options-Listen laden. 
      for (i1 in objOptRecList.lst)
      {
        if (objOptRecList.lst[i1].nOptWert1 == nSelId1)
        {
          if (objOptRecList.lst[i1].nOptWert2 > 0)
            objOptItemList2.add(new OptItem(objOptRecList.lst[i1].sOptWert2, objOptRecList.lst[i1].nOptWert2));
          if (objOptRecList.lst[i1].nOptWert3 > 0)
            objOptItemList3.add(new OptItem(objOptRecList.lst[i1].sOptWert3, objOptRecList.lst[i1].nOptWert3));
        }
      }
      // Nach Wertenamen sortieren...
      objOptItemList2.sort();
      objOptItemList3.sort();
      // ... und in Comboboxen schreiben.
      for (i1 in objOptItemList2.lst)
      {
        nCount = objOptBox2.options.length;
        objOptBox2.options[nCount] = new Option(objOptItemList2.lst[i1].sOptWert, objOptItemList2.lst[i1].nOptWert);
        objOptBox2.options.length = nCount + 1;
        if (objOptItemList2.lst[i1].nOptWert == nSelId2) objOptBox2.selectedIndex = nCount;
      }
      for (i1 in objOptItemList3.lst)
      {
        nCount = objOptBox3.options.length;
        objOptBox3.options[nCount] = new Option(objOptItemList3.lst[i1].sOptWert, objOptItemList3.lst[i1].nOptWert);
        objOptBox3.options.length = nCount + 1;
        if (objOptItemList3.lst[i1].nOptWert == nSelId3) objOptBox3.selectedIndex = nCount;
      }
      break;
    case 2:
      // Options-Listen fuer Comboboxen initalisieren.
      objOptItemList1 = new OptItemList(0);
      objOptItemList3 = new OptItemList(0);
      // Optionen in Comboboxen loeschen.
      if (objOptBox1) objOptBox1.options.length = 0;
      if (objOptBox3) objOptBox3.options.length = 0;
      // Werte aus Optionsrecords in Options-Listen laden. 
      for (i1 in objOptRecList.lst)
      {
        if (objOptRecList.lst[i1].nOptWert2 == nSelId2)
        {
          if (objOptRecList.lst[i1].nOptWert1 > 0)
            objOptItemList1.add(new OptItem(objOptRecList.lst[i1].sOptWert1, objOptRecList.lst[i1].nOptWert1));
          if (objOptRecList.lst[i1].nOptWert3 > 0)
            objOptItemList3.add(new OptItem(objOptRecList.lst[i1].sOptWert3, objOptRecList.lst[i1].nOptWert3));
        }
      }
      // Nach Wertenamen sortieren...
      objOptItemList1.sort();
      objOptItemList3.sort();
      // ... und in Comboboxen schreiben.
      for (i1 in objOptItemList1.lst)
      {
        nCount = objOptBox1.options.length;
        objOptBox1.options[nCount] = new Option(objOptItemList1.lst[i1].sOptWert, objOptItemList1.lst[i1].nOptWert);
        objOptBox1.options.length = nCount + 1;
        if (objOptItemList1.lst[i1].nOptWert == nSelId1) objOptBox1.selectedIndex = nCount;
      }
      for (i1 in objOptItemList3.lst)
      {
        nCount = objOptBox3.options.length;
        objOptBox3.options[nCount] = new Option(objOptItemList3.lst[i1].sOptWert, objOptItemList3.lst[i1].nOptWert);
        objOptBox3.options.length = nCount + 1;
        if (objOptItemList3.lst[i1].nOptWert == nSelId3) objOptBox3.selectedIndex = nCount;
      }
      break;
    case 3:
      // Options-Listen fuer Comboboxen initalisieren.
      objOptItemList1 = new OptItemList(0);
      objOptItemList2 = new OptItemList(0);
      // Optionen in Comboboxen loeschen.
      if (objOptBox1) objOptBox1.options.length = 0;
      if (objOptBox2) objOptBox2.options.length = 0;
      // Werte aus Optionsrecords in Options-Listen laden. 
      for (i1 in objOptRecList.lst)
      {
        if (objOptRecList.lst[i1].nOptWert3 == nSelId3)
        {
          if (objOptRecList.lst[i1].nOptWert1 > 0)
            objOptItemList1.add(new OptItem(objOptRecList.lst[i1].sOptWert1, objOptRecList.lst[i1].nOptWert1));
          if (objOptRecList.lst[i1].nOptWert2 > 0)
            objOptItemList2.add(new OptItem(objOptRecList.lst[i1].sOptWert2, objOptRecList.lst[i1].nOptWert2));
        }
      }
      // Nach Wertenamen sortieren...
      objOptItemList1.sort();
      objOptItemList2.sort();
      // ... und in Comboboxen schreiben.
      for (i1 in objOptItemList1.lst)
      {
        nCount = objOptBox1.options.length;
        objOptBox1.options[nCount] = new Option(objOptItemList1.lst[i1].sOptWert, objOptItemList1.lst[i1].nOptWert);
        objOptBox1.options.length = nCount + 1;
        if (objOptItemList1.lst[i1].nOptWert == nSelId1) objOptBox1.selectedIndex = nCount;
      }
      for (i1 in objOptItemList2.lst)
      {
        nCount = objOptBox2.options.length;
        objOptBox2.options[nCount] = new Option(objOptItemList2.lst[i1].sOptWert, objOptItemList2.lst[i1].nOptWert);
        objOptBox2.options.length = nCount + 1;
        if (objOptItemList2.lst[i1].nOptWert == nSelId2) objOptBox2.selectedIndex = nCount;
      }
      break;
    default:
      // Options-Listen fuer Comboboxen initalisieren.
      objOptItemList1 = new OptItemList(0);
      objOptItemList2 = new OptItemList(0);
      objOptItemList3 = new OptItemList(0);
      // Optionen in Comboboxen loeschen.
      if (objOptBox1) objOptBox1.options.length = 0;
      if (objOptBox2) objOptBox2.options.length = 0;
      if (objOptBox3) objOptBox3.options.length = 0;
      // Werte aus Optionsrecords in Options-Listen laden. 
      for (i1 in objOptRecList.lst)
      {
        if (objOptRecList.lst[i1].nOptWert1 > 0)
          objOptItemList1.add(new OptItem(objOptRecList.lst[i1].sOptWert1, objOptRecList.lst[i1].nOptWert1));
        if (objOptRecList.lst[i1].nOptWert2 > 0)
          objOptItemList2.add(new OptItem(objOptRecList.lst[i1].sOptWert2, objOptRecList.lst[i1].nOptWert2));
        if (objOptRecList.lst[i1].nOptWert3 > 0)
          objOptItemList3.add(new OptItem(objOptRecList.lst[i1].sOptWert3, objOptRecList.lst[i1].nOptWert3));
      }
      // Nach Wertenamen sortieren...
      objOptItemList1.sort();
      objOptItemList2.sort();
      objOptItemList3.sort();
      // ... und in Comboboxen schreiben.
      for (i1 in objOptItemList1.lst)
      {
        nCount = objOptBox1.options.length;
        objOptBox1.options[nCount] = new Option(objOptItemList1.lst[i1].sOptWert, objOptItemList1.lst[i1].nOptWert);
        objOptBox1.options.length = nCount + 1;
      }
      if (objOptBox1 && objOptBox1.length > 0)
      {
        objOptBox1.selectedIndex = 0;
        for (nSelRec = 0; nSelRec < objOptItemList1.size; nSelRec++)
        {
          if (objOptItemList1.lst[0].nOptWert == objOptRecList.lst[nSelRec].nOptWert1) break;
        }
      }
      for (i1 in objOptItemList2.lst)
      {
        nCount = objOptBox2.options.length;
        objOptBox2.options[nCount] = new Option(objOptItemList2.lst[i1].sOptWert, objOptItemList2.lst[i1].nOptWert);
        objOptBox2.options.length = nCount + 1;
        if (objOptItemList2.lst[i1].nOptWert == objOptRecList.lst[nSelRec].nOptWert3) objOptBox2.selectedIndex = nCount;
      }
      for (i1 in objOptItemList3.lst)
      {
        nCount = objOptBox3.options.length;
        objOptBox3.options[nCount] = new Option(objOptItemList3.lst[i1].sOptWert, objOptItemList3.lst[i1].nOptWert);
        objOptBox3.options.length = nCount + 1;
        if (objOptItemList3.lst[i1].nOptWert == objOptRecList.lst[nSelRec].nOptWert3) objOptBox3.selectedIndex = nCount;
      }
      break;
  } // switch
  objWertNameCol.value = "";
  if (objOptBox1 && objOptBox1.options.length > 0)
  {
    nSelId1 = objOptBox1.options[objOptBox1.selectedIndex].value;
    objWertNameCol.value += objOptBox1.options[objOptBox1.selectedIndex].text + " ";
  }
  else nSelId1 = 0;   
  if (objOptBox2 && objOptBox2.options.length > 0)
  {
    nSelId2 = objOptBox2.options[objOptBox2.selectedIndex].value;    
    objWertNameCol.value += objOptBox2.options[objOptBox2.selectedIndex].text + " ";
  }
  else nSelId2 = 0;   
  if (objOptBox3 && objOptBox3.options.length > 0)
  {
    nSelId3 = objOptBox3.options[objOptBox3.selectedIndex].value;
    objWertNameCol.value += objOptBox3.options[objOptBox3.selectedIndex].text;
  }
  else nSelId3 = 0;   
  objPreis.innerHTML = "ARTIKEL NICHT VERFUEGBAR";

  for (i1 in objOptRecList.lst)
  {
    if (objOptRecList.lst[i1].nOptWert1 == nSelId1 && objOptRecList.lst[i1].nOptWert2 == nSelId2 && objOptRecList.lst[i1].nOptWert3 == nSelId3)
    {
      objPreis.innerHTML = objOptRecList.lst[i1].nPreis;
      break;
    }
  }  
}
