﻿//Google Map 
var map = null;
var defaultZoom = 9;
var geoCoder = null;

//UI Tabs
var resultTabLinks = null;
var activeTab = null;
var hasUserSetActiveTab = null;

//Results
var currentResults = {Residential:null,Communities:null,AvailableHomes:null,NewHomes:null,Favorites:null,NewSearch:true};

//Result Details Views Panel
var detailPanels = null;
var activeDetailPanel = null;

//Photo Viewer
var photoViewer = null;

//Modal Dialog
var modalDialog = null;

//Request Showing Dialog
var modalRequestShowing = null;

//Custom Info Box
var infoBoxVisible = true;

//Temp Push Pin
var currentPushPin = {Residential:null,Source:null,Index:null};

//Available Homes Active
var availableHomesActive = false;

var indicatorActive = false;

//Showing Request
var showingRequest;

//User Profile
var userProfile = null;

//Modal Dialog for Logging in
var modalLogIn = null;

//Modal Dialog for Registration
var modalRegistration = null;

//Modal Dialog for User Profile
var modalUserProfile = null;


function pageLoad()
{            
    //Init Google Maps
    if (GBrowserIsCompatible()) {
        map = new GMap2($get("searchMap"));
        map.setCenter(new GLatLng(35.881818, -78.793259), defaultZoom);
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        //map.enableScrollWheelZoom();
        //map.enableContinuousZoom();
        geoCoder = new GClientGeocoder();
    }
    
    //Tabs
    //resultTabLinks = [$get("favoritesTab"),$get("communitiesTab"),$get("resaleHomesTab"),$get("newHomesTab"),$get("availableFloorplansTab"),$get("landTab"),$get("multiFamilyTab")];
    resultTabLinks = [$get("communitiesTab"),$get("newHomesTab"),$get("resaleHomesTab"),$get("favoritesTab")];
    showResults(resultTabLinks[0]);
    activeTab = resultTabLinks[0];
    
    //Detail Views
    detailPanels = [$get("mapPanel"),$get("detailsPanel"),$get("photosPanel"),$get("communityDetailsPanel")];            
    showMapPanel(false);
    //showDetailPanel(detailPanels[0]);
   
    //Init Photo Viewer control
    if (photoViewer == null)
    {
        photoViewer = $create(OeS.PhotoViewer,{thumbnailWidth:150,autoHideThumbnails:false,mainImageWidth:500,cssClassValue:'photoViewer',thumbnailCssClass:'photoViewerThumbnails'},null,null,$get("photosContainer"));
    }
    
    //Init Modal Dialog
    if (modalDialog == null)
    {
        modalDialog = $create(OeS.ModalDialog,{backgroundCssClass:'modalBackground',closeElementId:'modalCaption'},null,null,$get("modalDialog"));
    }
    
    //Init modalRequestShowing
    if (modalRequestShowing == null)
    {
        modalRequestShowing = $create(OeS.ModalDialog,{backgroundCssClass:'modalBackground',closeElementId:'modalRequestShowingCaption',cancelElementId:'rsCancel'},null,null,$get("modalRequestShowing"));
        var okElement = $get("rsSubmit");
        if (okElement != null)
        {
            $addHandler(okElement,"click",SendShowingRequest);
        }
    }     
    
    //Init Log In Modal Dialog
    if (modalLogIn == null)
    {
        modalLogIn = $create(OeS.ModalDialog,{backgroundCssClass:'modalBackground',closeElementId:'modalLogInCaption',cancelElementId:'loginCancel'},null,null,$get("modalLogIn"));
    }
    
    //Init Registration Modal Dialog
    if (modalRegistration == null)
    {
        modalRegistration = $create(OeS.ModalDialog,{backgroundCssClass:'modalBackground',closeElementId:'modalRegistrationCaption',cancelElementId:'CancelRegistration'},null,null,$get("modalRegistration"));
    }
    
    //Init User Profile Modal Dialog
    if (modalUserProfile == null)
    {
        modalUserProfile = $create(OeS.ModalDialog,{backgroundCssClass:'modalBackground',closeElementId:'modalUserProfileCaption',cancelElementId:'CancelUserProfile'},null,null,$get("modalUserProfile"));
    }
           
    //Showing Request
    showingRequest = new NetByDesign.IDXPlus.Facade.ShowingRequest();
    showingRequest.EmailTo = $get("RequestEmailTo").value;
    showingRequest.EmailSubject = $get("RequestSubject").value;

    //Set Request a Showing Link Event Handler
    var requestLink = $get("RequestAShowingLink");
    if (requestLink != null)
    {
        //$addHandler(requestLink,"click",InitShowingRequestDialog);
    }

    
    //Hide Legal Statment
    toggleLegalStatement();
    
    //Post Search Requestion
    if (ProcessPostSearchRequest())
    {
        executeSearch(true)
    }
    
    //Test Authentication
    SetLogInContainer();
}

