<!--
/// JS functions for "guest" user.
var selected_event = {};
var saved_user_data = {};
var selected_menu = '';
var form = null;

////////////////////////////////////////////////////////////////

function TrimURL()
{
	var s = location.href;
	var c = s.indexOf('#');
	if (c > 0) location.href = s.substr(0, c);
}

/// Init variables and run commands when page loaded (onload).
function Init()
{
	form = document.forms[0];
	ResizeToWindowSize();
	InitCallback(window,'resize',ResizeToWindowSize);

	GetTextsR(InitC);
	GetLanguagesR(InitC);
	GetPlacesForEventR();
}

var menu_regexp = new RegExp(/menu=([a-z_]+)/);
/// Init variables and run commands when page loaded. Callback.
function InitC()
{
	if(!languages._loaded || !dictionary._loaded) return;
	GetMenu();

	// choose initial page
	var result = menu_regexp.exec(window.location.href);
	if(result && result.length > 1) {
		switch(result[1]) {
			case 'programok': InitEventsR(); break;
			case 'nyitott_portak': InitOpenedHomesR(); break;
			case 'mediatar': InitMediaR(); break;
			case 'visszatekinto': InitArchivesR(); break;
			default:
				if (form && Number(form.path) > 2009)
					InitTopicalR();
				else
					InitIntroR();
			break;
		}
	}
	else {
//		ShowWelcome();
		if (form && Number(form.path.value) > 2009)
			InitTopicalR();
		else
			InitIntroR();
	}
}


/// Get menu template and put it into the page.
function GetMenu()
{
	if(user.rights == 0) GetTemplateR('menu', GetMenuC);
	else GetTemplateR('admin_menu', GetMenuC);
}

/// Get menu template and put it into the page. Callback.
function GetMenuC()
{
	// put templates into page
	var node = document.getElementById('menu');
	if(node) {
		if(user.rights == 0) node.innerHTML = InjectTemplate({},templates.menu);
		else node.innerHTML = InjectTemplate({},templates.admin_menu);
		SelectMenu(selected_menu);
	}
}

/// Activate menu (change graphic).
function SelectMenu(name, status)
{
	if(status == null) status = true;
	var node = document.getElementById(name);
	if(node) {
		if(status) node.className = 'selected_btn';
		else node.className = 'menu_btn';
	}
}

/// Set desktop to show introduction page. Request.
function InitIntroR()
{
	ShowMisc(false);

	// change menu button background
	if(selected_menu) SelectMenu(selected_menu, false);
	selected_menu = 'menu_intro';
	SelectMenu(selected_menu);

	// if there is a missing template load it
	GetTemplateR('intro', InitIntroC);
	GetTemplateR('intro_filter', InitIntroC);
}

/// Set desktop to show introduction page. Callback.
function InitIntroC()
{
	if(!templates.intro || !templates.intro_filter) return;

	// clear fiilter
	var node = document.getElementById('filter_content');
	if(node) node.innerHTML = InjectTemplate({},templates.intro_filter);

	// put templates into page
	node = document.getElementById('content');
	if(node) node.innerHTML = InjectTemplate({},templates.intro);
}

/// Set desktop to show introduction page. Request.
function InitTopicalR()
{
	ShowMisc(false);

	// change menu button background
	if(selected_menu) SelectMenu(selected_menu, false);
	selected_menu = 'menu_topical';
	SelectMenu(selected_menu);

	// if there is a missing template load it
	GetTemplateR('topical', InitTopicalC);
	GetTemplateR('topical_filter', InitTopicalC);
}

/// Set desktop to show topical page. Callback.
function InitTopicalC()
{
	if(!templates.topical || !templates.topical_filter) return;

	// clear filter
	var node = document.getElementById('filter_content');
	if(node) node.innerHTML = InjectTemplate({},templates.topical_filter);

	// put templates into page
	node = document.getElementById('content');
	if(node) node.innerHTML = InjectTemplate({},templates.topical);
}

/// Set desktop to show contact page. Request.
function InitContactR()
{
	ShowMisc(false);

	// change menu button background
	if(selected_menu) SelectMenu(selected_menu, false);
	selected_menu = 'menu_contact';
	SelectMenu(selected_menu);

	// if there is a missing template load it
	GetTemplateR('contact', InitContactC);
	GetTemplateR('contact_filter', InitContactC);
}

