﻿var divJS = [];
var _searchParams = [];

function setupSearch()
{
    try
    {
        _searchParams["MRU"] = { SearchType:"MRU", MRU: "" };
	    _searchParams["Fuzzy"] = { SearchType:"FUZZY", PageNumber:"1", WeekID: "",
                                        ResortID: "", GroupSize: "",
                                        RatingID: "", MinBudget: "",
                                        MaxBudget: "", Flights: "", WebsiteID: "", SO_ID: "", 
                                        SoleUse: "", CountryList: "", ChaletName: "", EnquiryID: "",
                                        FacilityFilter: ""};
	    _searchParams["Recommended"] = { SearchType:"RECOMMENDED", PageNumber:"1", WeekID: "",
                                        ResortID: "", GroupSize: "",
                                        RatingID: "", MinBudget: "",
                                        MaxBudget: "", Flights: "", WebsiteID: "23", SO_ID: "", 
                                        SoleUse: "", CountryList: "", ChaletName: "", FacilityFilter: ""};          
    	$('#tab-result').parent().hide();
	    checkSearchOnLoad();
        var minval, maxval;
        minval = ($('#txtMinBudget').attr('value') == "" ? 300 : $('#txtMinBudget').attr('value'));
        maxval = ($('#txtMaxBudget').attr('value') == "" ? 1000 : $('#txtMaxBudget').attr('value'));
	    $("#pricerange").slider({range:true,min:300,max:1000,handles:[{start:minval},{start:maxval}],change:function(){updatePriceRange();},slide:function(){updatePriceRange();}});
	    updatePriceRange();
	}
	catch(ex)
	{
	    raiseError("Error in setupSearch:"+ex);
	}
}

function updatePriceRange()
{
    try
    {
        var val1 = $('#pricerange').slider('value',0);
        var val2 = $('#pricerange').slider('value',1);
        var minval = (val1 < val2 ? val1 : val2);
        var maxval = (val1 > val2 ? val1 : val2);
        var label = "";
        if (minval == 300)
            if (maxval == 1000)
                label = "Any price";
            else
                label = "Up to £" + maxval + " per person";
        else
            if (maxval == 1000)
                label = "From £" + minval + " per person";
            else
                label = "Between £" + minval + " and £" + maxval + " per person";
        $('#lblPriceRange').text(label);
        $('#txtMinBudget').attr('value',minval);
        $('#txtMaxBudget').attr('value',maxval);
    }
	catch(ex)
	{
	    raiseError("Error in updatePriceRange:"+ex);
	}
}

function toggleSortBy(href,sortby)
{
    try
    {
        var $href = $(href);
        var hasAsc = $href.hasClass('ascending');
        _searchParams["Fuzzy"].SortBy = ($href.hasClass('ascending') ? '2' : '1') + sortby;
        //$('#results').html('<p class="loading"><img class="loading-img" src="/i/images/loaders/ajax-loader.gif" alt="Please Wait..." /> Loading chalets</p>');
        //InitSearch("FUZZY",$('#results'));
        gotoPage(1);
    }
    catch(ex)
    {
         raiseError("Error in toggleSortBy:"+ex.description);
    }
}

var filterstrings = [], filtercounts = [];
function clearFilterStrings()
{
    filterstrings = [];
    filtercounts = [];
}

function addFilterString(filter,count)
{
    filterstrings[filterstrings.length]=filter;
    filtercounts[filtercounts.length]=count;
}

function toggleFacilityFilter(chkbox)
{
    try
    {
        var count = 0;
        if (filterstrings.length > 0)
        {
            var filter="";
            $('.facility-filter:checked').each(function(){filter+=$(this).val();});
            for(var i = 0; i < filterstrings.length; i++)
            {
                var allfound = true;
                if (filter.length > 0)
                {
                    for(var j = 0; j < filter.length; j++)
                    {
                        if (filterstrings[i].indexOf(filter.charAt(j))==-1)
                        {
                            allfound=false;
                            break;
                        }
                    }
                }
                if (allfound)
                    count += filtercounts[i];
            }
        }
        $('#filtercount').html("<span class='total'>" + count + "</span> chalet" + (count == 1 ? "" : "s") + " found");
        (count==0?$('#btnFilter').attr("disabled","disabled"):$('#btnFilter').removeAttr("disabled"));
        $('div.show-matches').removeClass("matches-found no-matches");
        (count==0?$('div.show-matches').addClass("no-matches"):$('div.show-matches').addClass("matches-found"));
    }
    catch(ex)
    {
         raiseError("Error in toggleFacilityFilter:"+ex.description);
    }  
}