function pageUnload()
{
    GUnload();
}

function toggleLegalStatement()
{
    Sys.UI.DomElement.toggleCssClass($get("idxLegalStatement"),"hidden");
}

function isLegalStatmentHidden()
{
    var element = $get("idxLegalStatement");
    if (element != null)
    {
        return (element.className == 'hidden');
    }
    return false;
}

function toggleSearchForm()
{
    Sys.UI.DomElement.toggleCssClass($get("searchHeader"),"collapsed");
    //Sys.UI.DomElement.toggleCssClass($get("searchPanel"),"collapsed");
    //$("#searchHeader").toggle();
    $("#searchPanel").slideToggle("normal");
    
    if (isSearchFormCollapsed())
    {
        //$get("searchHeader").innerHTML = '<span><img src="/Content/images/clickheretomodify.gif" /></span>';
        $("#searchHeader").html('<div id="searchHeaderCaption"><span class="searchHeaderEffect">&raquo;&raquo;&raquo;&nbsp;</span>Click here to modify your search.<span class="searchHeaderEffect">&nbsp;&laquo;&laquo;&laquo;</span></div>');
        $(".searchHeaderEffect").effect("pulsate", { times: 3 }, 1500, function () {
                                                                                $("#searchHeader").html('<div id="searchHeaderCaption"><span class="searchHeaderEffect">&raquo;&raquo;&raquo;&nbsp;</span>Click here to modify your search.<span class="searchHeaderEffect">&nbsp;&laquo;&laquo;&laquo;</span></div>');});

    }
    else
    {
        $get("searchHeader").innerHTML = 'Search:';
    }
}



function showResults(tabElement)
{
    activeTab = tabElement;    
    
    for(var i=0;i<resultTabLinks.length;i++)
    {
        if (tabElement == resultTabLinks[i])
        {
            resultTabLinks[i].className = "activeTab";                    
        }
        else
        {
            resultTabLinks[i].className = "";
        }
    }
    
    //Set the flag to determine if the user has changed the active flag.
    if (hasUserSetActiveTab == null)
    {
        hasUserSetActiveTab = false;
    }
    else
    {
        hasUserSetActiveTab = true;
    }
    
    
    //Clear community Info box.
    $get("communityInfoBoxContainer").style.display = "none";
    
    //Load results if not downloaded, or redisplay last download
    //Assume a new search will need to be downloaded.
    if (!currentResults.NewSearch)
    {
        var cancelExecuteSearch = false;
        switch(activeTab.id)
        {
            case "resaleHomesTab":
                if (currentResults.Residential != null)
                {
                    residentialCallback(currentResults.Residential,"Residential");
                    cancelExecuteSearch = true;
                }     
                if (isLegalStatmentHidden())
                {
                    toggleLegalStatement();
                }   
                if (isPagerHidden())
                {
                    togglePager();
                }                
                break;
            case "communitiesTab":
                if (currentResults.Communities != null)
                {
                    communityCallback(currentResults.Communities);
                    cancelExecuteSearch = true;
                }
                //showDetailPanel(detailPanels[0]);
                showMapPanel(false);
                if (!isLegalStatmentHidden())
                {
                    toggleLegalStatement();
                }
                if (isPagerHidden())
                {
                    togglePager();
                }
                break;
           case "newHomesTab":
                if (currentResults.NewHomes != null)
                {
                    residentialCallback(currentResults.NewHomes,"NewHomes");
                    cancelExecuteSearch = true;
                }                        
                if (isLegalStatmentHidden())
                {
                    toggleLegalStatement();
                }
                if (isPagerHidden())
                {
                    togglePager();
                }
                break;
          case "favoritesTab":                
                if (currentResults.Favorites != null)
                {                    
                    GetFavoritesCallback(currentResults.Favorites);
                    
                }
                else
                {
                    GetFavorites();
                }
                if (isLegalStatmentHidden())
                {
                    toggleLegalStatement();
                }
                if (!isPagerHidden())
                {
                    togglePager();
                }
                cancelExecuteSearch = true;
                break;
        }
        if (!cancelExecuteSearch)
        {
            executeSearch(false);
        }
    }
    else
    {
        if (activeTab.id == "favoritesTab")
        {
            Sys.Debug.trace('Favorites Tab');
            if (currentResults.Favorites != null)
            {
                GetFavoritesCallback(currentResults.Favorites);
                
            }
            if (isLegalStatmentHidden())
            {
                toggleLegalStatement();
            }
        }
        else
        {
            ShowHelpText();
        }

    }
    
}

function isSearchFormCollapsed()
{
    var element = $get("searchHeader");
    if (element != null)
    {
        return (element.className == 'collapsed');
    }
    return false;
}

