/* ajax calendar */
var cal = null;
/* current month and year - Jan = 1, Feb = 2, etc. */
var current_month;
var current_year;
/* limit how far ahead and back the calendar can go */
var last_year = 2010;
var new_year = 2050;

function loadCal()
{
	/* get calendar */
	cal = new ajax();
	cal.complete = setCal;
	cal.call("GET","cal/cal.php?month="+current_month+"&year="+current_year,null);	
	
	/* show loading animation */
	var img = document.createElement("img");
	img.src = "images/loading.gif";
	var p = document.createElement("p");
	p.align = "center";
	var elm = document.getElementById("cal");
	elm.innerHTML = "";
	p.appendChild(img);
	elm.appendChild(p);
}

var recaculate;
var products_id;

function currentCal(id)
{
	products_id = id;

	/* get current month and year */
	var now = new Date();
	/* Javascript month is 0 to 11 */
	current_month = now.getMonth()+1;
	current_year = now.getFullYear();
	recaculate = true;
	loadCal();
}

function setCal(status, statusText, responseText, responseXML) 
{
	/* load calendar */
	var elm = document.getElementById("cal");
	elm.innerHTML = responseText;
	cal = null;

	clearCal();

	var title = document.getElementById('cal_nav_title');
	title.innerHTML = "<span onClick='prevYear();'><<</span>&nbsp;&nbsp;&nbsp;"+
		"<span onClick='prevMonth();'><</span>&nbsp;&nbsp;&nbsp;"+title.innerHTML+
		"&nbsp;&nbsp;&nbsp;<span onClick='nextMonth();'>></span>&nbsp;&nbsp;&nbsp;"+
		"<span onClick='nextYear();'>>></span>";
	updateCal();
}

/* move calendar functions */
function nextYear()
{
	if(current_year == new_year)
		return;
	current_year++;
	loadCal();
}

function prevYear()
{
	if(current_year == last_year)
		return;
	current_year--;
	loadCal();
}

function nextMonth()
{
	if(current_month < 12)
		current_month++;
	else
	{
		if(current_year == new_year)
			return;
		current_month = 1;
		current_year++;
	}
	loadCal();
}

function prevMonth()
{
	if(current_month > 1)
		current_month--;
	else
	{
		if(current_year == last_year)
			return;
		current_month = 12;
		current_year--;
	}
	loadCal();
}

function clearCal()
{
	//clear calendar
	var elm;
	var last = ReservationDate.NumDaysInMonth(current_year,current_month-1);
	for(i = 1;i <= last;i++)
	{
		elm = document.getElementById("cal_day"+i);
		elm.innerHTML = "";
	}
}

var reservations;

function updateCal()
{
	/* create a three dimensional array to hold the reservations */
	/* reservations[year][month][day] */
	if(recaculate)
	{
		reservations = new Array(new_year-last_year);
		var i,j,k,num_days;
		for(i = 0;i < reservations.length;i++)
		{
			reservations[i] = new Array(12);
			for(j = 0;j < 12;j++)
			{
				num_days = ReservationDate.NumDaysInMonth(i+last_year,j);
				reservations[i][j] = new Array(num_days);
				for(k = 0;k < num_days;k++)
					reservations[i][j][k] = "";
			}
		}

		/* caculate reservations */
		loadReservations();
	}

}

var cac = null;

function loadReservations()
{
	/* get reservations */
	cac = new ajax();
	cac.complete = getRes;
	cac.call("GET","res.php?action=prices&id="+products_id,null);
}