function facilityFilter()
{
    try
    {
        var facilityfilter="";
        $('.facility-filter:checked').each(function(){facilityfilter+=$(this).val();});
        _searchParams["Fuzzy"].FacilityFilter = facilityfilter;     
        gotoPage(1);
    }
    catch(ex)
    {
         raiseError("Error in facilityFilter:"+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 chalets</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 FuzzySearch()
{
    try
    {
        if ($('#txtEnquiryID').val()=="" && ($('#ddlWeek').val()=="" || $('#ddlGroupSize').val()==""))
        {
            alert('Please select at least a week and a group size before submitting your search.');
            return;
        }
        $('#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 chalets</p>');
        var countries = "";
        $('#display-by-countries:visible input[@name="chkcountry"]:checked').each(function(){countries+=$(this).val()+',';});
        countries = (countries != "" ? countries+"-1" : countries);
        if (navtabs) 
            navtabs.tabs('select',1);
        _searchParams["Fuzzy"] = { SearchType:"FUZZY", PageNumber:"1", WeekID: $('#ddlWeek').val(),
                                        ResortID: $('#display-by-resort:visible #ddlResort').val(), GroupSize: $('#ddlGroupSize').val(),
                                        RatingID: ($('#ratingLuxury:checked').val()=="Y"?"3":""), MinBudget: $('#txtMinBudget').val(),
                                        MaxBudget: $('#txtMaxBudget').val(), Flights: $('#flights:checked').val(), WebsiteID: "-1", SO_ID: "-1", 
                                        SoleUse: $('#soleuse:checked').val(), CountryList: countries, ChaletName: "", EnquiryID: $('#txtEnquiryID').val(),
                                        FacilityFilter: ""};
        $('#txtEnquiryID').val("");
        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 ExactSearch(chaletname,weekcode)
{
    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 chalets</p>');
        if (navtabs)
            navtabs.tabs('select',1);
        _searchParams["Fuzzy"] = { SearchType:"FUZZY", PageNumber:"1", WeekID: weekcode,
                                        ResortID: "", GroupSize: "",
                                        RatingID: "", MinBudget: "",
                                        MaxBudget: "", Flights: "", WebsiteID: "", SO_ID: "", 
                                        SoleUse: "", CountryList: "", ChaletName: chaletname, EnquiryID: "",
                                        FacilityFilter: ""};
        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 ExactSearch:"+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;
        }

        $('#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 chalets</p>');
        if (navtabs)
            navtabs.tabs('select',1);
        _searchParams["Fuzzy"] = { SearchType:"FUZZY", PageNumber:"1", WeekID: $('#ddlIWWeek').val(),
                                        ResortID: $('#txtIWResortID').val(), GroupSize: $('#ddlIWGroupSize').val(),
                                        RatingID: "", MinBudget: "",
                                        MaxBudget: "", Flights:"", WebsiteID: "-1", SO_ID: "-1", 
                                        SoleUse: $('#IWsoleuse:checked').val(), CountryList: "", ChaletName: "", 
                                        EnquiryID: "", FacilityFilter: ""};
        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 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);
    }
}

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);
    }
}

