if ( window.console == undefined || window.console.log == undefined ) {	window.console = { log:function(msg){ /* msg */ } } }
if ( typeof(window.billboard)=="undefined"){ billboard={}; }

billboard.calendar = new ( function($) {

    var me = this;
	var YEAREND_END = 2007;
	var YEAR_END = 1955;

    var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];
	var monthOutput = '<div class="list month-list"><ul>'
					+ '<li id="month-0">January</li>'
					+ '<li id="month-1">February</li>'
					+ '<li id="month-2">March</li>'
					+ '<li id="month-3">April</li>'
					+ '<li id="month-4">May</li>'
					+ '<li id="month-5">June</li>'
					+ '<li id="month-6">July</li>'
					+ '<li id="month-7">August</li>'
					+ '<li id="month-8">September</li>'
					+ '<li id="month-9">October</li>'
					+ '<li id="month-10">November</li>'
					+ '<li id="month-11">December</li>'
					+ '</ul></div>';
	var yearList ="";
	var isFirst = true;
	me.monthLocale = months;
    var renderCalendar = function(calRows){
        $("#calendar").html('');
		if(me.pickType != 'year'){
			$("#calendar").html(
				'<table>'
				+ '<tr>'
				+ '<th>Sun</th>'
				+ '<th>Mon</th>'
				+ '<th>Tue</th>'
				+ '<th>Wed</th>'
				+ '<th>Thu</th>'
				+ '<th>Fri</th>'
				+ '<th>Sat</th>'
				+ '</tr>'
				+ calRows
				+ '</table>'
			);
		}
		

        if(me.pickType == 'day'){
			

            $("#calendar").prepend(
				'<div class="change-date">'
                + '<div id="change-month" class="drop-down">'
                + '<span>' + months[me.month] + '</span>'
				+ '<div class="drop-list"></div>'
				+ monthOutput
                + '</div>'
				+ '<div id="change-year" class="drop-down">'
                + '<span>' + me.year + '</span>'
				+ '<div class="drop-list"></div>'
				+ yearList
                + '</div>'
				+ '</div>'
            );
			$("#calendar").append(
				'<div class="extra-text">Select a Date to View Chart</div>'
			);
        }
		else if (me.pickType == 'year'){
			var prehtml = "";
			var todaysDate = new Date();
			prehtml += '<div class="change-date year-only">'
				+ '<div id="change-year" class="drop-down">'
                + '<span>' + me.year + '</span>'
				+ '<div class="drop-list"></div>'
				+ yearList
				+ '</div></div>';
			$("#calendar").prepend(prehtml);
			$("#calendar").append(
				'<div class="extra-text">Select a Year to View Year-End Chart</div>'
			);
		}
        $("#calendar tr").hover(
            function(){
                $(this).addClass("over");
            }
            ,function(){
                if(!$(this).hasClass("selected")){
                    $(this).removeClass("over");
                }
            }
        );
		$(".charts #calendar td").each( function(count){
			if(me.year==me.origYear && me.month==me.origMonth && $(this).text()==me.day){
				if((me.day>22 && count >7) || (me.day<7 && count < 14) || (me.day <=22 && me.day >=7))
					$(this).parent("tr").addClass("current-week");
			}
			$(this).hover(
				function(){
					$(this).parent("tr").addClass("over");
				},
				function(){
					$(this).parent("tr").removeClass("over");
				}
			);
		});
		// set onclick event
		$("#change-month .drop-list,#change-year .drop-list").click(function(){
			$(this).parent(".drop-down").find(".list").toggle();
			if($(this).parents(".change-date").find(".list").is(':visible')){
				$("#calendar table,#calendar .extra-text").addClass("show-opacity");
			}
			else{
				$("#calendar table,#calendar .extra-text").removeClass("show-opacity");
			}
		});
		$("#change-month .list li,#change-year .list li").each(function(){
			$(this).click(function(){
				var val = $(this).attr("id").split("-");
				var selected = parseInt(val[1]);
				if($(this).parents(".year-only").length>0){
					me.setYear($(this).text());
					billboard.history.setHash( me.dayUrl + "?year=" + me.year);
				}
				else{
					if(val[0] == 'month')
						me.setMonth(selected - me.month);
					else{
						me.setMonth((selected - me.year) * 12);
					}
				}

			});
			$(this).hover(
				function(){
					$(this).addClass("hover-selection");
				},
				function(){
					$(this).removeClass("hover-selection");
				}
			);
		});
		
		$("#month-"+me.month).addClass("current");
		$("#year-"+me.year).addClass("current");
		
		var s = new Scroller($("#year-holder"),$("#year-holder ul"));
		s.makeDraggable($("#year-holder").find(".scroll-thumb"));

		
    }; 

    me.dayUrl = '';
    me.pickType = 'day';
	me.origYear = 0;
	me.origMonth = 0;
    me.month = 0;
    me.year = 0;
	me.day = 0;
	
	me.setYearList = function(){
		yearList = '<div id="year-holder" class="list year-list"><ul>';
		for(var i=me.origYear;i>=YEAR_END;i--){
			if(i < YEAREND_END)
				yearList += '<li id="year-'+ i +'" class="end-clear">'+ i + '</li>';
			else yearList += '<li id="year-'+ i +'">'+ i + '</li>';
		}
		yearList += '</ul></div>';
		isFirst = false;
	};
    me.setMonth = function (step) {		
        var currDate = new Date();
        var years = Math.abs(step) >= 12 ? Math.abs(Math.floor(step/12)) : 1;
        if (me.pickType == 'day'){
            var currMonth = me.month + parseInt(step);
            var currYear = me.year;
        } else {
            var currMonth = currDate.getMonth() + parseInt(step);
            var currYear = currDate.getFullYear();
        }

        if (currMonth < 0){
            me.month = currMonth + (12*years);
            me.year = currYear - years;
        } else if (currMonth > 11) {
            me.month = currMonth - (12*years);
            me.year = currYear + years;
        } else {
            me.month = currMonth;
            me.year = currYear;
        }
		if(step!='all'&& step!=0) {
			var defaultMonthEnd =new Date(me.year,me.month+1,0);
			var monthEndMonth= (defaultMonthEnd.getMonth()+1)<10 ? "0" + (defaultMonthEnd.getMonth()+1) : defaultMonthEnd.getMonth()+1;
			var monthEndDay= defaultMonthEnd.getDate()<10 ? "0" + defaultMonthEnd.getDate() : defaultMonthEnd.getDate();

			var monthEndStr= monthEndMonth + "/" + monthEndDay + "/" + defaultMonthEnd.getFullYear();
			
			var defaultMonthStart=new Date(me.year,me.month,0);
			defaultMonthStart.setDate(defaultMonthStart.getDate() + 1);
			
			var monthStartMonth= (defaultMonthStart.getMonth()+1)<10 ? "0" + (defaultMonthStart.getMonth()+1) : defaultMonthStart.getMonth()+1;
			var monthStartDay= defaultMonthStart.getDate()<10 ? "0" + defaultMonthStart.getDate() : defaultMonthStart.getDate();

			var monthBeginStr= monthStartMonth + "/" + monthStartDay + "/" + defaultMonthStart.getFullYear();
			
			billboard.calendar.loadWeekDefault(monthBeginStr,monthEndStr,'month'); 
			}
		else if(step=='all')
			{
			var currentDateWeek= new Date();
			var currentDateMonth= (currentDateWeek.getMonth()+1)<10 ? "0" + (currentDateWeek.getMonth()+1) : currentDateWeek.getMonth()+1;
			var currentDateDay= currentDateWeek.getDate()<10 ? "0" + currentDateWeek.getDate() : currentDateWeek.getDate();
			var currentDateStr= currentDateMonth + "/" + currentDateDay + "/" + currentDateWeek.getFullYear();
			currentDateWeek.setDate(currentDateWeek.getDate() + 365);
			currentDateMonth= (currentDateWeek.getMonth()+1)<10 ? "0" + (currentDateWeek.getMonth()+1) : currentDateWeek.getMonth()+1;
			currentDateDay= currentDateWeek.getDate()<10 ? "0" + currentDateWeek.getDate() : currentDateWeek.getDate();
			var currentDatePlus365= currentDateMonth + "/" + currentDateDay + "/" + currentDateWeek.getFullYear();
			billboard.calendar.loadWeekDefault(currentDateStr,currentDatePlus365,'year'); 
			
			}
		else if(step==0)
		     {  
				var currentDateWeek= new Date();
				var currentDateMonth= (currentDateWeek.getMonth()+1)<10 ? "0" + (currentDateWeek.getMonth()+1) : currentDateWeek.getMonth()+1;
				var currentDateDay= currentDateWeek.getDate()<10 ? "0" + currentDateWeek.getDate() : currentDateWeek.getDate();
				var currentDateStr= currentDateMonth + "/" + currentDateDay + "/" + currentDateWeek.getFullYear();
				currentDateWeek.setDate(currentDateWeek.getDate() + 30);
				currentDateMonth= (currentDateWeek.getMonth()+1)<10 ? "0" + (currentDateWeek.getMonth()+1) : currentDateWeek.getMonth()+1;
				currentDateDay= currentDateWeek.getDate()<10 ? "0" + currentDateWeek.getDate() : currentDateWeek.getDate();
				var currentDatePlus30= currentDateMonth + "/" + currentDateDay + "/" + currentDateWeek.getFullYear();
				billboard.calendar.loadWeekDefault(currentDateStr,currentDatePlus30,'currentMonth'); 
			 
			 }
		  
        var firstDay = new Date(currYear,currMonth,1); 
        var firstDayOfWeek = firstDay.getDay();
        var lastDay = new Date(me.year,me.month+1,0); 
        var lastDayOfWeek = lastDay.getDay();
        var firstDayNextMonth = new Date(me.year,me.month+1,1); 
        var elapsedDays = Math.round((firstDayNextMonth - firstDay)/1000/60/60/24);
        var loadDays = [];
        var dayOutput = "";
		var monthOutput = "";
		
        
        for (var i = 0;i < firstDayOfWeek; i++){
            loadDays[i] = new Date(me.year,me.month,-((firstDayOfWeek-1)-i));
        }
        for (var i = 0;i <= elapsedDays; i++){
            loadDays[i+firstDayOfWeek-1] = new Date(me.year,me.month,i);
        }
        for (var i = 0;i < (6-lastDayOfWeek); i++){
            loadDays[i+(firstDayOfWeek)+elapsedDays] = new Date(me.year,me.month+1,i+1);
        }
        var dayOutput = '<tr>';
        for (var i = 0;i < loadDays.length; i++){
            var thisDay = loadDays[i].getDate() < 10 ? "0" + loadDays[i].getDate() : loadDays[i].getDate();
            var thisMonth = loadDays[i].getMonth()+1 < 10 ? ("0" + (loadDays[i].getMonth()+1)) : loadDays[i].getMonth()+1;
            var thisDate = loadDays[i].getFullYear() + "-" + thisMonth + "-" + thisDay;
            var todaysDate = new Date();
            //for week
            var dayOffset = 6 - loadDays[i].getDay();
            var fd = loadDays[i - (6 - dayOffset)];
            var strFMnt = fd.getMonth()+1 < 10 ? ("0" + (fd.getMonth()+1)) : fd.getMonth()+1;
            var strFDate = fd.getDate() < 10 ? ("0" + fd.getDate()) : fd.getDate();
            var strFd = strFMnt + "/" + strFDate + "/" + fd.getFullYear();
            var ld = loadDays[i + dayOffset];
            var strLMnt = ld.getMonth()+1 < 10 ? ("0" + (ld.getMonth()+1)) : ld.getMonth()+1;
            var strLDate = ld.getDate() < 10 ? ("0" + ld.getDate()) : ld.getDate();
            var strLd = strLMnt + "/" + strLDate + "/" + ld.getFullYear();

            if (me.pickType == 'week'){
                dayOutput += '<td' + (loadDays[i] < todaysDate ? ' class="past"' : '') + '><a href="" class="no-ajax" onclick="return ' + (todaysDate <= loadDays[i] ? 'billboard.calendar.loadWeek(this,\'' + strFd + '\',\'' + strLd + '\')' : 'false') + ';">' + thisDay + '</a></td>';
            } else {
                dayOutput += '<td' + (loadDays[i] < todaysDate ? ' class="past"' : '') + '><a href="javascript:void(0);" onclick="return '+ (loadDays[i] < todaysDate ?  'billboard.history.setHash(\'' + me.dayUrl + '?chartDate=' + thisDate + '\')' : 'false') + ';">' + thisDay + '</a></td>';
            }

            if ((i+1) % 7 == 0) {
                dayOutput += '</tr>';
                if ((i+1) < loadDays.length ) {
                    dayOutput += '<tr>';
                }
            }
        }
		dayOutput += '</tr>';

		// set year output once
		if(isFirst) me.setYearList('normal');

		renderCalendar(dayOutput);
    };
	me.setYear = function(year) {
		me.year = year;
		
		// set year output once
		if(isFirst) me.setYearList('year-end');

		renderCalendar();
	};
    me.loadWeek = function(anchor,firstDay,lastDay){
        $("input#fromDate").val(firstDay);
        $("input#toDate").val(lastDay);
        $("#calendar tr").removeClass("over");
        $("#calendar tr").removeClass("selected");
        $(anchor).parent().parent().addClass("over");
        $(anchor).parent().parent().addClass("selected");
		$("input#searchPeriod").val('week'); //if week is selected.
        return false;
    };
	
	me.loadWeekDefault = function(fromDate,toDate,searchPeriod){
	   
        $("input#fromDate").val(fromDate);
        $("input#toDate").val(toDate);
		$("input#searchPeriod").val(searchPeriod);
		
        return false;
    };
	
	
	

})(jQuery);

