// Event handler to impose character limit on review text
/// Run many
function initBRForm() {
    
    $('.write-review textarea').bind( 'change keyup blur mouseup', function( event ) {
        var limit = 5000;
        $('.write-review .textarea .caption span.count').text( $(this).val().length )
        if ( $(this).val().length >= limit ) {
            $(this).addClass( 'too-long' );
            $('.write-review .submit input').attr('disabled','disabled');
            $('.write-review .textarea .caption span.too-long').show();
        } else {
            $(this).removeClass( 'too-long' );
            $('.write-review .submit input').attr('disabled',false);
            $('.write-review .textarea .caption span.too-long').hide();
        }
    }).change();

    /// Run once
    $('.write-review .review-ratings .one-rating').click( function() {
        var total = 0;
        var count = 0;
        var ratings = $('div.star-rating', $(this).parents('.write-review'));
        $('.review-ratings .total-score span', $(this).parents('.write-review'))
            .text( Math.floor(($(ratings).filter('.star-rating-on').length) / ($(ratings).length) * 100) + '%' );
    }).click();
}

jQuery( function($) {

    /// Run many
    var $paginatorClick = function( event ) {
        event.preventDefault();
        
        if ( $(this).hasClass('prev') )
            var nv = $('div.paginator a[class*=on]').text()*1-1;
        else if ( $(this).hasClass('next') )
            var nv = $('div.paginator a[class*=on]').text()*1+1;
        else
            var nv = $(this).text();
        
        $('div.filters #FilterPage').val( nv ).parents('form').submit();
    };

    /// Run once
    $('div.body:not(:has(td.my-reviews)) .paginator a').click( $paginatorClick );
    
    /// Run once
    $('.write-review .close').click(function(){
        $('.write-review').slideUp('fast', function(){
            $('.write-review form').each(function(){ this.reset(); });
            $('.review-index .write-link').show();
        });
    });

    /// Run many
    $('div.review-index:has(div.one-item)').find('.one-item').add('div.review-index .paginator').wrapAll( $('<div />').addClass('all-items'));
    //$('div.review-index:not(:has(div.one-item))').append( $('<div />').addClass('all-items') );

    /// Run once
    $('.review-index .write-link').click( function() {
        $('.review-index .write-link').hide();
        
        $('.write-review').slideDown('slow', function(){
            initBRForm();
        });
    });

    /// Run once
    $('.review-index .write-review form').submit( function(event) {
        event.preventDefault();
        
        $('.write-review .loading').addClass('show');
        $(this).slideUp('fast');
        $('div.error-message',this).remove();
        
        
        $.post( $(this).attr('action'), $(this).serialize(), function(json) {
            $('.write-review .loading').removeClass('show');
            
            if ( json.success ) {
                $('.write-review').slideUp('slow');
                $('.review-index .filters form').each( function() {
                    $('select.review-sort', this).val('chron');
                }).submit();
            } else {
                $('.write-review form').slideDown('fast');
                $.each( json, function(field,message) {
                    $('.write-review #'+field).after( $('<div />').addClass('error-message').html( message ) );
                });
            }
            
        }, 'json' );

    });

    /** Filter panel logic */
    /// Run once
    $('.review-index .filters-toggle').click( function() {
        var cb = function(i,item) {
            $(this).height( $(this).height() > $('ul',this).height() ? $(this).height() : $('ul',this).height() );
        };

        if ( $.browser.msie == false )
            $('.review-index .filters').slideToggle('fast').each( cb );
        else
            $('.review-index .filters').toggle('fast').each( cb );
    });

    // Clicking the reset link sets the form back to default state
    /// Run once
    $('.review-index .filters a.reset').click( function() {
        $(this).parent('form')[0].reset();
    }).siblings('input').attr('disabled',false);

    // Clicking the 'Any' option of any multiple select clears the rest of the options
    /// Run once
    $('.review-index .filters select').change( function() {
        if ( $(this).val()[0] == '' ) $(this).val([]);
    });

    // filter form handler
    /// Run once
    $('.review-index .filters form').submit( function( event ) {
        event.preventDefault();
        
        var data = $(this).serializeArray();
        var action = $(this).attr('action');
        var filters = [];
        $(data).each(function(i,item){
            
            if ( item.value == '' ) return;
            
            if ( item.name.indexOf('[]') != -1 ) {
                item.name = item.name.substring(0,item.name.lastIndexOf('[]'))
            }
            
            if ( filters[item.name] )
                filters[item.name] += ','+item.value;
            else
                filters[item.name] = item.value;
        });
        
        for ( var i in filters ) {
            action += '/'+i+':'+filters[i];
        }
        
        location.href = action;
        
        return false;
    });
});

