/* global webphone_api.$, common */ // Call page webphone_api._call = (function () { var calltype = ''; var callnumber = ''; var showcallfwd = false; // dislplay call forward option in menu: callforward csak bejovo hivas ring-nel var showignore = false; var hanguponchat = false; //-- bejovo hivasnal call ablakbol chat-et valaszt es ringing-ben van akkor hangup call var callmode = 0; // callmode: 0=call-audio, 1=call-audiovideo, 2=call-screenshare function onCreate (event) // called only once - bind events here { try{ if(webphone_api.common.CanLog(4)) { webphone_api.common.PutToDebugLog(4, "EVENT, _call: onCreate"); } webphone_api.$('#call_menu_ul').on('click', 'li', function(event) { MenuItemSelected(webphone_api.$(this).attr('id')); }); webphone_api.$("#btn_call_menu").on("click", function() { CreateOptionsMenu('#call_menu_ul'); }); webphone_api.$("#btn_call_menu").attr("title", webphone_api.stringres.get("hint_menu")); webphone_api.$("#btn_hangup").on("click", function() { if(webphone_api.common.CanLog(4)) { webphone_api.common.PutToDebugLog(4, 'EVENT, _call Hangup onclick'); } HangupCall(); }); webphone_api.$("#btn_accept").on("click", function() { if(webphone_api.common.CanLog(4)) { webphone_api.common.PutToDebugLog(4, 'EVENT, _call AcceptCall onclick'); } AcceptCall(true); }); webphone_api.$("#btn_reject").on("click", function() { webphone_api.common.PutToDebugLog(4, 'EVENT, _call RejectCall onclick'); RejectCall(true); }); webphone_api.$("#btn_ml_accept").on("click", function() { webphone_api.common.PutToDebugLog(4, 'EVENT, _call multiline Accept onclick'); AcceptCall(true); }); webphone_api.$("#btn_ml_reject").on("click", function() { webphone_api.common.PutToDebugLog(4, 'EVENT, _call RejectCallMultiline onclick'); RejectCallMultiline(true); }); webphone_api.$("#btn_ml_more").on("click", function() { webphone_api.common.PutToDebugLog(4, 'EVENT, _call multiline more onclick'); webphone_api.$('#btn_call_menu').click(); }); webphone_api.$("#btn_hangup").attr("title", webphone_api.stringres.get("hint_hangup")); webphone_api.$("#btn_accept").attr("title", webphone_api.stringres.get("hint_accept")); webphone_api.$("#btn_reject").attr("title", webphone_api.stringres.get("hint_reject")); webphone_api.$("#calledcaller").attr("title", webphone_api.stringres.get("hint_called")); webphone_api.$("#status_call").attr("title", webphone_api.stringres.get("hint_callstatus")); webphone_api.$("#call_duration").attr("title", webphone_api.stringres.get("hint_callduration")); //-- webphone_api.$("#btn_accept_end").attr("title", webphone_api.stringres.get("hint_accept_end")); //-- webphone_api.$("#btn_reject_ml").attr("title", webphone_api.stringres.get("hint_reject_new")); //-- webphone_api.$("#btn_accept_hold").attr("title", webphone_api.stringres.get("hint_accept_hold")); webphone_api.$("#btn_ml_accept").attr("title", webphone_api.stringres.get("hint_accept")); webphone_api.$("#btn_reject_ml").attr("title", webphone_api.stringres.get("hint_reject_new")); webphone_api.$("#btn_ml_more").attr("title", webphone_api.stringres.get("hint_more")); webphone_api.$("#btn_audiodevice").on("click", function() { webphone_api.common.PutToDebugLog(4, 'EVENT, _call webphone_audiodevice onclick'); webphone_api.devicepopup(); }); //-- var idx = 0; var timerid; webphone_api.$( window ).resize(function() // window resize handling { if (webphone_api.$.mobile.activePage.attr('id') === 'page_call') { if ( !webphone_api.common.isNull(timerid) ) { clearTimeout(timerid); } timerid = setTimeout(function () { AddCallFunctions(false); MeasureCall(); //-- idx++; //-- webphone_api.common.PutToDebugLog(2, 'idx = ' + idx); }, 100); } }); webphone_api.$("#numpad_btn_dp_1").on("click", function() { SendDtmf('1'); //-- webphone_api.play(1, 'sound/rtc_ringtone.wav', false, true); //-- webphone_api.common.PrintCallSessions(); }); webphone_api.$("#numpad_btn_dp_2").on("click", function() { SendDtmf('2'); }); webphone_api.$("#numpad_btn_dp_3").on("click", function() { SendDtmf('3'); }); webphone_api.$("#numpad_btn_dp_4").on("click", function() { SendDtmf('4'); }); webphone_api.$("#numpad_btn_dp_5").on("click", function() { SendDtmf('5'); }); webphone_api.$("#numpad_btn_dp_6").on("click", function() { SendDtmf('6'); }); webphone_api.$("#numpad_btn_dp_7").on("click", function() { SendDtmf('7'); }); webphone_api.$("#numpad_btn_dp_8").on("click", function() { SendDtmf('8'); }); webphone_api.$("#numpad_btn_dp_9").on("click", function() { SendDtmf('9'); }); webphone_api.$("#numpad_btn_dp_0").on("click", function() { SendDtmf('0'); }); webphone_api.$("#numpad_btn_dp_ast").on("click", function() { SendDtmf('*'); }); webphone_api.$("#numpad_btn_dp_diez").on("click", function() { SendDtmf('#'); }); webphone_api.$( "#page_call" ).keypress(function( event ) { HandleKeyPress(event); }); webphone_api.$( "#page_call" ).keydown(function(event) { try{ var charCode = (event.keyCode) ? event.keyCode : event.which; // workaround for firefox if (charCode == ctrlKey) { ctrlDown = true; return true; } if (charCode == altKey) { altDown = true; return true; } if (charCode == shiftKey) { shiftDown = true; return true; } if (event.ctrlKey || event.metaKey || event.altKey) { specialKeyDown = true; return true; } if (charCode === 13) // enter { var active_popups = webphone_api.$.mobile.activePage.find(".messagePopup"); if (!webphone_api.common.isNull(active_popups) && active_popups.length > 0) { webphone_api.$("#adialog_positive").click(); event.preventDefault(); } else if (webphone_api.$('#acceptreject_layout').is(':visible')) // acceptreject_layout check is visible { webphone_api.$("#btn_accept").click(); event.preventDefault(); } else if (webphone_api.$('#mline_layout').is(':visible')) // acceptreject_layout check is visible { webphone_api.$("#btn_ml_accept").click(); event.preventDefault(); } } else if (charCode === 27 || charCode === 8) // ESC or Backspace { var active_popups = webphone_api.$.mobile.activePage.find(".messagePopup"); if (!webphone_api.common.isNull(active_popups) && active_popups.length > 0) { if(charCode === 27) { webphone_api.$("#adialog_negative").click(); event.preventDefault(); } } else if (webphone_api.$('#acceptreject_layout').is(':visible')) // acceptreject_layout check is visible { webphone_api.$("#btn_reject").click(); event.preventDefault(); } else if (webphone_api.$('#mline_layout').is(':visible')) // acceptreject_layout check is visible { webphone_api.$("#btn_ml_reject").click(); event.preventDefault(); } else if (webphone_api.$('#hangup_layout').is(':visible')) // acceptreject_layout check is visible { webphone_api.$("#btn_hangup").click(); event.preventDefault(); } } else { return; } } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: keydown", err); } }); //-- webphone_api.$( "#volumein" ).slider({ //-- create: function( event, ui ) { alert('slidecreate1'); } //-- }); //-- webphone_api.$( "#volumein" ).on( "slidecreate", function( event, ui ) //-- { //-- var invalue = webphone_api.common.GetParameter('volumein'); //-- if (webphone_api.common.isNull(invalue) || invalue.length < 1 || !webphone_api.common.IsNumber(invalue)) //-- { //-- invalue = '50'; //-- } //-- this.value = invalue; //-- }); } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: onCreate", err); } } var ctrlDown = false; var altDown = false; var shiftDown = false; var specialKeyDown = false; var ctrlKey = 17, vKey = 86, cKey = 67, altKey = 18, shiftKey = 16; // keypresses during call should send dtmf function HandleKeyPress(event) { try{ //-- don't catch input if a popup is open, because popups can have input boxes, and we won't be able to write into them if (webphone_api.$(".ui-page-active .ui-popup-active").length > 0) { return false; } var charCode = (event.keyCode) ? event.keyCode : event.which; // workaround for firefox // listen for control key, so we don't catch ctrl+c, ctrl+v if (ctrlDown || altDown || shiftDown || specialKeyDown || charCode === 8) { return false; } if ((charCode >= 48 && charCode <= 57) || charCode === 42 || charCode === 35) { SendDtmf(String.fromCharCode(charCode)); } return false; } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: HandleKeyPress", err); } } function onStart(event) { try{ if(webphone_api.common.CanLog(4)) { webphone_api.common.PutToDebugLog(4, "EVENT, _call: onStart"); } webphone_api.global.isCallStarted = true; webphone_api.global.hangupPressedCount = 0; MeasureCall(); // resolve window height size change if (!webphone_api.common.isNull(document.getElementById("app_name_call")) && webphone_api.common.GetParameter('devicetype') !== webphone_api.common.DEVICE_WIN_SOFTPHONE()) { document.getElementById("app_name_call").innerHTML = webphone_api.common.GetBrandName(); } webphone_api.$(".separator_line_thick").css( 'background-color', webphone_api.common.HoverCalc(webphone_api.common.getBgColor('#call_header'), -30) ); webphone_api.$('#btn_hangup_img').attr('src', '' + webphone_api.common.GetElementSource() + 'images/btn_hangup_txt.png'); if (!webphone_api.common.isNull(document.getElementById('btn_audiodevice'))) { document.getElementById('btn_audiodevice').innerHTML = webphone_api.stringres.get('btn_audio_device'); } if (webphone_api.common.GetParameterBool('displayvolumecontrols', false) === true) { webphone_api.$('#volumecontrols').show(); } if (webphone_api.common.GetParameterBool('displayaudiodevice', false) === true) { webphone_api.$('#audiodevice_container').show(); } // set volume controls values var invalue = webphone_api.common.GetParameter('volumein'); if (webphone_api.common.isNull(invalue) || invalue.length < 1 || !webphone_api.common.IsNumber(invalue)) { invalue = '50'; } webphone_api.$("#volumein").val(invalue); webphone_api.$("#volumein").slider('refresh'); var outvalue = webphone_api.common.GetParameter('volumeout'); if (webphone_api.common.isNull(outvalue) || outvalue.length < 1 || !webphone_api.common.IsNumber(outvalue)) { outvalue = '50'; } webphone_api.$("#volumeout").val(outvalue); webphone_api.$("#volumeout").slider('refresh'); // handle volume control on change webphone_api.$( "#volumein" ).on( "slidestop", function( event, ui ) { var setval = this.value; if (webphone_api.common.isNull(setval) || setval.length < 1) { return; } setval = webphone_api.common.Trim(setval); webphone_api.common.SaveParameter('volumein', setval); webphone_api.common.PutToDebugLog(5, 'EVENT, volumein slidestop: ' + this.value); // -0 for the recording (microphone) audio device // -1 for the playback (speaker) audio device // -2 for the ringback (speaker) audio device webphone_api.setvolume(0, setval); }); webphone_api.$( "#volumeout" ).on( "slidestop", function( event, ui ) { var setval = this.value; if (webphone_api.common.isNull(setval) || setval.length < 1) { return; } setval = webphone_api.common.Trim(setval); webphone_api.common.SaveParameter('volumeout', setval); webphone_api.common.PutToDebugLog(5, 'EVENT, volumeout slidestop: ' + this.value); webphone_api.setvolume(1, setval); }); calltype = webphone_api.common.GetIntentParam(webphone_api.global.intentcall, 'calltype'); var callmodestr = webphone_api.common.GetIntentParam(webphone_api.global.intentcall, 'callmode'); if (!webphone_api.common.isNull(callmodestr) && webphone_api.common.IsNumber(callmodestr)) { callmode = webphone_api.common.StrToInt(callmodestr); } webphone_api.global.callName = ''; // reset webphone_api.global.callName callnumber = webphone_api.common.GetIntentParam(webphone_api.global.intentcall, 'number'); webphone_api.global.callName = webphone_api.common.GetIntentParam(webphone_api.global.intentcall, 'name'); if (webphone_api.common.isNull(webphone_api.global.callName) || webphone_api.global.callName.length < 1) { webphone_api.global.callName = webphone_api.common.GetContactNameFromNumber(callnumber); } var telsearchurl = webphone_api.common.GetParameter2('telsearchurl'); if (webphone_api.common.isNull(telsearchurl) || telsearchurl.length < 3) { telsearchurl = webphone_api.parameters['telsearchurl']; } if (!webphone_api.common.isNull(telsearchurl) && telsearchurl.length > 3 && (webphone_api.global.callName.length < 1 || webphone_api.global.callName === callnumber)) { webphone_api.gettelsearchname(callnumber, function (recname) { if (webphone_api.common.isNull(recname) || recname.length < 2 || recname.length > 60) { return; } webphone_api.global.telsearchname = recname; webphone_api.global.callName = recname; peerdetails = webphone_api.global.callName + '
' + callnumber; if(webphone_api.$('#page_call_peer_details').html() != peerdetails) { webphone_api.common.PutToDebugLog(5, "EVENT, caller-id display A: " + peerdetails); webphone_api.$('#page_call_peer_details').html(peerdetails); } peerdetails = webphone_api.global.callName + ' (' + callnumber + ') '; webphone_api.$('#calledcaller').html(peerdetails); }); } // don't display username and name, if both are the same var peerdetails = ''; if (webphone_api.global.callName !== callnumber) { peerdetails = webphone_api.global.callName + ' (' + callnumber + ') '; webphone_api.$('#calledcaller').html(peerdetails); }else { peerdetails = callnumber; webphone_api.$('#calledcaller').html(peerdetails); } NormalizeDisplayDetails(peerdetails); if (calltype === "incoming") { webphone_api.GetIncomingDisplay(function (disp) { if (!webphone_api.common.isNull(disp) && disp.length > 0 && peerdetails.indexOf(disp) < 0) { disp = disp.replace('\n', ''); peerdetails = disp + ' ' + peerdetails; } NormalizeDisplayDetails(peerdetails); }); } // handle hangup / acceptreject layouts (icoming / outgoing call) if (calltype === "outgoing") { AddCallFunctions(false); webphone_api.$('#acceptreject_layout').hide(); webphone_api.$('#hangup_layout').show(); webphone_api.$('#callfunctions_layout').show(); //-- if (!webphone_api.global.isdebugversion) //-- { //-- webphone_api.call(-1, callnumber); setTimeout(function () { var ratinguri = webphone_api.common.GetParameter('ratingrequest'); if ( //OPSSTART webphone_api.common.Glbr() === true && //OPSEND !webphone_api.common.isNull(ratinguri) && ratinguri.length > 2 && !webphone_api.common.isNull(callnumber) && callnumber.length > 0 && (webphone_api.common.isNull(webphone_api.global.rating) || (webphone_api.global.rating).length < 1) // means rating is not received from signaling ) { webphone_api.needratingrequest(function (val) // API_NeedRatingRequest { if (val === true) { webphone_api.common.UriParser(ratinguri, '', callnumber, '', '', 'getrating'); } }); } }, 4000); //-- } } if (calltype === "incoming") { if (webphone_api.common.GetParameterBool('autoaccept', false) === true || webphone_api.common.GetParameterInt('enableautoaccept', 1) === 3) { webphone_api.$('#hangup_layout').show(); webphone_api.$('#callfunctions_layout').show(); webphone_api.$('#acceptreject_layout').hide(); }else { //-- normal call AddCallFunctions(true); showignore = true; hanguponchat = true; webphone_api.$('#hangup_layout').hide(); webphone_api.$('#callfunctions_layout').hide(); webphone_api.$('#acceptreject_layout').show(); } } if (callmode > 0 && webphone_api.common.CanIUseVideo() === true) { webphone_api.$('#contact_details').hide(); webphone_api.$('#video_container').show(); MeasureCall(); setTimeout(function () { MeasureCall(); }, 200); if (webphone_api.common.GetParameterInt('softphonevideomode', 0) === 1) // hide Full Screeen button in windows softphone, because it's not working { webphone_api.$('#div_video_fullscreen_button').hide(); } webphone_api.common.PutToDebugLog(2, 'EVENT, call onstart video container displayed'); } if (webphone_api.global.isdebugversion === true) { webphone_api.$('#mline_layout').show(); } MeasureCall(); setTimeout(function () { MeasureCall(); }, 200); } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: onStart", err); } } // display other party details // search details and don't show the same string twice: for example caller or display name function NormalizeDisplayDetails(det_in) { try{ if (webphone_api.common.isNull(det_in) || det_in.length < 1) { if(webphone_api.$('#page_call_peer_details').html().length > 0) { webphone_api.common.PutToDebugLog(5, "EVENT, caller-id display clear A"); webphone_api.$('#page_call_peer_details').html(''); } return; } if (det_in.indexOf(' ') < 0) { if(webphone_api.$('#page_call_peer_details').html() != det_in) { webphone_api.common.PutToDebugLog(5, "EVENT, caller-id display B: " + det_in); webphone_api.$('#page_call_peer_details').html(det_in); } return; } det_in = webphone_api.common.ReplaceAll(det_in, '-', ' '); var det = ''; var darr = det_in.split(' '); var idx = 0;// remove any empty/invalid entries while (idx < darr.length) { if (webphone_api.common.isNull(darr[idx]) || webphone_api.common.Trim(darr[idx]).length < 1) { darr.splice(idx, 1); }else { idx++; } } // returns only unique elements darr = webphone_api.common.UniqueArray(darr); var middle = Math.ceil(darr.length / 2); for (var i = 0; i < darr.length; i++) { if (webphone_api.common.isNull(darr[i]) || webphone_api.common.Trim(darr[i]).length < 1) { continue; } if (det.indexOf(darr[i]) < 0) { if (det.length > 0) { if (i === middle) { det = det + '
'; }else { det = det + ' '; } } det = det + darr[i]; } } if(webphone_api.$('#page_call_peer_details').html() != det) { webphone_api.common.PutToDebugLog(5, "EVENT, caller-id display C: " + det); webphone_api.$('#page_call_peer_details').html(det); } } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: NormalizeDisplayDetails", err); } } function OnNewIncomingCall() { try{ webphone_api.common.PutToDebugLog(5, 'EVENT, _call handle OnNewIncomingCall on line: ' + webphone_api.global.aline.toString()); var ep = webphone_api.common.GetEndpoint(1025,webphone_api.global.aline, '', '', '', false); if (webphone_api.common.isNull(ep) || ep.length < 5) { webphone_api.common.PutToDebugLog(3, 'WARNING, _call OnNewIncomingCall: ep is NULL for line A: ' + webphone_api.global.aline.toString()); //handle bug / workaround var curraline = webphone_api.common.GetFreeLine(); webphone_api.common.SetALineInternal(curraline,51); ep = webphone_api.common.GetEndpoint(1026,webphone_api.global.aline, '', '', '', false); if (webphone_api.common.isNull(ep) || ep.length < 5) { webphone_api.common.PutToDebugLog(2, 'ERROR, _call OnNewIncomingCall: ep is NULL for line B: ' + webphone_api.global.aline.toString()); webphone_api.common.LogLines(); return; } } var innr = ep[webphone_api.common.EP_DESTNR]; webphone_api.$('#mline_layout').show(); if (webphone_api.$('#hangup_layout').is(':visible')) { webphone_api.$('#hangup_layout').hide(); } if (webphone_api.$('#acceptreject_layout').is(':visible')) { webphone_api.$('#acceptreject_layout').hide(); } webphone_api.common.RefreshInfo(1); setTimeout(function () { MeasureCall(); }, 200); } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: OnNewIncomingCall", err); } } function RejectCallMultiline(callapi) { try{ showignore = false; hanguponchat = false; //webphone_api.common.PutToDebugLog(5, "EVENT,rrrrrr C1"); webphone_api.$('#mline_layout').hide(); webphone_api.$('#callfunctions_layout').show(); webphone_api.$('#hangup_layout').show(); setTimeout(function () { MeasureCall(); }, 200); webphone_api.global.acceptReject = true; //-- webphone_api.global.hangupPressedCount = 1; //find last incoming call to reject; because maybe user changed line, but even then reject the incoming line if (callapi) { var linetoreject = webphone_api.global.aline; // 1=outgoing, 2=incoming var setuptime = 0; /* NEM LOGIKUS !!!! for (var i = 0; i < webphone_api.global.ep.length; i++) { if (webphone_api.common.isNull(webphone_api.global.ep[i]) || webphone_api.global.ep[i].length < 5) { continue; } if (webphone_api.global.ep[i][webphone_api.common.EP_INCOMING] !== '2') { continue; } var stime = webphone_api.common.StrToInt(webphone_api.global.ep[i][webphone_api.common.EP_SETUPTIME]); if (!webphone_api.common.isNull(stime) && webphone_api.common.IsNumber(stime) && stime > setuptime) { setuptime = stime; linetoreject = webphone_api.global.ep[i][webphone_api.common.EP_LINE]; } } */ webphone_api.plhandler.Reject(linetoreject,14); // update lines (remove line and set last active line) for (var i = 0; i < webphone_api.global.ep.length; i++) { if (webphone_api.common.isNull(webphone_api.global.ep[i]) || webphone_api.global.ep[i].length < 5) { continue; } var lntmp = webphone_api.global.ep[i][webphone_api.common.EP_LINE]; if (lntmp == webphone_api.global.aline) { webphone_api.global.ep[i][webphone_api.common.EP_FLAGDEL] = 'true'; break; } } // find last active line for (var i = webphone_api.global.ep.length - 1; i >= 0; i--) { if (webphone_api.common.isNull(webphone_api.global.ep[i]) || webphone_api.global.ep[i].length < 5) { continue; } if (webphone_api.global.ep[i][webphone_api.common.EP_FLAGDEL] == 'false') { // found one active line, set it webphone_api.common.PutToDebugLog(2, 'EVENT, SetLine called from RejectCallMultiline'); webphone_api.setline(webphone_api.common.StrToInt(webphone_api.global.ep[i][webphone_api.common.EP_LINE])); break; } } //-- UpdateLineUI(); setTimeout(function () { webphone_api.common.RefreshInfo(2); }, 400); } callmode = 0; } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: RejectCallMultiline", err); } } function AcceptHold(callapi) { try{ webphone_api.global.acceptReject = true; AddCallFunctions(false); showignore = false; hanguponchat = false; //webphone_api.common.PutToDebugLog(5, "EVENT,rrrrrr C2"); webphone_api.$('#mline_layout').hide(); webphone_api.$('#hangup_layout').show(); webphone_api.$('#callfunctions_layout').show(); setTimeout(function () { MeasureCall(); }, 200); if (callapi) { // find previous active line to put that call on hold var prevline = -10; var setuptimeTmp = 0; if (!webphone_api.common.isNull(webphone_api.global.ep)) { for (var i = 0; i < webphone_api.global.ep.length; i++) { var eptmp = webphone_api.global.ep[i]; if (webphone_api.common.isNull(eptmp) || eptmp.length < 1) { continue; } if (eptmp[webphone_api.common.EP_FLAGDEL] === 'true') { continue; } if (!webphone_api.common.isNull(eptmp[webphone_api.common.EP_LINE]) && webphone_api.common.IsNumber(eptmp[webphone_api.common.EP_LINE]) === true) { if (setuptimeTmp < webphone_api.common.StrToInt(eptmp[webphone_api.common.EP_SETUPTIME])) { prevline = webphone_api.common.StrToInt(eptmp[webphone_api.common.EP_LINE]); } } } } webphone_api.common.PutToDebugLog(2, 'EVENT, mlogic API_Accept AcceptHold'); webphone_api.accept(webphone_api.global.aline); if (prevline > 0) { webphone_api.common.PutToDebugLog(2, 'EVENT, API_Hold mainlogic hold call from cl AcceptHold; ' + ' on line: ' + prevline ); webphone_api.plhandler.Hold(true, prevline, true); setTimeout(function () { AddCallFunctions(false); }, 250); webphone_api.common.PutToDebugLog(2, 'EVENT, AcceptHold hold finished'); } } } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: AcceptHold", err); } } function AcceptEnd(callapi) { try{ webphone_api.global.acceptReject = true; AddCallFunctions(false); showignore = false; hanguponchat = false; //webphone_api.common.PutToDebugLog(5, "EVENT,rrrrrr C3"); webphone_api.$('#mline_layout').hide(); webphone_api.$('#hangup_layout').show(); webphone_api.$('#callfunctions_layout').show(); setTimeout(function () { MeasureCall(); }, 200); if (callapi) { // find previous active line to end that call var prevline = -10; var setuptimeTmp = 0; if (!webphone_api.common.isNull(webphone_api.global.ep)) { for (var i = 0; i < webphone_api.global.ep.length; i++) { var eptmp = webphone_api.global.ep[i]; if (webphone_api.common.isNull(eptmp) || eptmp.length < 1) { continue; } if (eptmp[webphone_api.common.EP_FLAGDEL] === 'true') { continue; } if (!webphone_api.common.isNull(eptmp[webphone_api.common.EP_LINE]) && webphone_api.common.IsNumber(eptmp[webphone_api.common.EP_LINE]) === true) { if (setuptimeTmp < webphone_api.common.StrToInt(eptmp[webphone_api.common.EP_SETUPTIME])) { prevline = webphone_api.common.StrToInt(eptmp[webphone_api.common.EP_LINE]); } } } } webphone_api.common.PutToDebugLog(2, 'EVENT, AcceptEnd called'); webphone_api.plhandler.Accept(webphone_api.global.aline); if (prevline > 0) { webphone_api.common.PutToDebugLog(2, 'EVENT, hangup AcceptEnd'); webphone_api.plhandler.Hangup(prevline, true); } } } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: AcceptEnd", err); } } function MeasureCall() // resolve window height size change { try{ //-- var pgh = webphone_api.common.GetDeviceHeight() - 1; webphone_api.$('#page_call').css('min-height', pgh + 'px'); // must be set when softphone is skin in div webphone_api.$('#page_call').css('min-height', 'auto'); // must be set when softphone is skin in div var volumevisible = false; var audiodevicevisible = false; if (webphone_api.$('#volumecontrols').is(':visible')) { volumevisible = true; } if (webphone_api.$('#audiodevice_container').is(':visible')) { audiodevicevisible = true; } webphone_api.$("#page_call_content").height(webphone_api.common.GetDeviceHeight() - webphone_api.$("#call_header").height() -webphone_api.$('.separator_line_thick').height()); var pageHeight = webphone_api.common.GetDeviceHeight() - webphone_api.$("#call_header").height(); webphone_api.$('#page_call_content').height(pageHeight - 3); var max_vid_height = pageHeight - 3; var numpadHeight = pageHeight - webphone_api.$("#hangup_layout").height() - webphone_api.$("#callfunctions_layout").height() - webphone_api.$(".separator_color_bg").height() - 12; if (webphone_api.$('#mlcontainer').is(':visible')) { numpadHeight = numpadHeight - webphone_api.$('#mlcontainer').height() - 2; } var rowHeight = Math.floor(numpadHeight / 5); webphone_api.$("#numpad_btn_grid .ui-btn").height(rowHeight); rowHeight = rowHeight - 6; webphone_api.$("#numpad_number_container").height(rowHeight); webphone_api.$("#numpad_number_container").css("line-height", rowHeight + "px"); if (calltype === "outgoing") { pageHeight = pageHeight - webphone_api.$("#hangup_layout").height() - webphone_api.$("#callfunctions_layout").height() - webphone_api.$(".separator_color_bg").height() - 1; if (volumevisible) { pageHeight = pageHeight - webphone_api.$("#volumecontrols").height(); } if (audiodevicevisible) { pageHeight = pageHeight - webphone_api.$("#audiodevice_container").height(); } pageHeight = pageHeight - webphone_api.$("#mlcontainer").height() - webphone_api.$(".separator_line_thick").height(); pageHeight = Math.floor(pageHeight); webphone_api.$("#contact_image").height( pageHeight ); //-- webphone_api.$("#contact_image").css("line-height", pageHeight + "px"); var mTop = (pageHeight - webphone_api.$("#contact_image_img").height() - webphone_api.$("#page_call_additional_info").height()) / 2; webphone_api.$("#contact_image_img").css("margin-top", mTop + "px"); } if (calltype === "incoming") { if (document.getElementById('acceptreject_layout').style.display === 'block') { pageHeight = pageHeight - webphone_api.$("#acceptreject_layout").height() - 3; if (volumevisible) { pageHeight = pageHeight - webphone_api.$("#volumecontrols").height(); } if (audiodevicevisible) { pageHeight = pageHeight - webphone_api.$("#audiodevice_container").height(); } pageHeight = pageHeight - webphone_api.$("#mlcontainer").height() - webphone_api.$(".separator_line_thick").height(); pageHeight = Math.floor(pageHeight); }else { pageHeight = pageHeight - webphone_api.$("#hangup_layout").height() - webphone_api.$("#callfunctions_layout").height() - webphone_api.$(".separator_color_bg").height() - 1; if (volumevisible) { pageHeight = pageHeight - webphone_api.$("#volumecontrols").height(); } if (audiodevicevisible) { pageHeight = pageHeight - webphone_api.$("#audiodevice_container").height(); } pageHeight = pageHeight - webphone_api.$("#mlcontainer").height() - webphone_api.$(".separator_line_thick").height(); pageHeight = Math.floor(pageHeight); } webphone_api.$("#contact_image").height( pageHeight ); //-- webphone_api.$("#contact_image").css("line-height", pageHeight + "px"); var mTop = (pageHeight - webphone_api.$("#contact_image_img").height() - webphone_api.$("#page_call_additional_info").height()) / 2; webphone_api.$("#contact_image_img").css("margin-top", mTop + "px"); } var brandW = Math.floor(webphone_api.common.GetDeviceWidth() / 4.6); webphone_api.$("#app_name_call").width(brandW); // handle video container height/aspect ratio if (webphone_api.$('#video_container').is(':visible')) { var vh = webphone_api.$('#video_remote').height(); if (!webphone_api.common.isNull(vh) && webphone_api.common.IsNumber(vh)) { vh = vh - 55; // space for full screen button (for some reason video_container reports invalid height value so we have to use video remote DIV) max_vid_height = max_vid_height - webphone_api.$("#hangup_layout").height() - webphone_api.$("#callfunctions_layout").height() - webphone_api.$(".separator_color_bg").height() - 1; //alert('webphone_api.$("#hangup_layout").height(): ' + webphone_api.$("#hangup_layout").height() + '\nj$("#callfunctions_layout").height(): ' + webphone_api.$("#callfunctions_layout").height() + '\nmax_vid_height: ' + max_vid_height); if (vh > max_vid_height) { webphone_api.$('#video_container').height(max_vid_height); webphone_api.$('#video_remote').height(max_vid_height - 55); } } } } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: MeasureCall", err); } } function HangupCall() { try{ // reset mute, hold, speaker buttons state //-- webphone_api.$('#mute_status').removeClass("callfunc_status_on"); //-- webphone_api.$('#hold_status').removeClass("callfunc_status_on"); //-- webphone_api.$('#speaker_status').removeClass("callfunc_status_on"); webphone_api.global.dontshowdiscreason = true; if (webphone_api.common.GetNrOfActiveCalls() < 2) { webphone_api.global.hangupPressedCount++; } if(webphone_api.common.CanLog(4)) { webphone_api.common.PutToDebugLog(4, 'EVENT, _call HangupCall'); } if (webphone_api.global.hangupPressedCount < 2) { if (webphone_api.common.GetNrOfActiveCalls() < 2 && (webphone_api.common.isNull(webphone_api.global.waiting_conf_numbers) || webphone_api.global.waiting_conf_numbers.length < 1) && webphone_api.global.dontshow_closecall === false) { webphone_api.$('#callfunctions_layout').hide(); webphone_api.$('#btn_hangup_img').attr('src', '' + webphone_api.common.GetElementSource() + 'images/btn_close_txt.png'); webphone_api.$("#btn_hangup").attr("title", webphone_api.stringres.get("hint_closecall")); } webphone_api.hangup(); //-- UpdateLineUI(); setTimeout(function () { webphone_api.common.RefreshInfo(3); }, 400); } else if (webphone_api.global.hangupPressedCount > 1) { webphone_api.hangup(); webphone_api.$.mobile.back(); webphone_api.global.hangupPressedCount = 0; } callmode = 0; } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: HangupCall", err); } } function AcceptCall(callapi) { var lastoop = 0; try{ lastoop = 1; webphone_api.global.acceptReject = true; lastoop = 2; AddCallFunctions(false); lastoop = 3; showignore = false; hanguponchat = false; lastoop = 4; try{ lastoop = 11; //webphone_api.common.PutToDebugLog(5, "EVENT,rrrrrr C4"); webphone_api.$('#mline_layout').hide(); lastoop = 12; webphone_api.$('#acceptreject_layout').hide(); lastoop = 13; webphone_api.$('#hangup_layout').show(); lastoop = 14; webphone_api.$('#callfunctions_layout').show(); } catch(ee) { webphone_api.common.PutToDebugLogWarning(2, "_call: AcceptCallInternal "+lastoop.toString(), ee); } lastoop = 5; setTimeout(function () { lastoop = 6; MeasureCall(); lastoop = 7; }, 200); //-- CallfunctionUsage(); TODO: implement lastoop = 8; if (callapi) { lastoop = 9; webphone_api.accept(-2); } } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: AcceptCall "+lastoop.toString(), err); } } function RejectCall(callapi) { try{ showignore = false; hanguponchat = false; //webphone_api.common.PutToDebugLog(5, "EVENT,rrrrrr C5"); webphone_api.$('#mline_layout').hide(); webphone_api.$('#acceptreject_layout').hide(); if (webphone_api.common.GetNrOfActiveCalls() < 2) { webphone_api.$('#callfunctions_layout').hide(); } webphone_api.$('#hangup_layout').show(); setTimeout(function () { MeasureCall(); }, 200); webphone_api.global.acceptReject = true; webphone_api.global.hangupPressedCount = 1; if (callapi) { webphone_api.reject(-2,15); } callmode = 0; } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: RejectCall", err); } } function SendDtmf(numChar) { try{ webphone_api.common.PutToDebugLog(5,"EVENT, _call SendDtmf: " + numChar); webphone_api.dtmf(numChar, -1); var currNumVal = webphone_api.$('#numpad_number').html(); if (webphone_api.common.isNull(currNumVal)) { currNumVal = ''; } if (currNumVal.length > 18) { currNumVal = currNumVal.substring(10, currNumVal.length) + ' '; } webphone_api.$('#numpad_number').html(currNumVal + numChar); } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: SendDtmf", err); } } function CloseCall() { try{ if(webphone_api.common.CanLog(4)) { webphone_api.common.PutToDebugLog(3, 'EVENT, _call CloseCall'); } webphone_api.$.mobile.back(); } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: CloseCall", err); } } // show close button if the caller hangs up before it is accepted or rejected function OnCallerHangup() //--TODO: { try{ //-- if (isVideoOn) VideoOnPause(); // stop video webphone_api.global.hangupPressedCount = 1; } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: OnCallerHangup", err); } } var lastBtns = ''; function UpdateLineButtons(fromcode) { try{ if (webphone_api.common.isNull(fromcode)) fromcode = 0; //webphone_api.common.PutToDebugLog(5, "EVENT,rrrrrr A0 "+fromcode.toString()); if (webphone_api.common.IsSDK() === true) { return; } var mlcont = document.getElementById('mlcontainer'); if (webphone_api.common.isNull(mlcont)) { return; } var ml_btns = document.getElementById('ml_buttons'); if (webphone_api.common.isNull(ml_btns)) { return; } if (webphone_api.common.isNull(webphone_api.global.ep) || webphone_api.global.ep.length < 1) { return; } var template = '' + ''; var buttonIds = []; var currBtns = ''; for (var i = 0; i < webphone_api.global.ep.length; i++) { var item = webphone_api.global.ep[i]; if (webphone_api.common.isNull(item) || item.length < 1) { continue; } var lntmp = item[webphone_api.common.EP_LINE]; if (webphone_api.common.isNull(lntmp) || lntmp.length < 1 || webphone_api.common.IsNumber(lntmp) === false) { continue; } var iline = webphone_api.common.StrToInt(lntmp); var isActive = ''; if (webphone_api.global.aline == iline) { isActive = 'line_status_on'; } var btn = webphone_api.common.ReplaceAll(template, '[LINENR]', iline.toString()); btn = btn.replace('[ISACTIVE]', isActive); currBtns += btn; buttonIds.push(iline.toString()); } if (currBtns === lastBtns) { //webphone_api.common.PutToDebugLog(5, "EVENT,rrrrrr A1 "+currBtns); return; }else { lastBtns = currBtns; } ml_btns.innerHTML = currBtns; for (var i = 0; i < buttonIds.length; i++) { webphone_api.$('#btn_line_' + buttonIds[i]).off('click'); webphone_api.$('#btn_line_' + buttonIds[i]).on('click', function (e) { LineCliked(webphone_api.$(this).attr('id')); }); } if (buttonIds.length > 1) // display buttons only if there are at least 2 lines { if (mlcont.style.display === 'none') { mlcont.style.display = 'block'; } }else { ml_btns.innerHTML = ''; mlcont.style.display = 'none'; } if(fromcode < 1) fromcode = 20; webphone_api.common.RefreshInfo(fromcode); MeasureCall(); } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: UpdateLineButtons", err); } } function LineCliked(id) { try{ if (webphone_api.common.IsSDK() === true) { return; } if (webphone_api.common.isNull(id) || id.indexOf('btn_line_') !== 0) { webphone_api.common.PutToDebugLog(2, 'ERROR, _call: LineCliked invalid id: ' + id); return; } id = id.replace('btn_line_', ''); var line = webphone_api.common.StrToInt(id); webphone_api.common.PutToDebugLog(1, 'EVENT, Line ' + line.toString() + ' selected by user'); webphone_api.setline(line); // defmute: 0=both, 1=mute out (speakers), 2=mute in (microphone), 3=both, 4=both, 5=disable mute var mutedirection = webphone_api.common.GetParameterInt('defmute', 0); if (mutedirection === 3 || mutedirection === 4) mutedirection = 0; var automute = webphone_api.common.GetParameterInt('automute', 0); var autohold = webphone_api.common.GetParameterInt('autohold', 0); for (var i = 0; i < webphone_api.global.ep.length; i++) { var item = webphone_api.global.ep[i]; if (webphone_api.common.isNull(item) || item.length < 1) { continue; } var lntmp = item[webphone_api.common.EP_LINE]; if (webphone_api.common.isNull(lntmp) || lntmp.length < 1 || webphone_api.common.IsNumber(lntmp) === false) { continue; } var iline = webphone_api.common.StrToInt(lntmp); // handle automute/autohold 4=on other line button click //-- ha az automute és/vagy autohold 4-re van állitva, akkor kezelni kéne a vissza váltás –t is (amelyik line –ra váltunk, arra kell unhold/unmute). //--if (webphone_api.common.getuseengine() === webphone_api.global.ENGINE_WEBRTC) //--{ if (webphone_api.global.aline == iline) { if (automute >= 4) { if (item[webphone_api.common.EP_MUTESTATE] == 'true') // if is muted { // call directly to engine API files to be able to pass exact line webphone_api.common.PutToDebugLog(2, 'EVENT, EVENT, USER, automute, API_MuteEx, false on line: ' + iline + '; dest: ' + item[webphone_api.common.EP_DESTNR]); if (webphone_api.common.getuseengine() === webphone_api.global.ENGINE_WEBRTC) { webphone_api.webrtcapi.SipToggleMute(false, mutedirection, iline); } else if (webphone_api.common.GetParameter('devicetype') === webphone_api.common.DEVICE_WIN_SOFTPHONE() || webphone_api.common.getuseengine() === webphone_api.global.ENGINE_SERVICE) { webphone_api.common.WinAPI('API_MuteEx', null, iline, false, mutedirection); } else if (webphone_api.common.getuseengine() === webphone_api.global.ENGINE_JAVA) { webphone_api.webphone.MuteEx(iline, false, mutedirection); } webphone_api.global.ep[i][webphone_api.common.EP_MUTESTATE] = 'false'; } } if (autohold >= 4) { if (item[webphone_api.common.EP_HOLDSTATE] == 'true') // if is on hold { webphone_api.common.PutToDebugLog(2, 'EVENT, EVENT, USER, autohold, API_Hold mainlogic, false on line: ' + iline + '; dest: ' + item[webphone_api.common.EP_DESTNR]); if (webphone_api.common.getuseengine() === webphone_api.global.ENGINE_WEBRTC) { if(webphone_api.webrtcapi.SipToggleHoldResume(false, iline, 13)) { item[webphone_api.common.EP_HOLDSTATE] = 'false'; } } else if (webphone_api.common.GetParameter('devicetype') === webphone_api.common.DEVICE_WIN_SOFTPHONE() || webphone_api.common.getuseengine() === webphone_api.global.ENGINE_SERVICE) { webphone_api.common.WinAPI('API_Hold', null, iline, false); item[webphone_api.common.EP_HOLDSTATE] = 'false'; } else if (webphone_api.common.getuseengine() === webphone_api.global.ENGINE_JAVA) { webphone_api.webphone.Hold(iline, false); item[webphone_api.common.EP_HOLDSTATE] = 'false'; } } } }else { if (automute >= 4) { if (item[webphone_api.common.EP_MUTESTATE] == 'false') // if not muted { webphone_api.common.PutToDebugLog(2, 'EVENT, EVENT, USER, automute, API_MuteEx, true on line: ' + iline + '; dest: ' + item[webphone_api.common.EP_DESTNR]); if (webphone_api.common.getuseengine() === webphone_api.global.ENGINE_WEBRTC) { webphone_api.webrtcapi.SipToggleMute(true, mutedirection, iline); } else if (webphone_api.common.GetParameter('devicetype') === webphone_api.common.DEVICE_WIN_SOFTPHONE() || webphone_api.common.getuseengine() === webphone_api.global.ENGINE_SERVICE) { webphone_api.common.WinAPI('API_MuteEx', null, iline, true, mutedirection); } else if (webphone_api.common.getuseengine() === webphone_api.global.ENGINE_JAVA) { webphone_api.webphone.MuteEx(iline, true, mutedirection); } webphone_api.global.ep[i][webphone_api.common.EP_MUTESTATE] = 'true'; } } if (autohold >= 4) { if (item[webphone_api.common.EP_HOLDSTATE] == 'false') // if not on hold { webphone_api.common.PutToDebugLog(2, 'EVENT, EVENT, USER, autohold, API_Hold mainlogic, true on line: ' + iline + '; dest: ' + item[webphone_api.common.EP_DESTNR]); if (webphone_api.common.getuseengine() === webphone_api.global.ENGINE_WEBRTC) { if(webphone_api.webrtcapi.SipToggleHoldResume(true, iline, 14)) { item[webphone_api.common.EP_HOLDSTATE] = 'true'; } } else if (webphone_api.common.GetParameter('devicetype') === webphone_api.common.DEVICE_WIN_SOFTPHONE() || webphone_api.common.getuseengine() === webphone_api.global.ENGINE_SERVICE) { webphone_api.common.WinAPI('API_Hold', null, iline, true); item[webphone_api.common.EP_HOLDSTATE] = 'true'; } else if (webphone_api.common.getuseengine() === webphone_api.global.ENGINE_JAVA) { webphone_api.webphone.Hold(iline, true); item[webphone_api.common.EP_HOLDSTATE] = 'true'; } } } } //--} } UpdateLineButtons(11); AddCallFunctions(false); MeasureCall(); } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: LineCliked", err); } } // change active line, add line buttons and display otion for call function NewMultilineCall(phoneNr) { try{ webphone_api.common.PutToDebugLog(2, 'EVENT, NewMultilineCall'); if (webphone_api.global.isdebugversion) { webphone_api.common.GetContacts(function () {}); } var popupWidth = webphone_api.common.GetDeviceWidth(); if ( !webphone_api.common.isNull(popupWidth) && webphone_api.common.IsNumber(popupWidth) && popupWidth > 100 ) { popupWidth = Math.floor(popupWidth / 1.2); }else { popupWidth = 220; } var btnimage = 'btn_add_contact_txt.png'; var template = '' + '
' + '
' + 'Close' + '

