﻿var origclass;
var aceventdiv;
var clSlide;
var clSlide2;
var legendActive 	= true;
var endchanged 		= false;
var mytips;
var day_selected;
var startDate;

window.addEvent('domready', function()
{
	init_calendar();
	refreshLinks();
	refreshToolTips();
});

function refreshToolTips()
{
	mytips = new Tips($$('a.event, table.calendar td.event'));
}

function select_event(url, event)
{
	if($('legend') && (event || legendActive == false))
	{
		if(event)
		{
			legendActive = false;
			url += '&ajreq=1';
		}
		else
		{
			legendActive = true;
			url += '&getlegend=1&ajreq=1';
		}

		new Ajax(url, 
			{
				method: 'get',
					onComplete: function(e)
					{
						$('legend').innerHTML = this.response.text;
						refreshLegendLinks();
					}
			}
		).request();
	}
}

function delete_event(uid, url)
{
	if(confirm('Soll das Ereignis wirklich entfernt werden?'))
	{
		window.location = url + '?delsure=' + uid;
	}
}

function refreshLegendLinks()
{
	/*
	$$('a.calendar_func_select').each(
	
		function(link)
		{
			link.removeEvents();
			
			link.addEvent('click', 
				function(e)
				{
					var url = link.href + '&ajreq=1';
				
					popup(e, link.innerHTML, '', url);

					e = new Event(e).stop();
				}
			);
		}
	);
	*/
	
	$$('a.calendar_disp_select').each(
		function(dsel)
		{

			dsel.removeEvents();
			
			dsel.addEvent('click', 
				function(e)
				{
					e = new Event(e).stop();

					var url = dsel.href + '&ajreq=1';
					new Ajax(url, 
						{
							method: 'get',
								onComplete: function(e)
								{
									$('mcalendar').innerHTML = this.response.text;
									legendActive = true;
									refreshLinks();
									refreshToolTips();
								}
						}
					).request();
				}
			);

		}
	);
	if($('edit_evt_link'))
	{
		$('edit_evt_link').addEvent('click', 
			function(e)
			{
				edit_event(e, $('edit_evt_link'));
				e = new Event(e).stop();
			}
		);
	}
	if($('del_evt_link'))
	{
		$('del_evt_link').addEvent('click', 
			function(e)
			{
				e = new Event(e).stop();

				if(confirm('Ereignis löschen?'))
				{
					var url = $('del_evt_link').href + '&sure=1&ajreq=1';
					new Ajax(url, 
						{
							method: 'get',
								onComplete: function(e)
								{
									$('mcalendar').innerHTML = this.response.text;
									legendActive = true;
									refreshLinks();
									refreshToolTips();
								}
						}
					).request();
				}
			}
		);
	}
}

function refreshLinks()
{
	refreshMainLinks();
	refreshLegendLinks();
}

function loadCalendarContent(content)
{
	$('mcalendar').innerHTML = content;
	refreshLinks();
	refreshToolTips();
	legendActive = true;
}


