// GOOGLE MAPS AND LOCALIZATION FORM FUNCTIONS

var http_request;
var xmlObj;


// Traffic Info Overlay
function TIOverlay(data)
{
 this.data_ = data;
}

TIOverlay.prototype = new GOverlay();

TIOverlay.prototype.initialize = function(map) {
 var div = document.createElement("div");
 div.innerHTML = '<img src="http://mjam.hu/images/pms/' + this.data_[6] + '">';
 div.style.position = "absolute";
 map.getPane(G_MAP_MAP_PANE).appendChild(div);
 this.map_ = map;
 this.div_ = div;
}

TIOverlay.prototype.remove = function() {
 this.div_.parentNode.removeChild(this.div_);
}

TIOverlay.prototype.copy = function() {
 return new TIOverlay(this.data_);
}

TIOverlay.prototype.redraw = function(force) {
 if (!force) return;
 var c1 = this.map_.fromLatLngToDivPixel(new GLatLng(parseFloat(this.data_[4]), parseFloat(this.data_[5])));
 var c2 = this.map_.fromLatLngToDivPixel(new GLatLng(parseFloat(this.data_[2]), parseFloat(this.data_[3])));
 this.div_.style.width = this.data_[0] + "px";
 this.div_.style.height = this.data_[1] + "px";
 this.div_.style.left = Math.min(c2.x, c1.x) + "px";
 this.div_.style.top = Math.min(c2.y, c1.y) + "px";
}

function create_TIOverlay(layerdata)
{
 var layer = new TIOverlay(layerdata);
 return layer;
}


// a legördülő menü (város, út) letiltása / engedélyezése
function set_localization_form_availability(condition)
{
 var value = !condition;
 document.getElementById('localization_form_submit').disabled = value;
 document.getElementById('localization_form_top_select').disabled = value;
 if (document.getElementById('localization_form_cities_select') != null)
 {
  document.getElementById('localization_form_cities_select').disabled = value;
 }
 if (document.getElementById('localization_form_cityparts_select') != null)
 {
  document.getElementById('localization_form_cityparts_select').disabled = value;
 }
 if (document.getElementById('localization_form_roads_select') != null)
 {
  document.getElementById('localization_form_roads_select').disabled = value;
 }
 if (document.getElementById('navi_buttons') != null)
 {
  var navi_buttons = document.getElementById('navi_buttons');
  var buttons = navi_buttons.getElementsByTagName('button');
  for(var i = 0; i < buttons.length; i++)
  {
   buttons[i].disabled = value;
  }
  document.getElementById('only_infos_checkbox').disabled = value;
 }
}

// a legördülő menü tetejének kezelője
function localization_form_top_select_handler()
{
 // kitöröljük az alatta lévő sorokat, ha vannak
 var localization_form_table = document.getElementById('localization_form_table');
 while (localization_form_table.rows.length > 2)
 {
  localization_form_table.deleteRow(localization_form_table.rows.length-2);
 }
	var localization_form_top_select = document.getElementById('localization_form_top_select');
	var myoption = localization_form_top_select.options[localization_form_top_select.selectedIndex];
 set_localization_form_availability(false);
 if (myoption.value == 'cities')
 {
  if (localization_form_top_select.options[0].value == '') localization_form_top_select.options[0] = null;
  send_dataserv_request('cmd=select_cities');
 } else if (myoption.value == 'roads') {
  if (localization_form_top_select.options[0].value == '') localization_form_top_select.options[0] = null;
  send_dataserv_request('cmd=select_roads');
 } else {
  set_localization_form_availability(true);
 	document.getElementById('localization_form_submit').disabled = true;
 }
}

// a legördülő menüben a városválasztás kezelője
function localization_form_cities_select_handler()
{
 // kitöröljük az alatta lévő sort, ha van
	var localization_form_table = document.getElementById('localization_form_table');
 if (document.getElementById('localization_form_cityparts_select') != null)
 {
  localization_form_table.deleteRow(localization_form_table.rows.length - 2);
 }
	var localization_form_cities_select = document.getElementById('localization_form_cities_select');
	var oOption=localization_form_cities_select.options[localization_form_cities_select.selectedIndex];
 set_localization_form_availability(false);
 if (localization_form_cities_select.options[0].value == '') localization_form_cities_select.options[0] = null;
 send_dataserv_request('cmd=select_cityparts&id=' + oOption.value);
}

