var map; var MarkerArray; var PageContentArray; var MarkerContentArray; var MarkersArray = []; var infowindow = null; var http_request = false; var START_X; var START_Y; var GLOBAL_ERROR = false; var CURRENT_PAGE = 1; var MAX_PAGE_RECORDS = 4; var PAGE_TOTAL = 0; var START_INDEX = 0; var END_INDEX = 0; var DL_REQUEST_PAGE = "/DealerLocatorRequest/DealerLocatorRequest.aspx";

DealerLocator = {
	Marker:function(x,y,label,dname,daddress,dcity,dstate,dzip,dphone){this.X = x;this.Y = y;this.Label = label;this.DName = dname;this.DAddress = daddress;this.DCity = dcity;this.DState = dstate;this.DZip = dzip;this.DPhone = dphone;},
	MakeRequest:function(url){$.getJSON(url,DealerLocator.Generate,"json");},

	Generate:function(data)
	{
		try {
			MarkerArray = new Array();
			PageContentArray = new Array();
			
			var write_out = "";
	
			START_X = data.DealerLocator.User.X;
			START_Y = data.DealerLocator.User.Y;
			
			for(var i=0;i<data.DealerLocator.Dealer.length;i++)
			{ 
				try {
					write_out = "<strong>Dealer # " + data.DealerLocator.Dealer[i].MapNumber + "&nbsp;&nbsp;&nbsp; Miles: " + Math.round(data.DealerLocator.Dealer[i].Miles) + "</strong><br />";
					write_out += (data.DealerLocator.Dealer[i].Name == "||" ? "" : data.DealerLocator.Dealer[i].Name +"<br />");
					write_out += (data.DealerLocator.Dealer[i].Address == "||" ? "" : data.DealerLocator.Dealer[i].Address +"<br />");
					write_out += (data.DealerLocator.Dealer[i].City == "||" ? "" : data.DealerLocator.Dealer[i].City  +" ");
					write_out += (data.DealerLocator.Dealer[i].State == "||" ? "" : data.DealerLocator.Dealer[i].State  +" ");				
					write_out += (data.DealerLocator.Dealer[i].ZipCode == "||" ? "" : data.DealerLocator.Dealer[i].ZipCode ) +"<br />";
					write_out += (data.DealerLocator.Dealer[i].Phone == "||" ? "" : data.DealerLocator.Dealer[i].Phone +"<br />");
					write_out += "<br />";	
					
					PageContentArray[i] = write_out;
					write_out = "";
				}
				catch(e){
					try {
						if(data.DealerLocator.Error.Description.length >1)
						{
							GLOBAL_ERROR = true;
							$("#Wait").hide();
							$("#map").hide();
							$("#PreviousDIV").hide();
							$("#NextDIV").hide();
							$("#ErrorMessages").show();
							$("#ErrorMessages").empty();
							var error_message = data.DealerLocator.Error.Description;
							error_message = error_message.replace(/\[br\]/ig, "<br/>");
							$("#ErrorMessages").append(error_message);
						}else{
							DealerLocator.CallError();
						}
					}
					catch(e) {
						DealerLocator.CallError();
					}
				}
				
				try {
					marker = new DealerLocator.Marker(
						(data.DealerLocator.Dealer[i].X == "||" ? "" : data.DealerLocator.Dealer[i].X),
						(data.DealerLocator.Dealer[i].Y == "||" ? "" : data.DealerLocator.Dealer[i].Y),
						(data.DealerLocator.Dealer[i].MapNumber == "||" ? "" : data.DealerLocator.Dealer[i].MapNumber),
						(data.DealerLocator.Dealer[i].Name == "||" ? "" : data.DealerLocator.Dealer[i].Name),
						(data.DealerLocator.Dealer[i].Address == "||" ? "" : data.DealerLocator.Dealer[i].Address),
						(data.DealerLocator.Dealer[i].City == "||" ? "" : data.DealerLocator.Dealer[i].City),
						(data.DealerLocator.Dealer[i].State == "||" ? "" : data.DealerLocator.Dealer[i].State),
						(data.DealerLocator.Dealer[i].ZipCode == "||" ? "" : data.DealerLocator.Dealer[i].ZipCode),
						(data.DealerLocator.Dealer[i].Phone == "||" ? "" : data.DealerLocator.Dealer[i].Phone)
					);
					MarkerArray[i] = marker;
				}
				catch(e){
				}
			}

			PAGE_TOTAL = Math.ceil(PageContentArray.length/MAX_PAGE_RECORDS);

			if(PageContentArray.length <= MAX_PAGE_RECORDS) {
				END_INDEX = PageContentArray.length;
				$("#PreviousDIV").hide();
				$("#NextDIV").hide();
			}else{
				END_INDEX = MAX_PAGE_RECORDS;
				$("#NextDIV").show();
			}			
			
			//Write Dealer Listing
			DealerLocator.WriteDealerList();

			try{
				if(!GLOBAL_ERROR){ $("#map").show();}
				
				try{var xy = new google.maps.LatLng(START_Y,START_X);var mz=8;}
				catch(err){var xy = new google.maps.LatLng(38.0000,-97.0000);var mz=1;}
				
				//Map
				var mo = {zoom:mz,center:xy,mapTypeId:google.maps.MapTypeId.ROADMAP,mapTypeControl:false,streetViewControl:false};
				map = new google.maps.Map(document.getElementById("map"),mo);
				
				//User Location Icon
				var uli = "/images/starsmall_red.gif";
				var uxy = new google.maps.LatLng(START_Y,START_X);
				var um = new google.maps.Marker({position:uxy,map:map,icon:uli});

				DealerLocator.SetMapMarkers();
				DealerLocator.AutoCenter();
			}
			catch(err){
				$("#map").hide();
			}
		}
		catch(e){
			try {
				$("#map").hide();
				$("#Wait").hide();
				$("#PreviousDIV").hide();
				$("#NextDIV").hide();
				$("#dealerDisplay").empty();
				$("#dealerDisplay").hide();
				$("#ErrorMessages").show();
				$("#ErrorMessages").empty();
				var error_message = data.DealerLocator.Error.Description;
				error_message = error_message.replace(/\[br\]/ig, "<br/>");
				$("#ErrorMessages").append(error_message);
			}
			catch(e){
				DealerLocator.CallError();
			}
		}		
	},

	SetMapMarkers:function()
	{
		try {
			infowindow = new google.maps.InfoWindow();

			//Proccess Marker Array To Markers
			for(var i = START_INDEX; i < END_INDEX; i++){
				var markerpoints = new DealerLocator.Marker();
				markerpoints = MarkerArray[i];
				
				var point = new google.maps.LatLng(markerpoints.Y,markerpoints.X);
				var dm = new google.maps.Marker({position:point,map:map});
				dm.setMap(map);

				DealerLocator.CreateEvents(dm,markerpoints,point);
				MarkersArray.push(dm);
			}
		}
		catch(e){
		}
	},

	CreateEvents:function(marker,markerpoints,point){
		google.maps.event.addListener(marker,"click", function(){
			infowindow.setContent(DealerLocator.CreateMarker(point,markerpoints.Label,markerpoints.DName,markerpoints.DAddress,markerpoints.DCity,markerpoints.DState,markerpoints.DZip,markerpoints.DPhone));
			infowindow.open(map,this);
		});  
		google.maps.event.addListener(marker,"mouseover", function(){
			infowindow.setContent(DealerLocator.CreateMarker(point,markerpoints.Label,markerpoints.DName,markerpoints.DAddress,markerpoints.DCity,markerpoints.DState,markerpoints.DZip,markerpoints.DPhone));
			infowindow.open(map,this);
		});  
	},

	CreateMarker:function(point, number, name, address, city, state, zip, phone){return "<p class=\"Dealer_Locator_Text\"><strong>Dealer # "+ number +"</strong><br><strong>"+ name +"</strong><br>"+ address +"<br>"+ city +", "+ state +" "+ zip +"<br>"+ phone +"</p>";},
	RemoveMarkers:function(){if(MarkersArray){for(i in MarkersArray){MarkersArray[i].setMap(null);}MarkersArray.length=0;}},
	AutoCenter:function(){try{var b = new google.maps.LatLngBounds();for(m in MarkersArray){b.extend(MarkersArray[m].position);}map.fitBounds(b);}catch(e){}},

	SubmitSearchForm:function(f,brand)
	{
		if((f.PostalCode.value != "") || ((f.City.value != "")&&(f.State.value != ""))) {
			DealerLocator.SearchPageReset();
			if(f.PostalCode.value != ""){
				DealerLocator.MakeRequest(DL_REQUEST_PAGE + "?OnAuth=true&txtAddress=&txtCity=&txtState=&txtZIP="+ f.PostalCode.value +"&drpCountry=0&"+ brand +"=true");
			}else{
				DealerLocator.MakeRequest(DL_REQUEST_PAGE + "?OnAuth=true&txtAddress="+ f.Address.value +"&txtCity="+ f.City.value +"&txtState="+ f.State.value +"&txtZIP=&drpCountry=0&"+ brand +"=true");
			}
		}else{
			return;
		}
	},

	PageStartSearch:function(zip,brand)
	{
		if(zip != ""){
			DealerLocator.SearchPageReset();
			document.Dealer_Locator_Form.PostalCode.value = zip;
			DealerLocator.MakeRequest(DL_REQUEST_PAGE + "?OnAuth=true&txtAddress=&txtCity=&txtState=&txtZIP="+ zip +"&drpCountry=0&"+ brand +"=true");
		}else{
			return;
		}
	},
	
	SubmitSearchKey:function(f,b,e){if((e)&&(e.keyCode == 13)){DealerLocator.SubmitSearchForm(f,b);}else{return;}},

	MovePage:function(movebtn)
	{
		try{
			if(movebtn.id == "PreviousBTN"){
				if(CURRENT_PAGE != 1 && PAGE_TOTAL > 1){
					CURRENT_PAGE = CURRENT_PAGE - 1;
					$("#NextDIV").show();
				}
			}
		
			if(movebtn.id == "NextBTN"){
				if(CURRENT_PAGE != PAGE_TOTAL && PAGE_TOTAL > 1){
					CURRENT_PAGE = CURRENT_PAGE + 1;
					$("#PreviousDIV").show();
				}
			}
			
			START_INDEX = (CURRENT_PAGE - 1) * MAX_PAGE_RECORDS;
			
			if(CURRENT_PAGE * MAX_PAGE_RECORDS > PageContentArray.length){
				END_INDEX = PageContentArray.length;
			}else{
				END_INDEX = CURRENT_PAGE * MAX_PAGE_RECORDS;
			}
			
			if(END_INDEX == PageContentArray.length){$("#NextDIV").hide();}
			if(START_INDEX < 1){$("#PreviousDIV").hide();}
			
			DealerLocator.RemoveMarkers();
			DealerLocator.WriteDealerList();
			DealerLocator.SetMapMarkers();
			DealerLocator.AutoCenter();
		}
		catch(e){
		}	
	},
	
	WriteDealerList:function()
	{
		var d = "";
		for(var i = START_INDEX; i < END_INDEX; i++){d += PageContentArray[i];}
		$("#Wait").hide();$("#dealerDisplay").show();$("#dealerDisplay").empty();$("#dealerDisplay").append(d);
	},

	CallError:function() 
	{
		$("#map").hide();$("#Wait").hide();$("#dealerDisplay").empty();$("#dealerDisplay").hide();$("#PreviousDIV").hide();$("#NextDIV").hide();$("#ErrorMessages").show();$("#ErrorMessages").empty();
		$("#ErrorMessages").append("The Dealer Locator is currently being maintained. Please Try Again Later.");
	},
	
	NewSearch:function() 
	{
		GLOBAL_ERROR=false;CURRENT_PAGE=1;PAGE_TOTAL=0;START_INDEX=0;END_INDEX=0;
		$("#dealerDisplay").empty();$("#dealerDisplay").hide();$("#map").hide();$("#Wait").hide();$("#ErrorMessages").hide();$("#PreviousDIV").hide();$("#NextDIV").hide();
		$("#DL_SearchForm").show();//$("#DL_SearchForm_Advanced").hide();//document.Dealer_Locator_Form_Advanced.reset();
		document.Dealer_Locator_Form.reset();
		DealerLocator.RemoveMarkers();
	},

	SearchPageReset:function()
	{
		GLOBAL_ERROR=false;CURRENT_PAGE=1;PAGE_TOTAL=0;START_INDEX=0;END_INDEX=0;
		$("#Wait").show();$("#dealerDisplay").empty();$("#dealerDisplay").hide();$("#map").hide();$("#ErrorMessages").hide();$("#PreviousDIV").hide();$("#NextDIV").hide();DealerLocator.RemoveMarkers();
	},
	
	LoadPage:function(){$("#map").hide();$("#Wait").hide();$("#ErrorMessages").hide();$("#dealerDisplay").hide();$("#PreviousDIV").hide();$("#NextDIV").hide();}
};

$(document).ready(function(){
	DealerLocator.LoadPage();
});

