var _map = undefined; 
var _searchCenter = undefined;      
var _resultsPerPage = 10;
var _resultBannerCache = undefined;
var _resultZoomLevel = 11;
var _radiusSearchMiles = 25;
var _mapHasBeenMadeVisible = false; 
var _appliedFilters = new Array();
var _currentFilter = undefined;
var _currentTab = "zip";
var _runSearchOnStartup = "";
var _hideMapByDefault = false;

// Fires whenever the page loads
function initializeMap() 
{    
    _map = new VEMap("map");             
    _map.LoadMap();           
    
    if (document.scrollTop)
    {
        document.scrollTop = 0;
    }
    
    var zipCode = document.getElementById("zipCodeSearch");
    
    if (zipCode)
    {
        zipCode.focus();
    }    
    
    if (_runSearchOnStartup != "")
    {
        setTimeout(_runSearchOnStartup, 3);
    }
}

// Fires whenever a user elects to search for all stores within a
// region
function searchByRegion()
{
    var loadingDiv = document.getElementById("loadingDiv");
    
    if(loadingDiv != null)
    {
        loadingDiv.style.display = "block";
    }
    
    var regions = document.getElementById("SearchByRegions");
    
    if (regions.value.length == 0)
    {
        alert("Please select a region from the drop down before trying to search on region");
        return;
    }
    
    var mapToggleDiv = document.getElementById("FilterMapToggle");
    
    if(mapToggleDiv != null)
    {
        mapToggleDiv.style.display = "block";
        mapToggleDiv.style.visibility = "visible";
    }
    
    try
    {
        var tracking = getTrackingObject();
        tracking._trackEvent("/Events/StoreLocator/RegionSearch", "Store Locator Region Search", regions.value)
        tracking._trackEvent("/Events/StoreLocator/MS/RegionSearch", "MS Store Locator Region Search", regions.value)
    }
    catch (trackError)
    {
    
    }
        
    GiantEagle.Applications.InternetSites.Web.Services.StoreLocatorService.GetByRegion(regions.value, getFilters(), receiveMapResults, receiveError, true);
    _searchCenter = undefined;
}

function searchByAddress()
{
    var loadingDiv = document.getElementById("loadingDiv");
    
    if(loadingDiv != null)
    {
        loadingDiv.style.display = "block";
    }

    try
    {
        var streetLine = document.getElementById("SearchAddressStreet");
        var city = document.getElementById("SearchAddressCity");
        var state = document.getElementById("SearchAddressState");
        var zipCode = document.getElementById("SearchAddressZipCode");
        
        var searchAddress = streetLine.value + ", " + city.value + ", " + state.value + " " + zipCode.value;
        //if (streetLine.value.trim().length == 0 || city.value.trim().length == 0 || state.value.length == 0 || zipCode.value.trim().length)
        _currentTab = "address";
        
        if (searchAddress.trim().length == 0)
        {
            alert("Please enter a valid address before attempting to search by address");
            return;
        }

        _map.Find(null, searchAddress, null, null, null, null, false, false, false, false, receiveGeocodedPoint);
    }
    catch (e)
    {
        alert(e.message);
    }
    
    try
    {
        var tracking = getTrackingObject();
        tracking._trackEvent("/Events/StoreLocator/AddressSearch", "Store Locator Address Search", "")
        tracking._trackEvent("/Events/StoreLocator/MS/AddressSearch", "MS Store Locator Address Search", "")
    }
    catch (trackError)
    {
    
    }
}

function searchByZipCode()
{
    var loadingDiv = document.getElementById("loadingDiv");
    
    if(loadingDiv != null)
    {
        loadingDiv.style.display = "block";
    }

    var zipCode = document.getElementById("zipCodeSearch");
    
    if(zipCode != null)
    {
        if (zipCode.value.trim().length == 0)
        {
            alert("Please enter a valid zip code");
            return;
        }
        
        var mapToggleDiv = document.getElementById("FilterMapToggle");
        //var optionsToggleDiv = document.getElementById("FilterOptionsToggle");
        
        if(mapToggleDiv != null)
        {
            mapToggleDiv.style.display = "block";
            mapToggleDiv.style.visibility = "visible";
        }        
        
        try
        {
            var tracking = getTrackingObject();
            tracking._trackEvent("/Events/StoreLocator/ZipCodeSearch", "Store Locator Zip Code Search", zipCode.value)
            tracking._trackEvent("/Events/StoreLocator/MS/ZipCodeSearch", "MS Store Locator Zip Code Search", zipCode.value);        
        }
        catch (trackError)
        {
        
        }   
        
        try
        {                        
            _currentTab = "zip";

            // This may also return foreign cities so add USA into the search
            _map.Find(null, zipCode.value + " USA ", null, null, null, null, false, false, false, false, receiveGeocodedPoint);
        }
        catch (e)
        {
            alert("Error checking zip code: " + e.message);
        }    
    }
}