// a legördülő menüben a város selectet generálja le
function localization_form_cities_handler()
{
	var localization_form_table = document.getElementById('localization_form_table');
 trElem = localization_form_table.insertRow(localization_form_table.rows.length - 1);
 tdElem = trElem.insertCell(trElem.cells.length);
 tdElem.innerHTML = '<select name="city" id="localization_form_cities_select" onchange="javascript:localization_form_cities_select_handler();"></select>';
	var cities = xmlObj.getElementsByTagName('city');
	var localization_form_cities_select = document.getElementById('localization_form_cities_select');
	for (var i = 0; i < cities.length; i++)
	{
		var cityid = cities[i].getAttribute('id');
		var cityname = cities[i].getAttribute('name');
		ujelem = new Option(cityname, cityid);
		ujelem.innerHTML = cityname;
		localization_form_cities_select.appendChild(ujelem);
	}
	ujelem = new Option('', '', true);
	ujelem.innerHTML = '';
	localization_form_cities_select.insertBefore(ujelem, localization_form_cities_select.options[0]);
	localization_form_cities_select.options[0].selected = true;
 set_localization_form_availability(true);
 // ilyenkor még nem submitolhatunk!
 document.getElementById('localization_form_submit').disabled = true;
}

// a legördülő menüben a kerület selectet generálja le
function localization_form_cityparts_handler()
{
	var localization_form_table = document.getElementById('localization_form_table');
 trElem = localization_form_table.insertRow(localization_form_table.rows.length - 1);
 tdElem = trElem.insertCell(trElem.cells.length);
 tdElem.innerHTML = '<select name="citypart" id="localization_form_cityparts_select"></select>';
	var cityparts = xmlObj.getElementsByTagName('citypart');
	var localization_form_cityparts_select = document.getElementById('localization_form_cityparts_select');
 for (var i = 0; i < cityparts.length; i++)
	{
		var citypartid = cityparts[i].getAttribute('id');
		var citypartname = cityparts[i].getAttribute('name');
		ujelem = new Option(citypartname, citypartid);
		ujelem.innerHTML = citypartname;
  localization_form_cityparts_select.appendChild(ujelem);
	}
	ujelem = new Option('', '', true);
	ujelem.innerHTML = 'Mind';
	localization_form_cityparts_select.insertBefore(ujelem, localization_form_cityparts_select.options[0]);
	localization_form_cityparts_select.options[0].selected = true;
 set_localization_form_availability(true);
}

// a legördülő menüben az út selectet generálja le
function localization_form_roads_handler()
{
	var localization_form_table = document.getElementById('localization_form_table');
 trElem = localization_form_table.insertRow(localization_form_table.rows.length - 1);
 tdElem = trElem.insertCell(trElem.cells.length);
 tdElem.innerHTML = '<select name="road" id="localization_form_roads_select"></select>';
	var roads = xmlObj.getElementsByTagName('road');
	var localization_form_roads_select = document.getElementById('localization_form_roads_select');
	for (var i = 0; i < roads.length; i++)
	{
		var roadid = roads[i].getAttribute('id');
		var roadname = roads[i].getAttribute('name');
		ujelem = new Option(roadname, roadid);
		ujelem.innerHTML = roadname;
  localization_form_roads_select.appendChild(ujelem);
	}
 set_localization_form_availability(true);
}

// a legördülő menü elküldése ("Mutasd!"), PM-ek frissítésének indítása a térképen
function localization_form_submit()
{
 if (document.getElementById('localization_form_submit').disabled == false)
 {
  set_localization_form_availability(false);
  if (document.getElementById('localization_form_cityparts_select') != null)
	 {
   var citypart = document.getElementById('localization_form_cityparts_select');
   if (citypart.selectedIndex == 0)
   {
			 var city = document.getElementById('localization_form_cities_select');
 			mygmap_refresh_pms('cmd=map_city&id=' + city.options[city.selectedIndex].value);
   } else {
 			mygmap_refresh_pms('cmd=map_citypart&id=' + citypart.options[citypart.selectedIndex].value);
			}
		} else if (document.getElementById('localization_form_roads_select') != null) {
   var road = document.getElementById('localization_form_roads_select');
   if (road.selectedIndex == -1)
   {
    document.getElementById('localization_form_top_select').disabled = false;
   } else {
    mygmap_refresh_pms('cmd=map_road&id=' + road.options[road.selectedIndex].value);
   }
	 } else {
   // ha üreset próbáltak submitelni, letiltjuk a mutasd gombot, hogy ne szórakozzanak a hülyegyerekek
   document.getElementById('localization_form_top_select').disabled = false;
  }
 }
}

