var map = null;// mapa
var id_places = new Array();// id vsech mist ktere mame na mape
var marker = new Array();// ulozeny vsechny spendliky ktere mame na mape
var markerOver = null;
var polyline = null;

var findBound;// oblast hledani na mape
var position = get_var();// dostane z adresy pozadovane udaje (v teto
// aplikaci to je cislo rubriky a page)
var infowindow;// vyskakovaci bublina
var icon_size = null;
var icon_origin = null;
var icon_anchor = null;


var pole_rubrik = Array();// pole obsahujici hlavni rubriky serazene podle
// poradi
var rubrika_poradi;// kvuli tomu ze potrebujeme vedet kolikatou zalozku v
// rubrikach chceme otverit, musime vedet poradi

var rubrika;
var podrubrika;
var id_mista;
var open_tabs;
var page;
var date;
var find;
var order_by;

function initializeVar(position) {

/*promenna 'r' a 'pr' se inicializuji v helpers_region*/

	if ((typeof position["id"] != "undefined")) {// pokud jsem ziskali z
		// adresy hodnotu mista
		id_mista = Number(position["id"]);

		if (isNaN(id_mista)) {
			id_mista = 0;
		}
	} else {
		id_mista = 0;
	}

	if ((typeof position["open_tabs"] != "undefined")) {// pokud jsem ziskali z
		// adresy hodnotu
		// rubriky
		open_tabs = Number(position["open_tabs"]);

		if (isNaN(open_tabs)) {
			open_tabs = 0;
		}
	} else {
		open_tabs = 0;
	}



	if ((typeof position["date"] != "undefined")) {
		date = position["date"];
	} else {
		date = "";
	}
	
	if ((typeof position["find"] != "undefined")) {
		find = decodeURI(position["find"]);
	} else {
		find = "";
	}
	
	var array_order_by;
	if (typAction=='place' || typAction == "favorites" || typAction == "visited" || typAction == "company")
		array_order_by = new Array('abc','rates','shows','news');
	else if (typAction == "myCalendar" || typAction == 'calendar') {
		array_order_by = new Array('start','abc','rates','shows','news');
	} else if (typAction == "article") {
		array_order_by = new Array('news','abc','rates','shows');
	}	

	
	
	if ((typeof position["order_by"] != "undefined") && (array_order_by.in_array(position["order_by"]))) {
		order_by = position["order_by"];
	} else {
		order_by = array_order_by[0];
	}

}

function initialize() {// inicializace mapy

	// $("#effect:visible").removeAttr('style').hide().fadeOut();

	icon_size = new google.maps.Size(25, 35);
	icon_origin = new google.maps.Point(0, 0);
	icon_anchor = new google.maps.Point(12, 35);

	

	slat = 50.69317998008128;
	slng = 14.509490966796864;

	var latlng = new google.maps.LatLng(slat, slng);

	var zoom = 10;

	var myOptions = {// nastaveni options
		zoom : zoom,
		center : latlng,
		mapTypeId : google.maps.MapTypeId.ROADMAP,
		draggableCursor : "Crosshair"

	};

	map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);// vytvoreni
	// mapy
	/*
	 * projection = new MercatorProjection(); var chicago = new
	 * google.maps.LatLng(41.850033,-87.6500523); worldCoordinate =
	 * fromLatLngToPoint(projection,chicago);
	 */

	rect = new google.maps.Rectangle();
	rect.setMap(map);

	/* ikonka ktera zvytazni vybrane misto */
	var shadow = new google.maps.MarkerImage(mainaddress + "public/img/icon-maps/icon-place-shadow.png",
	        new google.maps.Size(43.0, 35.0),
	        new google.maps.Point(0, 0),
	        new google.maps.Point(12.0, 35)
	    );

	
	var markerIconOver = new google.maps.MarkerImage(mainaddress
	+ "public/img/icon-maps/icon-place-select.png", icon_size,
	icon_origin, icon_anchor);

	markerOver = new google.maps.Marker( {
		position : latlng,
		icon : markerIconOver,
		zIndex : 1000,
		map : null,
		shadow: shadow

	});

	/* end */

	/*
	 * google.maps.event.addListener(map, 'center_changed', function() {//funkce
	 * co se provede kdyz se zmeni meritko nebo pozice mapy updateMap(); });
	 */

	infowindow = new google.maps.InfoWindow( {
		pixelOffset : new google.maps.Size(0, 36)
	});

	if (reload)
	updateMap();

}

