$(document).ready(function(){

	Date.prototype.addDays = function (n) {
		this.setDate(this.getDate() + n);
	};

	jQuery.fn.extend({
		createCalNavDays: function(d, n) {
			var months = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
			this.empty();
						
			for(var x = 0; x < n; x++)
			{
				var year = d.getFullYear();
				var month = (d.getMonth() < 9) ? '0'+ (d.getMonth()+1) : d.getMonth()+1;
				var day = (d.getDate() < 10) ? '0'+ d.getDate() : d.getDate();
				
				var monthName = (x === 0 || d.getDate() === 1) ? months[d.getMonth()] : '';
				
				var postDate = Number( String(year) + String(month) + String(day) );
				
				var dayElement;
								
				if(jQuery.inArray(postDate,posts) != -1) {
					dayElement = '<div class="post day"><span>'+monthName+'</span>'+day+'<a href="/blog/'+year+'/'+month+'/'+day+'/"></a></div>';
				} else {
					dayElement = '<div class="day"><span>'+monthName+'</span>'+day+'</div>';
				}
				
				this.append(dayElement);
				d.addDays(1);
			}
		},
		createMonthControls: function(d, n) {
			this.empty();
			for(var x = 1; x <= n; x++) {
				var m = calcMonth(d, x*-1);
				$(this).prepend('<a href="#" class="month" rel="'+m+'">'+month[m]+'</a>');
			}
		}
	});
	
	var month = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');

	var dw = 51; // Date element width
	var pm = 3; // Previous months
	var lm = 80; // Left margin
	var dm = lm+(pm*dw); // Date margin
	
	var ww = $(window).width(); // Window width
	var n = Math.floor((ww-dm)/dw)-1-pm; // Number of dates
	var rm = Math.floor((ww-dm)%dw)+dw;

	var as = 60*n; // Animation speed in milliseconds - 6 seconds per date element

	var d = (typeof(postDate) != 'undefined') ? postDate : new Date();
	d.addDays(-6); // Start 6 days in the past
	
	function calcMonth(d, n) {
		return ((d.getMonth()+n) < 0) ? 12 + (d.getMonth()+n) : (d.getMonth()+n);
	}
			
	function createCalNav() {
		$('#calendar-nav #prev, #calendar-nav #cur, #calendar-nav #next').empty();

		ww = $(window).width();
		n = Math.floor((ww-dm)/dw)-1;
		rm = Math.floor((ww-dm)%dw)+dw;
							
		$('#calendar-nav').css('width', ww+'px');

		d.addDays(-n);
		$('#calendar-nav #prev').createCalNavDays(d, n);
		$('#calendar-nav #cur').createCalNavDays(d, n);
		$('#calendar-nav #next').createCalNavDays(d, n);
		
		d.addDays(-2*n);

		var sp = 0;
		
		if($('body').attr('id') == 'home') sp = lm*8;

		$('#calendar-nav #next').css('left', ww-rm+sp);
		$('#calendar-nav #prev').css('left', -ww+dm+dm+rm+sp);
		$('#calendar-nav #cur').css('left', dm+sp);
		$('#calendar-nav .next').css('width', rm);
		$('#calendar-nav .prev').css('width', lm);
		$('#calendar-nav .next-months').css('right', rm);
											
		$('#calendar-nav .prev-months').createMonthControls(d, pm);	

		$('a.month').click(function(){
			d.setMonth($(this).attr('rel'), 1)
			$('#calendar-nav #prev').createCalNavDays(d, n);
			$('.prev').click();
			return false;
		});
		
		$('#calendar-nav #next').animate({left: ww-rm}, as);
		$('#calendar-nav #prev').animate({left: -ww+dm+dm+rm}, as);
		$('#calendar-nav #cur').animate({left: dm}, as);

	}
	
	var anim = false;
					
	$('.next').click(function(){

		if(anim == false)
		{
			anim = true;
			d.addDays(2*n);
			$('#calendar-nav #prev').attr('id', 'temp').css('left',ww-rm);
			$('#calendar-nav #cur').animate({left: -ww+dm+dm+rm}, as).attr('id', 'prev');
			$('#calendar-nav #next').animate({left: dm}, as).attr('id', 'cur');
			$('#calendar-nav #temp').attr('id', 'next');
			$('#calendar-nav #next').createCalNavDays(d, n);
			d.addDays(-2*n);
			setTimeout(function(){
				anim = false;
				d.addDays(-n);
				$('#calendar-nav #prev').createCalNavDays(d, n);
			}, as);
			
			$('#calendar-nav .prev-months').createMonthControls(d, pm);
			
			$('a.month').click(function(){
				d.setMonth($(this).attr('rel'), 1)
				$('#calendar-nav #prev').createCalNavDays(d, n);
				$('.prev').click();
				return false;
			});

		}					
		return false;
	});
	
	$('.prev').click(function(){
		if(anim == false)
		{
			anim = true;
			$('#calendar-nav #prev, #calendar-nav #cur, #calendar-nav #next').stop();
			d.addDays(-2*n);
			$('#calendar-nav #next').attr('id', 'temp').css('left',-ww+dm+dm+rm);
			$('#calendar-nav #cur').animate({left: ww-rm}, as).attr('id', 'next');
			$('#calendar-nav #prev').animate({left: dm}, as).attr('id', 'cur');
			$('#calendar-nav #temp').attr('id', 'prev');
			$('#calendar-nav #prev').createCalNavDays(d, n);
			setTimeout(function(){
				anim = false;
				d.addDays(n);
				$('#calendar-nav #next').createCalNavDays(d, n);
				d.addDays(-2*n);
			}, as);

			$('#calendar-nav .prev-months').createMonthControls(d, pm);	
			
			$('a.month').click(function(){
				d.setMonth($(this).attr('rel'), 1)
				$('#calendar-nav #prev').createCalNavDays(d, n);
				$('.prev').click();
				return false;
			});

	}
		return false;
	});
	
	$(window).resize(function(){
		createCalNav();
	});
	
	createCalNav();

});