$(document).ready(function(){
	$("#dealerLocatorButton").click(function()
	{
		loadDealerLocator();
	});
	$("#dealerSearchToggle").click(function()
	{
	    $("#dealerSearchForm").slideToggle("slow")
	});
    $("#dealer_locator_form").submit(function() 
    {
        geocoder = new GClientGeocoder();	
        geocoder.getLocations($("input#location").val(), fetchProximals);     
        return false;
    });
    
});
var popupStatus = 0;
function loadDealerLocator(){
    google.load("maps","2.148",{"callback" : locate});
	//loads popup only if it is disabled
	if(popupStatus==0){
	    $("#mainContent").fadeOut("slow",function()
	    {
	        $("#dealerLocator").slideDown("slow",function(){sIFR.redraw();});
    	    
	    });
		popupStatus = 1;
	}
}
function locate()
{
    geocoder = new GClientGeocoder();	
    
	var addr = google.loader.ClientLocation.address.city + " " + google.loader.ClientLocation.address.region.toUpperCase() + " " + google.loader.ClientLocation.address.country_code;
	
	geocoder.getLocations(addr, fetchProximals);    
}
var map;
function fetchProximals(response)
{
	if (response && response.Status.code != 200) 
	{
        alert("Unable to locate " + decodeURIComponent(response.name));
    } 
    else 
    {
		var place = response.Placemark[0];	
		// Get country from Google response
		if( place.AddressDetails.AddressLine == undefined )
		{
			var country = place.AddressDetails.Country.CountryNameCode;
		}
		else
		{
			alert("Unable to locate " + decodeURIComponent(response.name))
		}
		var filter_str = '';
			
			if (fetch_get_param('attribute1')) {
				filter_str += "&attribute1=" + fetch_get_param('attribute1');
			}
			if (fetch_get_param('attribute2')) {
				filter_str += "&attribute2=" + fetch_get_param('attribute2');
			}
			if (fetch_get_param('attribute3')) {
				filter_str += "&attribute3=" + fetch_get_param('attribute3');
			}
			if (fetch_get_param('attribute4')) {
				filter_str += "&attribute4=" + fetch_get_param('attribute4');
			}


			
		var url_string = "/dealerLocator.aspx?format=json&latitude=" + place.Point.coordinates[1] +
		"&longitude=" +
		place.Point.coordinates[0] +
		"&proximity="+ $("input:radio[name='proximity']:checked").val()+"&country_code=" + country + filter_str;
        
		
		GDownloadUrl(url_string, function(json)
		{
		    var response = eval('(' + json + ')');
		    if (response.latitude != null) 
		    {
		        
		        //removePanelItems();
			    var centerPoint = new GLatLng(response.latitude, response.longitude);
			    if(!map)
			    {
    			    map = new GMap2(document.getElementById("map"));
    			}
			    
                var proximity = $("input:radio[name='proximity']:checked").val();
		        if(proximity <= 5){
		    	    var zoom = 15;
		        }else if(proximity > 5 && proximity <= 15){
		    	    var zoom = 12;
		        }else if(proximity > 15 && proximity <= 25){
		    	    var zoom = 10;
		        }else if(proximity > 25 && proximity < 75){
		    	    var zoom = 9;
		        }else if(proximity >= 75 && proximity < 100 ){
		    	    var zoom = 8;
		        }else if(proximity >= 100 && proximity < 200 ){
		    	    var zoom = 8;
		        }else if( proximity >= 200 && proximity < 300 ){
		    	    var zoom = 7;
		        }else if( proximity >= 300 ){
		    	    var zoom = 2;
		        }                  
			    // now add the baloons
			    
                map.setCenter(centerPoint, zoom);
			    map.enableScrollWheelZoom();
			    map.addControl(new GSmallMapControl(), new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(20, 20)))
			    map.addControl(new GMapTypeControl());
			    map.addControl(new GOverviewMapControl());
			    // clear all panels/markers, then add new
			    $("#dealerResultsPanels").empty();
			    map.clearOverlays();
			    for (i in response.list) 
			    {
			        addMarkerAndPanel(response.list[i], map);
                }
	        }
	   });
	}
}
function fetch_get_param( name )
{
	name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	var regexS = "[\\?&]"+name+"=([^&#]*)";
	var regex = new RegExp( regexS );
	var results = regex.exec( window.location.href );
	if (results == null) {
		return "";
	}
	else {
	
		return results[1];
	}
}
var deActivatePanel = function(){};
function addMarkerAndPanel(info, map)
{
    // Action Taken when marker is clicked
    var focusPoint = function() 
    {   
        var html = createLocationHTML(info);
		map.openInfoWindowHtml(marker.getPoint(), html);
        // Call the Global function
        deActivatePanel();
        // Tell Global function to deactivate the current item next time called
        deActivatePanel = function() 
        {
            panelItem.innerHTML = collapsedHtml(info);
            panelItem.className = "collapsed";
        };
        map.panTo(marker.getPoint());
        panelItem.innerHTML = openHtml(info);;
        panelItem.className = "open";
    } 

    if( (!$("input#morewood").attr("checked") && !$("input#sombrio").attr("checked"))
        || ($("input#morewood").attr("checked") && info.Morewood )
        || ($("input#sombrio").attr("checked") && info.Sombrio )        )
    {
        var panelItem = document.createElement("div");
        panelItem.innerHTML = collapsedHtml(info);
        panelItem.className = "collapsed";
        document.getElementById("dealerResultsPanels").appendChild(panelItem);
        GEvent.addDomListener(panelItem, 'click', focusPoint);
        
        // Add the Marker    
        var marker = new GMarker(new GLatLng(info.Latitude,info.Longitude));
        GEvent.addListener(marker, 'click', focusPoint);
        map.addOverlay(marker);
    }
    
    
}
function collapsedHtml(info)
{
    return '<div class="Name"><b>' + info.Name + '</b></div>';
}
function openHtml(info)
{
   return createLocationHTML(info); 
}
	function createLocationHTML(panelItem)
    {
        var panelHTML = "";
        panelHTML = '<div id="bubbleInfoContainer">' + 
					'<div id="bubbleAddressContainer">' + 
					'<div><b class=dealerLocatorRed>' + panelItem.Name + '</b><br><br></div>' + 
            		'<div>' + panelItem.Street + '</div>' +
            		'<div>' + panelItem.Town + '</div>' +
            		'<div>' + panelItem.Country + '</div>' +
            		'<div><a class=dealerLocatorRed target="_blank" href="http://'+ panelItem.Website +'">' + panelItem.Website + '</a></div>' + 
            		'<div><a class=dealerLocatorRed target="_blank" href="http://'+ panelItem.E_mail +'">' + panelItem.E_mail + '</a></div>' + 
					'<div>' 
					if(panelItem.Sombrio)
					    panelHTML += '<img vspace="3" src="/images/find_a_dealer/sombrio-dealer.png">';
					if(panelItem.Morewood)
						panelHTML += '<img vspace="3" src="/images/find_a_dealer/morewood-dealer.png">';
					panelHTML += '</div></div>'
 			panelHTML = panelHTML.replace(/null/ig, '')
        return panelHTML; 
    }   
