var map_loaded = false;
var map;
var dealer_order = new Array();
var state_text = {
AL:'Alabama',
AK:'Alaska',
AZ:'Arizona',
AR:'Arkansas',
CA:'California',
CO:'Colorado',
CT:'Connecticut',
DC:'District of Columbia',
DE:'Delaware',
FL:'Florida',
GA:'Georgia',
HI:'Hawaii',
ID:'Idaho',
IL:'Illinois',
IN:'Indiana',
IA:'Iowa',
KS:'Kansas',
KY:'Kentucky',
LA:'Louisiana',
ME:'Maine',
MD:'Maryland',
MA:'Massachusetts',
MI:'Michigan',
MN:'Minnesota',
MS:'Mississippi',
MO:'Missouri',
MT:'Montana',
Mt:'Montana',
NE:'Nebraska',
NV:'Nevada',
NH:'New Hampshire',
NJ:'New Jersey',
NM:'New Mexico',
NY:'New York',
NC:'North Carolina',
ND:'North Dakota',
OH:'Ohio',
OK:'Oklahoma',
OK:'Oklahoma',
ON:'Ontario',
OR:'Oregon',
PA:'Pennsylvania',
SC:'South Carolina',
SD:'South Dakota',
TN:'Tennessee',
TX:'Texas',
UT:'Utah',
VT:'Vermont',
VA:'Virginia',
WA:'Washington',
WV:'West Virginia',
WI:'Wisconsin',
WY:'Wyoming',
AB:'Alberta',
BC:'British Columbia',
MB:'Manitoba',
NB:'New Brunswick',
NL:'Newfoundland and Labrador',
NS:'Nova Scotia',
ON:'Ontario',
PE:'Prince Edward Island',
QC:'Quebec',
SK:'Saskatchewan'};

	function initDealerMap() {
		map = new GMap2(document.getElementById("dealer_map"));

		home_point = new GLatLng(home_lng,home_lat);
		map.setCenter(home_point, 6);
		//bounds = map.getBounds();
		map.addControl(new GLargeMapControl3D());
		//createDealerPoints(home_point);
		//addMarkers();
		//bounds.extend(dealers[dealer_order[0]]['point']);
		//map.setZoom(map.getBoundsZoomLevel(bounds)-1);
		//map.setCenter(bounds.getCenter());
		//showDealer(dealer_order[0],true);
		populateDealers(true && !zipEntered);
		GEvent.addListener(map,'moveend',function(){
    	//get the zoom level and determine     
		if(!map_loaded)
			return;
		populateDealers(false);
    });  
		map_loaded=true;
	}
	function addMarkers(){
		map.clearOverlays();
		var icon1 = new GIcon(G_DEFAULT_ICON);
		icon1.image = "images/map_marker_1.gif";
		icon1.iconSize=new GSize(35,35);
		icon1.imageMap=[6,6, 30,6, 30,24, 18,30, 6,24, 6,6]
		icon1.shadow="";
		var icon2 = new GIcon(G_DEFAULT_ICON);
		icon2.image = "images/map_marker_2.gif";
		icon2.iconSize=new GSize(35,35);
		icon2.shadow="";
		icon2.imageMap=[6,6, 30,6, 30,24, 18,30, 6,24, 6,6]
		var icon3 = new GIcon(G_DEFAULT_ICON);
		icon3.image = "images/map_marker_3.gif";
		icon3.iconSize=new GSize(35,35);
		icon3.shadow="";
		icon3.imageMap=[6,6, 30,6, 30,24, 18,30, 6,24, 6,6]
		gms=new Array();
		for(i=0;i<dealer_order.length;i++){	
			dealer_id = dealer_order[i];
			d  = dealers[dealer_id];
			label = i+1+'';
			 
			markerOptions = { 'icon':eval('icon'+d['type']),title:d['name'],'labelText':label ,'labelClass':'marker_text',"labelOffset": new GSize(-8, -25)};			
			gm = new LabeledMarker(d['point'],markerOptions); 
			gms.push(gm);
			GEvent.addListener(gms[i],'click',function (p){
				for(var j=0;j<dealers.length;j++){
						var dlr = dealers[j];
				
					if(dlr['latitude']==p.lat() && dlr['longitude']==p.lng()){
						break;
					}
				}
				//alert('dealer: lng: ' + dlr['longitude'] +  ' lat:' + dlr['latitude'] + "\n" + 'pnt lat: ' + p.lat() + ' lng: ' + p.lng());	
				home_point = new GLatLng(p.lat(),p.lng());
				map.setCenter(home_point);
				showDealer(j,false);
			});
			map.addOverlay(gms[i]);
		}	
	}
	function createDealerPoints(home_point){
		dealer_order = new Array();
		for(i=0;i<dealers.length;i++){
			dealer= dealers[i];
			var point = new GLatLng(dealer['latitude'],dealer['longitude']);
			distance = Math.floor(home_point.distanceFrom(point));
			dealers[i]['point'] = point;
			dealers[i]['distance'] = distance;
			if(dealer_order.length==0){
				dealer_order.push(i);
			}else{
				var j=0;
				array_distance = dealers[dealer_order[j]]['distance'];
				new_distance = dealers[i]['distance'];
				while(array_distance < new_distance){
					j++;
					if(j>=dealer_order.length)
						break;
					array_distance=dealers[dealer_order[j]]['distance'];
				}
				dealer_order.splice(j,0,i);
				
			}
		}
	}
	var str
	function printObject(obj,str){
		for(prop in obj){	
			str += prop+':' ;
			if(typeof(obj[prop])=='object'){
				str += printObject(obj[prop]);
			}else{
				str += obj[prop]+ "\n";
			}
		}
		return str;
	}

	function populateDealers(centerondealer){
		var has_dealer = false;
		var gcg  = new GClientGeocoder();
			gcg.getLocations(map.getCenter(),function(r){
			if(r.Status.code==200){
				var state = r.Placemark[0].AddressDetails.Country;
				//for(prop in state)
					//alert (prop + ':' + state[prop]);
				if(state != undefined){
					state = state.AdministrativeArea.AdministrativeAreaName;
					if(state_text[state]!=undefined)
						state_string = state_text[state];
					else
					 	state_string = state;
					if(centerondealer){
						var dealer;
						dealer  = getDealerInState(state);
						if(dealer!=false){
							home_point = new GLatLng(dealer['latitude'],dealer['longitude']);
							map.setCenter(home_point);
						}
					} 
				}
				document.getElementById('dealer_map_bar').innerHTML ="SWIFT Dealers Near You: " +  state_string;
				}
		}	);
		clearDealerList();
		createDealerPoints(map.getCenter());
		addMarkers();
		var bounds = map.getBounds();
		for(var i=0;i<dealer_order.length;i++){
			var p = dealers[dealer_order[i]]['point'];
			if(bounds.containsLatLng(p)){
				showDealer(dealer_order[i],true);
				has_dealer=true;
			}
		}
		if(!has_dealer){
			showNoDealers();
		}
	}

	function getDealerInState(state){
		for(dealer in dealers){
			if(dealers[dealer]['state']==state){
				return dealers[dealer];
			}
		}
		return false;
	}
	function showNoDealers(){
    var tbl = document.getElementById('dealer_list');
	  var lastRow = tbl.rows.length;
	  for(var i=lastRow-1;i>=0;i--){
	    tbl.deleteRow(i);
	  }
	  lastRow=0;
    var iteration = lastRow;
    var row = tbl.insertRow(lastRow);

    // left cell
    var cellLeft = row.insertCell(0);
    //cellLeft.width="3a0px";
    cellLeft.vAlign="top";
    var imageNode = document.createElement('div');
    imageNode.innerHTML ="<div>There are currently no dealers in your area. &nbsp;We appreciate your patience as we continue to extend our dealer networks. <a a href=\"signup.php\">Sign up</a> for our Newsletter to stay up-to-date as we continue to grow. </div";
    cellLeft.appendChild(imageNode);
		
	}
	function clearDealerList(){
	  var tbl = document.getElementById('dealer_list');
	  var lastRow = tbl.rows.length;
			for(var i=lastRow-1;i>=0;i--){	
				tbl.deleteRow(i);
			}
			lastRow=0;
	}
	function showDealer(indx,append){
		var d = document.getElementById('dealers_div');
		var dlr = dealers[indx];
	  var tbl = document.getElementById('dealer_list');
	  var lastRow = tbl.rows.length;
		if(!append && lastRow>0){
			for(var i=lastRow-1;i>=0;i--){	
				tbl.deleteRow(i);
			}
			lastRow=0;
		}	
		var iteration = lastRow;
		var row = tbl.insertRow(lastRow);
		//If this dealer has a parent, use that information for the display
		if(dlr['parent']!=''){	
			dlr = dealers[dlr['parent']];
		}	
		
		// left cell
		var cellLeft = row.insertCell(0);
		cellLeft.width="30px";
		cellLeft.vAlign="top";
		var imageNode = document.createElement('div');
		imageNode.innerHTML ="<div class=\"dealer_list_" + dlr['type'] + "\"> " + (lastRow+1) + " </div";
		cellLeft.appendChild(imageNode);
		var cellright = row.insertCell(1);
		cellright.vAlign="top";


		//var content =  "<tr><td width=\"25px\" valign=\"top\"><img src=\"images/dealer_list_image_" + dlr['type'] + ".gif\">";
	 	//content += "	</td>"
		//content = "<td valign=\"top\">";
		var content =	"<strong>" + dlr['name'] + "</strong><br/>\n";
        if(dlr['address'] != undefined) 
            content +=	dlr['address'] + "<br/>\n";
		if(dlr['address_2'].length>0)
            content +=	dlr['address_2'] + "<br/>\n";
		content +=  dlr['city'] + ', ' + dlr['state'] + ' ' + dlr['zip'] + "<br/>\n";
		if(dlr['toll_free'].length>0){
			content += "Toll Free: "+dlr['toll_free'] + "<br/>\n";
		}
		if(dlr['phone'].length>0){
			content += 	"Phone: "  +dlr['phone'] ; 
			if(dlr['extension'].length>0)
				content += ' x. ' + dlr['extension'];
		content +="<br />\n";
		}
		
		if(dlr['fax'].length>0)
			content += 	"Fax: " + dlr['fax'] + "<br />\n";
		if(dlr['email'].length>0)
			content +=  "Email: <a href=\"mailto:" + dlr['email'] + "\">" + dlr['email'] + "</a><br />\n";
		if(dlr['web'].length>0)
			content +=  "Web: <a target=]\"_blank\" href=\"http://" + dlr['web'] + "\">" + dlr['web'] + "</a><br />\n";
		if(dlr['notes'].length>0)
			content +=  "(" + dlr['notes'] + ")<br />\n";
		content += "<br />\n";
		//content +="<br></td></tr>";
	var divNode = document.createElement('div');
	divNode.id='dealer'+iteration;
	cellright.appendChild(divNode);
	document.getElementById('dealer'+iteration).innerHTML = content;

	}
 function zoomIn() 
 {
	map.zoomIn();
 }      
 function zoomOut() 
 {
	map.zoomOut();
 }   		
function sleep(naptime){
      //naptime = naptime * 1000;
      var sleeping = true;
      var now = new Date();
      var alarm;
      var startingMSeconds = now.getTime();
      while(sleeping){
         alarm = new Date();
         alarmMSeconds = alarm.getTime();
         if(alarmMSeconds - startingMSeconds > naptime){ sleeping = false; }
      }      
}
