// As Interface like to Prototype the Array object use this
// http://webreflection.blogspot.com/2007/03/for-in-loop-prototype-safe.html
function $for(obj, callback){
    var proto = obj.constructor.prototype,
    h = obj.hasOwnProperty, key;
    for(key in obj) {
    if((h && h.call(obj,key)) || proto[key] !== obj[key])
        if (callback(key, obj[key]) == 'break;') {
            break;
        }
    }
};

// Adds a working toFixed method to Number class
function Stretch(Q, L, c) { var S = Q
    if (c.length>0) while (S.length<L) { S = c+S }
    return S
}
function StrU(X, M, N) { // X>=0.0
    var T, S=new String(Math.round(X*Number("1e"+N)))
    if (S.search && S.search(/\D/)!=-1) { return ''+X }
    with (new String(Stretch(S, M+N, '0')))
    return substring(0, T=(length-N)) + '.' + substring(T)
}
function Sign(X) { return X<0 ? '-' : ''; }
function StrS(X, M, N) { return Sign(X)+StrU(Math.abs(X), M, N) }
Number.prototype.toFixed= new Function('n','return StrS(this,1,n)')


var current_view = '';
var last_view = '';
var global_changed = 0;
var mode = '';

// Switch views
function switch_view(view) {
    // See what view has been used as default
    if (!current_view) {
        if (document.getElementById('ism_graphical_view')) {
            current_view = 'graphical';
        }
        else if (document.getElementById('ism_data_view')) {
            current_view = 'data';
        }
    }   
    if (view == 'data') {
		if (current_view == 'data') return;
        $ismjq('#ism_tab_data').removeClass().addClass('ism_active_tab');
		$ismjq('#ism_tab_graphical').removeClass();

		$ismjq('#ism_graphical_view').hide();
		$ismjq('#ism_sel2_form').fadeIn("slow");
		$ismjq('#ism_data_view').fadeIn("slow");
        last_view = current_view;
        current_view = 'data';
        /// this applies only to old fox games
        $ismjq('#ism_captain_container').removeClass();
        /// class to control pitch view
        if (typeof(ism_stats_view_class) != 'undefined' && typeof(ism_graphical_view_class) != 'undefined'){
            $ismjq('.ism_pitch_view_class').removeClass(ism_graphical_view_class).addClass(ism_stats_view_class);
        }
    }

    else if (view == 'graphical') {
		if (current_view == 'graphical') return;
        $ismjq('#ism_tab_graphical').removeClass().addClass('ism_active_tab');
		$ismjq('#ism_tab_data').removeClass();
		$ismjq('#ism_data_view').hide();
		$ismjq('#ism_sel2_form').fadeIn("slow");
		$ismjq('#ism_graphical_view').fadeIn("slow");
        last_view = current_view;
        current_view = 'graphical';
        /// this applies only to old fox games
        $ismjq('#ism_captain_container').removeClass().addClass('ism_captain_div');
        /// class to control pitch view
        if (typeof(ism_stats_view_class) != 'undefined' && typeof(ism_graphical_view_class) != 'undefined'){
            $ismjq('.ism_pitch_view_class').removeClass(ism_stats_view_class).addClass(ism_graphical_view_class);
        }
    }
    focus();
}