function getRes(status, statusText, responseText, responseXML) 
{
	cac = null;

	var prev,d,price;
	var days,step,from,to,index,day_int,start_month,start_year,start_day,end_month,end_year,end_day,start,end;

	var elm,parts;
	var i;

	var res = responseText.split(",");
	var single = new Array();
	var repeat = new Array();

	var r;
	for(i= 0;i < res.length;i++)
	{
		r = res[i].split(";");
		if(r[0] == "S")
		{
			single.push(r);
		}
		else if(r[0] == "R")
		{
			repeat.push(r);
		}
	}
	
	/* for each repeater */
	for(i = 0;i < repeat.length;i++)
	{
		parts = repeat[i];
		days = parts[5].split("/");
		step = parts[3];
		from = ReservationDate.ParseReservationDate(parts[1]);
		to = ReservationDate.ParseReservationDate(parts[2]);
		price = parseFloat(parts[4]).toFixed(2);
		if(to != null && to != null & isFloat(price) != null)
		{
			/* for each day in the reservation */
			for(index in days)
			{
				start_year = from.getFullYear();
				start_month = from.getMonth();
				start_day = from.getDate();
				/* if from date is before the minimum, start at minimum
					else start at the from date */
				if(start_year < last_year)
				{
					start_year = last_year;
					start_month = 0;
					start_day = 1;
				}
				start = new ReservationDate(start_year,start_month,start_day);
				end_year = to.getFullYear();
				end_month = to.getMonth();
				end_day = to.getDate();
				/* if to date is after the maximum, start at maximum
					else start at the to date */
				if(end_year > new_year)
				{
					end_year = new_year;
					end_month = 11;
					end_day = 31;
				}
				end = new ReservationDate(end_year,end_month,end_day);
			
				start.MoveToNextDay(days[index]);
				var int_step = parseInt(step);
				while(start.LessThanOrEqual(end))
				{
					prev = reservations[start.getFullYear()-last_year][start.getMonth()][start.getDate()-1];
					parts = prev.split("$");
					if(prev == "" || parseFloat(parts[1]) < price)
						reservations[start.getFullYear()-last_year][start.getMonth()][start.getDate()-1] = "R - $"+price;
					else
						reservations[start.getFullYear()-last_year][start.getMonth()][start.getDate()-1] = prev;
					start.Add(7*int_step);
				}
			}
		}
	}
	/* for each single */
	for(i = 0;i < single.length;i++)
	{
		parts = single[i];
		d = ReservationDate.ParseReservationDate(parts[1]);
		price = parseFloat(parts[2]).toFixed(2);
		/* if the reservation is in the range we are keeping track of */
		if(d != null && d.getFullYear() <= new_year && d.getFullYear() >= last_year)
		{
			prev = reservations[d.getFullYear()-last_year][d.getMonth()][d.getDate()-1];
			if(prev.substr(0,1) == "S")
			{
				parts = prev.split("$");
				if(parseFloat(parts[1]) < price)
					reservations[d.getFullYear()-last_year][d.getMonth()][d.getDate()-1] = "S - $"+price;
				else
					reservations[d.getFullYear()-last_year][d.getMonth()][d.getDate()-1] = prev;
			}
			else
				reservations[d.getFullYear()-last_year][d.getMonth()][d.getDate()-1] = "S - $"+price;
		}
	}
	
	/* load reservations into calendar */
	setReservations();

	loadBooked();
}


function setReservations()
{
	clearCal();
	var i;
	var days = reservations[current_year-last_year][current_month-1];
	var last = days.length;
	var elm;
	var price;
	for(i = 1;i <= last;i++)
	{
		if(days[i-1] != "")
		{
			price = days[i-1].split("$");
			elm = document.getElementById("cal_day"+i);
			elm.innerHTML = "<div class='res_price'>$"+price[1]+"</div>";
		}
	}
}

var book;

function loadBooked()
{
	/* get booked days */
	book = new ajax();
	book.complete = getBook;
	book.call("GET","res.php?action=booked&id="+products_id,null);
}

var dates;
var book_loaded = false;

function getBook(status, statusText, responseText, responseXML) 
{
	dates = responseText.split(",");
	setBook();
}

function setBook()
{
	var i,d,from,to,from_year,from_month,from_day,elm;
	for(i = 0;i < dates.length;i++)
	{
		if(dates[i] != null && dates[i] != "")
		{
			d = dates[i].split(";");
			from = ReservationDate.ParseReservationDate(d[0]);
			to = ReservationDate.ParseReservationDate(d[1]);
			if(from != null && to != null)
			{
				while(from.LessThanOrEqual(to))
				{
					from_year = from.getFullYear();
					from_month = from.getMonth();
					from_day = from.getDate();

					//only mark days for the current month you are looking at
					if((current_month == (from_month+1)) && (current_year == from_year))
					{
						elm = document.getElementById("cal_day_back"+from_day);
						elm.style.background="#CC0000";
					}
	
					from.Add(1);
				}
			}
		}
	}

	book_loaded = true;
}

