String.prototype.trim = function(str){
    return this.replace(/^\s+|\s+$/g,"");
}

/*****
 * Search functions - including instant searching support
 */
function search_start() {
    var form = $('form#search-form');

    // Exits if the searching form doesn't exist
    if (form.length == 0) return;

    form.submit(function(){search_do(); return false;});

    // Instant search updates results each 1 second (1000 ms)
    setInterval(search_do, 1000);

    // Event to load next results when scrolling down
    $(window).scroll(function(){
        if ($(window).scrollTop() == $(document).height() - $(window).height()) {
            var term = $('form#search-form').find('input#id_search').val().trim();
            load_results(term, CURRENT_PAGE + 1);
        }
    });

    // View type functions
    form.find('.view-type').find('a').click(function(){
        var cls = $(this).attr('class');

        set_view_type(cls);
    });
}

var DEFAULT_THUMB_URL = ['','','']; // FIXME
function set_view_type(cls) {
    if (cls != 'short') $('.properties-list').removeClass('short');
    if (cls != 'medium') $('.properties-list').removeClass('medium');
    if (cls != 'large') $('.properties-list').removeClass('large');

    $('.properties-list').addClass(cls);
    $('form#search-form').find('#id_view_type').val(cls);

    var list = $('#search-results').find('.properties-list');

    // Formats thumbnail image
    list.find('.photo').each(function(){
        var idx = (cls == 'short') ? 0 : ((cls == 'medium') ? 1 : 2);
        var img_url = $(this).attr('rel').split('|')[idx];

        if (img_url) {
            $(this).css('background-image', 'url('+img_url+')');
        } else {
            $(this).css('background-image', 'url('+DEFAULT_THUMB_URL[idx]+')');
        }
    });
}

var PREVIOUS_SEARCH_TERM = null;
function search_do() {
    var term = $('form#search-form').find('input#id_search').val().trim();

    // Exits if the searching term haven't changed
    if (term == PREVIOUS_SEARCH_TERM) return;

    PREVIOUS_SEARCH_TERM = term;

    load_results(term, true);
}

var CURRENT_PAGE = 1;
function load_results(term, page_or_clear){
    if (typeof page_or_clear == 'number') {
        var page = page_or_clear;
        var clear = false;
    } else {
        var page = 1;
        var clear = page_or_clear;
    }

    var view_type = $('form#search-form').find('input#id_view_type').val();
    var url = '/search/?search='+term+'&view_type='+view_type+'&page='+page;

    $('#status-label').html('Updating Results...');

    $.ajax({
        url: url,
        success: function(resp){
            var list = $('#search-results');

            // Clear current results list
            if (clear) list.empty();

            resp = $(resp.trim());

            // Extracts result count from results
            $('#status-label').html(resp.find('#results-message').val());
            resp.find('#properties-count').remove();

            // Appends results to the list
            if (resp.find('li').length > 0) {
                CURRENT_PAGE = page;

                list.append(resp);

                set_view_type($('form#search-form').find('#id_view_type').val());
            }
        },
        error: function(resp){
            $('#status-label').html('Error loading results.');
        }
    });
}

$(document).ready(function(){
    search_start();

    // Grayscale thumbnail grayscale
    $('.gray-thumbnail').find('a').hover(
		function() {
			if ($(this).find('.girl_info').is(":hidden")) {
				$(this).addClass('open');
				$(this).find('.image').animate({opacity: 1}, 500);
				$(this).find('.slideup').addClass('open');
				$(this).find('.girl_info').slideDown(500);
			}
		},
		function(){
			if ($(this).hasClass('open')) {
			$(this).removeClass('open');
			$(this).find('.image').animate({opacity: 0.1}, 500);
			$(this).find('.slideup').removeClass('open');
			$(this).find('.girl_info').slideUp(500);
			}
		});
});