/// Set desktop to show contact page. Callback.
function InitContactC()
{
	if(!templates.contact || !templates.contact_filter) return;

	// clear filter
	var node = document.getElementById('filter_content');
	if(node) node.innerHTML = InjectTemplate({},templates.contact_filter);

	// put templates into page
	node = document.getElementById('content');
	if(node) node.innerHTML = InjectTemplate({},templates.contact);
}

/// Set desktop to show archives page. Request.
function InitArchivesR()
{
	ShowMisc(false);

	// change menu button background
	if(selected_menu) SelectMenu(selected_menu, false);
	selected_menu = 'menu_visszatekinto';
	SelectMenu(selected_menu);

	// if there is a missing template load it
	GetTemplateR('archives', InitArchivesC);
	GetTemplateR('archives_filter', InitArchivesC);
}

/// Set desktop to show archives page. Callback.
function InitArchivesC()
{
	if(!templates.archives || !templates.archives_filter) return;

	// clear fiilter
	var node = document.getElementById('filter_content');
	if(node) node.innerHTML = InjectTemplate({},templates.archives_filter);

	// put templates into page
	node = document.getElementById('content');
	if(node) node.innerHTML = InjectTemplate({},templates.archives);
}


/// Set desktop to show events. Request.
function InitEventsR()
{
	ShowMisc(true);

	// change menu button background
	if(selected_menu) SelectMenu(selected_menu, false);
	selected_menu = 'menu_programok';
	SelectMenu(selected_menu);

	// if there is a missing template load it
	GetTemplateR('events_filter', InitEventsC);

	if(!festivaldays._loaded) GetFestivalDaysR(InitEventsC);
	if(!cities._loaded) GetCitiesR(InitEventsC);
	if(!eventcategories._loaded) GetEventcategoriesR(InitEventsC);
}

/// Set desktop to show events. Callback.
function InitEventsC()
{
	if(!templates.events_filter || !festivaldays._loaded || !cities._loaded || !eventcategories._loaded) return;

	// put templates into page
	var node = document.getElementById('filter_content');
	if(node) {
		node.innerHTML = InjectTemplate({},templates.events_filter);

		// put days into <SELECT
		for(var i=0; i<festivaldays._loaded.length; i++) {
			var festivalday = festivaldays[festivaldays._loaded[i]];
			form.date.options[i+1] = new Option(TimestampToDate(festivalday.date), festivalday.date);
		}

		// put cities into <SELECT
		for(var i=0; i<cities._loaded.length; i++) {
			var city = cities[cities._loaded[i]];
			form.city.options[i+1] = new Option(city.city, city.city);
		}

		// put eventcategories into <SELECT
		var allID = [];
		var oi = 1;
		for(var i=0; i<eventcategories._loaded.length; i++) {
			var evtcat = eventcategories[eventcategories._loaded[i]];
			if(evtcat.noList == 0) {
				form.EVENTCATEGORIES_ID.options[oi] = new Option(evtcat.name, evtcat.ID);
				allID.push(evtcat.ID);
				oi++;
			}
		}
		form.EVENTCATEGORIES_ID.options[0].value = allID.join(',');
	}

	SearchEvents();
}


/// Set desktop to show opened homes. Request.
function InitOpenedHomesR()
{
	ShowMisc(true);

	// change menu button background
	if(selected_menu) SelectMenu(selected_menu, false);
	selected_menu = 'menu_nyitott_portak';
	SelectMenu(selected_menu);

	// if there is a missing template load it
	GetTemplateR('opened_homes_filter', InitOpenedHomesC);

	if(!festivaldays._loaded) GetFestivalDaysR(InitOpenedHomesC);
	if(!cities._loaded) GetCitiesR(InitOpenedHomesC);
	if(!eventcategories._loaded) GetEventcategoriesR(InitOpenedHomesC);
}

/// Set desktop to show opened homes. Callback.
function InitOpenedHomesC()
{
	if(!templates.opened_homes_filter || !festivaldays._loaded || !cities._loaded || !eventcategories._loaded) return;

	// put templates into page
	var node = document.getElementById('filter_content');
	if(node) {
		node.innerHTML = InjectTemplate({},templates.opened_homes_filter);

		// put days into <SELECT
		for(var i=0; i<festivaldays._loaded.length; i++) {
			var festivalday = festivaldays[festivaldays._loaded[i]];
			form.date.options[i+1] = new Option(TimestampToDate(festivalday.date), festivalday.date);
		}

		// put cities into <SELECT
		for(var i=0; i<cities._loaded.length; i++) {
			var city = cities[cities._loaded[i]];
			form.city.options[i+1] = new Option(city.city, city.city);
		}
	}

	SearchEvents();
}


