// setting
var cha = {
	form   : 'charaz',	// character-form-id
	table  : 'table',	// character-table
	start  : 'start',	// character-start-element-name
	end    : 'end',	// character-end-element-name
	0 : 0
};


function chara_set(st, en) {
	// character-start-element-object
	var start = element_object( form_object(cha['form']) , cha['start']);
	if (!start) return false;

	// character-end-element-object
	var end = element_object( form_object(cha['form']) , cha['end']);
	if (!end) return false;

	// start-value
	if (st || typeof(st) == 'string') start.value = st;

	// end-value
	if (en || typeof(en) == 'string') end.value = en;
}


function chara() {
	var d = document;

	// character-table
	var table = d.getElementById(cha['table']);
	if (!table) return false;

	// remove
	while (table.firstChild) table.removeChild( table.firstChild );

	// character-start-element-object
	var start = element_object( form_object(cha['form']) , cha['start']);
	if (!start) return false;

	// character-end-element-object
	var end = element_object( form_object(cha['form']) , cha['end']);
	if (!end) return false;

	// start-value (hex)
	var st = parseInt(start.value, 16);

	// end-value (hex)
	var en = parseInt(end.value, 16);

	// start > end ?
	if (st > en) {
		var tmp = st;  st = en;  en = tmp;
	}

	// table->dl
	var dl = d.createElement('DL');
	table.appendChild(dl);

	// table->dl->dt-dd
	for (var i = st; i < en; i++) {
		var hx = i.toString(16);
		var hx0 = hx + '';
		while (hx0.length < 4) hx0 = '0' + hx0;
		var ht = '&#'  + i   + ';' + "\n" + '&#x' + hx  + ';' + "\n" + '\\u' + hx0;

		// list
		var dt = d.createElement('DT');
		dl.appendChild(dt);

		// sample
		var dd = d.createElement('DD');
		dl.appendChild(dd);
		var samp = d.createElement('SAMP');
		dd.appendChild(samp);
		samp.appendChild( d.createTextNode( String.fromCharCode(i) ) );
		samp.setAttribute('title', ht);

		// dfn
		var dd = d.createElement('DD');
		dl.appendChild(dd);
		var dfn = d.createElement('DFN');
		dd.appendChild(dfn);
		dfn.appendChild( d.createTextNode( '.' + hx0 + '' ) );
		dfn.setAttribute('title', ht);

		// \n
		dl.appendChild( d.createTextNode("\n") );
	}
}




// tips
// get form-object
function form_object(id) {
	if (!id) return false;

	// from forms
	var df = document.forms;
	if (df) return df[ id ] || false;

	// from id
	var dei = document.getElementById( id );
	if (dei && dei.nodeType && dei.nodeName == 'FORM') return dei || false;

	// from name
	var tags = document.getElementsByTagName('FORM');
	var tags_leng = tags.length;
	for (var i = 0; i < tags_leng; i++) {
		if (tags[i].getAttribute('name') == id) return tags[i];
	}
	return false;
}


// get element-object
function element_object(df, name) {
	if (!df || !name || typeof(df) != 'object') return false;

	// from elements
	var de = df.elements;
	if (de) return de[ name ] || false;

	// from id
	var dei = document.getElementById( name );
	if (dei && dei.nodeType && dei.nodeType == 1) return dei || false;

	// from name
	var tags = df.getElementsByTagName('*');
	var tags_leng = tags.length;
	for (var i = 0; i < tags_leng; i++) {
		if (tags[i].getAttribute('name') == name) return tags[i];
	}
	return false;
}




