$loadCSS = function(filename) {
   var css =$('<link>').appendTo('head');
   css.attr({
      rel:  'stylesheet',
      type: 'text/css',
      href: filename
   });
};

var AudioHelper = {
   'setupPlayer': function(callback) {
      $LAB
         .setOptions({ 'AllowDuplicates': 'false' })
         .script('/javascripts/audio-player/audio-player.js')
         .wait(function() {
            AudioPlayer.setup('/javascripts/audio-player/player.swf', {  
               'animation': 'no',
               'transparentpagebg': 'yes',
               'width': '350px',

               'bg': 'ffffff',
               'leftbg': 'eeeeee',
               'rightbg': 'eeeeee',
               'border': 'eeeeee',
               'loader': 'cfa0a6'
            });
         })
         .wait(callback);
   },
   'autoActivatePlayers': function() {
      AudioHelper.setupPlayer(function() {
         var player_id = 0;
         $('.audio[data-file]').each(function(index, div) {
            var player = $(div);
            player_id++;
            player.attr('id', 'player-'+player_id);
            if (navigator.userAgent.match(/iPhone/i) ||
                navigator.userAgent.match(/iPod/i)) {
               var link = $('<a></a>');
               link.attr('href', player.attr('data-file'));
               link.text(player.attr('data-title'));
            	player.html(link);
            } else {
               AudioPlayer.embed('player-'+player_id, {'soundFile': player.attr('data-file'), 'titles': player.attr('data-title')});
            }
         });
      });
   }
}

var CRUDHelper = {
   'deleteLinks': function() {
      $('body').delegate('a[data-method=delete]', 'click', function (e) {
         var $this = $(this);
         $this.attr('href', function(index, attr) {
            return attr.replace(/\/delete/, '');
         });
         if ($this.attr('data-confirm')) {
            if (confirm($this.attr('data-confirm'))) {
               FormHelper.dynamicPostSubmit(this);
            }
         } else {
            FormHelper.dynamicPostSubmit(this);
         }
         return false;
      });
   },
}

var DateHelper = {
  // Takes the format of "Jan 15, 2007 15:45:00 GMT" and converts it to a relative time
  // Ruby strftime: %b %d, %Y %H:%M:%S GMT
  'time_ago_in_words_with_parsing': function(from) {
    var date = new Date; 
    date.setTime(Date.parse(from));
    return this.time_ago_in_words(date);
  },
  'time_ago_in_words': function(from) {
    return this.distance_of_time_in_words(new Date, from);
  },
  'distance_of_time_in_words': function(to, from) {
    var distance_in_seconds = ((to - from) / 1000);
    var distance_in_minutes = Math.floor(distance_in_seconds / 60);

    if (distance_in_minutes == 0) { return 'less than a minute ago'; }
    if (distance_in_minutes == 1) { return 'a minute ago'; }
    if (distance_in_minutes < 45) { return distance_in_minutes + ' minutes ago'; }
    if (distance_in_minutes < 90) { return 'about 1 hour ago'; }
    if (distance_in_minutes < 1440) { return 'about ' + Math.floor(distance_in_minutes / 60) + ' hours ago'; }
    if (distance_in_minutes < 2880) { return '1 day ago'; }
    if (distance_in_minutes < 43200) { return Math.floor(distance_in_minutes / 1440) + ' days ago'; }
    if (distance_in_minutes < 86400) { return 'about 1 month ago'; }
    if (distance_in_minutes < 525960) { return Math.floor(distance_in_minutes / 43200) + ' months ago'; }
    if (distance_in_minutes < 1051199) { return 'about 1 year ago'; }

    return 'over ' + Math.floor(distance_in_minutes / 525960) + ' years ago';
  }
};

var FormHelper = {
   'config': {
      'csrf_token': $('meta[name=csrf-token]').attr('content'),
      'csrf_param': $('meta[name=csrf-param]').attr('content'),
   },
   'focus': function() {
      $('input[type=text]:first').focus();
   },
   'markItUp': function(elem) {
      $loadCSS('/javascripts/markitup/skins/simple/style.css');
      $loadCSS('/javascripts/markitup/sets/custom-html/style.css');
      $LAB
         .script('/javascripts/markitup/jquery.markitup.pack.js').wait()
         .script('/javascripts/markitup/sets/custom-html/set.js')
         .wait(function() {
            $(elem).markItUp(mySettings);
            MarkupHelper.setupDialogs();
         });
   },
   'uniform': function(elem) {
      if (!elem)
         elem = 'select, input:checkbox, input:radio, input:file';
      $loadCSS('/javascripts/uniform/css/uniform.default.css');
      $LAB
         .script('/javascripts/uniform/jquery.uniform.min.js')
         .wait(function() {
            $(elem).uniform();
         });
   },
   'dynamicPostSubmit': function(elem) {
      var link = $(elem),
          form = $('<form method="post" action="'+link.attr('href')+'">'),
      csrf_fields = '<input name="_method" value="'+link.attr('data-method')+'" type="hidden" />';
      csrf_fields += '<input name="'+FormHelper.config.csrf_param+'" value="'+FormHelper.config.csrf_token+'" type="hidden" />';
      form
         .hide()
         .append(csrf_fields)
         .appendTo('body');
      form.submit();
   }
};

var MarkupHelper = {
   'dialogs': {
      'photoPicker': $('<div></div>')
   },
   'setupDialogs': function() {
      MarkupHelper.dialogs.photoPicker.dialog({
         'title': 'Photo from Gallery',
         'autoOpen': false,
         'modal': true,
         'height': 500,
         'width': 450
      });
   },
   'showDialog': function(markItUp) {
      MarkupHelper.dialogs.photoPicker.dialog('open');
      $.get('/admin/galleries', null, null, 'script');
   }
}

var TwitterHelper = {
   'showTweets': function() {
      $LAB
         .script('/javascripts/twitterlib.min.js')
         .wait(function() {
            twitterlib.timeline('djphillips', {'limit': 20}, function(tweets, options) {
               var rendered_tweets = 0;
               var list = $('<ul></ul>');
               $.each(tweets, function(i, tweet) {
                  if (rendered_tweets > 3) return;
                  if (tweet.in_reply_to_user_id == null)
                  {
                     list.append('<li>'+twitterlib.ify.clean(tweet.text)+'<div class="time"><a href="http://twitter.com/'+tweet.user.screen_name+'/statuses/'+tweet.id+'/">'+DateHelper.time_ago_in_words_with_parsing(tweet.created_at)+'</a></div></li>');
                     rendered_tweets++;
                  }
               });
               $('#twitter').html(list);
            });
         });
   }
};