// Draws the passed element location (1 to squadsize)
function draw_element(i) {
		var t_id = $ismjq("#ism_selection_"+i).val();
    if (mode == 'watchlist') {
        if (t_id) {
            $ismjq("ism_data_"+i).show();
        }
        else {
            $ismjq("ism_data_"+i).hide();
        }
    }        
    var shirt, action, actioni, info, infoi, dti, name, stat, dshirt;
    var daction, dactioni, dinfo, dinfoi, ddti, dname;
    if (mode == 'transfer' || mode == 'selection' || mode == 'eventwildcard') {
        shirt = $ismjq("#ism_selection_"+i+"_shirt"); 
        action = $ismjq("#ism_selection_"+i+"_action");
        actioni = $ismjq("#ism_selection_"+i+"_action_image");
        info = $ismjq("#ism_selection_"+i+"_info_link");
        infoi = $ismjq("#ism_selection_"+i+"_info_image");
        dti = $ismjq("#ism_selection_"+i+"_dreamteam_image");
        name = $ismjq("#ism_selection_"+i+"_name");
        stat = $ismjq("#ism_selection_"+i+"_stat");
    }
    if (mode == 'transfer' || mode == 'selection' || mode == 'watchlist') {
        daction = $ismjq("#ism_data_"+i+"_action");
        daction.css('display', 'inline').show();
        dactioni = $ismjq("#ism_data_"+i+"_action_image");
        dinfo = $ismjq("#ism_data_"+i+"_info_link");
        dinfo.css('display', 'inline').show();
        dinfoi = $ismjq("#ism_data_"+i+"_info_image");
        ddti = $ismjq("#ism_data_"+i+"_dreamteam_image");
        dname = $ismjq("#ism_data_"+i+"_name");
        dshirt = $ismjq("#ism_selection_data_"+i+"_shirt"); 
    }

    if (infoi) {infoi.show();}
    if (dinfoi) {dinfoi.show();}
    if (ed[t_id]) {
        if (mode == 'transfer' || mode == 'selection') {
            if (ed[t_id][_in_dreamteam]) {
                if (dti) dti.show();
                if (ddti) ddti.show();
            }
            else {
                if (dti) dti.hide();
                if (ddti) ddti.hide();
            }
            if (ed[t_id][_element_type_id] == 1) {
                shirt.attr("src", gsi[ed[t_id][_team_id]].src);
                if (typeof(data_shirts) != 'undefined' && data_shirts){
                    dshirt.attr("src", gsid[ed[t_id][_team_id]].src);
                }
            }
            else {
                shirt.attr("src", si[ed[t_id][_team_id]].src);
                if (typeof(data_shirts) != 'undefined' && data_shirts){
                    dshirt.attr("src", sid[ed[t_id][_team_id]].src);
                }
            }
            shirt.attr("alt", gsi[ed[t_id][_team_id]].alt);
            shirt.attr("title", gsi[ed[t_id][_team_id]].alt);
            shirt.unbind();
            if (typeof(data_shirts) != 'undefined' && data_shirts){
                dshirt.attr("alt", gsi[ed[t_id][_team_id]].alt);
                dshirt.attr("title", gsi[ed[t_id][_team_id]].alt);
                dshirt.unbind();
            }
            if (ed[t_id][_doubtful]) {
                infoi.attr("src",infoposs_image.src);
            }
            else if (ed[t_id][_news]) {
                infoi.attr("src",infowarn_image.src);
                dinfoi.attr("src",infowarn_image.src);
            }
            else {
                infoi.attr("src",info_image.src);
                dinfoi.attr("src",info_image.src);
            }
	    name.html(wrap_text(ed[t_id][_web_name]));
            info.attr("href","javascript:draw_element_view("+t_id+")");
            stat.html(ed[t_id][_now_cost]);
        }
        if (mode == 'selection') {
            action.attr("href","javascript:remove_element("+i+")");
            action.show();
            info.show();
            dname.html(ed[t_id][_web_name]);
            daction.attr("href","javascript:remove_element("+i+")");
            dinfo.attr("href","javascript:draw_element_view("+t_id+")");
        }
        else if (mode == 'transfer') {
            if (t_r_num_org != 0 || typeof(lib_ism) != 'undefined'){  // they have transfers left, change the href
                action.attr("href","javascript:cancel_element("+i+");");
                actioni.attr("src",image_in_canc.src);
            } else { // no transfers left, hide the image
                action.hide();
            }
            dname.html(ed[t_id][_web_name]);
            if (t_r_num_org != 0 || typeof(lib_ism) != 'undefined'){  // they have transfers left, change the href
                daction.attr("href","javascript:cancel_element("+i+");");
                dactioni.attr("src",image_in_canc.src);
            } else { // no transfers left, hide the image
                daction.hide();
            }
            name.removeClass('ism_dropped');
            dname.removeClass();
            stat.removeClass('ism_dropped');

            dinfo.attr("href",info.href);
            dinfoi.attr("src",infoi.src);
        }
        else if (mode == 'watchlist') {
            $ismjq("#ism_data_"+i).show();
            if (ed[t_id][_in_dreamteam]) {
                if (ddti) ddti.show();
            }
            else {
                if (ddti) ddti.hide();
            }
            daction.attr("href","javascript:remove_element_watchlist("+i+");");
            dactioni.attr("src", image_in_canc.src);
            dname.html(ed[t_id][_web_name]);
            if (ed[t_id][_doubtful]) {
                dinfoi.attr("src", infoposs_image.src);
            }
            else if (ed[t_id][_news]) {
                dinfoi.attr("src", infowarn_image.src);
            }
            else {
                dinfoi.attr("src", info_image.src);
            }
            dinfo.attr("href","javascript:draw_element_view("+t_id+")");
        }
        if (mode == 'transfer' || mode == 'selection' || mode == 'watchlist') {
            $for(es,function(key,value) {
                var sval = 0;
                if (value == 'selling_price' || value == 'purchase_price') {
                    sval = ed[t_id][_now_cost];
                } else {
                    sval = eval("ed[t_id][_"+value+"]");
                }
//writing the data view
                  if (key == 0 && typeof(data_shirts) != 'undefined' && data_shirts){ // assume the position is in position 0
                       $ismjq("#ism_data_"+i+"-"+key+"-stat").html(eval("tn[ed[t_id][_element_type_id]][0]"));
                  } else {
                      $ismjq("#ism_data_"+i+"-"+key+"-stat").html(sval);
                  }
                    $ismjq("#ism_data_"+i+"-"+key+"-stat").removeClass();
            });
        }
    } 
    else if (t_id == -1) {
        if (ed[pd[i][_id]][_in_dreamteam]) {
            if (dti) dti.show();
            if (ddti) ddti.show();
        }
        else {
            if (dti) dti.hide();
            if (ddti) ddti.hide();
        }
        shirt.attr({src: si[0].src, alt:si[0].alt, title:si[0].alt});
        shirt.unbind().bind("click", function(){
          $ismjq("#ism_pricerange_filter").val('');
          $ismjq("#ism_element_filter").val('et_'+ed[pd[i][_id]][_element_type_id]);
          get_element_data(1);
        });
        if (typeof(data_shirts) != 'undefined' && data_shirts){
            dshirt.attr({src: sid[0].src, alt:si[0].alt});
            dshirt.unbind().bind("click", function(){
            $ismjq("#ism_pricerange_filter").val('');
            $ismjq("#ism_element_filter").val('et_'+ed[pd[i][_id]][_element_type_id]);
            get_element_data(1);
            });
        }
        action.attr("href","javascript:remove_element("+i+")");
        daction.attr("href","javascript:remove_element("+i+")");
        actioni.attr("src",image_out_canc.src);
        dactioni.attr("src",image_out_canc.src);
        name.html(wrap_text(ed[pd[i][_id]][_web_name]));
        dname.html(ed[pd[i][_id]][_web_name]);
        name.toggleClass('ism_dropped');
        dname.toggleClass('ism_dropped');
        stat.html(pd[i][_selling_price]);
        stat.toggleClass('ism_dropped');
        info.attr("href","javascript:draw_element_view("+pd[i][_id]+")");
        dinfo.attr("href", info.href);
        if (ed[pd[i][_id]][_doubtful]) {
            infoi.attr("src",infoposs_image.src);
        }
        else if (ed[pd[i][_id]][_news]) {
            infoi.attr("src", infowarn_image.src);
        }
        else {
            infoi.attr("src", info_image.src);
        }
        dinfoi.attr("src", infoi.src)
        $for (es, function(key,value)  {
            var sval = 0;
            if (value == 'selling_price' || value == 'purchase_price') {
                sval = eval("pd[i][_"+value+"]");
            } else {
                sval = eval("ed[pd[i][_id]][_"+value+"]");
            }
//writing the data view
                  if (key == 0 && typeof(data_shirts) != 'undefined' && data_shirts){ // assume the position is in position 0
                       $ismjq("#ism_data_"+i+"-"+key+"-stat").html(eval("tn[ed[pd[i][_id]][_element_type_id]][0]"));
                  } else {
                      $ismjq("#ism_data_"+i+"-"+key+"-stat").html(sval);
                  }
                    $ismjq("#ism_data_"+i+"-"+key+"-stat").toggleClass('ism_dropped');
        });
    }
    else {
        if (mode == 'selection') {
            if (ed[pd[i]] && ed[pd[i][_id]][_in_dreamteam]) {
                if (dti) dti.show();
                if (ddti) ddti.show();
            }
            else {
                if (dti) dti.hide();
                if (ddti) ddti.hide();
            }
            shirt.attr({src: si[0].src, alt:si[0].alt, title:si[0].alt});
            if (typeof(data_shirts) != 'undefined' && data_shirts){
                dshirt.attr({src: sid[0].src, alt:si[0].alt});
            }    
            var type = 0;
            for (t = 1; t <= i; t+=mxs[type]) {
                type++;
            } 
            shirt.unbind().bind("click", function(){
              $ismjq("#ism_element_filter").val('et_'+type);
              get_element_data(1);
            });
            if (typeof(data_shirts) != 'undefined' && data_shirts){
                dshirt.unbind().bind("click", function(){
                $ismjq("#ism_element_filter").val('et_'+type);
                get_element_data(1);
                });
            }
            action.hide();
            info.hide();
            daction.hide();
            dinfo.hide();
            name.html('');
            dname.html('');
            stat.html('');
            $for(es, function(key, value) {
                if (key == 1 && typeof(data_shirts) != 'undefined' && data_shirts){ // assume the shirt is in position 1
                 //// we wrote the shirt at the top
                } else {
                     $ismjq("#ism_data_"+i+"-"+key+"-stat").html('');
                }
                $ismjq("#ism_data_"+i+"-"+key+"-stat").removeClass();
            });
        } 
        else if (mode == 'transfer') {
            if (ed[pd[i][_id]][_in_dreamteam]) {
                if (dti) dti.show();
                if (ddti) ddti.show();
            }
            else {
                if (dti) dti.hide();
                if (ddti) ddti.hide();
            }
            if (ed[pd[i][_id]][_element_type_id] == 1) {
                shirt.attr("src", gsi[ed[pd[i][_id]][_team_id]].src);
                if (typeof(data_shirts) != 'undefined' && data_shirts){
                    dshirt.attr("src", gsid[ed[pd[i][_id]][_team_id]].src);
                }
            }
            else {
                shirt.attr("src", si[ed[pd[i][_id]][_team_id]].src);
                if (typeof(data_shirts) != 'undefined' && data_shirts){
                    dshirt.attr("src", sid[ed[pd[i][_id]][_team_id]].src);
                }
            }
            shirt.attr("alt", si[ed[pd[i][_id]][_team_id]].alt);
            shirt.attr("title", si[ed[pd[i][_id]][_team_id]].alt);
            dshirt.attr("alt", si[ed[pd[i][_id]][_team_id]].alt);
            dshirt.attr("title", si[ed[pd[i][_id]][_team_id]].alt);
            if (t_r_num_org != 0 || typeof(lib_ism) != 'undefined'){  // they have transfers left, change the href
                action.attr("href", "javascript:cancel_element("+i+");");
                actioni.attr("src", image_out.src);
                daction.attr("href", "javascript:cancel_element("+i+");");
                dactioni.attr("src", image_out.src);
            } else { // no transfers left, hide the image
                action.hide();
                daction.hide();
            }
            name.html(wrap_text(ed[pd[i][_id]][_web_name]));
            name.removeClass().addClass('ism_element_name');
            dname.html(ed[pd[i][_id]][_web_name]);
            dname.removeClass();
            stat.html(pd[i][_selling_price].toFixed(1));
            stat.removeClass().addClass('ism_stat_label');
            info.attr("href", "javascript:draw_element_view("+pd[i][_id]+")");
            dinfo.attr("href", "javascript:draw_element_view("+pd[i][_id]+")");
            if (ed[pd[i][_id]][_doubtful]) {
                infoi.attr("src", infoposs_image.src);
            }
            else if (ed[pd[i][_id]][_news]) {
                infoi.attr("src", infowarn_image.src);
            }
            else {
                infoi.attr("src", info_image.src);
            }
            dinfoi.attr("src", infoi.src);
            $for (es, function(key,value) {
                var sval = 0;
                if (value == 'selling_price' || value == 'purchase_price') {
                    sval = eval("pd[i][_"+value+"]");
                } else {
                    sval = eval("ed[pd[i][_id]][_"+value+"]");
                }
//writing the data view
                  if (key == 0 && typeof(data_shirts) != 'undefined' && data_shirts){ // assume the position is in position 0
                       $ismjq("#ism_data_"+i+"-"+key+"-stat").html(eval("tn[ed[pd[i][_id]][_element_type_id]][0]"));
                  } else {
                      $ismjq("#ism_data_"+i+"-"+key+"-stat").html(sval);
                  }
             		$ismjq("#ism_data_"+i+"-"+key+"-stat").removeClass();
            });
        }
    }
    if (typeof(png_shirts) != 'undefined' && png_shirts) {
      if (typeof(jQuery.ifixpng) != 'undefined') {
        shirt.parents('div:first').find('img[src$=".png"]').ifixpng();
        dshirt.parents('tr:first').find('img[src$=".png"]').ifixpng();
      }
      else {
        shirt.pngfix();
        dshirt.pngfix();
      }
    }
}