function placeCenterMarker()
{
    if (_searchCenter)
    {                    
        var shape = new VEShape(VEShapeType.Pushpin, _searchCenter.LatLong);                                            
        shape.SetTitle(_searchCenter.Name);
        shape.SetCustomIcon("<img src=\"" + _geApplicationRoot + "/Images/StoreLocator/locatorCenterMarker.gif\" width=\"19\" height=\"19\" alt=\"Giant Eagle Location\" />");
        _map.AddShape(shape);            
        _map.SetCenterAndZoom(_searchCenter.LatLong, _resultZoomLevel);
    } 
} 

function receiveGeocodedPoint(layer, results, places, hasMore, errorMessage)    
{                    
    if (places == null )
    {
        alert("No results returned.  Try entering more information.");
        return;
    }
    if (places.length < 1)
    {
        alert("There were no results found for the select criteria.");
        return;
    }           
    
    for (var i=0; i < places.length; i++ )
    {
        if (_currentTab == "address" )
        {
            _searchCenter = places[i];
            GiantEagle.Applications.InternetSites.Web.Services.StoreLocatorService.GetByRadiusFromLatitudeAndLongitude(places[i].LatLong.Longitude, places[i].LatLong.Latitude, _radiusSearchMiles, getFilters(), receiveMapResults, receiveError, false);
            return;
        }

        // This returns an array of VEPlace objects and the name contains things like 15220 PA
        // it also will return fuzzy matches like 25220 AZ
        // Check the Name property against the zip the user searched for to see if it exists within the Name
        // and get information from the service if it was found
        var zipCode = document.getElementById("zipCodeSearch");
        if (places[i].Name.indexOf(zipCode.value) != -1 )
        {       
            _searchCenter = places[i];
            GiantEagle.Applications.InternetSites.Web.Services.StoreLocatorService.GetByRadiusFromLatitudeAndLongitude(places[i].LatLong.Longitude, places[i].LatLong.Latitude, _radiusSearchMiles, getFilters(), receiveMapResults, receiveError, false);
            return;
        }
    }
    
    //alert("The system could not find the zip code you entered.");
    
    var items = document.createElement("TABLE");
    items.id = "Result::Items";
    items.cellspacing = "0";
    items.cellpadding = "2";
    items.width = "100%";
    //buildHeaderRow(items.insertRow(items.rows.length));   
    var noItemsRow = items.insertRow(items.rows.length);
    var noItemsCell = noItemsRow.insertCell(noItemsRow.cells.length);
    noItemsCell.colSpan = 6;
    noItemsCell.style.textAlign = "center";
    noItemsCell.style.fontSize = "8pt";
    noItemsCell.style.paddingTop = "10px";
    noItemsCell.style.paddingBottom = "10px";
    noItemsCell.innerHTML = "<b>There have been no stores found for your search criteria.<br />Please change your criteria and try again.</b>";
    var resultsContainer = document.getElementById("DisplayResultsItems");        
    resultsContainer.innerHTML = "";
    resultsContainer.appendChild(items);
    
    var resultsContainerParent = document.getElementById("DisplayResults"); 
    resultsContainerParent.style.display = "block";
    
    var resultsContainerParent = document.getElementById("DisplayResultsTable"); 
    resultsContainerParent.style.display = "none";
    
    var loadingDiv = document.getElementById("loadingDiv");
    
    if(loadingDiv != null)
    {
        loadingDiv.style.display = "none";
    }
        
    /*var radius = document. getElementById("SearchRadius");
    if (!radius && !radius.value)
    {
        throw "Could not locate the search radius drop down";
    }*/
}

function receiveMapResults(response, doesNotHaveCenter)
{
    if (!response.OperationSucceeded)  
    {
        alert(response.ClientErrorMessage);            
        return;
    }
                       
    _resultBannerCache = new Object();
    _resultBannerCache["all"] = response.ClientData;    
    // Will thread this operation to make 
    // it quicker.            
    setTimeout("filterResultForBannerCode('GE')", 1);
    setTimeout("filterResultForBannerCode('GG')", 1);
    setTimeout("filterResultForBannerCode('MD')", 1);
    setTimeout("filterResultForBannerCode('GX')", 1);    
    setResultCountForBannerCode("All", response.ClientData.length);
    filterResults("all", true);
    
    var toggleContainer = document.getElementById("FilterOptionsToggle");
    var toggleImage = getToggleImage(toggleContainer);
    if (!toggleImage.getAttribute("toggled"))
    {
        toggleOptions(toggleContainer);
    }
    
    if(_hideMapByDefault == true)
    {
        var toggleMapImage = document.getElementById("ToggleMapIcon");
        
        if (!toggleMapImage.getAttribute("toggled"))
        {
            toggleMap();
        }
    }
    
    var loadingDiv = document.getElementById("loadingDiv");
    
    if(loadingDiv != null)
    {
        loadingDiv.style.display = "none";
    }
}   

