var map;
var geocoder;
var radius;
var atmAmount = 0;
var address;

var ProximityLocations = {"locations": [
{"name": "First Nebraska Educators", "address": "10655 Bedford Avenue, Omaha, NE", "latitude" : "41.288407", "longitude": "-96.079383"},

{"name": "Walgreens", "address": "3701 N 132nd Street, Omaha, NE", "latitude" : "41.292888", "longitude": "-96.118921"},

{"name": "Walgreens", "address": "10725 Fort Street, Omaha, NE", "latitude" : "41.306141", "longitude": "-96.080547"},

{"name": "Walgreens", "address": "2605 S 171st Street, Omaha, NE", "latitude" : "41.234757", "longitude": "-96.181608"},

{"name": "Walgreens", "address": "15525 Spaulding Plaza, Omaha, NE", "latitude" : "41.293071", "longitude": "-96.157457"},

{"name": "Walgreens", "address": "6101 NW Radial Hwy, Omaha, NE", "latitude" : "41.286513", "longitude": "-96.007823"},

{"name": "Walgreens", "address": "1802 Galvin Road South, Bellevue, NE", "latitude" : "41.1402676", "longitude": "-95.9084184"},

{"name": "Walgreens", "address": "8380 Harrison Street, LaVista, NE", "latitude" : "41.1908357", "longitude": "-96.0424024"},

{"name": "Walgreens", "address": "6905 S 36th Street, Bellevue, NE", "latitude" : "41.19082", "longitude": "-95.9674236"},

{"name": "Walgreens", "address": "3121 S 24th Street, Omaha, NE", "latitude" : "41.229843", "longitude": "-95.946281"},

{"name": "Walgreens", "address": "5062 S 155th Street, Omaha, NE", "latitude" : "41.206283", "longitude": "-96.1574"},

{"name": "Walgreens", "address": "13155 W Center Road , Omaha, NE", "latitude" : "41.2340173", "longitude": "-96.1191163"},

{"name": "Walgreens", "address": "7151 Cass Street, Omaha, NE", "latitude" : "41.262753", "longitude": "-96.023157"},

{"name": "Walgreens", "address": "9001 W Center Road, Omaha, NE", "latitude" : "41.233528", "longitude": "-96.053394"},

{"name": "Walgreens", "address": "3001 Dodge Street, Omaha, NE", "latitude" : "41.259248", "longitude": "-95.956772"},

{"name": "Walgreens", "address": "225 N SaddleCreek Road, Omaha, NE", "latitude" : "41.309418", "longitude": "-96.144799"},

{"name": "Walgreens", "address": "4310 Ames Street, Omaha, NE", "latitude" : "41.300031", "longitude": "-95.978218"},

{"name": "Walgreens", "address": "2323 L Street, Omaha, NE", "latitude" : "41.21177", "longitude": "-95.946304"},

{"name": "Walgreens", "address": "18040 R Plaza, Omaha, NE", "latitude" : "41.204759", "longitude": "-96.198241"},

{"name": "Walgreens", "address": "8989 W Dodge Road, Omaha, NE", "latitude" : "41.262687", "longitude": "-96.051771"},

{"name": "Walgreens", "address": "13510 Q Street, Omaha, NE", "latitude" : "41.20539", "longitude": "-96.120171"},

{"name": "Walgreens", "address": "5225 N 90th Street, Omaha, NE", "latitude" : "41.306233", "longitude": "-96.052009"},

{"name": "Walgreens", "address": "7202 N 30th Street, Omaha, NE", "latitude" : "41.324515", "longitude": "-95.957911"},

{"name": "Walgreens", "address": "3005 Lake Street, Omaha, NE", "latitude" : "41.280895", "longitude": "-95.957247"},

{"name": "First Nebraska Educators", "address": "4740 S 48th Street, Omaha, NE", "latitude" : "41.211324", "longitude": "-95.986512"},

{"name": "Walgreens", "address": "5038 Center Street, Omaha, NE", "latitude" : "41.2413897", "longitude": "-95.9917004"},

{"name": "Walgreens", "address": "20211 Manderson Street, Omaha, NE", "latitude" : "41.292842", "longitude": "-96.013085"},

{"name": "Walgreens", "address": "9001 Blondo Street, Omaha, NE", "latitude" : "41.277271", "longitude": "-96.053158"},

{"name": "Walgreens", "address": "6005 N 72nd Street, Omaha, NE", "latitude" : "41.3128563", "longitude": "-96.0237593"},

{"name": "Big Red Mini Mart", "address": "13525 Millard Avenue, Omaha, NE", "latitude" : "41.208895", "longitude": "-96.125059"},

{"name": "All American Shell", "address": "4219 N 60th Street, Omaha, NE", "latitude" : "41.2978017", "longitude": "-96.0046654"},

{"name": "Lane's Shell", "address": "8724 N 30th Street, Omaha, NE", "latitude" : "41.3397318", "longitude": "-95.9613837"},

{"name": "West Center Service Center", "address": "15949 W Center Road, Omaha, NE", "latitude" : "41.233425", "longitude": "-96.164522"},

{"name": "J-N-J Grocery", "address": "3301 California Street, Omaha, NE", "latitude" : "41.2647914", "longitude": "-95.9615571"},

{"name": "Atherton's 66", "address": "2900 W Broadway, Council Bluffs, IA", "latitude" : "41.2619637", "longitude": "-95.8907487"},

{"name": "Brentwood Square", "address": "8004 S 84th Street, LaVista, NE", "latitude" : "41.1797964", "longitude": "-96.0430669"},

{"name": "D.J.'s", "address": "6818 S 13th Street, Omaha, NE", "latitude" : "41.191204", "longitude": "-95.933837"},

{"name": "J-N-J Express", "address": "3009 Parker Street, Omaha, NE", "latitude" : "41.276224", "longitude": "-95.956842"},

{"name": "Tower Plaza", "address": "499 N 78th Street, Omaha, NE", "latitude" : "41.2632807", "longitude": "-96.0375402"},

{"name": "Rite Way Food Plaza", "address": "4334 S 84th Street, Omaha, NE", "latitude" : "41.216764", "longitude": "-96.043637"},

{"name": "Rick's Convenience Plus", "address": "2920 S 120th Street, Omaha, NE", "latitude" : "41.231654", "longitude": "-96.101255"},

{"name": "KB's Food Shop", "address": "304 S Washington Street, Papillion, NE", "latitude" : "41.154182", "longitude": "-96.043317"},

{"name": "Lakeside Hospital<br />(outside the cafeteria)", "address": "16901 Lakeside Hills Court, Omaha, NE", "latitude" : "41.237019", "longitude": "-96.180233"},

{"name": "Immanuel Medical Center<br />(outside the cafeteria)", "address": "6901 N 72nd Street, Omaha, NE", "latitude" : "41.322063", "longitude": "-96.020426"},

{"name": "Douglas County Health Center<br />(In the Main Lobby) ", "address": "4102 Woolworth Aveenue, Omaha, NE", "latitude" : "41.246973", "longitude": "-95.973858"},

{"name": "Madison Ave Ampride", "address": "1836 Madison Ave, Coucil Bluffs, IA", "latitude" : "41.2416421", "longitude": "-95.8225918"},

{"name": "First Nebraska Educators", "address": "5070 N 32nd Street, Lincoln, NE", "latitude" : "40.861214", "longitude": "-96.670793"},

{"name": "Walgreens", "address": "2630 Pine Lake Road, Lincoln, NE", "latitude" : "40.74023", "longitude": "-96.683225"},

{"name": "Walgreens", "address": "4000 S 70th Street, Lincoln, NE", "latitude" : "40.772367", "longitude": "-96.624373"},

{"name": "Walgreens", "address": "1301 O Street, Lincoln, NE", "latitude" : "40.813268", "longitude": "-96.702376"},

{"name": "Walgreens", "address": "2600 S 48th Street Suite 7, Lincoln, NE", "latitude" : "40.785343", "longitude": "-96.651149"},

{"name": "Walgreens", "address": "7045 O Street, Lincoln, NE", "latitude" : "40.812889", "longitude": "-96.623762"},

{"name": "First Nebraska Educators", "address": "3933 S 14th Street, Lincoln, NE", "latitude" : "40.774315", "longitude": "-96.70207"},

{"name": "Walgreens", "address": "5500 Redrock Lane, Lincoln, NE", "latitude" : "40.7384647", "longitude": "-96.6451055"},

{"name": "Walgreens", "address": "5701 Village Drive, Lincoln, NE", "latitude" : "40.754782", "longitude": "-96.668324"},

{"name": "Walgreens", "address": "2502 N 48th, Lincoln, NE", "latitude" : "40.8377882", "longitude": "-96.6536703"},

{"name": "Walgreens", "address": "1404 Superior Street, Lincoln, NE", "latitude" : "40.858021", "longitude": "-96.700314"},

{"name": "Walgreens", "address": "8300 Northern Lights Drive, Lincoln, NE", "latitude" : "40.8314577", "longitude": "-96.6072592"},

{"name": "Walgreens", "address": "4811 O Street, Lincoln, NE", "latitude" : "40.8134011", "longitude": "-96.6535378"},
{"name": "Walgreens", "address": "11343 S 96th St, Papillion, NE", "latitude" : "41.1416549", "longitude": "-96.0638035"},
{"name": "Walgreens", "address": "9512 S 71st Plaza, Papillion, NE", "latitude" : "41.120019", "longitude": "-96.022538"},
{"name": "Lake Side Ampride", "address": " 4040 So Expressway, Council Bluffs, IA", "latitude" : "41.2199809", "longitude": "-95.850829"}

]};

