(function ($) {
    /* the following code provides an interface for editing merge conflicts
     */
     
    $(document).ready(function() {
        if (!document.getElementById('diffmerge')) return;
        
        var resolved_count = 0;
        var resolved_flags = [];
        
        $('.conflict').each(function( idx ) {
            var conflict = this;
            var resolved_as = $(this).find('.resolved');
            var new_content = $(conflict).find('textarea');
            
            var select = $(this).find('select');

            resolved_flags[ idx ] = false;
            
            $(select).change(function() { 
                var html;
                $(new_content).hide()
                
                resolved_flags[ idx ] = true;
                switch(this.value) {
                    case 'mine':
                    case 'theirs':
                        html = $(conflict).find('.' + this.value + ' td + td').html();
                        break;
                    case 'minebefore':
                        html = $(conflict).find('.mine td + td').html();
                        html += '\n\n' + $(conflict).find('.theirs td + td').html();
                        break;
                    case 'mineafter':
                        html = $(conflict).find('.theirs td + td').html();
                        html += '\n\n' + $(conflict).find('.mine td + td').html();
                        break;
                    case 'new':
                        html = $(new_content).value;
                        $(new_content).show();
                        break;
                    default:
                        resolved_flags[ idx ] = false;
                        html = '';
                };
                
                resolved_as.html(html);

                var enabled = true;
                for (var i = 0; i < resolved_flags.length; i++) if (enabled &= resolved_flags[i]) break;
                document.getElementById('save_changes').disabled = !enabled;
            });
            
	    function handle_update ( ) {
                $(resolved_as).html(this.value);
            }
	    $(new_content).keyup(handle_update);
	    $(new_content).keydown(handle_update);
	    $(new_content).onchange(handle_update);
        });
        
        // save_changes will grab all the text and aggregate it into the hidden field before submitting
        $('form').submit(function ( ) { 
            var content = [];
            $('#diffmerge > div').each(function ( ) {
                if ($(this).hasClass('merged')) {
                    content.push($(this).find('span').html());
                }
                else if ($(this).hasClass('conflict')) { 
                    content.push($(this).find('.resolved').html());
                }
            });
            
            document.getElementById('id_raw_content').value = content.join('\n');
            document.getElementById('id_comment').value += " (merged)";
        }); 
    });
})(jQuery);