// JavaScript Document
var map;
var gmarkers = [];
var instructions = new Array();
$(document).ready(function() {
	// progress indicator, DEFAULT-configuration
	jQuery.ajaxSetup({
		beforeSend: function() {
			//show loader-div and hide the div next to the loader with a class containing the string "ajax-update"
			$('#loaderDiv').next("div[class~=ajax-update]").hide();
			$('#loaderDiv').show();
		},
		complete: function(){
			$('#loaderDiv').hide();
			$('#loaderDiv').next("div[class~=ajax-update]").show();
		}
/*
		success: function() {
//			alert('success-loading');
			$('#loaderDiv').hide();
			$('#loaderDiv').next("div[class~=ajax-update]").show();			
			}
*/
	
	});
	
	$('#jmcontactcenter-contactform-submit-link').live("click",function(event) {
			var fields = new Array;
	 	var fields = $("#jmcontactcenter-direct-contactinfo-form :input").serializeArray();

  $.ajax({
    type: "POST",
    url: "index.php?type=5000",
    data: fields,
	dataType: "json",
    success: function(response) {
		
		var obj = response;
		//alert(obj[0]['code']+", "+obj[0]+", "+obj['code']);
	switch (obj[0]['code']) {
			case "sendContactForm":
			 	$('#jmcontactcenter-direct-contactinfo-form').html("<div id='message'></div>");
				$('#message').html(obj[1]['content'])
	  			.hide()
      			.fadeIn(1500, function() {
		  //      $('#message').append("<img id='checkmark' src='images/check.png' />");
      		});
			break;
		}			
    },
	error: function(error,status,exeption) {
				alert(status);
			}
  });
  
  		return false;	
	});

	$('#jmcontactcenter-contactform-submit-link').live('click', function(event){
												//								 alert('.');
//		event.preventDefault();
	});

//bei ENTER -> "populateMap-Link" clicken
	$('#jmcontactcenter-gmap-user-input-zip, #jmcontactcenter-gmap-user-input-radius, #jmcontactcenter-gmap-categories').live('keyup', function(event){
		event.preventDefault();
		if(event.keyCode == 13) {
//			alert('f');
			$("#populateMap").click();
		}
	});
	
//bei ENTER -> default formular submit und damit verbundenen page reload verhindern:
	$('#jmcontactcenter-contactinfo-searchform-form').live('submit', function(event) {
		//alert('we');																	  
		event.preventDefault();																	  
		return false;
	});


	// set initial-position
	var right = ($(window).width())/2+505;
	var top = $('#container-mainmenu').position();
	var heightContainerContactcenter = $('#container-jmcontactcenter').outerHeight(false);
//	$('#container-jmcontactcenter').css({'display': 'none', 'position': 'absolute', 'z-index': '40', 'width': '670px', 'height': '170px', 'top': top['top']-180, 'left': (($(window).width())/2+505)-670});
	$('#container-jmcontactcenter').css({'display': 'none', 'position': 'absolute', 'z-index': '40', 'top': top['top']-heightContainerContactcenter, 'left': (($(window).width())/2+505)-670});
	// adopt position on resize
	$(window).resize(function() {
		$('#container-jmcontactcenter').css({'position': 'absolute', 'z-index': '40', 'top': top['top']-heightContainerContactcenter, 'left': (($(window).width())/2+505)-670});
	});

//Auswahl der Kontakt-Kategorie in der rechten Spalte des Kontaktcenters
	$('ul#jmcontactcenter-choose-contact-level-2').hide();	
	$('ul#jmcontactcenter-choose-contact-level-2').slideUp();
	
	$('li#jmcontactcenter-choose-contact-item-level-1').click(function(event) {
	   	var $target = $(event.target);
// wenn event durch klick auf eine kategorie ausgelöst wurde -> abbruch, damit selector menü ausgeklappt bleibt:		
		if($target.attr('rel') == 'category-code') return;													
		$('ul#jmcontactcenter-choose-contact-level-2').slideToggle("slow");
	});

	$('#mainmenuitem-level1-contact').click(function(event) {
		 event.preventDefault();
		 $('#container-jmcontactcenter').fadeIn("slow");
	});	

/*  	$('#mainmenuitem-level1-contact').mouseenter(function() {
		 $('#container-jmcontactcenter').fadeIn("slow");
	});*/

/*
	$('#container-jmcontactcenter').mouseleave(function() {
		$('#container-jmcontactcenter').delay(1000).fadeOut("slow");														
	});
*/	

	$('#container-jmcontactcenter-close-link a').click(function(event) {
		event.preventDefault();
		$('#container-jmcontactcenter').fadeOut("slow");
	});


// AJAX-Request zum Initial-Laden einer google Map ODER Anzeige von Kontaktinfos in der linken Spalte des Kontaktcenter-Layers ODER Anzeige eines Kontaktformulars, wir verwenden "live", damit auch für Elemente, die erst in Zukunft via AJAX nachgeladen werden, der Eventhandler gebindet wird
$(".jmcontactcenter-choose-contact-item-level-2 a, a.bramac-contactcenter-quicklink, #jmcontactcenter-contactinfo  p.jmcontactcenter-direct-contactinfo a.jmcontactcenter-direct-contactinfo-contactform").live('click', function(event) {
// Das ist die herkömmliche Methode mit einem form und select (aus Designgründen brauchen wir aber ein list-menü):	$('#jmcontactcenter-ttaddress-categories').change(function(event) {
		event.preventDefault();
		//verhindert, dass slideToggle ausgelöst wird (das Menü soll offen bleiben nach Auswahl einer Kategorie) - Ergänzung: funzt leider nicht mit ".live" ...
//		event.stopPropagation();
		// target = DOM-element, das das event auslöste
		var $target = $(event.target);
		
		if($target.attr('class') == 'bramac-contactcenter-quicklink') {
			//wenn ein direkt-link (irgendwo im content, vom redakteur erstellt) geklickt wird:
			instructions = $target.attr('rel').split(':');
			instructions[2] = 'directlink';
		}
		else {
			//wenn link innerhalb des plugin-templates geklickt wird:
			instructions[0] = $('input:hidden[name='+$target.attr('rel')+']').val();
			instructions[1] = $target.attr('href');
			instructions[2] = 'pluginlink';		
		}

//		alert($('input:hidden[name='+$target.attr('rel')+']').val());
//		alert($target.attr('rel'));
		$.ajax({
			// Achtung mit RealURL!
			url: "index.php",
			type: "POST",
			data: {
// statt eID verwenden wir typeNum
				type: "5000",
// sollten wir form+select nutzen: category: $('#jmcontactcenter-ttaddress-categories').val(),
// aktuell verwenden wir aber ein list-menu, daher lesen wir uid der gewählten Kategorie aus dem href-attribut aus:
				category: instructions[1],
				code: instructions[0]
			},
			dataType: "json",
			success: function(response) {
				var obj = response;
				switch (obj[0]['code']) {
				  case "showContact":
				  	if(instructions[2] == 'directlink') {
						//wenn ein direktlink geklickt wurde, muss das Kontaktcenter erst geöffnet werden:
						$('#container-jmcontactcenter').fadeIn("slow");
					}
					$('#jmcontactcenter-contactinfo').html(obj[1]['content']);
					break;
				  case "showContactForm":
					$.fn.colorbox({innerWidth: '630px', innerHeight: '390px', scrolling: false, inline:true, href:"#jmcontactcenter-direct-contactinfo-form", onComplete: function(){$('#jmcontactcenter-direct-contactinfo-form').html(obj[1]['content']);}});
					break;
				  case "showImageMap":
					$.fn.colorbox({innerWidth: obj[2]['width'], innerHeight: obj[3]['height'], scrolling: false, inline:true, href:"#jmcontactcenter-direct-contactinfo-imagemap", onComplete: function(){$('#jmcontactcenter-direct-contactinfo-imagemap').html(obj[1]['content']);$.fn.colorbox.resize();}});
					break;					
				  case "loadMap":
				  // suchformular generieren (die kategorie wird vorausgewählt, je nachdem, was der user selektiert hat)
 					
//					öffnen der colorbox und laden der google map innerhalb der box (aber erst nach fertigstellen der colorbox-animation, damit breite und höhe der box bekannt ist)
					$.fn.colorbox({width: $(window).width()*0.88, height: $(window).height()*0.9, scrolling: false, inline:true, href:"#container-map_canvas", onComplete: function(){initialize();generateMarkers(response);$('#jmcontactcenter-contactinfo-searchform').html(obj[1]['content']);}, onClosed: function(){GUnload();}});
					break;
				  default:
					alert("Error");
					break;
				}
			},		
			error: function(error,status,exeption) {
				alert(status);
			}
		});
	});

// AJAX-Request zum Neu-Laden einer google Map mit neuen Markern (je nach Definition der Suchkriterien durch den User)
	$('#populateMap').click(function(event) {
		event.preventDefault();
		var $target = $(event.target);
		$.ajax({
			// Achtung mit RealURL!			   
			url: "index.php",
			type: "POST",
			data: {
				// statt eID verwenden wir typeNum
				type: "5000", 
//				eID: "jmccajax",	// die erstellte eID
				category: $('#jmcontactcenter-gmap-categories').val(),
				zip: $('#jmcontactcenter-gmap-categories-zip').val(),
				city: $('#jmcontactcenter-gmap-categories-city').val(),
				region: $('#jmcontactcenter-gmap-categories-region').val(),				
				country: $('#jmcontactcenter-gmap-categories-country').val(),
				code: $('input:hidden[name='+$target.attr('rel')+']').val(),
				userInputDistance: $('#jmcontactcenter-gmap-user-input-radius').val(),
				userInputZip: $('#jmcontactcenter-gmap-user-input-zip').val()
			},
			dataType: "json",		

			success: function(response) {
				var obj = response;
				$('#jmcontactcenter-contactinfo-searchform').html(obj[1]['content']);
				map.clearOverlays();
				generateMarkers(response);
			},
			error: function(error,status,exeption) {
				alert(status);
			},
			beforeSend: function() {
//				$('#mapLoaderDiv').next("div[class~=ajax-map-update]").hide();
				$('#mapLoaderDiv').css({'width': $('#mapLoaderDiv').next("div[class~=ajax-map-update]").width(), 'height': $('#mapLoaderDiv').next("div[class~=ajax-map-update]").height()+30});
				$('#mapLoaderDiv').fadeIn("slow");
			},
			complete: function() {
				$('#mapLoaderDiv').fadeOut("fast");
//				$('#mapLoaderDiv').next("div[class~=ajax-map-update]").show();
			}			
		});
	});	
});