//Search
function executeSearch(resetResults)
{
    
    if (!isSearchFormCollapsed())
    {
        toggleSearchForm();
    }
    showIndicator();
    var query = getSearchQuery();
    

    $get('infoBoxContainer').scrollTop = 0;
    $get('infoBoxContainer').innerHTML = "<strong>Loading...</strong>";  
    
    //Result Reset
    if (resetResults)
    {
       var temp = currentResults.Favorites;
       currentResults = {Residential:null,Communities:null,AvailableHomes:null,NewHomes:null,Favorites:temp,NewSearch:false};
    }
    else
    {
        currentResults.NewSearch = false;
    }          
  
    NetByDesign.IDXPlus.Services.IDXPlusSearch.SearchResultTotals(query,resultTotalsCallback,errorCallback,query);
    
          
}


function resultTotalsCallback(totals,query)
{
    var tabId;
    var isActiveTabEmpty = false;
    //Process each result object
    for(var i=0;i < totals.length;i++)
    {                
        switch(totals[i].SearchType)
        {
            case "Community":
                tabId = "communitiesTab";                        
                break;
            case "Resale":
                tabId = "resaleHomesTab";
                break;           
            case "NewHomes":
                tabId = "newHomesTab";
                break;             
            default:
                tabId = "";
                break;                        
        }
        
        if (tabId != "")
        {
            var tab = $get(tabId);
            if (tab != null)
            {
                tab.innerHTML = totals[i].ResultCount + ' ' + tab.title;
                //Assign result count to tab element. Dynamic Language BABY!
                tab.ResultCount = totals[i].ResultCount;
                if(tab == activeTab && totals[i].ResultCount == 0)
                {
                    isActiveTabEmpty = true;
                }
            }
        }
    }
    
    if (isActiveTabEmpty && !hasUserSetActiveTab)
    {
        getNextNonEmptyTab();
    }
    

    //Get search results based on active tab.
    switch(activeTab.id)
    {
        case "resaleHomesTab":
            NetByDesign.IDXPlus.Services.IDXPlusSearch.ResidentialSearch(query,residentialCallback,errorCallback,"Residential");
            break;
        case "communitiesTab":
            NetByDesign.IDXPlus.Services.IDXPlusSearch.CommunitySearch(query,communityCallback,errorCallback);
            break;
        case "newHomesTab":
            NetByDesign.IDXPlus.Services.IDXPlusSearch.NewHomeSearch(query,residentialCallback,errorCallback,"NewHomes");
        case "favoritesTab":
            GetFavorites();
            break;
    } 
    
    
}

function getNextNonEmptyTab()
{
    for(var i = 0;i < resultTabLinks.length;i++)
    {
        if (resultTabLinks[i].ResultCount > 0 && resultTabLinks[i] != activeTab)
        {
            activeTab.className = "";
            resultTabLinks[i].className = "activeTab";
            activeTab = resultTabLinks[i];
            break;
        }        
    }
}

function setNextActiveTab(currentTab)
{
    switch(currentTab.id)
    {
        case 'communitiesTab':
            activeTab = $get('newHomesTab');
            break;
        case 'newHomesTab':
            activeTab = $get('resaleHomesTab');
            break;
        case 'resaleHomesTab':
            activeTab = $get('communitiesTab');
            break;
        default:
            activeTab = currentTab;
            break;
        
    }
}

function communityCallback(communities)
{
    currentResults.Communities = communities;
    
    //Set Page Indexes and Result Count
    setPageIndex(communities.PageCount,communities.CurrentPage);
    setPageButtons(communities.CurrentPage,communities.PageCount);
 
    if (activeTab != null)
    {
        activeTab.innerHTML = communities.ResultCount + " " + activeTab.title;
    }
    
    
    //Map
    currentListingPage = communities;
    map.clearOverlays();
    
    ///searchArea.HideIcon();

    var summaryItem = '';
    var summary = '';
    var infoBox = '';
    var marker = null;
    
    for(var i = 0;i < communities.Results.length;i++)
    {
        //Create pushpin for each listing.
        
        
        if (communities.Results[i].Latitude != 0 && communities.Results[i].Longitude != 0)
        {
            //Add Google Map Marker
            var point = new GLatLng(communities.Results[i].Latitude,communities.Results[i].Longitude);
            var infoBox = createCommunityInfoBox(communities.Results[i],i);
            marker = createMarker(point,infoBox);                    
            communities.Results[i].GMarker = marker;
            map.addOverlay(marker);

        }
        //Create listing summary
        summaryItem = createCommunitySummary(communities.Results[i],i);
        summary += summaryItem;
        
        //Log Page View
        TrackPageView(BuildNeighborhoodPageView(communities.Results[i],"summary"));                   
    }
    //showDetailPanel(detailPanels[0]);
    showMapPanel(false);
    $get('infoBoxContainer').innerHTML = summary;
    $get('infoBoxContainer').scrollTop = 0;
    
    stopIndicator();
    
}

