var nbaGameCal = function(){};
var hasBoundBtnClick = false;

nbaGameCal.CalendarParam = function(strDate) {
	var currDate			= new Date(strDate);
	var monthNameArry 	= new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
	var monthDaysArry 	= new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	    
	this.calMonthID		= 0;
	this.currMonth 		= currDate.getMonth();
	this.currDay 			= currDate.getDate();
	this.currYear 			= currDate.getFullYear();
	
	this.monthStart 		= currDate.setDate(1);
	this.AddDays 			= currDate.getDate();
	this.dayOfWeek 		= currDate.getDay();
	this.daysInMonth 		= monthDaysArry[currDate.getMonth()];
	this.monthName			= monthNameArry[currDate.getMonth()];
	this.daysInWeek 		= 7;
	
	this.addMonths	 		= function(oHowMany){currDate.setMonth((currDate.getMonth() + oHowMany))}
	this.getDynoDate 		= function(){return new Date((currDate.getMonth()+1) +'/'+ currDate.getDate() +'/'+ currDate.getFullYear())}
	this.getDynoDateStr 	= function(){return ((currDate.getMonth()+1) +'/'+ currDate.getDate() +'/'+ currDate.getFullYear())}
};

nbaGameCal.MonthPickerObj = function() {
	var activeDate 		= new Date;
	var monthStartDate	= new Date;
	var userSelDate		= null
	var divContainer 		= "nbaCalMonthList";
	var monthToDisplay	= 5;
	var calParam 			= null;
	
	this.initializeCalDate	= _initializeCalDate;
//	this.renderCurrMonth 	= _renderCurrMonth;
	this.renderMultiMonth 	= _renderMultiMonth;
	this.monthScroll			= _monthScroll;

	function _initializeCalDate(oMonthStartDate, oUserSelectedDate, oDivContainer) {
		if(oMonthStartDate){
			monthStartDate = (typeof(oMonthStartDate)== "object") ? oMonthStartDate : new Date(oMonthStartDate);
		}
		if(oUserSelectedDate){
			userSelDate = (typeof(oUserSelectedDate)== "object") ? oUserSelectedDate : new Date(oUserSelectedDate)
		}
		divContainer = oDivContainer;
	};

	function _monthScroll(oOffset) {
		if (oOffset == 0) return;

		$('#'+divContainer).find('td.nbaCalDayCell').unbind();

		monthStartDate.setMonth((monthStartDate.getMonth()+ oOffset)) 
		_renderMultiMonthEx(monthStartDate, monthToDisplay);
	};
	  
//	function _renderCurrMonth() {
//		var calParam = new nbaGameCal.CalendarParam(monthStartDate);
//		_writeCalendar(_getMonthHTML(calParam));
//	}

	function _renderMultiMonth(oMonthCount){
		_renderMultiMonthEx(monthStartDate, oMonthCount);
	};

	function _renderMultiMonthEx(oStartDate, oMonthCount) {
		var currCal 	= new nbaGameCal.CalendarParam(oStartDate)
		var nextCal 	= null;
		var dt			= null;
		var $lDiv		= null;
		var $rDiv		= null;

		var nextMonth 	= 0;
		var nextYear 	= 0;
		var ltValid		= false;
		var rtValid		= false;
		var html 	= '';

		monthToDisplay	= oMonthCount;    	
			
		for (var i = 0; i < monthToDisplay; i++) {    		
			nextCal = new nbaGameCal.CalendarParam(currCal.getDynoDate())  ;
			nextCal.calMonthID = i;
			html += _getMonthHTML(nextCal);	
			currCal.addMonths(1);
		}

		$('#'+divContainer).html(html);
		$('#'+divContainer).find('td.nbaCalDayCell').hover( nbaCalDayHover, nbaCalDayLeave );

		//Turn on or off the right left array appropriately
		dt = new Date(oStartDate);
		dt.setMonth(dt.getMonth()-1);
		dt.setDate(1);
		ltValid = isValidGameRange(dt)

		dt = new Date(oStartDate)
		dt.setMonth(dt.getMonth() + monthToDisplay);
		dt.setDate(1);
		rtValid = isValidGameRange(dt)    	

		// Avoid stacking multiple click functions
		if( !hasBoundBtnClick ) {
			$('div.nbaCalBox a.nbaCalScroll').click( nbaCalScroll );
			hasBoundBtnClick = true;
		}
		$lDiv = $('div.nbaCalBox a.nbaCalLeft').toggleClass( 'nbaCalScrollEnabled', ltValid );
		$rDiv = $('div.nbaCalBox a.nbaCalRight').toggleClass( 'nbaCalScrollEnabled', rtValid );

		currCal	= null;
		nextCal	= null;
		dt			= null;
		$lDiv		= null;
		$rDiv		= null;
	};

	function _getMonthHTML(oCalendarParm) {
		var html		= '';
		var calHl	= '';
		var calHdr	= '';
		var calRow	= 0;
		var uselMo	= 0;
		var uselDy	= 0;
		var uselYr	= 0;
		var gameCalCnt = 0;

		var curMo	= oCalendarParm.currMonth;
		var curDy	= oCalendarParm.AddDays;
		var curYr	= oCalendarParm.currYear;
		var curMn	= oCalendarParm.monthName;
		var curDim	= oCalendarParm.daysInMonth;
		var curDow	= oCalendarParm.dayOfWeek;
		var curDiw	= oCalendarParm.daysInWeek;
		var adMo		= activeDate.getMonth();
		var adYr		= activeDate.getFullYear();

		if ( userSelDate ) {
			uselMo = userSelDate.getMonth();
			uselDy = userSelDate.getDate();
			uselYr = userSelDate.getFullYear();
		}

		if (curDow) {calRow = 1};

		if ((curYr == adYr) && (curMo == adMo)) {
			calHl = 'nbaCalMonthRed';
			calHdr = 'nbaCalMonthHdr';
		}
		
		if ((((curYr % 4)==0) && ((curYr % 100)!=0) || ((curYr % 400)==0)) && (curDim == 28)) { 
			curDim = 29;
		}
		
		html += [
			'<div class="nbaCalMonth ' + calHl + '">',
			'<div class="nbaCalMonthText ' + calHdr + '">' + curMn + '&nbsp;' + curYr + '</div>',
			'<table width="100%" class="nbaCalHover" cellspacing="1" cellpadding="2">',
			'<tr>',
			'<th class="nbaCalCell">S</th>',
			'<th class="nbaCalCell">M</th>',
			'<th class="nbaCalCell">T</th>',
			'<th class="nbaCalCell">W</th>',
			'<th class="nbaCalCell">T</th>',
			'<th class="nbaCalCell">F</th>',
			'<th class="nbaCalCell">S</th>',
			'</tr>',
			'<tr>'
		].join('');


		for (var i = 0, l = curDim+1; curDy < l; i++) {
			if (i < curDow){
				html += '<td class="nbaCalCellLt"></td>';
			} else {
				if ((i % curDiw) == 0){
					html += '</tr><tr>';
					calRow++;
				}

				var calSelDate	= (curMo+1) + "/" + curDy + "/" +  curYr;
				var calDaySelected = "";

				if (uselYr && curYr == uselYr && curMo == uselMo && curDy == uselDy) {
					calDaySelected = "nbaCalCellRed";
				}
				
				var dtStr = calSelDate;
				if (nbaCalSets.meta[dtStr]) {
					gameCalCnt = nbaCalSets.meta[dtStr].games;
				}
				if (isValidGameRange(calSelDate) && gameCalCnt != 0){
					var hrefPath = getPath(curMo+1,curDy,curYr);
					html += '<td class="nbaCalDayCell nbaCalCellDk '+calDaySelected+'">';
					html += '<a href="'+hrefPath+'">'+curDy+'</a></td>';
				}else{
					html += '<td class="nbaCalCellDk '+calDaySelected+'">'+curDy+'</td>';
					//html += '<td class="nbaCalCellDk '+calDaySelected+'"><a href="javascript:void(0);">'+(gameCalCnt?curDy:'&nbsp;')+'</a></td>';
					//html += '<td class="nbaCalCellDk '+calDaySelected+'"><a href="javascript:void(0);">&nbsp;</a></td>';
				}
				curDy++;
			}
		}
		var calCellTot = calRow*curDiw;
		var calFiller = (calCellTot - curDim) - curDow;
		
		for (var i = 0; i < calFiller; i++){
			html += '<td class="nbaCalCellLt"></td>';
		}
		html += '</tr>';
		if (curDow < 5) {
			html += [
				'<tr>',
				'<td class="nbaCalCellLt">&nbsp;</td>',
				'<td class="nbaCalCellLt">&nbsp;</td>',
				'<td class="nbaCalCellLt">&nbsp;</td>',
				'<td class="nbaCalCellLt">&nbsp;</td>',
				'<td class="nbaCalCellLt">&nbsp;</td>',
				'<td class="nbaCalCellLt">&nbsp;</td>',
				'<td class="nbaCalCellLt">&nbsp;</td>',
				'</tr>'
			].join('');
		}
		html += '</table></div>';
		return (html);
	};
};

function nbaCalScroll( ) {
	var $el = $(this);
	if ( $el.hasClass('nbaCalScrollEnabled') ) {
		if ( $el.hasClass('nbaCalLeft') ) {
			nbaCalSets.monthcal.monthScroll(-1);
		} else if ( $el.hasClass('nbaCalRight') ) {
			nbaCalSets.monthcal.monthScroll(1);
		}
	}
	$el = null;
	return false;
};

function nbaCalDayHover() {
	$(this).addClass('nbaCalCellWht');
};

function nbaCalDayLeave() {
	$(this).removeClass('nbaCalCellWht');
};

function resetCalendars() {	
	var currDate = new Date();
	var mdy = [
		currDate.getMonth()+1,
		currDate.getDate(),
		currDate.getFullYear()
	];

	if (isValidGameRange( mdy.join('/') )) {
		if (mdy[0] < 10) { mdy[0] = "0"+mdy[0]; }
		if (mdy[1] < 10) { mdy[1] = "0"+mdy[1]; }
		document.location.href = (nbaGamelineRoot + String(mdy[2])+String(mdy[0])+String(mdy[1]));

	}
};