/// Resize content to fill the whole window.
function ResizeToWindowSize()
{
	var size = GetDocumentSize();
	var node = document.getElementById('content');
	if(node) {
		var pos = GetElementPosition(node);

		// from 2010 on the site needs larger area at the bottom
		var paddingBottom = 40;
		if (form && Number(form.path.value) > 2009)
			paddingBottom = 78;

		var height = size.height-pos.y-paddingBottom;
		node.style.height = height+'px';

		var node = document.getElementById('misc_content');
		if(node) node.style.height = height+'px';
	}
}


/// Show welcome screen.
function ShowWelcome()
{
	var rule = FindLinkedCSSRule('#welcome');
	if(rule) rule.style.display = 'block';
}

/// Hide welcome screen with an animation.
function HideWelcome()
{
	var rule = FindLinkedCSSRule('#welcome');
	if(rule) rule.style.display = 'none';

	// mozilla scrollbar bugfix
	var node = document.getElementById('content');
	if(node) node.style.overflow = 'auto';
}



/// Search events and put them into the page.
function SearchEvents()
{
	if(!AJAXlock('SearchEvents', true)) return; // lock
	DisableWidgets(true,'date','city','EVENTCATEGORIES_ID','keywords');

	// clear event list
	var contentNode = document.getElementById('content');
	if(contentNode) contentNode.innerHTML = '';
	events._loaded = false;

	// clear comments cache
	events_comments = {};

	// clear selected event and misc
	selected_event.ID = null;
	ShowMiscTab('');

	if(user.rights == 0) GetTemplateR('events_list', SearchEventsC);
	else if(user.rights & 2) {
		GetTemplateR('admin_events_list', SearchEventsC);
		GetTemplateR('admin_add_event', SearchEventsC);
	}

	GetTemplateR('events_places', SearchEventsC);
	GetTemplateR('events_not_found', SearchEventsC);
	GetEventsR(SearchEventsC);
}


/// Search events and put them into the page. Callback.
function SearchEventsC()
{
	if(
		!events._loaded || !templates.events_places || !templates.events_not_found ||
		(user.rights == 0 && !templates.events_list) ||
		(user.rights & 2 && (!templates.admin_events_list || !templates.admin_add_event))
	) return;

	var html = '';

	// there are some events, list them
	if(user.rights & 2) {
		html += InjectTemplate({},templates.admin_add_event);
	}
	if(events._loaded.length) {
		for(var i=0;i<events._loaded.length; i++) {
			var event = events[events._loaded[i]];
			event.date = TimestampToDate(event.beginning);
			event.beginning_time = TimestampToTime(event.beginning);
			if(event.ending.length) event.ending_time = TimestampToTime(event.ending);
			else event.ending_time = '';

			if(user.rights == 0) html += InjectTemplate(event,templates.events_list);
			else if(user.rights & 2) html += InjectTemplate(event,templates.admin_events_list);
		}
	}

	// no event found
	else if (!(user.rights & 2)) {
		html = InjectTemplate({},templates.events_not_found);
	}

	var contentNode = document.getElementById('content');
	if(contentNode) contentNode.innerHTML = html;

	DisableWidgets(false,'date','city','EVENTCATEGORIES_ID','keywords');
	AJAXlock('SearchEvents', false); // release lock
}


/// On enter (keywords) search event.
function SearchEventsByKeywords(event)
{
	var code;
	if(window.event) code = window.event.keyCode; //IE
	else code = event.keyCode;

	if(code == 13) SearchEvents();

	return false;
}


var showEvent = [];
/// Show event (and get via AJAX if need).
/// Parameters:
///  ID: event ID
function ShowEvent(ID)
{
	showEvent.push(ID);

	// handle event selection
	// new event selected
	if(selected_event.ID != ID) {
		// remove selected class from previous selection
		if(selected_event.ID) {
			var node = document.getElementById('event_'+selected_event.ID);
			if(node) node.className = node.className.replace('selected','');
			ShowEventLevels(selected_event.ID,1);

			// clear misc content (workaround)
			ShowMiscTab('');
		}

		// select event (set class to selected)
		var node = document.getElementById('event_'+ID);
		if(node) node.className += ' selected';

		selected_event.ID = ID;
		selected_event.level = 3;
	}

	// same event, we need to set information level only
	else {
		selected_event.level = (selected_event.level == 3) ? 1 : 3;
	}

	if(!events[ID] || !events[ID]._detailed) GetEventR(ID, ShowEventC);
	if(!events_places[ID]) GetPlacesForEventR(ID, ShowEventC);

	// get misc menu template
	GetTemplateR('misc_menu', ShowEventC);
}