function refreshMainLinks()
{
	if($('forward_link'))
	{
		$('forward_link').removeEvents();
		$('forward_link').addEvent('click', 
			function(e)
			{
				e = new Event(e).stop();

				var url = $('forward_link').href + '&ajreq=1';
				new Ajax(url, 
					{
						method: 'get',
							onComplete: function(e)
							{
								loadCalendarContent(this.response.text);
							}
					}
				).request();
			}
		);
	}
	if($('backward_link'))
	{
		$('backward_link').removeEvents();
		$('backward_link').addEvent('click', 
			function(e)
			{
				e = new Event(e).stop();

				var url = $('backward_link').href + '&ajreq=1';
				new Ajax(url, 
					{
						method: 'get',
							onComplete: function(e)
							{
								loadCalendarContent(this.response.text);
							}
					}
				).request();
			}
		);
	}
	
	$$('table.calendar a.event, table.calendar td.event').each(
		function(eventlink)
		{
			eventlink.removeEvents();
			eventlink.addEvent('click', 
				function(e)
				{
					// Take care of day events
					if(eventlink.href)
					{
						e = new Event(e).stop();
						var url = eventlink.href;
						select_event(url, true);
					}
				}
			);	
		}
	);
	
	$$('table.calendar tr.days td').each(
		function(td)
		{
			if(td.id != 'legend')
			{
				td.removeEvents();
				
				td.addEvent('click', 
					function(e)
					{
						//e = new Event(e).stop();
	
						select_td(this.id);
						if($('evt_sbmt'))
						{
							select_event($('evt_sbmt').value, false);
						}
					}
				);
				
				if($('write_access') && $('write_access').value == 1 && $('selected_eventtype').value > -1)
				{
					td.addEvent('dblclick', 
						function(e)
						{
							new_event(e, $('evt_sbmt').value + '&addevent=1');
							e = new Event(e).stop();
						}
					);
				}
			}
		}
	);
	$$('table.calendar tr.days td a.event').each(
		function(link)
		{
			var url = link.href + '&edit=1';
			link.addEvent('dblclick', 
				function(e)
				{
					edit_event(e, url);

					e = new Event(e).stop();
				}
			);

		}
	);
	if($('new_event_link'))
	{
		$('new_event_link').removeEvents();
		$('new_event_link').addEvent('click', 
			function(e)
			{
				var event = e;
				e = new Event(e).stop();
				new_event(event, $('new_event_link').href);
			}
		);
	}
	storeClassNames();
}

function new_event(event, url)
{
	url += '&ajreq=1';

	popup(event, 'Neues Ereignis anlegen', '', url);
}

function edit_event(event, url)
{
	url += '&ajreq=1';

	popup(event, 'Ereignis bearbeiten', '', url);
}

function submit_quick_event()
{
	if($('newEvent'))
	{
	
		var url  =  $('evt_sbmt').value;
			url	+='&newEvent=' + escape($('newEvent').value);
			url	+='&eventtype=' + escape($('eventtype').value);
			url	+='&dayts=' + $('dayts').value;
			url	+='&ajreq=1';
			
		new Ajax(url, 
			{
				method: 'get',
					onComplete: function(e)
					{
						loadCalendarContent(this.response.text);
					}
			}
		).request();	
	}
}

function init_calendar()
{
	if(!clSlide && $('calendar_1'))
	{
		clSlide = new Fx.Slide('calendar_1');
		clSlide.hide();
		$('calendar_1').style.visibility = 'visible';
	}
	if(!clSlide2 && $('calendar_2'))
	{
		clSlide2 = new Fx.Slide('calendar_2');
		clSlide2.hide();
		$('calendar_2').style.visibility = 'visible';
	}
}

function open_calendar(idx)
{
	init_calendar();
	if(idx == 1)
	{
		clSlide.slideIn();
		clSlide2.slideOut();
	}
	else
	{
		clSlide2.slideIn();
		clSlide.slideOut();
	}
}

function close_calendar()
{
	if(!clSlide)
	{
		clSlide = new Fx.Slide('calendar_1');
	}
	if(!clSlide2)
	{
		clSlide2 = new Fx.Slide('calendar_2');
	}
	clSlide.slideOut();
	clSlide2.slideOut();
}

function updateminicalendar(url, jmp, ref, idx)
{
	new Ajax(url + '/module/calendar.php?getminicalendar=1&' + jmp + '=1&ref=' + ref + '&idx=' + idx, 
		{
			method: 'get',
			onComplete: function(e)
			{
				$('calendar_' + idx).innerHTML = this.response.text;
			}
		}
	).request();

}


function check_date()
{

}

function cancelNewEvent()
{
	if(aceventdiv)
	{
		$(aceventdiv).innerHTML = '';
		aceventdiv = '';
	}
}

function check_time(idx)
{
	if($('endtime').value != $('time').value)
		endchanged = true;
	if(idx == 1)
	{
		if(!endchanged)
		{
			$('endtime').value = $('time').value;
		}
	}
	else
	{
		endchanged = true;
	}
	
}