function button_pushed(command)
{
 set_localization_form_availability(false);
 mygmap_refresh_pms(command);
}

// ajaxos kérés küldése
function send_dataserv_request(params)
{
 if (window.XMLHttpRequest)
 { // Mozilla, Safari,... 
  http_request = new XMLHttpRequest(); 
 } else if (window.ActiveXObject) { // IE 
  http_request = new ActiveXObject("Microsoft.XMLHTTP"); 
 }
// alert('request: ' + params);
 http_request.open("GET", "dataserv_wrapper.php?" + params, true);
	http_request.onreadystatechange = receive_dataserv_response;
	http_request.send(null);
}

// ajaxos válasz fogadása
function receive_dataserv_response()
{ 
 if (http_request.readyState == 4)
 { 
  if (http_request.status == 200)
  { 
   xmlObj = http_request.responseXML;
   // megnézzük a válasz típusát
   var data = xmlObj.documentElement.getElementsByTagName("data");
   if (data.length == 0)
   {
    alert("HIBA: Nincs típusleírás!");
   } else {
    map.enableScrollWheelZoom();
    map.enableDoubleClickZoom();
    for (var i = 0; i < data.length; i++)
    {
     var typedesc = data[i].getAttribute("typedesc");
     if (typedesc == 'select_input')
     {
      parse_select_input();
     } else if (typedesc == 'map_traffic') {
      var icontype = data[i].getAttribute("icontype");
      parse_map_traffic_input(data[i], icontype);
     } else if (typedesc == 'map_info') {
      var icontype = data[i].getAttribute("icontype");
      parse_map_info_input(data[i], icontype);
     } else if (typedesc == 'map_table') {
      var icontype = data[i].getAttribute("icontype");
      parse_map_table_input(data[i], icontype);
     } else {
      alert("HIBA: Ismeretlen típus!");
     }
    }
   }
  }
 }
}

function parse_select_input()
{
 if (xmlObj.getElementsByTagName('cities').item(0) != null)
 {
  localization_form_cities_handler();
  return;
 }
 if (xmlObj.getElementsByTagName('cityparts').item(0) != null)
 {
  localization_form_cityparts_handler();
  return;
 }
 if (xmlObj.getElementsByTagName('roads').item(0) != null)
 {
  localization_form_roads_handler();
  return;
 }
 alert("HIBA: Kommunikációs hiba!");
 set_localization_form_availability(true);
}

// FIP kirakásához (icontype 0, 1, 3)
function parse_map_traffic_input(myxml, icontype)
{
 var xml_tags = new Array('id', 'label', 'dir', 'dir_text', 'dir_opp', 'dir_opp_text');
 var xml_markers = myxml.getElementsByTagName("fip");
 if (xml_markers.length == 0)
 {
  alert("Üres területi egység!");
 } else {
  markers[icontype] = new Array();
  marker_number[icontype] = 0;
  for (var i = 0; i < xml_markers.length; i++)
  {
   var data = new Array();
   var lat = parseFloat(xml_markers[i].getAttribute("lat"));
   var lng = parseFloat(xml_markers[i].getAttribute("lng"));
   var point = new GLatLng(lat,lng);
   data['point'] = point;
   for (j in xml_tags)
   {
    if (xml_markers[i].getAttribute(xml_tags[j]) != null)
    {
     data[xml_tags[j]] = xml_markers[i].getAttribute(xml_tags[j]);
    }
   }
   var xml_lines = xml_markers[i].getElementsByTagName("linepic");
   if (xml_lines.length != 0)
   {
    data['linepic'] = xml_lines[0].getAttribute('data');
   }
   if (icontype == 0)
   {
    // FIP basic marker
    var marker = create_fip_basic_marker(data);
    map.addOverlay(marker);
   } else if (icontype == 1) {
    // FIP traffic marker
    create_fip_traffic_marker(data);
   } else if (icontype == 2) {
    // FIP traffic marker with fav options
    var marker = create_fip_traffic_marker_with_fav(data);
    map.addOverlay(marker);
   } else if (icontype == 3) {
    // FIP traffic marker
    create_fip_traffic_marker_only_info(data);
   }
  }
  // térkép középre állítása
  var center = myxml.getElementsByTagName("mapcenter");
  var lat = parseFloat(center[0].getAttribute("lat"));
  var lng = parseFloat(center[0].getAttribute("lng"));
  map.setCenter(new GLatLng(lat, lng), 7);
  // optimális zoom level beállítása
  var mapwindow = myxml.getElementsByTagName("boundaries");
  var bounds = new GLatLngBounds(new GLatLng(parseFloat(mapwindow[0].getAttribute("minlat")), parseFloat(mapwindow[0].getAttribute("minlng"))), new GLatLng(parseFloat(mapwindow[0].getAttribute("maxlat")), parseFloat(mapwindow[0].getAttribute("maxlng"))));
  map.setZoom(map.getBoundsZoomLevel(bounds));
  if (map.getZoom() > 15) map.setZoom(15);
 }
 if (document.getElementById('localization_form_submit') != null)
 {
  set_localization_form_availability(true);
 } else if (document.getElementById('altselect') != null) {
  document.getElementById('altselect').disabled = false;
 } else if (document.getElementById('favselect') != null) {
  document.getElementById('favselect').disabled = false;
 }
}