/// Show event (and get via AJAX if need). Callback.
function ShowEventC()
{
	var ID = showEvent[0];
	if(ID != selected_event.ID) { // if another event selected, do not show this
		showEvent.shift();
		return;
	}
	if(!events[ID] || !events[ID]._detailed || !events_places[ID] || !templates.misc_menu) return;

	// put event into the page (if it isn't there yet)
	if(!events[ID]._in_page) {
		var node = document.getElementById('event_'+ID);
		if(node) {
			var html = node.innerHTML;
			var places_html = [];

			// process places
			for(var i=0;i<events_places[ID].length;i++) {
				var place = places[events_places[ID][i]];
				places_html.push(InjectTemplate(place, templates.events_places));
			}

			var event = CopyHash(events[ID]);
			event.places = places_html.join(', ');
			event.category = eventcategories[event.EVENTCATEGORIES_ID].name;
			event.shortDescription = InjectTemplate({},event.shortDescription);
			event.description = InjectTemplate({},event.description);
			html = InjectTemplate(event, html);
			node.innerHTML = html;

			// save status
			events[ID]._in_page = true;
		}
	}

	ShowEventLevels(ID, selected_event.level);
	ShowMiscTab('media');

	showEvent.shift();
}


var hidden_regexp = new RegExp(/ hidden/);
/// Show different levels of information with extract/collapse event.
/// Parameters:
///  ID: EVENTS ID
///  level: 1-3 (1: just title, 2: short description, 3: description)
function ShowEventLevels(ID, level)
{
	var node_l2 = document.getElementById('event_'+ID+'_level2');
	var node_l3 = document.getElementById('event_'+ID+'_level3');

	switch(level) {
		case 1:
			if(node_l2 && !hidden_regexp.test(node_l2.className)) node_l2.className += ' hidden';
			if(node_l3 && !hidden_regexp.test(node_l3.className)) node_l3.className += ' hidden';
			break;

		case 2:
			if(node_l2) node_l2.className = node_l2.className.replace('hidden','');
			break;

		case 3:
			if(node_l2) node_l2.className = node_l2.className.replace('hidden','');
			if(node_l3) node_l3.className = node_l3.className.replace('hidden','');
			break;
	}

	// scroll to view
// var node = document.getElementById('content');
// alert(node.scrollTop);
//	if(node) node.scrollIntoView();
}


/// Show/hide "misc" section on the right side of the screen.
/// Parameters:
///  show: boolean, true: show misc / false: hide misc section
function ShowMisc(show) {
	var node = document.getElementById('misc');
	if(node) {
		if(show) node.className = 'show_misc';
		else node.className = 'hide_misc';
	}
	node = document.getElementById('content');
	if(node) {
		if(show) node.className = '';
		else node.className = 'full_content';
	}
}


/// Show selected 'misc' tab.
/// Parameters:
///  tabname: string, name of tab (eg. media if ID is misc_media_tab). If tabname empty all tabs will hide.
function ShowMiscTab(tabname)
{
	if(selected_event.misc == tabname && selected_event.lastID == selected_event.ID) return; // tab already selected, nothing to do
	selected_event.lastID = selected_event.ID;

	// other tab selected, remove selection from the previous one
	if(selected_event.misc && selected_event.misc.length) {
		var node = document.getElementById('misc_'+selected_event.misc+'_tab');
		if(node) node.className = node.className.replace('selected','');
	}

	// no tab selected, so show tabs first
	else {
		var misc_menu = document.getElementById('misc_menu');
		if(misc_menu && templates.misc_menu) misc_menu.innerHTML = InjectTemplate({},templates.misc_menu);
	}

	// tabname is empty, so hide tabs
	if(!tabname.length) {
		var misc_menu = document.getElementById('misc_menu');
		if(misc_menu) misc_menu.innerHTML = '';

		// clear and deselect tab content
		var misc_content = document.getElementById('misc_content');
		if(misc_content) {
			misc_content.innerHTML = '';
			misc_content.className = 'misc_content_notselected'
		}
	}

	else {
		// select tab
		var node = document.getElementById('misc_'+tabname+'_tab');
		if(node) node.className += ' selected';

		// clear and select (make active) tab content
		var misc_content = document.getElementById('misc_content');
		if(misc_content) {
			misc_content.innerHTML = '';
			misc_content.className = 'misc_content_selected';
		}
	}

	selected_event.misc = tabname;

	// get information need for the selected tab
	switch(selected_event.misc) {
		case 'media':
			ShowMediaTab();
			break;

		case 'places':
			GetTemplateR('misc_content_place', ShowMiscTabC); // get template
			var placeIDs = events_places[selected_event.ID];
			for(var i=0; i<placeIDs.length; i++)
				if(!places[placeIDs[i]]._detailed) GetPlaceR(placeIDs[i], ShowMiscTabC); // get place information
			break;

		case 'comments':
			GetTemplateR('misc_content_write_comment', ShowMiscTabC);
			break;
	}
}


