﻿/// <reference path="BaseUI.js" />

var SearchUI =
{
    // Top Panel Elements
    TPanel:         null,
    TStateDDL:      null,
    TAreaDDL:       null,
    TMinRentDDL:    null,
    TMaxRentDDL:    null,
    TBedroomDDL:    null,
    TBathroomDDL:   null,
    TSearchTypeBTN: null,
    TSearchBTN:     null,
    TAdvancedPNL:   null,
    
    // Left Panel Elements
    LStateDDL:              null,
    LAreaDDL:               null,
    LMinRentDDL:            null,
    LMaxRentDDL:            null,
    LBedroomDDL:            null,
    LBathroomDDL:           null,
    LSearchBTN:             null,
    LCommunityAmenitiesPNL: null,
    LCommunityAmenitiesBTN: null,
    LModelAmenitiesPNL:     null,
    LModelAmenitiesBTN:     null,
    LCommunityAmenityCBs:   [],
    LModelAmenityCBs:       [],
    
    // Data
    Data:                         null,
    SelectedState:                '',
    SelectedArea:                 '',
    SelectedMinRent:              '',
    SelectedMaxRent:              '',
    SelectedBedrooms:             '',
    SelectedBathrooms:            '',
    SelectedCommunityAmenityList: [],
    SelectedModelAmenityList:     [],
    IsModern:                     false,
    
    // Methods
    Initialize: function()
    {
        //Mask for Main Search
        BaseUI.AddMask(document.getElementById('ctl00_ucMenuUtility_tbSiteSearch'), 'Search', '', '')
        
        SearchUI.TPanel         = document.getElementById('seTPanel')
        SearchUI.TStateDDL      = document.getElementById('seTStateDDL')
        SearchUI.TAreaDDL       = document.getElementById('seTAreaDDL')
        SearchUI.TMinRentDDL    = document.getElementById('seTMinRentDDL')
        SearchUI.TMaxRentDDL    = document.getElementById('seTMaxRentDDL')
        SearchUI.TBedroomDDL    = document.getElementById('seTBedroomDDL')
        SearchUI.TBathroomDDL   = document.getElementById('seTBathroomDDL')
        SearchUI.TAdvancedPNL   = document.getElementById('seTAdvandedPNL')
        SearchUI.TSearchTypeBTN = document.getElementById('seTSearchTypeBTN')
        SearchUI.TSearchBTN     = document.getElementById('seTSearchBTN')
        SearchUI.LStateDDL      = document.getElementById('seLStateDDL')

        SearchUI.TAreaDDL.disabled = true
        SearchUI.TSearchTypeBTN.Advanced = false

        jQuery(SearchUI.TSearchTypeBTN).click (SearchUI.TSearchTypeBTN_Click)
        jQuery(SearchUI.TSearchBTN)    .click (SearchUI.TSearchBTN_Click)
        jQuery(SearchUI.TStateDDL)     .change(SearchUI.TStateDDL_Change)
        jQuery(SearchUI.TAreaDDL)      .change(SearchUI.TAreaDDL_Change)
        jQuery(SearchUI.TMinRentDDL)   .change(SearchUI.TMinRentDDL_Change)
        jQuery(SearchUI.TMaxRentDDL)   .change(SearchUI.TMaxRentDDL_Change)
        jQuery(SearchUI.TBedroomDDL)   .change(SearchUI.TBedroomDDL_Change)
        jQuery(SearchUI.TBathroomDDL)  .change(SearchUI.TBathroomDDL_Change)

        SearchUI.TPopulateFields()
        
        if (SearchUI.LStateDDL != null)
        {
            SearchUI.LAreaDDL               = document.getElementById('seLAreaDDL')
            SearchUI.LMinRentDDL            = document.getElementById('seLMinRentDDL')
            SearchUI.LMaxRentDDL            = document.getElementById('seLMaxRentDDL')
            SearchUI.LBedroomDDL            = document.getElementById('seLBedroomDDL')
            SearchUI.LBathroomDDL           = document.getElementById('seLBathroomDDL')
            SearchUI.LSearchBTN             = document.getElementById('seLSearchBTN')
            SearchUI.LCommunityAmenitiesPNL = document.getElementById('seLCommunityAmenitiesPNL')
            SearchUI.LCommunityAmenitiesBTN = document.getElementById('seLCommunityAmenitiesBTN')
            SearchUI.LModelAmenitiesPNL     = document.getElementById('seLModelAmenitiesPNL')
            SearchUI.LModelAmenitiesBTN     = document.getElementById('seLModelAmenitiesBTN')

            SearchUI.LCommunityAmenitiesBTN.InnerHTML = '(show)'
            SearchUI.LModelAmenitiesBTN    .InnerHTML = '(show)'

            jQuery(SearchUI.LSearchBTN)            .click (SearchUI.LSearchBTN_Click)
            jQuery(SearchUI.LCommunityAmenitiesBTN).click (SearchUI.LCommunityAmenitiesBTN_Click)
            jQuery(SearchUI.LModelAmenitiesBTN)    .click (SearchUI.LModelAmenitiesBTN_Click)
            jQuery(SearchUI.LStateDDL)             .change(SearchUI.LStateDDL_Change)
            jQuery(SearchUI.LAreaDDL)              .change(SearchUI.LAreaDDL_Change)
            jQuery(SearchUI.LMinRentDDL)           .change(SearchUI.LMinRentDDL_Change)
            jQuery(SearchUI.LMaxRentDDL)           .change(SearchUI.LMaxRentDDL_Change)
            jQuery(SearchUI.LBedroomDDL)           .change(SearchUI.LBedroomDDL_Change)
            jQuery(SearchUI.LBathroomDDL)          .change(SearchUI.LBathroomDDL_Change)
            
            SearchUI.LPopulateFields()
            
            if (SearchUI.SelectedCommunityAmenityList.length > 0)
            {
                for (var i = 0; i < SearchUI.SelectedCommunityAmenityList.length; i++)
                {
                    var theIndex = SearchUI.SelectedCommunityAmenityList[i]
                    
                    if (theIndex < SearchUI.LCommunityAmenityCBs.length)
                    {
                        SearchUI.LCommunityAmenityCBs[theIndex].checked = true
                    }
                }
                
                jQuery(SearchUI.LCommunityAmenitiesPNL).show()
                SearchUI.LCommunityAmenitiesBTN.innerHTML = '(hide)'
            }
            
            if (SearchUI.SelectedModelAmenityList.length > 0)
            {
                for (var i = 0; i < SearchUI.SelectedModelAmenityList.length; i++)
                {
                    var theIndex = SearchUI.SelectedModelAmenityList[i]
                    
                    if (theIndex < SearchUI.LModelAmenityCBs.length)
                    {
                        SearchUI.LModelAmenityCBs[theIndex].checked = true
                    }
                }
                
                jQuery(SearchUI.LModelAmenitiesPNL).show()
                SearchUI.LModelAmenitiesPNL.innerHTML = '(hide)'
            }
        }
        
        if (SearchUI.SelectedState != '') 
        {
            BaseUI.SelectOptionByValue(SearchUI.TStateDDL, SearchUI.SelectedState)
            SearchUI.TStateDDL_Change(true)
            
            if (SearchUI.SelectedArea != '') 
            {
                BaseUI.SelectOptionByValue(SearchUI.TAreaDDL, SearchUI.SelectedArea)
                SearchUI.TAreaDDL_Change(true)
            }
        }
        
        if (SearchUI.SelectedMinRent != '')
        {
            BaseUI.SelectOptionByValue(SearchUI.TMinRentDDL, SearchUI.SelectedMinRent)
            SearchUI.TMinRentDDL_Change(true)
        }
        
        if (SearchUI.SelectedMaxRent != '')
        {
            BaseUI.SelectOptionByValue(SearchUI.TMaxRentDDL, SearchUI.SelectedMaxRent)
            SearchUI.TMaxRentDDL_Change(true)
        }
        
        if (SearchUI.SelectedBedrooms != '')
        {
            BaseUI.SelectOptionByValue(SearchUI.TBedroomDDL, SearchUI.SelectedBedrooms)
            SearchUI.TBedroomDDL_Change(true)
        }
        
        if (SearchUI.SelectedBathrooms != '')
        {
            BaseUI.SelectOptionByValue(SearchUI.TBathroomDDL, SearchUI.SelectedBathrooms)
            SearchUI.TBathroomDDL_Change(true)
        }
    },
    TPopulateFields: function()
    {
        BaseUI.PopulateSelect(SearchUI.Data.StateList,    SearchUI.TStateDDL)
        BaseUI.PopulateSelect(SearchUI.Data.MinRentList,  SearchUI.TMinRentDDL)
        BaseUI.PopulateSelect(SearchUI.Data.MaxRentList,  SearchUI.TMaxRentDDL)
        BaseUI.PopulateSelect(SearchUI.Data.BedroomList,  SearchUI.TBedroomDDL)
        BaseUI.PopulateSelect(SearchUI.Data.BathroomList, SearchUI.TBathroomDDL)

        BaseUI.AddOption(SearchUI.TAreaDDL, 'Select Metro Area ...', '')
        SearchUI.TAreaDDL.disabled = true;
    },
    LPopulateFields: function()
    {
        BaseUI.PopulateSelect(SearchUI.Data.StateList,    SearchUI.LStateDDL)
        BaseUI.PopulateSelect(SearchUI.Data.MinRentList,  SearchUI.LMinRentDDL)
        BaseUI.PopulateSelect(SearchUI.Data.MaxRentList,  SearchUI.LMaxRentDDL)
        BaseUI.PopulateSelect(SearchUI.Data.BedroomList,  SearchUI.LBedroomDDL)
        BaseUI.PopulateSelect(SearchUI.Data.BathroomList, SearchUI.LBathroomDDL)

        for (var i = 0; i < SearchUI.Data.CommunityAmenityList.length; i++)
        {
            var theDiv      = document.createElement('div')
            var theP        = document.createElement('p')
            var theCheckBox = document.createElement('input')
            
            theCheckBox.type = 'checkbox'
            theCheckBox.value = SearchUI.Data.CommunityAmenityList[i].V
            
            theP.innerHTML = SearchUI.Data.CommunityAmenityList[i].T
            
            theDiv.appendChild(theCheckBox)
            theDiv.appendChild(theP)
            
            SearchUI.LCommunityAmenitiesPNL.appendChild(theDiv)
            SearchUI.LCommunityAmenityCBs.push(theCheckBox)
        }
        
        for (var i = 0; i < SearchUI.Data.ModelAmenityList.length; i++)
        {
            var theDiv      = document.createElement('div')
            var theP        = document.createElement('p')
            var theCheckBox = document.createElement('input')
            
            theCheckBox.type = 'checkbox'
            theCheckBox.value = SearchUI.Data.ModelAmenityList[i].V
            
            theP.innerHTML = SearchUI.Data.ModelAmenityList[i].T
            
            theDiv.appendChild(theCheckBox)
            theDiv.appendChild(theP)
            
            SearchUI.LModelAmenitiesPNL.appendChild(theDiv)
            SearchUI.LModelAmenityCBs.push(theCheckBox)
        }

        BaseUI.AddOption(SearchUI.LAreaDDL, 'Select Metro Area ...', '')
        SearchUI.LAreaDDL.disabled = true;
    },
    TSearchTypeBTN_Click: function()
    {
        if (SearchUI.TSearchTypeBTN.Advanced)
        {
            jQuery(SearchUI.TAdvancedPNL).hide()
            jQuery(SearchUI.TPanel).removeClass('adv')
            SearchUI.TSearchTypeBTN.innerHTML = 'Advanced Search'
            SearchUI.TSearchTypeBTN.Advanced = false
        }
        else
        {
            jQuery(SearchUI.TAdvancedPNL).show()
            jQuery(SearchUI.TPanel).addClass('adv')
            SearchUI.TSearchTypeBTN.innerHTML = 'Simple Search'
            SearchUI.TSearchTypeBTN.Advanced = true
        }
    },
    TSearchBTN_Click: function()
    {
        SearchUI.PerformSearch(SearchUI.TSearchTypeBTN.Advanced)
    },
    LSearchBTN_Click: function()
    {
        SearchUI.PerformSearch(true, true)
    },
    PerformSearch: function(isAdvanced, isSearchAmenities)
    {
        var theQuery     = []
        var theState     = BaseUI.GetSelectedOption(SearchUI.TStateDDL)
        var theArea      = BaseUI.GetSelectedOption(SearchUI.TAreaDDL)
        var theMinRent   = BaseUI.GetSelectedOption(SearchUI.TMinRentDDL)
        var theMaxRent   = BaseUI.GetSelectedOption(SearchUI.TMaxRentDDL)
        var theBedrooms  = BaseUI.GetSelectedOption(SearchUI.TBedroomDDL)
        var theBathrooms = BaseUI.GetSelectedOption(SearchUI.TBathroomDDL)
        
        if (SearchUI.TStateDDL.selectedIndex != 0) theQuery.push('state=' + theState.Tag.V)
        if (SearchUI.TAreaDDL .selectedIndex != 0) theQuery.push('area='  + encodeURIComponent(theArea.value))

        if (isAdvanced)
        {
            if (SearchUI.TMinRentDDL .selectedIndex != 0) theQuery.push('min='  + theMinRent  .Tag.V)
            if (SearchUI.TMaxRentDDL .selectedIndex != 0) theQuery.push('max='  + theMaxRent  .Tag.V)
            if (SearchUI.TBedroomDDL .selectedIndex != 0) theQuery.push('bed='  + theBedrooms .Tag.V)
            if (SearchUI.TBathroomDDL.selectedIndex != 0) theQuery.push('bath=' + theBathrooms.Tag.V)
        }

        if (isSearchAmenities)
        {
            var theCommunityAmenityList = []
            
            for (var i = 0; i < SearchUI.LCommunityAmenityCBs.length; i++)
            {
                var theCheckBox = SearchUI.LCommunityAmenityCBs[i]
                
                if (theCheckBox.checked)
                {
                    theCommunityAmenityList.push(i)
                }
            }
            
            if (theCommunityAmenityList.length > 0)
            {
                theQuery.push('ca=' + theCommunityAmenityList.join(','))
            }
            
            var theModelAmenityList = []
            
            for (var i = 0; i < SearchUI.LModelAmenityCBs.length; i++)
            {
                var theCheckBox = SearchUI.LModelAmenityCBs[i]
                
                if (theCheckBox.checked)
                {
                    theModelAmenityList.push(i)
                }
            }
            
            if (theModelAmenityList.length > 0)
            {
                theQuery.push('fa=' + theModelAmenityList.join(','))
            }
        }

        if (SearchUI.IsModern)
        {
            theQuery.push('modern=1')
        }

        document.location.href = '/SearchResults.aspx' + (theQuery.length == 0 ? '' : '?' + theQuery.join('&'))
    },
    TStateDDL_Change: function(param)
    {
        var theSelectedOption = BaseUI.GetSelectedOption(SearchUI.TStateDDL)
        
        BaseUI.RemoveAllOptions(SearchUI.TAreaDDL)
        
        if (theSelectedOption.Tag.V == '')
        {
            BaseUI.AddOption(SearchUI.TAreaDDL, 'Select Metro Area ...', '')
            
            SearchUI.TAreaDDL.selectedIndex = 0
            SearchUI.TAreaDDL.disabled      = true
        }
        else
        {
            BaseUI.PopulateSelect(theSelectedOption.Tag.AreaList, SearchUI.TAreaDDL)
            SearchUI.TAreaDDL.disabled = false
        }
        
        if (param)
        {
            if (SearchUI.LStateDDL != null)
            {
                BaseUI.SelectOptionByValue(SearchUI.LStateDDL, theSelectedOption.Tag.V)
                SearchUI.LStateDDL_Change()
            }
        }
    },
    LStateDDL_Change: function(param)
    {
        var theSelectedOption = BaseUI.GetSelectedOption(SearchUI.LStateDDL)
        
        BaseUI.RemoveAllOptions(SearchUI.LAreaDDL)
        
        if ((theSelectedOption.Tag == null) || (theSelectedOption.Tag.V == ''))
        {
            BaseUI.AddOption(SearchUI.LAreaDDL, 'Select Metro Area ...', '')
            
            SearchUI.LAreaDDL.selectedIndex = 0
            SearchUI.LAreaDDL.disabled      = true
        }
        else
        {
            BaseUI.PopulateSelect(theSelectedOption.Tag.AreaList, SearchUI.LAreaDDL)
            SearchUI.LAreaDDL.disabled = false
        }
        
        if (param)
        {
            if (SearchUI.TStateDDL != null)
            {
                BaseUI.SelectOptionByValue(SearchUI.TStateDDL, theSelectedOption.Tag.V)
                SearchUI.TStateDDL_Change()
            }
        }
    },
    TAreaDDL_Change: function(param)
    {
        SearchUI.ReciprocalDDL_Change(param, SearchUI.TAreaDDL, SearchUI.LAreaDDL)
    },
    LAreaDDL_Change: function(param)
    {
        SearchUI.ReciprocalDDL_Change(param, SearchUI.LAreaDDL, SearchUI.TAreaDDL)
    },
    TMinRentDDL_Change: function(param)
    {
        SearchUI.ReciprocalDDL_Change(param, SearchUI.TMinRentDDL, SearchUI.LMinRentDDL)
    },
    LMinRentDDL_Change: function(param)
    {
        SearchUI.ReciprocalDDL_Change(param, SearchUI.LMinRentDDL, SearchUI.TMinRentDDL)
    },
    TMaxRentDDL_Change: function(param)
    {
        SearchUI.ReciprocalDDL_Change(param, SearchUI.TMaxRentDDL, SearchUI.LMaxRentDDL)
    },
    LMaxRentDDL_Change: function(param)
    {
        SearchUI.ReciprocalDDL_Change(param, SearchUI.LMaxRentDDL, SearchUI.TMaxRentDDL)
    },
    TBedroomDDL_Change: function(param)
    {
        SearchUI.ReciprocalDDL_Change(param, SearchUI.TBedroomDDL, SearchUI.LBedroomDDL)
    },
    LBedroomDDL_Change: function(param)
    {
        SearchUI.ReciprocalDDL_Change(param, SearchUI.LBedroomDDL, SearchUI.TBedroomDDL)
    },
    TBathroomDDL_Change: function(param)
    {
        SearchUI.ReciprocalDDL_Change(param, SearchUI.TBathroomDDL, SearchUI.LBathroomDDL)
    },
    LBathroomDDL_Change: function(param)
    {
        SearchUI.ReciprocalDDL_Change(param, SearchUI.LBathroomDDL, SearchUI.TBathroomDDL)
    },
    ReciprocalDDL_Change: function(param, ddl1, ddl2)
    {
        var theSelectedOption = BaseUI.GetSelectedOption(ddl1)
        
        if (param)
        {
            if (ddl2 != null)
            {
                if (typeof theSelectedOption.Tag == 'string')
                {
                    BaseUI.SelectOptionByValue(ddl2, theSelectedOption.value)
                }
                else
                {
                    BaseUI.SelectOptionByValue(ddl2, theSelectedOption.Tag.V)
                }
            }
        }
    },
    LCommunityAmenitiesBTN_Click: function()
    {
        if (SearchUI.LCommunityAmenitiesBTN.innerHTML == '(show)')
        {
            SearchUI.LCommunityAmenitiesBTN.innerHTML = '(hide)'
            jQuery(SearchUI.LCommunityAmenitiesPNL).show()
        }
        else
        {
            SearchUI.LCommunityAmenitiesBTN.innerHTML = '(show)'
            jQuery(SearchUI.LCommunityAmenitiesPNL).hide()
        }
    },
    LModelAmenitiesBTN_Click: function()
    {
        if (SearchUI.LModelAmenitiesBTN.innerHTML == '(show)')
        {
            SearchUI.LModelAmenitiesBTN.innerHTML = '(hide)'
            jQuery(SearchUI.LModelAmenitiesPNL).show()
        }
        else
        {
            SearchUI.LModelAmenitiesBTN.innerHTML = '(show)'
            jQuery(SearchUI.LModelAmenitiesPNL).hide()
        }
    }
}

jQuery(document).ready(SearchUI.Initialize)