function updateAddress() {
	var other = "";
	if (date != "")
	other += "@date=" + date;

	if (typAction == "favorites" || typAction == "myCalendar" || typAction == "visited") {
		rubrika = 0;
		podrubrika = 0;
	}

	if (id_mista > 0) {
		other += "@id=" + id_mista;
		if (open_tabs > 0) {
			other += "@open_tabs=" + open_tabs;
		} else {
			other += "@open_tabs=1";
			open_tabs = 1;
		}
	}
	
	if (find) {
		other += "@find=" + encodeURI(find);
	}
	
	if (order_by) {
		other += "@order_by=" + order_by;
	}

	var address = "r=" + rubrika + "@pr=" + podrubrika + "@page=" + page
	+ other;

	window.location.href = "#" + address;

	return address;

}

function updateMap() {
	
	// if (type_job=="show_info_window") {
	//
	// return;
	// }
	

	if (polyline)
	polyline.setMap(null);

	infowindow.close();

	/* zjisteni kde se nachazime a v jakem obdelniku se ma hledat */

	var address = updateAddress();

	// rect.setBounds(findBound);//zobrazeni boundu na vyhledavani
	/* konec */

	// alert("sw_lat="+findBound.getSouthWest().lat()+"&sw_lng="+findBound.getSouthWest().lng()+"&ne_lat="+findBound.getNorthEast().lat()+"&ne_lng="+findBound.getNorthEast().lng()+"&filter="+filter_celkem+"&rubrika="+rubrika+"&page="+page+"&order_by="+order_by+"&find="+find+"&date_od="+date_od+"&date_do="+date_do+"&onlynews="+onlynews);
	// /*pomoci xml dostaneme pozadovane body, ktere vlozime do mapy*/
	var vysledkova_rubrika;// rubrika ke ktere hledame vysledek
	if (typAction != "favorites" && typAction != "myCalendar" && typAction != "visited") {
		if (podrubrika > 0) {
			vysledkova_rubrika = podrubrika;
		} else {
			vysledkova_rubrika = rubrika;
		}
	} else {
		vysledkova_rubrika = 1;
	}

	var other = "";

	if (date != "") {
		other = "&date=" + date;
	}
	
	$.ajax( {
		type : "GET",
		url : mainaddress + 'ajax/index/select/',
		cache : false,
		beforeSend : function() {
			$("#region_vysledek").html(loading_img);
			$("#large_region_vysledek_content").html(loading_img);
		},

		// data:
		// "sw_lat="+bottomRight.lat()+"&sw_lng="+topLeft.lng()+"&ne_lat="+topLeft.lat()+"&ne_lng="+bottomRight.lng()+"&filter="+filter_celkem+"&rubrika="+rubrika+"&page="+page,
		data : "typAction=" + typAction + "&id=" + vysledkova_rubrika
		+ "&page=" + page + "&order_by=" + order_by + "&find=" + find + other,
		dataType : "xml",
		success : function(xml) {
			reloadCategories(xml);
			reloadMarkers(xml);
		}
	});

	// alert("sw_lat="+findBound.getSouthWest().lat()+"&sw_lng="+findBound.getSouthWest().lng()+"&ne_lat="+findBound.getNorthEast().lat()+"&ne_lng="+findBound.getNorthEast().lng()+"&filter="+filter_celkem+"&rubrika="+rubrika+"&page="+page+"&order_by="+order_by+"&find="+find+"&date_od="+date_od+"&date_do="+date_do);

}

