// Debugging and functionality
function copy_obj(o) {
	var c = new Object();
	for(var e in o){c[e] = o[e];}
	return c;
	}
	
function l(x){
	if(typeof(console) != "undefined") console.log(x);
	else alert(x);
	}
// Status
function updateStatus(msg){
	$("#map_status").html(msg);
	}

// Places Functions
function filterPlaces(){
	places_map._controllers.places.filter();
	return false;
	}

function mainSearch(){
	var main_search_ajax_url =  WWW_ROOT + "ajax/map.search.place.php";
	//show loading
	
	var q = $("#place_search_input").val();
	if(!q) {
		clearPlaceSearch();
		return false;
		}
	
	placeSearchIndicator(true);
	if(typeof(pageTracker) != "undefined")
		pageTracker._trackPageview(ROOT+"harta/cautare/"+q);
	$.getJSON(main_search_ajax_url,
			  {
				  search:q
				},
			  function(data){
                            var refs_results = [];
                            var results = places_map._controllers.places.showIDs(data,
                                 function(id){ // notFound function
                                            var m = places_map._controllers.refs.getMarkerByID(id);
                                            refs_results.push(m);
                                            }
                                        );

                            handlePlaceAndRefsResults(results, refs_results, places_map);

                            $(".places_clear_button").show();
                            placeSearchIndicator(false);
                            updateFilterLinks();
                            });
	
	return false;// called on submit, needs false to NOT re-direct
	}
	
function placeSearchIndicator(flag){
	if(flag){// show if flag is true
		$("#place_search_submit, #place_search_input").attr('disabled','disabled');
		$(".search_loader").show();
	}else{
		$("#place_search_submit, #place_search_input").removeAttr('disabled');
		$(".search_loader").hide();		
		}
	}

function handlePlaceAndRefsResults(place_results, refs_results, map){
	rc.clear();
	var length = Math.max(place_results.length, refs_results.length);
	if(length){
		if(refs_results.length)
				map.panTo(refs_results[0].getLatLng());
			else
				map.panTo(place_results[0].getLatLng());				
		
		var subject = (length == 1)?"rezultat":"rezultate";
		updateStatus(message_icon + " Am gasit <strong>"+ length + "</strong> "+  subject + ".");
		}else{
			rc.hide();
			updateStatus(message_icon + " " + text_not_found);
			return;
			}
		
	// Add Referenced Results
	if(refs_results.length){
		
		rc.update(
			refs_results, 
			refHandle
			);
		}		
	if(place_results.length){
		rc.append(
			place_results, 
			placeHandle
			)
		}
	$("#place_search_input").focus();
	$("#place_search_input").select();
	}
function refHandle(marker){
		var ref_class = "ref_result";
		if(typeof(marker) == "undefined"){
			return "---";
			}
		var item = marker.item;

		var a = $('<a></a>');
		a.addClass(ref_class)
			.attr('id'	 , "ref_" + item.id)
			.attr('title', item.name)
			.attr('href', jsv0)
			.html(trimText(item.name))
			.click(function(){
					var a = $(this).attr("id").split("_");
					var m = places_map._controllers.refs.getMarkerByID(a[1]);
					map.panTo(m.getLatLng());
					})
			.prepend(reference_icon+" ");
		return a;
		}
		
function placeHandle(marker){
	var place_class = "place_result";
		var item = marker.item;
		var a = $('<a></a>')
			.addClass(place_class)
			.attr('id',"place_"+item.id)
			.attr('title', item.name)
			.attr('href', jsv0)
			.html(trimText(item.name))
			.click(function(){
							var a = $(this).attr("id").split("_");
							var m = places_map._controllers.places.getMarkerByID(a[1]);
							places_map.panTo(m.getLatLng());
							})
			.prepend(item.icon_img+" ");
		return a;
	}
	
function handlePlaceResults(results, map){
	var result_class = "place_result";
	$(".places_clear_button").show();
	if(results.length){
		map.panTo(results[0].getLatLng());
		
		var subject = (results.length == 1)?"rezultat":"rezultate";
		updateStatus(message_icon + " Am gasit <strong>"+results.length + "</strong> "+  subject + ".");
		
	}else{
		rc.hide();
		updateStatus(message_icon + " " + text_not_found);		
		}
		
	rc.update(
			results, 
		 	placeHandle
			);
	}
// End of Places Functions


// Street Functions
function filterStreets(){
	var street_search_ajax_url = ROOT+"ajax/map.search.street.php";
	
	var name = $("#place_search_street_input").val();
	if(!name){
		clearStreetSearch();
		return false;
		}
	
	if(typeof(pageTracker) != "undefined")
		pageTracker._trackPageview(ROOT+"harta/cautare-strada/"+name);
		
	$.getJSON(street_search_ajax_url,{q:name},function(results){
		var new_results = [];
		
		var c = "#ff0000";
		var w = 1;
		var o = 1;
		
		for(var i=0;i<results.length;i++){
			var item  	= results[i];
			var ll		= eval(item.ll);
			
			var ll 		= encodeLatLng(ll);
			
			var name 	= item.name;
			
			var polyline = new GPolyline(ll, c, w);
			
			//places_map.addOverlay(polyline);
			polyline.item = item;
			new_results.push(polyline);
			}

		handleStreetResults(new_results, places_map);
		//updateFilterLinks();
		});
	
	return false;
	}
