﻿
jQuery.noConflict();

if (typeof google == 'object') {
	var directionDisplay;
	var directionsService = new google.maps.DirectionsService();
}

var map;
var markerArray = new Array();
var marker = new Array();
var markerLatLng = new Array();
var infoTexts = new Array();

function map_setMarkers(map, locations) {

  	// Add markers to the map
	for (var i in locations) {
	
	//for (var i = 0; i < locations.length; i++) {
    	var loc = locations[i];
    	var myLatLng = new google.maps.LatLng(loc[1], loc[2]);
				
    	//var image = loc[4];
    	if (loc[4] != '') {
			var image = new google.maps.MarkerImage(loc[4],
      			// This marker is 20 pixels wide by 32 pixels tall.
      			new google.maps.Size(33, 33),
      			// The origin for this image is 0,0.
      			new google.maps.Point(0,0),
      			// The anchor for this image is the base of the flagpole at 0,32.
      			new google.maps.Point(0, 33));
		
  		/*var shadow = new google.maps.MarkerImage('images/beachflag_shadow.png',
      			// The shadow image is larger in the horizontal dimension
      			// while the position and offset are the same as for the main image.
      			new google.maps.Size(37, 32),
      			new google.maps.Point(0,0),
      			new google.maps.Point(0, 32));
   		*/
		}
		
		offerer[i][6] = myLatLng;
		
		if (typeof marker[myLatLng] != 'object') {
		
			if (image != 0) {
				marker[myLatLng] = new google.maps.Marker({
					position: myLatLng,
					map: map,
					//shadow: shadow,
					icon: image,
					//shape: shape,
					title: '',
					longdesc: '',
					zIndex: loc[3]
				});
			}
			else {
				marker[myLatLng] = new google.maps.Marker({
					position: myLatLng,
					map: map,
					title: '',
					longdesc: '',
					zIndex: loc[3]
				});
			}
	
			infoTexts[myLatLng] = new Array();
			infoTexts[myLatLng][i] = '<div><b>'+loc[0]+'</b><br />'+loc[5]+'</div>';
			
			google.maps.event.addListener(marker[myLatLng], 'click', function() {
				infowindow2.close(map);
				infowindow.setContent(getMarkerText(this.position)); //'<div><b>'+this.title+'</b><br />'+this.longdesc+'</div>'
				infowindow.open(map, this);
			});
			google.maps.event.addListener(marker[myLatLng], 'rightclick', function() {
				infowindow.close(map);
				infowindow2.setContent('<br /><span class="link" onclick="calcRoute(\''+def_latlng+'\', \''+this.position+'\', \'DRIVING\')">Route hierher berechnen</span>');
				infowindow2.open(map, this);
			});
		}
		else infoTexts[myLatLng][i] = '<div><b>'+loc[0]+'</b><br />'+loc[5]+'</div>';
		
  	}
}

function getMarkerText(v) {
	var string = '';
	for (var i in infoTexts[v]) {
		if (infoTexts[v][i] == '') continue;
		else string = string+'<br>'+infoTexts[v][i];
	}
	return string;
}

function map_initialize(lat,lng) {
 // alert(c_zoom);
	geocoder = new google.maps.Geocoder();
	directionsDisplay = new google.maps.DirectionsRenderer({suppressMarkers: true});

    def_latlng = new google.maps.LatLng(lat,lng);
	
    var myOptions = {
      zoom: c_zoom,
	  scaleControl: true,
      center: def_latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

	infowindow = new google.maps.InfoWindow({
    		content: '<div></div>'
	});
	infowindow2 = new google.maps.InfoWindow({
    		content: '<div></div>'
	});
	
	if (geocoder && c_def) {
      geocoder.geocode({'latLng': def_latlng}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
          if (results[1]) {
			//map.setZoom(11);
            marker_def = new google.maps.Marker({
                position: def_latlng, 
                map: map,
				icon: 'typo3conf/ext/ok_pa/gfx/pin_default.png'
            }); 
			google.maps.event.addListener(marker_def, 'click', function() {
				infowindow2.close(map);
				infowindow.setContent('Ihr Standort:<br />'+results[0].formatted_address);
				infowindow.open(map, this);
			});
          }
        } else {
          alert("Geocoder failed due to: " + status);
        }
      });
    }
}

