var map;
var lat_user;
var lng_user;
var pont;
var lap;
var infoWinHtml = '<textarea class="infoWindowTextArea"	name="infoWindowHtml" id="infoWindowHtml" onchange="saveInfoWin(this)" 	cols="80" rows="4"></textarea>';
var geocoder = new GClientGeocoder();
var circle;
var centerMarker;
var circleUnits;
var circleRadius;
var tablazatba = 1;
var osszmarker = new Array();
var markerArr = new Array();
var clusterMarkers = new Array();
var markerCluster; 
var bounds;

 
  var torkosStyle = [{
	url: '/template/torkos/images/maps_orange_empty_32x32.png',
	height: 32,
	width: 32,
	opt_textColor: '#FFFFFF'
  },
  {
	url: '/template/torkos/images/maps_orange_empty_40x40.png',
	height: 40,
	width: 40,
	opt_textColor: '#FFFFFF'
  },
  {
	url: '/template/torkos/images/maps_orange_empty_48x48.png',
	height: 48,
	width: 48,
	opt_textColor: '#FFFFFF'
  }];

// Results subset tracing object
function Subset() {
	this.offset = 1; // offset + max = 0
	this.max = -1;
	this.total = 0;
	this.dir = 1; // direction; default = 1 = next; prev = -1
	
	this.reset = function() {
					this.offset = 1; // offset + max = 0
					this.max = -1;
					this.total = 0;
					this.dir = 1; // direction; default = 1 = next; prev = -1
				};
	
	this.step = function() {
					this.offset = this.offset + this.dir * (this.max -1 + 1);
				};
}

var sub = new Subset();

// Pont rajzolás, és eseménye
function createMarker(arr) {
      var geok = arr.getAttribute("geocord");
      var latlat = geok.split(',');
      var latlng = new GLatLng(latlat[0],latlat[1]);
      var type = arr.getElementsByTagName('type')[0].firstChild.data;
      var baseIcon = new GIcon(G_DEFAULT_ICON);
      baseIcon.iconSize = new GSize(32, 32);
      baseIcon.shadowSize = new GSize(0, 0);
      baseIcon.iconAnchor = new GPoint(32, 32);
      baseIcon.infoWindowAnchor = new GPoint(0, 0);
      baseIcon.imageMap = [0,0, 32,0, 32,32, 0,32];
      var ikon = new GIcon(baseIcon);
//      ikon.image = "template/asztalom/images/maps_" + type + ".png";
      var status = arr.getElementsByTagName('status')[0].firstChild.data;
		if (status==1) {
			ikon.image = "template/torkos/images/maps_orange.png";
		}
		else if (status==2) {
			ikon.image = "template/torkos/images/maps_orange.png";
		}
		else if (status==3) {
			ikon.image = "template/torkos/images/maps_gray.png";
		}
		else if (status==99) {
			ikon.image = "template/torkos/images/maps_red.png";
		}
      var marker = new GMarker(latlng, {icon:ikon});

      osszmarker[osszmarker.length + 1] = marker;
      var html = arr.getElementsByTagName('popup_html')[0].firstChild.data;
      var id = arr.getElementsByTagName('caterer_id')[0].firstChild.data;
    GEvent.addListener(marker, "click", function() {
      marker.openInfoWindowHtml(html);
    });
    markerArr[id] = new Object();
    markerArr[id].marker = marker;
    markerArr[id].html = html;
    //document.getElementById(id).onmouseup = marker.openInfoWindowHtml(html);
    return marker;
  }


// Wrapper
function cimre_ugrik(res) {
	map.addOverlay(createMarker(res));
}

// A felhasználó helyzetének meghatározása
function ittVan(response){

  if(response){
    place = response.Placemark[0];
    lat_user = place.Point.coordinates[1];
    lng_user = place.Point.coordinates[0];
    //alert(lat_user+', '+lng_user);
    keresFolytat('both');

  }

}

