function MozillaDSO_CareerPg(xmldatasrc1,xmlid1,xmldatasrc2,xmlid2)
{
  objXMLDI = new collection();                   //  XML data island collection
  objBound = new collection();                   //  Bound XHTML object collection

                                                 //  Local variables
  var objDatafld;                                //  Table datafld collection
  var objRow;                                    //  Table row
  var reWork = new RegExp('internet explorer','gi');
  var arrKeys = new Array();
  var intKey = 0;                                //  objBound collection key
  var intRows;                                   //  Row count

  if(!reWork.test(navigator.appName)) {
                                                 //  Locate data islands

	var xmlDocument1 = document.implementation.createDocument('',xmlid1, null);
	xmlDocument1.async = false;
	var loaded = xmlDocument1.load(xmldatasrc1);


	if(!loaded)
	{
		return;
	}

	  for(var i=0;i < xmlDocument1.getElementsByTagName(xmlid1).length;i++)
	  {
	      objXMLDI.add('#' + xmlid1,xmlDocument1.getElementsByTagName(xmlid1).item(i));
	  }



	/*var xmlDocument2 = document.implementation.createDocument('',xmlid2, null);
	xmlDocument2.async = false;
	loaded = xmlDocument2.load(xmldatasrc2);


	if(!loaded)
	{
		return;
	}

	  for(var i=0;i < xmlDocument2.getElementsByTagName(xmlid2).length;i++)
	  {
	      objXMLDI.add('#' + xmlid2,xmlDocument2.getElementsByTagName(xmlid2).item(i));
	  }
*/

   /* for(var i=0;i < document.getElementsByTagName('xml').length;i++)
      objXMLDI.add('#' + document.getElementsByTagName('xml').item(i).getAttribute('id'),document.getElementsByTagName('xml').item(i));
*/

                                                 //  Locate bound nodes
    for(var i=0;i < document.getElementsByTagName('table').length;i++)
      if(document.getElementsByTagName('table').item(i).getAttribute('datasrc') != null) {
	var datsrc = document.getElementsByTagName('table').item(i).getAttribute('datasrc');
	var check = '#'+xmlid1;
	if(datsrc!=check)
		continue;
        objBound.add(intKey.toString(),new boundXML());

        objBound.item(intKey.toString()).datasrc = document.getElementsByTagName('table').item(i).getAttribute('datasrc');
        objBound.item(intKey.toString()).node = document.getElementsByTagName('table').item(i);
        objBound.item(intKey.toString()).nodeName = document.getElementsByTagName('table').item(i).nodeName;

        objDatafld = new collection();           //  Reset collection;
        intRows = 0;                             //  Reset row count

                                                 //  Remove all rows
       if(objBound.item(intKey.toString()).node.getElementsByTagName('tr').length != 0) {
var firstrow;
        for(var kj=0;kj < objBound.item(intKey.toString()).node.getElementsByTagName('tr').length;kj++)
{
objRow = objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(kj);
/*            objRow = objBound.item(intKey.toString()).node.lastChild.removeChild(objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(kj));*/
/*            objRow = objBound.item(intKey.toString()).node.lastChild.removeChild(objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(j));

            for(var j=0;j < objBound.item(intKey.toString()).node.getElementsByTagName('tr').length;j++)
              objRow = objBound.item(intKey.toString()).node.lastChild.removeChild(objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(j));
*/
//        }

                                                 //  Determine bound nodes
        for(var j=0;j < objRow.getElementsByTagName('input').length;j++)
          if(!objDatafld.exists(objRow.getElementsByTagName('input').item(j).getAttribute('datafld')))
            objDatafld.item(objRow.getElementsByTagName('input').item(j).getAttribute('datafld'),null);

        for(var j=0;j < objRow.getElementsByTagName('div').length;j++)
          if(!objDatafld.exists(objRow.getElementsByTagName('div').item(j).getAttribute('datafld')))
            objDatafld.item(objRow.getElementsByTagName('div').item(j).getAttribute('datafld'),null);

        for(var j=0;j < objRow.getElementsByTagName('span').length;j++)
          if(!objDatafld.exists(objRow.getElementsByTagName('span').item(j).getAttribute('datafld')))
{
//alert(objRow.getElementsByTagName('span').item(j).getAttribute('datafld'));
            objDatafld.item(objRow.getElementsByTagName('span').item(j).getAttribute('datafld'),null);
}

}

            for(var j=0;j < objBound.item(intKey.toString()).node.getElementsByTagName('tr').length;j++)
              objBound.item(intKey.toString()).node.lastChild.removeChild(objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(j));


}

        arrKeys = objDatafld.keys();

                                                 //  Determine row count
        for(var j=0;j < arrKeys.length;j++)
{
          if(intRows < objXMLDI.item(objBound.item(intKey.toString()).datasrc).getElementsByTagName(arrKeys[0]).length)
            intRows = objXMLDI.item(objBound.item(intKey.toString()).datasrc).getElementsByTagName(arrKeys[j]).length;
}
        for(var j=0;j < intRows;j++)
          objBound.item(intKey.toString()).node.lastChild.appendChild(objRow.cloneNode(true));

                                                 //  Rebuild table and bind
        for(var j=0;j < objBound.item(intKey.toString()).node.getElementsByTagName('tr').length;j++)
          for(var k=0;k < objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(j).getElementsByTagName('td').length;k++)
            for(var l=0;l < objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(j).getElementsByTagName('td').item(k).childNodes.length;l++)
              switch(objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(j).getElementsByTagName('td').item(k).childNodes.item(l).nodeName.toLowerCase()) {
                case('input'):
				  try {
                    if(objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(j).getElementsByTagName('td').item(k).childNodes.item(l).getAttribute('type') != 'checkbox') 
                      objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(j).getElementsByTagName('td').item(k).childNodes.item(l).value = objXMLDI.item(objBound.item(intKey.toString()).datasrc).getElementsByTagName(objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(j).getElementsByTagName('td').item(k).childNodes.item(l).getAttribute('datafld')).item(j).firstChild.nodeValue;
                    else
                      objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(j).getElementsByTagName('td').item(k).childNodes.item(l).checked = eval(objXMLDI.item(objBound.item(intKey.toString()).datasrc).getElementsByTagName(objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(j).getElementsByTagName('td').item(k).childNodes.item(l).getAttribute('datafld')).item(j).firstChild.nodeValue);
                  }
                  catch(e) { }

                  if(objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(j).getElementsByTagName('td').item(k).childNodes.item(l).getAttribute('type') != 'checkbox')
                    objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(j).getElementsByTagName('td').item(k).childNodes.item(l).onchange = new Function('try { objXMLDI.item(\'' + objBound.item(intKey.toString()).datasrc + '\').getElementsByTagName(\'' + objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(j).getElementsByTagName('td').item(k).childNodes.item(l).getAttribute('datafld') + '\').item(' + j.toString() + ').firstChild.nodeValue = this.value } catch(e) { objXMLDI.item(\'' + objBound.item(intKey.toString()).datasrc + '\').getElementsByTagName(\'' + objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(j).getElementsByTagName('td').item(k).childNodes.item(l).getAttribute('datafld') + '\').item(' + j.toString() + ').appendChild(document.createTextNode(this.value)) };MozillaDSO;');
                  else
                    objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(j).getElementsByTagName('td').item(k).childNodes.item(l).onchange = new Function('try { objXMLDI.item(\'' + objBound.item(intKey.toString()).datasrc + '\').getElementsByTagName(\'' + objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(j).getElementsByTagName('td').item(k).childNodes.item(l).getAttribute('datafld') + '\').item(' + j.toString() + ').firstChild.nodeValue = this.checked } catch(e) { objXMLDI.item(\'' + objBound.item(intKey.toString()).datasrc + '\').getElementsByTagName(\'' + objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(j).getElementsByTagName('td').item(k).childNodes.item(l).getAttribute('datafld') + '\').item(' + j.toString() + ').appendChild(document.createTextNode(this.checked)) };MozillaDSO;');

                  break;
                case('div'):
                case('span'):
                  try {                        //  Text node exists
                    objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(j).getElementsByTagName('td').item(k).childNodes.item(l).firstChild.nodeValue = objXMLDI.item(objBound.item(intKey.toString()).datasrc).getElementsByTagName(objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(j).getElementsByTagName('td').item(k).childNodes.item(l).getAttribute('datafld')).item(j).firstChild.nodeValue;
                  }
                  catch(e) {                   //  Create text node
                    try {
                      objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(j).getElementsByTagName('td').item(k).childNodes.item(l).appendChild(document.createTextNode(objXMLDI.item(objBound.item(intKey.toString()).datasrc).getElementsByTagName(objBound.item(intKey.toString()).node.getElementsByTagName('tr').item(j).getElementsByTagName('td').item(k).childNodes.item(l).getAttribute('datafld')).item(j).firstChild.nodeValue));
                    }
                    catch(e) { }
                  }

                  break;
              }

              ++intKey;
      }

      for(var i=0;i < document.getElementsByTagName('input').length;i++)
        if(document.getElementsByTagName('input').item(i).getAttribute('datafld') != null) {
          objBound.add(intKey.toString(),new boundXML());

          if(document.getElementsByTagName('input').item(i).getAttribute('datasrc') != null)
            objBound.item(intKey.toString()).datasrc = document.getElementsByTagName('input').item(i).getAttribute('datasrc');

          objBound.item(intKey.toString()).datafld = document.getElementsByTagName('input').item(i).getAttribute('datafld');
          objBound.item(intKey.toString()).node = document.getElementsByTagName('input').item(i);
          objBound.item(intKey.toString()).nodeName = document.getElementsByTagName('input').item(i).nodeName;

          ++intKey;
        } 

      for(var i=0;i < document.getElementsByTagName('div').length;i++)
        if(document.getElementsByTagName('div').item(i).getAttribute('datafld') != null) {
          objBound.add(intKey.toString(),new boundXML());

          if(document.getElementsByTagName('div').item(i).getAttribute('datasrc') != null)
            objBound.item(intKey.toString()).datasrc = document.getElementsByTagName('div').item(i).getAttribute('datasrc');

          objBound.item(intKey.toString()).datafld = document.getElementsByTagName('div').item(i).getAttribute('datafld');
          objBound.item(intKey.toString()).node = document.getElementsByTagName('div').item(i);
          objBound.item(intKey.toString()).nodeName = document.getElementsByTagName('div').item(i).nodeName;

          ++intKey;
        } 

      for(var i=0;i < document.getElementsByTagName('span').length;i++)
        if(document.getElementsByTagName('span').item(i).getAttribute('datafld') != null) {
          objBound.add(intKey.toString(),new boundXML());

          if(document.getElementsByTagName('span').item(i).getAttribute('datasrc') != null)
            objBound.item(intKey.toString()).datasrc = document.getElementsByTagName('span').item(i).getAttribute('datasrc');

          objBound.item(intKey.toString()).datafld = document.getElementsByTagName('span').item(i).getAttribute('datafld');
          objBound.item(intKey.toString()).node = document.getElementsByTagName('span').item(i);
          objBound.item(intKey.toString()).nodeName = document.getElementsByTagName('span').item(i).nodeName;

          ++intKey;
        }

      arrKeys = objBound.keys();

                                                //  Handle non-tabular binds
      for(var i=0;i < arrKeys.length;i++)
        switch(objBound.item(arrKeys[i]).nodeName.toLowerCase()) {
          case('table'):
            objBound.item(arrKeys[i]).rows = new Array();

            break;
          case('input'):
            try {
              if(typeof(objBound.item(arrKeys[i]).datasrc) == 'string') {
                try {
                  if(objBound.item(arrKeys[i]).node.getAttribute('type') != 'checkbox')
                    objBound.item(arrKeys[i]).node.value = objXMLDI.item(objBound.item(arrKeys[i]).datasrc).getElementsByTagName(objBound.item(arrKeys[i]).datafld).item(0).firstChild.nodeValue;
                  else
                    objBound.item(arrKeys[i]).node.checked = eval(objXMLDI.item(objBound.item(arrKeys[i]).datasrc).getElementsByTagName(objBound.item(arrKeys[i]).datafld).item(0).firstChild.nodeValue);
                }
                catch(e) { }

				if(objBound.item(arrKeys[i]).node.getAttribute('type') != 'checkbox')
                  objBound.item(arrKeys[i]).node.onchange = new Function('try { objXMLDI.item(this.getAttribute(\'datasrc\')).getElementsByTagName(this.getAttribute(\'datafld\')).item(0).firstChild.nodeValue = this.value } catch(e) { objXMLDI.item(this.getAttribute(\'datasrc\')).getElementsByTagName(this.getAttribute(\'datafld\')).item(0).appendChild(document.createTextNode(this.value)) };MozillaDSO()');
                else
                  objBound.item(arrKeys[i]).node.onclick = new Function('try { objXMLDI.item(this.getAttribute(\'datasrc\')).getElementsByTagName(this.getAttribute(\'datafld\')).item(0).firstChild.nodeValue = this.checked } catch(e) { objXMLDI.item(this.getAttribute(\'datasrc\')).getElementsByTagName(this.getAttribute(\'datafld\')).item(0).appendChild(document.createTextNode(this.checked)) };MozillaDSO()');
              }
            }
            catch(e) { }

            break;
          case('div'):
          case('span'):
            if(typeof(objBound.item(arrKeys[i]).datasrc) == 'string') {
              try {                              //  Text node exists
                objBound.item(arrKeys[i]).node.firstChild.nodeValue = objXMLDI.item(objBound.item(arrKeys[i]).datasrc).getElementsByTagName(objBound.item(arrKeys[i]).datafld).item(0).firstChild.nodeValue;
              }
              catch(e) {                         //  Create text node
                try {
                  objBound.item(arrKeys[i]).node.appendChild(document.createTextNode(objXMLDI.item(objBound.item(arrKeys[i]).datasrc).getElementsByTagName(objBound.item(arrKeys[i]).datafld).item(0).firstChild.nodeValue));
                }
                catch(e) { }
              }
            } 

            break;
          default:
            alert('Error: Unsupported HTML Element - ' + objBound.item(arrKeys[i]).nodeName.toLowerCase());

            break;
        }
MozillaDSO(xmldatasrc2,xmlid2);
    }



  function boundXML() {
    var datasrc = null;                          //  Data source (string)
    var datafld = null;                          //  Data field (string)
    var node = null;                             //  XHTML node (object)
    var nodeName = null;                         //  Node name (string)
  }


}