function new_select_day(day, idx)
{
	if($('date1').value != $('date2').value)
		endchanged = true;
	$('date' + idx).value = day;
	if(idx == '2')
	{
		endchanged = true;
	}
	else if(!endchanged)
	{
		$('date2').value = day;
	}
		
}

function checkKey(e)
{
	var keycode;
	
	
	var kC  = (window.event) ?
			 event.keyCode : e.keyCode;
	var Esc = (window.event) ?   
			27 : e.DOM_VK_ESCAPE 
	if(kC==Esc)
	{
		cancelNewEvent();
		return false;
    }    

	if (window.event) keycode = window.event.keyCode;
	else if (e) keycode = e.which;
	else return true;
	
	if (keycode == 13)
	{
		submitNewEvent();
		return false;
	}
	else if (keycode == 27)
	{
		cancelNewEvent();
		return false;
	}
	else
	{
	   return true;
	}
}

function submitNewEvent()
{
	$('newEvent').style.backgroundColor = '#5c5c5c';
	submit_quick_event();
}

function storeClassNames()
{
	origclass = new Object();
	$$('table.calendar tr.days td').each(
		function(td)
		{
			origclass[td.id] = td.className;
		}
	);	
}

function select_td(sel_id)
{
	if(!origclass)
	{
		storeClassNames();
	}
	if($('ts' + sel_id))
	{
		select_day( $('ts' + sel_id).value);
	}
	$$('table.calendar tr.days td').each(
		function(td)
		{
			if(td.id == sel_id)
			{
				td.className = 'selected';
			}
			else
			{
				td.className = origclass[td.id];
			}
		}
	);
}

function select_day( ts )
{
	if(day_selected != ts)
	{
		day_selected = ts;
		var url = $('evt_sbmt').value;
		new Ajax(url + '&sel_day=' + ts, 
			{
				method: 'get'
			}
		).request();
	}
}

function select_eventtype(uid)
{
	var url = $('evt_sbmt').value;
	$$('a.eventtype_link').each(
		function(et)
		{
			if(et.id == 'event_link[' + uid + ']')
			{
				et.style.textDecoration = 'underline';
				et.style.fontWeight = 'bold';
			}
			else
			{
				et.style.textDecoration = 'none';
				et.style.fontWeight = 'normal';
			}
		}
	);
	$('selected_eventtype').value = uid;
	new Ajax(url + '&sel_evttype=' + uid + '&ajreq=1', 
		{
			method: 'get'
		}
	).request();

}

function change_eventcolor()
{
	$('eventtype').style.color = $('etopt_' + $('eventtype').value).style.color;
}


/********** Popups *************/

function popup(e, title, content, request_url)
{
	var mouseX = e.pageX;
	var mouseY = e.pageY;

	// IE Compatible
	if(mouseX == null)
	{
		var mouseX = e.clientX + document.documentElement.scrollLeft;
		var mouseY = e.clientY + document.documentElement.scrollTop;
	}

	if(!$('popup_div'))
	{
		initPopupDiv();
	}
	else
	{
		$('popup_div').style.display = 'block';
	}

	$('popup_title').innerHTML 		= title;
	$('popup_content').innerHTML	= content;

	calculateDivPosition('popup_div', mouseX, mouseY);

	// We are loading the content using ajax -> Display spinner
	if(request_url.length > 0)
	{
		// If there is not initial content show spinner
		if(content.length == 0)
		{
			$('popup_content').innerHTML = '<p> <center><img src="general/images/spinner.gif" style="margin: 10px 0;" /></center> </p>';
		}
		
		new Ajax(request_url, 
			{	
				method: 'get',
				evalScripts: true,
				onComplete: function(e)
				{
					var myObject = Json.evaluate(this.response.text);
					
					$('popup_content').innerHTML = myObject['response'];
					if(myObject['head_response'])
					{
						$('head_response').innerHTML = myObject['head_response'];
					}
					if(myObject['js'] && myObject['js'].length > 0)
					{
						eval(myObject['js']);
					}
				}
			}
		).request();
	}
}

function eventColorChange()
{
	$('eventtype').style.color = $('eventtype').options[$('eventtype').selectedIndex].style.color;
}

