function DeliveryCalendar()
{
	this.Initialize = function(Options)
	{
		this.Options = {
						Table: '',
						DataSource: '',
						CurrentDay: 0,
						NumberOfDays: 3,
						OnClickHandle: '',
						AvailableCellClass: 'AvailableSlot',
						UnavailableCellClass: 'UnavailableSlot',
						SelectedCellClass: 'SelectedSlot',
						DaysHeaderClass: 'DaysHeader',
						NextLinkClass: 'DeliveryNext',
						PreviousLinkClass: 'DeliveryPrev',
						PreviousTDClass: 'DeliveryPrevTD',
						NextTDClass: 'DeliveryNextTD',
						SelectLink: ''
						};

		Object.extend(this.Options, Options || {});

		this.RequestData();
	}

	this.RequestData = function()
	{
		new Ajax.Request
		(
			this.Options.DataSource,
			{
				method: 'post',
				parameters: 'start=' + this.Options.CurrentDay + '&days=' + this.Options.NumberOfDays,
				onSuccess: this.Populate.bindAsEventListener(this),
				onFailure: this.HandleError
			}
		);
	}

	this.Populate = function(Response)
	{
		var Data = Response.responseText.evalJSON();

		DaysName = Data.Days;
		Data = Data.Availability;

		//GenerateHeader
		var TableHeader = document.createElement('thead');

		var HeaderRow = document.createElement('tr');

		var HeaderCell = document.createElement('td');
		HeaderCell.colSpan = 2;
		HeaderCell.className = this.Options.PreviousTDClass;

		var PreviousLink = document.createElement('a');
		PreviousLink.href = '';
		PreviousLink.className = this.Options.PreviousLinkClass;
		PreviousLink.onclick = this.PreviousDates.bindAsEventListener(this);
		PreviousLink.innerHTML = '< Previous';

		HeaderCell.appendChild(PreviousLink);
		HeaderRow.appendChild(HeaderCell);

		var HeaderCell = document.createElement('td');
		HeaderCell.colSpan = 2;
		HeaderCell.className = this.Options.NextTDClass;

		var NextLink = document.createElement('a');
		NextLink.href = '';
		NextLink.className = this.Options.NextLinkClass;
		NextLink.onclick = this.NextDates.bindAsEventListener(this);
		NextLink.innerHTML = 'Next >';

		HeaderCell.appendChild(NextLink);
		HeaderRow.appendChild(HeaderCell);

		TableHeader.appendChild(HeaderRow);

		OldHeader = $(this.Options.Table).getElementsByTagName('thead');

		if (OldHeader[0])
			$(this.Options.Table).removeChild(OldHeader[0]);

		$(this.Options.Table).appendChild(TableHeader);

		//Populate the table body
		var TableBody = document.createElement('tbody');

		var TableRow = document.createElement('tr');

		var TableCell = document.createElement('td');
		TableRow.appendChild(TableCell);

		for (i = 0; i < this.Options.NumberOfDays; i++)
		{
			var TableCell = document.createElement('td');
			TableCell.className = this.Options.DaysHeaderClass;
			TableCell.innerHTML = DaysName[i];
			TableRow.appendChild(TableCell);
		}

		TableBody.appendChild(TableRow);

		for (i = 0; i < Data.length;i++)
		{
			var TableRow = document.createElement('tr');

			var HourCell = document.createElement('td');
			HourCell.innerHTML = Data[i].From + ' - ' + Data[i].To;
			HourCell.className = this.Options.DaysHeaderClass;
			TableRow.appendChild(HourCell);

			for (j = 0; j < this.Options.NumberOfDays; j++)
			{
				var TableCell = document.createElement('td');

				if (Data[i].Days[DaysName[j]] == 1)
				{
					var CheckBox = document.createElement('input');
					CheckBox.type = 'checkbox';
					CheckBox.name = 'DeliveryDateSelect';

					if ((typeof this.SelectedDate) == 'object')
					{
						if (this.SelectedDate.Date == DaysName[j] && this.SelectedDate.From == Data[i].From && this.SelectedDate.To == Data[i].To)
						{
							TableCell.className = this.Options.SelectedCellClass;
							CheckBox.checked = true;
						}
						else
							TableCell.className = this.Options.AvailableCellClass;
					}
					else
						TableCell.className = this.Options.AvailableCellClass;

					var CurrentDate = {
										Date: DaysName[j],
										From: Data[i].From,
										To: Data[i].To
										};

					CheckBox.onclick = this.SetSelectedDate.bindAsEventListener(this, CurrentDate);
					CheckBox.id = i + '_' + j;

					TableCell.appendChild(CheckBox);
				}
				else
				{
					TableCell.className = this.Options.UnavailableCellClass;
					TableCell.innerHTML = 'Not Available';
				}

				TableRow.appendChild(TableCell);
			}

			TableBody.appendChild(TableRow);
		}

		var TBody = $(this.Options.Table).getElementsByTagName('tbody');

		if (TBody[0])
			$(this.Options.Table).removeChild(TBody[0]);

		$(this.Options.Table).appendChild(TableBody);
	}

	this.Refresh = function()
	{
		this.RequestData();
	}

	this.PreviousDates = function()
	{
		if (this.Options.CurrentDay == 0)
			return false;
		else
			this.Options.CurrentDay -= this.Options.NumberOfDays;

		this.RequestData();

		return false;
	}

	this.NextDates = function()
	{
		this.Options.CurrentDay += this.Options.NumberOfDays;

		this.RequestData();

		return false;
	}

	this.SetSelectedDate = function(ev, Date)
	{
		var CheckBoxes = $(this.Options.Table).getElementsByTagName('input');
		var ElementChecked = Event.findElement(ev, 'input').checked;
		var TableCell = Event.findElement(ev, 'td');

		for (i = 0; i < CheckBoxes.length; i++)
		{
			var Parent = CheckBoxes[i].ancestors();

			CheckBoxes[i].checked = false;
			Parent[0].className = this.Options.AvailableCellClass;
		}

		if (ElementChecked)
		{
			TableCell.className = this.Options.SelectedCellClass;
			Event.findElement(ev, 'input').checked = true;
		}
		else
			TableCell.className = this.Options.AvailableCellClass;

		this.SelectedDate = {
							Date: Date.Date,
							From: Date.From,
							To: Date.To
							}

		$(this.Options.SelectLink).innerHTML = Date.Date + ' Between ' + Date.From + ' - ' + Date.To;
	}

	this.GetSelectedDate = function()
	{
		return this.Options.SelectedDate;
	}

	this.HandleError = function()
	{

	}
}