{"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(\"'\", \"'\");\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\"> </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\"> </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 : \" \";\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":""}