function displayResults(dataItems, centerMapOnFirstDataItem)
{   
    if (!_mapHasBeenMadeVisible)
    {
        // This is needed other wise the map looks stupid and
        // doesn't work right
        document.getElementById("MapContainer").style.display = "block";    
        /*var map = document.getElementById("map");
        map.style.position = "relative";
        map.style.top = "";
        map.style.left = "";*/
        if (_map != null)
        {
            _map.Dispose();
        }
        _map = new VEMap("map");
        _map.LoadMap();     
        _mapHasBeenMadeVisible = true;
    }
    
    _map.DeleteAllShapes();         
    var length = dataItems.length;                    
    if (!centerMapOnFirstDataItem)
    {
        placeCenterMarker();
    }
    var first = centerMapOnFirstDataItem;                    
    var items = document.createElement("TABLE");
    items.id = "Result::Items";
    items.cellspacing = "0";
    items.cellpadding = "2";
    items.width = "100%";
    buildHeaderRow(items.insertRow(items.rows.length));        
    setTimeout("buildItemPager(" + length.toString() + ")", 0);       
    
    if (length > 0)
    {    
        for (var i = 0; i < length; i++)
        {            
            if (i==0 && centerMapOnFirstDataItem)
            {
                var point = new VELatLong(dataItems[i].Coordinate.Latitude.Value, dataItems[i].Coordinate.Longitude.Value);
                _map.SetCenterAndZoom(point, 10);
            }
            var item = buildItemRow(items.insertRow(items.rows.length), dataItems[i], (i+1));
            first = false;
            
            if ((i + 1) > _resultsPerPage)
            {
                item.style.display = "none";
            }
            else
            {
                _map.AddShape(generateMarker(dataItems[i], first, (i+1)));
            }
        }
    }
    else
    {
        var noItemsRow = items.insertRow(items.rows.length);
        var noItemsCell = noItemsRow.insertCell(noItemsRow.cells.length);
        noItemsCell.colSpan = 6;
        noItemsCell.style.textAlign = "center";
        noItemsCell.style.fontSize = "8pt";
        noItemsCell.style.paddingTop = "10px";
        noItemsCell.style.paddingBottom = "10px";
        noItemsCell.innerHTML = "<b>There have been no stores found for your search criteria.<br />Please change your criteria and try again.</b>";        
    }
            
    var resultsContainer = document.getElementById("DisplayResultsItems");        
    resultsContainer.innerHTML = "";
    resultsContainer.appendChild(items);               
}

function buildHeaderRow(header)
{
    header.className = "locatorResultHeader";
    var headerCell = header.insertCell(header.cells.length);
    headerCell.innerHTML = "Store";
    headerCell = header.insertCell(header.cells.length);
    headerCell.innerHTML = "Address";
    headerCell = header.insertCell(header.cells.length);
    headerCell.innerHTML = "Store";
    headerCell = header.insertCell(header.cells.length);
    headerCell.innerHTML = "Hours";
    headerCell = header.insertCell(header.cells.length);
    headerCell.innerHTML = "Distance";
    headerCell = header.insertCell(header.cells.length);
    headerCell.innerHTML = "&nbsp;";
}