function reloadCategories(xml) {/*nacteni kategorii a potomku pozadovane kategorie*/
	//return 1;/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!**/
	var content = "";
	$("#categories_path").html("");
	//content += '<a href="javascript:void(0)" class="categories_link" id="rubrika_main_0">Kategorie</a>';
	first = true;
	var h1 = "";
	$(xml).find('categories_path_item').each(function() {
		if (! first) {
			 content += ' &gt; ';
		}
		first = false;
	content += '<a href="'+$(this).find("link").text()+'" class="categories_link" id="rubrika_main_'+$(this).find("id").text()+'">'+$(this).find("nazev").text()+'</a>';	
	h1 = $(this).find("nazev").text();
	});
	$("h1").html(h1);//posledni polozka v xml je i nadpisem h1

	if (content.length > 0) {
		content += "<hr />";
	}
	
	$(xml).find('categories_childs_item').each(function() {		
	content += '<a href="'+$(this).find("link").text()+'" class="categories_link categories_link_childs" id="rubrika_main_'+$(this).find("id").text()+'">'+$(this).find("nazev").text()+'</a>';	
	
	});
	content += "";
	
	
	$("#categories_path").append(content);
	/*udalost*/
	/*
	$(".categories_link").click(function(){
		//$("#region_accordion #"+$(this).attr("id")+"_div").load($(this).attr("href"));
		var id = $(this).attr("id");
		rubrika = Number(id.substr(13));//!pozor toto cte informace z id odkazu (v tomto pripade to je rubrika_main_...)
		podrubrika = 0;
		
		id_mista = 0;
		open_tabs = 0;
		$("#close_tabs").click();
		
		updateMap();
	});*/

}

function createMarker(latlng, id, i, name, popis, obrazek, odkaz) {// vytvoreni markers
	i++;

	var typ_icon = "place";

	var normalIcon = mainaddress + "public/img/icon-maps/icon-" + typ_icon + i + ".png";
	var hoverIcon = mainaddress	+ "public/img/icon-maps/icon-place-select.png";
	
	var markerIcon = new google.maps.MarkerImage(normalIcon, icon_size,
	icon_origin, icon_anchor);

	var shadow = new google.maps.MarkerImage(mainaddress + "public/img/icon-maps/icon-place-shadow.png",
	        new google.maps.Size(43.0, 35.0),
	        new google.maps.Point(0, 0),
	        new google.maps.Point(12.0, 35)
	    );
	
	var marker = new google.maps.Marker( {
		position : latlng,
		icon : markerIcon,
		map : map,
		title : name,
		shadow : shadow
	});

	google.maps.event.addListener(marker, "click", function() {// funkce ktera se vyvola po kliknuti na marker
		deleteAllMarkers();
		clickMarker(id,name,popis,obrazek,odkaz);
		open_tabs = 1;

		/* infowindow.open(map,marker); */

	});
	
	var ZIndex = marker.getZIndex();
	
	google.maps.event.addListener(marker, "mouseover", function() {
		$("#region_vysledek_content_item").removeClass("select");
		$("#region_vysledek_nadpis"+id).parent().addClass("select");

		var pos = $("#region_vysledek_nadpis"+id).parent().position().top;
		var regionPos = $("#region_vysledek_paginator_horni").position().top;
		var paginatorHeight = $("#region_vysledek_paginator_horni").height();
		
		marker.setZIndex(1000);
		marker.setIcon(hoverIcon);

		var xpos = pos-(regionPos+paginatorHeight);

		$("#region_vysledek").scrollTop(xpos);
			
	});
	google.maps.event.addListener(marker, "mouseout", function() {
		$("#region_vysledek_nadpis"+id).parent().removeClass("select");
		marker.setZIndex(ZIndex);
		marker.setIcon(normalIcon);
	});
	



	return marker;
}

function clickMarker(id,nazev,popis,obrazek,odkaz) {
	window.location.href = odkaz;
/*
	$.ajax( {
		type : "POST",
		url : mainaddress + "ajax/index/show/" + id + "/",
		cache : false,
		beforeSend : function() {

			$("#obal_right_col").html(loading_img);
		},
		data : "",
		dataType : "html",
		success : function(html) {
			/* infowindow.setContent(html); */
/*				clickMarkerSuccess(html,typAction);

		}

	});
*/
}

