var calendar = {};
calendar.source = globals.base_url+'pop_up_pages/calendar.php';
calendar.format = 'dd.mm.yyyy';
calendar.invoked_by = null;
calendar.init = function ()
{
	var inputs = document.getElementsByTagName('input');

	for (var i = 0; i < inputs.length; i++)
	{
		if (class_handler.has(inputs[i], 'date'))
		{
			event_handler.add(inputs[i], 'click', calendar.invoke);

			var img = document.createElement('img');
			img.src = globals.base_url+'images/calender.gif';
			img.id = 'for_calender'+inputs[i].id;
			img.className = 'clickable';
			dom_handler.insertAfter(img, inputs[i]);

			event_handler.add(img, 'click', calendar.invoke);
		}
	}

	var calendar_div = document.createElement('div');
	calendar_div.id = 'javascript_calendar';
	calendar_div.style.position = 'absolute';
	calendar_div.style.zIndex = '100';
	calendar_div.style.display = 'none';
	document.getElementsByTagName('body')[0].appendChild(calendar_div);
};
calendar.invoke = function (event)
{
	calendar.destroy();

	var event = event_handler.fix(event);
	if (event.preventDefault)
	{
		event.preventDefault();
	}

	var element = event.target;

	if (element.tagName.toLowerCase() == 'img')
	{
		element = document.getElementById(element.id.substr(12, event.target.id.length));
	}

	param0 = new Array('element_id', element.id);
	param1 = new Array('language', calendar.language);
	if (element.value.length > 0)
	{
		param2 = new Array('date', element.value);
		param = new Array(param0, param1, param2);
	}
	else
	{
		param = new Array(param0, param1);
	}

	if (requester.loadURL('POST', calendar.source, param, false))
	{
		var content = requester.getText();

		var calendar_div = document.getElementById('javascript_calendar');

		calendar_div.style.display = 'block';
		calendar_div.style.top = (position.getPositionY(event)+20)+'px';
		calendar_div.style.left = position.getPositionX(event)+'px';

		calendar_div.innerHTML = content;

		var anchors = calendar_div.getElementsByTagName('a');
		for (var i = 0; i < anchors.length; i++)
		{
			if (class_handler.has(anchors[i], 'close_cal'))
			{
				event_handler.add(anchors[i], 'click', calendar.destroy);
			}
			if (class_handler.has(anchors[i], 'clear_cal'))
			{
				event_handler.add(anchors[i], 'click', calendar.clear);
			}
			if (class_handler.has(anchors[i], 'fill_date'))
			{
				event_handler.add(anchors[i], 'click', calendar.fill_date);
			}
			else if (class_handler.has(anchors[i], 'move'))
			{
				event_handler.add(anchors[i], 'click', calendar.move);
			}
		}

		calendar.invoked_by = element;
		calendar.setDateFormat(calendar.invoked_by.id);
	}
};
calendar.destroy = function (event)
{
	if (event)
	{
		var event = event_handler.fix(event);

		if (event.preventDefault)
		{
			event.preventDefault();
		}
	}

	var calendar_div = document.getElementById('javascript_calendar');

	if (calendar_div)
	{
		calendar_div.innerHTML = '';
		calendar_div.style.display = 'none';
	}

	return false;
};
calendar.fill_date = function (event)
{
	var event = event_handler.fix(event);

	if (event.preventDefault)
	{
		event.preventDefault();
	}

	calendar.invoked_by.value = event.target.id;

	if (typeof(homepage) != 'undefined')
	{
		if (typeof(homepage.date_update) != 'undefined' && calendar.invoked_by.id == 'checkin')
		{
				homepage.date_update(event);
		}
	}
	if (typeof(homepage) != 'undefined')
	{
		if (typeof(homepage.date_update) != 'undefined' && calendar.invoked_by.id == 'checkout')
		{
				homepage.date_update(event);
		}
	}
	if (typeof(reservation_form) != 'undefined')
	{
		if (typeof(reservation_form.date_update) != 'undefined' && calendar.invoked_by.id == 'reservation_checkin')
		{
				reservation_form.date_update(event);
		}
	}
	if (typeof(reservation_form) != 'undefined')
	{
		if (typeof(reservation_form.check_vacancy) != 'undefined' && calendar.invoked_by.id == 'reservation_checkin')
		{
				reservation_form.check_vacancy(event);
		}
	}
	if (typeof(reservation_form) != 'undefined')
	{
		if (typeof(reservation_form.date_update) != 'undefined' && calendar.invoked_by.id == 'reservation_checkout')
		{
				reservation_form.date_update(event);
		}
	}
	if (typeof(reservation_form) != 'undefined')
	{
		if (typeof(reservation_form.check_vacancy) != 'undefined' && calendar.invoked_by.id == 'reservation_checkout')
		{
				reservation_form.check_vacancy(event);
		}
	}
	if (typeof(admin) != 'undefined')
	{
		if (typeof(admin.date_update) != 'undefined' && calendar.invoked_by.id == 'on_date')
		{
				admin.date_update(event);
		}
	}
		if (typeof(submit_on_date_change) != 'undefined' && calendar.invoked_by.id == 'on_date')
		{
				submit_on_date_change(event);
		}
		if (typeof(refresh_reservations) != 'undefined' && calendar.invoked_by.id == 'on_date')
		{
				refresh_reservations(event);
		}
	if (typeof(free_hotels) != 'undefined')
	{
		if (typeof(free_hotels.update_count) != 'undefined' && calendar.invoked_by.id == 'on_date')
		{
				free_hotels.update_count(event);
		}
	}
	if (typeof(admin) != 'undefined')
	{
		if (typeof(admin.date_update) != 'undefined' && calendar.invoked_by.id == 'to_date')
		{
				admin.date_update(event);
		}
	}
		if (typeof(refresh_reservations) != 'undefined' && calendar.invoked_by.id == 'to_date')
		{
				refresh_reservations(event);
		}
	if (typeof(free_hotels) != 'undefined')
	{
		if (typeof(free_hotels.update_count) != 'undefined' && calendar.invoked_by.id == 'to_date')
		{
				free_hotels.update_count(event);
		}
	}
	if (typeof(settings) != 'undefined')
	{
		if (typeof(settings.update) != 'undefined' && calendar.invoked_by.id == 'action_date_from')
		{
				settings.update(event);
		}
	}
	if (typeof(settings) != 'undefined')
	{
		if (typeof(settings.update) != 'undefined' && calendar.invoked_by.id == 'action_date_to')
		{
				settings.update(event);
		}
	}
	if (typeof(settings) != 'undefined')
	{
		if (typeof(settings.update) != 'undefined' && calendar.invoked_by.id == 'season_from[0]')
		{
				settings.update(event);
		}
	}
	if (typeof(settings) != 'undefined')
	{
		if (typeof(settings.update) != 'undefined' && calendar.invoked_by.id == 'season_from[1]')
		{
				settings.update(event);
		}
	}
	if (typeof(settings) != 'undefined')
	{
		if (typeof(settings.update) != 'undefined' && calendar.invoked_by.id == 'season_from[2]')
		{
				settings.update(event);
		}
	}
	if (typeof(settings) != 'undefined')
	{
		if (typeof(settings.update) != 'undefined' && calendar.invoked_by.id == 'season_from[3]')
		{
				settings.update(event);
		}
	}
	if (typeof(settings) != 'undefined')
	{
		if (typeof(settings.update) != 'undefined' && calendar.invoked_by.id == 'season_from[4]')
		{
				settings.update(event);
		}
	}
	if (typeof(settings) != 'undefined')
	{
		if (typeof(settings.update) != 'undefined' && calendar.invoked_by.id == 'season_from[5]')
		{
				settings.update(event);
		}
	}
	if (typeof(settings) != 'undefined')
	{
		if (typeof(settings.update) != 'undefined' && calendar.invoked_by.id == 'season_from[6]')
		{
				settings.update(event);
		}
	}
	if (typeof(settings) != 'undefined')
	{
		if (typeof(settings.update) != 'undefined' && calendar.invoked_by.id == 'season_from[7]')
		{
				settings.update(event);
		}
	}
	if (typeof(settings) != 'undefined')
	{
		if (typeof(settings.update) != 'undefined' && calendar.invoked_by.id == 'season_from[8]')
		{
				settings.update(event);
		}
	}
	if (typeof(settings) != 'undefined')
	{
		if (typeof(settings.update) != 'undefined' && calendar.invoked_by.id == 'season_from[9]')
		{
				settings.update(event);
		}
	}
	if (typeof(settings) != 'undefined')
	{
		if (typeof(settings.update) != 'undefined' && calendar.invoked_by.id == 'season_from[10]')
		{
				settings.update(event);
		}
	}
	if (typeof(settings) != 'undefined')
	{
		if (typeof(settings.update) != 'undefined' && calendar.invoked_by.id == 'season_from[11]')
		{
				settings.update(event);
		}
	}

	calendar.destroy();
	calendar.invoked_by.focus();
	calendar.invoked_by.blur();

	return false;
};
calendar.clear = function (event)
{
	var event = event_handler.fix(event);

	if (event.preventDefault)
	{
		event.preventDefault();
	}

	calendar.invoked_by.value = '';

	calendar.destroy();

	return false;
};
calendar.move = function (event)
{
	var event = event_handler.fix(event);

	if (event.preventDefault)
	{
		event.preventDefault();
	}

	param_0 = new Array('element_id', calendar.invoked_by.id);
	param_1 = new Array('language', calendar.language);
	param_2 = new Array('date', event.target.id);
	param = new Array(param_0, param_1, param_2);

	if (requester.loadURL('POST', calendar.source, param, false))
	{
		var content = requester.getText();

		var calendar_div = document.getElementById('javascript_calendar');
		calendar_div.innerHTML = '';
		calendar_div.innerHTML = content;

		var anchors = calendar_div.getElementsByTagName('a');
		for (var i = 0; i < anchors.length; i++)
		{
			if (class_handler.has(anchors[i], 'close_cal'))
			{
				event_handler.add(anchors[i], 'click', calendar.destroy);
			}
			if (class_handler.has(anchors[i], 'clear_cal'))
			{
				event_handler.add(anchors[i], 'click', calendar.clear);
			}
			if (class_handler.has(anchors[i], 'fill_date'))
			{
				event_handler.add(anchors[i], 'click', calendar.fill_date);
			}
			if (class_handler.has(anchors[i], 'move'))
			{
				event_handler.add(anchors[i], 'click', calendar.move);
			}
		}
	}

	return false;
};
calendar.setDateFormat = function (element_id)
{
	date_formats = new Array();
	date_formats['default'] = 'dd.mm.yyyy';
	if (typeof(date_formats[element_id]) != 'undefined')
	{
		calendar.date_format = date_formats[element_id];
	}
	else
	{
		calendar.date_format = date_formats['default'];
	}
};
