/* -*- javascript -*- 
     Copyright 2005 Artific Consulting LLC.
   Some Rights Reserved
 * Licensed under Creative Commons Attribution-ShareAlike 2.5 License
 * No Warranty is Implied or Guaranteed.  Use at your own risk.
     System        : ENCODING_JS : 
     Object Name   : $RCS_FILE$
     Revision      : $REVISION$
     Date          : Sat Nov 12 12:26:09 2005
     Created By    : Ed Costello, Artific Consulting LLC
     Created       : Sat Nov 12 12:26:09 2005

     Last Modified : <060423.1520>
     ID            : $Id: encodings.js,v 1.9 2006/04/23 19:27:28 epc Exp $
     Source        : $Source: /usr/home/epc/sites/artific.com/content/library/encodings/RCS/encodings.js,v $
     Description	
     Notes
     $Log: encodings.js,v $
     Revision 1.9  2006/04/23 19:27:28  epc
     switch to document.createElementNS

     Revision 1.8  2006/04/23 19:16:54  epc
     *** empty log message ***

     Revision 1.7  2005/12/21 06:50:43  epc
     *** empty log message ***

     Revision 1.6  2005/12/20 02:47:47  epc
     *** empty log message ***

     Revision 1.5  2005/12/20 02:47:30  epc
     add semicolon to onchange

     Revision 1.4  2005/12/20 02:46:07  epc
     *** empty log message ***

     Revision 1.3  2005/12/19 06:18:56  epc
     add scope for cols and rows

     Revision 1.2  2005/12/19 05:50:33  epc
     Fixed error in not casting the radix to a number, so toString
     was not working as expected

     Revision 1.1  2005/11/13 05:23:14  epc
     Initial revision


*/
var ns4 = document.layers;
var ie4 = document.all;
var nn6 = document.getElementById && !document.all;

// interesting...moving this outside of drawtable allowed it to be
// created once, it just keeps getting appended to th[id=sel]
    var f = createElement('form');
    f.setAttribute('id','sel');

function add_select(id) {
    var s = createElement('select');
    s.setAttribute('id','radix');
    var i = new Number();
    for (i=0;i<256;i++) {
        var x = createElement('option');
        var z = i.toString(16);
        x.setAttribute('value',i);
        var zz= document.createTextNode('0x' + z) ;
        x.appendChild(zz);
        s.appendChild(x);
        delete x,z,zz;
    }
  // s.setAttribute('onchange','drawtable(this.value);');
s.setAttribute('onchange','drawtable(this.options[this.selectedIndex].value);this.select();');
s.setAttribute('onkeyup','drawtable(this.options[this.selectedIndex].value);this.select();');
 var theForm = document.getElementById(id);
  theForm.appendChild(s);

}

function add_form(id) {
    var f = createElement('form');
    var thisid = 'foo';
    f.setAttribute('id',thisid);
    var th = document.getElementById(id);
    th.appendChild(f);
    delete f,th;
    return thisid;
}
function drawtable(radix) {
    //	assumption: radix is decimal string
    var strRadix = new String;
    strRadix = Number(radix).toString(16);
    var tableid = 'encodingtable';
    var t = createElement('table');
    var caption = new String();
caption = 'Table of entities for ranges 0x' + strRadix + '00 to 0x' + strRadix + 'ff (' + "&#" + ( radix * 256) + '- &#' + (radix * 256 + 255) + ")";
    t.setAttribute('summary',caption);
    t.setAttribute('id',tableid);
    
    var oCaption = createElement('caption');
    oCaption.appendChild(document.createTextNode(caption));
    t.appendChild(oCaption);
    delete oCaption;
    
    var major = new Number();
    var minor = new Number();
    //  create first row of headers 
    var oTableRow = createElement('tr');
    var oColHead = createElement('th');
    oColHead.setAttribute('id','selth');
    oColHead.appendChild(f);
    oTableRow.appendChild(oColHead);
    for (minor=0;minor<16;minor++) {
        var strMinor = minor.toString(16);
        var oColHead = createElement('th');
	oColHead.setAttribute('scope','col');
        var StrColHead = document.createTextNode('0x?'+ strMinor );
        oColHead.appendChild(StrColHead);
        oTableRow.appendChild(oColHead);
        delete oColHead, strMinor, StrColHead;
	}
    
    var oTableHead = createElement('thead');
    oTableHead.appendChild(oTableRow);
    t.appendChild(oTableHead);
	var oTableBody = createElement('tbody');
    for (major = 0; major < 16; major ++) {
        var strMajor = major.toString(16);
        var parity = major % 2;
        if (parity == 0) {rowclass = 'roweven';}
        else {rowclass = 'rowodd';}
        var oTableRow = createElement('tr');
	var oDescRow = createElement('tr');
        oTableRow.setAttribute('class',rowclass);
        oDescRow.setAttribute('class',rowclass);
        var oRowHead = createElement('th');
	oRowHead.setAttribute('scope','row');
	oRowHead.setAttribute('rowspan','2');
        var strHeadValue = document.createTextNode('0x' + strRadix + strMajor + '?');
        oRowHead.appendChild(strHeadValue);
        oTableRow.appendChild(oRowHead);
        for (minor = 0; minor < 16; minor ++) {
		var strMinor = minor.toString(16);
		var oTableData = createElement('td');
		oTableData.setAttribute('class','glyph');
		var oDescData = createElement('td');
		oDescData.setAttribute('class','entity');
            	var charCode = new Number;
		charCode = radix * 256  + major * 16 + minor;
		oTableData.setAttribute('title',"This character's entity encoding in hex: &#x" + strRadix + strMajor + strMinor  + '; Decimal: &#' + charCode + ";");
		strDesc = "&#x" + strRadix + strMajor + strMinor + ";";
		strDescData = document.createTextNode(strDesc);
		var strCharCode = String.fromCharCode(charCode);
		var strTableData = document.createTextNode(strCharCode);
		oTableData.appendChild(strTableData);
		oTableRow.appendChild(oTableData);
		oDescData.appendChild(strDescData);
		oDescRow.appendChild(oDescData);
		delete strTableData, oTableData,oDescData,strDesc,strDescData;
        	}
	oTableBody.appendChild(oTableRow);
	oTableBody.appendChild(oDescRow);
	delete oRowHead,strHeadValue,oTableRow,oDescRow;
   }
    t.appendChild(oTableBody);
    var d = document.getElementById('top');
    var oldTable = document.getElementById(tableid);
    // var trash = d.removeChild(oldTable);
    // d.appendChild(t);
    d.replaceChild(t,oldTable);
    delete trash,oldTable,t,oTableBody;
}

function createElement(e) {
// based on http://simon.incutio.com/archive/2003/06/15/javascriptWithXML
	var result = false;
	if (typeof document.createElementNS != 'undefined') {
		result = document.createElementNS('http://www.w3.org/1999/xhtml'
, e);
		}
	else if (typeof document.createElement != 'undefined') {
		result =  document.createElement(e);	    
		}
	return result;
	}

