/** 
 * Allgemiene Funktonen die fÃ¼r OBP benÃ¶tigt werden
 */

/** Sprache Global festlegen */

if((window.location.pathname.search(/\/en\//) != -1) || (window.location.pathname.search(/\/eng\//) != -1))
	sLang = '/en/';
else
	sLang = '';
	
/** 
 * Funktion zum Navigieren im Kalender
 * @param	int m	Monat
 * @param	int y	Jahr
 */
calNavigate = function(m, y) {
	
	if(isNaN(m) || isNaN(y))
		return;
	
	var m = parseInt(m);
		
	$.post(sLang + "/common/eventCalendar.php", { ac: true, m: m, y: y }, function(domChunk) {
		$("div.eventCal").html(domChunk);
	});		
	
};

/** 
 * Öffne ein Popup...
 */
function open_window(url, breite, hoehe, windowName, resizable, scrollbar, menu, tool, loc) {
	position_links = (screen.width - breite-20)/2;
	position_oben = (screen.height - hoehe)/2.5; 
	
	if(!isNaN(windowName)) {
		//Alter Aufruf ohne windowName, mit parameter in Reihenfolge url, breite, hoehe, resizable
		// --> Parameter umreihen ;>
		loc			= tool; 
		tool		= menu;
		scrollbar	= resizable;		
		resizable	= windowName;
		windowName	= 'site_popup';
	} 

	var parameter = 'width='+breite+',height='+hoehe+',left='+position_links+',top='+position_oben+',resizable='+resizable+',scrollbars='+scrollbar+',menubar='+menu+',status=yes,toolbar='+tool+',location='+loc;
	/*	
	if((typeof objWindow != "undefined") && !objWindow.closed) {
		//objWindow.focus();
	} else {
		objWindow = window.open(url, windowName, parameter);
	}*/	
	objWindow = window.open(url, windowName, parameter);
	objWindow.focus();
	return;	
};


/**
 * Funktion zum Tab switchen
 */
switchTab = function(el, tabContainer, tabContentContainer) {
	
	
	
	$currentTab				= $(el);	
	
	if(tabContainer == "#finderTabs") {
		//aktiven tab speichern
		$.post("/common/ajax/cms/saveFinderTab.php", {tab: $currentTab.attr("rel")});
	}
	
	$tabContainer			= $(tabContainer);
	$tabContentContainer	= $(tabContentContainer);
	
	$tabContainer.children().removeClass("active");
	$currentTab.parent().addClass("active");
	
	$tabContent = $( "div." + $currentTab.attr("rel"), $tabContentContainer);
	$tabContentContainer.children().hide();
	$tabContent.show();
};

/** 
 * öffnet eine Lytebox
 */
openBox = function(title, url, style) {
      var ankerEl = this.document.createElement('a');
	  
	  var style = ((typeof style == "undefined") || !style) ? 'width: 400px; height: 300px; scrolling: no;' : style;
	  
      ankerEl.setAttribute('rev', style);
      
	  ankerEl.setAttribute('title', title);
      ankerEl.setAttribute('href', url);
      ankerEl.setAttribute('rel', 'lyteframe');
      myLytebox.start(ankerEl, false, true);
}

/**
 * Speichert einen Community Kommentar
 */
commentSave = function() {
	if($.trim($("#comment_content").val()) == "") {
		alert((sLang)?"You must add a comment !":"Es muss ein Kommentar abgegeben werden!");
		return false;
	}
	$("#comment_submit").css('display','none');
	$.post(sLang + "/common/ajax/community/commentSave.php", $("#commentForm").serialize(),
			function(data){
					$("#commentsArea").html(data);
			});	
	return false;
};

ratingSave = function() {
	if($.trim($("#comment_content").val()) == "") {
		alert((sLang)?"You must add a comment !":"Es muss ein Kommentar abgegeben werden!");
		return false;
	}
	$("#comment_submit").css('display','none');
	$.post(sLang + "/common/ajax/community/commentSave.php", $("#ratingForm").serialize(),
			function(data){
					parent.$("#commentsArea").html(data);
					$.post(sLang + "/common/ajax/community/ratingSave.php", $("#ratingForm").serialize(),
							function(data){
								name = "#ratingArea" + $("#rating_index").val() + "_" + $("#comment_area").val() + "_" + $("#comment_cid").val()
								parent.$(name).html(data)
								parent.myLytebox.end();
							});						
			});		
	return false;
};

commentPage = function(obj, area, cid) {
	// get page number
	var href = obj.href.toString();
	var start = href.search(/page=([0-9]*)$/);
	var page = href.substring(start+5);
	
	$.post(sLang + "/common/ajax/community/comments.php", { area: area, cid: cid, page:page },
			function(data){
					$("#commentsArea").html(data);
			});	
	return false;
}

locationPage = function(obj) {
	// get page number
	href = obj.href.toString();
	start = href.search(/page=([0-9]*)$/);
	page = href.substring(start+5);
	
	$.get("/locations_ajax.html", { obp_page:page },
			function(data){
					$("#locationsArea").html(data);
			});	
	return false;
}

/** 
 * Funktion zum Navigieren im Header
 * @param	int p	Page
 */
headerNavigate = function(type, p) {
	
	if(isNaN(p))
		return;
	
	switch(type) {
		
		case "default": 
			//Standardheader	
			$.post(sLang + "/common/ajax/cms/headerContents.php", { ac: true, headerType: type, headerPage: p }, function(data) {				
				$container	= $("div#headerContents");
				$content	= $("div#headerContents div.text"); 
				$content.fadeOut("slow", function() {
					
					//Bild austauschen
					$("<img>").load(function() { 
						$("div#headerBoxSmall").css("background-image", "url("+ data.headerImage +")");	
					}).appendTo("body").attr({src: data.headerImage}).css({display: "none"});
						
					$container.html(data.html);
				}).fadeIn("slow");				
			}, "json");		
			
		break;
	}
	
};



/****************************************************************************** 
 * Google Map Funktionen
 */
 
/** 
 * Marker so weit runter schieben dass das infowindow schön sichtbar ist
 */
panMapToFitInfoWindow = function(marker) {
			
	if(typeof map == "undefined")
		return false;
	
	// Die Zeitverzögerung ist deswegen, 
	// weil er das InfoWindow selber auch zuerst (nicht zufriendenstellend) positioniert

	setTimeout(function() { 
		var panX = 0;
		var panY = 0;
		
		// So weit muss der marker von der Oberkante des Map Containers mindestens entfernt sein,
	    // damit er NICHT runter geschoben wird    
	    var minTop = 210;
    
	    //selbiges für den Abstand zum linken Rand
	    var minLeft = 300; 
	    
	    //von links max 600px damits rechts nicht hinterm zoom-dingens verschwindet
	    var maxLeft = 600;
	    
		var point = marker.getLatLng();
	
		var markerPos = map.fromLatLngToContainerPixel(point);
		
		var infoWindow = map.getInfoWindow();		
	    var infoWindowContents = infoWindow.getContentContainers();
	        
	    for(var i = 0; i < infoWindowContents.length; i++) {
	    	var len = infoWindowContents[i].innerHTML.toString().length;

	    	//viel inhalt bedeutet eine hohe box, hier noch weiter runter fahren
	    	if(len > 600) {
	    		minTop += 20;	    	
	    	} else if(len > 550) {	    		
	    		minTop += 15;
	    	} else if(len > 500) {
	    		minTop += 10;
	    	} else if(len > 450) {
	    		minTop += 5;
	    	}    	

	    }
	    
	    if(markerPos.x < minLeft)
	    	panX = minLeft - markerPos.x;
	    	
		if(markerPos.y < minTop)
			panY = minTop - markerPos.y;
		
		if(markerPos.x > maxLeft)
			panX = maxLeft - markerPos.x;
						           
	   	map.panBy(new GSize(panX, panY));
   	  	
   	}, 500);
};

/** 
 * Marker in die Map eintragen
 */
createMarker = function(lat, lng, html, objekt_id) {
	
	if(
	   	isNaN(lat) ||
		isNaN(lng) ||
		(typeof map == "undefined")	//Globale map var
	)
		return false;
		
	//Wir wollen unseren eigenen OBP Marker haben ;>
	var obpIcon = new GIcon();
	obpIcon.image = "/images/layout/header/map/marker.png";
	obpIcon.iconSize = new GSize(36, 35);
	
	obpIcon.iconAnchor = new GPoint(0, 0);
	obpIcon.infoWindowAnchor = new GPoint(15, 20);
							
	//Objekt setzen
	markerOptions = { icon: obpIcon };
		
	var point = new GLatLng(lat, lng);
	
	var marker = new GMarker(point, markerOptions);
	
	GEvent.addListener(marker, "infowindowclose", function(){
		if(!markers[(lat+lng)].blackImg)
			markers[(lat+lng)].marker.setImage("/images/layout/header/map/marker.png");
	});
	
	GEvent.addListener(marker, "click", function(){	
		panMapToFitInfoWindow(marker);
	});
		
	//Marker zur späteren Weiterverarbeitung im globalen markers Array ablegen
	var markerContents = {
			objekt_id: 	objekt_id,
			html:		html,
			lat:		lat,
			lng: 		lng
		};

	var mObj = (lat+lng);
	
	if(typeof markers[mObj] == "undefined")
		markers[mObj] = [];
	
	if(typeof markers[mObj].contents == "undefined")
		markers[mObj].contents = [];
			
	markers[mObj].contents.push(markerContents);	
		
	GEvent.addListener(marker, "click", function() {
	
		//if(markers[mObj].contents.length > 0) {
			/* 
			 for (var i=0; i<htmls.length; i++) {
            tabs.push(new GInfoWindowTab(labels[i],htmls[i]));
          }
          marker.openInfoWindowTabsHtml(tabs);
          */		
		//} else {
			marker.openInfoWindowHtml(html);
			marker.setImage("/images/layout/header/map/marker2.png");			
		//}
							
		for(var mObj in markers) {		
			try { 			
				if(!markers[(lat+lng)].blackImg && !(mObj == (lat+lng)))
					markers[mObj].marker.setImage("/images/layout/header/map/marker.png");
			} catch(e) { };			
		}
		
	});
			
	return marker;
};


/**
 * Marker zentrieren
 * zentriert einen bestehenden Marker und öffnet das infoWindow
 */
centerMarker = function(coordinates, objekt_id) {

	if(typeof map == "undefined") //Globale map var
		return false;	
		
	window.scroll(0, 0); //Raufscrollen, wir wollen ja die Map sehen
	
	if(coordinates.length > 1) {
		//Mehrere Marker
		
		for(var i in coordinates) {
			var this_lat = coordinates[i].lat;
			var this_lng = coordinates[i].lng;
			if(
				(this_lat && !isNaN(this_lat)) && 
				(this_lng && !isNaN(this_lng))
			) {
				//So zentrieren dass alle sichtbar sind
				centerMap(coordinates);
				
				//diese Marker noch highlighten
				var mObj = (this_lat+this_lng);
				markers[mObj].marker.setImage("/images/layout/header/map/marker2.png");	
				markers[mObj].blackImg = true;
				
				for(var mObj in markers) {
					try { markers[mObj].marker.closeInfoWindow(); } catch(e) { };
				}		
				
			}
		}
			
	} else {
		
		//Nur 1 Marker
		// -> zentrieren und Info Fenster öffnen

		for(var i in coordinates) {
			var lat = coordinates[i].lat;
			var lng = coordinates[i].lng;
			if(lat && lng) {
				var point = new GLatLng(lat, lng);
				map.setCenter(point, 10);
			
				var mObj = (lat+lng);	
				
				for(var i = 0; i < markers[mObj].contents.length; i++)
					if(!isNaN(i))	
						if(markers[mObj].contents[i].objekt_id == objekt_id) 
							markers[mObj].marker.openInfoWindowHtml(markers[mObj].contents[i].html);
			
				markers[mObj].marker.setImage("/images/layout/header/map/marker2.png");	
				
				panMapToFitInfoWindow(markers[mObj].marker);				
			}
		}
		//Marker Images wieder zurücksetzen
		/*
		for(var mObj in markers) {
			try { 
				//markers[mObj].marker.setImage("/images/layout/header/map/marker.png"); 
				//markers[mObj].blackImg = false;
			} catch(e) { };
		}	
		*/	
					
	}
};

/**
 * Marker eintragen oder zentrieren (action add / center)
 */
setMarker = function(objekt_id, community, type, action, callback, eventDetail) {	

	var callback = callback || function() { };
 
	if(
	   	isNaN(objekt_id) || 
		isNaN(community) ||
		(typeof action == "undefined") || 
		(typeof map == "undefined")	//Globale map var
	)
		return;

	var eventDetail = eventDetail || 0;

	$.post(sLang + "/common/ajax/cms/getMapData.php", { community: community, type: type, objekt_id: objekt_id ,eventDetail: eventDetail}, function(mapData) {
		
		var coordinates = mapData.coordinates;
		
		switch(action) {
			
			case "add": //Marker hinzufuegen
						
				if(!(typeof coordinates == "undefined")) {
							
					for(var i in coordinates) {
						var lat = coordinates[i].lat;
						var lng = coordinates[i].lng;
						
						if(lat && lng) {
							var marker = createMarker(lat, lng, mapData.html, objekt_id);

							//Marker Objekt im entsprechenden Objekt reinhängen
							var mObj = (lat+lng);
												
							markers[mObj].marker = marker;							
							markers[mObj].lat = lat;
							markers[mObj].lng = lng;
														
							mapRequests++;
																					
							map.addOverlay(marker);							
						}
					}
										
					callback();					
					
				} else {
					$("td.mapLink"+objekt_id).css("visibility", "hidden");		
				}
			break;
			
			case "center": //Marker zentrieren
			
				if(!(typeof coordinates == "undefined")) {
					centerMarker(coordinates, objekt_id);
					callback();
				} 
			break;
		}
		
	}, "json");
		
};

/**
 * Map so zentrieren und zoomen dass alle Marker sichtbar sind
 * Wenn coordinates angegeben werden diese benutzt, 
 * ansonsten wird auf das globale markers Array zurückgegriffen
 */
centerMap = function(coordinates) {

	coordinates = coordinates || markers; 

	/* wenn ein infowindow offen ist (zb detailansicht), zentrieren wir die map nimmer */
	var iW = map.getInfoWindow();	
	if(iW.getContentContainers().length > 0 && !iW.isHidden())
		return;
						
	for(var i in coordinates) {
		var this_lat = coordinates[i].lat || null;
		var this_lng = coordinates[i].lng || null;
		
		if(
			(this_lat && !isNaN(this_lat)) && 
			(this_lng && !isNaN(this_lng))
		) {
			var minLat = minLat || this_lat;
			var maxLat = maxLat || this_lat;
			var minLng = minLng || this_lng;
			var maxLng = maxLng || this_lng;
			
			//Minimale und maximale Koordinaten festhalten
			minLat = Math.min(minLat, this_lat);
			maxLat = Math.max(maxLat, this_lat);
			minLng = Math.min(minLng, this_lng);
			maxLng = Math.max(maxLng, this_lng);						
		}
	}
	
	
	//Durchschnitt der Koordinaten
	var centerLat = minLat + ((maxLat - minLat) / 2);
	var centerLng = minLng + ((maxLng - minLng) / 2);

	//Wie weit sind die Koordinaten voneiander entfernt? (Luftlinie in km)	
	var dist = (6371 * 
					Math.acos(
						Math.sin(minLat / 57.2958) *						 						
						Math.sin(maxLat / 57.2958) + (
							Math.cos(minLat / 57.2958) * 
							Math.cos(maxLat / 57.2958) * 
							Math.cos(maxLng / 57.2958 - minLng / 57.2958)	
						)
					)					
				);
	
	//default zoom level
	var zoomLvl = 10;
	
	//Zoom Level anhand der Distanz festlegen	
	//level 1... 2... 3.. 4... 5... so weit werden sie bei uns nie voneinander entfernt sein ;>
	if(dist < 768)
		zoomLvl = 5;
		
	if(dist < 384)
		zoomLvl = 6;

	if(dist < 192)
		zoomLvl = 7;

	if(dist < 96)
		zoomLvl = 8;
		
	if(dist < 48)
		zoomLvl = 9;
	
	if(dist < 24)    
		zoomLvl = 10;
/*
	if(dist < 11)    
		zoomLvl = 11;


	if(dist < 4.8)    
		zoomLvl = 12;

	if(dist < 3.2)    
		zoomLvl = 13;	
		
	if(dist < 1.6)    
		zoomLvl = 15;
		
	if(dist < 0.8)
		zoomLvl = 15;
		
	if(dist < 0.3)
		zoomLvl = 16;
*/		
	//Karte zentrieren + zoomLvl setzen
	var point = new GLatLng(centerLat, centerLng);
	map.setCenter(point, zoomLvl);
};

tellafriend = function(sprachen_id,host) {

	var loc		= window.location.toString();
	
	//Hash entfernen
	if(loc.charAt(loc.length-1) == '#')
		loc = loc.substr(0, loc.length-1);

	var url 	= "/common/tellafriend.php?taf_link=" + escape(loc);
	
	breite 		= 375;
	hoehe 		= 420;
	parameter 	= "";

	if (typeof sprachen_id != "undefined")
		url = url + "&sprachen_id=" + sprachen_id;

	if(typeof host != "undefined")
		url = host + url;
		
	position_links = (screen.width - breite-20)/2;
	position_oben = (screen.height - hoehe)/2.5;
	var par = 'width='+breite+',height='+hoehe+',left='+position_links+',top='+position_oben;
	var fenster = open(url,'tellafriend',par);
	fenster.focus();
};

function checkrequired(which,lang) {
	var pass=true
	if (document.images) {
		for (i=0;i<which.length;i++) {
			var tempobj=which.elements[i]
			if (which.Mussfelder.value.indexOf(tempobj.name)!=-1) {
				if (((tempobj.type=="text"||tempobj.type=="textarea")&&tempobj.value=='')||(tempobj.type.toString().charAt(0)=="s"&&tempobj.selectedIndex==-1)) {
					if(lang=="de")
						alert("Das Eingabefeld '" + tempobj.name +"' muss ausgefüllt werden. Bitte ergänzen und erneut senden!");
					else
						alert("Required element '" + tempobj.name +"' are not completed. Please complete them, then submit again!\nDas Eingabefeld '" + tempobj.name +"' muss ausgefüllt werden. Bitte ergänzen und erneut senden!");
					tempobj.focus();
					pass=false;
					break;
				}
				if((tempobj.name == "Ihre_Email")||(tempobj.name == "Empfaenger_Email")) {
					if(tempobj.value.indexOf('@') == -1) {
						if(lang=="de")
	   						alert("Keine gülige E-Mail-Adresse!");
						else
							alert("No valid E-Mail!");
						tempobj.focus();
						pass=false;
						break;
					}
				}
			}
		}
	}
	if (!pass) {
		return false;
	}
	else {
		return true;
	}
};

generatePdf = function(page, title) {
	$("span#pdfPrintFootLoader").show();
	$("span#pdfPrintFootLink").hide();

	//page = escape(page);
	//title = title.replace(/ - www.onebigpark.at/g, '');
	
	$.ajax({
		url: "/common/generatePdf.php",
		type: "POST",
		data: { page: page, title: title },
		dataType: "json",
		success: function(r, textStatus) {
			if(r.success) {
				//location.href = r.link; //hier wird dann der download gleich gestartet
				if($.browser.msie) {
					var l = '<a href="'+ r.link +'">download starten</a>';
					$("a#pdfPrintFootGenerate").hide();
					$("span#pdfPrintFootLink").show().html(l);
				} else {
					location.href = r.link; //hier wird dann der download gleich gestartet					
				}
			}					
			$("span#pdfPrintFootLoader").hide();
		}
	}); 	
};
/*
 * Bugfix Link geht nicht bei IE6 PNG dahinter
 */
function home()
{
	location.href = "http://www.onebigpark.at";
}