function calcRoute(start, end, mode) {
	start = start.replace(/[()]/g, '');
	end = end.replace(/[()]/g, '');
	start = new google.maps.LatLng(start.split(',')[0], start.split(',')[1]);
	end = new google.maps.LatLng(end.split(',')[0], end.split(',')[1]);
    var request = {
        origin:start, 
        destination:end,
        travelMode: google.maps.DirectionsTravelMode[mode]
    };
    directionsService.route(request, function(response, status) {
      if (status == google.maps.DirectionsStatus.OK) {
		directionsDisplay.setMap(map);
        directionsDisplay.setDirections(response);
		var myRoute = response.routes[0].legs[0];		
		infowindow2.setContent('<div>Route:<br />'+myRoute.distance.text+'<br />'+myRoute.duration.text+'<br /><br /><span class="link" onclick="directionsDisplay.setMap(null);map.setZoom(c_zoom);map.setCenter(def_latlng);infowindow2.close();">Route l&ouml;schen</span></div>');
      }
    });
}

function addToMap(uid) {
	if (typeof(offerer) == 'object' && typeof(offererjoin) == 'object' && typeof(offererjoin[uid])) {
		var thisofferer = new Array();
		for (var i in offererjoin[uid]) {
			var myLatLng = new google.maps.LatLng(offerer[offererjoin[uid][i]][1], offerer[offererjoin[uid][i]][2]);
			markerArray[offererjoin[uid][i]] = markerArray[offererjoin[uid][i]] ? parseInt(parseInt(markerArray[offererjoin[uid][i]])+1) : 1;
			markerLatLng[myLatLng] = markerLatLng[myLatLng] ? parseInt(parseInt(markerLatLng[myLatLng])+1) : 1;
			thisofferer[offererjoin[uid][i]] = offerer[offererjoin[uid][i]];
		}
		map_setMarkers(map, thisofferer);
	}
}

function removeFromMap(uid) {
	if (typeof(offerer) == 'object' && typeof(offererjoin) == 'object' && typeof(offererjoin[uid])) {
		for (var i in offererjoin[uid]) {
			var myLatLng = new google.maps.LatLng(offerer[offererjoin[uid][i]][1], offerer[offererjoin[uid][i]][2]);
			if (typeof(marker[myLatLng]) == 'object') {
				markerLatLng[myLatLng] = parseInt(markerLatLng[myLatLng]-1);
				markerArray[offererjoin[uid][i]] = parseInt(markerArray[offererjoin[uid][i]]-1);
				if(markerArray[offererjoin[uid][i]] == 0) delete infoTexts[myLatLng][offererjoin[uid][i]];
				if (markerLatLng[myLatLng] == 0) {
					marker[myLatLng].setMap(null); 
					delete marker[myLatLng] ;
					delete infoTexts[myLatLng];
				}
			}
		}
		directionsDisplay.setMap(null);
	}
}	



