

var defaultQueryString = null;//"";
var query = null;
var searchQuery = null;
var searchResult = null;

$(document).ready(function(){
    //init history
    
    $.history.init(HistoryCallback);
});

//history and gui
var lastHash;
function HistoryCallback(hash)
{   
    //firefox fix to ignore second parasite request
    if (hash == lastHash || hash == unescape(lastHash) || unescape(hash) == unescape(lastHash))
    {
        return;
    }
    lastHash = hash;

    if (hash == null || hash == "")
    {
        document.cookie = "wizsearch=" + location.href + ";domain=kur-atlas.de;path=/";
        if (location.hash.indexOf("merkzettel=1") < 0)
        {
            document.cookie = "wizsearchonly=" + location.href + ";domain=kur-atlas.de;path=/";
        }
        //init query to the default search
        query = $.query.parse(defaultQueryString);
        ShowSearch();
        searchQuery = query.copy();
        SearchOffers(true);
    }
    else
    {
        document.cookie = "wizsearch=" + location.href + ";domain=kur-atlas.de;path=/";
        if (location.hash.indexOf("merkzettel=1") < 0)
        {
            document.cookie = "wizsearchonly=" + location.href + ";domain=kur-atlas.de;path=/";
        }
        ShowSearch();
        if (searchResult == null)
        {
            searchQuery = $.query.parse(hash);  
            SearchOffers(true);
        }
        else
        {
            searchResult = null;
        }
    }
}

function ShowSearch()
{
    if ($("#searchResultContainer").css("display") == "none")
    {
        $("#searchResultContainer").show(200);
    }
}

// search
var searchContentSuccessMarker = "SEARCH_SUCCESS";
var searchContentNothingMarker = "SEARCH_NOTHING";

function SearchOffers(history)
{
    if (searchQuery.get("handler") != "pagination")
    {
        searchQuery.remove("pageindex");
    }    
    
    $.cookie('date_to', getCalendarValue("datepickerTo"));
    $.cookie('date_from', getCalendarValue("datepickerFrom"));
    
    blockWithLoader();
    
    $.ajax({
        url: "LoadControl.aspx",
        type: "GET",
        data: "m=control&control=hotelsearchcontrol&" + searchQuery.toString() + "&" + Math.random(),
        success: history == true ? SearchCallBackHistory : SearchCallBack,
        error: function(oXMLHttpRequest, sError, oException){fError(oXMLHttpRequest, sError, oException);}
    });
}

function fError(oXMLHttpRequest, sError, oException)
{
    unBlockWithLoader();
    
    $("#searchResultContainer").show();
    
    //remove previous nothing-found block
    $("#nothingFound").remove();
    $("#searchResultContainer").html(
        "<div id='nothingFound'>Ein Fehler ist aufgetreten!</div>" + 
        $("#searchResultContainer").html());
    
    //update wizard with old querystring if nothing found
    UpdateWizardGui(query==null?searchQuery:query);
}
function SearchCallBackHistory(data, textStatus)
{
    SearchCallBack(data, textStatus, true);
}