function encodeLatLng(ll){
	var ar = [];
	for(i in ll){
		var c = ll[i];
		var k = new GLatLng(c[0],c[1]);
		ar.push(k);
		}
	return ar;
	}

function handleStreetResults(results, map){
	
	$(".streets_clear_button").show();
	
	if(results.length){
		var subject = (results.length == 1)?"rezultat":"rezultate";
		updateStatus(message_icon + " Am gasit <strong>" + results.length + "</strong> "+  subject + ".");
		
	}else{
		rc.hide();
		updateStatus(message_icon + " " + text_not_found);	
		return;
		}
	if(results.length == 1){
		results[0].focusOn(map);
		}		

	
	rc.update(results, 
		  function(marker){
			var result_class = "street_result";
			var item = marker.item;	
			var name = item.name + ", "+ zones[item.z];
			var a = $('<a></a>')
				.addClass(result_class)
				.attr('href', jsv0)
				//.attr('id',"street_"+item.id)
				.attr('title', name)
				.html(trimText(name,22))
				
				.click(function(){
					//var a = $(this).attr("id").split("_");
					marker.focusOn(map);
					})
				.prepend(street_icon + " ");
			
			return a;
			});
	

	$("#place_search_street_input").focus();
	$("#place_search_street_input").select();
	}
	
function streetSearchIndicator(flag){
	if(flag){// show if flag is true
		$("#place_street_search_submit, #place_search_street_input").attr('disabled','disabled');
		$("#place_search .street_loader").fadeIn();
	}else{
		$("#place_street_search_submit, #place_search_street_input").removeAttr('disabled');
		$("#place_search .street_loader").fadeOut();
		}
	}
	

	
function clearPlaceSearch(){
	
	rc.clearAndHide();
	places_map._controllers.places.showAll();
	
	updateStatus(text_idle);
	$("#place_search_input").val("");
	$(".places_clear_button").hide();
	}
	
function clearStreetSearch(){
	rc.clearAndHide();

	updateStatus(text_idle);
	$("#place_search_street_input").val("");
	$(".streets_clear_button").hide();
	}
// End of Street Functions

// Map show / hide stuff
function togglePOI(){places_map._controllers.refs.toggle();}
	
function togglePlaces(){places_map._controllers.places.toggle();}
	
function toggleStreets(){places_map._controllers.streets.toggle();}

// Filtered links
$(function(){
		   poiFile = $("#export_poi").attr('href');
		   gpxFile = $("#export_gpx").attr('href');
		   kmlFile = $("#export_kml").attr('href');
		   sendToFile  = $("#sendToFriend").val();
		   });
function updateFilterLinks(){
        var str, filter,main_search1,street_search1;
	if(typeof(places_filter) == "undefined")
		return false;
		
	if(places_filter){
		str 	= composeFilterString();
		filter 	= "/filter/";
	}else{
		main_search1 = $("#place_search_input").val();
		street_search1 = $("#place_search_street_input").val()
		
		if(main_search1){
			filter  = "/cautare/";
			str 	= main_search1;
			}
		if(street_search1){
			filter  = "/cautare-strazi/";
			str 	= street_search1;
			}
			
		if(!main_search1 && !street_search1 && !places_filter){
			filter 	= "/centru/";
			str 	= places_map.getCenter().lat() + "," + places_map.getCenter().lng() + "," + places_map.getZoom();
			}
		}
		
	var poi  = poiFile + filter + str;
	var gpx	 = gpxFile + filter + str;
	var kml	 = kmlFile + filter + str;
	var send = sendToFile  + filter + str;
	
	if(filter != "/centru/"){
		$("#export_poi").attr('href',poi);
		$("#export_gpx").attr('href',gpx);
		$("#export_kml").attr('href',kml);
		}
	sendTo  = $("#sendToFriend").val(send);
	}
	
// Copy to clipboard
function copy(inElement) {
  if (inElement.createTextRange) {
    var range = inElement.createTextRange();
    if (range && BodyLoaded==1)
      range.execCommand('Copy');
  } else {
    var flashcopier = 'flashcopier';
    if(!document.getElementById(flashcopier)) {
      var divholder = document.createElement('div');
      divholder.id = flashcopier;
      document.body.appendChild(divholder);
    }
    document.getElementById(flashcopier).innerHTML = '';
    var divinfo = '<embed src="'+WWW_ROOT+'images/_clipboard.swf" FlashVars="clipboard='+encodeURIComponent(inElement.value)+'" width="0" height="0" type="application/x-shockwave-flash"></embed>';
    document.getElementById(flashcopier).innerHTML = divinfo;
  }
  inElement.select();
}

// trimText

function trimText(text, trim_len){
	if(!trim_len)
		trim_len = 23;
	if(text.length > trim_len)
		return text.substring(0,trim_len) + "&hellip;";
		
	return text;
	}
	
// Selected thingy
function handleSelected(button){
	$(button).toggleClass('selected');
	$("#controls a").not(button).removeClass('selected');
	}