jQuery(document).ready(function() { 

	//add class 'js' to body tag
	jQuery('body').addClass('js');
	
	// some functions
	jQuery.urlParam = function(name){
		var results = new RegExp('[\\?&/]' + name + '/([^&/#]*)').exec(window.location.href);
		if (results) return results[1] || 0;
	}

	if (jQuery('#quicksearch').length > 0) {
		jQuery('#quicksearchlabel').click(function(){
			//if (jQuery('body.homepage').length == 0) {
				if (parseInt(jQuery('#quicksearch').css('width')) == 0)  jQuery('#quicksearch').animate({ width: '940px' }, { queue:false, duration: 150 });
				else jQuery('#quicksearch').animate({ width: '0px' }, { queue:false, duration: 150 });
			//}
		});
	}

	
	jQuery('<div id="overlay"></div>').appendTo(jQuery('body'));
	jQuery('<div id="overlayBG"></div>').appendTo(jQuery('#overlay'));
	jQuery('<div id="overlayWindow"></div>').appendTo(jQuery('#overlay'));
	jQuery('<div id="overlayCloser"></div>').appendTo(jQuery('#overlayWindow')).click(function(){ jQuery.hideLoader(); });
	jQuery('<div id="loader"></div>').appendTo(jQuery('body'));
	
	jQuery('#zipcodeinput').focus(function(){
		if (jQuery(this).val() == 'Postleitzahl') jQuery(this).val('');
	}).blur(function() {
		if(jQuery(this).val() == '') jQuery(this).val('Postleitzahl');
	});
	jQuery('#addressinput').focus(function(){
		if (jQuery(this).val() == 'Straße') jQuery(this).val('');
	}).blur(function() {
		if(jQuery(this).val() == '') jQuery(this).val('Straße');
	});
	
	dontShowLayer = false;
	jQuery.showLoader = function(noloader) {
		if (!dontShowLayer) {
			jQuery('#overlay').fadeIn(100); //css('display', 'block');  //height: jQuery(window).height()+'px', width: jQuery(window).width()+'px', 
			if (!noloader) { 
				jQuery('#loader').appendTo(jQuery('body'))
				jQuery('#loader').css('background', 'url(loading.gif) no-repeat center center').css({top: (jQuery(window).height()/2)+'px', left: (jQuery(window).width()/2)+'px'}).show();
			}
		}
	}

	jQuery.hideLoader = function() {
		if (!dontShowLayer) {
			jQuery('#loader').hide(); 
			jQuery('#overlay').fadeOut(100);
			jQuery('#map_canvas').css('visibility', 'hidden').appendTo(jQuery('body'));
			jQuery('#iframe').remove();
			if (jQuery('#map_canvas').length > 0) jQuery('#showmap').show();
		}
	}
	
	popupWindow = function(url) {

		jQuery('#iframe').remove();
	
		var width = 940;
		var height = jQuery(window).height()-100;
		var left = (jQuery(window).width()-width) / 2;
		var top = (jQuery(window).height()/2) - (height/2);
		if (left < 0) left = 0;
		if (top < 0) top = 0;
		
		jQuery('#overlayCloser').hide().css('left', left+width-60).css('top', top-44);
		jQuery.showLoader(false);
		
		
		jQuery('<div id="iframe">').appendTo(jQuery('#overlayWindow'))
				.css({ position: 'absolute', width: width, height: height, left: left, top: top, display: 'none' });
		jQuery('<div class="popWindowCloser">').css({ top: '-27px' }).appendTo(jQuery('#iframe')).click(function(){ jQuery.closeIframe(); });
		jQuery('<iframe id="iframe_frame" name="iframe" border="0" frameborder="0">').attr('src', url).appendTo(jQuery('#iframe'))
				.css({ position: 'relative', width: width, height: height })
				.css('z-index', 10)
				.load(function() {
					jQuery('#loader').hide();
					jQuery('#overlayCloser').show()
					if (jQuery('#iframe').css('display') == 'none') {
						jQuery('#iframe').show();
						//jQuery(this).drawShadowBox({width: width, height: height, top: 0, left: 0, displayNow: true});
					}
				});
	} 
	
	
	if (jQuery('#showmap').length > 0) {
	
		//jQuery('#quicksearchlabel').css('cursor', 'default');
		
		form_offsetmarker = jQuery('#tx_okpa_formwrapper').offset().top;
		form_offsetmarkerleft = jQuery('#tx_okpa_formwrapper').offset().left;
		form_markerleft = jQuery('#tx_okpa_formwrapper').position().left;
		
		label_offsetmarker = jQuery('#quicksearchlabel').offset().top;
		label_offsetmarkerleft = jQuery('#quicksearchlabel').offset().left;
		label_markerleft = jQuery('#quicksearchlabel').position().left;
		
		jQuery(window).scroll(function () {
			if (jQuery('#tx_okpa_formwrapper').offset().top < jQuery(window).scrollTop()) {
				jQuery('#tx_okpa_formwrapper').css('position', 'fixed').css('top', 0).css('left', form_offsetmarkerleft); 	
				jQuery('#quicksearchlabel').css('position', 'fixed').css('top', '2px').css('left', label_offsetmarkerleft); 
			}
			if (jQuery(window).scrollTop() < form_offsetmarker) {
				jQuery('#tx_okpa_formwrapper').css('position', 'absolute').css('left', form_markerleft);
				jQuery('#quicksearchlabel').css('position', 'absolute').css('left', label_markerleft).css('top', label_offsetmarker);
			}
			
		});
		
		jQuery('#showmap').click(function() {	
				jQuery.showLoader(true);
				jQuery('#overlayCloser').css('left', jQuery(window).width()-107).css('top', 6).show();
				jQuery('#map_canvas').appendTo(jQuery('#overlayWindow')).css('visibility', 'visible');
				jQuery('#showmap').hide();
		});
		
		if (jQuery('body.homepage').length == 0) {
			jQuery('#quicksearchlabel').click(function(){	
				if (parseInt(jQuery('#tx_okpa_formwrapper').css('width')) == 0)  jQuery('#tx_okpa_formwrapper').animate({ width: '940px' }, { queue:false, duration: 150 });
				else jQuery('#tx_okpa_formwrapper').animate({ width: '0px' }, { queue:false, duration: 150 });
			});
		}
	}
	
	if (jQuery('#map_canvas').length > 0) {
		jQuery('#map_canvas').css('height' , (jQuery(window).height()-100)+'px').css('width', (jQuery(window).width()-100)+'px').css('left', '50px').css('top', '50px');
	}
	
	jQuery.set_selectFunction = function(functype) {
		var label = jQuery("#"+functype+" option:first").html();
		jQuery.ajax({
				type: "GET",
				url: "index.php",
				data: jQuery("#tx_okpa_search").serialize() + '&eID=ok_pa&func='+functype+'&label='+label,
				success:  function(data){
					if (data != '') {
						jQuery("#"+functype).html(data);
						//jQuery('body').html(data);
					}
				}
			});
	}
	
	jQuery.set_select_functions = function() {
		jQuery("#programmtype").change(function() {
			jQuery('#programm').val('');
			jQuery('#target').val('');
			jQuery('#offerertypes').val('');
			jQuery.set_selectFunction('programm');
			jQuery.set_selectFunction('target');
			jQuery.set_selectFunction('offerertypes');
		});
		
		jQuery("#programm").change(function() {
			jQuery('#target').val('');
			jQuery('#offerertypes').val('');
			jQuery.set_selectFunction('target');
			jQuery.set_selectFunction('offerertypes');
		});
		jQuery("#offerertypes").change(function() {
			jQuery('#target').val('');
			jQuery.set_selectFunction('target');
		});
	}
	jQuery.set_select_functions();
	
	
	jQuery(".k_offererlinks").each(function() {
	
		var this_id = jQuery(this).attr('id').replace('k_', '');
		var o_length = offererjoin[this_id].length;
		
		jQuery(this).children('a').click(function() {
			var url = jQuery(this).attr('href');
			popupWindow(url);
			return false;
		});
		
		var inputmap = jQuery('<div class="inputmap"></div>').appendTo(jQuery(this));
		
		jQuery('<input type="checkbox" id="c'+jQuery(this).attr('id')+'" /><label for="c'+jQuery(this).attr('id')+'">Zur Karte hinzufügen</label>').change(function() {
			var uid = jQuery(this).parent().parent().attr('id').replace('k_', '');
			if (jQuery(this).attr('checked') == true) addToMap(uid);
			else removeFromMap(uid);
		}).appendTo(inputmap);
			
	});
	
	if (jQuery('#map_canvas').length > 0) map_initialize(c_lat, c_lng);

	//if (typeof(offerer) == 'object') map_setMarkers(map, offerer);
	//if (typeof(locs) == 'object') map_setMarkers(map, locs);

});