$(document).ready(init);
//$(document).unload(GUnload());

function init(){
	defaultText();
	$("#addressInput").focus(newText);
	loadMap();
	getUrlVars();
	
}

function loadMap() {

  if (GBrowserIsCompatible()) {
  
    geocoder = new GClientGeocoder();
    map = new GMap2(document.getElementById("map"));
    
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());
    map.enableScrollWheelZoom();
	map.enableContinuousZoom();
    map.setCenter(new GLatLng(41.2619, -96.0419), 11);
    
  }
}

function searchListener(){
	address = document.getElementById('addressInput').value;
	radius = findRadius();
	searchLocations();
}

function searchLocations() {

  if (geocoder) {
  
    geocoder.getLatLng(address, function(point) {
        if (!point) {
          alert("Sorry, this address could not be found.");
        } else {
        
          atmAmount = 0;
          map.clearOverlays();
          
          $("#atmTable table tbody").html("<tr id='searchNeeded'><td colspan='3'>Search for ATMs using the map above.</td></tr>");
        
          
          var zoom;
          if(radius == 1){
          	zoom = 12;
          }else if(radius == 3){
            zoom = 11;
          }else{
          	zoom = 10;
          }
          
          //alert(point);
          
          var baseIcon = new GIcon();
			baseIcon.image = "images/marker-blue.png";
			baseIcon.shadow = "images/marker-shadow.png";
			baseIcon.iconSize = new GSize(18, 34);
			baseIcon.shadowSize = new GSize(27, 35);
			baseIcon.iconAnchor = new GPoint(9, 34);
			baseIcon.infoWindowAnchor = new GPoint(9, 2);
			baseIcon.infoShadowAnchor = new GPoint(18, 25);
				
			var icon = new GIcon(baseIcon);

          map.setCenter(point, zoom);
          var marker2 = new GMarker(point, icon);
          map.addOverlay(marker2);
          
          var pointCast = point.toString();
          
          var pointArray = pointCast.split(',');
          
          pointLat = pointArray[0].slice(1);
          pointLong = pointArray[1].slice(0, -1);
          
          
          
          compareDistances(pointLat, pointLong);
          
          marker2.openInfoWindowHtml("<b>"+address+"</b><br />There are <span class='red'><b>"+atmAmount+"</b></span> ATM locations in your area within a "+radius+" mile radius.");
          
          GEvent.addListener(marker2,'click',function(){ marker2.openInfoWindowHtml("<b>"+address+"</b><br />There are <span class='red'><b>"+atmAmount+"</b></span> ATM locations in your area within a "+radius+" mile radius."); });
          
        }
      });
    
  }
  
}