// This function builds the item row for each item returned from the search
// in order to display it in the results area - mjo
function buildItemRow(item, dataItem, indexer)
{   
    var bannerCode = dataItem.Banner.Code;    
    item.className = "locatorResult";     
    var itemCell = item.insertCell(item.cells.length);
    itemCell.width = "20";
    itemCell.vAlign = "top";
    itemCell.style.verticalAlign = "top";
    var icon = document.createElement("IMG");
    icon.src = getIconImageUrl(bannerCode, indexer);
    icon.width = "23";
    icon.height = "16";
    itemCell.appendChild(icon);        
    
    itemCell = item.insertCell(item.cells.length);
    itemCell.vAlign = "top";
    itemCell.style.verticalAlign = "top";
    itemCell.innerHTML = "<b><a href=\""+ getStoreDetailLink(dataItem.Id.Value) +"\" onmouseover=\"showStoreDetails(this, " + dataItem.Id.Value + ");\" onmouseout=\"setTimeout('hideStoreInformation()', 200);\">" + dataItem.Name + "</a></b><br />";
    itemCell.innerHTML += dataItem.AddressLineOne;
    if (dataItem.AddressLineTwo)
    {
        itemCell.innerHTML += "<br />" + dataItem.AddressLineTwo;
    }
    itemCell.innerHTML += "<br />" + dataItem.City + ", " + dataItem.State + " " + dataItem.ZipCode;
    if (dataItem.PhoneNumbers && dataItem.PhoneNumbers.length)
    {
        var length = dataItem.PhoneNumbers.length;
        for (var i = 0; i < length; i++)
        {
            itemCell.innerHTML += "<br />" + dataItem.PhoneNumbers[i];
        }
    }
    
    // Store
    itemCell = item.insertCell(item.cells.length)
    itemCell.width = "60";
    itemCell.vAlign = "top";
    itemCell.style.verticalAlign = "top";
    var storeIcon = document.createElement("IMG");
    storeIcon.src = _geApplicationRoot + "/Images/StoreLocator/" + bannerCode + ".gif";
    storeIcon.alt = dataItem.Banner.Name;
    itemCell.appendChild(storeIcon);

    // Hours
    itemCell = item.insertCell(item.cells.length);
    itemCell.width = "100";
    itemCell.vAlign = "top";
    itemCell.style.verticalAlign = "top";
    if (dataItem.Hours && dataItem.Hours.length)
    {
        var length = dataItem.Hours.length;
        for (var i = 0; i < length; i++)
        {
            if (dataItem.Hours[i] != null)
            {
               itemCell.innerHTML += dataItem.Hours[i] + "<br />";
            }
        }
    }
    
    // Distance
    itemCell = item.insertCell(item.cells.length);
    itemCell.vAlign = "top";
    itemCell.width = "50";
    itemCell.style.verticalAlign = "top";
    if (dataItem.Distance)
    {
        itemCell.innerHTML = dataItem.Distance.Value.format("N");
    }
    else
    {
        itemCell.innerHTML = "N/A";
    }
    
    // Maps | Directions
    itemCell = item.insertCell(item.cells.length);        
    itemCell.width = "100";
    itemCell.vAlign = "top";
    itemCell.style.verticalAlign = "top";
    if (dataItem.Id.Value == _primaryGiantEagleId || 
        dataItem.Id.Value == _primaryGetGo || 
        dataItem.Id.Value == _primaryGiantEagleExpressId ||
        dataItem.Id.Value == _primaryMarketDistrictId )
    {
            itemCell.id = "primaryStore" + bannerCode;            
            itemCell.innerHTML = "Primary Store";
            itemCell.setAttribute("storeId", dataItem.Id.Value);
    }
    else
    {        
        itemCell.appendChild(createSelectStoreLink(dataItem.Id.Value)); 
        if (bannerCode == 'GE' || bannerCode =='MD' )
        {
            itemCell.appendChild(document.createElement("BR"));
            itemCell.appendChild(createSelectWeeklySpecialsLink(dataItem.Id.Value));
        }
    }                       
    return item;
}

//
function createSelectStoreLink(storeId)
{
    var selectionLink = document.createElement("A");
    if (_refererUrl)
    {
        selectionLink.innerHTML = "Select Store";    
    }
    else
    {
        selectionLink.innerHTML = "Make Primary Store";
    }
    selectionLink.href = "javascript:void(0);";
    selectionLink.setAttribute("storeId", storeId);
    selectionLink.onclick = function (e) { setAsPrimaryStore(this.getAttribute("storeId"), this.parentNode) };
    return selectionLink;
}

//
function createSelectWeeklySpecialsLink(storeId)
{
    var selectionLink = document.createElement("A");
    selectionLink.innerHTML = "View Weekly Specials";
    
    if (_weeklySpecialsPageNumber != null) {
        selectionLink.href = _geApplicationRoot + "/Specials/WeeklySpecials.aspx?storeId=" + storeId + "&pageNumber=" + _weeklySpecialsPageNumber;
    }
    else {
        selectionLink.href = _geApplicationRoot + "/Specials/WeeklySpecials.aspx?storeId=" + storeId;
    }
    
    return selectionLink;
}

//
function setAsPrimaryStore(storeId, sender)
{
    GiantEagle.Applications.InternetSites.Web.Services.StoreLocatorService.SetSelectedStore(storeId, receiveSelectedStore, receiveError, sender);
}