// Gets and sorts element data based on filter selections
function get_element_data(page)  {
    // read filters from form
    var element_filter = $ismjq("#ism_element_filter").val();
    var stat_filter = $ismjq("#ism_stat_filter").val();
    var price_filter = $ismjq("#ism_pricerange_filter").val();
    // examine filters to determine validity and stat sort
    var element_type_limit;
    var team_limit;
    if (element_filter != 'watchlist' && element_filter != 'dreamteam') {
        var re = /^(et|te)_(\d+)$/;
        var matches = re.exec(element_filter);
        if (matches) {
            if (matches[1] == 'et') {
                element_type_limit = (tn[matches[2]] ? matches[2] : '');
            }
            else if (matches[1] == 'te') {
                team_limit = (td[matches[2]] ? matches[2] : '');
            }
        }
    }
    var sortc = (sm[stat_filter] ? sm[stat_filter] : '11');
    if (element_type_limit && mode != "eventwildcard") {
        //var lo = 0;
        var hi = 999999;
        re = /^(\d+(\.\d+)?)$/;
        matches = re.exec(price_filter);
        if (matches) {
            hi = matches[1];
        }
        // get the default text before deleting the list
        
        //var price_txt = $ismjq("#ism_pricerange_filter").get(0);
        //price_txt = price_txt.options[0].text;
        //$ismjq("#ism_pricerange_filter").empty();
        //var price_range_drop = $ismjq("#ism_pricerange_filter").get(0);
        //for (var i = 0; i < pr[element_type_limit].length; i++) {
            //var o = new Option;
            //if (i == 0){
                //o.text = price_txt;
                //price_range_drop.options[i] = o;
            //} else {
                //o.value = pr[element_type_limit][i];
                //o.text = pr[element_type_limit][i];
                //if (price_filter == o.value) {
                    //setTimeout("selectedind("+ i +")", 100);  // to fix IE6 bug
                //}
                //price_range_drop.options[i] = o;
            //}
        //}   

        document.getElementById("ism_pricerange_filter").options.length = 1;
        for (var i = 0; i < pr[element_type_limit].length; i++) {
            var o = new Option;
            o.value = pr[element_type_limit][i];
            o.text = pr[element_type_limit][i];
            if (price_filter == o.value) {o.selected = true;}
            document.getElementById("ism_pricerange_filter").options[i+1] = o;
        }

        $ismjq('#ism_price_filter').show();
    }    
    else {
        $ismjq('#ism_price_filter').hide();
    }    
    // Filter based on filter and then sort based on stats
    var show_unavailable = mode == 'stats' ? 1 : 0;
    var found = 0;
    var temped = new Array;
    if (element_filter == 'watchlist') {
        $for (wl, function(key,value) {
            temped[temped.length] = ed[value];
        });
    }
    else if (element_filter == 'dreamteam') {
        $for (dt, function(key,value) {
            temped[temped.length] = ed[value];
        });
    }
    else {
        $for (ed, function(key,value) { 
            if (value[_now_cost] > hi) {return;}
            if ( (!show_unavailable) && value[_unavailable]) {return;}
            if (element_type_limit && value[_element_type_id] != element_type_limit) {return;}
            if (team_limit && value[_team_id] != team_limit) {return;}
            if (typeof(ISMFG) != 'undefined') {
                if (ISMFG.vars.filter_tospend != 'undefined' &&  ISMFG.vars.filter_tospend < value[_now_cost]) {return;}
                if (typeof(ISMFG.vars.filter_exclude_elements[value[_id]]) != 'undefined') {return;}
                if (typeof(ISMFG.vars.filter_exclude_teams[value[_team_id]]) != 'undefined') {return;}
                if (typeof(ISMFG.vars.filter_exclude_types[value[_element_type_id]]) != 'undefined') {return;}
            }
            temped[temped.length] = value;
        });
    }
    var edsort = new Array;
    var max_to_show = selectionplayerlimit;
    var skip = (page - 1) * max_to_show;
    var skip_count = 0;
    $for (temped.sort(function(a,b) {return b[sortc] - a[sortc];}), function(key,value) {  
        if ( !team_limit && element_filter != 'watchlist' && element_filter != 'dreamteam' && found == max_to_show) {return;}
        skip_count++;
        if (skip_count < skip) { return; }
        edsort[edsort.length] = value;
        found++;
    });
    // Previous and next links
    var previous_link = $ismjq('#ism_element_navigation_previous');
    var next_link = $ismjq('#ism_element_navigation_next');
    if (!team_limit && element_filter != 'watchlist' && element_filter != 'dreamteam' && page > 1) {   
        previous_link.attr("href", 'javascript:get_element_data('+(page-1)+')');
        previous_link.show().addClass('ism_show_nav_button');
    }
    else {
        previous_link.hide().removeClass('ism_show_nav_button');
    }
    if ( !team_limit && element_filter != 'watchlist' && element_filter != 'dreamteam' && found == max_to_show) {
        next_link.attr("href", 'javascript:get_element_data('+(page+1)+')');
        next_link.show().addClass('ism_show_nav_button');
    }
    else {
        next_link.hide().removeClass('ism_show_nav_button');
    } 

    display_element_data(edsort,sm[stat_filter]);
    
}
function selectedind(i){
  var price_rng = $ismjq("#ism_pricerange_filter").get(0);
  price_rng.options[i].selected = true;
}
// Displays element data list to allow selection
function display_element_data(newed,stat) {

    var elements;
    var tables = new Array;
    var table;
    var num_cols = 5;
    var stat_filter = $ismjq('#ism_stat_filter').val();
    var img_type = typeof(png_icons) != 'undefined' && png_icons > 0 ? 'png': 'gif';
    stat = stat ? stat : 10; 
   for (var i = 1; i <= numtypes; i++) { tables[i] = new Array;}
    if (mode == 'stats') {
        table = '<table width="100%" cellpadding="0" cellspacing="0" border="0" class="ism_table"><tr><th></th><th>T</th><th>V</th>';
        num_cols = 3;
        var have_stat = 0;
        $for (gs, function(key,value) {
            if (sm[value[0]] == stat) {
                have_stat = 1;
                return 'break;';
            }        
        });
        if (stat == _now_cost) have_stat = 1;
        $for (gs, function(key,value) {    

            if (!have_stat && stat != _total && sm[value[0]] == _minutes) return;
            table += '<th><a href="javascript:sort_stat_table(';
            table += value[0];
            table += ');">';
            table += value[1];
            table += '</a></th>';
            num_cols++;
        });
        if (sm[stat_filter] != _total) {
            table += '<th><a href="javascript:sort_stat_table(';
            table += 10;
            table += ');">';
            table += 'P';
            table += '</a></th>';
            num_cols++;
        }
        num_cols++;
        if (!have_stat) {
            table += '<th>*</th>';
        }
        table += '</tr>';
        $for(newed, function(key,value) {
            var s = '';
            s += '<td class="ism_element_name"><a href="javascript:draw_element_view('; 
            s += value[_id];
            s += ')">';
            s += value[_web_name];
            s += '</a></td><td>';
            s += td[value[_team_id]][1];
            s += '</td><td>';
            s += value[_now_cost].toFixed(1);
            s += '</td><td>';
            
            $for (gs, function (key2,value2) {
                if (!have_stat && stat != _total && sm[value2[0]] == _minutes) return;
                s += value[sm[value2[0]]];
                s += '</td><td>';            
            });
            if (sm[stat_filter] != _total) {
                s += value[_total];
                s += '</td><td>';            
            }
            if (!have_stat) {
                s += value[stat];
                s += '</td>';
            }
            tables[value[_element_type_id]][tables[value[_element_type_id]].length] = s;
        });
    } else {
        table = '<table width="100%" cellpadding="0" cellspacing="0" border="0" class="ism_element_selection">';
        $for(newed, function(key,value) {
            var s = '';
            s += '<td class="ism_element_info"><a href="javascript:draw_element_view(';
            s += value[_id];
            s += ');">';
            s += '<img src="/images/';
            s += code;
            s += '/info';
            s += (value[_doubtful] ? 'poss' : value[_news] ? 'warn' : '');
            if (mode == 'selection') {
                s += '.'+img_type+'" /></a></td><td class="ism_element_name"><a href="javascript:add_element(';
            }
            else if (mode == 'transfer') {
                var extra_class = '';
                $for (pd, function(key2,value2)  {
                    if (value2[0] == value[_id]) {
                        extra_class = 'ism_inTeam';
                        return;
                    }
                });
                for (var j = 1; j < squadsize; j++) {
                    var el = $ismjq('#ism_selection_'+j).val();
                    if (el == value[_id]) {
                        extra_class = 'ism_inTeam';
                        break;
                    }
                }

                s += '.'+img_type+'" /></a></td><td class="ism_element_name '+ extra_class+'"><a href="javascript:add_element(';
            }
            else if (mode == 'watchlist') {
                s += '.'+img_type+'" /></a></td><td class="ism_element_name"><a href="javascript:add_element_watchlist('; 
            }
            else if (mode == 'eventwildcard') {
                s += '.'+img_type+'" /></a></td><td class="ism_element_name"><a href="javascript:ISMFG.add_element_wildcard('; 
            }
            s += value[_id];
            s += ')">';
            s += value[_web_name];
            s += '</a></td><td class="ism_element_team">';
            s += long_team_names ? td[value[_team_id]][0] : td[value[_team_id]][1];
            s += '</td><td class="ism_element_cost">';
            s += value[_now_cost].toFixed(1);
            s += '</td><td class="ism_element_stat" id="elid_';
            s += value[_id];
            s += '"><a href="javascript:show_form(';
            s += value[_id];
            s += ');">'
            s += value[stat]
            s += '</a></td>';
            tables[value[_element_type_id]][tables[value[_element_type_id]].length] = s;
        });
    }
    for (var i = 1; i <= numtypes; i++) {
        if (!tables[i].length) {continue;}
        if (typeof(extra_stat_filter_title) != 'undefined' && extra_stat_filter_title && mode != 'stats'){
            table += '<tr><td colspan="3';
            table += '"><h3 class="ism_element_type_header">';
            table += '<a href="javascript:;" onclick="';
            table += "$ismjq('#ism_pricerange_filter').val('');";
            table += "$ismjq('#ism_element_filter').val('et_"+i+"');";
            table += 'get_element_data(1);">';
            table += tn[i][1];
            table += ' &#187</a>';
            table += '<td><h3 class="ism_element_type_header">'+ price_txt +'</h3></td>';
            table += '<td><h3 class="ism_element_type_header">'+ value_txt +'</h3></td>';
        } else {
            table += '<tr><td colspan="';
            table += num_cols;
            table += '"><h3 class="ism_element_type_header">';
            table += '<a href="javascript:;" onclick="';
            table += "$ismjq('#ism_pricerange_filter').val('');";
            table += "$ismjq('#ism_element_filter').val('et_"+i+"');";
            table += 'get_element_data(1);">';
            table += tn[i][1];
            table += ' &#187</a>';
            table += '</h3></tr>';
        }
        var j  = 0;
        $for (tables[i], function(key,value) {
            table += ('<tr class="ism_row_' + j % 2 + '">' + value + '</tr>');
            j++;
      });
    }
    table += '</table>';
    if (typeof(extra_stat_filter_title) != 'undefined' && extra_stat_filter_title){
        var pos_team_option = $ismjq("#ism_element_filter").get(0);
        var txt_pos_team = pos_team_option.options[pos_team_option.selectedIndex].text;
        $ismjq('#ism_stat_filter_title').html('<b>'+ txt_pos_team +'</b> '+filtered_txt+' <b>'+sn[stat]+'</b>');
    } else {
        $ismjq('#ism_stat_filter_title').html(sn[stat]);
    }
    $ismjq('#ism_element_list').html(table);
    // PNG fixes
    if (typeof(jQuery.ifixpng) != 'undefined') {
        jQuery('#ism_element_list').find('img[src$=".png"]').ifixpng();
    }
}

