function toggleDisp() {
    for (var i=0;i<arguments.length;i++){
        var d = $(arguments[i]);
        if (d.style.display == 'none')
            d.style.display = 'block';
        else
            d.style.display = 'none';
    }
}

function toggleExpand(a)
{
    a.className = (a.className == 'cat-expanded') ? 'cat-unexpanded' : 'cat-expanded';
}

function toggleCategory(a, field, val, lnk)
{
	if (field.value==1)
	{
		a.src = '/css/mrk/t.gif';
		field.value=0;
		lnk.className = 'cat-unchecked';
	}
	else
	{
		a.src = '/css/mrk/'+val+'.gif';
		field.value=1;
		lnk.className = 'cat-checked';
	}
	return false;
}

function toggleTab(num,numelems,opennum,animate) {
	animate=false;
    if ($('tabContent'+num).style.display == 'none'){
        for (var i=1;i<=numelems;i++){
            if ((opennum == null) || (opennum != i)){
                var temph = 'tabHeader'+i;
                var h = $(temph);
                if (!h){
                    var h = $('tabHeaderActive');
                    h.id = temph;
                }
                var tempc = 'tabContent'+i;
                var c = $(tempc);
                if(c.style.display != 'none'){
                    if (animate || typeof animate == 'undefined')
                        Effect.toggle(tempc,'appear',{duration:0.2, queue:{scope:'menus', limit: 3}});
                    else
                        toggleDisp(tempc);
                }
            }
        }
        var h = $('tabHeader'+num);
        if (h)
            h.id = 'tabHeaderActive';
        h.blur();
        var c = $('tabContent'+num);
        c.style.marginTop = '2px';
        if (animate || typeof animate == 'undefined'){
            Effect.toggle('tabContent'+num,'appear',{duration:0.2, queue:{scope:'menus', position:'end', limit: 3}});
        }else{
            toggleDisp('tabContent'+num);
        }
    }
}

function gmap_zoomIn() {
	// perform the requested operation
	map.zoomIn();
	// hide the context menu now that it has been used
	contextMenu.style.visibility="hidden";
}      

function gmap_zoomOut() {
	// perform the requested operation
	map.zoomOut();
	// hide the context menu now that it has been used
	contextMenu.style.visibility="hidden";
}
 
function gmap_zoomInHere() {
	// perform the requested operation
	var point = map.fromContainerPixelToLatLng(clickedPixel)
	map.zoomIn(point,true);
	// hide the context menu now that it has been used
	contextMenu.style.visibility="hidden";
}

function gmap_zoomOutHere() {
	// perform the requested operation
	var point = map.fromContainerPixelToLatLng(clickedPixel)
	map.setCenter(point,map.getZoom()-1); // There is no map.zoomOut() equivalent
	// hide the context menu now that it has been used
	contextMenu.style.visibility="hidden";
}

function gmap_centerMapHere() {
	// perform the requested operation
	var point = map.fromContainerPixelToLatLng(clickedPixel)
	map.panTo(point);
	// hide the context menu now that it has been used
	contextMenu.style.visibility="hidden";
	$('legend_div').innerHTML = point.x + ", " +  point.y;
	
}

function gmap_gotoCoords(x,y)
{
	//map.setCenter(new GLatLng(y,x),15); 
	map.panTo(new GLatLng(y,x)); 
	map.setZoom(15);
}


function gmap_gotoCity(x,y,level, hybrid)
{
	map.setCenter(new GLatLng(y,x),level); 
	if (hybrid>0)
		map.setMapType(G_HYBRID_MAP);
	else
		map.setMapType(G_NORMAL_MAP);
}

function checkZoomLevel()
{
	var point = map.fromContainerPixelToLatLng(clickedPixel)
	// hide the context menu now that it has been used
	contextMenu.style.visibility="hidden";
	if (map.getZoom() < 15)
	{
		if (confirm("Πρέπει να κάνετε μεγαλύτερο ζούμ στο χάρτη για να βάλετε μια καταχώρηση. Να γίνει αυτόματα ζoύμ;"))
		{
			map.setCenter(point, 15);
		}
		return false;
	}
	map.clearOverlays();
	map.addOverlay(new GMarker(point));
	map.panTo(point);
	return true;	
}

//----- Stop page scrolling if wheel over map ----
function wheelevent(e)
{
	if (!e) e = window.event;
	if (e.preventDefault) e.preventDefault();
	e.returnValue = false;
}

startLoading = function(element) {
  element = $(element);
  element.innerHTML = '<br /><br /><center><div align="center" class="loading">Loading...</div></center><br /><br /><br /><br /><br /><br />';
  //element.show();
}

endLoading = function(element) {
  element = $(element);
  element.show();
  //return new Effect.Appear(element);
}



