/*
    name : errorMessenger
    file : jquery.errorMessenger.js
    author : gregory tomlinson
    copyright: (c) 2010 bit.ly
    Dual licensed under the MIT and GPL licenses.
    ///////////////////////////
    ///////////////////////////        
    dependencies : jQuery 1.4.2, jquery.cookie.js, jquery.escapeHTML.js
    ///////////////////////////
    ///////////////////////////
    
    Event listeners: errorMessage
    
*/

(function($) {
    
    $.fn.errorMessenger = function( options ) {
        // extend the defaults settings
        var el = this, o = $.extend(true, defaults, options), 
            timer, elements=[], messageCounter=0, activeMessage = false;
        
        el.bind('errorMessage', messageHandler)
        el.bind('statusMessage', messageHandler)        
        el.bind('successMessage', successMessageHandler)    

        //el.trigger('successMessage', { text : 'this is a nice little test message here blagh blah' })                  
        
        
        return this;

        function statusMessageHandler( e, data) {
            renderMessage( data.text, "" );            
        }

        function successMessageHandler(e,data) {
            renderMessage( data.text, "successMessage" );
        }        
        
        function messageHandler(e,data) {
            renderMessage( data.text, "topErrorMessage" );
            el.trigger('track', { 'plugin:errorMessenger' : data.text } );
        }
        
        function renderMessage( text, cssClass ) {
            console.log('render message', text)
            messageCounter=2;
            // $('html,body').animate({scrollTop:0}, 'slow', function() {
            //     messageCounter-=1;
            //     if(messageCounter===0) 
            // });

            scrollTopCallback( $.escapeHTML( text ), cssClass)            
            
        }
        
        function renderHTML( text, cssClass ) {
            var html  = '';
            html += '<div class="'+cssClass+' basicOverlayMessageContainer" style="display:none;">'
                html += '<div class="basicOverlayMessageContainerInner">' ;
                html += '<span class="messageIconContainer"></span>'
                html += '<div class="basicMessageTextContainer">'  + text + '</div>'
                html += '<div class="hr"><hr /></div>'
                html+= '</div>'
            html += '</div>'
            
            return $(html)
        }
        
        
        
        function scrollTopCallback(text, cssClass) {
            // render the message window
            var d = renderHTML( text, cssClass ).appendTo(el);
                            
            //positionModal(d)  
            elements.push( d );
                                      
            if(!activeMessage) {
                d.slideDown();                
                activeMessage = true;    
                setCleanup();                                
            }
        }
        
        function positionModal( elem ) {
            var $w = $(window), scrollT = $w.scrollTop(), scrollL = $w.scrollLeft(), 
                height = $w.height(), width = $w.width(), $c = $('#container');
                

            elem.css( { 
                top : 30,
                left : Math.round( ((scrollL + width) / 3) - elem.width()/2 + 40 ) || 100                    
            });
        }
        
        
        function setCleanup() {
            if(timer) { clearTimeout(timer); }
            
            timer = setTimeout( cleanupMessage, o.messageClearInterval );
        }
        
        function cleanupMessage() {
            var d = elements.shift();
            if(!d) return;
            d.slideUp('normal', function() {
                d.remove();
            });
            
            if( elements.length > 0 ) {
                elements[0].slideDown();
                setCleanup();
            } else {
                activeMessage=false;
            }

        }
        
        

    }
    
    
    var defaults = {
        messageClearInterval : 3000
    };
    
})(jQuery);
