﻿/**
 * Inicializuj paginator, akcni tooltipy a progressbary ve vysledcich hledani
 */
function reconstruct() {
    $(".PaginatorNumber").click(function() {
        if($(this).text() != $("#CurrentPage").val()) {
            $("#CurrentPage").val($(this).text());
            getResultsHtml();
        }
    });
    $(".PaginatorNext").click(function() {
        if($("#CurrentPage").val() < $("#TotalPages").val() ) {
            $("#CurrentPage").val(parseInt($("#CurrentPage").val()) + 1);
            getResultsHtml();
        }
    });
    $(".PaginatorPrev").click(function() {
        if(parseInt($("#CurrentPage").val()) > 1 ) {f
            $("#CurrentPage").val(parseInt($("#CurrentPage").val()) - 1);
            getResultsHtml();
        }
    });
    $(".Progressbar").each(function() {
        var percent = parseInt($(this).text());
        $(this).html('<div class="Bar"></div><div class="Percents">&nbsp;' + percent + ' %</div><div class="Reset"></div>');
        $(this).children(".Bar").progressbar({
            value: percent
        });
    });

    showActionTips(); 
}


/**
 * Vloz pripravene hledani do servicy (funkce operatorky)
 */
function assignSearch() {
    var data = $(".Serialize").not(".NoAssign").serialize();
        AssignSearchService.AssignSearch(data,
        function(i) {
        //            alert(i);
        },
        function(i) {
        //            alert("ERROR:" + i.get_message());
        },
        null);
}

/**
* Knihovna pro dekodovani url
*/
function urldecode(str) {
    // http://kevin.vanzonneveld.net
    // +   original by: Philip Peterson
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: AJ
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +      input by: travc
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Lars Fischer
    // %          note 1: info on what encoding functions to use from: http://xkr.us/articles/javascript/encode-compare/
    // *     example 1: urldecode('Kevin+van+Zonneveld%21');
    // *     returns 1: 'Kevin van Zonneveld!'
    // *     example 2: urldecode('http%3A%2F%2Fkevin.vanzonneveld.net%2F');
    // *     returns 2: 'http://kevin.vanzonneveld.net/'
    // *     example 3: urldecode('http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a');
    // *     returns 3: 'http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a'

    var histogram = {}, ret = str.toString(), unicodeStr = '', hexEscStr = '';

    var replacer = function(search, replace, str) {
        var tmp_arr = [];
        tmp_arr = str.split(search);
        return tmp_arr.join(replace);
    };

    // The histogram is identical to the one in urlencode.
    histogram["'"] = '%27';
    histogram['('] = '%28';
    histogram[')'] = '%29';
    histogram['*'] = '%2A';
    histogram['~'] = '%7E';
    histogram['!'] = '%21';
    histogram['%20'] = '+';
    histogram['\u00DC'] = '%DC';
    histogram['\u00FC'] = '%FC';
    histogram['\u00C4'] = '%D4';
    histogram['\u00E4'] = '%E4';
    histogram['\u00D6'] = '%D6';
    histogram['\u00F6'] = '%F6';
    histogram['\u00DF'] = '%DF';
    histogram['\u20AC'] = '%80';
    histogram['\u0081'] = '%81';
    histogram['\u201A'] = '%82';
    histogram['\u0192'] = '%83';
    histogram['\u201E'] = '%84';
    histogram['\u2026'] = '%85';
    histogram['\u2020'] = '%86';
    histogram['\u2021'] = '%87';
    histogram['\u02C6'] = '%88';
    histogram['\u2030'] = '%89';
    histogram['\u0160'] = '%8A';
    histogram['\u2039'] = '%8B';
    histogram['\u0152'] = '%8C';
    histogram['\u008D'] = '%8D';
    histogram['\u017D'] = '%8E';
    histogram['\u008F'] = '%8F';
    histogram['\u0090'] = '%90';
    histogram['\u2018'] = '%91';
    histogram['\u2019'] = '%92';
    histogram['\u201C'] = '%93';
    histogram['\u201D'] = '%94';
    histogram['\u2022'] = '%95';
    histogram['\u2013'] = '%96';
    histogram['\u2014'] = '%97';
    histogram['\u02DC'] = '%98';
    histogram['\u2122'] = '%99';
    histogram['\u0161'] = '%9A';
    histogram['\u203A'] = '%9B';
    histogram['\u0153'] = '%9C';
    histogram['\u009D'] = '%9D';
    histogram['\u017E'] = '%9E';
    histogram['\u0178'] = '%9F';

    for (unicodeStr in histogram) {
        hexEscStr = histogram[unicodeStr]; // Switch order when decoding
        ret = replacer(hexEscStr, unicodeStr, ret); // Custom replace. No regexing
    }

    // End with decodeURIComponent, which most resembles PHP's encoding functions
    ret = decodeURIComponent(ret);

    return ret;
}


