var map;
var geoXml;
var toggleState = 1;

var timespan = 30;

// renderField CATERGORYS ALS ARRAY ZWEIGE EIN UND AUSBLENDBAR111

var videos=new Array();

function loadVideo(url, id)
{
	if (url)
	{
		videos[id] = new SWFObject('mediaplayer/player.swf','player','160','120','9');
		videos[id].addParam('allowfullscreen','true');
		videos[id].addParam('allowscriptaccess','always');
		videos[id].addParam('flashvars','file='+url+'&autostart=true&repeat=single&icons=false&controlbar=none&displayclick=none');
		videos[id].write('video'+id);
	}
	else
	{
		//alert('no video');
	}
}

function date2countdown(datestring, datestring2)
{
	tempArray=datestring.split(' ');
	dateArray=tempArray[0].split('-');
	timeArray=tempArray[1].split(':');



	tempArray2=datestring2.split(' ');
	dateArray2=tempArray2[0].split('-');
	timeArray2=tempArray2[1].split(':');
	// 2009-02-17 08:00:00

	now = new Date();


	if (datestring!=datestring2)
	{
		end = new Date(dateArray2[0], (dateArray2[1]-1), dateArray2[2], timeArray2[0], timeArray2[1], timeArray2[2]);
		then = new Date(dateArray[0], (dateArray[1]-1), dateArray[2], timeArray[0], timeArray[1], timeArray[2]);
		time = then.getTime()-now.getTime();
		countdown = time/1000/60/60;
		if (countdown<0) {cstring='Jetzt';}
		else if(countdown<24) {cstring='in '+Math.round(countdown)+' Stunden';}
		else {cstring='in '+Math.round(countdown/24)+' Tagen';}

		if (now.getTime()>end.getTime()) {cstring='vorbei';}
		return dateArray[2]+'.'+dateArray[1]+'.'+dateArray[0]+' '+cstring;
	}
	else
	{
		end = new Date(dateArray[0], (dateArray[1]-1), dateArray[2]);
		then = new Date(dateArray[0], (dateArray[1]-1), dateArray[2]);
		time = then.getTime()-now.getTime();
		countdown = time/1000/60/60;
		if (countdown<0) {cstring='Jetzt';}
		else if (countdown<24) {cstring='in '+Math.round(countdown)+' Stunden';}
		else {cstring='in '+Math.round(countdown/24)+' Tagen';}

		if (now.getTime()>end.getTime()) {cstring='vorbei!';}
		return dateArray[2]+'.'+dateArray[1]+'.'+dateArray[0]+' '+cstring;
	}
}

function date2timestamp(datestring, time)
{
	tempArray=datestring.split(' ');
	dateArray=tempArray[0].split('-');
	timeArray=tempArray[1].split(':');
	// 2009-02-17 08:00:00

	if (time)
	{
		then = new Date(dateArray[0], (dateArray[1]-1), dateArray[2], timeArray[0], timeArray[1], timeArray[2]);
		return then.getTime()/1000;
	}
	else
	{
		then = new Date(dateArray[0], (dateArray[1]-1), dateArray[2]);
		return then.getTime()/1000;
	}
}

function getExtraInfo(string, key)
{
	tempArray=string.split(', ');
	for (t=0;t<tempArray.length;t++)
	{
		keyValue=tempArray[t].split(': ');
		if (keyValue[0]==key)
		{
			return keyValue[1];
		}
	}

	return '';
}

function drawEvent(event, eventKeys, place_id)
{

	start=date2countdown(event[eventKeys['publish_up']], event[eventKeys['publish_down']]);



	link='<a href="javascript: tb_show(\''+event[eventKeys['title']]+'\',\'#TB_inline?height=300&width=500&inlineId=event'+event[eventKeys['id']]+'\');" class="thickbox">'+event[eventKeys['title']]+'</a>';


	divstring='<div id="event'+event[eventKeys['id']]+'"><div id="Ginfo">';
	divstring+=event[eventKeys['content']]+'<br><br>';
	divstring+='<a href="#" class="big" onClick="sobiArray[\'sobi'+place_id+'\'].openInfoWindowHtml(cArray[\''+place_id+'\']); tb_remove();">'+event[eventKeys['adresse_info']]+'</a><br>';

	if (event[eventKeys['contact_info']]) {divstring+='<br><b>Kontakt:</b> '+event[eventKeys['contact_info']];}

	if (event[eventKeys['extra_info']])
	{
		extra_array=event[eventKeys['extra_info']].split(", ");
		for (ea=0; ea<extra_array.length; ea++)
		{
			divstring+='<br>'+extra_array[ea];
		}


	}
	// divstring+=event[eventKeys['adresse_info']]+'<br>';
	divstring+='</div></div>';

	document.getElementById("output").innerHTML+=divstring;

	price=getExtraInfo(event[eventKeys['extra_info']], 'Eintritt');

	return '<tr><td>'+link+'</td><td>'+start+'</td><td>'+price+'</td></tr>'; // publish_up
}