// Sorts the stat_table by selecting a new stat_filter
function sort_stat_table(stat) {
    $ismjq('#ism_stat_filter').val(stat);
    get_element_data(1);

}

// Processes a request to add an element to a squad
function add_element(id) {

    if (ed[id] && !ed[id][_unavailable]) {

        var firstspot;
        var alreadychosen;

        // First let's find the firstspot
        var type = ed[_element_type_id];
        var start = 1;
        var stop = 0;
        for (var i = 1; i <=ed[id][_element_type_id]; i++) { 
            var lasttype = i - 1;
            if (lasttype > 0) {start += mxs[lasttype];}
            stop += mxs[i];
        }
        // Make sure not  have space
        for (var i = start; i <= stop; i++) {
            if (mode == 'selection') {
                if ($ismjq('#ism_selection_'+i).val() < 1 && !firstspot) {
                    firstspot = i;
                }
            } 
            else if (mode == 'transfer') {
                if ($ismjq('#ism_selection_'+i).val() == -1 && !firstspot) {
                    firstspot = i;
                }
            }
            // Selection2 or new transfer
            if ($ismjq('#ism_selection_'+i).val() == id) {
                alreadychosen = 1 
            }    
        }
        if (!firstspot) {
            alert(err_all_selected.replace(/%%position%%/,tn[ed[id][_element_type_id]][1]));
            return;
        }    
        if (alreadychosen) {
            alert(ed[id][_web_name] + " " + err_already_chosen);
            return;
        }

        // For transfer if we already have Element we should restore them in
        // that spot and set whoever is in their space to firstspot
        if (mode == 'transfer') {
            for (var i = 1; i <= squadsize; i++) {
                if (pd[i][_id] == id) {

                    // Who is in my way?
                    var in_my_way = $ismjq('#ism_selection_'+i).val();

                    // Reset
                    $ismjq('#ism_selection_'+i).val('');
                    draw_element(i);
                    if ($ismjq('#ism_purchase_price_'+i)) {
                        $ismjq('#ism_purchase_price_'+i).val(0);
                    }

                    // If we have replaced a -1 version of same Element then
                    // replace with '' - otherwise use in_my_way in the 
                    // firstspot position
                    if (in_my_way == -1 && i == firstspot) {
                        id = '';
                    }
                    else {
                        id = in_my_way;
                    }
                }
            }
        }

        $ismjq('#ism_selection_'+firstspot).val(id);
        if (id > 0) {
            if ($ismjq('#ism_purchase_price_'+firstspot)) {
                $ismjq('#ism_purchase_price_'+firstspot).val(ed[id][_now_cost]);
            }
        }
        draw_element(firstspot);
        validate_selection();
        if (current_view == 'element') switch_view(last_view);
    }
}

// Adds an element to the watch list
function add_element_watchlist(i) {
// return if the watchlist is full
    if ($ismjq("#ism_selection_"+watch_list_max).val() > 0) {
        alert(err_watch_limit);
        return;
    }

    var newel = ed[i];
    if (!newel) { return; } //return if the element doesn't exists
    var insert_at;

    for (var j=1; j<= watch_list_max; j++) {
        var thisel = $ismjq("#ism_selection_"+j).val();
        if (ed[thisel] && ed[thisel][_id] == i) { // alert if element is already selected
            alert(err_watch_already);
            return;
        }            
        // Add if next element is empty, same type and later team or later type
        if (!ed[thisel] ||
           (newel[_element_type_id] == ed[thisel][_element_type_id] &&
           newel[_team_id] < ed[thisel][_team_id] ) || newel[_element_type_id] < ed[thisel][_element_type_id]) {
            insert_at = j;
            break;
        }            
    }        
        
    for (var j = watch_list_max-1; j>=insert_at; j--) {
        var ne = j+1;
        var thisel = $ismjq("#ism_selection_"+j).val();
        if (thisel) {
            $ismjq("#ism_selection_"+ne).val(thisel); //add value to the hidden field
            draw_element(ne);
        }                            
    }
        
    $ismjq("#ism_selection_"+insert_at).val(i);
    draw_element(insert_at);
    $ismjq("#ism_callback_image").show();

}

// Processes request to remove an element from a squad
function remove_element(i) {
    if (i >= 1 && i <= squadsize) { 
        $ismjq("#ism_selection_"+i).val('');
        if ($ismjq("#ism_purchase_price_"+i)) {
            $ismjq("#ism_purchase_price_"+i).val(0);
        }
        draw_element(i);
        validate_selection();
    }    
}

// Processes request to remove an element from a watch list
function remove_element_watchlist(i) {
    if (i > watch_list_max || i < 1) { return; }
    if (i == watch_list_max) {
      $ismjq("#ism_selection_"+i).val('');
      $ismjq("#ism_data_"+watch_list_max).hide();
      $ismjq("#ism_callback_image").show(); 
      return;
    }
    for (var j = i; j < watch_list_max; j++) {
        var ne = j+1;
        var nextelval = $ismjq("#ism_selection_"+ne).val();
        if (nextelval) {
            $ismjq("#ism_selection_"+j).val(nextelval);
            draw_element(j);
        }
        else {
            $ismjq("#ism_selection_"+j).val('');
            $ismjq("#ism_data_"+j).hide();
        }
    }
    $ismjq("#ism_selection_"+watch_list_max).val('');
    $ismjq("#ism_data_"+watch_list_max).hide();
    $ismjq("#ism_callback_image").show(); 
}

// Processes request to cancel an element in transfer
function cancel_element(i) {
    if (i >= 1 && i <= squadsize) { 
        if (mode == 'transfer') {
          if ($ismjq("#ism_selection_"+i).val() > 0 && t_r_num != -1){//check if they're cancelling a transfer made
            t_r_num++;
          }
          if (t_r_num == -1 || t_r_num > 0){ ////unlimited or still have transfs left
            $ismjq("#ism_transf_remain_error").html('');
            if (t_r_num > 0){ ///have transfs left  
              if (typeof(lib_ism) != 'undefined') {
                $ismjq("#ism_transf_remain").html(t_r_num);
              }
              else {
                $ismjq("#ism_transf_remain").html(t_r_txt+' '+t_r_num);
              }
            }
          } else {
            if (typeof(ISMFG) != 'undefined') {
                if (ISMFG.vars.transfers_used_alert == 1) {
                    alert(t_r_error);
                    return;
                }
            }
            $ismjq("#ism_transf_remain_error").show();
            $ismjq("#ism_transf_remain_error").html(t_r_error);
            return;
          }
        }

        $ismjq("#ism_selection_"+i).val(-1);
        if ($ismjq("#ism_purchase_price_"+i)) {
            $ismjq("#ism_purchase_price_"+i).val(0);
        }
        draw_element(i);
        validate_selection();
    }    
}

// Resets selection
function reset_selection() {
    for (var i = 1; i <= squadsize; i++) {
        $ismjq("#ism_selection_"+i).val('');
        draw_element(i);
    }
    validate_selection();
}

