/*
    RealTown Envelope plugin
    Allows you to make any hyperlink "starrable"
    by adding an image next to it that can be clicked
    for starring/unstarring the link

    Copyright (c)2007 RealTown(r)
*/



function RT_Envelope() {
    var envelope_open = '/images/buttons/mail_read_16.png';
    var envelope_closed = '/images/buttons/mail_unread_16.png';
    
    var toggleEnvelope = function(event) {
        Event.stop(event);
        var element = Event.findElement(event, 'A');
        var id;
        if(!(id = element.getAttribute('id'))) return false;
        
        // Submit ajax response to the anchor's HREF attribute
        var href = element.getAttribute('href');
        if(!href) return false;
        
        new Ajax.Request(href, {
            method: 'get',
            onSuccess: function(t, json) {
               
                // Find img with class envelope within this anchor
                var id = 'envelopeimg_' + json.id;
                var rowid = json.id;
                var subjectid = 'subjectlink_' + json.id;
                
                if(!($(id))) return false;
                
                var className = json.read ? 'read' : 'unread';
                
                $(rowid).removeClassName(json.read ? 'unread' : 'read');
                $(subjectid).removeClassName(json.read ? 'unread' : 'read');

                if(!$(rowid).hasClassName(className)){
                	$(rowid).addClassName(className);
                }
                
                if(!$(subjectid).hasClassName(className)){
                	$(subjectid).addClassName(className);
                }
                
                
                
                $(id).src = json.read ? envelope_open : envelope_closed;
                
            },
            onFailure: function(t) {
                alert('There was an error processing the action.\n\nError Message: ' + t.errorText);
            }
        });
        
        return false;
    }
    
    
    
    this.activate = function(element) {
        if(!(element = $(element))) return false;
        Event.observe(element, 'click', toggleEnvelope.bindAsEventListener(RT_Envelope));
    }
}


RT_Envelope.prototype = {

    // Find all envelopes on the page with the given class name
    // and make them clickable
    
    find:       function(selector) {
    	            
                    if(typeof(selector) == 'undefined') var selector = '.envelope';
                    var envelopes = $$(selector);
                    var envelope;
                    for(var i = 0; i < envelopes.length; i++) {
                        
                    	envelope = envelopes[i];
                        this.activate(envelope);
                    }
                }
}


if(!window.RT) { window['RT'] = {}; }
window['RT']['envelope'] = new RT_Envelope();