function compareDistances(lat2, long2){

	var baseIcon2 = new GIcon();
	baseIcon2.image = "images/marker-red.png";
	baseIcon2.shadow = "images/marker-shadow.png";
	baseIcon2.iconSize = new GSize(18, 34);
	baseIcon2.shadowSize = new GSize(27, 35);
	baseIcon2.iconAnchor = new GPoint(9, 34);
	baseIcon2.infoWindowAnchor = new GPoint(9, 2);
	baseIcon2.infoShadowAnchor = new GPoint(18, 25);
		
	var icon2 = new GIcon(baseIcon2);
	
	var locations = new Array();
	
	for(i=0; i<ProximityLocations.locations.length; i++){
	
		var lat = ProximityLocations.locations[i].latitude;
		var long = ProximityLocations.locations[i].longitude;
		var curDistance = calcDistances(lat, lat2, long, long2);
		
		var name = ProximityLocations.locations[i].name;
		var address2 = ProximityLocations.locations[i].address;
		
		if(curDistance < radius){
			
			atmAmount++;
		
			var point = new GLatLng(lat,long);
			var marker = new GMarker(point, icon2);
			marker.name = name;
			marker.address = address2;
			marker.distance = curDistance;
      		map.addOverlay(marker);
      		
      		GEvent.addListener(marker,'click',function(){ this.openInfoWindowHtml("<b>"+this.name+"</b><br />"+this.address+"<br /><span class='red'><b>"+this.distance+" miles</b></span>"); });
      		
      		$("#searchNeeded").css("display", "none");
      		
      		locations.push({distance:curDistance,name:name,address:marker.address});
		}
	}
	
	locations.sort(sortByDistance);
	
	for(i=0; i<locations.length; i++){
		$("#atmTable table tbody").append("<tr><td><b>" + locations[i].name + "</b></td><td>" + locations[i].address + "</td><td>" + locations[i].distance + " miles</td></tr>");
	}

	adjustTables();
	
}