//
function receiveSelectedStore(response, context)
{
    if (!response.OperationSucceeded)
    {
        alert(response.ClientErrorMessage);
        return;
    }
    if (_refererUrl)
    {
        window.location = _refererUrl;
    }
    else
    {
        var primaryStoreId = "primaryStore";
        if (response.ClientData.Banner.Code == "GE")
        {
            _primaryGiantEagleId = response.ClientData.Id.Value;
            _primaryMarketDistrictId = "-1";
            _primaryGiantEagleExpressId ="-1";          

            primaryStoreId = findOldPrimaryStore(response);
           
        }
        else if (response.ClientData.Banner.Code == "MD")
        {
            _primaryMarketDistrictId = response.ClientData.Id.Value;
            _primaryGiantEagleId ="-1";
            _primaryGiantEagleExpressId ="-1";            
                
            primaryStoreId = findOldPrimaryStore(response);
        }
        else if (response.ClientData.Banner.Code == "GG")
        {
            _primaryGetGo = response.ClientData.Id.Value;
            primaryStoreId += "GG";
             
        }
        else if (response.ClientData.Banner.Code = "GX")
        {
            _primaryGiantEagleExpressId = response.ClientData.Id.Value;
            _primaryMarketDistrictId = "-1";
            _primaryGiantEagleId ="-1";          

           primaryStoreId = findOldPrimaryStore(response);   
        }
        
       
        var oldPrimaryStore = document.getElementById(primaryStoreId); 
               
        if (oldPrimaryStore)
        {
            var selectStore = createSelectStoreLink(oldPrimaryStore.getAttribute("storeId"));
            oldPrimaryStore.innerHTML = "";
            oldPrimaryStore.appendChild(selectStore);
            oldPrimaryStore.id = "";
        }
        
        context.id = primaryStoreId;
        context.setAttribute("storeId", response.ClientData.Id.Value);
        context.innerHTML = "Primary Store";
        
         __doPostBack('dashboard$MyStoresUcl$LoadMyStore','');   
    }    
}

//
function findOldPrimaryStore(response)
{
   var oldPrimary;
   var storeGE = document.getElementById("primaryStoreGE");
   var storeGX = document.getElementById("primaryStoreGX");
   var storeMD = document.getElementById("primaryStoreMD");
   
   if(storeGE != null)
   {
       oldPrimary = storeGE.id;    
   }
   else if (storeGX != null)
   {
       oldPrimary = storeGX.id;    
   }
   else if (storeMD != null)
   {
       oldPrimary = storeMD.id;      
   }
  
   return oldPrimary;
}


function getIconImageUrl(bannerCode, indexer)
{
    return _geApplicationRoot + "/StoreLocator/IconImageHandler.ashx?bnr=" + bannerCode +"&iconid=" + indexer.toString()
}


function buildItemPager(numberOfResults)
{
    var pagerContainer = document.getElementById("ResultsPager");
    var numberOfPages = Math.ceil(parseInt(numberOfResults) / _resultsPerPage);
    var startIndex = document.getElementById("StartIndex");
    var endIndex = document.getElementById("EndIndex");
    var totalNumberOfResults = document.getElementById("TotalRecords");
    
    if (numberOfResults > 0)
    {
        startIndex.innerHTML = 1;
    }
    else
    {
        startIndex.innerHTML = 0;
    }    
    var setupPages = true;
    if (numberOfResults > _resultsPerPage)
    {
        endIndex.innerHTML = _resultsPerPage;
    }
    else
    {
        endIndex.innerHTML = numberOfResults;
        setupPages = false;
    }
    totalNumberOfResults.innerHTML = numberOfResults;
    
    pagerContainer.innerHTML = "";
    
    if (setupPages)
    {
        pagerContainer.setAttribute("maxpage", numberOfPages);
        pagerContainer.setAttribute("currentpage", 1);
        var page = document.createElement("A");
        page.style.padding = "2pt";
        page.href = "javascript:void(0);";
        page.onclick = function (e) { flipPage(this, false); };
        page.innerHTML = "< Prev";
        page.id = "Result::PreviousPage";
        page.disabled = true;        
        pagerContainer.appendChild(page);
        
        for (var i = 1; i <= numberOfPages; i++)
        {
            var page = document.createElement("A");
            page.href = "javascript:void(0);";
            page.id = "Result::Page" + i.toString();
            page.setAttribute("pagenumber", i);
            page.style.padding = "2pt";
            page.onclick = function (e) { turnToPage(this, this.getAttribute("pagenumber")); };
            page.innerHTML = i;
            if (i == 1)
            {
                page.disabled = true;
            }
            pagerContainer.appendChild(page);
        }
        
        page = document.createElement("A");
        page.href = "javascript:void(0);";
        page.onclick = function (e) { flipPage(this, true); };
        page.innerHTML = "Next >";     
        page.style.padding = "2pt";   
        page.id = "Result::NextPage";
        page.disabled =  (numberOfPages < 1);        
        pagerContainer.appendChild(page);
    }
    
    var searchResults = document.getElementById("DisplayResults");
        
    if(searchResults != null)
    {
        searchResults.style.display = "block";
        searchResults.style.visibility = "visible";
    }
}

function flipPage(sender, forward)
{
    var pagerContainer = document.getElementById("ResultsPager");
    var newPageIndex = parseInt(pagerContainer.getAttribute("currentpage"));
    if (forward)
    {
        newPageIndex++;
    }
    else
    {
        newPageIndex--;
    }
    turnToPage(sender, newPageIndex);
}