function createMarker(point,infoBox)
{
    var marker = new GMarker(point);
    GEvent.addListener(marker,"click", function() {
                                                    marker.openInfoWindowHtml(infoBox);
                                            });
                                            
    GEvent.addListener(marker,"remove",function() {
                                            marker.Removed = true;
                                       });                                                    
    return marker;
}

function residentialCallback(residential,source)
{
    
    switch(source)
    {
        case "Residential":
            currentResults.Residential = residential;
            break;
        case "NewHomes":
            currentResults.NewHomes = residential;
            break;        
    }
    
    
    //Set Page Indexes and Result Count
    setPageIndex(residential.PageCount,residential.CurrentPage);
    setPageButtons(residential.CurrentPage,residential.PageCount);
 
    if (activeTab != null)
    {
        activeTab.innerHTML = residential.ResultCount + " " + activeTab.title;
    }
    
    
    //Map
    map.clearOverlays();
    

    var summaryItem = '';
    var summary = '';
    var infoBox = '';
    for(var i = 0;i < residential.Results.length;i++)
    {
        //Restore markers if any.
        
        if (residential.Results[i].GeoCode.GMarker != null)
        {
            if (residential.Results[i].GeoCode.GMarker.Removed != null)
            {
                map.addOverlay(residential.Results[i].GeoCode.GMarker);
            }
        }
        
        //Create listing summary
        summaryItem = createResidentialListingSummary(residential.Results[i],i,source);
        summary += summaryItem;  
        
        // Log Page View
        TrackPageView(BuildResidentialPageView(residential.Results[i],source,"summary"));
                    
        
    }
    $get('infoBoxContainer').innerHTML = summary;
    $get('infoBoxContainer').scrollTop = 0;
    // Hide info item feedback sections.
    $(".infoItemFeedback").hide();
	
	if (isLegalStatmentHidden())
	{
		toggleLegalStatement();
	} 
	
    stopIndicator();
       
}

function errorCallback(message)
{
    Sys.Debug.traceDump(message);
    stopIndicator()
}

//Paging Script
function setPageIndex(indexSize,currentPageIndex)
{
    var topIndex = $get("topPageIndex");
    var selected = false;
    if (topIndex != null)
    {
        topIndex.options.length = 0;
        for(var i=0;i < indexSize;i++)
        {
            selected = ((i+1)==currentPageIndex);
            topIndex.options[i] = new Option((i+1).toString(),(i+1).toString(),false,selected);
            
        }
    }
    var topPageCount = $get("topPageCount");
    if (topPageCount != null)
    {
        topPageCount.innerHTML = indexSize;
    }
}

function setPageButtons(currentPageIndex,pageCount)
{
    var pageButton = $get("topPrevPage");
    if (pageButton != null)
    {
        pageButton.disabled = (currentPageIndex <= 1);
    }
    
    pageButton = $get("topNextPage");
    if (pageButton != null)
    {
        pageButton.disabled = (currentPageIndex == pageCount);
    }
}

function changePageIndex(sender,argument)
{
    showIndicator()
    var activeResults = null
    //Get search results based on active tab.
    switch(activeTab.id)
    {
        case "resaleHomesTab":
            activeResults = currentResults.Residential;                   
            break;
        case "communitiesTab":
            if (availableHomesActive)
            {
                activeResults = currentResults.AvailableHomes;
            }
            else
            {
                activeResults = currentResults.Communities;
            }                    
            break;
        case "newHomesTab":
            activeResults = currentResults.NewHomes;
            break;
    }
    
    
    if (activeResults != null)
    {
        var query = activeResults.Query;
        var canceled = false;                
        switch(argument)
        {
            case 'prev':
                query.PageIndex = activeResults.CurrentPage-1;
                break;
            case 'next':
                query.PageIndex = activeResults.CurrentPage+1;
                break;
            case 'index':                        
                var index = getSelectedValuesString(sender,"");
                if (index != "")
                {
                    query.PageIndex = index*1;
                }
                break;
            default:
                canceled = true;
                break;
        }
        
        if (!canceled)
        {
            switch(activeTab.id)
            {
                case "resaleHomesTab":
                    NetByDesign.IDXPlus.Services.IDXPlusSearch.UpdateResidentialPage(query,residentialCallback,errorCallback,"Residential");
                    break;
                case "communitiesTab":
                    if (availableHomesActive)
                    {
                        NetByDesign.IDXPlus.Services.IDXPlusSearch.UpdateCommunityAvailableHomes(query,availableHomesCallback,errorCallback);
                    }
                    else
                    {
                        NetByDesign.IDXPlus.Services.IDXPlusSearch.UpdateCommunityPage(query,communityCallback,errorCallback);
                    }
                    break;
                case "newHomesTab":
                    NetByDesign.IDXPlus.Services.IDXPlusSearch.UpdateNewHomePage(query,residentialCallback,errorCallback,"NewHomes");
                    break;
            }                    
        }
        
    }
}