/**
* Knihovna pro zkontrolovani zda klic existuje v array (v JS chybi!)
*/
function array_key_exists(key, search) {
    // Checks if the given key or index exists in the array  
    // 
    // version: 810.114
    // discuss at: http://phpjs.org/functions/array_key_exists
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Felix Geisendoerfer (http://www.debuggable.com/felix)
    // *     example 1: array_key_exists('kevin', {'kevin': 'van Zonneveld'});
    // *     returns 1: true
    // input sanitation
    if (!search || (search.constructor !== Array && search.constructor !== Object)) {
        return false;
    }

    return key in search;
}

/**
 * Inicializuj hledani
 */
$(document).ready(function() {
    /**
    * Nacti data z window hashe (za # znakem) a uloz do pole
    */
    if (window.location.hash != "") {
        var data = window.location.hash;
        data = data.substring(1);
        var pairs = urldecode(data).split("&");
        var values = {};
        for (i = 0; i < pairs.length; i++) {
            var pair = pairs[i].split("=");
            if (array_key_exists(pair[0], values)) {
                values[pair[0]] = values[pair[0]] + "," + pair[1];
            } else {
                values[pair[0]] = pair[1];
            }
        }
        /**
         * Nastav podle ulozenych hodnot formular vyhledavani
         */
        for (v in values) {
            $("input[name=" + v + "]").setValue(values[v]);
            if (v == "Standart") {
                $("input[name=Stars]").setValue(values[v]);
                $("input[name=Type]").setValue(values[v]);
            }
        }
        /**
         * Skryj vysledky hledani
         */
        $("#resultHtml").hide();
        /**
         * Ukaz loading
         */
        $("#loading").show();
        /**
         * Zavolej servicu, ukaz vysledky, rekonstruuj paginatory atd.
         */
        SearchResults.GetResultsHtml(data,
        function(i) {
            $("#resultHtml").html(i);
            $("#loading").hide();
            $("#resultHtml").show();
            reconstruct();
        },
        function(i) {
            //            alert("ERROR:" + i.get_message()); 
        },
        null);
    }
});


/**
 * Serializuj vyhledavaci formular a nacti vysledky ze servicy
 */
function getResultsHtml() {
    var data = $(".Serialize").serialize();
    $("#resultHtml").hide();
    $("#loading").show();
    SearchResults.GetResultsHtml(data,
        function(i) {
            $("#resultHtml").html(i);
            $("#loading").hide();
            $("#resultHtml").show();
            applyCurrency();
            reconstruct();
        },
        function(i) {
            //            alert("ERROR:" + i.get_message());
        },
        null);
        window.location.hash = data;
        data = data.substring(1);
    }
    
/**
 * Pri zmene ve formulari nebo kliknuti na tlacitko nacti vysledky hledani
 */
$(document).ready(function() {
    $(".Panels input").change(
        function() {
            getResultsHtml();
        }
    ).click(
        function() {
            getResultsHtml();
        }
    );
    $(".PanelTop input").change(
        function() {
            getResultsHtml();
        }
    );
});
$(document).ready(function() {
    $("#btnSearch").click(
        function() {
            getResultsHtml();
        }
    );
    });

/**
 * Operatorka: po klepnuti na tlacitko zavolej servicu
 */
$(document).ready(function() {
    $(".AssignButton").click(
        function() {
            assignSearch();
        }
    );
    });
    
/**
 * Skryvaci panely formulare
 */
$(document).ready(function() {
    $(".PanelHead").click(function() {
        $(this).next().toggle();
    });
});

/**
* Skryvaci panely formulare
*/
function sliderInit(min, max, ratio, character) {
    var limit = Math.round(500*ratio);
    $("#searchPriceRange").slider("destroy").html("");
    $("#searchPriceRange").slider({
        range: true,
        min: 0,
        max: limit,
        values: [min, max],
        slide: function(event, ui) {
            $("#searchPriceAmount").val(character + ui.values[0] + ' - ' + character + ui.values[1]);
            $("#sPriceMin").val(ui.values[0]);
            $("#sPriceMax").val(ui.values[1]);
        },
        stop: function() {
            getResultsHtml();
        }
    });
    $("#searchPriceAmount").val(character + $("#searchPriceRange").slider("values", 0) + ' - ' + character + $("#searchPriceRange").slider("values", 1));
}


/**
 * Inicializace prepinace men slideru ceny
 */
$(document).ready(function() {
    var currencyMin = $("#sPriceMin").val();
    var currencyMax = $("#sPriceMax").val();
    var currencyRatio = $("#sPriceCurrency option:selected").val();
    var currencyChar = $("#sPriceCurrency option:selected").eq(0).attr("title");
//    if ($("#searchPriceRange").is()) {
//        sliderInit(currencyMin, currencyMax, currencyRatio, currencyChar);
    //    }
    sliderInit(currencyMin, currencyMax, currencyRatio, currencyChar);
});

/**
 * Pri zmene meny prepocitej slider
 */
$(document).ready(function() {	
    $("#sPriceCurrency").change(function() {
        var newRatio = $(this).val();
        var newChar = $("#sPriceCurrency option:selected").eq(0).attr("title");
        var newMin = $("#sPriceMin").val();
        var newMax = $("#sPriceMax").val();
        sliderInit(Math.round(newMin*newRatio), Math.round(newMax*newRatio), newRatio, newChar);
    });
});


/**
 * Zaskrtavatka lokaci
 */
$(document).ready(function() {
    $("#sLocationCenter").change(function() {
        var checked = $(this).is(":checked");
        $("#sLocationOldTown, #sLocationNewTown, #sLocationPrageuCastle, #sLocationLesserTown").each(function() {
            this.checked = checked;
        });
    });
    
    $("#sLocationOldTown, #sLocationNewTown, #sLocationPrageuCastle, #sLocationLesserTown").change(function() {
        if(!$(this).is(":checked")) {
            $("#sLocationCenter").each(function() {
                this.checked = false;
            });
        }
    });

});

/**
 * Inicializace spinneru poctu pokoju
 */
$(document).ready(function() {
    $("#sRoomsSingle, #sRoomsDouble").spinner({
        min: 0,
        max: 20
    });
});


/**
 * Pri zmene spinneru nacti vysledky
 */
$(document).ready(function() {
    $(".ui-spinner-up, .ui-spinner-down").click(function() {
        getResultsHtml();
    });
});

/**
 * Pri kliknuti na paginator nacti vysledky
 */
$(document).ready(function() {
    $(".PaginatorNumber").click(function() {
        //alert("NUMBER " + $(this).text() + ", current = " + $("#CurrentPage").val() + ", total = " + $("#TotalPages").val() );
        if($(this).text() != $("#CurrentPage").val()) {
            $("#CurrentPage").val($(this).text());
            getResultsHtml();
        }
    });
});

/**
* Pri kliknuti na paginator nacti vysledky
*/
$(document).ready(function() {
    $(".PaginatorNext").click(function() {
        //alert("NEXT, current = " + $("#CurrentPage").val() + ", total = " + $("#TotalPages").val() );
        if($("#CurrentPage").val() < $("#TotalPages").val() ) {
            $("#CurrentPage").val(parseInt($("#CurrentPage").val()) + 1);
            getResultsHtml();
        }
    });
});

/**
* Pri kliknuti na paginator nacti vysledky
*/
$(document).ready(function() {
    $(".PaginatorPrev").click(function() {
        //alert("PREV, current = " + $("#CurrentPage").val() + ", total = " + $("#TotalPages").val() );
        if(parseInt($("#CurrentPage").val()) > 1 ) {
            $("#CurrentPage").val(parseInt($("#CurrentPage").val()) - 1);
            getResultsHtml();
        }
    });
});

/**
* Loading je defaultne skryty
*/
$(document).ready(function() {
    $("#loading").hide();
});

/**
* Inicializuj vyskakovaci tooltipy akci
*/
$(document).ready(function() {
    showActionTips();
});


/**
* Inicializace tooltipu
*/
function showActionTips() {
    $(".ResultAction").each(function() {
        $(this).children(".ResultActionImage").each(function() {
            content = $(this).next().html();
            $(this).qtip({
                content: content,
                style: {
                    background: '#fffdcf',
                    color: 'black',
                    name: 'red',
                    tip: 'topMiddle',
                    border: {
                        width: 1,
                        radius: 5,
                        color: '#901d1c'
                    }
                },
                position: {
                    corner: {
                        target: 'bottomMiddle',
                        tooltip: 'topMiddle'
                    }
                }
            });
        });
    });
    $(".ResultActionButton").each(function() {
        content = $(this).next(".ResultActionInfoContainer");
        $(this).qtip({
            content: content,
            style: {
                background: '#fffdcf',
                color: 'black',
                name: 'red',
                tip: 'topMiddle',
                border: {
                    width: 1,
                    radius: 5,
                    color: '#901d1c'
                }
            },
            position: {
                corner: {
                    target: 'bottomMiddle',
                    tooltip: 'topMiddle'
                }
            }
        });
    });

}