jQuery(function()
{
    jQuery('#event_log td.details a').click(function()
    {
        if (jQuery(this).parent().find('div.details').size() == 0)
        {
            return true;
        }
        
        if (jQuery(this).next('div.details').css('display') == 'block')
        {
            jQuery(this).next('div.details').slideUp(500);
        }
        else
        {
            jQuery(this).next('div.details').slideDown(500);
        }
        
        return false;
    });
    
    jQuery('#send_email').click(function()
    {
        if (jQuery('#mailer').css('display') != 'block')
        {
            jQuery('#mailer').slideDown(500);
        }
        else
        {
            jQuery('#mailer').slideUp(500);
        }
    });
    
    jQuery('table.midcom_helper_datamanager2_tabledata_widget tbody tr').find('th:first').css('display', 'none');
    jQuery('#teaching_fieldset tbody tr, #education_fieldset tbody tr').find('th:first').css('display', '');
    
    jQuery('input[type="file"]').parents('label').addClass('required');
    
    jQuery('.midcom_helper_datamanager2_widget_downloads').each(function()
    {
        jQuery(this).find('th.filename, td.filename.new, .title, input.upload').css('display', 'none');
    });
    
    jQuery('td.status input[type="submit"]').css('display', 'none');
    
    jQuery('td.status select').change(function()
    {
        var action = jQuery(this).parents('form').attr('action');
        
        if (!action)
        {
            action = String(window.location);
        }
        
        if (action.match(/\?/))
        {
            action += '&ajax';
        }
        else
        {
            action += '?ajax';
        }
        
        jQuery(this).parents('td')
            .removeClass('ok')
            .addClass('sending');
        
        jQuery(this).oneTime(1000, function()
        {
            jQuery(this).parents('form').ajaxSubmit({
                url: action,
                success: function(data)
                {
                    jQuery('td.sending')
                        .removeClass('sending')
                        .addClass('ok')
                        .oneTime(10000, function()
                        {
                            jQuery(this).removeClass('ok');
                        });
                }
            });
        });
    });
    
    jQuery('td.my_vote input[type="image"]').hover
    (
        function()
        {
            var src = jQuery(this).attr('src');
            src = src.replace(/(yellow|grey|red)/, 'red');
            jQuery(this).attr('src', src);
            
            jQuery(this).prevAll('input[type="image"]').each(function()
            {
                var src = jQuery(this).attr('src');
                src = src.replace(/(yellow|grey|red)/, 'red');
                jQuery(this).attr('src', src);
            });
        },
        function()
        {
            var src = jQuery(this).attr('src');
            
            if (jQuery(this).hasClass('selected'))
            {
                src = src.replace(/(yellow|grey|red)/, 'yellow');
            }
            else
            {
                src = src.replace(/(yellow|grey|red)/, 'grey');
            }
            
            jQuery(this).attr('src', src);
            
            jQuery(this).parent().find('input[type="image"]').each(function()
            {
                var src = jQuery(this).attr('src');
                
                if (jQuery(this).hasClass('selected'))
                {
                    src = src.replace(/(yellow|grey|red)/, 'yellow');
                }
                else
                {
                    src = src.replace(/(yellow|grey|red)/, 'grey');
                }
                jQuery(this).attr('src', src);
            });
        }
    );
    
    jQuery('form').find('input, select, textarea')
        .focus(function()
        {
            jQuery(this).parents('label').removeClass('ok');
            jQuery(this).parents('label').removeClass('error');
        })
        .blur(function()
        {
            var value = jQuery(this).attr('value');
            
            var id = jQuery(this).attr('id');
            var error_message = null;
            
            switch (id)
            {
                case 'cc_kaktus_apply_total_number':
                case 'cc_kaktus_apply_first_author':
                    var value = jQuery(this).attr('value');
                    
                    if (   !value
                        && !jQuery(this).parents('label').hasClass('required'))
                    {
                        jQuery(this).parents('label').find('span.error').remove();
                    }
                    else if (value.match(/[^0-9]/))
                    {
                        error_message = 'Numbers only';
                    }
                    else
                    {
                        jQuery(this).parents('label').find('span.error').remove();
                    }
                    
                    break;
                
                 case 'cc_kaktus_apply_tel':
                 case 'cc_kaktus_apply_fax':
                    if (   !value
                        && !jQuery(this).parents('label').hasClass('required'))
                    {
                        jQuery(this).parents('label').find('span.error').remove();
                    }
                    else if (value.match(/[^0-9\+\- ]/))
                    {
                        error_message = 'Numbers and characters `+` and `-` only';
                    }
                    else
                    {
                        jQuery(this).parents('label').find('span.error').remove();
                    }
                    
                    break;
                 
                 case 'cc_kaktus_apply_email':
                    if (   !value
                        && !jQuery(this).parents('label').hasClass('required'))
                    {
                        jQuery(this).parents('label').find('span.error').remove();
                    }
                    else if (value.match(/^[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i))
                    {
                        jQuery(this).parents('label').find('span.error').remove();
                    }
                    else
                    {
                        error_message = 'Email seems invalid';
                    }
                    
                    break;
                 
            }
            
            if (   jQuery(this).parents('label.required').size() == 0
                && value
                && !error_message)
            {
                jQuery(this).parents('label').addClass('ok');
                return;
            }
            
            if (   !value
                && jQuery(this).parents('label').hasClass('required'))
            {
                jQuery(this).parents('label').addClass('error');
                return;
            }
            
            if (error_message != null)
            {
                if (jQuery(this).parents('label').find('span.error').size() == 0)
                {
                    jQuery('<span></span>')
                        .addClass('error')
                        .insertAfter(jQuery(this));
                }
                jQuery(this).parents('label').addClass('error');
                
                jQuery(this).parents('label').find('span.error').html(error_message);
                return;
            }
            
            if (value)
            {
                jQuery(this).parents('label').addClass('ok');
                jQuery(this).parents('label').find('span.error').remove();
            }
        });
    
    var sortlist = new Array();
    
    for (var i = 0; i < jQuery('#cc_kaktus_apply_sortable thead th').size(); i++)
    {
        if (i === 0)
        {
            sortlist[i] = [0,0];
        }
        else
        {
            sortlist[i] = [1,0];
        }
    }
    
    jQuery('#cc_kaktus_apply_sortable').sortable();
    jQuery('#cc_kaktus_apply_applications').tablesorter(
    {
        headers:
        {
            0:
            {
                sorter: false
            }
        },
        widgets: ['zebra']
    });
    
    jQuery('#select_all')
        .bind('change', function()
        {
            if (jQuery(this).attr('checked'))
            {
                jQuery(this).parents('table').find('tr th.compare input').attr('checked', 'checked');
            }
            else
            {
                jQuery(this).parents('table').find('tr th.compare input').attr('checked', '');
            }
        });
    
    jQuery('#select_all_list')
        .bind('change', function()
        {
            if (jQuery(this).attr('checked'))
            {
                jQuery(this).parent().find('li input').attr('checked', 'checked');
            }
            else
            {
                jQuery(this).parent().find('li input').attr('checked', '');
            }
        });
    
    jQuery('#cc_kaktus_apply_rejected').click(function()
    {
        window.location = '?rejected';
    });
    
    jQuery('#cc_kaktus_apply_hide_rejected').click(function()
    {
        var location = String(window.location);
        
        if (!location)
        {
            return;
        }
        
        window.location = location.replace(/(\?|&)rejected/, '');
    });
    
    jQuery('input.fetch')
        .bind('click', function()
        {
            var serialized = '';
            
            var inputs = jQuery('#cc_kaktus_apply_applications').find('th.compare input[checked]');
            
            if (   jQuery(this).hasClass('compare')
                && inputs.size() < 2)
            {
                alert('Please check at least two rows from the table below');
                return false;
            }
            else if (inputs.size() < 1)
            {
                alert('Please check at least one row from the table below');
                return false;
            }
            
            for (var i = 0; i < inputs.length; i++)
            {
                serialized += 'applications[]=' + jQuery(inputs[i]).attr('value') + '&';
            }
            
            var rel = jQuery(this).attr('rel');
            
            if (!rel)
            {
                return;
            }
            
            if (rel.match(/\?/))
            {
                rel += '&';
            }
            else
            {
                rel += '?';
            }
            
            window.location = rel + serialized;
        });
    
    jQuery('#cc_kaktus_apply_csv').click(function()
    {
        var serialized = '';
        
        var inputs = jQuery('#cc_kaktus_apply_applications').find('th.compare input[checked]');
        
        if (inputs.length < 2)
        {
            alert('Please check at least two rows from the table below');
            return false;
        }
        
        for (var i = 0; i < inputs.length; i++)
        {
            serialized += 'applications[]=' + jQuery(inputs[i]).attr('value') + '&';
        }
        
        var rel = jQuery(this).attr('rel');
        
        if (!rel)
        {
            return;
        }
        
        window.location = rel + '&' + serialized;
    });
    
    jQuery('#cc_kaktus_apply_sortable_toggle').toggle(
        function()
        {
            jQuery('#cc_kaktus_apply_sortable_form').slideDown(1000);
        },
        function()
        {
            jQuery('#cc_kaktus_apply_sortable_form').slideUp(1000);
        }
    );
    
    jQuery('ul.error li').each(function()
    {
        var rel = jQuery(this).attr('rel');
        
        if (!rel)
        {
            return;
        }
        
        jQuery('#' + rel + '_label').addClass('error');
    });
    
    jQuery('#midcom_helper_datamanager2_teaching_widget_tabledata tbody th').remove();
    
    jQuery('#midcom_helper_datamanager2_education_widget_tabledata').each(function()
    {
        jQuery('<th></th>')
            .prependTo(jQuery(this).find('thead tr'));
    });
});