function togglePager()
{
    Sys.UI.DomElement.toggleCssClass($get("topPager"),"hidden");
}

function isPagerHidden()
{
    var element = $get("topPager");
    if (element != null)
    {
        return (element.className == 'hidden');
    }
    return false;
}

//Show Residential Details functions
function showResidentialDetails(index,type,source)
{
    var residential;

    //Get Listing by source
    switch(source)
    {
        case "Residential":
            residential = currentResults.Residential.Results[index];
            break;
        case "AvailableHomes":
            residential = currentResults.AvailableHomes.Results[index];
            break;
        case "NewHomes":
            residential = currentResults.NewHomes.Results[index];
            break;
        case "Favorite":
            residential = currentResults.Favorites[index].FullDetails;
            break;
        default:
            residential = null;
            break;
    }
    
    if (residential != null)
    {
        // Log Page View
        TrackPageView(BuildResidentialPageView(residential,source,type));
        
        switch(type)
        {
            case "map":
                mapResidential(residential,source,index);
                break;
            case "details":
                displayResidentialDetails(residential,index,source);
                showDetailPanel(detailPanels[1]);
                break;
            case "print":
                displayResidentialDetails(residential,index,source);
                printDetails("Residential");
                break;
            case "photos":
                showDetailPanel(detailPanels[2]);
                if (photoViewer != null)
                {
                    var title = $get("photosPanelTitle")
                    if (title != null)
                    {
                        title.innerHTML = residential.Street1 + ", " + residential.City + " Photos";
                    }
                    //Action Links
                    var actionLinks = '';
                    actionLinks += '<a href="#" onclick="AddToFavorites(\''+source+ '\',\''+residential.MLSNumber+'\', \'photosPanel\');return false;" title="Add this listing to your Favorites">save</a>&nbsp;';
                    actionLinks += '<a href="#" onclick="requestMoreInfo('+index+',\''+source+'\');return false;">request info</a>&nbsp;';
                    actionLinks += '<a href="#" onclick="showResidentialDetails('+index+',\'details\',\''+source+'\');return false;">details</a>&nbsp;';
                    actionLinks += '<a href="#" onclick="printResidential();return false;">print</a>&nbsp;'                                                        
                    if (residential.VirtualTour != "")
                    {
                        actionLinks += '<a href="http://'+residential.VirtualTour+'" target="_blank">tour</a>&nbsp;';
                    }
                    actionLinks += '<a href="#" onclick="showResidentialDetails('+index+',\'map\',\''+source+'\');return false;">map</a>&nbsp;';
                    $get("photosFooter").innerHTML = actionLinks;
                    photoViewer.show(residential.Images);
                }
                break;
        }
    }
    else
    {
        alert("Unable to show listing details.");
    }
                
}

function showMapPanel(showActionPanel)
{
    var actionPanel = $get("mapActionContainer");
    if (actionPanel != null)
    {
        if (showActionPanel)
        {
            actionPanel.style.display = "block";
        }
        else
        {
            actionPanel.style.display = "none";
        }
    }
    showDetailPanel(detailPanels[0]);
}


