{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./js/highChart-comparison-search-obj-3.js","webpack:///./js/instGraph_es6_4_98.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","xmlHttp","xmlHttp2","xmlHttp3","window","searcher","ActiveXObject","XMLHttpRequest","arrComparison","globesChart","undefined","instrumentElement","sFeeder","sInstId","sSymbol","sExchange","iActive","sColor","this","id","active","color","feeder","symbol","exchangeId","init","setMaxSymbols","state","JSON","parse","localStorage","getItem","tab","isSymbolExists","symbols","length","comparisonSymbols","stateArrComparison","symbolsLength","stateArrLength","RefreshDataAndGraph","instInitParams","Array","isArray","Highcharts","defaultOptions","colors","is_mobile","hideGraphHelpDiv","selAjaxResult_onClick","obj","query_keyUp","event","caller","selObjName","ar","document","getElementById","keyCode","style","display","$","parent","removeClass","ajax_instrumentList","cleanAndCloseHelpDiv","oDiv","attr","oQuery","find","focus","objDivHiddenSearch","innerHTML","e","OnBlurGraphText","objHidDiv","parseInt","getGraphEnter","UpdateSymboles","me","abort","err","q","url","instrumentType","escape","open","onreadystatechange","readyState","status","responseText","split","build_InstrumentsList_ajax_result","send","ex","ajax_instrumentData","exchangeIds","objDivName","isFirstTime","isRefreshGraph","alert","description","graphParams","Build_DataTable_ajax_results","refreshGraph","toString","ajax_indices","type","options","selectedIndex","_build_InstrumentsList_ajax_result","results","isIndices","objSel","html","arrInstruments","exchange","mouseover","addClass","mouseout","fullname","substring","instrumentParam","flagInstrumentInSymbols","GetSymbols","indexOf","replace","sSumLink","sItemLink","arrSymbols","arrSortedResult","sort","a","b","symbol1","symbol2","subTract","instParams","selPeriodValue","GetSelPeriod","arrData","fee","PCWeek","PCMonth","PCBMonth","PC2M","PC3M","PC6M","PCBYear","PC1Y","PC3Y","PC5Y","indexInArr","getInstrumentIndex","updateState","selectedPeriodData","checkedString","removeLink","instParam","push","arrIds","map","item","index","sortRows","slice","id1","id2","params","foundItem","param","initFirstTime","addInstrumentToComparison","addInstrument","IsSymbolInArray","flagExist","findRangeSelectionAttrName","selPeriod","selCount","attrName","periodName","changeRangeSelection","rangeSelectionData","each","removeInstrument","splice","removeInstrumentFromOutside","remove","chk_click","chkObj","checked","hideSeries","findIndex","toUpperCase","getInstrumentColor","arguments","graphExchanges","GetExchanges","$rangeSelectors","$selected","selIndex","session","localSessionRead","rangeSelector","count","GetRangeIndexByRangeType","eq","GetPropList","propToCollect","isGraph","list","substr","changeTheme","instId","series","seriesOptions","elem","css","reset","toExcel","instrumentid","click","val","append","keyup","change","chart","arrIndicatorsData","arrNoDayTypes","arrNoVolumeGraph","backgroundColor","chartHeight","currentInstrument","colorRed","colorGreen","chartType","dataGroupingObj","defaultDownload","defaultDataGroupingUnit","defRangeSelector","defaultChartHeight","defaultSmallChartHeight","defaultSmallChartHeightPercent","defaultSmallChartTop","defaultSmallChartTopPercent","dateTimeLabelFormats","millisecond","second","minute","hour","day","week","month","year","intervalId","indicators","indicatorsParams","isInputClick","isResolutionClick","isAddInstrumentClick","isRangeSelectorClick","isDayRangeDisabled","isWeekRangeDisabled","legends","maxSymbols","maxPoints","minutes","updateInput","Mode","saveState","useComparisonSymbols","isNavigator","isIndicators","navigatorSeriesData","period","prevExtremes","pointFormatInValue","pointFormatInPercent","plotOptionsSeries","resolutions","selResolution","yAxisOptions","min","xAxis","max","top","getDataGroupingObject_ByRangeSelector","getDataGroupingObj_ByResolution","res","unit","getUnitFromRangeStart","addInstrumentToOutsideTable","refreshAllData","showMaxSymbolsAlert","addIndicator","oParams","aColors","yAxisId","tooltipOptions","setTooltipFormater","toLowerCase","changeGraphTypeClick","linkedTo","showInLegend","marker","enabled","tooltip","signalLine","styles","lineColor","color1","convert2Rgba","fillColor","topLine","bottomLine","yAxis","newYAxisId","yAxis_add_new","cloneSeries","stringify","addSeries","update","share","legendBuildAll","$outsideChkbox","prop","afterSetExtremes","trigger","Math","floor","Date","unSelectResolutionButton","unSelectRangeButton","selectRangeCustomButton","dataMin","dataMax","updateInputs","points","setDataGrouping","dataGrouping","selectResolutionButton","afterRangeSelectorClick","data","dataLen","currentTarget","now","end","getTime","start","round","calcRangeStartCalc","currPeriod","time","xStart","xEnd","dayExtremes","findDayExtremes","setExtremes","redraw","showLoading","buildVolumeSeries","volume","fillVolumeData","instrumentName","decimals","compare","visible","buildIndicatoresArray","ajax","dataType","done","$indicatorWraper","forEach","label","graphicalAnalysisClick","fail","jqXHR","textStatus","errorThrown","console","log","buildIndicatorForm","element","templateIndicator","templatePeriod","templateColor","indicatorType","periodHtml","colorHtml","getOptions","indicatorsColors","colorIndex","filteredSeries","filter","userOptions","existsParams","objItem","htmlFields","arrItem","defVal","fieldName","indicatorHTML","title","join","off","hide","mousedown","spanNum","setInterval","num","mouseup","clearInterval","isNaN","linesColors","indicatorId","oParam","arrPeriods","gc","getOwnPropertyNames","idx","array","newVal","iNewVal","arrColors","x","indicatorName","removePerviousIndicatorsSeries","keys","periodVal","values","newColors","newParams","seriesIndicators","getIndicatorsSeriesParams","btnDeleteClick","isCompareMode","changeGraphType","copyArr","arr","innerArr","instrumentTypeId","orgData","mapedData","baseSeries","serios","changeGraphTypeButton","charHeight","isMobile","arrC","arrDec","calcRangeStart","rangeSelectorButton","selected","buttons","dayStart","calcDayStart","calcWeekStart","getFullYear","getMonth","getDate","calcMonthStart","calcYearStart","dayCount","lastTradeDate","getHours","getMinutes","createDate","date","days","months","years","setDate","setMonth","setFullYear","$obj","getPeriod","hasClass","setOptions","themeLight","themeDark","theme","createChart","stockChart","changeResolution","icount","force","units","plotOptions","chartLoadNew","chartRender","creditPosition","operandY","operandX","y","imgH","imgW","s_mode","windowWidth","innerWidth","isFullPage","qsMobile","chartWidth","width","height","chartLoad","objPos","renderer","image","add","range","datepicker","changeYear","yearRange","regional","trading_snapshot","getElementsByClassName","tradingItem","disabledRangeDay","disabledRangeWeek","findExchangeExtraTime","timeString","todayStartTime","exchageStartTime","exchangeStartTime","exchageEndTime","exchangeEndTime","arrDataFromTodayT","arrDataFromTodayE","orgArray","findMinSeriesData","subset","vol","parseFloat","getChartHeight","pageDefaultHeight","getIndicatorColors","loneColor","getPanning","getTypeSession","objType","getRangeButton","rangeSelectorGetAll","rangeType","getInputMinMAx","inputMin","inputMax","getAxisMinMAx","getDataGrouping","dataGrouing","getDataGroupingUnit","dataGrouingUnit","getDataUrl","isFirst","resolution","getDataUrlParams","_data","secret","user_id","cookie","match","navFirstParam","startParam","endParam","topParam","resParam","sourceParam","urlParam","instrumentId","isRealTime","rt","f","_defineProperty","getResolutionInMilisec","milSecInDay","startTime","endTime","weekAgo","prevDay","m2Ago","periodInMin","periodInDays","periodInWeeks","forced","getUnitByRange","getOrdinal","target","getAttribute","windowHeight","mid","scrollTop","show","scroll","handleChangeResolution","maxRange","minRange","numOfPointsInNewResolution","dg","currentUnit","currentUnitIndex","nextUnitIndex","isActive","location","href","test","navigator","userAgent","isVolumeVisible","isTooltipSharing","iconFullToggle","tickPositioner","first","last","tickInterval","newTicks","info","tickPositions","initYAxis","_this","endOnTick","tickLength","gridLineWidth","labels","format","align","formatter","offset","opposite","crosshair","snap","dashStyle","showLastLabel","tickPosition","axis","baseRate","compareValue","numberFormat","correctFloat","startOnTick","tickPixelInterval","sessionYAxis","pInstParam","unselectCompareButton","graphTypeId","iGraphTypeId","_typeof","isIndexBasic","isDayCloseDataOnly","graphStartTime","graphEndTime","rangeSelectorSet","legend","sId","sName","sType","syAxis","sIsFirst","sSeriesLen","seriesLen","build","textClass","maxLen","usedName","legendAdd","newLegend","legendCustomItemClick","stopPropagation","legendId","filterdCustomLegend","seriesType","y_axis","removeIndicatorFromDDL","removeSeriesFromChartById","yAxis_remove","unselectIndicatorsButton","shared","removeInstrumentFromSymbols","removeInstrumentFromOutsideTable","itemIndex","seriesLength","on","localSessionSetValue","storageName","newProps","storageObj","_objectSpread","setItem","localSessionSetData","chartIndicatorsParams","dgUnit","isFundComparison","instType","currentInstrumentType","localSessionClear","removeItem","navigatorOptions","adaptToUpdatedData","events","reversed","prepedData","point","tooltipSeriesNameConverter","timeToDate","today","prevDate","sTop","firstInstrumentName","firstInstrumentType","yatzig","isCompare","resolutionParams","allData","regex1","RegExp","isToCreateNewChart","arrParam","paramsUrl","method","eval","isToShowBase","arrBaseRate","instid","instrumenttype","typeid","periodType","prevTime","unshift","compareStart","zIndex","baseArr","firstSeriesWithData","sortedSeries","isDownColor","downColors","newItem","firstSeries","firstData","xMin","xMax","xMin_indexInData","arrBaseLine","dataLabels","textOutline","fontWeight","fontSize","enableMouseTracking","ordinal","xData","isTop","setTimeout","hideLoading","currentInstrumentTypeId","seriesId","seriesIndex","indicatorIndex","arrFilteredSeriesToRemove","pos","rangeSelectorIndexGet","restoreSession","setTheme","rangeButtonIndex","$selectedRangeButton","selectedRangeeButtonType","axisMin","axisMax","sessionInstrumentType","sessionInstrumentTypeId","msg","setDialogPosition","scrollbarOptions","liveRedraw","buttonArrowColor","margin","numOfDays","setResolutionButtonColor","unitName","setDatePickerDefault","setDefaults","dateFormat","onSelect","dateText","resCount","iIndex","objRes","selectTool","tool","showFullName","getCompareValue","pointFormatter","seriesTitle","middle","bottom","MACD","signal","close","high","low","tempDateTimeFormats","isDailyOverView","_tooltip","chartPanning","screen","chartNavOptions","chartScrollOpt","shareTooltip","spacingBottom","spacingTop","objTitle","marginBottom","bStyleMode","isCreditsEnabled","titleFontSize","tooltipFamily","text","graphTitle","useHTML","fontFamily","direction","textAlign","alignTicks","borderWidth","borderColor","renderTo","load","render","panning","styledMode","credits","position","annotationsOptions","enabledButtons","timezoneOffset","timeZoneOffset","navigation","buttonOptions","navigatorSeriosData","scrollbar","candlestick","upColor","OHLC","line","showCheckbox","approximation","area","column","minPointLength","pointPadding","macd","zones","valueDecimals","inputEnabled","allButtonsEnabled","lineWidth","autoRotation","tickAmount","exporting","allowHTML","chartOptions","rtl","verticalAlign","floating","itemMarginTop","itemMarginBottom","symbolRadius","symbolWidth","itemCheckboxStyle","isToCloseAll","unSelectTools","firstSmallYAxis","plotHeight","mainAxis","smallAxis","mainYAxisHeight","mainYAxisTop","smallHeight","distanceHeight","extraHeight","newChartHeightPercent","newPlotHeight","newDistanseHeightPercent","newSmallHeightPercent","y_axis_id","ret","numericSymbols","multi","pow","addAxis","yAxis_refresh","removedHeight","yAxisIndex","newDistanceHeightPercent","arrHP","smallGraphCounter","itemId","heightPercent","isMainAxis","arrYItem","reduce","accumulator","currentValue","currentIndex","setSize","onresize","formName","fName","onsubmit","blur","keypress","onGraphSearchKeyUp","H","toggle","exportChart","sCount","children","action","annotations","allItems","destroy","lang","thousandsSep","shortMonths","weekdays","noData","loading","seriesTypes","graph","graphmacd","graphsignal","sma","apply","wrap","proceed","longPeriod","signalPeriod","bb","newPathPart","gappedPath","getGraphPath","graphtopLine","fill","graphbottomLine","Axis","getSlotWidth","slotWidth","lastPxPos","isNumber","pxPos","toPixels","abs","g","StopPageReload"],"mappings":"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","file":"graph_comparison_bundle2.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","// JScript File\r\n\r\n// JScript File\r\n\r\n\r\nfunction getComparisonSearcherEngin() {\r\n           \r\n    let xmlHttp = (window.ActiveXObject) ? new ActiveXObject(\"Microsoft.XMLHTTP\") : new XMLHttpRequest()\r\n    let xmlHttp2 = (window.ActiveXObject) ? new ActiveXObject(\"Microsoft.XMLHTTP\") : new XMLHttpRequest()\r\n    let xmlHttp3 = (window.ActiveXObject) ? new ActiveXObject(\"Microsoft.XMLHTTP\") : new XMLHttpRequest()\r\n\r\n    let engin = {\r\n        arrComparison: [],\r\n        globesChart: undefined,\r\n\r\n        instrumentElement : function(sFeeder, sInstId, sSymbol, sExchange, iActive, sColor) {\r\n            this.id = sInstId;\r\n            this.active = iActive;\r\n            this.color = sColor;\r\n            this.feeder = sFeeder;\r\n            this.symbol = sSymbol;\r\n            this.exchangeId = sExchange;\r\n        },\r\n\r\n\r\n        \r\n\r\n        init: function (globesChart) {\r\n\r\n            if (globesChart != undefined)\r\n                this.globesChart = globesChart;\r\n            else\r\n                if (typeof window.globesChart != 'undefined')\r\n                    this.globesChart = window.globesChart;\r\n\r\n            this.globesChart.setMaxSymbols(10);\r\n            let state = JSON.parse(localStorage.getItem('state')),\r\n                tab = state != undefined ? state.tab : undefined,\r\n                isSymbolExists = state != undefined && state.symbols != undefined && state.symbols.length > 0 && state.symbols[0] == comparisonSymbols[0],\r\n                stateArrComparison = isSymbolExists && state.arrComparison != undefined ? state.arrComparison : [],\r\n                symbols = isSymbolExists ? state.symbols : [],\r\n                symbolsLength = symbols.length,                                \r\n                stateArrLength = stateArrComparison.length,\r\n                me = this;\r\n\r\n            if (tab == 'compare' && symbolsLength > 0 && stateArrLength > 0 && symbolsLength == stateArrLength) {\r\n                this.arrComparison = stateArrComparison;\r\n                this.RefreshDataAndGraph(true)\r\n            } else {\r\n\r\n                if (typeof instInitParams != 'undefined' && Array.isArray(instInitParams)) {\r\n                    for (var i = 0; i < instInitParams.length; i++) {\r\n                        this.arrComparison[i] = new this.instrumentElement(instInitParams[i][0], instInitParams[i][1], instInitParams[i][2], instInitParams[i][3], true, Highcharts.defaultOptions.colors[i])\r\n                    }\r\n                    this.RefreshDataAndGraph(true)\r\n                    \r\n                }\r\n            }\r\n            \r\n            if (is_mobile) { this.hideGraphHelpDiv(); }// this.hideSearchBox()}\r\n        },\r\n\r\n        selAjaxResult_onClick: function(obj) { //alert('selAjaxResult_onClick')\r\n\r\n            //obj.style.display = \"none\"\r\n        },\r\n\r\n\r\n\r\n\r\n         query_keyUp : function(event, caller, selObjName) { //alert(\"query_keyUp\")\r\n            var ar = document.getElementById(selObjName)\r\n            if (event) {\r\n                var keyCode = event.keyCode\r\n                //alert(keyCode + \" \" + caller.id)\r\n                switch (keyCode) {\r\n                    case 40: // key down\r\n                        //                    }\r\n                        return;\r\n                    case 38: // key up\r\n                        return;\r\n                    case 13: //enter\r\n                        return;\r\n                    case 9: //tabarraa\r\n                        return;\r\n                    case 27: //esc\r\n                        ar.style.display = \"none\"\r\n                        $(ar).parent().removeClass('open')\r\n                        return;\r\n                    default:\r\n\r\n                }\r\n            }\r\n            this.ajax_instrumentList(caller, selObjName)\r\n        },\r\n\r\n         cleanAndCloseHelpDiv: function () {\r\n             var oDiv = document.getElementById(\"divGraphHiddenSearch\");\r\n             var parent = $('#divSearchBox')\r\n             if (($(oDiv)).parent().attr(\"id\") == 'divSearchIndicesBox')\r\n                 parent = $('#divSearchIndicesBox');\r\n            var oQuery = parent.find('.queryForGraph').get(0)\r\n            this.hideGraphHelpDiv(4);\r\n            //oQuery.value = \"\";\r\n            \r\n            \r\n            oQuery.focus();\r\n        \r\n         },\r\n        \r\n        hideGraphHelpDiv: function (i) {\r\n            \r\n            //g_isHiddenDivDisplayed = 0;\r\n            var objDivHiddenSearch = document.getElementById(\"divGraphHiddenSearch\")\r\n            if (objDivHiddenSearch != null && objDivHiddenSearch.style.display == \"block\") {\r\n                try {\r\n                    objDivHiddenSearch.style.display = \"none\";\r\n                    objDivHiddenSearch.innerHTML = \"\";\r\n                    $(objDivHiddenSearch).parent().removeClass('open')\r\n                }\r\n                catch (e) { }\r\n            }\r\n         },\r\n        OnBlurGraphText: function () {\r\n            var objHidDiv = document.getElementById(\"hidIsGraphDivOpen\");\r\n            if (objHidDiv && parseInt(objHidDiv.value) == 0) {\r\n                this.hideGraphHelpDiv(3);\r\n            }\r\n        },\r\n        getGraphEnter: function (e) {\r\n            \r\n        },\r\n        UpdateSymboles: function (s) {\r\n            //arrComparison = s;\r\n        },\r\n\r\n        ajax_instrumentList: function (caller, selObjName) {\r\n            var me = this;\r\n            try {\r\n                xmlHttp.abort()\r\n                var ar = document.getElementById(selObjName)\r\n                try {\r\n                    // ar.style.display = \"none\" \r\n                    ar.innerHTML = \"\";\r\n\r\n                } catch (err) { }\r\n                var q = caller.value\r\n\r\n                if (q.length == 0) { return }\r\n                \r\n                \r\n                var url = \"\";\r\n                if (instrumentType == \"׳§׳¨׳Ÿ ׳ ׳׳ž׳ ׳•׳×\") {\r\n                    url = \"/portal/handlers/FundsListHandler.ashx?strToSearch=\" + escape(q);\r\n                }\r\n                else {\r\n                    var sFeeder = document.getElementById(\"hidFeeder\").value\r\n                    url = \"/portal/handlers/ETFListHandler.ashx?strToSearch=\" + escape(q) + \"&feeder=\" + sFeeder\r\n                }\r\n                    \r\n\r\n                xmlHttp.open(\"GET\", url, true)\r\n                xmlHttp.onreadystatechange = function () {\r\n                    if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {\r\n                        //if (xmlHttp.responseText.length == 0) {\r\n                        //    //caller.value = \"\"; return;\r\n                            \r\n                        //}\r\n                        var responseText = xmlHttp.responseText.length > 0 ? xmlHttp.responseText.split('~') : []\r\n                        if (responseText.length > 0) {\r\n                            // init(caller,selObjName)\r\n                            me.build_InstrumentsList_ajax_result(responseText, selObjName, 0, caller)\r\n                        } else {                            \r\n                            me.hideGraphHelpDiv(2);\r\n                        }\r\n                    }\r\n                    \r\n\r\n\r\n                }\r\n                xmlHttp.send(null)\r\n            } catch (ex) {/*alert('ajax\\n' + ex.toString())*/ }\r\n        },\r\n\r\n         ajax_instrumentData: function (exchangeIds, symbols, objDivName, isFirstTime, isRefreshGraph) {\r\n            var me = this;\r\n            try {\r\n                xmlHttp2.abort()\r\n                var ar = document.getElementById(objDivName)\r\n                try {\r\n                    ar.innerHTML = \"\";\r\n                } catch (err) { alert(err.description) }\r\n                var url = \"/portal/handlers/InstrumentYieldsHandler2.ashx?symbols=\" + symbols + \"&exchangeIds=\" + exchangeIds\r\n                xmlHttp2.open(\"GET\", url, true)\r\n                xmlHttp2.onreadystatechange = function () {\r\n                    if (xmlHttp2.readyState == 4 && xmlHttp2.status == 200) {\r\n                        if (xmlHttp2.responseText.length == 0) {\r\n                            return\r\n                        }\r\n                        var responseText = xmlHttp2.responseText.split('~')\r\n                        //init(caller,objDivName)\r\n                        var graphParams = me.Build_DataTable_ajax_results(responseText, objDivName, symbols)\r\n                        if(!isFirstTime && isRefreshGraph)\r\n                            me.refreshGraph(graphParams);\r\n                        \r\n                    }\r\n                }\r\n                xmlHttp2.send(null)\r\n            } catch (ex) { alert('ajax\\n' + ex.toString()) }\r\n        },\r\n\r\n        ajax_indices: function (caller, objDivName) {\r\n            var me = this;\r\n            try {\r\n                xmlHttp3.abort()\r\n                var ar = document.getElementById(objDivName)\r\n                try {\r\n                    ar.innerHTML = \"\";\r\n                } catch (err) { alert(err.description) }\r\n                var type = caller.options[caller.selectedIndex].value;\r\n                if (type == 0)\r\n                    return;\r\n\r\n                var url = \"/portal/handlers/InstrumentIndicesHandler.ashx?type=\" + type;\r\n                if (instrumentType != \"׳§׳¨׳Ÿ ׳ ׳׳ž׳ ׳•׳×\") {\r\n                    if (instrumentType == '')\r\n                        url += \"&feeder=0\";\r\n                    else {\r\n                        var sFeeder = document.getElementById(\"hidFeeder\").value\r\n                        url += \"&feeder=\" + sFeeder\r\n                    }\r\n                }\r\n               \r\n                xmlHttp3.open(\"GET\", url, true)\r\n                xmlHttp3.onreadystatechange = function () {\r\n                    if (xmlHttp3.readyState == 4 && xmlHttp3.status == 200) {\r\n                        if (xmlHttp3.responseText.length == 0) {\r\n                        }\r\n                        var responseText = xmlHttp3.responseText.split('~')                        \r\n                        var graphParams = me.build_InstrumentsList_ajax_result(responseText, objDivName, 1, caller)                       \r\n                    }\r\n                }\r\n                xmlHttp3.send(null)\r\n            } catch (ex) { alert('ajax\\n' + ex.toString()) }\r\n\r\n        },\r\n\r\n        _build_InstrumentsList_ajax_result : function(results, selObjName, isIndices) {\r\n            \r\n            var objSel = document.getElementById(selObjName)\r\n            var html = \"<table cellpadding='1' cellspacing='1' border='0' width='100%'>\"\r\n            for (var i = 0; i < results.length; i++) {\r\n                var arrInstruments = results[i].split('|')\r\n                var name = arrInstruments[0]\r\n                var exchange = (isIndices == 1 ? arrInstruments[1] : 45);\r\n                var symbol = arrInstruments[2];\r\n                //var id = arrInstruments[3];\r\n                //var feeder = arrInstruments[4];\r\n               // var instParam = id + \"|\" + feeder;\r\n                html += \"<tr \"  \r\n                     + (isIndices == 1\r\n                        ? (\" onclick='searcher.addInstrument(\" + exchange + \",\\\"\" + symbol + \"\\\")'\")\r\n                        : (\" onclick='searcher.addInstrument(\" + exchange + \",\" + symbol + \")'\")\r\n                        ) \r\n                    + \"><td width='150'>\" + name + \"</td></tr >\" \r\n                    \r\n                    \r\n            }\r\n            html += \"</table>\"\r\n            objSel.innerHTML = html\r\n            $(objSel).find(\"table tr\").mouseover(function () { $(this).addClass('selected') });\r\n            $(objSel).find(\"table tr\").mouseout(function () { $(this).removeClass('selected') });\r\n            objSel.style.display = \"block\"\r\n            $(objSel).parent().addClass(\"open\")\r\n        },\r\n\r\n        build_InstrumentsList_ajax_result : function(results, selObjName, isIndices, caller) {\r\n            \r\n            var objSel = document.getElementById(selObjName)\r\n\r\n            var prevType = \"\";            \r\n            var html = \"<table id='tblHiddenSearch' cellpadding='1' cellspacing='1' border='0' width='100%' >\"\r\n            html += '<tr><td class=\"title1\" width=\"80%\">׳©׳ ׳ ׳™׳™׳¨</td><td class=\"title1\" width=\"19%\">׳¡׳™׳ž׳•׳œ</td></tr>';\r\n\r\n            var prevType = \"\";\r\n            var sGraphDelim = \"|\";\r\n\r\n            for (var i = 0; i < results.length; i++) {\r\n                if(results[i].length == 0)\r\n                    continue; \r\n                var arrInstruments = results[i].split('|')\r\n                var fullname = arrInstruments[0];\r\n                var name = arrInstruments[0].substring(0,40)\r\n                var exchange = (isIndices == 1 ? arrInstruments[1] : 45);\r\n                var id = arrInstruments[1];\r\n                var symbol = arrInstruments[2];\r\n                var type = arrInstruments[3];\r\n                var exchangeName = arrInstruments[4];\r\n                var iType = parseInt(type);\r\n                var sFeeder = exchange == 45 ? 0 : 1;\r\n                \r\n                \r\n                \r\n                \r\n                //var id = arrInstruments[3];\r\n                //var feeder = arrInstruments[4];\r\n               // var instParam = id + \"|\" + feeder;\r\n                var rowMouseOver = \" onmouseover='searcher.onMouseOver(\" + i + \")') \";\r\n                var instrumentParam = symbol ;//id + sGraphDelim + sFeeder + sGraphDelim + symbol;\r\n                var flagInstrumentInSymbols = this.GetSymbols(true).indexOf(instrumentParam) > -1;\r\n                var rowClass = flagInstrumentInSymbols ? \" class='selected' \" : \"\";\r\n                var jsTitle = fullname.replace(\"'\", \"&#39;\");\r\n                \r\n\r\n                html += \"<tr \"  \r\n                     + rowClass\r\n                     //+ rowMouseOver\r\n                     + (isIndices == 1\r\n                        ? (flagInstrumentInSymbols ? '' : (\" onclick='searcher.addInstrument(\" + exchange + \",\\\"\" + symbol + \"\\\")'\"))\r\n                        : (flagInstrumentInSymbols ?  '' : (\" onclick='searcher.addInstrument(\" + exchange + \",\" + symbol + \")'\"))\r\n                        ) \r\n                    + \"><td style='direction:rtl'  title='\" + jsTitle +\"'>\" + name + \"</td>\"\r\n                    + \"<td style='text-align:left'>\" + symbol + \"</td>\"                      \r\n                    +\"</tr >\" \r\n            }\r\n            var sSumLink = \"\";\r\n            if (isIndices == 0 && !!is_mobile == false) {\r\n                var sItemLink = \"׳œ׳›׳œ ׳”׳×׳•׳¦׳׳•׳× ׳¢׳‘׳•׳¨ \" + \" \" + caller.value;\r\n                var sItemURL = \"/portal/search.aspx?searchType=exact&searchQuery=\" + escape(caller.value) + \"&id=7\";\r\n                sSumLink = \"<tr><td colspan=2><hr style='width:99%;margin:2px 0px 2px 0px;' /></td></tr><tr class='trAllResults' onclick='ruleriHeaderSearchEvent(\\\"Search_QauteDiv\\\",\\\"All results\\\")'><td colspan=2 align='right' style='font-weight:bold;padding:0px 5px 5px 5px;display:inline;'><a href='\" + sItemURL + \"' style='color:#cc0000;float:right;'>\" + sItemLink + \"</a></td></tr>\";\r\n            } \r\n\r\n            html += sSumLink  + \"</table>\";\r\n            objSel.innerHTML = html\r\n            $(objSel).find(\"table tr\").mouseover(function () { $(this).addClass('selected') });\r\n            $(objSel).find(\"table tr\").mouseout(function () { $(this).removeClass('selected') });\r\n            objSel.style.display = \"block\"\r\n            $(objSel).parent().addClass(\"open\")\r\n        },\r\n\r\n\r\n\r\n\r\n        Build_DataTable_ajax_results: function (results, objDivName, symbols) {\r\n            var me = this;            \r\n\r\n            var arrSymbols = symbols.split(',')\r\n            var arrSortedResult = results.sort(function(a,b){ \r\n                var symbol1 = a.split('|')[1];\r\n                var symbol2 = b.split('|')[1]\r\n                var subTract = arrSymbols.indexOf(symbol1) - arrSymbols.indexOf(symbol2)\r\n                if (subTract > 0) return 1;\r\n                if (subTract < 0) return -1;\r\n                return 0;\r\n            });\r\n           \r\n\r\n            var instParams = []\r\n            var selPeriodValue = this.GetSelPeriod(\"data-key\");\r\n            var html = '<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"100%\" dir=\"rtl\" class=\"tblChannel\">' +\r\n                '<tr><td class=\"instrumentTitle\">&nbsp;</td>' +\r\n                '<td colspan= \"2\" class=\"instrumentTitle topInstrument_BorderRight\" > ׳©׳ ׳ ׳™׳™׳¨ ׳¢׳¨׳š</td > ' +\r\n                '<td class=\"instrumentTitle currPeriod\" width=\"100\">׳×׳©׳•׳׳” ׳œ׳×׳§׳•׳₪׳”</td>' +\r\n                '<td class=\"instrumentTitle\" width=\"100\">׳×׳©׳•׳׳”  ׳—׳•׳“׳©׳™׳×</td>' +\r\n                '<td class=\"instrumentTitle\" width=\"100\">׳×׳©׳•׳׳” ׳ž׳×׳—׳™׳œ׳× ׳”׳©׳ ׳”</td>' +\r\n                '<td class=\"instrumentTitle\" width=\"50\">׳“׳ž׳™ ׳ ׳™׳”׳•׳œ</td>' +\r\n                '<td class=\"instrumentTitle\" width=\"20\">&nbsp;</td></tr>'\r\n            for (var i = 0; i < arrSortedResult.length; i++) {\r\n                var arrData = arrSortedResult[i].split('|')\r\n                var name = arrData[0]\r\n                var symbol = arrData[1]\r\n                var id = arrData[2]\r\n                var time = arrData[3]\r\n                var fee = arrData[4]\r\n                var PCWeek = arrData[5]\r\n                var PCMonth = arrData[6]\r\n                var PCBMonth = arrData[7]\r\n                var PC2M = arrData[8]\r\n                var PC3M = arrData[9]\r\n                var PC6M = arrData[10]\r\n                var PCBYear = arrData[11]\r\n                var PC1Y = arrData[12]\r\n                var PC3Y = arrData[13]\r\n                var PC5Y = arrData[14]\r\n\r\n                var indexInArr = this.getInstrumentIndex(symbol)\r\n                if (indexInArr < 0)\r\n                    continue;\r\n\r\n                var color = Highcharts.defaultOptions.colors[indexInArr]\r\n                //update missing data    \r\n                var exchangeId = this.arrComparison[indexInArr].exchangeId;\r\n                var feeder = exchangeId == 45 || exchangeId == 9 ? '0' : '1';   \r\n                \r\n                if (this.arrComparison[indexInArr].id == 0) {\r\n                    this.arrComparison[indexInArr].id = id;                                      \r\n                    this.arrComparison[indexInArr].feeder = feeder;\r\n\r\n                    this.globesChart.updateState({\r\n                        arrComparison: this.arrComparison\r\n                    });\r\n                }                \r\n                \r\n\r\n                var selectedPeriodData = \"\";\r\n                \r\n                switch (selPeriodValue) {\r\n                    case 'w': selectedPeriodData = PCWeek; break;\r\n                    case '1m': selectedPeriodData = PCMonth; break;\r\n                    case 'bm': selectedPeriodData = PCBMonth; break;\r\n                    case '2m': selectedPeriodData = PC2M; break;\r\n                    case '3m': selectedPeriodData = PC3M; break;\r\n                    case '6m': selectedPeriodData = PC6M; break;\r\n                    case 'by': selectedPeriodData = PCBYear; break;\r\n                    case '1y': selectedPeriodData = PC1Y; break;\r\n                    case '3y': selectedPeriodData = PC3Y; break;\r\n                    case '5y': selectedPeriodData = PC5Y; break;\r\n                }\r\n                \r\n                \r\n\r\n                var checkedString = (indexInArr < 0) ? \"checked\" : (this.arrComparison[indexInArr].active == 1 ? \"checked\" : \"\");\r\n                var removeLink = '<a href=\"javascript:void(0)\" onclick=\"searcher.removeInstrument(\\'' + symbol + '\\')\">X</a>';\r\n                removeLink = (i > 0 ) ? removeLink : \"&nbsp;\";\r\n                var instParam = id + \"|\" + feeder + \"|\" + symbol;\r\n                instParams.push(instParam); \r\n\r\n                html += '<tr data-id=\"'+ instParam +'\"><td class=\"tdInstrumentData\" width=\"15\"><input onClick=\"searcher.chk_click(this)\" type=\"checkbox\" id=\"ckb_' + i + '\" value=\"' + symbol + '\" ' + checkedString + ' /></td>' +\r\n                    '<td class=\"tdInstrumentData\" width=\"15\"><div class=\"instrumentGraphSquare\" style=\"background-color:' + color + '\"><img src=\"https://images.globes.co.il/images/serve/images/pixel.gif\" width=\"1\" height=\"1\" alt=\"\" /></div></td>' +\r\n                    '<td class=\"tdInstrumentData\" width=\"200\" style=\"direction:rtl;\"><a href=\"/portal/instrument.aspx?instrumentid='+ id + (feeder!='0' ? '&feeder=1' : '') + '\">' + name + '</a></td>' +\r\n                    '<td class=\"tdInstrumentData data\"  data-w=\"'+ PCWeek +'\" data-1m=\"'+ PCMonth +'\" data-3m=\"'+ PC3M +'\" data-6m=\"' + PC6M + '\" data-1y=\"'+ PC1Y +'\" data-3y=\"'+ PC3Y +'\" data-5y=\"'+ PC5Y + '\">' + selectedPeriodData + '</td>' +\r\n                    '<td class=\"tdInstrumentData\">' + PCMonth + '</td>' +\r\n                    '<td class=\"tdInstrumentData\">' + PCBYear + '</td>' +\r\n                    '<td class=\"tdInstrumentData\" width=\"50\">' + fee + '</td>' +\r\n                    '<td class=\"tdInstrumentData last\" >' + removeLink + '</tr>'\r\n            }\r\n            html += '</table>'\r\n\r\n            //sort rows\r\n            var arrIds = me.arrComparison.map((item, index) => { return item.id });\r\n            var arrRows = $(html).find(\"tr[data-id]\").slice();\r\n            var sortRows = arrRows.sort(function (a, b) {\r\n                var id1 = $(a).attr(\"data-id\").split('|')[0];\r\n                var id2 = $(b).attr(\"data-id\").split('|')[0];\r\n                return arrIds.indexOf(id1) > arrIds.indexOf(id2)\r\n            });\r\n            \r\n            $(html).find(\"tr[data-id]\").html(sortRows)\r\n\r\n            \r\n\r\n            document.getElementById(objDivName).innerHTML = html;\r\n\r\n            return instParams;\r\n        },\r\n\r\n        refreshGraph: function (params) {\r\n            for (var i = 0; i < params.length; i++) {\r\n                var foundItem = globesChart.symbols.find((param) => { return param == params[i] });\r\n                if (comparisonSymbols.length == 0 && params.length == 1) {                     \r\n                    this.globesChart.initFirstTime(params[i])\r\n\r\n                } else {\r\n                    if (foundItem == undefined)\r\n                        this.globesChart.addInstrumentToComparison(params[i]);\r\n                }\r\n            }\r\n        },\r\n        \r\n\r\n           \r\n\r\n        addInstrument: function(exchangeId, symbol) {\r\n            if (this.IsSymbolInArray(symbol)) {\r\n                alert('׳”׳ ׳™׳™׳¨ ׳›׳‘׳¨ ׳§׳™׳™׳ ׳‘׳¨׳©׳™׳ž׳× ׳”׳”׳©׳•׳•׳׳”');\r\n            }\r\n            else {\r\n                if (this.arrComparison.length < 10) {\r\n                    this.arrComparison[this.arrComparison.length] = new this.instrumentElement('', 0, symbol, exchangeId, true, Highcharts.defaultOptions.colors[this.arrComparison.length])     //arrSymbols[arrSymbols.length] = symbol\r\n                    this.RefreshDataAndGraph();\r\n\r\n                    this.globesChart.updateState({\r\n                        arrComparison: this.arrComparison\r\n                    });\r\n                }\r\n                else\r\n                    alert('׳ ׳™׳×׳Ÿ ׳œ׳”׳©׳•׳•׳× ׳¨׳§ ׳¢׳“ 10 ׳ ׳™׳™׳¨׳•׳× ')\r\n            }\r\n\r\n        },\r\n         IsSymbolInArray: function(symbol) {\r\n            var flagExist = false;\r\n            for (var i = 0; i < this.arrComparison.length; i++) {\r\n                if (this.arrComparison[i].symbol == symbol)\r\n                    flagExist = true\r\n            }\r\n            return flagExist;\r\n        },\r\n\r\n         findRangeSelectionAttrName: function () {\r\n             var selPeriod = $(\".rangeSelectorLine .customRangeSelectorButtons .rangeSelector.selected\").attr('data-type')\r\n             var selCount = $(\".rangeSelectorLine .customRangeSelectorButtons .rangeSelector.selected\").attr('data-count')\r\n             var attrName = '';\r\n             var periodName = '׳×׳©׳•׳׳” ׳œ׳×׳§׳•׳₪׳”'\r\n             switch (selPeriod) {\r\n                 case 'week':\r\n                     attrName = 'data-w';\r\n                     periodName = '׳×׳©׳•׳׳” ׳©׳‘׳•׳¢׳™׳×'\r\n                     break;\r\n                 case 'month':\r\n                     attrName = 'data-' + selCount + 'm';\r\n                     periodName = '׳×׳©׳•׳׳” ' + selCount + ' ׳—\\'';\r\n                     break;\r\n                 case 'year':\r\n                     attrName = 'data-' + selCount + 'y';\r\n                     periodName = '׳×׳©׳•׳׳” ' + selCount + ' ׳©׳ ׳™׳';\r\n                     break;\r\n                 case 'all':\r\n                     attrName = '';\r\n                     break;\r\n             }\r\n\r\n             return { attrName: attrName, periodName: periodName }\r\n         },\r\n         changeRangeSelection: function (index) {\r\n             var rangeSelectionData = this.findRangeSelectionAttrName()\r\n             if (rangeSelectionData.attrName == '') {\r\n                 $(\"#divCompareList table tr td.data\").html('--')\r\n             } else {\r\n\r\n                 $(\"#divCompareList table tr td.data\").each(function (index, item) {\r\n                    $(this).html($(this).attr(rangeSelectionData.attrName))    ;\r\n                 })\r\n             }\r\n\r\n             $(\"#divCompareList table tr td.currPeriod\").html(rangeSelectionData.periodName)             \r\n         },\r\n\r\n        removeInstrument : function(symbol) {\r\n            var index = this.getInstrumentIndex(symbol)\r\n            var instParam = index >= 0 ? this.arrComparison[index].id + \"|\" + this.arrComparison[index].feeder + \"|\" + this.arrComparison[index].symbol : \"\";\r\n            if (index >= 0) {\r\n                this.arrComparison.splice(index, 1);               \r\n                for (var i = 0; i < this.arrComparison.length; i++) {\r\n                    this.arrComparison[i].color = Highcharts.defaultOptions.colors[i];\r\n                }\r\n                this.globesChart.removeInstrumentFromOutside(instParam);\r\n                //this.RefreshDataAndGraph(false, false);\r\n                $(\"#divCompareList table tr[data-id='\" + instParam + \"']\").remove();\r\n\r\n                this.globesChart.updateState({\r\n                    arrComparison: this.arrComparison\r\n                });\r\n            }\r\n         },\r\n        \r\n\r\n         chk_click: function(chkObj) {\r\n            var active = chkObj.checked\r\n            var index = this.getInstrumentIndex(chkObj.value)\r\n            this.arrComparison[index].active = active\r\n            var id = this.arrComparison[index].id + \"|\" + this.arrComparison[index].feeder + \"|\" + this.arrComparison[index].symbol;\r\n            this.globesChart.hideSeries(id, active);\r\n\r\n            \r\n        },\r\n        \r\n               \r\n         getInstrumentIndex: function (symbol) {\r\n             return this.arrComparison.findIndex(function (item) { return item.symbol == symbol.toUpperCase(); });\r\n         },\r\n         getInstrumentColor: function(symbol) {\r\n            var index = this.getInstrumentIndex(symbol.toUpperCase())\r\n            if (index >= 0)\r\n                return Highcharts.defaultOptions.colors[index]\r\n            return '000000'\r\n         },\r\n\r\n        \r\n         RefreshDataAndGraph: function(isFirstTime = false, isRefreshGraph = true) {\r\n            var symbols = this.GetSymbols(0)\r\n            var graphExchanges = this.GetExchanges(0)            \r\n            this.ajax_instrumentData(graphExchanges, symbols, \"divCompareList\", isFirstTime, isRefreshGraph);\r\n        },\r\n         GetSelPeriod: function (attrName) {\r\n             var $rangeSelectors = $(\".customRangeSelectorButtons .rangeSelector\")\r\n             var $selected =  $rangeSelectors.find(\".selected\")\r\n             var selIndex = typeof $selected != 'undefined' && $selected.length == 0 ? 0 : $rangeSelectors.index($selected[0])\r\n\r\n             var session = this.globesChart.localSessionRead();\r\n             if (session != undefined && session.tab == 'compare' && session.arrComparison != undefined) {\r\n                 if (session.rangeSelector != undefined) {\r\n                     let type = session.rangeSelector.type;\r\n                     let count = parseInt(session.rangeSelector.count);\r\n                     selIndex = this.GetRangeIndexByRangeType(type, count);\r\n                 } else {\r\n                     selIndex = 0;\r\n                 }\r\n             }\r\n\r\n             return $rangeSelectors.eq(selIndex).attr(attrName);\r\n         },\r\n\r\n         GetRangeIndexByRangeType: function (type, count) {\r\n             let selIndex = 0;\r\n             switch (type) {\r\n                     case 'week':\r\n                         selIndex = 0;\r\n                         break;\r\n                     case 'month':\r\n                         if (count == 1)\r\n                             selIndex = 1;\r\n                         else {\r\n                             if (count == 3)\r\n                                 selIndex = 2;\r\n                             else\r\n                                 selIndex = 3\r\n                         }\r\n                         break;\r\n                     case 'year':\r\n                         if (count == 1)\r\n                             selIndex = 4;\r\n                         else {\r\n                             if (count == 3)\r\n                                 selIndex = 5;\r\n                             else\r\n                                 selIndex = 6\r\n                         }\r\n                         break;\r\n                     case 'all':\r\n                         selIndex = 7;\r\n                         break;\r\n                     default:\r\n                         selIndex = 0;\r\n                         break;\r\n\r\n             }\r\n             return selIndex;\r\n         },\r\n\r\n         GetPropList: function (propToCollect, isGraph) {\r\n            var list = \"\";\r\n            for (var i = 0; i < this.arrComparison.length; i++) {\r\n                if ((this.arrComparison[i].active == 1 && isGraph == 1) || isGraph == 0) {\r\n                    if (propToCollect == 'symbol') {\r\n                        if (this.arrComparison[i].symbol.toString() != \"0\")\r\n                            list += this.arrComparison[i].symbol + \",\";\r\n                    }\r\n                    if (propToCollect == 'exchangeId') {\r\n                        if (this.arrComparison[i].exchangeId.toString() != \"0\")\r\n                            list += this.arrComparison[i].exchangeId + \",\";\r\n                    }\r\n                }\r\n            }\r\n            if (list.length > 0)\r\n                list = list.substr(0, list.length - 1)\r\n            return list;\r\n         },\r\n         \r\n         GetSymbols: function (isGraph) {\r\n             return this.GetPropList('symbol', isGraph);\r\n         },\r\n\r\n         GetExchanges: function (isGraph) {\r\n            return this.GetPropList('exchangeId', isGraph);\r\n         },\r\n\r\n         changeTheme: function () {\r\n             $(\"#divCompareList table tr[data-id]\").each(function (index) {\r\n                 var instId = $(this).attr('data-id')\r\n                 var series = this.globesChart.seriesOptions.find((elem) => elem.id == instId);\r\n                 if (series != undefined) {\r\n                     $(this).find(\"td .instrumentGraphSquare\").css(\"backgroundColor\",series.color);\r\n                 }\r\n             });             \r\n         },\r\n\r\n         reset: function () {\r\n             this.arrComparison.length = 0;\r\n             if (typeof instInitParams != 'undefined' && Array.isArray(instInitParams) && instInitParams.length > 0) {\r\n                 for (var i = 0; i < instInitParams.length; i++) {\r\n                     this.arrComparison[i] = new this.instrumentElement(instInitParams[i][0], instInitParams[i][1], instInitParams[i][2], instInitParams[i][3], true, Highcharts.defaultOptions.colors[i])\r\n                 }\r\n                 this.RefreshDataAndGraph(true)\r\n             }\r\n             else {\r\n                  document.getElementById(\"divCompareList\").innerHTML = ''\r\n             }\r\n\r\n         },\r\n         toExcel: function () {           \r\n\r\n            window.open(\"/portal/instrument/instrumentgraph_toexcel.aspx?instrumentid=\" + instrumentid[0] + \"&feeder=\" + feeder[0], \"graphExcel\");\r\n\r\n        },\r\n\r\n\r\n\r\n    }\r\n\r\n    return engin;\r\n}\r\n\r\nwindow.searcher = getComparisonSearcherEngin();\r\n\r\n$(function () {\r\n    $(\"#divSearchBox, #divSearchIndicesBox\").click(function (e) {        \r\n        $(\"#divGraphHiddenSearch\").html('')\r\n        $(\"#divSearchBox\").find('.queryForGraph').val('')\r\n        $(this).append($(\"#divGraphHiddenSearch\"));\r\n        if ($(this).attr('id') == 'divSearchBox') {\r\n            $(\"#query_for_indices\").selectedIndex = 0\r\n        }\r\n        \r\n    });\r\n    \r\n    $(\"#query_for_graph\").keyup(function (e) {\r\n        searcher.query_keyUp(e, this, \"divGraphHiddenSearch\");\r\n    });\r\n    $(\"#query_for_indices\").change(function () {\r\n        searcher.ajax_indices(this, \"divGraphHiddenSearch\");\r\n    });\r\n});\r\n\r\n\r\n","\r\nlet chart = null;\r\n\r\n\r\nlet globesChart = {\r\n    arrIndicatorsData: [],\r\n    arrNoDayTypes: [16, 21],\r\n    arrNoVolumeGraph: [20,21,16,46],\r\n\r\n    backgroundColor: '#f3f8fc',\r\n\r\n    chartHeight: '',    \r\n    currentInstrument: undefined,\r\n    colorRed: '#EA5641',\r\n    colorGreen: '#5CAB63',\r\n    chartType: 'line',\r\n\r\n    dataGroupingObj: undefined,\r\n    \r\n    defaultDownload: 'img',\r\n    defaultDataGroupingUnit: [['minute', [3]]],\r\n    defRangeSelector: 0,\r\n    \r\n    defaultChartHeight: '70%',\r\n    defaultSmallChartHeight: '20%',\r\n    defaultSmallChartHeightPercent : 0.2,\r\n    defaultSmallChartTop: '80%',\r\n    defaultSmallChartTopPercent: 1.15,\r\n\r\n    dateTimeLabelFormats: {     \r\n        millisecond: ['%A, %b %e, %H:%M','','%A, %b %e, %H:%M'],\r\n        second: ['%A, %b %e, %H:%M','','%A, %b %e, %H:%M'],        \r\n        minute: ['%A, %b %e, %H:%M', '', '%A, %b %e, %H:%M'],\r\n        hour: ['%A, %b %e, %H:%M', '', '%H:%M'],\r\n        day: ['%A, %b %e, %Y', '', '%A, %b %e, %Y'],\r\n        week: ['%A, %b %e, %Y', '', ''],\r\n        month: ['%B %Y', '', '%B %Y'],\r\n        year: ['%Y', '', '%Y']\r\n    },\r\n\r\n    intervalId: undefined,\r\n    indicators: [],\r\n    indicatorsParams: [],\r\n    isInputClick: false,\r\n    isResolutionClick: false,\r\n    isAddInstrumentClick: false,\r\n    isRangeSelectorClick: false,\r\n    isDayRangeDisabled: false,\r\n    isWeekRangeDisabled: false,\r\n\r\n    legends: [],\r\n    \r\n    maxSymbols: 5,\r\n    maxPoints: 130,\r\n    minutes: 3,// 15,\r\n    mode: {\r\n        updateInput: Mode == '' ? true : false,\r\n        saveState: Mode == '' || Mode == 'comparison' ? true : false,\r\n        useComparisonSymbols: Mode == 'comparison' || Mode == 'simpleComparison' || Mode == 'articleComparison' ? true : false,\r\n        isNavigator: Mode == '' ? true : false,\r\n        isIndicators: Mode == '' ? true : false,\r\n    },\r\n\r\n    navigatorSeriesData: [],\r\n\r\n    options : {},\r\n\r\n    period: '1d',\r\n    prevExtremes: undefined,    \r\n    pointFormatInValue: '<span style=\"color:{series.color}\">{series.name}</span>: <b style=\"direction:ltr\">{point.y:0f}</b><br/>',\r\n    pointFormatInPercent: '<span style=\"color:{series.color}\">{series.name}</span>: <b>{point.y}</b> ({point.change}%)<br/>',\r\n    plotOptionsSeries : {},\r\n\r\n    rangeSelector: undefined,\r\n    resolutions: 'month,week,day,hour,minute'.split(','),\r\n\r\n    seriesOptions: [],\r\n    selResolution: undefined,\r\n    symbols: [], \r\n    \r\n    tab: '',\r\n\r\n    yAxisOptions: [],\r\n\r\n    addInstrumentToComparison: function (instParam) {\r\n        let me = this;    \r\n\r\n        let dataGroupingObj = undefined,\r\n            min = chart.xAxis[0].min,\r\n            max = chart.xAxis[0].max,\r\n            type = '',\r\n            count = 1,\r\n            period = '',\r\n            top = '',\r\n            graphType = me.chartType; \r\n\r\n        if (me.symbols.indexOf(instParam) > -1) {\r\n            alert('׳”׳ž׳ ׳™׳” ׳©׳ ׳‘׳—׳¨׳” ׳›׳‘׳¨ ׳§׳™׳™׳ž׳× ׳‘׳’׳¨׳£')\r\n            return false;\r\n        }\r\n        me.isAddInstrumentClick = true;\r\n        if (me.symbols.length == this.maxSymbols) {\r\n            this.showMaxSymbolsAlert(\"׳‘׳׳₪׳©׳¨׳•׳×׳š ׳œ׳”׳¦׳™׳’ ׳¢׳“ \" + this.maxSymbols + \" ׳ž׳ ׳™׳•׳× ׳‘׳׳•׳×׳• ׳–׳ž׳Ÿ\");\r\n           // alert(\"׳‘׳׳₪׳©׳¨׳•׳×׳š ׳œ׳”׳¦׳™׳’ ׳¢׳“ \"+ this.maxSymbols +\" ׳ž׳ ׳™׳•׳× ׳‘׳׳•׳×׳• ׳–׳ž׳Ÿ\")\r\n            return;\r\n        }\r\n        me.symbols.push(instParam);\r\n\r\n        \r\n        me.updateState({\r\n            symbols: me.symbols\r\n        });\r\n\r\n        if (me.rangeSelector != undefined) {\r\n            count = me.rangeSelector.count,\r\n            type = me.rangeSelector.type;\r\n            dataGroupingObj = this.getDataGroupingObject_ByRangeSelector(type, count);\r\n            period = type == 'day' || type == 'week' ? type : 'all';\r\n        } else {\r\n            if (me.selResolution != undefined) {\r\n                dataGroupingObj = this.getDataGroupingObj_ByResolution(me.selResolution.res, me.selResolution.count);\r\n                top = me.maxPoints;\r\n            } else { //input change or navigator\r\n                let unit = me.getUnitFromRangeStart(min, max),\r\n                    count = unit == 'minute' ? 15 : 1;\r\n                dataGroupingObj = me.getDataGroupingObj_ByResolution(unit, count);\r\n            }\r\n        }\r\n        me.dataGroupingObj = dataGroupingObj;\r\n        me.addInstrumentToOutsideTable(instParam)\r\n        me.refreshAllData( dataGroupingObj, top, period, min, max, 'addInstrumentToComparison');        \r\n    },\r\n\r\n\r\n    addIndicator: function (t, s, oParams, aColors, yAxisId ) {\r\n        \r\n        let series = null,\r\n            me = this,\r\n            tooltipOptions = this.setTooltipFormater(me.currentInstrument.instrumentType, true, t.toLowerCase());\r\n\r\n        if (arguments.length < 5)\r\n            yAxisId = '';\r\n\r\n            if (chart.series[0].type === 'line') {                \r\n                this.changeGraphTypeClick('candlestick')\r\n                me.updateState({\r\n                    type: 'candlestick'\r\n                });\r\n            }\r\n\r\n        series = {\r\n            type: t.toLowerCase(),\r\n            linkedTo: 'main',\r\n            name: s.toUpperCase(),\r\n            showInLegend: true,\r\n            params: oParams,\r\n            color: aColors[0],\r\n            marker: { enabled: false },\r\n            id: s + \"_\" + this.seriesOptions.length,\r\n            tooltip: tooltipOptions\r\n            \r\n        };\r\n        //set indicators multy colors\r\n        if (aColors.length > 1) {\r\n            switch (t) {\r\n                case 'macd':\r\n                    series.signalLine = {\r\n                        styles: {\r\n                            lineColor: aColors[1]\r\n                        }\r\n                    }\r\n                    break;\r\n                case 'bb': \r\n                    let color1 = this.convert2Rgba(aColors[0]);\r\n                    series.fillColor = color1;\r\n                    series.topLine = {\r\n                        styles: {\r\n                            lineColor: aColors[1]\r\n                        }\r\n                    }\r\n                    if (aColors.length > 2) {\r\n                        series.bottomLine = {\r\n                            styles: {\r\n                                lineColor: aColors[2]\r\n                            }\r\n                        }\r\n                    }\r\n                    break;\r\n                default:\r\n                    break;\r\n            }\r\n        }\r\n\r\n        if (t != 'bb' && t != 'sma') {\r\n            if (yAxisId != '') { //in case of just changgin params\r\n                series.yAxis = yAxisId;\r\n            } else {\r\n\r\n                let newYAxisId = this.yAxis_add_new(t, s); //new indicator\r\n                series.yAxis = newYAxisId;\r\n\r\n                \r\n            }\r\n        }\r\n\r\n        let cloneSeries = JSON.parse(JSON.stringify(series));\r\n        cloneSeries.tooltipOptions = this.setTooltipFormater(me.currentInstrument.instrumentType, true, t.toLowerCase());\r\n\r\n        chart.addSeries(cloneSeries);\r\n        \r\n        //for indicators: split tooltip\r\n        if (this.indicatorsParams.length == 0) {\r\n            chart.update({\r\n                tooltip: {\r\n                    share: false,\r\n                    split: true\r\n                }\r\n            })\r\n        }\r\n\r\n        this.legendBuildAll();\r\n        this.seriesOptions.push(series);\r\n        this.indicatorsParams.push(series);\r\n\r\n        if (this.indicators.indexOf(t) == -1)\r\n            this.indicators.push(t);\r\n\r\n        $(\"#selIndicatorWraper ul li[data-value='\" + t + \"']\").addClass('selected')\r\n    },\r\n\r\n    addInstrumentToOutsideTable: function (instId) {\r\n            let $outsideChkbox = $(\"#tblIndexInstruments tr td.tdInstrumentData[data-id='\" + instId + \"']\")\r\n            if ($outsideChkbox.length > 0) {\r\n                $outsideChkbox.find( \"input\" ).prop('checked', true);\r\n            }\r\n    },\r\n\r\n    afterSetExtremes: function (e) {\r\n        let me = globesChart;\r\n        if (e == undefined || (e.trigger != 'navigator' && me.isInputClick == false))\r\n            return;\r\n                 \r\n\r\n        let min = Math.floor(e.min),\r\n            max = Math.floor(e.max),           \r\n            now = new Date();\r\n\r\n        \r\n        me.unSelectResolutionButton();\r\n        me.unSelectRangeButton();            \r\n        me.rangeSelector = undefined;   \r\n        me.selectRangeCustomButton();\r\n\r\n        let unit = me.getUnitFromRangeStart(min, max),\r\n            count = unit == 'minute' ? 15 : 1,\r\n            dataGroupingObj = me.getDataGroupingObj_ByResolution(unit, count);\r\n\r\n        \r\n               \r\n        if (me.prevExtremes == undefined ||\r\n            (me.prevExtremes.period == 'all' && (min < me.prevExtremes.dataMin || max > me.prevExtremes.dataMax) ||\r\n             me.prevExtremes.period != 'all')\r\n        ) {\r\n  \r\n\r\n            me.isInputClick = false;            \r\n            me.refreshAllData( dataGroupingObj, '', '', min, max, 'afterSetExtremes');\r\n\r\n        } else {      \r\n            if (!me.isInputClick) {\r\n                me.updateInputs(min, max)\r\n            }\r\n\r\n            if (chart.xAxis[0].series[0].points.length > me.maxPoints) {\r\n                chart.xAxis[0].setDataGrouping(dataGroupingObj);                \r\n                me.updateState({\r\n                    dataGrouping: dataGroupingObj\r\n                });\r\n                me.dataGroupingObj = dataGroupingObj;\r\n            }\r\n            me.selectResolutionButton(dataGroupingObj);\r\n            \r\n            me.updateState({\r\n                rangeSelector: me.rangeSelector,               \r\n                min: min,\r\n                max: max\r\n            });\r\n        }\r\n    },\r\n\r\n    \r\n\r\n     afterRangeSelectorClick: function(e) { \r\n         let me = globesChart,\r\n             data = chart && chart.series.length > 0 ? chart.series[0].options.data : undefined,\r\n             dataLen = data != undefined ? data.length : -1,\r\n             dataMin = dataLen > 0 ? data[0][0] : 0,\r\n             dataMax = dataLen > 0 ? data[dataLen - 1][0] : 0,\r\n             count = parseInt($(e.currentTarget).attr(\"data-count\")),\r\n             type = $(e.currentTarget).attr(\"data-type\");\r\n              \r\n                  \r\n            let sType = '';\r\n\r\n            let now = new Date();\r\n            let end = now.getTime();\r\n            let max = end;\r\n            let start = Math.round(me.calcRangeStartCalc(now, type, count).getTime());\r\n            let currPeriod = '';\r\n            let sTop = '';\r\n            let sRes = '';\r\n            let dataGroupingObj = this.getDataGroupingObject_ByRangeSelector(type, count);            \r\n\r\n            if (type == 'day') {\r\n              sType = \"&type=day\";\r\n              currPeriod = 'day';\r\n            } else {\r\n              if (type == 'week') {\r\n                sType = \"&type=week\";\r\n                currPeriod = 'week';\r\n              } else {\r\n                sType = \"&type=all\";\r\n                currPeriod = 'all';\r\n              }\r\n            }\r\n\r\n            \r\n\r\n            if (me.prevExtremes != undefined && me.prevExtremes.period == currPeriod && (currPeriod == 'all' || end - me.prevExtremes.time < 120000)) {\r\n\r\n                let xStart = dataMin > 0 ?  Math.max(start, dataMin) : start,\r\n                    xEnd = dataMax > 0 ? Math.min(end, dataMax) : end;\r\n\r\n                \r\n                \r\n                if (currPeriod == 'day' ) {                    \r\n                    let dayExtremes = me.findDayExtremes();                                    \r\n                    xStart = dayExtremes.min;\r\n                    xEnd = dayExtremes.max;\r\n                }\r\n\r\n                chart.xAxis[0].setExtremes(xStart, xEnd);\r\n                chart.xAxis[0].setDataGrouping(dataGroupingObj);\r\n                me.selectResolutionButton(dataGroupingObj);\r\n                me.dataGroupingObj = dataGroupingObj;\r\n               \r\n                chart.redraw();\r\n                me.isRangeSelectorClick = false\r\n                me.updateInputs(Math.max(start, dataMin), Math.min(end, dataMax))\r\n\r\n                me.updateState({     \r\n                    dataGrouping: dataGroupingObj,\r\n                    min: xStart,\r\n                    max: xEnd,\r\n                    rangeSelector: me.rangeSelector,\r\n                    selResolution: me.selResolution,\r\n                });\r\n\r\n              return;\r\n            }\r\n         \r\n\r\n            chart.showLoading('׳˜׳•׳¢׳Ÿ ׳ ׳×׳•׳ ׳™׳...');\r\n                     \r\n            let top = '';\r\n                \r\n         \r\n            this.refreshAllData(dataGroupingObj, top, currPeriod, start, end, 'afterRangeSelectorClick');\r\n    },\r\n\r\n     \r\n     buildVolumeSeries: function(data) {\r\n            \r\n            let volume = this.fillVolumeData(data);\r\n                     \r\n            return {\r\n                type: 'column',\r\n                name: instrumentName + '-׳ ׳₪׳— ׳ž׳¡׳—׳¨',\r\n                data: volume,\r\n                id: 'volume',\r\n                yAxis: 2,\r\n                decimals: 4,\r\n                marker: {\r\n                    enabled: false\r\n                },\r\n                color: Highcharts.defaultOptions.colors[0],\r\n                showInLegend: false,\r\n                compare: 'none',\r\n                visible:  true\r\n            }\r\n     },\r\n          \r\n     buildIndicatoresArray: function () {\r\n         let me = this;\r\n        $.ajax({ \"url\": \"/static/graphs/indicators/indicatorsList.js?v=1&callback=?\", \"dataType\": \"text\" })\r\n            .done(function (data) {\r\n                me.arrIndicatorsData = JSON.parse(data);\r\n\r\n                let $indicatorWraper = $(\"#selIndicatorWraper\");\r\n                $indicatorWraper.append(\"<ul></ul>\");\r\n                let template = \"<li data-value='{0}'>{1}</li>\"\r\n                me.arrIndicatorsData.forEach(function (elem, index) {                     \r\n                    $indicatorWraper.find(\"ul\").append(template.replace(\"{0}\", elem.id).replace(\"{1}\", elem.label));\r\n                });\r\n                //$indicatorWraper.find(\"ul li[data-value='volume']\").addClass(\"selected\")\r\n\r\n                $(\"#selIndicatorWraper ul li\").click(function (e) {                        \r\n                    me.graphicalAnalysisClick(e);\r\n                    \r\n                });\r\n                    \r\n            })\r\n            .fail(function (jqXHR,textStatus, errorThrown) {\r\n                console.log(\"fail to load indicators list: status\" + textStatus + \"  errpr: \" + errorThrown);\r\n            });\r\n     },\r\n\r\n     buildIndicatorForm: function (element) {\r\n         let me = this;\r\n         try {\r\n             let templateIndicator = $(\"#templateIndicator\").html();\r\n             let templatePeriod = $(\"#templatePeriod\").html();\r\n             let templateColor = $(\"#templateColor\").html();\r\n\r\n             let indicatorType = element.id;\r\n             let periodHtml = [];\r\n             let colorHtml = [];             \r\n             let colors = Highcharts.getOptions().indicatorsColors[indicatorType];\r\n             let colorIndex = -1; //chart.series.length - 1;\r\n             \r\n\r\n             //fetch previeus selected values from exists indicators\r\n             let filteredSeries = chart.series.filter((s) => s.userOptions.type == element.id),\r\n                 existsParams = [];\r\n             if (filteredSeries != undefined && Array.isArray(filteredSeries)) {\r\n                 filteredSeries.forEach(function (objItem, index) {\r\n                     existsParams.push(filteredSeries[index].userOptions.params.period);\r\n                 });\r\n             }\r\n             //--\r\n             \r\n             element.htmlFields.forEach(function (arrItem, index) {\r\n                let defVal = existsParams.length > index ? existsParams[index] : element.params[arrItem.fieldName]                \r\n                periodHtml.push(\r\n                    templatePeriod.replace(\"{period}\", arrItem.label)\r\n                    .replace(\"{fieldName}\", arrItem.fieldName)\r\n                    .replace(\"{index}\", index)\r\n                    .replace(\"{def}\", defVal)\r\n                );\r\n\r\n                for (let i = 0; i < arrItem.colors.length; i++) {\r\n                    colorIndex++;\r\n                    colorHtml.push(templateColor.replace(\"{color}\", arrItem.colors[i])\r\n                        .replace(\"{colorIndex}\", colorIndex)\r\n                        .replace(/\\{colorVal\\}/g, colors[colorIndex]));\r\n                }\r\n            });\r\n\r\n\r\n            let indicatorHTML = templateIndicator.replace(\"{title}\", element.title)\r\n                .replace(\"{description}\", element.description)\r\n                .replace(\"{periods}\", periodHtml.join(''))\r\n                .replace(\"{colors}\", colorHtml.join(''));\r\n\r\n            //build the indicator form\r\n            $(\"section.indicatorForm\").html(indicatorHTML)\r\n            $(\"section.indicatorForm\").attr('data-indicator-id', element.id);\r\n            if (element.id == 'macd') {\r\n                $(\"section.indicatorForm h2\").css(\"font-size\", \"16px\");\r\n            }\r\n\r\n            //events\r\n            $(\"section.indicatorForm h2 span.close , section.indicatorForm input.cancel\").click(function () {\r\n                $(window).off('scroll')\r\n                $(\"section.indicatorForm\").hide()\r\n            });\r\n\r\n            $(\"ul.fields li span.add\").mousedown(function () {\r\n                let spanNum = $(this).parent().find(\"input.num\")\r\n                me.intervalId = setInterval(() => {\r\n                    let num = parseInt(spanNum.val());\r\n                    if (num < 201)\r\n                        spanNum.val(num + 1);\r\n                }, 100);               \r\n            });\r\n            $(\"ul.fields li span.add\").mouseup(function () {\r\n                let spanNum = $(this).parent().find(\"span.num\");\r\n                clearInterval(me.intervalId);                \r\n            });\r\n            $(\"ul.fields li input.num\").change(function () {\r\n                let value = $(this).val();\r\n                if (isNaN(value)) {\r\n                    $(this).val(0);\r\n                    return;\r\n                }\r\n                value = parseInt(value);\r\n                if (value < 0 || value > 200) {\r\n                    $(this).val(0);\r\n                    return;\r\n                }\r\n\r\n            });\r\n\r\n            $(\"ul.fields li span.substract\").mousedown(function () {\r\n                let spanNum = $(this).parent().find(\"input.num\");\r\n                me.intervalId = setInterval(() => {\r\n                    let num = parseInt(spanNum.val());\r\n                    if (num > 0)\r\n                        spanNum.val(num - 1);\r\n                }, 100);\r\n            });\r\n            $(\"ul.fields li span.substract\").mouseup(function () {\r\n                let spanNum = $(this).parent().find(\"span.num\");\r\n                clearInterval(me.intervalId);                \r\n            });\r\n\r\n            $(\"section.indicatorForm input.OK\").click(function (e) {\r\n                let fields = $(\"ul.fields li input.num\").slice(0)\r\n                let linesColors = $(\"ul.linesColors li input.squere\").get();\r\n\r\n                let indicatorId = $(\"section.indicatorForm\").attr(\"data-indicator-id\")\r\n                let arrItem = globesChart.arrIndicatorsData.find((elem) => elem.id == indicatorId); //find indicator defenition in JSON arr\r\n\r\n                let oParam = {};//create indicator params\r\n                let arrPeriods = [];\r\n                let gc = globesChart;\r\n\r\n                Object.getOwnPropertyNames(arrItem.params).forEach(\r\n                    function (val, idx, array) {\r\n                        if ($(\"ul.fields li input.\" + val).length > 0) {\r\n                            let newVal = $(\"ul.fields li input.\" + val).val()\r\n                            let iNewVal = parseInt(newVal)\r\n                            oParam[val] = isNaN(iNewVal) ? newVal : iNewVal;\r\n\r\n                            arrPeriods.push(newVal);\r\n                        } else {\r\n                            let newVal = arrItem.params[val]\r\n                            oParam[val] = newVal;\r\n\r\n                            arrPeriods.push(newVal);\r\n                        }\r\n                    }\r\n                );\r\n                let arrColors = linesColors.map((x) => {\r\n                    return x.value;\r\n                });\r\n\r\n                let indicatorName = indicatorId +\r\n                    (arrPeriods.length > 0\r\n                        ? '(' + arrPeriods.splice(1, arrPeriods.length - 1).join(',') + ')'\r\n                        : ''\r\n                    );\r\n\r\n                try {\r\n\r\n                    let indicatorType = indicatorId,\r\n                        yAxisId = gc.removePerviousIndicatorsSeries(indicatorType);\r\n\r\n                    if (indicatorId === 'sma') {\r\n\r\n                        //make our own triple sma\r\n                        Object.keys(oParam).forEach(function (key, index) {\r\n                            if (index > 0 &&  oParam[key] > 0) {\r\n                                let periodKey = Object.keys(oParam)[index],\r\n                                    periodVal = Object.values(oParam)[index],                                    \r\n                                    newColors = [arrColors[index - 1]],\r\n                                    newParams = { 'index': oParam.index, 'period': periodVal };\r\n\r\n                                    indicatorName = indicatorId +'(' + periodVal + ')'\r\n\r\n                                \r\n                                gc.addIndicator(indicatorId, indicatorName, newParams, newColors, yAxisId);\r\n                            }\r\n                        });\r\n\r\n                    } else {\r\n                        gc.addIndicator(indicatorId, indicatorName, oParam, arrColors, yAxisId);\r\n                    }\r\n\r\n                     //save state\r\n                    let seriesIndicators = gc.getIndicatorsSeriesParams();\r\n                    gc.updateState({\r\n                        indicators: gc.indicators,\r\n                        indicatorsParams: seriesIndicators,\r\n                        yAxisOptions: gc.yAxisOptions,\r\n                        //seriesOptions: gc.seriesOptions,\r\n                        chartHeight:  gc.chartHeight,\r\n                    });\r\n                    \r\n                    \r\n\r\n                    \r\n                } catch (e) {\r\n                    console.log(e);\r\n                    alert('׳ž׳¦׳˜׳¢׳¨׳™׳, ׳׳¨׳¢׳” ׳×׳§׳œ׳” ׳‘׳™׳¦׳™׳¨׳× ׳׳™׳ ׳“׳™׳§׳˜׳•׳¨');\r\n                }\r\n\r\n                $(\"section.indicatorForm\").html('').hide();\r\n            });\r\n\r\n            return true\r\n\r\n        } catch (e) {\r\n            console.log('fail building indicator: ' + e.description);\r\n            return false;\r\n        }\r\n     },\r\n\r\n     btnDeleteClick: (obj) => {\r\n\r\n     },\r\n\r\n     changeGraphTypeClick: function(type){            \r\n         if ( this.isCompareMode() && type == 'candlestick') {\r\n                return;\r\n            }\r\n         \r\n            this.changeGraphType(type);\r\n            \r\n                  \r\n     },      \r\n         \r\n     copyArr: function (a) {\r\n         let arr = new Array();\r\n         a.forEach(function (item, index) {\r\n             let innerArr = new Array();\r\n             for (let i = 0; i < item.length; i++) {\r\n                 innerArr.push(item[i]);\r\n             }\r\n             arr.push(innerArr);\r\n         });\r\n         return arr;\r\n     },\r\n     \r\n\r\n     changeGraphType: function(type){        \r\n         if (chart != undefined) {\r\n             if (this.currentInstrument != undefined && !(this.currentInstrument.instrumentTypeId == 21 || (this.currentInstrument.instrumentTypeId == 20 && this.rangeSelector.type == 'week' && type == \"candlestick\"))  ) {    //represntetive Currency\r\n\r\n                 this.chartType = type;\r\n                 \r\n                 this.seriesOptions[0].type = type;\r\n                 this.seriesOptions[0].data = type === 'candlestick' ? this.currentInstrument.orgData : this.currentInstrument.mapedData;\r\n                 this.seriesOptions[0].color = type === 'candlestick' ? this.colorRed : Highcharts.defaultOptions.colors[0];\r\n                 this.seriesOptions[0].tooltip = this.setTooltipFormater(this.currentInstrument.instrumentType, false, type);                \r\n                \r\n                let baseSeries = this.seriesOptions.find(serios => serios.id == 'baseRate');\r\n                if (baseSeries != undefined) {\r\n                     baseSeries.visible = type === 'candlestick' ? false : true;\r\n                }\r\n                chart.update({ series: this.seriesOptions }, true);\r\n\r\n                this.legendBuildAll();\r\n\r\n                this.updateState({\r\n                    type: type,\r\n                    seriesOptions: this.seriesOptions\r\n                 });\r\n\r\n                 this.changeGraphTypeButton(type);\r\n            }\r\n        }\r\n     },\r\n\r\n     changeGraphTypeButton: function(type){\r\n         $(\".graphType span\").removeClass(\"active\");\r\n         $(\".graphType span.\" + type).addClass(\"active\");\r\n         \r\n     },\r\n\r\n\t charHeight: function charHeight() {\r\n        return this.isMobile() ? 13 : 8;\r\n     },\r\n\r\n     convert2Rgba: function(color) {\r\n        let arrC = color.replace(/#(\\w{2})(\\w{2})(\\w{2})/, '$1,$2,$3').split(',');\r\n        if (Array.isArray(arrC)){\r\n            let arrDec = arrC.map(function (value, index) {\r\n                return parseInt(value, 16);\r\n            });\r\n            return 'rgba(' + arrDec[0] +',' + arrDec[1] +','+ arrDec[2] +',0.15)'\r\n        }\r\n        return '';\r\n    },\r\n\r\n    calcRangeStart: function(now, e) {//zmira: isRelevant ?\r\n            let type = '',\r\n                count = 0;\r\n\r\n            if (e != undefined) {\r\n                type = e.rangeSelectorButton.type\r\n                count = e.rangeSelectorButton.count\r\n            } else {\r\n                let selected = chart.rangeSelector.selected;\r\n                type = chart.options.rangeSelector.buttons[selected].type,\r\n                count = chart.options.rangeSelector.buttons[selected].count;\r\n            }\r\n            return this.calcRangeStartCalc(now, type, count);\r\n        },\r\n\r\n    calcRangeStartCalc: function(now, type, count) {\r\n        let start;\r\n        let dayStart;\r\n            switch (type) {\r\n                    case 'day':\r\n                        start = this.calcDayStart(now, count);\r\n                        break;\r\n                    case 'week':\r\n                        start = this.calcWeekStart(now);\r\n                        break;\r\n                    case 'month':\r\n                        dayStart = new Date( now.getFullYear(), now.getMonth(), now.getDate());\r\n                        start = this.calcMonthStart(dayStart, count);\r\n                        break;\r\n                    case 'year':\r\n                        dayStart = new Date( now.getFullYear(), now.getMonth(), now.getDate());\r\n                        start = this.calcYearStart(dayStart, count);\r\n                        break;\r\n                    case 'all':\r\n                        dayStart = new Date( now.getFullYear(), now.getMonth(), now.getDate());\r\n                        start = this.calcYearStart(dayStart, 10);\r\n                        break;\r\n            }\r\n            return start;\r\n        },\r\n\r\n    calcDayStart: function(now, dayCount){\r\n           \r\n        try {\r\n            let arrDate = lastTradeDate.split(' ')[0];\r\n            let arrD = arrDate.split('-')\r\n            //return new Date(parseInt(arrD[0]), parseInt(arrD[1])-1 , parseInt(arrD[2]))\r\n            return new Date(lastTradeDate);\r\n\r\n        } catch (e) {\r\n            //console.log(\"in calcDayStart exception: \" + e)\r\n            let dayMillSec = 1000 * 3600 * 24;\r\n            if (now.getHours() <= 9 && now.getMinutes() <= 30 )\r\n                return this.createDate(now, -1 * dayCount, 0, 0);\r\n\r\n            return new Date(new Date(now.getFullYear(), now.getMonth(), now.getDate(), 9, 30, 0).getTime() - ((dayCount-1) * dayMillSec))\r\n        }\r\n    },\r\n\r\n    calcWeekStart: (now) => globesChart.createDate(now, -7, 0, 0),\r\n\r\n    calcMonthStart: (now, count) => globesChart.createDate(now, 0, -1* count, 0),\r\n  \r\n    calcYearStart: (now, count) => globesChart.createDate(now, 0, 0, -1*count),\r\n\r\n    \r\n   \r\n    createDate: (date, days, months, years) => {      \r\n        let d = date;        \r\n        d.setDate(date.getDate() + days);\r\n        d.setMonth(date.getMonth() + months);\r\n        d.setFullYear(date.getFullYear() + years);\r\n        return d;    \r\n    },\r\n\r\n    \r\n    changeTheme: function () {\r\n        \r\n\r\n        let $obj = $(\".graphFrame\"),\r\n            \r\n            min = chart.xAxis[0].min,\r\n            max = chart.xAxis[0].max,\r\n            chartType = this.chartType,\r\n            dataGroupingObj = this.dataGroupingObj,\r\n            period = this.getPeriod(),\r\n            me = this,\r\n            value ;\r\n\r\n        if ($obj.hasClass(\"dark\")) {\r\n            $(\".graphFrame\").removeClass(\"dark\");\r\n            Highcharts.setOptions(Highcharts.themeLight);\r\n            chart.update(Highcharts.themeLight);\r\n            value = 'light';\r\n            \r\n        } else {\r\n            $(\".graphFrame\").addClass(\"dark\");\r\n            // Apply the theme                    \r\n            Highcharts.setOptions(Highcharts.themeDark);\r\n            chart.update(Highcharts.themeDark);\r\n            value = 'dark';\r\n        }\r\n\r\n        this.updateState({ theme: value });\r\n        \r\n\r\n        me.refreshAllData(me.dataGroupingObj, \"\", period, min, max, 'changeTheme');\r\n\r\n        return;\r\n        \r\n        \r\n    },\r\n\r\n    createChart: (options) => {\r\n            return Highcharts.stockChart('container', options);\r\n    },\r\n        \r\n\r\n    changeResolution: function(unit, icount, redraw){\r\n            \r\n        let dataGrouping = {\r\n           \r\n            enabled: true,\r\n            force: true,\r\n            units: [[unit, [icount]]],            \r\n            dateTimeLabelFormats: this.dateTimeLabelFormats,\r\n        };\r\n\r\n        //options.plotOptions.series.dataGrouping = dataGrouping;\r\n        me.plotOptionsSeries.dataGrouping = dataGrouping;\r\n        me.options.plotOptions.series = me.plotOptionsSeries;\r\n\r\n        chart.xAxis[0].setDataGrouping(dataGrouping, true);\r\n    },\r\n\r\n     chartLoadNew: function () {\r\n\r\n    },\r\n\r\n     chartRender: function () {\r\n            \r\n     },\r\n\r\n     creditPosition: function (obj) {\r\n            let windowWidth = window.innerWidth,\r\n                operandY, operandX, x, y, imgH, imgW,\r\n                s_mode;\r\n\r\n\r\n            if (globesChart.isFullPage()) {\r\n                if (windowWidth > 1300) {\r\n                    operandY = 0.55;\r\n                    operandX = 0.9;\r\n                    imgW = 103;\r\n                    imgH = 31;\r\n                } else {\r\n                    operandY = 0.47;\r\n                    operandX = 0.84;\r\n                    imgW = 103;\r\n                    imgH = 31;\r\n                }\r\n            } else {\r\n\r\n                if (Mode == 'articleComparison') {\r\n                    if (typeof (qsMobile) != 'undefined' && qsMobile == \"true\")\r\n                        s_mode = 'small';                    \r\n                } else {\r\n                    s_mode = Mode;\r\n                }\r\n\r\n                switch (s_mode) {                    \r\n                    case 'small':                    \r\n                        operandY = 0.5;\r\n                        operandX = 0.78;\r\n                        imgW = 66;\r\n                        imgH = 20;\r\n                        break;\r\n                    case 'comparison':\r\n                    case 'simpleComparison':\r\n                        operandY = 0.56;\r\n                        operandX = 0.77;\r\n                        imgW = 103;\r\n                        imgH = 31;\r\n                         break;\r\n                    default:\r\n                        operandY = 0.475;\r\n                        operandX = 0.825;\r\n                        imgW = 103;\r\n                        imgH = 31;\r\n                        break;\r\n                }\r\n            }        \r\n            \r\n            y = Math.floor(obj.chartHeight * operandY);\r\n            x = Math.floor(obj.chartWidth * operandX);\r\n\r\n            return {\r\n                x: x,\r\n                y: y,\r\n                width: imgW,\r\n                height: imgH,\r\n            }\r\n        },\r\n\r\n     chartLoad: function () {\r\n\r\n         if (Mode == 'articleComparison') {\r\n             var trading_snapshot = top.document.getElementsByClassName(\"trading_snapshot\")\r\n             if (trading_snapshot != null) {\r\n                 $(trading_snapshot).each(function (index, tradingItem) {\r\n                     $(tradingItem).find(\"table tr td span.squere\").each(function (index, item) {\r\n                         $(item).css(\"backgroundColor\", Highcharts.defaultOptions.colors[index]);\r\n                     });\r\n                 });\r\n             }\r\n             return;\r\n         }\r\n            \r\n        let objPos = globesChart.creditPosition(this);\r\n        let img = this.renderer.image(\"https://images.globes.co.il/images/portal/graphs/globes.svg\", objPos.x , objPos.y , objPos.width, objPos.height)\r\n        img.add();            \r\n            \r\n        if (Mode == '') {\r\n        let currYear = new Date().getFullYear(),\r\n            range = \"2008:\" + currYear.toString();            \r\n            $(\".customRangeSelectorInputs input\").datepicker({\r\n                changeYear: true,\r\n                yearRange: range,\r\n            });\r\n            $(\".customRangeSelectorInputs input\").datepicker($.datepicker.regional[\"he\"]);\r\n        }\r\n     },\r\n\r\n     disabledRangeDay: function () {\r\n         $(\"#rangeDay\").hide();\r\n         $(\"#resolutionMinute3, #resolutionMinute , #resolutionHour\").off(\"click\");\r\n         $(\"#resolutionMinute3, #resolutionMinute , #resolutionHour\").addClass(\"notactive\")\r\n         this.isDayRangeDisabled = true;\r\n    },\r\n    disabledRangeWeek: function () {\r\n        $(\"#rangeWeek\").hide();\r\n        $(\"#resolutionMinute3, #resolutionMinute , #resolutionHour\").off(\"click\");\r\n        $(\"#resolutionMinute3, #resolutionMinute , #resolutionHour\").addClass(\"notactive\")\r\n        this.isWeekRangeDisabled = true;        \r\n    },\r\n    \r\n\r\n     findExchangeExtraTime: function(timeString) {\r\n         if (timeString != '') {\r\n             let d = new Date(timeString);\r\n             return d.getTime();\r\n         }       \r\n         return 0;\r\n\r\n     },\r\n     findDayExtremes: function() { //by instrument tradeStage\r\n         let todayStartTime = this.calcDayStart().getTime();\r\n         let orgData = this.currentInstrument.orgData;\r\n         let exchageStartTime = this.findExchangeExtraTime(exchangeStartTime);\r\n         let exchageEndTime = this.findExchangeExtraTime(exchangeEndTime);\r\n         let arrDataFromTodayT = orgData.filter((arr, index) => { return arr[0] > todayStartTime && (arr.length < 7 || arr[6] == 'T') });\r\n         let arrDataFromTodayE = orgData.filter((arr, index, orgArray) => { return arr[0] > todayStartTime && (arr.length == 7 && arr[6] == 'E') });                                    \r\n         let xStart = feeder == 0 && arrDataFromTodayT.length > 0 ? arrDataFromTodayT[0][0] : (exchageStartTime > 0 ? exchageStartTime : todayStartTime);\r\n         let xEnd =  feeder == 0 && arrDataFromTodayE.length > 0 ? arrDataFromTodayE[0][0] : (exchageEndTime > 0 ? exchageEndTime : todayStartTime + (9*60*60*1000));\r\n         //let xEnd =  exchageEndTime > 0 ? exchageEndTime : (todayStartTime + (18 * 60 * 60 * 1000));\r\n        return { min: xStart, max: xEnd };\r\n     },\r\n\r\n     findMinSeriesData: function(p) {\r\n         let arrDataMin = this.seriesOptions.map((series, index) => { return [index , series.data[0][0]] });\r\n         let index = arrDataMin.sort((a, b) => {\r\n             let subset = a[0] - b[0];\r\n             if (subset < 0) return -1;\r\n             if (subset > 0) return 1;\r\n             return 0;\r\n         })[0];\r\n         return index\r\n     },\r\n\r\n\r\n     fillVolumeData: function(data) {\r\n         let maxVol = 0,\r\n             volume = [];\r\n\r\n         for (let i = 0; i < data.length; i++) {\r\n            let time = data[i][0];\r\n            let vol = data[i][5];\r\n            vol = vol != undefined && vol > maxVol ? vol : maxVol;\r\n            volume.push([time, Math.floor(parseFloat(vol))]);\r\n         }\r\n\r\n         return volume;\r\n     },\r\n\r\n     getChartHeight: function(session) {\r\n         let isFullPage = this.isFullPage(),\r\n             num;\r\n\r\n         if (typeof pageDefaultHeight != 'undefined')\r\n             return pageDefaultHeight + 'px'\r\n\r\n         if (this.isMobile())\r\n             num = 13;\r\n         else {\r\n             if (!isFullPage && session != undefined && session.chartHeight != '')\r\n                 return session.chartHeight;\r\n\r\n             if (!isFullPage && this.chartHeight != '')\r\n                 return this.chartHeight;\r\n\r\n             if (this.isFullPage())\r\n                 num = 7 \r\n             else\r\n                 \r\n                    num = 8\r\n         }\r\n         return (num /16 * 100) + '%'\r\n     },\r\n\r\n        getIndicatorColors: function (item) {\r\n            let t = item.type,\r\n                aColors = [];\r\n            aColors.push(item.color);\r\n\r\n            switch (t) {\r\n                case 'macd':\r\n                    aColors.push(series.signalLine.styles.loneColor);                \r\n                    break;\r\n                case 'bb':\r\n                    aColors.push(series.topLine.styles.lineColor);\r\n                    aColors.push(series.bottomLine.styles.lineColor);\r\n                    break;\r\n                default:\r\n                    break;\r\n            }\r\n            return aColors;\r\n        },\r\n\r\n        \r\n        getPanning: () => { return true\r\n            if (Mode && Mode == 'small')\r\n                return true;\r\n            else\r\n                return false;\r\n        },\r\n\r\n        getTypeSession: function(obj){\r\n            let objType = obj != undefined ? obj.type : undefined;\r\n            let type = objType != undefined && Mode == ''\r\n                ? objType\r\n                : this.chartType;\r\n                //: (chart != undefined && chart.series != undefined && chart.series.length > 0\r\n                //    ? chart.series[0].type\r\n                //    : 'line'\r\n                //);\r\n            //this.changeGraphTypeButton(type);\r\n            return type;\r\n        },\r\n        \r\n        getRangeButton: function(session){\r\n            let range = '';\r\n            if (session && session.rangeSelector) {\r\n                range = session.rangeSelector;\r\n            }else {\r\n                if (chart != undefined)\r\n                    range = chart.options.rangeSelector.selected;\r\n                else\r\n                    range = this.defRangeSelector;\r\n            }\r\n            if (range > -1) {\r\n                this.rangeSelectorGetAll().eq(range).addClass(\"selected\")\r\n            }\r\n\r\n            return range;\r\n        },\r\n\r\n        getPeriod: function(session){            \r\n            if (session && session.prevExtremes != undefined && session.prevExtremes.period) {\r\n                return session.prevExtremes.period;\r\n            } else {\r\n                if (this.prevExtremes != undefined && this.prevExtremes.period != null ) {                    \r\n                    return this.prevExtremes.period;           \r\n                }\r\n                else {\r\n                    //return this.defaultPeriod;\r\n                    var rangeType = this.rangeSelectorGetAll().eq(this.defRangeSelector).attr(\"data-type\");\r\n                    return rangeType == 'day' || rangeType == 'week' ? rangeType : 'all';\r\n                }\r\n            }\r\n        },\r\n\r\n        getInputMinMAx: function (session, prop ) {\r\n            if (session) {\r\n                if (prop === 'min')\r\n                    return session.inputMin;\r\n                if (prop === 'max')\r\n                    return session.inputMax;                \r\n            } else {\r\n                return null;\r\n            }\r\n        },\r\n\r\n        getAxisMinMAx: function (session, prop ) {\r\n            if (session) {\r\n                if (prop === 'min')\r\n                    return session.min;\r\n                if (prop === 'max')\r\n                    return session.max;                \r\n            } else {\r\n                return null;\r\n            }\r\n        },\r\n\r\n        getDataGrouping: function (session) {\r\n            if (session && session.dataGrouing != undefined) {\r\n                return session.dataGrouing;\r\n            }\r\n            return {\r\n\r\n            };\r\n        },\r\n\r\n        getDataGroupingUnit: function(session){\r\n            if (session && session.dataGrouingUnit.length > 0) {\r\n                return session.dataGrouingUnit.length\r\n            } else {\r\n                return this.defaultDataGroupingUnit;\r\n            }\r\n        },\r\n\t\t\t\t\t\t\r\n\t\tgetDataUrl: function(instrumentid, feeder, type, isFirst, start, end, top, resolution) {    \r\n            let navFirstParam = Mode != undefined && this.mode.isNavigator == true && type != 'all' && isFirst ? '&f=1' : '',\r\n                startParam = arguments.length < 5 ? '' : '&start=' + start,\r\n                endParam = arguments.length < 6 ? '' : '&end=' + end,\r\n                topParam = arguments.length < 7 ? '' : '&top=' + top,\r\n                resParam = arguments.length < 8 ? '' : '&resolution=' + resolution,\r\n                dataFileName =  'instrumentInfo5';\r\n                \r\n            return '/portal/Graphs/data/' + dataFileName + '.ashx?symbol=' + instrumentid + '|' + feeder + '&source=2&type=' + type + navFirstParam + startParam + endParam + topParam + resParam;\r\n        },\r\n\r\n        getDataUrlParams: function(instrumentid, feeder, symbol, type, isFirst, start, end, top, resolution) {\r\n            let instrumentTypeId = $(\"#hidGraphTypeId\").val(),\r\n                exchange = $(\"#hidGraphExchange\").val(),                \r\n                isBond = $(\"#hidIsBond\").val() == \"true\",\r\n                isOption = $(\"#hidIsOption\").val() == \"true\",\r\n                isIndex = $(\"#hidIsIndex\").val() == \"true\",\r\n                secret = '';\r\n\r\n            if (typeof (user_id) != 'undefined' && user_id != undefined && user_id > 0) {\r\n                try {\r\n                    secret = document.cookie.split(';').filter(function (c) { return c.match(/^\\s*Session=\\d+x\\d+/) })[0].split('=')[1];\r\n                    secret = secret.split(\"x\")[0];\r\n                }\r\n                catch (err) {\r\n                }\r\n            } \r\n\r\n                \r\n\r\n            let navFirstParam = Mode != undefined && this.mode.isNavigator == true && type != 'all' && isFirst ? '1' : '0',\r\n                startParam = arguments.length < 5 ? '' : start,\r\n                endParam = arguments.length < 6 ? '' : end,\r\n                topParam = arguments.length < 7 ? '' : top,\r\n                resParam = arguments.length < 8 ? '' : resolution,\r\n                sourceParam = Mode == 'articleComparison' ? 1 : 2;\r\n               \r\n                urlParam = feeder == \"1\" ? '/portal/Handlers/GTOGraphForeign.ashx' : '/portal/Handlers/GTOGraph.ashx';\r\n\r\n            return {\r\n                url: urlParam ,\r\n                data: {\r\n                    \"symbol\" : instrumentid + \"|\" + feeder + \"|\" + symbol,\r\n                    \"instrumentId\" : symbol,\r\n                    \"feeder\" : feeder,\r\n                    \"isRealTime\": rt,\r\n                    \"f\" : navFirstParam,\r\n                    \"start\" : startParam,\r\n                    \"end\" : endParam,\r\n                    \"top\": topParam,\r\n                    \"resolution\": resParam,\r\n                    \"isRealTime\": rt,\r\n                    \"source\": sourceParam,\r\n                    \"type\": type,\r\n                    \"instrumentTypeId\": this.symbols.length == 1 ? instrumentTypeId : \"0\",\r\n                    \"userId\": (typeof (user_id) != 'undefined' ? user_id : 0),\r\n                    \"secret\": secret\r\n                }\r\n            }\r\n                //'/portal/Graphs/data/' + dataFileName + '.ashx?symbol=' + instrumentid + '|' + feeder + '&source=2&type=' + type + navFirstParam + startParam + endParam + topParam + resParam;\r\n        },\r\n\t/*\t\r\n\t\tgetSelectedTypeAndPeriod: function(e) {\r\n            let sType = '',\r\n                currPeriod = '';                \r\n            \r\n            if (e == undefined)\r\n                selectedRangeText = chart.options.rangeSelector.buttons[chart.rangeSelector.selected].text\r\n            else\r\n                selectedRangeText = e.rangeSelectorButton.text\r\n\r\n            switch (selectedRangeText) {\r\n                case \"1d\":\r\n                    sType = \"&type=day\";\r\n                    currPeriod = 'day';\r\n                    break;\r\n                case '1w':\r\n                    sType = \"&type=week\";\r\n                    currPeriod = 'week';\r\n                    break;\r\n                default:\r\n                    sType = \"&type=all\";\r\n                    currPeriod = 'all';\r\n                    break\r\n            }\r\n\r\n            return {\r\n                type: sType,\r\n                period: currPeriod\r\n            }\r\n        },\r\n*/\r\n        getResolutionInMilisec: (unit, count) => {\r\n            let milSecInWeek = 1000 * 60 * 60 * 24 * 7;\r\n            let milSecInDay = 1000 * 60 * 60 * 24;\r\n            let milSecInHour = 1000 * 60 * 60;\r\n            let milSecInMin = 1000 * 60;\r\n\r\n            switch (unit) {\r\n                case 'minute':\r\n                    return milSecInMin * count;\r\n                case 'hour':\r\n                    return milSecInHour * count;\r\n                case 'day':\r\n                    return milSecInDay * count;\r\n                case 'week':\r\n                    return milSecInWeek * count;\r\n                default:\r\n                    return milSecInDay * 30 * count;                \r\n            }\r\n        },\r\n\r\n        getUnitFromRangeStart: function (startTime, endTime) {\r\n\r\n            let totalPeriod = endTime - startTime;\r\n                        \r\n            let weekAgo = this.createDate(this.prevDay(endTime), -7, 0, 0);\r\n            let m2Ago = this.createDate(this.prevDay(endTime), 0, -2, 0);\r\n            let m3Ago = this.createDate(this.prevDay(endTime), 0, -3, 0);\r\n            let m6Ago = this.createDate(this.prevDay(endTime), 0, -6, 0);\r\n            let yAgo = this.createDate(this.prevDay(endTime), 0, 0, -1);\r\n            let y3Ago = this.createDate(this.prevDay(endTime), 0, 0, -3);\r\n\r\n            let milSecInWeek = 1000 * 60 * 60 * 24 * 7;\r\n            let milSecInDay = 1000 * 60 * 60 * 24;\r\n            let milSecInHour = 1000 * 60 * 60;\r\n            let milSecInMin = 1000 * 60 ;\r\n            let periodInMin = Math.round((endTime - startTime) / milSecInMin);\r\n            let periodInHour = Math.round((endTime - startTime) / milSecInHour);\r\n            let periodInDays = Math.round((endTime - startTime) / milSecInDay);\r\n            let periodInWeeks = Math.round((endTime - startTime) / milSecInWeek);\r\n            \r\n            \r\n            \r\n            if (startTime >= weekAgo.getTime()) {\r\n                return 'minute';\r\n            } else if (startTime >= m2Ago.getTime()) {\r\n                return periodInMin > this.maxPoints ? 'hour' : 'minute';\r\n            } else {\r\n                let weekendsDays = parseInt(periodInDays / 7 * 2);\r\n                periodInDays = periodInDays - weekendsDays;\r\n\r\n                if (periodInDays <= this.maxPoints )\r\n                    return 'day';\r\n                else {\r\n                    return periodInWeeks > this.maxPoints ? 'month' : 'week';\r\n                }\r\n            }\r\n            \r\n           \r\n        },\r\n        \r\n        getIndicatorsSeriesParams: function () {\r\n            return this.seriesOptions.filter((s) => { return s.type != 'line' && s.type != 'candlestick' && s.type != 'column'  })           \r\n        },\r\n\r\n\t\t\r\n        getDataGroupingObj_ByResolution: function (type, count) {\r\n            //handle - dayRangeDisabled Or weekRangeDisabled - end with the same units type\r\n            if ((this.isDayRangeDisabled || this.isWeekRangeDisabled) && (type === 'minute' || type === 'hour' )) {\r\n                type = 'day';\r\n                count = 1;\r\n            }\r\n\r\n            let isEnabled = !( parseInt(count) === 3 && type === 'minute');\r\n            return {\r\n                enabled: isEnabled ,\r\n                forced: true,\r\n                units: [\r\n                    [type, [count]]\r\n                ],                       \r\n                dateTimeLabelFormats: this.dateTimeLabelFormats, \r\n               // approximation: this.getApproximation(chart.series[0].type)\r\n            }   \r\n        },\r\n  \r\n\t\t\r\n\t\tgetDataGroupingObject_ByRangeSelector: function (type, count) {\r\n\r\n            //let graphType = this.getTypeSession();\r\n            let units = this.getUnitByRange(type, count); \r\n\r\n            switch (type) {\r\n                case 'day':\r\n                    return {\r\n                        enabled: false,\r\n                        forced: false,\r\n                        units: units,\r\n                        dateTimeLabelFormats: this.dateTimeLabelFormats,\r\n                    };\r\n              case 'week':        \r\n                return {\r\n                  enabled: true,\r\n                  forced: false,\r\n                  units: units,\r\n                  dateTimeLabelFormats: this.dateTimeLabelFormats, \r\n                };\r\n              case 'month':        \r\n                return {\r\n                  enabled: true,\r\n                  forced: false,\r\n                  units: units,\r\n                  dateTimeLabelFormats: this.dateTimeLabelFormats, \r\n                };\r\n              case 'year':\r\n                return {\r\n                  enabled: true,\r\n                  forced: false,\r\n                  units: units,\r\n                  dateTimeLabelFormats: this.dateTimeLabelFormats, \r\n                };\r\n              case 'all':\r\n                return {\r\n                  enabled: true,\r\n                  forced: false,\r\n                  units: units,\r\n                  dateTimeLabelFormats: this.dateTimeLabelFormats, \r\n                }\r\n            }\r\n          },\r\n\r\n        getUnitByRange: function(range, count) {\r\n            if (range == 'day')\r\n              return [\r\n                ['minute', [3]]\r\n              ];\r\n            if (range == 'week') {\r\n                if (this.isDayRangeDisabled)\r\n                    return [\r\n                      ['day', [1]]\r\n                    ];\r\n                return [\r\n                    ['minute', [15]]\r\n                ];\r\n            }\r\n            if (range == 'month') {\r\n              if (count == 1)\r\n                return [\r\n                  ['day', [1]]\r\n                ];\r\n              else\r\n                return [\r\n                  ['day', [1]]\r\n                ];              \r\n            }\r\n            if (range == 'year') {\r\n              if (count == 1)\r\n                return [\r\n                  ['week', [1]]\r\n                  ];\r\n              else\r\n                   return [\r\n                  ['month', [1]]\r\n                  ];              \r\n            } else\r\n              return [\r\n                ['month', [1]]\r\n              ];\r\n        },\r\n\r\n        getOrdinal: function(top) {\r\n            let currPeriod = this.rangeSelector != undefined ? this.rangeSelector.type : '';\r\n            return (currPeriod == 'day' && top == \"\" ) ? false : true\r\n        },\r\n        \r\n        graphicalAnalysisClick: function(e) {\r\n            if (chart != undefined) {      \r\n                let s = e.target.getAttribute(\"data-value\"),\r\n                    windowHeight = $(window).height();\r\n                    \r\n                \r\n                let element = this.arrIndicatorsData.find((elem) => elem.id == s)\r\n                if (element != null) {\r\n\r\n                    //console.log('indicator found');\r\n                    if (this.buildIndicatorForm(element)) {                        \r\n                        let formHeight = $(\"section.indicatorForm\").height(),\r\n                            scrollTop = $(window).scrollTop(),\r\n                            mid = scrollTop + Math.floor(windowHeight / 2);//- Math.floor(formHeight / 2);\r\n\r\n                        $(\"section.indicatorForm\").css('top', mid + 'px').show();\r\n\r\n                        $(window).scroll(function (e) {\r\n                            let scrollTop = $(window).scrollTop(),\r\n                                mid = scrollTop + Math.floor(windowHeight / 2);//- Math.floor(formHeight / 2);\r\n                                $(\"section.indicatorForm\").css('top', mid + 'px')\r\n                        });\r\n                    }\r\n                };   \r\n            }\r\n        },\r\n\r\n        handleChangeResolution : function(unit, icount) { \r\n              if (chart == undefined || unit == '') {\r\n      \t          return\r\n              }\r\n     \r\n              let me = this,\r\n                  maxRange = chart.xAxis[0].max,\r\n                  minRange = chart.xAxis[0].min,\r\n                  range = this.getResolutionInMilisec(unit, icount),// chart.xAxis[0].minRange,                        \r\n                  numOfPointsInNewResolution = (maxRange - minRange), // range,\r\n                  dg = chart.series[0].options.dataGrouping,\r\n                  units = dg != undefined ? dg.units : undefined,\r\n                  currentUnit = units != undefined ? units[0][0] : '',\r\n                  currentUnitIndex = this.resolutions.indexOf(currentUnit),\r\n                  nextUnitIndex =  unit ==='minute' && icount == 3 ? 5  :this.resolutions.indexOf(unit),\r\n                  dataGroupingObj = this.getDataGroupingObj_ByResolution(unit, icount);\r\n\r\n              me.dataGroupingObj = dataGroupingObj;\r\n\r\n\r\n\r\n              if (numOfPointsInNewResolution > this.maxPoints && nextUnitIndex > currentUnitIndex ) {                  \r\n                  minRange = maxRange - (this.maxPoints * range)\r\n\r\n                  this.unSelectRangeButton();\r\n                  this.selectRangeCustomButton();\r\n                  this.rangeSelector = undefined;\r\n\r\n                  this.updateState({\r\n                      dataGrouping: dataGroupingObj,\r\n                      rangeSelector: this.rangeSelector,\r\n                      selResolution: this.selResolution\r\n                  });\r\n\r\n                  let now = new Date(),\r\n                      end = now.getTime(),\r\n                      resParams = unit === 'minute' ? icount : unit.substring(0, 1);\r\n                      \r\n\r\n                  this.refreshAllData( dataGroupingObj, this.maxPoints, '', minRange , maxRange, 'handleChangeResolution') \r\n\r\n              } else {  \r\n                  //no need for fresh data\r\n                  chart.xAxis[0].setDataGrouping(dataGroupingObj, false);  \r\n\r\n                  this.updateState({\r\n                      dataGrouping: dataGroupingObj,\r\n                      rangeSelector: this.rangeSelector,\r\n                      selResolution: this.selResolution\r\n                  });\r\n\r\n                   chart.redraw();\r\n                   globesChart.isResolutionClick = false;\r\n              }\r\n             \r\n          },\r\n        \r\n        hideSeries: function(id, isActive){\r\n             if (chart != undefined) {\r\n                 let series = this.seriesOptions.find((series) => { return series.id == id });\r\n                 if (series != undefined) {\r\n                     series.visible = isActive ? true : false;\r\n                     chart.update({\r\n                         series: this.seriesOptions\r\n                     })\r\n                 }\r\n             }\r\n         },\r\n         \r\n         isCompareMode: function(){\r\n            return (Mode == 'comparison' || Mode == 'simpleComparison' ||  Mode == 'articleComparison' || (this.symbols.length > 1 && (this.tab == 'compare' || Mode == 'small' || Mode == 'simpleComparison' || Mode == 'articleComparison' )));\r\n         },\r\n\r\n         isFullPage: () => {\r\n             return location.href.toLowerCase().indexOf(\"instrumentgraph.aspx\") > -1;\r\n         },\r\n\r\n         isMobile: function isMobile() {\r\n                return (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)\r\n                );\r\n         },\r\n\r\n         isVolumeVisible: function() {\r\n             return (typeof (this.currentInstrument) != 'undefined' && this.currentInstrument.instrumentTypeId > 0 && this.arrNoVolumeGraph.indexOf(this.currentInstrument.instrumentTypeId) < 0) ||\r\n                 (typeof (this.currentInstrument) == 'undefined' && this.arrNoVolumeGraph.indexOf(parseInt($(\"#hidGraphTypeId\").val())) < 0);\r\n         },\r\n\r\n         isTooltipSharing: function () {\r\n             return this.indicators.length == 0;\r\n         },\r\n\r\n         iconFullToggle: () => {\r\n           // globesChart.localSessionSetData();\r\n            if (location.href.toLowerCase().indexOf(\"instrumentgraph.aspx\") == -1) {\r\n                location.href = \"/portal/graphs/instrumentgraph.aspx?instrumentid=\" + instrumentid + \"&feeder=\" + feeder + \"&mode=graph\";\r\n            } else {\r\n                location.href = \"/portal/instrument.aspx?instrumentid=\" + instrumentid + \"&feeder=\" + feeder + \"&mode=graph\";\r\n            }\r\n         },\r\n\r\n        tickPositioner : function()  {             \r\n            var first = this.min,\r\n                last = this.max,\r\n                tickInterval = (last - first) / 6,\r\n                newTicks = [Math.floor(first)];\r\n\r\n            while (first < last) {\r\n                first += tickInterval;\r\n                newTicks.push(Math.floor(first));\r\n            }\r\n\r\n            newTicks.info = this.tickPositions.info;\r\n            return newTicks;                    \r\n        },\r\n        \r\n        initYAxis: function (session) {\r\n            \r\n\r\n            let isCompareMode = this.isCompareMode(),\r\n                isVolumeVisible = this.isVolumeVisible(),                \r\n                startOnTick = true,\r\n                endOnTick = true,                \r\n                tickPositioner = undefined,\r\n                tickLength = 4,\r\n                gridLineWidth = undefined;\r\n                \r\n\r\n            if (Mode == 'articleComparison') {\r\n                startOnTick = false;\r\n                endOnTick = false;\r\n                tickPositioner = this.tickPositioner;\r\n                gridLineWidth = 0;\r\n                tickLength = 0;\r\n            }\r\n\r\n            this.yAxisOptions = [{\r\n                    id: 'valueGraph',                                       \r\n                    labels: {\r\n                        format: '{value}',\r\n                        align: 'right',\r\n                        x: -2,\r\n                        formatter: function() {\r\n                            if (isCompareMode) {\r\n                              return '';\r\n                            } else {\r\n                              return this.value;\r\n                            }\r\n                        }, \r\n                    },\r\n                    height:  isCompareMode || !isVolumeVisible ? '100%' : '70%', \r\n                    offset: 1,\r\n                    opposite: false, \r\n                    crosshair: {\r\n                        snap: false,\r\n                        dashStyle: 'Dash',\r\n                        width: 1,                        \r\n                    },                    \r\n                    endOnTick: endOnTick,\r\n                    showLastLabel: true,                    \r\n                    tickLength: tickLength,\r\n                    tickPosition: 'inside',                                         \r\n                    tickPositioner: tickPositioner,\r\n                    gridLineWidth: gridLineWidth,\r\n\r\n                }, {\r\n                    id: 'compare',                   \r\n                    labels: {\r\n                        formatter: function () {\r\n                            let value = this.value,\r\n                                series = this.axis.chart.series[0],\r\n                                val;\r\n\r\n                            if (globesChart.isCompareMode()) {\r\n                                return value + '%';\r\n                            } else {\r\n                                let compareValue = series.options.baseRate != undefined ? series.options.baseRate : series.compareValue;\r\n                                val = (value / compareValue) * 100;\r\n                                //console.log(series.compareValue, value, val);  \r\n                                return Highcharts.numberFormat(Highcharts.correctFloat(100 - val) * -1, 1, '.', ',') + '%';\r\n                            }\r\n                        },\r\n                    },\r\n                    height: isCompareMode || !isVolumeVisible  ? '100%' : '70%',   \r\n                    offset: 1,\r\n                    opposite: Mode == 'articleComparison' ? false : true,\r\n                    min: 0,\r\n                    linkedTo: 0,\r\n                    startOnTick: false,\r\n                    endOnTick: endOnTick,\r\n                    showLastLabel: true,\r\n                    tickLength: tickLength,\r\n                    tickPosition: isCompareMode ? 'inside' : 'outside',\r\n                    tickPositioner: tickPositioner,\r\n                    \r\n                }, {\r\n                    id: 'volumeGraph',\r\n                    top: isCompareMode  || !isVolumeVisible  ? '0%' : '80%',\r\n                    height: isCompareMode || !isVolumeVisible  ? '0%' : '20%',\r\n                    offset: 1,\r\n                    opposite: false,\r\n                    endOnTick: true,\r\n                    showLastLabel: true,\r\n                    crosshair: {\r\n                        snap: false,\r\n                        dashStyle: 'Dash',\r\n                        width: 1,\r\n                    },\r\n                    tickPixelInterval: 10,\r\n                    tickLength: 4,\r\n                    tickPosition: 'inside',  \r\n                    visible: isVolumeVisible\r\n\r\n                }\r\n            ];\r\n\r\n            //add extra indicators axis\r\n            if (session != null) {\r\n                let sessionYAxis = session.yAxisOptions;\r\n                if (sessionYAxis == undefined)\r\n                    return;\r\n\r\n                sessionYAxis.forEach((item, index) => {\r\n                    let yAxis = this.yAxisOptions.find((y) => { return y.id == item.id })\r\n                    if (yAxis != undefined) {\r\n                        yAxis.height = item.height;\r\n                        yAxis.top = item.top;\r\n                    } else {\r\n                        this.yAxisOptions.push(item);\r\n                    }\r\n                });\r\n            }\r\n        },\r\n        \r\n        \r\n        initFirstTime: function (pInstParam) {\r\n            \r\n            let me = this;                \r\n\r\n            me.chartHeight= '';            \r\n            me.currentInstrument = undefined;\r\n            me.chartType = 'line';\r\n            me.defaultDownload = 'img';\r\n            \r\n            me.indicators = [];   \r\n            me.indicators = [];   \r\n            me.indicatorsParams = [];\r\n            me.isInputClick= false;\r\n            me.isResolutionClick = false;\r\n            me.isAddInstrumentClick = false;\r\n            me.isRangeSelectorClick = false;  \r\n            me.navigatorSeriesData= [];\r\n            me.period = '1d';\r\n            me.prevExtremes = undefined;\r\n            me.selResolution = undefined;\r\n            me.symbols = [];\r\n            me.seriesOptions = [];\r\n                \r\n            me.rangeSelector = undefined;\r\n            me.yAxisOptions = [];\r\n\r\n            me.unselectCompareButton();            \r\n            me.unSelectRangeButton();\r\n            me.unSelectResolutionButton();\r\n\r\n            \r\n            $(\".indicatorsAndCompare .indicators\").removeClass(\"selected\");\r\n            $(\".graphFrame\").removeClass(\"dark\");\r\n            Highcharts.setOptions(Highcharts.themeLight);\r\n            me.changeGraphTypeButton('line');\r\n\r\n\r\n            let graphTypeId = parseInt($(\"#hidGraphTypeId\").val());\r\n            let iGraphTypeId = typeof (graphTypeId) != undefined ? parseInt(graphTypeId) : 0;\r\n            let isIndexBasic = $(\"#indexBasic\").val() == \"2\";//׳ž׳“׳“׳™׳ ׳œ׳ ׳¨׳¦׳™׳₪׳™׳\r\n            if (me.arrNoDayTypes.indexOf(iGraphTypeId) > -1 || isIndexBasic) {\r\n                me.disabledRangeDay();               \r\n            }\r\n            if (typeof isDayCloseDataOnly != 'undefined' && isDayCloseDataOnly) {\r\n                if (!me.isDayRangeDisabled) {\r\n                    me.disabledRangeDay();\r\n                }\r\n                me.disabledRangeWeek(); \r\n                \r\n            }\r\n            \r\n\r\n            let period = me.getPeriod(),\r\n                top = '',\r\n                graphType = 'line',\r\n                now = new Date(),\r\n                end = now.getTime(),\r\n                start = 0,\r\n                symbol = $(\"#hidGraphSymbol\").val(),\r\n                instId = Array.isArray(instrumentid) && instrumentid.length > 0 ? (instrumentid[0] + \"|\" + feeder[0] + \"|\" + symbol) : '';\r\n\r\n\r\n            if (Mode == 'articleComparison') {\r\n                start = graphStartTime;\r\n                end = graphEndTime;\r\n                me.symbols = comparisonSymbols.map(x => x);                \r\n                me.refreshAllData('', '', '', start, end, 'initFirstTime');\r\n                \r\n\r\n            } else {\r\n\r\n                me.rangeSelectorSet(me.defRangeSelector);\r\n                me.dataGroupingObj = me.getDataGroupingObject_ByRangeSelector(me.rangeSelector.type, me.rangeSelector.count);\r\n                me.selectResolutionButton(me.dataGroupingObj);\r\n\r\n                start = Math.round(me.calcRangeStartCalc(now, me.rangeSelector.type, me.rangeSelector.count).getTime())\r\n\r\n\r\n                if (me.mode.useComparisonSymbols && typeof (comparisonSymbols) != 'undefined' && comparisonSymbols.length > 0) {\r\n                    me.symbols = comparisonSymbols.map(x => x);\r\n\r\n                } else {\r\n                    if (pInstParam != undefined) {\r\n                        me.symbols.push(pInstParam);\r\n                    }\r\n                    else if (instId != '') {\r\n                        me.symbols.push(instId);\r\n                    }\r\n                }\r\n                //me.updateState({\r\n                //    symbols: me.symbols,\r\n                //    rangeSelector: me.rangeSelector,\r\n                //    dataGroupingObj: me.dataGroupingObj\r\n                //});\r\n\r\n\r\n                me.refreshAllData(me.dataGroupingObj, top, period, start, end, 'initFirstTime');\r\n            }\r\n            \r\n            \r\n        },\r\n\r\n        legend: function(sId, sName, sType, syAxis, sColor, sIsFirst, sSeriesLen) {\r\n            \r\n            return {\r\n                id: sId,\r\n                name: sName,\r\n                type: sType,\r\n                yAxis: syAxis,\r\n                color: sColor,\r\n                isFirst: sIsFirst,\r\n                gc: this,\r\n                seriesLen: sSeriesLen,\r\n                build: function() {\r\n                    let textClass = this.type != 'line' && this.type != 'candlestick' ? 'en' : '';\r\n                    let maxLen = this.gc.Mode == 'small' ? 3 : 4;\r\n                    let usedName =  this.seriesLen > maxLen && this.name.length > 10 ? this.name.substring(0, 6) + '...' : this.name;\r\n                    return '<div class=\"legend\" data-type=\"' + this.type + '\" data-id=\"' + this.id + '\" title=\"'+ this.name + '\"><span class=\"circule\" style=\"background-Color:' + this.color + '\"></span><span class=\"' + textClass + '\">' + usedName + '</span>' + (this.isFirst ? '' : '<span class=\"x\">x</span>' ) + '</div>';\r\n                }\r\n            }\r\n            \r\n        },\r\n\r\n        legendAdd: function(id, name, type, yAxis, color, seriesLen) {\r\n            let gc = this,\r\n                isFirst = this.legends.length == 0,\r\n                newLegend = this.legend(id, name, type, yAxis, color, isFirst, seriesLen),\r\n                html = newLegend.build();\r\n\r\n            this.legends.push(newLegend);            \r\n            $(\"#legendSection\").append(html);\r\n            \r\n        },\r\n\r\n        legendCustomItemClick : function(e) {\r\n\r\n            e.stopPropagation();\r\n            let legendId = $(this).attr(\"data-id\");  \r\n\r\n            let filterdCustomLegend = globesChart.legends.filter((item) => item.id == legendId);\r\n            if (filterdCustomLegend.length == 0)\r\n                return;\r\n\r\n            \r\n            let obj = filterdCustomLegend[0],\r\n                me = obj.gc,\r\n                isCompareMode = me.isCompareMode(),\r\n                seriesType = obj.type,\r\n                y_axis = obj.yAxis;              \r\n\r\n            if (obj && legendId != me.symbols[0] && legendId != 'main') {\r\n                \r\n                //indicators\r\n                if (seriesType != 'line' && seriesType != 'candlestick') {\r\n                    \r\n                    me.removeIndicatorFromDDL(seriesType);                    \r\n                    me.removeSeriesFromChartById(legendId);\r\n                    me.options.series = me.seriesOptions;\r\n\r\n                    if (seriesType == 'column') {\r\n                        let volumeYAxis = me.yAxis.options.find((y) => { y.id == 'volumeGraph' })\r\n                        if (volumeYAxis != undefined) {\r\n                            //in future : allow to remove the volume graph\r\n                        }\r\n                    }\r\n                    else if (seriesType != 'bb' && seriesType != 'sma') {\r\n                        me.yAxis_remove(y_axis);\r\n                    }\r\n\r\n                    let seriesIndicators = me.getIndicatorsSeriesParams();\r\n                    me.updateState({\r\n                        indicators: me.indicators,\r\n                        indicatorsParams: seriesIndicators,\r\n                        yAxisOptions: me.yAxisOptions,\r\n                        //seriesOptions: me.seriesOptions,\r\n                        chartHeight: me.chartHeight,\r\n                    });\r\n                    \r\n                    globesChart.unselectIndicatorsButton();\r\n\r\n                    if (seriesIndicators.length == 0) {\r\n                        chart.update({\r\n                            tooltip: {\r\n                                shared: true,\r\n                                split: false\r\n                            }\r\n                        });\r\n                    }\r\n\r\n\r\n                    \r\n                    \r\n\r\n                }\r\n                //(compare)\r\n                else {  \r\n                                        \r\n                    let instId = legendId;                                            \r\n                    me.removeInstrumentFromSymbols(instId);\r\n                    me.removeSeriesFromChartById(legendId);\r\n                    me.removeInstrumentFromOutsideTable(legendId);\r\n                    me.options.series = me.seriesOptions; \r\n\r\n                    //--keep session updated: if there is arrComparison then we have to remove the inst from it\r\n                    //if (Mode == 'comparison') {\r\n                    if(me.mode.saveState) {\r\n                        let session = me.localSessionRead(),\r\n                            arrComparison = session != undefined ? session.arrComparison : undefined,\r\n                            instrumentId = instId.split('|')[0];\r\n\r\n                        if (Array.isArray(arrComparison)) {\r\n                            let itemIndex = arrComparison.findIndex((element) => { return element.id == instrumentId })\r\n                            if (itemIndex > -1) {\r\n                                arrComparison.splice(itemIndex, 1);\r\n                                me.updateState({\r\n                                    arrComparison: arrComparison\r\n                                });\r\n                            }\r\n                        }\r\n                    }\r\n                    //---\r\n\r\n                    me.updateState({\r\n                        symbols: me.symbols,\r\n                    });\r\n                }\r\n\r\n                //if indicator : remove indicator from selected list                \r\n                me.legendBuildAll();\r\n\r\n                //return to base graph\r\n                if (isCompareMode && me.symbols.length == 1) { \r\n                    \r\n                    me.refreshAllData(me.dataGroupingObj, \"\", me.getPeriod(), chart.xAxis[0].min, chart.xAxis[0].max, \"legendCustomItemClick\");\r\n                }               \r\n            }\r\n        },\r\n\r\n        legendBuildAll: function() {\r\n            let gc = this;\r\n            $(\"#legendSection\").html('');\r\n            gc.legends = [];\r\n\r\n            let seriesLength = chart.series.filter((item) => item.options.showInLegend == true).length;\r\n\r\n            $.each(chart.series, function(index, item) {                \r\n                if (item.options.id != 'highcharts-navigator-series' && item.options.showInLegend == true && item.options.visible != false) {                    \r\n                    gc.legendAdd( item.options.id, item.name, item.options.type , item.options.yAxis ,item.options.color, seriesLength); \r\n                }\r\n            });  \r\n\r\n            $(\"#legendSection .legend\").on(\"click\", gc.legendCustomItemClick)\r\n        },\r\n\r\n        localSessionSetValue: function (storageName, newProps) {\r\n            let storageObj = JSON.parse(localStorage.getItem(storageName));\r\n            if (storageObj == undefined) {\r\n                let storageObj = {}\r\n            }\r\n            storageObj = {\r\n                ...storageObj,\r\n                ...newProps\r\n            }\r\n\r\n            localStorage.setItem(storageName, JSON.stringify(storageObj));            \r\n        },\r\n        \r\n        localSessionSetData: function () {\r\n            try {\r\n                let style = $(\".graphFrame\").hasClass('dark') ? 'dark' : 'light';\r\n                let chartIndicatorsParams = this.getIndicatorsSeriesParams();\r\n                let dg = chart.xAxis[0].options.dataGrouping;\r\n                let dgUnit = dg !== undefined ? chart.series[0].options.dataGrouping.units[0] : undefined;\r\n                let data = chart.series[0].options.data;\r\n                let dataMin = data != undefined ? data[0][0] : undefined;\r\n                let dataMax = data != undefined ? data[data.length - 1][0] : undefined;\r\n                let isFundComparison = location.href.indexOf('funds') > 0;\r\n                let instType = this.currentInstrument != undefined ? this.currentInstrument.instrumentType : (isFundComparison ? 'fund' : '');\r\n                // let rangeSelectorIndex = this.rangeSelectorIndexGet();\r\n                localStorage.setItem(\"state\", JSON.stringify({\r\n\r\n                    chartHeight: this.chartHeight,\r\n                    type: chart.series[0].type,\r\n                    //symbols:            this.symbols,\r\n                    dataGrouingUnit: dgUnit,\r\n                    rangeSelector: this.rangeSelector,\r\n                    //resolution:         $(\".resolutionGroup .resolution\").index($(\".selected\")),                   \r\n                    min: chart.xAxis[0].min,\r\n                    max: chart.xAxis[0].max,\r\n                    dataMin: dataMin,\r\n                    dataMax: dataMax,\r\n                    theme: style,\r\n                    indicators: this.indicators,\r\n                    indicatorsParams: chartIndicatorsParams,\r\n                    prevExtremes: this.prevExtremes,\r\n                    currentInstrumentType: instType,\r\n                    selResolution: this.selResolution\r\n\r\n\r\n                }));\r\n\r\n                if (Mode == 'comparison') {\r\n                    this.updateState({\r\n                        tab: 'comapre',\r\n                        symbols: this.symbols,\r\n                        type: 'line'\r\n                    });\r\n                }\r\n            } catch (e) {  }\r\n        },\r\n\r\n        localSessionClear: () => {\r\n            localStorage.removeItem(\"state\");            \r\n        },\r\n\r\n        localSessionRead: () => {\r\n            let session = JSON.parse(localStorage.getItem(\"state\"));            \r\n            return session;\r\n        },\r\n\r\n        navigatorOptions: function() {\r\n            //if (Mode && Mode != '')\r\n            if (this.mode.isNavigator == false)\r\n                return {\r\n                    enabled: false,\r\n                    series: {\r\n                        data: this.navigatorSeriesData,                       \r\n                    },\r\n                }\r\n            else\r\n                return {\r\n                    adaptToUpdatedData: false,\r\n                    series: {\r\n                        data: this.navigatorSeriesData,                       \r\n                    },\r\n                    xAxis: {\r\n                        events: {\r\n                            afterSetExtremes: this.afterSetExtremes,\r\n                        },\r\n                    },\r\n                    yAxis: {\r\n                        reversed: false\r\n                    }\r\n                }\r\n        },\r\n\r\n        prepedData: function( arr, instrumentType){\r\n              if(this.getTypeSession() == 'line' && instrumentType != 'currency'){\r\n                  return arr.map(function(point){\r\n                      return [point[0],point[4]];\r\n                  });\r\n              } else {                     \r\n                  return arr;\r\n              }\r\n        },\r\n              \r\n        tooltipSeriesNameConverter: function(series) {\r\n            if (series.type == 'line' || series.type == 'candlestick')\r\n                return series.name + '-' + '׳©׳¢׳¨';\r\n            return series.name;\r\n        },\r\n\r\n       \r\n        \r\n        timeToDate: (time) =>{\r\n            let d = new Date(time)\r\n            let m = d.getMonth() + 1;\r\n            let day = d.getDate();\r\n\r\n            m = m < 10 ? '0' + m : m;            \r\n            day = day < 10 ? '0' + day : day;\r\n\r\n            return  d.getFullYear()  + '-' + m + '-' + day;\r\n        },\r\n\r\n        today: () => {\r\n            let now = new Date();\r\n            return  new Date(now.getFullYear(), now.getMonth(), now.getDate());\r\n        },\r\n\r\n        prevDay: (time) => {\r\n            let prevDate = new Date(time);\r\n            return new Date(prevDate.getFullYear(), prevDate.getMonth(), prevDate.getDate());\r\n        },\r\n\r\n\r\n        \r\n        refreshAllData: function ( dataGroupingObj, sTop, currPeriod, start, end, caller) {\r\n            let me = this,\r\n                firstInstrumentName = '',\r\n                firstInstrumentType = '',\r\n                volume = [],\r\n                yatzig = [],\r\n                isCompare = me.isCompareMode(),\r\n                unit = me.selResolution == undefined ? '' : me.selResolution.res,\r\n                count = me.selResolution == undefined ? '' : me.selResolution.count,\r\n                resolutionParams = me.selResolution == undefined ? '' : (unit === 'minute' ? count : unit.substring(0, 1)),\r\n                chartType = me.chartType ,\r\n                allData = undefined,\r\n                regex1 = RegExp('(restoreSession|addInstrumentToComparison|initFirstTime|changeTheme|legendCustomItemClick)'),\r\n                isToCreateNewChart = regex1.test(caller);\r\n                \r\n               \r\n            if (Mode == 'articleComparison') {\r\n                chartType =   me.symbols.length > 1 ? 'line' : 'area';\r\n                currPeriod = '';\r\n                top = '';\r\n                resolutionParams = ((end - start)/(1000*60*60*24)) < 2 ? 'day' : '';\r\n                sTop = '';\r\n                dataGroupingObj = me.getDataGrouping();\r\n            }\r\n            \r\n            \r\n\r\n            me.seriesOptions = [];\r\n\r\n            $.each(me.symbols, function (i, param) {\r\n                    let arrParam = param.split('|'),\r\n                        instId = arrParam[0],\r\n                        feeder = arrParam[1],\r\n                        symbol = arrParam[2],\r\n                        isFirst = Mode != 'articleComparison' && me.navigatorSeriesData.length == 0 && i==0, \r\n                        paramsUrl = me.getDataUrlParams(instId, feeder, symbol, currPeriod, isFirst, start, end, sTop, resolutionParams);\r\n\r\n                    $.ajax({\r\n                        method: 'POST',\r\n                        url: paramsUrl.url ,\r\n                        data: paramsUrl.data,\r\n                        dataType: 'text'\r\n                    })\r\n                        .fail(function () {\r\n                            //  debugger\r\n                            console.log(arguments);\r\n                        })\r\n                        .done(function (info) {\r\n                           // debugger\r\n                             info = eval(\"(\" + info + \")\");\r\n\r\n                             let isToShowBase = currPeriod == 'day' && info.data != undefined && info.data.length > 0 && info.data[0].length >= 7 && !isCompare,\r\n                                 arrBaseRate = !isToShowBase ? [] : info.data.filter(function (arr, index) { return arr[6] == 'B' }),\r\n                                 data = !isToShowBase ? info.data : info.data.filter(function (arr, index) { return arr[6] != 'B' }),\r\n                                 allData = info.allData != undefined ? info.allData :  (me.navigatorSeriesData.length > 0 ?  me.navigatorSeriesData : info.data) ,\r\n                                 instId = info.instid,\r\n                                 instrumentType = info.instrumenttype,\r\n                                 instrumentTypeId = parseInt(info.typeid),\r\n                                 mapedData = me.prepedData(data, instrumentType),\r\n                                 tooltipOptions = me.setTooltipFormater(instrumentType, true, chartType),\r\n                                 periodType = info.type;\r\n\r\n                            \r\n\r\n                            if (currPeriod == 'day' && instrumentType != 'currency' && arrBaseRate.length == 0 && info.baseRate != undefined) {\r\n                                arrBaseRate[0] = [];\r\n                                arrBaseRate[0][1] = parseFloat(info.baseRate);\r\n                            } \r\n\r\n                            if (Mode == 'articleComparison' && info.baseRate != undefined) {\r\n                                var prevTime = mapedData[0][0] - (12 * 60 * 60 * 1000);\r\n                                mapedData.unshift([ prevTime, parseFloat(info.baseRate) ]);\r\n                            }\r\n                            \r\n\r\n                            me.seriesOptions.push({\r\n                                data: (isCompare || chartType == 'line' ? mapedData : data),\r\n                                type: ((isCompare && Mode != 'articleComparison') || chartType == 'line' || instrumentType == 'currency' ? 'line' : chartType /* 'candlestick' */ ),\r\n                                id: (isCompare ? param : 'main'),\r\n                                name: info.name,\r\n                                yAxis: 0,\r\n                                showInLegend: true,\r\n                                compare: (isCompare ? 'percent' : 'none'),\r\n                                compareStart: false,\r\n                                tooltip: tooltipOptions,\r\n                                zIndex: 2,\r\n                                baseRate: arrBaseRate.length > 0 ? arrBaseRate[0][1] : undefined\r\n\r\n                            });\r\n\r\n                            \r\n                            //first series\r\n                            if (instId == me.symbols[0]) {\r\n\r\n                                me.currentInstrument = {\r\n                                    mapedData: mapedData,\r\n                                    orgData: data,\r\n                                    instrumentType: instrumentType,\r\n                                    instrumentTypeId: instrumentTypeId,\r\n                                    baseArr: arrBaseRate\r\n                                };\r\n                                firstInstrumentName = info.name;\r\n\r\n                                if (me.mode.isNavigator && me.navigatorSeriesData.length == 0) //in restoreSession\r\n                                    me.navigatorSeriesData = allData;\r\n\r\n                                //in indicators add yatzig or volume\r\n                                if (!isCompare && data.length > 0) {\r\n                                    if (instrumentType == 'currency' && instrumentTypeId != 46) {//yatzig\r\n                                        if (instrumentTypeId == 20 && (periodType == 'day' || periodType == 'week')) {\r\n                                            for (let i = 0; i < data.length; i++) {\r\n                                                let time = data[i][0];\r\n                                                let val = parseFloat(data[i][2]);\r\n                                                if (!isNaN(val)) {\r\n                                                    yatzig.push([time, val]);\r\n                                                }\r\n                                            }                                            \r\n                                        }\r\n                                        if (periodType == 'day') {\r\n                                            yatzig.push([end, parseFloat(data[0][2])]);\r\n                                        }\r\n                                        \r\n                                    } else {  //volume                                        \r\n                                        volume = me.fillVolumeData(data);\r\n                                    }\r\n                                }\r\n                            }\r\n\r\n                            //finish all                           \r\n                            if (me.seriesOptions.length == me.symbols.length) {\r\n\r\n                                let firstSeriesWithData = me.seriesOptions[0];\r\n\r\n                                if (isCompare) { //in compare : sort the seriesOptions in the order the symbols entered the array\r\n                                    //colors\r\n                                    me.seriesOptions.sort((a, b) => {\r\n                                        let subset = me.symbols.indexOf(a.id) - me.symbols.indexOf(b.id);\r\n                                        if (subset < 0) return -1;\r\n                                        if (subset > 0) return 1;\r\n                                        return 0\r\n                                    });\r\n                                    $.each(me.seriesOptions, function (i, series) {\r\n                                        series.color = Highcharts.defaultOptions.colors[i];\r\n                                    });\r\n\r\n                                    //find the oldest data to show in the xAxis scale - for etf/fund home page                                  \r\n                                    if (instrumentid[0] == 0) {\r\n                                        let sortedSeries = me.seriesOptions.map((item) => {\r\n                                            if (item.data.length > 0)\r\n                                                return item\r\n                                        });\r\n                                        sortedSeries.sort((a, b) => {\r\n                                            let subset = a.data[0][0] - b.data[0][0];\r\n                                            if (subset < 0) return -1;\r\n                                            if (subset > 0) return 1;\r\n                                            return 0;\r\n                                        });\r\n                                        firstSeriesWithData = sortedSeries[0];\r\n                                    }\r\n\r\n                                    if (me.seriesOptions[0].type == 'area') {\r\n                                        let isDownColor = mapedData.length > 0 && mapedData[mapedData.length - 1][1] - mapedData[0][1] < 0;\r\n                                        if (isDownColor) {\r\n                                            me.seriesOptions[0].color = Highcharts.getOptions().downColors[0];\r\n                                            me.seriesOptions[0].fillColor = Highcharts.getOptions().downColors[1];\r\n                                           // me.seriesOptions[0].fillOpacity = 0.2\r\n                                        }\r\n                                    }\r\n\r\n\r\n                                } else { //not compare\r\n\r\n\r\n\r\n                                    //colors\r\n                                    if (me.chartType == 'line') {\r\n                                        me.seriesOptions[0].color = Highcharts.defaultOptions.colors[0];\r\n                                    }\r\n                                    //build yatzig or volume series\r\n                                    if (instrumentType == 'currency') {\r\n                                        if (yatzig.length > 0) {                                            \r\n                                            me.seriesOptions.push({\r\n                                                type: 'line',\r\n                                                name: instrumentName + '-׳™׳¦׳™׳’',\r\n                                                data: yatzig,\r\n                                                id: 'yatzig',\r\n                                                yAxis: 0,\r\n                                                decimals: 4,\r\n                                                marker: {\r\n                                                    enabled: false\r\n                                                },\r\n                                                showInLegend: (periodType == 'week' ? true : false),\r\n                                                compare: 'none',\r\n                                               // tooltip: tooltipOptions,\r\n                                                tooltip: {\r\n                                                    ...tooltipOptions,\r\n                                                    enabled: true\r\n                                                },\r\n                                                color: 'red',\r\n                                                visible: (isCompare ? false : true),\r\n                                                zIndex: 1,\r\n                                            });\r\n                                        }\r\n                                    } else {\r\n                                        if (me.isVolumeVisible()) {\r\n                                            me.seriesOptions.push({\r\n                                                type: 'column',\r\n                                                name: instrumentName + '-׳ ׳₪׳— ׳ž׳¡׳—׳¨',\r\n                                                data: volume,\r\n                                                id: 'volume',\r\n                                                yAxis: 2,\r\n                                                decimals: 4,\r\n                                                marker: {\r\n                                                    enabled: false\r\n                                                },\r\n                                                color: Highcharts.defaultOptions.colors[0],\r\n                                                showInLegend: false,\r\n                                                compare: 'none',\r\n                                                visible: (isCompare ? false : true),\r\n\r\n                                            });\r\n                                        }\r\n                                    }\r\n\r\n                                    if (me.mode.isIndicators && !isCompare && me.indicatorsParams.length > 0) {\r\n                                        me.indicatorsParams.forEach(function (item, index) {\r\n                                            let newItem = JSON.parse(JSON.stringify(item));\r\n\r\n                                            newItem.tooltip = globesChart.setTooltipFormater(me.currentInstrument.instrumentType, true, newItem.type.toLowerCase())\r\n                                            me.seriesOptions.push(newItem);\r\n                                        });\r\n                                    }\r\n                                }//end not compare\r\n                                    \r\n\r\n                                let firstSeries = firstSeriesWithData, //instrumentid[0] != 0 ? me.seriesOptions[0] : oldestSeries,\r\n                                    firstData = firstSeries != undefined ? firstSeries.data : [],\r\n                                    dataMin = firstData.length > 0 ? firstData[0][0] : null,\r\n                                    dataMax = firstData.length > 0 ? firstData[firstData.length - 1][0] : null,\r\n                                    xMin = start != '' ? Math.max(dataMin, start) : dataMin,\r\n                                    xMax = end != '' ? (dataMax != null ? Math.min(dataMax, end) : end) : dataMax,\r\n                                    xMin_indexInData = firstData.findIndex(item => item[0] == xMin);\r\n                                    //compareVal = xMin_indexInData > 0 ? firstData[xMin_indexInData-1][2]\r\n                                    \r\n\r\n\r\n                                if (currPeriod == 'day') {\r\n                                    let dayExtremes = me.findDayExtremes();\r\n                                    xMin = dayExtremes.min;\r\n                                    xMax = dayExtremes.max;\r\n                                }\r\n\r\n\r\n\r\n                                if (chartType == 'line' && me.currentInstrument != undefined && me.currentInstrument.baseArr.length > 0 ) {\r\n\r\n                                    let baseArr = me.currentInstrument.baseArr,\r\n                                        arrBaseLine = [{\r\n                                            x: xMin,\r\n                                            y: baseArr[0][1],\r\n                                            dataLabels: {\r\n                                                enabled: true,\r\n                                                format: '{series.name}',\r\n                                                style: {\r\n                                                    textOutline: '',\r\n                                                    fontWeight: '',\r\n                                                    fontSize: '10px',\r\n                                                },\r\n                                                y: 20,\r\n                                            },\r\n                                        },\r\n                                        [xMax, baseArr[0][1]]\r\n                                        ];\r\n\r\n                                    me.seriesOptions.push({\r\n                                        data: arrBaseLine,\r\n                                        type: 'line',\r\n                                        id: 'baseRate',\r\n                                        name: baseArr[0][1] + ' :׳‘׳¡׳™׳¡',\r\n                                        yAxis: 0,\r\n                                        showInLegend: false,\r\n                                        color: 'red',\r\n                                        dataGrouping: {\r\n                                            enabled: false\r\n                                        },\r\n                                        tooltip: {\r\n                                            enabled: false\r\n                                        },\r\n                                        enableMouseTracking: false,\r\n                                        compare: 'none',\r\n                                        zIndex: 1,\r\n                                        visible: !isCompare\r\n                                    });\r\n                                }\r\n\r\n\r\n\r\n                                me.options = me.setOptions();  \r\n                                if (caller != 'restoreSession' && caller != 'changeTheme') {\r\n                                    me.initYAxis();\r\n                                }\r\n                                me.options.yAxis = me.yAxisOptions;\r\n                                me.options.series = me.seriesOptions;\r\n                                me.options.xAxis.ordinal = me.getOrdinal(sTop);\r\n                                if (Mode == 'articleComparison') {\r\n                                    me.options.xAxis.dateTimeLabelFormats = {                                        \r\n                                        day: ['%d/%m/%y'],                                        \r\n                                        week: ['%d/%m/%y'],\r\n                                        month: ['%b %Y'],\r\n                                        year: ['%Y']\r\n                                    };\r\n\r\n                                    \r\n                                }\r\n\r\n                                //chart = me.createChart(me.options);\r\n\r\n                                //creating chart\r\n                                if (chart == undefined || isCompare || isToCreateNewChart) {\r\n                                    chart = me.createChart(me.options);\r\n                                } else {\r\n                                    chart.update({\r\n                                        series: me.options.series,\r\n                                        yAxis: me.options.yAxisOptions,\r\n                                        xAxis: {\r\n                                            ordinal: me.options.xAxis.ordinal,\r\n                                        }\r\n                                    }, false, true);\r\n\r\n                                    //if (Mode == '' && !isCompare && me.chartHeight != '') {\r\n                                    //chart.setSize(undefined, me.chartHeight);\r\n                                    //}\r\n                                }\r\n\r\n\r\n                                let xData = firstSeries != undefined ? firstSeries.data : undefined;\r\n                                if (xData != undefined && xData.length > 0) {\r\n                                    me.prevExtremes = {\r\n                                        dataMin: xData[0][0],\r\n                                        dataMax: xData[xData.length - 1][0],\r\n                                        period: sTop != '' ? '' : currPeriod,\r\n                                        time: (new Date()).getTime()\r\n                                    };\r\n\r\n                                } else {\r\n                                    me.prevExtremes = undefined;\r\n                                }\r\n                                me.legendBuildAll();\r\n\r\n\r\n                                let isTop = sTop != '' ? true : false;\r\n\r\n                                setTimeout(() => {\r\n                                    chart.xAxis[0].setDataGrouping(dataGroupingObj, isTop);\r\n\r\n                                    let points = chart.xAxis[0].series[0].points;\r\n                                    if (isTop) {\r\n                                        if (points.length > me.maxPoints)\r\n                                            xMin = points[points.length - me.maxPoints].x;\r\n                                    } else {\r\n                                        if (isCompare) {\r\n                                            xMin = points != undefined ? points[0].x : xMin;\r\n                                        }\r\n                                    }\r\n\r\n                                    chart.xAxis[0].setExtremes(xMin, xMax);\r\n\r\n                                    chart.hideLoading();\r\n\r\n                                    \r\n                                    me.dataGroupingObj = dataGroupingObj;\r\n                                    me.selectResolutionButton(dataGroupingObj);\r\n                                    \r\n\r\n\r\n                                    me.updateInputs(xMin, xMax);\r\n\r\n                                    let currentInstrumentType = me.currentInstrument != undefined ? me.currentInstrument.instrumentType : '',\r\n                                        currentInstrumentTypeId = me.currentInstrument != undefined ? me.currentInstrument.instrumentTypeId : 0;\r\n\r\n                                    if (me.mode.saveState) {\r\n                                        if (me.localSessionRead() == undefined) {\r\n                                            me.localSessionSetData();\r\n                                        } else {\r\n                                            me.updateState({\r\n                                                type: chart.series[0].type,\r\n                                                dataGrouping: dataGroupingObj,\r\n                                                min: xMin,\r\n                                                max: xMax,\r\n                                                dataMin: dataMin,\r\n                                                dataMax: dataMax,\r\n                                                prevExtremes: me.prevExtremes,\r\n                                                currentInstrumentType: currentInstrumentType,\r\n                                                currentInstrumentTypeId: currentInstrumentTypeId,\r\n                                                rangeSelector: me.rangeSelector,\r\n                                                selResolution: me.selResolution,\r\n                                            });\r\n                                        }\r\n                                    }\r\n\r\n                                }, 1);\r\n\r\n\r\n                                \r\n                            }\r\n                        });\r\n                });                \r\n            \r\n        },\r\n\r\n        removeInstrumentFromSymbols: function (instParam) {\r\n            let index = this.symbols.indexOf(instParam)\r\n            if (index > -1)\r\n                this.symbols.splice(index, 1);\r\n            \r\n        },\r\n               \r\n\r\n        removeSeriesFromChartById: function (seriesId) { \r\n            \r\n\r\n            if (seriesId === 'volume') {\r\n                let series = chart.get(seriesId);\r\n                series.hide()\r\n            } else {\r\n                let seriesIndex = this.seriesOptions.findIndex((m) => m.id == seriesId);\r\n                if (seriesIndex > -1) \r\n                    this.seriesOptions.splice(seriesIndex, 1);                \r\n\r\n                let indicatorIndex = this.indicatorsParams.findIndex((m) => m.id == seriesId);\r\n                if (indicatorIndex > -1)\r\n                    this.indicatorsParams.splice(indicatorIndex, 1);\r\n\r\n                let series = chart.get(seriesId);\r\n                if (series != undefined)\r\n                    series.remove()\r\n            }\r\n        },\r\n        \r\n        removePerviousIndicatorsSeries: function (type) {\r\n             let arrFilteredSeriesToRemove = chart.series.filter((s) => s.userOptions.type == type),\r\n                 yAxisId = '',\r\n                 me = this;\r\n\r\n\r\n            if (arrFilteredSeriesToRemove.length > 0) {\r\n                arrFilteredSeriesToRemove.forEach(function (series, index) {\r\n                    let id = series.userOptions.id;\r\n                    let yAxis = series.userOptions.yAxis;\r\n                \r\n                    chart.get(id).remove();\r\n\r\n                    let pos = me.seriesOptions.findIndex((item) => { return item.id == id });\r\n                    if (pos > 0) {\r\n                        me.seriesOptions.splice(pos, 1);\r\n                    }\r\n                    pos = me.indicatorsParams.findIndex((item) => { return item.id == id });\r\n                    if (pos > -1) {\r\n                        me.indicatorsParams.splice(pos, 1);\r\n                    }\r\n\r\n\r\n                    if (type != 'bb' && type != 'sma') {\r\n                        yAxisId = yAxis;\r\n                    }\r\n                \r\n                });\r\n             }\r\n            return yAxisId;\r\n         },\r\n        \r\n        removeIndicatorFromDDL: function(indicatorType) {            \r\n            let indicatorIndex = globesChart.indicators.indexOf(indicatorType);\r\n            if (indicatorIndex > -1) {\r\n                globesChart.indicators.splice(indicatorIndex, 1);            \r\n                $(\"#selIndicatorWraper ul li[data-value='\" + indicatorType + \"']\").removeClass('selected')\r\n            }                \r\n        },\r\n\r\n        //activate from outside :highChart_graph_comparison_search.js\r\n        removeInstrumentFromOutside: function (instId) {\r\n            this.removeInstrumentFromSymbols(instId);            \r\n            this.removeSeriesFromChartById(instId);\r\n            this.legendBuildAll();\r\n            this.options.series = this.seriesOptions; \r\n            this.updateState({\r\n                symbols: this.symbols,\r\n            });\r\n        },\r\n\r\n        removeInstrumentFromOutsideTable: function (instId) {\r\n            let $outsideChkbox = $(\"#tblIndexInstruments tr td.tdInstrumentData[data-id='\" + instId + \"']\")\r\n            if ($outsideChkbox.length > 0) {\r\n                $outsideChkbox.find( \"input:checked\" ).prop('checked', false);\r\n            }\r\n        },\r\n\r\n        rangeSelectorIndexGet: function(session){\r\n            let range = '';\r\n            if (session && session.rangeSelector) {\r\n                range = session.rangeSelector.selected;\r\n            }else {\r\n                if (this.rangeSelector != undefined )\r\n                    range = this.rangeSelector.selected;\r\n                else\r\n                    range = this.defRangeSelector;\r\n            }\r\n\r\n            return range;\r\n        },\r\n\r\n        rangeSelectorGetAll: function () {\r\n            return $(\".rangeSelectorLine .customRangeSelectorButtons .rangeSelector:visible\");\r\n        },\r\n\r\n        rangeSelectorSet: function (index) {\r\n            let obj = this.rangeSelectorGetAll().eq(index)\r\n            $(obj).addClass(\"selected\")\r\n            this.rangeSelector = {\r\n                type: $(obj).attr(\"data-type\"),\r\n                count: parseInt($(obj).attr(\"data-count\")),\r\n                selected: index\r\n            }           \r\n        },\r\n\r\n        restoreSession: function (session) {\r\n\r\n          //  debugger\r\n            \r\n            let symbol = $(\"#hidGraphSymbol\").val(),\r\n                instrumentParam = this.mode.useComparisonSymbols ? comparisonSymbols : [instrumentid + '|' + feeder + '|' + symbol],                \r\n                me = this;\r\n\r\n            let graphTypeId = $(\"#hidGraphTypeId\").val();\r\n            let iGraphTypeId = typeof (graphTypeId) != undefined ? parseInt(graphTypeId) : 0;\r\n            let isIndexBasic = $(\"#indexBasic\").val() == \"2\";\r\n            if (me.arrNoDayTypes.indexOf(iGraphTypeId) > -1 || isIndexBasic)\r\n                me.disabledRangeDay();\r\n            if (typeof isDayCloseDataOnly != 'undefined' && isDayCloseDataOnly)  {\r\n                if (!me.isDayRangeDisabled) {\r\n                    me.disabledRangeDay();\r\n                }\r\n                me.disabledRangeWeek();\r\n            }\r\n\r\n\r\n\r\n            if (Mode == 'comparison') { \r\n                if (session.tab != 'compare') {\r\n                    globesChart.updateState({\r\n                        tab: 'compare',\r\n                        type: 'line',\r\n                        symbols: instrumentParam\r\n                    });\r\n\r\n                    session.tab = 'compare';\r\n                    session.type = 'line';\r\n                    session.symbols = instrumentParam;\r\n                }                \r\n            }\r\n\r\n\r\n            try {   \r\n                \r\n                me.theme = session.theme;\r\n                me.indicators = [];                   \r\n                me.indicatorsParams = [];\r\n                me.seriesOptions = [];\r\n                me.prevExtremes = session.prevExtremes;\r\n                me.selResolution = session.selResolution;\r\n                me.rangeSelector = session.rangeSelector;\r\n                me.symbols = instrumentParam;\r\n                me.initYAxis();\r\n                me.tab = session.tab;\r\n                me.defaultDownload = session.defaultDownload;\r\n                me.dataGroupingObj = session.dataGrouping\r\n\r\n                me.selectResolutionButton(me.dataGroupingObj, session.resolution);\r\n                me.setTheme(session);\r\n\r\n                //set range button\r\n                if (me.rangeSelector != undefined) {                    \r\n                    let rangeButtonIndex = parseInt(me.rangeSelector.selected);\r\n                    let $selectedRangeButton = me.rangeSelectorGetAll().eq(rangeButtonIndex);\r\n                    const selectedRangeeButtonType = $selectedRangeButton.attr('data-type');\r\n\r\n                    if (me.rangeSelector.type != selectedRangeeButtonType) {\r\n                        this.initFirstTime();\r\n                        return;\r\n                    }\r\n                    \r\n                    $selectedRangeButton.addClass('selected')\r\n                } else {\r\n                    $(\".customRangeSelectorButtons .rangeSelector[data-type='custom']\").addClass('selected');\r\n                }\r\n\r\n                me.chartType = session.type\r\n                if (session.type != 'line') {//just change the selected button\r\n                    this.changeGraphTypeButton(session.type);\r\n                } else {\r\n                    this.changeGraphTypeButton('line')\r\n                }\r\n\r\n                \r\n\r\n                let period = this.getPeriod(session),\r\n                    dataMin = session.dataMin,\r\n                    dataMax = me.rangeSelector == undefined ? session.dataMax : (new Date()).getTime(),\r\n                    axisMin = session.min,\r\n                    axisMax = me.rangeSelector == undefined ? session.max : (new Date()).getTime(),\r\n                    graphType = session.type,\r\n                    sessionInstrumentType = session.currentInstrumentType, \r\n                    sessionInstrumentTypeId = session.currentInstrumentTypeId,\r\n                    top = me.selResolution != undefined ? me.maxPoints : '',\r\n                    unit = me.selResolution != undefined ? me.selResolution.res : '',\r\n                    count = me.selResolution != undefined ? me.selResolution.count : '',\r\n                    resolutionParams = me.selResolution == undefined ? '' : (unit === 'minute' ? count : unit.substring(0, 1)),\r\n                    isCompare = me.isCompareMode(),\r\n                    firstInstrumentName = '',\r\n                    volume = [],\r\n                    yatzig = [];\r\n\r\n                if ( sessionInstrumentTypeId != iGraphTypeId) {\r\n                    session.indicators = undefined;\r\n                    session.indicatorsParams = undefined;\r\n                    session.yAxisOptions = undefined;\r\n                    session.chartHeight = '';\r\n                }\r\n\r\n\r\n                //$('.indicatorsAndCompare .indicators , .indicatorsAndCompare .indicators').removeClass('selected');\r\n                if (me.tab == 'indicators') { \r\n                    //debugger\r\n\r\n                    //if no volume and session indicators include Accumulation Distribution (AD) \r\n                    //  if (iGraphTypeId > 0 &&  me.arrNoVolumeGraph.indexOf(iGraphTypeId) > -1 &&   session.indicators != undefined &&  session.indicators.indexOf(\"ad\") > -1) {\r\n                    if (session.indicators == undefined) {\r\n                        me.chartHeight = '';\r\n                        me.initYAxis();\r\n                        me.indicators = [];\r\n                        me.indicatorsParams = [];\r\n                    } else {\r\n                        me.chartHeight = session.chartHeight;\r\n                        me.initYAxis(session)\r\n                        me.indicators = session.indicators != undefined ? session.indicators : [];\r\n                        me.indicatorsParams = session.indicatorsParams != undefined ? session.indicatorsParams : [];\r\n                        me.indicatorsParams.forEach(function (series, index) {\r\n                            series.tooltip = me.setTooltipFormater(sessionInstrumentType, true, series.type);\r\n                        });\r\n                    }\r\n                    $(\".indicatorsAndCompare .indicators\").addClass(\"selected\");\r\n\r\n                } else {\r\n                    if (me.tab == 'compare') {//compare\r\n                        let isSymbolExists = session.symbols != undefined && session.symbols.length > 0 && session.symbols[0] == instrumentParam[0];\r\n                        me.symbols = isSymbolExists ? session.symbols : instrumentParam;                          \r\n                        $(\".indicatorsAndCompare .compare\").addClass(\"selected\");\r\n                        me.chartHeight = '';\r\n                        me.initYAxis();\r\n                    }                    \r\n                }\r\n\r\n                                        \r\n                me.refreshAllData(me.dataGroupingObj, top, period, axisMin, axisMax, 'restoreSession');\r\n\r\n               \r\n            } catch (e) {\r\n                console.log(e);\r\n                me.initFirstTime();\r\n            }\r\n        },\r\n                \r\n        showMaxSymbolsAlert: function (msg) {    \r\n            \r\n            if (Mode == 'small') {\r\n                alert(msg)            \r\n            }\r\n            if (chart != undefined) {\r\n                globesChart.setDialogPosition(\"section.maxSymbolsAlert\");\r\n                $(\"section.maxSymbolsAlert .content\").html(msg);\r\n                $(\"section.maxSymbolsAlert\").show();\r\n\r\n                $(\"section.maxSymbolsAlert h2 span.close , section.maxSymbolsAlert div span.ok\").click(function (e) {\r\n                    e.stopPropagation();\r\n                    $(window).off('scroll')\r\n                    $(\"section.maxSymbolsAlert\").hide();\r\n                    $(\"#divGraphSearchBox\").hide();\r\n                    \r\n                });\r\n            }  \r\n        },\r\n    \r\n        scrollbarOptions: function(){\r\n            //if (Mode && Mode != '')\r\n            if( !this.mode.isNavigator )\r\n                return {\r\n                    enabled: true,\r\n                    height: 0,\r\n                    buttonArrowColor: 'transparent',\r\n                    margin: 0,\r\n                }\r\n            else\r\n                return {\r\n                    enabled: true,\r\n                    liveRedraw: false\r\n                }\r\n        }, \r\n\r\n        setExtremes: function (e) {\r\n            let me = this,\r\n                min = Math.floor(e.min),\r\n                max = Math.floor(e.max),           \r\n                now = new Date(),\r\n                milsecInOneDay = 1000 * 3600 * 24,\r\n                numOfDays = (max - min )/ milsecInOneDay;\r\n\r\n            if (e.trigger == 'navigator' && numOfDays < 27)\r\n                return false;\r\n            \r\n        },\r\n\r\n        setResolutionButtonColor: (unitName) => {\r\n            $(\".resolution\").removeClass(\"selected\")\r\n            if (unitName != undefined) {                \r\n                $(\".resolution.\"+ unitName).addClass(\"selected\");\r\n            }\r\n        },\r\n\r\n        setDatePickerDefault:  () => {\r\n            $.datepicker.setDefaults({\r\n                dateFormat: 'yy-mm-dd',                \r\n                onSelect: function (dateText) {                    \r\n                    globesChart.isInputClick = true;\r\n                    globesChart.isResolutionClick = false;\r\n                    globesChart.unSelectRangeButton();\r\n                    globesChart.selectRangeCustomButton();\r\n                    chart.xAxis[0].setExtremes($('#txtMinDate').datepicker(\"getDate\").getTime(), $('#txtMaxDate').datepicker(\"getDate\").getTime());\r\n                }\r\n            });\r\n\r\n        },\r\n\r\n        selectResolutionButton: (dataGroupingObj, index) => {\r\n            let res, resCount;\r\n            if (dataGroupingObj !== undefined && dataGroupingObj != '' && dataGroupingObj.units != undefined) {\r\n                res = dataGroupingObj.units[0][0],\r\n                resCount = dataGroupingObj.units[0][1][0];\r\n            }\r\n            else { //in restore session\r\n                if (!isNaN(index)) {\r\n                    let iIndex = parseInt(index),\r\n                        objRes = $(\".resolution\").eq(iIndex);\r\n                    res = $(objRes).attr('data-res');\r\n                    resCount = $(objRes).attr('data-count');\r\n                }\r\n            }\r\n            $(\".resolution[data-res='\" + res + \"'][data-count='\"+ resCount+\"']\").addClass(\"selected\");\r\n        },\r\n\r\n        selectRangeCustomButton: () => {\r\n            $(\".rangeSelector[data-type='custom']\").addClass('selected')\r\n        },\r\n\r\n        selectTool: function (obj,tool) {\r\n            \r\n            $(obj).parent().find(\"span\").removeClass(\"selected\");\r\n            $(obj).addClass(\"selected\")\r\n            $(\"#hidSelection\").val(tool)\r\n        },\r\n\r\n        \r\n        setTheme: (session) => {\r\n            if (session && session.theme == 'dark') {\r\n                Highcharts.setOptions(Highcharts.themeDark);\r\n                $(\".graphFrame\").addClass(\"dark\");\r\n\r\n            } else {\r\n                Highcharts.setOptions(Highcharts.themeLight);\r\n            }\r\n        },\r\n\r\n        setTooltipFormater: function(instrumentType, showFullName = false, chartType) {            \r\n            let title = function (series) {\r\n                if (globesChart.isCompareMode() || showFullName || chartType == 'candlestick') {\r\n                    return series.name\r\n                } else {                    \r\n                    return \"׳©׳¢׳¨\"                    \r\n                }\r\n            };\r\n            let getCompareValue = function (series) {\r\n                return series.options.baseRate != undefined ? series.options.baseRate : series.compareValue;\r\n            };\r\n            let tooltip = undefined;\r\n            switch (instrumentType) {\r\n                case 'currency':\r\n                    tooltip = {\r\n                        pointFormatter: function() {\r\n                            let seriesTitle = title(this.series);\r\n                            let compareValue = getCompareValue(this.series);\r\n                            let change = Highcharts.numberFormat(Highcharts.correctFloat(100 - (this.y / compareValue) * 100) * -1, 2, '.', ',');\r\n                            return '<span style=\"color:' + this.series.color + '\">ג—</span>' + seriesTitle + ' : <b><span class=\"tooltipNumBold\">' + Highcharts.numberFormat(this.y, 4) + '</span></b><span class=\"tooltipNum\"> (' + change + '%)</span><br/>';\r\n                        },\r\n                    };\r\n                    break;\r\n\r\n                case 'optionmaof':\r\n                case 'sma':\r\n                case 'ad':\r\n                case 'atr':\r\n                case 'rsi':\r\n                    tooltip = {\r\n                        pointFormatter: function() {\r\n                            let seriesTitle = title(this.series),\r\n                                compareValue = getCompareValue(this.series);\r\n                            let change = Highcharts.numberFormat(Highcharts.correctFloat(100 - (this.y / compareValue) * 100) * -1, 2, '.', ',');\r\n                            return '<div  class=\"tooltip\"><span style=\"color:' + this.series.color + ';\">ג—</span><span class=\"tooltipNum\">' + seriesTitle + '</span> : <span class=\"tooltipNum\">(' + change + '%) <b>' + Highcharts.numberFormat(this.y, 2) + '</b></span></div>';\r\n                        },\r\n                    };\r\n                    break;\r\n                case 'bb':\r\n                    tooltip = {\r\n                        pointFormatter: function() {\r\n                            let seriesTitle = title(this.series),\r\n                                compareValue = getCompareValue(this.series);\r\n                            let change = Highcharts.numberFormat(Highcharts.correctFloat(100 - (this.y / compareValue) * 100) * -1, 2, '.', ',');\r\n                            return '<div class=\"tooltip\"><span style=\"font-weight:bold;color:' + this.series.color + ';\">ג—</span><span class=\"tooltipNum\">' + seriesTitle + '</span> : <br/><span class=\"tooltipTitle\">׳¢׳œ׳™׳•׳Ÿ:</span><span class=\"tooltipNum\">' + Highcharts.numberFormat(this.top, 2) + '</span><br/><span class=\"tooltipTitle\">׳׳ž׳¦׳¢:</span><span class=\"tooltipNum\">' + Highcharts.numberFormat(this.middle, 2) + '</span><br/><span class=\"tooltipTitle\">׳×׳—׳×׳•׳Ÿ:</span><span class=\"tooltipNum\">' + Highcharts.numberFormat(this.bottom, 2) + '</span></div>';\r\n                        },\r\n                    };\r\n                    break;\r\n                case 'macd':\r\n                    tooltip = {\r\n                        pointFormatter: function() {\r\n                            let seriesTitle = title(this.series),\r\n                                compareValue = getCompareValue(this.series);\r\n                            let change = Highcharts.numberFormat(Highcharts.correctFloat(100 - (this.y / compareValue) * 100) * -1, 2, '.', ',');\r\n                            return '<div class=\"tooltip\"><span style=\"font-weight:bold;color:' + this.series.color + '\">ג—</span><span class=\"tooltipNum\">' + seriesTitle + '</span> : <br/><span class=\"tooltipTitle\">׳¢׳¨׳š:</span><span class=\"tooltipNum\">' + Highcharts.numberFormat(this.MACD, 2) + '</span><br/><span class=\"tooltipTitle\">׳׳™׳×׳•׳×:</span><span class=\"tooltipNum\">' + Highcharts.numberFormat(this.signal, 2) + '</span><br/><span class=\"tooltipTitle\">׳”׳¡׳˜׳•׳’׳¨׳ž׳”:</span><span class=\"tooltipNum\">' + Highcharts.numberFormat(this.y, 2) + '</span></div>';\r\n                        },\r\n                    };\r\n                    break;\r\n                default:\r\n                    if (chartType == 'candlestick') {\r\n                        tooltip = {\r\n                            pointFormatter: function() {\r\n                                let seriesTitle = title(this.series),\r\n                                    compareValue = getCompareValue(this.series);\r\n                                let change = Highcharts.numberFormat(Highcharts.correctFloat(100 - (this.close / compareValue) * 100) * -1, 2, '.', ',');\r\n                                return '<div class=\"tooltip\"><span style=\"color:' + this.series.color + ';\">ג—</span>' + seriesTitle + ': <br/><span class=\"tooltipTitle\">׳₪׳×׳™׳—׳”:</span><span class=\"tooltipNum\">' + Highcharts.numberFormat(this.open, 2, '.', ',') + '</span><br/><span class=\"tooltipTitle\">׳’׳‘׳•׳”:</span><span class=\"tooltipNum\">' + Highcharts.numberFormat(this.high, 2, '.', ',') + '</span><br/><span class=\"tooltipTitle\">׳ ׳ž׳•׳š:</span><span class=\"tooltipNum\">' + Highcharts.numberFormat(this.low, 2, '.', ',') + '</span><br/><span class=\"tooltipTitle\">׳¡׳’׳™׳¨׳”:</span><span class=\"tooltipNum\">' + Highcharts.numberFormat(this.close, 2, '.', ',') + '</span><br/><span class=\"tooltipTitle\">׳©׳™׳ ׳•׳™ %:</span><span class=\"tooltipNum\"> (' + change + '%)</span></div>';\r\n                            }\r\n                        }\r\n                    } else {\r\n                        tooltip = {\r\n                            pointFormatter: function() {\r\n                                let seriesTitle = title(this.series),\r\n                                    compareValue = getCompareValue(this.series);\r\n                                let change = Highcharts.numberFormat(Highcharts.correctFloat(100 - (this.y / compareValue) * 100) * -1, 2, '.', ',');\r\n                                return '<div class=\"tooltip\" style=\"height:17px;\"><span style=\"padding:0 0 0 5px;color:' + this.series.color + ';\">ג—</span><span class=\"tooltipNum\">' + seriesTitle + '</span> : <b><span class=\"tooltipNum\">' + Highcharts.numberFormat(this.y, 2) + '</span></b><span class=\"tooltipNum\"> (' + change + '%)</span></div>';\r\n                            },\r\n                        }\r\n                    }\r\n                    break;\r\n            }\r\n\r\n           \r\n            let tempDateTimeFormats = {\r\n                millisecond: '%A, %b %e, %H:%M',\r\n                day: '%A, %b %e, %Y',\r\n                week: '%d/%m/%Y',                   \r\n            }\r\n\r\n            if (Mode == 'articleComparison' && (typeof isDailyOverView == 'undefined' || !isDailyOverView )) {\r\n                 tempDateTimeFormats = {\r\n                    millisecond: '%A, %b %e, %H:%M',\r\n                    second: '%A, %b %e, %Y',\r\n                    day: '%d/%m/%Y, %H:%M',\r\n                    week: '%d/%m/%Y',\r\n                }\r\n            }\r\n\r\n            return tooltip = {\r\n                ...tooltip,\r\n                dateTimeLabelFormats: tempDateTimeFormats\r\n            };\r\n            \r\n\r\n        },\r\n\r\n        setOptions: function(obj){\r\n\r\n            let chartHeight = globesChart.getChartHeight(obj),\r\n                chartHeight2 = screen.height / screen.width,\r\n                chartPanning = globesChart.getPanning(),\r\n                chartNavOptions = globesChart.navigatorOptions(),\r\n                chartScrollOpt = globesChart.scrollbarOptions(),\r\n                isComppareMode = globesChart.isCompareMode(),\r\n                shareTooltip = globesChart.indicators.length == 0,\r\n                spacingBottom = 0,\r\n                marginLeft = undefined,\r\n                spacingTop = 10,\r\n                objTitle = {},\r\n                marginBottom = Mode == 'small' ? 5 : undefined,\r\n                bStyleMode = false,\r\n                isCreditsEnabled = false,\r\n                titleFontSize = this.isMobile() ? \"17px\" : \"18px\",\r\n                tooltipFamily = \"'OpenSansHebrew', sans-serif\";\r\n                \r\n\r\n            if (Mode == 'articleComparison') {\r\n                bStyleMode = true;                \r\n                isCreditsEnabled = true;\r\n                marginBottom = 11;\r\n                spacingBottom = 10;\r\n                marginLeft = 3;\r\n                spacingTop = 0;\r\n                objTitle = {\r\n                    text: graphTitle,\r\n                    useHTML: true,\r\n                    margin: 0,\r\n                    style: {\r\n                        fontSize: titleFontSize,\r\n                        fontFamily: \"'OpenSansHebrew', sans-serif\",\r\n                        fontWeight: \"bold\",\r\n                        direction: \"rtl\",\r\n                        textAlign: \"center\"\r\n                    },\r\n                }\r\n                tooltipFamily = \"'OpenSansHebrew', sans-serif\";\r\n            }\r\n\r\n            return {\r\n                chart: {\r\n                        alignTicks: false,\r\n\t\t\t\t\t\tborderWidth: 0,\r\n                        borderColor: '#e8eaeb',\r\n                        //borderWidth: 1,\r\n                        height: chartHeight,\t\t\t\t\t\t\r\n\t\t\t\t\t\trenderTo: 'container',                        \r\n                        type: 'line',                        \r\n\t\t\t\t\t\tevents: {\r\n                            load: globesChart.chartLoad,   \r\n                            render: globesChart.chartRender,\r\n                        },\r\n                        panning: chartPanning,                        \r\n                        spacingBottom: spacingBottom,                        \r\n                        spacingTop: spacingTop,\r\n                        marginBottom: marginBottom,                         \r\n                        styledMode: bStyleMode,\r\n                },\r\n                credits: {\r\n                    enabled: isCreditsEnabled,\r\n                    text: \"׳’׳œ׳•׳‘׳¡\" , \r\n                    style: {\r\n                        fontFamily: 'OpenSansHebrew, sans-serif',                                      \r\n                        fontWeight: 'normal',\r\n                        fontSize: \"12px\",\r\n                        direction: 'rtl',\r\n                    },\r\n                    position: {\r\n                        x: -32,\r\n                        y: 0,\r\n                    }\r\n                    \r\n                },                \r\n                annotationsOptions: {\r\n                    enabledButtons: false,\r\n                },        \r\n                time: {\r\n                    //useUTC: true,\r\n                    timezoneOffset: -1 * timeZoneOffset * 60\r\n                },\r\n                title: objTitle,\r\n                navigator: chartNavOptions,\r\n                navigation: {\r\n                    buttonOptions: {\r\n                        enabled: false,\r\n                    },\r\n                    series:  globesChart.navigatorSeriosData,\r\n                },\r\n                \r\n                \r\n                scrollbar: chartScrollOpt,               \r\n\r\n                legend: {\r\n                    enabled: false,                    \r\n                },                \r\n                plotOptions: {                     \r\n                    candlestick: {\r\n                        color: '#EA5641',\r\n                        upColor: '#5CAB63',\r\n                        colorIndex: 6,\r\n                        dataLabels: {\r\n                            useHTML: true,\r\n                            format: '\\u202B' +  '{point.name}',\r\n                            style: {\r\n                                fontFamily: 'tahoma',                                      \r\n                                direction:'rtl',\r\n                            },\r\n                        },\r\n                        \r\n                    },\r\n                    OHLC: {\r\n                        color: '#EA5641',\r\n                        upColor: '#5CAB63',\r\n                        dataLabels: {\r\n                            useHTML: true,\r\n                            format: '\\u202B' +  '{point.name}',\r\n                            style: {\r\n                                fontFamily: 'tahoma',                                      \r\n                                direction:'rtl',\r\n                            },\r\n                        }\r\n                    },\r\n                    line: {\r\n                        showCheckbox: false,\r\n                        dataGrouping: {\r\n                            enabled: true,\r\n                            approximation: 'close',\r\n                            dateTimeLabelFormats: this.dateTimeLabelFormats\r\n                        },\r\n                    },\r\n                    area: {\r\n                        showCheckbox: false,\r\n                        dataGrouping: {\r\n                            enabled: true,\r\n                            approximation: 'close',\r\n                            dateTimeLabelFormats: this.dateTimeLabelFormats\r\n                        },\r\n                    },\r\n                    column: {\r\n                        minPointLength: 1, \r\n                        pointPadding: 0.2,\r\n                    },\r\n                    macd: {\r\n                        zones: [{\r\n                            value: 0,\r\n                            color: 'green'\r\n                        }, {\r\n                            color: 'red'\r\n                        }]\r\n                    },\r\n                    series: this.plotOptionsSeries\r\n                },\r\n\r\n                tooltip: {\r\n                    //pointFormat: pointFormatOption,\r\n                    valueDecimals: 2,\r\n                    useHTML: true,\r\n                    style: {\r\n                        fontSize: '12px',\r\n                        fontFamily: tooltipFamily,\r\n                        direction: 'rtl',\r\n                        textAlign:'right'\r\n                    },\r\n                    shared: shareTooltip,\r\n                    split: !shareTooltip,                     \r\n                    useHTML: true,\r\n                    padding: 10,\r\n                },\r\n\r\n                rangeSelector: {                    \r\n                     inputEnabled: false,\r\n                     allButtonsEnabled: false,\r\n                },\r\n\r\n                xAxis: {\r\n                    ordinal: true,\r\n                    events: {\r\n                        afterSetExtremes: globesChart.afterSetExtremes,\r\n                        setExtremes: globesChart.setExtremes,\r\n                    },\r\n                    lineWidth: 1,\r\n                    minRange: 3600 * 1000 , // one hour\r\n                    crosshair: {\r\n                        snap: false,\r\n                        dashStyle: 'Dash',\r\n                        width: 1,                        \r\n                    },                    \r\n                    labels: {\r\n                        // step:1,\r\n                        //overflow: false,\r\n                        // padding: 10,\r\n                       // useHTML: true,\r\n                         autoRotation: [-10, -20, -30, -40, -50, -60, -70, -80, -90]\r\n                    },\r\n                    startOnTick: false,\r\n                    tickAmount: 8,\r\n                    \r\n\r\n                },\r\n\r\n                yAxis: this.yAxisOptions,\r\n\r\n                series: this.seriesOptions,\r\n\r\n                exporting: {\r\n                    \r\n                    //url: 'http://export.highcharts.com/index-utf8-encode.php',                  \r\n                    allowHTML: true, \r\n                \r\n                    chartOptions: {\r\n                        chart: {\r\n                            width: 888,\r\n                            height: 500,\r\n                            events: {\r\n                                load: function () {\r\n                                    let objPos = globesChart.creditPosition(this);\r\n                                    let img = this.renderer.image(\"https://images.globes.co.il/images/portal/graphs/globes.svg\", objPos.x , objPos.y , objPos.width, objPos.height)\r\n                                    img.add();                                   \r\n                                },\r\n                            }\r\n                        },\r\n                        legend: {\r\n                            enabled: true,\r\n                            useHTML: true,\r\n                            rtl: true,\r\n                            align: 'center',\r\n                            verticalAlign: 'top',\r\n                            style: {\r\n                                fontFamily: 'tahoma',\r\n                                direction: 'rtl'\r\n\r\n                            },\r\n                            floating: true,\r\n                            y: 0,\r\n                            spacingTop: 0,\r\n                            itemMarginTop: 0,\r\n                            itemMarginBottom: 0,\r\n                            margin: 1,\r\n                            //borderColor: globesChart.backgroundColor,\r\n                            symbolRadius: 6,\r\n                            symbolWidth: 10,\r\n                            itemCheckboxStyle: {\r\n                                height: '13px',\r\n                                position: 'absolute',\r\n                                width: '13px'\r\n                            },\r\n                        },\r\n                        xAxis: {\r\n                            labels: {                                                         \r\n                                useHTML: true,\r\n                            },\r\n                        },\r\n                        rangeSelector: {\r\n                            enabled: false,\r\n                            inputEnabled: true,\r\n                        },\r\n                        navigator: {\r\n                            enabled: true\r\n                        },\r\n                        scrollbar: {\r\n                            enabled: false,\r\n                        },\r\n                    }\r\n                }\r\n            }\r\n           \r\n        },\r\n\r\n        setDialogPosition: function (obj) {\r\n            let formHeight = $(obj).height(),\r\n                windowHeight = $(window).height(),\r\n                scrollTop = $(window).scrollTop(),\r\n                mid = scrollTop + Math.floor(windowHeight / 2); //- Math.floor(formHeight / 2);\r\n\r\n            $(obj).css('top', mid + 'px').show();\r\n\r\n            $(window).scroll(function (e) {\r\n                let scrollTop = $(window).scrollTop(),\r\n                    mid = scrollTop + Math.floor(windowHeight / 2); //- Math.floor(formHeight / 2);\r\n                    $(obj).css('top', mid + 'px')\r\n            });\r\n                    \r\n        },\r\n\r\n        //activate from outside :highChart_graph_comparison_search.js\r\n        setMaxSymbols: function (n) {\r\n            let num = !isNaN(n) ? parseInt(n) : null;\r\n            if (num > 0)\r\n                this.maxSymbols = num;\r\n        },\r\n\r\n\r\n        unselectCompareButton: function (isToCloseAll) {\r\n            if (isToCloseAll || this.symbols.length == 1)\r\n                $(\".indicatorsAndCompare .compare\").removeClass(\"selected\");\r\n            if (typeof searcher != 'undefined') {\r\n                searcher.cleanAndCloseHelpDiv();\r\n            }\r\n            $(\"#divGraphSearchBox\").hide();\r\n        },\r\n\r\n        unselectIndicatorsButton: function (isToCloseAll) {\r\n            if (isToCloseAll || this.indicatorsParams.length == 0)\r\n                $(\".indicatorsAndCompare .indicators\").removeClass(\"selected\");\r\n            if (chart != undefined && this.indicatorsParams.length == 0) {\r\n                chart.update({\r\n                    tooltip: {\r\n                        share: true,\r\n                        split: false\r\n                    }\r\n                })\r\n            }\r\n          \r\n            $(\"#selIndicatorWraper\").hide();\r\n        },\r\n\r\n        unSelectRangeButton: function(){\r\n            this.rangeSelectorGetAll().removeClass('selected')            \r\n        },\r\n\r\n        unSelectResolutionButton: () => {\r\n            $(\".resolutionGroup .resolution\").removeClass('selected')\r\n        },\r\n\r\n\r\n        updateInputs : (min, max) => {\r\n            $(\"#txtMinDate\").val(globesChart.timeToDate(min))\r\n            $(\"#txtMaxDate\").val(globesChart.timeToDate(max))\r\n        },\r\n                \r\n        updateState: function (obj) {\r\n            if( this.mode.saveState )\r\n                this.localSessionSetValue('state', obj);\r\n        },       \r\n\r\n        unSelectTools: () => {\r\n            $(\"section.tools span\").removeClass('selected');\r\n             $(\"#hidSelection\").val('')\r\n        },\r\n\r\n        yAxis_add_new: function (name, id) {\r\n            \r\n            let firstSmallYAxis = chart.yAxis.find((item, index) => { return index > 1 && item.userOptions.id != \"navigator-y-axis\" && item.userOptions.visible != false });\r\n\r\n\r\n            let me = this,\r\n                      plotHeight = chart.plotHeight,\r\n                       mainAxis = chart.get('valueGraph'),\r\n                       smallAxis = firstSmallYAxis, // chart.get('volumeGraph'),\r\n                       mainYAxisHeight = mainAxis.height,\r\n                       mainYAxisTop = mainAxis.top,\r\n                       smallHeight = smallAxis === undefined ? me.defaultSmallChartHeightPercent * plotHeight : smallAxis.height,\r\n                       smallTop = smallAxis === undefined ? me.defaultSmallChartTopPercent * plotHeight : smallAxis.top,\r\n                       distanceHeight = smallTop - mainYAxisHeight - mainYAxisTop,\r\n\r\n                       extraHeight = smallHeight + distanceHeight,\r\n                       newChartHeight = chart.chartHeight + extraHeight,\r\n                       newChartHeightPercent = (newChartHeight / chart.chartWidth * 100),\r\n                       newPlotHeight = (chart.plotHeight + extraHeight),\r\n\r\n                       newDistanseHeightPercent = (distanceHeight / newPlotHeight * 100),\r\n                       newSmallHeightPercent = (smallHeight / newPlotHeight * 100);\r\n\r\n\r\n                       let y_axis_id = name + chart.yAxis.length;\r\n                       let yAxis = {\r\n                            id: y_axis_id,\r\n                            title: {\r\n                                text: name\r\n                            },\r\n                            opposite: false,\r\n                            top:  (100 - newSmallHeightPercent ) + '%',\r\n                            height: newSmallHeightPercent + '%',\r\n                            offset: 1,\r\n                            \r\n                            endOnTick: true,\r\n                            showLastLabel: true,  \r\n                            crosshair: {\r\n                                snap: false,\r\n                                dashStyle: 'Dash',\r\n                                width: 1,                                \r\n                            },\r\n                            tickPixelInterval: 10,\r\n                            tickLength: 4,\r\n                            tickPosition: 'inside',\r\n                            labels: {\r\n                                formatter: function() {\r\n                                    var ret,\r\n                                        numericSymbols = ['k', 'M', 'G', 'T', 'P', 'E'],\r\n                                        i = 6;\r\n                                    if(this.value >=1000) {\r\n                                        while (i-- && ret === undefined) {\r\n                                            multi = Math.pow(1000, i + 1);\r\n                                            if (this.value >= multi && numericSymbols[i] !== null) {\r\n                                                ret = (this.value / multi) + numericSymbols[i];\r\n                                            }\r\n                                        }\r\n                                    }\r\n                                    return  (ret ? ret : this.value);\r\n                                }\r\n                            },\r\n                        }\r\n                        chart.addAxis(yAxis, false, false, true);\r\n                        this.yAxisOptions.push(yAxis); ////tracking the yAxis\r\n\r\n                this.yAxis_refresh(newPlotHeight, newDistanseHeightPercent, newSmallHeightPercent, newChartHeightPercent);\r\n                return y_axis_id;\r\n\r\n        },\r\n        \r\n        yAxis_remove: function (yAxisId) {\r\n                let firstSmallYAxis = chart.yAxis.find((item, index) => { return index > 1 && item.userOptions.id != \"navigator-y-axis\" && item.userOptions.visible != false });\r\n                let plotHeight = chart.plotHeight,\r\n                       mainAxis = chart.get('valueGraph'),\r\n                       smallAxis = firstSmallYAxis, //chart.get('volumeGraph'),\r\n                       mainYAxisHeight = mainAxis.height,\r\n                       mainYAxisTop = mainAxis.top,\r\n                       smallHeight = smallAxis.height,\r\n                       smallTop =  smallAxis.top,\r\n                       distanceHeight = smallTop - mainYAxisHeight - mainYAxisTop,\r\n                   \r\n\r\n                       removedHeight = smallHeight + distanceHeight,\r\n                       newChartHeight = chart.chartHeight - removedHeight,\r\n                       newChartHeightPercent = (newChartHeight / chart.chartWidth * 100),\r\n                       newPlotHeight = (chart.plotHeight - removedHeight),\r\n\r\n                       newDistanseHeightPercent = (distanceHeight / newPlotHeight * 100),\r\n                       newSmallHeightPercent = (smallHeight / newPlotHeight * 100);\r\n\r\n                chart.get(yAxisId).remove();\r\n\r\n                //tracking the yAxis\r\n                let yAxisIndex = this.yAxisOptions.findIndex((obj) => { return obj.id == yAxisId });\r\n                if (yAxisIndex > -1) {\r\n                    this.yAxisOptions.splice(yAxisIndex, 1);\r\n                }\r\n\r\n                this.yAxis_refresh(newPlotHeight, newDistanseHeightPercent, newSmallHeightPercent, newChartHeightPercent);\r\n               \r\n        },\r\n        \r\n        yAxis_refresh: function (newPlotHeight, newDistanceHeightPercent, newSmallHeightPercent, newChartHeightPercent) {\r\n            \r\n            let arrHP = [],\r\n                smallGraphCounter = 0;\r\n\r\n            chart.yAxis.forEach(function (item, index) {\r\n                let itemId = item.userOptions.id;\r\n\r\n                if (itemId != 'navigator-y-axis' && item.visible != false) {\r\n                    let height = item.height,\r\n                            heightPercent = height / newPlotHeight * 100,\r\n                            isMainAxis = itemId == 'valueGraph' || itemId == 'compare';  \r\n\r\n                    arrHP.push(heightPercent);\r\n\r\n                    if (isMainAxis) {\r\n                        item.update({\r\n                            height: heightPercent + '%',\r\n                        });\r\n\r\n                        let arrYItem = globesChart.yAxisOptions.find((y)=> { return y.id == itemId});\r\n                        if(arrYItem != undefined){\r\n                        \tarrYItem.height = heightPercent + '%'\r\n                        }\r\n\r\n                    } else {\r\n                       \r\n                        smallGraphCounter++;\r\n                        let totalDistanceHeightPresent = newDistanceHeightPercent * smallGraphCounter;\r\n                        let sumPrevAxisHeight = arrHP.reduce(\r\n                            (accumulator, currentValue, currentIndex, array) => {\r\n                                return (currentIndex == array.length - 1 || currentIndex == 1) ? accumulator : accumulator + currentValue;\r\n                            });\r\n                        let top = totalDistanceHeightPresent + sumPrevAxisHeight;\r\n\r\n                        item.update({\r\n                            height: newSmallHeightPercent + '%',\r\n                            top: top + '%'\r\n                        });\r\n\r\n                        let arrYItem = globesChart.yAxisOptions.find((y) => { return y.id == itemId });\r\n                        if (arrYItem != undefined) {\r\n                            arrYItem.height = newSmallHeightPercent + '%'\r\n                            arrYItem.top = top + '%'\r\n                        }\r\n                        \r\n                    }\r\n                }\r\n            });\r\n\r\n            chart.setSize(undefined, newChartHeightPercent + '%');\r\n            this.chartHeight = newChartHeightPercent + '%';\r\n            chart.render()\r\n\r\n        },\r\n\r\n        \r\n}\r\n\r\n\r\n$(function () {\r\n\r\n    if (typeof window.globesChart == 'undefined')\r\n        window.globesChart = globesChart;\r\n\r\n    if (typeof searcher != 'undefined') {\r\n        searcher.init(globesChart);\r\n\r\n        window.onresize = searcher.hideGraphHelpDiv;\r\n        let formName = fName != undefined ? fName : 'aspnetForm';\r\n        document.getElementById(formName).onsubmit = searcher.getGraphEnter;\r\n        if (Mode != 'comparison') {\r\n            $(\"#query_for_graph\").blur(function() { searcher.OnBlurGraphText() });\r\n            $(\"#query_for_graph\").click(function() { searcher.hideGraphHelpDiv() });\r\n            $(\"#query_for_graph\").keypress(function(event) { searcher.getGraphEnter(event) });\r\n            $(\"#query_for_graph\").keyup(function(event) { searcher.UpdateSymboles(globesChart.symbols); searcher.onGraphSearchKeyUp(event) });\r\n        }\r\n    }\r\n\r\n    globesChart.buildIndicatoresArray();\r\n\r\n    $(\".graphFrame\").click(function() {\r\n        if (typeof searcher != 'undefined') {\r\n            globesChart.unselectCompareButton()\r\n        }\r\n        globesChart.unselectIndicatorsButton();\r\n\r\n    });\r\n\r\n    $(\".indicatorsAndCompare .indicators\").click(function (e) {\r\n        e.stopPropagation()\r\n        if (typeof searcher != 'undefined') {\r\n            globesChart.unselectCompareButton(true);\r\n        }\r\n        $(this).addClass(\"selected\");\r\n\r\n        if (chart) {           \r\n            let seriesLength = chart.series.filter((item) => item.options.id != 'volume' && item.options.id != 'highcharts-navigator-series').length;\r\n            let graphTypeId = $(\"#hidGraphTypeId\").val();\r\n            let iGraphTypeId = typeof (graphTypeId) != undefined ? parseInt(graphTypeId) : 0;\r\n            if (globesChart.arrNoVolumeGraph.indexOf(iGraphTypeId) > -1) {\r\n                $(\"#selIndicatorWraper ul li[data-value='ad']\").hide();\r\n            } else {\r\n                $(\"#selIndicatorWraper ul li[data-value='ad']\").show();\r\n            }\r\n\r\n            $(\"#selIndicatorWraper\").toggle()               \r\n        }\r\n\r\n        if (globesChart.tab != 'indicators') { //return to prev indicators\r\n            globesChart.updateState({\r\n                tab: 'indicators',\r\n                type: 'candlestick'\r\n            });\r\n            let session = globesChart.localSessionRead();\r\n            globesChart.restoreSession(session);\r\n        }\r\n\r\n         \r\n    });\r\n\r\n    $(\".indicatorsAndCompare .compare\").click(function (e) {\r\n        e.stopPropagation()\r\n\r\n        globesChart.unselectIndicatorsButton(true);\r\n\r\n        if (chart) {\r\n            let seriesLength = chart.series.filter((item) => item.options.id != 'volume' && item.options.id != 'highcharts-navigator-series').length;\r\n                $(this).addClass(\"selected\")\r\n                $(\"#divGraphSearchBox\").show();\r\n                $(\"#query_for_graph\").focus();                \r\n        };\r\n\r\n        if (Mode == '' && globesChart.tab != 'compare') { //return to prev compare \r\n            globesChart.updateState({\r\n                tab: 'compare',\r\n                type: 'line'\r\n            });\r\n            let session = globesChart.localSessionRead();\r\n            globesChart.restoreSession(session);\r\n        }\r\n            \r\n    });\r\n    $(\".indicatorsAndCompare .general\").click(function (e) {\r\n        e.stopPropagation();\r\n        globesChart.updateState({\r\n            tab: 'general'\r\n        });\r\n    });\r\n\r\n    //graph type\r\n    $(\".graphType .lineGraph\").click(function (e) {\r\n        e.stopPropagation();\r\n        globesChart.changeGraphTypeClick('line');\r\n        \r\n    });\r\n    $(\".graphType .candleGraph\").click(function (e) {\r\n        e.stopPropagation();\r\n        globesChart.changeGraphTypeClick('candlestick');\r\n        \r\n    });\r\n\r\n    //buttons\r\n\r\n    //download\r\n    $(\"#iconDownload\").click(function (e) {\r\n        e.stopPropagation()  \r\n        \r\n        if (Mode == 'small') {\r\n            searcher.toExcel(instrumentid, feeder)\r\n            return;\r\n        }\r\n        if (chart != undefined) {\r\n            globesChart.setDialogPosition(\"section.downloadDialog\");\r\n            $(\"section.downloadDialog\").show();\r\n        }        \r\n    });\r\n    $(\"section.downloadDialog h2 span.close\").click(function (e) {\r\n        e.stopPropagation();\r\n        $(window).off('scroll')\r\n        $(\"section.downloadDialog\").hide();\r\n    });\r\n    $(\"section.downloadDialog ul li\").click(function (e) {        \r\n        $(this).parent().find('li').removeClass('selected');\r\n        $(this).addClass('selected');\r\n    });\r\n    $(\"section.downloadDialog div span.button\").click(function (e) {        \r\n        if ($(this).hasClass('ok')) {\r\n            globesChart.defaultDownload = $(\"section.downloadDialog ul li.selected\").attr('data-id');\r\n            globesChart.updateState({\r\n                defaultDownload: globesChart.defaultDownload\r\n            })\r\n\r\n            if (globesChart.defaultDownload == 'img') {\r\n                if (chart)\r\n                    chart.exportChart();\r\n            } else {\r\n                searcher.toExcel(instrumentid, feeder)\r\n            }\r\n        }   \r\n        //} else {\r\n            $(\"section.downloadDialog h2 span.close\").click();\r\n       // }\r\n    });\r\n    //--end download\r\n    \r\n    $(\"#iconFull\").click(function (e) {\r\n            e.stopPropagation()\r\n            globesChart.iconFullToggle();           \r\n        });\r\n    $(\"#iconLight\").click(function (e) {\r\n            e.stopPropagation();  \r\n            globesChart.changeTheme();\r\n            if (Mode == 'comparison') {\r\n                try {\r\n                    searcher.changeTheme()\r\n                } catch (e) { }\r\n            }\r\n                      \r\n    });\r\n    $(\"#iconReset\").click(function (e) {\r\n        e.stopPropagation(); \r\n        globesChart.localSessionClear();\r\n        globesChart.initFirstTime();\r\n\r\n        if (Mode == 'comparison') {\r\n            try {\r\n                searcher.reset()\r\n            } catch (e) { }\r\n        }\r\n    });\r\n    \r\n\r\n        //range Selector\r\n        $(\".rangeSelectorLine .customRangeSelectorButtons .rangeSelector\").click(function (e) {\r\n            e.stopPropagation();  \r\n            globesChart.isInputClick = false;\r\n            globesChart.isResolutionClick = false;\r\n            globesChart.isRangeSelectorClick = true;            \r\n\r\n            let sType = $(this).attr(\"data-type\"),\r\n                sCount =  parseInt($(this).attr(\"data-count\")),\r\n                index = globesChart.rangeSelectorGetAll().index($(this));\r\n\r\n            if (sType != 'custom') {\r\n                globesChart.selResolution = undefined;\r\n                $(\".resolution\").removeClass(\"selected\")\r\n            }\r\n            \r\n            $(this).parent().children().removeClass('selected')\r\n            $(this).addClass('selected')\r\n                        \r\n            globesChart.rangeSelector = {\r\n                type: sType,\r\n                count: parseInt(sCount),\r\n                selected: index,\r\n            }\r\n            if (sType == 'custom')\r\n                return;\r\n\r\n            if (chart == undefined)\r\n                return;\r\n\r\n            globesChart.afterRangeSelectorClick(e);\r\n\r\n            if (Mode == 'comparison') {\r\n                try {\r\n                    searcher.changeRangeSelection(index)\r\n                } catch (e) { }\r\n            }\r\n              \r\n        });\r\n        \r\n        //resolutions\r\n        $(\".resolutionGroup .resolution\").click(function (e) {\r\n            e.stopPropagation();  \r\n            $(\".resolution\").removeClass(\"selected\")\r\n            $(this).addClass(\"selected\");\r\n            \r\n            globesChart.isResolutionClick = true;\r\n            globesChart.isInputClick = false;\r\n            globesChart.isRangeSelectorClick = false;\r\n            \r\n\r\n            let res = $(this).attr(\"data-res\")\r\n            let count = $(this).attr(\"data-count\")\r\n           // let count = res == 'minute' ? globesChart.minutes : 1;\r\n            globesChart.selResolution = {\r\n                res: res,\r\n                count: count\r\n            };\r\n\r\n            globesChart.handleChangeResolution(res, count, this, true)\r\n        });    \r\n\r\n        //tools\r\n        $(\"section.tools span\").click(function () {\r\n            let action = $(this).attr(\"data-action\");\r\n            $(this).parent().find(\"span\").removeClass(\"selected\");\r\n            $(this).addClass(\"selected\")\r\n            $(\"#hidSelection\").val(action);\r\n        }); \r\n \r\n       \r\n\r\n        $(\"#btnDelete\").click(function () {\r\n            $(this).parent().find(\"span\").removeClass(\"selected\");\r\n            $(this).addClass(\"selected\")\r\n            //$(\"input[type='radio']:checked\").prop(\"checked\", false);\r\n            $(\"#hidSelection\").val('delete')\r\n            if (chart != undefined) {\r\n                let annotations = chart.annotations,\r\n                    annotaion;\r\n\r\n                if (annotations.allItems) {\r\n                    for (let i = annotations.allItems.length - 1; i >= 0; i--) {\r\n                        annotations.allItems[i].destroy();\r\n                    }\r\n                }\r\n                   \r\n            }\r\n        });\r\n   \r\n        Highcharts.setOptions({\r\n            lang: {\r\n                thousandsSep: ',',\r\n                months: [\"׳™׳ ׳•׳׳¨\", \"׳₪׳‘׳¨׳•׳׳¨\", \"׳ž׳¨׳¥\", \"׳׳₪׳¨׳™׳œ\", \"׳ž׳׳™\", \"׳™׳•׳ ׳™\", \"׳™׳•׳œ׳™\", \"׳׳•׳’׳•׳¡׳˜\", \"׳¡׳₪׳˜׳ž׳‘׳¨\", \"׳׳•׳§׳˜׳•׳‘׳¨\", \"׳ ׳•׳‘׳ž׳‘׳¨\", \"׳“׳¦׳ž׳‘׳¨\"],\r\n                shortMonths:  [\"׳™׳ ׳•\", \"׳₪׳‘׳¨\", \"׳ž׳¨׳¥\", \"׳׳₪׳¨\", \"׳ž׳׳™\", \"׳™׳•׳ ׳™\", \"׳™׳•׳œ׳™\", \"׳׳•׳’\", \"׳¡׳₪׳˜\", \"׳׳•׳§\", \"׳ ׳•׳‘\", \"׳“׳¦׳ž\"],// [\"׳™׳ ׳•\", \"׳₪׳‘׳¨\", \"׳ž׳¨׳¥\", \"׳׳₪׳¨\", \"׳ž׳׳™\", \"׳™׳•׳ ׳™\", \"׳™׳•׳œ׳™\", \"׳׳•׳’\", \"׳¡׳₪׳˜\", \"׳׳•׳§\", \"׳ ׳•׳‘\", \"׳“׳¦׳ž\"],\r\n                weekdays: [\"׳¨׳׳©׳•׳Ÿ\", \"׳©׳ ׳™\", \"׳©׳œ׳™׳©׳™\", \"׳¨׳‘׳™׳¢׳™\", \"׳—׳ž׳™׳©׳™\", \"׳©׳™׳©׳™\", \"׳©׳‘׳×\"],\r\n                noData: '׳׳™׳Ÿ ׳ž׳™׳“׳¢ ׳œ׳”׳¦׳’׳”',\r\n                loading: '׳˜׳•׳¢׳Ÿ ׳ž׳™׳“׳¢...',\r\n            }\r\n        });\r\n\r\n        \r\n\r\n        if (Mode == '') {\r\n            (function (H) {\r\n                //fix macd bug- can't remove graph when there are not enough points\r\n                H.seriesTypes.macd.prototype.destroy = function () {\r\n                    // this.graph is null due to removing two times the same SVG element\r\n                    this.graph = null;\r\n                    this.graphmacd = this.graphmacd && this.graphmacd.destroy();\r\n                    this.graphsignal = this.graphsignal && this.graphsignal.destroy();\r\n\r\n                    H.seriesTypes.sma.prototype.destroy.apply(this, arguments);\r\n                };\r\n            })(Highcharts);\r\n\r\n            (function (H) {\r\n                //fix macd not enough point - \r\n                H.wrap(H.seriesTypes.macd.prototype, 'getValues', function (proceed, series, params) {\r\n                    if (series.xData.length < params.longPeriod + params.signalPeriod) {\r\n                        return false;\r\n                    } else {\r\n                        return proceed.apply(this, Array.prototype.slice.call(arguments, 1));\r\n                    }\r\n                });\r\n            })(Highcharts);\r\n\r\n            (function (H) {\r\n\r\n                if (H.seriesTypes.bb == undefined)\r\n                    return;\r\n\r\n                //set BB fill area attribute\r\n                H.wrap(H.seriesTypes.bb.prototype, 'drawGraph', function (proceed) {\r\n                    // Draw lines:\r\n                    let bb = this,\r\n                      newPathPart;\r\n\r\n                    // proceed - run original\r\n                    proceed.apply(this, [].slice.call(arguments, 1));\r\n\r\n                    if (bb.options.fillColor) {\r\n                        // custom - modify\r\n                        newPathPart = (bb.gappedPath || bb.getGraphPath).call(bb); // get final path\r\n                        newPathPart = newPathPart.join(' ').split(' ');\r\n                        newPathPart[0] = 'L';\r\n                        newPathPart.push('Z');\r\n\r\n                        if (bb.graphtopLine) {\r\n                            bb.graphtopLine.attr({\r\n                                d: bb.graphtopLine.d + newPathPart.join(' '),\r\n                                fill: bb.options.fillColor\r\n                            });\r\n                        }\r\n\r\n                        if (bb.graphbottomLine) {\r\n                            bb.graphbottomLine.attr({\r\n                                d: bb.graphbottomLine.d + newPathPart.join(' '),\r\n                                fill: bb.options.fillColor\r\n                            });\r\n                        }\r\n                    }\r\n                    \r\n\r\n                });\r\n            })(Highcharts);\r\n        }\r\n        if (Mode == 'articleComparison') {\r\n            \r\n            Highcharts.Axis.prototype.getSlotWidth = function() {\r\n\t            // Utility functions\r\n                let each = Highcharts.each,\r\n    \t            isNumber = Highcharts.isNumber;\r\n        \r\n                let slotWidth,\r\n    \t            lastPxPos;\r\n                each(this.tickPositions.slice(0, 5), function(pos) {\r\n                    let pxPos\r\n                    if (isNumber(pos)) {\r\n                        pxPos = this.toPixels(pos);\r\n\r\n                        if (isNumber(lastPxPos)) {\r\n                            slotWidth = Math.max(slotWidth || 0, Math.abs(pxPos - lastPxPos));\r\n                        }\r\n                        lastPxPos = pxPos;\r\n                    }\r\n                }, this);\r\n    \r\n                return slotWidth - 10;\r\n            }\r\n        }\r\n\r\n   \r\n\r\n        //first draw according to session storage. if it's the first time or moving to wide/small screen\r\n        let session = globesChart.localSessionRead(); //get state\r\n       // globesChart.localSessionClear(); \r\n\r\n        if (session && globesChart.mode.saveState) {\r\n            globesChart.restoreSession(session);           \r\n        } else {            \r\n            globesChart.initFirstTime();\r\n        }\r\n\r\n        if (Mode == '') {\r\n            setTimeout(globesChart.setDatePickerDefault, 10);\r\n        }\r\n\r\n        try {\r\n        if (g) { g.StopPageReload = true; }\r\n    } catch (e) { }\r\n\r\n        \r\n});"],"sourceRoot":""}