var divJS = [];
var _searchParams = [];

function setupSearch()
{
    try
    {
        _searchParams["MRU"] = { SearchType:"MRU", MRU: "" };
	    _searchParams["Fuzzy"] = { SearchType:"FUZZY", PageSize:"", ShowSortBy:"", CountryList:"", ResortID:"", NonSkiers:"", Beginners:"", Intermediates:"", Advanced:"",
	                                SnowBoarding:"", Families:"", ApresSki:"", Altitude:"", Luxury:"", Charm:"", ResortName:"" };
	    _searchParams["Recommended"] = { SearchType:"RECOMMENDED" };          

        $('#tab-result').parent().hide();
        $('#tab-recommended').parent().hide();
        $("#nonskiers, #beginners, #intermediates, #advanced, #snowboarding, #families, #apresski, #altitude, #luxury, #charm").slider({range:true});  
        checkSearchOnLoad();
	}
	catch(ex)
	{
	    raiseError("Error in setupSearch:"+ex);
	}
}

var _recommendedLoaded = false;
function showRecommended()
{
    try
    {
        $('#sidebar').animate({scrollTop:0}); 
        if (_recommendedLoaded)
        {
            navtabs.tabs('select',2);
            if (divJS["recommended"]!="")
                eval(divJS["recommended"]);
            return;
        }
        $('#tab-recommended').html('Recommended');
        $('#recommended').html('<p class="loading"><img class="loading-img" src="/i/images/loaders/ajax-loader.gif" alt="Please Wait..." /> Loading recommended chalets</p>');
        navtabs.tabs('select',2);
        InitSearch("Recommended",$('#recommended'));
    }
    catch(ex)
    {
        alert('An error occured attempting to perform your search.\nPlease try again or contact us by phone for further assistance.');
        raiseError("Error in Recommended search:"+ex.description);
    }
}

function gotoPage(pageNo)
{
    try
    {
        $('#results').html('<p class="loading"><img class="loading-img" src="/i/images/loaders/ajax-loader.gif" alt="Please Wait..." /> Loading resorts</p>');
        $('#txtPageNumber').val(pageNo);
        _searchParams["Fuzzy"].PageNumber = pageNo;
        InitSearch("Fuzzy",$('#results'));
    }
    catch(ex)
    {
        alert('An error occured attempting to perform your search.\nPlease try again or contact us by phone for further assistance.');
        raiseError("Error in gotoPage:"+ex.description);
    }
}

function ResortSearch()
{
    try
    {
        $('#tab-result').html('Results');
        $('#tab-result').parent().show();
        $('#results').html('<p class="loading"><img class="loading-img" src="/i/images/loaders/ajax-loader.gif" alt="Please Wait..." /> Loading resorts</p>');
        navtabs.tabs('select',1);
        _searchParams["Fuzzy"] = { SearchType:"FUZZY", PageSize:"", PageNumber:"1", ShowSortBy:"", CountryList:"", ResortID:$('#ddlResort').val(),
                                    NonSkiers:"", Beginners:"", 
                                    Intermediates:"", Advanced:"",
	                                SnowBoarding:"", Families:"", 
	                                ApresSki:"", Altitude:"", 
	                                Luxury:"", Charm:"", ResortName:"" };
        InitSearch("Fuzzy",$('#results'));
    }
    catch(ex)
    {
        alert('An error occured attempting to perform your search.\nPlease try again or contact us by phone for further assistance.');
        raiseError("Error in Fuzzy search:"+ex.description);
    }
}

function FuzzySearch()
{
    try
    {
        $('#tab-result').html('Results');
        $('#tab-result').parent().show();
        $('#results').html('<p class="loading"><img class="loading-img" src="/i/images/loaders/ajax-loader.gif" alt="Please Wait..." /> Loading resorts</p>');
        navtabs.tabs('select',1);
        var countries = "";
        $('#display-by-countries:visible ul li input[@name="chkcountry"]:checked').each(function(){countries+=$(this).val()+',';});
        countries = (countries != "" ? countries+"-1" : countries);
        _searchParams["Fuzzy"] = { SearchType:"FUZZY", PageSize:"", PageNumber:"1", ShowSortBy:"", CountryList:countries, ResortID:"",
                                    NonSkiers:$('#nonskiers').slider('value',1), Beginners:$('#beginners').slider('value',1), 
                                    Intermediates:$('#intermediates').slider('value',1), Advanced:$('#advanced').slider('value',1),
	                                SnowBoarding:$('#snowboarding').slider('value',1), Families:$('#families').slider('value',1), 
	                                ApresSki:$('#apresski').slider('value',1), Altitude:$('#altitude').slider('value',1), 
	                                Luxury:$('#luxury').slider('value',1), Charm:$('#charm').slider('value',1), ResortName:"" };
        InitSearch("Fuzzy",$('#results'));
    }
    catch(ex)
    {
        alert('An error occured attempting to perform your search.\nPlease try again or contact us by phone for further assistance.');
        raiseError("Error in Fuzzy search:"+ex.description);
    }
}

