jQuery(function($) {
  initSidebars();
  initFancybox();
  initMoreContent();
  initScrolling();  
  initMonthlyArchives();
  if (! $.browser.msie ) $(window).load(initTwitter);
});

function initSidebars () {  
  var sidecontent = $('#sidecontent');
  var sideHideStrings = '.shorthidden, .democracy, .wp-tag-cloud';
  
  // hide open lis in the sidebar
  sidecontent.children('li.open').each(function() {
    if (! readCookie($(this).children('h2').text()) ) {
      $(this).removeClass('open').children(sideHideStrings).hide();
    }
  });
	
	// add links inside the h2s
	sidecontent.find('li:not(.alwaysOpen) h2').each(function() {
		$(this).wrapInner('<a href="#" rel="nofollow"></a>').append('<span class="arrow"></span>');
	});
	
	$('body').addClass('js');
  
  // onhover fade in/out arrow
  sidecontent.children('li').find('h2')
  .hover(
    function() { $(this).find('span.arrow').fadeTo(300, 1.0); },
    function() { $(this).find('span.arrow').fadeTo(300, 0.1); }
  )
  .children('a')
  .focus(function() {
    $(this).next('span.arrow').fadeTo(300, 1.0);
  })
  .blur(function() {
    $(this).next('span.arrow').fadeTo(300, 0.1);
  });;
  
  // onclick open/close the lis
  sidecontent.children('li').find('span.arrow').click(function() {
    $(this).prev().trigger('click');
  }).prev('a').click(function() {
    if ( $(this).parents('li').hasClass('open') ) {
      $(this).parent('h2').siblings(sideHideStrings).slideUp(300, function(){
        $(this).parents('li').toggleClass('open');
      });
      eraseCookie($(this).parent('h2').text());
    } else {
       $(this).parent('h2').siblings(sideHideStrings).slideDown(300);
       $(this).parents('li').toggleClass('open');
       createCookie($(this).parent('h2').text(),1,360);
    }
		return false;
  });
}
  
function initFancybox () {
  $('#content .postcontent a.enlarge').fancybox({
    'easingIn' : 'easeOutBack',
    'easingOut' : 'easeInBack',
    'zoomSpeedIn': 600,
    'zoomSpeedOut': 500,
    'overlayShow': false
  });
}

function initMoreContent () {
  var curPage = 1;
 
  $('#dataGetter')
  .click(function() {
    $('#content p.arch').after('<div class="newContent"></div>');
    $('#content .newContent:last').load(ajaxBaseUrl()+'?paged='+ (++curPage) +' #content .post');
    return false;
  })
  .ajaxStart(function() {
    $(this).addClass('loading');
  })
  .ajaxComplete(function() {
    $(this).parent().clone(true).appendTo('#content').children().removeClass('loading');
    $(this).parent().remove();
  }); 
}

function initScrolling () {
  $.localScroll.defaults.easing = 'easeOutExpo';
  $.localScroll.defaults.duration = '900';  
  
  $.localScroll.hash({
    margin: true
  });
  
  $.localScroll({
    hash: true,
    margin: true
  });
}

// Monthly Archives Usability
function initMonthlyArchives () {
  if (! $('.archive').length ) return;

  var allMonths = $('.monthList > li');
  var archive = $('.archive');  
  var year = new Date().getFullYear();
  
  $('.monthList').remove();
  
  for (var i = year;;i--) {
    var yearMonths = allMonths.find('a:contains("'+i+'")').parent();
    
    if (! yearMonths.length ) break;
    
    archive.append(yearMonths);
    yearMonths.wrapAll('<ul class="yearList"></ul>').parent().before('<h4><a href="#">'+i+'</a></h4>');
  }
  
  archive.find('ul.yearList:not(:first)').addClass('closed').hide();
  
  archive.find('h4 a').click(function() {
    var ul = $(this).parent().next('ul');
    
    if ( ul.hasClass('closed') ) {
      ul.removeClass('closed').fadeIn('normal');
    } else {
      ul.addClass('closed').fadeOut('normal');
    }
    
    return false;
  });
}

function initTwitter () {  
  $.getScript( 'http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20twitter.user.status%20where%20id%20in%20(\'pietropizzi\'%2C%20\'hellamsel\')&format=json&diagnostics=false&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=twitterResults' );
}

function twitterResults (o) {
  $('#twitter').empty().append(buildTwitter(o)).parent().fadeIn(500);
}

function buildTwitter (o) {
  var result = '<dl><h6 class="hidden">Twitter</h6>';
  var users = ['Funkmaster', 'Pietropizzi'];
  var twitterUsers = ['hellamsel', 'pietropizzi'];
  var messages, ids = [];
  
  messages = [o.query.results.meta[4].content, o.query.results.meta[1].content];
  ids = [o.query.results.meta[3].content, o.query.results.meta[0].content];

  for ( var i=0, j=twitterUsers.length; i<j; i++ ) {
    if ( messages[i] ) { 
      result += '<dt><a href="http://twitter.com/'+twitterUsers[i]+'">'+users[i]+'</a></dt><dd id="'+users[i]+'">'+messages[i].parseTwitter()+'</dd>';
    }
  }
  result += '<dl>';
  return result;
}

/***** Helpers ******/

String.prototype.parseTwitter = function() {
  return this
    .replace(/([A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+)/, '<a href="$1">$1</a>')          // Links
    .replace(/(^|\s)@(\w+)/g, '$1<a class="username" href="http://twitter.com/$2">@$2</a>')             // Usernames
    .replace(/(^|\s)#(\w+)/g, '$1<a class="hashtag" href="http://twitter.com/#search?q=$2">#$2</a>');   // Hashtags
};

// are we on the development or on the real server
function isLocal () {
  return ( window.location.host.indexOf('localhost') >= 0 );
}


/**
* Clears predefined contents of an input field
*/
function clearContent(O,content) {
  if (O.value == content) {
    O.value = "";
  }
}

function ajaxBaseUrl() {
  return isLocal() ? '/wordpress/' : '/';
}

/**
* Restore predefined contents of an input field
*/
function restoreContent(O,content) {
  if (O.value == "") {
    O.value=content;
  }
}

/**
* Cookie Stuff
*/
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}