/// Show selected 'misc' tab. Callback.
function ShowMiscTabC(errorcode)
{
	// check information need for the selected tab
	switch(selected_event.misc) {
		case 'places':
			if(!templates.misc_content_place) return;

			var placeIDs = events_places[selected_event.ID];
			for(var i=0; i<placeIDs.length; i++)
				if(!places[placeIDs[i]]._detailed) return;

			// put places into the page
			var html = '';
			for(var i=0; i<placeIDs.length; i++) {
				var place = places[placeIDs[i]];
				html += InjectTemplate(place, templates.misc_content_place);
			}

			var node = document.getElementById('misc_content');
			if(node) node.innerHTML = html;

			break;

		case 'comments':
			if(!templates.misc_content_write_comment) return;

			var html = InjectTemplate({},templates.misc_content_write_comment);

			// put comment writer into the page
			var node = document.getElementById('misc_content');
			if(node) {
				node.innerHTML = html;

				// put saved user data
				if(saved_user_data.name) {
					SetInput('name',saved_user_data.name);
					form['name'].className += ' ok';
				}
				if(saved_user_data.email) {
					SetInput('email',saved_user_data.email);
					form['email'].className += ' ok';
				}

				// get comments for the selected event
				ShowComments();
			}

			break;
	}
}


function ShowMediaTab(force)
{
	// get template
	if(user.rights == 0) GetTemplateR('misc_content_media', ShowMediaTabC);
	else if(user.rights & 2) {
		GetTemplateR('admin_misc_content_media', ShowMediaTabC);
		GetTemplateR('admin_misc_content_add_media', ShowMediaTabC);
	}

	// get media data via ajax
	if(!events_media[selected_event.ID] || force) GetMediaR(selected_event.ID, '', '', ShowMediaTabC);
}

function ShowMediaTabC(errorcode)
{
	if(
		!events_media[selected_event.ID] ||
		(user.rights == 0 && !templates.misc_content_media) ||
		(user.rights & 2 && (!templates.admin_misc_content_media || !templates.admin_misc_content_add_media))
	) return;

	// preview images into the page
	var media = events_media[selected_event.ID];
	var html = '';

	// add "add media" template (only admin)
	if(user.rights & 2) html = InjectTemplate({},templates.admin_misc_content_add_media);

	if(media._last_loaded.length) {
		for(var i=0;i<media._last_loaded.length; i++) {
			if(user.rights == 0) html += InjectTemplate(media[media._last_loaded[i]],templates.misc_content_media);
			else if(user.rights & 2) html += InjectTemplate(media[media._last_loaded[i]],templates.admin_misc_content_media);
		}
	}

	var node = document.getElementById('misc_content');
	if(node) node.innerHTML = html;
}

var ok_regexp = new RegExp('ok');
var email_regexp = new RegExp(/\S+@\S+\.\S+/);
/// Check content of a form input field.
/// Parameters:
///  node: element, form input element
///  type: string, '': ok if not empty
///                'email': ok if its a string@string.string format
function CheckInputContent(node, type)
{
	var ok = false;

	switch(type) {
		case 'email':
			if(email_regexp.test(node.value)) ok = true;
			break;

		default:
			if(node.value.length) ok = true;
			break;
	}

	if(!ok) node.className = node.className.replace(ok_regexp,''); // not ok
	else if(!ok_regexp.test(node.className)) node.className += ' ok'; // ok
}


/// Send event's comment to the server via AJAX.
function SendEventComment()
{
	// check input fields
	if(
		!ok_regexp.test(form['name'].className) ||
		!ok_regexp.test(form.email.className) ||
		!ok_regexp.test(form.comment.className)
	) {
		ShowMessage('error_missing_required_fields');
		return;
	}

	if(!AJAXlock('SendEventComment', true)) return; // lock

	// save user data
	saved_user_data.name = GetInput('name');
	saved_user_data.email = GetInput('email');

	// send data via AJAX
	var data = {};
	data.params = {};

	InputsToParams(form, ['lang','name','email','comment'], data.params);
	data.params.targetID = selected_event.ID;
	data.params.targetType = 3;
	data.params.request = 'add_comment';
	data.callback = SendEventCommentA;
	data.endcallback = null;

	AJAXsendRequest(data);
}

