﻿function FindAddress(mapDIV,resultsDIV,loadingDIV,f)
{
    this.mapDIV=mapDIV;
    this.resultsDIV=resultsDIV;
    this.loadingDIV=loadingDIV;
    this.f=f; //outside function to be called when the user chooses one of the addresses. must take address, latiude, longitude as input
    var map=null;
    var errorMessage = null;

    try
    {
    VEMap.prototype.ShowMessage = function(msg)
    {
        errorMessage = msg;
        ShowErrorMessage(AppStrings.validationError);
    }
    }catch(e){}
    
    function GetMap(mapDIV)
    {
        try
        {
            map = new VEMap(mapDIV);
            map.LoadMap();
        }catch(e)
        {
            return false;
        }
        return true;
    }

    //Find
    this.Find=function(address)
    {    
        if(!mapDIV || mapDIV=="" || !resultsDIV || resultsDIV=="") return false;
        if(!$(mapDIV) || !$(resultsDIV)) return false;
        if(!address || address.length ==0) return false;
        
        try
        {
            if(!map)
            {
                if(!GetMap(mapDIV)) return false;
            }
            if(map)
            {
                if($(resultsDIV)){
                    $(resultsDIV).style.display="none";
                    $(resultsDIV).innerHTML="";        
                }
                if($(loadingDIV)) $(loadingDIV).style.display="inline";
                map.Find(null,address,null,null,null,null,false,false,false,false,MoreResults);
            }
        }
        catch(e)
        {
            ShowErrorMessage(e.message);
            return false;
        }
        return true;
    }
    
    function ShowErrorMessage(message)
    {
        if($(loadingDIV)) $(loadingDIV).style.display="none";
        if(!$(resultsDIV)) return;
        $(resultsDIV).innerText = message;
        $(resultsDIV).className = "errormessage";
        $(resultsDIV).style.display="block";
    }

    function MoreResults(a,b,c,d,f)
    {
        if(d!=false)
        {	        
	        if($(loadingDIV)) $(loadingDIV).style.display="none"; 
	        CreateResultSet(c);	           
        }
    }
            
    function CreateResultSet(places)
    {        
        if(!places || places.length==0 || errorMessage != null)
        {
            ShowErrorMessage(AppStrings.validationError);
            errorMessage = null;
            return;
        } 
        
        if(places.length == 1)
        {
            eval(f + "('" + escape(places[0].Name) + "','" + places[0].LatLong.Latitude+ "','" + places[0].LatLong.Longitude + "')");
            return;
        }
        
        $(resultsDIV).className ="";
        var div = document.createElement('div');
        div.innerText=AppStrings.didYouMean;
        div.className = "header";
        $(resultsDIV).appendChild(div);
                       
        for(var i=0;i<places.length;i++)
        {
            if(places[i].Name)
            {
                div = document.createElement('div');
                div.innerHTML=places[i].Name;
                div.className = "out";
                div.setAttribute('lat', places[i].LatLong.Latitude);
                div.setAttribute('lon', places[i].LatLong.Longitude);
                div.onmouseover = function(){this.className="hover";};
                div.onmouseout= function(){this.className = "out";};
                div.onmousedown=function(){
                    eval(f + "('" + escape(this.innerText) + "','" + this.getAttribute('lat')+ "','" + this.getAttribute('lon') + "')");
                    $(resultsDIV).style.display="none";
                };
                $(resultsDIV).appendChild(div);
            }
        }

        var none=AppStrings.noneOfTheAbove;
        
        div = document.createElement('div');
        div.className = "out";
        div.onmouseover = function(){this.className="hover";};
        div.onmouseout= function(){this.className = "out";};
        div.onmousedown=function(){
                eval(f + "(null,null,null)");
                $(resultsDIV).style.display="none";
            };
        div.innerText=none;
        $(resultsDIV).appendChild(div);
        $(resultsDIV).style.display="block";
    }   
}