(function($){
    $.extend({
        jTwitterSearch : function(term, fnk){
            var url = "http://search.twitter.com/search.json?callback=?&rpp=5&q=" +escape(term);
            var info = {};
            $.getJSON(url, function(data){
                if(typeof fnk == 'function') fnk.call(this, data.results);
            });
        }
    });
})(jQuery);

$(document).ready(function() {
    initialize_spinner = function(options) {
        var opts = $.extend({
            container: 'roulette',
            spinner: '#spinner-wheel',
            trigger: '#run-spin'
        }, options);

        var src = $('#' + opts.container + " " + opts.spinner)[0].src;
        $(opts.container).html("");
        var R = Raphael(opts.container, 500, 500);
        var img = R.image(src, -300, 000, 800, 800);
        var value = 180;
        var url = null;
        var message = null;
        var recipeError = null;

        $(opts.trigger).click(function (e) {
            $.ajax({
                type: "POST",
                data: '',
                url: rouletteData.url,
                success: function(response) {
                    var urlObject = $.secureEvalJSON(response);
                    url = urlObject.url;
                },
                error: function(response) {
                    if (response.status == 410) {
                        var urlObject = $.secureEvalJSON(response.responseText);
                        url = urlObject.url;
                    } else {
                        recipeError = true;
                        message = "No recpies found for this user.";
                    }
                }
            });

            value += Math.floor(Math.random()*180) + 180;
            img.animate({rotation: value}, 2300, function() {
                if (message != null) { alert(message); }

                if (url != null) {
                    $.facebox({ ajax: url+'.js'});
                } else {
                    if (recipeError == null) {
                        // Failed request, try normal http
                        window.location = e.target.href;
                    }
                }
            });
            return false;
        });
    };

    if ($('#roulette').size() > 0) {
        initialize_spinner();
    };

    $.extend($.facebox.settings, {
      opacity      : 0.5,

        loadingImage: '/images/facebox/loading.gif',
        closeImage   : '/images/facebox/closelabel.gif',
        faceboxHtml  : '\
    <div id="facebox" style="display:none;"> \
      <div class="popup"> \
        <table> \
          <tbody> \
            <tr> \
              <td class="tl"/><td class="b"/><td class="tr"/> \
            </tr> \
            <tr> \
              <td class="b"/> \
              <td class="body"> \
                <div class="content container"> \
                </div> \
                <div class="footer"> \
                  <a href="#" class="close"> \
                    <img src="/images/facebox/closelabel.gif" title="close" class="close_image" /> \
                  </a> \
                </div> \
              </td> \
              <td class="b"/> \
            </tr> \
            <tr> \
              <td class="bl"/><td class="b"/><td class="br"/> \
            </tr> \
          </tbody> \
        </table> \
      </div> \
    </div>'

    });

    $('a[rel*=facebox]').facebox();
    $('.recipe .optional').hide();
    $('.js-only').show();

    toggleOptionalFields = function() {
        $('.toggle-optional-fields').toggle(function(){
            $('.recipe .optional').show();
        }, function() {
            $('.recipe .optional').hide();
        });
    },
    toggleOptionalFields();

    // Facebox hook to bind elements
    $(document).bind('reveal.facebox',function(){
        $('.recipe .optional').hide();
        $('.js-only').show();
        toggleOptionalFields();
    });


    // Modification from original http://twitter.com/javascripts/blogger.js
    $.jTwitterSearch('mealette', function(info){
        var statusHTML = [];

        for (var i=0; i<info.length; i++){
            var username = info[i].from_user;
            var status = info[i].text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(url) {
                return '<a href="'+url+'">'+url+'</a>';
            }).replace(/\B@([_a-z0-9]+)/ig, function(reply) {
                return  reply.charAt(0)+'<a href="http://twitter.com/'+reply.substring(1)+'">'+reply.substring(1)+'</a>';
            });
            statusHTML += '<li><span>'+status+'</span> <small><a href="http://twitter.com/'+username+'/statuses/'+info[i].id+'">'+relative_time(info[i].created_at)+'</a></small</li>';
        }
        $('#twitter-updates').html('<ul>' + statusHTML + '</ul>');

    });

});

function relative_time(time_value) {
    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 'less than a minute ago';
    } else if (delta < 120) {
        return 'about a minute ago';
    } else if (delta < (60 * 60)) {
        return (parseInt(delta / 60)).toString() + ' minutes ago';
    } else if (delta < (120 * 60)) {
        return 'about an hour ago';
    } else if (delta < (24 * 60 * 60)) {
        return 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
    } else if (delta < (48 * 60 * 60)) {
        return '1 day ago';
    } else {
        return (parseInt(delta / 86400)).toString() + ' days ago';
    }
}
