  /**
	* En este fichero se definen funciones propias JS 
	* @package JS Functions
	* @category JS Functions
	* @author Raúl Hussein Galindo (raul@globalmetanoia.com)
	*/
		
	
	var ck_editor;
	
	/**
	 * Función que crea una cookie en el dominio globalmetanoia
	 * @param string name : nombre de la cookie 
	 * @param string value: valor de la cookie
	 * @param string days: duracion de la expiracion de la cookie
	 * @return string : composicion del cuerpo de la cookie
	 * @author Raúl Hussein Galindo (raul@globalmetanoia.com)
	 * @version 1 (16-02-2010)
	 */	
	function createCookie(name,value,days) 
	{
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else{
			var expires = "";
			var path = "globalmetanoia/";
		} 
		document.cookie = name+"="+value+expires+"; path=/"+path;
		return name+"="+value+expires+"; path=/"+path;
	}
	
	/**
	 * Función que devuelve el valor de una cookie
	 * @param string name : nombre de la cookie 
	 * @return string : valor de la cookie
	 * @author Raúl Hussein Galindo (raul@globalmetanoia.com)
	 * @version 1 (16-02-2010)
	 */	
	function readCookie(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	}
	
	/**
	 * Función que elimina una cookie
	 * @param string name : nombre de la cookie 
	 * @return string : resultado de la creacion de una cookie sin valor
	 * @author Raúl Hussein Galindo (raul@globalmetanoia.com)
	 * @version 1 (16-02-2010)
	 */	
	function eraseCookie(name) {
		return createCookie(name,"",0);
	}
			
	
	 /**
	 * Función que selecciona cada checkbox de una tabla
	 * @param string container_id : identificador de la tabla
	 * @author Raúl Hussein Galindo (raul@globalmetanoia.com)
	 * @version 1 (16-02-2010)
	 */
	function seleccionar_todos( container_id ) {
	    var rows = document.getElementById(container_id).getElementsByTagName('tr');
	    var checkbox, jefe;
	
		jefe = rows[0].getElementsByTagName( 'input' )[0];
        for ( var i = 1; i < rows.length; i++ ) {
	        checkbox = rows[i].getElementsByTagName( 'input' )[0];
	        if(checkbox){
		        if(checkbox.type == "checkbox"){
		        	if(jefe.checked == false) checkbox.checked = false;
		        	else checkbox.checked = true;
		        }
		    }
        }
        return true;
	}

 	/**
	 * Función que crea un editor de CKeditor
	 * @param string texarea : identificador del textarea que substituira
	 * @param string text : texto que contenia el textarea
	 * @author Raúl Hussein Galindo (raul@globalmetanoia.com)
	 * @version 1 (16-02-2010)
	 */
	function crear_ckeditor(textarea, text){
		if ( ck_editor != undefined ){
			CKEDITOR.remove(ck_editor);
			ck_editor = null;
		}
		ck_editor = CKEDITOR.replace( textarea,
					{
						toolbar :
						[
							[ 'Undo','Redo','-','Cut','Copy','Paste','PasteText','PasteFromWord','-','Bold', 'Italic', '-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock', '-', 'NumberedList', 'BulletedList', '-','Link', 'Unlink','-','Image' ]
						],
						resize_enabled : false,
						maxHeight : 250,
						customConfig : "/library/fckfinder/ckeditor_config.js"
					});
		
		
	}	
	    
	
	/**
	 * Función que convierte el codigo UNICODE de una cadena a ASCII
	 * @param string Text : texto a modificar	 	
	 * @author Raúl Hussein Galindo (raul@globalmetanoia.com)
	 * @version 1 (16-02-2010)
	 */
	function js_caracteres_unicode(Text){
		var cadena='';
		var codigo='';
		
		for (var j = 0; j < Text.length; j++)
		{
			var Char=Text.charCodeAt(j);
			switch(Char)
			{
				case 225: cadena+='\u00e1'; break; // á
				case 233: cadena+='\u00e9'; break; // é
				case 237: cadena+='\u00ed'; break; // í
				case 243: cadena+='\u00f3'; break; // ó
				case 250: cadena+='\u00fa'; break; // ú
				case 193: cadena+='\u00c1'; break; // Á
				case 201: cadena+='\u00c9'; break; // É
				case 205: cadena+='\u00cd'; break; // Í 
				case 211: cadena+='\u00d3'; break; // Ó
				case 218: cadena+='\u00da'; break; // Ú
				case 241: cadena+='\u00f1'; break; // ñ
				case 209: cadena+='\u00d1'; break; // Ñ
				default: cadena+=Text.charAt(j); break;
			}
			codigo+='_'+Text.charCodeAt(j);
		}	
		return cadena;
	}
	
	/**
	 * Función que convierte el codigo HTML de una cadena a ASCII
	 * @param string Text : texto a modificar	 	
	 * @author Raúl Hussein Galindo (raul@globalmetanoia.com)
	 * @version 1 (16-02-2010)
	 */
	function js_caracteres_especiales(Text){
		var cadena='';
		var codigo='';
		
		for (var j = 0; j < Text.length; j++)
		{
			var Char=Text.charCodeAt(j);
			switch(Char)
			{
				case 225: cadena+='&acute;'; break; // á
				case 233: cadena+='&eacute;'; break; // é
				case 237: cadena+='&iacute;'; break; // í
				case 243: cadena+='&oacute;'; break; // ó
				case 250: cadena+='&uacute;'; break; // ú
				case 193: cadena+='&Aacute;'; break; // Á
				case 201: cadena+='&Eacute;'; break; // É
				case 205: cadena+='&Iacute;'; break; // Í 
				case 211: cadena+='&Oacute;'; break; // Ó
				case 218: cadena+='&Uacute;'; break; // Ú
				case 241: cadena+='&ntilde;'; break; // ñ
				case 209: cadena+='&Ntilde;'; break; // Ñ
				default: cadena+=Text.charAt(j); break;
			}
			codigo+='_'+Text.charCodeAt(j);
		}		
		return cadena;
	}		
	
	/**
	 * Función que devuelve una imagen que representa la extension de un fichero
	 * @param string fichero : path del fichero	 
	 * @return string : imagen
	 * @author Raúl Hussein Galindo (raul@globalmetanoia.com)
	 * @version 1 (16-02-2010)
	 */
	function js_get_icono_extension(fichero)
	{		
		path_imagenes = "view/images/iconos/";
			
		archivo='';
		extension = (fichero.substring(fichero.lastIndexOf(".")+1)).toLowerCase();
		
		switch (extension)
		{
			case 'jpg':
			case 'gif':
			case 'png':
			case 'bmp':
				archivo='i_img.png';
				break;
			case 'pdf':
				archivo='i_pdf.png';
				break;
			case 'doc':
			case 'docx':
				archivo='i_doc.png';
				break;
			case 'xls':
			case 'xlsx':
				archivo='i_xls.png';
				break;
			case 'txt':
				archivo='i_txt.png';
				break;
			case 'pps':
				archivo='i_pps.png';
				break;
			case 'rar':
			case 'zip':
				archivo='i_rar.png';
				break;
			case 'mp3':
			case 'ogg':
			case 'midi':
			case 'wma':
			case 'wav':
				archivo='i_audio.png';
				break;	
			case 'avi':
			case 'mp4':
			case 'mpeg':
			case 'mpg':
			case 'wmv':
			case 'mov':
			case 'div':
			case 'divx':
			case 'asf':
				archivo='i_video.png';
				break;
			case 'swf':
				archivo='i_swf.png';
				break;
			default:
				archivo='i_blanco.png';
				break;
		}
		return path_imagenes+archivo;
	}
	
	/**
	 * Función que permite cambiar la clase a un elemento HTML y añadirle un estilo
	 * @param string element_id : identificador del elemento
	 * @param string _class : clase que se desea asignar
	 * @param string _style : estilo que se desea asignar
	 * @author Raúl Hussein Galindo (raul@globalmetanoia.com)
	 * @version 1 (16-02-2010)
	 */
  	function js_change_style(element_id, _class, _style){		
		if (document.getElementById(element_id) != null) {
			if (_style != null) {
				with (document.getElementById(element_id).className) {
					_style;
				}
			}
			else 
				document.getElementById(element_id).className = _class;
			
		}
	}
	
	/**
	 * Función que establece la propiedad disabled a un elemento
	 * @param string element_id : identificador del elemento
	 * @param string state : estado	 
	 * @author Raúl Hussein Galindo (raul@globalmetanoia.com)
	 * @version 1 (16-02-2010)
	 */
	function js_set_disable_state(element_id, state){
		
		if (document.getElementById(element_id) != null) {
			document.getElementById(element_id).disabled = state;
		}
	}
	
	/**
	 * Función que comprueba si una URL es correcta
	 * @param string url : URL 
	 * @return integer : 0 si no es una URL, 1 si lo es
	 * @author Raúl Hussein Galindo (raul@globalmetanoia.com)
	 * @version 1 (23-02-2010)
	 */	
	function js_is_url(s)
	{
		var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
		return regexp.test(s);
	}
	
	/**
	 * Función que redirige el navegador a la URL especificada
	 * @param string url : URL 
	 * @author Raúl Hussein Galindo (raul@globalmetanoia.com)
	 * @version 1 (23-02-2010)
	 */	
	 function js_url_redirect(url)
	 {
	 	if(js_is_url(url))
	 	{
	 		window.location=url;
	 	}
	 }
	 
	 /**
	 * Función que crea un popup de 800x600 para cargar imágenes
	 * @param string direccion : URL de lo que se desea mostrar
	 * @author Raúl Hussein Galindo (raul@globalmetanoia.com)
	 * @version 1 (23-02-2010)
	 */	
	 function js_popup_url(direccion){
		opciones = "fullscreen=0" +
	                 ",toolbar=0" +
	                 ",location=0" +
	                 ",status=0" +
	                 ",menubar=0" +
	                 ",scrollbars=1" +
	                 ",resizable=1" +
	                 ",width=800" +
	                 ",height=600" +
	                 ",left=250" +
	                 ",top=250";
	     window.open(direccion, "Imagen", opciones, 1); 
	}
	 
	 function js_htmlentities(cadena, tipo)
	 {
		 var hash_map = {}, symbol = '', tmp_str = '', entity = '';
	    tmp_str = string.toString();    
	    if (false === (hash_map = this.get_html_translation_table('HTML_ENTITIES', quote_style))) 
	    {
	        return false;
	    }
	    hash_map["'"] = '&#039;';    
	    for (symbol in hash_map) 
	    {
	        entity = hash_map[symbol];
	        tmp_str = tmp_str.split(symbol).join(entity);
	    }

	 }
	 
	// HtmlDecode http://lab.msdn.microsoft.com/annotations/htmldecode.js

