var dict = new Hash();
var regions_pos = new Hash();
var regions_markers = new Hash();

var browser = navigator.appName;
var b_version = navigator.appVersion;
var version = parseFloat(b_version);

var offset = new GSize(2, 2);
var map;

var finished_loading = false;

function searchBlurred(element) {
      if (element.value == ''){
        value = getValue('search');
      }
	setTimeout("showSuggestions('none');", 100);
    }

function loadUrl(url, cities_only) {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        map.setCenter(new GLatLng(48.69096039092549, 19.632568359375), 8);
		map.enableScrollWheelZoom();

		GDownloadUrl(url, function(data) {
			var xml = GXml.parse(data);
			var markers = xml.documentElement.getElementsByTagName("marker");
			var companies_select = "";

			var bounds = new GLatLngBounds();
			var print_el_text = "";
			for (var i = 0; i < markers.length; i++) {
				var id = markers[i].getAttribute("id");
				var name = markers[i].getAttribute("name");
				var address = markers[i].getAttribute("address");
				var website = markers[i].getAttribute("website");
				var region = markers[i].getAttribute("region");
				var mail = markers[i].getAttribute("mail");
				var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
										parseFloat(markers[i].getAttribute("lng")));
				var spheres = markers[i].getAttribute("sphere").split(";");
				for (var n = 0; n < spheres.length; n++) {
					/*if (spheres[n] == document.sphere_form.domestic_chb.value) spheres[n] = "Domáce chladenie";
					else if (spheres[n] == document.sphere_form.industrial_chb.value) spheres[n] = "Priemyselné chladenie";
					else if (spheres[n] == document.sphere_form.heatpumps_chb.value) spheres[n] = "Tepelné čerpadlá";
					else if (spheres[n] == document.sphere_form.commercial_chb.value) spheres[n] = "Chladiaci nábytok";
					else if (spheres[n] == document.sphere_form.airconditioning_chb.value) spheres[n] = "Klimatizačná technika";
					else if (spheres[n] == document.sphere_form.components_chb.value) spheres[n] = "Súčasti a agregáty";*/
					spheres[n] = dict.get(spheres[n]);
				}
				var html = "<b><a href=\"../a/home/" + id + "\">" + name + "</a></b> <br/>" + address;
				if (website != '') {
					html += "<br>" + dict.get('website') + ": <a target=\"_blank\" href=\"";
					if (!website.startsWith("http://")) html += "http://";
					html += website + "\">" + website + "</a>";
				}
				if (mail != '') {
					html += "<br>" + dict.get('mail') + ": <a href=\"mailto:" + mail + "\">" + mail + "</a>";
				}
				html += "<br />" + dict.get('sphere') + ": " + spheres.join(", ");
				if (cities_only) { html = region; };
				regions_pos.set(point.lat() + point.lng(), html);
				var marker = createMarker(point, html);
				regions_markers.set(point.lat() + point.lng(), marker);
				if (cities_only) {
					GEvent.addListener(marker, 'mouseover', function(latlng) {
						regions_markers.get(latlng.lat() + latlng.lng()).openInfoWindowHtml(dict.get('region') + ": <b>" + regions_pos.get(latlng.lat() + latlng.lng()) + "</b>", { pixelOffset: offset });
					});
					GEvent.addListener(marker, 'mouseout', function(latlng) {
						regions_markers.get(latlng.lat() + latlng.lng()).closeInfoWindow();
					});
					GEvent.addListener(marker, 'click', function(latlng) {
						loadWithRegion(regions_pos.get(latlng.lat() + latlng.lng()));
					});
				}
				map.addOverlay(marker);
				companies_select += "\t<h4><a href=\"#\" onclick=\"zoomTo(" + point.lat() + ", "+ point.lng() + ",'" + name + "', ''); return false;\">" + name + "</a></h4>\n";
				companies_select += "\t" + address + "<br>\n";
				bounds.extend(point);
				if (markers.length == 1) {
					marker.openInfoWindowHtml(html);
				}
				print_el_text += "<div>" + html + "<hr />" + "</div>";
			}
			
			if (!cities_only) $("companies_tag").update(companies_select);

			if (markers.length) {
				map.setZoom(map.getBoundsZoomLevel(bounds));
				map.setCenter(bounds.getCenter());
				last_center = bounds.getCenter();
			}
			$('print_el').hide();
			$('print_el').update(print_el_text);
		});
	}
}