function korRajzol(response){

  if (circle) {
        map.removeOverlay(circle);
    }
  var oRadius = document.getElementById('radiusz').value;
    circleRadius = oRadius;
    circleUnits = 'KM';
    var place = response.Placemark[0];
    var point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
    var latlng = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
	document.getElementById('latitude').value = latlng.lat();
	document.getElementById('longitude').value = latlng.lng();

    map.setCenter(latlng);
    var bounds = new GLatLngBounds();
    var center = map.getCenter();


    var circlePoints = Array();

    with (Math) {
        if (circleUnits == 'KM') {
            var d = circleRadius / 6378.8; // radians
        }
        else { //miles
            var d = circleRadius / 3963.189; // radians
        }

        var lat1 = (PI / 180) * center.lat(); // radians
        var lng1 = (PI / 180) * center.lng(); // radians
        for (var a = 0; a < 361; a++) {
            var tc = (PI / 180) * a;
            var y = asin(sin(lat1) * cos(d) + cos(lat1) * sin(d) * cos(tc));
            var dlng = atan2(sin(tc) * sin(d) * cos(lat1), cos(d) - sin(lat1) * sin(y));
            var x = ((lng1 - dlng + PI) % (2 * PI)) - PI; // MOD function
            var point = new GLatLng(parseFloat(y * (180 / PI)), parseFloat(x * (180 / PI)));
            circlePoints.push(point);
            bounds.extend(point);
        }

        if (d < 1.5678565720686044) {
            circle = new GPolygon(circlePoints, '#FF0000', 1, 1, '#FF0000', 0.15, {draggable: true});
        }
        else {
            circle = new GPolygon(circlePoints, '#FF0000', 1, 1, {draggable: true});
        }
        map.addOverlay(circle);


        map.setZoom(map.getBoundsZoomLevel(bounds));

        kozepPont(latlng);

    }


}

// A kör mozgatása esetén újra lekérdezi az éttermeket
function kererUjra(response){
  var place = response.Placemark[0];
	lat_user = place.Point.coordinates[1];
	lng_user = place.Point.coordinates[0];
	document.getElementById('latitude').value = lat_user;
	document.getElementById('longitude').value = lng_user;
	geocoder.getLocations(new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]), updateForm);
}

// Updates maps form on circle move
function updateForm(response) {
	var address = response.Placemark[0].address;
	var suffix = ', Magyarország';
	address = address.substr(0, address.length - suffix.length);
	document.getElementById('cim').value = address;
	predefinedAddress = document.getElementById('cim').value;
	keres();
	//keresFolytat('both');
}

// A kör mozgatása
function korUjra(latlng){
	resetPager();
  geocoder.getLocations(latlng, korRajzol);
  geocoder.getLocations(latlng, kererUjra);
  kozepPont(latlng);
}

// Beállítja a középpont markert
function kozepPont(latlng){

	//var myEventListener = GEvent.bind(this.map, "click", this, function(overlay, latlng) {

    	if(pont){
    		map.removeOverlay(pont);
    	} //else {
        var baseIcon = new GIcon(G_DEFAULT_ICON);
           baseIcon.iconSize = new GSize(32, 32);
           baseIcon.shadowSize = new GSize(0, 0);
           baseIcon.iconAnchor = new GPoint(16, 16);
           baseIcon.infoWindowAnchor = new GPoint(0, 0);

           var proba = new GIcon(baseIcon);
           proba.image = "template/asztalom/images/maps_centrum.png";

        var marker = new GMarker(latlng, {draggable: true, icon:proba});
          map.addOverlay(marker);
      pont = marker;
      //geocoder.getLocations(latlng, korRajzol);
      //korUjra(latlng);
      GEvent.addListener(marker, "dragend", korUjra);

      //}
     //});

	}

// Updates the hidden lat. long. fields and then calls putPlaceMark
function updatePlaceFields(response) {
	if(response) {
		place = response.Placemark[0];
		document.getElementById('latitude').value = place.Point.coordinates[1];
		document.getElementById('longitude').value = place.Point.coordinates[0];
		//putPlaceMark();
		var latlng = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
		var marker = new GMarker(latlng, {draggable: true});
		GEvent.addListener(marker, "dragend", function(latlng) {
			document.getElementById('latitude').value = latlng.lat();
			document.getElementById('longitude').value = latlng.lng();
		});
		map.addOverlay(marker);
		map.setCenter(latlng, 13);
	}
}

