﻿var map = null;
var mpComp;
var p;//the initial pointer focus of display
var mrk = [];
var infoWindow = [];
var mapPointsData;

function gMaploadUI(lat,lng,tit) 
{
    if (GBrowserIsCompatible()) 
    {
	    if(mpComp==null)
		    mpComp = $("#mapContent");
    	
	    if(lat!=0 && lng!=0)
	    {
	        	          
            $.extend($.blockUI.defaults.overlayCSS, { backgroundColor: '#97a9d5' });
	        $(mpComp).displayBox(null,OnMapClose);
	        OnMapShow();
	        InitMap(lat,lng,14,true);
	        
	    }
    }
}

function ResetMap()
{
    if(!map)
        return;
        
    map.setCenter(p,14);
	            
    
}
function gMapStructWS()
{
    return Nicolaus.Services.gMapStructures;
}
function ShowHotelsInMap()
{
    if(!map)
        return;
    
    var bounds = map.getBounds();
    var southWest = bounds.getSouthWest();
    var northEast = bounds.getNorthEast();

    try
    {
        //$.post(wsUri,{language:'it',NorthEastLng:northEast.lng(),NorthEastLat:northEast.lat(),SouthWestLng:southWest.lng(),SouthWestLat:southWest.lat()},GetStructuresPointCompleted);
        gMapStructWS().SearchInMap(lang,northEast.lng(),northEast.lat(),southWest.lng(),southWest.lat(),catalogues,GetStructuresPointCompleted,GetStructuresPointError);
    }catch(e){}
    
}


            
function GetStructuresPointCompleted(data)
{
    map.clearOverlays();
    mapPointsData = data;
    for(i=0;i<data.length;i++)
    {
        ShowStructurePoint(i,data[i]);
    }
}
function GetStructureMapPointsCompleted(data)
{
    mapPointsData = data;
}
function GetStructureMapPoints(ids)
{
    try
    {
        gMapStructWS().GetStructuresMapPoints(lang,ids, GetStructureMapPointsCompleted,GetStructuresPointError);
    }catch(e){}
    
}
function GetStructuresPointError(error)
{
    //do nothing;
}
function ShowStructurePoint(i,point)
{
    var name = point.Name;// point.selectSingleNode("Name").text;
    var id = point.ID;//point.selectSingleNode("@ID").text;
    var lat = point.Lat;// parseFloat(point.selectSingleNode("Lat").text);
    var lng = point.Lng;//parseFloat(point.selectSingleNode("Lng").text);
    var lName = point.LocationName;// point.selectSingleNode("LocationName").text;
    var catID = point.CatSectionID;//point.selectSingleNode("CatSectionID").text;
    
    var sDesc = point.ShortDescription;
    var img = null;
    if(point.Images!=null && point.Images.length>0)
        img = point.Images[0].NAME;
    
   
    //var mrkimg = "http://base.google.com/base/s2/images/map" + (i+1)  + ".png";
    var mrkimg = "IMG/iconb.png";
    var icon = new GIcon(G_DEFAULT_ICON, mrkimg);
    icon.iconSize   = new GSize(20, 34);
    icon.iconAnchor = new GPoint(14, 40);

    mrk[i] = new GMarker(new GLatLng(lat, lng),{title:name,icon: icon});//,icon: icon
    map.addOverlay(mrk[i]);

    infoWindow[i] = GetInfo(id,name,lName,sDesc,img,catID);

    GEvent.addListener(mrk[i], "click",function(){
        mrk[i].openInfoWindowHtml(infoWindow[i],{maxWidth:350});
    }); 
}

function GetInfo(id,structName,location,shortDesc,img,catID)
{
    var showOverlayLink = getElementValue("showOverlayLink");
    var content = "<table bgcolor=\"#ffffff\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"width:250px;\">";
    content += "<tr><td><b>";
    if(showOverlayLink!="0")
    {
        content += "<a class=\"FeatureList2\" href=\""+baseWeb+"StructureDetail_cs"+catID+"_st"+id+".aspx\">";
        content += structName;
        content += "</a>";
    }else
        content += structName;
    content += "<b></td></tr>";
    content += "<tr><td>"+location+"</td></tr>";
    content += "<tr><td colspan=\"2\"><div style=\"width:250px;height:100px;overflow:auto;\">";
    
    if(img!="")
        content+="<img border=\"0\" src=\""+baseImgUrl+id+"/thumbs/"+img+"\" align=\"left\"/>"
    
    content += shortDesc+"</div></td></tr>";
    content += "</table>";
    return content;
    
}

function OnMapShow()
{ 
    if (document.all)
    {               
        document.body.scroll = "no";
    }
    else
    {
        var oTop = document.body.scrollTop;
        document.body.style.overflow = "hidden";
        document.body.scrollTop = oTop;
    }
}

function OnMapClose()
{
    document.body.scroll = "";
    document.body.style.overflow = "";
}

function InitMap(lat,lng,lvl,wheel,showAll)
{
    if(lat==0 || lng==0)
        return;
        
    if(map==null)
    {
        map = new GMap2(document.getElementById("map"));
	    map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        if(wheel)
        {
           map.enableScrollWheelZoom();
           OnMapShow();
        }
            	        
        p = new GLatLng(lat, lng);
        map.setCenter(p,lvl);
        
        if(!showAll)
        {
            var s = mapPointsData[0];
            if(s.Lat==0 && s.Lng==0)
            {
                s.Lat = lat;
                s.Lng = lng;
            }
            ShowStructurePoint(0,s);
        }
        
    }else
    {
        p = new GLatLng(lat, lng);
        map.setCenter(p,lvl);
    }
    
    try
    {
	    var tit = $("span[@id*=lblStructureName]")[0].innerText;
        if(tit)
            $("#mapHeader")[0].innerHTML = tit;
    }catch(e){}
    
    if(showAll)
    {        
        try{
            setTimeout(ShowHotelsInMap(),1000);
        }catch(e){}
    }
}

function Geocode(address,structID) 
{
    var geocoder = new GClientGeocoder();
    
    if(!geocoder)
        return;
    
    geocoder.getLatLng
    (
      address,
      function(point) 
      {
        if (!point) 
        {
          alert(address + " not found");
        } 
        else 
        {
            defaultLat = point.lat();
            defaultLng = point.lng();
            
            //write back geocoded coordinates
            try
            {
                gMapStructWS().RecordStructuresMapCoding(lang,structID,defaultLat,defaultLng,RecordStructuresMapCodingCompleted,GetStructuresPointError);
            }catch(e){}
        }
      }
    );
}
function RecordStructuresMapCodingCompleted(result)
{
    mapPointsData = [result];
}