//   client side version of the useful Server.HtmlDecode method

//   takes one string (encoded) and returns another (decoded)

function HtmlDecode(s)
{
      var out = "";
      if (s==null) return;
      var l = s.length;
      for (var i=0; i<l; i++)
      {
            var ch = s.charAt(i);
           if (ch == '&')
            {
                  var semicolonIndex = s.indexOf(';', i+1);          

            if (semicolonIndex > 0)
            {
                        var entity = s.substring(i + 1, semicolonIndex);
                        if (entity.length > 1 && entity.charAt(0) == '#')
                        {
                              if (entity.charAt(1) == 'x' || entity.charAt(1) == 'X')
                                    ch = String.fromCharCode(eval('0'+entity.substring(1)));
                              else
                                    ch = String.fromCharCode(eval(entity.substring(1)));
                        }
                    else
                      {
                              switch (entity)
                              {
                                    case 'quot': ch = String.fromCharCode(0x0022); break;
                                    case 'amp': ch = String.fromCharCode(0x0026); break;
                                    case 'lt': ch = String.fromCharCode(0x003c); break;
                                    case 'gt': ch = String.fromCharCode(0x003e); break;
                                    case 'nbsp': ch = String.fromCharCode(0x00a0); break;
                                    case 'iexcl': ch = String.fromCharCode(0x00a1); break;
                                    case 'cent': ch = String.fromCharCode(0x00a2); break;
                                    case 'pound': ch = String.fromCharCode(0x00a3); break;
                                    case 'curren': ch = String.fromCharCode(0x00a4); break;
                                    case 'yen': ch = String.fromCharCode(0x00a5); break;
                                    case 'brvbar': ch = String.fromCharCode(0x00a6); break;
                                    case 'sect': ch = String.fromCharCode(0x00a7); break;
                                    case 'uml': ch = String.fromCharCode(0x00a8); break;
                                    case 'copy': ch = String.fromCharCode(0x00a9); break;
                                    case 'ordf': ch = String.fromCharCode(0x00aa); break;
                                    case 'laquo': ch = String.fromCharCode(0x00ab); break;
                                    case 'not': ch = String.fromCharCode(0x00ac); break;
                                    case 'shy': ch = String.fromCharCode(0x00ad); break;
                                    case 'reg': ch = String.fromCharCode(0x00ae); break;
                                    case 'macr': ch = String.fromCharCode(0x00af); break;
                                    case 'deg': ch = String.fromCharCode(0x00b0); break;
                                    case 'plusmn': ch = String.fromCharCode(0x00b1); break;
                                    case 'sup2': ch = String.fromCharCode(0x00b2); break;
                                    case 'sup3': ch = String.fromCharCode(0x00b3); break;
                                    case 'acute': ch = String.fromCharCode(0x00b4); break;
                                    case 'micro': ch = String.fromCharCode(0x00b5); break;
                                    case 'para': ch = String.fromCharCode(0x00b6); break;
                                    case 'middot': ch = String.fromCharCode(0x00b7); break;
                                    case 'cedil': ch = String.fromCharCode(0x00b8); break;
                                    case 'sup1': ch = String.fromCharCode(0x00b9); break;
                                    case 'ordm': ch = String.fromCharCode(0x00ba); break;
                                    case 'raquo': ch = String.fromCharCode(0x00bb); break;
                                    case 'frac14': ch = String.fromCharCode(0x00bc); break;
                                    case 'frac12': ch = String.fromCharCode(0x00bd); break;
                                    case 'frac34': ch = String.fromCharCode(0x00be); break;
                                    case 'iquest': ch = String.fromCharCode(0x00bf); break;
                                    case 'Agrave': ch = String.fromCharCode(0x00c0); break;
                                    case 'Aacute': ch = String.fromCharCode(0x00c1); break;
                                    case 'Acirc': ch = String.fromCharCode(0x00c2); break;
                                    case 'Atilde': ch = String.fromCharCode(0x00c3); break;
                                    case 'Auml': ch = String.fromCharCode(0x00c4); break;
                                    case 'Aring': ch = String.fromCharCode(0x00c5); break;
                                    case 'AElig': ch = String.fromCharCode(0x00c6); break;
                                    case 'Ccedil': ch = String.fromCharCode(0x00c7); break;
                                    case 'Egrave': ch = String.fromCharCode(0x00c8); break;
                                    case 'Eacute': ch = String.fromCharCode(0x00c9); break;
                                    case 'Ecirc': ch = String.fromCharCode(0x00ca); break;
                                    case 'Euml': ch = String.fromCharCode(0x00cb); break;
                                    case 'Igrave': ch = String.fromCharCode(0x00cc); break;
                                    case 'Iacute': ch = String.fromCharCode(0x00cd); break;
                                    case 'Icirc': ch = String.fromCharCode(0x00ce ); break;
                                    case 'Iuml': ch = String.fromCharCode(0x00cf); break;
                                    case 'ETH': ch = String.fromCharCode(0x00d0); break;
                                    case 'Ntilde': ch = String.fromCharCode(0x00d1); break;
                                    case 'Ograve': ch = String.fromCharCode(0x00d2); break;
                                    case 'Oacute': ch = String.fromCharCode(0x00d3); break;
                                    case 'Ocirc': ch = String.fromCharCode(0x00d4); break;
                                    case 'Otilde': ch = String.fromCharCode(0x00d5); break;
                                    case 'Ouml': ch = String.fromCharCode(0x00d6); break;
                                    case 'times': ch = String.fromCharCode(0x00d7); break;
                                    case 'Oslash': ch = String.fromCharCode(0x00d8); break;
                                    case 'Ugrave': ch = String.fromCharCode(0x00d9); break;
                                    case 'Uacute': ch = String.fromCharCode(0x00da); break;
                                    case 'Ucirc': ch = String.fromCharCode(0x00db); break;
                                    case 'Uuml': ch = String.fromCharCode(0x00dc); break;
                                    case 'Yacute': ch = String.fromCharCode(0x00dd); break;
                                    case 'THORN': ch = String.fromCharCode(0x00de); break;
                                    case 'szlig': ch = String.fromCharCode(0x00df); break;
                                    case 'agrave': ch = String.fromCharCode(0x00e0); break;
                                    case 'aacute': ch = String.fromCharCode(0x00e1); break;
                                    case 'acirc': ch = String.fromCharCode(0x00e2); break;
                                    case 'atilde': ch = String.fromCharCode(0x00e3); break;
                                    case 'auml': ch = String.fromCharCode(0x00e4); break;
                                    case 'aring': ch = String.fromCharCode(0x00e5); break;
                                    case 'aelig': ch = String.fromCharCode(0x00e6); break;
                                    case 'ccedil': ch = String.fromCharCode(0x00e7); break;
                                    case 'egrave': ch = String.fromCharCode(0x00e8); break;
                                    case 'eacute': ch = String.fromCharCode(0x00e9); break;
                                    case 'ecirc': ch = String.fromCharCode(0x00ea); break;
                                    case 'euml': ch = String.fromCharCode(0x00eb); break;
                                    case 'igrave': ch = String.fromCharCode(0x00ec); break;
                                    case 'iacute': ch = String.fromCharCode(0x00ed); break;
                                    case 'icirc': ch = String.fromCharCode(0x00ee); break;
                                    case 'iuml': ch = String.fromCharCode(0x00ef); break;
                                    case 'eth': ch = String.fromCharCode(0x00f0); break;
                                    case 'ntilde': ch = String.fromCharCode(0x00f1); break;
                                    case 'ograve': ch = String.fromCharCode(0x00f2); break;
                                    case 'oacute': ch = String.fromCharCode(0x00f3); break;
                                    case 'ocirc': ch = String.fromCharCode(0x00f4); break;
                                    case 'otilde': ch = String.fromCharCode(0x00f5); break;
                                    case 'ouml': ch = String.fromCharCode(0x00f6); break;
                                    case 'divide': ch = String.fromCharCode(0x00f7); break;
                                    case 'oslash': ch = String.fromCharCode(0x00f8); break;
                                    case 'ugrave': ch = String.fromCharCode(0x00f9); break;
                                    case 'uacute': ch = String.fromCharCode(0x00fa); break;
                                    case 'ucirc': ch = String.fromCharCode(0x00fb); break;
                                    case 'uuml': ch = String.fromCharCode(0x00fc); break;
                                    case 'yacute': ch = String.fromCharCode(0x00fd); break;
                                    case 'thorn': ch = String.fromCharCode(0x00fe); break;
                                    case 'yuml': ch = String.fromCharCode(0x00ff); break;
                                    case 'OElig': ch = String.fromCharCode(0x0152); break;
                                    case 'oelig': ch = String.fromCharCode(0x0153); break;
                                    case 'Scaron': ch = String.fromCharCode(0x0160); break;
                                    case 'scaron': ch = String.fromCharCode(0x0161); break;
                                    case 'Yuml': ch = String.fromCharCode(0x0178); break;
                                    case 'fnof': ch = String.fromCharCode(0x0192); break;
                                    case 'circ': ch = String.fromCharCode(0x02c6); break;
                                    case 'tilde': ch = String.fromCharCode(0x02dc); break;
                                    case 'Alpha': ch = String.fromCharCode(0x0391); break;
                                    case 'Beta': ch = String.fromCharCode(0x0392); break;
                                    case 'Gamma': ch = String.fromCharCode(0x0393); break;
                                    case 'Delta': ch = String.fromCharCode(0x0394); break;
                                    case 'Epsilon': ch = String.fromCharCode(0x0395); break;
                                    case 'Zeta': ch = String.fromCharCode(0x0396); break;
                                    case 'Eta': ch = String.fromCharCode(0x0397); break;
                                    case 'Theta': ch = String.fromCharCode(0x0398); break;
                                    case 'Iota': ch = String.fromCharCode(0x0399); break;
                                    case 'Kappa': ch = String.fromCharCode(0x039a); break;
                                    case 'Lambda': ch = String.fromCharCode(0x039b); break;
                                    case 'Mu': ch = String.fromCharCode(0x039c); break;
                                    case 'Nu': ch = String.fromCharCode(0x039d); break;
                                    case 'Xi': ch = String.fromCharCode(0x039e); break;
                                    case 'Omicron': ch = String.fromCharCode(0x039f); break;
                                    case 'Pi': ch = String.fromCharCode(0x03a0); break;
                                    case ' Rho ': ch = String.fromCharCode(0x03a1); break;
                                    case 'Sigma': ch = String.fromCharCode(0x03a3); break;
                                    case 'Tau': ch = String.fromCharCode(0x03a4); break;
                                    case 'Upsilon': ch = String.fromCharCode(0x03a5); break;
                                    case 'Phi': ch = String.fromCharCode(0x03a6); break;
                                    case 'Chi': ch = String.fromCharCode(0x03a7); break;
                                    case 'Psi': ch = String.fromCharCode(0x03a8); break;
                                    case 'Omega': ch = String.fromCharCode(0x03a9); break;
                                    case 'alpha': ch = String.fromCharCode(0x03b1); break;
                                    case 'beta': ch = String.fromCharCode(0x03b2); break;
                                    case 'gamma': ch = String.fromCharCode(0x03b3); break;
                                    case 'delta': ch = String.fromCharCode(0x03b4); break;
                                    case 'epsilon': ch = String.fromCharCode(0x03b5); break;
                                    case 'zeta': ch = String.fromCharCode(0x03b6); break;
                                    case 'eta': ch = String.fromCharCode(0x03b7); break;
                                    case 'theta': ch = String.fromCharCode(0x03b8); break;
                                    case 'iota': ch = String.fromCharCode(0x03b9); break;
                                    case 'kappa': ch = String.fromCharCode(0x03ba); break;
                                    case 'lambda': ch = String.fromCharCode(0x03bb); break;
                                    case 'mu': ch = String.fromCharCode(0x03bc); break;
                                    case 'nu': ch = String.fromCharCode(0x03bd); break;
                                    case 'xi': ch = String.fromCharCode(0x03be); break;
                                    case 'omicron': ch = String.fromCharCode(0x03bf); break;
                                    case 'pi': ch = String.fromCharCode(0x03c0); break;
                                    case 'rho': ch = String.fromCharCode(0x03c1); break;
                                    case 'sigmaf': ch = String.fromCharCode(0x03c2); break;
                                    case 'sigma': ch = String.fromCharCode(0x03c3); break;
                                    case 'tau': ch = String.fromCharCode(0x03c4); break;
                                    case 'upsilon': ch = String.fromCharCode(0x03c5); break;
                                    case 'phi': ch = String.fromCharCode(0x03c6); break;
                                    case 'chi': ch = String.fromCharCode(0x03c7); break;
                                    case 'psi': ch = String.fromCharCode(0x03c8); break;
                                    case 'omega': ch = String.fromCharCode(0x03c9); break;
                                    case 'thetasym': ch = String.fromCharCode(0x03d1); break;
                                    case 'upsih': ch = String.fromCharCode(0x03d2); break;
                                    case 'piv': ch = String.fromCharCode(0x03d6); break;
                                    case 'ensp': ch = String.fromCharCode(0x2002); break;
                                    case 'emsp': ch = String.fromCharCode(0x2003); break;
                                    case 'thinsp': ch = String.fromCharCode(0x2009); break;
                                    case 'zwnj': ch = String.fromCharCode(0x200c); break;
                                    case 'zwj': ch = String.fromCharCode(0x200d); break;
                                    case 'lrm': ch = String.fromCharCode(0x200e); break;
                                    case 'rlm': ch = String.fromCharCode(0x200f); break;
                                    case 'ndash': ch = String.fromCharCode(0x2013); break;
                                    case 'mdash': ch = String.fromCharCode(0x2014); break;
                                    case 'lsquo': ch = String.fromCharCode(0x2018); break;
                                    case 'rsquo': ch = String.fromCharCode(0x2019); break;
                                    case 'sbquo': ch = String.fromCharCode(0x201a); break;
                                    case 'ldquo': ch = String.fromCharCode(0x201c); break;
                                    case 'rdquo': ch = String.fromCharCode(0x201d); break;
                                    case 'bdquo': ch = String.fromCharCode(0x201e); break;
                                    case 'dagger': ch = String.fromCharCode(0x2020); break;
                                    case 'Dagger': ch = String.fromCharCode(0x2021); break;
                                    case 'bull': ch = String.fromCharCode(0x2022); break;
                                    case 'hellip': ch = String.fromCharCode(0x2026); break;
                                    case 'permil': ch = String.fromCharCode(0x2030); break;
                                    case 'prime': ch = String.fromCharCode(0x2032); break;
                                    case 'Prime': ch = String.fromCharCode(0x2033); break;
                                    case 'lsaquo': ch = String.fromCharCode(0x2039); break;
                                    case 'rsaquo': ch = String.fromCharCode(0x203a); break;
                                    case 'oline': ch = String.fromCharCode(0x203e); break;
                                    case 'frasl': ch = String.fromCharCode(0x2044); break;
                                    case 'euro': ch = String.fromCharCode(0x20ac); break;
                                    case 'image': ch = String.fromCharCode(0x2111); break;
                                    case 'weierp': ch = String.fromCharCode(0x2118); break;
                                    case 'real': ch = String.fromCharCode(0x211c); break;
                                    case 'trade': ch = String.fromCharCode(0x2122); break;
                                    case 'alefsym': ch = String.fromCharCode(0x2135); break;
                                    case 'larr': ch = String.fromCharCode(0x2190); break;
                                    case 'uarr': ch = String.fromCharCode(0x2191); break;
                                    case 'rarr': ch = String.fromCharCode(0x2192); break;
                                    case 'darr': ch = String.fromCharCode(0x2193); break;
                                    case 'harr': ch = String.fromCharCode(0x2194); break;
                                    case 'crarr': ch = String.fromCharCode(0x21b5); break;
                                    case 'lArr': ch = String.fromCharCode(0x21d0); break;
                                    case 'uArr': ch = String.fromCharCode(0x21d1); break;
                                    case 'rArr': ch = String.fromCharCode(0x21d2); break;
                                    case 'dArr': ch = String.fromCharCode(0x21d3); break;
                                    case 'hArr': ch = String.fromCharCode(0x21d4); break;
                                    case 'forall': ch = String.fromCharCode(0x2200); break;
                                    case 'part': ch = String.fromCharCode(0x2202); break;
                                    case 'exist': ch = String.fromCharCode(0x2203); break;
                                    case 'empty': ch = String.fromCharCode(0x2205); break;
                                    case 'nabla': ch = String.fromCharCode(0x2207); break;
                                    case 'isin': ch = String.fromCharCode(0x2208); break;
                                    case 'notin': ch = String.fromCharCode(0x2209); break;
                                    case 'ni': ch = String.fromCharCode(0x220b); break;
                                    case 'prod': ch = String.fromCharCode(0x220f); break;
                                    case 'sum': ch = String.fromCharCode(0x2211); break;
                                    case 'minus': ch = String.fromCharCode(0x2212); break;
                                    case 'lowast': ch = String.fromCharCode(0x2217); break;
                                    case 'radic': ch = String.fromCharCode(0x221a); break;
                                    case 'prop': ch = String.fromCharCode(0x221d); break;
                                    case 'infin': ch = String.fromCharCode(0x221e); break;
                                    case 'ang': ch = String.fromCharCode(0x2220); break;
                                    case 'and': ch = String.fromCharCode(0x2227); break;
                                    case 'or': ch = String.fromCharCode(0x2228); break;
                                    case 'cap': ch = String.fromCharCode(0x2229); break;
                                    case 'cup': ch = String.fromCharCode(0x222a); break;
                                    case 'int': ch = String.fromCharCode(0x222b); break;
                                    case 'there4': ch = String.fromCharCode(0x2234); break;
                                    case 'sim': ch = String.fromCharCode(0x223c); break;
                                    case 'cong': ch = String.fromCharCode(0x2245); break;
                                    case 'asymp': ch = String.fromCharCode(0x2248); break;
                                    case 'ne': ch = String.fromCharCode(0x2260); break;
                                    case 'equiv': ch = String.fromCharCode(0x2261); break;
                                    case 'le': ch = String.fromCharCode(0x2264); break;
                                    case 'ge': ch = String.fromCharCode(0x2265); break;
                                    case 'sub': ch = String.fromCharCode(0x2282); break;
                                    case 'sup': ch = String.fromCharCode(0x2283); break;
                                    case 'nsub': ch = String.fromCharCode(0x2284); break;
                                    case 'sube': ch = String.fromCharCode(0x2286); break;
                                    case 'supe': ch = String.fromCharCode(0x2287); break;
                                    case 'oplus': ch = String.fromCharCode(0x2295); break;
                                    case 'otimes': ch = String.fromCharCode(0x2297); break;
                                    case 'perp': ch = String.fromCharCode(0x22a5); break;
                                    case 'sdot': ch = String.fromCharCode(0x22c5); break;
                                    case 'lceil': ch = String.fromCharCode(0x2308); break;
                                    case 'rceil': ch = String.fromCharCode(0x2309); break;
                                    case 'lfloor': ch = String.fromCharCode(0x230a); break;
                                    case 'rfloor': ch = String.fromCharCode(0x230b); break;
                                    case 'lang': ch = String.fromCharCode(0x2329); break;
                                    case 'rang': ch = String.fromCharCode(0x232a); break;
                                    case 'loz': ch = String.fromCharCode(0x25ca); break;
                                    case 'spades': ch = String.fromCharCode(0x2660); break;
                                    case 'clubs': ch = String.fromCharCode(0x2663); break;
                                    case 'hearts': ch = String.fromCharCode(0x2665); break;
                                    case 'diams': ch = String.fromCharCode(0x2666); break;
                                    default: ch = ''; break;
                              }
                        }
                        i = semicolonIndex;
                  }
            }

            out += ch;
      }
      return out;     

}
