﻿
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,CLASS_NAME_QUICK_INSERT:"quickInsert",NUM_OCCURRENCES_EMPTY_DATA_BEFORE_IDLE_THROTTLE:4,RESIZE_TEXT_CONTROLS_TEMPLATE:'<div> <a class="jqPlus" href="javascript:;" style="text-decoration:none; color:#F5F5F5;">+</a> / <a class="jqMinus" href="javascript:;" style="text-decoration:none; color:#F5F5F5;">-</a> </div><br /><br /> ',_oBus:null,_LastTimestamp:null,_FullPage:null,_RoomId:null,_IsMobile:null,_OutgoingChatHeight:null,_ConnectivityWarningIssued:false,_bModeration:false,_bEnableChatFontAutoResize:false,_fZoomScale:1.0,_iModerationMode:null,_hash_tiMessages:null,_iNumMessagesInView:0,_iNumOccurrencesOfEmptyData:0,_tMessage:null,_RowStyleOscilation:0,_iMessagesVisibleMax:10,_AutoInsertJoinMessage:false,_InsertMessagesAtTop: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,Ctor:function(vars){var This=this;this._oBus=$PJP.GetControl("ChannelBus");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._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=$.trim(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.MessageCheckIntervalIdle=9000*vars.updateIntervalCoefficient;this.MessageCheckIntervalActive=2900*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);}
this._oBus.setRequestOption("WallChatRoomId",this._RoomId);this._oBus.setRequestOption("WallChatTimestamp",this._LastTimestamp);this._oBus.setRequestOption("WallChatIncludeOldTweets",true);this._oBus.setRequestOption("WallChatEnableModeratorMode",this._bModeration);this._oBus.attachListener(this._oBus.LISTENER_TYPE_CHAT_WALL,function(oPacket){This._processWallChatPacket(oPacket);});if(this._AutoInsertJoinMessage){this.SendMessage("/me has entered chat.");}
if(this._bEnableChatFontAutoResize){var browserWidth=window.innerWidth;if(typeof(browserWidth)=="undefined"||browserWidth==null||browserWidth==0){browserWidth=document.body.offsetWidth;}
this._fZoomScale=(browserWidth-64)/this.PopOutWidth*1.2;this.InitFontResizeUI();}
g_PlainJoePage.RegisterControl(vars.ClientID,this);},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");}
MediaSocial.WebServer.Services.Channel.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;}}
MediaSocial.WebServer.Services.Channel.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);},IDLE_TIMER_THRESHOLD:5*1000,_IdleTimerId:0,_jqResizeControls:null,InitFontResizeUI:function(){var This=this;var jqControls=$(this.RESIZE_TEXT_CONTROLS_TEMPLATE);jqControls.css("position","fixed").css("padding","6px").css("background-color","#333333").css("right","48px").css("top","5px").css("width","35px").css("color","#F5F5F5").css("font-size","11px").css("text-align","center").css("text-decoration","none");jqControls.find(".jqPlus").click(function(){This.OnPlusClick();});jqControls.find(".jqMinus").click(function(){This.OnMinusClick();});this._jqResizeControls=jqControls;var jqRoot=$(this._jqRoot);var jqDocument=$("body");jqDocument.css("overflow","hidden");jqDocument.append(jqControls);jqDocument.mousemove(function(){This.OnMouseMove();});this._IdleTimerId=window.setTimeout(function(){This.OnIdleTimerFire();},This.IDLE_TIMER_THRESHOLD);},OnIdleTimerFire:function(){this._jqResizeControls.fadeOut();},OnMouseMove:function(){var This=this;this._jqResizeControls.fadeIn();window.clearTimeout(this._IdleTimerId);this._IdleTimerId=window.setTimeout(function(){This.OnIdleTimerFire();},This.IDLE_TIMER_THRESHOLD);},OnPlusClick:function(){this._fZoomScale=this._fZoomScale*1.25;this.EnforceScaleRestrictions();this.UpdateLayout();},OnMinusClick:function(){this._fZoomScale=this._fZoomScale*0.75;this.EnforceScaleRestrictions();this.UpdateLayout();},EnforceScaleRestrictions:function(){var scale=this._fZoomScale;if(scale<0.5){scale=0.5;}
else if(scale>5){scale=5;}
this._fZoomScale=scale;},UpdateLayout:function(){var browserHeight=window.innerHeight;if(typeof(browserHeight)=="undefined"||browserHeight==null||browserHeight==0){browserHeight=document.body.offsetHeight;}
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=this._fZoomScale;var jqPanelIncomingChat=$(this._Panel_IncomingChat);jqPanelIncomingChat.css("font-size",scale*100.0+"%");if(scale>3.6){this._CurrentImageCssClass="pic_size_largest";}
else if(scale>2.5){this._CurrentImageCssClass="pic_size_larger";}
else if(scale>1.4){this._CurrentImageCssClass="pic_size_large";}
else{this._CurrentImageCssClass="pic_size_normal";}
var existingImages=jqPanelIncomingChat.find(".pic");existingImages.removeClass("pic_size_largest pic_size_larger pic_size_large pic_size_normal");existingImages.addClass(this._CurrentImageCssClass);}},InsertNewMessage:function(chatData){var This=this;var wallMode=this._iModerationMode;var bIsLatestMessage=!chatData.HasBeenModerated;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&&(chatData.MessageSource===0||chatData.MessageSource==20)){userProfilePic="https://graph.facebook.com/"+chatData.FbUserId+"/picture";}
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);if(chatData.MessageSource!=10&&typeof(g_Facebook)!="undefined"&&g_Facebook.GetUser()==null&&!this._bModeration){tiMessage.root.find("a").attr("href","javascript:;").removeAttr("target");}
tiMessage.data("MessageViewLevel",chatData.MessageViewLevel);tiMessage.data("MessageId",chatData.MessageId);tiMessage.root.find(".pic").addClass(this._CurrentImageCssClass);if(chatData.IsModerator){tiMessage.namedElements.LnkUserName.addClass("moderator");}
if(chatData.IsQuickInsert){tiMessage.root.addClass(This.CLASS_NAME_QUICK_INSERT);}
this._InsertMessageInOrder(tiMessage,bIsLatestMessage);var strRowCssClasses;var jqNext;var jqPrev;if((jqNext=tiMessage.root.next()).length!==0){if(jqNext.hasClass("alt")){strRowCssClasses="list";}
else{strRowCssClasses="list alt";}}
else if((jqPrev=tiMessage.root.prev()).length!==0){if(jqPrev.hasClass("alt")){strRowCssClasses="list";}
else{strRowCssClasses="list alt";}}
else{strRowCssClasses="list";}
tiMessage.root.addClass(strRowCssClasses);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];if(tiMessageExisting.root.hasClass(this.CLASS_NAME_QUICK_INSERT)){tiMessageExisting.root.remove();}
else{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();}}}},_processWallChatPacket:function(result){var _this=this;this._oBus.setRequestOption("WallChatIncludeOldTweets",false);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;}
this._LastTimestamp=result.controlDateTime;this._oBus.setRequestOption("WallChatTimestamp",this._LastTimestamp);try{if(window.opener&&window.opener.WindowManager&&result.chatData.length>0){window.opener.WindowManager.SetWindowTimestamp(window.name,result.controlDateTime);}}
catch(e){}
if(result.chatData.length>0){for(var i=0;i<result.chatData.length;i++){oChatMessagePacket=result.chatData[i];this.InsertNewMessage(oChatMessagePacket);}
this._iNumOccurrencesOfEmptyData=0;this._oBus.setThrottle(this._oBus.LISTENER_TYPE_CHAT_WALL,this.MessageCheckIntervalActive);}
else{if(this._iNumOccurrencesOfEmptyData<this.NUM_OCCURRENCES_EMPTY_DATA_BEFORE_IDLE_THROTTLE){++this._iNumOccurrencesOfEmptyData;this._oBus.setThrottle(this._oBus.LISTENER_TYPE_CHAT_WALL,this.MessageCheckIntervalActive);}
else{this._oBus.setThrottle(this._oBus.LISTENER_TYPE_CHAT_WALL,this.MessageCheckIntervalIdle);}}
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();},SendMessage:function(strMessage){var This=this;strMessage=$.trim(strMessage);if(strMessage===""||strMessage===this._strWatermarkMessage){return;}
var messageSource=null;MediaSocial.WebServer.Services.Channel.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){var strError=result.ErrorMessage||"";if(strError!=""){$PJP.ShowError(result);}
else{try{var fbUser=g_Facebook.GetUser();if(fbUser==null){return;}
var now=new Date();var fnZeroPad=function(str,num){while(str.length<num){str="0"+str;}
return str;};var chatData={};chatData.Message=result.ChatMessage;chatData.HasBeenModerated=false;chatData.MessageSource=0;chatData.UserDisplayName=fbUser.first_name+" "+fbUser.last_name;chatData.UserProfilePic="https://graph.facebook.com/"+fbUser.id+"/picture";chatData.MessageViewLevel=result.IsVisible?1:0;chatData.UserUri=fbUser.profile_url;chatData.UserIsBanned=false;chatData.AdjustedTimestamp=fnZeroPad((((now.getHours()-1)%12)+1).toString(),2)
+":"
+fnZeroPad(now.getMinutes().toString(),2);chatData.MessageId=result.MessageId;chatData.IsModerator=this._bModeration;chatData.IsQuickInsert=true;this.InsertNewMessage(chatData);var shouldDivBeScrolled=this._InsertMessagesAtTop===false;if(shouldDivBeScrolled){this._Panel_IncomingChat.scrollTop=this._Panel_IncomingChat.scrollHeight;}}
catch(e){}}},SendMessageFailure:function(error){$PJP.ShowError('Connection was lost while sending your message. Please check your internet connection and refresh the page.');}};