// Amikor csak a desc mezőt iratjuk ki (icontype 2)
function parse_map_info_input(myxml, icontype)
{
 var xml_tags = new Array('id', 'desc', 'dir', 'dir_text');
 var xml_markers = myxml.getElementsByTagName("info");
 if (xml_markers.length == 0)
 {
 } else {
  markers[icontype] = new Array();
  marker_number[icontype] = 0;
  for (var i = 0; i < xml_markers.length; i++)
  {
   var data = new Array();
   var lat = parseFloat(xml_markers[i].getAttribute("lat"));
   var lng = parseFloat(xml_markers[i].getAttribute("lng"));
   var point = new GLatLng(lat,lng);
   data['point'] = point;
   for (j in xml_tags)
   {
    if (xml_markers[i].getAttribute(xml_tags[j]) != null)
    {
     data[xml_tags[j]] = xml_markers[i].getAttribute(xml_tags[j]);
    }
   }
   var marker = create_info_marker(data);
   map.addOverlay(marker);
  }
 }
}

// Táblázatba íráshoz (icontype 100)
function parse_map_table_input(myxml, icontype)
{
 var xml_tags = new Array('id', 'label');
 var xml_markers = myxml.getElementsByTagName("fip");
 if (xml_markers.length == 0)
 {
  alert("Üres területi egység!");
 } else {
  for (var i = 0; i < xml_markers.length; i++)
  {
   var data = new Array();
   for (j in xml_tags)
   {
    if (xml_markers[i].getAttribute(xml_tags[j]) != null)
    {
     data[xml_tags[j]] = xml_markers[i].getAttribute(xml_tags[j]);
    }
   }
   if (icontype == 100 || icontype == 102)
   {
    create_fip_table_row(data);
   } else if (icontype == 101) {
    create_fip_table_row_with_fav(data);
   }
  }
 }
}

// icontype = 0
function create_fip_basic_marker(data)
{
 var baseIcon = new GIcon();
 baseIcon.iconSize = new GSize(32, 32);
 baseIcon.iconAnchor = new GPoint(10, 32);
 baseIcon.infoWindowAnchor = new GPoint(24, 0);
	var letteredIcon = new GIcon(baseIcon);
 letteredIcon.image = "http://mjam.hu/images/pms/green-pushpin.png";
 var marker = new GMarker(data['point'], { icon:letteredIcon });
 GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml("<span class=\"infobubble_label\">" + data['label'] + "</span><br>Irány: " + data['dir_text'] + "-" + data['dir_opp_text']); });
 markers[0][marker_number[0]] = marker;
 marker_number[0]++;
 return marker;
}

