﻿
Type.registerNamespace("DuckPond.Zuild.WebServer.Controls");DuckPond.Zuild.WebServer.Controls.ChatClient=function(vars){this.Ctor(vars);}
DuckPond.Zuild.WebServer.Controls.ChatClient.prototype={PopOutWidth:644,PopOutHeight:447,FbcModalPositionOffsetX:60,FbcModalPositionOffsetY:60,MODERATION_MODE_OPTIMISTIC:1,MODERATION_MODE_PESSIMISTIC:2,VIEW_LEVEL_HIDDEN:0,VIEW_LEVEL_VISIBLE:1,_LastTimestamp:null,_FullPage:null,_MessagesAreBeingRetrieved:false,_RoomId:null,_IsMobile:null,_OutgoingChatHeight:null,_ConnectivityWarningIssued:false,_bModeration:false,_bEnableChatFontAutoResize:false,_iModerationMode:null,_hash_tiMessages:null,_iNumMessagesInView:0,_tMessage:null,_RowStyleOscilation:0,_iMessagesVisibleMax:10,_AutoInsertJoinMessage:false,_InsertMessagesAtTop:false,_bSendFacebookStatusUpdates:false,_CurrentImageCssClass:"pic_size_normal",_jqRoot:null,_Panel_IncomingChat:null,_jqDiv_IncomingChat:null,_TextBox_SendMessage:null,_jqTextBoxSendMessage:null,_Button_SendMessage:null,_jqButtonSendMessage:null,_Button_PopOut:null,_Panel_WhosOnline:null,_HandleTimeoutCascade_GetMessages:null,_DisplayFacebookConnectModalIfNotSignedIn:false,_jqFbcFacade:null,_FacadeLastPosition:{Top:null,Left:null},_strWatermarkMessage:null,_bIsFirstRequestForMessages:true,Ctor:function(vars){var This=this;if(typeof(vars.updateIntervalCoefficient)!="number"){vars.updateIntervalCoefficient=1.0;}
else if(vars.updateIntervalCoefficient<0.1){vars.updateIntervalCoefficient=0.1;}
else if(vars.updateIntervalCoefficient>100.0){vars.updateIntervalCoefficient=100.0;}
this._jqRoot=$("#"+vars["RootId"]);this._tMessage=$tau("ms","ChatRow");this._LastTimestamp=vars.initialTimestamp;this._MessagesAreBeingRetrieved=false;this._RoomId=vars.RoomId;this._IsMobile=vars.IsMobile;this._FullPage=vars.FullPage;this._DisplayFacebookConnectModalIfNotSignedIn=vars["DisplayFacebookConnectModalIfNotSignedIn"];this._bModeration=vars["Moderation"];this._bEnableChatInput=vars["EnableChatInput"];this._bEnableChatFontAutoResize=vars["EnableChatFontAutoResize"];this._strWatermarkMessage=vars["WatermarkMessage"];this._hash_tiMessages={};if(vars.Panel_IncomingChat!=null){this._jqDiv_IncomingChat=$("#"+vars.Panel_IncomingChat);this._Panel_IncomingChat=this._jqDiv_IncomingChat[0];}
if(vars.Button_SendMessage!=null){this._jqButtonSendMessage=$("#"+vars.Button_SendMessage);this._Button_SendMessage=this._jqButtonSendMessage[0];}
if(vars.Button_PopOut!=null){this._Button_PopOut=$("#"+vars.Button_PopOut)[0];}
if(vars.TextBox_SendMsg!=null){this._jqTextBoxSendMessage=$("#"+vars.TextBox_SendMsg);this._TextBox_SendMessage=this._jqTextBoxSendMessage[0];}
if(vars.Panel_WhosOnline!=null){this._Panel_WhosOnline=$("#"+vars.Panel_WhosOnline)[0];}
this._OutgoingChatHeight=vars.OutgoingChatHeight;this._AutoInsertJoinMessage=vars["AutoInsertJoinMessage"];this._InsertMessagesAtTop=vars["InsertMessagesAtTop"];if(this._Panel_IncomingChat!=null){if(this._InsertMessagesAtTop===false){this._Panel_IncomingChat.scrollTop=this._Panel_IncomingChat.scrollHeight;}}
this._ShowParticipantList=this._Panel_WhosOnline!=null;this._iMessagesVisibleMax=vars["MessagesVisibleMax"];this._bSendFacebookStatusUpdates=vars["SendFacebookStatusUpdates"];this.MessageCheckIntervalInitial=200*vars.updateIntervalCoefficient;this.MessageCheckIntervalIdle=9000*vars.updateIntervalCoefficient;this.MessageCheckIntervalActive=3000*vars.updateIntervalCoefficient;var D8ADK=arguments||{};if(this._jqTextBoxSendMessage!=null){this._jqTextBoxSendMessage.keypress(function(e){This.TextBox_SendMessage_Change(e);});this._jqTextBoxSendMessage.val(this._strWatermarkMessage);this._jqTextBoxSendMessage.bind("focus click",function(){if(This._jqTextBoxSendMessage.val()===This._strWatermarkMessage){This._jqTextBoxSendMessage.val("");}});this._jqTextBoxSendMessage.bind("focus",null,function(){This.TextBox_SendMessage_Focus();});}
if(this._Button_SendMessage!=null){$(this._Button_SendMessage).click(function(){This.SendMessage(This._jqTextBoxSendMessage.val());});}
if(this._Button_PopOut!=null){$(this._Button_PopOut).click(function(){This.ButtonPopOutClicked();});}
if(this._FullPage){$addHandler(window,'resize',function(){This.UpdateLayout();});window.setTimeout(function(){This.UpdateLayout();},250);}
window.setTimeout(function(){This.GetMessages();},this.MessageCheckIntervalInitial);if(this._AutoInsertJoinMessage){this.SendMessage("/me has entered chat.");}
if(this._DisplayFacebookConnectModalIfNotSignedIn){this.FbcFacadeHide();var offset=this._jqRoot.offset();This.FbcFacadeShow(offset.left+This.FbcModalPositionOffsetX+15,offset.top+This.FbcModalPositionOffsetY+10);g_Facebook.AttachListenerLoggedIn(function(){This.FbcFacadeHide();});}
if(this._bSendFacebookStatusUpdates){if(typeof(g_Facebook)!=="undefined"){g_Facebook.AttachListenerStatusUpdate(function(strMessage,oExtraData){var bIsAutomatic=false;if(oExtraData!=null){bIsAutomatic=oExtraData.IsAutomatic||false;}
if(strMessage!=null&&strMessage.length>2&&!bIsAutomatic){This.SendMessage(strMessage,true);}});}}
if(!this._bModeration){(function(){g_Facebook.AttachListenerLoggedIn(function(){This._fbUserSignedIn();},false);})();}
g_PlainJoePage.RegisterControl(vars.ClientID,this);},_fbUserSignedIn:function(){var This=this;PlainJoeStudios.MediaSocial.WebServer.Services.Channel.GetFacebookUserIsModerator(this._RoomId,function(oResult){var bIsModerator=oResult||false;if(!bIsModerator){return;}
This._bModeration=true;This._LastTimestamp=0;This._hash_tiMessages={};This._iNumMessagesInView=0;This._bIsFirstRequestForMessages=true;This._jqDiv_IncomingChat.empty();This.GetMessages();},function(){});},FbcFacadeShow:function(x,y){var This=this;if(g_Facebook.GetUser()!=null||!this._DisplayFacebookConnectModalIfNotSignedIn){return;}
if(!(typeof(x)==="number"&&typeof(y)==="number")){x=This._FacadeLastPosition.Left;y=This._FacadeLastPosition.Top;}
else{This._FacadeLastPosition.Left=x;This._FacadeLastPosition.Top=y;}
$(function(){var jqFacade=$('<img src="/images/fbc_modal_facade.png" '
+'    alt="please sign in" '
+'    style="position:absolute;cursor:pointer;" '
+'/>');This._jqRoot.append(jqFacade);jqFacade.css("z-index",100);jqFacade.css("left",x);jqFacade.css("top",y);jqFacade.click(function(){if(g_Facebook.GetUser()==null){g_PlainJoePage.GetControl("FacebookOverview").FbcPromptSignin(x-10,y-10);}
else{This.FbcFacadeHide();}});This._jqFbcFacade=jqFacade;});},FbcFacadeHide:function(){if(this._jqFbcFacade!==null){this._jqFbcFacade.remove();this._jqFbcFacade=null;}},TextBox_SendMessage_Focus:function(){var offset=this._jqRoot.offset();offset.left+=this.FbcModalPositionOffsetX;offset.top+=this.FbcModalPositionOffsetY;var oFbOverview=g_PlainJoePage.GetControl("FacebookOverview");if(oFbOverview!=null){oFbOverview.FbcPromptSignin(offset.left,offset.top);}},TextBox_SendMessage_Change:function(e){if(!e)e=window.event
var mykey,ctrl,shift;mykey=e.charCode;if(mykey==null||mykey==0){if(e.which!=null){mykey=e.which;}
else{mykey=e.keyCode;}}
ctrl=e.ctrlKey;shift=e.shiftKey;if((shift&&mykey==13)||(ctrl&&mykey==13)){try{e.preventDefault();}catch(exc){}
try{e.stopPropagation();}catch(exc){}
return false;}
else if(mykey==13||mykey==10){if(this._TextBox_SendMessage.value==''){try{e.preventDefault();}catch(exc){}
try{e.stopPropagation();}catch(exc){}
return false;}
this.SendMessage(this._jqTextBoxSendMessage.val());try{e.preventDefault();}catch(exc){}
try{e.stopPropagation();}catch(exc){}
return false;}
return true;},BtnShowHideMessageClicked:function(ti,oElemClicked){var currentViewLevel=ti.data("MessageViewLevel");var iMessageId=ti.dataSource()["MessageId"];var jqSpanMessageEntry=ti.namedElements.MessageEntry;var iWallMode=this._iModerationMode;var updatedViewLevel=0;if(currentViewLevel===this.VIEW_LEVEL_HIDDEN){jqSpanMessageEntry.removeClass("messageDisabled").addClass("info");updatedViewLevel=this.VIEW_LEVEL_VISIBLE;oElemClicked.text("Hide");}
else{jqSpanMessageEntry.removeClass("info").addClass("messageDisabled");updatedViewLevel=this.VIEW_LEVEL_HIDDEN;oElemClicked.text("Show");}
DuckPond.Zuild.WebServer.Services.Chat.UpdateMessageVisibility(iMessageId,updatedViewLevel);ti.data("MessageViewLevel",updatedViewLevel);},BtnBanClicked:function(ti,oElemClicked){var wallMode=this._iModerationMode;var jqBtnBanUser=oElemClicked;var iMessageId=ti.data("MessageId");var bIsBanned=ti.dataSource()["IsUserBanned"];if(!bIsBanned){if(!confirm("Are you sure you wish to ban this user?")){return;}}
else{if(!confirm("Are you sure you wish to unban this user?")){return;}}
DuckPond.Zuild.WebServer.Services.Chat.SetUserBanned(iMessageId,!bIsBanned);ti.dataSource()["IsUserBanned"]=!bIsBanned;ti.namedElements.BtnBan.text((bIsBanned)?"Ban":"Unban");},ButtonPopOutClicked:function(){if(g_Facebook.GetUser()==null&&!this._bModeration){return;}
g_PlainJoePage.OpenNewWindow("/MediaSocial/Chat.aspx/"+this._RoomId.toString(),true,"MediaSocialChat"+new Date().getTime(),this.PopOutWidth,this.PopOutHeight);},UpdateLayout:function(){var browserHeight=window.innerHeight;if(typeof(browserHeight)=="undefined"||browserHeight==null||browserHeight==0){browserHeight=document.body.offsetHeight;}
var browserWidth=window.innerWidth;if(typeof(browserWidth)=="undefined"||browserWidth==null||browserWidth==0){browserWidth=document.body.offsetWidth;}
var iChatInputHeight;if(this._bEnableChatInput){iChatInputHeight=48;}
else{iChatInputHeight=0;}
var newHeightOfChatLog=browserHeight-iChatInputHeight-16;if(newHeightOfChatLog<=16){newHeightOfChatLog=16;}
this._Panel_IncomingChat.style.height=newHeightOfChatLog+"px";if(this._bEnableChatFontAutoResize){var scale=(browserWidth-64)/this.PopOutWidth*1.2;if(scale<1.0){scale=1.0;}
else if(scale>3){scale=3;}
var jqPanelIncomingChat=$(this._Panel_IncomingChat);jqPanelIncomingChat.css("font-size",scale*100.0+"%");if(scale>1.66){this._CurrentImageCssClass="pic_size_largest";}
else if(scale>1.33){this._CurrentImageCssClass="pic_size_larger";}
else{this._CurrentImageCssClass="pic_size_normal";}
var existingImages=jqPanelIncomingChat.find(".pic");existingImages.removeClass("pic_size_largest pic_size_larger pic_size_normal");existingImages.addClass(this._CurrentImageCssClass);}},InsertNewMessage:function(chatData){var This=this;var wallMode=this._iModerationMode;var bIsLatestMessage=!chatData.HasBeenModerated;var newContent=this._ChatMessageTemplate;var rowStyle;if(this._RowStyleOscilation==0){rowStyle="list";this._RowStyleOscilation=1;}
else{rowStyle="list alt";this._RowStyleOscilation=0;}
var sourceNetwork;var bRequiresEncoding=false;if(chatData.MessageSource==0)
{sourceNetwork="";bRequiresEncoding=false;}
else if(chatData.MessageSource==20)
{sourceNetwork=" Facebook Status";bRequiresEncoding=false;}
else if(chatData.MessageSource==10)
{sourceNetwork=" from Twitter";bRequiresEncoding=true;}
else{sourceNetwork="";bRequiresEncoding=true;}
var userDisplayName=chatData.UserDisplayName;if(userDisplayName==null||userDisplayName==="null"||userDisplayName==""){userDisplayName="User";}
var userProfilePic=chatData.UserProfilePic;if(userProfilePic==null||userProfilePic==="null.null"||userProfilePic==""){userProfilePic="http://static.ak.connect.facebook.com/pics/t_silhouette.jpg";}
var cssName="info";if(this._bModeration){if((wallMode===this.MODERATION_MODE_PESSIMISTIC&&chatData.MessageViewLevel==0)||chatData.MessageViewLevel==2){cssName="messageDisabled";}}
var strEncodedMessage;if(bRequiresEncoding){strEncodedMessage=$("<div></div>").text(chatData.Message).html();}
else{strEncodedMessage=chatData.Message;}
var tiMessage=this._tMessage.generate("Div_MessageRow"+chatData.MessageId,{UserPicture:userProfilePic,UserName:userDisplayName,ChatMessage_html:strEncodedMessage,CssMsg:(chatData.MessageViewLevel===this.VIEW_LEVEL_VISIBLE?"info":"messageDisabled"),MessageId:chatData.MessageId,Timestamp:chatData.AdjustedTimestamp,UserUri:chatData.UserUri,Source:sourceNetwork,ShowHideLabelInitial:(chatData.MessageViewLevel===this.VIEW_LEVEL_VISIBLE?"Hide":"Show"),IsUserBanned:chatData.IsUserBanned,BanLabelInitial:((!chatData.IsUserBanned)?"Ban":"Unban")},This);tiMessage.data("MessageViewLevel",chatData.MessageViewLevel);tiMessage.data("MessageId",chatData.MessageId);tiMessage.root.find(".pic").addClass(this._CurrentImageCssClass);tiMessage.root.addClass(rowStyle);if(chatData.IsModerator){tiMessage.namedElements.LnkUserName.addClass("moderator");}
this.InsertMessageInOrder(tiMessage,bIsLatestMessage);var messageId=chatData.MessageId;if(!this._bModeration){tiMessage.namedElements.DivModerationOptions.remove();}},InsertMessageInOrder:function(tiMessage,bIsLatestMessage){var iMessageId=tiMessage.data("MessageId");var jqPanel=this._jqDiv_IncomingChat;bIsLatestMessage=bIsLatestMessage||false;if(this._hash_tiMessages.hasOwnProperty(iMessageId)){var tiMessageExisting=this._hash_tiMessages[iMessageId];tiMessageExisting.root.replaceWith(tiMessage.root);this._hash_tiMessages[iMessageId]=tiMessage;return;}
++this._iNumMessagesInView;this._hash_tiMessages[iMessageId]=tiMessage;if((!this._bModeration&&this._iModerationMode!==this.MODERATION_MODE_OPTIMISTIC)||bIsLatestMessage){if(this._InsertMessagesAtTop){jqPanel.prepend(tiMessage.root);}
else{jqPanel.append(tiMessage.root);}
return;}
var found=false;var jqMessageParents=jqPanel.find('div.tChatMessage');var found=false;if(this._InsertMessagesAtTop){for(var i=0;i<jqMessageParents.length;++i){var jqCurrentMessage=jqMessageParents.eq(i);var tiCurrentMessage=jqCurrentMessage.data("TauInstance");var iCurrentId=tiCurrentMessage.data("MessageId");if(iCurrentId==null){continue;}
if(iCurrentId===iMessageId){found=true;break;}
if(iCurrentId<iMessageId){jqCurrentMessage.before(tiMessage.root);found=true;break;}}
if(!found){jqPanel.append(tiMessage.root);}}
else{for(var i=jqMessageParents.length-1;i>-1;--i){var jqCurrentMessage=jqMessageParents.eq(i);var tiCurrentMessage=jqMessageParents.data("TauInstance");var iCurrentId=tiCurrentMessage.data("MessageId");if(iCurrentId==null){continue;}
if(iCurrentId==iMessageId){found=true;break;}
if(iCurrentId<iMessageId){jqCurrentMessage.after(tiMessage.root);found=true;break;}}
if(!found){jqPanel.prepend(tiMessage.root);}}},LimitMessageCountInUi:function(){if(this._iNumMessagesInView>this._iMessagesVisibleMax){var iDifference=this._iNumMessagesInView-this._iMessagesVisibleMax;var jqMessageParents=$('div.tChatMessage');if(!this._InsertMessagesAtTop){for(var i=0;i<jqMessageParents.length&&iDifference>0;++i,--iDifference){var jqMessage=jqMessageParents.eq(i);var tiMessage=jqMessage.data("TauInstance");delete this._hash_tiMessages[tiMessage.data("MessageId")];--this._iNumMessagesInView;jqMessage.remove();}}
else{for(var i=jqMessageParents.length-1;i>=0&&iDifference>0;--i,--iDifference){var jqMessage=jqMessageParents.eq(i);var tiMessage=jqMessage.data("TauInstance");delete this._hash_tiMessages[tiMessage.data("MessageId")];--this._iNumMessagesInView;jqMessage.remove();}}}},GetMessages:function(){if(this._MessagesAreBeingRetrieved){return;}
if(this._HandleTimeoutCascade_GetMessages!=null){window.clearTimeout(this._HandleTimeoutCascade_GetMessages);}
this._MessagesAreBeingRetrieved=true;var _this=this;DuckPond.Zuild.WebServer.Services.Chat.GetLatestMessages(this._RoomId,this._LastTimestamp,this._bModeration,this._bIsFirstRequestForMessages,function(result){_this.GetMessagesSuccess(result);},function(error){_this.GetMessagesFailure(error);});this._bIsFirstRequestForMessages=false;},GetMessagesSuccess:function(result){var _this=this;if(result!==null&&result.ModerationMode!==null){this._iModerationMode=result.ModerationMode;}
var shouldDivBeScrolled;if(this._InsertMessagesAtTop===false){if(this._Panel_IncomingChat.scrollTop+this._Panel_IncomingChat.clientHeight<this._Panel_IncomingChat.scrollHeight){shouldDivBeScrolled=false;}
else{shouldDivBeScrolled=true;}}
else{shouldDivBeScrolled=false;}
var myTimeoutDuration=this.MessageCheckIntervalIdle;this._LastTimestamp=result.controlDateTime;if(result.chatData.length>0){for(var i=0;i<result.chatData.length;i++){oChatMessagePacket=result.chatData[i];this.InsertNewMessage(oChatMessagePacket);}}
myTimeoutDuration=this.MessageCheckIntervalActive;if(shouldDivBeScrolled){this._Panel_IncomingChat.scrollTop=this._Panel_IncomingChat.scrollHeight;}
if(!this._bModeration){for(var j=0;j<result.rowsToRemove.length;++j){var iMessageIdToDelete=result.rowsToRemove[j];var tiMessage=this._hash_tiMessages[iMessageIdToDelete]||null;if(tiMessage===null){continue;}
delete this._hash_tiMessages[iMessageIdToDelete];--this._iNumMessagesInView;tiMessage.root.remove();}}
this.LimitMessageCountInUi();this._MessagesAreBeingRetrieved=false;this._HandleTimeoutCascade_GetMessages=window.setTimeout(function(){_this.GetMessages();},myTimeoutDuration);},GetMessagesFailure:function(error){var This=this;this._MessagesAreBeingRetrieved=false;if(!this._ConnectivityWarningIssued){}
this._HandleTimeoutCascade_GetMessages=window.setTimeout(function(){This.GetMessages();},this.MessageCheckIntervalIdle);},SendMessage:function(strMessage,isStatusUpdate){var This=this;strMessage=$.trim(strMessage);if(strMessage===""){return;}
var messageSource;if(isStatusUpdate){messageSource="FacebookStatus";}
else{messageSource=null;}
DuckPond.Zuild.WebServer.Services.Chat.InsertMessage(this._IsMobile,this._RoomId,strMessage,messageSource,function(result){This.SendMessageSuccess(result);},function(error){This.SendMessageFailure(error);});window.setTimeout(function(){This._jqTextBoxSendMessage.val("");},1);if(this._InsertMessagesAtTop===false){this._Panel_IncomingChat.scrollTop=this._Panel_IncomingChat.scrollHeight;}
else{this._Panel_IncomingChat.scrollTop=0;}},SendMessageSuccess:function(result){if(result!=""){$PJP.ShowError(result);}
this.GetMessages();},SendMessageFailure:function(error){$PJP.ShowError('Connection was lost while sending your message. Please check your internet connection and refresh the page.');}};