// calcms base functions
// event handlers are customized at herbstradio.org

  function updateContainer(id, url, onLoading, callback){
	if (id==null) return;
	if ($("#"+id).length==0) return;
//	if (onLoading)document.getElementById(id).innerHTML="lade ...";
	$("#"+id).load(url,null,callback);
  }

  function load(url){
	window.location.href=url;
	//$(window).load(url);
	//$('html').load(url);
  }

  function postContainer(url, parameters, callback){
	if (url!='') $.post(url, parameters, callback);
  }

  // get calcms setting
  function get(name){
	if (calcms_settings[name]== null) return '';
	return calcms_settings[name];
  }

  // set calcms setting
  function set(name,value){
	calcms_settings[name]=value;
  }

  // get select box value
  function selectValue(element){
	value=element.options[element.selectedIndex].value;
	return value;
  }

  // set calcms_settings to parameters from URL
  function evaluateParametersFromUrl(){
	var location=new String(window.location);

	if (!location.match(get("base_url"))) return;

	if (window.location.search != ""){
		var parameters = window.location.search.split("?")[1].split("&");
		for(var i=0; i < parameters.length; i++) {
			var pair = parameters[i];
			var name_values=pair.split("=");
			if (name_values!=null){
//				alert(name_values[0]+"="+name_values[1]);
//				set(name_values[0],name_values[1]);
				var element=document.getElementById(name_values[0]);
				if (element!=null) element.value=name_values[1];
			}
		}
	}

	var sendung=/\/sendung\/(\d+)\//;
	sendung.exec(location);

	if (RegExp.$1!=null && RegExp.$1 !=''){
//		alert(RegExp.$1);
		set('event_id',RegExp.$1);
		set('last_event_id',get('event_id'));
	}else{

		var sendungen=/\/sendungen\/(\d{4}\-\d{2}\-\d{2})\/(\d{4}\-\d{2}\-\d{2})\/(\d)\//;
		sendungen.exec(location);
		if (RegExp.$1 !='' && RegExp.$2 !='' && RegExp.$3 !=''){
			set('from_date',RegExp.$1);
			set('till_date',RegExp.$2);
			set('weekday',RegExp.$3);
		}else{

			var sendungen=/\/sendungen\/(\d{4}\-\d{2}\-\d{2})\/(\d{4}\-\d{2}\-\d{2})\//;
			sendungen.exec(location);
			if (RegExp.$1 !='' && RegExp.$2 !=''){
				set('from_date',RegExp.$1);
				set('till_date',RegExp.$2);
			}else{
				var sendungen=/\/sendungen\/(\d{4}\-\d{2}\-\d{2})\//;
				sendungen.exec(location);
				if (RegExp.$1 !=''){
					set('date',RegExp.$1);
				}
			}

		}

		var kalender=/\/kalender\/(\d{4}\-\d{2}\-\d{2})\/(\d{4}\-\d{2}\-\d{2})\//;
		kalender.exec(location);
		if (RegExp.$1 !='' && RegExp.$2 !=''){
			set('from_date',RegExp.$1);
			set('till_date',RegExp.$2);
		}else{
			var kalender=/\/kalender\/(\d{4}\-\d{2}\-\d{2})\//;
			kalender.exec(location);
			if (RegExp.$1 !=''){
				set('date',RegExp.$1);
			}
		}
	}
 }

  // return URL from calcms_settings 
  // parameters can be overwritten by field and value
  // This handles main controller interaction logics
  function setAndGetUrlParameters(field,value){

	//overwrite fields by field and value
	if (field!=null && value!=null && field !=''){
		//alert(target+" "+field+" "+value);
		set(field,value);
	}

	//read fields
	var debug=		get('debug');
//	var view=		get('view');

	var from_date=		get('from_date');
	var till_date=		get('till_date');
	var date=		get('date');
	var month=		get('month');
	var weekday=		get('weekday');
//	var time_of_day=	get('time_of_day');
//	var time=		get('time');
	var time_of_day=	'';
	var time=		'';

	var program=		get('program');
	var series_name=	get('series_name');
	var category=		get('category');
	var tag=		get('tag');

	var search_field	= get('search');

//	delete filters by current action
	if ((field=='search' && search_field!='')
	|| (field=='category' && category!='')
	|| (field=='series_name' && series_name!='')
	|| (field=='program' && program!='')
	|| (field=='tag') && tag!=''){
		weekday='';
		date='';
		from_date='';
		till_date='';
	}

	if (field=='search'){
		category='';
		series_name='';
		program='';
	}

	if (field=='category'){
		search_field='';
		series_name='';
		program='';
	}

	if (field=='program'){
		search_field='';
		series_name='';
		category='';
	}

	if (field=='series_name'){
		search_field='';
		program='';
		category='';
	}

	if (field=='month'){
		if (month != ''){
			from_date=month;
			till_date=month.substring(0,month.length-2)+"31" ;
		}
		weekday='';
		date='';
		category='';
		program='';
		series_name='';
		tags='';
		search_field='';
	}

	if (field=='week'){
		weekday='';
		date='';
		category='';
		program='';
		series_name='';
		tags='';
		search_field='';
	}

	if (field=='weekday'){
/*
		if (month != ''){
			from_date=month;
			till_date=month.substring(0,month.length-2)+"31" ;
		}
*/
		category='';
		program='';
		series_name='';
		tags='';
		search_field='';
	}

	if (field=='date'){
		weekday='';
		from_date='';
		till_date='';
		category='';
		program='';
		series_name='';
		tags='';
		search_field='';
	}

	if (field=='time'){
		if (time=='null'){
			return 
		}else{
			weekday='';
			time_of_day='';
		}
	}
	
	if (field=='month' || field=='week' || field=='weekday' || field=='time_of_day'){
		time='';
	}


//	build target URL
	var url='';

	if (field=='month' || field=='week'){
		if (from_date != '') url+='/'+from_date;
		if (till_date != '') url+='/'+till_date;
	}else if (weekday !=''){
		if (from_date != '') url+='/'+from_date;
		if (till_date != '') url+='/'+till_date;
		url+='/'+weekday;
	}else if (date !=''){
		if (date=='today'){
			url+='/heute/';
		}else{
			url+='/'+date;
		}
	}

	if (search_field !=''){
		url+="/suche/"+search_field;
	}

	if (category != null && category !=''){
		url+="/kategorie/"+category;
	}

	if (series_name != null && series_name !=''){
		url+="/sendereihe/"+series_name;
	}

	if (url.substr(url.length-1,url.length) != '/'){
		url+='/';
	}
	
	if (time_of_day !=''){
		url+="&time_of_day="+time_of_day;
	}else if (time !='' && time !='null'){
		url+="&"+time;
	}

	if (tag != null && tag !=''){
		url+="&tag="+tag;
	}


	if (program != null && program !=''){
		url+="&program="+program;
	}

	if (field == 'print'){
		url+="&print=1";
	}

	if (debug != ''){
		url+='&debug='+debug;
	}

	return url;
}

  function selectFirstOption(id){
	if ($(id) && $(id).length>0) $(id)[0].selectedIndex = 0;
  }

  function showHideCategories(projectName){
	var projects=get("projects").split(",");
	for (var i=0; i< projects.length;i++){
		var project=projects[i];
		if (project == projectName){
			$("#calcms_category_"+project).show();
		}else{
			$("#calcms_category_"+project).hide();
		}
	}
  }

  function showHideSeriesNames(projectName){
	var projects=get("projects").split(",");
	for (var i=0; i< projects.length;i++){
		var project=projects[i];
		if (project == projectName){
			$("#calcms_series_name_"+project).show()
		}else{
			$("#calcms_series_name_"+project).hide()
		}
	}

  }

  //show all events for a given project
  function showSearchResultsByProject(project,value,archive){
	if (value!=null && value!=''){
		var url=get('search_url');
		if (project!='' && project !=null) 	url+=escape(project)+'/';
		else 					url+='all/';
		if (value!='' && value!=null)		url+=escape(value)+'/';
		if (archive!='' && archive!=null){
			if (archive=='gone')	url+='vergangene/';
			if (archive=='coming')	url+='kommende/';
		}
		updateContainer('calcms_list', url, 1);
	}
  }

  //show all events for a given category
  function showEventsByCategory(value){
	if (value!='' && value!=null){
		updateContainer('calcms_list',  get('search_category_url')+escape(value)+'/', 1);
	}
  }

  //show all events for a given project and category
  function showEventsByProjectAndCategory(project, category, archive){
	if (category!='' && category!=null){
		var url=get('search_category_url');
		if (project!='' && project !=null) url+=escape(project)+'/';
		if (category!='' && category!=null)url+=escape(category)+'/';
		if (archive!=null && archive==0)   url+='kommende/';
		if (archive!=null && archive==1)   url+='vergangene/';
		updateContainer('calcms_list',  url, 1);
	}
  }

  //show all events for a given project and series
  function showEventsByProjectAndSeriesName(project, seriesName, archive){
	if (seriesName!='' && seriesName!=null){
		var url=get('search_series_name_url');
		if (project!='' && project !=null) 	url+=escape(project)+'/';
		if (seriesName!='' && seriesName!=null)	url+=escape(seriesName)+'/';
		if (archive!=null && archive==0)   	url+='kommende/';
		if (archive!=null && archive==1)   	url+='vergangene/';
		updateContainer('calcms_list',  url, 1);
	}
  }

  //show all events for a given series
  function showEventsBySeriesName(value){
	if (value!='' && value!=null){
		updateContainer('calcms_list',  get('search_series_name_url')+escape(value)+'/', 1);
	}
  }

  //show all events for a given program
  function showEventsByProgram(value){
	var events_url=		get('events_url');
	var url=setAndGetUrlParameters('program',value);
	if (value!='' && value!=null){
//		updateContainer('calcms_list',  events_url+url, 1);
		updateContainer('calcms_list',  url, 1);
	}
  }

  //show next event of a given series
  function showNextSeriesEvent(value){
	var events_url=		get('next_series_url');
	load(events_url+'/'+value+'.html');
  }

  //show previous event of a given series
  function showPrevSeriesEvent(value){
	var events_url=		get('prev_series_url');
	load(events_url+'/'+value+'.html');
  }

  function showMenuAndList(target,field,value){

	var events_url=		get('events_url');
	var menu_url=		get('menu_url');
	var event_id=		get('event_id');

	var url=setAndGetUrlParameters(field,value);

	if (target=='window'){
		window.location.href = events_url+url;
	}else{
		updateContainer('calcms_menu',  menu_url+url, 1);

		if (event_id!='' && event_id!=null && Number(event_id) != 'NaN'){
			//load list selected by url
			showEvents(event_id,'');
			set('event_id','');
		}else{
			//load event list
			updateContainer('calcms_list', events_url+url, 1);
			set('last_list_url',events_url+url);
		}

	}
	return false;
  }


  // load given event details into list
  function showEvents(event_id,view){
	if (view==null || view=='') view='list_url';
	if (event_id != ''){
		var url=get(view)+'/'+event_id+'/';
		updateContainer('calcms_list', url, 1);
	}else{
		document.getElementById('calcms_list').innerHTML='keine Sendung gefunden...';
	}
  }

  // load given event details into list
  function showEvent(event_id){
	var old_url=get('last_list_url');
	var url=get('list_url')+'/'+event_id+'/';
	if (url!=old_url){
		set('last_event_id',event_id);
		updateContainer('calcms_list',url, 1,
			function (responseText, textStatus, XMLHttpRequest) {
				var back_link='<a href="#" onclick="updateContainer(\'calcms_list\',\''+old_url+'\');return false;">zur&uuml;ck</a>';
				document.getElementById('calcms_list').innerHTML=
					back_link+document.getElementById('calcms_list').innerHTML+'<p><hr/>'+back_link;
			} 
		);
	}
  }


  // Calendar actions

  //update menu and list by given date
  function showEventsByDate(date) {
//	set('date',date);
	showMenuAndList('','date',date);
	return false;

  };

  
  //update menu and list by events from weekday at given date range 
  function showEventsByWeekday(from,till,weekday) {
	set('from_date',from);
	set('till_date',till);
	set('weekday',weekday);
	showMenuAndList('','weekday');
	return false;

  };

  //update menu and list by events from given date range
  function showEventsByDateRange(from,till) {
	set('from_date',from);
	set('till_date',till);
	showMenuAndList('','week');
	return false;
  };


  //load calendar content
  function showCalendar(target,field){
	var calendar_debug=	get('calendar_debug');
	var calendar_url=	get('calendar_url');
	var debug=		get('debug');
	var date=		get('month');

	var url=calendar_url;

	if (field=='month'){
		url+='/'+date+'/';
	}
	if (debug != ''){
		url+='&debug='+debug;
	}

	if (target=='window'){
		window.location.href = events_url+url;
	}else{
		updateContainer('calcms_calendar', url);
	}

	if (calendar_debug!=null){
		calendar_debug.innerHTML=url;
	}
	return false;
  }

  //update menu, list and calendar widget by entries of given month YYYY-MM (current day)
  function showTodaysCalendarAndEvents(month) {
	set('month',month);
//	set(date,'today');
	showMenuAndList('','date','today');
	showCalendar('','month');
	return false;

  };


  //update menu, list and calendar widget by entries of given month YYYY-MM
  function showCalendarAndEventsByMonth(month) {
	set('month',month);
	showMenuAndList('','month');
	showCalendar('','month');
	return false;

  };

  //update menu, list and calendar widget by entries of given date YYYY-MM-DD
  function showCalendarAndEventsByDate(date) {
	set('date',date);
	showMenuAndList('','date');

	set('month',date);
	showCalendar('','month');
	return false;

  };

  // end of Calendar actions

  // show comment for given event id and start time
  function showCommentsByEventIdOrEventStart(event_id, event_start) {
	var url=get('comments_url');
	if (event_id=='' || event_start=='' || url=='') return false;

	set('comments_event_start'	,event_start);
	set('comments_event_id'		,event_id);

	url+=event_id+'/'+event_start+'/';

	updateContainer('calcms_comments', url);
  }

  // add a comment to a event
  function addComment(id,comment) {
	var url=get('add_comment_url');
	if (url!='') $.post(
		url, 
		$("#"+id).serialize(), 
		function(data){
			showCommentsByEventIdOrEventStart(get('comments_event_id'), get('comments_event_start'));
			
		} 
	);
	return false;
  }

  // insert new comment form
  function showCommentForm(id,parent_id,event_id,event_start){
	var response='<div>';
	if (parent_id != '') response+='Deine Anwort:' ;
	document.getElementById(id).innerHTML= response+
 '<form	id="add_comment_'+parent_id+'"						'
+'	action="/agenda/kommentar_neu/?" method="post" 				'
+'	onsubmit="addComment(\'add_comment_'+parent_id+'\',this);return false;"	'
+'>'
+'	Name: *<br />								'
+'	<input name="author" maxlength="40" /><br />				'
+'	Was ich sagen will, ist: *<br /> 					'
+'	<textarea name="content" cols="60" rows="10"				'
+'		onkeyup="javascript:if (this.value.length>1000) this.value=this.value.substr(0,1000)"		'
+'	></textarea><br />'
	
+'	Email: (f&uuml;r R&uuml;ckmeldungen, wird nicht angezeigt)<br />	'
+'	<input name="email" maxlength="40" /><br />				'
									
+'	<input type="submit"	value="abschicken!" />				'
+'	<input name="event_id"	value="'+event_id+'"	type="hidden" />	'
+'	<input name="parent_id"	value="'+parent_id+'"	type="hidden" />	'
+'	<input name="event_start" value="'+event_start+'" type="hidden" />	'
+'</form>'
+'</div>'
;
//	$("#"+id).show("drop");
	show(id);
  }
  // end of Comment actions

  // used to embed playlist in external pages
  function showPlaylist(){
	var url=get('playlist_url');
	updateContainer('calcms_playlist', url);
  }

  // load comments into #calcms_newest_comments if not embedded yet
  function showNewestComments(){
	if (get('preloaded')==''){
		var url=get('newest_comments_url');
		updateContainer('calcms_newest_comments', url);
	}
		return false;
  }

  // export selected events to ical 
  function exportSelectedToICal(){
	window.location=get('ical_url')+setAndGetUrlParameters();;
	return false;
  }


  // init search interface: load search form content if not loaded yet
  function initSearch(target,field){
	if (get('preloaded')==''){
		var category_url=	get('category_url');
		var program_url=	get('program_url');
		var series_name_url=	get('series_name_url');
		var debug=		get('debug');

		if (category_url!=null    && category_url!=''   ) updateContainer('calcms_categories',	category_url,1);
		if (program_url!=null 	  && program_url!=''    ) updateContainer('calcms_programs',	program_url,1);
		if (series_name_url!=null && series_name_url!='') updateContainer('calcms_series_names',series_name_url,1);
	}
	return false;
  }

  // wrapper to show an id
  function show(id){
	$("#"+id).show("drop");
	document.getElementById(id).style.visibility="visible";
//	document.getElementById(id).style.display="block";
  }

  // wrapper to hide an id
  function hide(id){
	$("#"+id).hide("drop");
	document.getElementById(id).style.visibility="hidden";
//	document.getElementById(id).style.display="none";
  }


  // return max date	
  function setDateIfBefore(date1,date2){
	if (date1<date2)return date2;
	return date1;
  }

  // return min date
  function setDateIfAfter(date1,date2){
	if (date1>date2)return date2;
	return date1;
  }

  // load jPlayer
  function loadPlayer(number, mp3Url, oggUrl, swfUrl){
	if ($("#jpId_"+number).length==0) return;
	
	set("mp3Url_"+number,mp3Url);
	set("oggUrl_"+number,oggUrl);
	set("swfUrl_"+number,swfUrl);
	initPlayer(number);
	initPlayerGui(number);
  }

  // assign play and stop to players GUI elements
  function initPlayerGui(number){
	if ($("#jpId_"+number).length==0) return;

	$('#jp_player_'+number).click( function() {
		//if(get("player_inited_"+number)=="1"){
			if ( get("play_"+number) == '1' ){
			
				set("play_"+number,"0");
				$('#jp_status_'+number).text("stop");
				$("#jpId_"+number).jPlayer("stop");
				//$("#jpId_"+number).jPlayer("clearFile");
				//$("#jpId_"+number).text("");
				$(this).css('background-image',"url(/agenda_files/style/player4.play.png)");
			}else{
				set("play_"+number,"1");
				$("#jpId_"+number).jPlayer("play");
				//initPlayer(number);
				$('#jp_status_'+number).text("play");
				//$("#jpId_"+number).jPlayer("volume", 100);
				$(this).css('background-image',"url(/agenda_files/style/player4.rot.gif)");
				updateContainer('jp_title_'+number,'http://piradio.de/agenda/rds/',0,
					function(){
						set('running_title',$('#jp_title_'+number).text());
					}
				);
			}
		//}

		$('#jp_equalizer_'+number).css('width',0);
		return false;
	});
  }

  // init player and its progress handler
  function initPlayer(number){
	if ($("#jpId_"+number).length==0) return;

	$("#jpId_"+number).jPlayer({
		ready: function () {
			this.setFile(
				get("mp3Url_"+number),
				get("oggUrl_"+number)
			);
			this.onProgressChange(
				function(loadPercent, playedPercentRelative, playedPercentAbsolute, playedTime, totalTime) {
					
					if (get("play_"+number)=="1"){
						if (playedTime<5000){
							$('#jp_status_'+number).text("connect...");
						}else{
							var value=0;
							if ($("#jqjp_force_0").length !=0) value=Math.floor( $('#jqjp_force_0').text()*50 );
							$('#jp_equalizer_'+number).css('width', value);
							$('#jp_status_'+number).text(get("running_title"));
						}
					}
				}
			);

			//set("player_inited_"+number,"1");
			//if (get("play_"+number) == '1')this.play();
		},
		oggSupport: 	true,
		nativeSupport: 	true,
		swfPath: 	get("swfUrl_"+number),
		//warningAlerts:	true,
		//errorAlerts: 	true
	});
  }