function turnToPage(sender, pageNumber)
{
    if (sender.disabled)
    {
        return;
    }
    var previousPage = document.getElementById("Result::PreviousPage");
    var nextPage = document.getElementById("Result::NextPage");
    var pagerContainer = document.getElementById("ResultsPager");
    var currentPage = pagerContainer.getAttribute("currentpage");

    var currentLink = document.getElementById("Result::Page" + currentPage);
    currentLink.disabled = false;
    
    var startIndex = document.getElementById("StartIndex");
    var endIndex = document.getElementById("EndIndex");
    var totalNumberOfResults = parseInt(document.getElementById("TotalRecords").innerHTML);
    
    var newPageLink = document.getElementById("Result::Page" + pageNumber);
    newPageLink.disabled = true;
    
    var newStartIndex = (pageNumber * _resultsPerPage) + (1 - _resultsPerPage);
    previousPage.disabled = (newStartIndex == 1);
    var newEndIndex  = pageNumber * _resultsPerPage;
    if (newEndIndex >= totalNumberOfResults)
    {
        newEndIndex = totalNumberOfResults;
        nextPage.disabled = true;
    }
    else
    {
        nextPage.disabled = false;
    }

    var items = document.getElementById("Result::Items");
    var currentIndex = parseInt(startIndex.innerHTML);
    var currentEndIndex = parseInt(endIndex.innerHTML);
    _map.DeleteAllShapes();
    placeCenterMarker();
    var dataItems = filterResultForBannerCode(_currentFilter);
    for (var i = currentIndex; i <= currentEndIndex; i++)
    {
        items.rows[i].style.display = "none";               
    }
    for (var i = newStartIndex; i <= newEndIndex; i++)
    {
        items.rows[i].style.display = "";
        try
        {
        _map.AddShape(generateMarker(dataItems[(i - 1)], false, i));
        }
        catch(e)
        {
            alert(i + "== >" + dataItems.length);
            alert(newStartIndex);
            alert(newEndIndex);
            alert(e.message);
        }
    }

    startIndex.innerHTML = newStartIndex;
    endIndex.innerHTML = newEndIndex;        
    pagerContainer.setAttribute("currentpage", pageNumber);
}

function generateMarker(store, panToPoint, pushpinId)
{
    if (!store)
    {
        return;
    }
    var point = new VELatLong(store.Coordinate.Latitude.Value, store.Coordinate.Longitude.Value);
    var shape = new VEShape(VEShapeType.Pushpin, point);
    shape.SetTitle(store.Name);        
    var bannerCode = store.Banner.Code;    
    shape.SetCustomIcon("<img src=\"" + getIconImageUrl(bannerCode, pushpinId.toString()) + "\" width=\"23\" height=\"16\" alt=\"Giant Eagle Location\" />");    
    var container = document.createElement("DIV");
    var childItem = document.createElement("DIV");                
    
    var bannerIcon = document.createElement("IMG");
    bannerIcon.src = _geApplicationRoot + "/Images/StoreLocator/" + store.Banner.Code + ".gif";    
    bannerIcon.alt = store.Banner.Name;
    bannerIcon.style.float = "left";
    childItem.appendChild(bannerIcon);
       

    var info = document.createElement("DIV");    
    info.style.float = "left";
    info.style.width = "160px";
    info.style.marginLeft = "5px";
    info.innerHTML = store.AddressLineOne + "<br />";;
    if (store.AddressLineTwo)
    { 
        info.innerHTML += store.AddressLineTwo + "<br />";
    }
    info.innerHTML += store.City + ", " + store.State + " " + store.ZipCode;
    /*if (store.Distance && store.Distance.Value)
    {
    childItem.innerHTML += "<br /> Distance:" + store.Distance.Value ;
    }*/
    //childItem.innerHTML += "<br />" + store.StoreTypeCode;
    childItem.appendChild(info);
    
    var detailsContainer = document.createElement("DIV");    
    detailsContainer.style.padding = "5pt";
    detailsContainer.style.paddingTop = "25pt";
    detailsContainer.style.textAlign = "center";
    var details = document.createElement("A");
    details.href = _geApplicationRoot + "/StoreLocator/StoreDetails.aspx?StoreId=" + store.Id.Value;
    details.innerHTML = "More About this Store...";
    detailsContainer.appendChild(details);
    childItem.appendChild(detailsContainer);
    
    container.appendChild(childItem);
    shape.SetDescription(container.innerHTML);       
    if (panToPoint)
    {            
        _map.SetCenterAndZoom(point, _resultZoomLevel);
    }
    
    return shape;           
}

