/* jQuery charmap plugin */
(function($) {
	var opts;
	var htmlContent;

	var charmap = [
		['&aacute;', '&#x00E1;', true, '=small a, acute accent'],
		['&Aacute;', '&#x00C1;', true, '=capital a, acute accent'],
		['&acirc;', '&#x00E2;', true, '=small a, circumflex accent'],
		['&Acirc;', '&#x00C2;', true, '=capital a, circumflex accent'],
		['&agrave;', '&#x00E0;', true, '=small a, grave accent'],
		['&Agrave;', '&#x00C0;', true, '=capital a, grave accent'],
		['&aring;', '&#x00E5;', true, '=small a, ring'],
		['&Aring;', '&#x00C5;', true, '=capital a, ring'],
		['&atilde;', '&#x00E3;', true, '=small a, tilde'],
		['&auml;', '&#x00E4;', true, '=small a, dieresis or umlaut mark'],
		['&Auml;', '&#x00C4;', true, '=capital a, dieresis or umlaut mark'],
		['&aelig;', '&#x00E6;', true, '=small ae diphthong (ligature)'],
		['&ccedil;', '&#x00E7;', true, '=small c, cedilla'],
		['&Ccedil;', '&#x00C7;', true, '=capital c, cedilla'],
		['&eth;', '&#x00F0;', true, '=small eth, icelandic'],
		['&eacute;', '&#x00E9;', true, '=small e, acute accent'],
		['&Eacute;', '&#x00C9;', true, '=capital e, acute accent'],
		['&ecirc;', '&#x00EA;', true, '=small e, circumflex accent'],
		['&Ecirc;', '&#x00CA;', true, '=capital e, circumflex accent'],
		['&egrave;', '&#x00E8;', true, '=small e, grave accent'],
		['&Egrave;', '&#x00C8;', true, '=capital e, grave accent'],
		['&euml;', '&#x00EB;', true, '=small e, dieresis or umlaut mark'],
		['&iacute;', '&#x00ED;', true, '=small i, acute accent'],
		['&Iacute;', '&#x00CD;', true, '=capital i, acute accent'],
		['&icirc;', '&#x00EE;', true, '=small i, circumflex accent'],
		['&Icirc;', '&#x00CE;', true, '=capital i, circumflex accent'],
		['&igrave;', '&#x00EC;', true, '=small i, grave accent'],
		['&iuml;', '&#x00EF;', true, '=small i, dieresis or umlaut mark'],
		['&ntilde;', '&#x00F1;', true, '=small n, tilde'],
		['&oacute;', '&#x00F3;', true, '=small o, acute accent'],
		['&Oacute;', '&#x00D3;', true, '=capital o, acute accent'],
		['&ocirc;', '&#x00F4;', true, '=small o, circumflex accent'],
		['&Ocirc;', '&#x00D4;', true, '=capital o, circumflex accent'],
		['&ograve;', '&#x00F2;', true, '=small o, grave accent'],
		['&Ograve;', '&#x00D2;', true, '=capital o, grave accent'],
		['&oslash;', '&#x00F8;', true, '=small o, slash'],
		['&otilde;', '&#x00F5;', true, '=small o, tilde'],
		['&ouml;', '&#x00F6;', true, '=small o, dieresis or umlaut mark'],
		['&Ouml;', '&#x00D6;', true, '=capital o, dieresis or umlaut mark'],
		['&szlig;', '&#x00DF;', true, '=small sharp s, german (sz ligature)'],
		['&thorn;', '&#x00FE;', true, '=small thorn, icelandic'],
		['&uacute;', '&#x00FA;', true, '=small u, acute accent'],
		['&Uacute;', '&#x00DA;', true, '=capital u, acute accent'],
		['&ucirc;', '&#x00FB;', true, '=small u, circumflex accent'],
		['&ugrave;', '&#x00F9;', true, '=small u, grave accent'],
		['&uuml;', '&#x00FC;', true, '=small u, dieresis or umlaut mark'],
		['&Uuml;', '&#x00DC;', true, '=capital u, dieresis or umlaut mark'],
		['&yacute;', '&#x00FD;', true, '=small y, acute accent'],
		['&Yacute;', '&#x00DD;', true, '=capital y, acute accent'],
		['&yuml;', '&#x00FF;', true, '=small y, dieresis or umlaut mark'],
		['&abreve;', '&#x0103;', true, '=small a, breve'],
		['&Abreve;', '&#x0102;', true, '=capital a, breve'],
		['&amacr;', '&#x0101;', true, '=small a, macron'],
		['&aogon;', '&#x0105;', true, '=small a, ogonek'],
		['&cacute;', '&#x0107;', true, '=small c, acute accent'],
		['&Cacute;', '&#x0106;', true, '=capital c, acute accent'],
		['&ccaron;', '&#x010D;', true, '=small c, caron'],
		['&Ccaron;', '&#x010C;', true, '=capital c, caron'],
		['&dcaron;', '&#x010F;', true, '=small d, caron'],
		['&dstrok;', '&#x0111;', true, '=small d, stroke'],
		['&ecaron;', '&#x011B;', true, '=small e, caron'],
		['&emacr;', '&#x0113;', true, '=small e, macron'],
		['&eogon;', '&#x0119;', true, '=small e, ogonek'],
		['&Eogon;', '&#x0118;', true, '=capital e, ogonek'],
		['&Idot;', '&#x0130;', true, '=capital i, dot above'],
		['&lstrok;', '&#x0142;', true, '=small l, stroke'],
		['&Lstrok;', '&#x0141;', true, '=capital l, stroke'],
		['&nacute;', '&#x0144;', true, '=small n, acute accent'],
		['&Nacute;', '&#x0143;', true, '=capital n, acute accent'],
		['&eng;', '&#x014B;', true, '=small eng, lapp'],
		['&ncaron;', '&#x0148;', true, '=small n, caron'],
		['&odblac;', '&#x0151;', true, '=small o, double acute accent'],
		['&Odblac;', '&#x0150;', true, '=capital o, double acute accent'],
		['&oelig;', '&#x0153;', true, '=small oe ligature'],
		['&OElig;', '&#x0152;', true, '=capital oe ligature'],
		['&rcaron;', '&#x0159;', true, '=small r, caron'],
		['&sacute;', '&#x015B;', true, '=small s, acute accent'],
		['&Sacute;', '&#x015A;', true, '=capital s, acute accent'],
		['&scaron;', '&#x0161;', true, '=small s, caron'],
		['&Scaron;', '&#x0160;', true, '=capital s, caron'],
		['&scedil;', '&#x015F;', true, '=small s, cedilla'],
		['&Scedil;', '&#x015E;', true, '=capital s, cedilla'],
		['&tcaron;', '&#x0165;', true, '=small t, caron'],
		['&tcedil;', '&#x0163;', true, '=small t, cedilla'],
		['&Tcedil;', '&#x0162;', true, '=capital t, cedilla'],
		['&udblac;', '&#x0171;', true, '=small u, double acute accent'],
		['&Udblac;', '&#x0170;', true, '=capital u, double acute accent'],
		['&uring;', '&#x016F;', true, '=small u, ring'],
		['&utilde;', '&#x0169;', true, '=small u, tilde'],
		['&zcaron;', '&#x017E;', true, '=small z, caron'],
		['&Zcaron;', '&#x017D;', true, '=capital z, caron'],
		['&zdot;', '&#x017C;', true, '=small z, dot above'],
		['&Alpha;',   '&#913;',  true, 'Alpha'],
		['&Beta;',    '&#914;',  true, 'Beta'],
		['&Gamma;',   '&#915;',  true, 'Gamma'],
		['&Delta;',   '&#916;',  true, 'Delta'],
		['&Epsilon;', '&#917;',  true, 'Epsilon'],
		['&Zeta;',    '&#918;',  true, 'Zeta'],
		['&Eta;',     '&#919;',  true, 'Eta'],
		['&Theta;',   '&#920;',  true, 'Theta'],
		['&Iota;',    '&#921;',  true, 'Iota'],
		['&Kappa;',   '&#922;',  true, 'Kappa'],
		['&Lambda;',  '&#923;',  true, 'Lambda'],
		['&Mu;',      '&#924;',  true, 'Mu'],
		['&Nu;',      '&#925;',  true, 'Nu'],
		['&Xi;',      '&#926;',  true, 'Xi'],
		['&Omicron;', '&#927;',  true, 'Omicron'],
		['&Pi;',      '&#928;',  true, 'Pi'],
		['&Rho;',     '&#929;',  true, 'Rho'],
		['&Sigma;',   '&#931;',  true, 'Sigma'],
		['&Tau;',     '&#932;',  true, 'Tau'],
		['&Upsilon;', '&#933;',  true, 'Upsilon'],
		['&Phi;',     '&#934;',  true, 'Phi'],
		['&Chi;',     '&#935;',  true, 'Chi'],
		['&Psi;',     '&#936;',  true, 'Psi'],
		['&Omega;',   '&#937;',  true, 'Omega'],
		['&alpha;',   '&#945;',  true, 'alpha'],
		['&beta;',    '&#946;',  true, 'beta'],
		['&gamma;',   '&#947;',  true, 'gamma'],
		['&delta;',   '&#948;',  true, 'delta'],
		['&epsilon;', '&#949;',  true, 'epsilon'],
		['&zeta;',    '&#950;',  true, 'zeta'],
		['&eta;',     '&#951;',  true, 'eta'],
		['&theta;',   '&#952;',  true, 'theta'],
		['&iota;',    '&#953;',  true, 'iota'],
		['&kappa;',   '&#954;',  true, 'kappa'],
		['&lambda;',  '&#955;',  true, 'lambda'],
		['&mu;',      '&#956;',  true, 'mu'],
		['&nu;',      '&#957;',  true, 'nu'],
		['&xi;',      '&#958;',  true, 'xi'],
		['&omicron;', '&#959;',  true, 'omicron'],
		['&pi;',      '&#960;',  true, 'pi'],
		['&rho;',     '&#961;',  true, 'rho'],
		['&sigmaf;',  '&#962;',  true, 'final sigma'],
		['&sigma;',   '&#963;',  true, 'sigma'],
		['&tau;',     '&#964;',  true, 'tau'],
		['&upsilon;', '&#965;',  true, 'upsilon'],
		['&phi;',     '&#966;',  true, 'phi'],
		['&chi;',     '&#967;',  true, 'chi'],
		['&psi;',     '&#968;',  true, 'psi'],
		['&omega;',   '&#969;',  true, 'omega'], 
		['&frac12;', '&#x00BD;', true, '=fraction one-half'],
		['&frac14;', '&#x00BC;', true, '=fraction one-quarter'],
		['&frac34;', '&#x00BE;', true, '=fraction three-quarters'],
		['&frac23;', '&#x2154;', true, '=fraction two-thirds'],
		['&sup1;', '&#x00B9;', true, '=superscript one'],
		['&sup2;', '&#x00B2;', true, '=superscript two'],
		['&sup3;', '&#x00B3;', true, '=superscript three'],
		['&times;', '&#x00D7;', true, '/times b: =multiply sign'],
		['&pound;', '&#x00A3;', true, '=pound sign'],
		['&micro;', '&#x00B5;', true, '=micro sign'],
		['&deg;', '&#x00B0;', true, '=degree sign'],
		['&ordm;', '&#x00BA;', true, '=ordinal indicator, masculine'],
		['&sect;', '&#x00A7;', true, '=section sign'],
		['&copy;', '&#x00A9;', true, '=copyright sign'],
		['&sung;', '&#x266A;', true, '=music note (sung text sign)'],
		['&iexcl;', '&#x00A1;', true, '=inverted exclamation mark'],
		['&quest;', '&#x003F;', true, '=question mark'],
		['&iquest;', '&#x00BF;', true, '=inverted question mark'],
		['&laquo;', '&#x00AB;', true, '=angle quotation mark, left'],
		['&raquo;', '&#x00BB;', true, '=angle quotation mark, right'],
		['&lsquo;', '&#x2018;', true, '=single quotation mark, left'],
		['&rsquo;', '&#x2019;', true, '=single quotation mark, right'],
		['&ldquo;', '&#x201C;', true, '=double quotation mark, left'],
		['&rdquo;', '&#x201D;', true, '=double quotation mark, right'],
		['&hellip;', '&#x2026;', true, '=ellipsis (horizontal)']
	];

	/* charMap plugin */
	$.fn.charmap = function(options) {
		opts = $.extend({}, $.fn.charmap.defaults, options);
		initialize();

		return this.each(function(){
			$(this).data('charmap', opts);
			$(this).click(function(){
				start($(this));
				return false;
			});
		});
	};

	$.fn.charmap.defaults = {
		target: null,
		cbSelect: null
	};

	$.fn.charmap.previewChar = function(codeA, codeB, codeN) {
		var elmA = document.getElementById('codeA');
		var elmB = document.getElementById('codeB');
		var elmV = document.getElementById('codeV');
		var elmN = document.getElementById('codeN');

		if (codeA=='#160;') elmV.innerHTML = '__';
		else elmV.innerHTML = '&' + codeA;
		elmN.innerHTML = codeN;

		elmA.innerHTML = '&amp;' + codeB;
		elmB.innerHTML = '&amp;' + codeA;
	};

	$.fn.charmap.selectChar = function(chr){
		if(opts.cbSelect) opts.cbSelect(chr, opts);
		//$().charmap.close();
	};

	$.fn.charmap.close = function(){
		$('#charmapHTML').hide();
	};

	function initialize(){
		if(!$('#charmapHTML').length){
			$('#charmapHTML').remove();
			var htmlContent = ''
				+ '<table align="center">'
				+ '	<tr>'
				+ '		<td colspan="2"><a href="./" onclick="$().charmap.close(); return false;" style="float:right; font-weight:bold; font-size:20px; text-decoration:none; color:#4a4334; line-height:18px;">&#215;<\/a><\/td>'
				+ '	<\/tr>'
				+ '	<tr>'
				+ '		<td id="charmap" rowspan="2" align="left" valign="top">'
				+ '			<!-- Chars will be rendered here -->'
				+ '		<\/td>'
				+ '		<td width="105" align="right" valign="top">'
				+ '			<table width="100" style="height: 100px">'
				+ '				<tr>'
				+ '					<td class="charmapOver" style="font-size: 40px; height:80px;" id="codeV">&nbsp;<\/td>'
				+ '				<\/tr>'
				+ '				<tr>'
				+ '					<td style="font-size:11px; text-align:center;" id="codeN">&nbsp;<\/td>'
				+ '				<\/tr>'
				+ '			<\/table>'
				+ '		<\/td>'
				+ '	<\/tr>'
				+ '	<tr>'
				+ '		<td valign="bottom">'
				+ '			<table width="100" align="right">'
				+ '				<tr><td align="center" style="border:1px solid #A09785; background:#F4F1EA;">'
				+ '					HTML-Code'
				+ '					<div style="font-size:14px; font-weight:bold; padding:3px 0;" id="codeA" align="center">&nbsp;<\/div>'
				+ '				<\/td><\/tr>'
				+ '				<tr><td style="font-size:5px;">&nbsp;<\/td><\/tr>'
				+ '				<tr><td align="center" style="border:1px solid #A09785; background:#F4F1EA;">'
				+ '					NUM-Code'
				+ '					<div style="font-size:14px; font-weight:bold; padding:3px 0;" id="codeB" align="center">&nbsp;<\/div>'
				+ '				<\/td><\/tr>'
				+ '			<\/table>'
				+ '		<\/td>'
				+ '	<\/tr>'
				+ '<\/table>';

			var html = '<div id="charmapHTML">' + htmlContent + '</div>';
			$('body').append(html);
			$('#charmap').html(renderCharMapHTML());
		}
	}

	function renderCharMapHTML(){
		var charsPerRow = 20, i;
		var html = '<table><tr>';
		var cols=-1;

		for (i=0; i<charmap.length; i++) {
			if (charmap[i][2]==true) {
				cols++;
				html += ''
					+ '<td class="charmap"'
					+ ' ><a'
					+ ' href="./"'
					+ ' onclick="$().charmap.selectChar(\'' + charmap[i][1].substring(2,charmap[i][1].length-1) + '\'); return false;"'
					+ ' onfocus="$().charmap.previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');"'
					+ ' onmouseover="$().charmap.previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');"'
					+ ' title="' + charmap[i][3] + '">'
					+ charmap[i][1]
					+ '</a></td>';
				if ((cols+1) % charsPerRow == 0)
					html += '</tr><tr>';
			}
		}

		if (cols % charsPerRow > 0) {
			var padd = charsPerRow - (cols % charsPerRow);
			for (var i=0; i<padd-1; i++)
				html += '<td class="empty">&nbsp;</td>';
		}

		html += '</tr></table>';

		return html;
	}

	function getUrl(url){
		var content = '';
		jQuery.ajax({
			url:url,
			success:function(html){
				content = html;
				},
			async:false
		});
		return content;
	}

	function start(obj){
		if($('#charmapHTML:visible').length>0){
			$.fn.charmap.close();
			return;
			}
		opts = obj.data('charmap');
		$('#charmapHTML').css( opts.target.offset() ).show();
	};
})(jQuery);