var _recommendedLoaded = false;
function showRecommended()
{
    try
    {
        $('#sidebar').animate({scrollTop:0}); 
        if (_recommendedLoaded)
        {
            if (navtabs)
                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>');
        if (navtabs)
            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 InitSearch(searchType, displaydiv)
{
    try
    {
        _searchParams["Fuzzy"].ShowSortBy = sortByVisible;
        $.post("/ChaletSearch.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")
            applyResultsFilterJS();
        if (searchtype=="Recommended")
            _recommendedLoaded = true;
        if (searchtype=="MRU")
            _lastMRU = _searchParams.MRU;
    }
    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);
    }
}

/* search on load */
function checkSearchOnLoad()
{
    try
    {
        var qs = getArgs();
        if (qs.SBQS || $('#txtForceSOL').val()=='Y') //search by query string is true
        {
            if ($('#txtChaletName').val() != "")
                ExactSearch($('#txtChaletName').val(),$('#ddlWeek').val());
            else
            {
                //load search params
                try 
                {
                    if (qs.WeekID)
                    {
                        $('#ddlWeek').val(qs.WeekID);
                        if ($('#ddlWeek').val() != qs.WeekID)
                        {
                            alert('This week is no longer available.\nPlease try another search.');
                            updateRecentlyViewed();
                            return;
                        }
                    }
                } catch(ex) {}
                
                try
                {
                    if (qs.ResortID)
                    {
                        $('#ddlResort').val(qs.ResortID); 
                        if ($('#ddlResort').val() != qs.ResortID)
                        {
                            alert('This resort is not currently available.\nPlease try another search.');
                            updateRecentlyViewed();
                            return;
                        }
                    }
                } catch(ex) {}
                try { if (qs.GroupSize) $('#ddlGroupSize').val(qs.GroupSize); } catch(ex) {}
                try { if (qs.Luxury) $('#ratingLuxury').attr("checked","checked"); } catch(ex) {}
                try { if (qs.MinBudget) $('#txtMinBudget').val(qs.MinBudget); } catch(ex) {}
                try { if (qs.MaxBudget) $('#txtMaxBudget').val(qs.MaxBudget); } catch(ex) {}
                try { if (qs.EnquiryID) $('#txtEnquiryID').val(qs.EnquiryID); } catch(ex) {}
                try { if (qs.SoleUse) $('#soleuse').attr("checked","checked"); } catch(ex) {}
                try { if (qs.Flights) $('#flights').attr("checked","checked"); } catch(ex) {}
                try
                {
                    if (qs.CountryList)
                    {
                        var countries = qs.CountryList.split(",");
                        if (countries.length > 0)
                        {   
                            $('#allCountries').attr("checked","");
                            $('input[@name="chkcountry"]').attr("checked","");
                            for(var i = 0; i < countries.length; i++)
                                $('input[@name="chkcountry"][@value="'+countries[i]+'"]').attr("checked","checked");
                            if ($('input[@name="chkcountry"]:checked').count == 0)
                            {
                                alert('The chosen country is not currently available.\nPlease try another search.');
                                updateRecentlyViewed();
                                return;
                            }
                        }
                        if (resortsearchtabs)
                            resortsearchtabs.tabs('select',1);
                    }
                    
                }
                catch(ex)
                {  }
                //execute search
                setTimeout('FuzzySearch();',100);
            }
        }
        else
            updateRecentlyViewed();
    }
    catch(ex)
    {
        raiseError("Error in checkSearchOnLoad:"+ex.description);
    }
}

//for external pages to call in
function SubmitCSearch()
{
    try
    {
        if ($('#ddlWeek').val()=="" || $('#ddlGroupSize').val()=="")
        {
            alert('Please select at least a week and a group size before submitting your search.');
            return;
        }
        var sURL="/ChaletExplorer.aspx?SBQS=Y";
        if ($('#ddlWeek').val() != "")
            sURL += "&WeekID="+$('#ddlWeek').val();
        if ($('#display-by-resort:visible #ddlResort').val() != "")
            sURL += "&ResortID="+$('#ddlResort').val();
        if ($('#ddlGroupSize').val() != "")
            sURL += "&GroupSize="+$('#ddlGroupSize').val();
        if ($('#ratingLuxury:checked').val() == "Y")
            sURL += "&Luxury=Y";
        sURL += "&MinBudget=" + $('#txtMinBudget').val();
        sURL += "&MaxBudget=" + $('#txtMaxBudget').val();
        if ($('#soleuse:checked').val() == "Y")
            sURL += "&SoleUse=Y";
        if ($('#flights:checked').val() == "Y")
            sURL += "&Flights=Y";
        var countries="";
        $('#display-by-countries:visible input[@name="chkcountry"]:checked').each(function(){countries+=$(this).val()+',';});
        if (countries != "")
            sURL += "&CountryList="+countries;
        window.location = sURL;
    }
	catch(ex)
	{
	    raiseError(ex.description);
	}
}
