var enabledExtendedServices=!1,enabledGroupServices=!1;const availableLang=["ja","zh-hans","zh","ru","tr","nl"];var wssServer=getDbItem("wssServer",null),profileUserID=getDbItem("profileUserID",null),profileUser=getDbItem("profileUser",null),profileName=getDbItem("profileName",null),WebSocketPort=getDbItem("WebSocketPort",null),ServerPath=getDbItem("ServerPath",null),SipUsername=getDbItem("SipUsername",null),SipPassword=getDbItem("SipPassword",null),StunServer=getDbItem("StunServer",""),TransportConnectionTimeout=parseInt(getDbItem("TransportConnectionTimeout",15)),TransportReconnectionAttempts=parseInt(getDbItem("TransportReconnectionAttempts",99)),TransportReconnectionTimeout=parseInt(getDbItem("TransportReconnectionTimeout",15)),userAgentStr=getDbItem("UserAgentStr","Roundpin (SipJS - 0.11.6)"),hostingPrefex=getDbItem("HostingPrefex",""),RegisterExpires=parseInt(getDbItem("RegisterExpires",300)),WssInTransport="1"==getDbItem("WssInTransport","1"),IpInContact="1"==getDbItem("IpInContact","1"),IceStunCheckTimeout=parseInt(getDbItem("IceStunCheckTimeout",500)),AutoAnswerEnabled="1"==getDbItem("AutoAnswerEnabled","0"),DoNotDisturbEnabled="1"==getDbItem("DoNotDisturbEnabled","0"),CallWaitingEnabled="1"==getDbItem("CallWaitingEnabled","1"),RecordAllCalls="1"==getDbItem("RecordAllCalls","0"),StartVideoFullScreen="0"==getDbItem("StartVideoFullScreen","1"),AutoGainControl="1"==getDbItem("AutoGainControl","1"),EchoCancellation="1"==getDbItem("EchoCancellation","1"),NoiseSuppression="1"==getDbItem("NoiseSuppression","1"),MirrorVideo=getDbItem("VideoOrientation","rotateY(180deg)"),maxFrameRate=getDbItem("FrameRate",""),videoHeight=getDbItem("VideoHeight",""),videoAspectRatio=getDbItem("AspectRatio",""),NotificationsActive="1"==getDbItem("Notifications","0"),StreamBuffer=parseInt(getDbItem("StreamBuffer",50)),PosterJpegQuality=parseFloat(getDbItem("PosterJpegQuality",.6)),VideoResampleSize=getDbItem("VideoResampleSize","HD"),RecordingVideoSize=getDbItem("RecordingVideoSize","HD"),RecordingVideoFps=parseInt(getDbItem("RecordingVideoFps",12)),RecordingLayout=getDbItem("RecordingLayout","them-pnp"),DidLength=parseInt(getDbItem("DidLength",6)),MaxDidLength=parseInt(getDbItem("maximumNumberLength",16)),DisplayDateFormat=getDbItem("DateFormat","YYYY-MM-DD"),DisplayTimeFormat=getDbItem("TimeFormat","h:mm:ss A"),Language=getDbItem("Language","auto"),EnableTextMessaging="1"==getDbItem("EnableTextMessaging","1"),DisableFreeDial="1"==getDbItem("DisableFreeDial","0"),DisableBuddies="1"==getDbItem("DisableBuddies","0"),EnableTransfer="1"==getDbItem("EnableTransfer","1"),EnableConference="1"==getDbItem("EnableConference","1"),AutoAnswerPolicy=getDbItem("AutoAnswerPolicy","allow"),DoNotDisturbPolicy=getDbItem("DoNotDisturbPolicy","allow"),CallWaitingPolicy=getDbItem("CallWaitingPolicy","allow"),CallRecordingPolicy=getDbItem("CallRecordingPolicy","allow"),EnableAccountSettings="1"==getDbItem("EnableAccountSettings","1"),EnableAudioVideoSettings="1"==getDbItem("EnableAudioVideoSettings","1"),EnableAppearanceSettings="1"==getDbItem("EnableAppearanceSettings","1"),EnableChangeUserPasswordSettings="1"==getDbItem("EnableChangeUserPasswordSettings","1"),EnableChangeUserEmailSettings="1"==getDbItem("EnableChangeUserEmailSettings","1"),EnableCloseUserAccount="1"==getDbItem("EnableCloseUserAccount","1"),EnableAlphanumericDial="1"==getDbItem("EnableAlphanumericDial","1"),EnableVideoCalling="1"==getDbItem("EnableVideoCalling","1"),winVideoConf=null,winVideoConfCheck=0,localDB=window.localStorage,userAgent=null,voicemailSubs=null,BlfSubs=[],CanvasCollection=[],Buddies=[],isReRegister=!1,dhtmlxPopup=null,selectedBuddy=null,selectedLine=null,alertObj=null,confirmObj=null,promptObj=null,windowsCollection=null,messagingCollection=null,HasVideoDevice=!1,HasAudioDevice=!1,HasSpeakerDevice=!1,AudioinputDevices=[],VideoinputDevices=[],SpeakerDevices=[],Lines=[],lang={},audioBlobs={},newLineNumber=0,videoAudioCheck=0,RCLoginCheck=0,decSipPass="",currentChatPrivKey="",sendFileCheck=0,upFileName="",sendFileChatErr="",pubKeyCheck=0,splitMessage={};function uID(){return Date.now()+Math.floor(1e4*Math.random()).toString(16).toUpperCase()}function utcDateNow(){return moment().utc().format("YYYY-MM-DD HH:mm:ss UTC")}function getDbItem(e,t){var i=window.localStorage;return null!=i.getItem(e)?i.getItem(e):t}function getAudioSrcID(){var e=localDB.getItem("AudioSrcId");return null!=e?e:"default"}function getAudioOutputID(){var e=localDB.getItem("AudioOutputId");return null!=e?e:"default"}function getVideoSrcID(){var e=localDB.getItem("VideoSrcId");return null!=e?e:"default"}function getRingerOutputID(){var e=localDB.getItem("RingOutputId");return null!=e?e:"default"}function formatDuration(e){var t,i=Math.floor(parseFloat(e));return i<0?i:i>=0&&i<60?i+" "+(1!=i?lang.seconds_plural:lang.second_single):i>=60&&i<3600?(t=moment.duration(i,"seconds")).minutes()+" "+(1!=t.minutes()?lang.minutes_plural:lang.minute_single)+" "+t.seconds()+" "+(1!=t.seconds()?lang.seconds_plural:lang.second_single):i>=3600&&i<86400?(t=moment.duration(i,"seconds")).hours()+" "+(1!=t.hours()?lang.hours_plural:lang.hour_single)+" "+t.minutes()+" "+(1!=t.minutes()?lang.minutes_plural:lang.minute_single)+" "+t.seconds()+" "+(1!=t.seconds()?lang.seconds_plural:lang.second_single):void 0}function formatShortDuration(e){var t,i=Math.floor(parseFloat(e));return i<0?i:i>=0&&i<60?"00:"+(i>9?i:"0"+i):i>=60&&i<3600?((t=moment.duration(i,"seconds")).minutes()>9?t.minutes():"0"+t.minutes())+":"+(t.seconds()>9?t.seconds():"0"+t.seconds()):i>=3600&&i<86400?((t=moment.duration(i,"seconds")).hours()>9?t.hours():"0"+t.hours())+":"+(t.minutes()>9?t.minutes():"0"+t.minutes())+":"+(t.seconds()>9?t.seconds():"0"+t.seconds()):void 0}function formatBytes(e,t){if(0===e)return"0 "+lang.bytes;var i=t&&t>=0?t:2,n=[lang.bytes,lang.kb,lang.mb,lang.gb,lang.tb,lang.pb,lang.eb,lang.zb,lang.yb],a=Math.floor(Math.log(e)/Math.log(1024));return parseFloat((e/Math.pow(1024,a)).toFixed(i))+" "+n[a]}function UserLocale(){var e=window.navigator.userLanguage||window.navigator.language;return langtag=e.split("-"),1==langtag.length?"":2==langtag.length||langtag.length>=3?langtag[1].toLowerCase():void 0}function GetAlternateLanguage(){var e=window.navigator.userLanguage||window.navigator.language;if("auto"!=Language&&(e=Language),"en"==(e=e.toLowerCase())||0==e.indexOf("en-"))return"";for(l=0;l<availableLang.length;l++)if(0==e.indexOf(availableLang[l].toLowerCase()))return console.log("Alternate Language detected: ",e),moment.locale(e),availableLang[l].toLowerCase();return""}function getFilter(e,t){return-1!=e.indexOf(",",e.indexOf(t+": ")+t.length+2)?e.substring(e.indexOf(t+": ")+t.length+2,e.indexOf(",",e.indexOf(t+": ")+t.length+2)):e.substring(e.indexOf(t+": ")+t.length+2)}function base64toBlob(e,t){e.indexOf(!0)&&(e=e.split(",")[1]);for(var i=atob(e),n=Math.ceil(i.length/1024),a=new Array(n),o=0;o<n;++o){for(var l=1024*o,s=Math.min(l+1024,i.length),r=new Array(s-l),d=l,c=0;d<s;++c,++d)r[c]=i[d].charCodeAt(0);a[o]=new Uint8Array(r)}return new Blob(a,{type:t})}function MakeDataArray(e,t){for(var i=new Array(t),n=0;n<i.length;n++)i[n]=e;return i}function saveConfToSqldb(){wssServer=$("#Configure_Account_wssServer").val(),WebSocketPort=parseInt($("#Configure_Account_WebSocketPort").val()),ServerPath=$("#Configure_Account_ServerPath").val(),profileName=$("#Configure_Account_profileName").val(),SipUsername=$("#Configure_Account_SipUsername").val(),SipPassword=$("#Configure_Account_SipPassword").val();var e=$("#Configure_Account_StunServer").val(),t=$("#playbackSrc").val(),i=$("#previewVideoSrc").val(),n=$("input[name=Settings_Quality]:checked").val(),a=parseInt($("input[name=Settings_FrameRate]:checked").val()),o=$("input[name=Settings_AspectRatio]:checked").val(),l=$("input[name=Settings_Oriteation]:checked").val(),s=$("#microphoneSrc").val(),r=$("#Settings_AutoGainControl").is(":checked")?"1":"0",d=$("#Settings_EchoCancellation").is(":checked")?"1":"0",c=$("#Settings_NoiseSuppression").is(":checked")?"1":"0",u=$("#ringDevice").val(),p=$("#Video_Conf_Extension").val(),g=$("#Video_Conf_Window_Width").val(),m=void 0===getDbItem("profilePicture","")?"":getDbItem("profilePicture",""),f=$("#Settings_Notifications").is(":checked")?1:0,v=$("#emailIntegration").is(":checked")?1:0,h=$("#RoundcubeDomain").val(),b=$("#rcBasicAuthUser").val(),y=$("#rcBasicAuthPass").val(),w=$("#RoundcubeUser").val(),S=$("#RoundcubePass").val();""!=userName?""!=wssServer&&""!=WebSocketPort&&""!=ServerPath&&""!=SipUsername&&""!=SipPassword?$.ajax({type:"POST",url:"save-update-settings.php",dataType:"JSON",data:{username:userName,wss_server:wssServer,web_socket_port:WebSocketPort,server_path:ServerPath,profile_name:profileName,sip_username:SipUsername,sip_password:SipPassword,stun_server:e,audio_output_id:t,video_src_id:i,video_height:n,frame_rate:a,aspect_ratio:o,video_orientation:l,audio_src_id:s,auto_gain_control:r,echo_cancellation:d,noise_suppression:c,ring_output_id:u,video_conf_extension:p,video_conf_window_width:g,profile_picture:m,notifications:f,use_roundcube:v,rcdomain:h,rcbasicauthuser:b,rcbasicauthpass:y,rcuser:w,rcpassword:S,s_ajax_call:validateSToken},success:function(e){window.location.reload()},error:function(e){alert("An error occurred while attempting to save the account configuration data!")}}):alert("Fields: 'WebSocket Domain', 'WebSocket Port', 'WebSocket Path', 'SIP Username' and 'SIP Password' are required ! Please fill in all these fields !"):alert("An error occurred while attempting to save the data!")}function getConfFromSqldb(){$.ajax({type:"POST",url:"get-settings.php",dataType:"JSON",data:{username:userName,s_ajax_call:validateSToken},success:function(e){if(null==e.wss_server||null==e.web_socket_port||null==e.server_path||null==e.sip_username||null==e.sip_password)ConfigureExtensionWindow();else{if(localStorage.getItem("firstReLoad")||(localStorage.firstReLoad=!0,window.setTimeout((function(){window.location.reload()}),200)),null==e.stun_server||void 0===e.stun_server)var t="";else t=e.stun_server;localDB.setItem("profileUserID",uID()),localDB.setItem("userrole",e.userrole),localDB.setItem("wssServer",e.wss_server),localDB.setItem("WebSocketPort",e.web_socket_port),localDB.setItem("ServerPath",e.server_path),localDB.setItem("profileUser",e.sip_username),localDB.setItem("profileName",e.profile_name),localDB.setItem("SipUsername",e.sip_username),localDB.setItem("SipPassword",e.sip_password),localDB.setItem("StunServer",t),localDB.setItem("AudioOutputId",e.audio_output_id),localDB.setItem("VideoSrcId",e.video_src_id),localDB.setItem("VideoHeight",e.video_height),localDB.setItem("FrameRate",e.frame_rate),localDB.setItem("AspectRatio",e.aspect_ratio),localDB.setItem("VideoOrientation",e.video_orientation),localDB.setItem("AudioSrcId",e.audio_src_id),localDB.setItem("AutoGainControl",e.auto_gain_control),localDB.setItem("EchoCancellation",e.echo_cancellation),localDB.setItem("NoiseSuppression",e.noise_suppression),localDB.setItem("RingOutputId",e.ring_output_id),localDB.setItem("VidConfExtension",e.video_conf_extension),localDB.setItem("VidConfWindowWidth",e.video_conf_window_width),localDB.setItem("profilePicture",e.profile_picture),localDB.setItem("Notifications",e.notifications),localDB.setItem("useRoundcube",e.use_roundcube),localDB.setItem("rcDomain",""!=e.rcdomain&&null!=e.rcdomain&&void 0!==e.rcdomain?e.rcdomain:""),localDB.setItem("rcBasicAuthUser",e.rcbasicauthuser),localDB.setItem("rcBasicAuthPass",e.rcbasicauthpass),localDB.setItem("RoundcubeUser",e.rcuser),localDB.setItem("RoundcubePass",e.rcpassword),Register()}},error:function(e){alert("An error occurred while attempting to retrieve account configuration data from the database!")}})}function saveContactToSQLDB(e){0!=e.length?$.ajax({type:"POST",url:"save-contact.php",dataType:"JSON",data:{username:userName,contact_name:e[0],contact_desc:e[1],extension_number:e[2],contact_mobile:e[3],contact_num1:e[4],contact_num2:e[5],contact_email:e[6],s_ajax_call:validateSToken},success:function(e){"success"!=e.result&&alert(e.result)},error:function(e){alert("An error occurred while attempting to save the contact to the database!")}}):alert("An error occurred while attempting to save the data!")}function updateContactToSQLDB(e){0!=e.length?""!=e[7]&&null!=e[7]&&void 0!==e[7]?$.ajax({type:"POST",url:"update-contact.php",dataType:"JSON",data:{contact_name:e[0],contact_desc:e[1],extension_number:e[2],contact_mobile:e[3],contact_num1:e[4],contact_num2:e[5],contact_email:e[6],contactDBID:e[7],s_ajax_call:validateSToken},success:function(e){"success"!=e.result&&alert(e.result)},error:function(e){alert("An error occurred while attempting to save the data!")}}):alert("Error while attempting to retrieve contact data from the database!"):alert("An error occurred while attempting to save the data!")}function saveContactPicToSQLDB(e){0!=e.length?$.ajax({type:"POST",url:"save-update-contact-picture.php",dataType:"JSON",data:{username:userName,contact_name:e[0],profile_picture_c:e[1],s_ajax_call:validateSToken},success:function(e){},error:function(e){alert("An error occurred while attempting to save contact picture!")}}):alert("An error occurred while attempting to save contact picture!")}function getContactsFromSQLDB(){$.ajax({type:"POST",url:"get-contacts.php",dataType:"JSON",data:{username:userName,s_ajax_call:validateSToken},success:function(e){var t=InitUserBuddies();$.each(e.contactsinfo,(function(i,n){var a=uID(),o=utcDateNow();""==e.contactsinfo[i].extension_number||null==e.contactsinfo[i].extension_number?(t.DataCollection.push({Type:"contact",LastActivity:o,ExtensionNumber:"",MobileNumber:e.contactsinfo[i].contact_mobile,ContactNumber1:e.contactsinfo[i].contact_num1,ContactNumber2:e.contactsinfo[i].contact_num2,uID:null,cID:a,gID:null,DisplayName:e.contactsinfo[i].contact_name,Position:"",Description:e.contactsinfo[i].contact_desc,Email:e.contactsinfo[i].contact_email,MemberCount:0}),""!=e.contactsinfo[i].profile_picture_c&&null!=e.contactsinfo[i].profile_picture_c&&localDB.setItem("img-"+a+"-contact",e.contactsinfo[i].profile_picture_c),AddBuddy(new Buddy("contact",a,e.contactsinfo[i].contact_name,"",e.contactsinfo[i].contact_mobile,e.contactsinfo[i].contact_num1,e.contactsinfo[i].contact_num2,o,e.contactsinfo[i].contact_desc,e.contactsinfo[i].contact_email),!0,!1,!1)):(t.DataCollection.push({Type:"extension",LastActivity:o,ExtensionNumber:e.contactsinfo[i].extension_number,MobileNumber:e.contactsinfo[i].contact_mobile,ContactNumber1:e.contactsinfo[i].contact_num1,ContactNumber2:e.contactsinfo[i].contact_num2,uID:a,cID:null,gID:null,DisplayName:e.contactsinfo[i].contact_name,Position:e.contactsinfo[i].contact_desc,Description:"",Email:e.contactsinfo[i].contact_email,MemberCount:0}),""!=e.contactsinfo[i].profile_picture_c&&null!=e.contactsinfo[i].profile_picture_c&&localDB.setItem("img-"+a+"-extension",e.contactsinfo[i].profile_picture_c),AddBuddy(new Buddy("extension",a,e.contactsinfo[i].contact_name,e.contactsinfo[i].extension_number,e.contactsinfo[i].contact_mobile,e.contactsinfo[i].contact_num1,e.contactsinfo[i].contact_num2,o,e.contactsinfo[i].contact_desc,e.contactsinfo[i].contact_email),!0,!1,!0))})),t.TotalRows=t.DataCollection.length,localDB.setItem(profileUserID+"-Buddies",JSON.stringify(t)),UpdateUI(),PopulateBuddyList()},error:function(e){alert("An error occurred while attempting to retrieve contacts data from the database!")}})}function getExternalUserConfFromSqldb(){$.ajax({type:"POST",url:"get-external-users-conf.php",dataType:"JSON",data:{username:userName,s_ajax_call:validateSToken},success:function(e){if(JSON.stringify(e).length>0){localDB.setItem("externalUserConfElem",e.length);for(var t=0;t<e.length;t++)localDB.setItem("extUserExtension-"+t,e[t].exten_for_external),localDB.setItem("extUserExtensionPass-"+t,e[t].exten_for_ext_pass),localDB.setItem("confAccessLink-"+t,e[t].conf_access_link)}},error:function(e){alert("An error occurred while attempting to retrieve external users configuration data from the database!")}})}function checkExternalLinks(){confirm("Links that can allow external users to access the video conferences are stored in the database. If you don't need them anymore, it's recommended to remove them in order to prevent unwanted access to your conferences. Press OK to remove all the links for external access associated with your username from the database and then exit Roundpin, or press Cancel to leave the links in the database and just exit.")?$.ajax({type:"POST",url:"remove-links-for-external-access.php",dataType:"JSON",data:{username:userName,s_ajax_call:validateSToken},success:function(e){alert("All the links for external access to conferences associated with your username have been successfully removed from the database!"),Unregister(),console.log("Signing Out ..."),localStorage.clear(),null!=winVideoConf&&winVideoConf.close(),window.open("https://"+window.location.host+"/logout.php","_self")},error:function(e){alert("An error occurred while trying to remove the data from the database!"),Unregister(),console.log("Signing Out ..."),localStorage.clear(),null!=winVideoConf&&winVideoConf.close(),window.open("https://"+window.location.host+"/logout.php","_self")}}):(Unregister(),console.log("Signing Out ..."),localStorage.clear(),null!=winVideoConf&&winVideoConf.close(),window.open("https://"+window.location.host+"/logout.php","_self"))}function deleteBuddyFromSqldb(e){$.ajax({type:"POST",url:"remove-contact.php",dataType:"JSON",data:{username:userName,contact_name:e,s_ajax_call:validateSToken},success:function(e){},error:function(e){alert("An error occurred while attempting to remove the contact from the database!")}})}function saveNewUserPassword(){var e=$("#Current_User_Password").val(),t=$("#New_User_Password").val(),i=$("#Repeat_New_User_Password").val();""!=e&&""!=t&&""!=i?/^((?=.*\d)(?=.*[a-z])(?=.*\W).{10,})$/.test(t)?i==t?$.ajax({type:"POST",url:"save-new-user-password.php",dataType:"JSON",data:{username:userName,current_password:e,new_password:t,s_ajax_call:validateSToken},success:function(e){alert(e)},error:function(e){alert("An error occurred while attempting to change the user password!")}}):alert("The passwords entered in the new password fields don't match!"):alert("The new password does not meet the requirements (to be at least 10 characters long, to contain at least one letter, at least one digit and at least one special character). Please choose a different password ! "):alert("Please fill in all the fields!")}function saveNewUserEmail(){var e=$("#Current_User_Email").val(),t=$("#New_User_Email").val(),i=$("#Repeat_New_User_Email").val();""!=e&&""!=t&&""!=i?/^[A-Za-z0-9\_\.\-\~\%\+\!\?\&\*\^\=\#\$\{\}\|\/]+@[A-Za-z0-9\.\-]+\.[A-Za-z0-9\-]{2,63}$/.test(t)?i==t?$.ajax({type:"POST",url:"save-new-user-email.php",dataType:"JSON",data:{username:userName,current_email:e,new_email:t,s_ajax_call:validateSToken},success:function(e){alert(e)},error:function(e){alert("An error occurred while attempting to change the user email address!")}}):alert("The email addresses entered in the new email fields don't match!"):alert("The new email address is not a valid email address. Please enter a valid email address!"):alert("Please fill in all the fields!")}function closeUserAccount(){closeVideoAudio(),ConfirmConfigExtWindow(lang.confirm_close_account,lang.close_roundpin_user_account,(function(){$.ajax({type:"POST",url:"close-user-account.php",dataType:"JSON",data:{username:userName,s_ajax_call:validateSToken},success:function(e){alert(e),SignOut()},error:function(e){alert("An error occurred while attempting to close your user account!")}})}))}function LaunchVideoConference(){0==winVideoConfCheck?(winVideoConf=window.open("https://"+window.location.host+"/videoconference/index.php"),winVideoConfCheck=1):alert('The video conference has been launched. If you want to launch it again refresh the page, then click "Launch Video Conference".')}function generateChatRSAKeys(e){var t=new JSEncrypt({default_key_size:1024});t.getKey();var i=t.getPublicKey();currentChatPrivKey=t.getPrivateKey(),$.ajax({type:"POST",url:"save-text-chat-pub-key.php",dataType:"JSON",data:{currentextension:e,currentchatpubkey:i,s_ajax_call:validateSToken},success:function(){},error:function(){alert("An error occurred while trying to save the new text chat public key!")}})}function removeTextChatUploads(e){$.ajax({async:!1,global:!1,type:"POST",url:"text-chat-remove-uploaded-files.php",dataType:"JSON",data:{sipusername:e,s_ajax_call:validateSToken},success:function(e){"success"!=e.note&&alert("An error occurred while trying to remove the text chat 'uploads' directory!")},error:function(e){alert("An error occurred while attempting to remove the text chat 'uploads' directory!")}})}function closeVideoConfTab(){winVideoConf&&winVideoConf.close()}function ShowEmailWindow(){if(1==getDbItem("useRoundcube","")){$("#roundcubeFrame").remove(),$("#rightContent").show(),$(".streamSelected").each((function(){$(this).css("display","none")})),$("#rightContent").append('<iframe id="roundcubeFrame" name="displayFrame"></iframe>');var e="",t="",i="",n="",a="";if($.ajax({async:!1,global:!1,type:"POST",url:"get-email-info.php",dataType:"JSON",data:{username:userName,s_ajax_call:validateSToken},success:function(o){e=o.rcdomain,t=encodeURIComponent(o.rcbasicauthuser),i=encodeURIComponent(o.rcbasicauthpass),n=o.rcuser,a=o.rcpassword},error:function(e){alert("An error occurred while trying to retrieve data from the database!")}}),""!=t&&""!=i)var o="https://"+t+":"+i+"@"+e+"/";else o="https://"+e+"/";var l='<form id="rcForm" method="POST" action="'+o+'" target="displayFrame">';l+='<input type="hidden" name="_action" value="login" />',l+='<input type="hidden" name="_task" value="login" />',l+='<input type="hidden" name="_autologin" value="1" />',l+='<input name="_user" value="'+n+'" type="text" />',l+='<input name="_pass" value="'+a+'" type="password" />',l+='<input id="submitButton" type="submit" value="Login" />',l+="</form>",$("#roundcubeFrame").append(l),0==RCLoginCheck?($("#submitButton").click(),RCLoginCheck=1):$("#roundcubeFrame").attr("src",o)}else alert("Email Integration is not enabled ! You can enable Roundcube email integration by clicking on the 'Settings' wheel in the user profile section from below > 'Settings' > 'Email Integration' > 'Enable Roundcube email integration'")}function CollapseLeftPanel(){$(window).width()>=920&&($("#leftContent").hasClass("shrinkLeftContent")?($("#leftContent").removeClass("shrinkLeftContent"),$("#rightContent").removeClass("widenRightContent"),$("#aboutImg").css("margin-right","-3px")):($("#leftContent").addClass("shrinkLeftContent"),$("#rightContent").addClass("widenRightContent"),$("#aboutImg").css("margin-right","3px")))}function ShowAboutWindow(){$.jeegoopopup.close();var e="<div>";e+='<div id="windowCtrls"><img id="minimizeImg" src="images/1_minimize.svg" title="Restore" /><img id="maximizeImg" src="images/2_maximize.svg" title="Maximize" /><img id="closeImg" src="images/3_close.svg" title="Close" /></div>',e+='<div class="UiWindowField scroller">',e+='<div><img id="AboutLogoImg" src="images/login-logo.svg"/></div>',e+='<div id="aboutPopup">'+lang.about_text+"</div>",e+="</div></div>",$.jeegoopopup.open({title:"About Roundpin",html:e,width:"640",height:"500",center:!0,scrolling:"no",skinClass:"jg_popup_basic",overlay:!0,opacity:50,draggable:!0,resizable:!1,fadeIn:0}),$("#jg_popup_b").append('<button id="ok_button">'+lang.ok+"</button>");var t=$(window).width()-12,i=$(window).height()-88;t<656||i<500?($.jeegoopopup.width(t).height(i),$.jeegoopopup.center(),$("#maximizeImg").hide(),$("#minimizeImg").hide()):($.jeegoopopup.width(640).height(500),$.jeegoopopup.center(),$("#minimizeImg").hide(),$("#maximizeImg").show()),$(window).resize((function(){t=$(window).width()-12,i=$(window).height()-88,$.jeegoopopup.center(),t<656||i<500?($.jeegoopopup.width(t).height(i),$.jeegoopopup.center(),$("#maximizeImg").hide(),$("#minimizeImg").hide()):($.jeegoopopup.width(640).height(500),$.jeegoopopup.center(),$("#minimizeImg").hide(),$("#maximizeImg").show())})),$("#minimizeImg").click((function(){$.jeegoopopup.width(640).height(500),$.jeegoopopup.center(),$("#maximizeImg").show(),$("#minimizeImg").hide()})),$("#maximizeImg").click((function(){$.jeegoopopup.width(t).height(i),$.jeegoopopup.center(),$("#minimizeImg").show(),$("#maximizeImg").hide()})),$("#closeImg").click((function(){$.jeegoopopup.close(),$("#jg_popup_b").empty()})),$("#ok_button").click((function(){$.jeegoopopup.close(),$("#jg_popup_b").empty()})),$("#jg_popup_overlay").click((function(){$.jeegoopopup.close(),$("#jg_popup_b").empty()})),$(window).on("keydown",(function(e){"Escape"==e.key&&($.jeegoopopup.close(),$("#jg_popup_b").empty())}))}function incomingCallNote(){new Notification(lang.incomming_call,{icon:"../images/notification-logo.svg",body:"New incoming call !!!"}).onclick=function(e){},document.hasFocus()||setTimeout(incomingCallNote,8e3)}function changePageTitle(){"Roundpin"==$(document).attr("title")?$(document).prop("title","New call !!!"):$(document).prop("title","Roundpin"),document.hasFocus()?$(document).prop("title","Roundpin"):setTimeout(changePageTitle,460)}function UpdateUI(){$(window).outerWidth()<920?null==selectedBuddy&null==selectedLine?($("#rightContent").hide(),$("#leftContent").css("width","100%"),$("#leftContent").show()):($("#rightContent").css("margin-left","0px"),$("#rightContent").show(),$("#leftContent").hide(),null!=selectedBuddy&&updateScroll(selectedBuddy.identity)):null==selectedBuddy&null==selectedLine?($("#leftContent").css("width","320px"),$("#rightContent").css("margin-left","0px"),$("#leftContent").show(),$("#rightContent").hide()):($("#leftContent").css("width","320px"),$("#rightContent").css("margin-left","320px"),$("#leftContent").show(),$("#rightContent").show(),null!=selectedBuddy&&updateScroll(selectedBuddy.identity));for(var e=0;e<Lines.length;e++)updateLineScroll(Lines[e].LineNumber)}function AddSomeoneWindow(e){$("#userMenu").hide(),$.jeegoopopup.close();var t="<div id='AddNewContact'>";t+="<div id='windowCtrls'><img id='minimizeImg' src='images/1_minimize.svg' title='Restore' /><img id='maximizeImg' src='images/2_maximize.svg' title='Maximize' /><img id='closeImg' src='images/3_close.svg' title='Close' /></div>",t+="<div class='UiWindowField scroller'>",t+="<div class=UiText>"+lang.display_name+":</div>",t+="<div><input id=AddSomeone_Name class=UiInputText type=text placeholder='"+lang.eg_display_name+"'></div>",t+="<div class=UiText>"+lang.title_description+":</div>",t+="<div><input id=AddSomeone_Desc class=UiInputText type=text placeholder='"+lang.eg_general_manager+"'></div>",t+="<div class=UiText>"+lang.internal_subscribe_extension+":</div>",e&&e.length>1&&e.length<DidLength&&"*"!=e.substring(0,1)?t+="<div><input id=AddSomeone_Exten class=UiInputText type=text value="+e+" placeholder='"+lang.eg_internal_subscribe_extension+"'></div>":t+="<div><input id=AddSomeone_Exten class=UiInputText type=text placeholder='"+lang.eg_internal_subscribe_extension+"'></div>",t+="<div class=UiText>"+lang.mobile_number+":</div>",t+="<div><input id=AddSomeone_Mobile class=UiInputText type=text placeholder='"+lang.eg_mobile_number+"'></div>",t+="<div class=UiText>"+lang.contact_number_1+":</div>",e&&e.length>1?t+="<div><input id=AddSomeone_Num1 class=UiInputText type=text value="+e+" placeholder='"+lang.eg_contact_number_1+"'></div>":t+="<div><input id=AddSomeone_Num1 class=UiInputText type=text placeholder='"+lang.eg_contact_number_1+"'></div>",t+="<div class=UiText>"+lang.contact_number_2+":</div>",t+="<div><input id=AddSomeone_Num2 class=UiInputText type=text placeholder='"+lang.eg_contact_number_2+"'></div>",t+="<div class=UiText>"+lang.email+":</div>",t+="<div><input id=AddSomeone_Email class=UiInputText type=text placeholder='"+lang.eg_email+"'></div>",t+="</div></div>",$.jeegoopopup.open({title:"Add Contact",html:t,width:"640",height:"500",center:!0,scrolling:"no",skinClass:"jg_popup_basic",contentClass:"addContactPopup",overlay:!0,opacity:50,draggable:!0,resizable:!1,fadeIn:0}),$("#jg_popup_b").append("<div id=bottomButtons><button id=save_button>Save</button><button id=cancel_button>Cancel</button></div>"),$("#save_button").click((function(){var e=$("#AddSomeone_Name").val();if(null!=e&&""!==e.trim())if(/^[A-Za-z0-9\s\-\'\[\]\(\)]+$/.test(e)){var t=$("#AddSomeone_Desc").val();if(null!=t&&""!==t.trim())if(/^[A-Za-z0-9\s\-\.\'\"\[\]\(\)\{\}\_\!\?\~\@\%\^\&\*\+\>\<\;\:\=]+$/.test(t))var i=t;else{i="";alert("The title/description that you entered is not valid!")}else i="";var n=$("#AddSomeone_Exten").val();if(null!=n&&""!==n.trim())if(/^[a-zA-Z0-9\*\#]+$/.test(n))var a=n;else{a="";alert("The extension that you entered in the 'Extension (Internal)' field is not a valid extension!")}else a="";var o=$("#AddSomeone_Mobile").val();if(null!=o&&""!==o.trim())if(/^[0-9\s\+\#]+$/.test(o))var l=o;else{l="";alert("The phone number that you entered in the 'Mobile Number' field is not valid! The only allowed characters are: digits, spaces, plus signs and pound signs.")}else l="";var s=$("#AddSomeone_Num1").val();if(null!=s&&""!==s.trim())if(/^[0-9\s\+\#]+$/.test(s))var r=s;else{r="";alert("The phone number that you entered in the 'Contact Number 1' field is not valid! The only allowed characters are: digits, spaces, plus signs and pound signs.")}else r="";var d=$("#AddSomeone_Num2").val();if(null!=d&&""!==d.trim())if(/^[0-9\s\+\#]+$/.test(d))var c=d;else{c="";alert("The phone number that you entered in the 'Contact Number 2' field is not valid! The only allowed characters are: digits, spaces, plus signs and pound signs.")}else c="";var u=$("#AddSomeone_Email").val();if(null!=u&&""!==u.trim())if(/^[A-Za-z0-9\_\.\-\~\%\+\!\?\&\*\^\=\#\$\{\}\|\/]+@[A-Za-z0-9\.\-]+\.[A-Za-z0-9\-]{2,63}$/.test(u))var p=u;else{p="";alert("The email that you entered is not a valid email address!")}else p="";var g=JSON.parse(localDB.getItem(profileUserID+"-Buddies"));if(null==g&&(g=InitUserBuddies()),""==a){var m=uID(),f=utcDateNow();g.DataCollection.push({Type:"contact",LastActivity:f,ExtensionNumber:"",MobileNumber:l,ContactNumber1:r,ContactNumber2:c,uID:null,cID:m,gID:null,DisplayName:e,Position:"",Description:i,Email:p,MemberCount:0});saveContactToSQLDB([e,i,"",l,r,c,p]),AddBuddy(new Buddy("contact",m,e,"",l,r,c,f,i,p),!1,!1,!1)}else{m=uID(),f=utcDateNow();g.DataCollection.push({Type:"extension",LastActivity:f,ExtensionNumber:a,MobileNumber:l,ContactNumber1:r,ContactNumber2:c,uID:m,cID:null,gID:null,DisplayName:e,Position:i,Description:"",Email:p,MemberCount:0});saveContactToSQLDB([e,i,a,l,r,c,p]),AddBuddy(new Buddy("extension",m,e,a,l,r,c,f,i,p),!1,!1,!0)}g.TotalRows=g.DataCollection.length,localDB.setItem(profileUserID+"-Buddies",JSON.stringify(g)),UpdateBuddyList(),$.jeegoopopup.close(),$("#jg_popup_b").empty()}else alert("The display name that you entered is not a valid display name!");else alert("'Display Name' cannot be empty!")}));var i=$(window).width()-12,n=$(window).height()-110;i<656||n<500?($.jeegoopopup.width(i).height(n),$.jeegoopopup.center(),$("#maximizeImg").hide(),$("#minimizeImg").hide()):($.jeegoopopup.width(640).height(500),$.jeegoopopup.center(),$("#minimizeImg").hide(),$("#maximizeImg").show()),$(window).resize((function(){i=$(window).width()-16,n=$(window).height()-110,$.jeegoopopup.center(),i<656||n<500?($.jeegoopopup.width(i).height(n),$.jeegoopopup.center(),$("#maximizeImg").hide(),$("#minimizeImg").hide()):($.jeegoopopup.width(640).height(500),$.jeegoopopup.center(),$("#minimizeImg").hide(),$("#maximizeImg").show())})),$("#minimizeImg").click((function(){$.jeegoopopup.width(640).height(500),$.jeegoopopup.center(),$("#maximizeImg").show(),$("#minimizeImg").hide()})),$("#maximizeImg").click((function(){$.jeegoopopup.width(i).height(n),$.jeegoopopup.center(),$("#minimizeImg").show(),$("#maximizeImg").hide()})),$("#closeImg").click((function(){$.jeegoopopup.close(),$("#jg_popup_b").empty()})),$("#cancel_button").click((function(){$.jeegoopopup.close(),$("#jg_popup_b").empty()})),$("#jg_popup_overlay").click((function(){$.jeegoopopup.close(),$("#jg_popup_b").empty()})),$(window).on("keydown",(function(e){"Escape"==e.key&&($.jeegoopopup.close(),$("#jg_popup_b").empty())}))}function CreateGroupWindow(){}function closeVideoAudio(){var e=$("#local-video-preview").get(0);try{e.srcObject.getTracks().forEach((function(e){e.stop()})),e.srcObject=null}catch(e){}try{window.SettingsMicrophoneStream.getTracks().forEach((function(e){e.stop()}))}catch(e){}window.SettingsMicrophoneStream=null;try{window.SettingsMicrophoneSoundMeter.stop()}catch(e){}window.SettingsMicrophoneSoundMeter=null;try{window.SettingsOutputAudio.pause()}catch(e){}window.SettingsOutputAudio=null;try{window.SettingsOutputStream.getTracks().forEach((function(e){e.stop()}))}catch(e){}window.SettingsOutputStream=null;try{window.SettingsOutputStreamMeter.stop()}catch(e){}return window.SettingsOutputStreamMeter=null,!0}function ConfigureExtensionWindow(){$("#settingsCMenu").hide(),$.jeegoopopup.close();var e='<div id="mainConfWindow">';e+="<div id='windowCtrls'><img id='minimizeImg' src='images/1_minimize.svg' title='Restore' /><img id='maximizeImg' src='images/2_maximize.svg' title='Maximize' /><img id='closeImg' src='images/3_close.svg' title='Close' /></div>",e+='<div id="mainRightConf">',e+='<div id="rightMainConfWindow">',e+='<div id="AccountHtml" class="settingsSubSection" style="display:block;">',e+="<div class=UiText>"+lang.asterisk_server_address+": *</div>",e+="<div><input id=Configure_Account_wssServer class=UiInputText type=text placeholder='"+lang.eg_asterisk_server_address+"' value='"+getDbItem("wssServer","")+"'></div>",e+="<div class=UiText>"+lang.websocket_port+": *</div>",e+="<div><input id=Configure_Account_WebSocketPort class=UiInputText type=text placeholder='"+lang.eg_websocket_port+"' value='"+getDbItem("WebSocketPort","")+"'></div>",e+="<div class=UiText>"+lang.websocket_path+": *</div>",e+="<div><input id=Configure_Account_ServerPath class=UiInputText type=text placeholder='"+lang.eg_websocket_path+"' value='"+getDbItem("ServerPath","")+"'></div>",e+="<div class=UiText>"+lang.display_name+": *</div>";var t='value="'+getDbItem("profileName","").replace("'","'")+'"';if(e+="<div><input id=Configure_Account_profileName class=UiInputText type=text placeholder='"+lang.eg_display_name+"' "+t+"></div>",e+="<div class=UiText>"+lang.sip_username+": *</div>",e+="<div><input id=Configure_Account_SipUsername class=UiInputText type=text placeholder='"+lang.eg_sip_username+"' value='"+getDbItem("SipUsername","")+"'></div>",e+="<div class=UiText>"+lang.sip_password+": *</div>",e+="<div><input id=Configure_Account_SipPassword class=UiInputText type=password placeholder='"+lang.eg_sip_password+"' value='"+getDbItem("SipPassword","")+"'></div>",e+="<div class=UiText>"+lang.stun_server+":</div>",e+="<div><input id=Configure_Account_StunServer class=UiInputText type=text placeholder='Eg: 123.123.123.123:8443' value='"+getDbItem("StunServer","")+"'></div>",e+='<p style="color:#363636;">* Required field.</p><br><br></div>',e+='<div id="AudioVideoHtml" class="settingsSubSection" style="display:none;">',e+="<div class=UiText>"+lang.speaker+":</div>",e+='<div style="text-align:center"><select id=playbackSrc style="width:100%"></select></div>',e+="<div class=Settings_VolumeOutput_Container><div id=Settings_SpeakerOutput class=Settings_VolumeOutput></div></div>",e+='<div><button class=on_white id=preview_output_play><i class="fa fa-play"></i></button><button class=on_white id=preview_output_pause><i class="fa fa-pause"></i></button></div>',e+="<br><div class=UiText>"+lang.ring_device+":</div>",e+='<div style="text-align:center"><select id=ringDevice style="width:100%"></select></div>',e+="<div class=Settings_VolumeOutput_Container><div id=Settings_RingerOutput class=Settings_VolumeOutput></div></div>",e+='<div><button class=on_white id=preview_ringer_play><i class="fa fa-play"></i></button></div>',e+="<br><div class=UiText>"+lang.microphone+":</div>",e+='<div style="text-align:center"><select id=microphoneSrc style="width:100%"></select></div>',e+="<div class=Settings_VolumeOutput_Container><div id=Settings_MicrophoneOutput class=Settings_VolumeOutput></div></div>",e+="<br><br><div><input type=checkbox id=Settings_AutoGainControl><label for=Settings_AutoGainControl> "+lang.auto_gain_control+"<label></div>",e+="<div><input type=checkbox id=Settings_EchoCancellation><label for=Settings_EchoCancellation> "+lang.echo_cancellation+"<label></div>",e+="<div><input type=checkbox id=Settings_NoiseSuppression><label for=Settings_NoiseSuppression> "+lang.noise_suppression+"<label></div>",e+="<br><div class=UiText>"+lang.camera+":</div>",e+='<div style="text-align:center"><select id=previewVideoSrc style="width:100%"></select></div>',e+="<br><div class=UiText>"+lang.frame_rate+":</div>",e+="<div class=pill-nav>",e+='<input name=Settings_FrameRate id=r40 type=radio value="2"><label class=radio_pill for=r40>2</label>',e+='<input name=Settings_FrameRate id=r41 type=radio value="5"><label class=radio_pill for=r41>5</label>',e+='<input name=Settings_FrameRate id=r42 type=radio value="10"><label class=radio_pill for=r42>10</label>',e+='<input name=Settings_FrameRate id=r43 type=radio value="15"><label class=radio_pill for=r43>15</label>',e+='<input name=Settings_FrameRate id=r44 type=radio value="20"><label class=radio_pill for=r44>20</label>',e+='<input name=Settings_FrameRate id=r45 type=radio value="25"><label class=radio_pill for=r45>25</label>',e+='<input name=Settings_FrameRate id=r46 type=radio value="30"><label class=radio_pill for=r46>30</label>',e+='<input name=Settings_FrameRate id=r47 type=radio value=""><label class=radio_pill for=r47><i class="fa fa-trash"></i></label>',e+="</div>",e+="<br><br><div class=UiText>"+lang.quality+":</div>",e+="<div class=pill-nav>",e+='<input name=Settings_Quality id=r30 type=radio value="160"><label class=radio_pill for=r30><i class="fa fa-video-camera" style="transform: scale(0.4)"></i> HQVGA</label>',e+='<input name=Settings_Quality id=r31 type=radio value="240"><label class=radio_pill for=r31><i class="fa fa-video-camera" style="transform: scale(0.6)"></i> QVGA</label>',e+='<input name=Settings_Quality id=r32 type=radio value="480"><label class=radio_pill for=r32><i class="fa fa-video-camera" style="transform: scale(0.8)"></i> VGA</label>',e+='<input name=Settings_Quality id=r33 type=radio value="720"><label class=radio_pill for=r33><i class="fa fa-video-camera" style="transform: scale(1)"></i> HD</label>',e+='<input name=Settings_Quality id=r34 type=radio value=""><label class=radio_pill for=r34><i class="fa fa-trash"></i></label>',e+="</div>",e+="<br><br><div class=UiText>"+lang.image_orientation+":</div>",e+="<div class=pill-nav>",e+='<input name=Settings_Oriteation id=r20 type=radio value="rotateY(0deg)"><label class=radio_pill for=r20><i class="fa fa-address-card" style="transform: rotateY(0deg)"></i> Normal</label>',e+='<input name=Settings_Oriteation id=r21 type=radio value="rotateY(180deg)"><label class=radio_pill for=r21><i class="fa fa-address-card" style="transform: rotateY(180deg)"></i> Mirror</label>',e+="</div>",e+="<br><br><div class=UiText>"+lang.aspect_ratio+":</div>",e+="<div class=pill-nav>",e+='<input name=Settings_AspectRatio id=r10 type=radio value="1"><label class=radio_pill for=r10><i class="fa fa-square-o" style="transform: scaleX(1); margin-left: 7px; margin-right: 7px"></i> 1:1</label>',e+='<input name=Settings_AspectRatio id=r11 type=radio value="1.33"><label class=radio_pill for=r11><i class="fa fa-square-o" style="transform: scaleX(1.33); margin-left: 5px; margin-right: 5px;"></i> 4:3</label>',e+='<input name=Settings_AspectRatio id=r12 type=radio value="1.77"><label class=radio_pill for=r12><i class="fa fa-square-o" style="transform: scaleX(1.77); margin-right: 3px;"></i> 16:9</label>',e+='<input name=Settings_AspectRatio id=r13 type=radio value=""><label class=radio_pill for=r13><i class="fa fa-trash"></i></label>',e+="</div>",e+="<br><br><div class=UiText>"+lang.preview+":</div>",e+='<div style="text-align:center; margin-top:10px"><video id="local-video-preview" class="previewVideo"></video></div>',e+="<br><div class=UiText>"+lang.video_conference_extension+":</div>",e+="<div><input id=Video_Conf_Extension class=UiInputText type=text placeholder='"+lang.video_conference_extension_example+"' value='"+getDbItem("VidConfExtension","")+"'></div>",e+="<br><div class=UiText>"+lang.video_conference_window_width+":</div>",e+="<div><input id=Video_Conf_Window_Width class=UiInputText type=text placeholder='"+lang.video_conf_window_width_explanation+"' value='"+getDbItem("VidConfWindowWidth","")+"'></div>","superadmin"==getDbItem("userrole","")){e+="<div id=confTableSection>"+lang.external_conf_users+"</div>",e+="<div class=confTable><table id=vidConfExternalTable>",e+="<tr class=btnTableRow><td><label for=extConfExtension id=extensionThLabel class=confExtLabels>Extension</label></td><td><label for=extConfExtensionPass id=extPassThLabel class=confExtLabels>SIP Password</label></td><td><label for=extConfExtensionLink id=extLinkThLabel class=confExtLabels>Link</label></td></tr>";for(var i=0;i<getDbItem("externalUserConfElem","");i++)e+="<tr class=btnTableRow><td><input type=text class=extConfExtension name=extConfExtension value='"+getDbItem("extUserExtension-"+i,"")+"' disabled=\"disabled\" /></td><td><input type=password class=extConfExtensionPass name=extConfExtensionPass value='"+getDbItem("extUserExtensionPass-"+i,"")+"' disabled=\"disabled\"/></td><td><input type=text class=extConfExtensionLink name=extConfExtensionLink value='"+getDbItem("confAccessLink-"+i,"")+'\' /></td><td><span class="copyToClipboard"><i class="fa fa-clipboard" aria-hidden="true" title="Copy link to clipboard."></i></span></td><td><span class="deleteExtRow" title="Delete extension data from database.">X</span></td><td><input type=submit class=saveExtConfExtension value="Edit" title="Edit this row." /></td></tr>';e+='<tr id=emptyExtRow class=btnTableRow><td><input type=text class=extConfExtension name=extConfExtension placeholder="Eg: 711" /></td><td><input type=password class=extConfExtensionPass name=extConfExtensionPass placeholder="Eg: d5?W?9q?8rg*R9!eFrVth?9" /></td><td><input type=text class=extConfExtensionLink name=extConfExtensionLink placeholder="Generated on \'Save\'"  disabled="disabled" /></td><td><span class="copyToClipboard"><i class="fa fa-clipboard" aria-hidden="true" title="Copy link to clipboard."></i></span></td><td><span class="deleteExtRow deleteExtRowDisabled" title="Delete extension data from database.">X</span></td><td><input type=submit class=saveExtConfExtension value=Save title="Save this row." /></td></tr>',e+="</table></div>",e+="<button id=add_New_External_User>Add External User</button>"}e+="<br><br></div>",e+='<div id="AppearanceHtml" class="settingsSubSection" style="display:none;">',e+='<div id=ImageCanvas style="width:150px; height:150px;"></div>',e+='<label for=fileUploader class=customBrowseButton style="margin-left: 200px; margin-top: -2px;">Select File</label>',e+="<div><input id=fileUploader type=file></div>",e+='<div style="margin-top: 50px"></div>',e+="</div>",e+='<div id="NotificationsHtml" class="settingsSubSection" style="display:none;">',e+="<div class=UiText>"+lang.notifications+":</div>",e+='<div id="notificationsCheck"><input type=checkbox id=Settings_Notifications><label for=Settings_Notifications> '+lang.enable_onscreen_notifications+"<label></div>",e+="</div>",e+='<div id="RoundcubeEmailHtml" class="settingsSubSection" style="display:none;">',e+="<div class=UiText>"+lang.email_integration+":</div>",e+='<div id="enableRCcheck"><input id=emailIntegration type=checkbox ><label for=emailIntegration> '+lang.enable_roundcube_integration+"<label></div>",e+="<div class=UiText>"+lang.roundcube_domain+":</div>",e+="<div><input id=RoundcubeDomain class=UiInputText type=text placeholder='Roundcube domain (Eg: mail.example.com).' value='"+getDbItem("rcDomain","")+"'></div>",e+="<div class=UiText>"+lang.roundcube_user+":</div>",e+="<div><input id=RoundcubeUser class=UiInputText type=text placeholder='Roundcube login user (Eg: john.doe@example.com or john_doe).' value='"+getDbItem("RoundcubeUser","")+"'></div>",e+="<div class=UiText>"+lang.roundcube_password+":</div>",e+="<div><input id=RoundcubePass class=UiInputText type=password placeholder='Roundcube login password.' value='"+getDbItem("RoundcubePass","")+"'></div>",e+="<div class=UiText>"+lang.rc_basic_auth_user+":</div>",e+="<div><input id=rcBasicAuthUser class=UiInputText type=text placeholder='If you have a Roundcube basic auth user, enter it here.' value='"+getDbItem("rcBasicAuthUser","")+"'></div>",e+="<div class=UiText>"+lang.rc_basic_auth_password+":</div>",e+="<div><input id=rcBasicAuthPass class=UiInputText type=password placeholder='If you have a Roundcube basic auth password, enter it here.' value='"+getDbItem("rcBasicAuthPass","")+"'></div>",e+="<br><br></div>",e+='<div id="ChangePasswordHtml" class="settingsSubSection" style="display:none;">',e+="<div class=UiText>"+lang.current_user_password+":</div>",e+="<div><input id=Current_User_Password class=UiInputText type=password placeholder='Enter your current Roundpin user password.' value=''></div>",e+="<div class=UiText>"+lang.new_user_password+":</div>",e+="<div><input id=New_User_Password class=UiInputText type=password placeholder='Enter your new Roundpin user password.' value=''></div>",e+="<div class=UiText>"+lang.repeat_new_user_password+":</div>",e+="<div><input id=Repeat_New_User_Password class=UiInputText type=password placeholder='Enter your new Roundpin user password again.' value=''></div><br>",e+="<div><input id=Save_New_User_Password type=button value='Save New Password' onclick='saveNewUserPassword()' ></div>",e+="<br><br></div>",e+='<div id="ChangeEmailHtml" class="settingsSubSection" style="display:none;">',e+="<div class=UiText>"+lang.current_user_email+":</div>",e+="<div><input id=Current_User_Email class=UiInputText type=text placeholder='Enter your current Roundpin email address.' value=''></div>",e+="<div class=UiText>"+lang.new_user_email+":</div>",e+="<div><input id=New_User_Email class=UiInputText type=text placeholder='Enter your new email address.' value=''></div>",e+="<div class=UiText>"+lang.repeat_new_user_email+":</div>",e+="<div><input id=Repeat_New_User_Email class=UiInputText type=text placeholder='Enter your new email address again.' value=''></div><br>",e+="<div><input id=Save_New_User_Email type=button value='Save New Email' onclick='saveNewUserEmail()' ></div>",e+="<br><br></div>",e+='<div id="CloseAccountHtml" class="settingsSubSection" style="display:none;">',e+="<div class=UiText>"+lang.if_you_want_to_close_account+":</div><br><br>",e+="<div><input id=Close_User_Account type=button value='Close User Account' onclick='closeUserAccount()' ></div>",e+="<br><br></div>",e+="</div></div></div>";$.jeegoopopup.open({title:"<span id=settingsTitle>Settings</span>",html:e,width:"520",height:"500",center:!0,scrolling:"no",skinClass:"jg_popup_basic",contentClass:"configPopup",overlay:!0,opacity:50,draggable:!0,resizable:!1,fadeIn:0}),$("#jg_popup_b").append('<div id="bottomButtonsConf"><button id="save_button_conf">Save</button><button id="cancel_button_conf">Cancel</button></div>'),$("#jg_popup_l").append('<table id=leftPanelSettings cellspacing=14 cellpadding=0 style="width:184px;margin-left:8px;margin-top:14px;font-size:15px;"><tr id=ConnectionSettingsRow><td class=SettingsSection>Connection Settings</td></tr><tr id=AudioAndVideoRow><td class=SettingsSection>Audio & Video</td></tr><tr id=ProfilePictureRow><td class=SettingsSection>Profile Picture</td></tr><tr id=NotificationsRow><td class=SettingsSection>Notifications</td></tr><tr id=RoundcubeEmailRow><td class=SettingsSection>Email Integration</td></tr><tr id=ChangePasswordRow><td class=SettingsSection>Change Password</td></tr><tr id=ChangeEmailRow><td class=SettingsSection>Change Email</td></tr><tr id=CloseAccountRow><td class=SettingsSection>Close Account</td></tr></table>'),1==getDbItem("useRoundcube","")?$("#emailIntegration").prop("checked",!0):$("#emailIntegration").prop("checked",!1),$("#ConnectionSettingsRow td").addClass("selectedSettingsSection"),$("#ConnectionSettingsRow").click((function(){$(".settingsSubSection").each((function(){$(this).css("display","none")})),$("#AccountHtml").css("display","block"),$(".SettingsSection").each((function(){$(this).removeClass("selectedSettingsSection")})),$("#ConnectionSettingsRow td").addClass("selectedSettingsSection")})),$("#ProfilePictureRow").click((function(){$(".settingsSubSection").each((function(){$(this).css("display","none")})),$("#AppearanceHtml").css("display","block"),$(".SettingsSection").each((function(){$(this).removeClass("selectedSettingsSection")})),$("#ProfilePictureRow td").addClass("selectedSettingsSection")})),$("#NotificationsRow").click((function(){$(".settingsSubSection").each((function(){$(this).css("display","none")})),$("#NotificationsHtml").css("display","block"),$(".SettingsSection").each((function(){$(this).removeClass("selectedSettingsSection")})),$("#NotificationsRow td").addClass("selectedSettingsSection")})),$("#RoundcubeEmailRow").click((function(){$(".settingsSubSection").each((function(){$(this).css("display","none")})),$("#RoundcubeEmailHtml").css("display","block"),$(".SettingsSection").each((function(){$(this).removeClass("selectedSettingsSection")})),$("#RoundcubeEmailRow td").addClass("selectedSettingsSection")})),$("#ChangePasswordRow").click((function(){$(".settingsSubSection").each((function(){$(this).css("display","none")})),$("#ChangePasswordHtml").css("display","block"),$(".SettingsSection").each((function(){$(this).removeClass("selectedSettingsSection")})),$("#ChangePasswordRow td").addClass("selectedSettingsSection")})),$("#ChangeEmailRow").click((function(){$(".settingsSubSection").each((function(){$(this).css("display","none")})),$("#ChangeEmailHtml").css("display","block"),$(".SettingsSection").each((function(){$(this).removeClass("selectedSettingsSection")})),$("#ChangeEmailRow td").addClass("selectedSettingsSection")})),$("#CloseAccountRow").click((function(){$(".settingsSubSection").each((function(){$(this).css("display","none")})),$("#CloseAccountHtml").css("display","block"),$(".SettingsSection").each((function(){$(this).removeClass("selectedSettingsSection")})),$("#CloseAccountRow td").addClass("selectedSettingsSection")}));var n=$(window).width()-192,a=$(window).height()-98;n<520||a<500?($.jeegoopopup.width(n).height(a),$.jeegoopopup.center(),$("#maximizeImg").hide(),$("#minimizeImg").hide()):($.jeegoopopup.width(520).height(500),$.jeegoopopup.center(),$("#minimizeImg").hide(),$("#maximizeImg").show()),$(window).resize((function(){n=$(window).width()-192,a=$(window).height()-98,$.jeegoopopup.center(),n<520||a<500?($.jeegoopopup.width(n).height(a),$.jeegoopopup.center(),$("#maximizeImg").hide(),$("#minimizeImg").hide()):($.jeegoopopup.width(520).height(500),$.jeegoopopup.center(),$("#minimizeImg").hide(),$("#maximizeImg").show())})),$("#minimizeImg").click((function(){$.jeegoopopup.width(520).height(500),$.jeegoopopup.center(),$("#maximizeImg").show(),$("#minimizeImg").hide()})),$("#maximizeImg").click((function(){$.jeegoopopup.width(n).height(a),$.jeegoopopup.center(),$("#minimizeImg").show(),$("#maximizeImg").hide()}));var o=$("#playbackSrc"),l=$("#preview_output_play"),s=$("#preview_ringer_play"),r=$("#preview_output_pause"),d=$("#microphoneSrc");$("#Settings_AutoGainControl").prop("checked",AutoGainControl),$("#Settings_EchoCancellation").prop("checked",EchoCancellation),$("#Settings_NoiseSuppression").prop("checked",NoiseSuppression);var c=$("#previewVideoSrc"),u=$("input[name=Settings_Oriteation]");u.each((function(){this.value==MirrorVideo&&$(this).prop("checked",!0)})),$("#local-video-preview").css("transform",MirrorVideo);var p=$("input[name=Settings_FrameRate]");p.each((function(){this.value==maxFrameRate&&$(this).prop("checked",!0)}));var g=$("input[name=Settings_Quality]");g.each((function(){this.value==videoHeight&&$(this).prop("checked",!0)}));var m=$("input[name=Settings_AspectRatio]");m.each((function(){this.value==videoAspectRatio&&$(this).prop("checked",!0)}));$("#ringTone");var f=$("#ringDevice");m.change((function(){console.log("Call to change Aspect Ratio ("+this.value+")");var e=$("#local-video-preview").get(0);e.muted=!0,e.playsinline=!0,e.autoplay=!0,e.srcObject.getTracks().forEach((function(e){e.stop()}));var t={audio:!1,video:{deviceId:"default"!=c.val()?{exact:c.val()}:"default"}};""!=$("input[name=Settings_FrameRate]:checked").val()&&(t.video.frameRate=$("input[name=Settings_FrameRate]:checked").val()),""!=$("input[name=Settings_Quality]:checked").val()&&(t.video.height=$("input[name=Settings_Quality]:checked").val()),""!=this.value&&(t.video.aspectRatio=this.value),console.log("Constraints:",t);var i=new MediaStream;navigator.mediaDevices&&navigator.mediaDevices.getUserMedia(t).then((function(t){var n=t.getVideoTracks()[0];i.addTrack(n),e.srcObject=i,e.onloadedmetadata=function(t){e.play()}})).catch((function(e){console.error(e),AlertConfigExtWindow(lang.alert_error_user_media,lang.error)}))})),g.change((function(){console.log("Call to change Video Height ("+this.value+")");var e=$("#local-video-preview").get(0);e.muted=!0,e.playsinline=!0,e.autoplay=!0,e.srcObject.getTracks().forEach((function(e){e.stop()}));var t={audio:!1,video:{deviceId:"default"!=c.val()?{exact:c.val()}:"default"}};""!=$("input[name=Settings_FrameRate]:checked").val()&&(t.video.frameRate=$("input[name=Settings_FrameRate]:checked").val()),this.value&&(t.video.height=this.value),""!=$("input[name=Settings_AspectRatio]:checked").val()&&(t.video.aspectRatio=$("input[name=Settings_AspectRatio]:checked").val()),console.log("Constraints:",t);var i=new MediaStream;navigator.mediaDevices&&navigator.mediaDevices.getUserMedia(t).then((function(t){var n=t.getVideoTracks()[0];i.addTrack(n),e.srcObject=i,e.onloadedmetadata=function(t){e.play()}})).catch((function(e){console.error(e),AlertConfigExtWindow(lang.alert_error_user_media,lang.error)}))})),p.change((function(){console.log("Call to change Frame Rate ("+this.value+")");var e=$("#local-video-preview").get(0);e.muted=!0,e.playsinline=!0,e.autoplay=!0,e.srcObject.getTracks().forEach((function(e){e.stop()}));var t={audio:!1,video:{deviceId:"default"!=c.val()?{exact:c.val()}:"default"}};""!=this.value&&(t.video.frameRate=this.value),""!=$("input[name=Settings_Quality]:checked").val()&&(t.video.height=$("input[name=Settings_Quality]:checked").val()),""!=$("input[name=Settings_AspectRatio]:checked").val()&&(t.video.aspectRatio=$("input[name=Settings_AspectRatio]:checked").val()),console.log("Constraints:",t);var i=new MediaStream;navigator.mediaDevices&&navigator.mediaDevices.getUserMedia(t).then((function(t){var n=t.getVideoTracks()[0];i.addTrack(n),e.srcObject=i,e.onloadedmetadata=function(t){e.play()}})).catch((function(e){console.error(e),AlertConfigExtWindow(lang.alert_error_user_media,lang.error)}))})),d.change((function(){console.log("Call to change Microphone ("+this.value+")");try{window.SettingsMicrophoneStream.getTracks().forEach((function(e){e.stop()})),window.SettingsMicrophoneStream=null}catch(e){}try{soundMeter=window.SettingsMicrophoneSoundMeter,soundMeter.stop(),window.SettingsMicrophoneSoundMeter=null}catch(e){}var e={audio:{deviceId:{exact:this.value}},video:!1},t=new MediaStream;navigator.mediaDevices.getUserMedia(e).then((function(e){var i=e.getAudioTracks()[0];null!=i&&(t.addTrack(i),window.SettingsMicrophoneStream=t,window.SettingsMicrophoneSoundMeter=MeterSettingsOutput(t,"Settings_MicrophoneOutput","width",50))})).catch((function(e){console.log("Failed to getUserMedia",e)}))})),o.change((function(){console.log("Call to change Speaker ("+this.value+")");var e=window.SettingsOutputAudio;null!=e&&void 0!==e.sinkId&&e.setSinkId(this.value).then((function(){console.log("sinkId applied to audioObj:",this.value)})).catch((function(e){console.warn("Failed not apply setSinkId.",e)}))})),l.click((function(){try{window.SettingsOutputAudio.pause()}catch(e){}window.SettingsOutputAudio=null;try{window.SettingsOutputStream.getTracks().forEach((function(e){e.stop()}))}catch(e){}window.SettingsOutputStream=null;try{window.SettingsOutputStreamMeter.stop()}catch(e){}window.SettingsOutputStreamMeter=null,console.log("Audio:",audioBlobs.speaker_test.url);var e=new Audio(audioBlobs.speaker_test.blob);e.preload="auto",e.onplay=function(){var t=new MediaStream;if(void 0!==e.captureStream)t=e.captureStream();else{if(void 0!==e.mozCaptureStream)return;if(void 0===e.webkitCaptureStream)return void console.warn("Cannot display Audio Levels");t=e.webkitCaptureStream()}window.SettingsOutputStream=t,window.SettingsOutputStreamMeter=MeterSettingsOutput(t,"Settings_SpeakerOutput","width",50)},e.oncanplaythrough=function(t){void 0!==e.sinkId&&e.setSinkId(o.val()).then((function(){console.log("Set sinkId to:",o.val())})).catch((function(e){console.warn("Failed not apply setSinkId.",e)})),e.play().then((function(){})).catch((function(e){console.warn("Unable to play audio file",e)})),console.log("Playing sample audio file... ")},window.SettingsOutputAudio=e})),r.click((function(){window.SettingsOutputAudio.paused?window.SettingsOutputAudio.play():window.SettingsOutputAudio.pause()})),s.click((function(){try{window.SettingsRingerAudio.pause()}catch(e){}window.SettingsRingerAudio=null;try{window.SettingsRingerStream.getTracks().forEach((function(e){e.stop()}))}catch(e){}window.SettingsRingerStream=null;try{window.SettingsRingerStreamMeter.stop()}catch(e){}window.SettingsRingerStreamMeter=null,console.log("Audio:",audioBlobs.Ringtone.url);var e=new Audio(audioBlobs.Ringtone.blob);e.preload="auto",e.onplay=function(){var t=new MediaStream;if(void 0!==e.captureStream)t=e.captureStream();else{if(void 0!==e.mozCaptureStream)return;if(void 0===e.webkitCaptureStream)return void console.warn("Cannot display Audio Levels");t=e.webkitCaptureStream()}window.SettingsRingerStream=t,window.SettingsRingerStreamMeter=MeterSettingsOutput(t,"Settings_RingerOutput","width",50)},e.oncanplaythrough=function(t){void 0!==e.sinkId&&e.setSinkId(f.val()).then((function(){console.log("Set sinkId to:",f.val())})).catch((function(e){console.warn("Failed not apply setSinkId.",e)})),e.play().then((function(){})).catch((function(e){console.warn("Unable to play audio file",e)})),console.log("Playing sample audio file... ")},window.SettingsRingerAudio=e})),u.change((function(){console.log("Call to change Orientation ("+this.value+")"),$("#local-video-preview").css("transform",this.value)})),c.change((function(){console.log("Call to change WebCam ("+this.value+")");var e=$("#local-video-preview").get(0);e.muted=!0,e.playsinline=!0,e.autoplay=!0,e.srcObject.getTracks().forEach((function(e){e.stop()}));var t={audio:!1,video:{deviceId:"default"!=this.value?{exact:this.value}:"default"}};""!=$("input[name=Settings_FrameRate]:checked").val()&&(t.video.frameRate=$("input[name=Settings_FrameRate]:checked").val()),""!=$("input[name=Settings_Quality]:checked").val()&&(t.video.height=$("input[name=Settings_Quality]:checked").val()),""!=$("input[name=Settings_AspectRatio]:checked").val()&&(t.video.aspectRatio=$("input[name=Settings_AspectRatio]:checked").val()),console.log("Constraints:",t);var i=new MediaStream;navigator.mediaDevices&&navigator.mediaDevices.getUserMedia(t).then((function(t){var n=t.getVideoTracks()[0];i.addTrack(n),e.srcObject=i,e.onloadedmetadata=function(t){e.play()}})).catch((function(e){console.error(e),AlertConfigExtWindow(lang.alert_error_user_media,lang.error)}))})),$("#AudioAndVideoRow").click((function(){if($(".settingsSubSection").each((function(){$(this).css("display","none")})),$("#AudioVideoHtml").css("display","block"),$(".SettingsSection").each((function(){$(this).removeClass("selectedSettingsSection")})),$("#AudioAndVideoRow td").addClass("selectedSettingsSection"),0==videoAudioCheck){videoAudioCheck=1;var e=$("#local-video-preview").get(0);e.muted=!0,e.playsinline=!0,e.autoplay=!0;var t=new MediaStream,i=new MediaStream;navigator.mediaDevices?navigator.mediaDevices.enumerateDevices().then((function(n){for(var a=getVideoSrcID(),l=!1,s=getAudioSrcID(),r=!1,u=!1,p=!1,g=!1,m=0;m<n.length;++m)console.log("Found Device ("+n[m].kind+"): ",n[m].label),"audioinput"===n[m].kind?(u=!0,"default"!=s&&n[m].deviceId==s&&(r=!0)):"audiooutput"===n[m].kind?p=!0:"videoinput"===n[m].kind&&(g=!0,"default"!=a&&n[m].deviceId==a&&(l=!0));var v={audio:u,video:g};u&&(v.audio={deviceId:"default"},r&&(v.audio.deviceId={exact:s})),g&&(v.video={deviceId:"default"},l&&(v.video.deviceId={exact:a})),""!=$("input[name=Settings_FrameRate]:checked").val()&&(v.video.frameRate=$("input[name=Settings_FrameRate]:checked").val()),""!=$("input[name=Settings_Quality]:checked").val()&&(v.video.height=$("input[name=Settings_Quality]:checked").val()),""!=$("input[name=Settings_AspectRatio]:checked").val()&&(v.video.aspectRatio=$("input[name=Settings_AspectRatio]:checked").val()),console.log("Get User Media",v),navigator.mediaDevices.getUserMedia(v).then((function(n){var a=n.getVideoTracks().length>=1?n.getVideoTracks()[0]:null;g&&null!=a?(t.addTrack(a),e.srcObject=t,e.onloadedmetadata=function(t){e.play()}):console.warn("No video / webcam devices found. Video Calling will not be possible.");var o=n.getAudioTracks().length>=1?n.getAudioTracks()[0]:null;return u&&null!=o?(i.addTrack(o),window.SettingsMicrophoneStream=i,window.SettingsMicrophoneSoundMeter=MeterSettingsOutput(i,"Settings_MicrophoneOutput","width",50)):console.warn("No microphone devices found. Calling will not be possible."),$("#Settings_SpeakerOutput").css("width","0%"),p||(console.log("No speaker devices found, make sure one is plugged in."),$("#playbackSrc").hide(),$("#RingDeviceSection").hide()),navigator.mediaDevices.enumerateDevices()})).then((function(e){for(var t=0;t<e.length;++t){console.log("Found Device ("+e[t].kind+") Again: ",e[t].label,e[t].deviceId);var i=e[t],n=i.deviceId,a=i.label;a.indexOf("(")>0&&(a=a.substring(0,a.indexOf("("))),(l=$("<option/>")).prop("value",n),"audioinput"===i.kind?(l.text(""!=a?a:"Microphone"),getAudioSrcID()==n&&l.prop("selected",!0),d.append(l)):"audiooutput"===i.kind?(l.text(""!=a?a:"Speaker"),getAudioOutputID()==n&&l.prop("selected",!0),o.append(l),f.append(l.clone())):"videoinput"===i.kind&&(getVideoSrcID()==n&&l.prop("selected",!0),l.text(""!=a?a:"Webcam"),c.append(l))}var l;c.children("option").length>0&&((l=$("<option/>")).prop("value","default"),"default"!=getVideoSrcID()&&""!=getVideoSrcID()&&"null"!=getVideoSrcID()||l.prop("selected",!0),l.text("(Default)"),c.append(l))})).catch((function(e){console.error(e),AlertConfigExtWindow(lang.alert_error_user_media,lang.error)}))})).catch((function(e){console.error("Error getting Media Devices",e)})):AlertConfigExtWindow(lang.alert_error_user_media,lang.error)}}));var v=$("#Settings_Notifications");v.prop("checked",NotificationsActive),v.change((function(){this.checked&&"granted"!=Notification.permission&&(checkNotificationPromise()?Notification.requestPermission().then((function(e){console.log(e),HandleNotifyPermission(e)})):Notification.requestPermission((function(e){console.log(e),HandleNotifyPermission(e)})))})),$("#vidConfExternalTable").on("click",".saveExtConfExtension",(function(){if("Save"==$(this).val()){var e=$(this).closest("tr").find("input.extConfExtension").val(),t=$(this).closest("tr").find("input.extConfExtensionPass").val(),i=localDB.getItem("wssServer");""!=e&&""!=t?e.length<200&&t.length<400?/^[a-zA-Z0-9]+$/.test(e)?($.ajax({type:"POST",url:"save-update-external-user-conf.php",dataType:"JSON",data:{username:userName,exten_for_external:e,exten_for_ext_pass:t,wss_server:i,s_ajax_call:validateSToken},success:function(e){"The data has been successfully saved to the database !"==e.result?(getExternalUserConfFromSqldb(),alert("The data has been successfully saved to the database ! To see the result, please reopen this window !"),$("#jg_popup_b").empty(),$("#jg_popup_l").empty(),$("#windowCtrls").empty(),closeVideoAudio(),$.jeegoopopup.close()):alert(e.result)},error:function(e){alert("An error occurred while trying to save the data to the database !")}}),$(this).closest('[class="btnTableRow"]').find('[class="extConfExtension"]').attr("disabled",!0),$(this).closest('[class="btnTableRow"]').find('[class="extConfExtensionPass"]').attr("disabled",!0),$(this).attr("value","Edit"),$(this).prop("title","Edit this row.")):alert("The extension should contain only numbers and letters."):alert("The extension and/or the SIP password don't have a reasonable length."):alert('Please fill in both the "Extension" and the "SIP Password" fields !')}else $(this).closest('[class="btnTableRow"]').find('[class="extConfExtension"]').attr("disabled",!1),$(this).closest('[class="btnTableRow"]').find('[class="extConfExtensionPass"]').attr("disabled",!1),$(this).attr("value","Save"),$(this).prop("title","Save this row.")})),$("#vidConfExternalTable").on("click",".deleteExtRow",(function(){var e=$(this).closest('[class="btnTableRow"]').find('[class="extConfExtension"]').val();""!=e&&confirm("Do you really want to delete this row from this window and from the database ?")&&($.ajax({type:"POST",url:"remove-external-user-ext-data.php",dataType:"JSON",data:{username:userName,exten_for_external:e,s_ajax_call:validateSToken},success:function(e){$(this).closest("tr").find("input.extConfExtension").empty(),$(this).closest("tr").find("input.extConfExtensionPass").empty(),$(this).closest("tr").find("input.extConfExtensionLink").empty(),getExternalUserConfFromSqldb(),alert("The data has been permanently removed !")},error:function(e){alert("An error occurred while trying to remove the data !")}}),$(this).closest('[class="btnTableRow"]').hide())})),$(".copyToClipboard").mouseenter((function(){""!=$(this).closest('[class="btnTableRow"]').find('[class="extConfExtensionLink"]').val()&&($(this).css("color","#424242"),$(this).css("cursor","pointer"))})),$(".copyToClipboard").mouseleave((function(){$(this).css("color","#cccccc")})),$(".copyToClipboard").click((function(){if(""!=$(this).closest('[class="btnTableRow"]').find('[class="extConfExtensionLink"]').val()){var e=$("<input>");$("body").append(e),e.val($(this).closest('[class="btnTableRow"]').find('[class="extConfExtensionLink"]').val()).select(),document.execCommand("Copy"),e.remove(),alert("The link has been copied to your clipboard!")}}));var h=getDbItem("externalUserConfElem","");"undefined"!==h&&"null"!=h&&0!=h&&$("#emptyExtRow").hide(),$("#add_New_External_User").click((function(){$("#vidConfExternalTable").append('<tr class=btnTableRow><td><input type=text class=extConfExtension name=extConfExtension placeholder="Eg: 711" /></td><td><input type=password class=extConfExtensionPass name=extConfExtensionPass placeholder="Eg: d5?W?9q?8rg*R9!eFrVth?9" /></td><td><input type=text class="extConfExtensionLink" name=extConfExtensionLink  placeholder="Generated on \'Save\'" disabled="disabled" /></td><td><span class="copyToClipboard"><i class="fa fa-clipboard" aria-hidden="true" title="Copy link to clipboard."></i></span></td><td><span class="deleteExtRow deleteExtRowDisabled" title="Delete extension data from database.">X</span></td><td><input type=submit class="saveExtConfExtension" value="Save" title="Save this row." /></td></tr>')})),cropper=$("#ImageCanvas").croppie({viewport:{width:150,height:150,type:"circle"}}),$("#ImageCanvas").croppie("bind",{url:getPicture("profilePicture")}).then((function(){$(".cr-slider").attr({min:.5,max:3})})),$("#fileUploader").change((function(){var e=$(this).prop("files");if(1==e.length){var t=Math.floor(1e9*Math.random()),i=e[0],n=i.name,a=i.size;if(a<=52428800){console.log("Adding ("+t+"): "+n+" of size: "+a+"bytes");var o=new FileReader;o.Name=n,o.UploadId=t,o.Size=a,o.onload=function(e){$("#ImageCanvas").croppie("bind",{url:e.target.result})},o.readAsDataURL(i)}else Alert(lang.alert_file_size,lang.error)}else Alert(lang.alert_single_file,lang.error)})),$("#save_button_conf").click((function(){null==localDB.getItem("profileUserID")&&localDB.setItem("profileUserID",uID());var e=$("#Configure_Account_wssServer").val();if(/^[A-Za-z0-9\.\-]+\.[A-Za-z0-9\-]{2,63}$/.test(e))var t=e;else{t="";alert("The WebSocket domain that you entered is not a valid domain name!")}var i=$("#Configure_Account_WebSocketPort").val();if(/^[0-9]+$/.test(i))var n=i;else{n="";alert("The web socket port that you entered is not a valid port!")}var a=$("#Configure_Account_ServerPath").val();if(/^[A-Za-z0-9\/]+$/.test(a))var o=a;else{o="";alert("The server path that you entered is not a valid server path!")}var l=$("#Configure_Account_profileName").val();if(/^[A-Za-z0-9\s\-\'\[\]\(\)]+$/.test(l))var s=l;else{s="";alert("The profile name that you entered is not a valid profile name!")}var r=$("#Configure_Account_SipUsername").val();if(/^[A-Za-z0-9\-\.\_\@\*\!\?\&\~\(\)\[\]]+$/.test(r))var d=r;else{d="";alert("The SIP username that you entered is not a valid SIP username!")}var c=$("#Configure_Account_SipPassword").val();if(c.length<400)var u=c;else{u="";alert("The SIP password that you entered is too long!")}var p=$("#Configure_Account_StunServer").val();if(null!=p&&""!==p.trim())if(/^(\d+\.\d+\.\d+\.\d+:\d+)$|^([A-Za-z0-9\.\-]+\.[A-Za-z0-9\-]{2,63}:\d+)/.test(p));else{alert("The domain or IP or port number of the STUN server is not valid!")}else;if(null!=t&&""!==t.trim()&&null!=n&&""!==n.trim()&&null!=o&&""!==o.trim()&&null!=s&&""!==s.trim()&&null!=d&&""!==d.trim()&&null!=u&&""!==u.trim()){localDB.setItem("AudioOutputId",$("#playbackSrc").val()),localDB.setItem("VideoSrcId",$("#previewVideoSrc").val()),localDB.setItem("VideoHeight",$("input[name=Settings_Quality]:checked").val()),localDB.setItem("FrameRate",$("input[name=Settings_FrameRate]:checked").val()),localDB.setItem("AspectRatio",$("input[name=Settings_AspectRatio]:checked").val()),localDB.setItem("VideoOrientation",$("input[name=Settings_Oriteation]:checked").val()),localDB.setItem("AudioSrcId",$("#microphoneSrc").val()),localDB.setItem("AutoGainControl",$("#Settings_AutoGainControl").is(":checked")?"1":"0"),localDB.setItem("EchoCancellation",$("#Settings_EchoCancellation").is(":checked")?"1":"0"),localDB.setItem("NoiseSuppression",$("#Settings_NoiseSuppression").is(":checked")?"1":"0"),localDB.setItem("RingOutputId",$("#ringDevice").val());var g=$("#Video_Conf_Extension").val();if(/^[a-zA-Z0-9\*\#]+$/.test(g))var m=g;else{m="";alert("The extension that you entered in the 'Video Conference Extension' field is not a valid extension!")}localDB.setItem("VidConfExtension",m);var f=$("#Video_Conf_Window_Width").val();if(/^[0-9]+$/.test(f)&&Math.abs(f)<=100)var v=Math.abs(f);else{v="";alert("The percent value that you entered in the 'Percent of screen width ...' field is not valid!")}if(localDB.setItem("VidConfWindowWidth",v),localDB.setItem("Notifications",$("#Settings_Notifications").is(":checked")?"1":"0"),$("#emailIntegration").is(":checked")){if(!/^[A-Za-z0-9\.\-]+\.[A-Za-z0-9\-]{2,63}$/.test($("#RoundcubeDomain").val()))return $("#emailIntegration").prop("checked",!1),$("#RoundcubeDomain").val(""),void alert("The Roundcube domain is not valid. After entering a valid Roundcube domain, please remember to check the checkbox 'Enable Roundcube email integration' again !");if(!/^[A-Za-z0-9\_\.\-\@\~\%\+\!\?\&\*\^\=\#\$\{\}\|\/]{1,300}$/.test($("#RoundcubeUser").val()))return $("#emailIntegration").prop("checked",!1),$("#RoundcubeUser").val(""),void alert("The Roundcube user is not valid. After entering a valid Roundcube user, please remember to check the checkbox 'Enable Roundcube email integration' again !");if(""==$("#RoundcubePass").val()||$("#RoundcubePass").val().length>300)return $("#emailIntegration").prop("checked",!1),$("#RoundcubePass").val(""),void alert("The Roundcube password is not valid. After entering a valid Roundcube password, please remember to check the checkbox 'Enable Roundcube email integration' again !");if($("#rcBasicAuthUser").val().length>300)return $("#rcBasicAuthUser").val(""),void alert("The Roundcube basic authentication user is not valid.");if($("#rcBasicAuthPass").val().length>300)return $("#rcBasicAuthPass").val(""),void alert("The Roundcube basic authentication password is not valid.")}$("#AppearanceHtml").css({display:"block",visibility:"hidden","margin-top":"-228px"}),$("#ImageCanvas").croppie("result",{type:"base64",size:"viewport",format:"png",quality:1,circle:!1}).then((function(e){localDB.setItem("profilePicture",e)})),setTimeout((function(){saveConfToSqldb()}),600)}else alert("All fields marked with an asterisk are required!")})),$("#closeImg").click((function(){$("#jg_popup_b").empty(),$("#jg_popup_l").empty(),$("#windowCtrls").empty(),closeVideoAudio(),$.jeegoopopup.close()})),$("#cancel_button_conf").click((function(){$("#jg_popup_b").empty(),$("#jg_popup_l").empty(),$("#windowCtrls").empty(),closeVideoAudio(),$.jeegoopopup.close()})),$("#jg_popup_overlay").click((function(){$("#jg_popup_b").empty(),$("#jg_popup_l").empty(),$("#windowCtrls").empty(),closeVideoAudio(),$.jeegoopopup.close()})),$(window).on("keydown",(function(e){"Escape"==e.key&&($("#jg_popup_b").empty(),$("#jg_popup_l").empty(),$("#windowCtrls").empty(),closeVideoAudio(),$.jeegoopopup.close())}))}function checkNotificationPromise(){try{Notification.requestPermission().then()}catch(e){return!1}return!0}function HandleNotifyPermission(e){"granted"==e||Alert(lang.alert_notification_permission,lang.permission,(function(){console.log("Attempting to uncheck the checkbox..."),$("#Settings_Notifications").prop("checked",!1)}))}function EditBuddyWindow(e){$.jeegoopopup.close();var t=null,i=-1,n=JSON.parse(localDB.getItem(profileUserID+"-Buddies"));if($.each(n.DataCollection,(function(n,a){if(a.uID==e||a.cID==e||a.gID==e)return t=a,i=n,!1})),null!=t){var a="<div id='EditContact'>";a+="<div id='windowCtrls'><img id='minimizeImg' src='images/1_minimize.svg' title='Restore' /><img id='maximizeImg' src='images/2_maximize.svg' title='Maximize' /><img id='closeImg' src='images/3_close.svg' title='Close' /></div>",a+="<div class='UiWindowField scroller'>",a+='<div id=ImageCanvas style="width:150px; height:150px"></div>',a+='<label for=ebFileUploader class=customBrowseButton style="margin-left: 200px; margin-top: -9px;">Select File</label>',a+="<div><input type=file id=ebFileUploader /></div>",a+='<div style="margin-top: 50px"></div>',a+="<div class=UiText>"+lang.display_name+":</div>",a+="<div><input id=AddSomeone_Name class=UiInputText type=text placeholder='"+lang.eg_display_name+"' value='"+(t.DisplayName&&"null"!=t.DisplayName&&"undefined"!=t.DisplayName?t.DisplayName:"")+"'></div>",a+="<div class=UiText>"+lang.title_description+":</div>","extension"==t.Type?a+="<div><input id=AddSomeone_Desc class=UiInputText type=text placeholder='"+lang.eg_general_manager+"' value='"+(t.Position&&"null"!=t.Position&&"undefined"!=t.Position?t.Position:"")+"'></div>":a+="<div><input id=AddSomeone_Desc class=UiInputText type=text placeholder='"+lang.eg_general_manager+"' value='"+(t.Description&&"null"!=t.Description&&"undefined"!=t.Description?t.Description:"")+"'></div>",a+="<div class=UiText>"+lang.internal_subscribe_extension+":</div>",a+="<div><input id=AddSomeone_Exten class=UiInputText type=text placeholder='"+lang.eg_internal_subscribe_extension+"' value='"+(t.ExtensionNumber&&"null"!=t.ExtensionNumber&&"undefined"!=t.ExtensionNumber?t.ExtensionNumber:"")+"'></div>",a+="<div class=UiText>"+lang.mobile_number+":</div>",a+="<div><input id=AddSomeone_Mobile class=UiInputText type=text placeholder='"+lang.eg_mobile_number+"' value='"+(t.MobileNumber&&"null"!=t.MobileNumber&&"undefined"!=t.MobileNumber?t.MobileNumber:"")+"'></div>",a+="<div class=UiText>"+lang.contact_number_1+":</div>",a+="<div><input id=AddSomeone_Num1 class=UiInputText type=text placeholder='"+lang.eg_contact_number_1+"' value='"+(t.ContactNumber1&&"null"!=t.ContactNumber1&&"undefined"!=t.ContactNumber1?t.ContactNumber1:"")+"'></div>",a+="<div class=UiText>"+lang.contact_number_2+":</div>",a+="<div><input id=AddSomeone_Num2 class=UiInputText type=text placeholder='"+lang.eg_contact_number_2+"' value='"+(t.ContactNumber2&&"null"!=t.ContactNumber2&&"undefined"!=t.ContactNumber2?t.ContactNumber2:"")+"'></div>",a+="<div class=UiText>"+lang.email+":</div>",a+="<div><input id=AddSomeone_Email class=UiInputText type=text placeholder='"+lang.email+"' value='"+(t.Email&&"null"!=t.Email&&"undefined"!=t.Email?t.Email:"")+"'></div>",a+="</div></div>",$.jeegoopopup.open({title:"Edit Contact",html:a,width:"640",height:"500",center:!0,scrolling:"no",skinClass:"jg_popup_basic",contentClass:"editContactPopup",overlay:!0,opacity:50,draggable:!0,resizable:!1,fadeIn:0}),$("#jg_popup_b").append("<div id=bottomButtons><button id=save_button>Save</button><button id=cancel_button>Cancel</button></div>");var o="";$.ajax({type:"POST",url:"get-contact-dbid.php",dataType:"JSON",data:{username:userName,contact_name:t.DisplayName,s_ajax_call:validateSToken},success:function(e){"success"==e.successorfailure?o=e.cntctDatabaseID:alert("Error while attempting to retrieve contact data from the database!")},error:function(e){alert("Error while attempting to retrieve contact data from the database!")}});$("#ImageCanvas").croppie({viewport:{width:150,height:150,type:"circle"}});"extension"==t.Type?$("#ImageCanvas").croppie("bind",{url:getPicture(t.uID,"extension")}).then((function(){$(".cr-slider").attr({min:.5,max:3})})):"contact"==t.Type?$("#ImageCanvas").croppie("bind",{url:getPicture(t.cID,"contact")}).then((function(){$(".cr-slider").attr({min:.5,max:3})})):"group"==t.Type&&$("#ImageCanvas").croppie("bind",{url:getPicture(t.gID,"group")}).then((function(){$(".cr-slider").attr({min:.5,max:3})})),$("#ebFileUploader").change((function(){var e=$(this).prop("files");if(1==e.length){var t=Math.floor(1e9*Math.random()),i=e[0],n=i.name,a=i.size;if(a<=52428800){console.log("Adding ("+t+"): "+n+" of size: "+a+"bytes");var o=new FileReader;o.Name=n,o.UploadId=t,o.Size=a,o.onload=function(e){$("#ImageCanvas").croppie("bind",{url:e.target.result})},o.readAsDataURL(i)}else Alert(lang.alert_file_size,lang.error)}else Alert(lang.alert_single_file,lang.error)})),$("#save_button").click((function(){var e=$("#AddSomeone_Name").val();if(null!=e&&""!==e.trim())if(/^[A-Za-z0-9\s\-\'\[\]\(\)]+$/.test(e)){t.LastActivity=utcDateNow(),t.DisplayName=e;var a=$("#AddSomeone_Desc").val();if(null!=a&&""!==a.trim())if(/^[A-Za-z0-9\s\-\.\'\"\[\]\(\)\{\}\_\!\?\~\@\%\^\&\*\+\>\<\;\:\=]+$/.test(a))var l=a;else{l="";alert("The title/description that you entered is not valid!")}else l="";"extension"==t.Type?t.Position=l:t.Description=l;var s=$("#AddSomeone_Exten").val();if(null!=s&&""!==s.trim())if(/^[a-zA-Z0-9\*\#]+$/.test(s))var r=s;else{r="";alert("The extension that you entered in the 'Extension (Internal)' field is not a valid extension!")}else r="";t.ExtensionNumber=r;var d=$("#AddSomeone_Mobile").val();if(null!=d&&""!==d.trim())if(/^[0-9\s\+\#]+$/.test(d))var c=d;else{c="";alert("The phone number that you entered in the 'Mobile Number' field is not valid! The only allowed characters are: digits, spaces, plus signs and pound signs.")}else c="";t.MobileNumber=c;var u=$("#AddSomeone_Num1").val();if(null!=u&&""!==u.trim())if(/^[0-9\s\+\#]+$/.test(u))var p=u;else{p="";alert("The phone number that you entered in the 'Contact Number 1' field is not valid! The only allowed characters are: digits, spaces, plus signs and pound signs.")}else p="";t.ContactNumber1=p;var g=$("#AddSomeone_Num2").val();if(null!=g&&""!==g.trim())if(/^[0-9\s\+\#]+$/.test(g))var m=g;else{m="";alert("The phone number that you entered in the 'Contact Number 2' field is not valid! The only allowed characters are: digits, spaces, plus signs and pound signs.")}else m="";t.ContactNumber2=m;var f=$("#AddSomeone_Email").val();if(null!=f&&""!==f.trim())if(/^[A-Za-z0-9\_\.\-\~\%\+\!\?\&\*\^\=\#\$\{\}\|\/]+@[A-Za-z0-9\.\-]+\.[A-Za-z0-9\-]{2,63}$/.test(f))var v=f;else{v="";alert("The email that you entered is not a valid email address!")}else v="";t.Email=v;$("#ImageCanvas").croppie("result",{type:"base64",size:"viewport",format:"png",quality:1,circle:!1}).then((function(e){if("extension"==t.Type){localDB.setItem("img-"+t.uID+"-extension",e),$("#contact-"+t.uID+"-picture-main").css("background-image","url("+getPicture(t.uID,"extension")+")"),$("#contact-"+t.uID+"-presence-main").html(t.Position);saveContactPicToSQLDB([t.DisplayName,localDB.getItem("img-"+t.uID+"-extension",e)])}else if("contact"==t.Type){localDB.setItem("img-"+t.cID+"-contact",e),$("#contact-"+t.cID+"-picture-main").css("background-image","url("+getPicture(t.cID,"contact")+")"),$("#contact-"+t.cID+"-presence-main").html(t.Description);saveContactPicToSQLDB([t.DisplayName,localDB.getItem("img-"+t.cID+"-contact",e)])}else if("group"==t.Type){localDB.setItem("img-"+t.gID+"-group",e),$("#contact-"+t.gID+"-picture-main").css("background-image","url("+getPicture(t.gID,"group")+")"),$("#contact-"+t.gID+"-presence-main").html(t.Description);saveContactPicToSQLDB([t.DisplayName,localDB.getItem("img-"+t.gID+"-group",e)])}UpdateBuddyList()})),n.DataCollection[i]=t,localDB.setItem(profileUserID+"-Buddies",JSON.stringify(n));updateContactToSQLDB([e,l,r,c,p,m,v,o]);for(var h=0;h<Buddies.length;h++)"extension"==t.Type?t.uID==Buddies[h].identity&&(Buddies[h].lastActivity=t.LastActivity,Buddies[h].CallerIDName=t.DisplayName,Buddies[h].Desc=t.Position):"contact"==t.Type?t.cID==Buddies[h].identity&&(Buddies[h].lastActivity=t.LastActivity,Buddies[h].CallerIDName=t.DisplayName,Buddies[h].Desc=t.Description):t.Type;UpdateBuddyList(),$.jeegoopopup.close(),$("#jg_popup_b").empty()}else alert("The display name that you entered is not a valid display name!");else alert("'Display Name' cannot be empty!")}));var l=$(window).width()-16,s=$(window).height()-110;l<656||s<500?($.jeegoopopup.width(l).height(s),$.jeegoopopup.center(),$("#maximizeImg").hide(),$("#minimizeImg").hide()):($.jeegoopopup.width(640).height(500),$.jeegoopopup.center(),$("#minimizeImg").hide(),$("#maximizeImg").show()),$(window).resize((function(){l=$(window).width()-16,s=$(window).height()-110,$.jeegoopopup.center(),l<656||s<500?($.jeegoopopup.width(l).height(s),$.jeegoopopup.center(),$("#maximizeImg").hide(),$("#minimizeImg").hide()):($.jeegoopopup.width(640).height(500),$.jeegoopopup.center(),$("#minimizeImg").hide(),$("#maximizeImg").show())})),$("#minimizeImg").click((function(){$.jeegoopopup.width(640).height(500),$.jeegoopopup.center(),$("#maximizeImg").show(),$("#minimizeImg").hide()})),$("#maximizeImg").click((function(){$.jeegoopopup.width(l).height(s),$.jeegoopopup.center(),$("#minimizeImg").show(),$("#maximizeImg").hide()})),$("#closeImg").click((function(){$.jeegoopopup.close(),$("#jg_popup_b").empty()})),$("#cancel_button").click((function(){$.jeegoopopup.close(),$("#jg_popup_b").empty()})),$("#jg_popup_overlay").click((function(){$.jeegoopopup.close(),$("#jg_popup_b").empty()})),$(window).on("keydown",(function(e){"Escape"==e.key&&($.jeegoopopup.close(),$("#jg_popup_b").empty())}))}else Alert(lang.alert_not_found,lang.error)}function InitUi(){var e=$("#Phone");e.empty(),e.attr("class","pageContainer");var t=$("<div>");t.attr("id","leftContent"),t.attr("style","float:left; height: 100%; width:320px");var i='<table style="height:100%; width:100%" cellspacing=5 cellpadding=0>';i+='<tr><td class=logoSection style="height: 50px"><div id="smallLogo"><img src="images/small-logo.svg" /></div><div id="inLogoSection"><div id="emailInLogoSection" onclick="ShowEmailWindow()" title="Email"><i class="fa fa-envelope-o" aria-hidden="true"></i></div><div id="aboutInLogoSection" onclick="ShowAboutWindow()" title="About"><button id="aboutImg"></button></div><div id="shrinkLeftPanel" onclick="CollapseLeftPanel()" title="Collapse"><button id="collapseLeftPanel"></button></div></div></td></tr>',i+='<tr><td class=streamSection style="height: 82px">',i+="<div class=profileContainer>",i+='<div class=contact id=UserProfile style="margin-bottom:12px;">',i+='<div id=UserProfilePic class=buddyIcon title="Status"></div>',i+="<span id=reglink class=dotOffline></span>",i+='<span id=dereglink class=dotOnline style="display:none"><i class="fa fa-wifi" style="line-height: 14px; text-align: center; display: block;"></i></span>',i+='<span id=WebRtcFailed class=dotFailed style="display:none"><i class="fa fa-cross" style="line-height: 14px; text-align: center; display: block;"></i></span>',i+='<div class=contactNameText style="margin-right: 0px;"><i class="fa fa-phone-square"></i> <span id=UserDID></span> - <span id=UserCallID></span></div>',i+="<div id=regStatus class=presenceText>&nbsp;</div>",i+="</div>",i+="<div id=searchBoxAndIcons>",i+='<span class=searchClean><INPUT id=txtFindBuddy type=text autocomplete=none style="width:142px;" title="Find Contact"></span>',i+="<div id=ButtonsOnSearchLine>",i+="<button id=BtnFreeDial title='"+lang.dial_number+"'></button>",i+="<button id=LaunchVideoConf title='"+lang.launch_video_conference+'\'><i class="fa fa-users"></i></button>',i+="<button id=BtnSettings title='"+lang.account_settings+'\'><i class="fa fa-cog"></i></button>',i+="</div>",i+="</div>",i+="</div>",i+="</td></tr>",i+='<tr><td class=streamSection><div id=myContacts class="contactArea cleanScroller"></div></td></tr>',i+="</table>",t.html(i);var n=$("<div>");n.attr("id","rightContent"),n.attr("style","margin-left: 320px; height: 100%; overflow: auto;"),e.append(t),e.append(n),windowsCollection="",messagingCollection="",1==DisableFreeDial&&$("#BtnFreeDial").hide(),1==DisableBuddies&&$("#BtnAddSomeone").hide(),0==enabledGroupServices&&$("#BtnCreateGroup").hide(),$("#UserDID").html(profileUser),$("#UserCallID").html(profileName),$("#UserProfilePic").css("background-image","url('"+getPicture("profilePicture")+"')"),$("#txtFindBuddy").attr("placeholder",lang.find_someone),$("#txtFindBuddy").on("keyup",(function(e){UpdateBuddyList()})),$("#BtnFreeDial").on("click",(function(e){ShowDial(this)})),$("#BtnAddSomeone").attr("title",lang.add_contact),$("#BtnAddSomeone").on("click",(function(e){AddSomeoneWindow()})),$("#BtnCreateGroup").attr("title",lang.create_group),$("#BtnCreateGroup").on("click",(function(e){CreateGroupWindow()})),$("#LaunchVideoConf").on("click",(function(e){ShowLaunchVidConfMenu(this)})),$("#BtnSettings").on("click",(function(e){ShowAccountSettingsMenu(this)})),$("#UserProfile").on("click",(function(e){ShowMyProfileMenu(this)})),UpdateUI(),PopulateBuddyList(),null!=localDB.getItem("SelectedBuddy")&&(console.log("Selecting previously selected buddy...",localDB.getItem("SelectedBuddy")),SelectBuddy(localDB.getItem("SelectedBuddy")),UpdateUI()),PreloadAudioFiles(),CreateUserAgent(),getContactsFromSQLDB(),generateChatRSAKeys(getDbItem("SipUsername","")),removeTextChatUploads(getDbItem("SipUsername",""))}function PreloadAudioFiles(){audioBlobs.Alert={file:"Alert.mp3",url:hostingPrefex+"sounds/Alert.mp3"},audioBlobs.Ringtone={file:"Ringtone_1.mp3",url:hostingPrefex+"sounds/Ringtone_1.mp3"},audioBlobs.speaker_test={file:"Speaker_test.mp3",url:hostingPrefex+"sounds/Speaker_test.mp3"},audioBlobs.Busy_UK={file:"Tone_Busy-UK.mp3",url:hostingPrefex+"sounds/Tone_Busy-UK.mp3"},audioBlobs.Busy_US={file:"Tone_Busy-US.mp3",url:hostingPrefex+"sounds/Tone_Busy-US.mp3"},audioBlobs.CallWaiting={file:"Tone_CallWaiting.mp3",url:hostingPrefex+"sounds/Tone_CallWaiting.mp3"},audioBlobs.Congestion_UK={file:"Tone_Congestion-UK.mp3",url:hostingPrefex+"sounds/Tone_Congestion-UK.mp3"},audioBlobs.Congestion_US={file:"Tone_Congestion-US.mp3",url:hostingPrefex+"sounds/Tone_Congestion-US.mp3"},audioBlobs.EarlyMedia_Australia={file:"Tone_EarlyMedia-Australia.mp3",url:hostingPrefex+"sounds/Tone_EarlyMedia-Australia.mp3"},audioBlobs.EarlyMedia_European={file:"Tone_EarlyMedia-European.mp3",url:hostingPrefex+"sounds/Tone_EarlyMedia-European.mp3"},audioBlobs.EarlyMedia_Japan={file:"Tone_EarlyMedia-Japan.mp3",url:hostingPrefex+"sounds/Tone_EarlyMedia-Japan.mp3"},audioBlobs.EarlyMedia_UK={file:"Tone_EarlyMedia-UK.mp3",url:hostingPrefex+"sounds/Tone_EarlyMedia-UK.mp3"},audioBlobs.EarlyMedia_US={file:"Tone_EarlyMedia-US.mp3",url:hostingPrefex+"sounds/Tone_EarlyMedia-US.mp3"},$.each(audioBlobs,(function(e,t){var i=new XMLHttpRequest;i.open("GET",t.url,!0),i.responseType="blob",i.onload=function(e){var n=new FileReader;n.readAsDataURL(i.response),n.onload=function(){t.blob=n.result}},i.send()}))}function CreateUserAgent(){$.ajax({async:!1,global:!1,type:"POST",url:"get-sippass.php",dataType:"JSON",data:{username:userName,s_ajax_call:validateSToken},success:function(e){decSipPass=e},error:function(e){alert("An error occurred while attempting to retrieve data from the database!")}});try{console.log("Creating User Agent...");var e={displayName:profileName,uri:SipUsername+"@"+wssServer,transportOptions:{wsServers:"wss://"+wssServer+":"+WebSocketPort+ServerPath,traceSip:!1,connectionTimeout:TransportConnectionTimeout,maxReconnectionAttempts:TransportReconnectionAttempts,reconnectionTimeout:TransportReconnectionTimeout},sessionDescriptionHandlerFactoryOptions:{peerConnectionOptions:{alwaysAcquireMediaFirst:!0,iceCheckingTimeout:IceStunCheckTimeout,rtcConfiguration:{}}},authorizationUser:SipUsername,password:decSipPass,registerExpires:RegisterExpires,hackWssInTransport:WssInTransport,hackIpInContact:IpInContact,userAgentString:userAgentStr,autostart:!1,register:!1};decSipPass="";var t=getDbItem("StunServer","");if(""==t||null==t||void 0===t)var i="";else i='[{"urls":"stun:'+t+'"}]';""!=i&&(e.sessionDescriptionHandlerFactoryOptions.peerConnectionOptions.rtcConfiguration.iceServers=JSON.parse(i)),userAgent=new SIP.UA(e),console.log("Creating User Agent... Done")}catch(e){return console.error("Error creating User Agent: "+e),$("#regStatus").html(lang.error_user_agant),void alert(e.message)}userAgent.on("registered",(function(){isReRegister||(console.log("Registered!"),$("#reglink").hide(),$("#dereglink").show(),(DoNotDisturbEnabled||"enabled"==DoNotDisturbPolicy)&&$("#dereglink").attr("class","dotDoNotDisturb"),SubscribeAll(),$("#regStatus").html(lang.registered),"undefined"!=typeof web_hook_on_register&&web_hook_on_register(userAgent)),isReRegister=!0})),userAgent.on("registrationFailed",(function(e,t){console.log("Registration Failed: "+t),$("#regStatus").html(lang.registration_failed),$("#reglink").show(),$("#dereglink").hide(),isReRegister=!1,"undefined"!=typeof web_hook_on_registrationFailed&&web_hook_on_registrationFailed(t)})),userAgent.on("unregistered",(function(){console.log("Unregistered, bye!"),$("#regStatus").html(lang.unregistered),$("#reglink").show(),$("#dereglink").hide(),"undefined"!=typeof web_hook_on_unregistered&&web_hook_on_unregistered()})),userAgent.on("transportCreated",(function(e){console.log("Transport Object Created"),e.on("connected",(function(){console.log("Connected to Web Socket!"),$("#regStatus").html(lang.connected_to_web_socket),$("#WebRtcFailed").hide(),window.setTimeout((function(){Register()}),500)})),e.on("disconnected",(function(){console.log("Disconnected from Web Socket!"),$("#regStatus").html(lang.disconnected_from_web_socket),isReRegister=!1})),e.on("transportError",(function(){console.log("Web Socket error!"),$("#regStatus").html(lang.web_socket_error),$("#WebRtcFailed").show(),"undefined"!=typeof web_hook_on_transportError&&web_hook_on_transportError(e,userAgent)}))})),userAgent.on("invite",(function(e){ReceiveCall(e),1==getDbItem("Notifications","")&&incomingCallNote(),changePageTitle(),"undefined"!=typeof web_hook_on_invite&&web_hook_on_invite(e)})),userAgent.on("message",(function(e){ReceiveMessage(e),"undefined"!=typeof web_hook_on_message&&web_hook_on_message(e)})),console.log("Connecting to Web Socket..."),$("#regStatus").html(lang.connecting_to_web_socket),userAgent.start(),$("#reglink").on("click",Register),$("#WebRtcFailed").on("click",(function(){Confirm(lang.error_connecting_web_socket,lang.web_socket_error,(function(){window.open("https://"+wssServer+":"+WebSocketPort+"/httpstatus")}),null)}))}function Register(){null==userAgent||userAgent.isRegistered()||(console.log("Sending Registration..."),$("#regStatus").html(lang.sending_registration),userAgent.register(),1==getDbItem("Notifications","")&&"granted"!=Notification.permission&&Notification.requestPermission())}function Unregister(){if(null!=userAgent&&userAgent.isRegistered()){console.log("Unsubscribing..."),$("#regStatus").html(lang.unsubscribing);try{UnsubscribeAll()}catch(e){}console.log("Disconnecting..."),$("#regStatus").html(lang.disconnecting),userAgent.unregister(),isReRegister=!1}}function ReceiveCall(e){var t=e.remoteIdentity.displayName,i=e.remoteIdentity.uri.user;void 0===t&&(t=""),console.log("New Incoming Call!",t+" <"+i+">");var n=countSessions(e.id);console.log("Current Call Count:",n);var a=FindBuddyByDid(i);if(null==a){var o=i.length>DidLength?"contact":"extension";a=MakeBuddy(o,!0,0==n,!0,t,i)}else("extension"==a.type&&a.CallerIDName!=t||"contact"==a.type&&t!=i&&a.CallerIDName!=t)&&UpdateBuddyCalerID(a,t);var l=a.identity;window.clearInterval(e.data.callTimer);var s=moment.utc();e.data.callstart=s.format("YYYY-MM-DD HH:mm:ss UTC"),$("#contact-"+l+"-timer").show(),e.data.callTimer=window.setInterval((function(){var e=moment.utc(),t=moment.duration(e.diff(s));$("#contact-"+l+"-timer").html(formatShortDuration(t.asSeconds()))}),1e3),e.data.buddyId=l,e.data.calldirection="inbound",e.data.terminateby="them",e.data.withvideo=!1;var r,d=!1;if(e.request.body&&e.request.body.indexOf("m=video")>-1&&(d=!0,"contact"==a.type&&(d=!1)),e.on("rejected",(function(t,i){console.log("Call rejected: "+i),e.data.reasonCode=t.status_code,e.data.reasonText=i,AddCallMessage(l,e,t.status_code,i),"undefined"!=typeof web_hook_on_terminate&&web_hook_on_terminate(e)})),e.on("terminated",(function(t,i){e.data.rinngerObj&&(e.data.rinngerObj.pause(),e.data.rinngerObj.removeAttribute("src"),e.data.rinngerObj.load(),e.data.rinngerObj=null),$.jeegoopopup.close(),console.log("Call terminated"),window.clearInterval(e.data.callTimer),$("#contact-"+l+"-timer").html(""),$("#contact-"+l+"-timer").hide(),$("#contact-"+l+"-msg").html(""),$("#contact-"+l+"-msg").hide(),$("#contact-"+l+"-AnswerCall").hide(),RefreshStream(a),updateScroll(a.identity),UpdateBuddyList()})),DoNotDisturbEnabled||"enabled"==DoNotDisturbPolicy)return console.log("Do Not Disturb Enabled, rejecting call."),void RejectCall(a.identity);if(n>=1&&(0==CallWaitingEnabled||"disabled"==CallWaitingEnabled))return console.log("Call Waiting Disabled, rejecting call."),void RejectCall(a.identity);if(AutoAnswerEnabled||"enabled"==AutoAnswerPolicy){if(0==n){console.log("Auto Answer Call...");var c=a.identity;return window.setTimeout((function(){d?AnswerVideoCall(c):AnswerAudioCall(c)}),1e3),void SelectBuddy(a.identity)}console.warn("Could not auto answer call, already on a call.")}($("#contact-"+a.identity+"-msg").html(lang.incomming_call_from+" "+t+" &lt;"+i+"&gt;"),$("#contact-"+a.identity+"-msg").show(),d?$("#contact-"+a.identity+"-answer-video").show():$("#contact-"+a.identity+"-answer-video").hide(),$("#contact-"+a.identity+"-AnswerCall").show(),updateScroll(a.identity),n>=1)?(console.log("Audio:",audioBlobs.CallWaiting.url),(r=new Audio(audioBlobs.CallWaiting.blob)).preload="auto",r.loop=!1,r.oncanplaythrough=function(e){void 0!==r.sinkId&&"default"!=getRingerOutputID()&&r.setSinkId(getRingerOutputID()).then((function(){console.log("Set sinkId to:",getRingerOutputID())})).catch((function(e){console.warn("Failed not apply setSinkId.",e)})),r.play().then((function(){})).catch((function(e){console.warn("Unable to play audio file.",e)}))},e.data.rinngerObj=r):(console.log("Audio:",audioBlobs.Ringtone.url),(r=new Audio(audioBlobs.Ringtone.blob)).preload="auto",r.loop=!0,r.oncanplaythrough=function(e){void 0!==r.sinkId&&"default"!=getRingerOutputID()&&r.setSinkId(getRingerOutputID()).then((function(){console.log("Set sinkId to:",getRingerOutputID())})).catch((function(e){console.warn("Failed not apply setSinkId.",e)})),r.play().then((function(){})).catch((function(e){console.warn("Unable to play audio file.",e)}))},e.data.rinngerObj=r);$.jeegoopopup.close();var u='<div id="windowCtrls"><img id="closeImg" src="images/3_close.svg" title="Close" /></div>';if(u+='<div class="UiWindowField scroller" style="text-align:center">',u+='<div style="font-size: 18px; margin-top:1px">'+t+"<div>",t!=i&&(u+='<div style="font-size: 18px; margin-top:1px">&lt;'+i+"&gt;<div>"),u+='<div class=callAnswerBuddyIcon style="background-image: url('+getPicture(a.identity)+'); margin-top:6px"></div>',u+='<div style="margin-top:14px"><button onclick="AnswerAudioCall(\''+a.identity+'\')" class=answerButton><i class="fa fa-phone"></i>&nbsp;&nbsp;'+lang.answer_call+"</button></div>",d&&(u+='<div style="margin-top:11px"><button onclick="AnswerVideoCall(\''+a.identity+'\')" class=answerButton><i class="fa fa-video-camera"></i>&nbsp;&nbsp;'+lang.answer_call_with_video+"</button></div>"),u+='<div style="margin-top:11px"><button onclick="RejectCall(\''+a.identity+'\')" class=hangupButton><i class="fa fa-phone"></i>&nbsp;&nbsp;'+lang.reject_call+"</button></div>",u+="</div>",$.jeegoopopup.open({title:"Incoming Call",html:u,width:"290",height:"300",center:!0,scrolling:"no",skinClass:"jg_popup_basic",overlay:!0,opacity:50,draggable:!0,resizable:!1,fadeIn:0}),$("#closeImg").click((function(){$.jeegoopopup.close()})),$("#jg_popup_overlay").click((function(){$.jeegoopopup.close()})),$(window).on("keydown",(function(e){"Escape"==e.key&&$.jeegoopopup.close()})),IncreaseMissedBadge(a.identity),"Notification"in window&&1==getDbItem("Notifications","")){var p={body:lang.incomming_call_from+" "+t+' "'+i+'"',icon:getPicture(a.identity)};new Notification(lang.incomming_call,p).onclick=function(e){var t=a.identity;window.setTimeout((function(){d?AnswerVideoCall(t):AnswerAudioCall(t)}),4e3),SelectBuddy(a.identity)}}}function AnswerAudioCall(e){$.jeegoopopup.close();var t=FindBuddyByIdentity(e);if(null==t)return console.warn("Audio Answer failed, null buddy"),$("#contact-"+e+"-msg").html(lang.call_failed),void $("#contact-"+e+"-AnswerCall").hide();var i=getSession(e);if(null==i)return console.warn("Audio Answer failed, null session"),$("#contact-"+e+"-msg").html(lang.call_failed),void $("#contact-"+e+"-AnswerCall").hide();if(i.data.rinngerObj&&(i.data.rinngerObj.pause(),i.data.rinngerObj.removeAttribute("src"),i.data.rinngerObj.load(),i.data.rinngerObj=null),0==HasAudioDevice)return Alert(lang.alert_no_microphone),$("#contact-"+e+"-msg").html(lang.call_failed),void $("#contact-"+e+"-AnswerCall").hide();$("#contact-"+e+"-timer").html(""),$("#contact-"+e+"-timer").hide(),$("#contact-"+e+"-msg").html(""),$("#contact-"+e+"-msg").hide(),$("#contact-"+e+"-AnswerCall").hide();var n=i.remoteIdentity.displayName,a=i.remoteIdentity.uri.user;newLineNumber+=1,lineObj=new Line(newLineNumber,n,a,t),lineObj.SipSession=i,lineObj.SipSession.data.line=lineObj.LineNumber,lineObj.SipSession.data.buddyId=lineObj.BuddyObj.identity,Lines.push(lineObj),AddLineHtml(lineObj),SelectLine(newLineNumber),UpdateBuddyList();var o=navigator.mediaDevices.getSupportedConstraints(),l={sessionDescriptionHandlerOptions:{constraints:{audio:{deviceId:"default"},video:!1}}},s=getAudioSrcID();if("default"!=s){for(var r=!1,d=0;d<AudioinputDevices.length;++d)if(s==AudioinputDevices[d].deviceId){r=!0;break}r?l.sessionDescriptionHandlerOptions.constraints.audio.deviceId={exact:s}:(console.warn("The audio device you used before is no longer available, default settings applied."),localDB.setItem("AudioSrcId","default"))}o.autoGainControl&&(l.sessionDescriptionHandlerOptions.constraints.audio.autoGainControl=AutoGainControl),o.echoCancellation&&(l.sessionDescriptionHandlerOptions.constraints.audio.echoCancellation=EchoCancellation),o.noiseSuppression&&(l.sessionDescriptionHandlerOptions.constraints.audio.noiseSuppression=NoiseSuppression),lineObj.SipSession.accept(l),lineObj.SipSession.data.withvideo=!1,lineObj.SipSession.data.VideoSourceDevice=null,lineObj.SipSession.data.AudioSourceDevice=getAudioSrcID(),lineObj.SipSession.data.AudioOutputDevice=getAudioOutputID(),wireupAudioSession(lineObj),$("#contact-"+e+"-msg").html(lang.call_in_progress),$("#contact-"+e+"-AnswerCall").hide()}function AnswerVideoCall(e){$.jeegoopopup.close();var t=FindBuddyByIdentity(e);if(null==t)return console.warn("Audio Answer failed, null buddy"),$("#contact-"+e+"-msg").html(lang.call_failed),void $("#contact-"+e+"-AnswerCall").hide();var i=getSession(e);if(null==i)return console.warn("Video Answer failed, null session"),$("#contact-"+e+"-msg").html(lang.call_failed),void $("#contact-"+e+"-AnswerCall").hide();if(i.data.rinngerObj&&(i.data.rinngerObj.pause(),i.data.rinngerObj.removeAttribute("src"),i.data.rinngerObj.load(),i.data.rinngerObj=null),0==HasAudioDevice)return Alert(lang.alert_no_microphone),$("#contact-"+e+"-msg").html(lang.call_failed),void $("#contact-"+e+"-AnswerCall").hide();if(0==HasVideoDevice)return console.warn("No video devices (webcam) found, switching to audio call."),void AnswerAudioCall(e);$("#contact-"+e+"-timer").html(""),$("#contact-"+e+"-timer").hide(),$("#contact-"+e+"-msg").html(""),$("#contact-"+e+"-msg").hide(),$("#contact-"+e+"-AnswerCall").hide();var n=i.remoteIdentity.displayName,a=i.remoteIdentity.uri.user;newLineNumber+=1,lineObj=new Line(newLineNumber,n,a,t),lineObj.SipSession=i,lineObj.SipSession.data.line=lineObj.LineNumber,lineObj.SipSession.data.buddyId=lineObj.BuddyObj.identity,Lines.push(lineObj),AddLineHtml(lineObj),SelectLine(newLineNumber),UpdateBuddyList();var o=navigator.mediaDevices.getSupportedConstraints(),l={sessionDescriptionHandlerOptions:{constraints:{audio:{deviceId:"default"},video:{deviceId:"default"}}}},s=getAudioSrcID();if("default"!=s){for(var r=!1,d=0;d<AudioinputDevices.length;++d)if(s==AudioinputDevices[d].deviceId){r=!0;break}r?l.sessionDescriptionHandlerOptions.constraints.audio.deviceId={exact:s}:(console.warn("The audio device you used before is no longer available, default settings applied."),localDB.setItem("AudioSrcId","default"))}o.autoGainControl&&(l.sessionDescriptionHandlerOptions.constraints.audio.autoGainControl=AutoGainControl),o.echoCancellation&&(l.sessionDescriptionHandlerOptions.constraints.audio.echoCancellation=EchoCancellation),o.noiseSuppression&&(l.sessionDescriptionHandlerOptions.constraints.audio.noiseSuppression=NoiseSuppression);var c=getVideoSrcID();if("default"!=c){var u=!1;for(d=0;d<VideoinputDevices.length;++d)if(c==VideoinputDevices[d].deviceId){u=!0;break}u?l.sessionDescriptionHandlerOptions.constraints.video.deviceId={exact:c}:(console.warn("The video device you used before is no longer available, default settings applied."),localDB.setItem("VideoSrcId","default"))}o.frameRate&&""!=maxFrameRate&&(l.sessionDescriptionHandlerOptions.constraints.video.frameRate=maxFrameRate),o.height&&""!=videoHeight&&(l.sessionDescriptionHandlerOptions.constraints.video.height=videoHeight),o.aspectRatio&&""!=videoAspectRatio&&(l.sessionDescriptionHandlerOptions.constraints.video.aspectRatio=videoAspectRatio),lineObj.SipSession.data.withvideo=!0,lineObj.SipSession.data.VideoSourceDevice=getVideoSrcID(),lineObj.SipSession.data.AudioSourceDevice=getAudioSrcID(),lineObj.SipSession.data.AudioOutputDevice=getAudioOutputID(),$("#contact-"+e+"-msg").html(lang.call_in_progress),wireupVideoSession(lineObj);try{lineObj.SipSession.accept(l),StartVideoFullScreen&&ExpandVideoArea(lineObj.LineNumber),$("#contact-"+e+"-AnswerCall").hide()}catch(e){console.warn("Failed to answer call",e,lineObj.SipSession),teardownSession(lineObj,500,"Client Error")}}function RejectCall(e){var t=getSession(e);null==t&&(console.warn("Reject failed, null session"),$("#contact-"+e+"-msg").html(lang.call_failed),$("#contact-"+e+"-AnswerCall").hide()),t.data.terminateby="us",t.reject({statusCode:486,reasonPhrase:"Rejected by us"}),$("#contact-"+e+"-msg").html(lang.call_rejected)}function wireupAudioSession(e){if(null!=e){var t="#line-"+e.LineNumber+"-msg",i=e.SipSession;i.on("progress",(function(e){if(100==e.status_code)$(t).html(lang.trying);else if(180==e.status_code){$(t).html(lang.ringing);var n=audioBlobs.EarlyMedia_European;UserLocale().indexOf("us")>-1&&(n=audioBlobs.EarlyMedia_US),UserLocale().indexOf("gb")>-1&&(n=audioBlobs.EarlyMedia_UK),UserLocale().indexOf("au")>-1&&(n=audioBlobs.EarlyMedia_Australia),UserLocale().indexOf("jp")>-1&&(n=audioBlobs.EarlyMedia_Japan),console.log("Audio:",n.url);var a=new Audio(n.blob);a.preload="auto",a.loop=!0,a.oncanplaythrough=function(e){void 0!==a.sinkId&&"default"!=getAudioOutputID()&&a.setSinkId(getAudioOutputID()).then((function(){console.log("Set sinkId to:",getAudioOutputID())})).catch((function(e){console.warn("Failed not apply setSinkId.",e)})),a.play().then((function(){})).catch((function(e){console.warn("Unable to play audio file.",e)}))},i.data.earlyMedia=a}else $(t).html(e.reason_phrase+"...");"undefined"!=typeof web_hook_on_modify&&web_hook_on_modify("progress",i)})),i.on("trackAdded",(function(){var t=i.sessionDescriptionHandler.peerConnection,n=new MediaStream;t.getReceivers().forEach((function(e){e.track&&"audio"==e.track.kind&&n.addTrack(e.track)}));var a=$("#line-"+e.LineNumber+"-remoteAudio").get(0);a.srcObject=n,a.onloadedmetadata=function(e){void 0!==a.sinkId&&a.setSinkId(getAudioOutputID()).then((function(){console.log("sinkId applied: "+getAudioOutputID())})).catch((function(e){console.warn("Error using setSinkId: ",e)})),a.play()},"undefined"!=typeof web_hook_on_modify&&web_hook_on_modify("trackAdded",i)})),i.on("accepted",(function(n){i.data.earlyMedia&&(i.data.earlyMedia.pause(),i.data.earlyMedia.removeAttribute("src"),i.data.earlyMedia.load(),i.data.earlyMedia=null),window.clearInterval(i.data.callTimer);var a=moment.utc();i.data.callTimer=window.setInterval((function(){var t=moment.utc(),i=moment.duration(t.diff(a));$("#line-"+e.LineNumber+"-timer").html(formatShortDuration(i.asSeconds()))}),1e3),(RecordAllCalls||"enabled"==CallRecordingPolicy)&&StartRecording(e.LineNumber),$("#line-"+e.LineNumber+"-progress").hide(),$("#line-"+e.LineNumber+"-VideoCall").hide(),$("#line-"+e.LineNumber+"-ActiveCall").show(),e.LocalSoundMeter=StartLocalAudioMediaMonitoring(e.LineNumber,i),e.RemoteSoundMeter=StartRemoteAudioMediaMonitoring(e.LineNumber,i),$(t).html(lang.call_in_progress),updateLineScroll(e.LineNumber),UpdateBuddyList(),"undefined"!=typeof web_hook_on_modify&&web_hook_on_modify("accepted",i)})),i.on("rejected",(function(i,n){$(t).html(lang.call_rejected+": "+n),console.log("Call rejected: "+n),teardownSession(e,i.status_code,i.reason_phrase)})),i.on("failed",(function(i,n){$(t).html(lang.call_failed+": "+n),console.log("Call failed: "+n),teardownSession(e,0,"Call failed")})),i.on("cancel",(function(){$(t).html(lang.call_cancelled),console.log("Call Cancelled"),teardownSession(e,0,"Cancelled by caller")})),i.on("bye",(function(){$(t).html(lang.call_ended),console.log("Call ended, bye!"),teardownSession(e,16,"Normal Call clearing")})),i.on("terminated",(function(i,n){$(t).html(lang.call_ended),console.log("Session terminated"),teardownSession(e,16,"Normal Call clearing")})),i.on("reinvite",(function(e){console.log("Session reinvited!")})),i.on("directionChanged",(function(){var e=i.sessionDescriptionHandler.getDirection();console.log("Direction Change: ",e),"undefined"!=typeof web_hook_on_modify&&web_hook_on_modify("directionChanged",i)})),$("#line-"+e.LineNumber+"-btn-settings").removeAttr("disabled"),$("#line-"+e.LineNumber+"-btn-audioCall").prop("disabled","disabled"),$("#line-"+e.LineNumber+"-btn-videoCall").prop("disabled","disabled"),$("#line-"+e.LineNumber+"-btn-search").removeAttr("disabled"),$("#line-"+e.LineNumber+"-btn-remove").prop("disabled","disabled"),$("#line-"+e.LineNumber+"-progress").show(),$("#line-"+e.LineNumber+"-msg").show(),"group"==e.BuddyObj.type?$("#line-"+e.LineNumber+"-conference").show():$("#line-"+e.LineNumber+"-conference").hide(),updateLineScroll(e.LineNumber),UpdateUI()}}function wireupVideoSession(e){if(null!=e){var t="#line-"+e.LineNumber+"-msg",i=e.SipSession;i.on("trackAdded",(function(){var t=i.sessionDescriptionHandler.peerConnection,n=new MediaStream,a=new MediaStream;if(t.getReceivers().forEach((function(e){e.track&&("audio"==e.track.kind&&n.addTrack(e.track),"video"==e.track.kind&&a.addTrack(e.track))})),n.getAudioTracks().length>=1){var o=$("#line-"+e.LineNumber+"-remoteAudio").get(0);o.srcObject=n,o.onloadedmetadata=function(e){void 0!==o.sinkId&&o.setSinkId(getAudioOutputID()).then((function(){console.log("sinkId applied: "+getAudioOutputID())})).catch((function(e){console.warn("Error using setSinkId: ",e)})),o.play()}}if(a.getVideoTracks().length>=1){var l=$("#line-"+e.LineNumber+"-remoteVideo").get(0);l.srcObject=a,l.onloadedmetadata=function(e){l.play()}}window.setTimeout((function(){var t=new MediaStream;i.sessionDescriptionHandler.peerConnection.getSenders().forEach((function(e){e.track&&"video"==e.track.kind&&t.addTrack(e.track)}));var n=$("#line-"+e.LineNumber+"-localVideo").get(0);n.srcObject=t,n.onloadedmetadata=function(e){n.play()}}),1e3),"undefined"!=typeof web_hook_on_modify&&web_hook_on_modify("trackAdded",i)})),i.on("progress",(function(e){if(100==e.status_code)$(t).html(lang.trying);else if(180==e.status_code){$(t).html(lang.ringing);var n=audioBlobs.EarlyMedia_European;UserLocale().indexOf("us")>-1&&(n=audioBlobs.EarlyMedia_US),UserLocale().indexOf("gb")>-1&&(n=audioBlobs.EarlyMedia_UK),UserLocale().indexOf("au")>-1&&(n=audioBlobs.EarlyMedia_Australia),UserLocale().indexOf("jp")>-1&&(n=audioBlobs.EarlyMedia_Japan),console.log("Audio:",n.url);var a=new Audio(n.blob);a.preload="auto",a.loop=!0,a.oncanplaythrough=function(e){void 0!==a.sinkId&&"default"!=getAudioOutputID()&&a.setSinkId(getAudioOutputID()).then((function(){console.log("Set sinkId to:",getAudioOutputID())})).catch((function(e){console.warn("Failed not apply setSinkId.",e)})),a.play().then((function(){})).catch((function(e){console.warn("Unable to play audio file.",e)}))},i.data.earlyMedia=a}else $(t).html(e.reason_phrase+"...");"undefined"!=typeof web_hook_on_modify&&web_hook_on_modify("progress",i)})),i.on("accepted",(function(n){i.data.earlyMedia&&(i.data.earlyMedia.pause(),i.data.earlyMedia.removeAttribute("src"),i.data.earlyMedia.load(),i.data.earlyMedia=null),window.clearInterval(i.data.callTimer),$("#line-"+e.LineNumber+"-timer").show();var a=moment.utc();i.data.callTimer=window.setInterval((function(){var t=moment.utc(),i=moment.duration(t.diff(a));$("#line-"+e.LineNumber+"-timer").html(formatShortDuration(i.asSeconds()))}),1e3),(RecordAllCalls||"enabled"==CallRecordingPolicy)&&StartRecording(e.LineNumber),$("#line-"+e.LineNumber+"-progress").hide(),$("#line-"+e.LineNumber+"-VideoCall").show(),$("#line-"+e.LineNumber+"-ActiveCall").show(),$("#line-"+e.LineNumber+"-btn-Conference").hide(),$("#line-"+e.LineNumber+"-btn-CancelConference").hide(),$("#line-"+e.LineNumber+"-Conference").hide(),$("#line-"+e.LineNumber+"-btn-Transfer").hide(),$("#line-"+e.LineNumber+"-btn-CancelTransfer").hide(),$("#line-"+e.LineNumber+"-Transfer").hide(),$("#line-"+e.LineNumber+"-src-camera").prop("disabled",!0),$("#line-"+e.LineNumber+"-src-canvas").prop("disabled",!1),$("#line-"+e.LineNumber+"-src-desktop").prop("disabled",!1),$("#line-"+e.LineNumber+"-src-video").prop("disabled",!1),updateLineScroll(e.LineNumber),e.LocalSoundMeter=StartLocalAudioMediaMonitoring(e.LineNumber,i),e.RemoteSoundMeter=StartRemoteAudioMediaMonitoring(e.LineNumber,i),$(t).html(lang.call_in_progress),StartVideoFullScreen&&ExpandVideoArea(e.LineNumber),"undefined"!=typeof web_hook_on_modify&&web_hook_on_modify("accepted",i)})),i.on("rejected",(function(i,n){$(t).html(lang.call_rejected+": "+n),console.log("Call rejected: "+n),teardownSession(e,i.status_code,i.reason_phrase)})),i.on("failed",(function(i,n){$(t).html(lang.call_failed+": "+n),console.log("Call failed: "+n),teardownSession(e,0,"call failed")})),i.on("cancel",(function(){$(t).html(lang.call_cancelled),console.log("Call Cancelled"),teardownSession(e,0,"Cancelled by caller")})),i.on("bye",(function(){$(t).html(lang.call_ended),console.log("Call ended, bye!"),teardownSession(e,16,"Normal Call clearing")})),i.on("terminated",(function(i,n){$(t).html(lang.call_ended),console.log("Session terminated"),teardownSession(e,16,"Normal Call clearing")})),i.on("reinvite",(function(e){console.log("Session reinvited!")})),i.on("directionChanged",(function(){var e=i.sessionDescriptionHandler.getDirection();console.log("Direction Change: ",e),"undefined"!=typeof web_hook_on_modify&&web_hook_on_modify("directionChanged",i)})),$("#line-"+e.LineNumber+"-btn-settings").removeAttr("disabled"),$("#line-"+e.LineNumber+"-btn-audioCall").prop("disabled","disabled"),$("#line-"+e.LineNumber+"-btn-videoCall").prop("disabled","disabled"),$("#line-"+e.LineNumber+"-btn-search").removeAttr("disabled"),$("#line-"+e.LineNumber+"-btn-remove").prop("disabled","disabled"),$("#line-"+e.LineNumber+"-progress").show(),$("#line-"+e.LineNumber+"-msg").show(),updateLineScroll(e.LineNumber),UpdateUI()}}function teardownSession(e,t,i){if(null!=e&&null!=e.SipSession){var n=e.SipSession;if(1!=n.data.teardownComplete){if(n.data.teardownComplete=!0,n.data.reasonCode=t,n.data.reasonText=i,$.jeegoopopup.close(),n.data.childsession)try{n.data.childsession.status==SIP.Session.C.STATUS_CONFIRMED?n.data.childsession.bye():n.data.childsession.cancel()}catch(e){}n.data.childsession=null,n.data.AudioSourceTrack&&"audio"==n.data.AudioSourceTrack.kind&&(n.data.AudioSourceTrack.stop(),n.data.AudioSourceTrack=null),n.data.earlyMedia&&(n.data.earlyMedia.pause(),n.data.earlyMedia.removeAttribute("src"),n.data.earlyMedia.load(),n.data.earlyMedia=null),StopRecording(e.LineNumber,!0),null!=e.LocalSoundMeter&&(e.LocalSoundMeter.stop(),e.LocalSoundMeter=null),null!=e.RemoteSoundMeter&&(e.RemoteSoundMeter.stop(),e.RemoteSoundMeter=null),window.clearInterval(n.data.videoResampleInterval),window.clearInterval(n.data.callTimer),AddCallMessage(e.BuddyObj.identity,n,t,i),window.setTimeout((function(){RemoveLine(e)}),1e3),UpdateBuddyList(),UpdateUI(),"undefined"!=typeof web_hook_on_terminate&&web_hook_on_terminate(n)}}}function StartRemoteAudioMediaMonitoring(e,t){console.log("Creating RemoteAudio AudioContext on Line:"+e);var i=new SoundMeter(t.id,e);if(null==i)return console.warn("AudioContext() RemoteAudio not available... it fine."),null;var n=new MediaStream,a=null;t.sessionDescriptionHandler.peerConnection.getReceivers().forEach((function(e){e.track&&"audio"==e.track.kind&&(null==a?(n.addTrack(e.track),a=e):(console.log("Found another Track, but audioReceiver not null"),console.log(e),console.log(e.track)))}));i.startTime=Date.now(),Chart.defaults.global.defaultFontSize=12;var o={responsive:!1,maintainAspectRatio:!1,devicePixelRatio:1,animation:!1,scales:{yAxes:[{ticks:{beginAtZero:!0}}]}};return i.ReceiveBitRateChart=new Chart($("#line-"+e+"-AudioReceiveBitRate"),{type:"line",data:{labels:MakeDataArray("",100),datasets:[{label:lang.receive_kilobits_per_second,data:MakeDataArray(0,100),backgroundColor:"rgba(168, 0, 0, 0.5)",borderColor:"rgba(168, 0, 0, 1)",borderWidth:1,pointRadius:1}]},options:o}),i.ReceiveBitRateChart.lastValueBytesReceived=0,i.ReceiveBitRateChart.lastValueTimestamp=0,i.ReceivePacketRateChart=new Chart($("#line-"+e+"-AudioReceivePacketRate"),{type:"line",data:{labels:MakeDataArray("",100),datasets:[{label:lang.receive_packets_per_second,data:MakeDataArray(0,100),backgroundColor:"rgba(168, 0, 0, 0.5)",borderColor:"rgba(168, 0, 0, 1)",borderWidth:1,pointRadius:1}]},options:o}),i.ReceivePacketRateChart.lastValuePacketReceived=0,i.ReceivePacketRateChart.lastValueTimestamp=0,i.ReceivePacketLossChart=new Chart($("#line-"+e+"-AudioReceivePacketLoss"),{type:"line",data:{labels:MakeDataArray("",100),datasets:[{label:lang.receive_packet_loss,data:MakeDataArray(0,100),backgroundColor:"rgba(168, 99, 0, 0.5)",borderColor:"rgba(168, 99, 0, 1)",borderWidth:1,pointRadius:1}]},options:o}),i.ReceivePacketLossChart.lastValuePacketLoss=0,i.ReceivePacketLossChart.lastValueTimestamp=0,i.ReceiveJitterChart=new Chart($("#line-"+e+"-AudioReceiveJitter"),{type:"line",data:{labels:MakeDataArray("",100),datasets:[{label:lang.receive_jitter,data:MakeDataArray(0,100),backgroundColor:"rgba(0, 38, 168, 0.5)",borderColor:"rgba(0, 38, 168, 1)",borderWidth:1,pointRadius:1}]},options:o}),i.ReceiveLevelsChart=new Chart($("#line-"+e+"-AudioReceiveLevels"),{type:"line",data:{labels:MakeDataArray("",100),datasets:[{label:lang.receive_audio_levels,data:MakeDataArray(0,100),backgroundColor:"rgba(140, 0, 168, 0.5)",borderColor:"rgba(140, 0, 168, 1)",borderWidth:1,pointRadius:1}]},options:o}),i.connectToSource(n,(function(t){null==t&&(console.log("SoundMeter for RemoteAudio Connected, displaying levels for Line: "+e),i.levelsInterval=window.setInterval((function(){var t=4*i.instant;t>1&&(t=1);var n=100*t;$("#line-"+e+"-Speaker").css("height",n.toFixed(2)+"%")}),50),i.networkInterval=window.setInterval((function(){null!=a&&a.getStats().then((function(e){e.forEach((function(e){var t=utcDateNow(),n=i.ReceiveBitRateChart,a=i.ReceivePacketRateChart,o=i.ReceivePacketLossChart,l=i.ReceiveJitterChart,s=i.ReceiveLevelsChart;Math.floor((Date.now()-i.startTime)/1e3);if("inbound-rtp"==e.type){if(0==n.lastValueTimestamp)return n.lastValueTimestamp=e.timestamp,n.lastValueBytesReceived=e.bytesReceived,a.lastValueTimestamp=e.timestamp,a.lastValuePacketReceived=e.packetsReceived,o.lastValueTimestamp=e.timestamp,void(o.lastValuePacketLoss=e.packetsLost);var r=8*(e.bytesReceived-n.lastValueBytesReceived)/1e3;n.lastValueTimestamp=e.timestamp,n.lastValueBytesReceived=e.bytesReceived,i.ReceiveBitRate.push({value:r,timestamp:t}),n.data.datasets[0].data.push(r),n.data.labels.push(""),n.data.datasets[0].data.length>100&&(n.data.datasets[0].data.splice(0,1),n.data.labels.splice(0,1)),n.update();var d=e.packetsReceived-a.lastValuePacketReceived;a.lastValueTimestamp=e.timestamp,a.lastValuePacketReceived=e.packetsReceived,i.ReceivePacketRate.push({value:d,timestamp:t}),a.data.datasets[0].data.push(d),a.data.labels.push(""),a.data.datasets[0].data.length>100&&(a.data.datasets[0].data.splice(0,1),a.data.labels.splice(0,1)),a.update();var c=e.packetsLost-o.lastValuePacketLoss;o.lastValueTimestamp=e.timestamp,o.lastValuePacketLoss=e.packetsLost,i.ReceivePacketLoss.push({value:c,timestamp:t}),o.data.datasets[0].data.push(c),o.data.labels.push(""),o.data.datasets[0].data.length>100&&(o.data.datasets[0].data.splice(0,1),o.data.labels.splice(0,1)),o.update(),i.ReceiveJitter.push({value:e.jitter,timestamp:t}),l.data.datasets[0].data.push(e.jitter),l.data.labels.push(""),l.data.datasets[0].data.length>100&&(l.data.datasets[0].data.splice(0,1),l.data.labels.splice(0,1)),l.update()}if("track"==e.type){var u=100*e.audioLevel;i.ReceiveLevels.push({value:u,timestamp:t}),s.data.datasets[0].data.push(u),s.data.labels.push(""),s.data.datasets[0].data.length>100&&(s.data.datasets[0].data.splice(0,1),s.data.labels.splice(0,1)),s.update()}}))}))}),1e3))})),i}function StartLocalAudioMediaMonitoring(e,t){console.log("Creating LocalAudio AudioContext on line "+e);var i=new SoundMeter(t.id,e);if(null==i)return console.warn("AudioContext() LocalAudio not available... its fine."),null;var n=new MediaStream,a=null;t.sessionDescriptionHandler.peerConnection.getSenders().forEach((function(e){e.track&&"audio"==e.track.kind&&(null==a?(console.log("Adding Track to Monitor: ",e.track.label),n.addTrack(e.track),a=e):(console.log("Found another Track, but audioSender not null"),console.log(e),console.log(e.track)))}));i.startTime=Date.now(),Chart.defaults.global.defaultFontSize=12;var o={responsive:!1,maintainAspectRatio:!1,devicePixelRatio:1,animation:!1,scales:{yAxes:[{ticks:{beginAtZero:!0}}]}};return i.SendBitRateChart=new Chart($("#line-"+e+"-AudioSendBitRate"),{type:"line",data:{labels:MakeDataArray("",100),datasets:[{label:lang.send_kilobits_per_second,data:MakeDataArray(0,100),backgroundColor:"rgba(0, 121, 19, 0.5)",borderColor:"rgba(0, 121, 19, 1)",borderWidth:1,pointRadius:1}]},options:o}),i.SendBitRateChart.lastValueBytesSent=0,i.SendBitRateChart.lastValueTimestamp=0,i.SendPacketRateChart=new Chart($("#line-"+e+"-AudioSendPacketRate"),{type:"line",data:{labels:MakeDataArray("",100),datasets:[{label:lang.send_packets_per_second,data:MakeDataArray(0,100),backgroundColor:"rgba(0, 121, 19, 0.5)",borderColor:"rgba(0, 121, 19, 1)",borderWidth:1,pointRadius:1}]},options:o}),i.SendPacketRateChart.lastValuePacketSent=0,i.SendPacketRateChart.lastValueTimestamp=0,i.connectToSource(n,(function(t){null==t&&(console.log("SoundMeter for LocalAudio Connected, displaying levels for Line: "+e),i.levelsInterval=window.setInterval((function(){var t=4*i.instant;t>1&&(t=1);var n=100*t;$("#line-"+e+"-Mic").css("height",n.toFixed(2)+"%")}),50),i.networkInterval=window.setInterval((function(){null!=a&&a.getStats().then((function(e){e.forEach((function(e){var t=utcDateNow(),n=i.SendBitRateChart,a=i.SendPacketRateChart;Math.floor((Date.now()-i.startTime)/1e3);if("outbound-rtp"==e.type){if(0==n.lastValueTimestamp)return n.lastValueTimestamp=e.timestamp,n.lastValueBytesSent=e.bytesSent,a.lastValueTimestamp=e.timestamp,void(a.lastValuePacketSent=e.packetsSent);var o=8*(e.bytesSent-n.lastValueBytesSent)/1e3;n.lastValueTimestamp=e.timestamp,n.lastValueBytesSent=e.bytesSent,i.SendBitRate.push({value:o,timestamp:t}),n.data.datasets[0].data.push(o),n.data.labels.push(""),n.data.datasets[0].data.length>100&&(n.data.datasets[0].data.splice(0,1),n.data.labels.splice(0,1)),n.update();var l=e.packetsSent-a.lastValuePacketSent;a.lastValueTimestamp=e.timestamp,a.lastValuePacketSent=e.packetsSent,i.SendPacketRate.push({value:l,timestamp:t}),a.data.datasets[0].data.push(l),a.data.labels.push(""),a.data.datasets[0].data.length>100&&(a.data.datasets[0].data.splice(0,1),a.data.labels.splice(0,1)),a.update()}e.type}))}))}),1e3))})),i}$(window).on("beforeunload",(function(){Unregister()})),$(window).on("resize",(function(){UpdateUI()})),$(document).ready((function(){$.getJSON(hostingPrefex+"lang/en.json",(function(e){lang=e;var t=GetAlternateLanguage();""!=t?$.getJSON(hostingPrefex+"lang/"+t+".json",(function(e){lang=e})).always((function(){console.log("Alternate Lanaguage Pack loaded: ",lang),InitUi()})):(console.log("Lanaguage Pack already loaded: ",lang),InitUi())})),getConfFromSqldb(),getExternalUserConfFromSqldb()}));class SoundMeter{constructor(e,t){var i=null;try{window.AudioContext=window.AudioContext||window.webkitAudioContext,i=new AudioContext}catch(e){console.warn("AudioContext() LocalAudio not available... its fine.")}if(null==i)return null;this.lineNum=t,this.sessionId=e,this.levelsInterval=null,this.networkInterval=null,this.startTime=0,this.ReceiveBitRateChart=null,this.ReceiveBitRate=[],this.ReceivePacketRateChart=null,this.ReceivePacketRate=[],this.ReceivePacketLossChart=null,this.ReceivePacketLoss=[],this.ReceiveJitterChart=null,this.ReceiveJitter=[],this.ReceiveLevelsChart=null,this.ReceiveLevels=[],this.SendBitRateChart=null,this.SendBitRate=[],this.SendPacketRateChart=null,this.SendPacketRate=[],this.context=i,this.instant=0,this.script=i.createScriptProcessor(2048,1,1);const n=this;this.script.onaudioprocess=function(e){const t=e.inputBuffer.getChannelData(0);let i,a=0;for(i=0;i<t.length;++i)a+=t[i]*t[i];n.instant=Math.sqrt(a/t.length)}}connectToSource(e,t){console.log("SoundMeter connecting...");try{this.mic=this.context.createMediaStreamSource(e),this.mic.connect(this.script),this.script.connect(this.context.destination),t(null)}catch(e){console.error(e),t(e)}}stop(){console.log("Disconnecting SoundMeter...");try{window.clearInterval(this.levelsInterval),this.levelsInterval=null}catch(e){}try{window.clearInterval(this.networkInterval),this.networkInterval=null}catch(e){}this.mic.disconnect(),this.script.disconnect(),this.mic=null,this.script=null;try{this.context.close()}catch(e){}this.context=null;var e=FindLineByNumber(this.lineNum);SaveQosData({ReceiveBitRate:this.ReceiveBitRate,ReceivePacketRate:this.ReceivePacketRate,ReceivePacketLoss:this.ReceivePacketLoss,ReceiveJitter:this.ReceiveJitter,ReceiveLevels:this.ReceiveLevels,SendBitRate:this.SendBitRate,SendPacketRate:this.SendPacketRate},this.sessionId,e.BuddyObj.identity)}}function MeterSettingsOutput(e,t,i,n){var a=new SoundMeter(null,null);return a.startTime=Date.now(),a.connectToSource(e,(function(e){null==e&&(console.log("SoundMeter Connected, displaying levels to:"+t),a.levelsInterval=window.setInterval((function(){var e=4*a.instant;e>1&&(e=1);var n=100*e;$("#"+t).css(i,n.toFixed(2)+"%")}),n))})),a}function SaveQosData(e,t,i){var n=window.indexedDB.open("CallQosData");n.onerror=function(e){console.error("IndexDB Request Error:",e)},n.onupgradeneeded=function(e){console.warn("Upgrade Required for IndexDB... probably because of first time use.");var t=e.target.result;if(0==t.objectStoreNames.contains("CallQos")){var i=t.createObjectStore("CallQos",{keyPath:"uID"});i.createIndex("sessionid","sessionid",{unique:!1}),i.createIndex("buddy","buddy",{unique:!1}),i.createIndex("QosData","QosData",{unique:!1})}else console.warn("IndexDB requested upgrade, but object store was in place")},n.onsuccess=function(n){console.log("IndexDB connected to CallQosData");var a=n.target.result;if(0!=a.objectStoreNames.contains("CallQos")){a.onerror=function(e){console.error("IndexDB Error:",e)};var o={uID:uID(),sessionid:t,buddy:i,QosData:e};a.transaction(["CallQos"],"readwrite").objectStore("CallQos").add(o).onsuccess=function(e){console.log("Call CallQos Sucess: ",t)}}else console.warn("IndexDB CallQosData.CallQos does not exists")}}function DisplayQosData(e){var t=window.indexedDB.open("CallQosData");t.onerror=function(e){console.error("IndexDB Request Error:",e)},t.onupgradeneeded=function(e){console.warn("Upgrade Required for IndexDB... probably because of first time use.")},t.onsuccess=function(t){console.log("IndexDB connected to CallQosData");var i=t.target.result;if(0!=i.objectStoreNames.contains("CallQos")){var n=i.transaction(["CallQos"]).objectStore("CallQos").index("sessionid").getAll(e);n.onerror=function(e){console.error("IndexDB Get Error:",e)},n.onsuccess=function(e){if(e.target.result&&2==e.target.result.length){var t=e.target.result[0].QosData,i=e.target.result[1].QosData;Chart.defaults.global.defaultFontSize=12;var n={responsive:!0,maintainAspectRatio:!1,animation:!1,scales:{yAxes:[{ticks:{beginAtZero:!0}}],xAxes:[{display:!1}]}},a=[],o=[],l=t.ReceiveBitRate.length>0?t.ReceiveBitRate:i.ReceiveBitRate;$.each(l,(function(e,t){a.push(moment.utc(t.timestamp.replace(" UTC","")).local().format(DisplayDateFormat+" "+DisplayTimeFormat)),o.push(t.value)}));new Chart($("#cdr-AudioReceiveBitRate"),{type:"line",data:{labels:a,datasets:[{label:lang.receive_kilobits_per_second,data:o,backgroundColor:"rgba(168, 0, 0, 0.5)",borderColor:"rgba(168, 0, 0, 1)",borderWidth:1,pointRadius:1}]},options:n}),a=[],o=[],l=t.ReceivePacketRate.length>0?t.ReceivePacketRate:i.ReceivePacketRate;$.each(l,(function(e,t){a.push(moment.utc(t.timestamp.replace(" UTC","")).local().format(DisplayDateFormat+" "+DisplayTimeFormat)),o.push(t.value)}));new Chart($("#cdr-AudioReceivePacketRate"),{type:"line",data:{labels:a,datasets:[{label:lang.receive_packets_per_second,data:o,backgroundColor:"rgba(168, 0, 0, 0.5)",borderColor:"rgba(168, 0, 0, 1)",borderWidth:1,pointRadius:1}]},options:n}),a=[],o=[],l=t.ReceivePacketLoss.length>0?t.ReceivePacketLoss:i.ReceivePacketLoss;$.each(l,(function(e,t){a.push(moment.utc(t.timestamp.replace(" UTC","")).local().format(DisplayDateFormat+" "+DisplayTimeFormat)),o.push(t.value)}));new Chart($("#cdr-AudioReceivePacketLoss"),{type:"line",data:{labels:a,datasets:[{label:lang.receive_packet_loss,data:o,backgroundColor:"rgba(168, 99, 0, 0.5)",borderColor:"rgba(168, 99, 0, 1)",borderWidth:1,pointRadius:1}]},options:n}),a=[],o=[],l=t.ReceiveJitter.length>0?t.ReceiveJitter:i.ReceiveJitter;$.each(l,(function(e,t){a.push(moment.utc(t.timestamp.replace(" UTC","")).local().format(DisplayDateFormat+" "+DisplayTimeFormat)),o.push(t.value)}));new Chart($("#cdr-AudioReceiveJitter"),{type:"line",data:{labels:a,datasets:[{label:lang.receive_jitter,data:o,backgroundColor:"rgba(0, 38, 168, 0.5)",borderColor:"rgba(0, 38, 168, 1)",borderWidth:1,pointRadius:1}]},options:n}),a=[],o=[],l=t.ReceiveLevels.length>0?t.ReceiveLevels:i.ReceiveLevels;$.each(l,(function(e,t){a.push(moment.utc(t.timestamp.replace(" UTC","")).local().format(DisplayDateFormat+" "+DisplayTimeFormat)),o.push(t.value)}));new Chart($("#cdr-AudioReceiveLevels"),{type:"line",data:{labels:a,datasets:[{label:lang.receive_audio_levels,data:o,backgroundColor:"rgba(140, 0, 168, 0.5)",borderColor:"rgba(140, 0, 168, 1)",borderWidth:1,pointRadius:1}]},options:n}),a=[],o=[],l=t.SendPacketRate.length>0?t.SendPacketRate:i.SendPacketRate;$.each(l,(function(e,t){a.push(moment.utc(t.timestamp.replace(" UTC","")).local().format(DisplayDateFormat+" "+DisplayTimeFormat)),o.push(t.value)}));new Chart($("#cdr-AudioSendPacketRate"),{type:"line",data:{labels:a,datasets:[{label:lang.send_packets_per_second,data:o,backgroundColor:"rgba(0, 121, 19, 0.5)",borderColor:"rgba(0, 121, 19, 1)",borderWidth:1,pointRadius:1}]},options:n}),a=[],o=[],l=t.SendBitRate.length>0?t.SendBitRate:i.SendBitRate;$.each(l,(function(e,t){a.push(moment.utc(t.timestamp.replace(" UTC","")).local().format(DisplayDateFormat+" "+DisplayTimeFormat)),o.push(t.value)}));new Chart($("#cdr-AudioSendBitRate"),{type:"line",data:{labels:a,datasets:[{label:lang.send_kilobits_per_second,data:o,backgroundColor:"rgba(0, 121, 19, 0.5)",borderColor:"rgba(0, 121, 19, 1)",borderWidth:1,pointRadius:1}]},options:n})}else console.warn("Result not expected",e.target.result)}}else console.warn("IndexDB CallQosData.CallQos does not exists")}}function DeleteQosData(e){var t=window.indexedDB.open("CallQosData");t.onerror=function(e){console.error("IndexDB Request Error:",e)},t.onupgradeneeded=function(e){console.warn("Upgrade Required for IndexDB... probably because of first time use.")},t.onsuccess=function(t){console.log("IndexDB connected to CallQosData");var i=t.target.result;if(0!=i.objectStoreNames.contains("CallQos")){i.onerror=function(e){console.error("IndexDB Error:",e)},console.log("Deleting CallQosData: ",e);var n=i.transaction(["CallQos"],"readwrite").objectStore("CallQos"),a=n.index("buddy").getAll(e);a.onerror=function(e){console.error("IndexDB Get Error:",e)},a.onsuccess=function(e){e.target.result&&e.target.result.length>0&&$.each(e.target.result,(function(e,t){try{n.delete(t.uID)}catch(e){console.log("Call CallQosData Delete failed: ",e)}}))}}else console.warn("IndexDB CallQosData.CallQos does not exists")}}function SubscribeAll(){console.log("Subscribe to voicemail Messages...");(voicemailSubs=userAgent.subscribe(SipUsername+"@"+wssServer,"message-summary",{expires:300})).on("notify",(function(e){var t=!1;$.each(e.request.body.split("\n"),(function(e,i){-1!=i.indexOf("Messages-Waiting:")&&(t="yes"==$.trim(i.replace("Messages-Waiting:","")))})),t&&console.log("You have voicemail!")}));var e={expires:300,extraHeaders:["Accept: application/pidf+xml"]};console.log("Starting Subscribe of all ("+Buddies.length+") Extension Buddies...");for(var t=0;t<Buddies.length;t++){var i=Buddies[t];if("extension"==i.type){console.log("SUBSCRIBE: "+i.ExtNo+"@"+wssServer);var n=userAgent.subscribe(i.ExtNo+"@"+wssServer,"presence",e);n.data.buddyId=i.identity,n.on("notify",(function(e){RecieveBlf(e)})),BlfSubs.push(n)}}}function SubscribeBuddy(e){if("extension"==e.type){console.log("SUBSCRIBE: "+e.ExtNo+"@"+wssServer);var t=userAgent.subscribe(e.ExtNo+"@"+wssServer,"presence",{expires:300,extraHeaders:["Accept: application/pidf+xml"]});t.data.buddyId=e.identity,t.on("notify",(function(e){RecieveBlf(e)})),BlfSubs.push(t)}}function RecieveBlf(e){if(null!=userAgent&&userAgent.isRegistered()){var t=e.request.headers["Content-Type"][0].parsed;if("application/pidf+xml"==t){var i=(l=$($.parseXML(e.request.body))).find("presence").attr("entity"),n=l.find("presence").find("tuple").find("contact").text();if(SipUsername!=i.split("@")[0].split(":")[1]&&SipUsername!=n.split("@")[0].split(":")[1])return void console.warn("presence message not for you.",l);var a=l.find("presence").find("tuple").attr("id"),o=(l.find("presence").find("tuple").find("status"),l.find("presence").find("tuple").find("status").find("basic").text(),"dotOffline");"Not online"==(r=l.find("presence").find("note").text())&&(o="dotOffline"),"Ready"==r&&(o="dotOnline"),"On the phone"==r&&(o="dotInUse"),"Ringing"==r&&(o="dotRinging"),"On hold"==r&&(o="dotOnHold"),"Unavailable"==r&&(o="dotOffline"),null!=(d=FindBuddyByExtNo(a))&&(console.log("Setting Presence for "+d.identity+" to "+r),$("#contact-"+d.identity+"-devstate").prop("class",o),$("#contact-"+d.identity+"-devstate-main").prop("class",o),d.devState=o,d.presence=r,"Not online"==r&&(r=lang.state_not_online),"Ready"==r&&(r=lang.state_ready),"On the phone"==r&&(r=lang.state_on_the_phone),"Ringing"==r&&(r=lang.state_ringing),"On hold"==r&&(r=lang.state_on_hold),"Unavailable"==r&&(r=lang.state_unavailable),$("#contact-"+d.identity+"-presence").html(r),$("#contact-"+d.identity+"-presence-main").html(r))}else if("application/dialog-info+xml"==t){var l;a=(l=$($.parseXML(e.request.body))).find("dialog-info").attr("entity").split("@")[0].split(":")[1],l.find("dialog-info").attr("version");if("full"!=l.find("dialog-info").attr("state"))return;if(l.find("dialog-info").find("dialog").attr("id")!=a)return;var s=l.find("dialog-info").find("dialog").find("state").text(),r="Unknown";"terminated"==s&&(r="Ready"),"trying"==s&&(r="On the phone"),"proceeding"==s&&(r="On the phone"),"early"==s&&(r="Ringing"),"confirmed"==s&&(r="On the phone");var d;o="dotOffline";"Not online"==r&&(o="dotOffline"),"Ready"==r&&(o="dotOnline"),"On the phone"==r&&(o="dotInUse"),"Ringing"==r&&(o="dotRinging"),"On hold"==r&&(o="dotOnHold"),"Unavailable"==r&&(o="dotOffline"),null!=(d=FindBuddyByExtNo(a))&&(console.log("Setting Presence for "+d.identity+" to "+r),$("#contact-"+d.identity+"-devstate").prop("class",o),$("#contact-"+d.identity+"-devstate-main").prop("class",o),d.devState=o,d.presence=r,"Unknown"==r&&(r=lang.state_unknown),"Not online"==r&&(r=lang.state_not_online),"Ready"==r&&(r=lang.state_ready),"On the phone"==r&&(r=lang.state_on_the_phone),"Ringing"==r&&(r=lang.state_ringing),"On hold"==r&&(r=lang.state_on_hold),"Unavailable"==r&&(r=lang.state_unavailable),$("#contact-"+d.identity+"-presence").html(r),$("#contact-"+d.identity+"-presence-main").html(r))}}}function UnsubscribeAll(){console.log("Unsubscribing "+BlfSubs.length+" subscriptions...");for(var e=0;e<BlfSubs.length;e++)BlfSubs[e].unsubscribe(),BlfSubs[e].close();BlfSubs=new Array;for(var t=0;t<Buddies.length;t++){var i=Buddies[t];"extension"==i.type&&($("#contact-"+i.identity+"-devstate").prop("class","dotOffline"),$("#contact-"+i.identity+"-devstate-main").prop("class","dotOffline"),$("#contact-"+i.identity+"-presence").html(lang.state_unknown),$("#contact-"+i.identity+"-presence-main").html(lang.state_unknown))}}function UnsubscribeBuddy(e){if("extension"==e.type)for(var t=0;t<BlfSubs.length;t++){var i=BlfSubs[t];if(i.data.buddyId==e.identity){console.log("Unsubscribing:",e.identity),null!=i.dialog&&(i.unsubscribe(),i.close()),BlfSubs.splice(t,1);break}}}function InitinaliseStream(e){return localDB.setItem(e+"-stream",JSON.stringify({TotalRows:0,DataCollection:[]})),JSON.parse(localDB.getItem(e+"-stream"))}function splitString(e,t){const i=Math.ceil(e.length/t),n=[];for(let a=0,o=0;a<i;++a,o+=t)n[a]=e.substr(o,t);return n}function generateAESKey(e){const t=CryptoJS.lib.WordArray.random(16);return CryptoJS.PBKDF2(e,t,{keySize:8,iterations:100})}function encryptAES(e,t){return(e=CryptoJS.AES.encrypt(e,t)).toString()}function decryptAES(e,t){return CryptoJS.AES.decrypt(e,t).toString(CryptoJS.enc.Utf8)}function getChatRSAPubKey(e){var t="";return $.ajax({async:!1,global:!1,type:"POST",url:"get-text-chat-pub-key.php",dataType:"JSON",data:{recsendsipuser:e,s_ajax_call:validateSToken},success:function(e){"success"==e.resmessage?t="`"+e.chatkey.join("")+"`":(pubKeyCheck=1,alert("An error occurred while retrieving the public key for text chat!"))},error:function(e){alert("An error occurred while attempting to retrieve the public key for text chat!")}}),t}function SendChatMessage(e){if(null!=userAgent&&userAgent.isRegistered()){var t=$("#contact-"+e+"-ChatMessage").val();if(messagetrim=$.trim(t),""!=messagetrim||0!=sendFileCheck&&(1!=sendFileCheck||""!=$("#selectedFile").val())){var i=FindBuddyByIdentity(e);if(-1==$.inArray(i.presence,["Ready","On the phone","Ringing","On hold"]))return alert("You cannot send a message or a file to a contact who is not online!"),$("#sendFileLoader").remove(),$("#selectedFile").val(""),$("#sendFileFormChat").remove(),void(sendFileCheck=0);var n=Date.now()+Math.floor(1e4*Math.random()).toString(6).toUpperCase(),a=String(generateAESKey(n)),o=[],l=(o=splitString(encryptAES(messagetrim,a),900),Date.now()+Math.floor(1e4*Math.random()).toString(16).toUpperCase()+profileUser),s=[];s=[l,1];var r=[];r=[l,0];var d=getChatRSAPubKey(i.ExtNo),c=new JSEncrypt;c.setPublicKey(d);var u=c.encrypt(a);o.unshift(u),$("#contact-"+e+"-ChatHistory").after("<span id='sendFileLoader'></span>");for(var p=0;p<o.length;p++){if(0==p)var g=l+"|"+o.length+"|"+parseInt(p)+"||"+o[p];else if(0==sendFileCheck&&""!=o[p])g=l+"|"+o.length+"|"+parseInt(p)+"||"+o[p];else if(1==sendFileCheck&&""==sendFileChatErr)g=l+"|"+o.length+"|"+parseInt(p)+"|"+upFileName+"|"+o[p];else if(1==sendFileCheck&&""!=sendFileChatErr)return $("#sendFileFormChat").remove(),sendFileChatErr="",void(sendFileCheck=0);1==p&&(s=[l,0]),p==o.length-1&&(r=[l,1]),SendChatMessageProc(e,i,l,g,messagetrim,s,r)}}else Alert(lang.alert_empty_text_message,lang.no_message)}}function SendChatMessageProc(e,t,i,n,a,o,l){var s=uID();if(1==pubKeyCheck)return pubKeyCheck=0,$("#selectedFile").val(""),void $("#sendFileLoader").remove();if(sendFileChatErr="",$("#sendFileFormChat").on("submit",(function(e){e.preventDefault(),$.ajax({async:!1,global:!1,type:"POST",url:"text-chat-upload-file.php",data:new FormData(this),dataType:"JSON",contentType:!1,cache:!1,processData:!1,success:function(e){""!=e.error&&(sendFileChatErr=e.error,$("#sendFileFormChat").remove(),$("#sendFileLoader").remove(),alert("Error: "+e.error))},error:function(e){alert("An error occurred while sending the file!")}})})),1==sendFileCheck&&o[0]==i&&1==o[1]&&$("#submitFileChat").click(),l[0]==i&&1==l[1]&&1==sendFileCheck&&""!=sendFileChatErr)return $("#sendFileFormChat").remove(),$("#sendFileLoader").remove(),sendFileChatErr="",void(sendFileCheck=0);if("extension"==t.type||"group"==t.type){var r=t.ExtNo+"@"+wssServer;console.log("MESSAGE: "+r+" (extension)");var d=userAgent.message(r,n);d.data.direction="outbound",d.data.messageId=s,d.on("accepted",(function(i,n){var a;202==i.status_code?(console.log("Message Accepted:",s),null==(a=JSON.parse(localDB.getItem(e+"-stream")))&&null==a.DataCollection||($.each(a.DataCollection,(function(e,t){if("MSG"==t.ItemType&&t.ItemId==s)return t.Sent=!0,!1})),localDB.setItem(e+"-stream",JSON.stringify(a)),RefreshStream(t))):(console.warn("Message Error",i.status_code,n),null==(a=JSON.parse(localDB.getItem(e+"-stream")))&&null==a.DataCollection||($.each(a.DataCollection,(function(e,t){if("MSG"==t.ItemType&&t.ItemId==s)return t.Sent=!1,!1})),localDB.setItem(e+"-stream",JSON.stringify(a)),RefreshStream(t)))})),"undefined"!=typeof web_hook_on_message&&web_hook_on_message(d)}if(l[0]==i&&1==l[1]){var c=moment.utc().format("YYYY-MM-DD HH:mm:ss UTC"),u=JSON.parse(localDB.getItem(e+"-stream"));null==u&&(u=InitinaliseStream(e));var p={ItemId:s,ItemType:"MSG",ItemDate:c,SrcUserId:profileUserID,Src:'"'+profileName+'" <'+profileUser+">",DstUserId:e,Dst:"",MessageData:a};if(1==sendFileCheck){$("#sendFileFormChat").remove(),sendFileCheck=0;var g={ItemId:uID(),ItemType:"FILE",ItemDate:moment.utc().format("YYYY-MM-DD HH:mm:ss UTC"),SrcUserId:profileUserID,Src:'"'+profileName+'" <'+profileUser+">",DstUserId:e,Dst:t.ExtNo,SentFileName:upFileName,MessageData:"Download file"};""==sendFileChatErr&&u.DataCollection.push(g)}else $("#sendFileFormChat").remove();u.DataCollection.push(p),u.TotalRows=u.DataCollection.length,localDB.setItem(e+"-stream",JSON.stringify(u))}l[0]==i&&1==l[1]&&($("#sendFileLoader").remove(),$("#contact-"+e+"-ChatMessage").val("")),$("#contact-"+e+"-emoji-menu").hide(),null!=t.recognition&&(t.recognition.abort(),t.recognition=null),RefreshStream(t)}function ReceiveMessage(e){var t=e.remoteIdentity.displayName,i=e.remoteIdentity.uri.user;if(console.log("New Incoming Message!",'"'+t+'" <'+i+">"),e.data.direction="inbound",i.length>DidLength)console.warn("DID length greater then extensions length");else{var n=countSessions("0"),a=FindBuddyByDid(i);if(null==a){var o=JSON.parse(localDB.getItem(profileUserID+"-Buddies"));null==o&&(o=InitUserBuddies());var l=uID(),s=utcDateNow();o.DataCollection.push({Type:"extension",LastActivity:s,ExtensionNumber:i,MobileNumber:"",ContactNumber1:"",ContactNumber2:"",uID:l,cID:null,gID:null,DisplayName:t,Position:"",Description:"",Email:"",MemberCount:0}),AddBuddy(a=new Buddy("extension",l,t,i,"","","",s,"",""),!0,0==n,!0),o.TotalRows=o.DataCollection.length,localDB.setItem(profileUserID+"-Buddies",JSON.stringify(o))}var r=e.body.split("|");if(""!=r[3]&&void 0!==r[3]&&null!=r[3])var d=1,c=r[3];else d=0,c="";var u=r[0],p=parseInt(r[1]),g=parseInt(r[2]);if(0!=g)if(g<p-1)splitMessage.hasOwnProperty(u)?splitMessage[u][g]=r[4]:splitMessage[u]={[g]:r[4]};else{if(g==p-1){if(splitMessage.hasOwnProperty(u)?splitMessage[u][g]=r[4]:splitMessage[u]={[g]:r[4]},Object.keys(splitMessage[u]).length!=p)return;var m=splitMessage[u].aeskeyandiv;delete splitMessage[u].aeskeyandiv;var f="",v=Object.keys(splitMessage[u]).sort().reduce((function(e,t){return e[t]=splitMessage[u][t],e}),{});Object.keys(v).forEach((function(e,t){f+=splitMessage[u][e]}));var h=decryptAES(f,m);delete splitMessage[u]}var b=uID(),y=utcDateNow();if("group"==a.type){var w=e.request.headers["P-Asserted-Identity"][0].raw.split(" <"),S=w[0];w[1].replace(">","");S}var _=JSON.parse(localDB.getItem(a.identity+"-stream"));null==_&&(_=InitinaliseStream(a.identity));var C={ItemId:b,ItemType:"MSG",ItemDate:y,SrcUserId:a.identity,Src:'"'+a.CallerIDName+'" <'+a.ExtNo+">",DstUserId:profileUserID,Dst:"",MessageData:h};if(1==d&&""!=c){d=0;var D={ItemId:uID(),ItemType:"FILE",ItemDate:moment.utc().format("YYYY-MM-DD HH:mm:ss UTC"),SrcUserId:a.identity,Src:'"'+a.CallerIDName+'" <'+a.ExtNo+">",DstUserId:profileUserID,Dst:profileUser,ReceivedFileName:c,MessageData:"Download file"};_.DataCollection.push(D)}if(_.DataCollection.push(C),_.TotalRows=_.DataCollection.length,localDB.setItem(a.identity+"-stream",JSON.stringify(_)),UpdateBuddyActivity(a.identity),RefreshStream(a),!$("#stream-"+a.identity).is(":visible")){if(IncreaseMissedBadge(a.identity),"Notification"in window&&"granted"===Notification.permission){var k=getPicture(a.identity),I={body:h.substring(0,250),icon:k};new Notification(lang.message_from+" : "+a.CallerIDName,I).onclick=function(e){SelectBuddy(a.identity)}}console.log("Audio:",audioBlobs.Alert.url);var x=new Audio(audioBlobs.Alert.blob);x.preload="auto",x.loop=!1,x.oncanplaythrough=function(e){void 0!==x.sinkId&&"default"!=getRingerOutputID()&&x.setSinkId(getRingerOutputID()).then((function(){console.log("Set sinkId to:",getRingerOutputID())})).catch((function(e){console.warn("Failed not apply setSinkId.",e)})),x.play().then((function(){})).catch((function(e){console.warn("Unable to play audio file.",e)}))},e.data.rinngerObj=x}}else if(splitMessage.hasOwnProperty(u))if(0==g){var T=r[4];(B=new JSEncrypt).setPrivateKey(currentChatPrivKey);var A=B.decrypt(T);splitMessage[u].aeskeyandiv=A}else splitMessage[u][g]=r[4];else if(0==g){var B;T=r[4];(B=new JSEncrypt).setPrivateKey(currentChatPrivKey);A=B.decrypt(T);splitMessage[u]={aeskeyandiv:A}}else splitMessage[u]={[g]:r[4]}}}function AddCallMessage(e,t,i,n){var a=JSON.parse(localDB.getItem(e+"-stream"));null==a&&(a=InitinaliseStream(e));var o=moment.utc(),l=0,s=0,r=0,d=moment.utc(t.data.callstart.replace(" UTC","")),c=null;t.startTime&&(c=moment.utc(t.startTime),l=moment.duration(o.diff(c)),r=moment.duration(c.diff(d))),s=moment.duration(o.diff(d)),console.log(t.data.reasonCode+"("+t.data.reasonText+")");var u="",p="",g="",m="";"inbound"==t.data.calldirection?(u=e,g=profileUserID,p="<"+t.remoteIdentity.uri.user+"> "+t.remoteIdentity.displayName,m="<"+profileUser+"> "+profileName):"outbound"==t.data.calldirection&&(u=profileUserID,g=e,p="<"+profileUser+"> "+profileName,m=t.remoteIdentity.uri.user);var f=t.data.calldirection,v=t.data.withvideo,h=t.id,b=t.data.terminateby,y={CdrId:uID(),ItemType:"CDR",ItemDate:d.format("YYYY-MM-DD HH:mm:ss UTC"),CallAnswer:c?c.format("YYYY-MM-DD HH:mm:ss UTC"):null,CallEnd:o.format("YYYY-MM-DD HH:mm:ss UTC"),SrcUserId:u,Src:p,DstUserId:g,Dst:m,RingTime:0!=r?r.asSeconds():0,Billsec:0!=l?l.asSeconds():0,TotalDuration:0!=s?s.asSeconds():0,ReasonCode:i,ReasonText:n,WithVideo:v,SessionId:h,CallDirection:f,Terminate:b,MessageData:null,Tags:[],Transfers:t.data.transfer?t.data.transfer:[],Mutes:t.data.mute?t.data.mute:[],Holds:t.data.hold?t.data.hold:[],Recordings:t.data.recordings?t.data.recordings:[],ConfCalls:t.data.confcalls?t.data.confcalls:[],QOS:[]};console.log("New CDR",y),a.DataCollection.push(y),a.TotalRows=a.DataCollection.length,localDB.setItem(e+"-stream",JSON.stringify(a)),UpdateBuddyActivity(e)}function SendImageDataMessage(e,t){if(null!=userAgent&&userAgent.isRegistered()){var i='<table class="ourChatMessage chatMessageTable" cellspacing=0 cellpadding=0><tr><td style="width: 80px"><div class=messageDate>'+moment.utc().format("YYYY-MM-DD HH:mm:ss UTC")+"</div></td><td><div class=ourChatMessageText>"+('<IMG class=previewImage onClick="PreviewImage(this)" src="'+t+'">')+"</div></td></tr></table>";$("#contact-"+e+"-ChatHistory").append(i),updateScroll(e),ImageEditor_Cancel(e),UpdateBuddyActivity(e)}}function SendFileDataMessage(e,t,i,n){if(null!=userAgent&&userAgent.isRegistered()){var a=uID();$.ajax({type:"POST",url:"/api/",data:"<XML>"+t+"</XML>",xhr:function(t){var i=$.ajaxSettings.xhr();return i.upload&&i.upload.addEventListener("progress",(function(t){var i=t.loaded/t.total*100;console.log("Progress for upload to "+e+" ("+a+"):"+i),$("#FileProgress-Bar-"+a).css("width",i+"%")}),!1),i},success:function(e,t,i){$("#FileUpload-"+a).html("Sent"),$("#FileProgress-"+a).hide(),$("#FileProgress-Bar-"+a).css("width","0%")},error:function(e,t,i){$("#FileUpload-"+a).html("Failed ("+e.status+")"),$("#FileProgress-"+a).hide(),$("#FileProgress-Bar-"+a).css("width","100%")}});var o=utcDateNow(),l=!1,s='<i class="fa fa-file"></i>';i.toLowerCase().endsWith(".png")&&(s='<i class="fa fa-file-image-o"></i>',l=!0),i.toLowerCase().endsWith(".jpg")&&(s='<i class="fa fa-file-image-o"></i>',l=!0),i.toLowerCase().endsWith(".jpeg")&&(s='<i class="fa fa-file-image-o"></i>',l=!0),i.toLowerCase().endsWith(".bmp")&&(s='<i class="fa fa-file-image-o"></i>',l=!0),i.toLowerCase().endsWith(".gif")&&(s='<i class="fa fa-file-image-o"></i>',l=!0),i.toLowerCase().endsWith(".mov")&&(s='<i class="fa fa-file-video-o"></i>'),i.toLowerCase().endsWith(".avi")&&(s='<i class="fa fa-file-video-o"></i>'),i.toLowerCase().endsWith(".mpeg")&&(s='<i class="fa fa-file-video-o"></i>'),i.toLowerCase().endsWith(".mp4")&&(s='<i class="fa fa-file-video-o"></i>'),i.toLowerCase().endsWith(".mvk")&&(s='<i class="fa fa-file-video-o"></i>'),i.toLowerCase().endsWith(".webm")&&(s='<i class="fa fa-file-video-o"></i>'),i.toLowerCase().endsWith(".wav")&&(s='<i class="fa fa-file-audio-o"></i>'),i.toLowerCase().endsWith(".mp3")&&(s='<i class="fa fa-file-audio-o"></i>'),i.toLowerCase().endsWith(".ogg")&&(s='<i class="fa fa-file-audio-o"></i>'),i.toLowerCase().endsWith(".zip")&&(s='<i class="fa fa-file-archive-o"></i>'),i.toLowerCase().endsWith(".rar")&&(s='<i class="fa fa-file-archive-o"></i>'),i.toLowerCase().endsWith(".tar.gz")&&(s='<i class="fa fa-file-archive-o"></i>'),i.toLowerCase().endsWith(".pdf")&&(s='<i class="fa fa-file-pdf-o"></i>');var r='<DIV><SPAN id="FileUpload-'+a+'">Sending</SPAN>: '+s+" "+i+"</DIV>";r+='<DIV id="FileProgress-'+a+'" class="progressBarContainer"><DIV id="FileProgress-Bar-'+a+'" class="progressBarTrack"></DIV></DIV>',l&&(r+='<DIV><IMG class=previewImage onClick="PreviewImage(this)" src="'+t+'"></DIV>');var d='<table class="ourChatMessage chatMessageTable" cellspacing=0 cellpadding=0><tr><td style="width: 80px"><div class=messageDate>'+o+"</div></td><td><div class=ourChatMessageText>"+r+"</div></td></tr></table>";$("#contact-"+e+"-ChatHistory").append(d),updateScroll(e),ImageEditor_Cancel(e),UpdateBuddyActivity(e)}}function updateLineScroll(e){RefreshLineActivity(e);var t=$("#line-"+e+"-CallDetails").get(0);t.scrollTop=t.scrollHeight}function updateScroll(e){var t=$("#contact-"+e+"-ChatHistory");t.children().length>0&&t.children().last().get(0).scrollIntoView(!1),t.get(0).scrollTop=t.get(0).scrollHeight}function PreviewImage(e){$.jeegoopopup.close();var t="<div>";t+='<div class="UiWindowField scroller">',t+='<div><img src="'+e.src+'"/></div>',t+="</div></div>",$.jeegoopopup.open({title:"Preview Image",html:t,width:"800",height:"600",center:!0,scrolling:"no",skinClass:"jg_popup_basic",overlay:!0,opacity:50,draggable:!0,resizable:!1,fadeIn:0}),$("#jg_popup_overlay").click((function(){$.jeegoopopup.close()})),$(window).on("keydown",(function(e){"Escape"==e.key&&$.jeegoopopup.close()}))}function IncreaseMissedBadge(e){var t=FindBuddyByIdentity(e);if(null!=t){t.missed+=1;var i=JSON.parse(localDB.getItem(profileUserID+"-Buddies"));null!=i&&($.each(i.DataCollection,(function(t,i){if(i.uID==e||i.cID==e||i.gID==e)return i.missed=i.missed+1,!1})),localDB.setItem(profileUserID+"-Buddies",JSON.stringify(i))),$("#contact-"+e+"-missed").text(t.missed),$("#contact-"+e+"-missed").show(),console.log("Set Missed badge for "+e+" to: "+t.missed)}}function UpdateBuddyActivity(e){var t=FindBuddyByIdentity(e);if(null!=t){var i=utcDateNow();t.lastActivity=i,console.log("Last Activity is now: "+i);var n=JSON.parse(localDB.getItem(profileUserID+"-Buddies"));null!=n&&($.each(n.DataCollection,(function(t,n){if(n.uID==e||n.cID==e||n.gID==e)return n.LastActivity=i,!1})),localDB.setItem(profileUserID+"-Buddies",JSON.stringify(n))),UpdateBuddyList()}}function ClearMissedBadge(e){var t=FindBuddyByIdentity(e);if(null!=t){t.missed=0;var i=JSON.parse(localDB.getItem(profileUserID+"-Buddies"));null!=i&&($.each(i.DataCollection,(function(t,i){if(i.uID==e||i.cID==e||i.gID==e)return i.missed=0,!1})),localDB.setItem(profileUserID+"-Buddies",JSON.stringify(i))),$("#contact-"+e+"-missed").text(t.missed),$("#contact-"+e+"-missed").hide(400)}}function VideoCall(e,t){if(null!=userAgent&&userAgent.isRegistered()&&null!=e)if(0!=HasAudioDevice){if(0==HasVideoDevice)return console.warn("No video devices (webcam) found, switching to audio call."),void AudioCall(e,t);var i=navigator.mediaDevices.getSupportedConstraints(),n={sessionDescriptionHandlerOptions:{constraints:{audio:{deviceId:"default"},video:{deviceId:"default"}}}},a=getAudioSrcID();if("default"!=a){for(var o=!1,l=0;l<AudioinputDevices.length;++l)if(a==AudioinputDevices[l].deviceId){o=!0;break}o?n.sessionDescriptionHandlerOptions.constraints.audio.deviceId={exact:a}:(console.warn("The audio device you used before is no longer available, default settings applied."),localDB.setItem("AudioSrcId","default"))}i.autoGainControl&&(n.sessionDescriptionHandlerOptions.constraints.audio.autoGainControl=AutoGainControl),i.echoCancellation&&(n.sessionDescriptionHandlerOptions.constraints.audio.echoCancellation=EchoCancellation),i.noiseSuppression&&(n.sessionDescriptionHandlerOptions.constraints.audio.noiseSuppression=NoiseSuppression);var s=getVideoSrcID();if("default"!=s){var r=!1;for(l=0;l<VideoinputDevices.length;++l)if(s==VideoinputDevices[l].deviceId){r=!0;break}r?n.sessionDescriptionHandlerOptions.constraints.video.deviceId={exact:s}:(console.warn("The video device you used before is no longer available, default settings applied."),localDB.setItem("VideoSrcId","default"))}i.frameRate&&""!=maxFrameRate&&(n.sessionDescriptionHandlerOptions.constraints.video.frameRate=maxFrameRate),i.height&&""!=videoHeight&&(n.sessionDescriptionHandlerOptions.constraints.video.height=videoHeight),console.log(i),console.log(i.aspectRatio),console.log(videoAspectRatio),i.aspectRatio&&""!=videoAspectRatio&&(n.sessionDescriptionHandlerOptions.constraints.video.aspectRatio=videoAspectRatio),$("#line-"+e.LineNumber+"-msg").html(lang.starting_video_call),$("#line-"+e.LineNumber+"-timer").show(),console.log("INVITE (video): "+t+"@"+wssServer,n),e.SipSession=userAgent.invite("sip:"+t+"@"+wssServer,n);var d=moment.utc();e.SipSession.data.line=e.LineNumber,e.SipSession.data.buddyId=e.BuddyObj.identity,e.SipSession.data.calldirection="outbound",e.SipSession.data.dst=t,e.SipSession.data.callstart=d.format("YYYY-MM-DD HH:mm:ss UTC"),e.SipSession.data.callTimer=window.setInterval((function(){var t=moment.utc(),i=moment.duration(t.diff(d));$("#line-"+e.LineNumber+"-timer").html(formatShortDuration(i.asSeconds()))}),1e3),e.SipSession.data.VideoSourceDevice=getVideoSrcID(),e.SipSession.data.AudioSourceDevice=getAudioSrcID(),e.SipSession.data.AudioOutputDevice=getAudioOutputID(),e.SipSession.data.terminateby="them",e.SipSession.data.withvideo=!0,updateLineScroll(e.LineNumber),wireupVideoSession(e),"undefined"!=typeof web_hook_on_invite&&web_hook_on_invite(e.SipSession)}else Alert(lang.alert_no_microphone)}function ComposeEmail(e,t,i){i.stopPropagation(),SelectBuddy(e);var n=FindBuddyByIdentity(e);$("#roundcubeFrame").remove(),$("#rightContent").show(),$(".streamSelected").each((function(){$(this).css("display","none")})),$("#rightContent").append('<iframe id="roundcubeFrame" name="displayFrame"></iframe>');var a="",o="",l="",s="",r="";if($.ajax({async:!1,global:!1,type:"POST",url:"get-email-info.php",dataType:"JSON",data:{username:userName,s_ajax_call:validateSToken},success:function(e){a=e.rcdomain,o=encodeURIComponent(e.rcbasicauthuser),l=encodeURIComponent(e.rcbasicauthpass),s=e.rcuser,r=e.rcpassword},error:function(e){alert("An error occurred while trying to retrieve data from the database!")}}),""!=o&&""!=l)var d="https://"+o+":"+l+"@"+a+"/",c="https://"+o+":"+l+"@"+a+"/?_task=mail&_action=compose&_to="+encodeURIComponent(n.Email);else d="https://"+a+"/",c="https://"+a+"/?_task=mail&_action=compose&_to="+encodeURIComponent(n.Email);var u='<form id="rcForm" method="POST" action="'+d+'" target="displayFrame">';u+='<input type="hidden" name="_action" value="login" />',u+='<input type="hidden" name="_task" value="login" />',u+='<input type="hidden" name="_autologin" value="1" />',u+='<input name="_user" value="'+s+'" type="text" />',u+='<input name="_pass" value="'+r+'" type="password" />',u+='<input id="submitButton" type="submit" value="Login" />',u+="</form>",$("#roundcubeFrame").append(u),0==RCLoginCheck?($("#submitButton").click(),RCLoginCheck=1,""!=o&&""!=l?confirm('You are about to log in to the site "'+a+'" with the username "'+o+'".')&&$("#roundcubeFrame").attr("src",c):setTimeout((function(){$("#roundcubeFrame").attr("src",c)}),1e3)):$("#roundcubeFrame").attr("src",c)}function AudioCallMenu(e,t){if($(window).width()-event.pageX>54)var i=event.pageX-222;else i=event.pageX-276;if($(window).height()-event.pageY>140)var n=event.pageY+27;else n=event.pageY-80;var a=FindBuddyByIdentity(e);if("extension"==a.type){var o="<div id=quickCallMenu>";o+='<table id=quickCallTable cellspacing=10 cellpadding=0 style="margin-left:auto; margin-right: auto">',o+='<tr class=quickNumDialRow><td><i class="fa fa-phone-square"></i></td><td>'+lang.call_extension+"</td><td><span class=quickNumToDial>"+a.ExtNo+"</span></td></tr>",null!=a.MobileNumber&&""!=a.MobileNumber&&(o+='<tr class=quickNumDialRow><td><i class="fa fa-mobile"></i></td><td>'+lang.call_mobile+"</td><td><span class=quickNumToDial>"+a.MobileNumber+"</span></td></tr>"),null!=a.ContactNumber1&&""!=a.ContactNumber1&&(o+='<tr class=quickNumDialRow><td><i class="fa fa-phone"></i></td><td>'+lang.call_number+"</td><td><span class=quickNumToDial>"+a.ContactNumber1+"</span></td></tr>"),null!=a.ContactNumber2&&""!=a.ContactNumber2&&(o+='<tr class=quickNumDialRow><td><i class="fa fa-phone"></i></td><td>'+lang.call_number+"</td><td><span class=quickNumToDial>"+a.ContactNumber2+"</span></td></tr>"),o+="</table>",o+="</div>";var l="Menu click AudioCall("+e+", "}else if("contact"==a.type){o="<div id=quickCallMenu>";o+='<table id=quickCallTable cellspacing=10 cellpadding=0 style="margin-left:auto; margin-right: auto">',null!=a.MobileNumber&&""!=a.MobileNumber&&(o+='<tr class=quickNumDialRow><td><i class="fa fa-mobile"></i></td><td>'+lang.call_mobile+"</td><td><span class=quickNumToDial>"+a.MobileNumber+"</span></td></tr>"),null!=a.ContactNumber1&&""!=a.ContactNumber1&&(o+='<tr class=quickNumDialRow><td><i class="fa fa-phone"></i></td><td>'+lang.call_number+"</td><td><span class=quickNumToDial>"+a.ContactNumber1+"</span></td></tr>"),null!=a.ContactNumber2&&""!=a.ContactNumber2&&(o+='<tr class=quickNumDialRow><td><i class="fa fa-phone"></i></td><td>'+lang.call_number+"</td><td><span class=quickNumToDial>"+a.ContactNumber2+"</span></td></tr>"),o+="</table>",o+="</div>";l="Menu click AudioCall("+e+", "}else if("group"==a.type){o="<div id=quickCallMenu>";o+='<table id=quickCallTable cellspacing=10 cellpadding=0 style="margin-left:auto; margin-right: auto">',o+='<tr class=quickNumDialRow><td><i class="fa fa-users"></i></td><td>'+lang.call_group+"</td><td><span class=quickNumToDial>"+a.ExtNo+"</span></td></tr>",o+="</table>",o+="</div>";l="Menu click AudioCallGroup("+e+", "}$.jeegoopopup.open({html:o,width:"auto",height:"auto",left:i,top:n,scrolling:"no",skinClass:"jg_popup_basic",overlay:!0,opacity:0,draggable:!1,resizable:!1,fadeIn:0}),$("#quickCallTable").on("click",".quickNumDialRow",(function(){var t=$(this).closest("tr").find("span.quickNumToDial").html();console.log(l+t+")"),DialByLine("audio",e,t)})),$("#jg_popup_overlay").click((function(){$.jeegoopopup.close()})),$(window).on("keydown",(function(e){"Escape"==e.key&&$.jeegoopopup.close()}))}function AudioCall(e,t){if(null!=userAgent&&0!=userAgent.isRegistered()&&null!=e)if(0!=HasAudioDevice){var i=navigator.mediaDevices.getSupportedConstraints(),n={sessionDescriptionHandlerOptions:{constraints:{audio:{deviceId:"default"},video:!1}}},a=getAudioSrcID();if("default"!=a){for(var o=!1,l=0;l<AudioinputDevices.length;++l)if(a==AudioinputDevices[l].deviceId){o=!0;break}o?n.sessionDescriptionHandlerOptions.constraints.audio.deviceId={exact:a}:(console.warn("The audio device you used before is no longer available, default settings applied."),localDB.setItem("AudioSrcId","default"))}i.autoGainControl&&(n.sessionDescriptionHandlerOptions.constraints.audio.autoGainControl=AutoGainControl),i.echoCancellation&&(n.sessionDescriptionHandlerOptions.constraints.audio.echoCancellation=EchoCancellation),i.noiseSuppression&&(n.sessionDescriptionHandlerOptions.constraints.audio.noiseSuppression=NoiseSuppression),$("#line-"+e.LineNumber+"-msg").html(lang.starting_audio_call),$("#line-"+e.LineNumber+"-timer").show(),console.log("INVITE (audio): "+t+"@"+wssServer),e.SipSession=userAgent.invite("sip:"+t+"@"+wssServer,n);var s=moment.utc();e.SipSession.data.line=e.LineNumber,e.SipSession.data.buddyId=e.BuddyObj.identity,e.SipSession.data.calldirection="outbound",e.SipSession.data.dst=t,e.SipSession.data.callstart=s.format("YYYY-MM-DD HH:mm:ss UTC"),e.SipSession.data.callTimer=window.setInterval((function(){var t=moment.utc(),i=moment.duration(t.diff(s));$("#line-"+e.LineNumber+"-timer").html(formatShortDuration(i.asSeconds()))}),1e3),e.SipSession.data.VideoSourceDevice=null,e.SipSession.data.AudioSourceDevice=getAudioSrcID(),e.SipSession.data.AudioOutputDevice=getAudioOutputID(),e.SipSession.data.terminateby="them",e.SipSession.data.withvideo=!1,updateLineScroll(e.LineNumber),wireupAudioSession(e),"undefined"!=typeof web_hook_on_invite&&web_hook_on_invite(e.SipSession)}else Alert(lang.alert_no_microphone)}function getSession(e){if(null!=userAgent){if(0!=userAgent.isRegistered()){var t=null;return $.each(userAgent.sessions,(function(i,n){if(n.data.buddyId==e)return t=n,!1})),t}console.warn("userAgent is not registered")}else console.warn("userAgent is null")}function countSessions(e){var t=0;return null==userAgent?(console.warn("userAgent is null"),0):($.each(userAgent.sessions,(function(i,n){e!=n.id&&t++})),t)}function StartRecording(e){if("disabled"!=CallRecordingPolicy){var t=FindLineByNumber(e);if(null!=t){$("#line-"+t.LineNumber+"-btn-start-recording").hide(),$("#line-"+t.LineNumber+"-btn-stop-recording").show();var i=t.SipSession;if(null!=i){var n=uID();if(i.data.recordings||(i.data.recordings=[]),i.data.recordings.push({uID:n,startTime:utcDateNow(),stopTime:utcDateNow()}),i.data.mediaRecorder)"inactive"==i.data.mediaRecorder.state?(i.data.mediaRecorder.data={},i.data.mediaRecorder.data.id=""+n,i.data.mediaRecorder.data.sessionId=""+i.id,i.data.mediaRecorder.data.buddyId=""+t.BuddyObj.identity,console.log("Starting Call Recording",n),i.data.mediaRecorder.start(),i.data.recordings[i.data.recordings.length-1].startTime=utcDateNow(),$("#line-"+t.LineNumber+"-msg").html(lang.call_recording_started),updateLineScroll(e)):console.warn("Recorder is in an unknown state");else{console.log("Creating call recorder...");var a=new MediaStream,o=i.sessionDescriptionHandler.peerConnection;if(o.getSenders().forEach((function(e){e.track&&"audio"==e.track.kind&&(console.log("Adding sender audio track to record:",e.track.label),a.addTrack(e.track))})),o.getReceivers().forEach((function(e){e.track&&"audio"==e.track.kind&&(console.log("Adding receiver audio track to record:",e.track.label),a.addTrack(e.track)),i.data.withvideo&&e.track&&"video"==e.track.kind&&(console.log("Adding receiver video track to record:",e.track.label),a.addTrack(e.track))})),i.data.withvideo){var l=640,s=360,r=100;"HD"==RecordingVideoSize&&(l=1280,s=720,r=144),"FHD"==RecordingVideoSize&&(l=1920,s=1080,r=240);var d=$("#line-"+t.LineNumber+"-localVideo").get(0),c=$("#line-"+t.LineNumber+"-remoteVideo").get(0);"us-pnp"==RecordingLayout&&(d=$("#line-"+t.LineNumber+"-remoteVideo").get(0),c=$("#line-"+t.LineNumber+"-localVideo").get(0));var u=$("<canvas/>").get(0);u.width="side-by-side"==RecordingLayout?2*l+5:l,u.height=s;var p=u.getContext("2d");window.clearInterval(i.data.recordingRedrawInterval),i.data.recordingRedrawInterval=window.setInterval((function(){var e=c.videoWidth>0?c.videoWidth:l,t=c.videoHeight>0?c.videoHeight:s;if(e>=t){var i=l/e;if(e=l,(t*=i)>s){i=s/t;t=s,e*=i}}else{i=s/t;t=s,e*=i}var n=e<l?(l-e)/2:0,a=t<s?(s-t)/2:0;"side-by-side"==RecordingLayout&&(n=l+5+n);var o=d.videoHeight,g=d.videoWidth;if(o>0)if(g>=o){i=r/o;o=r,g*=i}else{i=r/g;g=r,o*=i}var m=10,f=10;if("side-by-side"==RecordingLayout){if((g=d.videoWidth)>=(o=d.videoHeight)){i=l/g;if(g=l,(o*=i)>s){i=s/o;o=s,g*=i}}else{i=s/o;o=s,g*=i}m=g<l?(l-g)/2:0,f=o<s?(s-o)/2:0}p.fillRect(0,0,u.width,u.height),c.videoHeight>0&&p.drawImage(c,n,a,e,t),d.videoHeight>0&&("side-by-side"==RecordingLayout||"us-pnp"==RecordingLayout||"them-pnp"==RecordingLayout)&&p.drawImage(d,m,f,g,o)}),Math.floor(1e3/RecordingVideoFps));var g=u.captureStream(RecordingVideoFps)}var m=new MediaStream;m.addTrack(MixAudioStreams(a).getAudioTracks()[0]),i.data.withvideo&&m.addTrack(g.getVideoTracks()[0]);var f="audio/webm";i.data.withvideo&&(f="video/webm");var v=new MediaRecorder(m,{mimeType:f});v.data={},v.data.id=""+n,v.data.sessionId=""+i.id,v.data.buddyId=""+t.BuddyObj.identity,v.ondataavailable=function(e){console.log("Got Call Recording Data: ",e.data.size+"Bytes",this.data.id,this.data.buddyId,this.data.sessionId),SaveCallRecording(e.data,this.data.id,this.data.buddyId,this.data.sessionId)},console.log("Starting Call Recording",n),i.data.mediaRecorder=v,i.data.mediaRecorder.start(),i.data.recordings[i.data.recordings.length-1].startTime=utcDateNow(),$("#line-"+t.LineNumber+"-msg").html(lang.call_recording_started),updateLineScroll(e)}}else console.warn("Could not find session")}}else console.warn("Policy Disabled: Call Recording")}function SaveCallRecording(e,t,i,n){var a=window.indexedDB.open("CallRecordings");a.onerror=function(e){console.error("IndexDB Request Error:",e)},a.onupgradeneeded=function(e){console.warn("Upgrade Required for IndexDB... probably because of first time use.");var t=e.target.result;if(0==t.objectStoreNames.contains("Recordings")){var i=t.createObjectStore("Recordings",{keyPath:"uID"});i.createIndex("sessionid","sessionid",{unique:!1}),i.createIndex("bytes","bytes",{unique:!1}),i.createIndex("type","type",{unique:!1}),i.createIndex("mediaBlob","mediaBlob",{unique:!1})}else console.warn("IndexDB requested upgrade, but object store was in place")},a.onsuccess=function(a){console.log("IndexDB connected to CallRecordings");var o=a.target.result;if(0!=o.objectStoreNames.contains("Recordings")){o.onerror=function(e){console.error("IndexDB Error:",e)};var l={uID:t,sessionid:n,bytes:e.size,type:e.type,mediaBlob:e};o.transaction(["Recordings"],"readwrite").objectStore("Recordings").add(l).onsuccess=function(a){console.log("Call Recording Sucess: ",t,e.size,e.type,i,n)}}else console.warn("IndexDB CallRecordings.Recordings does not exists")}}function StopRecording(e,t){var i=FindLineByNumber(e);if(null!=i&&null!=i.SipSession){var n=i.SipSession;if(1==t)return $("#line-"+i.LineNumber+"-btn-start-recording").show(),$("#line-"+i.LineNumber+"-btn-stop-recording").hide(),void(n.data.mediaRecorder&&("recording"==n.data.mediaRecorder.state?(console.log("Stopping Call Recording"),n.data.mediaRecorder.stop(),n.data.recordings[n.data.recordings.length-1].stopTime=utcDateNow(),window.clearInterval(n.data.recordingRedrawInterval),$("#line-"+i.LineNumber+"-msg").html(lang.call_recording_stopped),updateLineScroll(e)):console.warn("Recorder is in an unknow state")));"enabled"==CallRecordingPolicy&&console.log("Policy Enabled: Call Recording"),Confirm(lang.confirm_stop_recording,lang.stop_recording,(function(){$("#line-"+i.LineNumber+"-btn-start-recording").show(),$("#line-"+i.LineNumber+"-btn-stop-recording").hide(),n.data.mediaRecorder&&("recording"==n.data.mediaRecorder.state?(console.log("Stopping Call Recording"),n.data.mediaRecorder.stop(),n.data.recordings[n.data.recordings.length-1].stopTime=utcDateNow(),window.clearInterval(n.data.recordingRedrawInterval),$("#line-"+i.LineNumber+"-msg").html(lang.call_recording_stopped),updateLineScroll(e)):console.warn("Recorder is in an unknow state"))}))}}function PlayAudioCallRecording(e,t,i){var n=$(e).parent();n.empty();var a=new Audio;a.autoplay=!1,a.controls=!0;var o=getAudioOutputID();void 0!==a.sinkId?a.setSinkId(o).then((function(){console.log("sinkId applied: "+o)})).catch((function(e){console.warn("Error using setSinkId: ",e)})):console.warn("setSinkId() is not possible using this browser."),n.append(a);var l=window.indexedDB.open("CallRecordings");l.onerror=function(e){console.error("IndexDB Request Error:",e)},l.onupgradeneeded=function(e){console.warn("Upgrade Required for IndexDB... probably because of first time use.")},l.onsuccess=function(e){console.log("IndexDB connected to CallRecordings");var n=e.target.result;if(0!=n.objectStoreNames.contains("Recordings")){var o=n.transaction(["Recordings"]).objectStore("Recordings").get(i);o.onerror=function(e){console.error("IndexDB Get Error:",e)},o.onsuccess=function(e){$("#cdr-media-meta-size-"+t+"-"+i).html(" Size: "+formatBytes(e.target.result.bytes)),$("#cdr-media-meta-codec-"+t+"-"+i).html(" Codec: "+e.target.result.type),a.src=window.URL.createObjectURL(e.target.result.mediaBlob),a.oncanplaythrough=function(){a.play().then((function(){console.log("Playback started")})).catch((function(e){console.error("Error playing back file: ",e)}))}}}else console.warn("IndexDB CallRecordings.Recordings does not exists")}}function PlayVideoCallRecording(e,t,i,n){var a=$(e).parent();a.empty();var o=$("<video>").get(0);o.id="callrecording-video-"+t,o.autoplay=!1,o.controls=!0,o.ontimeupdate=function(e){$("#cdr-video-meta-width-"+t+"-"+i).html(lang.width+" : "+e.target.videoWidth+"px"),$("#cdr-video-meta-height-"+t+"-"+i).html(lang.height+" : "+e.target.videoHeight+"px")};var l=getAudioOutputID();void 0!==o.sinkId?o.setSinkId(l).then((function(){console.log("sinkId applied: "+l)})).catch((function(e){console.warn("Error using setSinkId: ",e)})):console.warn("setSinkId() is not possible using this browser."),a.append(o);var s=window.indexedDB.open("CallRecordings");s.onerror=function(e){console.error("IndexDB Request Error:",e)},s.onupgradeneeded=function(e){console.warn("Upgrade Required for IndexDB... probably because of first time use.")},s.onsuccess=function(e){console.log("IndexDB connected to CallRecordings");var a=e.target.result;if(0!=a.objectStoreNames.contains("Recordings")){var l=a.transaction(["Recordings"]).objectStore("Recordings").get(i);l.onerror=function(e){console.error("IndexDB Get Error:",e)},l.onsuccess=function(e){$("#cdr-media-meta-size-"+t+"-"+i).html(" Size: "+formatBytes(e.target.result.bytes)),$("#cdr-media-meta-codec-"+t+"-"+i).html(" Codec: "+e.target.result.type),o.src=window.URL.createObjectURL(e.target.result.mediaBlob),o.oncanplaythrough=function(){try{o.scrollIntoViewIfNeeded(!1)}catch(e){}o.play().then((function(){console.log("Playback started")})).catch((function(e){console.error("Error playing back file: ",e)})),n&&window.setTimeout((function(){var e=$("<canvas>").get(0),a=o.videoWidth,l=o.videoHeight;if(a>l){if(l>225){var s=225/l;l=225,a*=s}}else if(l>225){s=225/a;a=225,l*=s}e.width=a,e.height=l,e.getContext("2d").drawImage(o,0,0,a,l),e.toBlob((function(e){var o=new FileReader;o.readAsDataURL(e),o.onloadend=function(){var e={width:a,height:l,posterBase64:o.result};console.log("Capturing Video Poster...");var s=JSON.parse(localDB.getItem(n+"-stream"));null==s&&null==s.DataCollection||($.each(s.DataCollection,(function(n,a){if("CDR"==a.ItemType&&a.CdrId==t)return a.Recordings&&a.Recordings.length>=1&&$.each(a.Recordings,(function(t,n){n.uID==i&&(n.Poster=e)})),!1})),localDB.setItem(n+"-stream",JSON.stringify(s)),console.log("Capturing Video Poster, Done"))}}),"image/jpeg",PosterJpegQuality)}),1e3)}}}else console.warn("IndexDB CallRecordings.Recordings does not exists")}}function MixAudioStreams(e){var t=null;try{window.AudioContext=window.AudioContext||window.webkitAudioContext,t=new AudioContext}catch(t){return console.warn("AudioContext() not available, cannot record"),e}var i=t.createMediaStreamDestination();return e.getAudioTracks().forEach((function(e){var n=new MediaStream;n.addTrack(e),t.createMediaStreamSource(n).connect(i)})),i.stream}function QuickFindBuddy(e){$.jeegoopopup.close();var t=e.offsetWidth+178,i=e.offsetHeight+68;$(window).width()<1467&&(i=e.offsetHeight+164,$(window).width()<918&&(t=e.offsetWidth-140,$(window).width()<690&&(t=e.offsetWidth-70,i=e.offsetHeight+164)));var n=e.value;if(""!=n){console.log("Find Buddy: ",n),Buddies.sort((function(e,t){return e.CallerIDName<t.CallerIDName?-1:e.CallerIDName>t.CallerIDName?1:0}));var a=0,o='<div id="quickSearchBuddy">';o+='<table id="quickSearchBdTable" cellspacing=10 cellpadding=0 style="margin-left:auto; margin-right: auto">';for(var l=0;l<Buddies.length;l++){var s=Buddies[l],r=!1;if(s.CallerIDName.toLowerCase().indexOf(n.toLowerCase())>-1&&(r=!0),s.ExtNo.toLowerCase().indexOf(n.toLowerCase())>-1&&(r=!0),s.Desc.toLowerCase().indexOf(n.toLowerCase())>-1&&(r=!0),s.MobileNumber.toLowerCase().indexOf(n.toLowerCase())>-1&&(r=!0),s.ContactNumber1.toLowerCase().indexOf(n.toLowerCase())>-1&&(r=!0),s.ContactNumber2.toLowerCase().indexOf(n.toLowerCase())>-1&&(r=!0),r){var d="#404040";"Unknown"!=s.presence&&"Not online"!=s.presence&&"Unavailable"!=s.presence||(d="#666666"),"Ready"==s.presence&&(d="#3fbd3f"),"On the phone"!=s.presence&&"Ringing"!=s.presence&&"On hold"!=s.presence||(d="#c99606"),o+='<tr class="quickFindBdTagRow"><td></td><td><b>'+s.CallerIDName+"</b></td><td></td></tr>",""!=s.ExtNo&&(o+='<tr class="quickFindBdRow"><td><i class="fa fa-phone-square" style="color:'+d+'"></i></td><td>'+lang.extension+" ("+s.presence+')</td><td><span class="quickNumFound">'+s.ExtNo+"</span></td></tr>"),""!=s.MobileNumber&&(o+='<tr class="quickFindBdRow"><td><i class="fa fa-mobile"></i></td><td>'+lang.mobile+'</td><td><span class="quickNumFound">'+s.MobileNumber+"</span></td></tr>"),""!=s.ContactNumber1&&(o+='<tr class="quickFindBdRow"><td><i class="fa fa-phone"></i></td><td>'+lang.contact_number_1+'</td><td><span class="quickNumFound">'+s.ContactNumber1+"</span></td></tr>"),""!=s.ContactNumber2&&(o+='<tr class="quickFindBdRow"><td><i class="fa fa-phone"></i></td><td>'+lang.contact_number_2+'</td><td><span class="quickNumFound">'+s.ContactNumber2+"</span></td></tr>"),a++}if(a>=5)break}(o+="</table></div>").length>1&&($.jeegoopopup.open({html:o,width:"auto",height:"auto",left:t,top:i,scrolling:"no",skinClass:"jg_popup_basic",overlay:!0,opacity:0,draggable:!1,resizable:!1,fadeIn:0}),$("#jg_popup_inner").focus(),$("#jg_popup_inner #jg_popup_content #quickSearchBuddy #quickSearchBdTable").on("click",".quickFindBdRow",(function(){var e=$(this).closest("tr").find("span.quickNumFound").html();$.jeegoopopup.close(),$(document).find("input[id*='-txt-FindTransferBuddy']").focus(),$(document).find("input[id*='-txt-FindTransferBuddy']").val(e)})),$("#jg_popup_overlay").click((function(){$.jeegoopopup.close()})),$(window).on("keydown",(function(e){"Escape"==e.key&&$.jeegoopopup.close()})))}}function StartTransferSession(e){$("#line-"+e+"-btn-Transfer").hide(),$("#line-"+e+"-btn-CancelTransfer").show(),holdSession(e),$("#line-"+e+"-txt-FindTransferBuddy").val(""),$("#line-"+e+"-txt-FindTransferBuddy").parent().show(),$("#line-"+e+"-btn-blind-transfer").show(),$("#line-"+e+"-btn-attended-transfer").show(),$("#line-"+e+"-btn-complete-transfer").hide(),$("#line-"+e+"-btn-cancel-transfer").hide(),$("#line-"+e+"-transfer-status").hide(),$("#line-"+e+"-Transfer").show(),updateLineScroll(e)}function CancelTransferSession(e){var t=FindLineByNumber(e);if(null!=t&&null!=t.SipSession){var i=t.SipSession;if(i.data.childsession){console.log("Child Transfer call detected:",i.data.childsession.status);try{i.data.childsession.status==SIP.Session.C.STATUS_CONFIRMED?i.data.childsession.bye():i.data.childsession.cancel()}catch(e){}}$("#line-"+e+"-btn-Transfer").show(),$("#line-"+e+"-btn-CancelTransfer").hide(),unholdSession(e),$("#line-"+e+"-Transfer").hide(),updateLineScroll(e)}else console.warn("Null line or session")}function BlindTransfer(e){var t=$("#line-"+e+"-txt-FindTransferBuddy").val().replace(/[^0-9\*\#\+]/g,"");if(""!=t){var i=FindLineByNumber(e);if(null!=i&&null!=i.SipSession){var n=i.SipSession;n.data.transfer||(n.data.transfer=[]),n.data.transfer.push({type:"Blind",to:t,transferTime:utcDateNow(),disposition:"refer",dispositionTime:utcDateNow(),accept:{complete:null,eventTime:null,disposition:""}});var a=n.data.transfer.length-1,o={receiveResponse:function(t){console.log("Blind transfer response: ",t.reason_phrase),n.data.terminateby="refer",n.data.transfer[a].accept.disposition=t.reason_phrase,n.data.transfer[a].accept.eventTime=utcDateNow(),$("#line-"+e+"-msg").html("Call Blind Transfered (Accepted)"),updateLineScroll(e)}};console.log("REFER: ",t+"@"+wssServer),n.refer("sip:"+t+"@"+wssServer,o),$("#line-"+e+"-msg").html(lang.call_blind_transfered),updateLineScroll(e)}else console.warn("Null line or session")}else console.warn("Cannot transfer, must be [0-9*+#]")}function AttendedTransfer(e){var t=$("#line-"+e+"-txt-FindTransferBuddy").val().replace(/[^0-9\*\#\+]/g,"");if(""!=t){var i=FindLineByNumber(e);if(null!=i&&null!=i.SipSession){var n=i.SipSession;$.jeegoopopup.close(),$("#line-"+e+"-txt-FindTransferBuddy").parent().hide(),$("#line-"+e+"-btn-blind-transfer").hide(),$("#line-"+e+"-btn-attended-transfer").hide(),$("#line-"+e+"-btn-complete-attended-transfer").hide(),$("#line-"+e+"-btn-cancel-attended-transfer").hide(),$("#line-"+e+"-btn-terminate-attended-transfer").hide();var a=$("#line-"+e+"-transfer-status");a.html(lang.connecting),a.show(),n.data.transfer||(n.data.transfer=[]),n.data.transfer.push({type:"Attended",to:t,transferTime:utcDateNow(),disposition:"invite",dispositionTime:utcDateNow(),accept:{complete:null,eventTime:null,disposition:""}});var o=n.data.transfer.length-1;updateLineScroll(e);var l=navigator.mediaDevices.getSupportedConstraints(),s={sessionDescriptionHandlerOptions:{constraints:{audio:{deviceId:"default"},video:!1}}};"default"!=n.data.AudioSourceDevice&&(s.sessionDescriptionHandlerOptions.constraints.audio.deviceId={exact:n.data.AudioSourceDevice}),l.autoGainControl&&(s.sessionDescriptionHandlerOptions.constraints.audio.autoGainControl=AutoGainControl),l.echoCancellation&&(s.sessionDescriptionHandlerOptions.constraints.audio.echoCancellation=EchoCancellation),l.noiseSuppression&&(s.sessionDescriptionHandlerOptions.constraints.audio.noiseSuppression=NoiseSuppression),n.data.withvideo&&(s.sessionDescriptionHandlerOptions.constraints.video=!0,"default"!=n.data.VideoSourceDevice&&(s.sessionDescriptionHandlerOptions.constraints.video.deviceId={exact:n.data.VideoSourceDevice}),l.frameRate&&""!=maxFrameRate&&(s.sessionDescriptionHandlerOptions.constraints.video.frameRate=maxFrameRate),l.height&&""!=videoHeight&&(s.sessionDescriptionHandlerOptions.constraints.video.height=videoHeight),l.aspectRatio&&""!=videoAspectRatio&&(s.sessionDescriptionHandlerOptions.constraints.video.aspectRatio=videoAspectRatio)),console.log("INVITE: ","sip:"+t+"@"+wssServer);var r=userAgent.invite("sip:"+t+"@"+wssServer,s);n.data.childsession=r,r.on("progress",(function(t){a.html(lang.ringing),n.data.transfer[o].disposition="progress",n.data.transfer[o].dispositionTime=utcDateNow(),$("#line-"+e+"-msg").html(lang.attended_transfer_call_started);var i=$("#line-"+e+"-btn-cancel-attended-transfer");i.off("click"),i.on("click",(function(){r.cancel(),a.html(lang.call_cancelled),console.log("New call session canceled"),n.data.transfer[o].accept.complete=!1,n.data.transfer[o].accept.disposition="cancel",n.data.transfer[o].accept.eventTime=utcDateNow(),$("#line-"+e+"-msg").html(lang.attended_transfer_call_cancelled),updateLineScroll(e)})),i.show(),updateLineScroll(e)})),r.on("accepted",(function(t){a.html(lang.call_in_progress),$("#line-"+e+"-btn-cancel-attended-transfer").hide(),n.data.transfer[o].disposition="accepted",n.data.transfer[o].dispositionTime=utcDateNow();var i=$("#line-"+e+"-btn-complete-attended-transfer");i.off("click"),i.on("click",(function(){var t={receiveResponse:function(t){console.log("Attended transfer response: ",t.reason_phrase),n.data.terminateby="refer",n.data.transfer[o].accept.disposition=t.reason_phrase,n.data.transfer[o].accept.eventTime=utcDateNow(),$("#line-"+e+"-msg").html(lang.attended_transfer_complete_accepted),updateLineScroll(e)}};n.refer(r,t),a.html(lang.attended_transfer_complete),console.log("Attended transfer complete"),n.data.transfer[o].accept.complete=!0,n.data.transfer[o].accept.disposition="refer",n.data.transfer[o].accept.eventTime=utcDateNow(),$("#line-"+e+"-msg").html(lang.attended_transfer_complete),updateLineScroll(e)})),i.show(),updateLineScroll(e);var l=$("#line-"+e+"-btn-terminate-attended-transfer");l.off("click"),l.on("click",(function(){r.bye(),a.html(lang.call_ended),console.log("New call session end"),n.data.transfer[o].accept.complete=!1,n.data.transfer[o].accept.disposition="bye",n.data.transfer[o].accept.eventTime=utcDateNow(),$("#line-"+e+"-msg").html(lang.attended_transfer_call_ended),updateLineScroll(e)})),l.show(),updateLineScroll(e)})),r.on("trackAdded",(function(){var t=r.sessionDescriptionHandler.peerConnection,i=new MediaStream;t.getReceivers().forEach((function(e){e.track&&"audio"==e.track.kind&&i.addTrack(e.track)}));var a=$("#line-"+e+"-transfer-remoteAudio").get(0);a.srcObject=i,a.onloadedmetadata=function(e){void 0!==a.sinkId&&a.setSinkId(n.data.AudioOutputDevice).then((function(){console.log("sinkId applied: "+n.data.AudioOutputDevice)})).catch((function(e){console.warn("Error using setSinkId: ",e)})),a.play()}})),r.on("rejected",(function(t,i){console.log("New call session rejected: ",i),a.html(lang.call_rejected),n.data.transfer[o].disposition="rejected",n.data.transfer[o].dispositionTime=utcDateNow(),$("#line-"+e+"-txt-FindTransferBuddy").parent().show(),$("#line-"+e+"-btn-blind-transfer").show(),$("#line-"+e+"-btn-attended-transfer").show(),$("#line-"+e+"-btn-complete-attended-transfer").hide(),$("#line-"+e+"-btn-cancel-attended-transfer").hide(),$("#line-"+e+"-btn-terminate-attended-transfer").hide(),$("#line-"+e+"-msg").html(lang.attended_transfer_call_rejected),updateLineScroll(e),window.setTimeout((function(){a.hide(),updateLineScroll(e)}),1e3)})),r.on("terminated",(function(t,i){console.log("New call session terminated: ",i),a.html(lang.call_ended),n.data.transfer[o].disposition="terminated",n.data.transfer[o].dispositionTime=utcDateNow(),$("#line-"+e+"-txt-FindTransferBuddy").parent().show(),$("#line-"+e+"-btn-blind-transfer").show(),$("#line-"+e+"-btn-attended-transfer").show(),$("#line-"+e+"-btn-complete-attended-transfer").hide(),$("#line-"+e+"-btn-cancel-attended-transfer").hide(),$("#line-"+e+"-btn-terminate-attended-transfer").hide(),$("#line-"+e+"-msg").html(lang.attended_transfer_call_terminated),updateLineScroll(e),window.setTimeout((function(){a.hide(),updateLineScroll(e)}),1e3)}))}else console.warn("Null line or session")}else console.warn("Cannot transfer, must be [0-9*+#]")}function StartConferenceCall(e){$("#line-"+e+"-btn-Conference").hide(),$("#line-"+e+"-btn-CancelConference").show(),holdSession(e),$("#line-"+e+"-txt-FindConferenceBuddy").val(""),$("#line-"+e+"-txt-FindConferenceBuddy").parent().show(),$("#line-"+e+"-btn-conference-dial").show(),$("#line-"+e+"-btn-cancel-conference-dial").hide(),$("#line-"+e+"-btn-join-conference-call").hide(),$("#line-"+e+"-btn-terminate-conference-call").hide(),$("#line-"+e+"-conference-status").hide(),$("#line-"+e+"-Conference").show(),updateLineScroll(e)}function CancelConference(e){var t=FindLineByNumber(e);if(null!=t&&null!=t.SipSession){var i=t.SipSession;if(i.data.childsession)try{i.data.childsession.status==SIP.Session.C.STATUS_CONFIRMED?i.data.childsession.bye():i.data.childsession.cancel()}catch(e){}$("#line-"+e+"-btn-Conference").show(),$("#line-"+e+"-btn-CancelConference").hide(),unholdSession(e),$("#line-"+e+"-Conference").hide(),updateLineScroll(e)}else console.warn("Null line or session")}function ConferenceDial(t){var i=$("#line-"+t+"-txt-FindConferenceBuddy").val().replace(/[^0-9\*\#\+]/g,"");if(""!=i){var n=FindLineByNumber(t);if(null!=n&&null!=n.SipSession){var a=n.SipSession;$.jeegoopopup.close(),$("#line-"+t+"-txt-FindConferenceBuddy").parent().hide(),$("#line-"+t+"-btn-conference-dial").hide(),$("#line-"+t+"-btn-cancel-conference-dial"),$("#line-"+t+"-btn-join-conference-call").hide(),$("#line-"+t+"-btn-terminate-conference-call").hide();var o=$("#line-"+t+"-conference-status");o.html(lang.connecting),o.show(),a.data.confcalls||(a.data.confcalls=[]),a.data.confcalls.push({to:i,startTime:utcDateNow(),disposition:"invite",dispositionTime:utcDateNow(),accept:{complete:null,eventTime:null,disposition:""}});var l=a.data.confcalls.length-1;updateLineScroll(t);var s=navigator.mediaDevices.getSupportedConstraints(),r={sessionDescriptionHandlerOptions:{constraints:{audio:{deviceId:"default"},video:!1}}};"default"!=a.data.AudioSourceDevice&&(r.sessionDescriptionHandlerOptions.constraints.audio.deviceId={exact:a.data.AudioSourceDevice}),s.autoGainControl&&(r.sessionDescriptionHandlerOptions.constraints.audio.autoGainControl=AutoGainControl),s.echoCancellation&&(r.sessionDescriptionHandlerOptions.constraints.audio.echoCancellation=EchoCancellation),s.noiseSuppression&&(r.sessionDescriptionHandlerOptions.constraints.audio.noiseSuppression=NoiseSuppression),a.data.withvideo&&(r.sessionDescriptionHandlerOptions.constraints.video=!0,"default"!=a.data.VideoSourceDevice&&(r.sessionDescriptionHandlerOptions.constraints.video.deviceId={exact:a.data.VideoSourceDevice}),s.frameRate&&""!=maxFrameRate&&(r.sessionDescriptionHandlerOptions.constraints.video.frameRate=maxFrameRate),s.height&&""!=videoHeight&&(r.sessionDescriptionHandlerOptions.constraints.video.height=videoHeight),s.aspectRatio&&""!=videoAspectRatio&&(r.sessionDescriptionHandlerOptions.constraints.video.aspectRatio=videoAspectRatio)),console.log("INVITE: ","sip:"+i+"@"+wssServer);var d=userAgent.invite("sip:"+i+"@"+wssServer,r);a.data.childsession=d,d.on("progress",(function(e){o.html(lang.ringing),a.data.confcalls[l].disposition="progress",a.data.confcalls[l].dispositionTime=utcDateNow(),$("#line-"+t+"-msg").html(lang.conference_call_started);var i=$("#line-"+t+"-btn-cancel-conference-dial");i.off("click"),i.on("click",(function(){d.cancel(),o.html(lang.call_cancelled),console.log("New call session canceled"),a.data.confcalls[l].accept.complete=!1,a.data.confcalls[l].accept.disposition="cancel",a.data.confcalls[l].accept.eventTime=utcDateNow(),$("#line-"+t+"-msg").html(lang.canference_call_cancelled),updateLineScroll(t)})),i.show(),updateLineScroll(t)})),d.on("accepted",(function(e){o.html(lang.call_in_progress),$("#line-"+t+"-btn-cancel-conference-dial").hide(),a.data.confcalls[l].complete=!0,a.data.confcalls[l].disposition="accepted",a.data.confcalls[l].dispositionTime=utcDateNow();var i=$("#line-"+t+"-btn-join-conference-call");i.off("click"),i.on("click",(function(){if(a.data.childsession){var e=new MediaStream,n=new MediaStream,s=a.sessionDescriptionHandler.peerConnection,r=a.data.childsession.sessionDescriptionHandler.peerConnection;r.getReceivers().forEach((function(t){t.track&&"audio"==t.track.kind&&(console.log("Adding conference session:",t.track.label),e.addTrack(t.track))})),s.getReceivers().forEach((function(e){e.track&&"audio"==e.track.kind&&(console.log("Adding conference session:",e.track.label),n.addTrack(e.track))})),s.getSenders().forEach((function(t){if(t.track&&"audio"==t.track.kind){console.log("Switching to mixed Audio track on session"),a.data.AudioSourceTrack=t.track,e.addTrack(t.track);var i=MixAudioStreams(e).getAudioTracks()[0];i.IsMixedTrack=!0,t.replaceTrack(i)}})),r.getSenders().forEach((function(e){if(e.track&&"audio"==e.track.kind){console.log("Switching to mixed Audio track on conf call"),a.data.childsession.data.AudioSourceTrack=e.track,n.addTrack(e.track);var t=MixAudioStreams(n).getAudioTracks()[0];t.IsMixedTrack=!0,e.replaceTrack(t)}})),o.html(lang.call_in_progress),console.log("Conference Call In Progress"),a.data.confcalls[l].accept.complete=!0,a.data.confcalls[l].accept.disposition="join",a.data.confcalls[l].accept.eventTime=utcDateNow(),$("#line-"+t+"-btn-terminate-conference-call").show(),$("#line-"+t+"-msg").html(lang.conference_call_in_progress),unholdSession(t),i.hide(),updateLineScroll(t)}else console.warn("Conference session lost")})),i.show(),updateLineScroll(t);var n=$("#line-"+t+"-btn-terminate-conference-call");n.off("click"),n.on("click",(function(){d.bye(),o.html(lang.call_ended),console.log("New call session end"),a.data.confcalls[l].accept.disposition="bye",a.data.confcalls[l].accept.eventTime=utcDateNow(),$("#line-"+t+"-msg").html(lang.conference_call_ended),updateLineScroll(t)})),n.show(),updateLineScroll(t)})),d.on("trackAdded",(function(){var e=d.sessionDescriptionHandler.peerConnection,i=new MediaStream;e.getReceivers().forEach((function(e){e.track&&"audio"==e.track.kind&&i.addTrack(e.track)}));var n=$("#line-"+t+"-conference-remoteAudio").get(0);n.srcObject=i,n.onloadedmetadata=function(e){void 0!==n.sinkId&&n.setSinkId(a.data.AudioOutputDevice).then((function(){console.log("sinkId applied: "+a.data.AudioOutputDevice)})).catch((function(e){console.warn("Error using setSinkId: ",e)})),n.play()}})),d.on("rejected",(function(e,i){console.log("New call session rejected: ",i),o.html(lang.call_rejected),a.data.confcalls[l].disposition="rejected",a.data.confcalls[l].dispositionTime=utcDateNow(),$("#line-"+t+"-txt-FindConferenceBuddy").parent().show(),$("#line-"+t+"-btn-conference-dial").show(),$("#line-"+t+"-btn-cancel-conference-dial").hide(),$("#line-"+t+"-btn-join-conference-call").hide(),$("#line-"+t+"-btn-terminate-conference-call").hide(),$("#line-"+t+"-msg").html(lang.conference_call_rejected),updateLineScroll(t),window.setTimeout((function(){o.hide(),updateLineScroll(t)}),1e3)})),d.on("terminated",(function(i,n){(console.log("New call session terminated: ",n),o.html(lang.call_ended),a.data.confcalls[l].disposition="terminated",a.data.confcalls[l].dispositionTime=utcDateNow(),a.data.childsession.data.AudioSourceTrack&&"audio"==a.data.childsession.data.AudioSourceTrack.kind&&a.data.childsession.data.AudioSourceTrack.stop(),a.data.AudioSourceTrack&&"audio"==a.data.AudioSourceTrack.kind)&&a.sessionDescriptionHandler.peerConnection.getSenders().forEach((function(t){t.track&&"audio"==t.track.kind&&(t.replaceTrack(a.data.AudioSourceTrack).then((function(){a.data.ismute&&(t.track.enabled=!1)})).catch((function(){console.error(e)})),a.data.AudioSourceTrack=null)}));$("#line-"+t+"-txt-FindConferenceBuddy").parent().show(),$("#line-"+t+"-btn-conference-dial").show(),$("#line-"+t+"-btn-cancel-conference-dial").hide(),$("#line-"+t+"-btn-join-conference-call").hide(),$("#line-"+t+"-btn-terminate-conference-call").hide(),$("#line-"+t+"-msg").html(lang.conference_call_terminated),updateLineScroll(t),window.setTimeout((function(){o.hide(),updateLineScroll(t)}),1e3)}))}else console.warn("Null line or session")}else console.warn("Cannot transfer, must be [0-9*+#]")}function cancelSession(e){var t=FindLineByNumber(e);null!=t&&null!=t.SipSession&&(t.SipSession.data.terminateby="us",console.log("Cancelling session : "+e),t.SipSession.cancel(),$("#line-"+e+"-msg").html(lang.call_cancelled))}function holdSession(e){var t=FindLineByNumber(e);null!=t&&null!=t.SipSession&&(console.log("Putting Call on hold: "+e),0==t.SipSession.local_hold&&t.SipSession.hold(),t.SipSession.data.hold||(t.SipSession.data.hold=[]),t.SipSession.data.hold.push({event:"hold",eventTime:utcDateNow()}),$("#line-"+e+"-btn-Hold").hide(),$("#line-"+e+"-btn-Unhold").show(),$("#line-"+e+"-msg").html(lang.call_on_hold),updateLineScroll(e))}function unholdSession(e){var t=FindLineByNumber(e);null!=t&&null!=t.SipSession&&(console.log("Taking call off hold: "+e),1==t.SipSession.local_hold&&t.SipSession.unhold(),t.SipSession.data.hold||(t.SipSession.data.hold=[]),t.SipSession.data.hold.push({event:"unhold",eventTime:utcDateNow()}),$("#line-"+e+"-msg").html(lang.call_in_progress),$("#line-"+e+"-btn-Hold").show(),$("#line-"+e+"-btn-Unhold").hide(),updateLineScroll(e))}function endSession(e){var t=FindLineByNumber(e);null!=t&&null!=t.SipSession&&(console.log("Ending call with: "+e),t.SipSession.data.terminateby="us",t.SipSession.bye(),$("#line-"+e+"-msg").html(lang.call_ended),$("#line-"+e+"-ActiveCall").hide(),updateLineScroll(e))}function sendDTMF(e,t){var i=FindLineByNumber(e);null!=i&&null!=i.SipSession&&(console.log("Sending DTMF ("+t+"): "+e),i.SipSession.dtmf(t),$("#line-"+e+"-msg").html(lang.send_dtmf+": "+t),updateLineScroll(e),"undefined"!=typeof web_hook_on_dtmf&&web_hook_on_dtmf(t,i.SipSession))}function switchVideoSource(t,i){var n=FindLineByNumber(t);if(null!=n&&null!=n.SipSession){var a=n.SipSession;$("#line-"+t+"-msg").html(lang.switching_video_source);var o=navigator.mediaDevices.getSupportedConstraints(),l={audio:!1,video:{deviceId:"default"}};"default"!=i&&(l.video.deviceId={exact:i}),o.frameRate&&""!=maxFrameRate&&(l.video.frameRate=maxFrameRate),o.height&&""!=videoHeight&&(l.video.height=videoHeight),o.aspectRatio&&""!=videoAspectRatio&&(l.video.aspectRatio=videoAspectRatio),a.data.VideoSourceDevice=i;var s=a.sessionDescriptionHandler.peerConnection,r=new MediaStream;navigator.mediaDevices.getUserMedia(l).then((function(e){var t=e.getVideoTracks()[0];s.getSenders().forEach((function(e){e.track&&"video"==e.track.kind&&(console.log("Switching Video Track : "+e.track.label+" to "+t.label),e.track.stop(),e.replaceTrack(t),r.addTrack(t))}))})).catch((function(e){console.error("Error on getUserMedia",e,l)})),a.data.AudioSourceTrack&&"audio"==a.data.AudioSourceTrack.kind&&s.getSenders().forEach((function(t){t.track&&"audio"==t.track.kind&&(t.replaceTrack(a.data.AudioSourceTrack).then((function(){a.data.ismute&&(t.track.enabled=!1)})).catch((function(){console.error(e)})),a.data.AudioSourceTrack=null)})),console.log("Showing as preview...");var d=$("#line-"+t+"-localVideo").get(0);d.srcObject=r,d.onloadedmetadata=function(e){d.play()}}else console.warn("Line or Session is Null")}function SendCanvas(t){var i=FindLineByNumber(t);if(null!=i&&null!=i.SipSession){var n=i.SipSession;$("#line-"+t+"-msg").html(lang.switching_to_canvas),RemoveScratchpad(t);var a=$("<canvas/>");a.prop("id","line-"+t+"-scratchpad"),$("#line-"+t+"-scratchpad-container").append(a),$("#line-"+t+"-scratchpad").css("display","inline-block"),$("#line-"+t+"-scratchpad").css("width","640px"),$("#line-"+t+"-scratchpad").css("height","360px"),$("#line-"+t+"-scratchpad").prop("width",640),$("#line-"+t+"-scratchpad").prop("height",360),$("#line-"+t+"-scratchpad-container").show(),console.log("Canvas for Scratchpad created..."),scratchpad=new fabric.Canvas("line-"+t+"-scratchpad"),scratchpad.id="line-"+t+"-scratchpad",scratchpad.backgroundColor="#FFFFFF",scratchpad.isDrawingMode=!0,scratchpad.renderAll(),scratchpad.redrawIntrtval=window.setInterval((function(){scratchpad.renderAll()}),1e3),CanvasCollection.push(scratchpad);var o=$("#line-"+t+"-scratchpad").get(0).captureStream(25),l=o.getVideoTracks()[0],s=n.sessionDescriptionHandler.peerConnection;s.getSenders().forEach((function(e){e.track&&"video"==e.track.kind&&(console.log("Switching Track : "+e.track.label+" to Scratchpad Canvas"),e.track.stop(),e.replaceTrack(l))})),n.data.AudioSourceTrack&&"audio"==n.data.AudioSourceTrack.kind&&s.getSenders().forEach((function(t){t.track&&"audio"==t.track.kind&&(t.replaceTrack(n.data.AudioSourceTrack).then((function(){n.data.ismute&&(t.track.enabled=!1)})).catch((function(){console.error(e)})),n.data.AudioSourceTrack=null)})),console.log("Showing as preview...");var r=$("#line-"+t+"-localVideo").get(0);r.srcObject=o,r.onloadedmetadata=function(e){r.play()}}else console.warn("Line or Session is Null")}function SendVideo(e,t){var i=FindLineByNumber(e);if(null!=i&&null!=i.SipSession){var n=i.SipSession;$("#line-"+e+"-src-camera").prop("disabled",!1),$("#line-"+e+"-src-canvas").prop("disabled",!1),$("#line-"+e+"-src-desktop").prop("disabled",!1),$("#line-"+e+"-src-video").prop("disabled",!0),$("#line-"+e+"-src-blank").prop("disabled",!1),$("#line-"+e+"-msg").html(lang.switching_to_shared_video),$("#line-"+e+"-scratchpad-container").hide(),RemoveScratchpad(e),$("#line-"+e+"-sharevideo").hide(),$("#line-"+e+"-sharevideo").get(0).pause(),$("#line-"+e+"-sharevideo").get(0).removeAttribute("src"),$("#line-"+e+"-sharevideo").get(0).load(),$("#line-"+e+"-localVideo").hide(),$("#line-"+e+"-remoteVideo").appendTo("#line-"+e+"-preview-container");var a=$("#line-"+e+"-sharevideo");a.prop("src",t),a.off("loadedmetadata"),a.on("loadedmetadata",(function(){console.log("Video can play now... ");var t=360;"HD"==VideoResampleSize&&(t=720),"FHD"==VideoResampleSize&&(t=1080);var i=a.get(0),o=$("<canvas/>").get(0),l=i.videoWidth,s=i.videoHeight;if(l>=s){if(s>t){var r=t/s;s=t,l*=r}}else if(l>t){r=t/l;l=t,s*=r}o.width=l,o.height=s;var d=o.getContext("2d");window.clearInterval(n.data.videoResampleInterval),n.data.videoResampleInterval=window.setInterval((function(){d.drawImage(i,0,0,l,s)}),40);var c=null;"captureStream"in i?c=i.captureStream():"mozCaptureStream"in i?c=i.mozCaptureStream():console.warn("Cannot capture stream from video, this will result in no audio being transmitted.");var u=o.captureStream(25).getVideoTracks()[0],p=null!=c?c.getAudioTracks()[0]:null;n.sessionDescriptionHandler.peerConnection.getSenders().forEach((function(e){if(e.track&&"video"==e.track.kind&&(console.log("Switching Track : "+e.track.label),e.track.stop(),e.replaceTrack(u)),e.track&&"audio"==e.track.kind){console.log("Switching to mixed Audio track on session"),n.data.AudioSourceTrack=e.track;var t=new MediaStream;p&&t.addTrack(p),t.addTrack(e.track);var i=MixAudioStreams(t).getAudioTracks()[0];i.IsMixedTrack=!0,e.replaceTrack(i)}})),console.log("Showing as preview...");var g=$("#line-"+e+"-localVideo").get(0);g.srcObject=c,g.onloadedmetadata=function(e){g.play().then((function(){console.log("Playing Preview Video File")})).catch((function(e){console.error("Cannot play back video",e)}))},console.log("Starting Video..."),$("#line-"+e+"-sharevideo").get(0).play()})),$("#line-"+e+"-sharevideo").show(),console.log("Video for Sharing created...")}else console.warn("Line or Session is Null")}function ShareScreen(t){var i=FindLineByNumber(t);if(null!=i&&null!=i.SipSession){var n=i.SipSession;$("#line-"+t+"-msg").html(lang.switching_to_shared_screeen);var a=new MediaStream,o=n.sessionDescriptionHandler.peerConnection;if(navigator.getDisplayMedia){var l={video:!0,audio:!1};navigator.getDisplayMedia(l).then((function(e){console.log("navigator.getDisplayMedia");var i=e.getVideoTracks()[0];o.getSenders().forEach((function(e){e.track&&"video"==e.track.kind&&(console.log("Switching Video Track : "+e.track.label+" to Screen"),e.track.stop(),e.replaceTrack(i),a.addTrack(i))})),console.log("Showing as preview...");var n=$("#line-"+t+"-localVideo").get(0);n.srcObject=a,n.onloadedmetadata=function(e){n.play()}})).catch((function(e){console.error("Error on getUserMedia")}))}else if(navigator.mediaDevices.getDisplayMedia){l={video:!0,audio:!1};navigator.mediaDevices.getDisplayMedia(l).then((function(e){console.log("navigator.mediaDevices.getDisplayMedia");var i=e.getVideoTracks()[0];o.getSenders().forEach((function(e){e.track&&"video"==e.track.kind&&(console.log("Switching Video Track : "+e.track.label+" to Screen"),e.track.stop(),e.replaceTrack(i),a.addTrack(i))})),console.log("Showing as preview...");var n=$("#line-"+t+"-localVideo").get(0);n.srcObject=a,n.onloadedmetadata=function(e){n.play()}})).catch((function(e){console.error("Error on getUserMedia")}))}else{l={video:{mediaSource:"screen"},audio:!1};navigator.mediaDevices.getUserMedia(l).then((function(e){console.log("navigator.mediaDevices.getUserMedia");var i=e.getVideoTracks()[0];o.getSenders().forEach((function(e){e.track&&"video"==e.track.kind&&(console.log("Switching Video Track : "+e.track.label+" to Screen"),e.track.stop(),e.replaceTrack(i),a.addTrack(i))})),console.log("Showing as preview...");var n=$("#line-"+t+"-localVideo").get(0);n.srcObject=a,n.onloadedmetadata=function(e){n.play()}})).catch((function(e){console.error("Error on getUserMedia")}))}n.data.AudioSourceTrack&&"audio"==n.data.AudioSourceTrack.kind&&o.getSenders().forEach((function(t){t.track&&"audio"==t.track.kind&&(t.replaceTrack(n.data.AudioSourceTrack).then((function(){n.data.ismute&&(t.track.enabled=!1)})).catch((function(){console.error(e)})),n.data.AudioSourceTrack=null)}))}else console.warn("Line or Session is Null")}function DisableVideoStream(t){var i=FindLineByNumber(t);if(null!=i&&null!=i.SipSession){var n=i.SipSession;n.sessionDescriptionHandler.peerConnection.getSenders().forEach((function(t){t.track&&"video"==t.track.kind&&(console.log("Disable Video Track : "+t.track.label),t.track.enabled=!1),t.track&&"audio"==t.track.kind&&n.data.AudioSourceTrack&&"audio"==n.data.AudioSourceTrack.kind&&(t.replaceTrack(n.data.AudioSourceTrack).then((function(){n.data.ismute&&(t.track.enabled=!1)})).catch((function(){console.error(e)})),n.data.AudioSourceTrack=null)})),console.log("Showing as preview...");var a=$("#line-"+t+"-localVideo").get(0);a.pause(),a.removeAttribute("src"),a.load(),$("#line-"+t+"-msg").html(lang.video_disabled)}else console.warn("Line or Session is Null")}var Line=function(e,t,i,n){this.LineNumber=e,this.DisplayName=t,this.DisplayNumber=i,this.IsSelected=!1,this.BuddyObj=n,this.SipSession=null,this.LocalSoundMeter=null,this.RemoteSoundMeter=null};function ShowDial(e){var t=e.offsetWidth+104,i=0,n=e.offsetHeight+117;$(window).width()<=915&&(t=event.pageX+e.offsetWidth-120,i=0,n=event.pageY+e.offsetHeight-11);var a='<div id=mainDialPad><div><input id=dialText class=dialTextInput oninput="handleDialInput(this, event)" onkeydown="dialOnkeydown(event, this)"></div>';a+='<table cellspacing=10 cellpadding=0 style="margin-left:auto; margin-right: auto">',a+="<tr><td><button class=dtmfButtons onclick=\"KeyPress('1');new Audio('sounds/dtmf.mp3').play();\"><div>1</div><span>&nbsp;</span></button></td>",a+="<td><button class=dtmfButtons onclick=\"KeyPress('2');new Audio('sounds/dtmf.mp3').play();\"><div>2</div><span>ABC</span></button></td>",a+="<td><button class=dtmfButtons onclick=\"KeyPress('3');new Audio('sounds/dtmf.mp3').play();\"><div>3</div><span>DEF</span></button></td></tr>",a+="<tr><td><button class=dtmfButtons onclick=\"KeyPress('4');new Audio('sounds/dtmf.mp3').play();\"><div>4</div><span>GHI</span></button></td>",a+="<td><button class=dtmfButtons onclick=\"KeyPress('5');new Audio('sounds/dtmf.mp3').play();\"><div>5</div><span>JKL</span></button></td>",a+="<td><button class=dtmfButtons onclick=\"KeyPress('6');new Audio('sounds/dtmf.mp3').play();\"><div>6</div><span>MNO</span></button></td></tr>",a+="<tr><td><button class=dtmfButtons onclick=\"KeyPress('7');new Audio('sounds/dtmf.mp3').play();\"><div>7</div><span>PQRS</span></button></td>",a+="<td><button class=dtmfButtons onclick=\"KeyPress('8');new Audio('sounds/dtmf.mp3').play();\"><div>8</div><span>TUV</span></button></td>",a+="<td><button class=dtmfButtons onclick=\"KeyPress('9');new Audio('sounds/dtmf.mp3').play();\"><div>9</div><span>WXYZ</span></button></td></tr>",a+="<tr><td><button class=dtmfButtons onclick=\"KeyPress('*');new Audio('sounds/dtmf.mp3').play();\">*</button></td>",a+="<td><button class=dtmfButtons onclick=\"KeyPress('0');new Audio('sounds/dtmf.mp3').play();\">0</button></td>",a+="<td><button class=dtmfButtons onclick=\"KeyPress('#');new Audio('sounds/dtmf.mp3').play();\">#</button></td></tr>",a+="</table>",a+='<div style="text-align: center;">',a+='<button class="roundButtons dialButtons" id=dialAudio style="width:48px; height:48px;" title="'+lang.audio_call+'" onclick="DialByLine(\'audio\')"><i class="fa fa-phone"></i></button>',EnableVideoCalling&&(a+='<button class="roundButtons dialButtons" id=dialVideo style="width:48px; height:48px; margin-left:20px" title="'+lang.video_call+'" onclick="DialByLine(\'video\')"><i class="fa fa-video-camera"></i></button>'),a+="</div></div>",$.jeegoopopup.open({html:a,width:"auto",height:"auto",left:t,right:i,top:n,scrolling:"no",skinClass:"jg_popup_basic",overlay:!0,opacity:0,draggable:!0,resizable:!1,fadeIn:0}),$("#dialText").focus(),$(window).width()<=915?$.jeegoopopup.right(6):$.jeegoopopup.width("auto").height("auto").left(t).top(n),$("#jg_popup_overlay").click((function(){$("#jg_popup_b").empty(),$("#jg_popup_l").empty(),$("#windowCtrls").empty(),$.jeegoopopup.close()})),$(window).on("keydown",(function(e){"Escape"==e.key&&($("#jg_popup_b").empty(),$("#jg_popup_l").empty(),$("#windowCtrls").empty(),$.jeegoopopup.close())}))}function handleDialInput(e,t){EnableAlphanumericDial?$("#dialText").val($("#dialText").val().replace(/[^\da-zA-Z\*\#\+]/g,"").substring(0,MaxDidLength)):$("#dialText").val($("#dialText").val().replace(/[^\d\*\#\+]/g,"").substring(0,MaxDidLength)),$("#dialVideo").prop("disabled",$("#dialText").val().length>=DidLength)}function dialOnkeydown(e,t,i){if("13"==(e.keyCode?e.keyCode:e.which))return e.preventDefault(),DialByLine("audio"),$("#jg_popup_b").empty(),$("#jg_popup_l").empty(),$("#windowCtrls").empty(),$.jeegoopopup.close(),!1}function KeyPress(e){$("#dialText").val(($("#dialText").val()+e).substring(0,MaxDidLength)),$("#dialVideo").prop("disabled",$("#dialText").val().length>=DidLength)}function DialByLine(e,t,i,n){if($.jeegoopopup.close(),null!=userAgent&&0!=userAgent.isRegistered()){var a=i||$("#dialText").val();if(0!=(a=EnableAlphanumericDial?a.replace(/[^\da-zA-Z\*\#\+]/g,"").substring(0,MaxDidLength):a.replace(/[^\d\*\#\+]/g,"").substring(0,MaxDidLength)).length){var o=t?FindBuddyByIdentity(t):FindBuddyByDid(a);if(null==o){var l=a.length>DidLength?"contact":"extension";"*"!=l.substring(0,1)&&"#"!=l.substring(0,1)||(l="contact"),o=MakeBuddy(l,!0,!1,!0,n||a,a)}newLineNumber+=1,lineObj=new Line(newLineNumber,o.CallerIDName,a,o),Lines.push(lineObj),AddLineHtml(lineObj),SelectLine(newLineNumber),UpdateBuddyList(),"audio"==e?AudioCall(lineObj,a):VideoCall(lineObj,a);try{$("#line-"+newLineNumber).get(0).scrollIntoViewIfNeeded()}catch(e){}}else console.warn("Enter number to dial")}else ConfigureExtensionWindow()}function SelectLine(e){$("#roundcubeFrame").remove();var t=FindLineByNumber(e);if(null!=t){for(var i=0,n=0;n<Lines.length;n++)if(Lines[n].LineNumber==t.LineNumber&&(i=n+1),1==Lines[n].IsSelected&&Lines[n].LineNumber==t.LineNumber)return;console.log("Selecting Line : "+t.LineNumber),$(".streamSelected").each((function(){$(this).prop("class","stream")})),$("#line-ui-"+t.LineNumber).prop("class","streamSelected"),$("#line-ui-"+t.LineNumber+"-DisplayLineNo").html('<i class="fa fa-phone"></i> '+lang.line+" "+i),$("#line-ui-"+t.LineNumber+"-LineIcon").html(i),SwitchLines(t.LineNumber);for(n=0;n<Lines.length;n++){var a=Lines[n].LineNumber==t.LineNumber?"buddySelected":"buddy";null!=Lines[n].SipSession&&(a=Lines[n].SipSession.local_hold?"buddyActiveCallHollding":"buddyActiveCall"),$("#line-"+Lines[n].LineNumber).prop("class",a),Lines[n].IsSelected=Lines[n].LineNumber==t.LineNumber}for(var o=0;o<Buddies.length;o++)$("#contact-"+Buddies[o].identity).prop("class","buddy"),Buddies[o].IsSelected=!1;UpdateUI()}}function FindLineByNumber(e){for(var t=0;t<Lines.length;t++)if(Lines[t].LineNumber==e)return Lines[t];return null}function AddLineHtml(e){var t='<table id="line-ui-'+e.LineNumber+'" class="stream" cellspacing="5" cellpadding="0">';t+="<tr><td class=streamSection>",t+='<div style="float:left; margin:0px; padding:5px; height:38px; line-height:38px">',t+='<button id="line-'+e.LineNumber+'-btn-back" onclick="CloseLine(\''+e.LineNumber+'\')" class=roundButtons title="'+lang.back+'"><i class="fa fa-chevron-left"></i></button> ',t+="</div>",t+='<div class=contact style="float: left;">',t+='<div id="line-ui-'+e.LineNumber+'-LineIcon" class=lineIcon>'+e.LineNumber+"</div>",t+='<div id="line-ui-'+e.LineNumber+'-DisplayLineNo" class=contactNameText><i class="fa fa-phone"></i> '+lang.line+" "+e.LineNumber+"</div>",t+="<div class=presenceText>"+e.DisplayName+" <"+e.DisplayNumber+"></div>",t+="</div>",t+='<div style="float:right; line-height: 46px;">',t+="</div>",t+='<div style="clear:both; height:0px"></div>',t+='<div id="line-'+e.LineNumber+'-calling">',t+='<div id="line-'+e.LineNumber+'-timer" style="float: right; margin-top: 4px; margin-right: 10px; color: #575757; display:none;"></div>',t+='<div id="line-'+e.LineNumber+'-msg" class=callStatus style="display:none">...</div>',t+='<div id="line-'+e.LineNumber+'-progress" style="display:none; margin-top: 10px">',t+="<div class=progressCall>",t+="<button onclick=\"cancelSession('"+e.LineNumber+'\')" class=hangupButton><i class="fa fa-phone"></i>&nbsp;&nbsp;'+lang.cancel+"</button>",t+="</div>",t+="</div>",t+='<div id="line-'+e.LineNumber+'-ActiveCall" style="display:none; margin-top: 10px;">',t+='<div id="line-'+e.LineNumber+'-conference" style="display:none;"></div>',"extension"==e.BuddyObj.type&&(t+='<div id="line-'+e.LineNumber+'-VideoCall" class=videoCall style="display:none;">',t+='<div style="height:35px; line-height:35px; text-align: right">'+lang.present+": ",t+='<div class=pill-nav style="border-color:#333333">',t+='<button id="line-'+e.LineNumber+'-src-camera" onclick="PresentCamera(\''+e.LineNumber+'\')" title="'+lang.camera+'" disabled><i class="fa fa-video-camera"></i></button>',t+='<button id="line-'+e.LineNumber+'-src-canvas" onclick="PresentScratchpad(\''+e.LineNumber+'\')" title="'+lang.scratchpad+'"><i class="fa fa-pencil-square"></i></button>',t+='<button id="line-'+e.LineNumber+'-src-desktop" onclick="PresentScreen(\''+e.LineNumber+'\')" title="'+lang.screen+'"><i class="fa fa-desktop"></i></button>',t+='<button id="line-'+e.LineNumber+'-src-video" onclick="PresentVideo(\''+e.LineNumber+'\')" title="'+lang.video+'"><i class="fa fa-file-video-o"></i></button>',t+='<button id="line-'+e.LineNumber+'-src-blank" onclick="PresentBlank(\''+e.LineNumber+'\')" title="'+lang.blank+'"><i class="fa fa-ban"></i></button>',t+="</div>",t+='&nbsp;<button id="line-'+e.LineNumber+'-expand" onclick="ExpandVideoArea(\''+e.LineNumber+'\')"><i class="fa fa-expand"></i></button>',t+='<button id="line-'+e.LineNumber+'-restore" onclick="RestoreVideoArea(\''+e.LineNumber+'\')" style="display:none"><i class="fa fa-compress"></i></button>',t+="</div>",t+='<div id="line-'+e.LineNumber+'-preview-container" class=PreviewContainer>',t+='<video id="line-'+e.LineNumber+'-localVideo" muted></video>',t+="</div>",t+='<div id="line-'+e.LineNumber+'-stage-container" class=StageContainer>',t+='<video id="line-'+e.LineNumber+'-remoteVideo" muted></video>',t+='<div id="line-'+e.LineNumber+'-scratchpad-container" style="display:none"></div>',t+='<video id="line-'+e.LineNumber+'-sharevideo" controls muted style="display:none; object-fit: contain;"></video>',t+="</div>",t+="</div>"),t+='<div id="line-'+e.LineNumber+'-AudioCall" style="display:none;">',t+='<audio id="line-'+e.LineNumber+'-remoteAudio"></audio>',t+="</div>",t+='<div style="text-align:center">',t+='<div style="margin-top:10px">',t+='<button id="line-'+e.LineNumber+'-btn-ShowDtmf" onclick="ShowDtmfMenu(this, \''+e.LineNumber+'\')" class="roundButtons inCallButtons" title="'+lang.show_key_pad+'"><i class="fa fa-keyboard-o"></i></button>',t+='<button id="line-'+e.LineNumber+'-btn-Mute" onclick="MuteSession(\''+e.LineNumber+'\')" class="roundButtons inCallButtons" title="'+lang.mute+'"><i class="fa fa-microphone-slash"></i></button>',t+='<button id="line-'+e.LineNumber+'-btn-Unmute" onclick="UnmuteSession(\''+e.LineNumber+'\')" class="roundButtons inCallButtons" title="'+lang.unmute+'" style="color: red; display:none"><i class="fa fa-microphone"></i></button>',"undefined"==typeof MediaRecorder||"allow"!=CallRecordingPolicy&&"enabled"!=CallRecordingPolicy||(t+='<button id="line-'+e.LineNumber+'-btn-start-recording" onclick="StartRecording(\''+e.LineNumber+'\')" class="roundButtons inCallButtons" title="'+lang.start_call_recording+'"><i class="fa fa-dot-circle-o"></i></button>',t+='<button id="line-'+e.LineNumber+'-btn-stop-recording" onclick="StopRecording(\''+e.LineNumber+'\')" class="roundButtons inCallButtons" title="'+lang.stop_call_recording+'" style="color: red; display:none"><i class="fa fa-circle"></i></button>'),EnableTransfer&&(t+='<button id="line-'+e.LineNumber+'-btn-Transfer" onclick="StartTransferSession(\''+e.LineNumber+'\')" class="roundButtons inCallButtons" title="'+lang.transfer_call+'"><i class="fa fa-reply" style="transform: rotateY(180deg)"></i></button>',t+='<button id="line-'+e.LineNumber+'-btn-CancelTransfer" onclick="CancelTransferSession(\''+e.LineNumber+'\')" class="roundButtons inCallButtons" title="'+lang.cancel_transfer+'" style="color: red; display:none"><i class="fa fa-reply" style="transform: rotateY(180deg)"></i></button>'),t+='<button id="line-'+e.LineNumber+'-btn-Hold" onclick="holdSession(\''+e.LineNumber+'\')" class="roundButtons inCallButtons"  title="'+lang.hold_call+'"><i class="fa fa-pause-circle"></i></button>',t+='<button id="line-'+e.LineNumber+'-btn-Unhold" onclick="unholdSession(\''+e.LineNumber+'\')" class="roundButtons inCallButtons" title="'+lang.resume_call+'" style="color: red; display:none"><i class="fa fa-play-circle"></i></button>',t+='<button id="line-'+e.LineNumber+'-btn-End" onclick="endSession(\''+e.LineNumber+'\')" class="roundButtons inCallButtons hangupButton" title="'+lang.end_call+'"><i class="fa fa-phone"></i></button>',t+="</div>",t+='<div id="line-'+e.LineNumber+'-Transfer" style="display:none">',t+='<div style="margin-top:10px">',t+='<span class=searchClean><input id="line-'+e.LineNumber+'-txt-FindTransferBuddy" oninput="QuickFindBuddy(this,\''+e.LineNumber+'\')" type=text autocomplete=none style="width:150px;" autocomplete=none placeholder="'+lang.search_or_enter_number+'"></span>',t+=' <button id="line-'+e.LineNumber+'-btn-blind-transfer" onclick="BlindTransfer(\''+e.LineNumber+'\')"><i class="fa fa-reply" style="transform: rotateY(180deg)"></i> '+lang.blind_transfer+"</button>",t+=' <button id="line-'+e.LineNumber+'-btn-attended-transfer" onclick="AttendedTransfer(\''+e.LineNumber+'\')"><i class="fa fa-reply-all" style="transform: rotateY(180deg)"></i> '+lang.attended_transfer+"</button>",t+=' <button id="line-'+e.LineNumber+'-btn-complete-attended-transfer" style="display:none"><i class="fa fa-reply-all" style="transform: rotateY(180deg)"></i> '+lang.complete_transfer+"</buuton>",t+=' <button id="line-'+e.LineNumber+'-btn-cancel-attended-transfer" style="display:none"><i class="fa fa-phone" style="transform: rotate(135deg);"></i> '+lang.cancel_transfer+"</buuton>",t+=' <button id="line-'+e.LineNumber+'-btn-terminate-attended-transfer" style="display:none"><i class="fa fa-phone" style="transform: rotate(135deg);"></i> '+lang.end_transfer_call+"</buuton>",t+="</div>",t+='<div id="line-'+e.LineNumber+'-transfer-status" class=callStatus style="margin-top:10px; display:none">...</div>',t+='<audio id="line-'+e.LineNumber+'-transfer-remoteAudio" style="display:none"></audio>',t+="</div>",t+='<div id="line-'+e.LineNumber+'-Conference" style="display:none">',t+='<div style="margin-top:10px">',t+='<span class=searchClean><input id="line-'+e.LineNumber+'-txt-FindConferenceBuddy" oninput="QuickFindBuddy(this,\''+e.LineNumber+'\')" type=text autocomplete=none style="width:150px;" autocomplete=none placeholder="'+lang.search_or_enter_number+'"></span>',t+=' <button id="line-'+e.LineNumber+'-btn-conference-dial" onclick="ConferenceDial(\''+e.LineNumber+'\')"><i class="fa fa-phone"></i> '+lang.call+"</button>",t+=' <button id="line-'+e.LineNumber+'-btn-cancel-conference-dial" style="display:none"><i class="fa fa-phone"></i> '+lang.cancel_call+"</buuton>",t+=' <button id="line-'+e.LineNumber+'-btn-join-conference-call" style="display:none"><i class="fa fa-users"></i> '+lang.join_conference_call+"</buuton>",t+=' <button id="line-'+e.LineNumber+'-btn-terminate-conference-call" style="display:none"><i class="fa fa-phone"></i> '+lang.end_conference_call+"</buuton>",t+="</div>",t+='<div id="line-'+e.LineNumber+'-conference-status" class=callStatus style="margin-top:10px; display:none">...</div>',t+='<audio id="line-'+e.LineNumber+'-conference-remoteAudio" style="display:none"></audio>',t+="</div>",t+='<div  id="line-'+e.LineNumber+'-monitoring" style="margin-top:10px;margin-bottom:10px;">',t+='<span style="vertical-align: middle"><i class="fa fa-microphone"></i></span> ',t+='<span class=meterContainer title="'+lang.microphone_levels+'">',t+='<span id="line-'+e.LineNumber+'-Mic" class=meterLevel style="height:0%"></span>',t+="</span> ",t+='<span style="vertical-align: middle"><i class="fa fa-volume-up"></i></span> ',t+='<span class=meterContainer title="'+lang.speaker_levels+'">',t+='<span id="line-'+e.LineNumber+'-Speaker" class=meterLevel style="height:0%"></span>',t+="</span> ",t+='<button id="line-'+e.LineNumber+'-btn-settings" onclick="ChangeSettings(\''+e.LineNumber+'\', this)"><i class="fa fa-cogs"></i> '+lang.device_settings+"</button>",t+='<button id="line-'+e.LineNumber+'-call-stats" onclick="ShowCallStats(\''+e.LineNumber+'\', this)"><i class="fa fa-area-chart"></i> '+lang.call_stats+"</button>",t+="</div>",t+='<div id="line-'+e.LineNumber+'-AudioStats" class="audioStats cleanScroller" style="display:none">',t+='<div style="text-align:right"><button onclick="HideCallStats(\''+e.LineNumber+'\', this)"><i class="fa fa-times" style="font-size:20px;"></i></button></div>',t+="<fieldset class=audioStatsSet onclick=\"HideCallStats('"+e.LineNumber+"', this)\">",t+="<legend>"+lang.send_statistics+"</legend>",t+='<canvas id="line-'+e.LineNumber+'-AudioSendBitRate" class=audioGraph width=600 height=160 style="width:600px; height:160px"></canvas>',t+='<canvas id="line-'+e.LineNumber+'-AudioSendPacketRate" class=audioGraph width=600 height=160 style="width:600px; height:160px"></canvas>',t+="</fieldset>",t+="<fieldset class=audioStatsSet onclick=\"HideCallStats('"+e.LineNumber+"', this)\">",t+="<legend>"+lang.receive_statistics+"</legend>",t+='<canvas id="line-'+e.LineNumber+'-AudioReceiveBitRate" class=audioGraph width=600 height=160 style="width:600px; height:160px"></canvas>',t+='<canvas id="line-'+e.LineNumber+'-AudioReceivePacketRate" class=audioGraph width=600 height=160 style="width:600px; height:160px"></canvas>',t+='<canvas id="line-'+e.LineNumber+'-AudioReceivePacketLoss" class=audioGraph width=600 height=160 style="width:600px; height:160px"></canvas>',t+='<canvas id="line-'+e.LineNumber+'-AudioReceiveJitter" class=audioGraph width=600 height=160 style="width:600px; height:160px"></canvas>',t+='<canvas id="line-'+e.LineNumber+'-AudioReceiveLevels" class=audioGraph width=600 height=160 style="width:600px; height:160px"></canvas>',t+="</fieldset>",t+="</div>",t+="</div>",t+="</div>",t+="</div>",t+="</td></tr>",t+='<tr><td class="streamSection streamSectionBackground">',t+='<div id="line-'+e.LineNumber+'-CallDetails" class="chatHistory cleanScroller">',t+="</div>",t+="</td></tr>",t+="</table>",$("#rightContent").append(t)}function RemoveLine(e){if(null!=e){for(var t=0;t<Lines.length;t++)if(Lines[t].LineNumber==e.LineNumber){Lines.splice(t,1);break}CloseLine(e.LineNumber),$("#line-ui-"+e.LineNumber).remove(),UpdateBuddyList(),null!=localDB.getItem("SelectedBuddy")&&(console.log("Selecting previously selected buddy...",localDB.getItem("SelectedBuddy")),SelectBuddy(localDB.getItem("SelectedBuddy")),UpdateUI())}}function CloseLine(e){$(".buddySelected").each((function(){$(this).prop("class","buddy")})),$(".streamSelected").each((function(){$(this).prop("class","stream")})),SwitchLines(0),console.log("Closing Line: "+e);for(var t=0;t<Lines.length;t++)Lines[t].IsSelected=!1;selectedLine=null;for(var i=0;i<Buddies.length;i++)Buddies[i].IsSelected=!1;selectedBuddy=null,$.jeegoopopup.close(),UpdateUI()}function SwitchLines(e){$.each(userAgent.sessions,(function(t,i){0==i.local_hold&&i.data.line!=e&&(console.log("Putting an active call on hold: Line: "+i.data.line+" buddy: "+i.data.buddyId),i.hold(),i.data.hold||(i.data.hold=[]),i.data.hold.push({event:"hold",eventTime:utcDateNow()})),$("#line-"+i.data.line+"-btn-Hold").hide(),$("#line-"+i.data.line+"-btn-Unhold").show(),i.data.IsCurrentCall=!1}));var t=FindLineByNumber(e);if(null!=t&&null!=t.SipSession){var i=t.SipSession;1==i.local_hold&&(console.log("Taking call off hold:  Line: "+e+" buddy: "+i.data.buddyId),i.unhold(),i.data.hold||(i.data.hold=[]),i.data.hold.push({event:"unhold",eventTime:utcDateNow()})),$("#line-"+e+"-btn-Hold").show(),$("#line-"+e+"-btn-Unhold").hide(),i.data.IsCurrentCall=!0}selectedLine=e,RefreshLineActivity(e)}function RefreshLineActivity(e){var t=FindLineByNumber(e);if(null!=t&&null!=t.SipSession){var i=t.SipSession;$("#line-"+e+"-CallDetails").empty();var n=[],a=0,o=moment.utc(i.data.callstart.replace(" UTC","")),l=null;i.startTime&&(l=moment.utc(i.startTime),a=moment.duration(l.diff(o))),o=o.format("YYYY-MM-DD HH:mm:ss UTC"),l=l?l.format("YYYY-MM-DD HH:mm:ss UTC"):null,a=0!=a?a.asSeconds():0;var s="",r="";"inbound"==i.data.calldirection?s="<"+i.remoteIdentity.uri.user+"> "+i.remoteIdentity.displayName:"outbound"==i.data.calldirection&&(r=i.remoteIdentity.uri.user);var d=i.data.withvideo?"("+lang.with_video+")":"",c="inbound"==i.data.calldirection?lang.you_received_a_call_from+" "+s+" "+d:lang.you_made_a_call_to+" "+r+" "+d;if(n.push({Message:c,TimeStr:o}),l){var u="inbound"==i.data.calldirection?lang.you_answered_after+" "+a+" "+lang.seconds_plural:lang.they_answered_after+" "+a+" "+lang.seconds_plural;n.push({Message:u,TimeStr:l})}var p=i.data.transfer?i.data.transfer:[];$.each(p,(function(e,t){var i="Blind"==t.type?lang.you_started_a_blind_transfer_to+" "+t.to+". ":lang.you_started_an_attended_transfer_to+" "+t.to+". ";t.accept&&1==t.accept.complete?i+=lang.the_call_was_completed:""!=t.accept.disposition&&(i+=lang.the_call_was_not_completed+" ("+t.accept.disposition+")"),n.push({Message:i,TimeStr:t.transferTime})}));var g=i.data.mute?i.data.mute:[];$.each(g,(function(e,t){n.push({Message:"mute"==t.event?lang.you_put_the_call_on_mute:lang.you_took_the_call_off_mute,TimeStr:t.eventTime})}));var m=i.data.hold?i.data.hold:[];$.each(m,(function(e,t){n.push({Message:"hold"==t.event?lang.you_put_the_call_on_hold:lang.you_took_the_call_off_hold,TimeStr:t.eventTime})}));var f=i.data.recordings?i.data.recordings:[];$.each(f,(function(e,t){var i=lang.call_is_being_recorded;t.startTime!=t.stopTime&&(i+="("+lang.now_stopped+")"),n.push({Message:i,TimeStr:t.startTime})}));var v=i.data.confcalls?i.data.confcalls:[];$.each(v,(function(e,t){var i=lang.you_started_a_conference_call_to+" "+t.to+". ";t.accept&&1==t.accept.complete?i+=lang.the_call_was_completed:""!=t.accept.disposition&&(i+=lang.the_call_was_not_completed+" ("+t.accept.disposition+")"),n.push({Message:i,TimeStr:t.startTime})})),n.sort((function(e,t){var i=moment.utc(e.TimeStr.replace(" UTC","")),n=moment.utc(t.TimeStr.replace(" UTC",""));return i.isSameOrAfter(n,"second")?-1:1})),$.each(n,(function(t,i){var n="<table class=timelineMessage cellspacing=0 cellpadding=0><tr>";n+="<td class=timelineMessageArea>",n+='<div class=timelineMessageDate><i class="fa fa-circle timelineMessageDot"></i>'+moment.utc(i.TimeStr.replace(" UTC","")).local().format(DisplayTimeFormat)+"</div>",n+="<div class=timelineMessageText>"+i.Message+"</div>",n+="</td>",n+="</tr></table>",$("#line-"+e+"-CallDetails").prepend(n)}))}}var Buddy=function(e,t,i,n,a,o,l,s,r,d){this.type=e,this.identity=t,this.CallerIDName=i,this.Email=d,this.Desc=r,this.ExtNo=n,this.MobileNumber=a,this.ContactNumber1=o,this.ContactNumber2=l,this.lastActivity=s,this.devState="dotOffline",this.presence="Unknown",this.missed=0,this.IsSelected=!1,this.imageObjectURL=""};function InitUserBuddies(){return localDB.setItem(profileUserID+"-Buddies",JSON.stringify({TotalRows:0,DataCollection:[]})),JSON.parse(localDB.getItem(profileUserID+"-Buddies"))}function MakeBuddy(e,t,i,n,a,o){var l=JSON.parse(localDB.getItem(profileUserID+"-Buddies"));null==l&&(l=InitUserBuddies());var s=null;if("contact"==e){var r=uID(),d=utcDateNow();l.DataCollection.push({Type:"contact",LastActivity:d,ExtensionNumber:"",MobileNumber:"",ContactNumber1:o,ContactNumber2:"",uID:null,cID:r,gID:null,DisplayName:a,Position:"",Description:"",Email:"",MemberCount:0}),AddBuddy(s=new Buddy("contact",r,a,"","",o,"",d,"",""),t,i)}else{r=uID(),d=utcDateNow();l.DataCollection.push({Type:"extension",LastActivity:d,ExtensionNumber:o,MobileNumber:"",ContactNumber1:"",ContactNumber2:"",uID:r,cID:null,gID:null,DisplayName:a,Position:"",Description:"",Email:"",MemberCount:0}),AddBuddy(s=new Buddy("extension",r,a,o,"","","",d,"",""),t,i,n)}return l.TotalRows=l.DataCollection.length,localDB.setItem(profileUserID+"-Buddies",JSON.stringify(l)),s}function UpdateBuddyCalerID(e,t){e.CallerIDName=t;var i=e.identity,n=JSON.parse(localDB.getItem(profileUserID+"-Buddies"));null!=n&&($.each(n.DataCollection,(function(e,n){if(n.uID==i||n.cID==i||n.gID==i)return n.DisplayName=t,!1})),localDB.setItem(profileUserID+"-Buddies",JSON.stringify(n))),UpdateBuddyList()}function AddBuddy(e,t,i,n){Buddies.push(e),1==t&&UpdateBuddyList(),AddBuddyMessageStream(e),1==n&&SubscribeBuddy(e),1==i&&SelectBuddy(e.identity)}function PopulateBuddyList(){console.log("Clearing Buddies..."),Buddies=new Array,console.log("Adding Buddies...");var e=JSON.parse(localDB.getItem(profileUserID+"-Buddies"));null!=e&&(console.log("Total Buddies: "+e.TotalRows),$.each(e.DataCollection,(function(e,t){if("extension"==t.Type)AddBuddy(new Buddy("extension",t.uID,t.DisplayName,t.ExtensionNumber,t.MobileNumber,t.ContactNumber1,t.ContactNumber2,t.LastActivity,t.Position,t.Email),!1,!1);else if("contact"==t.Type){AddBuddy(new Buddy("contact",t.cID,t.DisplayName,"",t.MobileNumber,t.ContactNumber1,t.ContactNumber2,t.LastActivity,t.Description,t.Email),!1,!1)}else if("group"==t.Type){AddBuddy(new Buddy("group",t.gID,t.DisplayName,t.ExtensionNumber,"","","",t.LastActivity,t.MemberCount+" member(s)",t.Email),!1,!1)}})),console.log("Updating Buddy List..."),UpdateBuddyList())}function UpdateBuddyList(){var e=$("#txtFindBuddy").val();$("#myContacts").empty();for(var t=0;t<Lines.length;t++){var i=Lines[t].IsSelected?"buddySelected":"buddy";null!=Lines[t].SipSession&&(i=Lines[t].SipSession.local_hold?"buddyActiveCallHollding":"buddyActiveCall");var n='<div id="line-'+Lines[t].LineNumber+'" class='+i+" onclick=\"SelectLine('"+Lines[t].LineNumber+"')\">";n+="<div class=lineIcon>"+(t+1)+"</div>",n+='<div class=contactNameText><i class="fa fa-phone"></i> '+lang.line+" "+(t+1)+"</div>",n+='<div id="Line-'+Lines[t].ExtNo+'-datetime" class=contactDate>&nbsp;</div>',n+="<div class=presenceText>"+Lines[t].DisplayName+" <"+Lines[t].DisplayNumber+"></div>",n+="</div>",Lines[t].SipSession&&1!=Lines[t].SipSession.data.earlyReject&&($("#myContacts").append(n))}Buddies.sort((function(e,t){var i=moment.utc(e.lastActivity.replace(" UTC","")),n=moment.utc(t.lastActivity.replace(" UTC",""));return i.isSameOrAfter(n,"second")?-1:1}));for(var a=0;a<Buddies.length;a++){var o=Buddies[a];if(e&&e.length>=1){var l=!1;if(o.CallerIDName.toLowerCase().indexOf(e.toLowerCase())>-1&&(l=!0),o.ExtNo.toLowerCase().indexOf(e.toLowerCase())>-1&&(l=!0),o.Desc.toLowerCase().indexOf(e.toLowerCase())>-1&&(l=!0),!l)continue}var s=moment.utc(),r=moment.utc(o.lastActivity.replace(" UTC","")),d="";d=r.isSame(s,"day")?r.local().format(DisplayTimeFormat):r.local().format(DisplayDateFormat);i=o.IsSelected?"buddySelected":"buddy";if("extension"==o.type){var c=o.presence;"Unknown"==c&&(c=lang.state_unknown),"Not online"==c&&(c=lang.state_not_online),"Ready"==c&&(c=lang.state_ready),"On the phone"==c&&(c=lang.state_on_the_phone),"Ringing"==c&&(c=lang.state_ringing),"On hold"==c&&(c=lang.state_on_hold),"Unavailable"==c&&(c=lang.state_unavailable);n='<div id="contact-'+o.identity+'" class='+i+" onmouseenter=\"ShowBuddyDial(this, '"+o.identity+"')\" onmouseleave=\"HideBuddyDial(this, '"+o.identity+"')\" onclick=\"SelectBuddy('"+o.identity+"', 'extension')\">";n+='<span id="contact-'+o.identity+'-devstate" class="'+o.devState+'"></span>',1==getDbItem("useRoundcube","")&&""!=o.Email&&null!=o.Email&&void 0!==o.Email&&(n+='<span id="contact-'+o.identity+'-email" class=quickDial style="right: 66px; display:none" title=\''+lang.send_email+"' onclick=\"ComposeEmail('"+o.identity+'\', this, event)"><i class="fa fa-envelope-o" aria-hidden="true"></i></span>'),EnableVideoCalling?(n+='<span id="contact-'+o.identity+'-audio-dial" class=quickDial style="right: 44px; display:none" title=\''+lang.audio_call+"' onclick=\"QuickDialAudio('"+o.identity+'\', this, event)"><i class="fa fa-phone"></i></span>',n+='<span id="contact-'+o.identity+'-video-dial" class=quickDial style="right: 23px; display:none" title=\''+lang.video_call+"' onclick=\"QuickDialVideo('"+o.identity+"', '"+o.ExtNo+'\', event)"><i class="fa fa-video-camera"></i></span>'):n+='<span id="contact-'+o.identity+'-audio-dial" class=quickDial style="right: 23px; display:none" title=\''+lang.audio_call+"' onclick=\"QuickDialAudio('"+o.identity+'\', this, event)"><i class="fa fa-phone"></i></span>',o.missed&&o.missed>0?n+='<span id="contact-'+o.identity+'-missed" class=missedNotifyer>'+o.missed+"</span>":n+='<span id="contact-'+o.identity+'-missed" class=missedNotifyer style="display:none">'+o.missed+"</span>",n+="<div class=buddyIcon onclick=\"EditBuddyWindow('"+o.identity+"')\" style=\"background-image: url('"+getPicture(o.identity)+'\')" title="Edit Contact"><i class="fa fa-pencil-square-o" aria-hidden="true"></i></div>',n+='<div class=contactNameText><i class="fa fa-phone-square"></i> '+o.ExtNo+" - "+o.CallerIDName+"</div>",n+='<div id="contact-'+o.identity+'-datetime" class=contactDate>'+d+"</div>",n+='<div id="contact-'+o.identity+'-presence" class=presenceText>'+c+"</div>",n+="</div>",$("#myContacts").append(n)}else if("contact"==o.type){n='<div id="contact-'+o.identity+'" class='+i+" onmouseenter=\"ShowBuddyDial(this, '"+o.identity+"')\" onmouseleave=\"HideBuddyDial(this, '"+o.identity+"')\" onclick=\"SelectBuddy('"+o.identity+"', 'contact')\">";1==getDbItem("useRoundcube","")&&""!=o.Email&&null!=o.Email&&void 0!==o.Email&&(n+='<span id="contact-'+o.identity+'-email" class=quickDial style="right: 44px; display:none" title=\''+lang.send_email+"' onclick=\"ComposeEmail('"+o.identity+'\', this, event)"><i class="fa fa-envelope-o" aria-hidden="true"></i></span>'),n+='<span id="contact-'+o.identity+'-audio-dial" class=quickDial style="right: 23px; display:none" title=\''+lang.audio_call+"' onclick=\"QuickDialAudio('"+o.identity+'\', this, event)"><i class="fa fa-phone"></i></span>',o.missed&&o.missed>0?n+='<span id="contact-'+o.identity+'-missed" class=missedNotifyer>'+o.missed+"</span>":n+='<span id="contact-'+o.identity+'-missed" class=missedNotifyer style="display:none">'+o.missed+"</span>",n+="<div class=buddyIcon onclick=\"EditBuddyWindow('"+o.identity+"')\" style=\"background-image: url('"+getPicture(o.identity,"contact")+'\')" title="Edit Contact"><i class="fa fa-pencil-square-o" aria-hidden="true"></i></div>',n+='<div class=contactNameText><i class="fa fa-address-card"></i> '+o.CallerIDName+"</div>",n+='<div id="contact-'+o.identity+'-datetime" class=contactDate>'+d+"</div>",n+="<div class=presenceText>"+o.Desc+"</div>",n+="</div>",$("#myContacts").append(n)}else if("group"==o.type){n='<div id="contact-'+o.identity+'" class='+i+" onmouseenter=\"ShowBuddyDial(this, '"+o.identity+"')\" onmouseleave=\"HideBuddyDial(this, '"+o.identity+"')\" onclick=\"SelectBuddy('"+o.identity+"', 'group')\">";1==getDbItem("useRoundcube","")&&""!=o.Email&&null!=o.Email&&void 0!==o.Email&&(n+='<span id="contact-'+o.identity+'-email" class=quickDial style="right: 44px; display:none" title=\''+lang.send_email+"' onclick=\"ComposeEmail('"+o.identity+'\', this, event)"><i class="fa fa-envelope-o" aria-hidden="true"></i></span>'),n+='<span id="contact-'+o.identity+'-audio-dial" class=quickDial style="right: 23px; display:none" title=\''+lang.audio_call+"' onclick=\"QuickDialAudio('"+o.identity+'\', this, event)"><i class="fa fa-phone"></i></span>',o.missed&&o.missed>0?n+='<span id="contact-'+o.identity+'-missed" class=missedNotifyer>'+o.missed+"</span>":n+='<span id="contact-'+o.identity+'-missed" class=missedNotifyer style="display:none">'+o.missed+"</span>",n+="<div class=buddyIcon onclick=\"EditBuddyWindow('"+o.identity+"')\" style=\"background-image: url('"+getPicture(o.identity,"group")+'\')" title="Edit Contact"><i class="fa fa-pencil-square-o" aria-hidden="true"></i></div>',n+='<div class=contactNameText><i class="fa fa-users"></i> '+o.CallerIDName+"</div>",n+='<div id="contact-'+o.identity+'-datetime" class=contactDate>'+d+"</div>",n+="<div class=presenceText>"+o.Desc+"</div>",n+="</div>",$("#myContacts").append(n)}}}function AddBuddyMessageStream(e){var t='<table id="stream-'+e.identity+'" class=stream cellspacing=5 cellpadding=0>';if(t+='<tr><td class=streamSection style="height: 48px;">',t+='<div style="float:left; margin:8.7px 0px 0px 8.7px; width: 38px; height:38px; line-height:38px;">',t+='<button id="contact-'+e.identity+'-btn-back" onclick="CloseBuddy(\''+e.identity+'\')" class=roundButtons title="'+lang.back+'"><i class="fa fa-chevron-left"></i></button> ',t+="</div>",t+='<div class=contact style="float: left; position: absolute; left: 47px; right: 190px;" onclick="ShowBuddyProfileMenu(\''+e.identity+"', this, '"+e.type+"')\">","extension"==e.type&&(t+='<span id="contact-'+e.identity+'-devstate-main" class="'+e.devState+'"></span>'),"extension"==e.type?t+='<div id="contact-'+e.identity+'-picture-main" class=buddyIcon style="background-image: url(\''+getPicture(e.identity)+"')\"></div>":"contact"==e.type?t+="<div class=buddyIcon style=\"background-image: url('"+getPicture(e.identity,"contact")+"')\"></div>":"group"==e.type&&(t+="<div class=buddyIcon style=\"background-image: url('"+getPicture(e.identity,"group")+"')\"></div>"),"extension"==e.type?t+='<div class=contactNameText style="margin-right: 0px;"><i class="fa fa-phone-square"></i> '+e.ExtNo+" - "+e.CallerIDName+"</div>":"contact"==e.type?t+='<div class=contactNameText style="margin-right: 0px;"><i class="fa fa-address-card"></i> '+e.CallerIDName+"</div>":"group"==e.type&&(t+='<div class=contactNameText style="margin-right: 0px;"><i class="fa fa-users"></i> '+e.CallerIDName+"</div>"),"extension"==e.type){var i=e.presence;"Unknown"==i&&(i=lang.state_unknown),"Not online"==i&&(i=lang.state_not_online),"Ready"==i&&(i=lang.state_ready),"On the phone"==i&&(i=lang.state_on_the_phone),"Ringing"==i&&(i=lang.state_ringing),"On hold"==i&&(i=lang.state_on_hold),"Unavailable"==i&&(i=lang.state_unavailable),t+='<div id="contact-'+e.identity+'-presence-main" class=presenceText>'+i+"</div>"}else t+='<div id="contact-'+e.identity+'-presence-main" class=presenceText>'+e.Desc+"</div>";t+="</div>",t+='<div style="float:right; line-height:46px; margin:3.2px 5px 0px 0px;">',t+='<button id="contact-'+e.identity+'-btn-audioCall" onclick="AudioCallMenu(\''+e.identity+'\', this)" class=roundButtons title="'+lang.audio_call+'"><i class="fa fa-phone"></i></button> ',"extension"==e.type&&EnableVideoCalling&&(t+='<button id="contact-'+e.identity+"-btn-videoCall\" onclick=\"DialByLine('video', '"+e.identity+"', '"+e.ExtNo+'\');" class=roundButtons title="'+lang.video_call+'"><i class="fa fa-video-camera"></i></button> '),t+='<button id="contact-'+e.identity+'-btn-search" onclick="FindSomething(\''+e.identity+'\')" class=roundButtons title="'+lang.find_something+'"><i class="fa fa-search"></i></button> ',"extension"==e.type&&(t+='<button id="contact-'+e.identity+'-btn-download-chat" onclick="DownloadChatText(\''+e.identity+'\')" class=roundButtons title="'+lang.save_chat_text+'"><i class="fa fa-download" aria-hidden="true"></i></button> '),t+='<button id="contact-'+e.identity+'-btn-remove" onclick="RemoveBuddy(\''+e.identity+'\')" class=roundButtons title="'+lang.remove_contact+'"><i class="fa fa-trash"></i></button> ',t+="</div>",t+='<div style="clear:both; height:0px"></div>',t+='<div id="contact-'+e.identity+'-calling">',t+='<div id="contact-'+e.identity+'-timer" style="float: right; margin-top: 4px; margin-right: 10px; color: #575757; display:none;"></div>',t+='<div id="contact-'+e.identity+'-msg" class=callStatus style="display:none">...</div>',t+='<div id="contact-'+e.identity+'-AnswerCall" class=answerCall style="display:none">',t+="<div>",t+="<button onclick=\"AnswerAudioCall('"+e.identity+'\')" class=answerButton><i class="fa fa-phone"></i>&nbsp;&nbsp;'+lang.answer_call+"</button> ","extension"==e.type&&EnableVideoCalling&&(t+='<button id="contact-'+e.identity+'-answer-video" onclick="AnswerVideoCall(\''+e.identity+'\')" class=answerButton><i class="fa fa-video-camera"></i>&nbsp;&nbsp;'+lang.answer_call_with_video+"</button> "),t+="<button onclick=\"RejectCall('"+e.identity+'\')" class=hangupButton><i class="fa fa-phone"></i>&nbsp;&nbsp;'+lang.reject_call+"</button> ",t+="</div>",t+="</div>",t+="</div>",t+='<div id="contact-'+e.identity+'-search" style="margin-top:6px; display:none">',t+='<span class=searchClean style="width:100%; margin-left:9px;"><input type=text style="width:40%;margin-bottom:5px;" autocomplete=none oninput=SearchStream(this,\''+e.identity+"') placeholder=\""+lang.find_something_in_the_message_stream+'"></span>',t+="</div>",t+="</td></tr>",t+='<tr><td class="streamSection streamSectionBackground">',t+='<div id="contact-'+e.identity+'-ChatHistory" class="chatHistory cleanScroller" ondragenter="setupDragDrop(event, \''+e.identity+"')\" ondragover=\"setupDragDrop(event, '"+e.identity+"')\" ondragleave=\"cancelDragDrop(event, '"+e.identity+"')\" ondrop=\"onFileDragDrop(event, '"+e.identity+"')\">",t+="</div>",t+="</td></tr>","extension"!=e.type&&"group"!=e.type||!EnableTextMessaging||(t+='<tr><td  id=sendChatMessageSection class=streamSection style="height:110px">',t+='<div id="contact-'+e.identity+'-imagePastePreview" class=sendImagePreview style="display:none" tabindex=0></div>',t+='<div id="contact-'+e.identity+'-fileShare" style="display:none">',t+='<input type=file multiple onchange="console.log(this)" />',t+="</div>",t+='<div id="contact-'+e.identity+'-audio-recording" style="display:none"></div>',t+='<div id="contact-'+e.identity+'-video-recording" style="display:none"></div>',t+='<div id="contact-'+e.identity+'-emoji-menu" style="display:none" class="EmojiMenu"></div>',t+="<table class=sendMessageContainer cellpadding=0 cellspacing=0><tr>",t+='<td><textarea id="contact-'+e.identity+'-ChatMessage" class="chatMessage" placeholder="'+lang.type_your_message_here+'" onkeydown="chatOnkeydown(event, this,\''+e.identity+"')\" onpaste=\"chatOnbeforepaste(event, this,'"+e.identity+"')\"></textarea></td>",t+='<td style="width:40px;padding-top:4px;"><button onclick="SendChatMessage(\''+e.identity+'\')" class=roundButtonsSpec title="'+lang.send_chat_message+'"><i class="fa fa-paper-plane-o" aria-hidden="true"></i></button>',t+="<button onclick=\"ShowEmojiBar('"+e.identity+'\')" class=roundButtonsSpec title="'+lang.select_expression+'"><i class="fa fa-smile-o"></i></button>',t+="<button onclick=\"SendFile('"+e.identity+'\')" class=roundButtonsSpec title="'+lang.send_file+'"><i class="fa fa-file-text-o"></i></button></td>',t+="</tr></table>",t+="</td></tr>"),t+="</table>",$("#rightContent").append(t)}function RemoveBuddyMessageStream(e){CloseBuddy(e.identity),UpdateBuddyList(),$("#stream-"+e.identity).remove();var t=JSON.parse(localDB.getItem(e.identity+"-stream"));localDB.removeItem(e.identity+"-stream");var i=JSON.parse(localDB.getItem(profileUserID+"-Buddies")),n=0;$.each(i.DataCollection,(function(t,i){if(i.uID==e.identity||i.cID==e.identity||i.gID==e.identity)return n=t,!1})),i.DataCollection.splice(n,1),i.TotalRows=i.DataCollection.length,localDB.setItem(profileUserID+"-Buddies",JSON.stringify(i)),localDB.removeItem("img-"+e.identity+"-extension"),localDB.removeItem("img-"+e.identity+"-contact"),localDB.removeItem("img-"+e.identity+"-group"),t&&t.DataCollection&&t.DataCollection.length>=1&&DeleteCallRecordings(e.identity,t),DeleteQosData(e.identity)}function DeleteCallRecordings(e,t){var i=window.indexedDB.open("CallRecordings");i.onerror=function(e){console.error("IndexDB Request Error:",e)},i.onupgradeneeded=function(e){console.warn("Upgrade Required for IndexDB... probably because of first time use.")},i.onsuccess=function(e){console.log("IndexDB connected to CallRecordings");var i=e.target.result;0!=i.objectStoreNames.contains("Recordings")?(i.onerror=function(e){console.error("IndexDB Error:",e)},$.each(t.DataCollection,(function(e,t){t.Recordings&&t.Recordings.length&&$.each(t.Recordings,(function(e,t){console.log("Deleting Call Recording: ",t.uID);var n=i.transaction(["Recordings"],"readwrite").objectStore("Recordings");try{n.delete(t.uID).onsuccess=function(e){console.log("Call Recording Deleted: ",t.uID)}}catch(e){console.log("Call Recording Delete failed: ",e)}}))}))):console.warn("IndexDB CallRecordings.Recordings does not exists")}}function MakeUpName(){var e=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],t="";t+=e[Math.floor(Math.random()*e.length)];for(var i=0;i<Math.floor(12*Math.random())+4;i++)t+=e[Math.floor(Math.random()*e.length)].toLowerCase();t+=" ",t+=e[Math.floor(Math.random()*e.length)];for(i=0;i<Math.floor(12*Math.random())+4;i++)t+=e[Math.floor(Math.random()*e.length)].toLowerCase();return t}function MakeUpNumber(){for(var e=["0","1","2","3","4","5","6","7","8","9","0"],t="0",i=0;i<9;i++)t+=e[Math.floor(Math.random()*e.length)];return t}function MakeUpBuddies(e){for(var t=0;t<e;t++){AddBuddy(new Buddy("contact",uID(),MakeUpName(),"","",MakeUpNumber(),"",utcDateNow(),"Testing",""),!1,!1)}UpdateBuddyList()}function SelectBuddy(e){$("#roundcubeFrame").remove(),$(".streamSelected").each((function(){$(this).show()}));var t=FindBuddyByIdentity(e);if(null!=t){for(var i=0;i<Buddies.length;i++)if(1==Buddies[i].IsSelected&&Buddies[i].identity==e)return;console.log("Selecting Buddy: "+e),selectedBuddy=t,$(".streamSelected").each((function(){$(this).prop("class","stream")})),$("#stream-"+e).prop("class","streamSelected");for(var n=0;n<Lines.length;n++){var a="buddy";null!=Lines[n].SipSession&&(a=Lines[n].SipSession.local_hold?"buddyActiveCallHollding":"buddyActiveCall"),$("#line-"+Lines[n].LineNumber).prop("class",a),Lines[n].IsSelected=!1}ClearMissedBadge(e);for(i=0;i<Buddies.length;i++){a=Buddies[i].identity==e?"buddySelected":"buddy";$("#contact-"+Buddies[i].identity).prop("class",a),$("#contact-"+Buddies[i].identity+"-ChatHistory").empty(),Buddies[i].IsSelected=Buddies[i].identity==e}UpdateUI(),RefreshStream(t);try{$("#contact-"+e).get(0).scrollIntoViewIfNeeded()}catch(e){}localDB.setItem("SelectedBuddy",e)}}function CloseBuddy(e){$(".buddySelected").each((function(){$(this).prop("class","buddy")})),$(".streamSelected").each((function(){$(this).prop("class","stream")})),console.log("Closing Buddy: "+e);for(var t=0;t<Buddies.length;t++)Buddies[t].IsSelected=!1;selectedBuddy=null;for(var i=0;i<Lines.length;i++)Lines[i].IsSelected=!1;selectedLine=null,localDB.setItem("SelectedBuddy",null),UpdateUI()}function DownloadChatText(e){var t=FindBuddyByIdentity(e),i=t.CallerIDName,n=i.replace(" ","_"),a=t.ExtNo,o=moment().format("YYYY-MM-DD_HH-mm-ss"),l="\nRoundpin Chat With "+i+" (extension "+a+"), saved on "+moment().format("YYYY-MM-DD HH:mm:ss")+"\n\n\n\n",s="";if($("#contact-"+e+"-ChatHistory .chatMessageTable").each((function(){$(this).hasClass("theirChatMessage")?s+="\n"+i+"\n"+$(this).text()+"\n\n":s+="\nMe\n"+$(this).text()+"\n\n"})),""!=s){var r=l+s,d="Roundpin_Chat-"+n+"_"+o,c=document.createElement("a");c.setAttribute("download",d),c.setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent(r)),c.click()}else alert("There is no chat text to save ! ")}function RemoveBuddy(e){var t=FindBuddyByIdentity(e).CallerIDName;Confirm(lang.confirm_remove_buddy,lang.remove_buddy,(function(){for(var i=0;i<Buddies.length;i++)if(Buddies[i].identity==e){RemoveBuddyMessageStream(Buddies[i]),UnsubscribeBuddy(Buddies[i]),Buddies.splice(i,1);break}deleteBuddyFromSqldb(t),UpdateBuddyList()}))}function FindBuddyByDid(e){for(var t=0;t<Buddies.length;t++)if(Buddies[t].ExtNo==e||Buddies[t].MobileNumber==e||Buddies[t].ContactNumber1==e||Buddies[t].ContactNumber2==e)return Buddies[t];return null}function FindBuddyByExtNo(e){for(var t=0;t<Buddies.length;t++)if("extension"==Buddies[t].type&&Buddies[t].ExtNo==e)return Buddies[t];return null}function FindBuddyByNumber(e){for(var t=0;t<Buddies.length;t++)if(Buddies[t].MobileNumber==e||Buddies[t].ContactNumber1==e||Buddies[t].ContactNumber2==e)return Buddies[t];return null}function FindBuddyByIdentity(e){for(var t=0;t<Buddies.length;t++)if(Buddies[t].identity==e)return Buddies[t];return null}function SearchStream(e,t){var i=e.value,n=FindBuddyByIdentity(t);""==i?(console.log("Restore Stream"),RefreshStream(n)):RefreshStream(n,i)}function RefreshStream(e,t){$("#contact-"+e.identity+"-ChatHistory").empty();var i=JSON.parse(localDB.getItem(e.identity+"-stream"));null!=i&&null!=i.DataCollection&&(i.DataCollection.sort((function(e,t){var i=moment.utc(e.ItemDate.replace(" UTC","")),n=moment.utc(t.ItemDate.replace(" UTC",""));return i.isSameOrAfter(n,"second")?-1:1})),t&&""!=t&&(console.log("Rows without filter ("+t+"): ",i.DataCollection.length),i.DataCollection=i.DataCollection.filter((function(e){if(-1!=t.indexOf("date: ")){var i=getFilter(t,"date");if(""!=i&&-1!=e.ItemDate.indexOf(i))return!0}if(e.MessageData&&e.MessageData.length>1){if(-1!=e.MessageData.toLowerCase().indexOf(t.toLowerCase()))return!0;if(-1!=t.toLowerCase().indexOf(e.MessageData.toLowerCase()))return!0}if("MSG"==e.ItemType);else if("CDR"==e.ItemType){if(e.Tags&&e.Tags.length>1){var n=getFilter(t,"tag");if(""!=n&&1==e.Tags.some((function(e){return-1!=n.toLowerCase().indexOf(e.value.toLowerCase())||-1!=e.value.toLowerCase().indexOf(n.toLowerCase())})))return!0}}else"FILE"==e.ItemType||e.ItemType;return!1})),console.log("Rows After Filter: ",i.DataCollection.length)),i.DataCollection.length>StreamBuffer&&(console.log("Rows:",i.DataCollection.length," (will be trimed to "+StreamBuffer+")"),i.DataCollection.splice(StreamBuffer)),$.each(i.DataCollection,(function(t,i){var n=moment.utc(i.ItemDate.replace(" UTC","")).isSame(moment.utc(),"day"),a="  "+moment.utc(i.ItemDate.replace(" UTC","")).local().calendar(null,{sameElse:DisplayDateFormat});if(n&&(a="  "+moment.utc(i.ItemDate.replace(" UTC","")).local().format(DisplayTimeFormat)),"MSG"==i.ItemType){var o='<i class="fa fa-question-circle-o SendingMessage"></i>';1==i.Sent&&(o='<i class="fa fa-check SentMessage"></i>'),0==i.Sent&&(o='<i class="fa fa-exclamation-circle FailedMessage"></i>'),i.Delivered&&(o+='<i class="fa fa-check DeliveredMessage"></i>');var l=(d=ReformatMessage(i.MessageData)).length>1e3;if(i.SrcUserId==profileUserID){if(0!=d.length){var s='<table class="ourChatMessage chatMessageTable" cellspacing=0 cellpadding=0><tr>';s+='<td class=ourChatMessageText onmouseenter="ShowChatMenu(this)" onmouseleave="HideChatMenu(this)">',s+="<span onclick=\"ShowMessgeMenu(this,'MSG','"+i.ItemId+"', '"+e.identity+'\')" class=chatMessageDropdown style="display:none"><i class="fa fa-chevron-down"></i></span>',s+="<div id=msg-text-"+i.ItemId+' class=messageText style="'+(l?"max-height:190px; overflow:hidden":"")+'">'+d+"</div>",l&&(s+="<div id=msg-readmore-"+i.ItemId+" class=messageReadMore><span onclick=\"ExpandMessage(this,'"+i.ItemId+"', '"+e.identity+"')\">"+lang.read_more+"</span></div>"),s+="<div class=messageDate>"+a+" "+o+"</div>",s+="</td>",s+="</tr></table>"}}else{if(0!=d.length){s='<table class="theirChatMessage chatMessageTable" cellspacing=0 cellpadding=0><tr>';s+='<td class=theirChatMessageText onmouseenter="ShowChatMenu(this)" onmouseleave="HideChatMenu(this)">',s+="<span onclick=\"ShowMessgeMenu(this,'MSG','"+i.ItemId+"', '"+e.identity+'\')" class=chatMessageDropdown style="display:none"><i class="fa fa-chevron-down"></i></span>',"group"==e.type&&(s+="<div class=messageDate></div>"),s+="<div id=msg-text-"+i.ItemId+' class=messageText style="'+(l?"max-height:190px; overflow:hidden":"")+'">'+d+"</div>",l&&(s+="<div id=msg-readmore-"+i.ItemId+" class=messageReadMore><span onclick=\"ExpandMessage(this,'"+i.ItemId+"', '"+e.identity+"')\">"+lang.read_more+"</span></div>"),s+="<div class=messageDate>"+a+"</div>",s+="</td>",s+="</tr></table>"}}0!=d.length&&$("#contact-"+e.identity+"-ChatHistory").prepend(s)}else if("CDR"==i.ItemType){var r=i.Billsec>0?"green":"red",d="",c="<span id=cdr-flagged-"+i.CdrId+' style="'+(i.Flagged?"":"display:none")+'">';c+='<i class="fa fa-flag FlagCall"></i> ',c+="</span>";var u="";i.MessageData&&(u=i.MessageData),i.Tags||(i.Tags=[]);var p="<ul id=cdr-tags-"+i.CdrId+' class=tags style="'+(i.Tags&&i.Tags.length>0?"":"display:none")+'">';$.each(i.Tags,(function(t,n){p+="<li onclick=\"TagClick(this, '"+i.CdrId+"', '"+e.identity+"')\">"+n.value+"</li>"})),p+="<li class=tagText><input maxlength=24 type=text onkeypress=\"TagKeyPress(event, this, '"+i.CdrId+"', '"+e.identity+'\')" onfocus="TagFocus(this)"></li>',p+="</ul>",d+='<i class="fa '+(i.WithVideo?"fa-video-camera":"fa-phone")+'" style="color:'+r+'"></i>';var g=i.WithVideo?lang.a_video_call:lang.an_audio_call,m="";if(i.Recordings&&i.Recordings.length>=1&&$.each(i.Recordings,(function(t,n){if(n.uID){var a=moment.utc(n.startTime.replace(" UTC","")).local(),o=moment.utc(n.stopTime.replace(" UTC","")).local(),l=moment.duration(o.diff(a));if(m+="<div class=callRecording>",i.WithVideo)if(n.Poster){n.Poster.width,n.Poster.height;var s=n.Poster.posterBase64;m+='<div><IMG src="'+s+'"><button onclick="PlayVideoCallRecording(this, \''+i.CdrId+"', '"+n.uID+'\')" class=videoPoster><i class="fa fa-play"></i></button></div>'}else m+="<div><button onclick=\"PlayVideoCallRecording(this, '"+i.CdrId+"', '"+n.uID+"', '"+e.identity+'\')"><i class="fa fa-video-camera"></i></button></div>';else m+="<div><button onclick=\"PlayAudioCallRecording(this, '"+i.CdrId+"', '"+n.uID+"', '"+e.identity+'\')"><i class="fa fa-play"></i></button></div>';m+="<div>"+lang.started+": "+a.format(DisplayTimeFormat)+' <i class="fa fa-long-arrow-right"></i> '+lang.stopped+": "+o.format(DisplayTimeFormat)+"</div>",m+="<div>"+lang.recording_duration+": "+formatShortDuration(l.asSeconds())+"</div>",m+="<div>",m+='<span id="cdr-video-meta-width-'+i.CdrId+"-"+n.uID+'"></span>',m+='<span id="cdr-video-meta-height-'+i.CdrId+"-"+n.uID+'"></span>',m+='<span id="cdr-media-meta-size-'+i.CdrId+"-"+n.uID+'"></span>',m+='<span id="cdr-media-meta-codec-'+i.CdrId+"-"+n.uID+'"></span>',m+="</div>",m+="</div>"}})),i.SrcUserId==profileUserID){"0"==i.Billsec?d+=" "+lang.you_tried_to_make+" "+g+" ("+i.ReasonText+").":d+=" "+lang.you_made+" "+g+", "+lang.and_spoke_for+" "+formatDuration(i.Billsec)+".";s='<table class="ourChatMessage chatMessageTable" cellspacing=0 cellpadding=0><tr>';s+='<td style="padding-right:4px;">'+c+"</td>",s+='<td class=ourChatMessageText onmouseenter="ShowChatMenu(this)" onmouseleave="HideChatMenu(this)">',s+="<span onClick=\"ShowMessgeMenu(this,'CDR','"+i.CdrId+"', '"+e.identity+'\')" class=chatMessageDropdown style="display:none"><i class="fa fa-chevron-down"></i></span>',s+="<div>"+d+"</div>",s+="<div>"+p+"</div>",s+="<div id=cdr-comment-"+i.CdrId+" class=cdrComment>"+u+"</div>",s+="<div class=callRecordings>"+m+"</div>",s+="<div class=messageDate>"+a+"</div>",s+="</td>",s+="</tr></table>"}else{"0"==i.Billsec?d+=" "+lang.you_missed_a_call+" ("+i.ReasonText+").":d+=" "+lang.you_recieved+" "+g+", "+lang.and_spoke_for+" "+formatDuration(i.Billsec)+".";s='<table class="theirChatMessage chatMessageTable" cellspacing=0 cellpadding=0><tr>';s+='<td class=theirChatMessageText onmouseenter="ShowChatMenu(this)" onmouseleave="HideChatMenu(this)">',s+="<span onClick=\"ShowMessgeMenu(this,'CDR','"+i.CdrId+"', '"+e.identity+'\')" class=chatMessageDropdown style="display:none"><i class="fa fa-chevron-down"></i></span>',s+='<div style="text-align:left">'+d+"</div>",s+="<div>"+p+"</div>",s+="<div id=cdr-comment-"+i.CdrId+" class=cdrComment>"+u+"</div>",s+="<div class=callRecordings>"+m+"</div>",s+="<div class=messageDate> "+a+"</div>",s+="</td>",s+='<td style="padding-left:4px">'+c+"</td>",s+="</tr></table>"}$("#contact-"+e.identity+"-ChatHistory").prepend(s)}else if("FILE"==i.ItemType)if(i.SrcUserId==profileUserID){var f='<table class="ourChatMessage chatMessageTable" cellspacing=0 cellpadding=0><tr>';f+="<td><div class='sentFileChatRect'>Download file<br><a href='download-sent-chat-file.php?s_ajax_call="+validateSToken+"&destSipUser="+i.Dst+"&sentFlNm="+i.SentFileName+"' target='_blank'>"+i.SentFileName+"</a>",f+='<span style="display:block;width:100%;height:10px;"></span><div class="messageDate">'+a+"</div></div>",f+="</td>",f+="</tr></table>",$("#contact-"+e.identity+"-ChatHistory").prepend(f),$("#sendFileLoader").remove()}else{var v='<table class="theirChatMessage chatMessageTable" cellspacing=0 cellpadding=0><tr>';v+="<td><div class='recFileChatRect'>Download file<br><a href='download-rec-chat-file.php?s_ajax_call="+validateSToken+"&recSipUser="+i.Dst+"&recFlNm="+i.ReceivedFileName+"' target='_blank'>"+i.ReceivedFileName+"</a>",v+='<span style="display:block;width:100%;height:10px;"></span><div class="messageDate">'+a+"</div></div>",v+="</td>",v+="</tr></table>",$("#contact-"+e.identity+"-ChatHistory").prepend(v)}else i.ItemType})),updateScroll(e.identity),window.setTimeout((function(){updateScroll(e.identity)}),300))}function ShowChatMenu(e){$(e).children("span").show()}function HideChatMenu(e){$(e).children("span").hide()}function ExpandMessage(e,t,i){$("#msg-text-"+t).css("max-height",""),$("#msg-text-"+t).css("overflow",""),$("#msg-readmore-"+t).remove(),$.jeegoopopup.close()}function ShowBuddyDial(e,t){$("#contact-"+t+"-email").show(),$("#contact-"+t+"-audio-dial").show(),$("#contact-"+t+"-video-dial").show()}function HideBuddyDial(e,t){$("#contact-"+t+"-email").hide(),$("#contact-"+t+"-audio-dial").hide(),$("#contact-"+t+"-video-dial").hide()}function QuickDialAudio(e,t,i){AudioCallMenu(e,t),i.stopPropagation()}function QuickDialVideo(e,t,i){i.stopPropagation(),window.setTimeout((function(){DialByLine("video",e,t)}),300)}function ExpandVideoArea(e){$("#line-"+e+"-ActiveCall").prop("class","FullScreenVideo"),$("#line-"+e+"-VideoCall").css("height","calc(100% - 100px)"),$("#line-"+e+"-VideoCall").css("margin-top","0px"),$("#line-"+e+"-preview-container").prop("class","PreviewContainer PreviewContainer_FS"),$("#line-"+e+"-stage-container").prop("class","StageContainer StageContainer_FS"),$("#line-"+e+"-restore").show(),$("#line-"+e+"-expand").hide(),$("#line-"+e+"-monitoring").hide()}function RestoreVideoArea(e){$("#line-"+e+"-ActiveCall").prop("class",""),$("#line-"+e+"-VideoCall").css("height",""),$("#line-"+e+"-VideoCall").css("margin-top","10px"),$("#line-"+e+"-preview-container").prop("class","PreviewContainer"),$("#line-"+e+"-stage-container").prop("class","StageContainer"),$("#line-"+e+"-restore").hide(),$("#line-"+e+"-expand").show(),$("#line-"+e+"-monitoring").show()}function MuteSession(e){$("#line-"+e+"-btn-Unmute").show(),$("#line-"+e+"-btn-Mute").hide();var t=FindLineByNumber(e);if(null!=t&&null!=t.SipSession){var i=t.SipSession;i.sessionDescriptionHandler.peerConnection.getSenders().forEach((function(e){"audio"==e.track.kind&&(1==e.track.IsMixedTrack?i.data.AudioSourceTrack&&"audio"==i.data.AudioSourceTrack.kind&&(console.log("Muting Audio Track : "+i.data.AudioSourceTrack.label),i.data.AudioSourceTrack.enabled=!1):(console.log("Muting Audio Track : "+e.track.label),e.track.enabled=!1))})),i.data.mute||(i.data.mute=[]),i.data.mute.push({event:"mute",eventTime:utcDateNow()}),i.data.ismute=!0,$("#line-"+e+"-msg").html(lang.call_on_mute),updateLineScroll(e),"undefined"!=typeof web_hook_on_modify&&web_hook_on_modify("mute",i)}}function UnmuteSession(e){$("#line-"+e+"-btn-Unmute").hide(),$("#line-"+e+"-btn-Mute").show();var t=FindLineByNumber(e);if(null!=t&&null!=t.SipSession){var i=t.SipSession;i.sessionDescriptionHandler.peerConnection.getSenders().forEach((function(e){"audio"==e.track.kind&&(1==e.track.IsMixedTrack?i.data.AudioSourceTrack&&"audio"==i.data.AudioSourceTrack.kind&&(console.log("Unmuting Audio Track : "+i.data.AudioSourceTrack.label),i.data.AudioSourceTrack.enabled=!0):(console.log("Unmuting Audio Track : "+e.track.label),e.track.enabled=!0))})),i.data.mute||(i.data.mute=[]),i.data.mute.push({event:"unmute",eventTime:utcDateNow()}),i.data.ismute=!1,$("#line-"+e+"-msg").html(lang.call_off_mute),updateLineScroll(e),"undefined"!=typeof web_hook_on_modify&&web_hook_on_modify("unmute",i)}}function ShowDtmfMenu(e,t){var i=event.pageX-90,n=event.pageY+30,a="<div id=mainDtmfDialPad>";a+='<table cellspacing=10 cellpadding=0 style="margin-left:auto; margin-right: auto">',a+="<tr><td><button class=dtmfButtons onclick=\"sendDTMF('"+t+"', '1');new Audio('sounds/dtmf.mp3').play();\"><div>1</div><span>&nbsp;</span></button></td>",a+="<td><button class=dtmfButtons onclick=\"sendDTMF('"+t+"', '2');new Audio('sounds/dtmf.mp3').play();\"><div>2</div><span>ABC</span></button></td>",a+="<td><button class=dtmfButtons onclick=\"sendDTMF('"+t+"', '3');new Audio('sounds/dtmf.mp3').play();\"><div>3</div><span>DEF</span></button></td></tr>",a+="<tr><td><button class=dtmfButtons onclick=\"sendDTMF('"+t+"', '4');new Audio('sounds/dtmf.mp3').play();\"><div>4</div><span>GHI</span></button></td>",a+="<td><button class=dtmfButtons onclick=\"sendDTMF('"+t+"', '5');new Audio('sounds/dtmf.mp3').play();\"><div>5</div><span>JKL</span></button></td>",a+="<td><button class=dtmfButtons onclick=\"sendDTMF('"+t+"', '6');new Audio('sounds/dtmf.mp3').play();\"><div>6</div><span>MNO</span></button></td></tr>",a+="<tr><td><button class=dtmfButtons onclick=\"sendDTMF('"+t+"', '7');new Audio('sounds/dtmf.mp3').play();\"><div>7</div><span>PQRS</span></button></td>",a+="<td><button class=dtmfButtons onclick=\"sendDTMF('"+t+"', '8');new Audio('sounds/dtmf.mp3').play();\"><div>8</div><span>TUV</span></button></td>",a+="<td><button class=dtmfButtons onclick=\"sendDTMF('"+t+"', '9');new Audio('sounds/dtmf.mp3').play();\"><div>9</div><span>WXYZ</span></button></td></tr>",a+="<tr><td><button class=dtmfButtons onclick=\"sendDTMF('"+t+"', '*');new Audio('sounds/dtmf.mp3').play();\">*</button></td>",a+="<td><button class=dtmfButtons onclick=\"sendDTMF('"+t+"', '0');new Audio('sounds/dtmf.mp3').play();\">0</button></td>",a+="<td><button class=dtmfButtons onclick=\"sendDTMF('"+t+"', '#');new Audio('sounds/dtmf.mp3').play();\">#</button></td></tr>",a+="</table>",a+="</div>",$.jeegoopopup.open({html:a,width:"auto",height:"auto",left:i,top:n,scrolling:"no",skinClass:"jg_popup_basic",overlay:!0,opacity:0,draggable:!0,resizable:!1,fadeIn:0}),$("#jg_popup_overlay").click((function(){$.jeegoopopup.close()})),$(window).on("keydown",(function(e){"Escape"==e.key&&$.jeegoopopup.close()}))}function ShowMessgeMenu(t,i,n,a){$.jeegoopopup.close();var o=event.pageX,l=event.pageY;$(window).width()-event.pageX<t.offsetWidth+50&&(o=event.pageX-200);var s='<div id="messageMenu">';if(s+='<table id="messageMenuTable" cellspacing=10 cellpadding=0 style="margin-left:auto; margin-right: auto">',"CDR"==i){var r=$("#cdr-flagged-"+n).is(":visible")?lang.clear_flag:lang.flag_call;s+='<tr id="CMDetails_1"><td><i class="fa fa-external-link"></i></td><td class="callDetails">'+lang.show_call_detail_record+"</td></tr>",s+='<tr id="CMDetails_2"><td><i class="fa fa-tags"></i></td><td class="callDetails">'+lang.tag_call+"</td></tr>",s+='<tr id="CMDetails_3"><td><i class="fa fa-flag"></i></td><td class="callDetails">'+r+"</td></tr>",s+='<tr id="CMDetails_4"><td><i class="fa fa-quote-left"></i></td><td class="callDetails">'+lang.edit_comment+"</td></tr>"}"MSG"==i&&(s+='<tr id="CMDetails_5"><td><i class="fa fa-clipboard"></i></td><td class="callDetails">'+lang.copy_message+"</td></tr>",s+='<tr id="CMDetails_6"><td><i class="fa fa-quote-left"></i></td><td class="callDetails">'+lang.quote_message+"</td></tr>"),s+="</table></div>",$.jeegoopopup.open({html:s,width:"auto",height:"auto",left:o,top:l,scrolling:"no",skinClass:"jg_popup_basic",overlay:!0,opacity:0,draggable:!1,resizable:!1,fadeIn:0}),$("#jg_popup_overlay").click((function(){$.jeegoopopup.close()})),$(window).on("keydown",(function(e){"Escape"==e.key&&$.jeegoopopup.close()})),$("#CMDetails_1").click((function(e){var t=null,i=JSON.parse(localDB.getItem(a+"-stream"));if(null==i&&null==i.DataCollection||$.each(i.DataCollection,(function(e,i){if("CDR"==i.ItemType&&i.CdrId==n)return t=i,!1})),null!=t){var o=[],l='<div id="windowCtrls"><img id="minimizeImg" src="images/1_minimize.svg" title="Restore" /><img id="maximizeImg" src="images/2_maximize.svg" title="Maximize" /><img id="closeImg" src="images/3_close.svg" title="Close" /></div>';l+='<div class="UiWindowField scroller">';var s=moment.utc(t.ItemDate.replace(" UTC","")).local().format(DisplayDateFormat+" "+DisplayTimeFormat),r=t.CallAnswer?moment.utc(t.CallAnswer.replace(" UTC","")).local().format(DisplayDateFormat+" "+DisplayTimeFormat):null,d=t.RingTime?t.RingTime:0,c=(moment.utc(t.CallEnd.replace(" UTC","")).local().format(DisplayDateFormat+" "+DisplayTimeFormat),""),u="";"inbound"==t.CallDirection?c=t.Src:"outbound"==t.CallDirection&&(u=t.Dst),l+="<div class=UiText><b>SIP CallID</b> : "+t.SessionId+"</div>",l+="<div class=UiText><b>"+lang.call_direction+"</b> : "+t.CallDirection+"</div>",l+="<div class=UiText><b>"+lang.call_date_and_time+"</b> : "+s+"</div>",l+="<div class=UiText><b>"+lang.ring_time+"</b> : "+formatDuration(d)+" ("+d+")</div>",l+="<div class=UiText><b>"+lang.talk_time+"</b> : "+formatDuration(t.Billsec)+" ("+t.Billsec+")</div>",l+="<div class=UiText><b>"+lang.call_duration+"</b> : "+formatDuration(t.TotalDuration)+" ("+t.TotalDuration+")</div>",l+="<div class=UiText><b>"+lang.video_call+"</b> : "+(t.WithVideo?lang.yes:lang.no)+"</div>",l+="<div class=UiText><b>"+lang.flagged+"</b> : "+(t.Flagged?'<i class="fa fa-flag FlagCall"></i> '+lang.yes:lang.no)+"</div>",l+="<hr>",l+='<h2 style="font-size: 16px">'+lang.call_tags+"</h2>",l+="<hr>",$.each(t.Tags,(function(e,t){l+="<span class=cdrTag>"+t.value+"</span>"})),l+='<h2 style="font-size: 16px">'+lang.call_notes+"</h2>",l+="<hr>",t.MessageData&&(l+='"'+t.MessageData+'"'),l+='<h2 style="font-size: 16px">'+lang.activity_timeline+"</h2>",l+="<hr>";var p=t.WithVideo?"("+lang.with_video+")":"",g="inbound"==t.CallDirection?lang.you_received_a_call_from+" "+c+" "+p:lang.you_made_a_call_to+" "+u+" "+p;if(o.push({Message:g,TimeStr:t.ItemDate}),r){var m="inbound"==t.CallDirection?lang.you_answered_after+" "+d+" "+lang.seconds_plural:lang.they_answered_after+" "+d+" "+lang.seconds_plural;o.push({Message:m,TimeStr:t.CallAnswer})}$.each(t.Transfers,(function(e,t){var i="Blind"==t.type?lang.you_started_a_blind_transfer_to+" "+t.to+". ":lang.you_started_an_attended_transfer_to+" "+t.to+". ";t.accept&&1==t.accept.complete?i+=lang.the_call_was_completed:""!=t.accept.disposition&&(i+=lang.the_call_was_not_completed+" ("+t.accept.disposition+")"),o.push({Message:i,TimeStr:t.transferTime})})),$.each(t.Mutes,(function(e,t){o.push({Message:"mute"==t.event?lang.you_put_the_call_on_mute:lang.you_took_the_call_off_mute,TimeStr:t.eventTime})})),$.each(t.Holds,(function(e,t){o.push({Message:"hold"==t.event?lang.you_put_the_call_on_hold:lang.you_took_the_call_off_hold,TimeStr:t.eventTime})})),$.each(t.ConfCalls,(function(e,t){var i=lang.you_started_a_conference_call_to+" "+t.to+". ";t.accept&&1==t.accept.complete?i+=lang.the_call_was_completed:""!=t.accept.disposition&&(i+=lang.the_call_was_not_completed+" ("+t.accept.disposition+")"),o.push({Message:i,TimeStr:t.startTime})})),$.each(t.Recordings,(function(e,t){var i=moment.utc(t.startTime.replace(" UTC","")).local(),n=moment.utc(t.stopTime.replace(" UTC","")).local(),a=moment.duration(n.diff(i)),l=lang.call_is_being_recorded;t.startTime!=t.stopTime&&(l+="("+formatShortDuration(a.asSeconds())+")"),o.push({Message:l,TimeStr:t.startTime})})),o.push({Message:"us"==t.Terminate?"You ended the call.":"They ended the call",TimeStr:t.CallEnd}),o.sort((function(e,t){var i=moment.utc(e.TimeStr.replace(" UTC","")),n=moment.utc(t.TimeStr.replace(" UTC",""));return i.isSameOrAfter(n,"second")?1:-1})),$.each(o,(function(e,t){var i="<table class=timelineMessage cellspacing=0 cellpadding=0><tr>";i+="<td class=timelineMessageArea>",i+='<div class=timelineMessageDate style="color: #333333"><i class="fa fa-circle timelineMessageDot"></i>'+moment.utc(t.TimeStr.replace(" UTC","")).local().format(DisplayTimeFormat)+"</div>",i+='<div class=timelineMessageText style="color: #000000">'+t.Message+"</div>",i+="</td>",l+=i+="</tr></table>"})),l+='<h2 style="font-size: 16px">'+lang.call_recordings+"</h2>",l+="<hr>";var f="";$.each(t.Recordings,(function(e,i){if(i.uID){var n=moment.utc(i.startTime.replace(" UTC","")).local(),a=moment.utc(i.stopTime.replace(" UTC","")).local(),o=moment.duration(a.diff(n));f+="<div>",t.WithVideo?f+='<div><video id="callrecording-video-'+i.uID+'" controls style="width: 100%"></div>':f+='<div><audio id="callrecording-audio-'+i.uID+'" controls style="width: 100%"></div>',f+="<div>"+lang.started+": "+n.format(DisplayTimeFormat)+' <i class="fa fa-long-arrow-right"></i> '+lang.stopped+": "+a.format(DisplayTimeFormat)+"</div>",f+="<div>"+lang.recording_duration+": "+formatShortDuration(o.asSeconds())+"</div>",f+='<div><a id="download-'+i.uID+'">'+lang.save_as+"</a> ("+lang.right_click_and_select_save_link_as+")</div>",f+="</div>"}})),l+=f,l+='<h2 style="font-size: 16px">'+lang.send_statistics+"</h2>",l+="<hr>",l+='<div style="position: relative; margin: auto; height: 160px; width: 100%;"><canvas id="cdr-AudioSendBitRate"></canvas></div>',l+='<div style="position: relative; margin: auto; height: 160px; width: 100%;"><canvas id="cdr-AudioSendPacketRate"></canvas></div>',l+='<h2 style="font-size: 16px">'+lang.receive_statistics+"</h2>",l+="<hr>",l+='<div style="position: relative; margin: auto; height: 160px; width: 100%;"><canvas id="cdr-AudioReceiveBitRate"></canvas></div>',l+='<div style="position: relative; margin: auto; height: 160px; width: 100%;"><canvas id="cdr-AudioReceivePacketRate"></canvas></div>',l+='<div style="position: relative; margin: auto; height: 160px; width: 100%;"><canvas id="cdr-AudioReceivePacketLoss"></canvas></div>',l+='<div style="position: relative; margin: auto; height: 160px; width: 100%;"><canvas id="cdr-AudioReceiveJitter"></canvas></div>',l+='<div style="position: relative; margin: auto; height: 160px; width: 100%;"><canvas id="cdr-AudioReceiveLevels"></canvas></div>',l+="<br><br></div>",$.jeegoopopup.close(),$.jeegoopopup.open({title:"Call Statistics",html:l,width:"640",height:"500",center:!0,scrolling:"no",skinClass:"jg_popup_basic",overlay:!0,opacity:50,draggable:!0,resizable:!1,fadeIn:0}),$("#jg_popup_b").append('<button id="ok_button">'+lang.ok+"</button>"),DisplayQosData(t.SessionId);var v=$(window).width()-12,h=$(window).height()-88;v<656||h<500?($.jeegoopopup.width(v).height(h),$.jeegoopopup.center(),$("#maximizeImg").hide(),$("#minimizeImg").hide()):($.jeegoopopup.width(640).height(500),$.jeegoopopup.center(),$("#minimizeImg").hide(),$("#maximizeImg").show()),$(window).resize((function(){v=$(window).width()-12,h=$(window).height()-88,$.jeegoopopup.center(),v<656||h<500?($.jeegoopopup.width(v).height(h),$.jeegoopopup.center(),$("#maximizeImg").hide(),$("#minimizeImg").hide()):($.jeegoopopup.width(640).height(500),$.jeegoopopup.center(),$("#minimizeImg").hide(),$("#maximizeImg").show())})),$("#minimizeImg").click((function(){$.jeegoopopup.width(640).height(500),$.jeegoopopup.center(),$("#maximizeImg").show(),$("#minimizeImg").hide()})),$("#maximizeImg").click((function(){$.jeegoopopup.width(v).height(h),$.jeegoopopup.center(),$("#minimizeImg").show(),$("#maximizeImg").hide()})),$("#closeImg").click((function(){$.jeegoopopup.close(),$("#jg_popup_b").empty()})),$("#ok_button").click((function(){$.jeegoopopup.close(),$("#jg_popup_b").empty()})),$("#jg_popup_overlay").click((function(){$.jeegoopopup.close(),$("#jg_popup_b").empty()})),$(window).on("keydown",(function(e){"Escape"==e.key&&($.jeegoopopup.close(),$("#jg_popup_b").empty())})),$.each(t.Recordings,(function(e,i){var n=null;n=t.WithVideo?$("#callrecording-video-"+i.uID).get(0):$("#callrecording-audio-"+i.uID).get(0);var a=$("#download-"+i.uID),o=getAudioOutputID();void 0!==n.sinkId?n.setSinkId(o).then((function(){console.log("sinkId applied: "+o)})).catch((function(e){console.warn("Error using setSinkId: ",e)})):console.warn("setSinkId() is not possible using this browser.");var l=window.indexedDB.open("CallRecordings");l.onerror=function(e){console.error("IndexDB Request Error:",e)},l.onupgradeneeded=function(e){console.warn("Upgrade Required for IndexDB... probably because of first time use.")},l.onsuccess=function(e){console.log("IndexDB connected to CallRecordings");var o=e.target.result;if(0!=o.objectStoreNames.contains("Recordings")){var l=o.transaction(["Recordings"]).objectStore("Recordings").get(i.uID);l.onerror=function(e){console.error("IndexDB Get Error:",e)},l.onsuccess=function(e){var o=window.URL.createObjectURL(e.target.result.mediaBlob);n.src=o,t.WithVideo?a.prop("download","Video-Call-Recording-"+i.uID+".webm"):a.prop("download","Audio-Call-Recording-"+i.uID+".webm"),a.prop("href",o)}}else console.warn("IndexDB CallRecordings.Recordings does not exists")}}))}})),$("#CMDetails_2").click((function(e){$("#cdr-tags-"+n).show(),$.jeegoopopup.close()})),$("#CMDetails_3").click((function(e){var t;$("#cdr-flagged-"+n).is(":visible")?(console.log("Clearing Flag from: ",n),$("#cdr-flagged-"+n).hide(),null==(t=JSON.parse(localDB.getItem(a+"-stream")))&&null==t.DataCollection||($.each(t.DataCollection,(function(e,t){if("CDR"==t.ItemType&&t.CdrId==n)return t.Flagged=!1,!1})),localDB.setItem(a+"-stream",JSON.stringify(t)))):(console.log("Flag Call: ",n),$("#cdr-flagged-"+n).show(),null==(t=JSON.parse(localDB.getItem(a+"-stream")))&&null==t.DataCollection||($.each(t.DataCollection,(function(e,t){if("CDR"==t.ItemType&&t.CdrId==n)return t.Flagged=!0,!1})),localDB.setItem(a+"-stream",JSON.stringify(t))));$.jeegoopopup.close()})),$("#CMDetails_4").click((function(e){var t=$("#cdr-comment-"+n).text();$("#cdr-comment-"+n).empty();var i=$("<input maxlength=500 type=text>").appendTo("#cdr-comment-"+n);i.on("focus",(function(){$.jeegoopopup.close()})),i.on("blur",(function(){var e=$(this).val();SaveComment(n,a,e)})),i.keypress((function(e){if(window.setTimeout((function(){$.jeegoopopup.close()}),500),"13"==(e.keyCode?e.keyCode:e.which)){e.preventDefault();var t=$(this).val();SaveComment(n,a,t)}})),i.val(t),i.focus(),$.jeegoopopup.close()})),$("#CMDetails_5").click((function(t){var i=$("#msg-text-"+n).text();navigator.clipboard.writeText(i).then((function(){console.log("Text coppied to the clipboard:",i)})).catch((function(){console.error("Error writing to the clipboard:",e)})),$.jeegoopopup.close()})),$("#CMDetails_6").click((function(e){var t=$("#msg-text-"+n).text();t='"'+t+'"';var i=$("#contact-"+a+"-ChatMessage");console.log("Quote Message:",t),i.val(t+"\n"+i.val()),$.jeegoopopup.close()}))}function SaveComment(e,t,i){console.log("Setting Comment:",i),$("#cdr-comment-"+e).empty(),$("#cdr-comment-"+e).append(i);var n=JSON.parse(localDB.getItem(t+"-stream"));null==n&&null==n.DataCollection||($.each(n.DataCollection,(function(t,n){if("CDR"==n.ItemType&&n.CdrId==e)return n.MessageData=i,!1})),localDB.setItem(t+"-stream",JSON.stringify(n)))}function TagKeyPress(e,t,i,n){$.jeegoopopup.close();var a=e.keyCode?e.keyCode:e.which;if("13"==a||"44"==a){if(e.preventDefault(),""==$(t).val())return;console.log("Adding Tag:",$(t).val()),$("#cdr-tags-"+i+" li:last").before("<li onclick=\"TagClick(this, '"+i+"', '"+n+"')\">"+$(t).val()+"</li>"),$(t).val(""),UpdateTags(i,n)}}function TagClick(e,t,i){window.setTimeout((function(){$.jeegoopopup.close()}),500),console.log("Removing Tag:",$(e).text()),$(e).remove(),UpdateTags(t,i)}function UpdateTags(e,t){var i=JSON.parse(localDB.getItem(t+"-stream"));null==i&&null==i.DataCollection||($.each(i.DataCollection,(function(t,i){if("CDR"==i.ItemType&&i.CdrId==e)return i.Tags=[],$("#cdr-tags-"+e).children("li").each((function(){"tagText"!=$(this).prop("class")&&i.Tags.push({value:$(this).text()})})),!1})),localDB.setItem(t+"-stream",JSON.stringify(i)))}function TagFocus(e){$.jeegoopopup.close()}function SendFile(e){$("#selectedFile").val(""),$("#upFile").empty();var t='<form id="sendFileFormChat" enctype="multipart/form-data">';t+='<input type="hidden" name="MAX_FILE_SIZE" value="786432000" />',t+='<input type="hidden" name="sipUser" value="'+FindBuddyByIdentity(e).ExtNo+'" />',t+='<input type="hidden" name="s_ajax_call" value="'+validateSToken+'" />',t+='<label for="selectedFile" class="customBrowseButton">Select File</label>',t+='<span id="upFile"></span>',t+='<input type="file" id="selectedFile" name="uploadedFile" />',t+='<input type="submit" id="submitFileChat" value="Send File" style="visibility:hidden;"/>',t+="</form>",$("#sendFileFormChat").is(":visible")?($("#sendFileFormChat").remove(),sendFileCheck=0):(sendFileCheck=1,$("#contact-"+e+"-ChatMessage").before(t),$("#sendFileFormChat").css("display","block"),$("#selectedFile").bind("change",(function(){upFileName=$(this).val().split("\\").pop(),/^[a-zA-Z0-9\-\_\.]+$/.test(upFileName)?$("#upFile").html(upFileName):($("#sendFileFormChat").remove(),sendFileCheck=0,alert("The name of the uploaded file is not valid!"))})))}function ShowEmojiBar(e){var t=$("#contact-"+e+"-emoji-menu"),i=$("#contact-"+e+"-ChatMessage");t.is(":visible")?t.hide():t.show();var n=$("<div>");n.prop("class","emojiButton");$.each(["๐Ÿ˜€","๐Ÿ˜","๐Ÿ˜‚","๐Ÿ˜ƒ","๐Ÿ˜„","๐Ÿ˜…","๐Ÿ˜†","๐Ÿ˜Š","๐Ÿ˜ฆ","๐Ÿ˜‰","๐Ÿ˜Š","๐Ÿ˜‹","๐Ÿ˜Œ","๐Ÿ˜","๐Ÿ˜Ž","๐Ÿ˜","๐Ÿ˜","๐Ÿ˜‘","๐Ÿ˜’","๐Ÿ˜“","๐Ÿ˜”","๐Ÿ˜•","๐Ÿ˜–","๐Ÿ˜—","๐Ÿ˜˜","๐Ÿ˜™","๐Ÿ˜š","๐Ÿ˜›","๐Ÿ˜œ","๐Ÿ˜","๐Ÿ˜ž","๐Ÿ˜Ÿ","๐Ÿ˜ ","๐Ÿ˜ก","๐Ÿ˜ข","๐Ÿ˜ฃ","๐Ÿ˜ค","๐Ÿ˜ฅ","๐Ÿ˜ฆ","๐Ÿ˜ง","๐Ÿ˜จ","๐Ÿ˜ฉ","๐Ÿ˜ช","๐Ÿ˜ซ","๐Ÿ˜ฌ","๐Ÿ˜ญ","๐Ÿ˜ฎ","๐Ÿ˜ฏ","๐Ÿ˜ฐ","๐Ÿ˜ฑ","๐Ÿ˜ฒ","๐Ÿ˜ณ","๐Ÿ˜ด","๐Ÿ˜ต","๐Ÿ˜ถ","๐Ÿ˜ท","๐Ÿ™","๐Ÿ™‚","๐Ÿ™ƒ","๐Ÿ™„","๐Ÿค","๐Ÿค‘","๐Ÿค’","๐Ÿค“","๐Ÿค”","๐Ÿค•","๐Ÿค ","๐Ÿคก","๐Ÿคข","๐Ÿคฃ","๐Ÿคค","๐Ÿคฅ","๐Ÿคง","๐Ÿคจ","๐Ÿคฉ","๐Ÿคช","๐Ÿคซ","๐Ÿคฌ","๐Ÿฅบ","๐Ÿคญ","๐Ÿคฏ","๐Ÿง"],(function(a,o){var l=$("<button>");l.html(o),l.on("click",(function(){var n=i.prop("selectionStart"),a=i.val();i.val(a.substring(0,n)+" "+$(this).html()+a.substring(n,a.length)+" "),t.hide(),i.focus(),updateScroll(e)})),n.append(l)})),$(".chatMessage,.chatHistory").on("click",(function(){t.hide()})),t.empty(),t.append(n),updateScroll(e)}function ShowMyProfileMenu(e){e.offsetWidth;var t=e.offsetHeight+56;if("superadmin"==getDbItem("userrole",""))var i="(superadmin)";else i="";var n="<font style='color:#000000;cursor:auto;'>"+userName+" "+i+"</font>",a=AutoAnswerEnabled?"<i class='fa fa-check' style='float:right;'></i>":"",o=DoNotDisturbEnabled?"<i class='fa fa-check' style='float:right;'></i>":"",l=CallWaitingEnabled?"<i class='fa fa-check' style='float:right;'></i>":"",s="<div id=userMenu>";s+='<table id=userMenuTable cellspacing=10 cellpadding=0 style="margin-left:auto; margin-right: auto">',s+='<tr id=userMenu_1><td><i class="fa fa-phone"></i>&nbsp; '+lang.auto_answer+'<span id="autoAnswerTick">'+a+"</span></td></tr>",s+='<tr id=userMenu_2><td><i class="fa fa-ban"></i>&nbsp; '+lang.do_not_disturb+'<span id="doNotDisturbTick">'+o+"</span></td></tr>",s+='<tr id=userMenu_3><td><i class="fa fa-volume-control-phone"></i>&nbsp; '+lang.call_waiting+'<span id="callWaitingTick">'+l+"</span></td></tr>",s+='<tr id=userMenu_4><td><i class="fa fa-refresh"></i>&nbsp; '+lang.refresh_registration+"</td></tr>",s+='<tr id=userMenu_5><td><i class="fa fa-user-plus"></i>&nbsp; '+lang.add_contact+"</td></tr>",s+="<tr id=userMenu_6><td><font style='color:#000000;cursor:auto;'>"+lang.logged_in_as+"</font></td></tr>",s+="<tr id=userMenu_7><td><span style='width:20px;'></span>"+n+"</td></tr>",s+='<tr id=userMenu_8><td><i class="fa fa-power-off"></i>&nbsp; '+lang.log_out+"</td></tr>",s+="</table>",s+="</div>",$.jeegoopopup.open({html:s,width:"auto",height:"auto",left:"56",top:t,scrolling:"no",skinClass:"jg_popup_basic",innerClass:"userMenuInner",contentClass:"userMenuContent",overlay:!0,opacity:0,draggable:!1,resizable:!1,fadeIn:0}),$(window).resize((function(){$.jeegoopopup.width("auto").height("auto").left("56").top(t)})),$("#userMenu_1").click((function(){ToggleAutoAnswer(),AutoAnswerEnabled?$("#autoAnswerTick").append("<i class='fa fa-check' style='float:right;'></i>"):$("#autoAnswerTick").empty()})),$("#userMenu_2").click((function(){ToggleDoNoDisturb(),DoNotDisturbEnabled?$("#doNotDisturbTick").append("<i class='fa fa-check' style='float:right;'></i>"):$("#doNotDisturbTick").empty()})),$("#userMenu_3").click((function(){ToggleCallWaiting(),CallWaitingEnabled?$("#callWaitingTick").append("<i class='fa fa-check' style='float:right;'></i>"):$("#callWaitingTick").empty()})),$("#userMenu_4").click((function(){RefreshRegistration()})),$("#userMenu_5").click((function(){AddSomeoneWindow()})),$("#userMenu_8").click((function(){SignOut()})),$("#jg_popup_overlay").click((function(){$.jeegoopopup.close()})),$(window).on("keydown",(function(e){"Escape"==e.key&&$.jeegoopopup.close()}))}function ShowLaunchVidConfMenu(e){var t=e.offsetWidth+121,i=0,n=e.offsetHeight+117;$(window).width()<=915&&(t=event.pageX+e.offsetWidth-113,i=0,n=event.pageY+e.offsetHeight-11);var a="<div id=videoConfMenu>";a+='<table id=lauchVConfTable cellspacing=0 cellpadding=0 style="margin: 0px">',a+='<tr id=launchVConfMenu_1><td><i class="fa fa-users"></i>&nbsp; '+lang.launch_video_conference+"</td></tr>",a+="</table>",a+="</div>",$.jeegoopopup.open({html:a,width:"228",height:"22",left:t,right:i,top:n,scrolling:"no",skinClass:"jg_popup_basic",overlay:!0,opacity:0,draggable:!1,resizable:!1,fadeIn:0}),$(window).resize((function(){$.jeegoopopup.width("228").height("22").left(t).top(n)})),$(window).width()<=915?$.jeegoopopup.right(6):$.jeegoopopup.width("228").height("22").left(t).top(n),$("#launchVConfMenu_1").click((function(){LaunchVideoConference(),$.jeegoopopup.close()})),$("#jg_popup_overlay").click((function(){$.jeegoopopup.close()})),$(window).on("keydown",(function(e){"Escape"==e.key&&$.jeegoopopup.close()}))}function ShowAccountSettingsMenu(e){$.jeegoopopup.close();var t=e.offsetWidth+212,i=0,n=e.offsetHeight+117;$(window).width()<=915&&(t=event.pageX-32,i=0,n=event.pageY+11);var a="<div id=settingsCMenu>";a+='<table id=lauchSetConfTable cellspacing=0 cellpadding=0 style="margin: 0px">',a+='<tr id=settingsCMenu_1><td><i class="fa fa-wrench"></i>&nbsp; '+lang.account_settings+"</td></tr>",a+="</table>",a+="</div>",$.jeegoopopup.open({html:a,width:"94",height:"22",left:t,right:i,top:n,scrolling:"no",skinClass:"jg_popup_basic",overlay:!0,opacity:0,draggable:!1,resizable:!1,fadeIn:0}),$(window).resize((function(){$.jeegoopopup.width("94").height("22").left(t).top(n)})),$(window).width()<=915?$.jeegoopopup.right(6):$.jeegoopopup.width("94").height("22").left(t).top(n),$("#settingsCMenu_1").click((function(){ConfigureExtensionWindow()})),$("#jg_popup_overlay").click((function(){$.jeegoopopup.close()})),$(window).on("keydown",(function(e){"Escape"==e.key&&$.jeegoopopup.close()}))}function RefreshRegistration(){Unregister(),console.log("Unregister complete..."),window.setTimeout((function(){console.log("Starting registration..."),Register()}),1e3)}function SignOut(){if(1==getDbItem("useRoundcube","")&&1==RCLoginCheck){$("#roundcubeFrame").remove(),$("#rightContent").show(),$(".streamSelected").each((function(){$(this).css("display","none")})),$("#rightContent").append('<iframe id="rcLogoutFrame" name="logoutFrame"></iframe>');var e='<form id="rcloForm" method="POST" action="'+("https://"+getDbItem("rcDomain","")+"/")+'" target="logoutFrame">';e+='<input type="hidden" name="_action" value="logout" />',e+='<input type="hidden" name="_task" value="logout" />',e+='<input type="hidden" name="_autologout" value="1" />',e+='<input id="submitloButton" type="submit" value="Logout" />',e+="</form>",$("#rcLogoutFrame").append(e),$("#submitloButton").click()}removeTextChatUploads(getDbItem("SipUsername","")),setTimeout((function(){var e=getDbItem("externalUserConfElem","");void 0!==e&&null!=e&&0!=e?checkExternalLinks():(Unregister(),console.log("Signing Out ..."),localStorage.clear(),null!=winVideoConf&&winVideoConf.close(),window.open("https://"+window.location.host+"/logout.php","_self"))}),100)}function ToggleAutoAnswer(){if("disabled"==AutoAnswerPolicy)return AutoAnswerEnabled=!1,void console.warn("Policy AutoAnswer: Disabled");AutoAnswerEnabled=1!=AutoAnswerEnabled,"enabled"==AutoAnswerPolicy&&(AutoAnswerEnabled=!0),localDB.setItem("AutoAnswerEnabled",1==AutoAnswerEnabled?"1":"0"),console.log("AutoAnswer:",AutoAnswerEnabled)}function ToggleDoNoDisturb(){if("disabled"==DoNotDisturbPolicy)return DoNotDisturbEnabled=!1,void console.warn("Policy DoNotDisturb: Disabled");DoNotDisturbEnabled=1!=DoNotDisturbEnabled,"enabled"==DoNotDisturbPolicy&&(DoNotDisturbEnabled=!0),localDB.setItem("DoNotDisturbEnabled",1==DoNotDisturbEnabled?"1":"0"),$("#dereglink").attr("class",1==DoNotDisturbEnabled?"dotDoNotDisturb":"dotOnline"),console.log("DoNotDisturb",DoNotDisturbEnabled)}function ToggleCallWaiting(){if("disabled"==CallWaitingPolicy)return CallWaitingEnabled=!1,void console.warn("Policy CallWaiting: Disabled");CallWaitingEnabled=1!=CallWaitingEnabled,"enabled"==CallWaitingPolicy&&(CallWaitingPolicy=!0),localDB.setItem("CallWaitingEnabled",1==CallWaitingEnabled?"1":"0"),console.log("CallWaiting",CallWaitingEnabled)}function ToggleRecordAllCalls(){if("disabled"==CallRecordingPolicy)return RecordAllCalls=!1,void console.warn("Policy CallRecording: Disabled");RecordAllCalls=1!=RecordAllCalls,"enabled"==CallRecordingPolicy&&(RecordAllCalls=!0),localDB.setItem("RecordAllCalls",1==RecordAllCalls?"1":"0"),console.log("RecordAllCalls",RecordAllCalls)}function ShowBuddyProfileMenu(e,t,i){$.jeegoopopup.close(),leftPos=event.pageX-60,topPos=event.pageY+45;var n=FindBuddyByIdentity(e);if("extension"==i){var a='<div style="width:200px; cursor:pointer" onclick="EditBuddyWindow(\''+e+"')\">";a+='<div class="buddyProfilePic" style="background-image:url(\''+getPicture(e,"extension")+"')\"></div>",a+='<div id=ProfileInfo style="text-align:center"><i class="fa fa-spinner fa-spin"></i></div>',a+="</div>",$.jeegoopopup.open({html:a,width:"200",height:"auto",left:leftPos,top:topPos,scrolling:"no",skinClass:"jg_popup_basic",contentClass:"showContactDetails",overlay:!0,opacity:0,draggable:!0,resizable:!1,fadeIn:0}),$("#ProfileInfo").html(""),$("#ProfileInfo").append('<div class=ProfileTextLarge style="margin-top:15px">'+n.CallerIDName+"</div>"),$("#ProfileInfo").append("<div class=ProfileTextMedium>"+n.Desc+"</div>"),$("#ProfileInfo").append('<div class=ProfileTextSmall style="margin-top:15px">'+lang.extension_number+":</div>"),$("#ProfileInfo").append("<div class=ProfileTextMedium>"+n.ExtNo+" </div>"),n.Email&&"null"!=n.Email&&"undefined"!=n.Email&&($("#ProfileInfo").append('<div class=ProfileTextSmall style="margin-top:15px">'+lang.email+":</div>"),$("#ProfileInfo").append("<div class=ProfileTextMedium>"+n.Email+" </div>")),n.MobileNumber&&"null"!=n.MobileNumber&&"undefined"!=n.MobileNumber&&($("#ProfileInfo").append('<div class=ProfileTextSmall style="margin-top:15px">'+lang.mobile+":</div>"),$("#ProfileInfo").append("<div class=ProfileTextMedium>"+n.MobileNumber+" </div>")),n.ContactNumber1&&"null"!=n.ContactNumber1&&"undefined"!=n.ContactNumber1&&($("#ProfileInfo").append('<div class=ProfileTextSmall style="margin-top:15px">'+lang.alternative_contact+":</div>"),$("#ProfileInfo").append("<div class=ProfileTextMedium>"+n.ContactNumber1+" </div>")),n.ContactNumber2&&"null"!=n.ContactNumber2&&"undefined"!=n.ContactNumber2&&($("#ProfileInfo").append('<div class=ProfileTextSmall style="margin-top:15px">'+lang.alternative_contact+":</div>"),$("#ProfileInfo").append("<div class=ProfileTextMedium>"+n.ContactNumber2+" </div>"))}else if("contact"==i){a='<div style="width:200px; cursor:pointer" onclick="EditBuddyWindow(\''+e+"')\">";a+='<div class="buddyProfilePic" style="background-image:url(\''+getPicture(e,"contact")+"')\"></div>",a+='<div id=ProfileInfo style="text-align:center"><i class="fa fa-spinner fa-spin"></i></div>',a+="</div>",$.jeegoopopup.open({html:a,width:"200",height:"auto",left:leftPos,top:topPos,scrolling:"no",skinClass:"jg_popup_basic",contentClass:"showContactDetails",overlay:!0,opacity:0,draggable:!0,resizable:!1,fadeIn:0}),$("#ProfileInfo").html(""),$("#ProfileInfo").append('<div class=ProfileTextLarge style="margin-top:15px">'+n.CallerIDName+"</div>"),$("#ProfileInfo").append("<div class=ProfileTextMedium>"+n.Desc+"</div>"),n.Email&&"null"!=n.Email&&"undefined"!=n.Email&&($("#ProfileInfo").append('<div class=ProfileTextSmall style="margin-top:15px">'+lang.email+":</div>"),$("#ProfileInfo").append("<div class=ProfileTextMedium>"+n.Email+" </div>")),n.MobileNumber&&"null"!=n.MobileNumber&&"undefined"!=n.MobileNumber&&($("#ProfileInfo").append('<div class=ProfileTextSmall style="margin-top:15px">'+lang.mobile+":</div>"),$("#ProfileInfo").append("<div class=ProfileTextMedium>"+n.MobileNumber+" </div>")),n.ContactNumber1&&"null"!=n.ContactNumber1&&"undefined"!=n.ContactNumber1&&($("#ProfileInfo").append('<div class=ProfileTextSmall style="margin-top:15px">'+lang.alternative_contact+":</div>"),$("#ProfileInfo").append("<div class=ProfileTextMedium>"+n.ContactNumber1+" </div>")),n.ContactNumber2&&"null"!=n.ContactNumber2&&"undefined"!=n.ContactNumber2&&($("#ProfileInfo").append('<div class=ProfileTextSmall style="margin-top:15px">'+lang.alternative_contact+":</div>"),$("#ProfileInfo").append("<div class=ProfileTextMedium>"+n.ContactNumber2+" </div>"))}else if("group"==i){a='<div style="width:200px; cursor:pointer" onclick="EditBuddyWindow(\''+e+"')\">";a+='<div class="buddyProfilePic" style="background-image:url(\''+getPicture(e,"group")+"')\"></div>",a+='<div id=ProfileInfo style="text-align:center"><i class="fa fa-spinner fa-spin"></i></div>',a+="</div>",$.jeegoopopup.open({html:a,width:"200",height:"auto",left:leftPos,top:topPos,scrolling:"no",skinClass:"jg_popup_basic",contentClass:"showContactDetails",overlay:!0,opacity:0,draggable:!0,resizable:!1,fadeIn:0}),$("#ProfileInfo").html(""),$("#ProfileInfo").append('<div class=ProfileTextLarge style="margin-top:15px">'+n.CallerIDName+"</div>"),$("#ProfileInfo").append("<div class=ProfileTextMedium>"+n.Desc+"</div>")}$("#jg_popup_overlay").click((function(){$.jeegoopopup.close()})),$(window).on("keydown",(function(e){"Escape"==e.key&&$.jeegoopopup.close()}))}function ChangeSettings(e,t){var i=event.pageX-138,n=event.pageY+28;$(window).height()-event.pageY<300&&(n=event.pageY-170);var a=FindLineByNumber(e);if(null!=a&&null!=a.SipSession){var o=a.SipSession;$.jeegoopopup.open({html:'<div id=DeviceSelector style="width:250px"></div>',width:"auto",height:"auto",left:i,top:n,scrolling:"no",skinClass:"jg_popup_basic",contentClass:"callSettingsContent",overlay:!0,opacity:0,draggable:!0,resizable:!1,fadeIn:0});var l=$("<select/>");l.prop("id","audioSrcSelect"),l.css("width","100%");var s=$("<select/>");s.prop("id","videoSrcSelect"),s.css("width","100%");var r=$("<select/>");r.prop("id","audioOutputSelect"),r.css("width","100%");var d=$("<select/>");if(d.prop("id","ringerSelect"),d.css("width","100%"),l.change((function(){console.log("Call to change Microphone: ",this.value);var t=!1;o.data.mediaRecorder&&"recording"==o.data.mediaRecorder.state&&(StopRecording(e,!0),t=!0),a.LocalSoundMeter&&a.LocalSoundMeter.stop(),o.data.AudioSourceDevice=this.value;var i={audio:{deviceId:"default"!=this.value?{exact:this.value}:"default"},video:!1};navigator.mediaDevices.getUserMedia(i).then((function(i){var n=i.getAudioTracks()[0];o.sessionDescriptionHandler.peerConnection.getSenders().forEach((function(i){i.track&&"audio"==i.track.kind&&(console.log("Switching Audio Track : "+i.track.label+" to "+n.label),i.track.stop(),i.replaceTrack(n).then((function(){t&&StartRecording(e),a.LocalSoundMeter=StartLocalAudioMediaMonitoring(e,o)})).catch((function(e){console.error("Error replacing track: ",e)})))}))})).catch((function(e){console.error("Error on getUserMedia")}))})),r.change((function(){console.log("Call to change Speaker: ",this.value),o.data.AudioOutputDevice=this.value;var t=this.value;console.log("Attempting to set Audio Output SinkID for line "+e+" ["+t+"]");var i=$("#line-"+e+"-remoteAudio").get(0);i&&(void 0!==i.sinkId?i.setSinkId(t).then((function(){console.log("sinkId applied: "+t)})).catch((function(e){console.warn("Error using setSinkId: ",e)})):console.warn("setSinkId() is not possible using this browser."))})),s.change((function(){console.log("Call to change WebCam"),switchVideoSource(e,this.value)})),navigator.mediaDevices){for(var c=0;c<AudioinputDevices.length;++c){var u=(p=AudioinputDevices[c]).deviceId;(g=p.label?p.label:"").indexOf("(")>0&&(g=g.substring(0,g.indexOf("("))),(m=$("<option/>")).prop("value",u),m.text(""!=g?g:"Microphone"),o.data.AudioSourceDevice==u&&m.prop("selected",!0),l.append(m)}for(c=0;c<VideoinputDevices.length;++c){u=(p=VideoinputDevices[c]).deviceId;(g=p.label?p.label:"").indexOf("(")>0&&(g=g.substring(0,g.indexOf("("))),(m=$("<option/>")).prop("value",u),m.text(""!=g?g:"Webcam"),o.data.VideoSourceDevice==u&&m.prop("selected",!0),s.append(m)}if(HasSpeakerDevice)for(c=0;c<SpeakerDevices.length;++c){var p,g,m;u=(p=SpeakerDevices[c]).deviceId;(g=p.label?p.label:"").indexOf("(")>0&&(g=g.substring(0,g.indexOf("("))),(m=$("<option/>")).prop("value",u),m.text(""!=g?g:"Speaker"),o.data.AudioOutputDevice==u&&m.prop("selected",!0),r.append(m)}$("#DeviceSelector").append("<div class=callSettingsDvs>"+lang.microphone+": </div>"),$("#DeviceSelector").append(l),HasSpeakerDevice&&($("#DeviceSelector").append("<div class=callSettingsDvs>"+lang.speaker+": </div>"),$("#DeviceSelector").append(r)),1==o.data.withvideo&&($("#DeviceSelector").append("<div class=callSettingsDvs>"+lang.camera+": </div>"),$("#DeviceSelector").append(s)),$("#jg_popup_overlay").click((function(){$.jeegoopopup.close()})),$(window).on("keydown",(function(e){"Escape"==e.key&&$.jeegoopopup.close()}))}else console.warn("navigator.mediaDevices not possible.")}}function PresentCamera(e){var t=FindLineByNumber(e);if(null!=t&&null!=t.SipSession){var i=t.SipSession;$("#line-"+e+"-src-camera").prop("disabled",!0),$("#line-"+e+"-src-canvas").prop("disabled",!1),$("#line-"+e+"-src-desktop").prop("disabled",!1),$("#line-"+e+"-src-video").prop("disabled",!1),$("#line-"+e+"-src-blank").prop("disabled",!1),$("#line-"+e+"-scratchpad-container").hide(),RemoveScratchpad(e),$("#line-"+e+"-sharevideo").hide(),$("#line-"+e+"-sharevideo").get(0).pause(),$("#line-"+e+"-sharevideo").get(0).removeAttribute("src"),$("#line-"+e+"-sharevideo").get(0).load(),window.clearInterval(i.data.videoResampleInterval),$("#line-"+e+"-localVideo").show(),$("#line-"+e+"-remoteVideo").appendTo("#line-"+e+"-stage-container"),switchVideoSource(e,i.data.VideoSourceDevice)}else console.warn("Line or Session is Null.")}function PresentScreen(e){var t=FindLineByNumber(e);if(null!=t&&null!=t.SipSession){var i=t.SipSession;$("#line-"+e+"-src-camera").prop("disabled",!1),$("#line-"+e+"-src-canvas").prop("disabled",!1),$("#line-"+e+"-src-desktop").prop("disabled",!0),$("#line-"+e+"-src-video").prop("disabled",!1),$("#line-"+e+"-src-blank").prop("disabled",!1),$("#line-"+e+"-scratchpad-container").hide(),RemoveScratchpad(e),$("#line-"+e+"-sharevideo").hide(),$("#line-"+e+"-sharevideo").get(0).pause(),$("#line-"+e+"-sharevideo").get(0).removeAttribute("src"),$("#line-"+e+"-sharevideo").get(0).load(),window.clearInterval(i.data.videoResampleInterval),$("#line-"+e+"-localVideo").hide(),$("#line-"+e+"-remoteVideo").appendTo("#line-"+e+"-stage-container"),ShareScreen(e)}else console.warn("Line or Session is Null.")}function PresentScratchpad(e){var t=FindLineByNumber(e);if(null!=t&&null!=t.SipSession){var i=t.SipSession;$("#line-"+e+"-src-camera").prop("disabled",!1),$("#line-"+e+"-src-canvas").prop("disabled",!0),$("#line-"+e+"-src-desktop").prop("disabled",!1),$("#line-"+e+"-src-video").prop("disabled",!1),$("#line-"+e+"-src-blank").prop("disabled",!1),$("#line-"+e+"-scratchpad-container").hide(),RemoveScratchpad(e),$("#line-"+e+"-sharevideo").hide(),$("#line-"+e+"-sharevideo").get(0).pause(),$("#line-"+e+"-sharevideo").get(0).removeAttribute("src"),$("#line-"+e+"-sharevideo").get(0).load(),window.clearInterval(i.data.videoResampleInterval),$("#line-"+e+"-localVideo").hide(),$("#line-"+e+"-remoteVideo").appendTo("#line-"+e+"-preview-container"),SendCanvas(e)}else console.warn("Line or Session is Null.")}function PresentVideo(e){var t=FindLineByNumber(e);if(null!=t&&null!=t.SipSession){t.SipSession;$.jeegoopopup.close();'<div id="windowCtrls"><img id="closeImg" src="images/3_close.svg" title="Close" /></div>','<label for=SelectVideoToSend class=customBrowseButton style="display: block; margin: 26px auto;">Select File</label>','<div class="UiWindowField"><input type=file  accept="video/*" id=SelectVideoToSend></div>',"</div>",$.jeegoopopup.open({html:'<div><div id="windowCtrls"><img id="closeImg" src="images/3_close.svg" title="Close" /></div><label for=SelectVideoToSend class=customBrowseButton style="display: block; margin: 26px auto;">Select File</label><div class="UiWindowField"><input type=file  accept="video/*" id=SelectVideoToSend></div></div>',width:"180",height:"80",center:!0,scrolling:"no",skinClass:"jg_popup_basic",overlay:!0,opacity:0,draggable:!0,resizable:!1,fadeIn:0}),$("#SelectVideoToSend").on("change",(function(t){var i=t.target;i.files.length>=1?($.jeegoopopup.close(),SendVideo(e,URL.createObjectURL(i.files[0]))):console.warn("Please Select a file to present.")})),$("#closeImg").click((function(){$.jeegoopopup.close()})),$("#jg_popup_overlay").click((function(){$.jeegoopopup.close()})),$(window).on("keydown",(function(e){"Escape"==e.key&&$.jeegoopopup.close()}))}else console.warn("Line or Session is Null.")}function PresentBlank(e){var t=FindLineByNumber(e);if(null!=t&&null!=t.SipSession){var i=t.SipSession;$("#line-"+e+"-src-camera").prop("disabled",!1),$("#line-"+e+"-src-canvas").prop("disabled",!1),$("#line-"+e+"-src-desktop").prop("disabled",!1),$("#line-"+e+"-src-video").prop("disabled",!1),$("#line-"+e+"-src-blank").prop("disabled",!0),$("#line-"+e+"-scratchpad-container").hide(),RemoveScratchpad(e),$("#line-"+e+"-sharevideo").hide(),$("#line-"+e+"-sharevideo").get(0).pause(),$("#line-"+e+"-sharevideo").get(0).removeAttribute("src"),$("#line-"+e+"-sharevideo").get(0).load(),window.clearInterval(i.data.videoResampleInterval),$("#line-"+e+"-localVideo").hide(),$("#line-"+e+"-remoteVideo").appendTo("#line-"+e+"-stage-container"),DisableVideoStream(e)}else console.warn("Line or Session is Null.")}function RemoveScratchpad(e){var t=GetCanvas("line-"+e+"-scratchpad");null!=t&&(window.clearInterval(t.redrawIntrtval),RemoveCanvas("line-"+e+"-scratchpad"),$("#line-"+e+"-scratchpad-container").empty(),t=null)}function ShowCallStats(e,t){console.log("Show Call Stats"),$("#line-"+e+"-AudioStats").show(300)}function HideCallStats(e,t){console.log("Hide Call Stats"),$("#line-"+e+"-AudioStats").hide(300)}function chatOnbeforepaste(e,t,i){console.log("Handle paste, checking for Images...");for(var n=(e.clipboardData||e.originalEvent.clipboardData).items,a=!1,o=0;o<n.length;o++)if(0!==n[o].type.indexOf("image"));else{console.log("Image found! Opening image editor...");var l=n[o].getAsFile(),s=new FileReader;s.onload=function(e){console.log("Image loaded... setting placeholder...");var t=new Image;t.onload=function(){console.log("Placeholder loaded... CreateImageEditor..."),CreateImageEditor(i,t)},t.src=e.target.result},s.readAsDataURL(l),a=!0}a&&e.preventDefault()}function chatOnkeydown(e,t,i){if("13"==(e.keyCode?e.keyCode:e.which)&&e.ctrlKey)return SendChatMessage(i),!1}function ReformatMessage(e){var t=e;return t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace(/</gi,"&lt;")).replace(/>/gi,"&gt;")).replace(/\n/gi,"<br>")).replace(/(:\)|:\-\)|:o\))/g,String.fromCodePoint(128578))).replace(/(:\(|:\-\(|:o\()/g,String.fromCodePoint(128577))).replace(/(;\)|;\-\)|;o\))/g,String.fromCodePoint(128521))).replace(/(:'\(|:'\-\()/g,String.fromCodePoint(128554))).replace(/(:'\(|:'\-\()/g,String.fromCodePoint(128514))).replace(/(:\$)/g,String.fromCodePoint(128563))).replace(/(>:\()/g,String.fromCodePoint(128547))).replace(/(:\×)/g,String.fromCodePoint(128536))).replace(/(:\O|:\โ€‘O)/g,String.fromCodePoint(128562))).replace(/(:P|:\-P|:p|:\-p)/g,String.fromCodePoint(128539))).replace(/(;P|;\-P|;p|;\-p)/g,String.fromCodePoint(128540))).replace(/(:D|:\-D)/g,String.fromCodePoint(128525))).replace(/(\(like\))/g,String.fromCodePoint(128077))).replace(/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/gi,(function(e){var t=e.length>50?e.substring(0,47)+"...":e;return'<A target=_blank class=previewHyperlink href="'+e+'">'+t+"</A>"}))}function getPicture(e,t){if("profilePicture"==e)return null==(i=localDB.getItem("profilePicture"))?hostingPrefex+"images/default.png":i;t=t||"extension";var i,n=FindBuddyByIdentity(e);return""!=n.imageObjectURL?n.imageObjectURL:null==(i=localDB.getItem("img-"+e+"-"+t))?hostingPrefex+"images/default.png":(n.imageObjectURL=URL.createObjectURL(base64toBlob(i,"image/png")),n.imageObjectURL)}function CreateImageEditor(e,t){console.log("Setting Up ImageEditor..."),$("#contact-"+e+"-imagePastePreview").is(":visible")?(console.log("Resetting ImageEditor..."),$("#contact-"+e+"-imagePastePreview").empty(),RemoveCanvas("contact-"+e+"-imageCanvas")):$("#contact-"+e+"-imagePastePreview").show();var i=$("<div/>");i.css("margin-bottom","5px"),i.append('<button class="toolBarButtons" title="Select" onclick="ImageEditor_Select(\''+e+'\')"><i class="fa fa-mouse-pointer"></i></button>'),i.append("&nbsp;|&nbsp;"),i.append('<button class="toolBarButtons" title="Draw" onclick="ImageEditor_FreedrawPen(\''+e+'\')"><i class="fa fa-pencil"></i></button>'),i.append('<button class="toolBarButtons" title="Paint" onclick="ImageEditor_FreedrawPaint(\''+e+'\')"><i class="fa fa-paint-brush"></i></button>'),i.append("&nbsp;|&nbsp;"),i.append('<button class="toolBarButtons" title="Select Line Color" onclick="ImageEditor_SetectLineColor(\''+e+'\')"><i class="fa fa-pencil-square-o" style="color:rgb(255, 0, 0)"></i></button>'),i.append('<button class="toolBarButtons" title="Select Fill Color" onclick="ImageEditor_SetectFillColor(\''+e+'\')"><i class="fa fa-pencil-square" style="color:rgb(255, 0, 0)"></i></button>'),i.append("&nbsp;|&nbsp;"),i.append('<button class="toolBarButtons" title="Add Circle" onclick="ImageEditor_AddCircle(\''+e+'\')"><i class="fa fa-circle"></i></button>'),i.append('<button class="toolBarButtons" title="Add Rectangle" onclick="ImageEditor_AddRectangle(\''+e+'\')"><i class="fa fa-stop"></i></button>'),i.append('<button class="toolBarButtons" title="Add Triangle" onclick="ImageEditor_AddTriangle(\''+e+'\')"><i class="fa fa-play"></i></button>'),i.append('<button class="toolBarButtons" title="Add Emoji" onclick="ImageEditor_SetectEmoji(\''+e+'\')"><i class="fa fa-smile-o"></i></button>'),i.append('<button class="toolBarButtons" title="Add Text" onclick="ImageEditor_AddText(\''+e+'\')"><i class="fa fa-font"></i></button>'),i.append('<button class="toolBarButtons" title="Delete Selected Items" onclick="ImageEditor_Clear(\''+e+'\')"><i class="fa fa-times"></i></button>'),i.append('<button class="toolBarButtons" title="Clear All" onclick="ImageEditor_ClearAll(\''+e+'\')"><i class="fa fa-trash"></i></button>'),i.append("&nbsp;|&nbsp;"),i.append('<button class="toolBarButtons" title="Pan" onclick="ImageEditor_Pan(\''+e+'\')"><i class="fa fa-hand-paper-o"></i></button>'),i.append('<button class="toolBarButtons" title="Zoom In" onclick="ImageEditor_ZoomIn(\''+e+'\')"><i class="fa fa-search-plus"></i></button>'),i.append('<button class="toolBarButtons" title="Zoom Out" onclick="ImageEditor_ZoomOut(\''+e+'\')"><i class="fa fa-search-minus"></i></button>'),i.append('<button class="toolBarButtons" title="Reset Pan & Zoom" onclick="ImageEditor_ResetZoom(\''+e+'\')"><i class="fa fa-search" aria-hidden="true"></i></button>'),i.append("&nbsp;|&nbsp;"),i.append('<button class="toolBarButtons" title="Cancel" onclick="ImageEditor_Cancel(\''+e+'\')"><i class="fa fa-times-circle"></i></button>'),i.append('<button class="toolBarButtons" title="Send" onclick="ImageEditor_Send(\''+e+'\')"><i class="fa fa-paper-plane"></i></button>'),$("#contact-"+e+"-imagePastePreview").append(i);var n=$("<canvas/>");n.prop("id","contact-"+e+"-imageCanvas"),n.css("border","1px solid #CCCCCC"),$("#contact-"+e+"-imagePastePreview").append(n),console.log("Canvas for ImageEditor created...");var a=t.width,o=t.height,l=$("#contact-"+e+"-imagePastePreview").width()-2;$("#contact-"+e+"-imageCanvas").prop("width",l),$("#contact-"+e+"-imageCanvas").prop("height",480);var s=1,r=1,d=1;a>l||o>480?(a>l&&(r=l/a),o>480&&(d=480/o,console.log("Scale to fit height: "+d)),s=Math.min(r,d),console.log("Scale down to fit: "+s),a*=s,o*=s,console.log("resizing canvas to fit new image size..."),$("#contact-"+e+"-imageCanvas").prop("width",a),$("#contact-"+e+"-imageCanvas").prop("height",o)):(console.log("Image is able to fit, resizing canvas..."),$("#contact-"+e+"-imageCanvas").prop("width",a),$("#contact-"+e+"-imageCanvas").prop("height",o)),console.log("Creating fabric API...");var c=new fabric.Canvas("contact-"+e+"-imageCanvas");c.id="contact-"+e+"-imageCanvas",c.ToolSelected="None",c.PenColour="rgb(255, 0, 0)",c.PenWidth=2,c.PaintColour="rgba(227, 230, 3, 0.6)",c.PaintWidth=10,c.FillColour="rgb(255, 0, 0)",c.isDrawingMode=!1,c.selectionColor="rgba(112,179,233,0.25)",c.selectionBorderColor="rgba(112,179,233, 0.8)",c.selectionLineWidth=1,c.setZoom(s),c.on("mouse:down",(function(e){var t=e.e;"Pan"==this.ToolSelected&&(this.isDragging=!0,this.selection=!1,this.lastPosX=t.clientX,this.lastPosY=t.clientY),null!=e.target&&(!0===t.altKey&&(e.target.lockMovementX=!0),!0===t.shiftKey&&(e.target.lockMovementY=!0),e.target.set({transparentCorners:!1,borderColor:"rgba(112,179,233, 0.4)",cornerColor:"rgba(112,179,233, 0.8)",cornerSize:6}))})),c.on("mouse:move",(function(e){if(this.isDragging){var t=e.e;this.viewportTransform[4]+=t.clientX-this.lastPosX,this.viewportTransform[5]+=t.clientY-this.lastPosY,this.requestRenderAll(),this.lastPosX=t.clientX,this.lastPosY=t.clientY}})),c.on("mouse:up",(function(e){this.isDragging=!1,this.selection=!0,null!=e.target&&(e.target.lockMovementX=!1,e.target.lockMovementY=!1)})),c.on("mouse:wheel",(function(e){var t=e.e.deltaY,i=(c.getPointer(e.e),c.getZoom());(i+=t/200)>10&&(i=10),i<.1&&(i=.1),c.zoomToPoint({x:e.e.offsetX,y:e.e.offsetY},i),e.e.preventDefault(),e.e.stopPropagation()})),c.backgroundImage=new fabric.Image(t),CanvasCollection.push(c),$("#contact-"+e+"-imagePastePreview").keydown((function(t){var i=(t=t||window.event).keyCode;console.log("Key press on Image Editor ("+e+"): "+i),46==i&&ImageEditor_Clear(e)})),console.log("ImageEditor: "+c.id+" created"),ImageEditor_FreedrawPen(e)}function GetCanvas(e){for(var t=0;t<CanvasCollection.length;t++)try{if(CanvasCollection[t].id==e)return CanvasCollection[t]}catch(e){console.warn("CanvasCollection.id not available")}return null}function RemoveCanvas(e){for(var t=0;t<CanvasCollection.length;t++)try{if(CanvasCollection[t].id==e){console.log("Found Old Canvas, Disposing..."),CanvasCollection[t].clear(),CanvasCollection[t].dispose(),CanvasCollection[t].id="--deleted--",console.log("CanvasCollection.splice("+t+", 1)"),CanvasCollection.splice(t,1);break}}catch(e){}console.log("There are "+CanvasCollection.length+" canvas now.")}var ImageEditor_Select=function(e){var t=GetCanvas("contact-"+e+"-imageCanvas");return null!=t&&(t.ToolSelected="none",t.isDrawingMode=!1,!0)},ImageEditor_FreedrawPen=function(e){var t=GetCanvas("contact-"+e+"-imageCanvas");return null!=t&&(t.freeDrawingBrush.color=t.PenColour,t.freeDrawingBrush.width=t.PenWidth,t.ToolSelected="Draw",t.isDrawingMode=!0,console.log(t),!0)},ImageEditor_FreedrawPaint=function(e){var t=GetCanvas("contact-"+e+"-imageCanvas");return null!=t&&(t.freeDrawingBrush.color=t.PaintColour,t.freeDrawingBrush.width=t.PaintWidth,t.ToolSelected="Paint",t.isDrawingMode=!0,!0)},ImageEditor_Pan=function(e){var t=GetCanvas("contact-"+e+"-imageCanvas");return null!=t&&(t.ToolSelected="Pan",t.isDrawingMode=!1,!0)},ImageEditor_ResetZoom=function(e){var t=GetCanvas("contact-"+e+"-imageCanvas");return null!=t&&(t.setZoom(1),t.setViewportTransform([1,0,0,1,0,0]),!0)},ImageEditor_ZoomIn=function(e){var t=GetCanvas("contact-"+e+"-imageCanvas");if(null!=t){var i=t.getZoom();(i+=.5)>10&&(i=10),i<.1&&(i=.1);var n=new fabric.Point(t.getWidth()/2,t.getHeight()/2);fabric.util.transformPoint(n,t.viewportTransform);return t.zoomToPoint(n,i),!0}return!1},ImageEditor_ZoomOut=function(e){var t=GetCanvas("contact-"+e+"-imageCanvas");if(null!=t){var i=t.getZoom();(i-=.5)>10&&(i=10),i<.1&&(i=.1);var n=new fabric.Point(t.getWidth()/2,t.getHeight()/2);fabric.util.transformPoint(n,t.viewportTransform);return t.zoomToPoint(n,i),!0}return!1},ImageEditor_AddCircle=function(e){var t=GetCanvas("contact-"+e+"-imageCanvas");if(null!=t){t.ToolSelected="none",t.isDrawingMode=!1;var i=new fabric.Circle({radius:20,fill:t.FillColour});return t.add(i),t.centerObject(i),t.setActiveObject(i),!0}return!1},ImageEditor_AddRectangle=function(e){var t=GetCanvas("contact-"+e+"-imageCanvas");if(null!=t){t.ToolSelected="none",t.isDrawingMode=!1;var i=new fabric.Rect({width:40,height:40,fill:t.FillColour});return t.add(i),t.centerObject(i),t.setActiveObject(i),!0}return!1},ImageEditor_AddTriangle=function(e){var t=GetCanvas("contact-"+e+"-imageCanvas");if(null!=t){t.ToolSelected="none",t.isDrawingMode=!1;var i=new fabric.Triangle({width:40,height:40,fill:t.FillColour});return t.add(i),t.centerObject(i),t.setActiveObject(i),!0}return!1},ImageEditor_AddEmoji=function(e){var t=GetCanvas("contact-"+e+"-imageCanvas");if(null!=t){t.ToolSelected="none",t.isDrawingMode=!1;var i=new fabric.Text(String.fromCodePoint(128578),{fontSize:24});return t.add(i),t.centerObject(i),t.setActiveObject(i),!0}return!1},ImageEditor_AddText=function(e,t){var i=GetCanvas("contact-"+e+"-imageCanvas");if(null!=i){i.ToolSelected="none",i.isDrawingMode=!1;var n=new fabric.IText(t,{fill:i.FillColour,fontFamily:"arial",fontSize:18});return i.add(n),i.centerObject(n),i.setActiveObject(n),!0}return!1},ImageEditor_Clear=function(e){var t=GetCanvas("contact-"+e+"-imageCanvas");if(null!=t){t.ToolSelected="none",t.isDrawingMode=!1;for(var i=t.getActiveObjects(),n=0;n<i.length;n++)t.remove(i[n]);return t.discardActiveObject(),!0}return!1},ImageEditor_ClearAll=function(e){var t=GetCanvas("contact-"+e+"-imageCanvas");if(null!=t){var i=t.backgroundImage;return t.ToolSelected="none",t.isDrawingMode=!1,t.clear(),t.backgroundImage=i,!0}return!1},ImageEditor_Cancel=function(e){console.log("Removing ImageEditor..."),$("#contact-"+e+"-imagePastePreview").empty(),RemoveCanvas("contact-"+e+"-imageCanvas"),$("#contact-"+e+"-imagePastePreview").hide()},ImageEditor_Send=function(e){var t=GetCanvas("contact-"+e+"-imageCanvas");return null!=t&&(SendImageDataMessage(e,t.toDataURL({format:"png"})),!0)};function FindSomething(e){$("#contact-"+e+"-search").toggle(),0==$("#contact-"+e+"-search").is(":visible")&&RefreshStream(FindBuddyByIdentity(e)),updateScroll(e)}var allowDradAndDrop=function(){var e=document.createElement("div");return("draggable"in e||"ondragstart"in e&&"ondrop"in e)&&"FormData"in window&&"FileReader"in window};function onFileDragDrop(e,t){var i=e.dataTransfer.files;console.log("You are about to upload "+i.length+" file."),$("#contact-"+t+"-ChatHistory").css("outline","none");for(var n=0;n<i.length;n++){var a=i[n],o=new FileReader;o.onload=function(e){a.size<=52428800?SendFileDataMessage(t,e.target.result,a.name,a.size):alert("The file '"+a.name+"' is bigger than 50MB, you cannot upload this file")},console.log("Adding: "+a.name+" of size: "+a.size+"bytes"),o.readAsDataURL(a)}preventDefault(e)}function cancelDragDrop(e,t){$("#contact-"+t+"-ChatHistory").css("outline","none"),preventDefault(e)}function setupDragDrop(e,t){$("#contact-"+t+"-ChatHistory").css("outline","2px dashed #184369"),preventDefault(e)}function preventDefault(e){e.preventDefault(),e.stopPropagation()}function Alert(e,t,i){$("#jg_popup_l").empty(),$("#jg_popup_b").empty(),$("#windowCtrls").empty(),$.jeegoopopup.close();var n="<div class=NoSelect>";n+='<div id="windowCtrls"><img id="closeImg" src="images/3_close.svg" title="Close" /></div>',n+='<div class=UiText style="padding: 0px 10px 8px 10px;" id=AllertMessageText>'+e+"</div>",n+="</div>",$.jeegoopopup.open({title:t,html:n,width:"260",height:"auto",center:!0,scrolling:"no",skinClass:"jg_popup_basic",contentClass:"confirmDelContact",overlay:!0,opacity:50,draggable:!0,resizable:!1,fadeIn:0}),$("#jg_popup_b").append('<div id=bottomButtons><button id=AlertOkButton style="width:80px">'+lang.ok+"</button></div>"),$("#AlertOkButton").click((function(){console.log("Alert OK clicked"),i&&i()})),$(window).resize((function(){$.jeegoopopup.center()})),$("#closeImg").click((function(){$.jeegoopopup.close(),$("#jg_popup_b").empty()})),$("#AlertOkButton").click((function(){$.jeegoopopup.close(),$("#jg_popup_b").empty()})),$("#jg_popup_overlay").click((function(){$.jeegoopopup.close(),$("#jg_popup_b").empty()})),$(window).on("keydown",(function(e){"Escape"==e.key&&($.jeegoopopup.close(),$("#jg_popup_b").empty())}))}function AlertConfigExtWindow(e,t){$("#jg_popup_l").empty(),$("#jg_popup_b").empty(),$("#windowCtrls").empty(),$.jeegoopopup.close(),videoAudioCheck=1;var i="<div class=NoSelect>";i+='<div id="windowCtrls"><img id="closeImg" src="images/3_close.svg" title="Close" /></div>',i+='<div class=UiText style="padding: 10px" id=AllertMessageText>'+e+"</div>",i+="</div>",$.jeegoopopup.open({title:t,html:i,width:"260",height:"auto",center:!0,scrolling:"no",skinClass:"jg_popup_basic",contentClass:"confirmDelContact",overlay:!0,opacity:50,draggable:!0,resizable:!1,fadeIn:0}),$("#jg_popup_b").append('<div id=bottomButtons><button id=AlertOkButton style="width:80px">'+lang.ok+"</button></div>"),$(window).resize((function(){$.jeegoopopup.center()})),$("#closeImg").click((function(){$("#windowCtrls").empty(),$("#jg_popup_b").empty(),$.jeegoopopup.close(),ConfigureExtensionWindow()})),$("#AlertOkButton").click((function(){console.log("Alert OK clicked"),$("#windowCtrls").empty(),$("#jg_popup_b").empty(),$.jeegoopopup.close(),ConfigureExtensionWindow()})),$("#jg_popup_overlay").click((function(){$("#windowCtrls").empty(),$("#jg_popup_b").empty(),$.jeegoopopup.close(),ConfigureExtensionWindow()})),$(window).on("keydown",(function(e){"Escape"==e.key&&($("#windowCtrls").empty(),$("#jg_popup_b").empty(),$.jeegoopopup.close(),ConfigureExtensionWindow())}))}function Confirm(e,t,i,n){$("#jg_popup_l").empty(),$("#jg_popup_b").empty(),$("#windowCtrls").empty(),$.jeegoopopup.close();var a="<div class=NoSelect>";a+='<div id="windowCtrls"><img id="closeImg" src="images/3_close.svg" title="Close" /></div>',a+='<div class=UiText style="padding: 10px" id=ConfirmMessageText>'+e+"</div>",a+="</div>",$.jeegoopopup.open({html:a,width:"260",height:"auto",center:!0,scrolling:"no",skinClass:"jg_popup_basic",contentClass:"confirmDelContact",overlay:!0,opacity:50,draggable:!0,resizable:!1,fadeIn:0}),$("#jg_popup_b").append("<div id=ConfDelContact><button id=ConfirmOkButton>"+lang.ok+"</button><button id=ConfirmCancelButton>"+lang.cancel+"</button></div>"),$("#ConfirmOkButton").click((function(){console.log("Confirm OK clicked"),i&&i()})),$("#ConfirmCancelButton").click((function(){console.log("Confirm Cancel clicked"),n&&n()})),$(window).resize((function(){$.jeegoopopup.center()})),$("#closeImg").click((function(){$.jeegoopopup.close(),$("#jg_popup_b").empty()})),$("#ConfirmOkButton").click((function(){$.jeegoopopup.close(),$("#jg_popup_b").empty()})),$("#ConfirmCancelButton").click((function(){$.jeegoopopup.close(),$("#jg_popup_b").empty()})),$("#jg_popup_overlay").click((function(){$.jeegoopopup.close(),$("#jg_popup_b").empty()})),$(window).on("keydown",(function(e){"Escape"==e.key&&($.jeegoopopup.close(),$("#jg_popup_b").empty())}))}function ConfirmConfigExtWindow(e,t,i,n){$("#jg_popup_l").empty(),$("#jg_popup_b").empty(),$("#windowCtrls").empty(),$.jeegoopopup.close();var a="<div class=NoSelect>";a+="<div id=windowCtrls><img id=closeImg src=images/3_close.svg title=Close /></div>",a+='<div class=UiText style="padding: 10px" id=ConfirmMessageText>'+e+"</div>",a+="</div>",$.jeegoopopup.open({html:a,width:"260",height:"auto",center:!0,scrolling:"no",skinClass:"jg_popup_basic",contentClass:"ConfCloseAccount",overlay:!0,opacity:50,draggable:!0,resizable:!1,fadeIn:0}),$("#jg_popup_b").append("<div id=ConfCloseAccount><button id=ConfirmOkButton>"+lang.close_user_account+"</button><button id=ConfirmCancelButton>"+lang.cancel+"</button></div>"),$("#ConfirmOkButton").click((function(){console.log("Confirm OK clicked"),i&&i()})),$("#ConfirmCancelButton").click((function(){console.log("Confirm Cancel clicked"),n&&n(),$("#windowCtrls").empty(),$("#jg_popup_b").empty(),$.jeegoopopup.close(),ConfigureExtensionWindow()})),$(window).resize((function(){$.jeegoopopup.center()})),$("#closeImg").click((function(){$("#jg_popup_b").empty(),$("#windowCtrls").empty(),$.jeegoopopup.close(),ConfigureExtensionWindow()}))}function Prompt(e,t,i,n,a,o,l,s){$("#jg_popup_l").empty(),$("#jg_popup_b").empty(),$("#windowCtrls").empty(),$.jeegoopopup.close();var r="<div class=NoSelect>";r+='<div id="windowCtrls"><img id="closeImg" src="images/3_close.svg" title="Close" /></div>',r+='<div class=UiText style="padding: 10px" id=PromptMessageText>',r+=e,r+='<div style="margin-top:10px">'+i+" : </div>",r+='<div style="margin-top:5px"><INPUT id=PromptValueField type='+a+' value="'+n+'" placeholder="'+o+'" style="width:98%"></div>',r+="</div>",r+="</div>",$.jeegoopopup.open({html:r,width:"260",height:"auto",center:!0,scrolling:"no",skinClass:"jg_popup_basic",contentClass:"confirmDelContact",overlay:!0,opacity:50,draggable:!0,resizable:!1,fadeIn:0}),$("#jg_popup_b").append('<div id=bottomButtons><button id=PromptOkButton style="width:80px">'+lang.ok+'</button>&nbsp;<button id=PromptCancelButton class=UiButton style="width:80px">'+lang.cancel+"</button></div>"),$("#PromptOkButton").click((function(){console.log("Prompt OK clicked, with value: "+$("#PromptValueField").val()),l&&l($("#PromptValueField").val())})),$("#PromptCancelButton").click((function(){console.log("Prompt Cancel clicked"),s&&s()})),$(window).resize((function(){$.jeegoopopup.center()})),$("#closeImg").click((function(){$.jeegoopopup.close(),$("#jg_popup_b").empty()})),$("#PromptOkButton").click((function(){$.jeegoopopup.close(),$("#jg_popup_b").empty()})),$("#PromptCancelButton").click((function(){$.jeegoopopup.close(),$("#jg_popup_b").empty()})),$("#jg_popup_overlay").click((function(){$.jeegoopopup.close(),$("#jg_popup_b").empty()})),$(window).on("keydown",(function(e){"Escape"==e.key&&($.jeegoopopup.close(),$("#jg_popup_b").empty())}))}function DetectDevices(){navigator.mediaDevices.enumerateDevices().then((function(e){HasVideoDevice=!1,HasAudioDevice=!1,HasSpeakerDevice=!1,AudioinputDevices=[],VideoinputDevices=[],SpeakerDevices=[];for(var t=0;t<e.length;++t)"audioinput"===e[t].kind?(HasAudioDevice=!0,AudioinputDevices.push(e[t])):"audiooutput"===e[t].kind?(HasSpeakerDevice=!0,SpeakerDevices.push(e[t])):"videoinput"===e[t].kind&&(HasVideoDevice=!0,VideoinputDevices.push(e[t]))})).catch((function(e){console.error("Error enumerating devices",e)}))}DetectDevices(),window.setInterval((function(){DetectDevices()}),1e4);