function InitSearch(searchType, displaydiv)
{
    try
    {
        _searchParams["Fuzzy"].ShowSortBy = sortByVisible;
        $.post("/ResortSearch.aspx", _searchParams[searchType], function(data){PopulateSidebar(searchType, displaydiv,data);});
    }
    catch(ex)
    {
        alert('An error occured attempting to perform your search.\nPlease try again or contact us by phone for further assistance.');
        raiseError("Error in Init search:"+ex.description);
    }    
}

function PopulateSidebar(searchtype, div, data)
{
    try
    {
        var output = "", JS = "";
        var codearray = data.split("<div class='sectionbreaker' />");
        if (codearray.length == 3)
        {
            if (codearray[0].replace(/^\s+|\s+$/g, '') != "")
            {
                output = "Error retrieving search results. Please try again or contact us by phone for further assistance.";
                raiseError("Ajax call returned error:"+codearray[0]);
            }
            else
            {
                output = codearray[1];
                JS = codearray[2];
            }
        }
        else
        {
            output = "Error retrieving search results. Please try again or contact us by phone for further assistance.";
            raiseError("Ajax call failed, result:"+data);
        }
        div.html(output);
        divJS[div.attr('id')] = JS;
        setTimeout(JS,100);
        
        if (searchtype=="Fuzzy")
            applyResortResultsFilterJS(searchtype.toUpperCase());
        if (searchtype=="Recommended")
            _recommendedLoaded = true;
        if (searchtype=="MRU")
        {
            _lastMRU = _searchParams.MRU;
            applyResortResultsFilterJS(searchtype.toUpperCase());
        }
    }
    catch(ex)
    {
        alert('An error occured attempting to show your search results.\nPlease try again or contact us by phone for further assistance.');
        raiseError("Error in Sidebar populate:"+ex.description);
    }
}

function showSearch()
{
    try
    {
        $('#sidebar').animate({scrollTop:0}); 
        updateRecentlyViewed();
    }
    catch(ex)
    {
        raiseError("Error in showSearch:"+ex.description);
    }
}

function showResults()
{
    try
    {
        $('#sidebar').animate({scrollTop:0}); 
        if (divJS["results"]!="")
                eval(divJS["results"]);
    }
    catch(ex)
    {
        raiseError("Error in showResults:"+ex.description);
    }
}

function chaletSearch()
{
    try
    {
        if ($('#ddlIWWeek').val()=="" || $('#ddlIWGroupSize').val()=="")
        {
            alert('Please select at least a week and a group size before submitting your search.');
            return;
        }

        window.location.href='/ChaletExplorer.aspx?SBQS=Y&ResortID='+$('#txtIWResortID').val()+'&WeekID='+$('#ddlIWWeek').val()+"&GroupSize="+$('#ddlIWGroupSize').val();
    }
    catch(ex)
    {
        alert('An error occured attempting to perform your search.\nPlease try again or contact us by phone for further assistance.');
        raiseError("Error in chaletSearch:"+ex.description);
    }
}

function searchSO(resortID,SO_ID_C)
{
    try
    {
        window.location.href='/SpecialOfferExplorer.aspx?SBQS=Y&WeekID=&CountryList=&ResortID='+resortID+'&SOID='+SO_ID_C;
    }
    catch(ex)
    {
        alert('An error occured attempting to perform your search.\nPlease try again or contact us by phone for further assistance.');
        raiseError("Error in searchSO:"+ex.description);
    }
}

/* search on load */
function checkSearchOnLoad()
{
    try
    {
        if ($('#txtForceSOL').val()=='YB')
        {
            alert('Your chosen resort is not currently available.\nPlease try another search.');
            updateRecentlyViewed();
            return;
        }
        var qs = getArgs();
        if (qs.SBQS || $('#txtForceSOL').val()=='Y') //search by query string is true
        {
            //load search params
            try
            {
                $('#tab-result').html('Results');
                $('#tab-result').parent().show();
                $('#results').html('<p class="loading"><img class="loading-img" src="/i/images/loaders/ajax-loader.gif" alt="Please Wait..." /> Loading resorts</p>');
                if (navtabs)
                    navtabs.tabs('select',1);
                _searchParams["Fuzzy"] = { SearchType:"FUZZY", PageSize:"", ShowSortBy:"", CountryList:$('#txtCountryID').val(), ResortID:$('#txtResortID').val(), NonSkiers:"", Beginners:"", Intermediates:"", Advanced:"",
	                                SnowBoarding:"", Families:"", ApresSki:"", Altitude:"", Luxury:"", Charm:"", ResortName:$('#txtResortName').val() };
	            if ($('#txtPageSize').length>0)
	                _searchParams["Fuzzy"].PageSize=$('#txtPageSize').val();
	            if (qs.ForceView)
	                _listView["FUZZY"] = qs.ForceView;
	            if (qs.HideSearch)
	                $('#tab-search').parent().hide();
                InitSearch("Fuzzy",$('#results'));
            }
            catch(ex)
            {
                alert('An error occured attempting to search for your chosen resort.\nPlease try again or contact us by phone for further assistance.');
                raiseError("Error in checkSearchOnLoad:"+ex.description);
                updateRecentlyViewed();
            }
        }
        else
            updateRecentlyViewed();
    }
    catch(ex)
    {
        raiseError("Error in checkSearchOnLoad:"+ex.description);
    }
}