var _selectedTab = undefined;
function filterResults(bannerCode, force)
{
    var tabId = "Tab::" + bannerCode;
    if (_selectedTab && _selectedTab.id  == tabId && !force)
    {
        return;
    }

    var needsCenter = true;
    if (_searchCenter)
    {
        needsCenter = false;
    }    
    _currentFilter = bannerCode;
    displayResults(filterResultForBannerCode(bannerCode), needsCenter); 
    var newTab = document.getElementById(tabId);
    if (_selectedTab)
    {
        _selectedTab.style.zIndex = _selectedTab.getAttribute("oldzindex");
    }
    
    newTab.setAttribute("oldzindex", newTab.style.zIndex);
    newTab.style.zIndex = 6;
    _selectedTab = newTab;
}

function filterResultForBannerCode(bannerCode)
{
    var items = _resultBannerCache[bannerCode];
    if (!items)
    {
        if (bannerCode == "all")
        {
            throw "Cannot filter results when the all filter is null";
        }
        var items = new Array();
        var allItems = _resultBannerCache["all"];
        var length = allItems.length;
        for (var i = 0; i < length; i++)
        {       
                if (allItems[i].Banner.Code.toUpperCase() == bannerCode)
                {                    
                    items[items.length] = allItems[i];
                }
        }
        _resultBannerCache[bannerCode] = items;  
        setResultCountForBannerCode(bannerCode, items.length);
    }
    return items;
}

function setResultCountForBannerCode(bannerCode, itemCount)
{
    var numberOfResults = document.getElementById("Results::" + bannerCode);
    if (numberOfResults)
    {
        numberOfResults.innerHTML = "(" + itemCount + ")";
    }
}

function receiveError(error)
{
    alert(error.get_message());
}

function setSearchByTab(tabName)
{
    if (tabName == "ZipCode")
    {
        document.getElementById("SearchByZipCodeTab").src = _geApplicationRoot + "/Images/StoreLocator/TabZipRegion.jpg";
        document.getElementById("SearchByAddressTab").src = _geApplicationRoot + "/Images/StoreLocator/TabByAddressNotSelected.jpg";
        document.getElementById("ZipCodeInformation").style.display = "";
        document.getElementById("AddressInformation").style.display= "none";
    }
    else
    {
        document.getElementById("SearchByZipCodeTab").src = _geApplicationRoot + "/Images/StoreLocator/TabByZipNotSelected.jpg";
        document.getElementById("SearchByAddressTab").src = _geApplicationRoot + "/Images/StoreLocator/TabByAddressSelected.jpg";
        document.getElementById("AddressInformation").style.display = "";                        
        document.getElementById("ZipCodeInformation").style.display = "none";
    }
}

function toggleOptions(sender)
{
    var container = document.getElementById("AdditionalOptionsContainer");
    var toggleImage = getToggleImage(sender);        
            
    if (toggleImage.getAttribute("toggled"))
    {
        toggleImage.src = _geApplicationRoot + "/Images/StoreLocator/DownCircleArrow.gif";
        toggleImage.removeAttribute("toggled");
        container.style.display = "block";
    }
    else
    {                
        toggleImage.src = _geApplicationRoot + "/Images/StoreLocator/CircleArrowRight.gif";
        toggleImage.setAttribute("toggled", "true");
        container.style.display = "none";
    }    
}

function toggleMap()
{
    var container = document.getElementById("MapTableContainer");
    var toggleImage = document.getElementById("ToggleMapIcon");        
            
    if (toggleImage.getAttribute("toggled"))
    {
        toggleImage.src = _geApplicationRoot + "/Images/StoreLocator/DownCircleArrow.gif";
        toggleImage.removeAttribute("toggled");
        container.style.display = "block";
    }
    else
    {                
        toggleImage.src = _geApplicationRoot + "/Images/StoreLocator/CircleArrowRight.gif";
        toggleImage.setAttribute("toggled", "true");
        container.style.display = "none";
    }    
}

var _toggleImage = undefined;
function getToggleImage(sender)
{
    if (!_toggleImage)
    {
        var imageElements = sender.getElementsByTagName("IMG");
        if (!imageElements && !imageElements.length)
        {
            throw "Could not get the image elements from options";
        }
        _toggleImage = imageElements[0];
    }        
    return _toggleImage;
}

function appliedFilter(filter)
{
    _appliedFilters[_appliedFilters.length] = filter;
}

function getFilters()
{
    var appliedFilters = new Array();
    var filters = new Array();
    var length = _appliedFilters.length;
    for (var i = 0; i < length; i++)
    {
        if (_appliedFilters[i].checked)
        {
            var position = filters.length;
            filters[position] = new Array();
            filters[position][0] = _appliedFilters[i].getAttribute("filter");
            filters[position][1] = _appliedFilters[i].getAttribute("filterValue");
            appliedFilters[position] = _appliedFilters[i];
        }
    }
    _appliedFilters = appliedFilters;
    return filters;
}