/// Send event's comment to the server via AJAX. Answer.
//   data.xml: XML answer
function SendEventCommentA(data)
{
	var rootNode = AJAXgetTag(data.xml, 'data');
	AJAXshowMessage(rootNode);

	// put events into the page
	if(AJAXgetAttributeValue(rootNode,'error') <= 0) {
		ClearInputs('comment'); // clear comment field
		form.comment.className = form.comment.className.replace(ok_regexp,'');

		events_comments[selected_event.ID] = null;
		ShowComments();
	}

	if(!AJAXlock('SendEventComment', false)) return; // lock
	if(data.endcallback) data.endcallback.call(null);
}


/// Show comments for the selected event.
function ShowComments()
{
	GetTemplateR('misc_content_comment', ShowCommentsC);
	if(!events_comments[selected_event.ID]) GetCommentsForEventR(selected_event.ID, ShowCommentsC);
}

/// Show comments for the selected event. Callback.
function ShowCommentsC()
{
	var ID = selected_event.ID;
	if(!events_comments[ID] || !templates.misc_content_comment) return;

	// process comments
	var html = '';
	for(var i=0;i<events_comments[ID].length;i++) {
		var comment = comments[events_comments[ID][i]];
		comment.date = TimestampToDate(comment.timestamp);
		comment.time = TimestampToTime(comment.timestamp);
		html += InjectTemplate(comment, templates.misc_content_comment);
//		if(comment.comment.search(/</) != -1) 4(comment.comment);
	}
	var node = document.getElementById('comments');
	if(node) node.innerHTML = html;
}


var background_faded = false;
/// Fade in/out background effect.
/// Parameters:
///  show: boolean, true (or null): fade, false: hide fading
function FadeBackground(show, callback)
{
	if(background_faded == show) return;
	if(show == null) show = true;

	var anim = {};
	var node = document.getElementById('fade_bgr');

	// prepare animation
	if(node) {
		if(ie && node.filters.alpha) anim.targetobj = node.filters.alpha;
		else anim.targetobj = node.style;
		anim.targetattr = 'opacity';
		anim.length = 500; // in ms
		anim.valuefixed = 2;
		anim.callback_on_end = FadeBackgroundC;
		anim.callback = callback;

		// show
		if(show) {
			anim.start = 0;
			anim.end = 0.7;
			node.style.left = '0px'; // show screen
			node.style.display = 'block';

			// mozilla scrollbar bugfix
			var content = document.getElementById('content');
			if(content) content.style.overflow = 'hidden';
			var misc_content = document.getElementById('misc_content');
			if(misc_content) misc_content.style.overflow = 'hidden';
		}

		// hide
		else {
			anim.start = 0.7;
			anim.end = 0;
		}

		if(ie) {
			anim.start *= 100;
			anim.end *= 100;
			anim.valuefixed = 0;
		}

		Animate(anim);
	}
}

/// Fade in/out background effect.
function FadeBackgroundC(anim)
{
	if(background_faded) {
		var node = document.getElementById('fade_bgr');
		if(node) node.style.display = 'none';
		background_faded = false;

		// mozilla scrollbar bugfix
		var content = document.getElementById('content');
		if(content) content.style.overflow = 'auto';
		var misc_content = document.getElementById('misc_content');
		if(misc_content) misc_content.style.overflow = 'auto';
	}

	else background_faded = true;

	if(anim.callback) anim.callback.call(null);
}


var show_image = {};
/// Show image in a window with faded background.
/// Parameters:
///  url: string, image url
function ShowImage(url)
{
	FadeBackground(true, LoadImageC);

	// start loading picture
	show_image.image = new Image();
	show_image.image.src = url;
	show_image.timerid = setInterval(LoadImageC,250);
}

