/*
Date Generated: Thursday, September 04, 2008 1:19:30 PM
Files Included:
+ profile.js
---------------------
Version: 1.0
Title: Community Profile Manager
Author: Sam Tsvilik
Subject: MLB Community
Project: My MLB.com
Keywords: mlb, community, profile
*/
bam.imports(bam.datetime, bam.url, bam.cookies, bam.xml, bam.validation);			 
var CommunityProfile = (function() {
	var _isLoaded = false,	_profile = null, _nickname = null;
	var _currentDate = bam.datetime.DateTime(new Date());
	var _favoriteClub = null;
	var _loadCount = 0;
	var _addConfirm = 0;
	var _Templates = {
		RenderModule: function(p) {
			var fColor = (!!_favoriteClub && " style=\"background-color:"+_favoriteClub.primary+";\"")||"";
			var _out = new bam.string.StringBuffer();
				//_out.append("<div"+(!!p.moduleClass && " class=\"" + p.moduleClass + "\"")+(!!p.moduleId && " id=\"" + p.moduleId + "\"")+">")
					_out.append("<div class=\"title\""+fColor+"><div class=\"leftCorner\"></div>"+(!!p.title && p.title)+"<div class=\"rightCorner\"></div></div>")
						.append("<div class=\"border\"" + (!!p.borderId && " id=\"" + p.borderId + "\"") + ">");
						if(!!p.body) {
							_out.append(p.body);
						}
					_out.append("</div>");
					//.append("</div>");
			return _out;
		}
	};
	var _setLoadedModule = function() {
		_loadCount++;
		if(_loadCount === 9) {
			setTimeout(function() {
				$("#curtains").fadeOut("slow");
			}, 200);
		}
	};
	var _self = {
		SecureUrl: "",
		Configuration: {
			SiteUnavailable: false,
			SoapUnavailable: false,
			BlogUnavailable: false,
			NewsUnavailable: false
		},
		Properties: (function() {
			var _cache = null;
			var _load = function(cb) {
				var url = "/properties/mlb_properties.xml";
				$.ajax({
					type: "GET",
					url: url,
					dataType: "xml",
					async: false,
					success: function(data) {
						var json = bam.xml.xmlToJSON(data);
						_cache = json;
						if(!!cb && typeof(cb) === "function") {
							cb();	
						}
					}
			    });
			};
			var _find = function(where, what) {
				var _out = null;
				if(!!where && typeof(where) === "string") {
					var goFind = function() {
						//File is static
						var teams = _cache.leagues[0].league[0].teams[0].team;
						var _ret = teams.getNodesByAttribute(where, what);
						return (!!_ret && _ret.length > 0)?_ret[0]:null;
					};
					//Run
					if(!_cache) {
						_load(function(){ _out = goFind(); });
					} else {
						_out = goFind();
					}
				}
				return _out;
			};
			var _props = {
				findTeamByCode: function(code) {
					var _out = null;
					if(!!code && typeof(code) === "string") {												
						// _out = _find("display_code", code);
						_out = _find("club", code);  // club attribute matches the team's file code
					}
					return _out;
				},
				findTeamByTeamId: function(tid) {
					var _out = null;
					if(!!tid && (typeof(tid) === "string" || typeof(tid) === "number")) {
						_out = _find("team_id", tid);
					}
					return _out;
				}
			};
			return _props;
		})(),
		Messaging: (function() {
			var _messaging = {
				Type: {Error:"error", Warning:"warning", Information:"info"},
				Show: function(msg, type, cfOnExit) {
					var _type = type || _messaging.Type.Error;
					var _out = new bam.string.StringBuffer();
					_out.append("<div class=\"popupMessage\">")
							.append("<div class=\"title "+_type+"\">").append("<div class=\"leftCorner\"></div>").append(_type).append("<div class=\"rightCorner\"></div>").append("</div>")
							.append("<div class=\"border\">")
								.append("<div class=\"block\">")
									.append("<div class=\"icon flowLeft\">")
										.append("<div class=\"picture "+_type+"\">").append("</div>")
									.append("</div>")
									.append("<div class=\"context flowLeft\">")
										.append("<div class=\"message\">")
											.append("<p>"+msg+"</p>")
										.append("</div>")
										.append("<div class=\"buttons\">")
											.append("<a href=\"javascript: bam.popModule.exit()\">")
												.append("<img src=\"/mlb/components/community/profile/images/buttons/btn_ok.jpg\" alt=\"Ok\" width=\"106\" height=\"26\" border=\"0\" />")
											.append("</a> ")											
										.append("</div>")
									.append("</div>")
								.append("</div>")
							.append("</div>")
						.append("</div>");
					var popWidth = 400; // default is 500 (set in CSS)					
					bam.popModule.show({htmlContent:_out.toString(), width:popWidth});
					if(!!cfOnExit && typeof(cfOnExit) === "function") {
						bam.popModule.postExit = function() {
							bam.popModule.postExit = function(){};
							cfOnExit();
						};
					}
				}
			};
			return _messaging;
		})(),
		OnLoad: function(profile) {
			switch(true) {
				case (_self.Configuration.SiteUnavailable): 
					_self.Messaging.Show("Sorry - this page is down for maintenance.  Please try back in a few hours.");
					break;
				case (_self.Configuration.SoapUnavailable): break;
				case (_self.Configuration.BlogUnavailable): break;
				case (_self.Configuration.NewsUnavailable): break;
				default:
					_isLoaded = true;	
					_profile = profile;
					_nickname = !!_profile.profile && (!!_profile.profile.nickname && _profile.profile.nickname.value[0]) || "";			
					if(!!_profile.profile && !!_profile.profile.favoriteTeam) {
						 _favoriteClub = (isNaN(parseInt(_profile.profile.favoriteTeam.value[0],10))) ? _self.Properties.findTeamByCode(_profile.profile.favoriteTeam.value[0]) : _self.Properties.findTeamByTeamId(_profile.profile.favoriteTeam.value[0]); 
					}
					// Load Modules //
					_self.Header.Load();
					_self.Avatar.Load();
					_self.Stats.Load();
					_self.Status.Load();
					_self.Friends.Load();
					_self.FavoritePlayers.Load();
					_self.Schedule.Load();
					_self.Blog.Load();
					_self.Rivals.Load();
					_self.News.Load();
					
					//Fantasy Games
					//var fc = (!!_favoriteClub)?"?fc="+escape(_favoriteClub.primary):"";
					//window.netomatUrl.location.href = "/mlb/components/community/profile/fantasy_games.jsp"+fc;
					
					if(!!_profile.profile.netomatUrl) {			   
						window.netomatUrl.location.href = _profile.profile.netomatUrl.value[0];
					} else {
						window.netomatUrl.location.href = "http://mobilebullpen.com/NET-INF/cobrand/mlb/mlb_final/mlb_mobile_empty.html";
					}
					
					var partnerId = ipid, fprt = bam.cookies.get("fprt"), visitorId = bam.cookies.get("ipid");
					var netUrl = "http://mobilebullpen.com/thepen?partnerId="+partnerId+"&fprt="+unescape(fprt)+"&partner=mlb&visitorId="+visitorId;
					window.netomatUrl.location.href = netUrl;
			}
		},
		OnError: function(err, status) {
			var _code = parseInt(status.code, 10);
			switch(_code) {
				case -1000: //E-mail password incoorect
					location.href = "/enterworkflow.do?flowId=registration.dynaindex&c_id=mlb&forwardUrl=/mlb/community/profile/index.jsp" + ((!!qpid)?"?ipid="+qpid:"");
					break;
				case -1100: //Fingerprint
					location.href = "/enterworkflow.do?flowId=registration.dynaindex&c_id=mlb&forwardUrl=/mlb/community/profile/index.jsp" + ((!!qpid)?"?ipid="+qpid:"");
					break;
				case -1400: //Not logged in
					location.href = "/enterworkflow.do?flowId=registration.dynaindex&c_id=mlb&forwardUrl=/mlb/community/profile/index.jsp" + ((!!qpid)?"?ipid="+qpid:"");
					break;
				case -54000: //Blocked
					location.href = "/mlb/community/profile/index.jsp";
					break;
				case -8100: //No Nickname
					var _out = new bam.string.StringBuffer();					
					_out.append("You must set a nickname before you can perform this action").append("<br/><br/>");
					if(!!status.em) {
						_out.append("<ul class=\"details\"><li>"+status.em+"</li></ul>");
					}
					_out.append("<label>Nickname: <input id=\"nicknameField\" type=\"text\" class=\"textField\"/></label>");
					var _nick = "";
					bam.popModule.exit(); //Close the one from before
					bam.popModule.preExit = function() {
						_nick = $("#nicknameField").val();
						bam.popModule.preExit = function(){};
					};					
					_self.Messaging.Show(_out.toString(), _self.Messaging.Type.Error, function() {
						var _next = (_addConfirm===0)?_self.Friends.AddFriend:(_addConfirm===2)?_self.Friends.BlockUser:_self.Friends.ViewFriendsToConfirm;
						if(!!_nick) {
							var re = /^[\w]{4,20}$/;
							if(re.test(_nick)) {
								ProfileService.save({nickname:_nick}, _next, _self.OnError);
							} else {
								_self.OnError(null, {code: -8100, em:"Nickname you have entered is invalid"});
							}
						}
					});
					break;
				default: 
					location.href = "/mlb/community/profile/error.jsp";
			}
			//alert(err);
		},
		Header: {
			Load: function() {
				if(!!_favoriteClub) {
					$(".userHeaderFrame").addClass(_favoriteClub.display_code);
				}
				_setLoadedModule();
			},
			GoToMyProfile: function() {
				location.href = "/mlb/community/profile/index.jsp?ipid="+cpid;	
			},
			ReportAbuse: function() {
				var url = "mailto: mlbusher@website.mlb.com";
				var params = {
					subject	: "Profile Abuse (" + ipid + ")",
					"body"	: "This profile is abusive | http://mlb.mlb.com/mlb/community/profile/index.jsp?ipid=" + ipid
				};
				url += bam.url.buildSearch(params);
				location.href = url;
			}
		},
		Avatar: (function() {
			var _links = [], myBadgesLink = "/mlb/community/profile/badges.jsp";
			var _avatar = {
				Load: function() {
					if(!!_isLoaded && !!_profile) {
						if(_profile.profile) {
							var favTeam = !!_favoriteClub && _favoriteClub.club;
							if(!!favTeam) {
								$(".favoriteTeam").removeClass("mlb").addClass(favTeam);
							} else {
								$(".favoriteTeam").addClass("mlb");
							}
							//Set alt text for image
							var imageSrc = !!_profile.profile.avatar && _profile.profile.avatar.value[0];
							$("#userPicture").attr({"alt": _nickname, title:_nickname, src: imageSrc.replace('{sizeKey}','200x200') });
							//Set nickname
							$("#profileUser").html(_nickname);
							//Render Links
							if(!!_profile.relationshipType) {
								var _fType = parseInt(_profile.relationshipType, 10);
								var _flaggable = true;
								switch(_fType) {
									case 0: //No Relation
										_links.push({text:"view friends", src:"javascript: CommunityProfile.Friends.ViewFriends()"});
										_links.push({text:"add to friends", src:"javascript: CommunityProfile.Friends.AddFriend()"});
										_links.push({text:"block user", src:"javascript: CommunityProfile.Friends.BlockUser()"});
										_links.push({text:"view badges", src:myBadgesLink+"?ipid="+ipid});
										break;											
									case 100: //Self
										var pendingConfirms = (!!_profile.friendsToConfirmCount && _profile.friendsToConfirmCount) || 0;
										_links.push({text:"view friends", src:"javascript: CommunityProfile.Friends.ViewFriends()"});
										//_links.push({text:"change photo", src:"javascript: CommunityProfile.Profile.ChangePhoto()"});
										_links.push({text:"edit profile", src:_self.SecureUrl+"/account/profile.jsp"});
										if(parseInt(pendingConfirms, 10) > 0) {
											_links.push({text:"confirm pending request (" + pendingConfirms + ")", src:"javascript: CommunityProfile.Friends.ViewFriendsToConfirm()"});
										}
										_links.push({text:"view badges", src:myBadgesLink});
										break;
									case 1000: //Friends
										_links.push({text:"view friends", src:"javascript: CommunityProfile.Friends.ViewFriends()"});
										_links.push({text:"remove from friends", src:"javascript: CommunityProfile.Friends.RemoveFriend()"});
										_links.push({text:"block user", src:"javascript: CommunityProfile.Friends.BlockUser()"});
										_links.push({text:"view badges", src:myBadgesLink+"?ipid="+ipid});
										break;
									case 1001: //User friendship is being requested
										_links.push({text:"view friends", src:"javascript: CommunityProfile.Friends.ViewFriends()"});
										_links.push({text:"friend request pending", src:null});
										_links.push({text:"block user", src:"javascript: CommunityProfile.Friends.BlockUser()"});
										//_links.push({text:"flag user", src:"javascript: CommunityProfile.Friends.FlagUser()"});
										_links.push({text:"view badges", src:myBadgesLink+"?ipid="+ipid});
										_flaggable = true;
										break;
									case 1002: //Friend to confirm
										_links.push({text:"view friends", src:"javascript: CommunityProfile.Friends.ViewFriends()"});
										_links.push({text:"confirm pending request", src:"javascript: CommunityProfile.Friends.ConfirmFriend()"});										
										_links.push({text:"block user", src:"javascript: CommunityProfile.Friends.BlockUser()"});
										//_links.push({text:"flag user", src:"javascript: CommunityProfile.Friends.FlagUser()"});
										_links.push({text:"view badges", src:myBadgesLink+"?ipid="+ipid});
										_flaggable = true;
										break;
									case 2001: //User blocks you
										location.href = "/mlb/community/profile/index.jsp";
										break;
									case 2002: //User is being blocked
										location.href = "/mlb/community/profile/index.jsp";
										/*
										_links.push({text:"view friends", src:"javascript: CommunityProfile.Friends.ViewFriends()"});
										_links.push({text:"unblock user", src:"javascript: CommunityProfile.Friends.UnblockUser("+ ipid +")"});
										_links.push({text:"flag user", src:"javascript: CommunityProfile.Friends.FlagUser()"});
										_flaggable = true;
										*/
										break;										
								}
								//Render links									
								var l = _links.length-1, cLink = null;
								if(l >= 0) {
									var _out = new bam.string.StringBuffer();
									_links.reverse();
									_out.append("<ul>");
									do {
										cLink = _links[l];
										if(!!cLink) {
											_out.append("<li>");
											if(!!cLink.src) {
												_out.append("<a href=\"" + cLink.src + "\">" + cLink.text + "</a>");
											} else {
												_out.append(cLink.text);
											}
											_out.append("</li>");
										}
									} while(l--);
									_out.append("</ul>");
									$("#profileLinks").html(_out.toString());
								}
								
								//Flag overlay
								/*
								if(_flaggable) {
									$("#profilePicture").mouseover(function() {
										$(".flagUser").show();						 
									}).mouseout(function() {
										$(".flagUser").hide();						 
									});
								}*/
							}
						}
					}
					_setLoadedModule();
				}
			};
			return _avatar;
		})(),
		Stats: (function() {
			var _stats = {
				Load: function() {
					if(!!_isLoaded && !!_profile) {
						if(!!_profile.profile) {
							var pp = _profile.profile;
							var bd = (!!pp.birthDay && pp.birthDay.value[0]);
							var bm = (!!pp.birthMonth && pp.birthMonth.value[0]);
							var by = (!!pp.birthYear && pp.birthYear.value[0]);
							//if(!!bd && !!bm && !!by) {
								//var bDate = bam.datetime.DateTime(new Date(by, parseInt(bm,10)-1, bd));
								//var age = Math.floor(bam.datetime.DateDiff(new Date(), bDate).TotalDays() / 365);
								var _out = ((!!bm && bm + "/" + bd)||"")+(((!!by && !!bm && "/")||"") + (by||""));
									_out = (bam.validation.isEmpty(_out))?"&nbsp;":_out;
								$("#birthDate").html(_out);
							//}
							var prop = null;
							for(prop in pp) {
								if(!!pp[prop])$("#"+prop).html(pp[prop].value[0]);	
							}
						}
					}
					_setLoadedModule();
				}
			};
			return _stats;
		})(),
		Status: (function() {
			//By Jon F
			var _statusDiv,
				_statusContent,
				_updateForm;
			var _status = {
				Load: function(){
					var _statusDiv = $('#status');
					var statusText = "";
					if(!!_isLoaded && !!_profile) {
						if(!!_profile.status) {
							statusText = (!!_profile.status.length > 0)?_profile.status[0]:"";
						}
					}
					_statusDiv.html(statusText);
					var _out = new bam.string.StringBuffer();
					var _currStatus = (!bam.validation.isEmpty(statusText)) ? statusText:"update your status";

					if(!!_profile.relationshipType) {
						// own profile
						if (parseInt(_profile.relationshipType,10) === 100)	{
							_out.append("<div id=\"statusContent\">")
								.append("<a href=\"#\" onclick=\"CommunityProfile.Status.displayUpdate();return false;\">").append(_currStatus).append("</a></div>");
							_statusDiv.html(_out.toString());
							_statusContent = _statusDiv.find('#statusContent');
						}
					}
					_setLoadedModule();
				},
				displayUpdate: function(){
					function _getUpdateForm(){
						var _form = $('#statusUpdate');
						if (_form.length===0){
							_statusDiv.append('<div id="statusUpdate" style="display:none;"></div>');
							_form = $('#statusUpdate');
							_form.html('<input type="text" maxlength="75"/><br/><a href="#" onclick="CommunityProfile.Status.update();return false;">Update</a> <a href="#" onclick="CommunityProfile.Status.hideUpdate();return false;">Cancel</a>');
						}
						return _form;
					}
					
					var _statusDiv = $('#status');
					_updateForm    = _getUpdateForm();
					_statusContent.fadeOut("slow",function(){
						_updateForm.fadeIn("slow");
						_updateForm.find('input:text').focus();
					});
					return false;
				},
				hideUpdate: function(){
					_updateForm.fadeOut("slow",function(){
						_statusContent.fadeIn("slow");
						_updateForm.find('input:text').val('');
					});
				},
				update: function() {
					var _statusDiv  = $('#status');
					var _statusText = _statusDiv.find('input:text').val() || '';
					CommunityService.saveStatus("user_status", _statusText,
						function() { 
							_status.hideUpdate();
							if(bam.validation.isEmpty(_statusText)){_statusText = "update your status";}
							_statusContent.html('<a href="#" onclick="CommunityProfile.Status.displayUpdate();return false;">'+_statusText+'</a>');							
						}, 
						function() {
							alert('error updating status');	
							_status.hideUpdate();
						}
					);
				}
			};
			return _status;
		})(),
		Friends: (function() {
			var _getAllFriends = function(cb) {
				FriendService.findFriends(ipid, {sortAsc:true, sortField:["nickname"]}, cb, _self.OnError);
			};
			var _getUnconfirmedFriends = function(cb) {
				FriendService.findFriendsToConfirm(cb, _self.OnError);
			};
			var _friends = {
				ViewFriends: function(){
					//Write out a frame first
					var _out = new bam.string.StringBuffer();
					var tmpl = _Templates.RenderModule({
						title: "All Friends",
						body: "<div class=\"slider\" id=\"allFriendsSlider\">Loading ...</div>"		   
					});
					_out.append("<div class=\"popupAllFriends\">").append(tmpl.toString()).append("</div>");
					var popWidth = 250; // default is 500 (set in CSS)
					bam.popModule.show({htmlContent:_out.toString(), width:popWidth});
					//Load friends as they become available (async)
					_getAllFriends(function(data) {
							var friends = data;
							_out.clear();
							if(!!friends && !!friends.length) {
								var fLen = friends.length-1, f=0, cf=null, cfdata=null, avatar,
									plink = "/mlb/community/profile/index.jsp?ipid=";
								if(fLen>=0) {
									_out.append("<ul>");
									do {
										cf=friends[f];											
										avatar=cf.avatar.replace('{sizeKey}','41x47');
										_out.append("<li class=\"friend\">")
											.append("<div class=\"picture flowLeft\">")
											.append("<a href=\"" + plink + cf.identityPointId + "\">")
											.append("<img border=\"0\" src=\"" + avatar +"\"/>")
											.append("</a>").append("</div>")
											.append("<div class=\"details flowLeft\">")
												.append("<span class=\"nickname\">")
													.append("<a href=\"" + plink + cf.identityPointId + "\">")
													.append(cf.nickname)
													.append("</a>")
												.append("</span><br />")
												.append("<span class=\"favorite\">");												
												if(!!cf && !!cf.favoriteTeam) {
													cfdata = isNaN(parseInt(cf.favoriteTeam,10)) ? _self.Properties.findTeamByCode(cf.favoriteTeam) : _self.Properties.findTeamByTeamId(cf.favoriteTeam);
													if(!!cfdata) {
														_out.append(cfdata.club_full_name);
													}
												}
												_out.append("</span>")
											.append("</div>")
										.append("</li>");
									} while(f++<fLen);
									_out.append("</ul>");
								}
							} else {
								_out.append("<span class=\"noMessage\">No Friends</span>");	
							}
						$("#allFriendsSlider").html("").html(_out.toString());
					});
				},
				ViewFriendsToConfirm: function(){
					_addConfirm = 1;
					//Write out a frame first
					var _out = new bam.string.StringBuffer();
					var tmpl = _Templates.RenderModule({
						title: "friend requests",
						body: "<div class=\"slider\" id=\"allFriendsSlider\">Loading ...</div>"
					});
					_out.append("<div class=\"popupAllFriends\">").append(tmpl.toString()).append("</div>");
					var popWidth = 250; // default is 500 (set in CSS)
					bam.popModule.show({htmlContent:_out.toString(), width:popWidth});					
					_friends.ReloadUnconfirmedFriends();
				},
				Load: function() {
					if(!!_isLoaded && !!_profile) {						
						var _out = new bam.string.StringBuffer();
						if(!!_profile.friends) {							
							var friends = _profile.friends;
							var fLen = (friends.length>2)?2:friends.length-1 , f=0, cf=null, fCheck=false;							
							if(fLen>=0) {								
								_out.append("<ul class=\"slides\">");
								do {
									cf=friends[f];
									if(!!cf) {
										avatar = cf.avatar.replace('{sizeKey}','41x47');
										favTeam = !!!cf.favoriteTeam ? { club: 'mlb' } : isNaN(parseInt(cf.favoriteTeam,10)) ? _self.Properties.findTeamByCode(cf.favoriteTeam) : _self.Properties.findTeamByTeamId(cf.favoriteTeam);
										favTeamDisplayCode = !!favTeam ? favTeam.club : 'generic';
										_out.append("<li class=\"slide "+ favTeamDisplayCode + "\" title=\"" + cf.nickname + "\">");
											_out.append("<div class=\"picture\">")
													.append("<a href=\"/mlb/community/profile/index.jsp?ipid="+cf.identityPointId+"\">")
													.append("<img border=\"0\" width=\"41\" heigth=\"47\" src=\"" + avatar + "\" alt=\""+cf.nickname+"\"/>")
													.append("</a>")
												.append("</div>")
												.append("<div class=\"nickname\">")
													.append("<a href=\"/mlb/community/profile/index.jsp?ipid="+cf.identityPointId+"\">")
														.append(cf.nickname.substr(0, 6)+"..")
													.append("</a>")
												.append("</div>");
										_out.append("</li>");
										fCheck = true;
									}
								} while(f++<fLen);
								_out.append("</ul>")
								.append("<div class=\"viewAll\"><a href=\"javascript: CommunityProfile.Friends.ViewFriends()\">view all &raquo;</a></div>");
							}
							if(!fCheck) {
								_out.append("<span class=\"noMessage\">No Friends</span>");
							}														
						} else {
							_out.append("<span class=\"noMessage\">No Friends</span>");
						}
						var tmpl = _Templates.RenderModule({
								title: "friends",
								body: _out.toString()
						});
						$("#userFriendsFrame").html(tmpl.toString());
					}
					_setLoadedModule();
				},
				AddFriend: function(em){
					_addConfirm = 0;
					var _out = new bam.string.StringBuffer();					
					var friend = !!_profile.profile && _profile.profile;		
					var friendAvatar = (!!friend && friend.avatar)?friend.avatar.value[0].replace('{sizeKey}','81x77'):"http://mlb.mlb.com/images/account/avatars/81x77/generic.jpg";
					_out.append("<div class=\"popupAddToFriends\">")
							.append("<div class=\"title\">").append("<div class=\"leftCorner\"></div>").append("Add to Friends").append("<div class=\"rightCorner\"></div>").append("</div>")
							.append("<div class=\"border\">")
								.append("<div class=\"block\">")
									.append("<div class=\"friendInfo flowLeft\">")
										.append("<div class=\"picture\">").append("<img src=\""+friendAvatar+"\" width=\"81\" height=\"77\" alt=\""+_nickname+"\" />").append("</div>")
										.append("<div class=\"description\"><span class=\"nickname\">").append(_nickname).append("</span>");
										if(!!_favoriteClub && !!_favoriteClub.club_full_name) {
											_out.append("<br />").append(_favoriteClub.club_full_name);
										}
									_out.append("</div>")	
									.append("</div>")
									.append("<div class=\"context flowLeft\">")
										.append("<div class=\"message\">")
											.append("<p>Are you sure you want to add <span class=\"nickname\">").append(_nickname).append("</span> as a friend? Your friend will have to accept your friendship.</p>")
										.append("</div>")
										.append("<div class=\"buttons\">")
											.append("<a href=\"javascript: CommunityProfile.Friends.RequestFriend()\">")
												.append("<img src=\"/mlb/components/community/profile/images/buttons/btn_add_to_friends.jpg\" alt=\"Add to friends\" width=\"106\" height=\"26\" border=\"0\" />")
											.append("</a> ")
											.append("<a href=\"javascript: bam.popModule.exit()\">")
												.append("<img src=\"/mlb/components/community/profile/images/buttons/btn_cancel.jpg\" alt=\"Cancel\" width=\"87\" height=\"26\" border=\"0\" />")
											.append("</a>")
										.append("</div>")
									.append("</div>")
								.append("</div>")
							.append("</div>")
						.append("</div>");
					var popWidth = 400; // default is 500 (set in CSS)
					bam.popModule.show({htmlContent:_out.toString(), width:popWidth});
				},
				RemoveFriend: function(){
					FriendService.deleteFriend(ipid, function() {
						location.reload();		
					}, _self.OnError);
				},
				BlockUser: function(){
					_addConfirm = 2;
					var friend = !!_profile.profile && _profile.profile;
					var friendAvatar = (!!friend && friend.avatar)?friend.avatar.value[0].replace('{sizeKey}','81x77'):"http://mlb.mlb.com/images/account/avatars/81x77/generic.jpg";
					var _out = new bam.string.StringBuffer();
					_out.append("<div class=\"popupAddToFriends\">")
							.append("<div class=\"title\">").append("<div class=\"leftCorner\"></div>").append("Block User").append("<div class=\"rightCorner\"></div>").append("</div>")
							.append("<div class=\"border\">")
								.append("<div class=\"block\">")
									.append("<div class=\"friendInfo flowLeft\">")
										.append("<div class=\"picture\">").append("<img src=\""+friendAvatar+"\" width=\"81\" height=\"77\" alt=\""+_nickname+"\" />").append("</div>")
										.append("<div class=\"description\"><span class=\"nickname\">").append(_nickname).append("</span>");
										if(!!_favoriteClub && !!_favoriteClub.club_full_name) {
											_out.append("<br />").append(_favoriteClub.club_full_name);
										}
									_out.append("</div>")	
									.append("</div>")
									.append("<div class=\"context flowLeft\">")
										.append("<div class=\"message\">")
											.append("<p>Are you sure you want to block <span class=\"nickname\">").append(_nickname).append("</span> as a friend?</p>")
										.append("</div>")
										.append("<div class=\"buttons\">")
											.append("<a href=\"javascript: CommunityProfile.Friends.RequestBlock()\">")
												.append("<img src=\"/mlb/components/community/profile/images/buttons/btn_block_user.jpg\" alt=\"Block User\" width=\"106\" height=\"26\" border=\"0\" />")
											.append("</a> ")
											.append("<a href=\"javascript: bam.popModule.exit()\">")
												.append("<img src=\"/mlb/components/community/profile/images/buttons/btn_cancel.jpg\" alt=\"Cancel\" width=\"87\" height=\"26\" border=\"0\" />")
											.append("</a>")
										.append("</div>")
									.append("</div>")
								.append("</div>")
							.append("</div>")
						.append("</div>");
					var popWidth = 400; // default is 500 (set in CSS)
					bam.popModule.show({htmlContent:_out.toString(), width:popWidth});					
				},
				ConfirmFriend: function(_ipid, cf) {
					FriendService.confirmFriend(_ipid || ipid, function() {
						if(!cf) {
							location.reload();
						} else {
							bam.popModule.postExit = function() {
								bam.popModule.postExit = function(){};
								location.reload();
							};
							cf();
						}
					}, _self.OnError);
				},
				IgnoreFriend: function(_ipid, cf) {					
					FriendService.denyFriend(_ipid || ipid, function() {
						if(!cf) {
							location.reload();
						} else {
							bam.popModule.postExit = function() {
								bam.popModule.postExit = function(){};
								location.reload();
							};
							cf();
						}
					}, _self.OnError);					
				},
				UnblockUser: function(_ipid){
					FriendService.unblock(_ipid || ipid, function() {
					
					}, _self.OnError);
				},
				FlagUser: function(){},
				RequestBlock: function() {
					FriendService.block(ipid, function() {
						bam.popModule.exit();
						location.reload();
					}, _self.OnError);
				},
				RequestFriend: function() {
					FriendService.requestFriend(ipid, function() {
						bam.popModule.exit();
						location.reload();
					}, _self.OnError);
				},
				ReloadUnconfirmedFriends: function() {
					//Load friends as they become available (async)
					var _out = new bam.string.StringBuffer();
					_getUnconfirmedFriends(function(data) {
							var friends = data;
							if(!!friends && !!friends.length) {
								var fLen = friends.length-1, f=0, cf=null, cfdata=null, 
									plink = "/mlb/community/profile/index.jsp?ipid=";
								if(fLen>=0) {
									_out.append("<ul>");
									do {
										cf=friends[f];						
										_out.append("<li class=\"friend\">")
											.append("<div class=\"picture flowLeft\">")
											.append("<a href=\"" + plink + cf.identityPointId + "\">")
											.append("<img border=\"0\" src=\""+cf.avatar.replace('{sizeKey}','41x47')+"\"/>")
											.append("</a>").append("</div>")
											.append("<div class=\"details flowLeft\">")
												.append("<span class=\"nickname\">")
													.append("<a href=\"" + plink + cf.identityPointId + "\">")
													.append(cf.nickname)
													.append("</a>")
												.append("</span><br />")
												.append("<span class=\"favorite\">");												
												if(!!cf && !!cf.favoriteTeam) {
													cfdata = isNaN(parseInt(cf.favoriteTeam,10)) ? _self.Properties.findTeamByCode(cf.favoriteTeam) : _self.Properties.findTeamByTeamId(cf.favoriteTeam);
													if(!!cfdata) {
														_out.append(cfdata.club_full_name);
													}
												}
												_out.append("</span><br />")
												.append("<div class=\"ignoreAccept\">")
													.append("<a href=\"javascript: CommunityProfile.Friends.ConfirmFriend(" + cf.identityPointId + ", CommunityProfile.Friends.ReloadUnconfirmedFriends)\">Confirm</a> | ")
													.append("<a href=\"javascript: CommunityProfile.Friends.IgnoreFriend(" + cf.identityPointId + ", CommunityProfile.Friends.ReloadUnconfirmedFriends)\">Ignore</a>")
												.append("</div>")
											.append("</div>")
										.append("</li>");
									} while(f++<fLen);
									_out.append("</ul>");
								}
							} else {
								_out.append("<span class=\"noMessage\">No Pending Requests</span>");	
							}
						$("#allFriendsSlider").html("").html(_out.toString());
					});
				}
			};
			return _friends;
		})(),
		FavoritePlayers: (function(){
			var _getPlayerInfo = function(pid, cb) {
				var restUrl = "/lookup/json/named.player_info.bam" + bam.url.buildSearch({sport_code:"'mlb'",player_id:pid});
				$.ajax({
					type: "GET",
					url: restUrl,
					dataType: "json",
					async: true,
					beforeSend: function(req) {
						req.setRequestHeader("SOAPServer", "http://mlb.mlb.com/lookup/json/named.player_info.bam");
					},
					success: cb
			    });
			};
			var _renderMainPlayer = function(pInfo) {
				var _out = new bam.string.StringBuffer();
				var picPath = "http://mlb.mlb.com/images/players/action/ph_" +pInfo.id+ ".jpg";
				_out.append("<div class=\"mainPlayer\" id=\"mainPlayer\">")
						.append("<dl class=\"mainPlayerSlide\">")
						.append("<dt><a href=\"http://www.mlb.com/team/player.jsp?player_id="+pInfo.id+"\">")
						.append("<img border=\"0\" width=\"191\" height=\"135\" src=\"" + picPath + "\"/></a></dt>")
						.append("<dd><a href=\"http://www.mlb.com/team/player.jsp?player_id="+pInfo.id+"\"><span class=\"mainPlayerName\">")
						.append(pInfo.name).append("</span></a> <span class=\"mainPlayerNumber\">")
						.append(pInfo.position).append("</span></dd>").append("<dd><span class=\"mainPlayerTeam\">")
						.append(pInfo.team).append("</span></dd>")
						.append("</dl>")
					.append("</div>");				
				return _out.toString();
			};
			var _renderOtherPlayer = function(pInfo) {
				var _out = new bam.string.StringBuffer();				
				var picPath = "http://mlb.mlb.com/mlb/images/fantasy/wsfb/41x50/" +pInfo.id+ ".jpg";			
				
				_out.append("<div class=\"playerSlide\">").
				append("<div><a href=\"http://www.mlb.com/team/player.jsp?player_id="+pInfo.id+"\">").
				append("<img border=\"0\" width=\"41\" height=\"50\" src=\"" + picPath + "\"/></a></div>").
				append("<a href=\"http://www.mlb.com/team/player.jsp?player_id="+pInfo.id+"\"><span class=\"name\">").
				append(pInfo.name).append("</span></a>").append("</div>");
				
				return _out.toString();
			};
			var _favorite = {
				Load: function() {
					if(!!_isLoaded && !!_profile) {
						if(!!_profile.profile) {
							var tmpl = _Templates.RenderModule({
								title: "favorite players",
								borderId: "userFavoritePlayers"
							});
							$("#userFavoritePlayersFrame").html(tmpl.toString());							
							var favoritePlayers = !!_profile.profile.favoritePlayer && _profile.profile.favoritePlayer.value;														
							if(!!favoritePlayers) {								
								var _mainPlayer = null, _fLen = favoritePlayers.length-1;
								_getPlayerInfo(favoritePlayers, function(data) {
									//Assign index function to favPlayers
									favoritePlayers.index = function(val){
										var i = this.length - 1;
										if(i>=0){do{if(this[i]===val){break;}}while(i--);}
										return i;
									};
									var allPlayers = [];
									if(data.player_info.queryResults.row instanceof Array) {
										allPlayers = data.player_info.queryResults.row;
									} else {
										allPlayers.push(data.player_info.queryResults.row);
									}
									allPlayers.sort(function(a, b) {
										var aa = favoritePlayers.index(a.player_id);
										var bb = favoritePlayers.index(b.player_id);
										return (bb>aa)?-1:((aa>bb)?1:0);
									});
									_fLen = allPlayers.length-1;									
									if(_fLen >= 0) {																		
										_mainPlayer = allPlayers[0];
										$("#userFavoritePlayers").html("").append(
											_renderMainPlayer({
												id: _mainPlayer.player_id,
												name: _mainPlayer.name_display_first_last,
												position: "#" + _mainPlayer.jersey_number,
												team: _mainPlayer.team_name
											})
										);									
										if(_fLen > 0) {
											var _fp = 1, _otherPlayer = null;
											var _out = new bam.string.StringBuffer();
											_out.append("<hr/>")
												.append("<div class=\"otherPlayers\">");
											do {												
												_otherPlayer = allPlayers[_fp];
												_out.append(
													_renderOtherPlayer({
														id: _otherPlayer.player_id,
														name: _otherPlayer.name_display_first_last
													})
												);												
											} while(_fp++ < _fLen);
											_out.append("<br class=\"clear\"/>")											
											.append("</div>");
											$("#userFavoritePlayers").append(_out.toString());																					
										}
									}								
								});
							} else {
								$("#userFavoritePlayers").html("").append("<span class=\"noMessage\">No Favorite Players</span>");
							}
						}
					}
					_setLoadedModule();
				}
			};
			return _favorite;
		})(),
		Schedule: (function() {
			var _tryNextYear = false;
			var _hasFavoriteTeam = false;
			var _getGames = function(cb) {				
				
				var qs = {
					season: (!!_tryNextYear)?(_currentDate.getFullYear()+1):_currentDate.getFullYear(),
					results: (!!_hasFavoriteTeam)?4:6,
					game_status_ind: ["'I'","'S'","'P'"],
					sport_code:"'mlb'",
					game_type: ["'R'", "'D'", "'L'", "'W'"]
				};
				if(!!_hasFavoriteTeam) {					
					qs.team_id = _favoriteClub.team_id;						
				}				
				var restUrl = "/lookup/json/named.schedule_upcoming.bam" + bam.url.buildSearch(qs);				
				$.ajax({
					type: "GET",
					url: restUrl,
					dataType: "json",
					beforeSend: function(req) {
						req.setRequestHeader("SOAPServer", "http://mlb.mlb.com/lookup/json/named.schedule_upcoming.bam");
					},
					success: cb
			    });
			};
			var _parseDate = function(xmlDate) {
				var _out = null;
				var gd = /^(\d{4})-(\d{2})-(\d{2})T([0-9:]{8})$/.exec(xmlDate);
				if(!!gd) {
					var gt = gd[4].split(":");
					_out = bam.datetime.DateTime(new Date(parseInt(gd[1],10), parseInt(gd[2], 10)-1, parseInt(gd[3],10), gt[0], gt[1], gt[2]));
				}
				return _out;
			};
			var _renderSchedule = function(games) {
				var _out = new bam.string.StringBuffer();
				var _upcoming = games.schedule_upcoming.queryResults.row;
				var g, cg, gLen, ch, ca, game_date, game_time;
				//No schedule? Try next year.
				if(typeof(_upcoming) === "undefined" && !_tryNextYear) {
					_tryNextYear = true;
					_getGames(_renderSchedule);
				}
				if(!!_hasFavoriteTeam) {										
					if(typeof(_upcoming) !== "undefined") {
						//Club schedule
						var clubName = _favoriteClub.club_common_name || "Club";
						_out.append("<div id=\"scheduleTitle\">").append(clubName + " schedule").append("</div>");					
						//Current Game
						var currentGame = _upcoming[0];
						var away_club = _self.Properties.findTeamByTeamId(currentGame.away_team_id);
						var home_club = _self.Properties.findTeamByTeamId(currentGame.home_team_id);
						var away_club_display_name = !!away_club ? away_club.display_code : currentGame.away_name_city;
						var home_club_display_name = !!home_club ? home_club.display_code : currentGame.home_name_city;
						var away_club_display_code = !!away_club ? away_club.display_code : 'generic';
						var home_club_display_code = !!home_club ? home_club.display_code : 'generic';
						//Away
						_out.append("<div id=\"currentGame\">").append("<div class=\"currentGameBlock\">")
						.append("<span class=\"score\">");
						if(!!currentGame.away_win && !!currentGame.away_loss) {
							_out.append("("+currentGame.away_win+"-"+currentGame.away_loss+")");
						}
						_out.append("</span>");
						//|__ Logo
							_out.append("<div class=\"lgLogo " + away_club_display_code + "\"></div>");
							// At
							_out.append("<span class=\"atSign\">@</span>");
						//Home
						//|__ Logo					
							_out.append("<div class=\"lgLogo " + home_club_display_code + "\"></div>")
						.append("<span class=\"score\">");
						if(!!currentGame.home_win && !!currentGame.home_loss) {
							_out.append("("+currentGame.home_win+"-"+currentGame.home_loss+")");
						}
						_out.append("</span>")
						.append("</div>").append("</div>");
						//Next game display
						_out.append("<div id=\"nextGameBlock\">")
							.append("<div class=\"title\">NEXT GAME: ").append("<span id=\"nextPlayingTeams\">")
							.append("<a href=\"javascript: launchGameday({gid:'"+currentGame.game_id.replace(/\//g,"_").replace(/-/g,"_")+"'})\">"+away_club_display_name+" @ "+home_club_display_name+"</a>")
							.append("</span>").append("</div>");
							//Date
							game_date = _parseDate(currentGame.game_time_et);
							game_time = game_date.formatDate("h:mm a");
							game_time = (game_time === "3:33 AM")?"TBD":game_time + " ET";
							
							_out.append("<div class=\"date\">" + game_date.formatDate("MMMM d (EEEE)' at '") + game_time + "</div>");
							//Links
							_out.append("<div class=\"links\">")
								.append("<a href=\"" + "/schedule/index.jsp" + bam.url.buildSearch({c_id:_favoriteClub.display_code, m:(game_date.getMonth()+1), y:game_date.getFullYear()}) + "\">Get Tickets</a>")
								.append(" | <a href=\"/mediacenter/index.jsp#"+game_date.toYMD()+"\">Watch on MLB.tv</a>")
								.append(" | <a href=\"/mediacenter/index.jsp#"+game_date.toYMD()+"\">Listen</a></div>")
							.append("</div>");
						//Upcoming Games
						_out.append("<div class=\"upcomingGamesBlock\">")
							.append("<div class=\"title\">UPCOMING:</div>")
							.append("<ul>");
							g = 1;
							gLen = _upcoming.length-1;
							cg = ch = ca = ch_display = ca_display = null;
							if(gLen>0) {
								do {
									cg = _upcoming[g];
									ca = _self.Properties.findTeamByTeamId(cg.away_team_id);
									ch = _self.Properties.findTeamByTeamId(cg.home_team_id);
									ca_display = !!ca ? ca.display_code : 'generic';
									ch_display = !!ch ? ch.display_code : 'generic';
									game_date = _parseDate(cg.game_time_et);
									game_time = game_date.formatDate("h:mm a");
									game_time = (game_time === "3:33 AM")?"TBD":game_time;
									_out.append("<li class=\"event\">")
										.append("<div class=\"smLogo "+ca_display+"\"></div>")
										.append("<div class=\"smLogo "+ch_display+"\"></div>")
										.append("<span class=\"date\">"+game_date.formatDate("M/d")+" "+game_time+"</span>")
										.append("<span class=\"links\">")
											.append("<a href=\"/mediacenter/index.jsp#"+game_date.toYMD()+"\">")
											.append("<img src=\"/mlb/components/community/profile/images/tv.gif\" alt=\"Watch on MLB.tv\" width=\"15\" height=\"12\" border=\"0\" />").append("</a>")
											.append(" | ")
											.append("<a href=\"javascript: launchGameday({gid:'"+cg.game_id.replace(/\//g,"_").replace(/-/g,"_")+"'})\">")
											.append("<img src=\"/mlb/components/community/profile/images/gameday.gif\" alt=\"Follow on Gameday\" width=\"15\" height=\"12\" border=\"0\" />").append("</a>")
										.append("</span>")
										.append("</li>");
								} while(g++<gLen);
							}
						_out.append("</ul>").append("</div>");
					}
				} else {
					var today = bam.datetime.DateTime(new Date());
						today = (_tryNextYear)?today.incrementYear(1):today;
					var title = (_tryNextYear)?"upcoming games":"today's games";
					_out.append("<div id=\"scheduleTitle\">").append(title).append("</div>");
					//Upcoming Games
					_out.append("<div class=\"upcomingGamesBlock\">")
						.append("<div class=\"title\"></div>")
						.append("<ul>");
						g = 0; cg = null; 
						gLen = (!!_upcoming)?_upcoming.length-1:0; 
						ch = ca = ch_display = ca_display = null;
						if(gLen>0) {
							do {
								cg = _upcoming[g];
								ca = _self.Properties.findTeamByTeamId(cg.away_team_id);
								ch = _self.Properties.findTeamByTeamId(cg.home_team_id);
								ca_display = !!ca ? ca.display_code : 'generic';
								ch_display = !!ch ? ch.display_code : 'generic';
								game_date = _parseDate(cg.game_time_et);
								game_time = game_date.formatDate("h:mm a");
								game_time = (game_time === "3:33 AM")?"TBD":game_time;
								_out.append("<li class=\"event\">")
										.append("<div class=\"smLogo "+ca_display+"\"></div>")
										.append("<div class=\"smLogo "+ch_display+"\"></div>")
										.append("<span class=\"date\">"+game_date.formatDate("M/d")+" "+game_time+"</span>")
										.append("<span class=\"links\">")
											.append("<a href=\"/mediacenter/index.jsp#"+game_date.toYMD()+"\">")
											.append("<img src=\"/mlb/components/community/profile/images/tv.gif\" alt=\"Watch on MLB.tv\" width=\"15\" height=\"12\" border=\"0\" />").append("</a>")
											.append(" | ")
											.append("<a href=\"javascript: launchGameday({gid:'"+cg.game_id.replace(/\//g,"_").replace(/-/g,"_")+"'})\">")
											.append("<img src=\"/mlb/components/community/profile/images/gameday.gif\" alt=\"Follow on Gameday\" width=\"15\" height=\"12\" border=\"0\" />").append("</a>")
										.append("</span>")
									.append("</li>");
							} while(g++<gLen);
						}
						_out.append("<div class=\"fullSchedule\"><a href=\"/mlb/schedule/index.jsp#"+today.toYMD()+"\">Full MLB Schedule &raquo;</a></div>");
						_out.append("</ul>").append("</div>");
				}
				$("#userSchedule").html(_out.toString());
			};
			var _schedule = {
				Load: function() {
					_hasFavoriteTeam = (!!_favoriteClub)?true:false;
					if(!!_isLoaded && !!_profile) {
						if(!!_profile.profile) {
							//var favTeam = !!_profile.profile.favoriteTeam && _profile.profile.favoriteTeam.value[0];							
							_getGames(_renderSchedule);
						}
					}
					_setLoadedModule();
				}
			};
			return _schedule;
		})(),
		Blog: (function() {
			/*
			var _loadAtom = function(blogUri, cb) {
				var dt = bam.datetime.DateTime(new Date());
				var url = "/mlb/components/community/profile/atomtojson.jsp?xml="+blogUri+"/atom.xml&dt="+dt.formatDate("yyyyMMddhhmm");
				$.getJSON(url, cb);
			};
			*/
			var _loadHeadlines = function(cb) {
				var url = "/mlb/components/community/profile/xml/popularblogs.xml";
				$.ajax({
					type: "GET",
					url: url,
					dataType: "xml",					
					success: function(data) {
						var json = bam.xml.xmlToJSON(data);
						if(!!cb && typeof(cb) === "function") {
							cb(json);	
						}
					}
			    });
			};	
			var _renderPopular = function(headlines) {
				var _out = new bam.string.StringBuffer();
				_out.append("<div class=\"nickname_noblog\">").append("<strong>"+_nickname+"</strong> still needs to").append("<br/>")
					.append("<a href=\"http://edit.mlblogs.com\">").append("start an MLBlog!").append("</a>").append("</div>")
					.append("<div class=\"popular_blogs_title\">Popular MLBlogs</div>")
					.append("<ul class=\"popular_blogs\">");
					var blogs = headlines.blog, bLen = blogs.length-1, cBlog = null, limit=0;
					do {
						if(limit < 4) {												
							cBlog = blogs[bLen];
							limit++;
							if(!!cBlog) {
								if(limit == 4) {
									_out.append("<li class=\"last\"><a href=\""+cBlog.URL[0].Text+"\">").append(cBlog.title[0].Text).append("</a>").append("</li>");
								} else {
									_out.append("<li><a href=\""+cBlog.URL[0].Text+"\">").append(cBlog.title[0].Text).append("</a>").append("</li>");
								}
							}								
						}
					} while(bLen--);						
				_out.append("</ul>").append("<br class=\"clear\" />");
				var tmpl = _Templates.RenderModule({
					title: "<a href=\"http://www.mlblogs.com\">MLBlogs</a>",
					body: _out.toString()
			    });
				$("#userBlogFrame").html(tmpl.toString());				
			};
			var _renderBlog = function(atom) {
				if(!atom.error) {
					var _out = new bam.string.StringBuffer();
					var entry = atom.entry,
						updated = (!!atom.updated && !bam.validation.isEmpty(atom.updated))?"last updated "+bam.datetime.parseXMLDate(atom.updated).toShortDate():"";
						_out.append("<div class=\"nickname\">").append(_nickname + "'s Latest Post:").append("</div>")
							/*
							.append("<div class=\"feed_title\">").append("<a href=\"" + atom.link + "\">").append(atom.title).append("</a>").append("</div>")
							.append("<div class=\"updated\">").append(updated).append("</div>")
							.append("<div class=\"entry_title\">").append(entry.title).append("</div>")
							.append("<div class=\"entry_body\">").append((!bam.validation.isEmpty(entry.summary))?entry.summary:"No entries created");
							if(!bam.validation.isEmpty(entry.link)) {
								_out.append("<span class=\"link\"><a href=\""+entry.link+"\">Full Entry &raquo;</a></span>").append("</div>");
							}
							*/
							.append("<iframe src=\""+atom+"/profile_component.html\" width=\"100%\" height=\"150\" scrolling=\"auto\" frameborder=\"0\"/>");
							if(parseInt(_profile.relationshipType, 10) === 100) { //My log
								_out.append("<div class=\"edit_link\"><a href=\"http://edit.mlblogs.com\">Write a new entry! &raquo;</a></div>");
							}						
						_out.append("<br class=\"clear\" />");
						var tmpl = _Templates.RenderModule({
							title: "<a href=\"http://www.mlblogs.com\">MLBlogs</a>",
							body: _out.toString()
						});
						$("#userBlogFrame").html(tmpl.toString());
				} else {
					_loadHeadlines(_renderPopular);
				}
			};
			var _blogs = {
				Load: function() {
					if(!!_isLoaded && !!_profile) {
						if(!!_profile.profile) {
							var mlblog = !!_profile.profile.mlblogUrl && _profile.profile.mlblogUrl.value[0];
							if(!!mlblog) {
								//_loadAtom(mlblog, _renderBlog);
								_renderBlog(mlblog);
							} else {
								_loadHeadlines(_renderPopular);
							}
						}
					}
					_setLoadedModule();
				}
			};
			return _blogs;
		})(),
		Rivals: (function() {
			var _rivals = {
				Load: function() {
					if(!!_isLoaded && !!_profile) {
						var _out = new bam.string.StringBuffer();						
						if(!!_profile.profile.leastFavoriteTeam) {
							_out.append("<ul class=\"rivals\">");
							var rivals = _profile.profile.leastFavoriteTeam.value;
							var rLen = rivals.length-1, r = 0, cr = null;
							do {
								cr = isNaN(parseInt(rivals[r],10)) ? _self.Properties.findTeamByCode(rivals[r]) : _self.Properties.findTeamByTeamId(rivals[r]);
								var crDisplayCode = !!cr ? cr.club : 'generic';
								_out.append("<li><a href=\"http://mlb.mlb.com?c_id="+crDisplayCode+"\"><img src=\"http://mlb.mlb.com/images/logos/50x50/"+crDisplayCode+".gif\" width=\"50\" height=\"50\" border=\"0\"/></a></li>");
							} while(r++<rLen);							
							_out.append("</ul>");
						} else {
							_out.append("<span class=\"noMessage\">No Rivals</span>");
						}
						_out.append("<br class=\"clear\" />");
						var tmpl = _Templates.RenderModule({
							title: "My Rivals",
							body: _out.toString()
						});
						$("#userLeastFavoriteFrame").html(tmpl.toString());						
					}
					_setLoadedModule();
				}
			};
			return _rivals;		  
	    })(),
		News: (function() {
			var _getNewsfeed = function(newsUri, cb) {
				var url = "/mlb/components/community/profile/newstojson.jsp?xml="+newsUri;
				$.getJSON(url, cb);
			};
			var _news = {
				Load: function() {
					if(!!_isLoaded && !!_profile) {
						if(!!_profile.profile) {
							//var favTeam = !!_profile.profile.favoriteTeam && _profile.profile.favoriteTeam.value[0];
							var favTeam = !!_favoriteClub && _favoriteClub.club;
							var newsUrl = "http://mlb.mlb.com/partnerxml/gen/news/rss/"+(favTeam||"mlb")+".xml";														
							var title = ((!!_favoriteClub && _favoriteClub.club_common_name) || "mlb") + " news";
							var _out = new bam.string.StringBuffer();
							var tmpl = _Templates.RenderModule({
							    "title":title,
								borderId:"newsData"
						    });
							$("#userNewsFrame").html(tmpl.toString());
							_getNewsfeed(newsUrl, function(data){														   
								_out.clear();
								if(!data.error) {
									var tLen = data.entry.length-1, t = 0, ct = null;
									if(tLen>=0) {
										_out.append("<ul class=\"newsLinks\">");
										do {
											ct = data.entry[t];
											if(!!ct) {
												_out.append("<li>").append("<a href=\""+ct.link+"\" title=\""+ct.title+"\">").append(((ct.title.length>27)?ct.title.substr(0, 27)+" ...":ct.title)).append("</a></li>");
											}
										} while(t++<=tLen);
										_out.append("</ul>");
									} else {
										_out.append("<span class=\"noMessage\">No News</span>");
									}
								} else {
									_out.append("<span class=\"noMessage\">No News</span>");
								}
								$("#newsData").html(_out.toString());
							});
						}
					}
				}
			};
			return _news;
		})()
	};
	return _self;
})();

