(function($) {

  $.fn.zventsMonthlyWidget = function(url,settings) {
	settings = $.extend({
		type: 'reg'
	},settings);

	var zObject = this;
	zObject.zDiv = $(this);
	zObject.zUrl = url.substring(0,(url.lastIndexOf('/')==url.length-1)?url.lastIndexOf('/'):url.length);
	zObject.settings = settings;
	zObject.today = new Date();
	zObject.currentDate = zObject.today;
	zObject.currentDate.setDate(1);
	zObject.fullHeight = 0;
	zObject.months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];

	if(settings.type=='sm') zObject.zDiv.addClass('zventsMonthlySm');
	zObject.zDiv.prepend('<div class="zTopBorder"><div class="zTBBg"></div><div class="ztlCorner"></div><div class="ztrCorner"></div></div><div class="zLeftBorder"><div class="zLBBg"</div></div>');
	zObject.zDiv.find('.zMiddle').prepend('<div class="zMiddleBg"></div>');
	zObject.zDiv.find('.zMiddleContent').append('<div class="zCal"><div class="zMonthStripe">' + ((settings.type=='sm')?'<div class="zTopStripe"></div>':'') + '<div class="zPrevMonth"></div><div class="zMonthArea"></div><div class="zNextMonth"></div>' + ((settings.type=='reg')?'<div class="zYearArea"></div>':'') + '</div><div class="zCalDays"><div>SUN</div><div>MON</div><div>TUE</div><div>WED</div><div>THU</div><div>FRI</div><div>SAT</div></div></div>');
	zObject.zDiv.append('<div class="zRightBorder"><div class="zRBBg"></div></div><div class="zBottomBorder"><div class="zBBBg"</div><div class="zblCorner"></div><div class="zbrCorner"></div></div>');
	
	zObject.zDiv.find('.zPrevMonth, .zNextMonth').css('opacity',0.8).hover(function(){$(this).css('opacity',1);},function(){$(this).css('opacity',0.8);});
	zObject.zDiv.find('.zMonthStripe .zYearArea').css('color',zObject.zDiv.css('background-color'));
	zObject.zDiv.find('.zPrevMonth').bind('click',{testObj:zObject},function(e){
		generateMonth(e.data.testObj,moveMonth(e.data.testObj.currentDate,-1));
	});
	zObject.zDiv.find('.zNextMonth').bind('click',{testObj:zObject},function(e){
		generateMonth(e.data.testObj,moveMonth(e.data.testObj.currentDate,1));
	});
	
	generateMonth(zObject, zObject.currentDate);

	zObject.fullHeight = 22 + ((zObject.settings.type=='reg')?217:150);
	zObject.zDiv.find('.zLeftBorder, .zRightBorder, .zLeftBorder .zLBBg, .zRightBorder .zRBBg, .zMiddle, .zMiddleBg, .zMiddleContent').height(zObject.fullHeight);
	zObject.zDiv.find('.zMiddleBg').css('background-position','0 ' + (zObject.fullHeight-((zObject.settings.type=='reg')?197:142)) + 'px');
	zObject.zDiv.find('.zLoading').hide();
	zObject.zDiv.height(zObject.fullHeight+10);
	
	return zObject;
  };
  
  
  $.fn.zventsTop5Widget = function(url,settings) {
	settings = $.extend({
		partnerID: '',
		type: 'reg'
	},settings);

	var zObject = this;
	zObject.zDiv = $(this);
	zObject.zUrl = url.substring(0,(url.lastIndexOf('/')==url.length-1)?url.lastIndexOf('/'):url.length);
	zObject.settings = settings;	  
	
	if(settings.type=='sm') zObject.zDiv.addClass('zventsTop5Sm');
	zObject.zDiv.prepend('<div class="zHeader"><a href="' + zObject.zUrl + '"></a></div>');
	zObject.zDiv.append('<div class="zLinkRight"><a href="' + zObject.zUrl + '/events/new">+ ADD AN EVENT</a></div><div class="zLinkLeft"><a href="' + zObject.zUrl + '">ALL EVENTS</a></div>');
	
	(function(Z) {
		Z.partner = zObject.settings.partnerID;
		Z.site =  zObject.zUrl;
		testStr = Z.widget.eventList({
			load: {
				p: Z.partner,  // Editors Picks
				limit: 5
			},
			maxTitle: (zObject.settings.type=='sm')?22:26,
			images: true,
			showDate: true,
			date: function( event ) {
				if( this.showDate === false ) return '';
				return Z.Date(event.date).format( ((zObject.settings.type=='sm')?'{Jan}':'{January}') + ' {D}, {Y} <div class="zCalIcon"><span class="shortDt">{Sun}</span><span class="shortD">{D}</span></div>' );
			},
			time: function( event ) {
				return Z.Date(event.startTime).format( '{h}:{mm} {am}, ' );
			},
			events: function( events ) {
				return events.map(this.event,this).join('');
			},
			container: zObject.zDiv.find('.zEventArea')
		});
	})( ZventsMini );

	return zObject;
  };
})(jQuery);

