// Alphabetical Sorting
// http://www.wrichards.com/blog/2009/02/jquery-sorting-elements/
    // jQuery.fn.sort = function() {
    //     return this.pushStack( [].sort.apply( this, arguments ), []);
    // };
    // function sortAlpha(a,b){
    //     return a.innerHTML > b.innerHTML ? 1 : -1;
    // };

// Main functions
$(function() {  
    $('body').removeClass('no-js');
    
    // http://lwis.net/free-css-drop-down-menu/js/jquery.helper.js
    $("ul.dropdown li").hover(function(){
        $(this).addClass("hover");
        $('> .dir',this).addClass("open");
        $('ul:first',this).css('visibility', 'visible');
    },function(){
        $(this).removeClass("hover");
        $('.open',this).removeClass("open");
        $('ul:first',this).css('visibility', 'hidden');
    });

    if ($('body#landing.socialite').length) {
        $('div.day').each(function() {
            // move past events
            if ($(this).attr('id') < today) {
                $('#past-events').show();
                $(this).prependTo('#past-events > div');
            };
            // move today events
            if ($(this).attr('id') == today) {
                $('#today-events').show();
                $(this).appendTo('#today-events')
                $('.date', this).hide();
            };
            // note tomorrow events
            if ($(this).attr('id') == ((today * 1) + 1)) {
                $('.date', this).prepend('<em>Tomorrow</em> - ').addClass('tomorrow');
            };
        });
    };
    if ($('body#archives.socialite').length) {
        $('div.day').each(function() {
            // hide future events
            if ($(this).attr('id') >= today) {
                $(this).hide();
            };
        });
    };


    if ($('#entry.regular').length) {
        // $('#features li').sort(sortAlpha).appendTo('#features');
        // $('#cuisine li').sort(sortAlpha).appendTo('#cuisine');
    };



        
        
    if ($('body#landing.regular').length) {

        // TableSort parser for price ($$$)
        $.tablesorter.addParser({
            id: 'price',
            is: function(s) {
                return false;
            },
            format: function(s) {
                return s.toLowerCase().replace(/\$\$\$\$/,4).replace(/\$\$\$/,3).replace(/\$\$/,2).replace(/\$/,1).replace(/n\/a/,0);
            },
            type: 'numeric'
        }); 
        // TableSort parser for date (Mon DD, YYYY)
        $.tablesorter.addParser({
          id: 'monthDayYear',
          is: function(s) {
              return false;
          },
          format: function(s) {
              var hit = s.match(/^(\w{3})[ ](\d{1,2}),[ ](\d{4})$/); 
              // console.log(hit); 
              var m = monthNames[hit[1]]; 
              var d = hit[2]; 
              var y = hit[3]; 
              // console.log("" + y + m + d); 
              return "" + y + m + d; 
          },
          type: 'numeric'
        });
        var monthNames = {}; 
        monthNames["Jan"] = "01"; 
        monthNames["Feb"] = "02"; 
        monthNames["Mar"] = "03"; 
        monthNames["Apr"] = "04"; 
        monthNames["May"] = "05"; 
        monthNames["Jun"] = "06"; 
        monthNames["Jul"] = "07"; 
        monthNames["Aug"] = "08"; 
        monthNames["Sep"] = "09"; 
        monthNames["Oct"] = "10"; 
        monthNames["Nov"] = "11"; 
        monthNames["Dec"] = "12"; 

        // Sort on the 5th column (date), descending
        $.tablesorter.defaults.sortList = [[4,1]];
        
        // Initialize TableSorter
        $('#places').addClass('tablesorter').tablesorter({
            headers: {
                3: {
                    sorter:'price'
                },
                4: {
                    sorter:'monthDayYear'
                }
            },
            widgets: ['zebra'],
            // debug: true 
        });
        
        $('a.sort-name').click(function() {
            var sorting = [[0,0]];
            $('#places').trigger('sorton',[sorting]);
            return false;
        }); 
        $('a.sort-cuisine').click(function() {
            var sorting = [[1,0],[0,0]];
            $('#places').trigger('sorton',[sorting]);
            return false;
        }); 
        $('a.sort-hood').click(function() {
            var sorting = [[2,0],[0,0]];
            $('#places').trigger('sorton',[sorting]);
            return false;
        }); 
        $('a.sort-price').click(function() {
            var sorting = [[3,0],[0,0]];
            $('#places').trigger('sorton',[sorting]);
            return false;
        }); 
        $('a.sort-date').click(function() {
            var sorting = [[4,0],[0,0]];
            $('#places').trigger('sorton',[sorting]);
            return false;
        }); 
        
    };
    
    if ($('body#landing.starlet').length) {
        $('div.entry div.asset-footer').css('visibility','hidden');
        $('div.entry').hover(
            function () {
                $(this).addClass('hover');
                $('div.asset-footer', this).css('visibility','visible');
            },
            function () {
                $(this).removeClass('hover');
                $('div.asset-footer', this).css('visibility','hidden');
            }
        )
    }

    if ($('div.expires').length) {
        // if expired entry, update string and class
        if ($('.expiration-date').attr('id') < today)
            $('.expiration-date')
            .html('This offer <strong>expired</strong> on ' + $('.expiration-date .date').text())
            .parents('div.expires').removeClass('expires').addClass('expired');
    }

    // toggle EntryMore when toggle_entry_more is set in template
    if ($('body.toggle-entry-more').length) {
        $('div.hentry .entry-more').each(function () {
            var moreHTML = $(this).html();
            $(this).html('<div style="display: none;" class="entry-more-content">' + moreHTML + '</div><a href="#" class="show-entry-more">continue reading...</a>');
        })
        $('a.show-entry-more').click(function() {
            $(this).prev().fadeIn('medium');
            $(this).hide();
            return false;
        });
    }
    
    if ($('body#cheat-sheet').length) {
        // $('#toggle-edit-links').click( function () {
        //     var cookieName = "show_edit_links";
        //     if ($.cookie(cookieName))
        //         $.cookie(cookieName, null,   { expires: -1,  path: '/', domain: '.th.strangecode.com' })
        //     else
        //         $.cookie(cookieName, 'true', { expires: 365, path: '/', domain: '.th.strangecode.com' });
        //     // refresh window
        //     window.location = window.location;
        // })
        $('tr.blog-extras').hide();
        $('.show-templates').click(function () {
            $(this).parents('tr.blog').next('tr').toggle();
            return false;
        })
    }
    
    if ($('.monthly-archives ul, .daily-archives ul, .category-archives ul').length) {
        $('.monthly-archives ul li:gt(6), .daily-archives ul li:gt(6), .category-archives ul li:gt(6)').hide();
        $('.monthly-archives ul, .daily-archives ul, .category-archives ul').append('<li><em><a href="#">show all</a></em></li>');
        $('.monthly-archives ul li em a, .daily-archives ul li em a, .category-archives ul li em a').click(function () {
            $('.monthly-archives ul li, .daily-archives ul li, .category-archives ul li').show();
            $(this).parents("li").remove();
            return false;
        })
    }
    
    if ($('#twitter-footer').length) {
        $("#twitter-footer").tweet({
            username: "tablehopper",
            count: 1,
            loading_text: "loading tweets...",
            outro_text: '<a href="http://twitter.com/tablehopper/">follow me on twitter</a> and <a href="/subscribe/">subscribe to the newsletter</a>',
        });
    }
    
    if ($('#homepage').length) {
        $("#recent-tweets .tweets").tweet({
            username: "tablehopper",
            count: 6,
            loading_text: "loading tweets...",
            outro_text: '<a href="http://twitter.com/tablehopper/">follow @tablehopper on twitter</a> and <a href="/subscribe/">subscribe to the newsletter</a>',
        });
    }
});

