
window.nbaDayLastClicked 	= -1;
window.calDayObj 			= null;
window.nbaTVDetailDescArry 	= new Array();
window.nbaTvDayPicker 		= function(){};
window.nbaTVRespJSONobj 	= null;

nbaTvDayPicker.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;
}
nbaTvDayPicker.DateParam = function(strDate)
{
	
	var currDate 		= new Date(strDate);
    var monthNameArry 	= new Array("JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC");
    var dayNameArry 	= new Array("SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY");
    
    this.dayID			= 0;
    this.currMonth 		= currDate.getMonth();
    this.currDay 		= currDate.getDate();
    this.currYear 		= currDate.getFullYear();
 
    this.dayOfWeek 		= currDate.getDay();
    this.monthName		= monthNameArry[currDate.getMonth()]
    this.dayName		= dayNameArry[currDate.getDay()]
   
   	this.addDays 		= function(oHowMany){currDate.setDate((currDate.getDate() + oHowMany))}
	this.getDynoDate 	= function(){return new Date((currDate.getMonth()+1) + '/' + currDate.getDate() + '/' + currDate.getFullYear())}
}

nbaTvDayPicker.DayPickerObj = function()
{
	var activeDate 		= _stripOutTime(new Date())
	var dayStartDate	= _stripOutTime(new Date())
	var usrSelDate		= _stripOutTime(new Date())
	
	var divContainer 	= "nbaStripContainer";
	var daysToDisplay	= 5;
	var daystoOffeset	= -3;
	var weekViewed		= 0;
	var calParam 		= null;
	var tabInitClickID	= -1;
	var tabInitClicked	= false;
	    
    this.initializeCalDate	= _initializeCalDate;
    this.renderCurrDay	 	= _renderCurrDay;
    this.renderMultiDays 	= _renderMultiDays;
    this.dayScroll			= _dayScroll;
    this.stripOutTime		= _stripOutTime;
    
    this.setSelectedDate	= _setSelectedDate;
    this.setWeekCounter		= _setWeekCounter;
    
    function _setSelectedDate(oDate){
    	usrSelDate	= _stripOutTime(oDate);
    }
    function _setWeekCounter(oNum){
    	weekViewed	+= oNum;
    }
    
    function _initializeCalDate(oDayStartDate, oDivContainer, oNumOfDays, oOffset)
    {
    	dayStartDate 	= _getStartOfWeek(_stripOutTime(oDayStartDate));
    	usrSelDate		= _stripOutTime(oDayStartDate);
    	divContainer 	= oDivContainer;
    	daysToDisplay 	= oNumOfDays;
    	daystoOffeset	= oOffset;
    }
    
    function _getStartOfWeek(oDate)
    {	var iDate = new Date(oDate);
    		iDate.setDate(oDate.getDate()- oDate.getDay());
    	return iDate;
    }
    
   	function _dayScroll(oDaysToScroll)
   	{
   		var newDate = null;
   		if (oDaysToScroll > 0 && weekViewed < 2){
   			newDate = dayStartDate.setDate((dayStartDate.getDate() + oDaysToScroll))
        	_renderMultiDays();
        	weekViewed++;
        }else if (oDaysToScroll < 0 && weekViewed > 0){
        	newDate = dayStartDate.setDate((dayStartDate.getDate() + oDaysToScroll))
        	_renderMultiDays();
        	weekViewed--;
        }
   		
   		if (weekViewed == 2) {
   			$('nbaScrollRight').hide();
   		}
   		
   		else if (weekViewed == 0) {
   			$('nbaScrollLeft').hide();
   		}
   		
   		else {
   			$('nbaScrollRight').show();
   			$('nbaScrollLeft').show();
   		}
   			
   	}
   	
    function _renderCurrDay()
    {
    	var calParam = new nbaTvDayPicker.DateParam(dayStartDate)
    	_writeCalendar(_getDayHTML(calParam));
    }
    function _renderMultiDays()
    {
    	
    	var dateOffset = new Date(dayStartDate);
    	if (daystoOffeset != 0){
    		dateOffset.setDate((dateOffset.getDate() + daystoOffeset));
    	}
    	var startDayObj 	= new nbaTvDayPicker.DateParam(dateOffset)
    	var nextDayObj		= null; 
    	var calHTMLtxt 		= "";
   
	    for (var i = 0; i < daysToDisplay; i++)
	    {    		    				  
			nextDayObj = new nbaTvDayPicker.DateParam(startDayObj.getDynoDate())  
			nextDayObj.dayID = i;
			calHTMLtxt += _getDayHTML(nextDayObj);	
			startDayObj.addDays(1);				
	    }
	    _writeCalendar(calHTMLtxt);
	    
	    if (!tabInitClicked){
	    	var strDate = ((usrSelDate.getMonth()+1) + "/" + usrSelDate.getDate() + "/" + usrSelDate.getFullYear())
	    	nbaTvDayPicker.CalDayOnClick(tabInitClickID, strDate)
	    	tabInitClicked = true;	
	    }
    }
    function _getDayHTML(oDayParam)
    {
    	var calHTML = '';
    	var calSelDate 	= (oDayParam.currMonth+1) + "/" + oDayParam.currDay + "/" +  oDayParam.currYear;
    	var tabdate		= (oDayParam.currMonth+1) + "/" + oDayParam.currDay;
    	var calSelClass = _getAttrib("selectedDay", oDayParam)
    	tabInitClickID	= _getAttrib("tabClicked", oDayParam)
   
    	calHTML += '<li id="nbaTVSchDay' + oDayParam.dayID + '"  class="' + calSelClass + '"><a href="javascript:nbaTvDayPicker.CalDayOnClick(' + oDayParam.dayID + ',\'' + calSelDate + '\')"><span>' + oDayParam.dayName + '</span>' + tabdate + '</a></li>';
    	return (calHTML);
    }
    function _getAttrib(oAttrib, oDayParam)
    {
    	var attrib = "";
    	switch(oAttrib){
    		case "selectedDay" :
				attrib = (oDayParam.currDay == usrSelDate.getDate() && oDayParam.currMonth == usrSelDate.getMonth()) ? "nbaBlueDay" : "";
				break;
			case "tabClicked":
				attrib = (Date.parse(oDayParam.getDynoDate()) == Date.parse(usrSelDate)) ? oDayParam.dayID : tabInitClickID;
				break;
			
    		
    	}
    	return attrib
    }
    function _writeCalendar(calHTMLtxt)
    {
    	//alert(calHTMLtxt);
    	$(divContainer).innerHTML = calHTMLtxt;
    	
    }
    function _stripOutTime(oDate)
    {
    	if(typeof(oDate) == "object"){
    		return (new Date((oDate.getMonth()+1) + "/" + oDate.getDate() + "/" + oDate.getFullYear()));	
    	}else{
    		var iDate = new Date(oDate)
    		return (new Date((iDate.getMonth()+1) + "/" + iDate.getDate() + "/" + iDate.getFullYear()));
    	}    	
    }
}
nbaTvDayPicker.CalDayOnClick = function(aId, oSelectedDate)
{
	var dayID = "nbaTVSchDay"
	var currDayClickedID	= dayID + aId;
	var lastDayClickedID	= dayID + nbaDayLastClicked;
	var currClickID = $(currDayClickedID);
	var lastClickID = null;

	//currClickID.removeClassName('nbaGrayDay');
	currClickID.addClassName('nbaBlueDay');
	
	try{
		if (currDayClickedID != lastDayClickedID){
			lastClickID = $(lastDayClickedID)
			lastClickID.removeClassName('nbaBlueDay');
			//lastClickID.addClassName('nbaGrayDay');
		}
	}catch(_eRR){
		//do nothing	
	}
	nbaDayLastClicked = aId
	calDayObj.setSelectedDate(oSelectedDate);
	renderTable(oSelectedDate);
} 