' + webphone_api.stringres.get('menu_multilinecall') + '

' + '
' + '
' + '' + webphone_api.stringres.get('phone_nr') + '' + '
' + '' + '' + '
' + '' + '
'; var popupafterclose = function () {}; webphone_api.$.mobile.activePage.append(template).trigger("create"); //-- webphone_api.$.mobile.activePage.append(template).trigger("pagecreate"); webphone_api.$.mobile.activePage.find(".closePopup").bind("tap", function (e) { webphone_api.$.mobile.activePage.find(".messagePopup").popup("close"); }); webphone_api.$.mobile.activePage.find(".messagePopup").popup().popup("open").bind( { popupafterclose: function () { webphone_api.$(this).unbind("popupafterclose").remove(); webphone_api.$('#adialog_positive').off('click'); webphone_api.$('#adialog_negative').off('click'); webphone_api.$('#btn_pickct').off('click'); popupafterclose(); } }); //-- listen for enter onclick, and click OK button //-- no need for this, because it reloads the page //-- webphone_api.$( "#mlcall_popup" ).keypress(function( event ) //-- { //-- if ( event.which === 13 ) //-- { //-- event.preventDefault(); //-- webphone_api.$("#adialog_positive").click(); //-- }else //-- { //-- return; //-- } //-- }); var textBox = document.getElementById('mlcall_input'); var last_newcall_number = webphone_api.common.GetParameter("last_newcall_number"); if (!webphone_api.common.isNull(last_newcall_number) && last_newcall_number.length > 1) textBox.value = last_newcall_number; if (!webphone_api.common.isNull(phoneNr) && phoneNr.length > 0) { textBox.value = phoneNr; } if (!webphone_api.common.isNull(textBox)) { textBox.focus(); } // setting cursor to text input webphone_api.$('#adialog_positive').on('click', function (event) { webphone_api.common.PutToDebugLog(5,'EVENT, call NewMultilineCall ok onclick'); var textboxval = webphone_api.common.Trim(textBox.value); if (!webphone_api.common.isNull(textboxval) && textboxval.length > 0) { webphone_api.common.SaveParameter('last_newcall_number', textboxval); webphone_api.call(textboxval); webphone_api.common.RefreshInfo(5); }else { webphone_api.common.ShowToast(webphone_api.stringres.get('err_msg_4')); webphone_api.$.mobile.back(); } }); webphone_api.$('#adialog_negative').on('click', function (event) { ; }); webphone_api.$('#btn_pickct').on('click', function (event) { webphone_api.$.mobile.activePage.find(".messagePopup").popup("close"); webphone_api.$( '#mlcall_popup' ).on( 'popupafterclose', function( event ) { webphone_api.$( '#mlcall_popup' ).off( 'popupafterclose' ); webphone_api.common.PickContact(NewMultilineCall); }); }); } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: NewMultilineCall", err); } } //-- addcallfwd: true/false callforward csak bejovo hivas ring-nel function AddCallFunctions(addcallfwd) { try{ if (webphone_api.common.IsSDK() === true) { return; } if (webphone_api.common.GetParameterInt('featureset', 10) < 5) { webphone_api.$('#callfunctions_layout').hide(); MeasureCall(); return; } showcallfwd = addcallfwd; var content = ''; webphone_api.$('#callfunctions_layout').html(''); var availableFunc = webphone_api.common.GetAvailableCallfunctions(); if ( webphone_api.common.isNull(availableFunc) || availableFunc.length < 3) { webphone_api.common.PutToDebugLog(2, 'ERROR, _call: AddCallFunctions no available callfunctions (1)'); return; } var callfunc = document.getElementById("callfunctions_layout"); if ( webphone_api.common.isNull(callfunc) ) { webphone_api.common.PutToDebugLog(2, 'ERROR, _call: AddCallFunctions no available callfunctions (2)'); return; } var usageStr = webphone_api.common.GetParameter('callfunctionsbtnusage'); if (webphone_api.common.isNull(usageStr) || usageStr.length <= 0) { usageStr = '10,0,5,9,8,10,12,1,3,-2'; webphone_api.common.SaveParameter('callfunctionsbtnusage', usageStr); // DoVersioning } // calculate video priority var postmp = usageStr.lastIndexOf(','); var videop = webphone_api.common.StrToInt(usageStr.substring(postmp + 1)); var newUsageStr = usageStr.substring(0, postmp); if (webphone_api.common.IsNumber(videop) && webphone_api.common.CanIUseVideo() && videop < 1) { videop = 3; usageStr = newUsageStr + ',' + videop.toString(); webphone_api.common.SaveParameter('callfunctionsbtnusage', usageStr); } var tmp = ''; var usage = usageStr.split(','); var usageNames = ["callforward","conference", "transfer", "mute", "hold", "speaker", "numpad", "bluetooth", "chat", "video"]; if (addcallfwd !== true) { usage.splice(0, 1); usageNames.splice(0, 1); } for (var i = 0; i < usage.length; i++) { for (var j = i + 1; j < usage.length; j++) { var usi = 0; var usj = 0; try{ usi = webphone_api.common.StrToInt(usage[i].trim()); usj = webphone_api.common.StrToInt(usage[j].trim()); }catch(ein){ webphone_api.common.PutToDebugLogException(2,"_call AddCallFunctions parseint", ein); } //--if( usage[i].compareTo(usage[j]) < 0 ) if( usi < usj ) { tmp = usage[i]; usage[i] = usage[j]; usage[j] = tmp; tmp = usageNames[i]; usageNames[i] = usageNames[j]; usageNames[j] = tmp; } } } if (webphone_api.global.isdebugversion === true) {for (var i = 0; i < usage.length; i++) { webphone_api.common.PutToDebugLog(5, "cfusage " + usageNames[i] + ": " + usage[i]); }} // get list of available call functions baesd on which engine is used var funcArray = availableFunc.split(','); var funchtml = ''; if (webphone_api.common.isNull(funcArray) || funcArray.length < 1) { webphone_api.common.PutToDebugLog(2, 'ERROR, _call: AddCallFunctions no available callfunctions (3)'); return; } // wheter to display more button var dispmorebtn = false; if (webphone_api.global.nrOfCallfunctionsToDisplay === 0) { webphone_api.global.nrOfCallfunctionsToDisplay = 5; } if (webphone_api.global.nrOfCallfunctionsToDisplay > funcArray.length) { webphone_api.global.nrOfCallfunctionsToDisplay = funcArray.length; } if (funcArray.length > 5) dispmorebtn = true; // build html var count = 0; //-- if (webphone_api.common.isNull(content) || content.length < 10) // if content not yet added, then add it //-- { var template = '' + '
' + '' + '
'; var spacer = '
 