// icontype = 1
function create_fip_traffic_marker(data)
{
 // csak a vonallal rendelkező FIP-ek jelennek meg
 if (typeof(data['linepic']) != 'undefined')
 {
  markers[1][marker_number[1]] = Array();
  markers[1][marker_number[1]][0] = Array();
  markers[1][marker_number[1]][0]['id'] = data['id'];
  markers[1][marker_number[1]][0]['label'] = data['label'];
  markers[1][marker_number[1]][0]['dir'] = data['dir_text'] + '-' + data['dir_opp_text'];
  markers[1][marker_number[1]][0]['point'] = data['point'];
  markers[1][marker_number[1]][1] = Array();
  markers[1][marker_number[1]][1][0] = null;
  markers[1][marker_number[1]][1][1] = null;
  if (data['linepic'] != null)
  {
   eval('var mapline = {' + data['linepic'] + '};');
   markers[1][marker_number[1]][1][0] = mapline;
  }
  marker_number[1]++;
 }
}

// icontype = 2
function create_fip_traffic_marker_with_fav(data)
{
 var baseIcon = new GIcon();
 baseIcon.iconSize = new GSize(32, 32);
 baseIcon.iconAnchor = new GPoint(16, 32);
 baseIcon.infoWindowAnchor = new GPoint(24, 0);
	var letteredIcon = new GIcon(baseIcon);
 letteredIcon.image = "http://mjam.hu/images/pms/red.png";
 var marker = new GMarker(data['point'], { icon:letteredIcon });
 GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml("<span class=\"infobubble_label\">" + data['label'] + "</span><br>Irány: " + data['dir_text'] + "-" + data['dir_opp_text'] + '<br><a href="javascript:event_retrieve_on_pm(' + data['id'] + ')"><img src="http://mjam.hu/images/icon_s2_add.gif" border="0" alt="Hozzáad"></a>'); });
 GEvent.addListener(marker, "retrieve", function() { add_pm_to_fav(data); });
 markers[2][marker_number[2]] = Array(marker, data['id']);
 marker_number[2]++;
	return marker;
}

// icontype = 3
function create_fip_traffic_marker_only_info(data)
{
 // csak a vonallal rendelkező FIP-ek jelennek meg
 if (typeof(data['linepic']) != 'undefined')
 {
  markers[3][marker_number[3]] = Array();
  markers[3][marker_number[3]][0] = Array();
  markers[3][marker_number[3]][0]['id'] = data['id'];
  markers[3][marker_number[3]][0]['label'] = data['label'];
  markers[3][marker_number[3]][0]['dir'] = data['dir_text'] + '-' + data['dir_opp_text'];
  markers[3][marker_number[3]][0]['point'] = data['point'];
  eval('var mapline = {' + data['linepic'] + '};');
  markers[3][marker_number[3]][1] = Array();
  markers[3][marker_number[3]][1][0] = null;
  markers[3][marker_number[3]][1][1] = null;
  if (data['linepic'] != null)
  {
   eval('var mapline = {' + data['linepic'] + '};');
   markers[3][marker_number[3]][1][0] = mapline;
  }
  marker_number[3]++;
 }
}

// icontype = 10
function create_info_marker(data)
{
 var marker = new GMarker(data['point']);
 GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml("<div class=\"infobubble_label\">" + data['desc'] + "</div><div class=\"infobubble_text\">Irány: " + data['dir_text'] + "</div>"); });
 markers[10][marker_number[10]] = marker;
 marker_number[10]++;
 return marker;
}

// icontype = 100, 102
function create_fip_table_row(data)
{
 var pm_table = document.getElementById("pm_table");
 trElem = pm_table.insertRow(pm_table.rows.length);
 tdElem = trElem.insertCell(trElem.cells.length);
 tdElem.innerHTML = '<a href="javascript:event_click_on_pm(' + data['id'] + ')">' + data['label'] + '</a>';
}

// icontype = 101
function create_fip_table_row_with_fav(data)
{
 var pm_table = document.getElementById("pm_table");
 trElem = pm_table.insertRow(pm_table.rows.length);
 tdElem = trElem.insertCell(trElem.cells.length);
 tdElem.innerHTML = '<a href="javascript:event_retrieve_on_pm(' + data['id'] + ')" alt="Hozzáad"><img src="http://mjam.hu/images/icon_s1_add.gif" border="0" alt="Hozzáad"></a>';
 tdElem = trElem.insertCell(trElem.cells.length);
 tdElem.innerHTML = '<a href="javascript:event_click_on_pm(' + data['id'] + ')">' + data['label'] + '</a>';
}