function getBoundsInForm(form)
{
	var bounds = map.getBounds();
	var ne = bounds.getNorthEast();
	var sw = bounds.getSouthWest();
	form.x1.value = sw.lng();
	form.x2.value = ne.lng();
	form.y1.value = sw.lat();
	form.y2.value = ne.lat();
}


function getBoundsInString()
{
	var bounds = map.getBounds();
	var ne = bounds.getNorthEast();
	var sw = bounds.getSouthWest();
	str =  'x1='+sw.lng();
	str += '&x2='+ne.lng();
	str += '&y1='+sw.lat();
	str += '&y2='+ne.lat();
	return str;
}


function updateDetailDiv(url)
{
	new Ajax.Updater('detail_div',''+url, {asynchronous:true, evalScripts:true, onLoading:function(request) {startLoading('detail_div');}, onComplete:function(request, json) {endLoading('detail_div')}, requestHeaders:['X-Update','detail_div']},false)
    return true;
}


function updateAnyDiv(div, url)
{
	new Ajax.Updater(div,''+url, {asynchronous:true, evalScripts:true, onLoading:function(request) {startLoading(div);}, onComplete:function(request, json) {endLoading(div)}, requestHeaders:['X-Update',div]},false)
    return true;
}

function gn_showMessage(id)
{
	updateAnyDiv('messagebox_div', '/explorer/messageView/'+id);
}


function gmap_openMarkerInfoWindow(marker)
{
    html = "<div class=\"info-window\">"

	if (marker.mrk_image != '')
		html += "<img align=\"left\" src=\""+marker.mrk_image+"\" border=\"2\" style=\"margin:3px;\" />";

	if (marker.catPath)
		html += "<small>"+marker.catPath+"</small><br />";    
	html += ""+marker.title+"";
	
    
    if (marker.is_ad>0) 
    {
            html += "<br />";
            html += "Κάντε κλίκ για πληροφορίες";
    }
    else
    {
            html += "<br />";
            html += "<a onclick=\"updateDetailDiv('"+marker.url+"')\" class=\"ajax-link\"><b>Λεπτομέρειες</b></a>";
    }
	html += "</div>";
	marker.openInfoWindowHtml(html);
}


function gmap_showMarkerInfo()
{
    gmap_openMarkerInfoWindow(this);
    return true;
}

function gmap_zoomToMarker(id)
{
    if (typeof map_markers_array[id] != 'undefined')
    {
        if (map.getZoom() < 15)
            map.setZoom(15);
        map.setCenter(map_markers_array[id].getPoint());
        gmap_openMarkerInfoWindow(map_markers_array[id]);
    }
}




function gmap_hideMarkerInfo()
{
	this.closeInfoWindow();
}

function imgtoggle(imgs, divs)
{
		div = $(divs);
		img=$(imgs);
		if (div.style.display == 'none')
			img.className = 'expanded';
		else
			img.className = 'expand';
		Effect.toggle(divs, 'blind');
}

function submitBrsForm(frmName)
{
	frmName = 'brsForm';
	if (map.getZoom() < 11)
	{
		map.setZoom(11);
	}
	form = $('brsForm');
	getBoundsInForm(form);
	/* Enlarge */
	var wx = parseFloat(form.x2.value) - parseFloat(form.x1.value);
	var wy = parseFloat(form.y2.value) - parseFloat(form.y1.value);
	/* alert('wx = ' + wx + ' wy=' + wy); */
	form.x1.value  = parseFloat(form.x1.value) - wx;
	form.x2.value  = parseFloat(form.x2.value) + wx;
	form.y1.value  = parseFloat(form.y1.value) - wy;
	form.y2.value  = parseFloat(form.y2.value) + wy; 
	new Ajax.Updater('detail_div','/explorer/browse', {asynchronous:true, evalScripts:true, onLoading:function(request) {startLoading('detail_div')},  onComplete:function(request, json) {endLoading('detail_div');}, parameters:Form.serialize($(frmName)), requestHeaders:['X-Update', 'detail_div']});
}



var map = null;
var map_manager = null;
var map_markers_array = [];
var contextMenu = null;
var gmap_initialPoint =null;
var gmap_initialType =G_NORMAL_MAP;


var gmap_icons = new Array;
for (i=0;i<0;i++)
{
	gmap_icons[i] = new GIcon(G_DEFAULT_ICON);
	gmap_icons[i].shadow=null;
	gmap_icons[i].image = "/css/mrk/"+i+".gif";
	gmap_icons[i].iconSize=new GSize(12, 20);
	gmap_icons[i].iconAnchor=new GPoint(7,20)
}