var _currentStore = undefined;
function showStoreDetails(sender, storeId)
{      
    GiantEagle.Applications.InternetSites.Web.Services.StoreLocatorService.GetStoreById(storeId, receiveStore, receiveError, sender);
}

function receiveStore(response, sender)
{
    if (!response.OperationSucceeded)
    {
        alert(response.ClientErrorMessage);
        return;
    }
    
    _currentStore = response.ClientData;
    GiantEagle.Applications.InternetSites.Web.Services.StoreLocatorService.GetAllBusinessLinesByStoreId(response.ClientData.Id.Value, receiveStoreBusinesses, receiveError, sender);
}

function getStoreDetailLink(storeId)
{
    return _geApplicationRoot + "/storelocator/storedetails.aspx?storeid=" + storeId
}

function receiveStoreBusinesses(response, sender)
{    
    var moreDetails = document.getElementById("MoreStoreDetails");
    moreDetails.href = getStoreDetailLink(_currentStore.Id.Value);        
    var information = document.getElementById("StoreInformation");
    information.style.display = "block";
    
    var height = 0;
    var left = 0;               
    if (sender.offsetParent) 
    {
        left = sender.offsetLeft
        height = sender.offsetTop
    }
    var item = sender;
    while (item = item.offsetParent)
    {
        left += item.offsetLeft
        height += item.offsetTop
    }
    left += 150;
    
    information.style.top = height + "px";        
    information.style.left = left + "px";
                   
    var listContainer = document.getElementById("StoreLinesOfBusiness");                
    var title = document.createElement("DIV");
    
   // var isMarketDistrcit = (_currentStore.Banner.Code == "GE" && _currentStore.Name.toLowerCase().indexOf("market district") != -1);
    
    var icon = document.createElement("IMG");
    icon.style.float = "left";
    icon.align = "left";   
//    if (isMarketDistrcit)
//    {   
//        icon.src = _geApplicationRoot + "/images/storelocator/MD.gif";                     
//    }
//    else
//    {
        icon.src = _geApplicationRoot + "/images/storelocator/" + _currentStore.Banner.Code + ".gif";
//    }
    
    icon.alt = "Icon";
    title.appendChild(icon);
    
    var storeName = document.createElement("DIV");
    storeName.style.float = "left";
    storeName.style.width = "150px";
    storeName.style.height = "30px";
    storeName.style.paddingTop = "3px";
    storeName.style.color = "#ff0033";
    storeName.style.fontWeight = "bold";
//    if (isMarketDistrcit)
//    {
//        storeName.innerHTML = _currentStore.Name.replace("Market District", "");
//    }
//    else
//    {
        storeName.innerHTML = _currentStore.Name;
//    }
    title.appendChild(storeName);
    
    var subTitle = document.createElement("DIV");                       
    var isGetGo = (_currentStore.Banner.Code == "GG");            
    if (!isGetGo)
    {
        subTitle.innerHTML = "Departments";                       
    }
    else
    {
        subTitle.innerHTML = "Features";
    }
    subTitle.style.fontSize = "7.5pt";
    subTitle.style.fontWeight = "bold";                
    title.appendChild(subTitle);
                       
    var length = response.ClientData.length;        
    if (length > 0)
    {       
        var list = document.createElement("UL");
        list.className = "locatoreStoreInformationList";            
        for (var i = 0; i < length; i++)
        {
            var item = document.createElement("LI");
            item.innerHTML = response.ClientData[i].Name;
            list.appendChild(item);
        }
        listContainer.innerHTML = "";
        listContainer.appendChild(title);
        listContainer.appendChild(list);
    }       
    else
    {
        var noItems = document.createElement("DIV");
        noItems.style.padding = "5px";
        noItems.style.lineHeight = "12pt";
        noItems.innerHTML = "There were no store departments available for the selected store";            
        
        listContainer.innerHTML = "";
        listContainer.appendChild(title);            
        listContainer.appendChild(noItems);
    }   
}


function hideStoreInformation()
{
    var information = document.getElementById("StoreInformation");
    if (information && (!information.getAttribute("toggled") || information.style.display == "none"))
    {
        information.style.display = "none";
    }
    else
    {
        setTimeout("hideStoreInformation()", 200);
    }
}

function setFocus(focusIt, target)
{
    if (focusIt)
    {
        target.setAttribute("toggled", "true");
    }
    else
    {
        target.removeAttribute("toggled", "true");
    }
}
    
var _trackingGoogle = null;
function getTrackingObject()
{
    if (_trackingGoogle == null)
    {
        _trackingGoogle = pageTracker._createEventTracker("Store Locator");
    }
    return _trackingGoogle;
}