//Namespace: nbaTvDayPicker


 
//Object to hold error/results returned by Ajax call
nbaTvDayPicker.responseObj = function (oCode, oMsg){
   this.code = oCode;
   this.msg = oMsg;
} 

//Class to wrap prototype Ajax.Request to provide a 
//more elegant approach to error handling and reporting.
nbaTvDayPicker.AjaxRequester = Class.create(Ajax.Request, {
    initialize: function($super, url, options) {
         $super(url,nbaTvDayPicker.AjaxOptions(options));
    }
})
 
//Option object to pass to nbaTvDayPicker.AjaxRequester wrapper.
nbaTvDayPicker.AjaxOptions = function (options) {
    return Object.extend({
     asynchronous:false,
     //evalScripts:true,
     //evalJSON:true,
     //contentType:"application/json",
     
     onLoading: function(request){
     	//Element.hide('nbaListFilters');
     },
     onException: function(request,exception) {
     	//alert(3);
       	options.respCallBack( new nbaTvDayPicker.responseObj(3, exception))
     },
     onFailure: function(t) {
     	//alert(2);
       	options.respCallBack( new nbaTvDayPicker.responseObj(2, (t.status + ": " + t.statusText)) );
     },
     on404: function(t) {
     	//alert(1);
       	options.respCallBack( new nbaTvDayPicker.responseObj(1, (t.status + ": " + t.statusText)) );
     },
     onSuccess: function(t){
     	//alert(0);
       	options.respCallBack( new nbaTvDayPicker.responseObj(0, t.responseText.evalJSON()) );
    }
  }, options || {});
}
 
//Ajax Callback Handler
nbaTvDayPicker.AjaxResponseHandler = function(resObj){
	nbaTVRespJSONobj = null;
    if (resObj.code == 0){
        nbaTVRespJSONobj = resObj.msg;
    }else{
       //nbaTvDayPicker.MsgLogger(resObj.msg);
       //nbaTvDayPicker.MsgLogger("Error: JSON is missing or Malformed");
   }
}

nbaTvDayPicker.MsgLogger = function(oMsg, oStatuDiv){
	if (oStatuDiv){
		$(oStatuDiv).innerHTML = oMsg;
	}else{
		alert(oMsg);	
	}
}
