(function($){
	$.fn.extend({ 
		spanlink: function(options) {

			var defaults = {
				base16: "0A12B34C56D78E9F",
				startwith: "spanlink_"
			};
			
			function getOtherClass(classes){
				var s = '';
				var array = classes.split(' ');
				
				for (var i = 0; i < array.length; i++){
					if ( array[i].substr(0, options.startwith.length) != options.startwith ){
						s += array[i] + ' ';
					}
				}
				
				return s;
			}
			
			function getStringToDecode(classes) {
				var s = '';
				var array = classes.split(' ');
				for (var i = 0; i < array.length; i++){
					if ( array[i].substr(0, options.startwith.length) == options.startwith ){
						s = array[i];
						break;
					}
				}
				return s.replace(options.startwith, ""); 
			}
			
			function decode(str) {
				var s = '';
				for(var i = 0; i < str.length; i += 2){
					var ch = options.base16.indexOf(str.charAt(i));
					var cl = options.base16.indexOf(str.charAt(i+1));
					s += String.fromCharCode((ch*16)+cl);
				}
				return s;			
			}

			var options = $.extend(defaults, options);
			
			return this.each(function() {
				var $this = $(this);
				var classes = $this.attr('class');
				var s = getStringToDecode(classes);
				var url = decode(s);
				var otherClass = getOtherClass(classes);
				var target = '';
				if($this.hasClass("externe")) {
					target = ' target="_blank"';
				}
				var title = $this.attr('title');
				$this.after('<a href="' + url + '" title="' + title + '"' + target + ' class="' + otherClass + '">' + $this.html() + '</a>').remove();
			});
			
		}
	});
})(jQuery);