﻿// The JQuery library must be referenced in the host page before this script is referenced

$(document).ready(function(){

    var storeDetailsHtml = ""; // registered globally as same html is used in page and GMap Marker

    // assign click events to left hand nav links
    $("#storeFinderLocations > ul > li > a").click(function(){
        setupPreloader(this);
        setActiveLink(this);
        document.location = "#mapScroll";
        return false;
    });
    
    // assign click events to map dots
    $("div.map a").click(function(){
        setupPreloader(this);
        setActiveLink(this);
        document.location = "#mapScroll";
        return false;
    });
    
    setupPreloader = function(sender){
        $("#gMaps").hide();
        $("div.storeDetails").hide();
        $("#ajaxLoader").fadeIn("slow",loadStoreDetails(sender));
    }
    
    // does and ajax call to retrieve store details in json format
    loadStoreDetails = function(sender){
        $.getJSON("/jsonEngine.aspx?package=maginus.storefinder.storedetails&partnerid=" + sender.rel,
            function(data){
                $("div.storeDetails").fadeOut("fast", function(){
                    $("div.storeDetails").html(formatStoreDetails(data.Store));
                    configureGoogleMap(data);
                });
            });
    };
    
    setActiveLink = function(sender){
    
        // remove active
        $("#storeFinderLocations > ul > li").removeClass("active");
        $("div.map a").removeClass("active");
        
        $("#storeFinderLocations > ul > li:has(a[rel='" + sender.rel + "'])").addClass("active");
        $("div.map a[rel='" + sender.rel + "']").addClass("active");
    };

    // formats json store details object into html
    formatStoreDetails = function(storeDetails){
        storeDetailsHtml = "";
        var formattedAddress = "";
        
        if(storeDetails.Address1 != "")
            formattedAddress += storeDetails.Address1 + ", ";
            
        if(storeDetails.Address2 != "")
            formattedAddress += storeDetails.Address2 + ", ";
            
        if(storeDetails.City != "")
            formattedAddress += storeDetails.City + ", "; 
            
        if(storeDetails.State != "")
            formattedAddress += storeDetails.State + ", "; 
            
        if(storeDetails.ZipCode != "")
            formattedAddress += storeDetails.ZipCode + ", "; 
            
        if(storeDetails.Country != "")
            formattedAddress += storeDetails.Country + ", ";      
        
        // trim excess comma and space
        if(formattedAddress.length > 0)
            formattedAddress = formattedAddress.substring(0,formattedAddress.length - 2);
        
        storeDetailsHtml += "<em>" + storeDetails.Name + "</em><br />";
        storeDetailsHtml += "<address>" + formattedAddress + "</address>";
        storeDetailsHtml += stringResources.telephone + " " + storeDetails.Phone + "<br />";
        storeDetailsHtml += stringResources.openingHours + "<br />";
        storeDetailsHtml += storeDetails.Summary;
        
        
        return storeDetailsHtml;
    }
    
    configureGoogleMap = function(storeDetailsJson){
        if (!GBrowserIsCompatible())
            return;
            
        $("#gMaps").hide();
        
        var latitude = storeDetailsJson.Store.GoogleMapsLatitude;
        var longitude = storeDetailsJson.Store.GoogleMapsLongitude;
        
        map = new GMap2(document.getElementById("gMaps"));
        
		GEvent.addListener(map, "load", function(){
		    $("#ajaxLoader").fadeOut("slow", function(){
	            $("div.storeDetails").fadeIn('slow', function(){
	                $("#gMaps").fadeIn('slow', function(){
	                    map.checkResize();
	                    map.setCenter(new GLatLng(latitude,longitude), 13);
	                });
	                
	            });  
		    });
		});
		
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		map.setCenter(new GLatLng(latitude,longitude), 13);
		
		var marker = new GMarker(new GLatLng(latitude,longitude));
		map.addOverlay(marker);
		
		GEvent.addListener(map, "click", function(marker, point)
		{
	        marker.openInfoWindowHtml('<div class="storeDetails">' + storeDetailsHtml + '</div>');
		});
		

    }
    
    // if a partnerId was specified in querystring, preload the google map for this store.
    if(partnerId.rel > 0)
    {
        setupPreloader(partnerId);
    }
    
    
});