function mapResidential(residential,source,index)
{
    if (residential.GeoCode.Latitude==0 && residential.GeoCode.Longitude==0)
    {
        if (geoCoder)
        {
            var address = residential.Street1 + ", " + residential.City + ", " + residential.State + ", " + residential.ZipCode;
            
            geoCoder.getLatLng(address,
                                function(point) {
                                    if(!point) {
                                        alert(address + " not found!");
                                    } else {
                                        map.setCenter(point,12);                                                
                                        var infoBox = createResidentialListingInfoBox(residential,index,source);
                                        var marker = createMarker(point,infoBox);
                                        residential.GeoCode.GMarker =  marker;
                                        map.addOverlay(marker);
                                        
                                        marker.openInfoWindowHtml(infoBox);
                                        //Add Geocode to object.
                                        residential.GeoCode.Latitude = point.lat();
                                        residential.GeoCode.Longitude = point.lng();                                                
                                    }
                               }
                               );
        }
        else
        {
            alert('Unable to map address.');
        }
    } else {
        
        if (residential.GeoCode.GMarker == null)
        {
            var point = new GLatLng(residential.GeoCode.Latitude,residential.GeoCode.Longitude);
            var infoBox = createResidentialListingInfoBox(residential,index,source);
            var marker = createMarker(point,infoBox);
            residential.GeoCode.GMarker = marker;
            map.setCenter(point);
            map.addOverlay(marker);                    
            marker.openInfoWindowHtml(infoBox);
        } else if (residential.GeoCode.GMarker.Removed != null) {
        
            map.addOverlay(residential.GeoCode.GMarker);
            var infoBox = createResidentialListingInfoBox(residential,index,source);
            residential.GeoCode.GMarker.openInfoWindowHtml(infoBox);
        }
        
        
        
    }
    
    
    //Set Action Links
    var mapActionContainer = $get("mapActionContainer");
    if (mapActionContainer != null)
    {
        var actionLinks = '<a href="#" onclick="requestMoreInfo('+ index + ',\''+source+'\');return false;">request info</a>';
        actionLinks += '&nbsp;';    
        actionLinks += '<a href="#" onclick="showResidentialDetails('+ index + ',\'details\',\''+source+'\');return false;">details</a>';
        actionLinks += '&nbsp;';
        actionLinks += '<a href="#" onclick="showResidentialDetails('+ index + ',\'print\',\''+source+'\');return false;">print</a>';
        actionLinks += '&nbsp;';
        actionLinks += '<a href="#" onclick="showResidentialDetails('+ index + ',\'photos\',\''+source+'\');return false;">photos</a>';
        actionLinks += '&nbsp;';
        if (residential.VirtualTour != "")
        {
            actionLinks += '<a href="http://'+ residential.VirtualTour + '" target="_blank">tour</a>';
            actionLinks += '&nbsp;';
        }
        mapActionContainer.innerHTML = actionLinks;    
    }
    showMapPanel(true);
    
}


function showCommunityDetails(index,type,source)
{
    var community;
    if (source == "Favorite")
    {
        community = currentResults.Favorites[index].FullDetails;
    }
    else
    {    
        community = currentResults.Communities.Results[index];
        //Log Page View
        TrackPageView(BuildNeighborhoodPageView(community,type));  
    }
    
    switch(type)
    {
        case "map":
            mapCommunity(index,source);
            break;
        case "details":                    
            displayCommunityDetails(community,index);
            showDetailPanel(detailPanels[3]);                                      
            break;
        case "print":
            displayCommunityDetails(community,index);
            printDetails("Community");
            break;
        case "photos":
            showDetailPanel(detailPanels[2]);
            if (photoViewer != null)
            {
                var title = $get("photosPanelTitle")
                if (title != null)
                {
                    title.innerHTML = community.CommunityName + " Photos";
                }
                //Action Links
                var actionLinks = '';
                actionLinks += '<a href="#" onclick="AddToFavorites(\'Community\',\''+community.CommunityId+'\', \'photosPanel\');return false;" title="Add this Community to your Favorites">save</a>&nbsp;';
                actionLinks += '<a href="#" onclick="requestMoreInfo('+index+',\'Community\');return false;">request info</a>&nbsp;';
                actionLinks += '<a href="#" onclick="showCommunityDetails('+index+',\'details\');return false;">details</a>&nbsp;';
                //actionLinks += '<a href="#" onclick="printResidential();return false;">print</a>&nbsp;'                                                                                
                actionLinks += '<a href="#" onclick="showCommunityDetails('+index+',\'map\');return false;">map</a>&nbsp;';
                $get("photosFooter").innerHTML = actionLinks;
                photoViewer.show(community.Photos);
            }
            break;
        case "homes":
            var pageSize = 10;
            availableHomesActive = true;
            showIndicator();
            NetByDesign.IDXPlus.Services.IDXPlusSearch.GetCommunityAvailableHomes(community.CommunityId,pageSize,availableHomesCallback,errorCallback,index);
            break;
    }
}

function showDetailPanel(panelElement)
{
    activeDetailPanel = panelElement;
    for(var i=0;i<detailPanels.length;i++)
    {
        if (panelElement == detailPanels[i])
        {
            detailPanels[i].className = "";                    
        }
        else
        {
            detailPanels[i].className = "hideDetailPanel";
        }

    }
    
}

function mapCommunity(index,source)
{
    var community;
    if (source == "Favorite")
    {
        community = currentResults.Favorites[index].FullDetails;;
    }
    else
    {
        community = currentResults.Communities.Results[index];
    }   
    
    var point = new GLatLng(community.Latitude,community.Longitude);
    showMapPanel(false);
    map.panTo(point);
    if (community.GMarker!=null)
    {
        community.GMarker.openInfoWindowHtml(createCommunityInfoBox(community,index));
    }
}