function load(company_name_, region_) {
	var region = region_.replace(/[^a-zA-Z%]/g, '_');
	var company_name = company_name_.replace(/[^a-zA-Z%]/g, '_');
	if (region_ == "Všetky") { region = ""; }
	var spheres = new Array();
	if (document.sphere_form.all_chb.checked) spheres.push(document.sphere_form.all_chb.value);
	else {
		if (document.sphere_form.domestic_chb.checked) spheres.push(document.sphere_form.domestic_chb.value);
		if (document.sphere_form.industrial_chb.checked) spheres.push(document.sphere_form.industrial_chb.value);
		if (document.sphere_form.heatpumps_chb.checked) spheres.push(document.sphere_form.heatpumps_chb.value);
		if (document.sphere_form.commercial_chb.checked) spheres.push(document.sphere_form.commercial_chb.value);
		if (document.sphere_form.airconditioning_chb.checked) spheres.push(document.sphere_form.airconditioning_chb.value);
		if (document.sphere_form.components_chb.checked) spheres.push(document.sphere_form.components_chb.value);
	}

	loadUrl("genxml.php?company=" + company_name + "&region=" + region + "&spheres=" + spheres.join(";"));
}

function zoomTo(lat, lng, company_name_, region_) {
	regions_markers.get(lat + lng).openInfoWindowHtml(regions_pos.get(lat + lng));
	map.setCenter(new GLatLng(lat, lng), 18);
}

function loadAdvertised() {
	loadUrl("genxml.php?company=&region=&spheres=&advertised=" + "1");
}

function loadCities() {
	loadUrl("genxml.php?cities=" + "1", true);
}

function createMarker(point, html) {
	var marker = new GMarker(point);
	GEvent.addListener(marker, 'click', function() {
		marker.openInfoWindowHtml(html);
	});
	return marker;
}

function search() {
	load(document.search_form.search.value, '');
}

function checkIE() {
}

function loadWithRegion(region) {
	if (region) {
		load('', region);
	}
	var options_reg = document.regions_form.list_regions.options;
	for (var i = 0; i < options_reg.length; ++i) {
		if (region) {
			if (region == (o = options_reg[i]).text) {
				o.selected = true;
				return;
			}
		} else if ((o = options_reg[i]).selected) {
			load('', o.text);
			return;
		}
	}
	if (!region) load('', '');
}

function checkboxesChanged(value) {
	if (value == "all") {
		if (document.sphere_form.all_chb.checked) {
			for (var i = 1; i < document.sphere_form.elements.length; i++ ) {
        		if (document.sphere_form.elements[i].type=="checkbox") {
					document.sphere_form.elements[i].checked = true;
				}
            }
		}
	} else {
		var all_checked = true;
		for (var i = 1; i < document.sphere_form.elements.length; i++ ) {
        	if (document.sphere_form.elements[i].type=="checkbox" && !document.sphere_form.elements[i].checked) {
				all_checked = false;
			}
        }
		if (all_checked) {
			document.sphere_form.all_chb.checked = true;
		} else {
			document.sphere_form.all_chb.checked = false;
		}
	}
	
}

function printSelection() {
	var newWindow
	newWindow = window.open("","Tlač","status,width=500,height=500")
    if (!newWindow.opener) {
        newWindow.opener = window;
    }
	var html = "<!DOCTYPE html>\n<html>\t<head>\t\t<title>Tlač</title>\t</head>\t<body onLoad=\"setTimeout('this.print()', 500)\">\t\t";
	html += $('print_el').innerHTML;
	html += "\t</body>\n</html>";
	newWindow.document.write(html);
    newWindow.document.close();
	/*setTimeout('newWindow.print()',50)
	newWindow.print();
	newWindow.close();*/
}