function drawField(field, keyIndex, option, title)
{

	if (field[keyIndex["data_txt"]].indexOf("#inactive")>=0) {return '';}

	if (field[keyIndex[option]]>0 && field[keyIndex["data_txt"]]!='')
	{

		// sobi2Details_field_description
		spanid=option.split("_")[1];
		spanid=spanid.substr(0, 1).toUpperCase() + spanid.substr(1);
		spanid='sobi2'+spanid+'_';

		if (field[keyIndex['in_newline']]==1)
		{
			br='<br>';
		}
		else
		{
			br='';
		}

		if (field[keyIndex['with_label']]==1)
		{
			caption=field[keyIndex["langValue"]]+': '; //
		}
		else
		{
			caption='';
		}

		if (field[keyIndex['isUrl']]==1)
		{
			return br+'<span id="'+spanid+field[keyIndex["langKey"]]+'">'+caption+'<a target="_blank" title="zur '+title+' Webseite" href="'+field[keyIndex["data_txt"]]+'">'+field[keyIndex["data_txt"]]+'</a></span> ';
		}

		if (field[keyIndex['isUrl']]==2)
		{
			return br+'<span id="'+spanid+field[keyIndex["langKey"]]+'">'+caption+'<a target="_blank" title="an '+title+' eine e-mail schreiben" href="mailto:'+field[keyIndex["data_txt"]]+'">'+field[keyIndex["data_txt"]]+'</a></span> ';
		}

		if (field[keyIndex['isUrl']]==3)
		{
			return br+'<span id="'+spanid+field[keyIndex["langKey"]]+'">'+caption+'<img width=150 height=100 src="'+field[keyIndex["data_txt"]]+'"></span> ';
		}

		return br+'<span id="'+spanid+field[keyIndex["langKey"]]+'">'+caption+' '+cleanString(field[keyIndex["data_txt"]])+'</span>';
	}
	return ""; //
}

function cleanString(dirtystring)
{
	washed = dirtystring.replace(/&amp;/g, "&");
	washed = washed.replace(/&lt;/g, "<");
	washed = washed.replace(/&gt;/g, ">");
	return washed;
}

function addMenu()
{
	// menuArray=new Array('menu1', 'menu2', 'menu3');
	menustring='<form><table width="100%" border=0 cellspacing="0">';

	for (var cat in menuArray)
	{
		if (menuIcons[cat]!='') { imgstring='<td class="valign-middle" width="16"><img width="16" height="16" align="middle" src="images/stories/'+menuIcons[cat]+'"></td>'; } else {imgstring='';}
		menustring+='<tr class="category" id="cat_'+menuArray[cat][1]+'"><td valign="middle" class="valign-middle" width="24" align="center"><input type="checkbox" id="check'+cat+'" value="toggle" checked onClick="toggleCat(\''+cat+'\', this.checked)"></td>'+imgstring+'<td class="valign-middle"> '+menuArray[cat][1]+'</td></tr>';
	}

	menustring+='</table></form>';
	document.getElementById("menu").innerHTML=menustring;
}

function toggleCat(catid,hidden)
{
	//if (hide==true){alert('hide')}
	if (hidden)
	{
		for (var itemKey in menuArray[catid][0])
		{
			map.addOverlay(sobiArray['sobi'+itemKey]);
		}
	}
	else
	{
		for (var itemKey in menuArray[catid][0])
		{
			map.removeOverlay(sobiArray['sobi'+itemKey]);
		}
	}
	suggestPlace();
	suggestEvent();
}

sobiArray=new Array();
cArray=new Array();
menuArray=new Array();
menuIcons=new Array();
eventArray=new Array();
// menuTitles=new Array();