function moveMonth(curDate,m) {
	if (m<0) {
		if (curDate.getMonth()+m<0) {
			curDate.setMonth((curDate.getMonth()+12)+m);
			curDate.setFullYear(curDate.getFullYear()-1);
		}
		else curDate.setMonth(curDate.getMonth()+m);
	}
	else if (m>0) {
		if (curDate.getMonth()+m>0) {
			curDate.setMonth((curDate.getMonth()+m)-12);
			curDate.setFullYear(curDate.getFullYear()+1);
		}
		else curDate.setMonth(curDate.getMonth()+m);
	}
	return curDate;
}


function generateMonth(calObj,curDate) {
	calObj.currentDate = curDate;
	calObj.zDiv.find('.zCalWeek').remove();
	calObj.zDiv.find('.zMonthArea').text(calObj.months[curDate.getMonth()]);
	if (calObj.settings.type=='reg') calObj.zDiv.find('.zYearArea').text(curDate.getFullYear());
	else calObj.zDiv.find('.zMonthArea').append(' ' + curDate.getFullYear());
	
	beginPos = curDate.getDay();
	calGrid = '<div class="zCalWeek">';
	for (i=0;i<beginPos;i++) calGrid += '<div class="zNone"></div>';
	newPos = beginPos;
	weekCount = 1;
	for (i=1;i<=getDaysMonth(curDate.getMonth(),curDate.getFullYear());i++) {
		if (newPos==0&&i!=1) {
			calGrid+='<div class="zCalWeek">';
			weekCount++;
		}
		calGrid+='<div><span>' + i + '</span><div class="zDayBg"></div></div>';		
		if (newPos==6) {
			calGrid += "</div>";
			newPos = 0; }
		else newPos++;
	}
	if (weekCount==4) calGrid += ((newPos!=0)?'</div>':'') + '<div class="zCalWeek"></div><div class="zCalWeek"><div class="zNone"></div><div class="zNone"></div>';
	if (weekCount==5) calGrid += ((newPos!=0)?'</div>':'') + '<div class="zCalWeek"><div class="zNone"></div><div class="zNone"></div>';
	if (weekCount==6) while (newPos<2) {
		calGrid+='<div class="zNone"></div>';
		newPos++;
	}
	calGrid+='<div class="zLinkArea"><a href="' + calObj.zUrl + '/events/new">+ ADD AN EVENT</a></div></div>';
	
	calObj.zDiv.find('.zCal').append(calGrid);
	calObj.zDiv.find('.zCalWeek div:not(.zNone, .zLinkArea)').hover(function(){$(this).find('.zDayBg').css('background-color','#fff');},function(){$(this).find('.zDayBg').css('background-color','#ced9e3');}).bind('click',{testObj:calObj},function(e){
		location.href = calObj.zUrl + '/search?swhat=&swhen=' + 
					(e.data.testObj.currentDate.getMonth()+1) + '%2F' + $(this).find('span').text() + '%2F' + e.data.testObj.currentDate.getFullYear()
			  ;
	}).find('.zDayBg').css('background-color','#ced9e3');
}

function getDaysMonth(m,y) {
	day_totals = [31,28,31,30,31,30,31,31,30,31,30,31];
	if (m != 1) return day_totals[m];
	else if ((y % 4) != 0) return 28;
	else if ((y % 400) == 0) return 29;
	else if ((y % 100) == 0) return 28;
	else return 29;
}