function availableHomesCallback(availableHomes,communityIndex)
{
    
    currentResults.AvailableHomes = availableHomes;
    
    //Set community info. Skip if this is data page update.
    if (communityIndex != null)
    {
        var community = currentResults.Communities.Results[communityIndex];
        var communityInfo = createCommunityAvailableHomesSummary(community,communityIndex);
        $get("communityInfoBoxContainer").style.display = "block";
        $get("communityInfoBoxContainer").innerHTML = communityInfo;
    }
    
    //Set Available Homes
    var summary = '';
    
    //Set Page Indexes and Result Count
    setPageIndex(availableHomes.PageCount,availableHomes.CurrentPage);
    setPageButtons(availableHomes.CurrentPage,availableHomes.PageCount);
    
    for(var i=0;i < availableHomes.Results.length;i++)
    {
        summary += createResidentialListingSummary(availableHomes.Results[i],i,"AvailableHomes");
    }            
    
    $get('infoBoxContainer').innerHTML = summary;
    $get('infoBoxContainer').scrollTop = 0;
    
    stopIndicator();
    
}

function returnToCommunities()
{
    availableHomesActive = false;
    showResults($get("communitiesTab"));
}

function showIndicator()
{
    if (!indicatorActive)
    {
        $addHandler($get("Body"),"mousemove",moveIndicator);
        Sys.UI.DomElement.toggleCssClass($get("indicatorIcon"),"hidden");
        indicatorActive = true;
    }
}

function stopIndicator()
{
    if (indicatorActive)
    {
        $removeHandler($get("Body"),"mousemove",moveIndicator);
        Sys.UI.DomElement.toggleCssClass($get("indicatorIcon"),"hidden");
        indicatorActive = false;
    }
}

