

var AsyncOperation = {
    SearchCriteria:1,
    MatchCount:2,
    BrowseLocations:3
};

var selectedLocation = null;
var objSearchHelper = { };
var objBrowseLocationHelper = { };
var displayZeroResultsAlert = false;
var autocompleteArray = new Array();
for(var i = 0; i < autocompleteData.length; i++)
    autocompleteArray.push(autocompleteData[i][0]);

$(document).ready(function() {
    // hide the locations <UL>
    if($('#newLocation ul').children().length == 0)
        $('#newLocation').hide();
    
    // initialize the auto completer control
    $("#locationTxt").autocompleteArray(
        autocompleteArray,
		{
            //extraParams:{ op:AsyncOperation.SearchCriteria },
            delay:10,
            selectFirst:true,
            maxItemsToShow:15,
            //minChars:3,
            //matchSubset:1,
            //cacheLength:10,
            onItemSelect:SelectItem,
            onFindValue:FindValue,
            autoFill:true
		}
	);
	
	// initialize the price ranges slider control 
	var whichRanges = $('#rdbForRent').is(":checked") ? priceRangesForRent : priceRangesForSale;
	var minSelected = 0;
	var maxSelected = whichRanges.length - 1;
	
	for(var i = 0; i < whichRanges.length; i++) {
	    if(whichRanges[i].value == 0) {
	        minSelected = i;
	    }
	    if(whichRanges[i].value == 50000001) {
	        maxSelected = i;
	    }
	}
	
    $("#slider-range").slider({
        animate: true,
        range: true,
        min: 0,
        max: whichRanges.length - 1,
        values: [minSelected, maxSelected]
    });

    // bind the handler that will open or close the lifestyles and amenities option panels
    $(document).click(function(event) {
        $('#lifeStyles,#Amenities').blur();
        var found = false;
        var element = event.target;
        while (element) {
            if (element.id == 'closeLifeStyle' || element.id == 'arrowCloseLifestyle' || element.id == 'aApplyLifestyles') {
                found = false;
                break;
            }
            else if ((element.id == 'lifeStyles' && $('#lifeStyleContent').is(':visible') == false) || element.id == 'lifeStyleContent') {
                found = true;
                break;
            }
            else found = false;

            element = element.parentNode;
        }
        if (found)
        {
            $('#lifeStyleContent').fadeIn('fast');
            toggleLifestyleIframe(true);
        }
        else
        {
            $('#lifeStyleContent').fadeOut('fast');
            toggleLifestyleIframe(false);
        }
        element = event.target;

        while (element) {
            if (element.id == 'closeAmenities' || element.id == 'arrowCloseAmenities' || element.id == 'aApplyAmenities') {
                found = false;
                break;
            }
            else if ((element.id == 'Amenities' && $('#AmenitiesContent').is(':visible') == false ) || element.id == 'AmenitiesContent') {
                found = true;                
                break;
            }
            else found = false;

            element = element.parentNode;
        }
        if (found)
        {            
            $('#AmenitiesContent').fadeIn('fast');
            toggleAmenitiesIframe(true);
        }
        else
        {
            $('#AmenitiesContent').fadeOut('fast');
            toggleAmenitiesIframe(false);   
        }
        
        element = event.target;

        while (element) {
            if (element.id == 'closeCurrency') {
                found = false;
                break;
            }
            else if (element.id == 'aCurrency' || element.id == 'divCurrency') {
                found = true;
                break;
            }
            else found = false;

            element = element.parentNode;
        }
        if (found) {
            $('#divCurrency').fadeIn('fast');
        }
        else
            $('#divCurrency').fadeOut('fast');
            
        element = event.target;
        
        while (element) {
            if (element.id == 'closeBrowseLocations' || element.id == 'arrowCloseLocations' || element.id == 'aApplyLocations' || element.id == 'aResetLocations') {
                found = false;
                break;
            }
            else if ((element.id == 'aBrowseLocations' && $('#BrowseLocationsPopup').is(':visible') == false ) || element.id == 'BrowseLocationsPopup' || (element.id == 'customTooltip' && $('#BrowseLocationsPopup').is(':visible') == true) || (element.className && element.className.indexOf('browseLocationLink') >= 0)) {
                found = true;
                break;
            }
            else found = false;
            
            element = element.parentNode;
        }
        if (found) {
            $('#BrowseLocationsPopup').fadeIn('fast');
            toggleBrowseLocationsIframe(true);
        }
        else {
            if($('#BrowseLocationsPopup').is(':visible') == true)
                hideTooltip();
                
            $('#BrowseLocationsPopup').fadeOut('fast', function() {  $('#BrowseLocationsPopup .popupContent').html('Loading'); } );
            toggleBrowseLocationsIframe(false);
        }
    });
    
    // Bind a handler to the Browse Locations link which will open the overlay panel and do a JSON request to the server to get the list of countries
    $('#aBrowseLocations').click(function(event) {
        objBrowseLocationHelper.clearParameters();
        objBrowseLocationHelper.fetchData();
    });
    
    // Bind a handler to the currency dropdown listbox that will reload the page maintaining the options the user has selected
    $('#_ctl0_cphBody_SearchCriteria_ddlCurrencyConversion_ddlCurrency').change(function(event) {
        objSearchHelper.ChangeCurrency('_ctl0_cphBody_SearchCriteria_ddlCurrencyConversion_ddlCurrency');
    });
    
    // Bind a handler to the RESET buttons in the Browse Locations, Lifestyles and Amenities popup panels
    $('#aResetLocations').click(function(event) {
        objSearchHelper.RemoveLocation();
        $('#BrowseLocationsPopup .popupContent').html(objBrowseLocationHelper.msgLoading);
    });
    $('#aResetLifestyles').click(function(event) {
        $('#lifeStyleContent :checkbox:checked').attr('checked', false);
        
        objSearchHelper.UpdateCount();
    });
    $('#aResetAmenities').click(function(event) {
        $('#AmenitiesContent :checkbox:checked').attr('checked', false);
        
        objSearchHelper.UpdateCount();
    });
    
    // Bind a handler for the radio buttons that will update the maximum price in the slider based on rentals or for sale
    $('#rdbForSale, #rdbForRent').change(function (event) {
        // set the max range and selected values based on the "For Rent" or "For Sale" options selections
        var whichRange = event.target.id == 'rdbForRent' ? priceRangesForRent : priceRangesForSale;
        
        var rangeMax = whichRange.length - 1;
        
        $('#slider-range').slider('option', 'max', rangeMax);
        $('#slider-range').slider("values", 0, 0);
        $('#slider-range').slider("values", 1, rangeMax);
    });
    // workaround for IE bug not triggering the change event when clicking the radio button label
    $('#rdbForSale, #rdbForRent').click(function (event) {
        $(event.target).change();
    });

    // Instantiate the SearchHelper object
    var locationID = 'newLocation';
    var lifestylesID = '_ctl0_cphBody_SearchCriteria_cblLifestyles';
    var typeForSaleID = 'rdbForSale';
    var typeForRentID = 'rdbForRent';
    var amenitiesID = '_ctl0_cphBody_SearchCriteria_cblAmenities';
    var priceID = 'slider-range';
    var propertyTypeID = '_ctl0_cphBody_SearchCriteria_ddlPropertyType';
    var propertyStyleID = '_ctl0_cphBody_SearchCriteria_ddlPropertyStyle';
    var bedsID = '_ctl0_cphBody_SearchCriteria_ddlBeds';
    var bathsID = '_ctl0_cphBody_SearchCriteria_ddlBaths';
    var propertyCountID = 'spanPropertyCount';
    var viewResultsID = 'ViewPropertiesURL';

    objSearchHelper = new SearchHelper(locationID, lifestylesID, typeForSaleID, typeForRentID, amenitiesID, priceID, propertyTypeID, propertyStyleID, bedsID, bathsID, propertyCountID, viewResultsID);
    objSearchHelper.LifestylesDimVals = cblLifestyles_DimVals; // bind the dynamic Lifesyles DimVal lookup table to the search helper object
    objSearchHelper.AmenitiesDimVals = cblAmenities_DimVals; // bind the dynamic Amenities DimVal lookup table to the search helper object
    objSearchHelper.ForSaleDimVal = '149';
    objSearchHelper.ForRentDimVal = '239';
    objSearchHelper.DefaultPropertySearchUrl = 'N=12';
    objSearchHelper.AsyncHandlerOperation = AsyncOperation.MatchCount;
    objSearchHelper.CurrencyExchangeRate = 0;
    objSearchHelper.PriceRangeForSale = priceRangesForSale;
    objSearchHelper.PriceRangeForRent = priceRangesForRent;
    objSearchHelper.TextNoMatches = 'There are no properties in the system that match the selected criteria.\nPlease further refine your search and click on this link again.';
    objSearchHelper.TextNoMinimum = 'No Minimum';
    objSearchHelper.TextNoMaximum = 'No Maximum';
    objSearchHelper.TextPleaseSelect = 'Please select one of the options presented as you type in.';
    objSearchHelper.TextLoading = 'Loading';
    objSearchHelper.PropertyIdSearchBox = $('#_ctl0_cphBody_SearchCriteria_m_tbPropertyID');
    objSearchHelper.divCurrentCriteriaPanel = $('#pnlCurrentCriteriaPanel');
    objSearchHelper.tdLocation = $('#_ctl0_cphBody_SearchCriteria_currentCriteria_tdLocation');
    objSearchHelper.tdLifestyle = $('#_ctl0_cphBody_SearchCriteria_currentCriteria_tdLifestyle');
    objSearchHelper.tdAmenities = $('#_ctl0_cphBody_SearchCriteria_currentCriteria_tdAmenities');
    objSearchHelper.divPrice = $('#_ctl0_cphBody_SearchCriteria_currentCriteria_divPrice');
    objSearchHelper.divType = $('#_ctl0_cphBody_SearchCriteria_currentCriteria_divType');
    objSearchHelper.divStyle = $('#_ctl0_cphBody_SearchCriteria_currentCriteria_divStyle');
    objSearchHelper.tdPriceTypeAndStyle = $('#_ctl0_cphBody_SearchCriteria_currentCriteria_tdPriceTypeAndStyle');
    objSearchHelper.divBeds = $('#_ctl0_cphBody_SearchCriteria_currentCriteria_divBeds');
    objSearchHelper.divBaths = $('#_ctl0_cphBody_SearchCriteria_currentCriteria_divBaths');
    objSearchHelper.tdBedsBaths = $('#_ctl0_cphBody_SearchCriteria_currentCriteria_tdBedsBaths');
    objSearchHelper.DisableCriteriaPanel = true;
	
	// update the slider control captions with the proper price ranges
	objSearchHelper.PriceSlide(null, { values: [minSelected, maxSelected] });

    objSearchHelper.UpdateCount();
    
    // Bind a handler to the click event of the "View Properties" button
    $('#ViewPropertiesURL').click(function(event){
        // First check if a property ID or MLS ID has been entered which will override the other search options, if not then execute the search based on the selected values.
        var id = document.getElementById('_ctl0_cphBody_SearchCriteria_m_tbPropertyID').value;
        if(trim(id) != '')
            document.getElementById('_ctl0_cphBody_SearchCriteria_m_btPropertyIdSearchGo').click();
        else {
            // the 3 lines below are the fix for bug#3874
            $("#locationTxt")[0].autocompleter.findValue();
            if(selectedLocation != null)
	            objSearchHelper.AddNewLocation(GetItemFromAutocompleteData(selectedLocation.selectValue));

            objSearchHelper.ExecuteSearch('_ctl0_cphBody_SearchCriteria_ddlCurrencyConversion_ddlCurrency');
        }
        
        event.preventDefault();
    });
    
    // Bind a handler to the slide event of the slider control
    $('#slider-range').bind('slide', objSearchHelper.PriceSlide);
    
    if(displayZeroResultsAlert)
        alert(objSearchHelper.TextNoMatches);
        
    objBrowseLocationHelper = new BrowseLocationHelper();
    objBrowseLocationHelper.AsyncHandlerOperation = AsyncOperation.BrowseLocations;
    objBrowseLocationHelper.msgLoading = 'Loading';
    objBrowseLocationHelper.msgEntireWorld = 'Entire World';
    objBrowseLocationHelper.msgAddCountry = 'Add Country';
    objBrowseLocationHelper.msgAddState = 'Add State';
    objBrowseLocationHelper.msgAddCity = 'Add City';
    objBrowseLocationHelper.msgAddNeighborhood = 'Add Neighborhood';
    objBrowseLocationHelper.msgAddRegion = 'Add Region';
    objBrowseLocationHelper.msgBrowseStatesRegions = 'Browse States/Regions';
    objBrowseLocationHelper.msgBrowseStates = 'Browse States';
    objBrowseLocationHelper.msgBrowseCitiesRegions = 'Browse Cities/Regions';
    objBrowseLocationHelper.msgBrowseCities = 'Browse Cities';
    objBrowseLocationHelper.msgBrowseNeighborhoods = 'Browse Neighborhoods';
    objBrowseLocationHelper.msgBrowseByStates = 'Browse by States';
    objBrowseLocationHelper.msgBrowseByCities = 'Browse by Cities';
    objBrowseLocationHelper.msgBrowseByRegions = 'Browse by Regions';
    objBrowseLocationHelper.msgShowAllCities = 'Show All Cities...';
    objBrowseLocationHelper.msgShowAllStates = 'Show All States...';
    objBrowseLocationHelper.msgShowAllRegions = 'Show All Regions...';
    
});

