(function($) {
$.extend({ metadata:{defaults:{type: 'class', name: 'metadata', cre: /({.*})/, single: 'metadata'}, setType:function( type, name ){ this.defaults.type = type; this.defaults.name = name; }, get: function( elem, opts ){ var settings = $.extend({},this.defaults,opts); if(!settings.single.length){settings.single = 'metadata'; } var data = $.data(elem, settings.single); if ( data ) return data; data = "{}"; if(settings.type == "class" ) { var m = settings.cre.exec( elem.className ); if(m){ data = m[1]; } } else if (settings.type == "elem") { if(!elem.getElementsByTagName){  return undefined; } var e = elem.getElementsByTagName(settings.name); if(e.length) { data = $.trim(e[0].innerHTML); } } else if(elem.getAttribute != undefined) { var attr = elem.getAttribute( settings.name); if (attr){ data = attr; } } if(data.indexOf( '{' )<0){ data = "{" + data + "}"; } data = eval("(" + data + ")"); $.data( elem, settings.single, data ); return data;}} });
$.fn.metadata = function( opts ){ return $.metadata.get( this[0], opts ); };
})(jQuery);