function nddSelect(itm, key) {
    var p = jQuery(itm).parents('div:first').children('p');
    p.children('label').html(jQuery(itm).html());
    p.children('input').val(key);
    if(jQuery("#searchResultsPage").length>0)
        albSearch();
}

var prevsearch = {
    "q": "",
    "f": "",
    "p": "all",
    "o": 0
};
function Count(list) {
    return list.ResultsCount > 0 ? list.ResultsCount : 0;
}
function MaxHits() {
    return 1 * jQuery("#hdMaxHits").val();
}
function Page(list) {
    return Math.ceil(list.Offset / MaxHits()) + ((list.ResultsCount > 0) ? 1 : 0);
}
function Pages(list) {
    return (MaxHits() < 0 && list.ResultsCount > 0) ? 1 : Math.ceil(list.ResultsCount / MaxHits());
}

function TrimString(value) {
    return value.replace(/^\s+|\s+$/g, '');
}
function Next() {
    prevsearch.o += MaxHits();
    albSearch();
}
function Prev() {
    prevsearch.o -= MaxHits();
    albSearch();
}

function SearchFirstItem(list) {
    return list.Offset + ((list.ResultsCount > 0) ? 1 : 0);
}
function SearchLastItem(list) {
    return list.Data.length + list.Offset;
}
function SearchPrev(list) {
    return DecodeURL(jQuery('#hdPrev').val()).replace(/!Action!/, (list.Offset <= 0) ? '' : "onclick='Prev();'");
}
function SearchNext(list) {
    return DecodeURL(jQuery('#hdNext').val()).replace(/!Action!/, (list.Data.length + list.Offset < list.ResultsCount) ? "onclick='Next();'" : '');
}
function Abstract(data) {
    var res = data.Abstract;
    if (res.length <= 0)
        res = data.Text;
    if (res.length > AbstractLength()) 
        res = res.substring(0, AbstractLength()) + "...";
    return res;
}
var abLength = 0;
function AbstractLength() {
    if (abLength <= 0) {
        abLength = 1 * jQuery("#hdAbLength").val();
        if (abLength <= 0)
            abLength = 10;
    }
    return abLength;
}

function Criteria(list) {
    var res = "";
    if (prevsearch.q != "" && prevsearch.f != "")
        res = DecodeURL(jQuery("#hdLetterWord").val())
            .replace(/!FirstLetter!/g, prevsearch.f)
            .replace(/!Word!/g, prevsearch.q);
    else if (prevsearch.f != "")
        res = DecodeURL(jQuery("#hdLetter").val())
            .replace(/!FirstLetter!/g, prevsearch.f);
    else
        res = DecodeURL(jQuery("#hdWord").val())
            .replace(/!Word!/g, prevsearch.q);
    return res;
}
function buildSearchCriteria(itm) {
    var profile = jQuery(".searchChangeProfile").val();
    if (profile == "") {
        profile = ReadCookie('profile');
    }
    if (itm) {
        jQuery("#searchCharacters .searchLetterSelected").removeClass("searchLetterSelected");
        if (itm.value != prevsearch.f)
            jQuery(itm).addClass("searchLetterSelected");
        prevsearch = {
            "q": jQuery('#textSearch').val(),
            "f": (itm.value == prevsearch.f) ? "" : itm.value,
            "p": profile,
            "o": 0
        };
    }
    else {
        prevsearch = {
            "q": jQuery('#textSearch').val(),
            "f": prevsearch.f,
            "p": profile,
            "o": (prevsearch.q == jQuery('#textSearch').val()) ? prevsearch.o : 0
        }
    }
}

function SearchOnEnter(event) {
    if (event.keyCode == 13) 
        fntSearch();
}
function SearchPageOnEnter(event) {
    if (event.keyCode == 13)
        albSearch();
}
function albClear()
{
    prevsearch.f = '';
    jQuery("#searchCharacters .searchLetterSelected").removeClass("searchLetterSelected");
    albSearch();
}

function fntClear()
{
    jQuery("#searchCharacters .searchLetterSelected").removeClass("searchLetterSelected");
    prevsearch.f = '';
    buildSearchCriteria();
    if(prevsearch.q != '')
        fntSearch();
}
function fntSearch(itm) {
    buildSearchCriteria(itm);
    jQuery("#hdSearch")[0].value = '{"Query":"' + prevsearch.q + '","FirstLetter":"' + prevsearch.f + '","Profile":"' + prevsearch.p + '"}';
    document.forms["form1"].submit();
}

function teaserSearch(query) {
    prevsearch = {
        "q": query,
        "f": "",
        "p": ReadCookie('profile'),
        "o": 0
    };
    jQuery("#hdSearch")[0].value = '{"Query":"' + prevsearch.q + '","FirstLetter":"' + prevsearch.f + '","Profile":"' + prevsearch.p + '"}';
    document.forms["form1"].submit();
}

