// global lists

// node numbers for the fields, to be set when lists created
  var pName       = -1;
  var pPicture 	  = -1;
  var pDesc    	  = -1;
  var pSizes   	  = -1;
  var pTagLine 	  = -1;
  var pBuzz    	  = -1;
  var pNotes   	  = -1;
  var pIngred  	  = -1;
  var pDirections = -1;

  var pFile    	  = -1;
  var pWidth	  = -1;
  var pHeight	  = -1;
  var pSmallWidth = -1;
  var pSmallheight= -1;
  var pFloat	  = -1;

  var pBuzzType   = -1;
  var pBuzzWords  = -1;

  var pSize    	  = -1;
  var pCode	  = -1;
  var pQuantity	  = -1;
  var pUnits      = -1;
  var pContainer  = -1;
  var pWholesale  = -1;
  var pRetail	  = -1;

  var pTitle	  = -1;
  var pListtype   = -1;
  var pDirection  = -1;
  var pUse	  = -1;
  var pUsage	  = -1;

  function setPictureData(x) {
    var k;
    for (k=0; k<x.childNodes.length; k++) {
      if (x.childNodes[k].nodeType == 1) {
        var curName = x.childNodes[k].nodeName;
	switch(curName) {
          case('file'):		{ pFile         = k; break; }
	  case('width'):        { pWidth        = k; break; }
          case('height'):	{ pHeight       = k; break; }
	  case('smallwidth'):   { pSmallwidth   = k; break; }
          case('smallheight'):	{ pSmallheight  = k; break; }
          case('float'):	{ pFloat  	= k; break; }
          default: 		{ alert('extra field ' + curName + ' ignored'); break; }
	}
      }
    }
  }    

  function setSizeData(x) {
    var l;
    for (l=0; l<x.childNodes.length; l++) {
      if (x.childNodes[l].nodeType == 1) {
        var curName = x.childNodes[l].nodeName;
	switch(curName) {
	  case('code'):         { pCode         = l; break; }
          case('quantity'):	{ pQuantity     = l; break; }
	  case('units'):        { pUnits        = l; break; }
	  case('container'):    { pContainer    = l; break; }
          case('wholesale'):	{ pWholesale    = l; break; }
          case('retail'):	{ pRetail  	= l; break; }
          default: 		{ alert('extra field ' + curName + ' ignored'); break; }
	}
      }
    }
  }    

  function setDirectionData(x) {
    var l;
    for (l=0; l<x.childNodes.length; l++) {
      if (x.childNodes[l].nodeType == 1) {
        var curName = x.childNodes[l].nodeName;
	switch(curName) {
	  case('use'):   	{ pUse       = l; break; }
          case('usage'):	{ pUsage     = l; break; }
          default: 		{ alert('extra field ' + curName + ' ignored'); break; }
	}
      }
    }
  }    

  function setBuzzData(x) {
    var k;
    for (k=0; k<x.childNodes.length; k++) {
      if (x.childNodes[k].nodeType == 1) {
        var curName = x.childNodes[k].nodeName;
	switch(curName) {
          case('buzztype'):	{ pBuzzType  = k; break; }
	  case('buzzwords'):    { pBuzzWords = k; break; }
	  default: 		{ alert('extra field ' + curName + ' ignored'); break; }
	}
      }
    }
  }    

  function setSizesData(x) {
    var k;
    for (k=0; k<x.childNodes.length; k++) {
      if (x.childNodes[k].nodeType == 1) {
        var curName = x.childNodes[k].nodeName;
	switch(curName) {
          case('size'):		{ pSize = k; setSizeData(x.childNodes[k]); break; }
	  default: 		{ alert('extra field ' + curName + ' ignored'); break; }
	}
      }
    }
  }    

  function setDirectionsData(x) {
    var k;
    for (k=0; k<x.childNodes.length; k++) {
      if (x.childNodes[k].nodeType == 1) {
        var curName = x.childNodes[k].nodeName;
	switch(curName) {
          case('title'):		{ pTitle      = k; break; }
          case('listtype'):		{ pListtype   = k; break; }
          case('direction'):		{ pDirection  = k; setDirectionData(x.childNodes[k]); break; }
          default: 			{ alert('extra field ' + curName + ' ignored'); break; }
	}
      }
    }
  }    

  function loadTable() {
    var x = xmlDoc.getElementsByTagName('product');
    var j;
    for (j=0; j<x[0].childNodes.length; j++) {
      if (x[0].childNodes[j].nodeType == 1) {
        var curName = x[0].childNodes[j].nodeName;
	switch(curName) {
	  case('name'):         { pName    = j; break; }
          case('picture'):	{ pPicture = j;  setPictureData(x[0].childNodes[j]); break; }
          case('description'):  { pDesc    = j; break; }
          case('sizes'):	{ pSizes   = j;  setSizesData(x[0].childNodes[j]); break; }
          case('tagline'):      { pTagline = j; break; }
          case('buzz'):         { pBuzz    = j;  setBuzzData(x[0].childNodes[j]); break; }
          case('notes'):        { pNotes   = j; break; }
          case('ingredients'):  { pIngred  = j; break; }
	  case('directions'):	{ pDirections = j;   setDirectionsData(x[0].childNodes[j]); break; }
          default: 		{ alert('extra field ' + curName + ' ignored'); break; }
	}
      }
    }    
    showTable(x);
  }

  function newLine(curEl) {
    curEl.appendChild(document.createElement('br'));
  }
  
  function addText(xObj, curEl, preText, lineNode, postText, newL) {
    if (xObj.childNodes[lineNode].firstChild) {
       if (newL === true) { newLine(curEl); }
       curEl.appendChild(document.createTextNode(preText + xObj.childNodes[lineNode].firstChild.nodeValue + postText));
    }
  }
  
   function addParagraph(curEl, paraText, paraFormat) {
    if (paraText.length > 0) {
       var curPara = document.createElement('p');
       curPara.appendChild(document.createTextNode(paraText));
       curPara.style.fontStyle = paraFormat;
       curEl.appendChild(curPara);
    }
  }
  
  function addParagraphs(xObj, curEl, lineNode, paraFormat) {
    if (xObj.childNodes[lineNode].firstChild) {
       var paraStart = '&lt;p&gt;';
       var paraEnd   = '&lt;/p&gt;';
       var allText   = xObj.childNodes[lineNode].firstChild.nodeValue + paraStart;
       while (allText.length > 0) {
         var nextPara  = allText.indexOf(paraStart);
	 addParagraph(curEl, allText.substring(0, nextPara), paraFormat);
	 allText = allText.substring(nextPara + paraStart.length);
       }
    }
  }
  
 function addAnchor(xObj, curEl, preText, aType, aSub, lineNode, postText, newL) {
    if (xObj.childNodes[lineNode].firstChild) {
       if (newL === true) { newLine(curEl); }
       curEl.appendChild(document.createTextNode(preText));
       var theAnchor = document.createElement('a');
       theAnchor.setAttribute(aType, aSub + xObj.childNodes[lineNode].firstChild.nodeValue);
       theAnchor.appendChild(document.createTextNode(xObj.childNodes[lineNode].firstChild.nodeValue));
       curEl.appendChild(theAnchor);
       curEl.appendChild(document.createTextNode(postText));
    }
  }
    
  function addImage(xObj, iSource, iWidth, iHeight, iFloat) {
      var curImage = document.createElement('img');
      curImage.setAttribute('src',   iSource.childNodes[pFile].firstChild.nodeValue);
      if (iSource.childNodes[iWidth].firstChild) {
        curImage.style.width = iSource.childNodes[iWidth].firstChild.nodeValue;
      }
      if (iSource.childNodes[iHeight].firstChild) {
        curImage.style.height = iSource.childNodes[iHeight].firstChild.nodeValue;
      }
      if (iWidth == pWidth) {
        if (iSource.childNodes[iFloat].firstChild) {
	  curImage.style.cssFloat = iSource.childNodes[iFloat].firstChild.nodeValue;
  	  curImage.style.styleFloat = iSource.childNodes[iFloat].firstChild.nodeValue;
	}
      }
      xObj.appendChild(curImage);
  }

  function addSize(xObj, curEl) {
    if (xObj.childNodes[pQuantity].firstChild) {
      var curQuantity = document.createTextNode(' ' + xObj.childNodes[pQuantity].firstChild.nodeValue);
      curEl.appendChild(curQuantity);
    }
    if (xObj.childNodes[pUnits].firstChild) {
      var curUnits = document.createTextNode(' ' + xObj.childNodes[pUnits].firstChild.nodeValue);
      curEl.appendChild(curUnits);
    }
    if (xObj.childNodes[pContainer].firstChild) {
      var curContainer = document.createTextNode(' ' + xObj.childNodes[pContainer].firstChild.nodeValue);
      curEl.appendChild(curContainer);
    }
  }

  function addSizes(xObj, curEl) {
    var m;
    var idText = document.createTextNode('Available in: ');
    curEl.appendChild(idText);
    for (m=0; m<xObj.childNodes.length; m++) {
      if (xObj.childNodes[m].nodeType == 1) {
	if (m > 1) { curEl.appendChild(document.createTextNode(', ')); }
        addSize(xObj.childNodes[m], curEl);
      }
    }
  }

  function addBuzzWords(xObj, curEl, listType) {
    if (xObj.childNodes[pBuzzWords].firstChild) {
      var curBuzz = document.createElement(listType);
      curBuzz.appendChild(document.createTextNode(xObj.childNodes[pUse].firstChild.nodeValue));
      curEl.appendChild(curBuzz);
    }
  }

  function addBuzz(xObj, curEl) {
    var n;
    if (xObj.childNodes[pBuzzType].firstChild) {
      var listEl = document.createElement(xObj.childNodes[pBuzzType].firstChild.nodeValue); }
    else {
      var listEl = document.createElement('p');
    }
    if (listEl.tagName === 'p') {
      var listType = 'p'; }
    else {
      var listType = 'li';
    }
    for (n=pBuzzType+1; m<xObj.childNodes.length; n++) {
      if (xObj.childNodes[n].nodeType == 1) {
        addBuzzWords(xObj.childNodes[m], listEl, listType);
      }
    }
    curEl.appendChild(listEl);
  }

  function addDirection(xObj, curEl, listType) {
    if (xObj.childNodes[pUse].firstChild) {
      var curUse = document.createElement(listType);
      curUse.appendChild(document.createTextNode(xObj.childNodes[pUse].firstChild.nodeValue));
      curEl.appendChild(curUse);
    }
    if (xObj.childNodes[pUsage]) {
      var curUsage = document.createElement('dd');
      curUsage.appendChild(document.createTextNode(xObj.childNodes[pUsage].firstChild.nodeValue));
      curEl.appendChild(curUsage);
    }
  }

  function addDirections(xObj, curEl) {
    var m;
    if (xObj.childNodes[pTitle].firstChild) {
      var dirHead = document.createElement('h3');
      var dirText = document.createTextNode(xObj.childNodes[pTitle].firstChild.nodeValue);
      dirHead.appendChild(dirText);
      curEl.appendChild(dirHead);
    }
    if (xObj.childNodes[pListtype].firstChild) {
      var listEl = document.createElement(xObj.childNodes[pListtype].firstChild.nodeValue); }
    else {
      var listEl = document.createElement('ul');
    }
    if (listEl.tagName === 'DL') {
      var listType = 'dt'; }
    else {
      var listType = 'li';
    }
    for (m=pListtype+1; m<xObj.childNodes.length; m++) {
      if (xObj.childNodes[m].nodeType == 1) {
        addDirection(xObj.childNodes[m], listEl, listType);
      }
    }
    curEl.appendChild(listEl);
  }

  function showTable(x) {
    var myTable = document.createElement('table');
    myTable.setAttribute('class', 'full products');
    var curRow;
    var tableColumns = 4;
    var curBody = document.createElement('tbody');
    myTable.appendChild(curBody);
    var cellsInRow = 0;
    for (i=1; i<x.length; i++) {
      if (cellsInRow === 0) {
         curRow = document.createElement('tr');
         curRow.setAttribute('class', 'products');
      }
      var curCell = document.createElement('td');
      cellsInRow++;
      curCell.setAttribute('class', 'product');
      curCell.style.fontWeight = 'bolder';
      var cellBody =  document.createElement('div');
      var imageSpec = x[i].childNodes[pPicture];
      addImage(cellBody, imageSpec, pSmallwidth, pSmallheight, pFloat);
      addText(x[i], cellBody, '', pName, '', true);
      var boxTitle = document.createElement('font');
      var boxText = document.createTextNode(x[i].childNodes[pName].firstChild.nodeValue);
      boxTitle.style.fontWeight = 'bold';
      boxTitle.style.fontSize = 'large';
      boxTitle.appendChild(boxText);
      linkSpan = document.createElement('span');
      addImage(linkSpan, imageSpec, pWidth, pHeight, pFloat);
      linkSpan.style.verticalAlign = 'text-top';
      linkSpan.style.fontWeight = 'normal';
      linkSpan.appendChild(boxTitle);
      addText(x[i], linkSpan, '  ', pDesc, '', false);
      addText(x[i], linkSpan, '', pTagline, '', true);
//      addBuzz(x[i].childNodes[pBuzz], linkSpan);

      var idSpan = document.createElement('p');
      idSpan.style.fontStyle = 'italic';
      var idTitle = document.createElement('font');
      idTitle.style.fontWeight = 'bold';
      var idText = document.createTextNode('Ingredients: ');
      idTitle.appendChild(idText);
      idSpan.appendChild(idTitle);

      addText(x[i], idSpan, '', pIngred, '', false);
      linkSpan.appendChild(idSpan);

      addParagraphs(x[i], linkSpan, pNotes, 'italic');
      addSizes(x[i].childNodes[pSizes], linkSpan);
      newLine(linkSpan);
      if (x[i].childNodes[pDirections]) {
	addDirections(x[i].childNodes[pDirections], linkSpan);
	newLine(linkSpan);
      }
      cellBody.appendChild(linkSpan);

      var theAnchor = document.createElement('a');
      theAnchor.setAttribute('href', '#writeroot');
      theAnchor.appendChild(cellBody);
      curCell.appendChild(theAnchor);
      curRow.appendChild(curCell);
      if (cellsInRow == tableColumns) {
        curBody.appendChild(curRow);
	cellsInRow = 0;
      }
    }
// pad row with blank cells to minimize browser problems
    if (cellsInRow > 0) {
      while (cellsInRow < tableColumns) {
        curCell = document.createElement('td');
        curCell.appendChild(document.createTextNode(' '));
        curRow.appendChild(curCell);
	cellsInRow++;
      }
      curBody.appendChild(curRow);
    }
    document.getElementById('writeroot').appendChild(myTable);
  }


