var calenderRepeatDetails = Array();
var calendarRepeat;

function toggleRepeatDetails()
{
	calendarRepeat = new DOMQuery('input#calendar_repeatcheck');

	if(calendarRepeat.length == 0)
	{
		calendarRepeat = null;
		return;
	}

	calendarRepeat = calendarRepeat.get(0);

	addEventToTargets(null, 'change', _toggleRepeatDetails, 'input#calendar_repeatcheck, select#calendar_repeatselect');
	addClassToTargets('dt.calendar-repeat-details, dd.calendar-repeat-details', 'display-none');

	if(calendarRepeat.checked)
	{
		_toggleRepeatDetails();

		if(!isIE && window.location.hash != '#showAdvancedOptions')
			toggleAdvancedOptions();
	}
};

function _toggleRepeatDetails()
{
	var calendarRepeatDetails = new DOMQuery('dt.calendar-repeat-details, dd.calendar-repeat-details');

	for (var i = 0; i < calendarRepeatDetails.length; i++)
	{
		var item = calendarRepeatDetails.get(i);

		if(calendarRepeat.checked)
			jscss('remove',item,'display-none', '');
		else
			jscss('add',item,'display-none', '');
	}

	var frequency = new DOMQuery('select#calendar_repeatselect');

	if(frequency.length > 0)
	{
		frequency = frequency.get(0).options[frequency.get(0).selectedIndex].value;
		var items = new DOMQuery('dt.calendar-repeat-weekly, dd.calendar-repeat-weekly');
		for(i=0, item; (item=items.get(i)); i++)
		{
			jscss('add',item,'display-none', '');

			switch(frequency)
			{
				case 'week':
					if(calendarRepeat.checked)
						jscss('remove',item,'display-none', '');
				break;
			}
		}
	}
};

function easyTimeInputConverter()
{
	addEventToTargets('input#calendar_startdate_time, input#calendar_enddate_time',	'change', _easyTimeInputConverter);

	addEventToTargets('input#calendar_startdate, input#calendar_enddate, input#calendar_startdate_time, input#calendar_enddate_time', 'blur', _ensureCorrectDateRange);
};

function _easyTimeInputConverter()
{
	if(this.value.indexOf(':') > 0)
		return;

	var newValue = this.value;

	switch(newValue.length)
	{
		case 1:				/* '9' => 9h => 09:00		*/
			newValue = '0' + this.value + ':00';
		break;
		case 2:				/* '21' => 21h => 21:00		*/
			newValue = this.value + ':00';
		break;
		case 3:				/* '914' => 914h => 09:14	*/
			newValue = '0'+ this.value.substr(0,1) + ':' + this.value.substr(1,2);
		break;
		case 4:				/* '2125' => 2125h => 21:25	*/
			newValue = this.value.substr(0,2) + ':' + this.value.substr(2,3);
		break;
	}
	this.value = newValue;
};

function _ensureCorrectDateRange()
{
	var startDate = new DOMQuery('input#calendar_startdate').get(0);
	var startTime = new DOMQuery('input#calendar_startdate_time').get(0);
	var endDate = new DOMQuery('input#calendar_enddate').get(0);
	var endTime = new DOMQuery('input#calendar_enddate_time').get(0);

	var datePattern = /0?(\d{1,2})\D0?(\d{1,2})\D(\d{4})/, m;
	var timePattern = /0?([0-9]{1,2}):0?([0-9]{1,2})/, m;

	var startDateMatches = startDate.value.match( datePattern );
	var startTimeMatches = startTime.value.match( timePattern );
	var startDateObject = new Date(
		parseInt(startDateMatches[3]),  // year
		parseInt(startDateMatches[2]) - 1, // month
		parseInt(startDateMatches[1]), // day
		parseInt(startTimeMatches[1]), // hour
		parseInt(startTimeMatches[2]), // minute
		0, // seconds
		0 // milliseconds
	);

	var endDateMatches = endDate.value.match( datePattern );
	var endTimeMatches = endTime.value.match( timePattern );
	var endDateObject = new Date(
		parseInt(endDateMatches[3]),  // year
		parseInt(endDateMatches[2]) - 1, // month
		parseInt(endDateMatches[1]), // day
		parseInt(endTimeMatches[1]), // hour
		parseInt(endTimeMatches[2]), // minute
		0, // seconds
		0 // milliseconds
	);

	if(endDateObject >= startDateObject)
		return;

	switch(this.id)
	{
		case 'calendar_startdate':
		case 'calendar_startdate_time':
			endDate.value = startDate.value;
			endTime.value = startTime.value;
		break;
		case 'calendar_enddate':
		case 'calendar_enddate_time':
			startDate.value = endDate.value;
			startTime.value = endTime.value;
		break;
	}
};