/// Check image loaded (completed) and show it. Callback.
function LoadImageC()
{
	// if image loaded
	if(background_faded == true) {
		var node = document.getElementById('show_image');

		// show loader
		if(!show_image.loading) {
			if(node) {
				node.className = 'loading_image';
				node.style.display = 'block';
			}
			show_image.loading = true;

			// set position of image
			CenterImage();
			InitCallback(window,'resize',CenterImage);
		}

		// image loaded, show image
		if(show_image.image.complete) {
			// stop loading timer
			if(show_image.timerid) {
				clearInterval(show_image.timerid);
				show_image.timerid = null;
			}

			if(node) {
				node.className = '';
				var nodesize = GetElementSize(node);

				var anim_width = {};
				anim_width.targetobj = node.style;
				anim_width.valueaddon = 'px';
				anim_width.length = 700;
				anim_width.targetattr = 'width';
				anim_width.start = nodesize.width;
				anim_width.end = show_image.image.width;
				anim_width.callback_on_end = ShowImageC;
				anim_width.callback_on_frame = CenterImage;

				var anim_height = {};
				anim_height.targetobj = node.style;
				anim_height.valueaddon = 'px';
				anim_height.length = 700;
				anim_height.targetattr = 'height';
				anim_height.start = nodesize.height;
				anim_height.end = show_image.image.height;
				anim_height.callback_on_end = ShowImageC;
				anim_height.callback_on_frame = CenterImage;

				Animate(anim_width);
				Animate(anim_height);
			}
		}
	}
}

/// Show image. Callback.
function ShowImageC()
{
	var node = document.getElementById('show_image');
	var nodesize = GetElementSize(node);

	// check window size is big enough to put image into background
	if(node && nodesize.width >= show_image.image.width && nodesize.height >= show_image.image.height) {
		node.style.backgroundImage = 'url('+show_image.image.src+')';
	}
}

/// Center image window.
function CenterImage()
{
	CenterElement(document.getElementById('show_image'), true, true);
}

/// Close image window.
function CloseImage()
{
	// stop loading timer
	if(show_image.timerid) {
		clearInterval(show_image.timerid);
		show_image.timerid = null;
	}

	DestroyCallback(window,'resize',CenterImage);

	// hide image
	var node = document.getElementById('show_image');
	if(node) {
		node.style.backgroundImage = '';
		node.style.display = 'none';
		node.style.width = '';
		node.style.height = '';
	}

	show_image = {};
	FadeBackground(false);
}


/// Show image / download song and video.
function AccessMedia(type, url)
{
	if(type == 1) { // image
		ShowImage(url);
		return false;
	}

	return true;
}


/// Set desktop to show media. Request.
function InitMediaR()
{
	ShowMisc(false);

	// change menu button background
	if(selected_menu) SelectMenu(selected_menu, false);
	selected_menu = 'menu_mediatar';
	SelectMenu(selected_menu);

	// if there is a missing template load it
	GetTemplateR('media_filter', InitMediaC);
}


/// Set desktop to show media. Callback.
function InitMediaC()
{
	if(!templates.media_filter) return;

	// put templates into page
	var node = document.getElementById('filter_content');
	if(node) {
		node.innerHTML = InjectTemplate({},templates.media_filter);
	}

	SearchMedia();
}

/// Search media.
function SearchMedia()
{
	media_list = null;
	GetMediaR('', GetInput('type'), GetInput('keywords'), SearchMediaC);
	GetTemplateR('media_list', SearchMediaC);
}

var media_list = null;
/// Search media, callback.
function SearchMediaC(error, media)
{
	if(media) media_list = media;

	if(media_list && templates.media_list) { // check result and template
		var html = '';
		var media = null;
		for(var i=0;i<media_list._last_loaded.length; i++) {
			media = media_list[media_list._last_loaded[i]];
			if(media.shortDescription.length > 40) media.shortDescription = media.shortDescription.substr(0,40)+'...';
			html += InjectTemplate(media_list[media_list._last_loaded[i]],templates.media_list);
		}

		var node = document.getElementById('content');
		if(node) node.innerHTML = html;
	}
}

/// On enter (keywords) search media.
function SearchMediaByKeywords(event)
{
	var code;
	if(window.event) code = window.event.keyCode; //IE
	else code = event.keyCode;

	if(code == 13) SearchMedia();

	return false;
}

var login_status = false;
/// Show/hide login screen.
/// Parameters:
///  show: boolean, true (or null): show, false: hide screen
function ShowLogin(show)
{
	if(login_status == show) return;
	if(show == null) show = true;

	// show
	if(show) {
		// if there is a missing template load it
		GetTemplateR('login', ShowLoginC);
		FadeBackground(true, ShowLoginC);
	}

	// hide
	else {
		DestroyCallback(window,'resize',CenterLoginWindow);
		var node = document.getElementById('login');
		if(node) node.style.display = 'none';

		FadeBackground(false);
		login_status = false;
	}
}

