window.nbaMonthPicker = function(){}
nbaMonthPicker.qStringParser = function(key) 
{
	var qString 	= window.location.search.substring(1);
	var keyArry 	= qString.split("&");
	var valArry		= new Array();
	var keyVal		= '';
	for (var i = 0;i < keyArry.length; i++) 
	{
		valArry = keyArry[i].split("=");
		if (valArry[0] == key) {
			keyVal = valArry[1];
		}
	}
	return keyVal;
}

nbaMonthPicker.CalendarParam = function(strDate)
{
	var currDate 		= new Date(strDate);
    var monthNameArry 	= new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
    
    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 	= currDate.getCurrMonthDays();
    this.monthName		= monthNameArry[currDate.getMonth()];
   	this.daysInWeek 	= 7;
   	
   	this.addMonths	 	= function(oHowMany){currDate.addMonths(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())}
}

nbaMonthPicker.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)
   	{
   		monthStartDate.addMonths(oOffset);
        _renderMultiMonthEx(monthStartDate, monthToDisplay);
   	}
   	
    function _renderCurrMonth()
    {
    	var calParam = new nbaMonthPicker.CalendarParam(monthStartDate);
    	_writeCalendar(_getMonthHTML(calParam));
    }
    
    function _renderMultiMonth(oMonthCount){
    	_renderMultiMonthEx(monthStartDate, oMonthCount);
    }
    function _renderMultiMonthEx(oStartDate, oMonthCount)
    {
    	var currCalParam = new nbaMonthPicker.CalendarParam(oStartDate)
    	var nextMonth 		= 0;
    	var nextYear 		= 0;
    	var nextCal 		= null;
    		monthToDisplay 	= oMonthCount;    	
    	
    	var calHTMLtxt = '';
    	
    	for (var i = 0; i < monthToDisplay; i++)
    	{    		
			nextCal = new nbaMonthPicker.CalendarParam(currCalParam.getDynoDate());
			nextCal.calMonthID = i;
			calHTMLtxt += _getMonthHTML(nextCal);
			currCalParam.addMonths(1);
    	}
    	_writeCalendar(calHTMLtxt);
    	
    	//Turn on or off the right left array appropriately
    	var preDate = new Date(oStartDate);
    		preDate.setMonth(preDate.getMonth()-1);
    		preDate.setDate(1);
    	var posDate = new Date(oStartDate)
    		posDate.setMonth(posDate.getMonth() + monthToDisplay);
    		posDate.setDate(1);
    	var lftErrArry = isValidGameRang(preDate)
    	var rftErrArry = isValidGameRang(posDate)    	
    	
    	var arrLt = $("nbaMonthLtAnchor")
    	var arrRT = $("nbaMonthRtAnchor")
    	
    	 if (lftErrArry[0] != 0){
    		arrLt.href = "javascript:void(0);";
    		arrLt.firstDescendant().className = "nbaCalArLftOut"
    	}else{
    		arrLt.href = "javascript:calMonthObj.monthScroll(-1);";
    		arrLt.firstDescendant().className = "nbaCalArLft"
    	}
    	if (rftErrArry[0] != 0){
    		arrRT.href = "javascript:void(0);";
    		arrRT.firstDescendant().className = "nbaCalArRtOut"
    	}else{    		
    		arrRT.href = "javascript:calMonthObj.monthScroll(1);";
    		arrRT.firstDescendant().className = "nbaCalArRt"
    	}
    }
    function _getMonthHTML(oCalendarParm)
    {
    	var calRow = (oCalendarParm.dayOfWeek == 0) ? 0 : 1;
    	var calHTML = '';
    	var calHighlight = ((oCalendarParm.currYear == activeDate.getFullYear()) && (oCalendarParm.currMonth == activeDate.getMonth())) ? "nbaCalMonthRed" : "";
        
        calHTML += '<div class="nbaCalMonth">';
        calHTML += '<div class="nbaCalMonthText">' +  oCalendarParm.monthName + '&nbsp;' + oCalendarParm.currYear + '</div>';

        calHTML += '<table width="100%" class="nbaCalHover ' + calHighlight + '" cellspacing="1" cellpadding="2">';
        calHTML += '<tr>';
        calHTML += '<th class="nbaCalCell">S</th>';
       	calHTML += '<th class="nbaCalCell">M</th>';
        calHTML += '<th class="nbaCalCell">T</th>';
        calHTML += '<th class="nbaCalCell">W</th>';
        calHTML += '<th class="nbaCalCell">T</th>';
        calHTML += '<th class="nbaCalCell">F</th>';
        calHTML += '<th class="nbaCalCell">S</th>';
        calHTML += '</tr>';
        calHTML += '<tr>';
                        
        for (var i = 0; oCalendarParm.AddDays < oCalendarParm.daysInMonth + 1; i++)
        {
			if (i < oCalendarParm.dayOfWeek){
                 calHTML += '<td class="nbaCalCellLt"></td>';
            } 
            else 
            {
            	if ((i % oCalendarParm.daysInWeek) == 0){
					calHTML += '</tr>';
					calRow++;
					calHTML += '<tr>';
				}
				var calSelDayId 		= 'cal' + oCalendarParm.calMonthID + 'day' + oCalendarParm.AddDays;
				var calSelDate 			= (oCalendarParm.currMonth+1) + "/" + oCalendarParm.AddDays + "/" +  oCalendarParm.currYear;
				var calMonthStartDate 	= (monthStartDate.getMonth()+1) + "/" + monthStartDate.getDate() + "/" +  monthStartDate.getFullYear();
				var calDaySelected 		= "";
				if (userSelDate){
					calDaySelected = ((oCalendarParm.currYear == userSelDate.getFullYear()) && (oCalendarParm.currMonth == userSelDate.getMonth()) && (oCalendarParm.AddDays == userSelDate.getDate())) ? "nbaCalCellRed" : "";
				}
				if (isValidGameRang(calSelDate)[0] == 0){
					calHTML += '<td id="td'+calSelDayId+'" onmouseover="nbaMonthPicker.DayHover(this.id,true)" onmouseout="nbaMonthPicker.DayHover(this.id,false)" class="nbaCalCellDk ' + calDaySelected + '"><a id="' + calSelDayId + '" href="javascript:nbaMonthPicker.CalDayOnClick(\'' + calSelDayId + '\',\'' + calSelDate + '\',\'' + calMonthStartDate + '\');">' + oCalendarParm.AddDays + '</a></td>';
				}else{
					calHTML += '<td id="td'+calSelDayId+'" class="nbaCalCellDk ' + calDaySelected + '"><a id="' + calSelDayId + '" href="javascript:void(0);">&nbsp;</a></td>';
				}
                oCalendarParm.AddDays++;
            }
        }
        var calCellTot = calRow*oCalendarParm.daysInWeek;
        var calFiller = (calCellTot - oCalendarParm.daysInMonth) - oCalendarParm.dayOfWeek;
                
        for (var i = 0; i < calFiller; i++){
        	calHTML += '<td class="nbaCalCellLt"></td>';
        }
        calHTML += '</tr>';
        if (oCalendarParm.dayOfWeek < 5)
        {
			 calHTML += '<tr>';
			 calHTML += '<td class="nbaCalCell">&nbsp;</td>';
			 calHTML += '<td class="nbaCalCell">&nbsp;</td>';
			 calHTML += '<td class="nbaCalCell">&nbsp;</td>';
			 calHTML += '<td class="nbaCalCell">&nbsp;</td>';
			 calHTML += '<td class="nbaCalCell">&nbsp;</td>';
			 calHTML += '<td class="nbaCalCell">&nbsp;</td>';
			 calHTML += '<td class="nbaCalCell">&nbsp;</td>';
			 calHTML += '</tr>';
        }
        calHTML += '</table>';
        calHTML += '</div>';
        return (calHTML);
    }
    
    function _writeCalendar(calHTMLtxt)
    {
    	$(divContainer).innerHTML = calHTMLtxt;
    }
}
nbaMonthPicker.DayHover = function(oDivId, isInOut)
{
	var iDiv = $(oDivId)
	if (isInOut){
		 iDiv.addClassName('nbaCalCellWht') 
	}else{
		 iDiv.removeClassName('nbaCalCellWht');
	}
}
nbaMonthPicker.CalDayOnClick = function(aId, oSelectedDate, oMonthStartDate){
	 calDayOnClick(aId, oSelectedDate, oMonthStartDate)
} 