function clickMarkerSuccess(html,typAction) {
	$("#obal_right_col").html(html);
	$("#ajax_tabs").tabs();
	$("#close_tabs").click(function() {

		id_mista = 0;
		open_tabs = 0;

		var old_content = findSort;
		
		//old_content += '<div id="categories_path"></div>';
		
		if (typAction == 'calendar' || typAction == 'myCalendar') {
		old_content += '<div id="region_calendar"></div>';				
		}
		
		old_content += '<div id="region_vysledek"></div>';
		old_content += '<div id="region_vysledek_recom"></div>';
		
		
		$("#obal_right_col").html(old_content);
		
		findSortEvents();
		
		if (typAction == 'calendar' || typAction == 'myCalendar')
			createCalendar();
		
		updateMap();

	});

	$("#ajax_tabs li a").click(function() {
		open_tabs = $("#ajax_tabs").tabs("option", "selected") + 1;
		updateAddress();
	});

	id_mista = id;
	if (open_tabs > 0)
	$("#ajax_tabs").tabs("select", open_tabs - 1);
	else
	open_tabs = 1;

	updateAddress();
}



function reloadMarkers(xml) {// prida nove markery a odstrani ty ktere tam nemaji uz co delat
	var show_id_hlavni_info = null;
	var show_id_hlavni = null;

	

	$("#region_vysledek").html(
					"<div class=\"region_vysledek_paginator_obal\"><div id=\"region_vysledek_paginator_horni\"></div></div><div class=\"clear_both\"></div><div id=\"region_vysledek_content\"></div><div class=\"region_vysledek_paginator_obal\"><div id=\"region_vysledek_paginator_dolni\"></div></div>");
	$("#region_vysledek_recom").html("<div id=\"region_vysledek_content_recom\"></div>");
	
	$("#large_region_vysledek").html(
	"<div class=\"region_vysledek_paginator_obal\"><div id=\"large_region_vysledek_paginator_horni\"></div></div><div class=\"clear_both\"></div><div id=\"large_region_vysledek_content\"></div><div class=\"large_region_vysledek_paginator_obal\"><div id=\"large_region_vysledek_paginator_dolni\"></div></div>");


	
	//alert($("#obal_right_col").html());
	// alert($(xml).find("settings").find("numpages").text());
	var page = $(xml).find("settings").find("page").text();
	var numPages = $(xml).find("settings").find("numpages").text();
	var link = "";
	var variables = "";
	var nameElement = "region_vysledek_paginator_horni";// nazev elementu do
	// ktereho se paginator
	// vypise
	createPaginator(page, numPages, nameElement, link, variables,true);
	var nameElement = "region_vysledek_paginator_dolni";// nazev elementu do
	// ktereho se paginator
	// vypise
	createPaginator(page, numPages, nameElement, link, variables,true);
	
	/*paginator pro static*/
	link = $(xml).find("settings").find("static_address").text();
	nameElement = "large_region_vysledek_paginator_horni";
	createPaginator(page, numPages, nameElement, link, variables,false);
	nameElement = "large_region_vysledek_paginator_dolni";
	createPaginator(page, numPages, nameElement, link, variables,false);

	
	itemEach(xml,'item');
	
	itemEachRecom(xml,'itemRecom');
	
	//itemLargeRecom(xml,'itemLarge');
	


	if (id_mista > 0) {// pokud neni zadny marker otevren
		deleteAllMarkers();
	} else {
		deleteMarkerOver();
	}

}

function deleteMarkerOver() {
	if (markerOver != null) {
		markerOver.setMap(null);
	}
}

function deleteAllMarkers() {// odstrani vsechny markery, aby nas pri
	// prdavani nebo editaci nevzrusovali
	deleteMarkerOver();

	for ( var i = 0; i < marker.length; i++) {// odstranime vsechny markery,
		// co tam nemaji uz co delat
		if (marker[i] != null)
		marker[i].setMap(null);
	}
	marker = new Array();
	id_places = new Array();
}



