/* $(item).jTable({
		startDay: how many cells in does the month start (leave zero for non-calendars),
		numberAcross: how many cells in each row,
		isCalendar: true or false for type of table,
		cellPadding: the equal padding for each cell,
		cellBack: the background image for the normal cells,
		altColor: the hex value color for the alternating cells,
		altBack : the background image for the alternating cells,
		emptyColor: the hex value color for the empty cells,
		titleColor: the hex value color for the days of the week bar
	});

	*note: the item the function is called on must have a padding of zero on all sides.
*/

$.fn.jTable=function(options){
	
	var defaults = {
		'startOffset': 0,
		'numberAcross': 1,
		'isCalendar': false,
		'cellPadding': 0,
		'cellBack': 'none',
		'cellColor': 'transparent',
		'altColor': 'transparent',
		'altBack': 'none',
		'emptyColor': '#c9c9cb',
		'titleColor': '#c9c9cb',
		'contentColor': 'transparent',
		'contentBack': 'none',
		'futureMonth': 0,
		'cellHeight': 0,
		'rowColor': '#ffffff',
		'altRowColor': '#efefef',
		'textAlign': 'left',
		'rowColorOffset': 0,
		'titleText':'black'
	};
	
	var opts = $.extend(defaults, options);
	
	$('cell').hide();
	var altColor = defaults.altColor;
	var emptyColor = defaults.emptyColor;
	var offset = defaults.startOffset;
	
	if (offset == 'auto')
	{
		if ( defaults.futureMonth == 0)
		{
			var d = new Date();
			var week = d.getDay();
			var date = d.getDate();
			for (k=date;k>0;k--)
			{
				if(week<0)
				{
					week=6;
				}
				week--;
			}
			offset=week+1;
		}
		else{
			var d = new Date();
			var month = d.getMonth();
			
			d.setMonth((month+defaults.futureMonth),1);
			
			var week = d.getDay();
			var date = d.getDate();
			for (k=date;k>0;k--)
			{
				if(week<0)
				{
					week=6;
				}
				week--;
			}
			offset=week+1;
	
		}
	}
	
	var cellPadding = defaults.cellPadding;
	var parentBorder = $(this).css('border');
	var numberAcross = defaults.numberAcross;
	
	if (defaults.isCalendar == true){
		numberAcross = 7;
	}

	var totalWidth = $(this).width();
	var cellWidths = Math.floor((totalWidth/numberAcross)-1-(cellPadding*2));
	var edgeDifference = Math.ceil((((totalWidth/numberAcross)-1-(cellPadding*2)) - (Math.floor((totalWidth/numberAcross)-1-(cellPadding*2)))) * numberAcross);
	var theCells =$(this).find('.cell');
	var itemCount = theCells.length + offset;
	var totalRows = Math.ceil(itemCount/numberAcross);
	var couldFit =(totalRows*numberAcross);
	var lastRow = (totalRows-1)*numberAcross - 1;
	var daysHeight = 0;
	
	if (defaults.isCalendar == true){
		var cellHeight = cellWidths;
	}
	else{
		var cellHeight = defaults.cellHeight;
	}
	
	
	$(theCells).each(function(){
		$(this).css({'width':cellWidths,'height':cellHeight,'float':'left','margin':'0px','border-right':parentBorder,'border-bottom':parentBorder,'border-width':'1px','overflow':'hidden','padding':cellPadding,'position':'relative','background-color':defaults.cellColor,'background-image':'url('+defaults.cellBack+')','background-position':'top left','background-repeat':'repeat-x'});
		if (defaults.isCalendar == true){
			var number = $(theCells).index(this) + 1;
			$(this).append('<div style="position:absolute;font-weight:bold;top:'+cellPadding+'px;right:'+cellPadding+'px;" class="date">'+number+'</div>');
		}
		var theContent = $(this).contents().not('.date').text();
		if (theContent != '')
		{
			$(this).attr('content','yes');
		}
	});
	
	
	if (defaults.isCalendar == true){
		$(this).find('.cell:odd').css({'background-color':altColor,'background-image':'url('+defaults.altBack+')','background-position':'top left','background-repeat':'repeat-x'});
		$('.cell[content]').css({'background-color':defaults.contentColor,'background-image':'url('+defaults.contentBack+')','background-position':'top left','background-repeat':'repeat-x'});
	}
	else{
		var rowIndex = numberAcross-1;
		var rowOffset = defaults.rowColorOffset * numberAcross;
		$(this).find('.cell').css({'background-color':defaults.rowColor,'text-align':defaults.textAlign});
		
		for (x=(numberAcross+rowOffset);x<=itemCount;x=x+(numberAcross*2)){
			for (c=0;c<numberAcross;c++){
				$(this).find('.cell:eq('+(x+c)+')').css('background-color',defaults.altRowColor);
			}
		}
	}
	
	if (offset == 0){
		//
		var rights= $(this).find('.cell:nth-child('+numberAcross+'n)');
		$(rights).css('border-right','none');
		$(rights).width(($(rights).width() + 1 + edgeDifference));
		
		var bottoms = $(this).find('.cell:gt('+lastRow+')');
		$(bottoms).css('border-bottom','none');
		
		//
	}
	else{
		//
		lastRow = (totalRows-1)*numberAcross - 1;
		
		var rights= $(this).find('.cell:nth-child('+(numberAcross)+'n-'+offset+')');
		$(rights).css('border-right','none');
		$(rights).width(($(rights).width() + 1 + edgeDifference));
		
		var bottoms = $(this).find('.cell:gt('+lastRow+')');
		$(bottoms).css('border-bottom','none');
		
		$(this).find('.cell:first').css({'border-left':parentBorder,'margin-left':'-1px'});
		
		for (b=offset;b>0;b--){
			var fillerCell = '<div class="cell" style="width:'+cellWidths+'px;height:'+cellHeight+'px;float:left;margin:0px;background-color:'+emptyColor+';display:block;border-right:'+parentBorder+';border-color:#c9c9cb;overflow:hidden;padding:'+cellPadding+'px;border-bottom:'+parentBorder+';"></div>';
			$(this).find('.cell:first').before(fillerCell);
		}
		
		//
	}
	
	if (couldFit > itemCount){
		var afterFills = couldFit - itemCount;
		var fillerCell = '<div class="cell" style="width:'+cellWidths+'px;height:'+cellHeight+'px;float:left;margin:0px;background-color:'+emptyColor+';display:block;border-right:'+parentBorder+';border-color:#c9c9cb;overflow:hidden;padding:'+cellPadding+'px"></div>';
		var fillerCellLast = '<div class="cell" style="width:'+(cellWidths + edgeDifference)+'px;height:'+cellHeight+'px;float:left;margin:0px;background-color:'+emptyColor+';display:block;border-right:'+parentBorder+';border-color:#c9c9cb;overflow:hidden;padding:'+cellPadding+'px"></div>';
		
		for (x=afterFills;x>0;x--)
		{
			if (x!=1){
			$(this).find('.cell:last').after(fillerCell);
			}
			else{
				$(this).find('.cell:last').after(fillerCellLast);	
			}
		}
	};
	
	if (defaults.isCalendar == true){
		var extra = 0;
		
		if (offset != 0){
			extra = edgeDifference;
		}
		
		var days =
		'<div style="width:'+(cellWidths+1)+'px;float:left;height:20px;text-align:center;position:relative;padding:'+cellPadding+'px;background-color:'+defaults.titleColor+';border-bottom:'+parentBorder+';font-weight:bold;padding-top:10px;color:'+defaults.titleText+';">Sunday</div>'+
		'<div style="width:'+(cellWidths+1)+'px;float:left;height:20px;text-align:center;position:relative;padding:'+cellPadding+'px;background-color:'+defaults.titleColor+';border-bottom:'+parentBorder+';font-weight:bold;padding-top:10px;color:'+defaults.titleText+';">Monday</div>'+
		'<div style="width:'+(cellWidths+1)+'px;float:left;height:20px;text-align:center;position:relative;padding:'+cellPadding+'px;background-color:'+defaults.titleColor+';border-bottom:'+parentBorder+';font-weight:bold;padding-top:10px;color:'+defaults.titleText+';">Tuesday</div>'+
		'<div style="width:'+(cellWidths+1)+'px;float:left;height:20px;text-align:center;position:relative;padding:'+cellPadding+'px;background-color:'+defaults.titleColor+';border-bottom:'+parentBorder+';font-weight:bold;padding-top:10px;color:'+defaults.titleText+';">Wednesday</div>'+
		'<div style="width:'+(cellWidths+1)+'px;float:left;height:20px;text-align:center;position:relative;padding:'+cellPadding+'px;background-color:'+defaults.titleColor+';border-bottom:'+parentBorder+';font-weight:bold;padding-top:10px;color:'+defaults.titleText+';">Thursday</div>'+
		'<div style="width:'+(cellWidths+1)+'px;float:left;height:20px;text-align:center;position:relative;padding:'+cellPadding+'px;background-color:'+defaults.titleColor+';border-bottom:'+parentBorder+';font-weight:bold;padding-top:10px;color:'+defaults.titleText+';">Friday</div>'+
		'<div style="width:'+(cellWidths+edgeDifference+1)+'px;float:left;height:20px;text-align:center;position:relative;padding:'+cellPadding+'px;background-color:'+defaults.titleColor+';border-bottom:'+parentBorder+';font-weight:bold;padding-top:10px;color:'+defaults.titleText+';"">Saturday</div>';
		daysHeight = 31;
		$(this).prepend(days);
	}
	
	$(this).height(totalRows*cellHeight+(totalRows*(cellPadding*2)) + daysHeight);
	$(this).css('overflow','hidden');
	
	$(theCells).show();

};