function loadDict(lang) {
	if (lang == "sk") {
		dict.set("company", "Firma");
		dict.set("region", "Okres");
		dict.set("sphere", "Oblasť zamerania");
		dict.set("all", "Všetky");
		dict.set("domestic", "Domáce chladenie");
		dict.set("industrial", "Priemyselné chladenie");
		dict.set("heatpumps", "Tepelné čerpadlá");
		dict.set("commercial", "Chladiaci nábytok");
		dict.set("airconditioning", "Klimatizačná technika");
		dict.set("components", "Súčasti a agregáty");
		dict.set("search", "Hľadať");
		dict.set("print", "Tlačiť výber");
		dict.set("website", "Webová stránka");
		dict.set("mail", "E-mail");
		dict.set("choose_region", "Vyberte okres");
	} else {
		dict.set("company", "Company");
		dict.set("region", "Region");
		dict.set("sphere", "Sphere of activity");
		dict.set("all", "All");
		dict.set("domestic", "Domestic cooling");
		dict.set("industrial", "Industrial cooling");
		dict.set("heatpumps", "Heat pumps");
		dict.set("commercial", "Commercial cooling");
		dict.set("airconditioning", "AC technique");
		dict.set("components", "Components");
		dict.set("search", "Search");
		dict.set("print", "Print selection");
		dict.set("website", "Website");
		dict.set("mail", "E-mail");
		dict.set("choose_region", "Choose a region");
	}
}

function translate(lang) {
	loadDict(lang);
	var elements = $$("span");
	for (var i = 0; i < elements.length; i++) {
		if (elements[i].hasAttribute('dict_key'))
			elements[i].update(dict.get(elements[i].readAttribute('dict_key')));
	}
	elements = $$("input");
	for (var i = 0; i < elements.length; i++) {
		if (elements[i].hasAttribute('dict_key'))
			elements[i].writeAttribute('value', dict.get(elements[i].readAttribute('dict_key')));
	}
}

function getValue(str) {
	return dict.get(str);
}

var docEl = document.documentElement,
IS_BODY_ACTING_ROOT = docEl && docEl.clientHeight === 0;
docEl = null;

function isDocumentElementHeightOff(){ 
      var d = document,
          div = d.createElement('div');
      div.style.height = "2500px";
      d.body.insertBefore(div, d.body.firstChild);
      var r = d.documentElement.clientHeight > 2400;
      d.body.removeChild(div);
      return r;
  }

function getWinHeight() {
   var iHeight = 0;

	if (browser=="Microsoft Internet Explorer") iHeight = parseInt(document.documentElement.clientHeight, 10);
	else iHeight = parseInt(window.innerHeight, 10);

   return iHeight;
}

function resizeMap() {
	var map = $("map");
	if (map) {
		var width = $("top_nav").getWidth() - 243;
		var height = getWinHeight() - 25;
		map.setStyle({ width: (width) + "px", height: (height - 4) + "px" });
		$("left_nav").setStyle({ height: (height) + "px" });
	}
}

function searchChanged(value) {
	if (!value) {
		$("search_suggestions").update("");
		showSuggestions("none");
		return;
	}
	new Ajax.Request("companies_select.php?name=" + value, {
		onSuccess: function(response) {
			var suggs = "";
			
			response = $H(response.responseJSON);
			response.each(function(pair) {
				suggs += "<li><a href=\"#\" onclick=\"suggestionClicked('" + pair.value + "'); return false;\">" + pair.value + "</a></li>\n";
			});
			
			if (suggs != "") {
				$("search_suggestions").update("<ul>\n" + suggs + "</ul>\n");
				showSuggestions("block");
			} else showSuggestions("none");
		}
	});
}

function suggestionClicked(val) {
	document.search_form.search.value = val;
	$("search_suggestions").update("");
	load(val, '');
	showSuggestions("none");
}

function showSuggestions(show) {
	$("search_suggestions").setStyle({
	     display: show
	   });
}