'; var currThemeTmp = webphone_api.common.GetColortheme(); for (var i = 0; i < usageNames.length; i++) { var cfitem = usageNames[i]; if (webphone_api.common.isNull(cfitem) || webphone_api.common.Trim(cfitem).length < 1 ) { continue; } if ((availableFunc.toLowerCase()).indexOf(cfitem) < 0) { continue; } // WebRTC engine hasn't got conference if (webphone_api.common.getuseengine() === webphone_api.global.ENGINE_WEBRTC && cfitem === 'conference') { continue; } // conference, transfer, mute, hold, speaker, numpad, bluetooth, chat, video var item = template; if (currThemeTmp === 22 || currThemeTmp === 23) { item = webphone_api.common.ReplaceAll(item, 'btn_[REPLACESTR]_txt.png', 'btn_' + cfitem + '_txt_grey.png'); item = webphone_api.common.ReplaceAll(item, ' 3) { var item = template; if (currThemeTmp === 22 || currThemeTmp === 23) { item = item.replace('btn_[REPLACESTR]_txt.png', 'menu_grey.png'); item = webphone_api.common.ReplaceAll(item, ' 20 or < -20) try{ //-- conference, transfer, mute, hold, speaker, numpad, bluetooth, chat, video var usageStr = webphone_api.common.GetParameter('callfunctionsbtnusage'); lastoop = 1; if (webphone_api.common.isNull(usageStr) || usageStr.length < 1) return; lastoop = 2; var usage = usageStr.split(','); lastoop = 3; var usageInt = []; lastoop = 4; for (var i = 0; i < usage.length; i++) { usageInt[i] = webphone_api.common.StrToInt(usage[i]); if (usageInt[i] > 20 || usageInt[i] < -20) resetVals = true; } lastoop = 5; switch(which) { case CLICK_CONFERENCE: usageInt[CLICK_CONFERENCE]++; return; case CLICK_TRANSFER: usageInt[CLICK_TRANSFER]++; return; case CLICK_MUTE: usageInt[CLICK_MUTE]++; return; case CLICK_HOLD: usageInt[CLICK_HOLD]++; return; case CLICK_SPEAKER: usageInt[CLICK_SPEAKER]++; return; case CLICK_NUMAPD: usageInt[CLICK_NUMAPD]++; return; case CLICK_BLUETOOTH: usageInt[CLICK_BLUETOOTH]++; return; case CLICK_CHAT: usageInt[CLICK_CHAT]++; return; case CLICK_VIDEO: usageInt[CLICK_VIDEO]++; return; } if (resetVals) { for (var i = 0; i < usageInt.length; i++) { usageInt[i] = Math.floor(usageInt[i] / 2); } } lastoop = 6; //-- callforward, conference, transfer, mute, hold, speaker, numpad, bluetooth, chat, video usageStr = usageInt[CLICK_CALLFORWARD] + ',' +usageInt[CLICK_CONFERENCE] + ',' + usageInt[CLICK_TRANSFER] + ',' + usageInt[CLICK_MUTE] + ',' + usageInt[CLICK_HOLD] +',' + usageInt[CLICK_SPEAKER] + ',' + usageInt[CLICK_NUMAPD] + ',' + usageInt[CLICK_BLUETOOTH] + ',' + usageInt[CLICK_CHAT] + ',' + usageInt[CLICK_VIDEO]; lastoop = 7; webphone_api.common.SaveParameter('callfunctionsbtnusage', usageStr); lastoop = 8; } catch(err) { webphone_api.common.PutToDebugLogException(2, '_call: CFUsageClickCount (' + lastoop.toString() + ')', err); } } function CallfunctionsOnclick (func, isTransfButton) // call page -> call function button on click { try{ if (webphone_api.common.isNull(func)) { return; } webphone_api.common.PutToDebugLog(4, 'EVENT, _call CallfunctionsOnclick func = ' + func); //webphone_api.global.wasmuteinsteadhold = -1; if (func === 'mute') { var success = Mute(); if (!success) { return; } } if (func === 'hold') { var success = Hold(); if (!success) { return; } //wasmuteinsteadhold: 0, //0: no, 1: was hold, 2: was mute, 3: was nothing, 4: failed hold if(webphone_api.global.wasmuteinsteadhold == 2) { func = 'mute'; } } var status = document.getElementById(func + '_status'); if (!webphone_api.common.isNull(status) && func !== 'conference' && func !== 'transfer' && func !== 'chat' && func !== 'more' && func !== 'callforward') { if ( webphone_api.$(status).hasClass('callfunc_status_on') ) { webphone_api.$(status).removeClass('callfunc_status_on'); }else { webphone_api.$(status).addClass('callfunc_status_on'); } } if (func === 'callforward') { Callforward(''); } if (func === 'conference') { Conference(''); } if (func === 'transfer') { if (isTransfButton === true) { BeforeTransfer(''); } else { webphone_api.common.Transfer(''); }} if (func === 'speaker') { Speaker(); } if (func === 'numpad') { Numpad(); } if (func === 'chat') { Chat(); } if (func === 'video') { VideoRecall(); } if (func === 'more') { webphone_api.$('#btn_call_menu').click(); } } catch(err) { webphone_api.common.PutToDebugLogException(2, '_call: CallfunctionsOnclick', err); } } var audiowasvisible = false; var volumewasvisible = false; function Numpad() // show / hide numpad for DTMF { try{ /* //jjjjjjjjjjjjj if (webphone_api.isonhold()) { webphone_api.common.PutToDebugLog(2, 'EVENT, jjjjjjjjjj call is on hold'); } else { webphone_api.common.PutToDebugLog(2, 'EVENT, jjjjjjjjjj call is NOT on hold'); } return; */ if (webphone_api.$('#numpad').css('display') === 'none') { if (webphone_api.$('#audiodevice_container').is(':visible')) { audiowasvisible = true; } else { audiowasvisible = false; } if (webphone_api.$('#volumecontrols').is(':visible')) { volumewasvisible = true; } else { volumewasvisible = false; } document.getElementById('numpad_number').innerHTML = ' '; webphone_api.$('#contact_image').hide(); webphone_api.$('#audiodevice_container').hide(); webphone_api.$('#volumecontrols').hide(); webphone_api.$('#numpad').show(); MeasureCall(); }else { webphone_api.$('#numpad').hide(); webphone_api.$('#contact_image').show(); if (audiowasvisible) { webphone_api.$('#audiodevice_container').show(); } if (volumewasvisible) { webphone_api.$('#volumecontrols').show(); } MeasureCall(); } } catch(err) { webphone_api.common.PutToDebugLogException(2, '_call: Numpad', err); } } function Conference(phoneNr) // popup { try{ webphone_api.common.PutToDebugLog(1, 'EVENT, ' + webphone_api.stringres.get('initiate_conference')); if (webphone_api.common.getuseengine() === webphone_api.global.ENGINE_WEBRTC && !webphone_api.common.IsMizuServerOrGateway()) { if (webphone_api.common.GetParameter('conf_engineswitcheoffered') !== 'true') { var ep_webrtc = webphone_api.common.StrToInt(webphone_api.common.GetParameter2('enginepriority_webrtc')); var ep_java = webphone_api.common.StrToInt(webphone_api.common.GetParameter2('enginepriority_java')); var ep_ns = webphone_api.common.StrToInt(webphone_api.common.GetParameter2('enginepriority_ns')); if (ep_ns > 0 && ep_webrtc - ep_ns < 3 && webphone_api.common.CanIUseService() === true) { webphone_api.common.EngineSwitchConference('ns', phoneNr, Conference); return; } if (ep_java > 0 && ep_webrtc - ep_java < 3 && webphone_api.common.CanIUseApplet() === true) { webphone_api.common.EngineSwitchConference('java', phoneNr, Conference); return; } }else { webphone_api.common.PutToDebugLog(2, 'ERROR, _call Conference engine switch already offered: ' + webphone_api.common.getuseengine()); } } if (webphone_api.global.isdebugversion) { webphone_api.common.GetContacts(function () {}); } // if is multiline, then try to find another active call and connect them whitout asking for number if (webphone_api.common.GetNrOfActiveCalls() > 1) { for (var i = 0; i < webphone_api.global.ep.length; i++) { if (webphone_api.common.isNull(webphone_api.global.ep[i]) || webphone_api.global.ep[webphone_api.common.EP_FLAGDEL] === 'true') { continue; } var ln = webphone_api.common.StrToInt(webphone_api.global.ep[i][webphone_api.common.EP_LINE]); if (ln !== webphone_api.global.aline) // we found another active call { var nr = webphone_api.global.ep[i][webphone_api.common.EP_DESTNR]; if (!webphone_api.common.isNull(nr) && nr.length > 0) { if(webphone_api.common.IsMizuServerOrGateway() === true && IsConferenceRoom() === true) // means it's conference rooms, so just send invites via chat { // get currently active call number var ep = webphone_api.common.GetEndpoint(1027,webphone_api.global.aline, '', '', '', false); webphone_api.common.SendConferenceInvites(nr, ep[webphone_api.common.EP_DESTNR]); webphone_api.common.PutToDebugLog(2, 'EVENT, _call: Conference, multiline conference: ' + nr + ' AND ' + ep[webphone_api.common.EP_DESTNR]); }else { webphone_api.common.ShowToast(webphone_api.stringres.get('interconnect_conf')); webphone_api.conference(nr, true); webphone_api.common.SaveParameter('last_conference_number', nr); webphone_api.common.PutToDebugLog(2, 'EVENT, _call: Conference, multiline conference: ' + nr); } return; } } } } var popupWidth = webphone_api.common.GetDeviceWidth(); if ( !webphone_api.common.isNull(popupWidth) && webphone_api.common.IsNumber(popupWidth) && popupWidth > 100 ) { popupWidth = Math.floor(popupWidth / 1.2); }else { popupWidth = 220; } var btnimage = 'btn_add_contact_txt.png'; var interconnectHtml = ''; if (webphone_api.common.GetNrOfActiveCalls() > 1 && (webphone_api.common.getuseengine() === webphone_api.global.ENGINE_SERVICE || webphone_api.common.getuseengine() === webphone_api.global.ENGINE_JAVA || webphone_api.common.IsWindowsSoftphone() === true)) { interconnectHtml = '
'+ ''; } var template = '' + '
' + '
' + 'Close' + '