function createMarker(point, icon, i_icon, premium) {
	if (premium==1)
	{
		p='p_';
	}
	else
	{
		p='';
	}

	var customIcon = new GIcon(G_DEFAULT_ICON);

	if (icon)
	{
		customIcon.image = "images/stories/" +p+icon;
		customIcon.shadow = "images/stories/s_" + icon;

		customIcon.iconSize=new GSize(16,16);
		customIcon.shadowSize=new GSize(30,16);
		customIcon.iconAnchor=new GPoint(8,16);
		customIcon.infoWindowAnchor=new GPoint(8,0);

	}

	if (i_icon)
	{
		customIcon.image = "images/com_sobi2/clients/" + i_icon;
	}

	markerOptions = { icon:customIcon };
	var marker = new GMarker(point, markerOptions);

	return marker;
}


sobiData=new Array();

function showSobi(itemid)
{
	// alert(itemid);
	dataArray=sobiData[itemid]['dataArray'];
	keyIndex= sobiData[itemid]['keyIndex'];
	fieldData=sobiData[itemid]['fieldData'];
	eventKeys=sobiData[itemid]['eventKeys'];
	eventsA= sobiData[itemid]['eventsA'];

	sobiString='<div id="Ginfo"><span class="ItemTitle" width=100%>'+dataArray['title']+'</span><br><br>';
	for (var field in fieldData)
	{
		sobiString+=drawField(fieldData[field], keyIndex, 'in_vcard', dataArray['title'] ); //vcard details
	}
	sobiString+='<br><br>';
	if (eventsA)
	{
		sobiString+='<table class=etab border=1>'
		for (var event in eventsA)
		{
			sobiString+=drawEvent(eventsA[event], eventKeys, dataArray['itemid']);
		}
		sobiString+='</table>'
	}
	sobiString+='<br><a href="javascript: tb_show(\''+dataArray['title']+'\',\'#TB_inline?height=300&width=500&inlineId=box'+dataArray['itemid']+'\');" class="thickbox">mehr Information</a><br>';
	if (fieldData['field_video'] && fieldData['field_video'][keyIndex['data_txt']] !='')
	{
		sobiString+='<br><div class=video id=video'+dataArray['itemid']+'></div>';
	}
	sobiString+='</div>';

	thickContent='<div id="Ginfo">';
	for (var field in fieldData)
	{
		thickContent+=drawField(fieldData[field], keyIndex, 'in_details', dataArray['title'] ); //vcard details
	}
	thickContent+='</div>';


	document.getElementById('box'+dataArray['itemid']).innerHTML=thickContent;

	return sobiString;
}

