// Tour module
// Build 1900

/********* Render functions *********/

function renderTour(date,eventId)
{
	var contentDiv=document.getElementById('content');
	var html=new String();
	html+='<h3>Tours</h3>';
	html+='<div class="tab sel">Calender</div>';
	if(date && eventId || date && eventId==0) html+='<div class="tab" onclick="renderEventDetails(\''+date+'\',\''+eventId+'\')">EventData</div>';
	html+='<div class="rounded">';
	html+='<div class="head tabHead"></div><div class="roundedCal"><div class="calender" id="calender"></div><div id="eventlist"></div></div>';
	html+='<div class="foot"></div></div>';
	contentDiv.innerHTML=html;
	renderCalender(date,eventId);
}

function renderCalender(date,eventId)
{
	var div = document.getElementById('calender');
	var currentDate = new Date();
	var html=new String();
	
	if(!date) {
		var currentDate = new Date();
		var monthId = currentDate.getMonth();
		var month=monthId+1;
		var year = currentDate.getFullYear();
		var date=month+'/'+year;
	} else {
		var dateStr=new String(date);
		var dateArr=dateStr.split('/');
		var month=parseInt(dateArr[0]);
		var monthId=month-1;
		var year=parseInt(dateArr[1]);
	}
	var placeholders_num = getProperDayId(monthId,year);
	var numberOfDays = numberOfDaysInMonth(monthId,year);
	
	html+='<div class="topbar"><div id="arrowleft" onclick="previousMonth('+month+','+year+')"></div> ';
	html+='<div id="monthdisplay">'+monthIdToString(monthId)+'</div>';
	html+=' <div id="arrowright" onclick="nextMonth('+month+','+year+')"></div>';
	html+='<strong>'+year+'</strong></div>';
	html+='<div class="dayname">Mon</div><div class="dayname">Tue</div><div class="dayname">Wed</div><div class="dayname">Thu</div>';	//Day Columns
	html+='<div class="dayname">Fri</div><div class="dayname">Sat</div><div class="dayname">Sun</div>';
	for(i=0;i<placeholders_num;i++){ html+='<div class="placeholder"></div>'; }															//Add placeholders
	for(i=1;i<=numberOfDays;i++){ html+='<div class="day" id="calenderDay'+i+'">'+i+'</div>'; }
	//Add days
	div.innerHTML=html;
	
	//renderCurrentDate(currentDate,month,year);				// Check for current date render
													
	if(!model.tours.events[date]) {
		getEventList(date);
	} else {
		if(model.tours.events[date]!='none'){
			renderCalenderEvents(model.tours.events[date]);
			renderEventlist(model.tours.events[date]);	
		} else {
			document.getElementById('eventlist').innerHTML='<strong>Events</strong>';		//Empty eventlist
		}
	}
}

function renderCurrentDate(currentDate,month,year)
{
	var currentMonthYearStr=currentDate.getMonth()+'/'+currentDate.getFullYear();
	var inputStr=month+'/'+year;
	if(currentMonthYearStr==inputStr){
		var currentDayDivStr='calenderDay'+currentDate.getDate();
		var currentDayDiv=document.getElementById(currentDayDivStr);
		currentDayDiv.style.border='1px solid #000000';
	}	
}

/***** Month Navigation *****/

function nextMonth(month,year)											//Args are 'current' month and year
{									
	if(month==12){
		month=1;
		year++;
	} else {
		month++;
	}
	dateStr=new String(month+'/'+year);
	renderCalender(dateStr);
}

function previousMonth(month,year)										//Args are 'current' month and year
{
	if(month==1){
		month=12;
		year--;
	} else {
		month--;	
	}
	dateStr=new String(month+'/'+year);
	renderCalender(dateStr);
}

/****** Event Functions ******/

function getEventList(date)
{
	var cmdArr=new Array();
	var cmd=new Array();
	
	cmd.push(new Array('rpcCommand','tour_get_eventlist'));
	cmd.push(new Array('date',date));
	cmdArr.push(cmd);
	
	sendRPC(cmdArr);
}