// Validates selection
function validate_selection() {
  var valid = 1;
  var spent = 0;
  var errors = new Array;
  var teams = new Array;
  for (var i = 1; i <= numteams; i++) {teams[i] = 0;}
  var types = new Array;
  for (var i = 1; i <= numtypes; i++) {types[i] = 0;}
  var selected = new Array;
  check_transfers();
  $ismjq("#ism_transf_remain_error").html('');
  if (t_r_num != -1){
    if (typeof(lib_ism) != 'undefined') {
      $ismjq("#ism_transf_remain").html(t_r_num);
    }
    else {
      $ismjq("#ism_transf_remain").html(t_r_txt+' '+t_r_num);
    }
  }
  var elcopy = new Array;
  var transfer_cash = 0;
  for (var i = 1; i <= squadsize; i++) {
    var id = $ismjq("#ism_selection_"+i).val();
    if (mode == 'transfer') {
      if (!id) {
        elcopy[i] = pd[i][_id];
      }
    else {
      transfer_cash += pd[i][_selling_price];
      if (ed[id]) {
        elcopy[i] = id;
      }
    }    
    }
    else {
      elcopy[i] = id;
    }
    }
    if (!transfer_cash && mode == 'transfer') {
      errors[errors.length] = err_no_transfers;
      valid = 0;
    }
    var no_autocomplete =0;
    var has_incomplete_error = 0;
    for (var i = 1; i <= squadsize; i++) {        
      var id = elcopy[i];
      if (id == undefined || id < 1) {
        valid = 0;
        if (!has_incomplete_error) {
          errors[errors.length] = err_incomplete_squad;
          has_incomplete_error = 1;
        }
        continue;
      }
      if (!ed[id]) {
        valid = 0;
        continue;
      }
      if (mode == 'selection' || id != pd[i][_id]) {
        spent += ed[id][_now_cost];
      }    
      types[ed[id][_element_type_id]]++;
      teams[ed[id][_team_id]]++;
      if (selected[id] == 1) {
        errors[errors.length] = ed[id][_web_name] + " " + err_selected_twice;
        valid = 0;
      }
      selected[id] = 1;
    }
    for (var i = 1; i<= numtypes; i++) {
      if (types[i] != mxs[i]) {
        valid = 0;
      }
    }    
    for (var i = 1; i<= numteams; i++) {
      if (teams[i] > teamlimit[i]) {
        errors[errors.length] = err_team_limit.replace('%%team%%',td[i][0]);
        valid = 0;
        no_autocomplete = 1;
      }
    }    
    var thistospend = mode == 'transfer' ?  bank + transfer_cash  - spent: tospend - spent;
    thistospend += 0.0001;
    thistospend = thistospend.toFixed(1);
    $ismjq('#ism_tospend').html(thistospend);
    if (thistospend < 0) {
      $ismjq('#ism_tospend').removeClass().addClass('ism_spend_error');
      valid = 0;
      no_autocomplete = 1;
    }
    else {
      $ismjq('#ism_tospend').removeClass().addClass('ism_spend_ok');
    }
    if (errors.length) {
      $ismjq('#ism_errors').show();
      var txt = '';
      $for (errors,function(key,value) {
        txt += "<li>" + value + "</li>";
      });
      $ismjq('#ism_errors').html(txt);
      $ismjq('#ism_sb_current_status')
        .removeClass('ism_sb_ok')
        .addClass('ism_sb_error')
        ;
    }
    else {
      $ismjq('#ism_errors').hide();
      $ismjq('#ism_errors').html('');
    }
   if (mode == 'selection') {
      if (valid) {
        $ismjq('#ism_callback').attr("name",cb_add);
        $ismjq('#ism_callback_enterteam').unbind().bind("click", function(){
          $ismjq(this).hide();
        });
        $ismjq('#ism_callback_enterteam_top').unbind().bind("click", function(){
          $ismjq(this).hide();
        });
        $ismjq('#ism_callback_autocomplete').hide();
        $ismjq('#ism_callback_autocomplete_top').hide();
        $ismjq('#ism_callback_enterteam').show();
        $ismjq('#ism_callback_enterteam_top').show();
        $ismjq('#ism_sb_current_status')
            .removeClass('ism_sb_error')
            .addClass('ism_sb_ok')
        ;
      }
      else {
        $ismjq('#ism_callback').attr("name",cb_add);
        $ismjq('#ism_callback_autocomplete').unbind().bind("click", function(){
          autocomplete(); 
          return false;
        });
        $ismjq('#ism_callback_autocomplete_top').unbind().bind("click", function(){
          autocomplete(); 
          return false;
        });
        $ismjq('#ism_callback_enterteam').hide();
        $ismjq('#ism_callback_enterteam_top').hide();
         if (no_autocomplete){
            $ismjq('#ism_callback_autocomplete').hide();
            $ismjq('#ism_callback_autocomplete_top').hide();
         } else {
            $ismjq('#ism_callback_autocomplete').show();
            $ismjq('#ism_callback_autocomplete_top').show();
         }
      }
    }
    else if (mode == 'transfer') {
      if (valid){
        $ismjq('#ism_make_transfers_button').show();
        $ismjq('#ism_make_transfers_button_top').show();
        $ismjq("#ism_pitch_grid").addClass('ism_pitch_grid_unconfirmed');    
        $ismjq('#ism_sb_current_status')
            .removeClass('ism_sb_error')
            .addClass('ism_sb_ok')
        ;
      } else {
        $ismjq('#ism_make_transfers_button').hide();
        $ismjq('#ism_make_transfers_button_top').hide();
        $ismjq("#ism_pitch_grid").removeClass('ism_pitch_grid_unconfirmed');    
      }
        // Draw the new sb
        if (typeof(lib_ism.transfer_draw_sb) != 'undefined' 
        && lib_ism.vars.seltrans.transfer_type != undefined) {
            lib_ism.transfer_draw_sb();
        }
    }
}

// Wraps text to avoid corruption of display
function wrap_text(string){
  var char_old = '-';
  var char_new = '-<br />';
  var tmp_str = string.split(' ');
  var ret_testo;
  if (string.length < wrap_char) {return string;}
    for (var y=0;y<tmp_str.length;y++){                                // for each word without space
      var testo = '';
      if (tmp_str[y].length > wrap_char){
        if (tmp_str[y].indexOf(char_old) > -1){                        // if we have a letter like char_old, ie like the sign -
          tmp_str[y] = replace_string(tmp_str[y], char_old, char_new); // replace it with char_new
        } else {
          if(tmp_str[y].length > wrap_char+1){                         // if the word is greater than wrap_char+1
            for(var i=0; i<tmp_str[y].length; i++){                    // go letter by letter
              if ((i % wrap_char) == 0 && i > 0){ 
              // when reach the amount of letters as in "wrap_char" add char_new
                testo += char_new;  
              }
              testo += tmp_str[y].charAt(i);                           // add the letter to testo
            }
            tmp_str[y] = testo;
          }
        }
      } else {
        tmp_str[y] = tmp_str[y];
      }
    if (y == 0){
       ret_testo = tmp_str[y]+' ';
     } else {
       ret_testo += tmp_str[y]+' ';
    }
  }
  return (ret_testo);
}
function replace_string(in_txt, old_txt, new_txt) {
    return (in_txt.split(old_txt).join(new_txt));
}

// Drop a player from My Team
function drop(pos) {
    var has_subs = (play_size == squadsize ? 0 : 1);
    if (!has_subs) {return;}
    global_changed = 1;
    var sub_pos = 0;
    if (sub_like_for_like){
      sub_pos = sub_type_number(pos);
      if (sub_pos > 0){
        switch_players(pos,sub_pos);
      } else {
        if (num_dropped >= 3) return;
          dropped[pos] = 1;
          num_dropped++;
      }
    } else {  /// assume is footy and that position 1 is keeper
      if (squadsize == 12) {
        switch_players(pos,12);
      } else if (pos == 1) {
        switch_players(1,12);
      } else if (pos <= play_size) {
        if (num_dropped >= 3) return;
        dropped[pos] = 1;
        num_dropped++;
      }    
    }
    draw_myteam();
    return;
}

function sub_type_number(pos){
  if (pos > squadsize || pos > play_size) return;
  var sub_position = 0;
  for (var i = 1; i <= squadsize; i++) {
    // find out how many subs we have in each position and if only one return it
    if (i <= play_size) continue;
    if (ed[pos][_element_type_id] == ed[i][_element_type_id]){
      if (sub_position > 0 ){return (0);} // we have more than one, can't switch directly
      sub_position = i;
    }
  }
  return (sub_position);
}

// Reinstate a dropped player
function reinstate(pos) {
    if (dropped[pos]) {
        dropped[pos] = 0;
        num_dropped--;
    }    
    draw_myteam();
}

// Pick a sub to replace a dropped player
function pick(pos) {
    if (!num_dropped) return;
    if (pos < 13 || pos > squadsize) return;
    for (var i = 2; i <= play_size; i++) {
        if (dropped[i]) {
            dropped[i] = 0;
            switch_players(i,pos);
            num_dropped--;
            draw_myteam()
            break;
        }
    }
}

