function getListWidth(ulID, liClass)
{
    var width = 0;
        
    $('#'+ulID).append('<li id="CSS_TEST" class="'+liClass+'" style="display:none;">');
    width = $('#CSS_TEST','#'+ulID).width();
    width += parseInt($('#CSS_TEST','#'+ulID).css("padding-left"),10);
    width += parseInt($('#CSS_TEST','#'+ulID).css("padding-right"),10);
    var marginleft = parseInt($('#CSS_TEST','#'+ulID).css("margin-left"),10);
    var marginright = parseInt($('#CSS_TEST','#'+ulID).css("margin-right"),10);
    
    if(!isNaN(marginleft))
        width += marginleft;
    
    if(!isNaN(marginright))
        width += marginright;
    
    return width;
    
}


function getTwitterContent(str)
{
    return str.text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(url) {
        return '<a href="'+url+'" target="_blank">'+url+'</a>';
    }).replace(/\B@([_a-z0-9]+)/ig, function(reply) {
        return  reply.charAt(0)+'<a href="http://twitter.com/'+reply.substring(1)+'" target="_blank">'+reply.substring(1)+'</a>';
    }).replace(/\B#([_a-z0-9]+)/ig, function(hash) {
        return  '<a href="http://twitter.com/search?q=%23'+hash.substring(1)+'" target="_blank">'+hash+'</a>';
    });
}

function relative_time(time_value) {
    //time_value ex. "Tue, 22 Sep 2009 06:12:33 +0000"
    //var values = time_value.split(" ");
    //time_value = values[1] + " " + values[2] + ", " + values[5] + " " + values[3];
    var parsed_date = Date.parse(time_value);
    var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
    var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
    //delta = delta + (relative_to.getTimezoneOffset() * 60);
    
    if (delta < 60) {
        return 'mindre &auml;n en minut sedan';
    }
    else if(delta < 120) {
        return 'ungef&auml;r en minut sedan';
    }
    else if(delta < (60*60)) {
        return (parseInt(delta / 60)).toString() + ' minuter sedan';
    }
    else if(delta < (120*60)) {
        return 'ungef&auml;r en timme sedan';
    }
    else if(delta < (24*60*60)) {
        return 'ungef&auml;r ' + (parseInt(delta / 3600)).toString() + ' timmar sedan';
    }
    else if(delta < (48*60*60)) {
        return '1 dag sedan';
    }
    else {
        return (parseInt(delta / 86400)).toString() + ' dagar sedan';
    }
}


