/**************************************************************************************** * LiveZilla CommonToolsClass.js * * Copyright 2017 LiveZilla GmbH * All rights reserved. * LiveZilla is a registered trademark. * ***************************************************************************************/ function CommonToolsClass() { this.ticketSalutations = {}; this.permissions = []; } RegExp.escape = function(s) { return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); }; CommonToolsClass.prototype.pad = function (number, length, paddingSymbol, paddingSide) { if (typeof paddingSymbol == 'undefined' || paddingSymbol == '') { paddingSymbol = '0'; } else if (paddingSymbol == ' ') { paddingSymbol = '°' } if (typeof paddingSide == 'undefined' || paddingSide == '') paddingSide = 'l'; var str = String(number); while (str.length < length) { if (paddingSide == 'l') str = paddingSymbol + str; else str = str + paddingSymbol; } str=str.replace(/°/g," "); return str; }; CommonToolsClass.prototype.clone = function (originalObject) { try { if(!d(originalObject)) return null; var origJsonString = JSON.stringify(originalObject); var copyJsonString = origJsonString; var copyObject = JSON.parse(copyJsonString); return copyObject; } catch(ex) { } return originalObject; }; CommonToolsClass.prototype.parseUrl = function (url) { var a = document.createElement('a'); a.href = url; return a; }; CommonToolsClass.prototype.getUrlParts = function (thisUrl, urlOffset) { thisUrl = (typeof thisUrl != 'undefined') ? thisUrl : document.URL; urlOffset = (typeof urlOffset != 'undefined') ? urlOffset : 'undefined'; if (thisUrl.indexOf('#') != -1) { thisUrl = document.URL.split('#')[0]; } var thisUrlParts = thisUrl.split('://'); var thisProtocol = thisUrlParts[0] + '://'; thisUrlParts = thisUrlParts[1].split('/'); var thisUrlRest = '', thisMobileDir = ''; if (urlOffset == 'undefined') { urlOffset = 1; if (thisUrlParts[thisUrlParts.length - 1].indexOf('html') != -1 || thisUrlParts[thisUrlParts.length - 1].indexOf('php') != -1 || thisUrlParts[thisUrlParts.length - 1] == '') { urlOffset = 2; } } for (var i = 1; i < (thisUrlParts.length - urlOffset); i++) { thisUrlRest += '/' + thisUrlParts[i]; } thisMobileDir = thisUrlParts[thisUrlParts.length - urlOffset]; var thisUrlBase = ''; var thisPort = ''; if (thisUrlParts[0].indexOf(':') == -1) { thisUrlBase = thisUrlParts[0]; if (thisProtocol == 'https://') { thisPort = '443'; } else { thisPort = '80'; } } else { thisUrlParts = thisUrlParts[0].split(':'); thisUrlBase = thisUrlParts[0]; thisPort = thisUrlParts[1]; } return {protocol:thisProtocol, urlBase:thisUrlBase, urlRest:thisUrlRest, port:thisPort, mobileDir: thisMobileDir}; }; CommonToolsClass.prototype.createDefaultProfile = function (runningFromApp, chosenProfile) { var that = this; if (runningFromApp == false && (chosenProfile == -1 || chosenProfile == null)) { this.storageData = []; var indexes = lzm_commonStorage.loadValue('indexes'); var indexList = []; if (indexes != null && indexes != '') { indexList = indexes.split(','); } if ($.inArray('0', indexList) == -1) { var thisUrlParts = that.getUrlParts(); var dataSet = {}; dataSet.index = 0; dataSet.server_profile = 'Default profile'; dataSet.server_protocol = thisUrlParts.protocol; dataSet.server_url = thisUrlParts.urlBase + thisUrlParts.urlRest; dataSet.mobile_dir = thisUrlParts.mobileDir; dataSet.server_port = thisUrlParts.port; dataSet.login_name = ''; dataSet.login_passwd = ''; dataSet.ldap_login = false; dataSet.auto_login = 0; if (indexes != null && indexes != '') { lzm_commonStorage.saveValue('indexes', '0,' + indexes); } else { lzm_commonStorage.saveValue('indexes', '0'); } lzm_commonStorage.saveProfile(dataSet); } } }; CommonToolsClass.prototype.getHumanDate = function(dateObject, returnType) { var year = (dateObject instanceof Array) ? dateObject[0] : dateObject.getFullYear(); var month = (dateObject instanceof Array) ? this.pad(dateObject[1], 2) : this.pad((dateObject.getMonth() + 1), 2); var day = (dateObject instanceof Array) ? this.pad(dateObject[2], 2) : this.pad(dateObject.getDate(), 2); var hours = (dateObject instanceof Array) ? this.pad(dateObject[3], 2) : this.pad(dateObject.getHours(), 2); var minutes = (dateObject instanceof Array) ? this.pad(dateObject[4], 2) : this.pad(dateObject.getMinutes(), 2); var seconds = (dateObject instanceof Array) ? this.pad(dateObject[5], 2) : this.pad(dateObject.getSeconds(), 2); var monthNames = [t('January'), t('February'), t('March'), t('April'), t('May'), t('June'), t('July'), t('August'), t('September'), t('October'), t('November'), t('December')]; var dateYear = monthNames[parseInt(month) - 1] + ' ' + year; var date = t('--',[['', year], ['', month], ['', day]]); var longDate = t(' , ',[['', monthNames[parseInt(month) -1]], ['', day], ['', year]]); var returnValue = ''; switch (returnType) { case 'mobile': returnValue = date; if(year == new Date().getFullYear()) if(month == new Date().getMonth()+1) if(day == new Date().getDay()+1) returnValue = hours + ':' + minutes; break; case 'time': returnValue = hours + ':' + minutes + ':' + seconds; break; case 'shorttime': returnValue = hours + ':' + minutes; break; case 'date': returnValue = date; break; case 'longdate': returnValue = longDate; break; case 'dateyear': returnValue = dateYear; break; case 'iso': returnValue = year + '-' + month + '-' + day; break; default: returnValue = date + ' ' + hours + ':' + minutes + ':' + seconds; } return returnValue; }; CommonToolsClass.prototype.getHumanTimeSpan = function(seconds,_hideHours) { var humanTimeSpan = 0; if (!isNaN(seconds) && seconds > 0) { var days = Math.floor(seconds / (3600 * 24)); var remainingSeconds = seconds % (3600 * 24); if(!_hideHours) { var hours = this.pad(Math.floor(remainingSeconds / 3600), 2, '0', 'l'); remainingSeconds = remainingSeconds % 3600; } var minutes = this.pad(Math.floor(remainingSeconds / 60), 2, '0', 'l'); seconds = this.pad(remainingSeconds % 60, 2, '0', 'l'); humanTimeSpan = (days > 0) ? days + ' ' : ''; if(!_hideHours) humanTimeSpan += hours + ':' + minutes + ':' + seconds; else humanTimeSpan += minutes + ':' + seconds; } return humanTimeSpan; }; CommonToolsClass.prototype.htmlEntities = function(str) { var escapedString = String(str).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"'); return escapedString; }; CommonToolsClass.prototype.checkTicketReadStatus = function(ticketId, statusArray, tickets) { tickets = (typeof tickets != 'undefined') ? tickets : []; var thisTicket = {id: ''}; var ticketIsInArray = -1; for (var i=0; i statusArray[ticketIsInArray].timestamp) { ticketIsInArray = -1 } return ticketIsInArray; }; CommonToolsClass.prototype.removeTicketFromReadStatusArray = function(ticketId, statusArray, doNotLog) { doNotLog = (typeof doNotLog != 'undefined') ? doNotLog : false; var tmpArray = []; for (var i=0; i/, '') == salutationString) $(this).remove(); }); for (var language in savedSalutations) { if (savedSalutations.hasOwnProperty(language)) { for (var field in savedSalutations[language]) { if (savedSalutations[language].hasOwnProperty(field)) { if (field == salutationSelectIds[salutationField] && savedSalutations[language][field].length == 2 && savedSalutations[language][field][1].length > 0) { var tmpArray = []; for (var i=0; i/, '') == salutationString) $(this).remove(); }); var newList = []; for(var key in LocalConfiguration.EmailList) { if(LocalConfiguration.EmailList[key][0] != salutationString) newList.push(LocalConfiguration.EmailList[key]); } LocalConfiguration.EmailList = newList; LocalConfiguration.Save(); } } }; CommonToolsClass.prototype.createOrderedSalutationObject = function(ticket, messageNo) { var remainingSalutationFields = {'salutation': [], 'title': [], 'introduction phrase': [], 'closing phrase': [], 'punctuation mark': []}; var fieldNames = Object.keys(remainingSalutationFields); var salutationFields = {}, i, j, savedResult, thisLang, salutationCounter = {}; messageNo = (typeof messageNo == 'undefined' || isNaN(messageNo) || messageNo < 0) ? 0 : messageNo; var nameArray = ticket.messages[messageNo].fn.split(' '), firstName = nameArray[0].replace(/^ +/, '').replace(/ +$/, ''); nameArray.splice(0,1); var lastName = nameArray.join(' ').replace(/^ +/, '').replace(/ +$/, ''); if (ticket.messages[messageNo].fn.indexOf(',') != -1) { nameArray = ticket.messages[messageNo].fn.split(','); lastName = nameArray[0].replace(/^ +/, '').replace(/ +$/, ''); nameArray.splice(0,1); firstName = nameArray.join(',').replace(/^ +/, '').replace(/ +$/, ''); } var myTicketSalutations = this.clone(this.ticketSalutations); salutationFields['punctuation mark'] = [true, [[',',0]]]; if (typeof myTicketSalutations[ticket.l.toLowerCase()] != 'undefined') { salutationFields['first name'] = [(myTicketSalutations[ticket.l.toLowerCase()]['first name'][0] >= 0), firstName]; salutationFields['last name'] = [(myTicketSalutations[ticket.l.toLowerCase()]['last name'][0] >= 0), lastName]; for (i=0; i 0) ? [(savedResult[0] >= 0)] : [false]; salutationFields[fieldNames[i]][1] = (savedResult[1].length > 0) ? savedResult[1] : [['',0]]; salutationCounter[fieldNames[i]] = salutationFields[fieldNames[i]][1].length; } } else { salutationFields['first name'] = [true, firstName]; salutationFields['last name'] = [true, lastName]; for (i=0; i b.c) return 1; else if (a.c < b.c) return -1; else return 0; }; CommonToolsClass.prototype.phpUnserialize = function(serializedString) { var unserializedObject = null; if (serializedString == 'a:0:{}') { unserializedObject = []; } else { var tmpArray = serializedString.split(':'), unserializedObject = null, prefixLength = 0; if (tmpArray[0] == 'i') { unserializedObject = parseInt(tmpArray[1]); } else if (tmpArray[0] == 'b') { unserializedObject = (tmpArray[1] == 0) ? false : true; } else if (tmpArray[0] == 's') { var stringLength = tmpArray[1]; prefixLength = 4 + stringLength.length; unserializedObject = lz_global_base64_url_decode(serializedString.substr(prefixLength, stringLength)); } else if(tmpArray[0] == 'a') { var arrayLength = tmpArray[1]; prefixLength = 4 + arrayLength.length; var tmpObject = serializedString.substr(prefixLength, serializedString.length - prefixLength - 2).split(';'); unserializedObject = {}; var unserializedArray = [], arrayCounter = 0, isArray = true; for (var i=0; i.*?<\/a>/gi); // [^#] if (regExpMatch != null) { for (var i=0; i(.*?)<\/[a]>/gi, '$2'); } else if (thisHtml.match(/handleUploadRequest/i) != null) { // Do not replace this } else if (thisHtml.match(/.*?<\/a>/i) != null && thisHtml.match("data\-url") != null) { thisHtml = thisHtml.replace(/(.*?)<\/a>/gi, '$5'); } else if (thisHtml.match(/.*?<\/a>/i) != null && thisHtml.match("data\-url") != null) { thisHtml = thisHtml.replace(/(.*?)<\/a>/gi, '$4'); } else if (thisHtml.match(/.*?<\/a>/i) != null) { thisHtml = thisHtml.replace(/(.*?)<\/a>/gi, '$4'); } else { thisHtml = thisHtml.replace(/(.*?)<\/a>/gi, '$3'); } var thisRegExp = new RegExp(RegExp.escape(regExpMatch[i]), 'gi'); htmlText = htmlText.replace(thisRegExp, thisHtml); htmlText = htmlText.replace(/target=".*?"/, ''); } } return htmlText; }; CommonToolsClass.prototype.URLToHTML = function(myText) { myText = myText.replace(/ /g,' '); var i, j, replacement, replaceLink; var webSites = myText.match(/(www\.|(http|https):\/\/)[.a-z0-9-]+\.[a-z0-9\/_:@=.+!?,##%&~-]*[^.|'|# |\(|?|,| |>|<|;|\)]/gi); var existingLinks = myText.match(/.*?<\/a>/gi); var existingSource = myText.match(/<.*?src.*?>/gi); if (typeof webSites != 'undefined' && webSites != null) { for (i=0; i' + lzm_commonTools.SubStr(webSites[i],120,true) + ''; else replacement = '' + lzm_commonTools.SubStr(webSites[i],120,true) + ''; myText = myText.replace(webSites[i], replacement); } } } var mailAddresses = myText.match(/[\w\.-]{1,}@[\w\.-]{2,}\.\w{2,8}/gi); if (typeof mailAddresses != 'undefined' && mailAddresses != null) { for (i=0; i' + mailAddresses[i] + ''; myText = myText.replace(mailAddresses[i], replacement); } } } if (myText.match(/.*?<\/a>/i) != null) { myText = myText.replace(/(.*?)<\/a>/gi, '$5'); } else if (myText.match(/.*?<\/a>/i) != null) { myText = myText.replace(/(.*?)<\/a>/gi, '$4'); } myText = myText.replace(/(.*?)<\/a>/gi, '$3'); myText = myText.replace(/(.*?)<\/a>/gi, '$4'); myText = myText.replace(/(target="_blank" )+/gi, 'target="_blank" '); return myText; }; CommonToolsClass.prototype.escapeHtml = function(myText, escapeHtmlLineBreaks) { if(typeof myText == 'undefined') return ''; escapeHtmlLineBreaks = (typeof escapeHtmlLineBreaks != 'undefined') ? escapeHtmlLineBreaks : false; // Replace surrounding font tags as the Windows client sends those myText = myText.replace(/^/g,'').replace(/<\/font>$/,''); // Replace & by & inside html entities myText = myText.replace(/&(([#a-z0-9]*;)+?)/gi, '&$1'); // replace < and > by their html entities myText = myText.replace(//g,'>'); // replace line endings by their html equivalents myText = myText.replace(/\n/g, '').replace(/\r/, ''); if(!escapeHtmlLineBreaks) { myText = myText.replace(/<br \/>/g, '
'); myText = myText.replace(/<br>/g, '
'); } myText = myText.replace(/"/g, '"'); return myText; }; CommonToolsClass.prototype.ReplaceCommonPlaceholders = function(_objectId, _resourceText) { try { var that = this, i; var visitorObj = VisitorManager.GetVisitor(_objectId); var ticketObj = lzm_chatDisplay.ticketDisplay.GetTicketById(_objectId); var ticketRootObj = Ticket.GetRootMessage(ticketObj); var visitorBrowser = VisitorManager.GetLastActiveVisitorBrowser(_objectId); var chatObj = DataEngine.ChatManager.GetChat(_objectId,'SystemId'); var groupId = (chatObj != null && d(chatObj.dcg) && chatObj.dcg != '') ? chatObj.dcg : ''; var visitorName = (visitorObj != null) ? VisitorManager.GetVisitorName(visitorObj) : ''; var visitorNameArray = (visitorName.indexOf(',') == -1) ? visitorName.split(' ') : visitorName.split(','); var firstNameEntry = visitorNameArray.splice(0,1)[0].replace(/^ +/, '').replace(' +$', ''); var visitorFirstName = (visitorName.indexOf(',') == -1) ? firstNameEntry : visitorNameArray.join(' ').replace(/^ +/, '').replace(' +$', ''); var visitorLastName = (visitorName.indexOf(',') != -1) ? firstNameEntry : visitorNameArray.join(' ').replace(/^ +/, '').replace(' +$', ''); var question = (chatObj != null && d(chatObj.s) && chatObj.s != '') ? chatObj.s : ''; var visitorIp = (visitorObj != null && d(visitorObj.ip)) ? visitorObj.ip : ''; var websiteNames = (visitorObj != null) ? VisitorManager.GetWebsiteNames(visitorObj) : ''; var visitorEmail = DataEngine.inputList.getInputValueFromVisitor(112,visitorObj); var visitorPhone = DataEngine.inputList.getInputValueFromVisitor(116,visitorObj); var chatId = (chatObj != null && d(chatObj.i)) ? chatObj.i : ''; var ticketId = (ticketObj != null && d(ticketObj.id)) ? ticketObj.id : ''; var ticketHash = (ticketObj != null && d(ticketObj.h)) ? ticketObj.h : ''; var ticketSubject = (ticketRootObj != null && d(ticketRootObj.s)) ? ticketRootObj.s : ''; var pageTitle = (visitorBrowser != null && d(visitorBrowser.h2) && visitorBrowser.h2.length > 0) ? visitorBrowser.h2[visitorBrowser.h2.length - 1].title : ''; var url = (visitorBrowser != null && d(visitorBrowser.h2) && visitorBrowser.h2.length > 0) ? visitorBrowser.h2[visitorBrowser.h2.length - 1].url : ''; var searchString = ''; var now = lzm_chatTimeStamp.getLocalTimeObject(); var time = that.getHumanDate(now, 'shorttime', lzm_chatDisplay.userLanguage); var date = that.getHumanDate(now, 'date', lzm_chatDisplay.userLanguage); var domain = ''; var myAccount = DataEngine.operators.getOperator(lzm_chatDisplay.myId); var replacementArray = [ {p: '%operator_name%', r: myAccount.name}, {p: '%name%', r: myAccount.name}, {p: '%operator_firstname%', r: myAccount.fn}, {p: '%operator_lastname%', r: myAccount.ln}, {p: '%id%', r: lzm_chatDisplay.myLoginId}, {p: '%operator_email%', r: myAccount.email}, {p: '%group_id%', r: groupId}, {p: '%external_name%', r: visitorName}, {p: '%external_firstname%', r: visitorFirstName}, {p: '%external_lastname%', r: visitorLastName}, {p: '%question%', r: question}, {p: '%external_ip%', r: visitorIp}, {p: '%external_email%', r: visitorEmail}, {p: '%external_phone%', r: visitorPhone}, {p: '%chat_id%', r: chatId}, {p: '%ticket_id%', r: ticketId}, {p: '%ticket_hash%', r: ticketHash}, {p: '%subject%', r: ticketSubject}, {p: '%page_title%', r: pageTitle}, {p: '%url%', r: url}, {p: '%domain%', r: domain}, {p: '%searchstring%', r: searchString}, {p: '%localtime%', r: time}, {p: '%website_name%', r: websiteNames}, {p: '%localdate%', r: date} ]; var selectedValue,customInputs = DataEngine.inputList.getCustomInputList(); var rootMessage = (ticketObj != null && ticketObj.messages.length) ? ticketObj.messages[0] : null; for (i=0; i' + '' + tidc('ticket_id') + '' + _ticket.id + '' + '' + tidc('group') + '' + myGroupName + '' + '' + tidc('date') + '' + msgDateHuman + '' + '' + tidc('subject') + '' + that.escapeHtml(message.s) + '' + '' + tidc('name') + '' + that.escapeHtml(message.fn) + '' + '' + tidc('email') + '' + that.escapeHtml(message.em) + '' + '' + tidc('company') + '' + that.escapeHtml(message.co) + ''; for (var i=0; i' + val[0].text + ''; } } tiHTML += ''; return tiHTML; }; var GetMessagePrintHTML = function(_ticket,_messageNo){ var message = _ticket.messages[_messageNo]; var myOperator = DataEngine.operators.getOperator(message.sid); var myOperatorName = (myOperator != null) ? myOperator.name : message.sid; var msgDate = lzm_chatTimeStamp.getLocalTimeObject(message.ct * 1000, true); var msgDateHuman = that.getHumanDate(msgDate, 'full', lzm_chatDisplay.userLanguage); var tmpFrom1 = (message.fn != '') ? that.escapeHtml(message.fn) : ''; var tmpFrom2 = (message.fn != '' && message.em != '') ? ' <' + that.escapeHtml(message.em) + '>' : (message.fn == '' && message.em != '') ? that.escapeHtml(message.em) : ''; var msgFrom = (message.t == 4 || message.t == 3) ? tmpFrom1 + tmpFrom2 : (message.t == 1) ? myOperatorName : ''; var msgText = that.escapeHtml(message.mt.replace(/\r\n/g, '
').replace(/\n/g, '
').replace(/\r/g, '
')); var mHTML = ''; mHTML += '

---------------------------------------- ' + t('Message /',[['', parseInt(_messageNo) + 1], ['', _ticket.messages.length]]) + ' ----------------------------------------
'; mHTML += ''; if (message.t != 2) { mHTML += ''; } mHTML += ''; mHTML += '' + '' + '
' + t('From:') + '' + msgFrom + '
' + tidc('date') + '' + msgDateHuman + '
 
' + msgText + '


'; return mHTML; }; switch(myType) { case 'ticket': myContent = GetTicketPrintHTML(myObject.ticket); for(var key in myObject.ticket.messages) myContent += GetMessagePrintHTML(myObject.ticket,key); break; case 'message': myContent = GetTicketPrintHTML(myObject.ticket); myContent += GetMessagePrintHTML(myObject.ticket,myObject.msgNo); break; case 'chat': var myChat = that.clone(myObject.chat); var chatDate = lzm_chatTimeStamp.getLocalTimeObject(myChat.ts * 1000, true); var chatDateHuman = that.getHumanDate(chatDate, 'full', lzm_chatDisplay.userLanguage); var chatDuration = that.getHumanTimeSpan(parseInt(myChat.te) - parseInt(myChat.ts)); var waitingTime = (myChat.t == 1) ? that.getHumanTimeSpan(parseInt(myChat.wt)) : '-'; var language = (myChat.il != '') ? myChat.il : '-'; var langName = this.GetLanguageName(language); var ipAddress = (myChat.ip != '') ? myChat.ip : '-'; var host = (myChat.ho != '') ? myChat.ho : '-'; var phone = (myChat.cp != '') ? that.escapeHtml(myChat.cp) : '-'; var opId, cpId, qId, name, operatorName, groupName; if (myChat.t == 0) { var opList = myChat.iid.split('-'); var myPosition = $.inArray(lzm_chatDisplay.myId, opList); if (myPosition != -1) { opId = opList[myPosition]; cpId = opList[1 - myPosition]; } else { opId = opList[0]; cpId = opList[1]; } qId = myChat.iid; } else { opId = myChat.iid; cpId = (myChat.eid != '') ? myChat.eid : myChat.gid; qId = cpId; } try { name = (myChat.t == 0) ? DataEngine.operators.getOperator(cpId).name : (myChat.t == 1) ? that.escapeHtml(myChat.en) : (myChat.gid == 'everyoneintern') ? tid('all_operators') : capitalize(myChat.gid); } catch (e) {name = '';} try { var operator = DataEngine.operators.getOperator(opId); operatorName = (operator != null) ? operator.name : '-'; } catch (e) { operatorName = ''; } try { groupName = (myChat.gid != '') ? (myChat.gid != 'everyoneintern') ? DataEngine.groups.getGroup(myChat.gid).name : tid('all_operators') : '-'; } catch (e) { groupName = ''; } var email = (myChat.em != '') ? that.escapeHtml(myChat.em) : '-'; var company = (myChat.co != '') ? that.escapeHtml(myChat.co) : '-'; var area = (myChat.ac != '') ? myChat.ac : '-'; var pageUrl = (typeof myChat.u != 'undefined' && myChat.u != '') ? myChat.u : '-'; var result = (myChat.t == 1) ? (myChat.sr == 0) ? t('Missed') : (myChat.sr == 1) ? t('Accepted') : t('Declined') : '-'; var endedBy = (myChat.t == 1) ? (myChat.er == 0) ? t('User') : tid('operator') : '-'; var question = (typeof myChat.q != 'undefined' && myChat.q != '') ? that.escapeHtml(myChat.q) : '-'; myContent = '' + '' + '' + ''; if(myChat.t == 1) { myContent += ''; myContent += ''; } else if(myChat.t == 0) { myContent += ''; myContent += ''; } if(myChat.t != 0) myContent += ''; if(myChat.t == 1) { myContent += '' + '' + '' + '' + '' + ''; if(myChat.t == 1) myContent += ''; myContent += '' + '' + '' + ''; myContent += '' + ''; } myContent += '' + '
' + tidc('date') + '' + chatDateHuman + '
' + tidc('chat_id') + '' + myChat.cid + '
' + tidc('name') + '' + name + '
' + tidc('operator') + '' + operatorName + '
' + tidc('operator',' 1:') + '' + name + '
' + tidc('operator',' 2:') + '' + operatorName + '
' + t('Group:') + '' + groupName + '
' + tidc('email') + '' + email + '
' + tidc('phone') + '' + phone + '
' + tidc('company') + '' + company + '
' + tidc('language') + '' + langName + '
' + tidc('IP') + '' + ipAddress + '
' + tidc('host') + '' + host + '
' + tidc('duration') + '' + chatDuration + '
' + tidc('website_name') + '' + area + '
' + tidc('waiting_time') + '' + waitingTime + '
' + tidc('result') + '' + result + '
' + tidc('ended_by') + '' + endedBy + '
' + tidc('url') + '' + pageUrl + '
' + t('Question:') + '' + question + '
 
' + that.escapeHtml(myChat.cplain.replace(/\r\n/g, '
').replace(/\n/g, '
') .replace(/\r/g, '
')) + '
'; break; } if (myContent != '') { if(IFManager.IsDesktopApp()) IFManager.IFPrintContent(myContent); else { printWindow = window.open('', 'print-window'); printWindow.document.write(myContent); printWindow.printNow(); printWindow.close(); } } }; CommonToolsClass.prototype.GetLanguageName = function(_iso){ return (d(lzm_chatDisplay.availableLanguages[_iso.toLowerCase()])) ? lzm_chatDisplay.availableLanguages[_iso.toLowerCase()] : (d(lzm_chatDisplay.availableLanguages[_iso.toLowerCase().split('-')[0]])) ? lzm_chatDisplay.availableLanguages[_iso.toLowerCase().split('-')[0]] : _iso; }; CommonToolsClass.prototype.phpSerialize = function(myObject, doEncode) { var that = this; doEncode = (typeof doEncode != 'undefined') ? doEncode : false; var counter = 0, myKey, myValue; var objectLength = (myObject instanceof Array) ? myObject.length : Object.keys(myObject).length; var serialized = ''; if (typeof myObject == 'object' && myObject instanceof Array) { serialized += 'a:' + objectLength.toString() + ':{'; for (var i=0; i=0; i--) if(ar[i][prop] === value)ar.splice(i,1); }; CommonToolsClass.prototype.SortByProperty = function(_ar,_property,_asc){ var k,sorterList = [],resList=[]; _asc = (d(_asc)) ? _asc : false; for(k in _ar) sorterList.push(_ar[k][_property]); sorterList.sort(); if(_asc) sorterList.reverse(); for(k in sorterList) resList.push(lzm_commonTools.GetElementByProperty(_ar,_property,sorterList[k])[0]); return resList; }; CommonToolsClass.prototype.ApplyFromXML = function(object,attributes,node){ for (var attrIndex = 0; attrIndex < attributes.length; attrIndex++) object[attributes[attrIndex].name] = lz_global_base64_url_decode(attributes[attrIndex].value); if(d(node)) object.Value = lz_global_base64_url_decode(node.text()); }; CommonToolsClass.prototype.SubStr = function(str,length,dots){ if(!d(str) || str == null) return ''; if(str.length]+)>)/ig,""); else return ''; }; CommonToolsClass.prototype.NL2BR = function(_str){ if(_str == null) return ''; return _str.replace(/\r\n/g, '\n').replace(/\r/g, '\n').replace(/\n/g, '
'); }; CommonToolsClass.prototype.BR2NL = function(_str){ return _str.replace(/
/g,'
').replace(/
/g, '\r\n'); }; CommonToolsClass.prototype.RemoveTags = function(_str){ _str = _str.replace(/
/ig, "\r\n"); _str = _str.replace(/
/ig, "\r\n"); return _str.replace(/<([^>]+?)([^>]*?)>(.*?)<\/\1>/ig, ""); }; CommonToolsClass.prototype.FormatTableTags = function(_list){ var html = '',count=0; if(d(_list) && _list.length) { _list = _list.split(','); for(var key in _list) { count++; if(count < 5) html += '' + lzm_commonTools.htmlEntities(_list[key]) + ''; else return html + " ..."; } return html; } else return ''; }; if (!String.prototype.startsWith) { String.prototype.startsWith = function(searchString, position){ position = position || 0; return this.substr(position, searchString.length) === searchString; }; } if (!String.prototype.endsWith) { String.prototype.endsWith = function(searchString, position) { var subjectString = this.toString(); if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) { position = subjectString.length; } position -= searchString.length; var lastIndex = subjectString.lastIndexOf(searchString, position); return lastIndex !== -1 && lastIndex === position; }; } CommonToolsClass.prototype.GetLastWordAt = function(_text,_position) { var parts = $.trim(_text.replace(/ /g,' ')).split(' '); if(parts.length) return parts[parts.length-1]; parts = _text.split('
'); if(parts.length) return parts[parts.length-1]; parts = _text.split('\n'); if(parts.length) return parts[parts.length-1]; }; CommonToolsClass.prototype.HighlightSearchKey = function(_text,_search,_positioning,_maxlength){ _maxlength = d(_maxlength) ? _maxlength : 300; if(_maxlength == -1) _maxlength = 10000000; try { if(!d(_search) || _search == '') return this.SubStr(_text,_maxlength,true); if(!d(_text) || _text == '') return ''; _text = _text.toString(); if(_positioning) { var forstocc = _text.toLocaleLowerCase().indexOf(_search.toLocaleLowerCase()); var dots = _text.length > _maxlength ? '...' : ''; if(forstocc < _maxlength) _text = _text.substr(0,_maxlength) + dots; else if(forstocc > _maxlength && forstocc > ((_text.length-_search.length)-20)) _text = dots + _text.substr(forstocc-(_maxlength/2),_maxlength+(_maxlength/2)); else if(forstocc > _maxlength) _text = dots + _text.substr(forstocc-(_maxlength/2),_maxlength+(_maxlength/2)) + dots; } var regExp = new RegExp(RegExp.escape(_search), 'ig'); //_text = _text.replace(regExp, '' + _search + ''); _text = _text.replace(regExp, function (match) { return '' + match + ''; } ); return _text; } catch(ex) { console.log(_text); console.log(ex); return _text; } }; CommonToolsClass.prototype.PadStart = function(_str, _add, _size) { var s = _str + ''; while (s.length < _size) s = _add + s; return s; }; CommonToolsClass.prototype.ArrayUnique = function(_array){ var a = _array.concat(); for(var i=0; i' + _val + ''; return _val; }; CommonToolsClass.prototype.MakeIDSafe = function(_val){ return _val.replace(/[^A-Za-z0-9.@\-\_]/g, ""); }; CommonToolsClass.prototype.IsIDSafe = function(_val){ return _val === this.MakeIDSafe(_val); }; CommonToolsClass.prototype.Mask = function(_val){ var mask = ''; if(d(_val) && typeof _val == 'string') for(var i=0;i<_val.length;i++) mask+= '*'; return mask; }; CommonToolsClass.GetRelativePositionOf = function(_id){ try { var eTop = $('#' + _id).offset().top; eTop = (eTop - $(window).scrollTop()); var eLeft = $('#' + _id).offset().left; eLeft = (eLeft - $(window).scrollLeft()); return [eTop, eLeft]; } catch(ex) { deblog(_id); } return [0,0]; }; CommonToolsClass.AnimationPoints = []; CommonToolsClass.AnimateElement = function(_idToAnimate,_startElementId,_endElementId,_runTime){ var startPos = (_startElementId != null) ? CommonToolsClass.GetRelativePositionOf(_startElementId) : null; var endPos = CommonToolsClass.GetRelativePositionOf(_endElementId); if(startPos != null) $('.' + _idToAnimate).css({display:'block',top:startPos[0]+20+'px',left:startPos[1]+20+'px'}); $('.' + _idToAnimate).animate({top:endPos[0]+'px',left:endPos[1]+5+'px'},_runTime); CommonToolsClass.AnimationPoints.push(setTimeout(function(){ $('#' + _endElementId).css({'box-shadow':'inset 0 0 10px var(--red)'}); },_runTime)); }; CommonToolsClass.AnimationRun = function(_startId,_targets,_onEnd){ var _mouseId = 'mouse-move'; var animTime = 1500; var waitBeforeClickTime = 1500; $('#mouse-protect').css({'display':'block'}); $('#mouse-stop').css({'display':'block'}); var totalTime = 1000; for(var i=0;i<_targets.length;i++) { var currentTarget = _targets[i]; var from = (i == 0) ? _startId : null; CommonToolsClass.AnimationPoints.push(setTimeout(function(_param1,_param2) { if(d(_param2.id)) CommonToolsClass.AnimateElement(_mouseId,_param1,_param2.id,animTime); },totalTime,from,currentTarget)); totalTime += animTime; totalTime += waitBeforeClickTime; setTimeout(function(_param1){ if(d(_param1.id)) $('#' + _param1.id).css({'box-shadow':'none'}); },totalTime, currentTarget); CommonToolsClass.AnimationPoints.push(setTimeout(function(_param1){ if(d(_param1.id)) { if(d(_param1.value)) { $('#' + _param1.id).val(_param1.value); $('#' + _param1.id).change(); } else if(d(_param1.focus)) { $('#' + _param1.id).focus(); } else if(d(_param1.checked)) { $('#' + _param1.id).prop('checked',_param1.checked); $('#' + _param1.id).change(); } else $('#' + _param1.id).click(); } else if(d(_param1.url)) { openLink(_param1.url) } },totalTime, currentTarget)); totalTime += waitBeforeClickTime; } CommonToolsClass.AnimationPoints.push(setTimeout(function(){ CommonToolsClass.AnimationRunStop(); if(d(_onEnd)) setTimeout(_onEnd,1); },totalTime-waitBeforeClickTime)); }; CommonToolsClass.AnimationRunStop = function(){ for(var key in CommonToolsClass.AnimationPoints) { clearTimeout(CommonToolsClass.AnimationPoints[key]); } CommonToolsClass.AnimationPoints = []; $('#mouse-protect').css({'display':'none'}); $('#mouse-stop').css({'display':'none'}); $('.mouse-move').css({display:'none'}); };