var map = null;
var geocoder = null;
var direction = null;
var start = null;
var requests = 0;

dojo.addOnLoad(function() {
	dojo.require("dojo.parser");
	dojo.require("dijit.Dialog");
	dojo.require("dijit.form.Button");
	dojo.require("dojo.fx");
	start = readCookie('adress');
	if (start == '') start = null;
	if (start != null) {
		getDistances();
	}
	
	dojo.query('.infos').style("display", "none");
});

var wipeOpen = new Array;

function wipe(div) {
	if (typeof wipeOpen[div] == "undefined" || wipeOpen[div] == false) {
		var animation = dojo.fx.wipeIn({node: 'more' + div, duration: 1000});
		wipeOpen[div] = true;
	} else {
		var animation = dojo.fx.wipeOut({node: 'more' + div, duration: 1000});
		wipeOpen[div] = false;
	}
	animation.play();
}

function showMapAdress(firmName, firmAdress, coordLat, coordLng) {
	dijit.byId('dialog_gmaps').titleNode.innerHTML = firmName;
	dijit.byId('dialog_gmaps').show();
	
	if (map == null && GBrowserIsCompatible()) {
		map = new GMap2(dojo.byId("gm_canvas"));
		map.setCenter(new GLatLng(48.191268, 11.613922), 14);
		map.addControl(new GLargeMapControl());
		geocoder = new GClientGeocoder();
	} else {
		map.clearOverlays();	
	}
	map.addControl(new GMapTypeControl());
	map.addControl(new GLargeMapControl());
	map.setMapType(G_HYBRID_MAP);
	
	if (coordLat != 0) {
		setMarker(firmName, firmAdress, new GLatLng(coordLat, coordLng), true);
	} else {
		if (geocoder != null) {
			geocoder.getLatLng(
				firmAdress,
				function(point) {
					if (!point) {
						map.setCenter(new GLatLng(48.191268, 11.613922), 7);
						map.openInfoWindowHtml(map.getCenter(), '<div style="float: left; width: 35px; height: 50px; background: url(' + config.baseTemplateUrl + 'images/error.png) no-repeat;"></div><div>Die gesuchte <strong>Firmenadresse</strong><br /><div style="text-indent: 10px;">' + firmAdress + '</div>wurde leider <strong>nicht gefunden</strong>.</div>');
						map.panTo(new GLatLng(48.391268, 11.613922));
					} else {
						setMarker(firmName, firmAdress, point, false);
					}
				}
			);
		}
	}
}



function setMarker(firmName, firmAdress, point, is_coord) {
	map.setCenter(point, 14);
	var marker = new GMarker(point);
	GEvent.addListener(marker, "click", function() {
		var html = '<strong>' + firmName + '</strong><br />' + firmAdress + '<br /><br /><strong>Route</strong><br />';
		if (start != null) {
			html += 'von <a href="http://maps.google.com/maps?saddr=' + start + '&amp;daddr=' + firmAdress + '" target="_blank">' + start + '</a>';
		}
		
		html += '<form action="http://maps.google.com/maps" method="get" target="_blank" onSubmit="createCookie(\'adress\', dojo.byId(\'saddr\').value, 365)">' +
			  'von <input type="text" name="saddr" size="25" />' +
			  '<input type="hidden" name="daddr" value="' + firmAdress + '" /> ' +
			  '<input type="submit" value="Los" />' +
			'</form>';
		
		if (is_coord == true) {
			html += ''; //can throw warning here, that company adress differs from marker position due to moved marker
		}

		marker.openInfoWindowHtml(html);
	});
	map.addOverlay(marker);
	GEvent.trigger(marker, "click");	
}

function getDistances() {
	if (start != null) {
		dojo.query(".distance").forEach(
			function(distDiv) {
				window.setTimeout('requestDistance("'+start+'", "'+distDiv.innerHTML+'", "'+distDiv.id+'");', requests*250);
				requests = requests + 1;
		});
	}
}

function requestDistance(start_adress, target_adress, distDiv) {
	if (direction == null) {
		var direction = new GDirections();
	}
	
	distDiv = dojo.byId(distDiv);
	
  	GEvent.addListener(direction,"error", function() {
		distDiv.innerHTML = "Failed: "+direction.getStatus().code;
  	});

  	GEvent.addListener(direction,"load", function() {
    	distDiv.innerHTML = direction.getDistance().html + '<br />(' + direction.getDuration().html + ')';
		distDiv.style.display = 'block';
  	});
	
	direction.load('from: ' + start_adress + ' to: ' + target_adress);
}


function showMore(firmName, street, street_number, zip, city, phone_code, phone, fax_code, fax, website, email, description, image) {
	dijit.byId('dialog_firm').titleNode.innerHTML = 'Details zu ' + firmName;
	dojo.byId('df_field').innerHTML = '<div style="float: right;"><img src="' + image + '" alt="Firmenlogo von ' + firmName + '" /></div>' + '<strong>' + firmName + '</strong><br />' + street + ' ' + street_number + '<br />' +
		zip + ' ' + city + '<br /><br />' +
		'Telefon: ' + phone_code + ' / ' + phone + '<br />' +
		'Fax: ' + fax_code + ' / ' + fax + '<br /><br />' +
		'E-Mail: <a href="mailto:' + email + '">' + email + '</a><br /><br />' +
		'Webseite: <a href="' + website + '">' + website + '</a><br /><br />' +
		'Beschreibung:<br />' + description;
	dijit.byId('dialog_firm').show();
}

function save_adress() {
	if (geocoder == null) {
		geocoder = new GClientGeocoder();
	}

	geocoder.getLocations(
		dojo.byId('user_adress').value,
		function(objadress) {
			if (objadress.Status.code == 602) {
				alert(dojo.byId('user_adress').value + ' kann leider nicht gefunden werden.');
				return false;
			} else {
				start = dojo.byId('user_adress').value;
				createCookie('adress', start, 365);
				
				if (objadress.Placemark[0].AddressDetails.Accuracy > 4) {
					var zip = objadress.Placemark[0].AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber;
					createCookie('adress_zip', zip, 365);
				}
				
				dojo.byId('user_adress_span').innerHTML = start;
				window.location.reload();
			}
		}
	);
}