function process_tour_get_eventlist_response(params)
{
	if(!params.none){
		for(var i=0;i<params.events.length;i++){
			var eventdate = new String(params.events[i].date);
				var dateArr=eventdate.split('/');
			params.events[i].day = parseInt(dateArr[0],10);
		}
		renderCalenderEvents(params.events);								//Render events
		renderEventlist(params.events);										//Render eventlist

		model.tours.events[params.date]=params.events;						//Update model
	} else {
		model.tours.events[params.date]='none';
		document.getElementById('eventlist').innerHTML='<strong>Events</strong>';
	}
}

function renderCalenderEvents(events)
{
	for(i=0;i<events.length;i++){
		var evnt = events[i];
		var divId = 'calenderDay'+evnt.day;									//Set Div
		var div = document.getElementById(divId);
		div.day=evnt.day;
		div.className='day dayev';
	}
}

function renderEventlist(events)
{
	var eventlistDiv = document.getElementById('eventlist');
	var html=new String();
	
	html+='<strong>Events</strong>';
	html+='<ul>';
	for(var i=0;i<events.length;i++){
		var evnt = events[i];
			var eventdate = new String(evnt.date);
			var dateArr=eventdate.split('/');
			var month=parseInt(dateArr[1],10);
			var monthStr=new String(monthIdToString(month-1));
			var monthShortStr=monthStr.substr(0,3);
		var eventDM = dateArr[0]+' '+monthShortStr;
		var monthYearStr=parseFloat(dateArr[1])+'/'+dateArr[2];
		html+='<li><a onclick="renderEventDetails(\''+monthYearStr+'\',\''+i+'\')">'+eventDM+': '+evnt.artist+' - '+evnt.location+'</a></li>';
	}
	html+='</ul>';
	eventlistDiv.innerHTML=html;
}

/*********** Render Event Details **********/

function renderEventDetails(date,i)
{
	var contentDiv=document.getElementById('content');
	var html=new String();
	var evnt=model.tours.events[date][i];
	
	html+='<h3>Tours</h3>';
	html+='<div class="tab" onclick="renderTour(\''+date+'\','+i+')">Calender</div><div class="tab sel">Event Data</div>';
	html+='<div class="rounded"><div class="head tabHead"></div><div class="roundedBody shop">';
	html+='<table>';
	html+='<tr><th scope="row">Date:</th><td>'+evnt.date+'</td></tr>';
	html+='<tr><th scope="row">Artist:</th><td>'+evnt.artist+'</td></tr>';
	html+='<tr><th scope="row">Location:</th><td>'+evnt.location+'</td></tr>';
	html+='<tr><th scope="row">Start:</th><td>'+evnt.start+'</td></tr>';
	if(evnt['link']!='false') {
		html+='<tr><th scope="row">Website:</th><td><a href="http://'+evnt['link']+'" target="_blank">'+evnt['link']+'</a></td></tr></table>';
	}
	html+='</table></div><div class="foot"></div></div>';
	html+='<div class="story">'+evnt.descr+'</div>';

	contentDiv.innerHTML=html;
}

/************ Helper functions *************/

function numberOfDaysInMonth(month,year)
{
	switch(month){
		case 0:
		case 2:
		case 4:
		case 6:
		case 7:
		case 9:
		case 11:
			return 31;
		case 3:
		case 5:
		case 8:
		case 10:
			return 30;
		case 1:
			if(checkLeapYear(year)){
				return 29;
			} else {
				return 28;
			}	
	}
}

function getProperDayId(month,year)
{
	var dateObj = new Date();
		dateObj.setFullYear(year,month,1);
	var firstday = dateObj.getDay();
	if(firstday==0) return 6;
	return firstday-1;
}

function checkLeapYear(year)
{
	var diff = year-1992;
	var checkDiff = diff/4;
	if(checkDiff==Math.round(checkDiff)) return true;
	return false;
}

function monthIdToString(monthId)
{
	switch(monthId){
		case 0:
			return "January";
		case 1: 
			return "February";
		case 2: 
			return "March";
		case 3:
			return "April";
		case 4:
			return "May";
		case 5:
			return "June";
		case 6:
			return "July";
		case 7:
			return "August";
		case 8:
			return "September";
		case 9:
			return "October";
		case 10:
			return "November";
		case 11:
			return "December";
	}
}