function moveIndicator(e)
{
    var indicator = $get("indicatorIcon");
    var scrollLeft = (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
    var scrollTop = (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
    
    indicator.style.left = e.clientX + scrollLeft - 20 + "px";
    indicator.style.top = e.clientY + scrollTop - 20 + "px";
}


function ShowModalDialogTest1()
{
    if (modalDialog != null)
    {
        var caption = "It Works!!!!";
        modalDialog.show(caption);
    }
}

function InitShowingRequestDialog()
{
    if (modalRequestShowing != null)
    {
        try
        {
            var caption = "Request A Showing or More Information";  
            var mlsNumber = $get("MLSNumber").innerHTML;
            var mlsAddress = $get("Street1").innerHTML + " " + $get("CityStateZip").innerHTML;  
            $get("rsMLSNumber").value = mlsNumber;
            $get("rsMLSAddress").value = mlsAddress;   
            $get("rsListing").innerHTML = "MLS#: " + mlsNumber + ", " + mlsAddress;
            modalRequestShowing.show(caption);
        }
        catch(e)
        {
            alert(e.message);
        }
        
    }                        
}

function requestMoreInfo(index,source)
{
    if (modalRequestShowing != null)
    {
        try
        {                      
            var activeListing = null;
            switch(source)
            {
                case "Residential":
                    activeListing = currentResults.Residential.Results[index];
                    // Log Page View
                    TrackPageView(BuildResidentialPageView(activeListing,source,"request_info"));
                    break;                        
                case "NewHomes":
                    activeListing = currentResults.NewHomes.Results[index];
                    // Log Page View
                    TrackPageView(BuildResidentialPageView(activeListing,source,"request_info"));
                    break;
                case "AvailableHomes":
                    activeListing = currentResults.AvailableHomes.Results[index];
                    // Log Page View
                    TrackPageView(BuildResidentialPageView(activeListing,source,"request_info"));
                    break;
                case "Community":
                    activeListing = currentResults.Communities.Results[index];
                    //Log Page View
                    TrackPageView(BuildNeighborhoodPageView(activeListing,"request_info"));
                    break;
                case "Favorite":
                    activeListing = currentResults.Favorites[index];
                    break;
                default:
                    cancelMoreInfo = true;
                    break;
            }   
            
            if (activeListing != null)
            {
                var caption = "Request A Showing or More Information";  
                var mlsNumber;
                var mlsAddress;
                
                if (source == "Community")
                {
                    
                    mlsNumber = 0;
                    mlsAddress = "New Neighborhood: " + activeListing.CommunityName + " " + activeListing.City;
                    $get("rsListing").innerHTML = mlsAddress;
                    
                }else if (source=="Favorite")
                {
                    if (activeListing.FavoriteType == "Community")
                    {
                        mlsNumber = 0;
                        mlsAddress = "New Neighborhood: " + activeListing.Subdivision + " " + activeListing.City;
                        $get("rsListing").innerHTML = mlsAddress;
                    }
                    else
                    {
                        mlsNumber = activeListing.FavoriteKey;
                        mlsAddress = activeListing.Address + " " + activeListing.City + ", " + activeListing.State + " " + activeListing.ZipCode;
                        $get("rsListing").innerHTML = "MLS#: " + mlsNumber + ", " + mlsAddress;
                    }
                }
                else
                {
                    mlsNumber = activeListing.MLSNumber;
                    mlsNumber = activeListing.MLSNumber;
                    if (activeListing.InternetAddress) {
                        mlsAddress = activeListing.Street1 + " " + activeListing.City + ", " + activeListing.State + " " + activeListing.ZipCode;
                        $get("rsListing").innerHTML = "MLS#: " + mlsNumber + ", " + mlsAddress;
                    }
                    else {
                        $get("rsListing").innerHTML = "MLS#: " + mlsNumber;
                    }
                }
                
                $get("rsMLSNumber").value = mlsNumber;
                $get("rsMLSAddress").value = mlsAddress;   
                
                modalRequestShowing.show(caption); 
            }
        }
        catch(e)
        {
            alert(e.message);
        }
    }
    
}

function SendShowingRequest()
{
    try
    {
        if (validateRequestShowing())
        {
            showingRequest.CustomerName = $get("rsCustomerName").value;
            showingRequest.CustomerEmail = $get("rsEmailAddress").value;
            showingRequest.Street1 = $get("rsStreet1").value;
            showingRequest.City = $get("rsCity").value;
            showingRequest.State = $get("rsState").value;
            showingRequest.ZipCode = $get("rsZipCode").value;
            showingRequest.DayPhone = $get("rsDayTimePhone").value;
            showingRequest.EveningPhone = $get("rsEveningPhone").value;
            showingRequest.ShowingDateTime = $get("rsShowingDateTime").value;
            showingRequest.Comments = $get("rsComments").value;
            
            //Get Listing
            var listing = new Object();
            listing.MLSNumber = $get("rsMLSNumber").value;
            listing.ListingAddress = $get("rsMLSAddress").value;
            showingRequest.Listings = [listing];
            
            //Send Request
            NetByDesign.IDXPlus.Services.IDXPlusSearch.SendShowingRequest(showingRequest,null,errorCallback);
            
            //Close Dialog
            if (modalRequestShowing != null)
            {
                modalRequestShowing.close();
            }
        }
        
    }
    catch(e)
    {
        alert(e.message);
    }
    
}

function printDetails(source)
{
    var printWindow = null;
    switch(source)
    {
        case "Residential":
            printWindow = window.open('/Content/PrintResidential.html','');
            break;
        case "Community":
            printWindow = window.open('/Content/PrintNeighborhood.html','');
            break;   
        default:
            alert('Unable to pring details.');
            break;                 
    }
    
}

function LogIn()
{
    if (modalLogIn != null)
    {
        var caption = "Log In";
        modalLogIn.show(caption);
        ResetLogInForm();
        $get("userNameTextbox").focus();
    }
}


function Register()
{
    if (modalRegistration != null)
    {
        var caption = "Register";
        ClearRegistrationForm();
        modalRegistration.show(caption);
        $get("regFirstName").focus();
    }
}

function UserProfile()
{
    if (modalUserProfile != null)
    {
        var caption = "User Profile/Change Password";
        //ClearRegistrationForm();
        modalUserProfile.show(caption);
        BindUserProfile();
    }
}

function ShowHelpText()
{
    $get('infoBoxContainer').innerHTML = $get("helpText").innerHTML;
    $get('infoBoxContainer').scrollTop = 0; 
}

function TrackPageView(pageView)
{
    if (pageTracker != null)
    {
        pageTracker._trackPageview(pageView);        
    }
    
    //Sys.Debug.trace(pageView);    
}

function BuildNeighborhoodPageView(neighborhood,action)
{
    var pageView = "/NewNeighborhood/" + neighborhood.CommunityName.replace(/\s/g,"_") + "/" 
                   + neighborhood.Ranking + "/" + action;
                   
    return pageView;                   
}

function BuildNeighborhoodPageViewByIndex(index, action)
{
    var neighborhood = currentResults.Communities.Results[index];
    
    return BuildNeighborhoodPageView(neighborhood, action);
}

function BuildResidentialPageView(residential,source,action)
{
    var temp;
    if (source == "Residential")
    {
        temp = "ResaleHomes";
    }
    else
    {
        temp = source;
    }
    
    var pageView = "/" + temp + "/" + residential.ListingBrokerId + "/" +
                   residential.ListingAgentId + "/" + residential.MLSNumber + "/" + action;
                   
    return pageView;                   
}

function ShowInfoItemFeedback(index, message)
{
    var id = '#Feedback_' + index;
    $(id).html(message);
    $(id).show();
}

function ShowFavoritesTransfer(id)
{
    Sys.Debug.trace(id);
    $("#"+id).effect("transfer", {to:"#favoritesTab"},500);
}

// Notify ScriptManager that this is the end of the script.
if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();