﻿/* https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference:Objects:Array:indexOf#Compatibility */
if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length >>> 0;
    var from = Number(arguments[1]) || 0;
    from = (from < 0) ? Math.ceil(from) : Math.floor(from);
    if (from < 0) from += len;
    for (; from < len; from++)
    {
      if (from in this && this[from] === elt) return from;
    }
    return -1;
  };
}
$(document).ready(function(){
    
    // Forms
    if($('div.form').length==1) {
        $('div.form input[type=text], div.form input[type=password], div.form textarea, div.form input[type=checkbox], div.form input[type=radio], div.form select').keypress(function (e) {
		    if(e.which == 13) {
		        var btnFirst = $(this).parents('div.form').next('div.buttons').children(':last');
		        var btnSecond = $(this).parents('div.form').parent().next('div.buttons').children(':last');
		        if(btnFirst.length==1) {
		            btnFirst.click();
		        } else if(btnSecond.length==1) {
		            btnSecond.click();
		        }
			    return false;
		    }
        });
        
        /* Prompts */
        $('div.form p.prompt:not(.fixed)').toggle();
        $('div.form input[type=text], div.form input[type=password], div.form textarea, div.form select').focus(function(){
            $(this).siblings('p.prompt:not(.fixed)').show();
        });
        $('div.form input[type=text], div.form input[type=password], div.form textarea, div.form select').blur(function(){
            $(this).siblings('p.prompt:not(.fixed)').hide();
        });
        
        /* Set vals for fields with hidden labels */
        $('div.form label.hide + input[type=text], div.form label.hide + input[type=password]').each(function(){
            $(this).val($(this).prev().text());
        });
        
        /* Focus event for above fields */
        $('div.form label.hide + input[type=text], div.form label.hide + input[type=password]').focus(function(){
            if($(this).val()==$(this).prev().text()) { $(this).val(''); }
        });
        
    }
    
    // Login form
    if($('#login').length==1) {
        $('#login div.form input[type=text]:first').focus();
    }
    
    // Register form
    if($('#register').length==1) {
        $('#register div.form input[type=text]:first').focus();
    }
    
    // Overview
    if($('#overview div.content div.column').length) {
        
        var i = 1;
        $('#overview div.content div.leagues li').each(function(){
            if(i%3!=0) {$(this).addClass('divide');}
            i++;
        });
    }
    
    /* Collapsable panels */
    $('div.panel.collapsable').each(function(){
        var strId = $(this).attr('class').match(/cid[0-9]+/) + '';
        var strClass = 'down';
        if($.cookie(strId)=='false'){
            strClass = 'up'
        }  
        $(this).find('h2.header span').wrapInner('<a href="#" class="' + strClass + ' collapse"></a>');
        var $collapse = $(this).find('div.collapse');
        if(strClass == 'up'){
            $collapse.toggle();
        }
    });
    $('div.panel.collapsable h2.header span a').click(function(){
        var $panel = $(this).parents('div.panel');
        var $collapse = $panel.find('div.collapse');
        var strId = $panel.attr('class').match(/cid[0-9]+/) + '';
        if($collapse.is(':visible')){
            $collapse.slideUp('slow');
            $(this).toggleClass('down');
            $(this).toggleClass('up');
            $.cookie(strId, 'false');
        } else {
            $collapse.slideDown('slow');
            $(this).toggleClass('down');
            $(this).toggleClass('up');
            $.cookie(strId, 'true');
        }
    });
    /* Collapseable content */
    $('div.collapsable-content').each(function(){
        var strId = $(this).attr('class').match(/cid[0-9]+/) + '';
        var strClass = 'down';
        if($.cookie(strId)=='false'){
            strClass = 'up'
        }    
        $(this).find('p strong').wrapInner('<a href="#" class="' + strClass + ' collapse"></a>');
        var $collapse = $(this).find('div.collapse');
        if(strClass == 'up'){
            $collapse.toggle();
        }
    });
    $('div.collapsable-content p strong a').click(function(){
        var $panel = $(this).parents('div.collapsable-content');
        var $collapse = $panel.find('div.collapse');
        var strId = $panel.attr('class').match(/cid[0-9]+/) + '';
        if($collapse.is(':visible')){
            $collapse.slideUp('slow');
            $(this).toggleClass('down');
            $(this).toggleClass('up');
            $.cookie(strId, 'false');
        } else {
            $collapse.slideDown('slow');
            $(this).toggleClass('down');
            $(this).toggleClass('up');
            $.cookie(strId, 'true');
        }
        return false;
    });
    
    /* Closeable panels */
    $('div.panel.closeable').each(function(){
        $(this).find('h2.header span').wrapInner('<a href="#" class="close"></a>');
    });
    $('div.panel.closeable h2.header span a').click(function(){
        var $main = $(this).parent().parent().parent().parent();
        $main.hide();
        window.location.search = window.location.search.replace('&Accept=true','');
        return false;        
    });
    
    // Home
    if($('div#welcome').length==1){
        var intHeight = 0 * 1;
        $('div#welcome div.front-column').each(function() {
            if ( $(this).height() > intHeight ) intHeight = $(this).height() * 1;
        });
        $('div#welcome div.front-column').each(function() {
           var intIncrease = intHeight - ($(this).height() * 1);
           var $wrapThree = $(this).find('div.wrap-three:last');
           var intCurrentHeight = $wrapThree.height();
           $wrapThree.height(intCurrentHeight+intIncrease);
        });
    }
    
    // Current predictions
    if($('div#current-predictions').length==1){
        $('div#current-predictions td:not(.prediction)').click(function(){
            if($(this).find('span.away').length==1) {
                $(this).parent().find('fieldset input:last').focus();
            } else {
                $(this).parent().find('fieldset input:first').focus();
            }
        });
        $('div#current-predictions td fieldset input').focus(function() {
            $(this).parents('tr').addClass('hover');
        });
        $('div#current-predictions td fieldset input').blur(function() {
            $(this).parents('tr').removeClass('hover');
        });
        $('div#current-predictions input[type=image]').click(function(){
            emphasisePredictions(false);
        });
        if($('div#current-predictions div.success').length==1) {
            emphasisePredictions(true);
        }
    }
    
    // GP current predictions
    if($('div#gp-current-predictions').length==1){
        if(!(jQuery.browser.msie && jQuery.browser.version == '6.0')) {
            enableDisableGrandPrixPredictions();
            $('div#gp-current-predictions div.select').click(function(){
                $(this).find('select').focus();
            });
            $('div#gp-current-predictions select').focus(function(){
                $(this).parent().addClass('hover');
            });
            $('div#gp-current-predictions select').blur(function(){
                $(this).parent().removeClass('hover');
            });
            $('div#gp-current-predictions select').change(function(){
                if($('option[value=' + $(this).val() + ']', this).is(':disabled')) {
                    $(this).val(0);
                } else {
                   enableDisableGrandPrixPredictions();
                }
            });
            if($('div#gp-current-predictions div.success').length==1) {
                emphasisePredictions(true);
            }
        }
    }
    
    // Predictions
    if($('div#predictions').length==1){
        $('div#predictions td:not(.prediction)').click(function(){
            if($(this).parent().find('select').length==1) {
                $(this).parent().find('select').focus();
            } else if($(this).hasClass('date') || $(this).hasClass('home')) {
                $(this).parent().find('input:first').focus();
            } else {
                $(this).parent().find('input:last').focus();
                
            }
        });
         $('div#predictions select').focus(function(){
            $(this).parents('tr').addClass('hover');
        });
        $('div#predictions select').blur(function(){
            $(this).parents('tr').removeClass('hover');
        });
        $('div#predictions td fieldset input').focus(function() {
            $(this).parents('tr').addClass('hover');
        });
        $('div#predictions td fieldset input').blur(function() {
            $(this).parents('tr').removeClass('hover');
        });
        $('div#predictions input[type=image]').click(function(){
            emphasisePredictions(false);
        });
        if($('div#predictions div.success').length==1) {
            emphasisePredictions();
        }
    }
   
    // Cup
    if($('div#cup-draw div.row-container div.me').length==1){
        $('div#cup-draw div.row-container div.me').parent().addClass('me');
        $('div#cup-draw div.row-container div.me').removeClass('me');
    }
   
    /*
    $('#current-predictions fieldset, #predictions fieldset').each(function(){
        var blnDisabled = false;
        $(this).find('input[type=text]').each(function(){
            if($(this).val()!='') {
                blnDisabled = true;
                $(this).attr('disabled','true');
            } else { 
                $(this).removeAttr('disabled');
            }
        });
        if (blnDisabled==true) {
            $(this).append('<a href="#" class="edit">Edit</a>');
        }
        
    });
    $('#current-predictions fieldset a, #predictions fieldset a').click(function(){
        $(this).parent().find('input[type=text]').each(function(){
            $(this).removeAttr('disabled');
        });
        $(this).remove();
        return false;
    });
    */
    
    /* Cups
    $('div#matches').addClass('finals'); */
    
    /* Team stats */
    if($('div#team-stats td.team span.wrap:contains("(A)")').length) {
        var arrPools = new Array();
        var arrTeams = new Array();
        $('div#team-stats tr').each(function(){
            $(this).find('td.team span.wrap').each(function() {
                var teamName = $(this).text();
                var pool = teamName.match(/\(([A-Z])\)/g)[0];
                if(arrPools.indexOf(pool)==-1) { arrPools.push(pool); }
                arrTeams.push([pool,$(this).parent().parent().removeClass('highlight')]);
                $(this).parent().parent().remove();
            });
        });
        arrPools.sort();
        var poolNum = 1;
        for(i=0;i<arrPools.length;i++) {
            var pos = 1;
            for(j=0;j<arrTeams.length;j++) {
                if(arrTeams[j][0]==arrPools[i]) {
                    var team = arrTeams[j][1];
                    var highlight = poolNum % 2 == 1 ? 'highlight' : 'no-highlight';
                    team.addClass(highlight).find('td.position span.wrap').html(pos).end();
                    $('div#team-stats table').append(team);
                    pos++;
                }
            }   
            poolNum++;
        }
    } else if($('div#team-stats td.team span.wrap:contains("(KO)")').length) {
        $('div#team-stats').hide();
    }
    
    /* User links */
    var url = window.location + "";
    if(url.indexOf("/reality/")>-1) {
        $('a.user').attr('href','#').attr('target','_self');
    }
    
    // Reality predictions
    if($('div#reality-predictions').length==1) {
        $('div.draggable').addClass('unallocated');
        $('div.draggable').draggable({ helper: 'clone', revert: 'invalid', zIndex: 999 });
        $('div.droppable').each(function() {
            if($(this).find('div.team').length==0) {
                $(this).html('<span class="drag-prompt">Drag to here</span>')
            }
        });
        $('div.locked').each(function() { 
            var $team = $(this).find('div.team');
            if($team.length==0) {
                $(this).html('<span class="drag-prompt">Not entered</span>')
            } else {
                $team.append('<span class="lock"><span>Locked</span></span>');
            }
        });
        $('div.droppable div.team').append('<a href="#" class="remove" title="Remove"><span>Remove</span></a>').parent().addClass('dropped');
        $('div.dropped div.team a.remove').click(function() {
            var rPred = new RealityPrediction();
            rPred.remove($(this));
            return false;
        });
        if($('div.winner-details strong').html()=='') {
            $('div.winner-details').hide();
        }
        $('#winner div.droppable').droppable({
            accept: function(draggable) {
                if (draggable.hasClass('unallocated') && !draggable.hasClass('locked') && $(this).find('div.message,div.loader').length==0 && $(this).parent().find('div.droppable div.' + draggable.attr('class').match(/team-[0-9]+/)).length == 0) {
                    return true;
                }
                return false;
            },
            hoverClass: 'hover',
            activeClass: 'active',
            drop: function(event, ui) {
                var prediction = new RealityPrediction();
                prediction.save(ui.draggable,$(this));
            }
        });
        $('#shortlist div.droppable').droppable({
            accept: function(draggable) {
                if (draggable.hasClass('unallocated')) {
                    if ($(this).find('div.message,div.loader').length>0) {
                    
                    } else if ($(this).parent().find('div.droppable div.' + draggable.attr('class').match(/team-[0-9]+/)).length == 0) {
                        return true;
                    }
                }
                return false;
            },
            hoverClass: 'hover',
            activeClass: 'active',
            drop: function(event, ui) {
                var prediction = new RealityPrediction();
                prediction.save(ui.draggable,$(this));
            }
        });
        $('#selection div.droppable').droppable({
            accept: function(draggable) {
                if ($(this).find('div.message,div.loader').length>0 || $(this).parent().find('div.droppable div.' + draggable.attr('class').match(/team-[0-9]+/)).length > 0) {
                    return false;
                }
                return true;
            },
            hoverClass: 'hover',
            activeClass: 'active',
            drop: function(event, ui) {
                var prediction = new RealityPrediction();
                prediction.save(ui.draggable,$(this));
            }
        });
    }
});
function RealityPrediction() {
    var $droppable = null;
    var strLocation = null;
    var intRemoveTeamId = 0;
    var blnLoggedIn = false;
    var blnInSeason = false;
    var strType = null;
    var intRoundId = 0;
    var intTicks = 1000;
    this.init = function() {
        if ($droppable == null) { return; }
        strLocation = $droppable.parent().attr('id');
        strType = strLocation=='winner' ? 'selection' : strLocation;
        intWinnerPoints = $('div#reality-predictions input[type=hidden]').val().split(',')[4];
        intRoundId = strLocation == 'winner' ? $('div#reality-predictions input[type=hidden]').val().split(',')[3] : $('div#reality-predictions input[type=hidden]').val().split(',')[2];
        blnLoggedIn = $('div#reality-predictions input[type=hidden]').val().split(',')[0]=="True";
        blnInSeason = $('div#reality-predictions input[type=hidden]').val().split(',')[1]=="True";
        if($droppable.find('div.team').length==1) { intRemoveTeamId = $droppable.find('div.allocated').attr('class').match(/team-([0-9]+)/)[1]; }
    }
    
    this.save = function ($draggable,$ldroppable) {
        $droppable = $ldroppable;
        this.init();
        var $dropped = $draggable.clone().removeClass('unallocated').removeClass('draggable').addClass('allocated').attr('style', '');
        var intTeamId = $draggable.attr('class').match(/team-([0-9]+)/)[1];
        $droppable.parent().find('div.droppable').removeClass('hover').removeClass('active');
        if(blnLoggedIn && blnInSeason && strLocation=='winner') {
            var strPredictionCountMessage;
            if($('div#winner span.prediction-count').text()=='1') {
                strPredictionCountMessage = 'your last prediction';
            } else {
                strPredictionCountMessage = '1 of your ' +  $('div#winner span.prediction-count').text() + ' remaining predictions';
            }
            if(!confirm('Use ' + strPredictionCountMessage + ' for a chance of ' + intWinnerPoints + ' points?')) {
                return;
            }
        }
        $droppable.html($dropped);
        $droppable.find('span.name').remove();
        if(blnLoggedIn && blnInSeason) {
            $dropped.append('<div class="loader" style="display:none;"><img src="../images/loader.gif" /></div>');
            $dropped.find('div.loader').show();
            var me = this;
            if (strLocation=='winner') {
                $('div.winner-details').hide();
            }
            $.ajax({
                type: 'POST',
                url: '/PredictorProWeb/Services/RealityPredictions.asmx/CreatePrediction',
                data: '{intTeamId:"'+intTeamId+'",intRoundId:"'+intRoundId+'",strType:"'+strType+'",intRemoveTeamId:"'+intRemoveTeamId+'"}',
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
                success: function(msg) {
                    var blnSuccess = msg;
                    var t = setTimeout(function() {
                        $dropped.find('div.loader').remove();
                        $(this).remove();
                        if(!blnSuccess) {
                            me.showMessage('error', $dropped.find('img').attr('alt'));
                            $droppable.removeClass('dropped');
                            $dropped.remove();
                        } else {
                            $droppable.addClass('dropped');
                            $dropped.append('<a href="#" class="remove" title="Remove"><span>Remove</span></a>');  
                            $dropped.find('a.remove').click(function() {
                                var rPred = new RealityPrediction();
                                rPred.remove($(this));
                                return false;
                            });
                            if (strLocation=='winner') {
                                var dtmNow = new Date();
                                var month=new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
                                $('div.winner-details strong').html($dropped.find('img').attr('alt'));
                                $('div.winner-details span.date').html($('div#shortlist span.round-name').text());
                                $('div.winner-details span.points').html(intWinnerPoints);
                                $('div.winner-details').show();
                                var intPredictionCount = $('div#winner span.prediction-count').text() * 1;
                                if(intPredictionCount == 1) {
                                    $('div#winner span.prediction-count').text('no');
                                    $('div#winner h3 span.drag-prompt').remove();
                                    $droppable.removeClass('droppable').addClass('locked');
                                    $dropped.find('a.remove').remove();
                                    $dropped.append('<span class="lock"><span>Locked</span></span>');
                                } else {
                                    $('div#winner span.prediction-count').text(intPredictionCount-1);
                                }
                            }
                            me.showMessage('success', $dropped.find('img').attr('alt'));
                        }
                    },intTicks);
                }
            });
            $draggable.addClass(strLocation);
        } else if (blnLoggedIn && !blnInSeason) {    
            var $overview = $('#reality-overview')
            if($overview.hasClass('anchor-emphasise')) {
            } else {
                $overview.addClass('anchor-emphasise');
                var t = setTimeout(function() {
                    $overview.removeClass('anchor-emphasise');
                }, 3000);
            }
            this.showMessage('join','');
        } else if (!blnLoggedIn) {    
            var $overview = $('#reality-overview')
            if($overview.hasClass('anchor-emphasise')) {
            } else {
                $overview.addClass('anchor-emphasise');
                var t = setTimeout(function() {
                    $overview.removeClass('anchor-emphasise');
                }, 3000);
            }
            this.showMessage('login','');
        }
    };
    this.remove = function($anchor) {
        $droppable = $anchor.parents('div.droppable');
        this.init();
        var $team = $anchor.parent();
        var start = new Date();
        var intTeamId = $team.attr('class').match(/team-([0-9]+)/)[1];
        if(strLocation=='winner' && !$team.hasClass('selected')) {
            var intCurrentWinnerPoints = $('div.winner-details span.points').text();
            if(!confirm('Remove season winner and miss out on a potential ' + intCurrentWinnerPoints + ' points?')) {
                return;
            }
        }
        $team.append('<div class="loader" style="display:none;"><img src="../images/loader.gif" /></div>');
        $team.find('div.loader').show();
        $.ajax({
            type: 'POST',
            url: '/PredictorProWeb/Services/RealityPredictions.asmx/DeletePrediction',
            data: '{intTeamId:"'+intRemoveTeamId+'",intRoundId:"'+intRoundId+'",strType:"'+strType+'"}',
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            success: function(msg) {
                var finish = new Date();
                var t = setTimeout(function(){
                    $team.remove();
                    $droppable.html('<span class="drag-prompt">Drag to here</span>');
                    if (strLocation=='winner') {
                        $('div.winner-details strong').html('');
                        $('div.winner-details span.date').html('');
                        $('div.winner-details span.points').html('');
                        $('div.winner-details').hide();
                        
                    }
                } , intTicks);
                $droppable.removeClass('dropped');
            }
        });
    };
    this.showMessage = function(strMode, strName) {
        var strMessage, strClass, $message;
        switch(strLocation) {
            case 'winner':
                strMessage = 'Winner';
                break;
            case 'selection':
                strMessage = 'Elimination';
                break;
            case 'shortlist':
                strMessage = 'Shortlist';
                break;
            default:
                return;
        }
        switch(strMode) {
            case 'error':
                strClass='error';
                strMessage += ' not saved: ' + strName;
                break;
            case 'login':
                strMessage='Your predictions have not been saved.  <strong>Please <a href="' + $('p#get-started a:nth-child(2)').attr('href') + '">login</a> or <a href="' + $('p#get-started a:nth-child(1)').attr('href') + '">register</a> first</strong>.';
                strClass='alert';
                break;
            case 'join':
                strMessage='Your predictions have not been saved.  <strong>Please <a href="' + $('#reality-overview div.content a').attr('href') + '">join this game</a> first</strong>.';
                strClass='alert';
                break;
            case 'success':
                strClass='success';
                strMessage += ' saved: ' + strName;
                break;
            default:
                return;
        }
        var me = this;
        var $selection = $('#winner');
        $message = $selection.parent().find('div.message');
        if($message.length>0) {
            if (strMode!='login'&&strMode!='join') {
                $message.find('ul').append('<li style="display:none;" class="' + strClass + '">'+strMessage+'</li>');   
                var $li = $message.find('li:last-child');
                $li.show();
                var t = setTimeout(function() {
                    me.hideMessage($li);
                }, intTicks*10);
            }
        } else {
            $selection.after('<div class="message" style="display:none;"><ul><li class="' + strClass + '">'+strMessage+'</li></div>');
            $message = $selection.parent().find('div.message');
            $message.show();
            if (strMode!='login') {
                var $li = $message.find('li:last-child');
                var t = setTimeout(function() {
                    me.hideMessage($li);
                }, intTicks*10);
            }
        }
    };
    this.hideMessage = function($li) {
        var $message = $li.parents('div.message');
        var strMode = $li.attr('class');
        if($message.find('li').length==1) {
            $message.remove();
        } else {
            $li.remove();
        }
    };
}
// Current predictions
function emphasisePredictions(blnNormalise) {
    $('div#current-predictions, div#predictions, div#gp-current-predictions').addClass('predicted');
    if (blnNormalise==true) {
        var tmrTimer = setTimeout('normalisePredictions()', 3000);
    }
}
function normalisePredictions() {
    $('div#current-predictions, div#predictions, div#gp-current-predictions').removeClass('predicted');
}
function enableDisableGrandPrixPredictions() {
    $('div#gp-current-predictions div.place select option').removeAttr('disabled');
    $('div#gp-current-predictions div.place select option').removeAttr('style');
    $('div#gp-current-predictions div.place select').each(function() {
        var iTeam = $(this).val() * 1;
        var iId = $(this).attr('id');
        if(iTeam != 0) {
            $('div#gp-current-predictions div.place select').each(function() {
                var jTeam = $(this).val() * 1;
                var jId = $(this).attr('id');
                if(iId != jId) {
                    if(iTeam == jTeam) { $(this).val(0); }
                    $(this).children('option[value='+iTeam+']').attr('disabled','disabled');
                    $(this).children('option[value='+iTeam+']').css({'color' : '#AAA'});
                }
            });
        }
    });
}
/* Open window */
function userPopUp(strUrl){
    window.open(strUrl,'teamStats','height=320,width=1020');
}