window.addEvent('domready', function(){
	
	/* GMap */
	
	// define start lat/lng
	var bLat = init_Lat;
	var bLng = init_Lng;
		
	// Slider
	var GMapSlider = new Fx.Slide('Search_GeoHolder').hide();
	GMapSlider.element.style.display='block';
	
	// Load Map
	var myMap = new GMap2($('GMapContainer'));
	myMap.setCenter(new GLatLng(bLat, bLng), 5);
	myMap.enableContinuousZoom();
	myMap.enableScrollWheelZoom();
	
	myMap.addControl(new GMapTypeControl());
	myMap.addControl(new GSmallMapControl());
	
	// marker
	var bIcon = new GIcon();
	bIcon.image = CJGMap_Icon;
	bIcon.shadow = CJGMap_Shadow;
	bIcon.transparent = CJGMap_Transparent;
	bIcon.iconSize = new GSize(32, 32);
	bIcon.shadowSize = new GSize(32, 32);
	bIcon.iconAnchor = new GPoint(16, 34);
	bIcon.infoWindowAnchor = new GPoint(30, 8);
	
	var dMarker = new GMarker(myMap.getCenter(), {draggable: true, title: 'Cachesuche', icon: bIcon});
	
	// listener for this marker
	GEvent.addListener(dMarker, 'dragstart', function(){
		// kram beim starten
		dMarker.closeInfoWindow();
	});
	
	GEvent.addListener(dMarker, 'dragend', function(){
		// kram beim beenden
		dMarker.openInfoWindowHtml('<b>Fertig?</b><br /> Wenn Du möchtest, kannst Du noch andere Suchkriterien hinzufügen. <br /><br /> Wenn nicht, dann klick auf ":: suchen"');
	});
	
	// add
	myMap.addOverlay(dMarker);
	
	// create infowindow
	dMarker.openInfoWindowHtml('<b>Mich kannst Du durch die Gegend ziehen... ;)</b><br /><br />Setz mich dort ab, wo Du nach Caches suchen möchtest.');

	// Geocoder init
	var gGeoCoder = new GClientGeocoder();
	gGeoCoder.setBaseCountryCode('DE');
	/* ENDE */
	
	/* GOOGLE INFOFUNCTIONS */
	
	// Google 
	var gMapMove = function(objLatLon){
		myMap.setCenter(objLatLon, 13);
		dMarker.setLatLng(objLatLon);
		dMarker.openInfoWindowHtml('<b>Fertig?</b><br /> Wenn Du möchtest, kannst Du noch anderen Suchkriterien hinzufügen. <br /><br /> Wenn nicht, dann klick auf ":: suchen"');
	}
	
		
	/* END */
	
	try{
		AddSlider('LSContent', 'LSTrigger', false);
	}catch(e){}
	

	/* AJAX */
	
	var SearchStart = new CJAjax(
	CJPath + 'search/ajax/',
	{
		OnComplete: function(Output){		
			try{
				// Fehler
				if(Output == 'ERROR'){
					throw new Exception();
				}
				
				if(Output=='1'){
					// search performen bla etc.
					StartPeriodicalCheck();
					
				}else{
					alert('Irgendwas hat beim Übertragen deiner Kriterien nicht funktioniert, vielleicht probierst Du es nochmal?');
				}
			}
			catch(e){
				// Fehler!
				alert(e);
				alert('Japp... Unser Fehler... Wenn das nochmal vorkommt wär ne Mail von Dir toll ;)... Danke!');
			}
		}
	});
	
	SearchStart.AddParameter('search', '');
	SearchStart.AddParameter('call', 'addparams');
	SearchStart.AddParameter('name', '');
	SearchStart.AddParameter('tagsIncluded', '');
	SearchStart.AddParameter('tagsNotIncluded', '');
	SearchStart.AddParameter('avgRating', '');
	SearchStart.AddParameter('LatLng', '');
	SearchStart.AddParameter('GeoCode', '');
	SearchStart.AddParameter('Radius', '');
	SearchStart.AddParameter('Types', '');
	
	var AjaxCheckSearchState = new CJAjax(
	CJPath + 'search/ajax/',
	{
		OnComplete: function(Output){		
			try{
								
				// Fehler
				if(Output == 'ERROR'){
					throw new Exception();
				}
				if(Output=='Updated'){
					location.href=CJPath + 'cache/list/[order:relevance_desc]/[searchid:'+ $('SearchID').value +']';
					clearTimeout(tCheckSearchState);
				}	
			}
			catch(e){
				// Fehler!
				alert(e);
				alert('Japp... Unser Fehler... Wenn das nochmal vorkommt wär ne Mail von Dir toll ;)... Danke!');
			}
		}
	});
	AjaxCheckSearchState.AddParameter('call', 'getstate');
	AjaxCheckSearchState.AddParameter('search', $('SearchID').value);
	
	var AjaxOpenSearch = new CJAjax(
	CJPath + 'search/ajax/',
	{
		OnComplete: function(Output){		
			try{
								
				// Fehler
				if(Output == 'ERROR'){
					Search_SliderForm.stop();
					Search_SliderForm.slideIn();
					Search_SliderLoading.stop();
					Search_SliderLoading.slideOut();
					SetStyle($('IntSearchID'), false);
				}else{
					SetStyle($('IntSearchID'), true);
					location.href=CJPath + 'cache/list/[order:relevance_desc]/[searchid:'+ Output +']';
				}
			}
			catch(e){
				// Fehler!
				alert(e);
				alert('Japp... Unser Fehler... Wenn das nochmal vorkommt wär ne Mail von Dir toll ;)... Danke!');
			}
		}
	});
	AjaxOpenSearch.AddParameter('call', 'getid');
	AjaxOpenSearch.AddParameter('search', '');
	
	/* END */
	
	/* PERIODICAL KRAM */
	
	function StartPeriodicalCheck(){
		tCheckSearchState = fCheckSearchState.periodical(600);
	}
	
	// Function für periodischen Aufruf
	function fCheckSearchState(){
		AjaxCheckSearchState.CallFull();
	}
	
	/* ENDE */
	
	/* INTERFACE VARS*/
	
	// Sterne hinzufügen
	var StarSlider_AVGRating = AddStarSlider('Search_AVGRating', 'Search_AVGRating', 'cursor: pointer; width: 18px; height: 100%; font-size:1.2em; color:#f89e00; font-weight:bold;padding-top:2px;display:block;', 5, function()
	{
		Search_EnableAVGRating.checked=true;
	});
	
	
	// Checkboxes
	var Search_EnableName = $('Search_EnableName');
	var Search_EnableTagsIncluded = $('Search_EnableTagsIncluded');
	var Search_EnableTagsNotIncluded = $('Search_EnableTagsNotIncluded');
	var Search_EnableAVGRating = $('Search_EnableAVGRating');
	var Search_EnableGeo = $('Search_EnableGeo');
	var Search_EnableType = $('Search_EnableType');
	
	// Values
	var Search_Name = $('Search_Name');
	var Search_TagsIncluded = $('Search_TagsIncluded');
	var Search_TagsNotIncluded = $('Search_TagsNotIncluded');
	var Search_AVGRating = $('Search_AVGRating_value');
	var Search_GeoCode = $('Search_GeoCode');
	
	// Slider
	var Search_SliderForm = new Fx.Slide('Search_SliderForm');
	var Search_SliderLoading = new Fx.Slide('Search_SliderLoading').hide();
	Search_SliderLoading.element.style.display='block';
	
	// Ids
	var SearchID = $('SearchID');
	
	/* END */
		
	
	/* INTERFACE EVENTS */
	
	// Style setzen
	function SetStyle(Element, valid){
		if(valid){
			Element.style.backgroundColor='#FFFFFF';
			Element.style.color='#4D610C';
		}else{
			Element.style.backgroundColor='#F89E00';
			Element.style.color='#FFF';
		}
	}

	// checkbox name aktivieren
	Search_Name.addEvent('keyup', function(){
		if(Search_Name.value.length>0){
			if(Search_Name.value.length>2){
				SetStyle(Search_Name, true);
			}else{
				SetStyle(Search_Name, false);
			}
			Search_EnableName.checked=true;
		}else{
			Search_EnableName.checked=false;
			SetStyle(Search_Name, true);
		}
	});
	
	Search_TagsIncluded.addEvent('keyup', function(){		
		if(Search_TagsIncluded.value.length>0){
			if(Search_TagsIncluded.value.length>2){
				SetStyle(Search_TagsIncluded, true);
			}else{
				SetStyle(Search_TagsIncluded, false);
			}
			Search_EnableTagsIncluded.checked=true;
		}else{
			Search_EnableTagsIncluded.checked=false;
			SetStyle(Search_TagsIncluded, true);
		}
	});
	
	Search_TagsNotIncluded.addEvent('keyup', function(){
		if(Search_TagsNotIncluded.value.length>0){
			if(Search_TagsNotIncluded.value.length>2){
				SetStyle(Search_TagsNotIncluded, true);
			}else{
				SetStyle(Search_TagsNotIncluded, false);
			}
			Search_EnableTagsNotIncluded.checked=true;
		}else{
			Search_EnableTagsNotIncluded.checked=false;
			SetStyle(Search_TagsNotIncluded, true);
		}
	});
	
	Search_EnableName.addEvent('change', function(){
		if(!Search_EnableName.checked){
			SetStyle(Search_Name, true);
		}else{
			if(Search_Name.value.length<3){
				SetStyle(Search_Name, false);
			}
		}
	});
	
	Search_EnableTagsNotIncluded.addEvent('change', function(){
		if(!Search_EnableTagsNotIncluded.checked){
			SetStyle(Search_TagsNotIncluded, true);
		}else{
			if(Search_TagsNotIncluded.value.length<3){
				SetStyle(Search_TagsNotIncluded, false);
			}
		}
	});
	
	Search_EnableTagsIncluded.addEvent('change', function(){
		if(!Search_EnableTagsIncluded.checked){
			SetStyle(Search_TagsIncluded, true);
		}else{
			if(Search_TagsIncluded.value.length<3){
				SetStyle(Search_TagsIncluded, false);
			}
		}
	});
	
	// Geo
	
	function EnableGeo(b){
		GMapSlider.stop();
		if(b){
			$('GMapContainer').style.display='block';
			if(!GMapSlider.open){
				GMapSlider.slideIn();
			}
		}else{
			if(GMapSlider.open){
				GMapSlider.slideOut();
			}
			$('GMapContainer').style.display='none';
		}
		myMap.checkResize();
		myMap.setCenter(new GLatLng(bLat, bLng), 5);
	}
		
	
	Search_EnableGeo.addEvent('click', function(){
		EnableGeo(Search_EnableGeo.checked);
	});
	
	// GeoCode
	Search_GeoCode.addEvent('keypress', function(code){
		
		if(Search_GeoCode.value.length>0){
			if(!Search_EnableGeo.checked){
				Search_EnableGeo.checked=true;
				EnableGeo(true);
			}
		}
		
		
		var c = kc(code);
		if(c==13){
			// searchen
			gGeoCoder.getLatLng(Search_GeoCode.value, gMapMove);
		}
	});
	
	// Enterkram
	Search_Name.addEvent('keypress', function(code){
		var c = kc(code);
		if(c==13){
			SendSearchForm();
		}
	});
	
	Search_TagsIncluded.addEvent('keypress', function(code){
		// enter
		var c = kc(code);
		if(c==13){
			SendSearchForm();
		}
	});
	
	Search_TagsNotIncluded.addEvent('keypress', function(code){
		var c = kc(code);
		if(c==13){
			SendSearchForm();
		}
	});	
	
	// Absenden Formular
	$('Search_FormSubmit').addEvent('click', function(){
		SendSearchForm();
	});
	
	$('IntSearchID').addEvent('keypress', function(code){
		var c = kc(code);
		if(c==13){
			SendSearchForm();
		}
	});
		
	/* END */
	
	/* CACHETYPE SUCHE */
	var SearchValues_IncludedCacheTypes = new Array();
	var Search_Cachetypes = $ES('a', 'Search_CacheTypeHolder');
	for(var ct=0; ct<Search_Cachetypes.length; ct++){
		Search_Cachetypes[ct].addEvent('click', function(obj){
			Search_EnableType.checked=true;
			if(!CacheTypeExists(this)){
				AddCacheType(this);
			}else{
				RemoveCacheType(this);
			}
		});
	}
	
	Search_EnableType.addEvent('click', function(obj){
		if(!Search_EnableType.checked){
			for(var at=0; at<Search_Cachetypes.length; at++){
				RemoveCacheType(Search_Cachetypes[at]);
			}
		}
	});
			
	function AddCacheType(obj){
		var add = true;
		for(var svi=0; svi<SearchValues_IncludedCacheTypes.length; svi++){
			if(SearchValues_IncludedCacheTypes[svi] == obj.innerHTML){
				add = false;
				break;
			}
		}
		if(add){
			SearchValues_IncludedCacheTypes.push(obj.innerHTML);
			obj.style.backgroundColor='#4d610c';
			obj.style.color='#fff';
		}
	}
	
	function CacheTypeExists(obj){
		var exists = false
		for(var sve=0; sve<SearchValues_IncludedCacheTypes.length; sve++){
			if(SearchValues_IncludedCacheTypes[sve] == obj.innerHTML){
				exists = true;
				break;
			}
		}
		return exists;
	}
	
	function RemoveCacheType(obj){
		var arr = new Array();
		var orArr = SearchValues_IncludedCacheTypes;
		for(var svr=0; svr<orArr.length; svr++){
			if(orArr[svr]!=obj.innerHTML){
				arr.push(orArr[svr]);
			}
		}
		SearchValues_IncludedCacheTypes = arr;
		obj.style.backgroundColor='#fff';
		obj.style.color='#4d610c';
	}
	
	// LADEN!!! VON ALTER SUCHE
	if(loadedParams_CacheTypes.length>0){
		Search_EnableType.checked=true;
		for(var lpct=0; lpct<loadedParams_CacheTypes.length; lpct++){
			for(var sct=0; sct<Search_Cachetypes.length; sct++){
				if(Search_Cachetypes[sct].innerHTML == loadedParams_CacheTypes[lpct]){
					AddCacheType(Search_Cachetypes[sct]);
					break;
				}
			}
		}
	}
	
	/* ENDE */
	
	/* ABSCHICKEN */
	
	function SendSearchForm(){
		SearchStart.EditParameter('name', '');
		SearchStart.EditParameter('tagsIncluded', '');
		SearchStart.EditParameter('tagsNotIncluded', '');
		SearchStart.EditParameter('avgRating', '');
		SearchStart.EditParameter('LatLng', '');
		SearchStart.EditParameter('GeoCode', '');
		SearchStart.EditParameter('Types', '');
		
		var v = true;
		var v1 = false;
		
		if($('IntSearchID').value.length==0){
		
			if(Search_EnableName.checked){
				SetStyle(Search_Name, true);
				if(Search_Name.value.length>2){
					var CSearch = false;
					for(var i = 0; i<init_CodeSearch.length; i++){
						if(init_CodeSearch[i].toUpperCase() == Search_Name.value.substr(0, init_CodeSearch[i].length).toUpperCase()){
							CSearch = true;
							break;
						}
					}
					if(CSearch){
						location.href = CJPath + 'cache/list/[search:' + Search_Name.value + ']/';
					}
					
					SearchStart.EditParameter('name', Search_Name.value);
					v1 = true;
				}else{
					SetStyle(Search_Name, false);
					v = false;
				}
			}
			
			if(Search_EnableGeo.checked){
				SearchStart.EditParameter('LatLng', dMarker.getPoint().lat() + ';' + dMarker.getPoint().lng());
				SearchStart.EditParameter('Radius', $('Search_GeoRadius').value);
				SearchStart.EditParameter('GeoCode', $('Search_GeoCode').value);
				v1 = true;
			}
			
			if(Search_EnableTagsIncluded.checked){
				SetStyle(Search_TagsIncluded, true);
				if(Search_TagsIncluded.value.length>2){
					SearchStart.EditParameter('tagsIncluded', Search_TagsIncluded.value);
					v1 = true;
				}else{
					SetStyle(Search_TagsIncluded, false);
					v = false;
				}
			}
			
			if(Search_EnableType.checked){
				if(SearchValues_IncludedCacheTypes.length>0){
					v1 = true;
					var svString = "";
					for(var sv=0; sv<SearchValues_IncludedCacheTypes.length; sv++){
						svString+=SearchValues_IncludedCacheTypes[sv] + ';';
					}
					svString = svString.substr(0, svString.length-1);
					SearchStart.EditParameter('Types', svString);
				}
			}
			
			if(Search_EnableTagsNotIncluded.checked){
				SetStyle(Search_TagsNotIncluded, true);
				if(Search_TagsNotIncluded.value.length>2){
					SearchStart.EditParameter('tagsNotIncluded', Search_TagsNotIncluded.value);
					v1 = true;
				}else{
					SetStyle(Search_TagsNotIncluded, false);
					v = false;
				}
			}
			
			if(Search_EnableAVGRating.checked){
				SearchStart.EditParameter('avgRating', Search_AVGRating.value);
				v1=true;
			}
			
			if(v && v1){
				SearchStart.EditParameter('search', $('SearchID').value);
				SearchStart.CallFull();
				Search_SliderForm.slideOut();
				Search_SliderLoading.slideIn();
			}
		}else{
			Search_SliderForm.slideOut();
			Search_SliderLoading.slideIn();
			AjaxOpenSearch.EditParameter('search', $('IntSearchID').value);
			AjaxOpenSearch.CallFull();
		}
	}
	
	/* SET STARSLIDER */
	if($('AVGRating').value!=''){
		try{
			StarSlider_AVGRating.set(parseInt($('AVGRating').value));
			Search_EnableAVGRating.checked=true;
		}catch(e){
			alert(e);
		}
	}
	
	if(Search_Name.value.length>0){
		Search_EnableName.checked=true;
	}
	
	if(Search_TagsIncluded.value.length>0){
		Search_EnableTagsIncluded.checked=true;
	}
	
	if(Search_TagsNotIncluded.value.length>0){
		Search_EnableTagsNotIncluded.checked=true;
	}
	
	if($('Search_GeoCode').value.length>0){
		Search_EnableGeo.checked=true;
		GMapSlider.stop();
		if(!GMapSlider.open){
			GMapSlider.slideIn();
		}
		gMapMove(new GLatLng(init_Lat, init_Lng));
	}
	
		
	
	
	
	
});