function GotoURL()
	{
		// based on the selected index, find the languages and add them as options to the language selection
		var selIndex = document.selectorForm.language.selectedIndex;
		if (selIndex > 0)
		{
			var url = document.selectorForm.language.options[selIndex].value;
			document.location.href = url;
		}
	}

	function inlineAlert(text) {
		document.getElementById("content_center_wide").style.opacity="0.4";
		document.getElementById('alert_Inline').style.display='block';
		var table = document.createElement("div");
		table.className="alert_Inline_box";
		var table_text = document.createElement("div");
		table_text.className = "alert_Inline_text";
		table_text.appendChild(document.createTextNode(text));
		var table_button = document.createElement("input");
		table_button.type = "button";
		table_button.value = "OK";
		table_button.className = "alert_Inline_button";
		table_button.onclick = new Function("document.getElementById('alert_Inline').style.display='none'; document.getElementById('content_center_wide').style.opacity='1';");
		table.appendChild(table_text);
		table.appendChild(table_button);
		$("alert_Inline").update(table);
		$("alert_Inline").className = "alert_Inline";
	}

	function getChoiceOfLocation(i_nom) {
		Effect.SlideDown('slidedown_demo');
		so.sourceLocation = locations[i_nom];
		sourceString = locations[i_nom].address;
		document.getElementById('fromAddress').value = locations[i_nom].address;
		dealer_loc_x = (locations[i_nom]).x; 
		dealer_loc_y = (locations[i_nom]).y;
		$("multipleLocations").style.display= "none";
		$("routeTable").style.display= "";
		so.getDealers();
		return;
	}

	function DealerLocator() {
		var translations = {start:errorStart_text,backToList:backToList_text,error1:error1_text,getMoreDealers:getMoreDealers_text};
		var url = url_text;
		var sourceString;		// Search String user entered
		var sourceLocation;		// Source Location resolved by webservice
		var sourceLocations;	// Source Locations resolved by webservice in case mulitple matches for sourceString were found
		///(Component.Fields.Item("link_config").Value(1)).Fields.Item("availableProdutGroup").Value.Count=link_config_number
		var availableProdutGroup = pgr_available_array; // Available product group
		var selectedProdutGroup;// Selected product group
		var selectedDealer;		// Select Dealer
		var numberOfDealers = numberOfDealers_number;
		
		if (typeof(_dealerLocator_prototype_called) == 'undefined') {
			_dealerlocator_prototype_called = true;
			DealerLocator.prototype.searchDealers	= searchDealers;
			DealerLocator.prototype.getDealers	= getDealers;
			DealerLocator.prototype.getMoreDealers	= getMoreDealers;
			DealerLocator.prototype.createDealerEntry	= createDealerEntry;
			DealerLocator.prototype.createMapEntry	= createMapEntry;
			DealerLocator.prototype.setDirections	= setDirections;
			DealerLocator.prototype.createRouting	= createRouting;
			DealerLocator.prototype.backToList	= backToList;
			DealerLocator.prototype.showDetails	= showDetails;
			DealerLocator.prototype.filterSearchResult	= filterSearchResult;
			DealerLocator.prototype.multipleLocations	= multipleLocations;

			DealerLocator.prototype.dealerList = new Hash();
			DealerLocator.prototype.productGroups = new Array();
		}
		
		function searchDealers(form) {
			var show_multiple_locations_popup = true;
			if ('enable_multiple_locations_popup' in window) {
         		if (enable_multiple_locations_popup == "No"){
		      		show_multiple_locations_popup = false;
            	}
        	}				

			Effect.SlideDown('slidedown_demo');
			numberOfDealers = numberOfDealers_number;
			selectedProdutGroup = "";
			var keys = so.dealerList.keys();
			for (  i=0 ; i < keys.size() ; i++){
				var key = keys[i];
				so.dealerList.unset(keys[i]);
			}
			if (form.from.value==""){
				inlineAlert(translations.start);
				document.getElementsByTagName("body")[0].style.cursor = "";
				return;
			} 
			this.sourceString=form.from.value;
			
			var params = new Object();
			params.address =this.sourceString;
			new Ajax.Request(url +  "location.jsp",
		 	{
				method:'get',
				parameters:params,
				onSuccess: function(transport){
					map.clearOverlays();
					source_Locations = (eval( "(" + transport.responseText + ")" )).locations;
					if (source_Locations.size() < 1) {
						initNullLocations();
						inlineAlert(noStartPoint_text);
						document.getElementsByTagName("body")[0].style.cursor = "";
					} else if ((source_Locations.size() > 1)&&(show_multiple_locations_popup)){
						so.sourceLocations = source_Locations;
						so.multipleLocations();			
					} else {
						so.sourceLocation = source_Locations[0];
						dealer_loc_x = so.sourceLocation.x;
						dealer_loc_y = so.sourceLocation.y;
						sourceString = source_Locations[0].address;
						document.getElementById('fromAddress').value = source_Locations[0].address;
						so.getDealers();
					}
					return;
			    	},
			    	onFailure: function(){ 
			    		Effect.SlideUp('slidedown_demo');
			    		inlineAlert(translations.error1); 
			    	}
			}
			);
			return;
    		}
		
		function multipleLocations() {
			Effect.SlideUp('slidedown_demo');
			locations = source_Locations;
    		                while ($('multipleLocationsTBODY').hasChildNodes()) {
   				$('multipleLocationsTBODY').removeChild($('multipleLocationsTBODY').firstChild);
  			}

			var tr = document.createElement("tr");
			var td = document.createElement("td");
			td.className = "multipleHits_head";
			td.appendChild(document.createTextNode(select_location_text));
			tr.appendChild(td);
			$('multipleLocationsTBODY').insert(tr);
			for (i = 0; i < locations.size(); i++) {
				var tr = document.createElement("tr");
				tr.id = i;
				var td = document.createElement("td");
				td.className = "multipleHits_odd";
				if (i % 2 == 0) {
					td.className = "multipleHits_even";
				}
				td.appendChild(document.createTextNode(locations[i].address));
                                                                tr.onclick = new Function("getChoiceOfLocation("+i+");");
				tr.appendChild(td);
				$('multipleLocationsTBODY').insert(tr);
			}
			$("multipleLocations").className = "multipleLocations";
			$("multipleLocations").style.display= "";
			$("routeTable").style.display= "none";
		}

		function getMoreDealers(){
			numberOfDealers = numberOfDealers + numberOfDealers_number;
			Effect.SlideDown('slidedown_demo');
			this.getDealers();
		}
		
		function getDealers(pgr){
  			var params = new Object();
			params.x = dealer_loc_x;
			params.y = dealer_loc_y;
			params.pgr = getPGR(); 
			params.numberOfDealers =numberOfDealers;
                                                var point = new GLatLng(dealer_loc_y,dealer_loc_x);
  			var marker = new GMarker(point);
  			map.addOverlay(marker);
          	                                document.getElementsByTagName("body")[0].style.cursor = "wait";
   			new Ajax.Request(url+ "dealers.jsp",
		  	{
		    		method:'get',
		    		parameters:params,
		    		onSuccess: function(transport){
			    		var dealers = eval( "(" + transport.responseText + ")" ).dealers;
			    		if (dealers.size()<1) {
						initNullLocations();
						inlineAlert(er_no_location_text);
						document.getElementsByTagName("body")[0].style.cursor = "";
						return;
					}
					while ($('dealerlist').hasChildNodes()) {
   						$('dealerlist').removeChild($('dealerlist').firstChild);
  					}
  						
					var tr = document.createElement("tr");
					var td = document.createElement("td");
					td.colSpan = '3';
					tr.appendChild(td);
					$('dealerlist').insert(tr);
  					
	   	      			var bounds = new GLatLngBounds();
					for (i=0 ; i < dealers.size() ; i++ ) {
						so.dealerList.set(dealers[i].KUNNR,dealers[i]);
						so.createDealerEntry(dealers[i]);
						so.createMapEntry(dealers[i], bounds);
					}
					var tr = document.createElement("tr");
					var td = document.createElement("td");
					td.colSpan = '3';
					var input = document.createElement("input");
					input.className = "Button";
					input.type = "submit";
					input.value = translations.getMoreDealers;
					input.onclick = new Function("so.getMoreDealers();setResizeDLIII();");
					td.appendChild(input);
					tr.appendChild(td);
					$('dealerlist').insert(tr);
	   	      		
					if(map.getBoundsZoomLevel(bounds)<=3){
						map.setCenter(new GLatLng(DeafultCoordinateX_number,DeafultCoordinateY_number), DeafultZoom_number);
					}else{
						map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
					}

					document.getElementsByTagName("body")[0].style.cursor = "";

	   	      			return;
				},
		    		onFailure: function(){ 
		    			Effect.SlideUp('slidedown_demo');
		    			inlineAlert(translations.error1);
		    			
		    		},
	    			onComplete: function(){
		    			$('routeTable').style.display= "";	
					Effect.SlideUp('slidedown_demo');
					setResizeDLIII();
	
				}
			}
			);
			return; 
	   	}
				
		function createDealerEntry(dealer) {
   			//Sidebar entry
			var tr = document.createElement("tr");
			tr.className ='dealerHeader';
			tr.height='40px';
			
			var div = document.createElement("div");
			div.className = 'dealerHeaderText';
			div.appendChild(document.createTextNode(dealer.NAME1));
			div.appendChild(document.createElement("br"));
			if (address_config.length != 6) {
				div.appendChild(document.createTextNode(dealer.LAND1 + " "));
				div.appendChild(document.createTextNode(dealer.PSTLZ + " "));
				div.appendChild(document.createTextNode(dealer.ORT01 + " "));
				div.appendChild(document.createTextNode(dealer.ORT02 + " "));
			} else {
				div.appendChild(document.createTextNode(eval(address_config[0]) + " "));
				div.appendChild(document.createTextNode(eval(address_config[1]) + " "));
				div.appendChild(document.createTextNode(eval(address_config[2]) + " "));
				div.appendChild(document.createTextNode(eval(address_config[3]) + " "));
			}
			
			var td = document.createElement("td");
			td.appendChild(div);
			tr.appendChild(td);
			document.getElementById("dealerlist").appendChild(tr);
			
			var trdetails = document.createElement("tr");
			var tddetails = document.createElement("td");
			tddetails.id = 'dealerDetails_' + dealer.KUNNR;
			tddetails.className='dealerDetails';
			tddetails.colSpan = '3';
			var divDetails = document.createElement("div");
			divDetails.className = 'dealer_details';
			if (address_config.length != 6) {
				divDetails.appendChild(document.createTextNode(dealer.STRAS + " " +dealer.HOUSE_NUM1));
			} else {
				divDetails.appendChild(document.createTextNode(eval(address_config[4]) + " " +eval(address_config[5])));
			}
			divDetails.appendChild(document.createElement("br"));
			divDetails.appendChild(document.createTextNode(dealer.TELF1));
			tddetails.appendChild(divDetails);
			var divAPGIcons = document.createElement("div");
			divAPGIcons .className = 'apgiconcontainer';
			var pgrs = dealer.PGR.split(",");
			for (j=0; j<pgrs.length; j++){
				var iconAPG = document.createElement("div");
				iconAPG.className = 'product_group'+ pgrs[j];
				divAPGIcons.appendChild(iconAPG);
			}
			tddetails.appendChild(divAPGIcons);
			trdetails.appendChild(tddetails);
			document.getElementById("dealerlist").appendChild(trdetails);
			var trExtLink = document.createElement("tr");
			trExtLink.style['text-align'] = 'right';
			var tdExtLink = document.createElement("td");
			tdExtLink.className='extLink';
			var linkDetails = document.createElement("a");
			linkDetails.style['color'] = 'red';
			linkDetails.appendChild(document.createTextNode(strDetailsLink_text));
			linkDetails.onclick=new Function('so.showDetails("'+dealer.KUNNR+'");');
			tdExtLink.appendChild(linkDetails);
			var show_routing = true;
			if ('enable_routing' in window) {
         				if (enable_routing != "Yes"){
		      			show_routing = false;
			            	}
		        	}
			if (show_routing){
				tdExtLink.appendChild(document.createTextNode("   |   "));
				var linkRoute = document.createElement("a");
				linkRoute.style['color'] = 'red';
				linkRoute.appendChild(document.createTextNode(strRouteLink_text));
				linkRoute.onclick=new Function('so.createRouting("'+dealer.KUNNR+'");setResizeDLIII();return false;');
				tdExtLink.appendChild(linkRoute);
			}

			trExtLink.appendChild(tdExtLink);
			document.getElementById("dealerlist").appendChild(trExtLink);
			var trspace = document.createElement("tr");
			var tdspace = document.createElement("td");
			tdspace.height='3px';
			trspace.appendChild(tdspace);
			document.getElementById("dealerlist").appendChild(trspace);
			return;
		}
		
		function createMapEntry(dealer, bounds){
			// MapEntry
			var point = new GLatLng(dealer.y,dealer.x);
			bounds.extend(point);
			var divTab1 = document.createElement("div");
			divTab1.className='mapInfo';
			var name1 = document.createElement("b");
			name1.appendChild(document.createTextNode(dealer.NAME1));
			divTab1.appendChild(name1);
			divTab1.appendChild(document.createElement("br"));
			if (address_config.length != 6) {
				divTab1.appendChild(document.createTextNode(dealer.STRAS +" " +dealer.HOUSE_NUM1));
				divTab1.appendChild(document.createElement("br"));
				divTab1.appendChild(document.createTextNode(dealer.LAND1+" "+ dealer.PSTLZ+" "+ dealer.ORT01+" "+ dealer.ORT02 ));
			} else {
				divTab1.appendChild(document.createTextNode(eval(address_config[4]) +" " +eval(address_config[5])));
				divTab1.appendChild(document.createElement("br"));
				divTab1.appendChild(document.createTextNode(eval(address_config[0])+" "+ eval(address_config[1])+" "+ eval(address_config[2])+" "+ eval(address_config[3]) ));
			}
			divTab1.appendChild(document.createElement("br"));
			divTab1.appendChild(document.createTextNode("Tel.: " + dealer.TELF1));
			divTab1.appendChild(document.createElement("br"));
			divTab1.appendChild(document.createElement("br"));
			var imgArrow = document.createElement("img");
			imgArrow.src = fuldaArrow_src_text;
			imgArrow.border='0';
			
			var aRoute = document.createElement("a");
			aRoute.href = '#';	
			aRoute.appendChild(document.createTextNode(route_here_text));
			aRoute.onclick=new Function('so.createRouting("'+dealer.KUNNR+'");setResizeDLIII();return false;');
			aRoute.appendChild(imgArrow);
			var show_routing = true;
			if ('enable_routing' in window) {
         		                        if (enable_routing != "Yes"){
		      		show_routing = false;
                        	                        }
                                	}
			if (show_routing){
				divTab1.appendChild(aRoute);
			}

			var divTab2 = document.createElement("div");
			divTab2.className='mapInfo';
			divTab2.appendChild(document.createTextNode("dieser Text ist noch zu definieren"));		
					
			var customIcon = new GIcon(G_DEFAULT_ICON);
			customIcon.image =fuldaLogoImage_text;
			customIcon.shadow =fuldaLogoShodowtext;
			customIcon.imageMap = imageMap_array;
			customIcon.iconAnchor = new GPoint(iconAnchor_number[0],iconAnchor_number[1]);
			customIcon.iconSize = new GSize(iconSize_number[0],iconSize_number[1]);
			customIcon.shadowSize = new GSize(shadowSize_number[0],shadowSize_number[1]);
		 	
			dealer.marker = new GMarker(point,{ icon:customIcon });
		 	
			GEvent.addListener(dealer.marker , "click", function() {
			//	dealer.marker.openInfoWindowTabs([new GInfoWindowTab(info_text_name,divTab1), new GInfoWindowTab(other_info_text,divTab2)]);
				dealer.marker.openInfoWindowTabs([new GInfoWindowTab(info_text_name,divTab1)]);
			//	dealer.marker.openInfoWindow(new GInfoWindowTab(info_text_name,divTab1));
			});
			
			map.addOverlay(dealer.marker);
			return;
		}
		
		function showDetails(KUNNR){
			var dealer = window.so.dealerList.get(KUNNR);
			GEvent.trigger(dealer.marker, "click");
			map.setCenter(new GLatLng(window.so.dealerList.get(KUNNR).y,window.so.dealerList.get(KUNNR).x), 16);
		}
		
		function createRouting(KUNNR){
    			while ($('dealerlist').hasChildNodes()) {
				$('dealerlist').removeChild($('dealerlist').firstChild);
			}
			
			var dealer = window.so.dealerList.get(KUNNR);
			so.createDealerEntry(dealer);
			$('dealerDetails_'+KUNNR).className='dealerDetails';
		  	
			var tr = document.createElement("tr");
			var td = document.createElement("td");
			td.colSpan = '3';
			var input = document.createElement("input");
			input.className = "Button";
			input.type = "submit";
			input.value = translations.backToList;
			input.onclick = new Function("so.backToList();setResizeDLIII();");
			td.appendChild(input);
			tr.appendChild(td);		
			$('dealerlist').insert(tr);

			tr = document.createElement("tr");
			td = document.createElement("td");
			td.colSpan = '5';
			tr.appendChild(td);		
			$('dealerlist').insert(tr);

			tr = document.createElement("tr");
			tr.className = "dealerHeader";
			td = document.createElement("td");
			var divElem = document.createElement("div");
			divElem.className = "dealerlistTitle";
			divElem.appendChild(document.createTextNode(route_text));
			td.appendChild(divElem);
			divElem = document.createElement("div");
			divElem.className = "dealerlistPrint";
			divElem.appendChild(document.createTextNode(""));

			var destAddress = escape(dealer.STRAS+" "+dealer.HOUSE_NUM1+" "+ dealer.ORT01+" "+dealer.ORT02+"@"+dealer.y+","+dealer.x);
			var fromAddress =  escape(so.sourceLocation.address+"@"+dealer_loc_y+","+dealer_loc_x);

			divElem.onclick = new Function("window.open('print.jsp?fromAddress="+fromAddress+"&destAddress="+destAddress+"','_blank');");
			td.appendChild(divElem);			
			tr.appendChild(td);
			$('dealerlist').insert(tr);

			tr = document.createElement("tr");
			td = document.createElement("td");

			td.colSpan = '3';
			td.id = 'directions';
			td.className = 'directions';
			tr.appendChild(td);
			$('dealerlist').insert(tr);
			window.so.setDirections(dealer.NAME1+ "@"+dealer.y+","+dealer.x );
			return;
   		}

   		function setDirections(toAddress) {
   			if (typeof gdir=='undefined'){
   				gdir = new GDirections(map, document.getElementById("directions"));
   			} else {
   				gdir.clear();
   				gdir = null;
   				gdir = new GDirections(map, document.getElementById("directions"));
   			}
   		
			GEvent.addListener(gdir, "load", function() { 
			} );

			GEvent.addListener(gdir, "addoverlay", function() { 
				setResizeDLIII();
			} );

   			GEvent.addListener(gdir, "error",function() {
				alert(G_GEO_UNKNOWN_ADDRESS); //////////////////////////////////////////
				if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
					inlineAlert(GEO_UNKNOWN_ADDRESS_text + gdir.getStatus().code);
				else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
					inlineAlert(GEO_SERVER_ERROR_text + gdir.getStatus().code);
				else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
					inlineAlert(GEO_MISSING_QUERY_text + gdir.getStatus().code);
				//else if (gdir.getStatus().code == G_UNAVAILABLE_ADDRESS)  <--- Doc bug... this is either not defined, or Doc is wrong
				//	inlineAlert("The geocode for the given address or the route for the given directions query cannot be returned due to legal or contractual reasons.\n Error code: " + gdir.getStatus().code);
				else if (gdir.getStatus().code == G_GEO_BAD_KEY)
					inlineAlert(GEO_BAD_KEY_text + gdir.getStatus().code);
				else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
					inlineAlert(GEO_BAD_REQUEST_text + gdir.getStatus().code);
				else inlineAlert(GEO_UNKNOWN_ERROR_text);
			});
			gdir.load("from: " + so.sourceLocation.address + "@" + dealer_loc_y + "," + dealer_loc_x + " to: " + toAddress ,{ "locale" : countries_text });
		}

		function backToList(){
			gdir.clear();
			while ($('dealerlist').hasChildNodes()) {
   				$('dealerlist').removeChild($('dealerlist').firstChild);
  			}
			var bounds = new GLatLngBounds();
			var dealers = this.dealerList.values();
			for (i = 0; i < dealers.size(); i++) {
				so.createDealerEntry(dealers[i]);
				so.createMapEntry(dealers[i], bounds);
			}
			
			var tr = document.createElement("tr");
			var td = document.createElement("td");
			td.colSpan = '3';
			var input = document.createElement("input");
			input.className = "Button";
			input.type = "submit";
			input.value = translations.getMoreDealers;
			input.onclick = new Function("so.getDealers();");
			td.appendChild(input);
			tr.appendChild(td);
			$('dealerlist').insert(tr);
			
			map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds)); 
		}

		function filterSearchResult(filter){
			Effect.SlideDown('slidedown_demo');
			var keys = so.dealerList.keys();
			for (  i=0 ; i < keys.size() ; i++){
				var key = keys[i];
				so.dealerList.unset(keys[i]);
			}
			selectedProdutGroup = filter;
			while ($('dealerlist').hasChildNodes()) {
				$('dealerlist').removeChild($('dealerlist').firstChild);
			}
			map.clearOverlays();
			so.getDealers();
		}
	}

