jQuery.fn.subscribe = function(url, options) {
	if(url == null) return;
	
	var settings = {
            url : url, // post changes to 
            mid       : '',
            key       : '',
            command   : '',
            status    : '',
            hover     : ''
        };
	
        if(options) {
            jQuery.extend(settings, options);
        };
   
        var container = jQuery(this);

        switch(settings.command) {
            case 'set': 
                 settings.status = '_jstr_notsubscribed ';
                 settings.hover = '_jstr_subscribed';
                 var $div = $('<div class="_jstr_subscribe"></div>')
                   .append('<a href="#sbscrb" title="Subscribe it">&nbsp;</a>')
                   .appendTo(container);
                 break;
            case 'unset':
                 settings.status = '_jstr_subscribed';
                 settings.hover = '_jstr_delsubscribed';
                 var $div = $('<div class="_jstr_subscribe"></div>')
                   .append('<a href="#sbscrb" title="Unsubscribe it">&nbsp;dfghdfghdfgh</a>')
                   .appendTo(container);
                 break;
        }

	jQuery.extend(container, {url: settings.url});
	
        var subscribe_status = jQuery(container).children('._jstr_subscribe');
	
        subscribe_status.mouseover(function(){
            event.drain();
            event.fill();
        })
        .mouseout(function(){
            event.drain();
            event.reset();
        })
        .focus(function(){
            event.drain();
            event.fill();
        })
        .blur(function(){
            event.drain();
            event.reset();
        });

        subscribe_status.click(function(){
	   jQuery.post(container.url, 
                       {"mid": settings.mid, "key": settings.key, "command": settings.command}, 
                       function(txt){ 
                          if(txt=='OK') {
                             if(settings.command=="unset") {
                                settings.status = '_jstr_notsubscribed';
                                settings.hover = '_jstr_subscribed';
                                settings.command="set";
                             }
                             else if(settings.command=="set") {
                                settings.status = '_jstr_subscribed';
                                settings.hover = '_jstr_delsubscribed';
                                settings.command="unset";
                             }
                          }
                          event.drain();
                          event.reset();
                       });
	   return true;
        });


        var event = {
		fill: function(){
			subscribe_status.addClass(settings.hover).end();
		},
		drain: function() {
			subscribe_status.filter('._jstr_subscribed').removeClass('_jstr_subscribed').end()
			                .filter('._jstr_notsubscribed').removeClass('_jstr_notsubscribed').end()
                                        .filter('._jstr_delsubscribed').removeClass('_jstr_delsubscribed').end();
		},
		reset: function(){
			subscribe_status.addClass(settings.status).end();
		}
        };   
	
        event.drain();
        event.reset();

        return(this);	
};