(function($) {
    
    $.fn.twitterFeed = function(interval, user)
    {
        var divId = $(this).attr("id");
        var lastID = 0;
        var searchInterval = 30000;
        var twitterUser = "SVTMello";
        var query = "http://search.twitter.com/search.json?callback=?&rpp=20&q=from:";
        var loaderImgUrl = "/content/2/c6/12/09/08/ajax-loader.gif";
        
        if(interval)
        {
            searchInterval = interval;
        }
        
        if(user)
        {
            twitterUser = user;
        }
        
        query += user;
        
        
        
        var twitterList = function() {
            
            $('#' + divId).append('<a href=\"javascript:void(0);\" id="'+divId + '_noteLink"><div id="' + divId+ '_twitterNote" style="clear:both;" class="twitterFeed_note"></div></a>');            $('#' + divId).append('<ul id="' + divId+ '_twitterFeed" class="twitterFeed_content"></ul>');
            $('#' + divId).append('<div id="' + divId+ '_twitterLinks" style="clear:both;" class="twitterFeed_links"></div>');
            $('#' + divId).append('<div id="' + divId+ '_twitterLoader" style="clear:both;" class="twitterFeed_loader"><img src="' + loaderImgUrl + '" /></div>');
            
            
            var counter = 0;
            var newMessages = 0;
            var currentIndex = 0;
            var listWidth = getListWidth(divId,'twitterFeed_list_element');
            
            function animateTo(position)
            {
                $('#'+divId + '_twitterFeed').animate({ marginLeft: -(position*listWidth) }, 200);
            }
            
            $('#'+divId + '_twitterLinks').append('<div id="nextBtn"><a href=\"javascript:void(0);\">&lsaquo; Nyare</a></div>');
            $('#'+divId + '_twitterLinks').append('<div id="prevBtn"><a href=\"javascript:void(0);\">&Auml;ldre &rsaquo;</a></div>');
            $('#'+divId + '_twitterNote').hide();
            $('#nextBtn').hide();
            $('#prevBtn').hide();
            
            
            
            function showNextBtn()
            {
                $('#nextBtn').show();
            }
            
            function hideNextBtn()
            {
                $('#nextBtn').hide();
            }
            
            function showPrevBtn()
            {
                $('#prevBtn').show();
            }
            
            function hidePrevBtn()
            {
                $('#prevBtn').hide();
            }
            
            function showNewMessageNote(count)
            {
                $('#'+divId + '_twitterNote').html("<strong>" + count + "</strong> nya meddelanden").fadeIn(1000);
            }
            
            function hideNewMessageNote()
            {
                $('#'+divId + '_twitterNote').fadeOut(1000);
            }
            
            $("a","#nextBtn").click(function(){		
				animateTo(--currentIndex);
                
                if(currentIndex > 0)
                {
                    showNextBtn();
                }
                else
                {
                    hideNextBtn();
                }
                
                if(currentIndex < counter)
                {
                    showPrevBtn();
                }
                else
                {
                    hidePrevBtn();
                }
                
                if(newMessages > 0 && currentIndex < newMessages)
                {
                    showNewMessageNote(--newMessages);
                }
                
                if(newMessages == 0)
                {
                    hideNewMessageNote();
                }
                
			});
            
            $("a","#prevBtn").click(function(){		
				animateTo(++currentIndex);
                
                if(currentIndex > 0)
                {
                    showNextBtn();
                }
                else
                {
                    hideNextBtn();
                }
                
                if(currentIndex < counter-1)
                {
                    showPrevBtn();
                }
                else
                {
                    hidePrevBtn();
                }
                
                if(newMessages > 0 && currentIndex < newMessages)
                {
                    showNewMessageNote(--newMessages);
                }
                
                if(newMessages == 0)
                {
                    hideNewMessageNote();
                }
			});
            
            $('#'+divId + '_noteLink').click(function() {
                
                hideNewMessageNote();
                
                animateTo(0);
                
                currentIndex = 0;
                newMessages = 0;
                
                hideNextBtn();
                
                if(counter > 0)
                {
                    showPrevBtn();
                }
            });
            
            $('#'+divId + '_noteLink').hover(
              function() {
                $('#'+divId + '_noteLink').css('cursor', 'pointer')
              },
              function() {
                $('#'+divId + '_noteLink').css('cursor', 'default');
              }
            );
            
            
            var list = {
                showLoadingbar: function(value)
                {
                    if(value)
                    {
                        $('#' + divId+ '_twitterLoader').show();
                    }
                    else
                    {
                        $('#' + divId+ '_twitterLoader'+'#' + divId+ '_twitterLoader').hide();
                    }
                },
                addFirst: function(twitterText, twitterInfo, cssClass, cssId, moveToPosition, showNote)
                {
                    $('#'+divId + '_twitterFeed').prepend('<li id="' + cssId + '" class="' + cssClass + '"><span class="twitter_message_text">'+twitterText+'</span><p class="twitter_info">('+twitterInfo+')</p></li>');
                    var newWidth = $('#'+divId + '_twitterFeed').width() + listWidth + 20;
                    $('#'+divId + '_twitterFeed').css('width',newWidth);
                    counter++;
                    
                    if(showNote)
                    {
                        showNewMessageNote(++newMessages);
                    }
                    
                    if(counter > 0 && !moveToPosition)
                    {
                        currentIndex++;
                        $('#'+divId + '_twitterFeed').css('margin-left', -(currentIndex*listWidth));
                        showNextBtn();
                    }
                    else if(moveToPosition)
                    {
                        animateTo(0);
                        currentIndex = 0;
                    }
                    
                    if(currentIndex < counter)
                    {
                        showPrevBtn();
                    }
                    
                },
                addLast: function(twitterText, twitterInfo, cssClass, cssId)
                {
                    $('#'+divId + '_twitterFeed').append('<li id="' + cssId + '" class="' + cssClass + '"><span class="twitter_message_text">'+twitterText+'</span><p class="twitter_info">'+twitterInfo+'</p></li>');
                    $('#'+divId + '_twitterFeed').css('width',($('#'+divId + '_twitterFeed').width() + listWidth));
                    
                    counter++;
                }
            };
            
            return list;
                
        }();
        
        function getTwitterList()
        {
            return twitterList;
        }
        
        
        function handleTwitterSearch(results)
        {            
            var twitters = results.results.reverse();
            
            for (var i=0; i<twitters.length; i++)
            {
                if(twitters[i].id > lastID)
                {
                    lastID = twitters[i].id;
                }
                
                getTwitterList().addFirst(getTwitterContent(twitters[i]), relative_time(twitters[i].created_at), 'twitterFeed_list_element', '', true, false);
            }
            
            twitterList.showLoadingbar(false);
        }
        
        function twitterUpdate(results)
        {
            if(results.results.length > 0)
            {        
                var twitters = results.results.reverse();
                
                for (var i=0; i<twitters.length; i++)
                {
                    if(twitters[i].id > lastID)
                    {
                        lastID = twitters[i].id;
                    }
                    
                    getTwitterList().addFirst(getTwitterContent(twitters[i]), relative_time(twitters[i].created_at), 'twitterFeed_list_element', '', false, true);
                        
                }
            }
            
            twitterList.showLoadingbar(false);
        }
        
        twitterList.showLoadingbar(true);
        
        $.getJSON(query,{},handleTwitterSearch);
        
        setInterval(function() {
            twitterList.showLoadingbar(true);
            $.getJSON(query+"&since_id="+lastID,{},twitterUpdate);
        }, searchInterval);
    };
    
})(jQuery);


