var decDigit = { 0:1, 1:1, 2:1, 3:1, 4:1, 5:1, 6:1, 7:1, 8:1, 9:1 };
	
	function convertCP2Char ( textString ) {
  var outputString = '';
  textString = textString.replace(/^\s+/, '');
  if (textString.length == 0) { return ""; }
  	textString = textString.replace(/\s+/g, ' ');
  var listArray = textString.split(' ');
  for ( var i = 0; i < listArray.length; i++ ) {
    var n = parseInt(listArray[i], 16);
    if (n <= 0xFFFF) {
      outputString += String.fromCharCode(n);
    } else if (n <= 0x10FFFF) {
      n -= 0x10000
      outputString += String.fromCharCode(0xD800 | (n >> 10)) + String.fromCharCode(0xDC00 | (n & 0x3FF));
    } else {
      outputString += 'convertCP2Char error: Code point out of range: '+dec2hex(n);
    }
  }
  return( outputString );
}

function getCPfromChar ( textString ) {
	// converts a character or sequence of characters to hex codepoint values
	// copes with supplementary characters
	// returned values include a space between each hex value and at the end
	var codepoint = "";
	var haut = 0;
	var n = 0; 
	for (var i = 0; i < textString.length; i++) {
		var b = textString.charCodeAt(i); 
		if (b < 0 || b > 0xFFFF) {
			codepoint += 'Error: Initial byte out of range in getCPfromChar: '+dec2hex(b);
			}
		if (haut != 0) { // we should be dealing with the second part of a supplementary character
			if (0xDC00 <= b && b <= 0xDFFF) {
				codepoint += dec2hex(0x10000 + ((haut - 0xD800) << 10) + (b - 0xDC00)) + ' ';
				haut = 0;
				continue;
				}
			else {
				codepoint += 'Error: Second byte out of range in getCPfromChar: '+dec2hex(haut);
				haut = 0;
				}
			}
		if (0xD800 <= b && b <= 0xDBFF) { //b is the first part of a supplementary character
			haut = b;
			}
		else { // this is not a supplementary character
//			codepoint += dec2hex(b);
			codepoint += b.toString(16).toUpperCase()+' ';
			}
		} 
 //alert('>'+codepoint+'<');
	return codepoint;
	}
	
	
	
function convertString(textString) {
	CPstring = '';
	textString += ' ';
	var tempString = '';
	var charStr = '';
	
	// first convert whole string to characters
	for (var i=0; i<textString.length-1; i++) {   
		if (i<textString.length-3 && textString.charAt(i) == '&' 
			&& textString.charAt(i+1) == '#' && textString.charAt(i+2) in decDigit) { // &#1
			tempString = '';
			i += 2;
			while (i<textString.length-1 && textString.charAt(i) in decDigit) { 
				tempString += textString.charAt(i); 
				i++;
				}
			// only convert sequence to character if terminated by ;
			if (textString.charAt(i) == ';') { 
				charStr += convertCP2Char(parseInt(tempString).toString(16));
//alert(tempString);
				}
			else { charStr += '&#'+tempString; i--;}
			}
		else { 
			charStr += textString.charAt(i);
			}
		} 
//alert('charStr='+charStr+'<'+charStr.length);
		
	CPstring = getCPfromChar( charStr ); 
	CPstring = CPstring.substring(0, CPstring.length-1);
		
	return(convertCP2Char(CPstring));
	}
	
function getByType(thisType, thisID){
	var node_list = document.getElementsByTagName('input');
	for (var i = 0; i < node_list.length; i++) {
	   var node = node_list[i];
	   if (node.getAttribute('type') == thisType && node.getAttribute('id') == thisID) 
	   {
	      node.value = convertString(node.value);
	       //alert(node.value);
	   }
	}
}

function getByID(thisID){
	var node_list = document.getElementsByTagName('input');
	var valToMove;
	for (var i = 0; i < node_list.length; i++) {
	   var node = node_list[i];
	   if (node.getAttribute('id') == thisID) 
	   {
	      node.value = convertString(node.value);
		  valToMove = convertString(node.value);
	   }
	}
    if (document.getElementById && document.getElementById('adv_srch_hidden'))
    {
	    document.getElementById('adv_srch_hidden').value = valToMove;
	}
	//alert(document.getElementById('adv_srch_hidden').value);
}