function showPointCoordinateEdit(latlng) {// zobrazi souradnice pro editaci
	// bodu
	if (mainMarker != null)
	mainMarker.setMap(null);

	mainMarker = createMainMarker(latlng);
}

function createPolyEdit(path) {

	if (mainPoly == null) {// pokud polyline este neexistuje, vytvorime ho

		var polyOptions = {
			path : path,
			strokeColor : '#000000',
			strokeOpacity : 1.0,
			strokeWeight : 3
		}

		mainPoly = new google.maps.Polyline(polyOptions);

		mainPoly.setMap(map);

	} else {
		mainPoly.setPath(path);

	}
}

function createPolygonEdit(path) {
	if (mainPolygon == null) {// pokud polygon este neexistuje, vytvorime ho

		var polyOptions = {
			path : path,
			strokeColor : '#000000',
			strokeOpacity : 1.0,
			strokeWeight : 3
		}
		mainPolygon = new google.maps.Polygon(polyOptions);
		mainPolygon.setMap(map);

	} else {
		mainPolygon.setPath(path);

	}
}


function highLightItems(id,typ_icon,i,marker) {//zvyrazni nam ikonku na mape, pokud ukazeme na polozku
	i++;
	var normalIcon = mainaddress + "public/img/icon-maps/icon-" + typ_icon + i + ".png";
	var hoverIcon = mainaddress	+ "public/img/icon-maps/icon-place-select.png";

	var ZIndex = marker.getZIndex();
	$('#region_vysledek_content_item_'+id).hover(
		function () {
			$("#region_vysledek_content_item").removeClass("select");
			$('#region_vysledek_content_item_'+id).addClass("select"); 
			marker.setZIndex(1000);
			marker.setIcon(hoverIcon);
		},
		function () {
			$('#region_vysledek_content_item_'+id).removeClass("select");
			marker.setZIndex(ZIndex);
			marker.setIcon(normalIcon);
		}
	);
}