function MozillaDSO(xmldatasource,xmlid) 
{
  /* Function:      MozillaDSO
     Purpose:       The purpose of this function is to perform binding of 
                    XML Data Islands for Mozilla.  The logic herein is bypassed
                    for Microsoft Internet Explorer.

     Update Date:       Programmer:              Description:
  */

                                                 //  Global variables
var objXMLDI = new collection();                   //  XML data island collection

                                                 //  Local variables
  var objDatafld;                                //  Table datafld collection
  var objRow;                                    //  Table row
  var reWork = new RegExp('internet explorer','gi');

  if(!reWork.test(navigator.appName)) 
{
                                                 //  Locate data islands

	var xmlDocument = document.implementation.createDocument('',xmlid, null);
	xmlDocument.async = false;
	var loaded = xmlDocument.load(xmldatasource);

	if(!loaded)
	{
		return;
	}


	  for(var i=0;i < xmlDocument.getElementsByTagName(xmlid).length;i++)
	  {
	      objXMLDI.add('#' + xmlid,xmlDocument.getElementsByTagName(xmlid).item(i));
	  }



                                                 //  Locate bound nodes
    for(var i=0;i < document.getElementsByTagName('table').length;i++)
      if(document.getElementsByTagName('table').item(i).getAttribute('datasrc') != null) 
{
	var datsrc = document.getElementsByTagName('table').item(i).getAttribute('datasrc');
	var check = '#'+xmlid;
	if(datsrc!=check)
		continue;
//alert(datsrc);
	var objTable = document.getElementsByTagName('table').item(i);

        objDatafld = new collection();           //  Reset collection;

                                                 //  Remove all rows
	if(objTable.getElementsByTagName('tr').length != 0) 
	{
	  for(var kj=0;kj < objTable.getElementsByTagName('tr').length;kj++)
	  {

		objRow = objTable.getElementsByTagName('tr').item(kj);


        	for(var j=0;j < objRow.getElementsByTagName('span').length;j++)
	          if(!objDatafld.exists(objRow.getElementsByTagName('span').item(j).getAttribute('datafld')))
		{
			//alert(objRow.getElementsByTagName('span').item(j).getAttribute('datafld'));
			var datasrc = '#' + xmlid;
			var datafld = objRow.getElementsByTagName('span').item(j).getAttribute('datafld');
			var value = objXMLDI.item(datasrc).getElementsByTagName(datafld).item(0).firstChild.nodeValue;
			//alert(value);
			objRow.getElementsByTagName('span').item(j).innerHTML = value;
			//alert(objRow.getElementsByTagName('span').item(j).innerHTML);
			//alert(objRow.getElementsByTagName('span').item(j).getAttribute('nodeValue'));
		            objDatafld.item(objRow.getElementsByTagName('span').item(j).getAttribute('datafld'),null);
		}

	 }//for
	}//if
    }//if
}
return;



  function boundXML() {
    var datasrc = null;                          //  Data source (string)
    var datafld = null;                          //  Data field (string)
    var node = null;                             //  XHTML node (object)
    var nodeName = null;                         //  Node name (string)
  }
}

