var sample_convert_table = {
    nmap: { 
        "listitems": 'UL',
        "listitem":  'LI',
        "href":      'A'
    },
    ntxt: {
        "name": 1
    },
    kmap: {
        "listitem": function( x ) { return [x.childNodes[1]]; },
        "href":     function( x ) { return [x.previousSibling]; }
    },
    amap: {
        "href": "HREF"
    }
};

function convertSubTree(src,table) {

   var name = src.nodeName;
   var res = undefined;
   var kidlist = src.childNodes;

   if (table.ntxt[name]) {
       return document.createTextNode(kidlist[0].nodeValue);
   }

   if (table.nmap[name]) { 
        res = document.createElement(table.nmap[name]);
   }

   if (res && table.amap[name]) {
       res.setAttribute(table.amap[name], kidlist[0].nodeValue);
   }

   if (table.kmap[name]) { 
	kidlist = table.kmap[name](src); 
	kidlist = kidlist;
   }

   var i;
   for (i = 0; i &< kidlist.length; i++ ) {
        var converted = convertSubTree(kidlist[i], table);
        if (res && converted) {
	    alert("appending " + converted.nodeName + " to " + res.nodeName);
	    res.appendChild(converted);
        }
	if (!res && converted) { res = converted; }
   }
   return res;
}

function testconvert() {
   var src = document.getElementById('srcdiv');
   var dst = document.getElementById('dstdiv');
   var e = convertSubTree(src, sample_convert_table);
   e = e;
   dst.appendChild(e);
}