function addSobi(dataArray, keyIndex, fieldData, eventKeys, eventsA)
{


	itemid=dataArray['itemid'];

	if (fieldData['field_latlng']) //daten für spätere anwedung in array speichern
	{

		sobiData[itemid]=new Array();
		sobiData[itemid]['dataArray']=dataArray;
		sobiData[itemid]['keyIndex']=keyIndex;
		sobiData[itemid]['fieldData']=fieldData;
		sobiData[itemid]['eventKeys']=eventKeys;
		sobiData[itemid]['eventsA']=eventsA;
	} else {return;}
	// ohne posi nicht plazieren!!

	ll=fieldData['field_latlng'][keyIndex['data_txt']].split(", ");


	if (menuArray[dataArray['catid']]) {}
	else
	{
		menuArray[dataArray['catid']]=new Array;
		menuArray[dataArray['catid']][0]=new Array;
		menuArray[dataArray['catid']][1]=dataArray['name'];
		menuIcons[dataArray['catid']]=dataArray['c_icon'];
	}

	if (eventsA)
	{
		catid=dataArray['catid']+'';

		if (eventArray[catid]) {}
		else
		{
			eventArray[catid]=new Array;
		}

		for (event in eventsA)
		{
			if (eventsA[event][eventKeys['publish_up']]==eventsA[event][eventKeys['publish_down']])
			{
				eventstamp=date2timestamp(eventsA[event][eventKeys['publish_up']]);
			}
			else
			{
				eventstamp=date2timestamp(eventsA[event][eventKeys['publish_up']], true);
			}
			eventid=(eventstamp+parseInt(eventsA[event][eventKeys['id']]))+''; //zeit+id als milisekunde

			eventArray[catid][eventid]=new Array;
			estring='';

			eventArray[catid][eventid]['place_id']=dataArray['itemid']; // sobi id an den event hängen

			for (key in eventKeys)
			{
				eventArray[catid][eventid][key]=eventsA[event][eventKeys[key]];
				estring+=key+' ';
				estring+=eventArray[catid][eventid][key]+',';
			}
			//alert(estring);
		}
	}

	menuArray[dataArray['catid']][0][dataArray['itemid']]=dataArray['title'];

	premium=fieldData['field_premium'][keyIndex['data_txt']];

	sobiArray['sobi'+dataArray['itemid']]=createMarker(new GLatLng(ll[0], ll[1]), dataArray['c_icon'], dataArray['i_icon'], premium);

	map.addOverlay(sobiArray['sobi'+dataArray['itemid']]);

	divstring='<div id="box'+dataArray['itemid']+'">';
	divstring+='</div>';

	document.getElementById("output").innerHTML+=divstring;
	GEvent.addListener(sobiArray['sobi'+dataArray['itemid']], "click", function() {sobiArray['sobi'+dataArray['itemid']].openInfoWindowHtml(showSobi(dataArray['itemid'])); window.setTimeout("loadVideo('"+fieldData['field_video'][keyIndex['data_txt']]+"', '"+dataArray['itemid']+"');", 1000) });
	GEvent.addListener(sobiArray['sobi'+dataArray['itemid']], "mouseover", function() {
	return overlib('', CAPTION, dataArray['title'], ABOVE, '#000000', '#AAAAFF', CAPCOLOR, '#000000', SHADOW, SHADOWCOLOR, '#999999', AUTOSTATUSCAP, DELAY, '20');
	});
	GEvent.addListener(sobiArray['sobi'+dataArray['itemid']], "mouseout", function() {
	return nd();
	});
	

}


function meter2km(meter)
{
	if (meter>1000)
	{
		km_round=Math.round(meter/10)/100;
		return km_round+'km';
	}
	else
	{
		return meter+'m';
	}
}



function suggestEvent()
{

	max_suggestions=5;
	suggest_string="";
	timerange=getTimeRange();

	suggest_array=new Array();

	for (cat in eventArray)
	{
		if (document.getElementById("check"+cat).checked)
		{
			for (ev in eventArray[cat])
			{
				if (ev>=timerange[0] && ev<=timerange[1])
				{
					suggest_array[ev]=eventArray[cat][ev];
					// alert(ev);
				}
				else
				{
					// moo=new Date(timerange[0]*1000);
					// moo1=new Date(ev*1000);
					// moo2=new Date(timerange[1]*1000);
					// alert(moo+' ###'+moo1+'### '+moo2);
					// alert(timerange[0]+' ###'+ev+'### '+timerange[1]);
				}
			}
		}
	}

	var keys = new Array(); // sortierbaren Key Index erstellen
	for(k in suggest_array)
	{
		keys.push(k);
	}

	keys.sort( function (a, b) { return a - b; } );

	for (key_id=0; key_id<max_suggestions; key_id++)
	{
		if (keys[key_id])
		{
			title=suggest_array[keys[key_id]]['title'];
			place_id=suggest_array[keys[key_id]]['place_id'];
			id=suggest_array[keys[key_id]]['id'];

			countdown=date2countdown(suggest_array[keys[key_id]]['publish_up'], suggest_array[keys[key_id]]['publish_down']);

			link='<a href="#" onClick="tb_show(\''+title+'\',\'#TB_inline?height=300&width=500&inlineId=event'+id+'\'); ">'+title+'</a>';
			suggest_string+=link+' '+countdown+'<br>';
		}
		else
		{
			suggest_string+='<br';
		}
	}

	document.getElementById("events").innerHTML=suggest_string;
}

function checkSearch(hay)
{
	needle=document.getElementsByName("search")[0].value;
	
	if (hay.toLowerCase().match(needle.toLowerCase()))
	{
		return true;
	}
	return false;
}