' + webphone_api.stringres.get('conference_title') + '

' + '
' + '
' + '' + webphone_api.stringres.get('phone_nr') + '' + '
' + '' + '' + interconnectHtml + '
' + '' + '
'; var popupafterclose = function () {}; webphone_api.$.mobile.activePage.append(template).trigger("create"); //-- webphone_api.$.mobile.activePage.append(template).trigger("pagecreate"); webphone_api.$.mobile.activePage.find(".closePopup").bind("tap", function (e) { webphone_api.$.mobile.activePage.find(".messagePopup").popup("close"); }); webphone_api.$.mobile.activePage.find(".messagePopup").popup().popup("open").bind( { popupafterclose: function () { webphone_api.$(this).unbind("popupafterclose").remove(); webphone_api.$('#adialog_positive').off('click'); webphone_api.$('#adialog_negative').off('click'); webphone_api.$('#btn_pickct').off('click'); webphone_api.$('#btn_interconnect_conf').off('click'); popupafterclose(); } }); //-- listen for enter onclick, and click OK button //-- no need for this, because it reloads the page //-- webphone_api.$( "#conference_popup" ).keypress(function( event ) //-- { //-- if ( event.which === 13) //-- { //-- event.preventDefault(); //-- webphone_api.$("#adialog_positive").click(); //-- }else //-- { //-- return; //-- } //-- }); var textBox = document.getElementById('conference_input'); var lastConferenceNumber = webphone_api.common.GetParameter("last_conference_number"); if (!webphone_api.common.isNull(lastConferenceNumber) && lastConferenceNumber.length > 1) { textBox.value = webphone_api.common.Trim(lastConferenceNumber); } if (!webphone_api.common.isNull(phoneNr) && phoneNr.length > 0) { textBox.value = phoneNr; } if (!webphone_api.common.isNull(textBox)) { textBox.focus(); } // setting cursor to text input webphone_api.$('#adialog_positive').on('click', function (event) { var textboxval = webphone_api.common.Trim(textBox.value); webphone_api.common.PutToDebugLog(5,'EVENT, call Conference ok onclick (' + webphone_api.common.getuseengine() + '): ' + textboxval); if (!webphone_api.common.isNull(textboxval) && textboxval.length > 0) { //-- if Webrtc engine: on conference clicked, hangup call and initiate conference room call //-- if clicked again, don't initiate conf call again if (webphone_api.common.IsWindowsSoftphone() === false && webphone_api.common.getuseengine() === webphone_api.global.ENGINE_WEBRTC) { if (webphone_api.global.isconfroom_call === true) { //webphone_api.common.InitiateConference(textboxval); webphone_api.common.SendConferenceInvites(textboxval, callnumber); }else { webphone_api.global.isconfroom_call = true; webphone_api.conference(textboxval,true); webphone_api.common.SaveParameter('last_conference_number', textboxval); } return; }else { webphone_api.conference(textboxval,true); webphone_api.common.SaveParameter('last_conference_number', textboxval); } }else { webphone_api.common.ShowToast(webphone_api.stringres.get('err_msg_4')); webphone_api.$.mobile.back(); } }); webphone_api.$('#adialog_negative').on('click', function (event) { ; }); webphone_api.$('#btn_pickct').on('click', function (event) { webphone_api.$.mobile.activePage.find(".messagePopup").popup("close"); webphone_api.$( '#conference_popup' ).on( 'popupafterclose', function( event ) { webphone_api.$( '#conference_popup' ).off( 'popupafterclose' ); webphone_api.common.PickContact(Conference); }); }); webphone_api.$('#btn_interconnect_conf').on('click', function (event) { webphone_api.common.PutToDebugLog(2, 'EVENT, conference interconnect on click'); webphone_api.$.mobile.activePage.find(".messagePopup").popup("close"); webphone_api.conference('', true); }); CFUsageClickCount(CLICK_CONFERENCE); } catch(err) { webphone_api.common.PutToDebugLogException(2, '_call: Conference', err); } } function Callforward(phoneNr) // popup { try{ webphone_api.common.PutToDebugLog(1, 'EVENT, ' + webphone_api.stringres.get('initiate_callforward')); var popupWidth = webphone_api.common.GetDeviceWidth(); if ( !webphone_api.common.isNull(popupWidth) && webphone_api.common.IsNumber(popupWidth) && popupWidth > 100 ) { popupWidth = Math.floor(popupWidth / 1.2); }else { popupWidth = 220; } var btnimage = 'btn_callforward_txt.png'; var template = '' + '
' + '
' + 'Close' + '

