(function($){    
    $.subdirectory = '';
    
    Array.prototype.in_array = function(p_val) {
	for(var i = 0, l = this.length; i < l; i++) {
		if(this[i] == p_val) {
			return true;
		}
	}
	return false;
    }
    
    $.fn.flash = function(){
        return this.each(function(){
            var $el = $(this);
            $el.css('color', 'red');
            
            setTimeout(function(){
                $el.css('color', 'white');
            }, 300);
            
            setTimeout(function(){
                $el.css('color', 'red');
            }, 600);
        });
    }
    
    $.fn.zebrastripe = function(){
        return this.each(function(){
            var $rows = $(this).find('tr').each(function(i, item){
                $(item).addClass(function(){
                    if(!$(this).children('th').length){
                        return $(this).index() % 2 == 0 ? 'zs-row-odd':'zs-row-even';
                    }else{
                        return false;
                    } 
                });
            });
        });
    };
    
    $.uisetup = {
        init: function(){
            $.uisetup.set_up_buttons();
            //$.uisetup.set_up_dialogs();
            $.uisetup.set_up_autocomplete();
            $.uisetup.set_up_playersearch_by_id();
        },
        
        set_up_buttons: function(){
            $('input[type="submit"]')
                .add($('input[type="button"]'))
                .add($('button'))
                .button();
        },
        
        set_up_autocomplete: function(){
            $('#id_name').autocomplete({
                source: $.subdirectory + '/player-search/',
                minLength: 3,
                delay: 500,
                select: function(event, ui){
                    $('#id_mttp_id').val(ui.item.id);
                }
            });
            
            $('#clear').bind('click', function(){
                $('#id_name').val('');
                $('#id_mttp_id').val('');
            });
        },
        
        set_up_dialogs: function(){
            $('#dialog-form').dialog({
                autoOpen: false,
                draggable: true,
                height: 600,
                width: 600,
                modal: true,
                open: function(){
                    var html = $('.new_player_form').html();
                    $(this).html(html);
                },
                buttons: {
                    'ok': function(){
                        if($(this).children('form.addplayer').length){
                            if($(this).find('input[name="forename"]').val() == ''){
                                $(this).find('label[for="id_forename"]').flash();
                                return false;
                            
                            }else if($(this).find('input[name="surname"]').val() == ''){
                                $(this).find('label[for="id_surname"]').flash();
                                return false;
                            
                            }else{
                                var values = $(this).children('form.addplayer').serialize();
                                $.ajax({
                                    url: $.subdirectory + '/add-player/',
                                    type: 'POST',
                                    data: values,
                                    success: function(response){
                                        if(/\d+/.test(response)){
                                            var results = $('<p/>', {
                                                text: 'Player has been successfully added to the database - MTTP ID: ' + response
                                            });
                                            $('#dialog-form').children('form.addplayer').remove();
                                            $('#dialog-form').html(results);
                                        }
                                    }
                                });
                                
                                return true;
                            }
                        }else{
                            $(this).dialog('close');
                            return false;
                        }
                    },
                    'cancel': function(){
                        $(this).dialog('close');
                    }
                }
            });
            
            $('#add-new-player').bind('click', function(){
                $('#dialog-form').dialog('open');
            });
        },
        
        set_up_playersearch_by_id: function(){
            $('input[id^=id_id]').bind('blur', function(){
                last_td = $(this).parents('tr').children('td:last');
                var val = $(this).val();
                if(val != ''){
                    $.ajax({
                        type: 'GET',
                        url: $.subdirectory + '/player-search-by-id',
                        data: 'id=' + val,
                        dataType: 'html',
                        beforeSend: function(){
                            last_td.html('loading...');
                        },
                        success: function(data){
                            last_td.html(data);
                        }
                    });
                }else{
                    last_td.html('');
                }
            });
        }
    };
    
    $.menu = {
        init: function(){
            $('ul.sf-menu').superfish();
        }
    };
    
    $.cssfix = {
        init: function(){
            var lastHeight = $('.newsItem3').innerHeight();
            var divs = $('.newsItem').add($('#headerImg'));
            
            $.each(divs, function(i, item){
                $(this).outerHeight(lastHeight);
            });
            
            $.cssfix.attachLink();
        },
        
        attachLink: function(){
            $('#earnings').css('cursor', 'pointer').bind('click', function(){
                window.location.href = $.subdirectory + '/join/';
            });
        }
    };

    $.highlighter = {
        init: function(){
            var points_cells = $('td.points');
            var points_list = [];
            
            $.each(points_cells, function(i, cell){
                points_list.push(parseInt($(cell).text(),10));
            });
            
            var sorted = points_list.sort(function(a,b){
                return (b-a);
            });
            
            var sliced = sorted.slice(0,20);
            
            var num_yes = 0;
            
            $.each(points_cells, function(i, cell){
                var $cell = $(cell);
                var text = $cell.text();
                var $highlight_cell = $cell.parent('tr').children('td.highlight');
                
                if(sliced.in_array(text) && num_yes <= 20){
                    $highlight_cell.html('<span class="ui-icon ui-icon-check"></span>');
                    ++num_yes;
                }else{
                    $highlight_cell.html('<span class="ui-icon ui-icon-closethick"></span>');
                }
            });
        }
    };

    $.region = {
        filter: function(){
            var venue_dd = $('#id_venue');
            var dd_width = venue_dd.outerWidth();
            var original_html = venue_dd.html();
            
            $('select[name="region"]').each(function(i, reg_dd){
                $reg_dd = $(reg_dd);
                $reg_dd.bind('change', function(event){
                    if($(this).val() == ''){
                        venue_dd.html(original_html);
                    }else{
                        $.ajax({
                            method: "GET",
                            dataType: 'json',
                            data: 'region=' + $(this).val(),
                            url: $.subdirectory + '/filtervenue',
                            beforeSend: function(){
                                venue_dd.html('<option>Loading...</option>');
                                venue_dd.width(dd_width);
                            },
                            success: function(data){                
                                $.region.clear_dd(venue_dd, dd_width);
                                $(data).each(function(){
                                    var item = $('<option/>', {
                                        text: this.venue_name,
                                        value: this.id
                                    })
                                    venue_dd.append(item);
                                });
                            },
                            error: function(){
                                venue_dd.html(original_html);
                            }
                        });
                    }
                });
            });
        },
        
        clear_dd: function($el, w){
            $el.html('<option value="">Choose</option>').width(w);
        }
    };

    $.playerform = {
        fix: function(){
            var $date_dd = $('#id_date');
            if($date_dd.val() == ''){
                var text = $date_dd.children('option:eq(1)').val();
                $date_dd.val(text);
            }
        }
    };

    $.venueform = {
        fix: function(){
            var $date_dd = $('#id_date');
                var text = $date_dd.children('option:last').val();
                $date_dd.val(text);
        }
    };

    $(function(){
        $.uisetup.init();
        $.menu.init();
        
        $.cssfix.init();
        
        $('table.zebrastripe').zebrastripe();
        
        if($('table.highlight').length){
            $.highlighter.init();
        }
        
        if($('select[name="region"]').length && $('select[name="venue"]').length){
            $.region.filter();
        }
        
        if($('.player_r').length){
            $.playerform.fix();
        }
        
        if($('form.venue').length){
            $.venueform.fix();
        }
        
        $('#add-new-player').bind('click', function(){
            window.open($.subdirectory + '/td/add-player-static', "addplayer", "width=700,height=700,titlebar=false");
        });
    });    
})(window.jQuery);