// Recalculate element array after switching players
function switch_players(out,sel) {
    $ismjq("#ism_selection_"+ed[out][_id]).attr('checked',false);
    $ismjq("#ism_selection_"+ed[sel][_id]).attr('checked',true);
    var tempe = ed[sel];
    ed[sel] = ed[out]; // Out takes same sub position
    if (ed[sel][_element_type_id] == tempe[_element_type_id]) { // Direct Swap
        ed[out] = tempe;
        return;
    }    
    // Have to re-order
    var newed = new Array();
    var newdropped = new Array();
    var changed = 0;
    var j = 1;
    for (var i = 1; i <= squadsize; i++) {
        if (i == out) continue;
        // j check for case when changing from no strikers
        if (!changed && (ed[i][_element_type_id] == tempe[_element_type_id] || j == play_size)) {
            newed[j] = tempe;
            newdropped[j] = 0;
            changed = 1;
            j++;
        }
        newed[j] = ed[i];
        newdropped[j] = dropped[i];
        j++;
    }    
    ed = newed;
    dropped = newdropped;
}

// My team back to original state
function reset_myteam() {
    global_changed = 0;
    num_dropped = 0;
    $ismjq("#ism_captain").val(captain_original);
    $for (ed_original, function(key,value) { ed[key] = value;});
    for (var i = 1; i <= squadsize; i++) {
        var val = i <= play_size ? true : false;
        $ismjq("#ism_selection_"+ed[i][_id]).attr('checked',val);
        if (dropped[i]){dropped[i] = 0;}
    }
    draw_myteam();
}



// Draw the graphical and data views
function draw_myteam() {
    var type_count = new Array;
    var shared_ism = document.getElementById('ism_overlay_profile') ? 1 : 0;
    // New window!
    if (shared_ism == 0) {
        shared_ism = document.getElementById('ism_eiw') ? 1 : 0;
    }
    for (var i = 2; i <= numtypes; i++) {
        type_count[i-2] = 0;
    }
    for (var i = 1; i <= squadsize; i++) {
        $ismjq("#ism_selection_"+ed[i][_id]).hide();
        $ismjq("#ism_xselection_"+ed[i][_id]).hide();
        if ($ismjq("#ism_selection_"+ed[i][_id]).attr('checked') == true) {
            if (ed[i][_element_type_id] != 1) {
                type_count[ed[i][_element_type_id] - 2]++;
            }
        }
    }
    var formation = type_count.join('');
    var grid = new Array;

    if (typeof(jsgrid) != 'undefined') {
        grid = jsgrid;
    } else if (formation == '123133') { // rugby s14 RWC
      grid[0] = [0,0,0,0,0,0,0,0];
      grid[1] = [0,0,1,0,2,0,0,16];
      grid[2] = [0,0,0,3,0,0,0,17];
      grid[3] = [0,0,4,0,5,0,0,18];
      grid[4] = [0,6,0,7,0,8,0,19];
      grid[5] = [0,0,9,0,0,0,0,20];
      grid[6] = [0,0,10,11,12,0,0,21];
      grid[7] = [0,13,0,14,0,15,0,22];
    } else if (formation == '14144'){ // rugby nrl
      grid[0] = [0,0,0,0,0,0,0,0,0];
      grid[1] = [0,1,0,2,0,0,0,3];
      grid[2] = [0,0,4,0,0,0,0,0];
      grid[3] = [0,5,6,7,0,0,0,8];
      grid[4] = [0,0,9,0,0,0,0,0];
      grid[5] = [0,0,10,11,12,0,0,13];
      grid[6] = [0,14,0,15,0,16,0,17];
    } else if (formation == '267'){ // AFL
      grid[0] = [0,0,0,0,0,0,0,0,0];
      grid[1] = [0,1,2,3,4,5,6,7,0];
      grid[2] = [0,13,15,9,11,12,8,14,10];
      grid[3] = [0,16,17,18,19,20,21,22,0];
      grid[4] = [0,0,0,0,0,0,0,0,0];
      grid[5] = [0,23,0,24,0,25,0,26,0];

    } else {
      grid[0] = [0,0,0,0,0,0];
      grid[1] = [0,0,0,1,0,0];
      if (formation == '253') {
        grid[grid.length] = [0,0,2,0,3,0];
        grid[grid.length] = [0,4,5,6,7,8];
        grid[grid.length] = [0,9,0,10,0,11];
      }
      else if (formation == '352') {
        grid[grid.length] = [0,0,2,3,4,0];
        grid[grid.length] = [0,5,6,7,8,9];
        grid[grid.length] = [0,0,10,0,11,0];
      }
      else if (formation == '343') {
        grid[grid.length] = [0,0,2,3,4,0];
        grid[grid.length] = [0,5,6,0,7,8];
        grid[grid.length] = [0,0,9,10,11,0];
      }
      else if (formation == '451') {
        grid[grid.length] = [0,2,3,0,4,5];
        grid[grid.length] = [0,6,7,8,9,10];
        grid[grid.length] = [0,0,0,11,0,0];
      }
      else if (formation == '442') {
        grid[grid.length] = [0,2,3,0,4,5];
        grid[grid.length] = [0,6,7,0,8,9];
        grid[grid.length] = [0,0,10,0,11,0];
      }
      else if (formation == '433') {
        grid[grid.length] = [0,2,3,0,4,5];
        grid[grid.length] = [0,0,6,7,8,0];
        grid[grid.length] = [0,9,0,10,0,11];
      }
      else if (formation == '532') {
        grid[grid.length] = [0,2,3,4,5,6];
        grid[grid.length] = [0,7,0,8,0,9];
        grid[grid.length] = [0,0,10,0,11,0];
      }
      else if (formation == '523') {
        grid[grid.length] = [0,2,3,4,5,6];
        grid[grid.length] = [0,0,7,0,8,0];
        grid[grid.length] = [0,9,0,10,0,11];
      }
      else if (formation == '541') {
        grid[grid.length] = [0,2,3,4,5,6];
        grid[grid.length] = [0,7,8,0,9,10];
        grid[grid.length] = [0,0,0,11,0,0];
      }
      else if (formation == '550') {
        grid[grid.length] = [0,2,3,4,5,6];
        grid[grid.length] = [0,7,8,9,10,11];
        grid[grid.length] = [0,0,0,0,0,0];
      }
      if (squadsize == 15) {
        grid[5] =  [0,0,12,13,14,15];
      }
      else if (squadsize == 12) {
        grid[5] =  [0,0,0,0,0,12];
      }
   }
    var captain  = $ismjq("#ism_captain").val(); // id of player who is captain
    if (captain != captain_original) global_changed = 1;
    for (var i = 1; i <= numtypes + 1; i++ ) {
      if (i > grid.length - 1) continue;
      if (!grid[i]){continue;}
      for (var j = 1; j <= 10; j++) {
        if (!$ismjq("#ism_selection_"+i+"-"+j)) {continue;}
        if (grid[i][j]) { // We need to write a player here
         var p = grid[i][j];
          var e = ed[p];
            if (shared_ism) {
                jQuery("#ism_selection_"+i+"-"+j).css("visibility", "visible");
            }
            else {
                $ismjq("#ism_selection_"+i+"-"+j).show();
            }
            if (dropped[p]) { // Player has been dropped
              $ismjq("#ism_selection_"+i+"-"+j+"_shirt").attr({src:si[0].src, alt:si[0].alt, title:si[0].alt});
              if (typeof(png_shirts) != 'undefined' && png_shirts){
                if (typeof(jQuery.ifixpng) != 'undefined') {
                  // Done at end                  
                  //jQuery("#ism_selection_"+i+"-"+j+"_shirt").ifixpng();
                }
                else {
                  jQuery("#ism_selection_"+i+"-"+j+"_shirt").pngfix();}
                }
              $ismjq("#ism_selection_"+i+"-"+j+"_action").attr("href", 'javascript:reinstate('+p+');');
              $ismjq("#ism_data"+"_"+p+"_action").attr("href", 'javascript:reinstate('+p+');');
              $ismjq("#ism_selection_"+i+"-"+j+"_action_image").attr("src", image_out_canc.src);
              $ismjq("#ism_data_"+p+"_action_image").attr("src", image_out_canc.src);
              $ismjq("#ism_selection_"+i+"-"+j+"_name").toggleClass('ism_dropped');
              $ismjq("#ism_data_"+p+"_name").toggleClass('ism_dropped');
            } 
            else { // Write shirt
              if (e[_element_type_id] == 1) {
                 $ismjq("#ism_selection_"+i+"-"+j+"_shirt").attr("src", gsi[e[_team_id]].src);
              } else {
                 $ismjq("#ism_selection_"+i+"-"+j+"_shirt").attr("src", si[e[_team_id]].src);
              }
              $ismjq("#ism_selection_"+i+"-"+j+"_shirt").attr("alt", si[e[_team_id]].alt);
              $ismjq("#ism_selection_"+i+"-"+j+"_shirt").attr("title", si[e[_team_id]].alt);
              if (typeof(png_shirts) != 'undefined' && png_shirts){
                if (typeof(jQuery.ifixpng) != 'undefined') {
                  // Done at end                  
                  //jQuery("#ism_selection_"+i+"-"+j+"_shirt").ifixpng();
                }
                else {
                  jQuery("#ism_selection_"+i+"-"+j+"_shirt").pngfix();
                }
              }
              $ismjq("#ism_selection_"+i+"-"+j+"_name").removeClass('ism_dropped');
              $ismjq("#ism_data_"+p+"_name").removeClass();
              if (p <= play_size) { // Is currently a starter
                var can_drop = 0;
                if ((num_dropped < 3 || e[_element_type_id] == 1) && e[_id] != captain && (squadsize != 12 || e[_element_type_id] != 1)) {
                  can_drop = 1;
                }
                 if (formation == '14144' ) { //NRL
                   can_drop = 0;
                 }

                if ( can_drop ) { // Can be dropped 

                  $ismjq("#ism_selection_"+i+"-"+j+"_action").attr("href", 'javascript:drop('+p+');');
                  $ismjq("#ism_data_"+p+"_action").attr("href", 'javascript:drop('+p+');');
                  $ismjq("#ism_selection_"+i+"-"+j+"_action_image").attr("src",image_out.src);
                  $ismjq("#ism_data_"+p+"_action_image").attr("src", image_out.src);
                  $ismjq("#ism_selection_"+i+"-"+j+"_action").show();
                  $ismjq("#ism_data_"+p+"_action").show();
                } else { // Can't be dropped
                  $ismjq("#ism_selection_"+i+"-"+j+"_action").hide();
                  $ismjq("#ism_data_"+p+"_action").hide();
                }
              } else { // Is currently a sub
                if (typeof(no_sub_text) != 'undefined' && no_sub_text){
                    $ismjq("#ism_selection_"+i+"-"+j+"_stat").html('');
                } else if (formation != '2123133' && formation != '14144'&& formation != '7267'){                
                    $ismjq("#ism_selection_"+i+"-"+j+"_stat").html(wrap_text(tn[e[_element_type_id]][0]));
                }
                if (num_dropped && e[_element_type_id] > 1) { // Can be added
                  $ismjq("#ism_selection_"+i+"-"+j+"_action").attr("href",'javascript:pick('+p+');');
                  $ismjq("#ism_data_"+p+"_action").attr("href",'javascript:pick('+p+');');
                  $ismjq("#ism_selection_"+i+"-"+j+"_action_image").attr("src",image_in.src);
                  $ismjq("#ism_data_"+p+"_action_image").attr("src",image_in.src);
                  $ismjq("#ism_selection_"+i+"-"+j+"_action").show();
                  $ismjq("#ism_data_"+p+"_action").show();
                } else { // Can't be added
                  $ismjq("#ism_selection_"+i+"-"+j+"_action").hide();
                  $ismjq("#ism_data_"+p+"_action").hide();
                }
              }    
            }
            var el_link = shared_ism ? e[_id] : p;
            $ismjq("#ism_selection_"+i+"-"+j+"_info_link").attr("href",'javascript:draw_element_view('+el_link+')');
            $ismjq("#ism_data_"+p+"_info_link").attr("href",'javascript:draw_element_view('+el_link+')');
            if (e[_doubtful]) {
              $ismjq("#ism_selection_"+i+"-"+j+"_info_image").attr("src", infoposs_image.src);
              $ismjq("#ism_data_"+p+"_info_image").attr("src", infoposs_image.src);
            } else if (e[_news]) {                
              $ismjq("#ism_selection_"+i+"-"+j+"_info_image").attr("src",infowarn_image.src);
              $ismjq("#ism_data_"+p+"_info_image").attr("src", infowarn_image.src);
            } else {
              $ismjq("#ism_selection_"+i+"-"+j+"_info_image").attr("src",info_image.src);
              $ismjq("#ism_data_"+p+"_info_image").attr("src", info_image.src);
            }
              var dti = $ismjq("#ism_selection_"+i+"-"+j+"_dreamteam_image");
              var dtid = $ismjq("#ism_data_"+p+"_dreamteam_image");
              if (e[_in_dreamteam]) {
                if (dti && dtid) {
                  dti.show();
                  dtid.show();
                }
              } else {
                if (dti && dtid) {
                  dti.hide();
                  dtid.hide();
                }
              }
              $ismjq("#ism_selection_"+i+"-"+j+"_info_image").show();
              $ismjq("#ism_data_"+p+"_info_image").show();
              $ismjq("#ism_selection_"+i+"-"+j+"_name").html(wrap_text(e[_web_name]));
              var data_name = e[_web_name];
              if (e[_id] == captain) {
                data_name += " (C)";
                $ismjq("#ism_selection_"+i+"-"+j+"_stat").html('(C)');
              } else if (p <= play_size)  {
                $ismjq("#ism_selection_"+i+"-"+j+"_stat").html('');
              }
                $ismjq("#ism_data_"+p+"_name").html(data_name);
                $for (es, function(key,value) {
//writing the data view
                    if (key == 0 && typeof(data_shirts) != 'undefined' && data_shirts){ // assume the position is in position 0
                         $ismjq("#ism_data_"+p+"-"+key+"-stat").html(eval("tn[e[_element_type_id]][0]"));
                        if (e[_element_type_id] == 1) {
                            $ismjq("#ism_selection_data_"+p+"_shirt").attr("src", gsid[e[_team_id]].src);
                        } else {
                            $ismjq("#ism_selection_data_"+p+"_shirt").attr("src", sid[e[_team_id]].src);
                        }
                        $ismjq("#ism_selection_data_"+p+"_shirt").attr("alt", sid[e[_team_id]].alt);
                    } else {
                        $ismjq("#ism_data_"+p+"-"+key+"-stat").html(eval("e[_"+value+"]"));
                    }

                    if (dropped[p]){
                      $ismjq("#ism_data_"+p+"-"+key+"-stat").addClass('ism_dropped');
                    } else {
                      $ismjq("#ism_data_"+p+"-"+key+"-stat").removeClass();
                    }
                });
            }
            else { // No player to display
                if (shared_ism) {
                    jQuery("#ism_selection_"+i+"-"+j).css("visibility", "hidden");
                }
                else {
                    $ismjq("#ism_selection_"+i+"-"+j).hide();
                }
            }
        }
    }

   // Write captain option list
    var cap = $ismjq("#ism_captain").get(0);
    cap.options.length = 0;
    for (var i = 1; i <= play_size; i++) {
        var o = new Option;
        o.value = ed[i][_id];
        o.text = ed[i][_web_name];
        if (dropped[i]) {
            o.className = 'ism_dropped';
            o.disabled = true;
        }    
        cap.options[i-1] = o;
        if (ed[i][_id] == captain) cap.options[i-1].selected = true;
    }
    if (!num_dropped && global_changed){
      $ismjq("#ism_team_changes_button").show();
      $ismjq("#ism_team_changes_button_top").show();
      $ismjq('#ism_myteam_deadline').hide();
      $ismjq("#ism_pitch_grid").addClass('ism_pitch_grid_unconfirmed');    
      $ismjq("#ism_pitch_5 td").addClass('ism_pitch_5_unconfirmed'); 
      $ismjq('#ism_sb_current_status')
          .removeClass('ism_sb_error')
          .addClass('ism_sb_ok')
     ;
   } else {
      $ismjq("#ism_team_changes_button").hide();
      $ismjq("#ism_team_changes_button_top").hide();
      $ismjq('#ism_myteam_deadline').show();
      $ismjq("#ism_pitch_grid").removeClass('ism_pitch_grid_unconfirmed');    
      $ismjq('#ism_sb_current_status')
          .removeClass('ism_sb_ok')
      ;
    }
    if (global_changed){
      $ismjq("#ism_subsorder").hide();
    } else {
      $ismjq("#ism_subsorder").show();
    }
    if (typeof(jQuery.ifixpng) != 'undefined') {
      jQuery("#ism_myteam_selects").find('img[src$=".png"]').ifixpng();
      jQuery("#ism_pc_main").find('img[src$=".png"]').ifixpng();
    }
}


