
var yearsAndMonths ;
var titles ;
var titlesIdToArrayIndex = new Array() ;

var selectedYear ;
var selectedMonth ;

var currentYearMonths ;
var months ; 
var monthIds = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"] ;
var monthName = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] ;
var monthNameLong = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] ;
var weekDaysLong = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] ;
var weekDays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"] ;

$().ready(function() {

	if (titleId < 0) getTitles() ;
	$("#daySelector").html(generateEmptyMonth()) ;
	getYearsAndMonths() ;

}) ;

function showBanner() {

	$("#ban").fadeIn(2000) ;
}

function getTitles() {

	$.getJSON("/ndp/del/titleList", { }, readTitles) ;
}

function readTitles(data) {

	titles = data ;
	for (var i=0;i<data.length;i++) {
		if (titles[i].name.length > 50) {
			var j = titles[i].name.indexOf(' ', 48) ;
			if (j > 0) titles[i].name = titles[i].name.substring(0, j) + "..." ;
		}
		titlesIdToArrayIndex[titles[i].id] = i ;
	}			
}


function getYearsAndMonths() {

	$.getJSON("/ndp/del/yearsAndMonthsForTitle/" + titleId, { }, readYearsAndMonths) ;
}

function readYearsAndMonths(data) {

	yearsAndMonths = data ;
	setYear() ;
}

function chooseYear(yr) {

	var list = document.getElementById('date-year') ;
	for (var i = 0; i < list.options.length ; i++) {
 		if (list.options[i].value == yr) {
    			list.options[i].selected = true ;

			break ;
		}
	}  
	yearChange(yr) ;
}

function setYear() {

	var s = "" ;
	var anyYears = false ;
	var lastYear = 0 ;

	for (var i=0;i<yearsAndMonths.length;i++) {
		if (yearsAndMonths[i].y != lastYear) {
			lastYear = yearsAndMonths[i].y ;
			if (i == 0) selectedYear = lastYear ; // always select 1st year by default!
//			s += "<OPTION" + ((lastYear == selectedYear) ? " SELECTED" : "") + ">" + yearsAndMonths[i].y + "</OPTION>\n" ;
			s += "<OPTION VALUE='" + yearsAndMonths[i].y + "'" + ((lastYear == selectedYear) ? " SELECTED" : "") + ">" + yearsAndMonths[i].y + "</OPTION>\n" ;
			anyYears = true ;
		}
	}
	s = "<SELECT id='date-year' onchange='yearChange(this.options[this.selectedIndex].text, true)'" +
		((anyYears) ? "" : " DISABLED") + 
		">" +
		((anyYears) ? "<OPTION>Select year</OPTION>" : "<OPTION>No years</OPTION>") +
		s + "</SELECT>" ;

	$('#yearSelector').html(s) ;

	yearChange(selectedYear) ;
}

function yearChange(newYear) {

	selectedYear = newYear ;
	$("#daySelector").html(generateEmptyMonth()) ;
	calcMonthDisplay(selectedYear) ;
}



function calcMonthDisplay(year) {

	var lastMonth = null ;
	months = new Array() ;
	for (var i=0;i<yearsAndMonths.length;i++) {
		if (yearsAndMonths[i].y != year) continue ;
		lastMonth = yearsAndMonths[i].m ;
		months[lastMonth] = parseInt(yearsAndMonths[i].c, 10) ;	// number of issues
	}



	var s = "<ul class='calendar months'>" ;
	for (var i=0;i<monthIds.length;i++) {
		var c = months[monthIds[i]] ;
		if (c == null) s += "<li><span><acronym title='" + monthNameLong[i] + "'>" + monthName[i] + "</acronym></span></li>" ;
		else {
			if (selectedMonth == monthIds[i]) selectedMonthStillValid = true ;
			s += "<li><A HREF='javascript:selMonth(\"" + monthIds[i] + "\")'" + 
				"><acronym title='" + monthNameLong[i] + "'>" + monthName[i] + "</acronym></A></li>" ;
		}
	}
	s += "</ul>" ;
		
	$("#monthDisplay").fadeOut("fast") ;

 	$("#monthDisplay").html(s) ; // "Selected year is " + newYear) ;
	$("#monthDisplay").fadeIn("slow") ;
//	$("#monthDisplay").show("slow") ;
//alert("s="+s) ;

}

function selMonth(monthId) {

	selectedMonth = monthId ;
	$.getJSON("/ndp/del/titlesOverDates/" + selectedYear + "/" + monthId, { }, readDays) ;
}


var DAYS_OF_WEEK = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday") ;

function generateEmptyMonth() {

	var s = "<table class='calendar days disabled'><tr>" ;
	for (var i=0;i<DAYS_OF_WEEK.length;i++) 
		s += "<th scope='col' title='" + DAYS_OF_WEEK[i] + "'>" + DAYS_OF_WEEK[i].substring(0, 1) + "</th>" ;
	s += "</tr>" ;
	for (var i=0;i<6;i++) s += "<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>" ;
	s += "</table>" ;
	return s ;
}


var mn=['January','February','March','April','May','June','July','August','September','October','November','December'];
var daysPerMonth=[31,0,31,30,31,30,31,31,30,31,30,31];