/// Show/hide login screen. Callback.
function ShowLoginC()
{
	if(!templates.login || !background_faded) return;

	// put login into screen
	var node = document.getElementById('login');
	if(node) {
		node.style.display = 'block';
		node.innerHTML = InjectTemplate({}, templates.login);
		if(form.login_name) form.login_name.focus();
	}

	CenterLoginWindow();
	InitCallback(window,'resize',CenterLoginWindow);
	login_status = true;
}

/// Center login window on the screen.
function CenterLoginWindow()
{
	CenterElement(document.getElementById('login'), true, true);
}


/// Authenticate user via AJAX.
/// Parameters:
///  endcallback: this function will be called on the end
/// Required FORM variables: login_name, password
function AuthenticateR(endcallback)
{
	// check input fields
	if(
		!ok_regexp.test(form.login_name.className) ||
		!ok_regexp.test(form.password.className)
	) {
		ShowMessage('error_missing_required_fields');
		return;
	}

	var data = {};
	data.params = {};

	data.params.request = 'auth_user';
	data.params.name = GetInput('login_name');
	data.params.password = hex_md5(GetInput('password')); // send only an md5 hash not the password
	data.callback = AuthenticateA;
	data.endcallback = endcallback;

	AJAXsendRequest(data);
}

/// Authenticate user via AJAX. Callback.
function AuthenticateA(data) {
	var rootNode = AJAXgetTag(data.xml, 'data');
	AJAXshowMessage(rootNode);

	// put events into the page
	if(AJAXgetAttributeValue(rootNode,'error') <= 0) {
		var userNode = AJAXgetTag(rootNode, 'user');
		if(userNode) user = AJAXgetAttributesAsHash(userNode);

		// hide login window
		ShowLogin(false);

		// init menu
		GetMenu();
		switch(selected_menu) {
			case 'menu_programok': InitEventsR(); break;
			case 'menu_nyitott_portak': InitOpenedHomesR(); break;
		}
	}

	if(data.endcallback) data.endcallback.call(null);
}

var admin_edit = {};
admin_edit.status = false;
/// Show/hide admin edit screen.
/// Parameters:
///  show: boolean, true (or null): show, false: hide screen
function ShowAdminEdit(show, callback)
{
	if(!admin_edit.node) admin_edit.node = document.getElementById('admin_edit');
	if(admin_edit.status == show || !admin_edit.node) return;
	if(show == null) show = true;

	admin_edit.status = show;

	// show
	if(show) {
		// if there is a missing template load it
		FadeBackground(true, ShowAdminEditC);
		if(callback) admin_edit.callback = callback;
	}

	// hide
	else {
		DestroyCallback(window,'resize',ResizeAdminEditWindow);
		admin_edit.node.style.display = 'none';
		admin_edit.innerHTML = '';


		FadeBackground(false, callback);
	}
}

/// Show/hide admin edit screen. Callback.
function ShowAdminEditC()
{
	// put login into screen
	ResizeAdminEditWindow();
	InitCallback(window,'resize',ResizeAdminEditWindow);

	if(admin_edit.callback) admin_edit.callback.call(null);
}

/// Resize admin edit window.
function ResizeAdminEditWindow()
{
	var content_node = document.getElementById('content');
	if(content_node && admin_edit.node) {
		var size = GetElementSize(content_node);
		admin_edit.node.style.display = 'block';
		admin_edit.node.style.width = (size.width-12)+'px';
		admin_edit.node.style.height = (size.height-12)+'px';

		var pos = GetElementPosition(content_node);
		admin_edit.node.style.left = pos.x+'px';
		admin_edit.node.style.top = pos.y+'px';
	}
}

/// Logout.
/// Parameters:
///  endcallback: this function will be called on the end
function LogoutR(endcallback)
{
	var data = {};
	data.params = {};

	data.params.request = 'logout';
	data.params.session_id = user.session_id;
	data.callback = LogoutA;
	data.endcallback = endcallback;

	AJAXsendRequest(data);
}

/// Logout. Callback.
function LogoutA(data) {
	var rootNode = AJAXgetTag(data.xml, 'data');
	AJAXshowMessage(rootNode);

	// put events into the page
	if(AJAXgetAttributeValue(rootNode,'error') <= 0) {
		user = {rights: 0};
		GetMenu();
		switch(selected_menu) {
			case 'menu_programok': InitEventsR(); break;
			case 'menu_nyitott_portak': InitOpenedHomesR(); break;
		}
	}

	if(data.endcallback) data.endcallback.call(null);
}
//-->