function suggestPlace()
{

	max_suggestions=8;
	suggest_string="";

	suggest_array=new Array();

	for (var cat in menuArray)
	{
		// prüfen ob cat gechecked

		if (document.getElementById("check"+cat).checked)
		{
			for (var itemKey in menuArray[cat][0])
			{
				distance=sobiArray['sobi'+itemKey].getLatLng().distanceFrom(map.getCenter());
				suggest_LatLng=sobiArray['sobi'+itemKey].getLatLng().toUrlValue();

				// überschreibung wenn entfernung gleich!! IMMERNOCH FEHLER sdfdsfsdfsd ID als cm anhängen?

				if (suggest_array[distance])
				{
					distance=distance+(Math.random()/100000);
				}
				
				if (checkSearch(menuArray[cat][0][itemKey]))
				{
					suggest_array[distance]='<span class="distance">'+meter2km(Math.round(distance))+' entfernt </span><a href="#" class="distance" onClick="sobiArray[\'sobi'+itemKey+'\'].openInfoWindowHtml(showSobi(\''+itemKey+'\')); ">'+menuArray[cat][0][itemKey]+'</a><br>';
				}
			}
		}
	}

	var keys = new Array(); // sortierbaren Key Index erstellen
	for(k in suggest_array)
	{
		keys.push(k);
	}

	keys.sort( function (a, b) { return a - b; } );

	for (key_id=0; key_id<max_suggestions; key_id++)
	{
		if (keys[key_id])
		{
			suggest_string+=suggest_array[keys[key_id]];
		}
		else
		{
			suggest_string+='<br';
		}
	}

	document.getElementById("places").innerHTML=suggest_string;

}

function getTimeRange()
{
	startstring=document.getElementsByName("from")[0].value;
	endstring=document.getElementsByName("to")[0].value;

	startstring=startstring.split('.');
	starttime=new Date(startstring[2], startstring[1]-1, startstring[0]);

	endstring=endstring.split('.');
	endtime=new Date(endstring[2], endstring[1]-1, endstring[0]);
	endtime.setDate(endtime.getDate() + 1); // bis zum ende des Tages

	if (starttime.getTime()>endtime.getTime()) // test ob anfang größer als ende
	{
		var start = f_tcalGenerDate(new Date(endstring[2], endstring[1]-1, endstring[0]));
		document.getElementsByName("from")[0].value=start;
	}

	return new Array(starttime.getTime()/1000, endtime.getTime()/1000);
}

function startMap()
{
	document.getElementById("maptab").style.visibility = "visible";
	document.getElementById("jomtab").style.visibility = "hidden";

	map = new GMap2(document.getElementById("map_canvas"));
	map.setCenter(new GLatLng(51.34015664372029, 12.375068664550781), 13);

	map.addControl(new GLargeMapControl());

	document.getElementById("loadingDiv").innerHTML='<table width="100%" height="100%" class="loading" id="loadingtab" style="position: absolute; top:0; left:0;"><tr><td align="center"><img src="map/transp.gif" height="250"><br><span class="Itemtitle">Karte wird geladen...</span></td></tr><table>';

	window.setTimeout("startAjax()", 100);
}

function startAjax()
{
	var ajax = GXmlHttp.create();
	ajax.open("GET", "mapdata.php", true);
	ajax.send(null);

	ajax.onreadystatechange=function()
	{
		if(ajax.readyState==4)
		{
			addData(ajax.responseText);
		}
	}
}

function addData(serverResponse)
{
	// alert(serverResponse);

	response=serverResponse.split('\n');

	var start_eval = new Date();

	for (re=0; re<response.length; re++)
	{
		eval(response[re]);
	}

	document.getElementById("loadingDiv").innerHTML='';

	//eval(serverResponse);
	var stop_eval = new Date();
	// alert('time '+(stop_eval.getTime()-start_eval.getTime()));

	addMenu();

	GEvent.addListener(map, "moveend", function() {
		suggestPlace();
	});

	var today = new Date();
	var today = f_tcalGenerDate(today);

	var then = new Date();
	then.setDate(then.getDate() + timespan);
	var then = f_tcalGenerDate(then);

	document.getElementsByName("from")[0].value=today;
	document.getElementsByName("to")[0].value=then;

	suggestPlace();
	suggestEvent();
}

function hideMap()
{
	document.getElementById("maptab").style.visibility = "hidden";
	document.getElementById("jomtab").style.visibility = "visible";
}

function showMap()
{
	if (map)
	{
		document.getElementById("maptab").style.visibility = "visible";
		document.getElementById("jomtab").style.visibility = "hidden";
	}
	else
	{
		startMap();
	}
	scroll(0,0);
}