// create YYYYMMDD string for today
var now = new Date();
var month = String(now.getMonth() + 1);
if (month.length == 1)
    month = "0" + month;
var day = String(now.getDate());
if (day.length == 1)
    day = "0" + day;
var today = now.getFullYear() + month + day;
// alert(today);


// MT Rebuild -------------------------------------------------------------------

function doRebuild (blogID, otherParams) {
    window.open('/cgi/mt/mt.fcgi' + '?__mode=rebuild_confirm&blog_id=' + blogID + '&' + otherParams, 'rebuild_blog_' + blogID, 'width=400,height=400,resizable=yes');
}


// jQuery Plugins -------------------------------------------------------------------

/**
 * Cookie plugin
 * http://plugins.jquery.com/project/cookie
 */
jQuery.cookie = function(name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
        }
        // CAUTION: Needed to parenthesize options.path and options.domain
        // in the following expressions, otherwise they evaluate to undefined
        // in the packed version for some reason...
        var path = options.path ? '; path=' + (options.path) : '';
        var domain = options.domain ? '; domain=' + (options.domain) : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};

/**
 * Tweet plugin
 * http://tweet.seaofclouds.com/
 */

(function($) {
 
  $.fn.tweet = function(o){
    var s = {
      username: ["seaofclouds"],              // [string]   required, unless you want to display our tweets. :) it can be an array, just do ["username1","username2","etc"]
      avatar_size: null,                      // [integer]  height and width of avatar if displayed (48px max)
      count: 3,                               // [integer]  how many tweets to display?
      intro_text: null,                       // [string]   do you want text BEFORE your your tweets?
      outro_text: null,                       // [string]   do you want text AFTER your tweets?
      join_text:  null,                       // [string]   optional text in between date and tweet, try setting to "auto"
      auto_join_text_default: '',             // [string]   auto text for non verb: "i said" bullocks
      auto_join_text_ed: '',                  // [string]   auto text for past tense: "i" surfed
      auto_join_text_ing: '',                 // [string]   auto tense for present tense: "i was" surfing
      auto_join_text_reply: '',               // [string]   auto tense for replies: "i replied to" @someone "with"
      auto_join_text_url: '',                 // [string]   auto tense for urls: "i was looking at" http:...
      loading_text: "loading tweets...",      // [string]   optional loading text, displayed while tweets load
      query: null                             // [string]   optional search query
    };

    $.fn.extend({
      linkUrl: function() {
        var returning = [];
        var regexp = /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
        this.each(function() {
          returning.push(this.replace(regexp,"<a href=\"$1\">$1</a>"))
        });
        return $(returning);
      },
      linkUser: function() {
        var returning = [];
        var regexp = /[\@]+([A-Za-z0-9-_]+)/gi;
        this.each(function() {
          returning.push(this.replace(regexp,"<a href=\"http://twitter.com/$1\">@$1</a>"))
        });
        return $(returning);
      },
      linkHash: function() {
        var returning = [];
        var regexp = / [\#]+([A-Za-z0-9-_]+)/gi;
        this.each(function() {
          returning.push(this.replace(regexp, ' <a href="http://search.twitter.com/search?q=&tag=$1&lang=all&from='+s.username.join("%2BOR%2B")+'">#$1</a>'))
        });
        return $(returning);
      },
      capAwesome: function() {
        var returning = [];
        this.each(function() {
          returning.push(this.replace(/(a|A)wesome/gi, 'AWESOME'))
        });
        return $(returning);
      },
      capEpic: function() {
        var returning = [];
        this.each(function() {
          returning.push(this.replace(/(e|E)pic/gi, 'EPIC'))
        });
        return $(returning);
      },
      makeHeart: function() {
        var returning = [];
        this.each(function() {
          returning.push(this.replace(/[&lt;]+[3]/gi, "<tt class='heart'>&#x2665;</tt>"))
        });
        return $(returning);
      }
    });

    function relative_time(time_value) {
      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);
      if(delta < 60) {
      return 'less than a minute ago';
      } else if(delta < 120) {
      return 'about a minute ago';
      } else if(delta < (45*60)) {
      return (parseInt(delta / 60)).toString() + ' minutes ago';
      } else if(delta < (90*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';
      }
    }

    if(o) $.extend(s, o);
    return this.each(function(){
      var list = $('<ul class="tweet_list">').appendTo(this);
      var intro = '<p class="tweet_intro">'+s.intro_text+'</p>'
      var outro = '<p class="tweet_outro">'+s.outro_text+'</p>'
      var loading = $('<p class="loading">'+s.loading_text+'</p>');
      if(typeof(s.username) == "string"){
        s.username = [s.username];
      }
      var query = '';
      if(s.query) {
        query += 'q='+s.query;
      }
      query += '&q=from:'+s.username.join('%20OR%20from:');
      var url = 'http://search.twitter.com/search.json?&'+query+'&rpp='+s.count+'&callback=?';
      if (s.loading_text) $(this).append(loading);
      $.getJSON(url, function(data){
        if (s.loading_text) loading.remove();
        if (s.intro_text) list.before(intro);
        $.each(data.results, function(i,item){
          // auto join text based on verb tense and content
          if (s.join_text == "auto") {
            if (item.text.match(/^(@([A-Za-z0-9-_]+)) .*/i)) {
              var join_text = s.auto_join_text_reply;
            } else if (item.text.match(/(^\w+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+) .*/i)) {
              var join_text = s.auto_join_text_url;
            } else if (item.text.match(/^((\w+ed)|just) .*/im)) {
              var join_text = s.auto_join_text_ed;
            } else if (item.text.match(/^(\w*ing) .*/i)) {
              var join_text = s.auto_join_text_ing;
            } else {
              var join_text = s.auto_join_text_default;
            }
          } else {
            var join_text = s.join_text;
          };

          var join_template = '<span class="tweet_join"> '+join_text+' </span>';
          var join = ((s.join_text) ? join_template : ' ')
          var avatar_template = '<a class="tweet_avatar" href="http://twitter.com/'+ item.from_user+'"><img src="'+item.profile_image_url+'" height="'+s.avatar_size+'" width="'+s.avatar_size+'" alt="'+item.from_user+'\'s avatar" border="0"/></a>';
          var avatar = (s.avatar_size ? avatar_template : '')
          var text = '<span class="tweet_text">' +$([item.text]).linkUrl().linkUser().linkHash().makeHeart().capAwesome().capEpic()[0]+ '</span>';
          var date = '<a class="date" href="http://twitter.com/'+item.from_user+'/statuses/'+item.id+'" title="view tweet on twitter">'+relative_time(item.created_at)+'</a>';
          
          // until we create a template option, arrange the items below to alter a tweet's display.
          list.append('<li>' + avatar + join + text + ' ' + date + '</li>');

          list.children('li:first').addClass('tweet_first');
          list.children('li:odd').addClass('tweet_even');
          list.children('li:even').addClass('tweet_odd');
        });
        if (s.outro_text) list.after(outro);
      });

    });
  };
})(jQuery);