// Draws the element view
function draw_element_view(id) {
//create the link to view the rugby element is exists

    $ismjq('#ism_extra_stats_link').attr('href','javascript:open_ism_rugby_window("ism_rugby_view",'+id+');');

    $ismjq('#ism_element_view_name').html(ed[id][_web_name]);
    if ($ismjq('#ism_element_image')) {
      // Up to the game to declare this function
      $ismjq('#ism_element_image').attr("src",element_image(ed[id]));
    }
    if (live) {
      $ismjq('#ism_element_iframe').attr("src",'/'+defview+'/'+ed[id][_id]+'.html');
    }
    else {
      $ismjq('#ism_element_iframe').attr("src",'/M/iframe.mc?elid='+ed[id][_id]+'&elview='+defview);
    }
    $for (eshow, function(key,value) {
        if (value == 'position') {
          $ismjq('#ism_element_stat_'+key).html(tn[ed[id][_element_type_id]][0]);
        } 
        else if (value == 'team_name') {
          $ismjq('#ism_element_stat_'+key).html(td[ed[id][_team_id]][0]);
        } 
        else {
          $ismjq('#ism_element_stat_'+key).html(eval("ed[id][_"+value+"]"));
        }    
    });
    $for (eshowp, function(key,value) {
      if (value == 'event_total' || value == 'total') {
        $ismjq('#ism_element_stat_x_'+key).html(eval("ed[id][_"+value+"]"));
      } 
      else {
        $ismjq('#ism_element_stat_p_'+key).html(eval("ed[id][_"+value+"]"));
        if (ex[id] && ex[id][value]) {
          $ismjq('#ism_element_stat_x_'+key).html(ex[id][value]);
        } else {
          $ismjq('#ism_element_stat_x_'+key).html('');
        }
      }    
    });    

    // Code to provide add / delete watch list functionality
    if (logged_in && $ismjq('#ism_button_add_wl')) {
      $ismjq('#ism_button_add_wl').hide();
      $ismjq('#ism_button_del_wl').hide();
      $ismjq('#ism_wl_too_many').hide();
      var found = 0;
      $for (wl, function(key,value) {
        if (value == ed[id][_id]) {
          var params = {};                
          params[$ismjq('#ism_button_del_wl').children("input[@type=hidden]").attr('name')] = ed[id][_id];
          $ismjq('#ism_button_del_wl').children("input[@type=button]").unbind().bind("click", function(){
            $ismjq.post("/M/ajax", params,
            function(data) {
              wl.splice(key,1);
              $ismjq('#ism_button_del_wl').hide();
              if ($ismjq('#ism_element_filter').val() == 'watchlist') {
                get_element_data();
              }
            });
          });
          $ismjq('#ism_button_del_wl').show();
          found = 1;
          return 'break;';
        }
      });
      if (!found) {
        if ( wl.length >= watch_list_max) {
          $ismjq('#ism_wl_too_many').show();
        } else {
          var params = {};                
          params[$ismjq('#ism_button_add_wl').children("input[@type=hidden]").attr('name')] = ed[id][_id];
          $ismjq('#ism_button_add_wl').children("input[@type=button]").unbind().bind("click", function(){
            $ismjq.post("/M/ajax", params,
            function(data) {
              wl.splice(0,0,ed[id][_id]);
              $ismjq('#ism_button_add_wl').hide();
              if ($ismjq('#ism_element_filter').val() == 'watchlist') {
                get_element_data();
              }
            });
          });
          $ismjq('#ism_button_add_wl').show();
        }
      }
    }
    open_ism_window('#ism_element_view');
}
function player_view() {
    $ismjq('#ism_fixture_view').hide();
    $ismjq('#ism_player_view').show();
}