function collection() {
  /* Function:      collection
     Purpose:       The purpose of this class is to define the collection 
                    object associative array.

     Update Date:       Programmer:              Description:
  */

                                                 //  Properties
  this.objcollection = new Object;               //  Associative array
  this.count = 0;                                //  Total numbers of items

                                                 //  Methods
  this.add = colAdd;                             //  Add method
  this.exists = colExists;                       //  Exists method
  this.item = colItem;                           //  Item method
  this.removeAll = colRemoveAll;                 //  Remove all method
  this.remove = colRemove;                       //  Remove method
  this.keys = colKeys;                           //  Keys method

  function colAdd(strKey,strItem) {
    /* Function:      colAdd
       Purpose:       The purpose of this function is to add an item to 
                      the collection object.

       Update Date:       Programmer:              Description:
    */

    if(typeof(this.objcollection[strKey]) == 'undefined')
      ++this.count;

      this.objcollection[strKey] = strItem;
  }

  function colExists(strKey) {
    /* Function:      colExists
       Purpose:       The purpose of this function is to return a boolean 
                      indicating where or not a key exists in the
                      collection object.

       Update Date:       Programmer:              Description:
    */

    if(typeof(this.objcollection[strKey]) == 'undefined')
      return false;
    else
      return true;
  }

  function colItem(strKey,strItem) {
    /* Function:      colItem
       Purpose:       The purpose of this function is to either set or get 
                      an item to or from the collection object.

       Update Date:       Programmer:              Description:
    */

    if(typeof(strItem) == 'undefined')
      return this.objcollection[strKey];
    else {
      if(typeof(this.objcollection[strKey]) == 'undefined')
        ++this.count;

      this.objcollection[strKey] = strItem;
    }
  }

  function colRemoveAll() {
    /* Function:      colRemoveAll
       Purpose:       The purpose of this function is to remove all keys 
                      and items from the collection object and set the
                      item count to zero.

       Update Date:       Programmer:              Description:
    */

    this.objcollection = new Object;
    this.count = 0;
  }

  function colRemove(strKey) {
    /* Function:      colRemove
       Purpose:       The purpose of this function is to remove a single 
                      item and it's associated key from the collection
                      object and decrement the count by one.

       Update Date:       Programmer:              Description:
    */

    if(typeof(strItem) != 'undefined') {
      this.objcollection[strKey] == 'undefined';
      --this.count;
    }
  }

  function colKeys() {
    /* Function:      colKeys
       Purpose:       The purpose of this function is to return an array
                      consisting of the collection object's keys.

       Update Date:       Programmer:              Description:
    */

    var arrWork = new Array();
    var strKey;

    for(strKey in this.objcollection)
      if(this.objcollection[strKey] != 'undefined')
        arrWork.push(strKey);

    return arrWork;
  }
}


