function createInputBox(name, value){        
        var input = document.createElement('INPUT');                                
            input.id = name;            
            input.setAttribute('Name',name);
            input.setAttribute('type','hidden');
            input.setAttribute('value',value);
            document.getElementById('MapData').appendChild(input);
    }
    
    function removeInputBoxByName(name){        
        var tags = document.getElementById('MapData').getElementsByTagName("input");        
        for(var i=0; i<tags.length; i++){        
            if(tags[i].getAttribute('ID')==name){                
                document.getElementById('MapData').removeChild(tags[i]);
            }
        }       
    }
    
    function addLocation(lat, lng, address, accuracy){  
        var temp = 0;              
        if(!accuracy){
            accuracy = 0
        }else{
            if(accuracy == 'undefined')
                accuracy = 0;
        }    
                    
        var url = 'mapservice.asmx/AddAssetLocation?key=' + key + '&lat=' + lat + '&lng=' + lng + '&address=' + address + '&accuracy=' + accuracy;                        
        //GLog.write(url);
        var request = GXmlHttp.create();
            request.onreadystatechange = function() {
              if (request.readyState == 4) {                
              }              
            }
            request.open("GET", url, true);                       
    	    request.send("");   
    	    
    }
    
    function addLocationDetail(lat, lng, type, value){                              
        if(value != 'undefined' && value != ""){     
            //var url = 'mapservice.asmx/AddAssetLocationDetail?locationid=' + locationid + '&type=' + type + '&value='+ value;                   
            
           setValue(document.getElementById('addressDetails'), getValue(document.getElementById('addressDetails')) + type + '=' + value + '|');
            /*
            var url = 'mapservice.asmx/AddAssetLocationDetail?key=' + key + '&lat=' + lat + '&lng=' + lng + '&type=' + type + '&value='+ value;
            var request = GXmlHttp.create();
                request.onreadystatechange = function() {
                  if (request.readyState == 4) {                
                  }              
                }
                request.open("GET", url, true);                       
    	        request.send("");     	    
    	    */    
    	}        
    }
    
    function removeLocation(lat, lng){        
        var url = 'mapservice.asmx/RemoveAssetLocation?key=' + key + '&lat=' + lat + '&lng=' + lng;                
        //alert(url);
        //GLog.write(url);
        var request = GXmlHttp.create();
            request.onreadystatechange = function() {
              if (request.readyState == 4) {                
              }              
            }
            request.open("GET", url, true);                       
    	    request.send("");     	    
    }
    
    function removeLocations(){
        var url = 'mapservice.asmx/RemoveAssetLocations?key=' + key;        
        var request = GXmlHttp.create();        
            request.open("GET", url, true);                      
            request.onreadystatechange = function() {
                if (request.readyState == 4) {}else{}  
	        }
    	   request.send("");
    }
    
    function saveLocations(){        
        removeLocations();        
        var tags = document.getElementById('MapData').getElementsByTagName("input");        
        for(var i=0; i<=totalAllowedMarkers; i++){        
            if(document.getElementById('lat'+i) && document.getElementById('lng'+i) ){
                addLocation(document.getElementById('lat'+i).getAttribute('value'),document.getElementById('lng'+i).getAttribute('value'),document.getElementById('address'+i).getAttribute('value'));
            }
        }     
        alert('locations added');  
    }
    
    function setZoom(delta) {
        if(delta<0){
          map.zoomOut();
        }else{
          map.zoomIn();
        }
      }
      
      function addAddress(locationText,point,latID,lngID,adID){
        
       var mark;
       var placemark;
        geocoder.getLocations(locationText,function(response){
            
            if (!response || response.Status.code != 200) {
                
                if(point){                  
                    mark = addMarkerForSaving(point,point.lat(),point.lng(),'',latID,lngID,adID);
                    //addLocation(point.lat(),point.lng(),'',0);                
                    //alternativeGeocode(point.lat(),point.lng());
                }else{
                    alert('The location could not be found');
                }    
            }else{ 
                
                placemark = response.Placemark[0];  

                if(placemark.Point){
                    
                    if(!point){
                        point = new GPoint(placemark.Point.coordinates[1],placemark.Point.coordinates[0]);
                    }
                    
                    var m = addMarkerForSaving(point,placemark.Point.coordinates[1],placemark.Point.coordinates[0],'',latID,lngID,adID);
                    
                    //addLocation(placemark.Point.coordinates[1],placemark.Point.coordinates[0],placemark.address,placemark.AddressDetails.Accuracy);
                    
                    //addGeocodedDetails(placemark,placemark.Point.coordinates[1],placemark.Point.coordinates[0]);
                    
               }//placemark.point
            }               
      }); 
      
    }
    
    function addGeocodedDetails(placemark,lat,lng){        
        //despite having a lat/lng from the place mark, use the lat/lng used with the hidden fields
        if(placemark.AddressDetails){
            if(placemark.AddressDetails.Accuracy>1){                        
                //country
                if(placemark.AddressDetails.Country){
                    if(placemark.AddressDetails.Country.CountryNameCode){
                        addLocationDetail(lat,lng,1,placemark.AddressDetails.Country.CountryNameCode);                                                
                    }
                    
                    //administrativearea
                    if(placemark.AddressDetails.Country.AdministrativeArea){
                        if(placemark.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName){
                            addLocationDetail(lat,lng,2,placemark.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName);                                                
                        }
                       
                        //subadministrativearea
                        if(placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea){
                            if(placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName){
                                addLocationDetail(lat,lng,3,placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName);
                            }
                            
                            //Locality
                            if(placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality){
                                if(placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName){
                                    addLocationDetail(lat,lng,4,placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName);
                                }  
                                
                                //Thoroughfare
                                if(placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare){
                                    if(placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare.ThoroughfareName){
                                        addLocationDetail(lat,lng,5,placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare.ThoroughfareName);
                                    }                           
                                }//thoroughfare 
                                
                                //Postal
                                if(placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode){
                                    if(placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber){
                                        addLocationDetail(lat,lng,6,placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber);
                                    }                                
                                }//postal                             
                            }//locality                           
                        }//subadministrativearea                     
                    }//administrativearea 
                }//country                           
               }else{                                                     
                    alternativeGeocode(lat,lng);                              
               } 
            }else{//addressdetails                        
                alternativeGeocode(lat,lng);
            }
            
    }
    
    function alternativeGeocode(lat, lng){    
        GDownloadUrl("GeocodeProxy.aspx?lat=" + lat + "&lng=" + lng, function(data, responseCode) {                        
           // alert(data);                     
            var xml = GXml.parse(data);
            //GLog.write(data);
            if(xml){
                if(xml.documentElement){
                    if(xml.documentElement.getElementsByTagName("status").length==0)
                    {                        
                        if(xml.documentElement.getElementsByTagName("code").length>0){
                            addAlternateGeocodeValues(lat, lng, xml.documentElement.getElementsByTagName("code")[0]);                            
                        }else{
                            if(xml.documentElement.getElementsByTagName("geoname").length>0){
                                addAlternateGeocodeValues(lat, lng, xml.documentElement.getElementsByTagName("geoname")[0]);
                            }
                        }
                     } //if status  
                 }//if doc
              } //if xml                      
          });
    }
    
    function addAlternateGeocodeValues(lat, lng, elem){
        if(elem.getElementsByTagName("countryCode").length>0){
            if(elem.getElementsByTagName("countryCode")[0]){
                var countryCode = getText(elem.getElementsByTagName("countryCode")[0]);   
                if(countryCode=='US'){                         
                    addLocationDetail(lat,lng,1,countryCode);                                  
                }else{
                    if(elem.getElementsByTagName("countryName")[0]){
                        addLocationDetail(lat,lng,1,getText(elem.getElementsByTagName("countryName")[0]));
                    }else{
                        addLocationDetail(lat,lng,1,countryCode);
                    }
                }    
            }                        
            
            if(countryCode=='US'){
                if(elem.getElementsByTagName("adminCode1").length>0){                                        
                    addLocationDetail(lat,lng,2,getText(elem.getElementsByTagName("adminCode1")[0]));
                }
            }else{
                if(elem.getElementsByTagName("adminName1").length>0){
                    addLocationDetail(lat,lng,2,getText(elem.getElementsByTagName("adminName1")[0]));
                }
            }    
            
            if(elem.getElementsByTagName("adminName2").length>0){                            
                addLocationDetail(lat,lng,3,getText(elem.getElementsByTagName("adminName2")[0]));
            }
            
            if(elem.getElementsByTagName("name").length>0){
                    addLocationDetail(lat,lng,4,getText(elem.getElementsByTagName("name")[0]));
            }
            
            if(elem.getElementsByTagName("postalcode").length>0){
                    addLocationDetail(lat,lng,6,getText(elem.getElementsByTagName("postalcode")[0]));
            }
        }//countrycode length
    }
    
    function addMarkerForSaving(point, lat, lng, address, latID, lngID, adID){          
        numMarkers++;   
              
        var marker = new OpMarker(point,{draggable: true});
        marker.setName(numMarkers);   
        
        GEvent.addListener(marker, "dragend", function() {       
            //removeLocation(document.getElementById('lat' + marker.name).value,document.getElementById('lng' + marker.name).value);
            //document.getElementById('lat' + marker.name).setAttribute('value',marker.getPoint().lat());
            //document.getElementById('lng' + marker.name).setAttribute('value',marker.getPoint().lng());            
            setValue(document.getElementById(latID),marker.getPoint().lat());
            setValue(document.getElementById(lngID),marker.getPoint().lng());
            setValue(document.getElementById(adID),address);
            //addLocation(marker.getPoint().lat(),marker.getPoint().lng(),'');
            
            /*
            geocoder.getLocations(marker.getPoint().lat() + "," + marker.getPoint().lng(),function(response){
        
                if (!response || response.Status.code != 200) {
                    
                    if(point){                        
                        //mark = addMarkerForSaving(point,mark.getPoint().lat(),mark.getPoint().lng(),'');
                        //addLocation(mark.getPoint().lat(),mark.getPoint().lng(),'',0);                         
                        alternativeGeocode(marker.getPoint().lat(),marker.getPoint().lng());
                    }else{
                        alert('The location could not be found');
                    }    
                }else{ 
                    
                    placemark = response.Placemark[0];  
                                
                    if(placemark.Point){
                        
                        if(!point){
                            point = new GPoint(placemark.Point.coordinates[1],placemark.Point.coordinates[0]);
                        }
                        
                        //var +m = addMarkerForSaving(point,placemark.Point.coordinates[1],placemark.Point.coordinates[0],'');
                        
                       // addLocation(placemark.Point.coordinates[1],placemark.Point.coordinates[0],placemark.address,placemark.AddressDetails.Accuracy);
                        
                        addGeocodedDetails(placemark,marker.getPoint().lat(),marker.getPoint().lng());
                        
                   }//placemark.point
                }
               });  
               */ 
          });
          
        //map.addOverlay(new GMarker(point));
        map.addOverlay(marker);                               
        //createInputBox("lat" + numMarkers,lat);
        //createInputBox("lng" + numMarkers,lng);
        //createInputBox("address" + numMarkers,address);
        setValue(document.getElementById(latID),lat);
        setValue(document.getElementById(lngID),lng); 
        setValue(document.getElementById(adID),address);                 
        return marker;             
    }
       
        function showAddress(latID,lngID,adID) {
            if(numMarkers<totalAllowedMarkers){                       
                var addresstext = getValue(document.getElementById('address'));
                    //addAddress(addresstext,null);                                        
                    geocoder.getLocations(addresstext,function(response){                                    
                        if (!response || response.Status.code != 200) {
                        }else{
                            var pmark = response.Placemark[0];
                            addAddressComponents(pmark);                                                        
                            addMarkerForSaving(new GLatLng(pmark.Point.coordinates[1], pmark.Point.coordinates[0]), pmark.Point.coordinates[1], pmark.Point.coordinates[0], addresstext,latID,lngID,adID);
                        }
                    });    
            }else{
                alert('You are only allowed to select ' + totalAllowedMarkers + ' locations');
            }
         }   
       
        
        function addAddressComponents(placemark){                                          
                var s = placemark.Point.coordinates;                          
                map.setCenter(new GLatLng(s[1],s[0]), 12);            
        }
        
        function searchForAddress(id,latID,lngID,adID,zoomID) {                        
            if(numMarkers<totalAllowedMarkers){
                var addresstext = getValue(document.getElementById(id));
                var geocoder = new GClientGeocoder();
                    geocoder.getLocations(addresstext,function(response){                                    
                        if (!response || response.Status.code != 200) {
                          
                            GDownloadUrl("GeocodeProxy.aspx?q=" + addresstext, function(data, responseCode) {                                     
                                var xml = GXml.parse(data)    
                                if(xml.documentElement){
                                    if(xml.documentElement.getElementsByTagName("status").length==0){
                                        if(xml.documentElement.getElementsByTagName("totalResultsCount").length>0){                          
                                                      
                                            var iTotal = parseInt(getText(xml.documentElement.getElementsByTagName("totalResultsCount")[0]));                                         
                                            
                                            if(iTotal>0){ 
                                                var lat = getText(xml.documentElement.getElementsByTagName("lat")[0]);
                                                var lng = getText(xml.documentElement.getElementsByTagName("lng")[0]);                                            
                                                map.setCenter(new GLatLng(lat,lng), 12);
                                                setValue(document.getElementById(zoomID),12);
                                                addMarkerForSaving(new GLatLng(lat,lng),lat,lng,addresstext,latID,lngID,adID);
                                            }else{
                                                document.getElementById('mapstatus').innerHTML = '<font color=red>The location was not found.</font>';
                                            }
                                        }else{
                                            document.getElementById('mapstatus').innerHTML = '<font color=red>The location was not found.</font>';
                                        }
                                    }else{
                                        document.getElementById('mapstatus').innerHTML = '<font color=red>The location was not found.</font>';
                                    }
                                }else{
                                    document.getElementById('mapstatus').innerHTML = '<font color=red>The location was not found.</font>';
                                }    
                            });                                
                        }else{ 
                            document.getElementById('mapstatus').innerHTML = '';
                            var pmark = response.Placemark[0];
                            addAddressComponents(pmark);                                                        
                            addMarkerForSaving(new GLatLng(pmark.Point.coordinates[1], pmark.Point.coordinates[0]), pmark.Point.coordinates[1], pmark.Point.coordinates[0], addresstext,latID,lngID,adID);
                        }   
                    });
                 }else{
                alert('You are only allowed to select ' + totalAllowedMarkers + ' locations');
            }
                    
        } 
        
        function searchMap(id, sMap, mapstatusid) {                        
                //var  = new GMap2(document.getElementById(mapid));            
                var addresstext = getValue(document.getElementById(id));
               
                var geocoder = new GClientGeocoder();
                    geocoder.getLocations(addresstext,function(response){                                                        
                        if (!response || response.Status.code != 200) {
                          
                            GDownloadUrl("GeocodeProxy.aspx?q=" + addresstext, function(data, responseCode) {                                 
                                var xml = GXml.parse(data)    
                                if(xml.documentElement){
                                    if(xml.documentElement.getElementsByTagName("status").length==0){
                                        if(xml.documentElement.getElementsByTagName("totalResultsCount").length>0){                          
                                                      
                                            var iTotal = parseInt(getText(xml.documentElement.getElementsByTagName("totalResultsCount")[0]));                                         
                                            
                                            if(iTotal>0){ 
                                                var lat = getText(xml.documentElement.getElementsByTagName("lat")[0]);
                                                var lng = getText(xml.documentElement.getElementsByTagName("lng")[0]);                                            
                                                sMap.setCenter(new GLatLng(lat,lng), 8);                                                
                                            }else{
                                                document.getElementById(mapstatusid).innerHTML = '<font color=red>The location was not found.</font>';
                                            }
                                        }else{
                                            document.getElementById(mapstatusid).innerHTML = '<font color=red>The location was not found.</font>';
                                        }
                                    }else{
                                        document.getElementById(mapstatusid).innerHTML = '<font color=red>The location was not found.</font>';
                                    }
                                }else{
                                    document.getElementById(mapstatusid).innerHTML = '<font color=red>The location was not found.</font>';
                                }    
                            });                                
                        }else{ 
                            document.getElementById(mapstatusid).innerHTML = '';
                            var pmark = response.Placemark[0];                            
                            sMap.setCenter(new GLatLng(pmark.Point.coordinates[1], pmark.Point.coordinates[0]), 8);
                        }   
                    });
                    
        } 