// Creates a marker for the user's address
function putPlaceMark() {
	if((document.getElementById('latitude').value !== '') && (document.getElementById('longitude').value !== '') && document.getElementById('confirmed').checked) {
		var latlng = new GLatLng(document.getElementById('latitude').value, document.getElementById('longitude').value);
		var marker = new GMarker(latlng, {draggable: true});
		GEvent.addListener(marker, "dragend", function(latlng) {
												document.getElementById('latitude').value = latlng.lat();
												document.getElementById('longitude').value = latlng.lng();
											});
		map.addOverlay(marker);
	    map.setCenter(latlng, 13);
	    
	    
	} else {
		geocoder.getLocations(document.getElementById('predefinedAddress').value + ', Magyarország' , updatePlaceFields);
	}
}

// Google
function initialize()
{
	loader(1)
  if (GBrowserIsCompatible())
  {
       map = new GMap2(document.getElementById("map2"));
      map.setCenter(new GLatLng(47.1422647, 19.3894158), 7);
      map.addControl(new GSmallMapControl());

//      map.addControl(new GMapTypeControl());
		markerCluster = new MarkerClusterer(map, new Array(), {gridSize: 40, styles: torkosStyle}); 
//		console.log(markerCluster);
//      if(document.getElementById('mapsPage').value == 'main') {
    	  keres();
//	  
//      } else {
//    	  putPlaceMark();
//      }

  }
}

// Új keresés esetében törli a régi markereket
function torolMarker(){

	if(osszmarker){
	  for(var i = 0; i < osszmarker.length; i++){
			if(osszmarker[i]){

				  map.removeOverlay(osszmarker[i]);
				  osszmarker[i] = '';
			}
		  }
	}
	markerArr = new Array();
}
// Kirajzolja a találatok pontjait
function keresFolytat(city_id, type){
	loader(1)
	sub.offset = sub.offset + sub.dir * (sub.max -1 + 1);
	sub.max = lap;

    var param = '&city_id=' + city_id +'&out=xml&limit_offset='+sub.offset+'&limit_max='+sub.max+'&type='+type;
	if (city_id==0) {
		xmlURL = "/static/static_main.xml?20100204160735";
//		xmlURL = "/index.php?TBsession="+TBsession+"&page=maps&" + param;
	}
	else {
		xmlURL = "/index.php?TBsession="+TBsession+"&page=maps&" + param;
	}	
//	GDownloadUrl("/index.php?TBsession="+TBsession+"&page=maps&" + param, function(data) {
	GDownloadUrl(xmlURL, function(data) {
	
	//TODO valasz alapjan terkep kozeppontjanak es meretezesenek allitasa
//			var latlng = new GLatLng(lat_user, lng_user);

//			kozepPont(latlng);
	         var xml = GXml.parse(data);
//alert(xml);
//	return;
//	         if(type == 'both') {
//	        	 geocoder.getLocations(lat_user +','+ lng_user,  korRajzol);
	        	 torolMarker();
				 
				 

//centering teh map
				var cityData = xml.documentElement.getElementsByTagName("cityData")[0];
/* 				if (cityData) {
					var maplat = cityData.getElementsByTagName('lat')[0].firstChild.data;
					var maplng = cityData.getElementsByTagName('lng')[0].firstChild.data;
					var mapdist = cityData.getElementsByTagName('dist')[0].firstChild.data;
					map.setCenter(new google.maps.LatLng(maplat, maplng), mapdist);
					map.setZoom(mapdist);
				}
 */
	        	 var markers = xml.documentElement.getElementsByTagName("marker");
				 bounds = new GLatLngBounds();
				 clusterMarkers = new Array();
	            for (var i = 0; i < markers.length; i++)
	              {
//XXX	                cimre_ugrik(markers[i]);
					var tmpMarker = createMarker(markers[i]);
					bounds.extend(tmpMarker.getPoint());
					clusterMarkers[i] = tmpMarker;
	              }
				  map.setZoom(map.getBoundsZoomLevel(bounds));
				  map.setCenter(bounds.getCenter());
//				  var markerCluster = new MarkerClusterer(map, clusterMarkers, {gridSize: 40, styles: torkosStyle}); 
				  markerCluster.clearMarkers();
				  		markerCluster = new MarkerClusterer(map, clusterMarkers, {gridSize: 40, styles: torkosStyle}); 

//				  markerCluster.addMarkers(clusterMarkers);
				  // markerCluster.styles(orkosStyle); 
				  // markerCluster.gridSize=32; 
				  markerCluster.resetViewport();
				  loader(0)
				  
//	         }
            sub.total = xml.documentElement.getElementsByTagName('total')[0].firstChild.data;
//            recreateTable();
//            document.getElementById('tablazat').innerHTML = xml.documentElement.getElementsByTagName('tablazat')[0].firstChild.data;
//        	var p = document.getElementById('prev');
//            if(sub.offset > 0) {
//            	p.innerHTML = '<a href="javascript:" onmouseup="sub.dir=-1; keresFolytat(\'dailymenu\'); return false;">Előző ' + sub.max + '</a>';
//            } else {
//            	p.innerHTML = '&nbsp;'
//            }
//        	var n = document.getElementById('next');
//            if((sub.total -1 + 1) > (sub.offset + (sub.max -1 + 1))) {
//            	n.innerHTML = '<a href="javascript:" onmouseup="sub.dir=1; keresFolytat(\'dailymenu\'); return false;">Következő ' + sub.max + '</a>';
//            } else {
//            	n.innerHTML = '&nbsp;'
//            }
          });
}


