(function($) {
	$.meta = {
	  type: "class",
	  name: "metadata",
	  setType: function(type,name){
	    this.type = type;
	    this.name = name;
	  },
	  cre: /({.*})/,
	  single: 'metadata'
	};
	$.fn.data = function(mm) {
	  var result=null;
	  this.each(function (i){
        if ( this.nodeType == 9 || $.isXMLDoc(this)) return;
	      
	      var data = "{}";
	      
	      if ( $.meta.type == "class" ) {
	        var m = $.meta.cre.exec( this.className );
	        if ( m )
	          data = m[1];
	      } else if ( $.meta.type == "elem" ) {
	      	if( !this.getElementsByTagName ) return;
	        var e = this.getElementsByTagName($.meta.name);
	        if ( e.length )
	          data = $.trim(e[0].innerHTML);
	      } else if ( this.getAttribute != undefined ) {
	        var attr = this.getAttribute( $.meta.name );
	        if ( attr )
	          data = attr;
	      }
	      
	      if ( !/^{/.test( data ) )
	        data = "{" + data + "}";
	      if(mm)
	      {
	        for(var i=0;i<mm.length;i++)
	        {
	            data=data.replace(mm[i].p,mm[i].r);
            }
	      }
	      eval("data = " + data);
	      result=data;
	  });
	  return result;
	};
})(jQuery);