function SelectItem(li)
{
    hideTooltip();
    
    var selectValue = li.selectValue;
    
    objSearchHelper.AddNewLocation(GetItemFromAutocompleteData(selectValue));
    
    selectedLocation = null;
}

function FindValue(li) {
	if(!li || li.selectValue == '' || trim(li.selectValue) == '') {
		selectedLocation = null;
	}
	else {
		var item = GetItemFromAutocompleteData(li.selectValue);
		selectedLocation = { selectValue: item[0], extra: item[1] };
    }
}

function GetItemFromAutocompleteData(text) {
    for (var i = 0; i < autocompleteData.length; i++)
        if (autocompleteData[i][0] == text)
            return autocompleteData[i];
}

// showMoreTypesStyles
function showMoreTypesStyles(){
	if(opened == false){
		$("#showMoreTypes").hide("normal");
		$("#hideBox").hide();
		$("#showBox").show();
		opened = true;
	}
	else{
		$("#showMoreTypes").show("normal");
		$("#hideBox").show();
		$("#showBox").hide();
		opened = false;
	}
}

function locationTxt_KeyUp(event) {
    var keyCode = document.all ? window.event.keyCode : event.which;
    if (keyCode == 13) {
        return false;
    } else {
        if (locationSearchTimer != null)
            clearTimeout(locationSearchTimer);
    
        locationSearchTimer = setTimeout(function() {
            var oAutocomplete = $("#locationTxt")[0].autocompleter;
            oAutocomplete.findValue();

            if (selectedLocation != null || $("#locationTxt").val().length <= 3)
                hideTooltip();
            else
                showTooltip({ srcElement:document.getElementById('locationTxt') }, objSearchHelper.TextPleaseSelect, 6, -21);
        }, 400);

        return true;
    }
}

function txtPropertyID_KeyUp(event) {

}