var gmap_legend_icons = new Array;
var legendIconNames = [
	['0.gif', 12,20],
	['1.gif', 12,20],
	['2.gif', 12,20],
	['3.gif', 12,20],
	['4.gif', 12,20],
	['5.gif', 12,20],
	['6.gif', 12,20],
	['7.gif', 12,20],
	['8.gif', 12,20],
	['9.gif', 12,20],
	['10.gif', 12,20],['11.gif', 12,20],['12.gif', 12,20],['13.gif', 12,20],
	['hospital.gif', 17,17], 
	['school.gif', 17,17], 
	['attraction_key.gif', 17,17],
	['hospital.gif', 17,17],
	['landmark.gif', 17,17],
	['marker-hotel.gif', 17,17],
	['restaurant_key.gif', 17,17],
	['shopping_key.gif', 17,17],
	['automoto_key.gif', 17,17],
	['govt_key.gif', 17,17],	
	['bus.gif', 17,17]
];

for (var i in legendIconNames)
{

        nm = legendIconNames[i][0];
        nx = legendIconNames[i][1];
        ny = legendIconNames[i][2];
        gmap_legend_icons[nm] = new GIcon(G_DEFAULT_ICON);
        gmap_legend_icons[nm].shadow=null;
        gmap_legend_icons[nm].image = "/css/mrk/"+nm;
        gmap_legend_icons[nm].iconSize=new GSize(nx, ny);
        gmap_legend_icons[nm].iconAnchor=new GPoint(nx,ny);
}


var gmap_autoRefresh = false;
var gmap_searchStarted=false;

function gmap_setAutoRefresh(val)
{
	gmap_autoRefresh = val;
}



function gmap_onDragEnd()
{
	if (gmap_autoRefresh!=true)
		return;
	form = $('brsForm');
	if (gmap_searchStarted==false)
		return;
	if (map.getZoom() < 11)
		return;
	
	var bounds = map.getBounds();
	var ne = bounds.getNorthEast();
	var sw = bounds.getSouthWest();
	x1 = sw.lng();
	x2 = ne.lng();
	y1 = sw.lat();
	y2 = ne.lat();
	
	if (x1 < parseFloat(form.x1.value) || x2 > parseFloat(form.x2.value) || y1 < parseFloat(form.y1.value) || y2 > parseFloat(form.y2.value))
	{
		submitBrsForm('');
	}
}


function gmap_geocoder_callback(response)
{
	map.clearOverlays();
    if (!response || response.Status.code != 200) 
	{
		alert("Δεν βρέθηκε!");
	}
	else
	{
		var place = response.Placemark[0];
		var point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
		map.setCenter(point);
		if (map.getZoom() <10)
			map.setZoom(10);
	}
}

function gmap_gotoAddress(address)
{
	geocoder = new GClientGeocoder();
    geocoder.getLocations(address + " ελλάδα", gmap_geocoder_callback);
}



function loadMap() {

	if (GBrowserIsCompatible()) {
		
		map = new GMap2(document.getElementById("gmap_div"));
		map.enableContinuousZoom();
		map.enableScrollWheelZoom();
		map.disableDoubleClickZoom();
		map.addControl(new GSmallMapControl());
		map.addControl(new GOverviewMapControl());
		map.addControl(new GMapTypeControl());
		
		if (typeof(gmap_initialPoint) !='undefined' && gmap_initialPoint!=null)
		{
			map.setCenter(new GLatLng(gmap_initialPoint.y, gmap_initialPoint.x), gmap_initialType == G_HYBRID_MAP ? 14:15);
			map.addOverlay(new GMarker(gmap_initialPoint));
			map.setMapType(gmap_initialType);
			
		}
		else
		{
			map.setCenter(new GLatLng(38.01422, 23.73577), 8);
		}

		map.getContainer().appendChild($('context_menu_div'));
	}

	GEvent.addListener(map,"singlerightclick",function(pixel,tile)
		{
			clickedPixel = pixel;
			var x=pixel.x;
			var y=pixel.y;
			if (x > map.getSize().width - 120) { x = map.getSize().width - 120 }
			if (y > map.getSize().height - 100) { y = map.getSize().height - 100 }
			contextMenu = $('context_menu_div');
			
			var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(x,y));
			pos.apply(contextMenu);
			//contextMenu.style.
			contextMenu.style.display= "";
			contextMenu.style.visibility= "visible";
			//alert(pos.prototype);
			var point = map.fromContainerPixelToLatLng(clickedPixel);
			map.lastClickedPoint = point;
	   });

	
	GEvent.addListener(map, "click", function() {
		$('context_menu_div').style.visibility="hidden";
	});
  
	
	GEvent.addListener(map,"dragend", gmap_onDragEnd);

/* This is to prevent page scrolling when the mouse is over the gmap */	
	GEvent.addDomListener($('gmap_div'), "DOMMouseScroll", wheelevent);
	$('gmap_div').onmousewheel = wheelevent; 

    map_manager = new MarkerManager(map);
	
	gmap_setAutoRefresh(true);
}




window.onload = loadMap;

window.onunload = function(){ GUnload(); };