/*
	$("#jpId").jPlayer(
		"onProgressChange", 
		function(loadPercent, playedPercentRelative, playedPercentAbsolute, playedTime, totalTime) {
			$('#jp_eq').css('width',Math.floor( $('#jqjp_force_0").text()*50) );
		}
	)

	$("#jpId").jPlayer(
		"onProgressChange", 
		function(loadPercent, playedPercentRelative, playedPercentAbsolute, playedTime, totalTime) {
			var playing_url="url(/agenda_files/style/player4.rot.gif)";
			var play_url="url(/agenda_files/style/player4.play.png)";
			if (get("play") =='1'){
				if ($('#jp_play').css('background-image') != playing_url) $('#jp_play').css('background-image',playing_url);
				if (playedTime > 0 && playedTime < 1000){
					$('#jp_status').text("connect "+loadPercent+" "+playedPercentRelative+" "+playedPercentAbsolute+" "+playedTime);
				}else if(playedTime < 2000) {
					$('#jp_status').text("playing");
				}
			}else{
				if ($('#jp_play').css('background-image') != play) $('#jp_play').css('background-image',play_url);
				$('#jp_status').text("");
			}
		}
	)
*/

  // remove Drupal header for currently playing entry at topic overview page
  function removeCurrentPlayingHeader(){
		$("h2 a[href$='/testing']").each(
			function(){
				$(this).css("display","none");
			}
		);
  }



