(function() {

  // bam.loadSync(bam.homePath + "bam.datagrid.v1.js");
  bam.loadSync(bam.homePath + "bam.url.js");
  bam.loadSync(bam.homePath + "bam.popModule.js");
  bam.loadSync(bam.homePath + "bam.xml.js");

  var DT = bam.datetime,
      getQueryResults   = bam.util.getQueryResults,
      countQueryResults = bam.util.countQueryResults;

  
  playerbio = {}; // global

  playerbio.NUM_AWARDS_IN_A_ROW = 3;
  playerbio.TOTAL_NUM_NEWS_STORIES = 7;
  // @allison Removed:
  // playerbio.DIVIDE_ROWS = 5;

  playerbio.player_personal_info = (function(){
  	//var _curr_url_obj = new bam.url.Location(window.location);
  	//var _player_id = _curr_url_obj.getParam("player_id") ? _curr_url_obj.getParam("player_id") : "";
  	var _self = {
  		//player_id : _player_id,
  		player_info_url : function() {
  							if (globals.player_id) {
  								var info_url = "/lookup/json/named.player_info.bam?sport_code=%27mlb%27";
  								info_url += "&player_id=%27"+globals.player_id+"%27";
  								return info_url;
  							} else {
  								return false;
  							}
  						},
  		player_obj : function(data) {

  			var row = data.player_info.queryResults.row;
  			var playa =  {
  				player_id:              row.player_id || "",
  				birth_date:             row.birth_date || "",
  				birth_city:             row.birth_city || "",
  				birth_state:            row.birth_state || "",	
  				birth_country:          row.birth_country || "",	
  				height_feet:            row.height_feet || "",
  				height_inches:          row.height_inches || "",
  				weight:                 row.weight || "",
  				display_name:           row.name_display_first_last_html || "",
  				primary_position_txt:   row.primary_position_txt || "",
  				stat_type:              (row.primary_position=="1") ? "2": "1",
  				bats:                   row.bats || "",
  				pro_debut_date:         row.pro_debut_date || "",
  				college:                row.college || "",
  				tosses:                 row["throws"] || "",
  				team_code:              row.team_code || "",
  				club_code:              row.file_code || "",
  				team_id:                row.team_id || "",
  				team_name:              row.team_name || "",
  				name_first:             row.name_first || "",
  				name_middle:            row.name_middle || "",
  				name_last:              row.name_last || "",
  				name_nick:              row.name_nick || "",
  				status:                 row.status || "",
  				jersey_number:          row.jersey_number || ""		
  			};
        // @todo find a better way to access in postseason table than adding to globals?
  			globals.playerStatus = playa.status;
				globals.teamId = playa.team_id;				
  			if ((!globals.statType) || (globals.statType == "null")) {
  				globals.statType = playa.stat_type;
  			}
  			if (flags.is_historical == "true") {
  				playerbio.build_player_info.top_left_historical(playa);
				if ((flags.cms_info != "false") && (flags.cms_info)) {
  					playerbio.lookup_urls.cms_info_query();
  				} else {
  					playerbio.build_player_info.no_cms_data_fallback();
  				}
  			} else {
  				playerbio.build_player_info.top_bio_info(playa);
  				playerbio.build_player_info.large_photo(playa);
  			}
  			//lookup_urls.getDataUrl(playa);
  		}
  	}; //end self
  	return _self;
  })();

  playerbio.utils = (function () {

    // @allison Replaced:
    // var _dt = new Date();
    // var _curr_url_obj  =  new bam.url.Location(window.location);
    // with:
    var year = bam.url.parseQueryParameters()['year'] || (new Date()).getFullYear();

  	var _self = {

        // @allison Replaced:
        // get_year : function () {
        //  var this_year = _dt.getFullYear();
        //  var year = _curr_url_obj.getParam("year") ? _curr_url_obj.getParam("year") : this_year;
        //  return year;
        // },
        // with:
    		get_year : function () {
    			return year;
    		},
			
			ordinal : function(n) {
  				n = parseInt(n, 10);
  				return (n > 10 && n < 20) ? 'th' : ['th', 'st', 'nd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th'][n % 10];
			},

  			data_query : function (data_url, cb) {
  				$.ajax({
  						type: "GET",
  						url: data_url,
  						dataType: "json",
  						error: function() {
  							alert('error retrieving ' + data_url);
  						},
  						async: true,
  						success: cb					
  					});	
  			},

  			sort_object : function(obj,direction) {
  				var sortable = [];
  				if(typeof(obj) === "object" && !!obj) {
  					for (var y in obj) {
  						if (!obj.hasOwnProperty || obj.hasOwnProperty(y)) {
  							sortable.push([y, obj[y]]);
  						}
  					}
  				}
  				if (direction == "asc") {
  					sortable.sort(function(a, b) {return a[0] - b[0];});
  				} else {
  					sortable.sort(function(a, b) {return b[0] - a[0];});
  				}
  				return sortable;
  			},

  			launch_pop : function(iframe_src) {
  					if (iframe_src) {
  						bam.popModule.show({
  							htmlContent:"<iframe src='"+iframe_src+"' name='bio_iframe_name' id='bio_iframe' width='100%' height='375' frameborder='0'></iframe>",
  							width:600
  						});
  					}
  				},
  			is_empty_object : function(o) {
  				if(typeof(o) === "object" && !!o) {
    					for(var p in o) {
  						if (!o.hasOwnProperty || o.hasOwnProperty(p)) {
      						if (o[p] != o.constructor.prototype[p]) {
       			 				return false;
  							}
  						}
    					}
  				}
  				return true;
  			},
  			equalize_module_div_height : function(c_name) {
  				var heights = $("div."+c_name).map(function(){
  					return $(this).outerHeight(true);
  				});
  				var not_loaded_yet = false;
  				for (var j=0;j<heights.length;j++) {
  					if ((heights[j] === 0) || (heights[j] === undefined)) {
  						not_loaded_yet = true;
  					}
  				}
  				if (not_loaded_yet) {
  					return false;
  				} else {
  					heights.sort(function(a,b){ return b-a; });
  					$('div.'+c_name).each(function() { 
  						$(this).height(heights[0]);
  					});
  				}
  			}
  	}; //end self
  	return _self;
  })();

  playerbio.lookup_urls = (function(){
  		var _self = {
  			get_standings_query : function() {
  				var standings_url = "";
  				if (globals.player_id) {
  					if (globals.statType == 1) {
  						standings_url = "/lookup/json/named.mlb_individual_hitting_rank.bam?player_id="+globals.player_id;
  					} else {
  						standings_url = "/lookup/json/named.mlb_individual_pitching_rank.bam?player_id="+globals.player_id;
  					}
  					return standings_url;
  				} else {
  					return false;
  				}
  			},
  		undefined_photo_query : function() {
  				//var team_generic_photo_url = "/gen/"+clubProps[globals.cid].club+"/components/multimedia/photogallerygen.xml";
  				var team_generic_photo_url = "/gen/"+clubProps[globals.cid].club+"/team-related.xml";
  				$.ajax({
  					type: "GET",
  					url: team_generic_photo_url,
  					dataType: "xml",
  					async: false,
  					error : function () {
  						alert('error retrieving generic photo info: '+team_generic_photo_url);
  						return false;
  					},
  					success: function(_xdata) {			
  						var json = bam.xml.xmlToJSON(_xdata, {outputType: 1});
  							if(!!json) {
  								playerbio.build_player_info.team_photos(json);
  							}
  					}		
  				}); //end ajax call
  			},

  			undefined_news_query : function(number) {
  				var team_generic_news_url = "/gen/"+clubProps[globals.cid].club+"/components/news/headlinesgen.xml";
  				$.ajax({
  					type: "GET",
  					url: team_generic_news_url,
  					dataType: "xml",
  					async: false,
  					error : function () {
  						alert('error retrieving generic news info: '+team_generic_news_url);
  						return false;
  					},
  					success: function(_xdata) {			
  						var json = bam.xml.xmlToJSON(_xdata, {outputType: 1});
  							if(!!json) {
  								playerbio.build_player_info.team_news(json,number);
  							}
  					}		
  				}); //end ajax call
  			},

  			cms_info_query : function() {
  				//var cms_url = "/gen/team/players/xml/id_121347.xml";
  				var cms_url = "/gen/team/players/xml/id_"+globals.player_id+".xml";
  				$.ajax({
  					type: "GET",
  					url: cms_url,
  					dataType: "xml",
  					async: false,
  					error : function () {
  						//alert('error retrieving cms-based info');
  						playerbio.build_player_info.no_cms_data_fallback();
  					},
  					success: function(_xdata) {		
  						var json = bam.xml.xmlToJSON(_xdata, {outputType: 1});
  							if(!!json) {
  								playerbio.build_player_info.bio_link(json);
  								playerbio.build_player_info.build_news(json);
  								playerbio.build_player_info.build_video(json);
  								playerbio.build_player_info.build_photos(json);
  							}
  					}		
  				}); //end ajax call
  			},

  			/*player_info_query : function(info_url) {
  				$.ajax({
  					type: "GET",
  					url: info_url,
  					dataType: "json",
  					async: false,
  					error : function () {
  						alert('error retrieving player info');
  					},
  					success: function(data) {								
  						playerbio.player_personal_info.player_obj(data);
  					}		
  				}); //end ajax call
  			},*/

  			forty_man_query: function(r_y,team) {
  				if (r_y != globals.season) {
  					var historical_roster_url = _self.historical_forty_man_query(r_y,team);
  					playerbio.utils.data_query(historical_roster_url,function(data) {playerbio.build_team.historical_roster(data,r_y);});
  					return false;
  				} else {
  					var roster_query = "";
  					var team_info = team.split("_");
  					var t_id = team_info[0];
  					var league = team_info[1];
  					if (isNaN(parseInt(t_id,10))) {
  						roster_query =  "/lookup/json/named.roster_40.bam?file_code=%27"+t_id+"%27";
  					} else {
  						roster_query = "/lookup/json/named.roster_40.bam?team_id=%27"+t_id+"%27";
  					}
  					return roster_query;
  				}
  			},

  			historical_forty_man_query : function(r_y,team) {
  				var historical_roster_query = "";
  				if (!r_y || r_y == globals.season) {
  					r_y = globals.season;
  					var roster_query = _self.forty_man_query(r_y,team);
  					playerbio.utils.data_query(roster_query,function(data) {playerbio.build_team.roster(data,r_y);});
  					return true;
  				} else {
  					var team_info = team.split("_");
  					var t_id = team_info[0];
  					var league = team_info[1];
  					if (league == "American") {
  						league = "AL";
  					} else if (league == "National") {
  						league = "NL";
  					}
  					if (isNaN(parseInt(t_id,10))) {
  						historical_roster_query = "/lookup/json/named.historical_roster.bam?file_code='"+t_id+"'&league_code='"+league+"'&season="+r_y;
  					} else {
  						historical_roster_query = "/lookup/json/named.historical_roster.bam?team_id="+t_id+"&league_code='"+league+"'&season="+r_y;
  					}
  					return historical_roster_query;
  				}
  			},

  			/*fantasy_news_query : function () {
  				var fantasy_news_url = "/fantasylookup/json/named.wsfb_fantasy_news_byplayer.bam?playerid="+globals.player_id;
  				$.ajax({
  					type: "GET",
  					url: fantasy_news_url,
  					dataType: "json",
  					async: true,
  					error: function () {
  						alert('error retrieving data for fantasy news');
  					},
  					success: function(json) {												
  						playerbio.build_player_info.fantasy_news(json);
  					}						
  				});	

  			},*/

  			/*awards_query: function() {
  				var awards_query = "";
  				if (globals.player_id) {
  					awards_query = "/lookup/json/named.player_awards.bam?player_id="+globals.player_id;
  					$.ajax({
  						type: "GET",
  						url: awards_query,
  						dataType: "json",
  						async: true,
  						error: function () {
  							alert('error retrieving data for awards query');
  						},
  						success: function(json) {												
  							playerbio.build_player_info.awards(json);
  						}						
  					});	
  				} else {
  					return false;
  				}
  			},
  			*/

  			getDataUrl : function(year) {
  				if (!year) {
  					if (globals.season) {
  						year = globals.season;
  					} else {
  						year = playerbio.utils.get_year();
  					}
  				}
  				if (globals.player_id) {
  					var position="";
  					if ((!globals.statType) || (globals.statType == "null")) {
  						globals.statType = 1;
  					}
  					if (globals.statType == 1) {
  						position = "batting";
  					} else if (globals.statType == 2) {
  						position = "pitching";
  					}
  					var src_url = "/lookup/json/named.bio_page_"+position+".bam?sport_code=%27mlb%27&game_type=%27R%27&num_games=10&range=0&num_fantasy=5";
  					src_url += "&year="+year;
  					src_url += "&player_id=%27"+globals.player_id+"%27";
  				return src_url;

  				} else {
  					return false;
  				}
  			}

  		};
  		//_self.this_year = _dt.getFullYear();
  		//_self.curr_year = _self.curr_url_obj.getParam("year") ? _self.curr_url_obj.getParam("year") : _self.this_year;
  		return _self;
  })();

  playerbio.build_player_info = (function(){

  	var _self = {
  		no_team_or_player_photos_fallback : function() {
  			$("td#player_photo_module").empty();
  			var content_div = "<div width='245' style='margin:10px;'><h4>PHOTOS</h4><p>No photos available for this player.</p></div>";
  			$("td#player_photo_module").html(content_div);

  		},
  		no_team_or_player_headlines_fallback : function() {
  			$("td#player_news_module").empty();
  			var content_div = "<div width='245' style='margin:10px;'><h4>NEWS STORIES</h4><p>No news headlines available for this player.</p></div>";
  			$("td#player_news_module").html(content_div);
  		},
  		no_video_fallback : function() {
  			$("div#mw-vod-1").hide();
  			$("div#mw-vod-2").hide();
  		},
  		no_cms_data_fallback : function() {
  			$("a#bio_link").hide();
  			_self.no_video_fallback();
  			if ((flags.team_photos == "false") || (!flags.team_photos) ) {
  				_self.no_team_or_player_photos_fallback();
  			} else {
  				playerbio.lookup_urls.undefined_photo_query();
  			}
  			if ((flags.team_headlines == "false") || (!flags.team_headlines) ) {
  				_self.no_team_or_player_headlines_fallback();
  			} else {
  				playerbio.lookup_urls.undefined_news_query();
  			}
  			//utils.equalize_module_div_height("module");
  		},

  		bio_link : function(data) {
  			if (!data.playerbio[0].Text || flags.hide_bio) {
  		 		$("a#bio_link").hide();
  			} else {
  				$("a#bio_link").click(function () {
  					playerbio.utils.launch_pop("/components/team/player/bio_iframe.html?is_mug_shot="+flags.mug_shot+"&roster_cid="+globals.roster_cid+"&cid="+globals.cid+"&player_id="+globals.player_id);
  				});
  			}
  		},

  		team_photos : function(data) {
  			$("td#player_photo_module").empty();
  			var $hed = $("<h4></h4>").html("PHOTOS");
  			$("td#player_photo_module").append($hed);
  			var team_photos_arr = data.children[0].item[0].members[0].item;
  			var team_photos_arr_length = team_photos_arr.length;
  			var photos_arr = [];
  			for (var b=0;b<team_photos_arr_length;b++) {
  				//if (team_photos_arr[b].members !== undefined) {
  					//var team_photos_child_arr = team_photos_arr[b].members[0].item;
  					//var team_photos_child_arr_length = team_photos_child_arr.length;
  					//for (var a=0;a<team_photos_child_arr_length;a++) {
  						//if (team_photos_child_arr[a].type == "images") {

                // @allison Replaced:
                // var photos = {};
                // photos.height = team_photos_arr[b].height[0].Text;
                // photos.width = team_photos_arr[b].width[0].Text;
                // photos.caption = team_photos_arr[b].caption[0].Text;
                // photos.src = team_photos_arr[b].url[0].Text;
                // photos_arr.push(photos);
                // with:
                var photo = team_photos_arr[b];
  							photos_arr.push({
    							height:  photo.height[0].Text,
    							width:   photo.width[0].Text,
    							caption: photo.caption[0].Text,
    							src:     photo.url[0].Text
  							});

  						//}
  					//}
  				//}
  			}
  			var $photo_div_1 = $("<div></div>").attr("id","photo_1").addClass("blurb");
  			var $photo_div_2 = $("<div></div>").attr("id","photo_2").addClass("blurb");
  			var $img_1 = $("<img></img>").attr("src",photos_arr[0].src).attr("height","72").attr("width","96").attr("alt",photos_arr[0].caption);
  			//var $caption_1 = $("<span></span>").html(photos_arr[0].caption);
  			var $caption_1 = $("<span></span>").html("View Photos &gt;");
  			$photo_div_1.append($img_1).append($caption_1);
  			$("td#player_photo_module").append($photo_div_1);

  			if (photos_arr.length > 1) {
  				var $img_2 = $("<img></img>").attr("src",photos_arr[1].src).attr("height","72").attr("width","96").attr("alt",photos_arr[1].caption);
  				//var $caption_2 = $("<span></span>").html(photos_arr[1].caption);
  				var $caption_2 = $("<span></span>").html("View Photos &gt;");
  				$photo_div_2.append($img_2).append($caption_2);
  				$("td#player_photo_module").append($photo_div_2);
  			}
  		},

  		build_photos : function(data) {
  		  
  			$("td#player_photo_module").empty();
  			var $hed = $("<h4></h4>").html("PHOTOS");
  			$("td#player_photo_module").append($hed);
  			var plugins_arr = data.plugins[0].members;
  			var plugins_length = plugins_arr.length;
  			var photos_arr = [];
  			for (var p=0;p<plugins_length;p++) {
  				if (plugins_arr[p].key == "related-thumbs") {
  					var photo_items_arr = plugins_arr[p].item;
  					if (!photo_items_arr) {
  						if ((flags.team_photos == "false") || (!flags.team_photos) ) {
  							_self.no_team_or_player_photos_fallback();
  							return true;
  						} else {
  							playerbio.lookup_urls.undefined_photo_query();
  							return true;
  						}
  					} else {
  						var photo_items_arr_len = photo_items_arr.length;
  						for (var q=0;q<photo_items_arr_len;q++) {

                // @allison Replaced:
                // var photo = {};
                // photo.src = photo_items_arr[q].url[0].Text;
                // photo.width = photo_items_arr[q].width[0].Text;
                // photo.height = photo_items_arr[q].height[0].Text;
                // photo.caption = photo_items_arr[q].caption[0].Text;
                // photos_arr.push(photo);
                // with:
                var photo = photo_items_arr[q];
  							photos_arr.push({
    							height:  photo.height[0].Text,
    							width:   photo.width[0].Text,
    							caption: photo.caption[0].Text,
    							src:     photo.url[0].Text
  							});

  						}
  					}
  				}
  			}
  			var photo_gallery_popup_hrf = "";
  			if (flags.player_gallery) {
  				photo_gallery_popup_hrf = "javascript:popWin('/team/player_gallery/player_gallery.html?"+globals.player_id+"','playerGallery',725,600);";
  			}
  			var $photo_div_1 = $("<div></div>").attr("id","photo_1").addClass("blurb");
  			var $photo_div_2 = $("<div></div>").attr("id","photo_2").addClass("blurb");
  			var $popup_link = "";
  			if (photo_gallery_popup_hrf) {
  				$popup_link = $("<a></a>").attr("href",photo_gallery_popup_hrf);
  			}
  			var $img_1 = $("<img></img>").attr("src",photos_arr[0].src).attr("height","72").attr("width","96").attr("alt",photos_arr[0].caption);
  			//var $caption_1 = $("<span></span>").html(photos_arr[0].caption);
  			var $caption_1 = $("<span></span>").html("View Photos &gt;");
  			if ($popup_link) {
  				$caption_1.wrapInner($popup_link);
  			}
  			$photo_div_1.append($img_1).append($caption_1);
  			$("td#player_photo_module").append($photo_div_1);
  			if (photos_arr.length > 1) {
  				var $img_2 = $("<img></img>").attr("src",photos_arr[1].src).attr("height","72").attr("width","96").attr("alt",photos_arr[1].caption);
  				//var $caption_2 = $("<span></span>").html(photos_arr[1].caption);
  				var $caption_2 = $("<span></span>").html("View Photos &gt;");
  				if ($popup_link) {
  					$caption_2.wrapInner($popup_link);
  				}
  				$photo_div_2.append($img_2).append($caption_2);
  				$("td#player_photo_module").append($photo_div_2);
  			}
  		},

  		team_news : function(data,number) {
  			if ((!number) || (number == playerbio.TOTAL_NUM_NEWS_STORIES)) {
  				$("td#player_news_module").empty();
  				var $hed = $("<h4></h4>").html("NEWS STORIES");
  				$("td#player_news_module").append($hed);
  				var $expand_link = $("<a></a>").attr("href","javascript:void(0)").html("+expand").attr("id","expand_news");
  				if ((flags.expanded_news != "false") && (flags.expanded_news)) {
  					$("td#player_news_module").append($expand_link);
  				}
  				$("td#player_news_module").append("<br style='clear:both;' />");
  			}
  			var team_news_arr = data.members[0].item;
  			var team_news_arr_length = team_news_arr.length;
  			var news_arr = [];
  			for (var b=0;b<team_news_arr_length;b++) {
  				var news = {};
  				news.headline = team_news_arr[b].headline[0].Text;
  				news.url = team_news_arr[b].url[0].Text;
  				news_arr.push(news);
  			}
  			var $news_stories_list;
  			if ($("ul#news_stories_list li").length > 1) {
  				$news_stories_list = $("ul#news_stories_list");
  			} else {
  				$news_stories_list = $("<ul></ul>").attr("id","news_stories_list").addClass("bullet_square_black");
  				$("td#player_news_module").append($news_stories_list);
  			}
  			var nlen = news_arr.length;
  			var iterator_size = "";
  			if (nlen >= number) {
  				iterator_size = number;
  			} else {
  				iterator_size = nlen;
  			}
  			for (var c=0;c<iterator_size;c++) {
  				var $href = $("<a></a>").html(news_arr[c].headline).attr("href",news_arr[c].url);
  				var $list_item = $("<li></li>").append($href);
  				$news_stories_list.append($list_item);
  			}
  		},

  		build_news : function(data) {
  			$("td#player_news_module").empty();
  			var plugins_arr = data.plugins[0].members;
  			var plugins_length = plugins_arr.length;
  			var news_arr = [];
  			for (var p=0;p<plugins_length;p++) {
  				if (plugins_arr[p].key == "related-articles") {
  					var news_items_arr = plugins_arr[p].item;
  					if (!news_items_arr) {
  					 	if ((flags.team_headlines == "false") || (!flags.team_headlines) ) {
  							_self.no_team_or_player_headlines_fallback();
  							return true;
  						} else {
  							playerbio.lookup_urls.undefined_news_query(playerbio.TOTAL_NUM_NEWS_STORIES);
  							return true;
  						}
  					} else {
  						var news_items_arr_len = news_items_arr.length;
  						for (var q=0;q<news_items_arr_len;q++) {

  						  // @allison Replaced:
                // var news = {};
                // news.headline = news_items_arr[q].headline[0].Text;
                // news.date = news_items_arr[q].createdate[0].Text;
                // news.contentid = news_items_arr[q].contentid;
                // news.kicker = news_items_arr[q].kicker[0].Text;            
                // news_arr.push(news);
                // with:
                var news = news_items_arr[q];
                news_arr.push({
                  headline:  news.headline[0].Text,
                  date:      news.createdate[0].Text,
                  contentid: news.contentid,
                  kicker:    news.kicker[0].Text
                });

  						}
  					}
  				}
  			}
  			var $news_stories_list = $("<ul></ul>").attr("id","news_stories_list").addClass("bullet_square_black");
  			var nlen = news_arr.length;
  			var mx = "";
  			if (playerbio.TOTAL_NUM_NEWS_STORIES > nlen) {
  				mx = nlen;
  			} else {
  				mx = playerbio.TOTAL_NUM_NEWS_STORIES;
  			}
  			for (var c=0;c<mx;c++) {
  				var xml_date = news_arr[c].date;
  			 	var date_string_arr = xml_date.split("T");
  				var date_string = date_string_arr[0].replace(/-/g,"");
  				var news_link = "/news/article.jsp?ymd="+date_string+"&content_id="+news_arr[c].contentid+"&vkey=news_"+clubProps[globals.cid].club+"&fext=.jsp&c_id="+clubProps[globals.cid].club;
  				var $href = $("<a></a>").html(news_arr[c].headline).attr("href",news_link);
  				var $list_item = $("<li></li>").append($href);
  				$news_stories_list.append($list_item);
  			}
  			var $hed = $("<h4></h4>").html("NEWS STORIES");
  			$("td#player_news_module").append($hed);
  			var $expand_link = $("<a></a>").attr("href","javascript:void(0)").html("+expand").attr("id","expand_news");
  			if ((flags.expanded_news != "false") && (flags.expanded_news)) {
  				$("td#player_news_module").append($expand_link);
  			}
  			$("td#player_news_module").append("<br style='clear:both;' />");
  			$("td#player_news_module").append($news_stories_list);
  			if ((nlen < playerbio.TOTAL_NUM_NEWS_STORIES) && (clubProps[globals.cid].club != "mlb")) {
  				var diff = playerbio.TOTAL_NUM_NEWS_STORIES - nlen;
  				playerbio.lookup_urls.undefined_news_query(diff);
  			}
  		}, 

  		build_video : function(data) {
  			var plugins_arr = data.plugins[0].members;
  			var plugins_length = plugins_arr.length;
  			var video_arr = [];
  			for (var p=0;p<plugins_length;p++) {
  				if (plugins_arr[p].key == "related-media") {
  					var video_items_arr = plugins_arr[p].item;
  					if (!video_items_arr) {
  						_self.no_video_fallback();
  						return true;
  					} else {
  						var video_items_arr_len = video_items_arr.length;
  						for (var q=0;q<video_items_arr_len;q++) {
  							var video = {};
  							video.video_date = video_items_arr[q].createdate[0].Text || "";
  							video.video_headline = video_items_arr[q].blurb[0].Text || "" ;
  							video.video_contentid = video_items_arr[q].contentid || "";
							if (video_items_arr[q].transcodes[0].hasOwnProperty("transcode")) {
  								var v_transcode_arr =  video_items_arr[q].transcodes[0].transcode;
  								var v_transcode_arr_len;
  								if ((v_transcode_arr.length  > 0 ) && (v_transcode_arr.length !== undefined)) {
  									v_transcode_arr_len = v_transcode_arr.length;
  								}
  								for (var r=0;r<v_transcode_arr_len;r++) {
  									if ((v_transcode_arr[r].type == "flash-video") && (v_transcode_arr[r].speed == "800")) {
  										video.video_url = v_transcode_arr[r].w;
  									//video.content_id = v_transcode_arr[r].cid;
  									}
  								}
  								if (video_items_arr[q].children[0].item) {
  									video.thumb_src =  video_items_arr[q].children[0].item[0].url[0].Text ? video_items_arr[q].children[0].item[0].url[0].Text : "";
  									video.thumb_height =  video_items_arr[q].children[0].item[0].height[0].Text ? video_items_arr[q].children[0].item[0].height[0].Text : "";
  									video.thumb_width =  video_items_arr[q].children[0].item[0].width[0].Text ? video_items_arr[q].children[0].item[0].width[0].Text : "";
  								}
  								video_arr.push(video);
  							}
						}
  					}
  				}
  			}
  			var more_link = "<a id='more_video' href='/search/media.jsp?player_id="+globals.player_id+"'><br />More Video &gt;</a>";

  			$("div#player_media_thumb").empty();
  			var $video_thumb = $("<img></img>").attr("height",'40').attr("width",'71').attr("src",video_arr[0].thumb_src);
  			$("div#player_media_thumb").append($video_thumb);
  			$("div#player_media_link_text").empty();
  			var $url_link = $("<span></span>").attr("id","player_media_link_href").html(video_arr[0].video_url);
  			$("div#player_media_link_text").html(video_arr[0].video_headline);
  			$("div#player_media_link_text").append($url_link);
  			$("div#player_media_thumb").click(function () {
  				bam.zPlayer.play(video_arr[0].video_contentid);
  			});
  			$("img#video_play_btn").click(function () {
  					bam.zPlayer.play(video_arr[0].video_contentid);
  			});
  			$("div#player_media_link_text").append(more_link);

  			if (video_arr.length > 1) {
  				$("div#player_media_thumb_2").empty();
  				var $video_thumb_2 = $("<img></img>").attr("height",'40').attr("width",'71').attr("src",video_arr[1].thumb_src);
  				$("div#player_media_thumb_2").append($video_thumb_2);
  				$("div#player_media_link_text_2").empty();
  				var $url_link_2 = $("<span></span>").attr("id","player_media_link_href_2").html(video_arr[1].video_url);
  				$("div#player_media_link_text_2").html(video_arr[1].video_headline);
  				$("div#player_media_link_text_2").append($url_link_2);
  				$("div#player_media_thumb_2").click(function () {
  					bam.zPlayer.play(video_arr[1].video_contentid);
  				});
  				$("img#video_play_btn_2").click(function () {
  					bam.zPlayer.play(video_arr[1].video_contentid);
  				});
  				$("div#player_media_link_text_2").append(more_link);
  			} else {
  				$("div#mw-vod-2").remove();
  			}
  		},

  		fantasy_news : function(data) {
  			var $fantasy_news_module = $("td#player_fantasy_news_module");
  			$fantasy_news_module.empty();
  			var $headline = $("<h4></h4>").html("Fantasy News");
  			$fantasy_news_module.append($headline);
  			var $content_div = $("<div></div>").attr("width","245").css("margin","10px");
  			$fantasy_news_module.append($content_div);
  			var num_results = countQueryResults(data, 'wsfb_fantasy_news_byplayer');
  			if (num_results > 0) {
  				var news_head = data.wsfb_fantasy_news_byplayer.queryResults.row.teaser;
  				var news_text = data.wsfb_fantasy_news_byplayer.queryResults.row.story;
  				var news_link = "/mlb/fantasy/wsfb/news/index.jsp?action=locate&pid="+globals.player_id;
  				var news_headline = "<a id='fantasy_news_headline' href='"+news_link+"'>"+news_head+"</a><br />";
  				$content_div.append(news_headline).append("<p>"+news_text+"</p>");
  			} else {
  				var hrf = "/mlb/fantasy/wsfb/news/index.jsp?team="+clubProps[globals.cid].club;
  				var lnk = "<a href="+hrf+">"+clubProps[globals.cid].club_full_name+"</a>";
  				var txt = "No fantasy news results for this player. View all " + lnk + " fantasy news.";
  				$content_div.html(txt);
  			}
  		},

  		standings : function (data) {
  			var pitching_stats_map = {
  				W : "WINS",
  				SO : "STRIKEOUTS",
  				G : "GAMES",
  				GS : "GAMES STARTED",
  				IP : "INNINGS PITCHED",
  				SV : "SAVES",
  				HLD : "HOLDS",
  				AVG : "BATTING AVERAGE AGAINST",
  				ERA : "ERA"
  			};
  			var batting_stats_map = {
  				HR : "HOME RUNS",
  				RBI : "RUNS BATTED IN",
  				R : "RUNS",
  				H : "HITS",
  				SB : "STOLEN BASES",
  				AVG : "AVG",
  				OBP : "OBP",
  				SLG : "SLG",
  				OPS : "OPS"
  			};
  			var executed_standings = false;

  			// @allison Replaced:
        // var has_results = false;
        // var standings_arr = [];
        // if (globals.statType == 1) {
        //  if (data.mlb_individual_hitting_rank.queryResults.totalSize > 0) {
        //    has_results = true;
        //    if (data.mlb_individual_hitting_rank.queryResults.totalSize > 1) {
        //      standings_arr = data.mlb_individual_hitting_rank.queryResults.row;
        //    } else {
        //      standings_arr = [data.mlb_individual_hitting_rank.queryResults.row];
        //    }
        //  }
        // } else {
        //  if (data.mlb_individual_pitching_rank.queryResults.totalSize > 0) {
        //    has_results = true;
        //    if (data.mlb_individual_pitching_rank.queryResults.totalSize > 1) {
        //      standings_arr = data.mlb_individual_pitching_rank.queryResults.row;
        //    } else {
        //      standings_arr = [data.mlb_individual_pitching_rank.queryResults.row];
        //    }
        //  }
        // }
        // with:
        var prop = (globals.statType == 1) ? 'mlb_individual_hitting_rank' : 'mlb_individual_pitching_rank';
  			var standings_arr = getQueryResults(data, prop);
  			var has_results = (standings_arr.length > 0);

  			if (has_results === true && executed_standings === false) {
  				var counter=0;
  				//2.5ms
  				$("table#ranks_table").empty();
  				var $tbody = $("<tbody></tbody>");
  				$("table#ranks_table").append($tbody);
  				var $tr = $("<tr></tr>");

  				var standings_arr_len = standings_arr.length;
  				var batter_rated_stats = ["avg", "obp", "ops", "slg"];
  				var pitcher_rated_stats = ["era","avg"];
  				var standings_obj = {};
  				var num_standings = 0;
  				//3ms
  				for (var j=0;j<standings_arr_len;j++) {
  					if(typeof(standings_arr[j]) === "object" && !!standings_arr[j]) {
  						for (var k in standings_arr[j]) {
  							if (!standings_arr[j].hasOwnProperty || standings_arr[j].hasOwnProperty(k)) {
  								if (k.match(/_rank/) && standings_arr[j][k]) {
  									var stand_arr = k.split(/_/);
  									var stat = stand_arr[0];
  									var is_qualified = true;
  									var qualifies = standings_arr[j].qualifies;
  									if (qualifies == "N") {
  										if (globals.statType == 1) {
  											var b_rated_stats_len = batter_rated_stats.length;
  											for (var i=0;i<b_rated_stats_len;i++) {
  												if (stat == batter_rated_stats[i]) {
  													is_qualified = false;
  												}
  											}
  										} else {
  											var p_rated_stats_len = pitcher_rated_stats.length;
  											for (var c=0; c<p_rated_stats_len;c++) {
  												if (stat == pitcher_rated_stats[c]) {
  													is_qualified = false;
  												}
  											}
  										}
  									}
  									if (is_qualified === true) {
  							 			if	(standings_obj[stat] !== undefined) {
  											var ssn = standings_arr[j].season;
  											standings_obj[stat][ssn] = {};
  											standings_obj[stat][ssn].rank = standings_arr[j][k];
  											standings_obj[stat][ssn].value = standings_arr[j][stat];
  											standings_obj[stat][ssn].league = standings_arr[j].league_code;
  										} else {
  											standings_obj[stat] = {};
  											var ssn2 = standings_arr[j].season;
  											standings_obj[stat][ssn2] = {};
  											standings_obj[stat][ssn2].rank = standings_arr[j][k];
  											standings_obj[stat][ssn2].value = standings_arr[j][stat];
  											standings_obj[stat][ssn2].league = standings_arr[j].league_code;
  											num_standings++;
  										}// if standings object already exists for stat
  									} //if is qualified
  								} //if stat is a rank
  							} // if standings_arr hasOwnProperty
  						} // for in
  					} //if typeof standings arr is obj
  				} //for standings array
  				//sort each by date asc
  				var sorted_standings_obj = {};
  				for (var stat_to_sort in standings_obj) {
  					var sorted_arr = playerbio.utils.sort_object(standings_obj[stat_to_sort],"asc");
  					var sorted_arr_len = sorted_arr.length;
  					for (var y=0;y<sorted_arr_len;y++) {
  						var yr = sorted_arr[y][0];
  						var data_obj = sorted_arr[y][1];
  						if (sorted_standings_obj[stat_to_sort] !== undefined) {
  							sorted_standings_obj[stat_to_sort][yr] = data_obj;
  						} else {
  							sorted_standings_obj[stat_to_sort] = {};
  							sorted_standings_obj[stat_to_sort][yr] = data_obj;
  						}
  					}
  				}
  			//end build object, begin dom manipulation
  				var is_empty_standings = playerbio.utils.is_empty_object(sorted_standings_obj);
  				if (!is_empty_standings) {
  					var num_boxes_in_last_row = 0;
  				/*if ($("table#awards_table:visible")) {
  					num_boxes_in_last_row = $("table#awards_table tr:last td").length;
  					counter = num_boxes_in_last_row;
  					$tr = $("table#awards_table tr:last");
  					if (num_boxes_in_last_row == NUM_AWARDS_IN_A_ROW) {
  						num_boxes_in_last_row = 0;
  						counter = 0;
  						$tr = $("<tr></tr>");
  					}
  				} else {
  				*/
  				/*} */
  					if(typeof(sorted_standings_obj) === "object" && !!sorted_standings_obj) {
  						for (var statistic in sorted_standings_obj) {
  							if (!sorted_standings_obj.hasOwnProperty || sorted_standings_obj.hasOwnProperty(statistic)) {
  								if ( (counter % playerbio.NUM_AWARDS_IN_A_ROW === 0) && (counter > 0)) {
  									$("table#ranks_table > tbody").append($tr);
  									$tr = $("<tr></tr>");
  								}
  								var $td = $("<td></td>");
  								var headline = "";
  								if (globals.statType == 1) {
  									if(typeof(batting_stats_map) === "object" && !!batting_stats_map) {
  										for (var key in batting_stats_map) {
  											if (!batting_stats_map.hasOwnProperty || batting_stats_map.hasOwnProperty(key)) {
  												if (key == statistic.toUpperCase()) {
  													headline = "<h6>"+batting_stats_map[key]+"</h6>";
  												}
  											}
  										} 
  									}
  								} else {
  									if(typeof(pitching_stats_map) === "object" && !!pitching_stats_map) {
  										for (var kk in pitching_stats_map) {
  											if (!pitching_stats_map.hasOwnProperty || pitching_stats_map.hasOwnProperty(kk)) {
  												if (kk == statistic.toUpperCase()) {
  													headline = "<h6>"+pitching_stats_map[kk]+"</h6>";
  												}
  											}
  										} 
  									}
  								}
  								var $rank = $("<div></div>").addClass("rank");
  								var $interior_table = $("<table></table>").attr("id",statistic).attr("summary",statistic).attr("width","225");
  								if(typeof(sorted_standings_obj[statistic]) === "object" && !!sorted_standings_obj[statistic]) {
  									for (var season in sorted_standings_obj[statistic]) {
  										if (!sorted_standings_obj[statistic].hasOwnProperty || sorted_standings_obj[statistic].hasOwnProperty(season)) {
  											var suffix = "th";
  											var is_first = false;
  											var rnk = sorted_standings_obj[statistic][season].rank;
											/*
  											if ((rnk.match(/1$/)) && (rnk != "11")) {
  												suffix = "st";
  												if (rnk == 1) {
  													is_first = true;
  												}
  											} else if ((rnk.match(/2$/)) && (rnk != "12")) {
  												suffix = "nd";
  											} else if ((rnk.match(/3$/)) && (rnk != "13")) {
  												suffix = "rd";
  											} 
											*/
											if (rnk == 1) {
												is_first = true;
											}
											suffix = playerbio.utils.ordinal(rnk);
  											var sortable_player_string = "/stats/sortable_player_stats.jsp?teamPosCode=all&statType="+globals.statType+"&c_id="+clubProps[globals.cid].club+"&timeSubFrame="+season+"&sortByStat="+statistic+"&timeFrame=1&baseballScope="+sorted_standings_obj[statistic][season].league;
  											var sortable_player_hrf = "<a href='"+sortable_player_string+"'>"+season+"</a>";
  											var row_leader_class="";
  											var first_highlight_td = "";
  											if (is_first) {
  												first_highlight_td = "<td class='tiny one'>*</td>";
  												row_leader_class= " class='leader'";
  											} else {
  												first_highlight_td = "<td class='tiny'>&nbsp;</td>";
  											}
  											var season_td = "<td class='year'>"+sortable_player_hrf+"</td>";
  											var standings_td = "<td>"+sorted_standings_obj[statistic][season].value+"</td>";
  											var rank_td = "<td>("+rnk+suffix+" in "+sorted_standings_obj[statistic][season].league+")";
  											var interior_row = "<tr"+row_leader_class+">"+first_highlight_td+season_td+standings_td+rank_td+"</tr>";
  											$interior_table.append(interior_row);
  										}
  									}
  								}
  								$rank.append($interior_table);
  								$td.append(headline).append($rank);
  								$tr.append($td);
  								counter ++;
  								$interior_table = "";
  								if (counter == (num_standings+num_boxes_in_last_row)) {
  									$("table#ranks_table > tbody").append($tr);
  								}
  								$("h5#ranks_headline").show();
  								$("table#ranks_table").show();
  							}
  						}
  					}
  				} //if not is empty standings
  			} //if has results
  			executed_standings = true;
  		},

  		awards : function (data) {
  			if (data.player_awards.queryResults.totalSize > 0) {
  				$("table#awards_table").empty();
  				$tbody = $("<tbody></tbody>");
  				$("table#awards_table").append($tbody);
  				$("h5#awards_headline").show();
  				var raw_awards_arr;
  				if (data.player_awards.queryResults.totalSize == 1) {
  					raw_awards_arr = [data.player_awards.queryResults.row];
  				} else {
  					raw_awards_arr = data.player_awards.queryResults.row;
  				}
  				var sorted_awards_obj = {};
  				//sort by award
  				var num_awards = 0;
  				for (var j=0;j<raw_awards_arr.length;j++) {
  					var award_name = raw_awards_arr[j].award;
  					if (award_name.match(/^(AL|NL)\b/)) {
  						raw_awards_arr[j].lg = "&nbsp;("+ award_name.substr(0,2) + ")";
  						award_name = award_name.substr(3);
  					} 
  					if (sorted_awards_obj[award_name] !== undefined) {
  						sorted_awards_obj[award_name].push(raw_awards_arr[j]);
  					} else {
  						sorted_awards_obj[award_name] = [raw_awards_arr[j]];
  						num_awards++;
  					}
  				}
  				var counter = 0;
  				var $tr = $("<tr></tr>").attr('id','0');
  				if(typeof(sorted_awards_obj) === "object" && !!sorted_awards_obj) {
  					for (var award in sorted_awards_obj) {
  						if (!sorted_awards_obj.hasOwnProperty || sorted_awards_obj.hasOwnProperty(award)) {
  							if ((counter % playerbio.NUM_AWARDS_IN_A_ROW === 0) && (counter > 0)) {
  								$("table#awards_table tbody").append($tr);
  								$tr = $("<tr></tr>").attr('id',counter);
  							}
  							var $td = $("<td></td>");
  							var render_award = award.toUpperCase();
  							var $headline = $("<h6></h6>").text(render_award);
  							var $list = $("<ul></ul>").addClass("list");
  							var $stat_table = $("<table></table>").attr("cellspacing","0").attr("id",award);
  							var $rank = $("<div></div>").addClass("rank");
  							$td.append($headline);

  							var award_arr = sorted_awards_obj[award];
  							award_arr.reverse();
  							for (var i=0; i<award_arr.length; i++) {
  								//var table_string = "<tr><td class='year'>"+award_arr[i].display_date+"</td><td>"+award_arr[i].team+"</td></tr>";
  								var awardDate = award_arr[i].award_date;
  								var awardDateObj = DT.parseISODate(awardDate);	
  								var dt = "";
  								if (/week/i.test(award)) {
  									var mon = awardDateObj.getMonth();
  									mon++;
  									var day = awardDateObj.getDate();
  									var yr = awardDateObj.getFullYear();
  									dt = mon+"/"+day+"/"+yr;
  								} else if (/month/i.test(award)) {
  									var mont = awardDateObj.getMonth();
  									mont++;
  									var yrr = awardDateObj.getFullYear();
  									dt = mont+"/"+yrr;
  								} else {
  									dt = awardDateObj.getFullYear();
  								}

  								var retired_number = "";
  								if ((/number\s*retired/i.test(award)) && award_arr[i].notes) {
  								 retired_number = "#"+award_arr[i].notes;
  								}
  								var $li = $("<li></li>");
  								var $span = $("<span></span>").text(dt+": ");
  								var team = award_arr[i].team;
  								if (award_arr[i].lg !== undefined) {
  									team += award_arr[i].lg;
  								} else if (award_arr[i].league_abbrev) {
  									team += "&nbsp;("+award_arr[i].league_abbrev+")";
  								}
  								if (retired_number) {
  									team += "&nbsp;"+retired_number;
  								}
  								$li.append($span);
  								$li.append(team);
  								$list.append($li);
  								//$stat_table.append(table_string);
  							}
  							//$stat_table.appendTo($rank);
  							$list.appendTo($td);
  							$tr.append($td);
  							counter ++;
  							if (counter == num_awards) {
  								$("table#awards_table tbody").append($tr);
  							}
  						}
  					}
  				}

  				$("table#awards_table").show();
  			}
  			var standings_url = playerbio.lookup_urls.get_standings_query();
  			playerbio.utils.data_query(standings_url,function(data) {playerbio.build_player_info.standings(data);});
  			//playerbio.lookup_urls.standings_query();
  		},
  		additional_links : function() {
  			var splits_hrf = "/stats/individual_player_splits.jsp?c_id="+clubProps[globals.cid].club+"&playerID="+globals.player_id+"&statType="+globals.statType;
  			var game_log_hrf = "/stats/individual_player_gamebygamelog.jsp?c_id="+clubProps[globals.cid].club+"&playerID="+globals.player_id+"&statType="+globals.statType;
  			var bat_vs_pitch_hrf = "/stats/batter_vs_pitcher.jsp?c_id="+clubProps[globals.cid].club;
  			var hit_chart_hrf = "/stats/individual_player_hitting_chart.jsp?c_id="+clubProps[globals.cid].club+"&playerID="+globals.player_id+"&statType="+globals.statType;
  			var postseason_hrf = "/stats/individual_player_postseason.jsp?playerID="+globals.player_id+"&statType="+globals.statType;
  			var more_stats_hrf = "/stats/individual_stats_player.jsp?c_id="+clubProps[globals.cid].club+"&playerID="+globals.player_id;
  			$("a#postseason_hrf").attr('href',postseason_hrf);
  			$("a#game_log_hrf").attr('href',game_log_hrf);
  			$("a#splits_hrf").attr('href',splits_hrf);
  			$("a#bat_vs_pitch_hrf").attr('href',bat_vs_pitch_hrf);
  			$("a#hit_chart_hrf").attr('href',hit_chart_hrf);
  			$("a#game_log_hrf").attr('href',game_log_hrf);
  			$("a#more_stats_hrf").attr('href',more_stats_hrf);
  		},

  		remove_additional_links : function() {
			if ($("div#more_links").length > 0) {
  				$("div#more_links").hide();
			} 
  		},

  		top_left_historical : function(info) {
  			var left_list = "";
  			$("div#feature").addClass("historical");
  			$("div#main_image").empty();
  			$("div#modules").remove();
  			var headshot = "";
  			if (flags.mug_shot == "true") {
  				headshot = "<img class='head_shot' src='/images/players/mugshot/ph_"+globals.player_id+".jpg' />";
  			} else {
  				if (clubProps[globals.cid]) {
  					headshot = "<img class='head_shot' src='/images/players/mugshot/placeholders/"+clubProps[globals.cid].club+".jpg' alt='"+clubProps[globals.cid].name_display_long+"' />";
  				} else {
  					headshot = "&nbsp;";
  				}
  			}
  			$("div#main_image").append(headshot);
  			$("div#stats_current").remove();
  			$("div#stats_current_date").remove();
  			var $hed = $("<h3></h3>");
  			var $team_logo = "";
  			if (clubProps[globals.cid]) {
  				var team_logo_src="/images/logos/30x34/"+clubProps[globals.cid].team_code+"_logo.png";
  				$team_logo = $("<img>").attr("id",'player_team_logo').addClass("logo").addClass("png").attr("src",team_logo_src).attr("alt",clubProps[globals.cid].name_display_long+" Logo").attr("align",'absmiddle');
  				if (globals.cid == "la") {
  					$team_logo.css("backgroundColor","#0F3E6F");
  				}
  			} else {
  				$team_logo = "&nbsp;";
  			}
  			$hed.append($team_logo);
  			var display_name = info.display_name + "&nbsp;";
  			$hed.append(display_name);

  			if (info.jersey_number) {
  				var player_num = "<span id='player_number'>"+info.jersey_number+"</span>";
  				$hed.append(player_num);
  			} 
  			if (info.primary_position_txt) {
  				var player_pos = "<span id='player_position'>&nbsp;|&nbsp;"+info.primary_position_txt+"</span>";
  				$hed.append(player_pos);
  			}

  			var $main_name = $("<div></div>").attr("id","main_name");
  			$main_name.append($hed);
			if (!flags.hide_bio) {
  				var bio_span = "<span class='bio'><a id='bio_link' href='javascript:void(0);'>Bio &gt;</a>";
  				$hed.after(bio_span);
			}
  			var $stats_physical = $("<div></div>").attr("id","stats_physical");
  			$stats_physical.append($main_name);
  			$("div#main_image").after($stats_physical);

  			var $first_list = $("<ul></ul>").addClass("stats_historical");
  			$("div#main_name").after($first_list);
  			var name = "<li>Full Name: <strong>";
  			if (info.name_first) {
  				name += info.name_first + "&nbsp;";
  			} 
  			if (info.name_nick) {
  				name += "\""+info.name_nick + "\"&nbsp;";
  			}
  			if (info.name_middle) {
  				name += info.name_middle + "&nbsp;";
  			}
  			if (info.name_last) {
  				name += info.name_last + "&nbsp;";
  			}
  			name += "</strong></li>";
  			//$first_list.append($li_name);
  			left_list += name;
  			var month_names = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
  			var birthdayObj = DT.parseISODate(info.birth_date);
  			var birth_date = birthdayObj.getDate();
  			var birth_month = birthdayObj.getMonth();
  			var birth_year = birthdayObj.getFullYear();
  			var birthday_long = month_names[birth_month] + " " + birth_date + ", " + birth_year;
  			var birth_city = "";
  			if (info.birth_city) {
  				birth_city += info.birth_city;
  			}
  			if (info.birth_state) {
  				birth_city += ", "+info.birth_state;
  			}
  			if (info.birth_country != "USA") {
  				birth_city += ", "+info.birth_country;
  			}
  			if (birth_city) {
  				var li_born = "<li>Born: <strong>"+birthday_long+" in "+birth_city+"</strong>";
  				left_list += li_born;
  			}
  			if (info.height_feet && info.height_inches) {
  				var li_height = "<li>Height: <strong>"+info.height_feet+"' "+info.height_inches+"'' </strong>";
  				left_list += li_height;
  			}
  			if (info.weight) {
  				var li_weight = "<li>Weight: <strong>"+info.weight+"</strong>";
  				left_list += li_weight;
  			}
  			$first_list.html(left_list);
  			var right_list = "";
  			var $list_2 = $("<ul></ul>").addClass("stats_historical");
  			if (info.bats) {
  				var bat = "";
  				switch (info.bats) {
  				case "L":
  					bat = "Left";
  					break;
  				case "R":
  					bat = "Right";
  					break;
  				case "S":
  					bat = "Switch";
  					break;
  				default:
  					bat = "N/A";
  				}
  				var li_bats = "<li>Bats: <strong>"+bat+"</strong>";
  				//$list_2.append(li_bats);
  				right_list += li_bats;
  			}
  			if (info.tosses) {
  				var thro = "";
  				switch (info.tosses) {
  				case "L":
  					thro = "Left";
  					break;
  				case "R":
  					thro = "Right";
  					break;
  				case "S":
  					thro = "Switch";
  					break;
  				default:
  					thro = "N/A";
  				}
  				var li_throws = "<li>Throws: <strong>"+thro+"</strong>";
  				right_list += li_throws;
  			}
  			var li_college;
  			if (info.college) {
  				li_college = "<li>College: <strong>"+info.college+"</strong>";
  			} else {
  				li_college = "<li>College: <strong>N/A</strong>";
  			}
  			right_list += li_college;
  			if (info.pro_debut_date) {
  				var debut_fulldate = info.pro_debut_date;
  				var debutObj = DT.parseISODate(debut_fulldate);
  				var debut_date = debutObj.getDate();
  				var debut_month = debutObj.getMonth();
  				var debut_year = debutObj.getFullYear();
  				var debut_long = month_names[debut_month] + " " + debut_date + ", " + debut_year;
  				var li_debut = "<li>MLB Debut: <strong>"+debut_long+"</strong>";
  				right_list += li_debut;
  			}
  			$list_2.html(right_list);
  			$first_list.after($list_2);
  			if (flags.action_shot == "true") {
  				var action_img_src = "/images/players/action/ph_"+globals.player_id+".jpg";
  				var action_img = "<img class='action_shot' src='"+action_img_src+"' alt='"+info.display_name+"' />";
  				$stats_physical.after(action_img);
  			}
  		},	
  		large_photo : function(info) {
  			var background_image_src = "";
  			if ((flags.large_photo == "false") || (!flags.large_photo)) {
  				background_image_src = "/images/players/525x330/placeholders/"+clubProps[globals.cid].club+".jpg";
  			} else {
  				 background_image_src = "/images/players/525x330/"+globals.player_id+".jpg";
  			}
  			$("div#main_image").css("background-image","url('"+background_image_src+"')");
  			//$("h1#player_name").text(info.display_name);
  			$("span#player_number").text(info.jersey_number);
  			$("span#player_position").html("&nbsp;|&nbsp;"+info.primary_position_txt);
  			var team_logo_src="/images/logos/30x34/"+clubProps[globals.cid].team_code+"_logo.png";
  			$("img#player_team_logo").addClass("logo").addClass("png").attr('src',team_logo_src).attr('alt',clubProps[globals.cid].name_display_long + " Logo");
  			var large_photo_src = "/images/players/mugshot/ph_"+globals.player_id+".jpg";
  			$("img#player_large_photo").attr('src',large_photo_src).attr('alt',info.display_name);
  			var strikebreaker_player_ids = ["132788","407791"];
  			if ($.inArray(globals.player_id,strikebreaker_player_ids) > -1) {
  				$("img#players_choice_logo").hide();
  			}
  		},

  		top_bio_info : function(info) {
  			var month_names = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
  			var birthdayObj = DT.parseISODate(info.birth_date);
  			var birth_date = birthdayObj.getDate();
  			var birth_month = birthdayObj.getMonth();
  			var birth_year = birthdayObj.getFullYear();
  			birth_month = parseInt(birth_month,10) + 1;
  			var birthday_long = birth_month + "/" + birth_date + "/" + birth_year;
  			$("span#player_birthday").text(birthday_long);

  			$("span#player_birth_city").text(info.birth_city);
  			$("span#player_birth_state").text(info.birth_state);
  			if (info.birth_country != "USA") {
  				$("span#player_birth_country").text(info.birth_country);
  			}

  			$("span#player_bats").text(info.bats);
  			$("span#player_throws").text(info.tosses);
  			$("span#player_height_feet").text(info.height_feet);
  			$("span#player_height_inches").text(info.height_inches);
  			$("span#player_weight").text(info.weight);

  			if (info.college) {
  				$("span#college").text(info.college);
  			} else {
  				$("span#college").text("N/A");
  			}
  			if (info.pro_debut_date) {
  				var debut_fulldate = info.pro_debut_date;
  				var debutObj = DT.parseISODate(debut_fulldate);
  				var debut_date = debutObj.getDate();
  				var debut_month = debutObj.getMonth();
  				var debut_year = debutObj.getFullYear();
  				debut_month = parseInt(debut_month,10) + 1;
  				var debut_long = debut_month + "/" + debut_date + "/" + debut_year;
  				$("span#mlb_debut").text(debut_long);
  			}
  			$("div#player_status").html("Status:&nbsp;"+info.status);
  			var player_shop_link = "<a href='http://shop.mlb.com/search/index.jsp?kwCatId="+clubProps[globals.cid].club+"&amp;kw="+info.display_name+"&amp;origkw="+info.display_name+"&amp;sr=1;' target='_blank'>Get "+info.display_name+" gear at the "+info.team_name+" shop&nbsp;&gt;</a>";
  			$("div#player_shop_link").html(player_shop_link);
  		}
  	}; //end self
  	return _self;
  })();

  playerbio.build_team = (function(){
  	var _self = {
  		roster : function(roster_data,yr) {
  			var $roster_tbl = $("table#roster_table");
  			$("table#roster_table tbody").empty();
  			var num_results = roster_data.roster_40.queryResults.totalSize;
  			if (num_results > 0) {
  				var roster_arr = roster_data.roster_40.queryResults.row;
  				$("#player_team").text(roster_arr[0].team_name);
  				$roster_tbl.attr("summary",roster_arr[0].team_name + " Roster");
  				for (var i=0; i<roster_arr.length;i++) {
  					var t_id = roster_arr[i].team_id;
  					var t = "";
  					jQuery.each(clubProps, function(key, val) {
  						jQuery.each(val, function(k, v) {
  							if (k == "team_id") {
  								if (v == t_id) {
  									t = key;
  								}
  							}
  						});
  					});
  					var player_bio_href = "";
  					if (clubProps[t]) {
  						 player_bio_href = "/team/player.jsp?roster_year="+yr+"&player_id="+roster_arr[i].player_id+"&c_id="+clubProps[t].club;
  					} else {
  						player_bio_href = "/team/player.jsp?roster_year="+yr+"&player_id="+roster_arr[i].player_id+"&c_id=mlb";
  					}
  					var player_bio_link = "<a href='"+player_bio_href+"'>"+roster_arr[i].name_display_first_last+"</a>";
  					var row = "<tr><td>"+player_bio_link+"</td><td>"+roster_arr[i].position_txt+"</td></tr>";
  					$("table#roster_table tbody").append(row);
  				}
  			} else {
  				$("table#roster_table tbody").html("<tr><td>No players found.</td></tr>");
  			}
  		},
  		historical_roster : function(roster_data,yr) {
  			var $roster_tbl = $("table#roster_table");
  			$("table#roster_table tbody").empty();
  			var num_results = roster_data.historical_roster.queryResults.totalSize;
  			if (num_results > 0) {
  				var roster_arr = roster_data.historical_roster.queryResults.row;
  				$("#player_team").text(roster_arr[0].team_full);
  				$roster_tbl.attr("summary",roster_arr[0].team_full + " Roster");
  				for (var i=0; i<roster_arr.length;i++) {
  					var player_bio_href = "/team/player.jsp?player_id="+roster_arr[i].player_id+"&roster_year="+yr+"&c_id="+roster_arr[i].file_code;
  					var player_bio_link = "<a href='"+player_bio_href+"'>"+roster_arr[i].name_display_first_last+"</a>";
  					var pos = roster_arr[i].position;
  					if (!pos) {
  						pos = roster_arr[i].primary_position;
  					}
  					var row = "<tr><td>"+player_bio_link+"</td><td>"+pos+"</td></tr>";
  					$("table#roster_table tbody").append(row);
  				}
  			} else {
  				$("table#roster_table tbody").html("<tr><td>No players found.</td></tr>");
  			}
  		}
  	}; //end self
  	return _self;
  })();

  playerbio.build_table = (function(){
  	var _self = {
      // @allison Removed:
      // add_line : function(table_id) {
      //  $("div#"+table_id+" table").css("borderCollapse","separate");
      //  var num_rows = $("div#"+table_id+" table tbody tr").length;
      //  var visible_row = 0;
      //  for (var actual_row=0;actual_row<=num_rows;actual_row++) {
      //    if ($("div#"+table_id+" table tbody tr:eq("+actual_row+")").is(":visible") ) {
      //        visible_row++;
      //    } 
      //    if (visible_row % playerbio.DIVIDE_ROWS === 0) {
      //      $("div#"+table_id+" table tbody tr:eq("+actual_row+") td").addClass("dividing_line");
      //    } else {
      //      $("div#"+table_id+" table tbody tr:eq("+actual_row+") td").removeClass("dividing_line");
      //    }
      //  }
      // }, 
      // add_footer_formatting : function(table_id,classname) {
      //  var len = $("div#"+table_id+" table tbody tr").length;
      //  $("div#"+table_id+" table tr:eq("+len+") td").addClass(classname);
      //  playerbio.build_table.add_cell_formatting(table_id,"totals","0",len);
      // },
      // 
      // add_cell_formatting : function(table_id,classname,cell_index,row_index) {
      //  var cell_selector = "";
      //  var row_selector = "";
      //  if (cell_index) {
      //    cell_selector = ":eq("+cell_index+")";
      //  }
      //  if (row_index) {
      //    row_selector = ":eq("+row_index+")";
      //  }
      //  var num_rows = $("div#"+table_id+" table tbody tr").length;
      //  if (!row_selector) {
      //    for (var i=0; i<= num_rows; i++) {
      //      $("div#"+table_id+" table tr:eq("+i+") td"+cell_selector).addClass(classname);
      //    }
      //  } else {
      //    $("div#"+table_id+" table tr"+row_selector+" td"+cell_selector).addClass(classname);
      //  }
      // },

  		build_row_from_row : function(source_table_name,target_table_name,target_table_id,init_array,passed_target_cells_array) {
  			var avail_rows = parseInt(source_table_name.RowCount,10) - 1;
  			if (avail_rows > -1) {
  				var target_row = source_table_name.rows(avail_rows);
  				var target_row_cells_arr;
  				if (passed_target_cells_array) {
  					target_row_cells_arr = passed_target_cells_array;
  				} else {
  					target_row_cells_arr = target_row.cells;
  				}
  				if (target_row) {
  					var source_cols = source_table_name.columns();
  					var target_cols = target_table_name.columns();
  					var target_totals_arr = init_array;
  					for (var p=0; p<target_cols.length; p++) {
  						for (var m=0; m< source_cols.length; m++) {
  							if (target_cols[p].dataField.toUpperCase() == source_cols[m].dataField.toUpperCase()) {
  								var target_index = target_cols[p].index;
  								var source_index = source_cols[m].index;
  								target_totals_arr[target_index] = target_row_cells_arr[source_index].value.toString();
  							}
  						}
  					}
  					target_table_name.insertRow(target_totals_arr,false);
  					target_table_name.render(target_table_id);
  				}
  			} else {
  				$("#"+target_table_id).html("No Results");
  			}

  		}
  	}; //end self
  	return _self;
  })();


  playerbio.init = function() {
  	var player_info_url = playerbio.player_personal_info.player_info_url();
  	playerbio.utils.data_query(player_info_url,function(data) {playerbio.player_personal_info.player_obj(data);});
  	//playerbio.lookup_urls.player_info_query(player_info_url);

  	if ((globals.roster_year) && (globals.roster_year != "null")) {
  		var roster_query = playerbio.lookup_urls.forty_man_query(globals.roster_year,clubProps[globals.roster_cid].team_id+"_"+clubProps[globals.roster_cid].league);
  		if (roster_query) {
  			playerbio.utils.data_query(roster_query,function(data) {playerbio.build_team.roster(data,globals.roster_year);});
  		}
  	} else if (globals.roster_cid != "mlb") {
  		var rquery = playerbio.lookup_urls.forty_man_query(globals.season,clubProps[globals.roster_cid].team_id+"_"+clubProps[globals.roster_cid].league);
  		if (rquery) {
  			playerbio.utils.data_query(rquery,function(data) {playerbio.build_team.roster(data,globals.season);});
  		}
  		//playerbio.lookup_urls.forty_man_query(globals.season,clubProps[globals.roster_cid].team_id+"_"+clubProps[globals.roster_cid].league);
  	}
  	bam.popModule.init({});
  		//css : '/style/team/players/bio_popModule.css'
  	//});
  	//playerbio.lookup_urls.fantasy_news_query();
  	//playerbio.lookup_urls.awards_query();
  	var awards_query_url =  "/lookup/json/named.player_awards.bam?player_id="+globals.player_id;
  	playerbio.utils.data_query(awards_query_url,function(data) {playerbio.build_player_info.awards(data);});

  	if (flags.is_historical == "true") {
  		playerbio.build_player_info.remove_additional_links();
  	} else {
  		var fantasy_news_url = "/fantasylookup/json/named.wsfb_fantasy_news_byplayer.bam?playerid="+globals.player_id;
  		playerbio.utils.data_query(fantasy_news_url,function(data) {playerbio.build_player_info.fantasy_news(data);});
  		playerbio.build_player_info.additional_links();
  		if ((flags.expanded_news != "false") && (flags.expanded_news)) {
  			$("a#expand_news").click(function () {
  				playerbio.utils.launch_pop("/components/team/player/news_iframe.jsp?player_id="+globals.player_id);
  			});
  		} else {
  			$("a#expand_news").hide();
  		}
		$("div#more_links").show();
  	}


  	if ((flags.cms_info != "false") && (flags.cms_info)) {
  		playerbio.lookup_urls.cms_info_query();
  	} else {
  		playerbio.build_player_info.no_cms_data_fallback();
  	}

  	 $("select#team_roster_name option").each(function () { 
  	 	var team_info = $(this).val();
  		var t_i_arr = team_info.split("_");
  		var t_i = t_i_arr[0];
  	 	if (t_i == clubProps[globals.roster_cid].team_id) {
  	 		$(this).attr("selected","selected");
  		}
  	});

  		$(".player_search").click(function () {
  			window.location.href="/mlb/players/";
  		});

  		$("select#team_roster_season").change(function () {
  		 		$("select#team_roster_season option:selected").each(function () {
  					var roster_team = $("select#team_roster_name option:selected").val();
  					var roster_year = $(this).val();
  					var historical_roster_url = playerbio.lookup_urls.historical_forty_man_query(roster_year,roster_team);
  					playerbio.utils.data_query(historical_roster_url,function(data) {playerbio.build_team.historical_roster(data,roster_year);});

                  	//playerbio.lookup_urls.historical_forty_man_query($(this).val(),roster_team);
                	});
  		});

  		$("select#team_roster_name").change(function () {
  		 		$("select#team_roster_name option:selected").each(function () {
  					var r_y = $("select#team_roster_season option:selected").val();
  					var selected_team = $(this).val();
  					var rquery = playerbio.lookup_urls.forty_man_query(r_y,selected_team);
  					playerbio.utils.data_query(rquery,function(data) {playerbio.build_team.roster(data,r_y);});
                  	//playerbio.lookup_urls.forty_man_query(r_y,selected_team);
                	});
  		});

  		$(".career_button").click(function () {
  			var divname = this.name;
  			$("#"+divname).show('').siblings().hide('');
  			if($(".career_button").hasClass('active')) {
  				$(".career_button").removeClass('active').addClass('inactive');
  			}
  			if($(this).hasClass('inactive')) {
  				$(".career_button").addClass('inactive');
  				$(this).addClass('active').removeClass('inactive');
  				this.blur();	
  			}
  		});
  			//utils.equalize_module_div_height("module");
  };

  // $(document).ready();
})();