function SearchCallBack(data, textStatus, history) 
{
    if (new String(data).indexOf(searchContentSuccessMarker) >= 0) //if hotels found
    {
        unBlockWithLoader();
        
      searchResult = data;
      query = searchQuery.copy();
      UpdateWizardGui(query);
      UpdateSearchResult();
      if (history != true) //click
      {
          $.history.load(searchQuery.toString());
          document.cookie = "wizsearch=" + location.href + ";domain=kur-atlas.de;path=/";
          
        if (location.hash.indexOf("merkzettel=1") < 0)
        {
            document.cookie = "wizsearchonly=" + location.href + ";domain=kur-atlas.de;path=/";
        }
      }
      else
      {
          searchResult = null;
      }
    }
    else
    {    
        //remove params
        var bFound = true;
        
        //0. freetext
        if (!CutOutSimpleParam("freetext"))
        {//1.Zimmerkategorie (als Attribut von Extras)
            var params_other_zimmerkategorie = ["30", "32", "36", "39"];
            if (!CutOutParams("pnlOther", params_other_zimmerkategorie))
            {//2 Medizinische Betreuung (als Attribut von Extras)
                var params_other_med_betreuung = ["99", "102", "103", "104"];
                if (!CutOutParams("pnlOther", params_other_med_betreuung))
                {//3 Sterne
                    if (!CutOutSliderParams("stars", '1,5'))
                    {//4 Preis
                        if (!CutOutSliderParams("preis", '0,2000'))
                        {//5 Dauer
                            if (!CutOutSimpleParam("pnlDauer"))
                            {//6 Hotelausstattung 
                                var params_other_hotelausstattung = ["1", "2", "5"];
                                if (!CutOutParams("pnlOther", params_other_hotelausstattung))
                                {//7 Verpflegung (als Attribut von Extras)
                                    var params_other_verpflegung = ["157", "154", "155", "156", "77", "78", "83", "84", "80"];
                                    if (!CutOutParams("pnlOther", params_other_verpflegung))
                                    {//8 Lage (als Attribut von Extras)
                                        var params_other_lage = ["106", "107", "108", "109", "110", "115"];
                                        if (!CutOutParams("pnlOther", params_other_lage))
                                        {//9 Sonstige Extras
                                            var params_other_sonstige = ["18", "25", "29", "90", "89", "87", "96", "97"];
                                            if (!CutOutParams("pnlOther", params_other_sonstige))
                                            {//10 Region
                                                var params_ziele_region = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "21"];
                                                if (!CutOutParams("pnlZiel", params_ziele_region))
                                                {//11 Land
                                                    var params_ziele_land = ["r1007", "r1009", "r1014", "r1016", "r1019", "r1020", "r1022", "r1025", "r1028", "r1004", "r1010", "r1012", "r1023", "c3", "c2", "c1"];
                                                    if (!CutOutParams("pnlZiel", params_ziele_land))
                                                    {//12 Anwendungen
                                                        if (!CutOutSimpleParam("pnlAnwendungen"))
                                                        {
                                                            bFound = false;
                                                        }//12 Anwendungen
                                                    }//11 Land
                                                }//10 Region
                                            }//9 Sonstige Extras
                                        }//8 Lage (als Attribut von Extras)
                                    }//7 Verpflegung (als Attribut von Extras)
                                }//6 Hotelausstattung 
                            }//5 Dauer
                        }//4 Preis
                    }//3 Sterne
                }//2 Medizinische Betreuung (als Attribut von Extras)
            }//1.Zimmerkategorie (als Attribut von Extras)
        }//0. freetext
        

        if (bFound)
        {
            //UpdateWizardGui(query==null?searchQuery:query);
            DisplayNothingFound(data);
            
            SearchOffers(false);
        }
        else
        {
            DisplayNothingFound(data);
        
            unBlockWithLoader();
            //update wizard with old querystring if nothing found
            $.history.load(searchQuery.toString());
        }
    }
}

function CutOutSimpleParam(param_name)
{
    var bFound = false;
    
    var param = searchQuery.get(param_name);
    if ((param != null) && (param != ''))
    {
        searchQuery.remove(param_name);
        bFound = true;
    }
    
    return bFound;
}

function CutOutSliderParams(param_name, default_value)
{
    var bFound = false;
    
    var param = searchQuery.get(param_name);
    if ((param != null) && (param != '') && (param != default_value))
    {
        //searchQuery.set(param_name, default_value);
        searchQuery.remove(param_name);        
        bFound = true;
        
        var arrParam = default_value.split(',');
        if (param_name == "preis")
        {
            bCallClientOnChangesliderPreis = false;
            $('#sliderPreis').slider("moveTo", arrParam[arrParam.length - 1], 1);
            $('#sliderPreis').slider("moveTo", arrParam[0], 0);
            bCallClientOnChangesliderPreis = true;
        }
        else if (param_name == "stars")
        {
            bCallClientOnChangesliderStars = false;
            $('#sliderStars').slider("moveTo", arrParam[arrParam.length - 1], 1);
            $('#sliderStars').slider("moveTo", arrParam[0], 0);
            bCallClientOnChangesliderStars = true;   
        }
    }
    
    return bFound;
}

function CutOutParams(param_name, params_to_remove)
{
    var bFound = false;

    var params = searchQuery.get(param_name);
        
    if ((params != null) && (params != ''))
    {
        var tmp_params = "," + params + ",";
        
        for (var i = 0; i < params_to_remove.length; i ++)
        {
            if (tmp_params.indexOf("," + params_to_remove[i] + ",") >= 0)
            {
                tmp_params = tmp_params.replace("," + params_to_remove[i] + ",", ",");
                bFound = true;
            }
        }
        
        if (tmp_params.charAt(tmp_params.length - 1) == ',')
        {
            tmp_params = tmp_params.substr(0, tmp_params.length - 1);
        }
        if (tmp_params.charAt(0) == ',')
        {
            tmp_params = tmp_params.substr(1, tmp_params.length - 1);
        }
        
        searchQuery.set(param_name, tmp_params);
    }
    
    return bFound;
}