function DecodeURL(s) {
    return unescape(s).replace(/\+/g, ' ');
}
function albSearch(itm) {
    buildSearchCriteria(itm);
    jQuery.getJSON('/search.ashx?d=' + (new Date()).getTime(), prevsearch,
                        function(data) {
                            var list = eval(data);
                            jQuery("#searchResultsPage").html('');
                            if (list.Data.length == 0) {
                                var paging = '';
                                var items = '';
                                var header = DecodeURL(jQuery("#hdHeader").val())
                                    .replace(/!SearchFirstItem!/g, SearchFirstItem(list))
                                    .replace(/!SearchLastItem!/g, SearchLastItem(list))
                                    .replace(/!Count!/g, Count(list))
                                    .replace(/!SearchPrev!/g, SearchPrev(list))
                                    .replace(/!Page!/g, Page(list))
                                    .replace(/!Pages!/g, Pages(list))
                                    .replace(/!SearchNext!/g, SearchNext(list))
                                    .replace(/!Criteria!/g, Criteria(list))
                                    .replace(/!Paging!/g, paging)
                                    .replace(/!Items!/g, items);
                                jQuery("#searchResultsPage").append(header + DecodeURL(jQuery("#hdNoResults").val()));
                            }
                            else {
                                var item = DecodeURL(jQuery("#hdItem").val());
                                var paging = '';
                                if (Pages(list) > 1)
                                    paging = DecodeURL(jQuery("#hdPaging").val())
                                    .replace(/!SearchFirstItem!/g, SearchFirstItem(list))
                                    .replace(/!SearchLastItem!/g, SearchLastItem(list))
                                    .replace(/!Count!/g, Count(list))
                                    .replace(/!SearchPrev!/g, SearchPrev(list))
                                    .replace(/!Page!/g, Page(list))
                                    .replace(/!Pages!/g, Pages(list))
                                    .replace(/!SearchNext!/g, SearchNext(list))
                                    .replace(/!Criteria!/g, Criteria(list));

                                var header = DecodeURL(jQuery("#hdHeader").val())
                                    .replace(/!SearchFirstItem!/g, SearchFirstItem(list))
                                    .replace(/!SearchLastItem!/g, SearchLastItem(list))
                                    .replace(/!Count!/g, Count(list))
                                    .replace(/!SearchPrev!/g, SearchPrev(list))
                                    .replace(/!Page!/g, Page(list))
                                    .replace(/!Pages!/g, Pages(list))
                                    .replace(/!SearchNext!/g, SearchNext(list))
                                    .replace(/!Criteria!/g, Criteria(list))
                                    .replace(/!Paging!/g, paging);
                                var items = "";
                                for (var i = 0; i < list.Data.length; i++) {
                                    var data = list.Data[i].Properties;
                                    var abs = Abstract(data);
                                    if (prevsearch.q != "") {
                                        abs = abs
                                            .replace(new RegExp(" " + prevsearch.q, "gi"), ' <span class="searchBlue">' + prevsearch.q + '</span>')
                                            .replace(new RegExp("$" + prevsearch.q, "gi"), '<span class="searchBlue">' + prevsearch.q + '</span>');
                                    }
                                    items += item
                                        .replace(/!ItemClass!/, (i + 1 == list.Data.length) ? 'class="lastChild"' : '')
                                        .replace(/!Title!/g, data.Title)
                                        .replace(/!scUri!/g, data.scPath + '.aspx')
                                        .replace(/!Abstract!/g, abs);
                                }
                                header = header.replace(/!Items!/g, items);
                                jQuery("#searchResultsPage").append(header);
                            }
                        });

}
jQuery(document).ready(function() {
    prevsearch = {
        "q": jQuery('#textSearch').val(),
        "f": (jQuery('#hdFirstLetter').length > 0) ? DecodeURL(jQuery('#hdFirstLetter').val()) : "",
        "p": ReadCookie('profile'),
        "o": 0
    };
    jQuery("#searchResultsPage").ajaxStart(function() {
        jQuery(this).html(DecodeURL(jQuery("#hdLoading").val()));
    });
    //    jQuery("#dvLoading").ajaxStop(function() {
    //        jQuery(this).hide();<img src="images/ajax-load-b.gif" />
    //    });
    jQuery("#textSearch").keyup(function(e) {
        var s = TrimString(this.value)
        if (s != "" && prevsearch.q != s) {
            if (jQuery('#hdFirstLetter').length > 0)
                SearchPageOnEnter(e);
            else
                SearchOnEnter(e);
        }
    })
})