function itemEach(xml,item) {
	var new_marker = new Array();
	var new_id_places = new Array();
	var typ_icon = "place";
	var i = 0;
	var j = 0;

	
	$(xml).find(item).each(function() {		

	var index = id_places.search_array($(this).find("id_hlavni").text());
	var latlng = new google.maps.LatLng(parseFloat($(this).find("gpsn").text()), parseFloat($(this).find("gpse").text()));// ziskame z xml lat a lng

	var new_index = new_id_places.search_array($(this).find("id_hlavni").text());// zkontroluje zda sme jiz toto id_hlavni nepridali na mapu (je to zapricineno ze muze byt vybrano vice id_hlavni_info se stejnou souradnici - tedy stejnym id_hlavni)

	
	
	if (index == false) {// marker este na mape neni

		if (!new_index) {
			new_id_places[i] = $(this).find("id_hlavni").text();// ziskame z xml id
			new_marker[i] = createMarker(latlng, $(this).find("id_hlavni_info").text(), j, $(this).find("nazev").text(), $(this).find("popis").text(), $(this).find("obrazek").text(), $(this).find("odkaz").text());

		} else {
			new_id_places[i] = null;
			new_marker[i] = null;
		}

	} else {

		if (!new_index) {
			new_id_places[i] = $(this).find("id_hlavni").text();
			new_marker[i] = marker[index - 1];

		} else {
			new_id_places[i] = null;
			new_marker[i] = null;
		}

	}
	


	
	
	if (new_index) {// tato podminka nam zpusobi to ze na marker ktery jiz existuje, budou odkazovat vsechny hlavni_infa var id_marker = new_index - 1;
		var cislo = j;
	} else if (index) {
		var id_marker = i;
		var cislo = j + 1;
		j++;

		// musime nastavit ikonku, protoze, ikonka muze mit
		// jine cislo nez mela

		

		var micon = new google.maps.MarkerImage(mainaddress
		+ "public/img/icon-maps/icon-" + typ_icon
		+ cislo + ".png", icon_size, icon_origin,
		icon_anchor);
		new_marker[i].setIcon(micon);

	} else {
		var id_marker = i;
		var cislo = j + 1;
		j++;
	}

	var large_content = '<div class="region_vysledek_content_item" id="large_region_vysledek_content_item_'+$(this).find("id_hlavni_info").text()+'">'; 
	      var content = '<div class="region_vysledek_content_item" id="region_vysledek_content_item_'+$(this).find("id_hlavni_info").text()+'">';
	
	
	var tmp;
	
	tmp = '<img src="'+mainaddress + "public/img/icon-maps/icon-place" + (i+1) + ".png"+'" />';
	
	//large_content += tmp;
	content += tmp;

	var nadpis = '<a href="'+ $(this).find("odkaz").text() +'" id="region_vysledek_nadpis' + $(this).find("id_hlavni_info").text()
	+ '" class="nadpis">' + $(this).find("nazev").text() + '</a>'; 
	
	var large_nadpis = '<a href="'+ $(this).find("odkaz").text() +'"' + ' class="nadpis">' + $(this).find("nazev").text() + '</a>';
	
	if (typAction == "calendar" || typAction == "myCalendar") {
		tmp = '<div class="date_time">' + $(this).find("od").text() + '</div>';
		var tmp_large = tmp + large_nadpis;
          tmp += nadpis;


large_content += tmp_large;
content += tmp;
	} else if (typAction == "article") {
		tmp = '<div class="date_time">' + $(this).find("zverejneno").text() + '</div>';
		var		tmp_large = tmp + large_nadpis;
		tmp += nadpis;


large_content += tmp_large;
content += tmp;
	}

	if ($(this).find("obrazek").text() != 0) {
tmp = '<img class="image" width="50px" src="' + mainaddress
	+ 'public/files/images/hlavni_info/mini/'
	+ $(this).find("obrazek").text()
	+ '.jpg" alt="'
	+ $(this).find("nazev").text() + '" />';
var tmp_large = '<img class="image" src="' + mainaddress
+ 'public/files/images/hlavni_info/mini/'
+ $(this).find("obrazek").text()
+ '.jpg" alt="'
+ $(this).find("nazev").text() + '" />';
large_content += tmp_large;
content += tmp;
	}


	
	if (typAction == "place" || typAction == "company"
	|| typAction == "favorites" || typAction == "visited") {
		var		tmp_large = large_nadpis;
		tmp = nadpis;

		large_content += tmp_large;
		content += tmp;
	}
	tmp = $(this).find("popis").text() + '<div class="clear_both"></div></div>';
	
	large_content += tmp;
	content += tmp;
	
	
	$("#large_region_vysledek_content").append(large_content);
	$("#region_vysledek_content").append(content);

	var id = $(this).find("id_hlavni_info").text();
/*
	$(
							'#region_vysledek_nadpis' + $(this).find(
									"id_hlavni_info").text()).click(
	function() {
		deleteAllMarkers();
		clickMarker(id,typAction);
	});
*/	
	
	/*zvirazneni kdyz ukazeme na item*/
	highLightItems(id,typ_icon,i,new_marker[i]);

	i += 1;
	
	});

	
	for ( var i = 0; i < marker.length; i++) {// odstranime vsechny markery,
		// co tam nemaji uz co delat
		if ((new_id_places.search_array(id_places[i]) == false)
		&& (marker[i] != null)) {
			marker[i].setMap(null);
		}
	}

	marker = new_marker;
	id_places = new_id_places;

	// postarame se, aby se zobrazili v idealni poloze mapy
	if (marker.length > 0) {
	var bounds = new google.maps.LatLngBounds();

	for ( var i = 0; i < marker.length; i++) {
		bounds.extend(new google.maps.LatLng(marker[i].getPosition().lat(),
		marker[i].getPosition().lng()));
	}
	map.fitBounds(bounds);
	} else {
		var latlngcenter = new google.maps.LatLng(50.69317998008128,14.509490966796864);
		map.setCenter(latlngcenter);
		map.setZoom(10);
	}	

}