function initPopupDiv()
{
	// Initialise the element
	var HoverDiv = new Element('div', 
		{
			id: 'popup_div', 
			styles: 
				{
					'position': 'absolute', 	
					'border': '1px solid #9c9c9a',
					'background-color': '#ffffff',
					'min-width': '350px'
				}
		}
	);

	// Add it to the page
	document.body.appendChild(HoverDiv);
	
	var div_content = '<h2 id="popup_title" class="fieldset" style="margin: 2px 2px 0 2px"></h2><div id="popup_content" class="popup_content" style="padding: 0; margin: 0"></div>';

	div_content += '<div class="popup_close"><a href="#" title="Fenster schlie&szlig;en" id="close_popup_link" style="position: absolute; line-height: 100%; vertical-align: middle; top: 0px; left: 0px">x</a></div>';

	$('popup_div').innerHTML = div_content;

	new Drag.Move('popup_div', {'handle': $('popup_title')});
	
	// Fade out the div
	if($('close_popup_link'))
	{
		$('close_popup_link').addEvent('click', 
			function(e) 
			{
				e = new Event(e).stop();
				
				close_popup();
			}
		);
	}
}

function calculateDivPosition(divName, mouseX, mouseY)
{
	var width 	= $(divName).getStyle('width').toInt();
	var height 	= $(divName).getStyle('min-height').toInt();
	var windowHeight = getWindowSize();
	
	//	alert(width + 'x' + height + ' - ' + windowHeight[0] + ' x ' + windowHeight[1]);
	width 	= mouseX + 10;
	height 	= mouseY + 10;
	
	if(1 == 1)
	{
		$(divName).setStyles(
			{
				'left': Math.floor(windowHeight[0] / 2 - 175),
				'top': 100
			}
		);
	}
	else
	{
		$(divName).setStyles(
			{
				'left': width,
				'top': height
			}
		);
	}
}

function getWindowSize() {
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  return new Array(myWidth, myHeight);
}

function repeat_change()
{
	if($('repeat').value == 0)
	{
		$('repeat_wrapper').style.display = 'none';
	}
	else
	{
		$('repeat_wrapper').style.display = 'block';
	}
}

function close_popup()
{
	$('popup_div').style.display = 'none';
}

function change_full_day()
{
	if($('full_day').checked)
	{
		$('from_time').style.display 	= 'none';
		$('to_time').style.display 		= 'none';
	}
	else
	{
		$('from_time').style.display 	= 'inline';
		$('to_time').style.display 		= 'inline';
	}
}

function startChange()
{
	if(startDate == $('enddate').value)
	{
		var d = $('startdate').value.split('-');

		$('enddate').value 				= $('startdate').value;
		$('enddate_disp').innerHTML		= d[2] + '.' + d[1] + '.' + d[0];
	}
	startDate = $('startdate').value;
}

function eventtype_selection()
{
	var val = $('eventtypes').value;
	$$('table#tab_cal tr').each(
		function(tr)
		{
			if(tr.className != 'tc_hd' && tr.className != 'tc_tl')
			{
				if(val == 0 || 'evt_' + val == tr.className)
				{
					tr.style.display = 'table-row';
				}
				else
				{
					tr.style.display = 'none';
				}
			}
		}
	);
}

function tc_open_more(id)
{
	$('tc_more_' + id).style.display 		= 'block';
	$('tc_more_link_' + id).style.display	= 'none';
}

function tc_close_more(id)
{
	$('tc_more_' + id).style.display 		= 'none';
	$('tc_more_link_' + id).style.display	= 'block';
}

function headline_changed()
{
	$('headline').style.backgroundColor	= '';
	$('headline').style.color			= '';
	$('headline_label').style.color		= '';
}

function toggleCsvRow(id)
{
	$$('#row_' + id + ' td').each(
		function (td)
		{
			if($('importRow[' + id + ']').checked)
			{
				td.style.backgroundColor = 'green';
			}
			else
			{
				td.style.backgroundColor = '#CC3333';
			}
		}
	);
}

function activateRow(id)
{
	$('importRow[' + id + ']').checked = true;
	toggleCsvRow(id);
}