function fixture_view() {
    $ismjq('#ism_player_view').hide();
    $ismjq('#ism_fixture_view').show();
}

function confirm_submit(message,button) {
    $ismjq(button).hide();
    if (confirm(message)) {
      return true;
    }
    else {            
      $ismjq(button).show();
      return false;
    }    
}

function open_ism_window(window_id) {
  $ismjq(window_id).css('z-index',101).show();    
}

function close_ism_window(window_id) {
    $ismjq(window_id).hide();
}

function autocomplete(){
    var filter = _now_cost;

    // Take local copies which can be manipulated to help with autocomplete
    var element_ids_by_type_local = new Array();
    var tospend_local = tospend;

    var errors = new Array();

    var number_of_teams_selected = new Array();
    for (var i = 1; i <= numteams; i++) number_of_teams_selected[i] = 0;

    var number_of_types_needed = new Array();
    for (var i = 1; i <= numtypes; i++) {
        number_of_types_needed[i] = min_element_selected_by_type[i];
    }

    var elements_needed = squadsize;

    var element_selected = new Array();
    var position_selected = new Array();

    var weighted_avg_element_cost_by_type = new Array;;

    // Consider what we already have
    for (var i = 1; i <= squadsize; i++) {
        var element_id = $ismjq("#ism_selection_"+i).val();
        if (ed[element_id]) {
            var element = ed[element_id];
            tospend_local -= element[_now_cost];
            number_of_types_needed[element[_element_type_id]]--;
            number_of_teams_selected[element[_team_id]]++;
            element_selected[element[_id]] = 1;
            position_selected[i] = 1;
            elements_needed--;
        }
    }
    if (elements_needed < 1) return;

    // Randomize and filter the element list
    for (var i = 1; i <= numtypes; i++) {
        element_ids_by_type_local[i] = element_ids_by_type[i];
        element_ids_by_type_local[i] = randarray(element_ids_by_type_local[i]);
        element_ids_by_type_local[i] = sortarray(element_ids_by_type_local[i],filter);
        weighted_avg_element_cost_by_type[i] = avg_element_cost_by_type[i];
    }

    var average_spend = 0; // If we bought average this is what it would cost
    for (var i = 1; i <= numtypes; i++) {
        if (number_of_types_needed[i] < 1) continue;
        average_spend += (weighted_avg_element_cost_by_type[i] * number_of_types_needed[i]);
    }

    for (var i = 1; i <= numtypes; i++) {
        if (number_of_types_needed[i] < 1) continue;
        weighted_avg_element_cost_by_type[i] = avg_element_cost_by_type[i] * (tospend_local / average_spend);
    }

    var type_needed = 0;
    var adjust = 0;
    for (var i = 1; i <= squadsize; i++) {
        if (position_selected[i]) continue;
        // Find what type we need
        for (var j = 1; j <= numtypes; j++){
            if (number_of_types_needed[j] > 0){
                type_needed = j;
                break;
            }
        }
        var maxcost = (weighted_avg_element_cost_by_type[type_needed] + adjust);

        $for (element_ids_by_type_local[type_needed],function(key,value) {

            var element = ed[value];

            // Reasons why we can't choose this Element
            if (element[_now_cost] > tospend_local) return;
            if (element[_now_cost] > maxcost) return;
            if (element[_unavailable] != 0) return;
            if (element[_news] != 0) return;
            if (number_of_teams_selected[element[_team_id]] >= teamlimit[element[_team_id]]) return;
            if (element_selected[element[_id]]) return;

            // This is the one
            element_selected[element[_id]] = 1;
            number_of_teams_selected[element[_team_id]]++;
            number_of_types_needed[element[_element_type_id]]--;
            tospend_local -= element[_now_cost];
            add_element(element[_id]);

            //adjust if we spent less than our maxcost
            adjust = (maxcost - element[_now_cost]);
            return 'break;';
        });
    }
    element_ids_by_type_local = '';
    tospend_local = '';
}

function randomiser(numb) {
  var random = Math.round(Math.random()*numb);
  return random;
}

function randarray(arr){
  var randNum;
  var tempNum;
  for (var i = arr.length-1; i>=0 ; i--){
    randNum = randomiser(i);
    tempNum = arr[i];
    arr[i] = arr[randNum];
    arr[randNum] = tempNum;
  }
  return arr;
}

function sortarray(arr,fi){
    var edsort = new Array();
    var filt = fi ? fi : _now_cost;
    $for (arr.sort(function(a,b) {return ed[b][filt] - ed[a][filt];}), function(key,value) {
       edsort[edsort.length] = arr[key];
      });
    return edsort;
}

function change_tour(clo,ope) {
    var tour_close = $ismjq("#ism_tour_"+clo);
    var tour_open =  $ismjq("#ism_tour_"+ope);
    if (tour_close) {
        tour_close.hide();
    }
    if (tour_open) {
        tour_open.show();
    }
}
function show_form(id) {
    var myRow = $ismjq('#elid_'+id).parent();
    // Do we already have data?
    var already_have = 0;
    myRow.next('.ism_player_form').each(function(i) {
        if ($ismjq(this).is(':visible')) {
          $ismjq('.ism_player_form').hide(); // hide them all
        } 
        else if (!already_have){
          $ismjq('.ism_player_form').hide(); // hide them all
          $ismjq(this).show();
        }
        already_have = 1;
    });

    if (already_have) {
        return;
    }
    $ismjq('.ism_player_form').hide(); // hide them all
    if (live) {
        $ismjq.get("/profiles/form_"+id+".html",
            function(data){
                myRow.after(data);
            }
        );
    }
    else {
        $ismjq.post("/M/element_form.mc",
            { id: id },
            function(data){
                myRow.after(data);
            }
        );
    }
}
function check_transfers() {
  if (t_r_num == -1) return; // Unlimited so don't care
  t_r_num = t_r_num_org; // transfers left 
  for (var i = 1; i <= squadsize; i++) {
    if ($ismjq("#ism_selection_"+i).val() == -1 || $ismjq("#ism_selection_"+i).val() > 0){
      t_r_num--;
    }
  }
}
function open_ism_rugby_window(window_id, elid) {
  if (window_id == 'ism_rugby_view' && elid){
// this to fix the object bug in ie
    var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
    var isWin = (navigator.appVersion.indexOf("Windows") != -1) ? true : false;
    var win_type = (isIE && isWin) ? 'iframe' : 'object';
    var link_type = (isIE && isWin) ? 'src' : 'data';
    var type_exclude = (isIE && isWin) ? ' ' : 'type="text/html"';
    if (live) {
      $ismjq('#ism_rugby_popup').html('<'+win_type+' id="ism_obj2" '+type_exclude+' '+link_type+'="/'+defview+'/'+elid+'_rugby.html"><\/'+win_type+'>');
    }
    else {
      $ismjq('#ism_rugby_popup').html('<'+win_type+' id="ism_obj2" '+type_exclude+' '+link_type+'="/M/_element_display_rugby.mc?elid='+ elid +'&amp;elview=fixtures"><\/'+win_type+'>');
    }
  }
    close_ism_window('#ism_element_view');
    open_ism_window('#'+window_id);

}

function close_ism_rugby_window(window_id) {
  $('#'+window_id).hide();
}