var sHtml_alternatives = null;
function DisplayNothingFound(data)
{/*
  if (data.indexOf(searchContentNothingMarker) >= 0)
  {
    $("#searchResultContainer").show();
    
    //remove prvious nothing-found block
    $("#nothingFound").remove();
    $("#searchResultContainer").html(data + $("#searchResultContainer").html());
  }*/


    if (sHtml_alternatives == null)
    {
        sHtml_alternatives = $("#divAlternatives").html();
    }
    
    $("#divAlternatives").html(sHtml_alternatives);
    
    $("#divAlternatives").show();
    
    var sHtml = '';
    var param_dauer = searchQuery.get("pnlDauer");
    if ((param_dauer != null) && (param_dauer != ''))
    {
        //get non-calendar value
        var sSelValuesWoCalendar = "";
        var arrValues = param_dauer.split(",");
        for (var i = 0; i < arrValues.length; i++)
        {
            var arrParts = arrValues[i].split("/");
            if ((arrParts.length == 1) && (arrValues[i].length > 0))
            {//if it is not a calendar value
                if (sSelValuesWoCalendar.length > 0)
                {
                    sSelValuesWoCalendar += ",";
                }
                sSelValuesWoCalendar += arrValues[i];
            }
        }
        sHtml += "<tr><td>Dauer:</td><td>" + sSelValuesWoCalendar.replace(",", " - ") + " Tage</td></tr>";
        
        if (arrValues.length >= 2) {
            var sFrom = arrValues[arrValues.length - 2];
            var sTo = arrValues[arrValues.length - 1];

            if (sFrom != "") {
                sHtml += "<tr><td>Früheste Hinreise:</td><td>" + getUserFriendlyDate(sFrom) + "</td></tr>";
            }
            if (sTo != "") {
                sHtml += "<tr><td>Späteste Rückreise:</td><td>" + getUserFriendlyDate(sTo) + "</td></tr>";
            }
        }
    }
    
    var param_stars = searchQuery.get("stars");
    if ((param_stars != null) && (param_stars != ''))
    {
        sHtml += "<tr><td>Sterne:</td><td>" + param_stars.replace(",", " - ") + " Sterne</td></tr>";
    }
    
    var param_preis = searchQuery.get("preis");
    if ((param_preis != null) && (param_preis != ''))
    {
        sHtml += "<tr><td>Preis:</td><td>" + param_preis.replace(",", " - ") + " &euro;</td></tr>";
    }
    
    var param_anwend = searchQuery.get("pnlAnwendungen");
    if ((param_anwend != null) && (param_anwend != ''))
    {
        sHtml += "<tr><td>Anwendungen:</td><td>";
        
        var arrAnwend = param_anwend.split(',');
        for (var i = 0; i < arrAnwend.length; i ++)
        {
            sHtml += $("label[@for=ch_anw_" + arrAnwend[i] + "]").text() + (i == arrAnwend.length - 1 ? "": ", ");
        }
        
        sHtml += "</td></tr>";
    }
    
    var param_other = searchQuery.get("pnlOther");
    if ((param_other != null) && (param_other != ''))
    {
        sHtml += "<tr><td>Sonstiges:</td><td>";
        
        var arrOther = param_other.split(',');
        for (var i = 0; i < arrOther.length; i ++)
        {
            sHtml += $("label[@for=ch_ot_" + arrOther[i] + "]").text() + (i == arrOther.length - 1 ? "": ", ");
        }
        
        sHtml += "</td></tr>";
    }
    
    var param_ziel = searchQuery.get("pnlZiel");
    if ((param_ziel != null) && (param_ziel != ''))
    {
        sHtml += "<tr><td>Reiseziele:</td><td>";
        
        var arrZiel = param_ziel.split(',');
        for (var i = 0; i < arrZiel.length; i ++)
        {
            sHtml += $("label[@for=ch_loc_" + arrZiel[i] + "]").text() + (i == arrZiel.length - 1 ? "": ", ");
        }
        
        sHtml += "</td></tr>";
    }
    
    if ((sHtml != null) && (sHtml != ''))
    {
        $("#tblKriterien").show();
        $("#tblKriterien").append(sHtml);
    }
    else
    {
        $("#tblKriterien").hide();
    }
}

//Search results
function UpdateSearchResult()
{
  $("#searchResultContainer").show();
  $("#searchResultContainer").html(searchResult);
}

function fPage(i, elem)
{
    if (elem.className.indexOf('current_page') >= 0)
    {
        return false;
    }
    
    jQuery.each(searchQuery.keys, function(key, val) {
      searchQuery.remove(key);
    });
    
    var nPos = elem.href.indexOf("?");
    if (nPos >= 0)
    {
        var sQuery = elem.href.substr(nPos + 1, elem.href.length - nPos - 1)
        var queryPage = $.query.parse(sQuery);
        
        jQuery.each(queryPage.keys, function(key, val) {
          searchQuery.set(key, val);
        });
    }
    
    searchQuery.remove("m");
    searchQuery.remove("control");
    searchQuery.set("handler", "pagination");
    searchQuery.set("pageindex", i - 1);
    SearchOffers(false);
    
    return false;
}
function fOrder(sText, sValue)
{
    searchQuery.set("handler", "orderby");
    searchQuery.set("orderby", sValue);
    
    SearchOffers(false);
    //$.history.load(searchQuery.toString());
}
function fMehrAngebote()
{
    searchQuery.remove("pageindex");
    searchQuery.set("handler", "mehrangebote");
    searchQuery.set("mehr", "1");
    SearchOffers(false);
}
function fWenigerAngebote()
{
    searchQuery.remove("pageindex");
    searchQuery.set("handler", "wenigerangebote");
    searchQuery.remove("mehr");
    SearchOffers(false);
}