// Call this function when the page has been loaded
	function initialize() {
		checkSafariVersion();
		map = new GMap2(document.getElementById("map_canvas"));
		map.setCenter(new GLatLng(DeafultCoordinateX_number,DeafultCoordinateY_number), DeafultZoom_number);
		map.setMapType(G_NORMAL_MAP);
		map.addControl(new GMapTypeControl());
		map.addControl(new GLargeMapControl());
		map.addControl(new GOverviewMapControl());
	}

	function initNullLocations() {
		map.setCenter(new GLatLng(DeafultCoordinateX_number,DeafultCoordinateY_number), DeafultZoom_number);
		map.setMapType(G_NORMAL_MAP);
		while ($('dealerlist').hasChildNodes()) {
			$('dealerlist').removeChild($('dealerlist').firstChild);
		}
		document.getElementById("nav_bottom").style.height="610px";
		document.getElementById("content_center_wide").style.height="610px";
		Effect.SlideUp('slidedown_demo');
	}

////setResizeDL3 for DealerLocator III
	function setResizeDLIII(){
		var cEl = document.getElementById("content_center_wide");
		var nEl = document.getElementById("nav_bottom");
		var crElHeight = document.getElementById("routeTable").offsetHeight + document.getElementById("marketingBox").offsetHeight + 15;
		var crElHeight = document.getElementById("routeTable").offsetHeight;
		crElHeight = crElHeight + document.getElementById("marketingBox").offsetHeight;
		crElHeight = crElHeight + 15;
		var screenHeight = 690;
		if(crElHeight>screenHeight) 
		screenHeight = crElHeight;
		cEl.style.height = screenHeight + "px";
		nEl.style.height = screenHeight + "px";
		cEl.style.height = screenHeight + "px";
		nEl.style.height = screenHeight + "px";
	}

	function checkSafariVersion() {
		var ua = navigator.userAgent.toLowerCase();
		var isSafari = (ua.indexOf('safari') != - 1);
		var versionMinor;
                		if (isSafari) {
			versionMinor = parseFloat( ua.substring( ua.lastIndexOf('safari/') + 7 ) );
	 		versionMajor = parseInt(versionMinor);
		 	if (versionMajor<400){
				document.getElementById("alertBox").style.display="block";		 
	 		}
 		}
 	}