' + webphone_api.stringres.get('callforward_title') + '

' + '
' + '
' + '' + webphone_api.stringres.get('phone_nr') + '' + '
' + '' + '' + '
' + '' + '
'; var popupafterclose = function () {}; webphone_api.$.mobile.activePage.append(template).trigger("create"); //-- webphone_api.$.mobile.activePage.append(template).trigger("pagecreate"); webphone_api.$.mobile.activePage.find(".closePopup").bind("tap", function (e) { webphone_api.$.mobile.activePage.find(".messagePopup").popup("close"); }); webphone_api.$.mobile.activePage.find(".messagePopup").popup().popup("open").bind( { popupafterclose: function () { webphone_api.$(this).unbind("popupafterclose").remove(); webphone_api.$('#adialog_positive').off('click'); webphone_api.$('#adialog_negative').off('click'); webphone_api.$('#btn_pickct').off('click'); popupafterclose(); } }); //-- listen for enter onclick, and click OK button //-- no need for this, because it reloads the page //-- webphone_api.$( "#callforward_popup" ).keypress(function( event ) //-- { //-- if ( event.which === 13 ) //-- { //-- event.preventDefault(); //-- webphone_api.$("#adialog_positive").click(); //-- }else //-- { //-- return; //-- } //-- }); var textBox = document.getElementById('callforward_input'); //-- var lastTransferNumber = webphone_api.common.GetParameter("last_transfer_number"); //-- if (!webphone_api.common.isNull(lastTransferNumber) && lastTransferNumber.length > 1) //-- { //-- textBox.value = webphone_api.common.Trim(lastTransferNumber); //-- } if (!webphone_api.common.isNull(phoneNr) && phoneNr.length > 0) { textBox.value = phoneNr; } if (!webphone_api.common.isNull(textBox)) { textBox.focus(); } // setting cursor to text input webphone_api.$('#adialog_positive').on('click', function (event) { webphone_api.common.PutToDebugLog(5,'EVENT, call Callforward ok onclick'); var textboxval = webphone_api.common.Trim(textBox.value); if (!webphone_api.common.isNull(textboxval) && textboxval.length > 0) { webphone_api.forward(textboxval); webphone_api.$('#acceptreject_layout').hide(); webphone_api.$('#hangup_layout').show(); //-- webphone_api.common.SaveParameter('last_transfer_number', textboxval); }else { webphone_api.common.ShowToast(webphone_api.stringres.get('err_msg_4')); //-- webphone_api.$.mobile.back(); } }); webphone_api.$('#adialog_negative').on('click', function (event) { ; }); webphone_api.$('#btn_pickct').on('click', function (event) { webphone_api.$.mobile.activePage.find(".messagePopup").popup("close"); webphone_api.$( '#callforward_popup' ).on( 'popupafterclose', function( event ) { webphone_api.$( '#callforward_popup' ).off( 'popupafterclose' ); webphone_api.common.PickContact(Callforward); }); }); CFUsageClickCount(CLICK_CALLFORWARD); } catch(err) { webphone_api.common.PutToDebugLogException(2, '_call: Callforward', err); } } function SpecialTransfer(id) { try{ webphone_api.common.PutToDebugLog(5, 'EVENT, _call SpecialTransfer' + id.toString()); webphone_api.common.SaveParameter("transfertype", webphone_api.common.GetParameter("transfertype" + id)); webphone_api.common.SaveParameter("transfwithreplace", webphone_api.common.GetParameter("transfwithreplace" + id)); webphone_api.common.SaveParameter("allowreplace", webphone_api.common.GetParameter("allowreplace" + id)); webphone_api.common.SaveParameter("discontransfer", webphone_api.common.GetParameter("discontransfer" + id)); webphone_api.common.SaveParameter("disconincomingrefer", webphone_api.common.GetParameter("disconincomingrefer" + id)); webphone_api.common.SaveParameter("inversetransfer", webphone_api.common.GetParameter("inversetransfer" + id)); webphone_api.common.SaveParameter("transferdelay", webphone_api.common.GetParameter("transferdelay" + id)); webphone_api.common.SaveParameter("newdialogforrefer", webphone_api.common.GetParameter("newdialogforrefer" + id)); webphone_api.common.SaveParameter("useserverdomainforrefer", webphone_api.common.GetParameter("useserverdomainforrefer" + id)); webphone_api.common.SaveParameter("holdontransfer", webphone_api.common.GetParameter("holdontransfer" + id)); //webphone_api.common.Transfer(phoneNr); webphone_api.common.Transfer(); } catch(err) { webphone_api.common.PutToDebugLogException(2, '_call: SpecialTransfer', err); } } function BeforeTransfer(phoneNr) { try{ webphone_api.common.PutToDebugLog(5, 'EVENT, _call BeforeTransfer' + phoneNr); if (webphone_api.common.Trim(webphone_api.common.GetParameter("transfername1")).length > 0 || webphone_api.common.Trim(webphone_api.common.GetParameter("transfername2")).length > 0 || webphone_api.common.Trim(webphone_api.common.GetParameter("transfername3")).length > 0 || webphone_api.common.Trim(webphone_api.common.GetParameter("transfername4")).length > 0 || webphone_api.common.Trim(webphone_api.common.GetParameter("transfername5")).length > 0 || webphone_api.common.Trim(webphone_api.common.GetParameter("transfername6")).length > 0 || webphone_api.common.Trim(webphone_api.common.GetParameter("transfername7")).length > 0 || webphone_api.common.Trim(webphone_api.common.GetParameter("transfername8")).length > 0 || webphone_api.common.Trim(webphone_api.common.GetParameter("transfername9")).length > 0 || webphone_api.common.Trim(webphone_api.common.GetParameter("transfername10")).length > 0 ) { // open menu webphone_api.$('#btn_call_menu').click(); return; } webphone_api.common.Transfer(phoneNr); } catch(err) { webphone_api.common.PutToDebugLogException(2, '_call: BeforeTransfer', err); } } function Mute() // :boolean handle Mute - onClick { try{ //-- boolean muteSuccess = sipStack.API_Mute(-1, phoneService.muteState); // defmute: 0=both, 1=mute out (speakers), 2=mute in (microphone), 3=both, 4=both, 5=disable mute var muteDirection = webphone_api.common.GetParameterInt('defmute', 2); if (muteDirection === 3 || muteDirection === 4) muteDirection = 0; var mstate = !webphone_api.common.GetMuteState(-1); if (muteDirection === 5) { webphone_api.common.PutToDebugLog(2, 'WARNING, CALL, API_MutEx, ' + mstate + ', ' + muteDirection + ' Mute is disabled!'); return false; } var muteSuccess = webphone_api.mute(mstate, muteDirection, -1); CFUsageClickCount(CLICK_MUTE); //-- if (muteSuccess) //-- { return true; //-- } } catch(err) { webphone_api.common.PutToDebugLogException(2, '_call: Mute', err); } return false; } function Hold() // :boolean handle Hold - onClick { try{ var hstate = !webphone_api.common.GetHoldState(-1); var holdSuccess = webphone_api.hold(hstate, -1); CFUsageClickCount(CLICK_HOLD); if (holdSuccess) { return true; } } catch(err) { webphone_api.common.PutToDebugLogException(2, '_call: Hold', err); } return false; } function Speaker() { try{ //alert('speaker on / off'); } catch(err) { webphone_api.common.PutToDebugLogException(2, '_call: Hold', err); } } function Chat() { try{ if (hanguponchat === true) { HangupCall(); } webphone_api.common.StartMsg(callnumber, '', '_call'); CFUsageClickCount(CLICK_CHAT); } catch(err) { webphone_api.common.PutToDebugLogException(2, '_call: Chat', err); } } var MENUITEM_CALL_IGNORE = '#menuitem_call_ignore'; var MENUITEM_CALL_CALLFORWARD = '#menuitem_call_callforward'; var MENUITEM_CALL_CONFERENCE = '#menuitem_call_conference'; var MENUITEM_CALL_TRANSFER = '#menuitem_call_transfer'; var MENUITEM_CALL_NUMPAD = '#menuitem_call_numpad'; var MENUITEM_CALL_MUTE = '#menuitem_call_mute'; var MENUITEM_CALL_HOLD = '#menuitem_call_hold'; var MENUITEM_CALL_SPEAKER = '#menuitem_call_speaker'; var MENUITEM_CALL_MESSAGE = '#menuitem_call_message'; var MENUITEM_VOLUME_CONTROLS = '#menuitem_volume_controls'; var MENUITEM_AUDIO_DEVICE = '#menuitem_audio_device'; var MENUITEM_RECALL_VIDEO = '#menuitem_recall_video'; var MENUITEM_CALLPARK = '#menuitem_callpark'; var MENUITEM_MULTILINECALL = '#menuitem_multilinecall'; var MENUITEM_ACCEPT_HOLD = '#menuitem_accepthold'; var MENUITEM_ACCEPT_END = '#menuitem_acceptend'; var MENUITEM_EXIT_VIDEOMODE = '#menuitem_exit_videomode'; var MENUITEM_CALL_AUDIO_ONLY = '#menuitem_call_audio_only'; var MENUITEM_RECORD_CALL = '#menuitem_call_record_call'; var MENUITEM_CALL_TRANSFER1 = '#menuitem_call_transfer1'; var MENUITEM_CALL_TRANSFER2 = '#menuitem_call_transfer2'; var MENUITEM_CALL_TRANSFER3 = '#menuitem_call_transfer3'; var MENUITEM_CALL_TRANSFER4 = '#menuitem_call_transfer4'; var MENUITEM_CALL_TRANSFER5 = '#menuitem_call_transfer5'; var MENUITEM_CALL_TRANSFER6 = '#menuitem_call_transfer6'; var MENUITEM_CALL_TRANSFER7 = '#menuitem_call_transfer7'; var MENUITEM_CALL_TRANSFER8 = '#menuitem_call_transfer8'; var MENUITEM_CALL_TRANSFER9 = '#menuitem_call_transfer9'; var MENUITEM_CALL_TRANSFER10 = '#menuitem_call_transfer10'; //--var MENUITEM_SCREENSHARE = '#menuitem_screenshare'; function CreateOptionsMenu (menuId) // adding items to menu, called from html { try{ //-- remove data transition for windows softphone, because it's slow if (webphone_api.common.GetParameter('devicetype') === webphone_api.common.DEVICE_WIN_SOFTPHONE()) { webphone_api.$( "#btn_call_menu" ).removeAttr('data-transition'); } if ( webphone_api.common.isNull(menuId) || menuId.length < 1 ) { webphone_api.common.PutToDebugLog(2, "ERROR, _call: CreateOptionsMenu menuid null"); return; } if (webphone_api.$(menuId).length <= 0) { webphone_api.common.PutToDebugLog(2, "ERROR, _call: CreateOptionsMenu can't get reference to Menu"); return; } if (menuId.charAt(0) !== '#') { menuId = '#' + menuId; } webphone_api.$(menuId).html(''); var featureset = webphone_api.common.GetParameterInt('featureset', 10); var availableFunc = webphone_api.common.GetAvailableCallfunctions(); if ( webphone_api.common.isNull(availableFunc) || availableFunc.length < 3) { webphone_api.common.PutToDebugLog(2, 'ERROR, _call: CreateOptionsMenu no available callfunctions (1)'); return; } if (availableFunc.indexOf('numpad') >= 0) { var numpadTitle = webphone_api.stringres.get('menu_numpad'); if (webphone_api.$('#numpad').is(':visible')) { numpadTitle = webphone_api.stringres.get('menu_numpad_hide'); } webphone_api.$(menuId).append( '' ).listview('refresh'); } if (featureset > 5) { if (availableFunc.indexOf('conference') >= 0 && ( webphone_api.common.IsWindowsSoftphone() === true || webphone_api.common.getuseengine() === webphone_api.global.ENGINE_JAVA || webphone_api.common.getuseengine() === webphone_api.global.ENGINE_SERVICE || (webphone_api.common.getuseengine() === webphone_api.global.ENGINE_WEBRTC && (webphone_api.common.IsMizuServerOrGateway() || webphone_api.common.CanIUseService() === true)) )) //-- if (availableFunc.indexOf('conference') >= 0 || (webphone_api.common.IsMizuServerOrGateway() === true && IsConferenceRoom() === true)) // for conference rooms { webphone_api.$(menuId).append( '' ).listview('refresh'); } } if (availableFunc.indexOf('chat') >= 0) { webphone_api.$(menuId).append( '' ).listview('refresh'); } //OPSSTART if (webphone_api.common.Glt() === true) { //OPSEND if (featureset > 0 && availableFunc.indexOf('transfer') >= 0 && (webphone_api.global.checkIfCallActive === true || webphone_api.common.GetNrOfActiveCalls() > 0)) { if (webphone_api.common.Trim(webphone_api.common.GetParameter('transfername1')).length > 0 || webphone_api.common.Trim(webphone_api.common.GetParameter('transfername2')).length > 0 || webphone_api.common.Trim(webphone_api.common.GetParameter('transfername3')).length > 0 || webphone_api.common.Trim(webphone_api.common.GetParameter('transfername4')).length > 0 || webphone_api.common.Trim(webphone_api.common.GetParameter('transfername5')).length > 0 || webphone_api.common.Trim(webphone_api.common.GetParameter('transfername6')).length > 0 || webphone_api.common.Trim(webphone_api.common.GetParameter('transfername7')).length > 0 || webphone_api.common.Trim(webphone_api.common.GetParameter('transfername8')).length > 0 || webphone_api.common.Trim(webphone_api.common.GetParameter('transfername9')).length > 0 || webphone_api.common.Trim(webphone_api.common.GetParameter('transfername10')).length > 0 ) { if (webphone_api.common.Trim(webphone_api.common.GetParameter('transfername1')).length > 0) { webphone_api.$(menuId).append( '' ).listview('refresh'); } if (webphone_api.common.Trim(webphone_api.common.GetParameter('transfername2')).length > 0) { webphone_api.$(menuId).append( '' ).listview('refresh'); } if (webphone_api.common.Trim(webphone_api.common.GetParameter('transfername3')).length > 0) { webphone_api.$(menuId).append( '' ).listview('refresh'); } if (webphone_api.common.Trim(webphone_api.common.GetParameter('transfername4')).length > 0) { webphone_api.$(menuId).append( '' ).listview('refresh'); } if (webphone_api.common.Trim(webphone_api.common.GetParameter('transfername5')).length > 0) { webphone_api.$(menuId).append( '' ).listview('refresh'); } if (webphone_api.common.Trim(webphone_api.common.GetParameter('transfername6')).length > 0) { webphone_api.$(menuId).append( '' ).listview('refresh'); } if (webphone_api.common.Trim(webphone_api.common.GetParameter('transfername7')).length > 0) { webphone_api.$(menuId).append( '' ).listview('refresh'); } if (webphone_api.common.Trim(webphone_api.common.GetParameter('transfername8')).length > 0) { webphone_api.$(menuId).append( '' ).listview('refresh'); } if (webphone_api.common.Trim(webphone_api.common.GetParameter('transfername9')).length > 0) { webphone_api.$(menuId).append( '' ).listview('refresh'); } if (webphone_api.common.Trim(webphone_api.common.GetParameter('transfername10')).length > 0) { webphone_api.$(menuId).append( '' ).listview('refresh'); } }else { webphone_api.$(menuId).append( '' ).listview('refresh'); } } //OPSSTART } //OPSEND if (featureset > 0 && availableFunc.indexOf('mute') >= 0 && (webphone_api.global.checkIfCallActive === true || webphone_api.common.GetNrOfActiveCalls() > 0)) { webphone_api.$(menuId).append( '' ).listview('refresh'); } if (featureset > 0 && availableFunc.indexOf('hold') >= 0 && (webphone_api.global.checkIfCallActive === true || webphone_api.common.GetNrOfActiveCalls() > 0)) { webphone_api.$(menuId).append( '' ).listview('refresh'); } if (webphone_api.common.CanIUseVideo() === true) { // don't display Video Recall menu item if used in android for video calls if (webphone_api.common.IsCExt() < 1) { webphone_api.$(menuId).append( '' ).listview('refresh'); } } if (webphone_api.common.IsMultiline() === 1) { webphone_api.$(menuId).append( '' ).listview('refresh'); } //OPSSTART if (webphone_api.common.Glt() === true) //OPSEND if (featureset > 5 && availableFunc.indexOf('callforward') >= 0 && showcallfwd === true) { webphone_api.$(menuId).append( '' ).listview('refresh'); } if (featureset > 0 && availableFunc.indexOf('speaker') >= 0) { webphone_api.$(menuId).append( '' ).listview('refresh'); } if (showignore === true) { webphone_api.$(menuId).append( '' ).listview('refresh'); } if (webphone_api.common.IsWindowsSoftphone() === true && callmode > 0) { if (webphone_api.common.GetParameterInt('softphonevideomode', 0) === 1) { webphone_api.$(menuId).append( '' ).listview('refresh'); } } if (webphone_api.$('#mline_layout').is(':visible')) { webphone_api.$(menuId).append( '' ).listview('refresh'); webphone_api.$(menuId).append( '' ).listview('refresh'); } var cpnr = webphone_api.common.GetConfig('callparknumber'); if (webphone_api.common.isNull(cpnr) || cpnr.length < 0) { cpnr = webphone_api.common.GetParameter2('callparknumber'); } if (cpnr.length > 0) { webphone_api.$(menuId).append( '' ).listview('refresh'); } // show Volume controls/Hide Volume in menu, if not always displayed if (webphone_api.common.GetParameterBool('displayvolumecontrols', false) === false) { if (webphone_api.common.getuseengine() !== webphone_api.global.ENGINE_WEBRTC) { var voltitle = ''; if (webphone_api.$('#volumecontrols').is(':visible')) { voltitle = webphone_api.stringres.get('menu_volumehide'); }else { voltitle = webphone_api.stringres.get('menu_volumeshow'); } webphone_api.$(menuId).append( '' ).listview('refresh'); } } //-- show Audio device/Hide Audio device in menu, if not always displayed //-- if (webphone_api.common.GetParameterBool('displayaudiodevice', false) === false) //-- { //-- var audiotitle = ''; //-- if (webphone_api.$('#audiodevice_container').is(':visible')) //-- { //-- audiotitle = webphone_api.stringres.get('menu_audiodevicehide'); //-- }else //-- { //-- audiotitle = webphone_api.stringres.get('menu_audiodeviceshow'); //-- } //-- webphone_api.$(menuId).append( '' ).listview('refresh'); //-- } if ((webphone_api.common.getuseengine() === webphone_api.global.ENGINE_WEBRTC && (webphone_api.common.GetBrowser() === 'Firefox' || webphone_api.common.GetBrowser() === 'Chrome')) || webphone_api.common.GetParameter('devicetype') === webphone_api.common.DEVICE_WIN_SOFTPHONE() || webphone_api.common.getuseengine() === webphone_api.global.ENGINE_SERVICE || webphone_api.common.getuseengine() === webphone_api.global.ENGINE_JAVA) { webphone_api.$(menuId).append( '' ).listview('refresh'); } if (callmode === 1) { webphone_api.$(menuId).append( '' ).listview('refresh'); } //OPSSTART if (webphone_api.common.Glcr() === true) { //OPSEND if (featureset > 0 && webphone_api.common.GetParameter('voicerecupload').length > 0) { if (IsRecStarted( GetActiveLinePeer() ) === true) { webphone_api.$(menuId).append( '' ).listview('refresh'); }else { webphone_api.$(menuId).append( '' ).listview('refresh'); } } //OPSSTART } //OPSEND return true; } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: CreateOptionsMenu", err); } return false; } function MenuItemSelected(itemid) { try{ if (webphone_api.common.isNull(itemid) || itemid.length < 1) { return; } webphone_api.$( '#call_menu' ).on( 'popupafterclose', function( event ) { webphone_api.$( '#call_menu' ).off( 'popupafterclose' ); switch (itemid) { case MENUITEM_CALL_IGNORE: webphone_api.ignore(); break; case MENUITEM_CALL_CALLFORWARD: CallfunctionsOnclick('callforward'); break; case MENUITEM_CALL_CONFERENCE: CallfunctionsOnclick('conference'); break; case MENUITEM_CALL_TRANSFER1: SpecialTransfer('1'); break; case MENUITEM_CALL_TRANSFER2: SpecialTransfer('2'); break; case MENUITEM_CALL_TRANSFER3: SpecialTransfer('3'); break; case MENUITEM_CALL_TRANSFER4: SpecialTransfer('4'); break; case MENUITEM_CALL_TRANSFER5: SpecialTransfer('5'); break; case MENUITEM_CALL_TRANSFER6: SpecialTransfer('6'); break; case MENUITEM_CALL_TRANSFER7: SpecialTransfer('7'); break; case MENUITEM_CALL_TRANSFER8: SpecialTransfer('8'); break; case MENUITEM_CALL_TRANSFER9: SpecialTransfer('9'); break; case MENUITEM_CALL_TRANSFER10: SpecialTransfer('10'); break; case MENUITEM_CALL_TRANSFER: CallfunctionsOnclick('transfer'); break; case MENUITEM_CALL_NUMPAD: CallfunctionsOnclick('numpad'); break; case MENUITEM_CALL_MUTE: CallfunctionsOnclick('mute'); break; case MENUITEM_CALL_HOLD: CallfunctionsOnclick('hold'); break; case MENUITEM_CALL_SPEAKER: CallfunctionsOnclick('speaker'); break; case MENUITEM_CALL_MESSAGE: CallfunctionsOnclick('chat'); break; case MENUITEM_VOLUME_CONTROLS: ShowHideVolumeControls(); break; case MENUITEM_AUDIO_DEVICE: //ShowHideAudioDevice(); webphone_api.devicepopup(); break; case MENUITEM_RECALL_VIDEO: VideoRecall(); break; case MENUITEM_CALLPARK: CallPark(); break; case MENUITEM_MULTILINECALL: NewMultilineCall(); break; case MENUITEM_ACCEPT_HOLD: AcceptHold(true); break; case MENUITEM_ACCEPT_END: AcceptEnd(true); break; case MENUITEM_EXIT_VIDEOMODE: webphone_api.common.ExitVideoMode('USER,call Menu'); break; case MENUITEM_RECORD_CALL: var apeer = GetActiveLinePeer(); if (IsRecStarted(apeer) === true) { StopRecording(apeer); }else { StartRecording(apeer); } break; } }); } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: MenuItemSelected", err); } } function GetActiveLinePeer () { try{ if (!webphone_api.common.isNull(webphone_api.global.ep) || webphone_api.global.ep.length > 0) { for (var i = 0; i < webphone_api.global.ep.length; i++) { if (webphone_api.common.isNull(webphone_api.global.ep[i]) || webphone_api.global.ep[i].length < 5) { continue; } var lntmp = webphone_api.global.ep[i][webphone_api.common.EP_LINE]; if (lntmp == webphone_api.global.aline) { var peer = webphone_api.global.ep[i][webphone_api.common.EP_DESTNR]; if (!webphone_api.common.isNull(peer) && peer.length > 0) { return peer; }else { break; } } } } } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: GetActiveLinePeer", err); } return callnumber; } function IsRecStarted (peer) { try{ if (webphone_api.common.isNull(peer) || peer.length < 1) { return false; } if (webphone_api.common.isNull(rec_status)) { rec_status = {}; } var rec = rec_status[peer]; if (!webphone_api.common.isNull(rec)) { if (rec == '1' || rec == 1) { return true; } } } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: IsRecStarted", err); } return false; } // object holding recording filename and recording status for all peers // ex: peer: status // status: 0: recording stopped or not started, 1: recording started // !!! stop all call recording on hangup var rec_status = {}; function StartRecording(peer) // start audio recording { try{ if (webphone_api.common.isNull(peer) || peer.length < 1) { return; } if (webphone_api.common.isNull(rec_status)) { rec_status = {}; } webphone_api.voicerecord (true, webphone_api.common.GetParameter('voicerecftp_addr')); rec_status[peer] = 1; } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: StartRecording", err); } } function StopRecording(peer) // stop audio recording { try{ if (webphone_api.common.isNull(peer) || peer.length < 1) { return; } webphone_api.voicerecord (false, webphone_api.common.GetParameter('voicerecftp_addr')); delete rec_status[peer]; } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: StopRecording", err); } } function VideoRecall() { try{ if (callmode > 0) { webphone_api.common.ShowToast('This is already a video call'); webphone_api.common.PutToDebugLog(2, 'WARNING, _call VideoRecall this is already a video call'); return; } webphone_api.common.PutToDebugLog(2, 'EVENT, _call USER VideoRecall'); webphone_api.global.dontshow_closecall = true; HangupCall(); setTimeout(function () { webphone_api.global.add_recall_header = true; webphone_api.videocall(callnumber); webphone_api.global.dontshow_closecall = false; }, 250); CFUsageClickCount(CLICK_VIDEO); } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: VideoRecall", err); } } function CallPark() { try{ var cpnr = webphone_api.common.GetConfig('callparknumber'); if (webphone_api.common.isNull(cpnr) || cpnr.length < 0) { cpnr = webphone_api.common.GetParameter2('callparknumber'); } webphone_api.common.PutToDebugLog(3, 'EVENT, call CallPark onclick: ' + cpnr); if (cpnr.length < 1) { return; } webphone_api.dtmf(cpnr); } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: CallPark", err); } } function ShowHideVolumeControls() { try{ if (webphone_api.$('#volumecontrols').is(':visible')) { webphone_api.$('#volumecontrols').hide(); }else { webphone_api.$('#volumecontrols').show(); } MeasureCall(); } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: ShowHideVolumeControls", err); } } function ShowHideAudioDevice() { try{ if (webphone_api.$('#audiodevice_container').is(':visible')) { webphone_api.$('#audiodevice_container').hide(); }else { webphone_api.$('#audiodevice_container').show(); } MeasureCall(); } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: ShowHideVolumeControls", err); } } function IsConferenceRoom() // check if called number is a conference room number { try{ if (webphone_api.common.isNull(callnumber) || callnumber.length < 0) { return false; } var cfr = webphone_api.common.GetParameter('received_confrooms'); var list = cfr.split(','); for (var i = 0; i < list.length; i++) { if (list[i] === callnumber) { return true; } } } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: ShowHideVolumeControls", err); } return false; } function onStop(event) { try{ if(webphone_api.common.CanLog(4)) { webphone_api.common.PutToDebugLog(4, "EVENT, _call: onStop"); } webphone_api.global.isCallStarted = false; webphone_api.global.CLOSE_CALL_TIMER = -100; webphone_api.global.hangupPressedCount = 0; webphone_api.$('#call_duration').html(''); webphone_api.global.rating = ''; webphone_api.global.closeCallAtivity = false; //OPSSTART webphone_api.plhandler.Cfin(); //OPSEND webphone_api.global.lastRingEvenet = ''; webphone_api.global.isconfroom_call = false; callmode = 0; lastBtns = ''; webphone_api.$('#page_call_additional_info').html(''); webphone_api.$('#page_call_peer_details').html(''); webphone_api.$('#callfunctions_layout').html(''); webphone_api.$("#ml_buttons").html(''); webphone_api.global.acallcount = 0; webphone_api.$('#numpad_number').html(''); webphone_api.global.callPageStatusCachePerLine = {}; //-- after multiline calls, on the next call, these show up if don't hide them webphone_api.$('#acceptreject_layout').hide(); webphone_api.$('#hangup_layout').hide(); if (!webphone_api.common.isNull(rec_status)) { var recInProgress = false; for (var key in rec_status) { if (rec_status.hasOwnProperty(key)) { if (rec_status[key] == 1) { recInProgress = true; break; } } } if (recInProgress) { StopRecording(GetActiveLinePeer()); } delete rec_status; rec_status = {}; } if (webphone_api.common.IsSDK() === false) { webphone_api.$('#display_notmain_account').html(''); webphone_api.$('#display_notmain_account').hide(); } //-- webphone_api.$("#btn_hangup").off('click'); //-- webphone_api.$("#btn_accept").off('click'); //-- webphone_api.$("#btn_reject").off('click'); //-- webphone_api.$('#btn_conference').off('click'); //-- webphone_api.$('#btn_transfer').off('click'); //-- webphone_api.$('#btn_numpad').off('click'); //-- webphone_api.$('#btn_mute').off('click'); //-- webphone_api.$('#btn_hold').off('click'); //-- webphone_api.$('#btn_speaker').off('click'); } catch(err) { webphone_api.common.PutToDebugLogException(2, "_call: onStop", err); } } function onDestroy (event){}// deprecated by onstop // public members and methods return { onCreate: onCreate, onStart: onStart, onStop: onStop, onDestroy: onDestroy, CloseCall: CloseCall, MeasureCall: MeasureCall, OnCallerHangup: OnCallerHangup, AcceptCall: AcceptCall, RejectCall: RejectCall, LineCliked: LineCliked, OnNewIncomingCall: OnNewIncomingCall, UpdateLineButtons: UpdateLineButtons, StartRecording: StartRecording, StopRecording: StopRecording, IsRecStarted: IsRecStarted, GetActiveLinePeer: GetActiveLinePeer, CFUsageClickCount: CFUsageClickCount }; })();