$(document).ready(function() {

    /* Search and Search Results */
    /* ====================================================================== */

    var currentSearchTerm = '';
    var defaultSearchValue = $('#header #search input').val();
    var searchDelay = 100;
    var currentSearchRequest;
    var currentSearchTimeout;
    
    var displayDescriptionInSearchResults = true;
    
    $('#header #search input').addClass('empty');
    
    $('#header #search input').bind('focus', function() {
        if($(this).hasClass('empty') && $(this).val() == defaultSearchValue) {
            $(this).removeClass('empty').val('');
        }
        
        if($('#searchResults li').size() > 0) {
            $('#searchResults').slideDown().addClass('active');
        }
    }).bind('blur', function() {
        if($(this).val() == '') {
            $(this).addClass('empty').val(defaultSearchValue);
        }
    });
    
    $('#search input').bind('click', function(event) {
        event.stopPropagation();
    });
    
    $('#search form').bind('submit', function(event) {
        if($('#searchResults li.active').size() > 0) {
            event.preventDefault();
            document.location = $('#searchResults li.active a').attr('href');
            
            return false;
        }
    });

    $('#search input').bind('keyup', function(event) {
    
        var self = this;
        
        if($(this).val().length > 0) {
        
            // Down key
            if(event.keyCode == 40) {
            
                if($('#searchResults li.active').size() == 0) {
                    $('#searchResults li:first-child').addClass('active');
                } else {
                    if($('#searchResults li.active:last-child').size() > 0) {
                        $('#searchResults li.active').removeClass('active')
                    } else {
                        $('#searchResults li.active').removeClass('active').next().addClass('active');
                    }
                }
                event.preventDefault();
                
                return false;
            }
            
            // Up Key
            if(event.keyCode == 38) {
            
                if($('#searchResults li.active').size() == 0) {
                    $('#searchResults li:last-child').addClass('active');
                } else {
                    if($('#searchResults li.active:first-child').size() > 0) {
                        $('#searchResults li.active').removeClass('active')
                    } else {
                        $('#searchResults li.active').removeClass('active').prev().addClass('active');
                    }
                }
                event.preventDefault();
                
                return false;
            }
            
            // Return Key
            if(event.keyCode == 13) {
                if($('#searchResults li.active').size() > 0) {
                    event.preventDefault();
                    document.location = $('#searchResults li.active a').attr('href');
                }
                
                return false;
            }
            
            // Esc Key
            if(event.keyCode == 27) {
                $('#searchResults').hide().removeClass('active');
                $('#searchResults li.active').removeClass('active');
                
                return false;
            }
            
            if(currentSearchRequest) {
                currentSearchRequest.abort();
            }
            
            window.clearTimeout(currentSearchTimeout);
            
            currentSearchTimeout = window.setTimeout(function() {
                
                $(self).addClass('loading');
                
                currentSearchRequest = $.ajax({ 
                    type: "POST",
                    url: $("#search form").attr("action"),
                    data: {'q': $('#search input').val(), 'ajax': true},
                    dataType: 'json',
                    success: function(data) {
                        $('#searchResults ul').empty();
                        $(self).removeClass('loading');
                        
                        $.each(data, function(i,item){
                        
                            var itemHtml = '<a href="'+item.url+'"><span class="title">'+item.title+'</span>';
                            
                            if(displayDescriptionInSearchResults == true && item.description != '') {
                                itemHtml += '<span class="description">'+item.description+'</span>';
                            }
                            
                            itemHtml += '</a>';
                            
                            $("<li/>").attr('class', item.type).html(itemHtml).appendTo('#searchResults ul');
                        });
                        $("<li/>").attr('class', 'more').html('<a href="'+$('#search form').attr('action')+'?q='+$('#search input').val()+'">View more search results...</a>').appendTo('#searchResults ul');
                        
                        if(data.length > 0) {
                            $('#searchResults').fadeIn().addClass('active');
                        } else {
                            $('#searchResults').hide().removeClass('active');
                        }
                    },
                    error: function(XMLHttpRequest, textStatus, errorThrown) {
                        $(self).removeClass('loading');
                        $('#searchResults').hide().removeClass('active');
                    }
                })
            }, searchDelay);
            
        } else {
            $('#searchResults').hide().removeClass('active');
            $('#searchResults li.active').removeClass('active');
        }
    
    });
    
    $('#searchResults li a').live('focus', function() {
        $('#searchResults li.active').removeClass('active')
        $(this).parent().addClass('active');
    });
    
    $('#searchResults li').live('hover', function() {
        $('#searchResults li.active').removeClass('active');
        $(this).addClass('active');
    });
    
    $('#searchResults').hover(function() {}, function() {
        window.setTimeout(function() {
            $('#searchResults li.active').removeClass('active');
        }, 100);
    }).click(function(event) {
        event.stopPropagation();
    });
    
    $('body').click(function() {
        $('#searchResults').hide().removeClass('active').find('li.active').removeClass('active');
    });
    
    
    
    /* Album view */
    /* ====================================================================== */
    
    
    $('#listOfAlbums .item').each(function(index) {
        var title = $(this).find('.title');
        var album = $(this).find('.album');
        
        var titleWidth = title.width();
        titleWidth += parseInt(title.css("padding-left"), 10) + parseInt(title.css("padding-right"), 10);
        
        console.log(titleWidth);
        console.log(album.width());
        
        var marginLeft = ((titleWidth - album.width()) / 2) * -1;
        
        title.css({'margin-left': marginLeft});
    });

});