function BuildCalendarAsTable(month, year, issuesForDay){

	month-- ;	// base 0
	var dt = new Date(year, month, 1) ; 
	var firstDayOfWeek = dt.getDay()+1 ; 
	daysPerMonth[1] = (((dt.getFullYear()% 100 != 0) && (dt.getFullYear() % 4 == 0)) || (dt.getFullYear() % 400 == 0)) ? 29 : 28 ;
	var t = "<table class='calendar days'><tr>" ;
	for (var i=0;i<DAYS_OF_WEEK.length;i++) 
		t += "<th scope='col' title='" + DAYS_OF_WEEK[i] + "'>" + DAYS_OF_WEEK[i].substring(0, 1) + "</th>" ;
	t += "</tr><tr>" ;

	for (i=1; i<=42; i++) { // max possible 6 weeks * 7...
		if ((i-firstDayOfWeek >=0) && (i - firstDayOfWeek < daysPerMonth[month])) {
			var d = i - firstDayOfWeek + 1 ;
			if (issuesForDay[d] == null) t += "<td class='feint'>" + d + "</td>" ;
			else {
				
				if (titleId > 0) {
					t += "<td><a href='/ndp/del/issue/" + issuesForDay[d][0][1] + "'>" + d + "</a></td>" ;
				}
				else {	// may have multiple
					if (issuesForDay[d].length > 1) {	// multiple
						t += "<td><a href='/ndp/del/issues/" + year + "-" + (month + 1) + "-" + d + "' " +
						"title='" + issuesForDay[d].length + " issues'>" + d + "</a></td>" ;
					}
					else {					// just one

						var issueDetails =  issuesForDay[d][0] ;
						t += "<td><a title='" + titles[titlesIdToArrayIndex[issueDetails[0]]].name + "'" +
							" href='/ndp/del/issue/" + issueDetails[1] + "'>" + d + "</a></td>" ;
					}
				}
			}
		}
		else t += "<td></td>" ;

		if (((i) % 7 == 0) && (i < 36)) t += '</tr><tr>' ;
	}
	return t += '</tr></table>' ;
}

function readDays(data) {

	var issuesForDay = new Array(31) ;

	for (var i=0;i<data.length;i++) {
		if ((titleId > 0) && (data[i].t != titleId)) continue ; 

		var day = parseInt(data[i].p, 10) ;
		var issues = issuesForDay[day] ;
		if (issues == null) {
			issues = new Array() ;
			issuesForDay[day] = issues ;
		}
		issues[issues.length] = new Array(data[i].t, data[i].iss) ;
	}
	var monthNum = parseInt(selectedMonth, 10) ;
	var s = BuildCalendarAsTable(selectedMonth, selectedYear, issuesForDay) ;
	//alert("dtable="+s) ;	
	$("#daySelector").html(s) ;	
}



/**************
function readDays(data) {

	var monthNum = parseInt(selectedMonth, 10) ;
	var d = new Date() ;
	d.setFullYear(selectedYear) ;
	d.setMonth(monthNum - 1) ;
	var header = "<CENTER><B>" + monthNameLong[monthNum - 1] + " " + selectedYear + "</B></CENTER>" ;
	var lastDay = 0 ;
	var s = "<TABLE style='margin-top:1.5em'>" ;
//alert("data.length="+data.length+",data="+data+",titleId="+titleId) ;

	for (var i=0;i<data.length;i++) {
//alert("data[i].t="+data[i].t) ;
		if ((titleId > 0) && (data[i].t != titleId)) continue ; // OPTIMISATION FIX - add titleId to titlesOverDates

		var day = parseInt(data[i].p, 10) ;
		s += "<TR VALIGN='TOP'>" ;
		if (lastDay != day) {			
			lastDay = day ;
			d.setDate(day) ;
			
			s += "<TD class='dayPrompt' nowrap='y'>" + 
				((titleId > 0) ? ("<A class='issueLink' HREF='/ndp/del/issue/" + data[i].iss + "'>" ) : "") +
				weekDays[d.getDay()] + " " + formatDay(day) + 
				((titleId > 0) ? "</A>" : "") +
				"</TD>" ;
		}
		else s += "<TD></TD>" ;
		if (titleId < 0) s += "<TD><A class='issueLink' HREF='/ndp/del/issue/" + data[i].iss + "'>" + titles[titlesIdToArrayIndex[data[i].t]].name + "</A></TD></TR>" ;
	}
	s += "</TABLE>" ;
alert("s="+s) ;
	$("#daySelector").html(header + s) ;
//	$("#daySelector").show() ;
}
*************/

function formatDay(day) {

	var suf = "" ;
	if ((day >= 4) && (day < 20)) suf = 'th' ;
	else {
		var i = day % 10 ;
		switch (i) {
	 		case 1: suf = 'st' ; break ;
	 		case 2: suf = 'nd' ; break ;
			case 3: suf = 'rd' ; break ;
			default: suf = 'th' ; break ;
		}
	}
	return "" + day + "<sup>" + suf + "</sup>" ;		
}

function allTitles() {

	$("#newspaperList INPUT").attr("checked", "checked") ;
	for (var i=0;i<titles.length;i++) titles[i].selected = true ;

	setYearFromTitles(false) ;
}

function noTitles() {

	$("#newspaperList INPUT").attr("checked", "") ;
	for (var i=0;i<titles.length;i++) titles[i].selected = false ;
	setYearFromTitles(true) ;
}
