function uni2dec(unistr) {
    var myArray = new Array(unistr.length);
    var myArrayN = new Array(unistr.length);
    var unicode = null;
    for(var i=0; i < unistr.length; i++) {
	unicode = unistr.charCodeAt(i);
	if (unicode < 127) {
	    myArray[i] = unistr.charAt(i);
	    myArrayN[i] = unistr.charAt(i);
	} else {
	    myArray[i] = unistr.charAt(i) + '[&#' + unicode + ';]';
	    myArrayN[i] = "&#" + unicode + ';';
	    if (!((i+1) % 5) )
		myArrayN[i] = myArrayN[i] + '\n';
	}
    }

    return {'map':myArray.join(' '), 'list':myArrayN.join('')}
}

// Convert a string of dec codes into their unicode form.
function dec2uni(decstr) {
    var decPat = /&#[0-9]{1,8};/g;
    var decArray = decstr.match(decPat);
    if (!decArray) {
	return null;
    }
    var myArray = new Array(decArray.lngth);
    var myArrayN = new Array(decArray.lngth);
    for (var i = 0; i < decArray.length; i++) {
	uchar = dec2char(decArray[i]);
	myArray[i] = decArray[i] + '[' + uchar + ']';
	myArrayN[i] = uchar;
    }
    return {"map":myArray.join(' '), "list":myArrayN.join('')};
}

function dec2char(deccode) {
    deccode = deccode.split('');
    heads = {"&":1, "#":1, "0":1};
    for(var i = 0; i < deccode.length; i++) {
	if (!(deccode[i] in heads)) {
	    deccode = deccode.slice(i);
	    break;
	}
    }
    return String.fromCharCode(parseInt(deccode.join('')));
}