// Beállítja a felhasználó helyzetét
function keresLista(){
var city_id = document.getElementById('searchcity').value;
location.href='/index.php?page=caterer_list&city_id='+city_id;
}
function keresCloud(el){
document.getElementById('searchcity').value = el
keres()
}
function keres(){
	var city_id = document.getElementById('searchcity').value;
//  if(city_id == 0) { // $('cim').value == ""){
//    alert('Kérlek válassz várost!');
//  } else {
//	  resetPager();
//	  lat_user = document.getElementById('latitude').value;
//	  lng_user = document.getElementById('longitude').value;
	  //alert(lat_user+', '+lng_user);
//	  if((lat_user != '') && (lng_user != '')) {
		    keresFolytat(city_id, 'both');		  
//	  } else {
//		  geocoder.getLocations(document.getElementById('cim').value + ', Magyarország' , ittVan);
//	  }
//
}
function resetPager() { 
	sub.reset();
	var p = document.getElementById('prev');
	p.innerHTML = '&nbsp;'
	var n = document.getElementById('next');
	n.innerHTML = '&nbsp;'
	//alert('Reset');
}

// Clears and recreates caterer table
function recreateTable() {
	d = document.getElementById('tablazat');
	d.innerHTML = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"napimenu\" id=\"tabla_talal\"><tr><th width=\"250\">Étterem</th><th width=\"250\">Ma</th><th width=\"250\">Holnap</th></tr></table>";
}

function selectAddress() {
	var currentOption = document.getElementById('addresses').options[document.getElementById('addresses').selectedIndex];
	document.getElementById('cim').value = currentOption.text;
	document.getElementById('latitude').value = document.getElementById('lat_' + currentOption.value).value;
	document.getElementById('longitude').value = document.getElementById('lng_' + currentOption.value).value;
}

function getCookie(c_name) {
	if (document.cookie.length>0)
	  {
	  c_start=document.cookie.indexOf(c_name + "=");
	  if (c_start!=-1)
	    {
	    c_start=c_start + c_name.length+1;
	    c_end=document.cookie.indexOf(";",c_start);
	    if (c_end==-1) c_end=document.cookie.length;
	    return unescape(document.cookie.substring(c_start,c_end));
	    }
	  }
	return "";
}

function setCookie(c_name,value,expiredays) {
	var exdate=new Date();
	exdate.setDate(exdate.getDate()+expiredays);
	document.cookie=c_name+ "=" +escape(value)+
	((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}


function loader(s) {
	if (s == 0) {
		document.getElementById('icon').style.display = 'block';
		document.getElementById('loader').style.display = 'none';
	} else {
		document.getElementById('icon').style.display = 'none';
		document.getElementById('loader').style.display = 'block';
	}
}