function sortByDistance(a,b){
    var x = a.distance;
    var y = b.distance;
    
    return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}

function findRadius(){

	for(i=0; i<document.getElementById('mapForm').distance.length; i++){
	
		if(document.getElementById('mapForm').distance[i].checked){
			radius = document.getElementById('mapForm').distance[i].value;
			return radius;
		}
		
	}
	
}

function calcDistances(lat1, lat2, lon1, lon2){
	var radius = 3958.75;
	var dLat = toRad(lat2-lat1);
	var dLon = toRad(lon2-lon1); 
	var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
	        Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * 
	        Math.sin(dLon/2) * Math.sin(dLon/2); 
	var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
	var distance = radius * c;
	var rounded = (Math.round(distance*100))/100;
	return rounded;
}

function toRad(deg) {
 return deg * Math.PI/180;
}



function defaultText(){
	$("#addressInput").attr("value", "Enter address/zip code/town");
	$("#addressInput").css("color", "#AAA");
}

function newText(){
	
	if($("#addressInput").attr("value") == "" || $("#addressInput").attr("value") == "Enter address/zip code/town"){
		$("#addressInput").attr("value", "");
		$("#addressInput").css("color", "#000");
	}
}

// Read a page's GET URL variables and return them as an associative array.
function getUrlVars(){
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');

    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[1]);
        vars[hash[0]] = hash[1];
        
      if(hash[0] == "location"){
        var stripHash = hash[1].replace(/\+/g, " ");
        var stripHash2 = stripHash.replace(/\%27/g, "'");
      	var locationHash = stripHash2.replace(/\%2C/g, ",");
      } else if(hash[0] == "distance"){
      	var distanceHash = hash[1];
      }
    }
   
    if(locationHash != undefined || distanceHash != undefined){
    	address = locationHash;
    	radius = distanceHash;
    	$("#addressInput").attr("value", locationHash);
    	$("#addressInput").css("color", "#000");
    	searchLocations();
    	
    	var radiusLength = document.getElementById('mapForm').distance.length;
    	
    	
    	for(i=0; i<radiusLength; i++){
    		if(document.getElementById('mapForm').distance[i].value == vars[1]){
    			document.getElementById('mapForm').distance[i].checked = "checked";
    		} 
    	}
    	
    }

}
