jQuery(document).ready(function(){
	jQuery(".addthis_separator").text(" | ");
});

// ==============================
// = Show/Hide Comments & Pings =
// ==============================

jQuery(document).ready(function(){
	
	jQuery("#showHidePings").show();
	jQuery("#showHideRespond").show();
	jQuery("#showHideComments").show();
	
	var pingList = jQuery.cookie('pingList');
	var respondForm = jQuery.cookie('respondForm');
	var commentList = jQuery.cookie('commentList');
	
	var date = new Date();
    date.setTime(date.getTime() + (365 * 24 * 60 * 60 * 1000));
	
	if (pingList == null) { jQuery("#pingList").hide(); jQuery.cookie('pingList', 'collapsed', { path: '/', expires: date }); }
	if (pingList == "collapsed") { jQuery("#pingList").hide(); }
	if (pingList == "expanded") { jQuery("#pingList").show(); }
	
	if (respondForm == null) { jQuery("#respond form").show(); jQuery.cookie('respondForm', 'expanded', { path: '/', expires: date }); }
	if (respondForm == "collapsed") { jQuery("#respond form").hide(); }
	if (respondForm == "expanded") { jQuery("#respond form").show(); }
	
	if (commentList == null) { jQuery("#commentList").show(); jQuery.cookie('commentList', 'expanded', { path: '/', expires: date }); }
	if (commentList == "collapsed") { jQuery("#commentList").hide(); }
	if (commentList == "expanded") { jQuery("#commentList").show(); }
	
	jQuery("#showHidePings").click( function(){
		jQuery("#pingList").slideToggle();
		if (pingList == "collapsed") {
			jQuery.cookie('pingList', 'expanded', { path: '/', expires: date });
			pingList = 'expanded';
		}
		else if (pingList == "expanded") {
			jQuery.cookie('pingList', 'collapsed', { path: '/', expires: date });
			pingList = 'collapsed';
		}
		return false;
	});
	
	jQuery("#showHideRespond").click( function(){
		jQuery("#respond form").slideToggle();
		if (respondForm == "collapsed") {
			jQuery.cookie('respondForm', 'expanded', { path: '/', expires: date });
			respondForm = 'expanded';
		}
		else if (respondForm == "expanded") {
			jQuery.cookie('respondForm', 'collapsed', { path: '/', expires: date });
			respondForm = 'collapsed';
		}
		return false;
	});
	
	jQuery("#showHideComments").click( function(){
		jQuery("#commentList").slideToggle();
		if (commentList == "collapsed") {
			jQuery.cookie('commentList', 'expanded', { path: '/', expires: date });
			commentList = 'expanded';
		}
		else if (commentList == "expanded") {
			jQuery.cookie('commentList', 'collapsed', { path: '/', expires: date });
			commentList = 'collapsed';
		}
		return false;
	});
	
	jQuery(".comment-reply-link").click( function(){
		jQuery("#showHideRespondDiv").toggle();
		jQuery("#respond form").slideDown();
		return false;
	});
	jQuery("#cancel-comment-reply-link").click( function(){
		jQuery("#showHideRespondDiv").toggle();
		if (respondForm == "collapsed") {
			jQuery("#respond form").hide();
		}
		return false;
	});
});

// =================
// = Cookie Plugin =
// =================

/**
 * Cookie plugin
 *
 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 */

jQuery.cookie = function(name, value, options) {
    if (typeof value != 'undefined') {
        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();
        }
        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 {
        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]);
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};

// ================== 
// = Drop Down Menu = 
// ================== 

jQuery(document).ready(function(){
	jQuery("a.aboutDropDown").append(" &#43;");
	jQuery('li#aboutDropDown').hover(
		function() {
			jQuery(this).addClass("hoverClass");
			jQuery('ul', this).slideToggle('fast');
		},
		function() {
			jQuery(this).removeClass("hoverClass");
			jQuery('ul', this).slideToggle('fast');
		}
	);
});

// ============================ 
// = Expanding Pre/Code Field = 
// ============================ 

jQuery(function(){
	jQuery("pre").hover(function() {
		var codeInnerWidth = jQuery("code", this).width() + 10;
		if (codeInnerWidth > 610) {
			jQuery(this).stop(true, false).css({zIndex:"9999",position:"relative",overflow:"hidden"}).animate({width:codeInnerWidth+"px"});
		}
	}, function() {
		jQuery(this).stop(true, false).animate({width:610});
	});
});

// ============================== 
// = Sea of Clouds Twitter Feed = 
// ==============================
// 
// The MIT License
// 
// Copyright (c) seaofclouds.com
// 
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// 
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
// 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

jQuery(function($) {
 
  $.fn.tweet = function(o){
    var s = {
      username: null,              // [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: "i said,",      // [string]   auto text for non verb: "i said" bullocks
      auto_join_text_ed: "i",                 // [string]   auto text for past tense: "i" surfed
      auto_join_text_ing: "i am",             // [string]   auto tense for present tense: "i was" surfing
      auto_join_text_reply: "i replied to",   // [string]   auto tense for replies: "i replied to" @someone "with"
      auto_join_text_url: "i was looking at", // [string]   auto tense for urls: "i was looking at" http:...
      loading_text: null,                     // [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+'" target="_blank"><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 date = '<div class="tweet_date"><a href="http://twitter.com/'+item.from_user+'/statuses/'+item.id+'" target="_blank" title="view tweet on twitter">'+relative_time(item.created_at)+'</a></div>';
          var text = '<div class="tweet_text">' +$([item.text]).linkUrl().linkUser().linkHash().makeHeart().capAwesome().capEpic()[0]+ '</div>';
          
          // until we create a template option, arrange the items below to alter a tweet's display.
          list.append('<li>' + avatar + 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);
      });

    });
  };
});