// google maps-section
function initialize() {
  if (GBrowserIsCompatible()) {
//	das setzen von höhe und breite der map ist wichtig, ansonsten wird die karte nur teilweise angezeigt, weil ausschnitt falsch eingestellt wird:
	map = new GMap2(document.getElementById("map_canvas"),{size:new GSize($('#colorbox').width(), $('#colorbox').height()-198)});
	map.setCenter(new GLatLng(0,0),0);
	var customUI = map.getDefaultUI();
	map.setUI(customUI);
	map.enableScrollWheelZoom();
//	var mgr = new MarkerManager(map);
  }
}

function createMarker(point,html,uid) {
	var marker = new GMarker(point);
	GEvent.addListener(marker, "click", function() {
		marker.openExtInfoWindow(
			map,
			"jmcontactcenter-gmap-detailinfo-window",
			"Loading ... ",
          { ajaxUrl: 'index.php?type=5000&code=getDetailInfo&uid=' + uid,
		  	beakOffset: 18,
			maxPanning: 0
			}
        );
	});
	return marker;
}

function generateMarkers(markers) {
	var obj = markers;
	var latlngbounds = new GLatLngBounds();
		if(obj != 'null') {
			var countValidPoints = 0;
			//start bei element 2, weil element 0 enthält den steuer-code, element 1 evtl. content und erst element 2 ein lat/lon-wertepaar
			for(var i=2; i<obj.length; i++) {
				var innerObj = obj[i];
					//prüfen, ob tatsächlich lon/lat werte vorhanden
					if((innerObj['lon'] && innerObj['lat']) && (innerObj['lon'] != '' && innerObj['lat'] != '')) {
						var point = new GLatLng(innerObj['lat'], innerObj['lon']);
						map.addOverlay(createMarker(point,'',innerObj['uid']));
						// soeben erzeugten punkt zum globalen marker-array hinzufügen (wird später für das löschen der marker benötigt)
						gmarkers.push(point);
						latlngbounds.extend(point);
						countValidPoints++;
					}
			}
			if (countValidPoints > 0) {
				map.setCenter(latlngbounds.getCenter(), Math.min(13, map.getBoundsZoomLevel(latlngbounds)));		
				return true;
			}
			else {
				alert('No contacts available');
				return false;
			}
		}
		return false;
}


function removeMarkers() {
	for (var i=0; i<gmarkers.length; i++) {
	  map.removeOverlay(gmarkers[i]);
	}
	// array mit markers zurücksetzen
	gmarkers = [];
}
