%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/components/bitrix/catalog.product.subscribe/templates/.default/ |
| Current File : //home/bitrix/www/bitrix/components/bitrix/catalog.product.subscribe/templates/.default/script.js |
(function (window) {
if (!!window.JCCatalogProductSubscribe)
{
return;
}
var subscribeButton = function(params)
{
subscribeButton.superclass.constructor.apply(this, arguments);
this.nameNode = BX.create('span', {
props : { id : this.id },
style: typeof(params.style) === 'object' ? params.style : {},
text: params.text
});
this.buttonNode = BX.create('span', {
attrs: { className: params.className },
style: { marginBottom: '0', borderBottom: '0 none transparent' },
children: [this.nameNode],
events : this.contextEvents
});
if (BX.browser.IsIE())
{
this.buttonNode.setAttribute("hideFocus", "hidefocus");
}
};
BX.extend(subscribeButton, BX.PopupWindowButton);
window.JCCatalogProductSubscribe = function(params)
{
this.buttonId = params.buttonId;
this.buttonClass = params.buttonClass;
this.jsObject = params.jsObject;
this.ajaxUrl = '/bitrix/components/bitrix/catalog.product.subscribe/ajax.php';
this.alreadySubscribed = params.alreadySubscribed;
this.urlListSubscriptions = params.urlListSubscriptions;
this.listOldItemId = {};
this.elemButtonSubscribe = null;
this.elemPopupWin = null;
this.defaultButtonClass = 'bx-catalog-subscribe-button';
this._elemButtonSubscribeClickHandler = BX.delegate(this.subscribe, this);
this._elemHiddenClickHandler = BX.delegate(this.checkSubscribe, this);
BX.ready(BX.delegate(this.init,this));
};
window.JCCatalogProductSubscribe.prototype.init = function()
{
if (!!this.buttonId)
{
this.elemButtonSubscribe = BX(this.buttonId);
this.elemHiddenSubscribe = BX(this.buttonId+'_hidden');
}
if (!!this.elemButtonSubscribe)
{
BX.bind(this.elemButtonSubscribe, 'click', this._elemButtonSubscribeClickHandler);
}
if (!!this.elemHiddenSubscribe)
{
BX.bind(this.elemHiddenSubscribe, 'click', this._elemHiddenClickHandler);
}
this.setButton(this.alreadySubscribed);
};
window.JCCatalogProductSubscribe.prototype.checkSubscribe = function()
{
if(!this.elemHiddenSubscribe || !this.elemButtonSubscribe) return;
if(this.listOldItemId.hasOwnProperty(this.elemButtonSubscribe.dataset.item))
{
this.setButton(true);
}
else
{
BX.ajax({
method: 'POST',
dataType: 'json',
url: this.ajaxUrl,
data: {
sessid: BX.bitrix_sessid(),
checkSubscribe: 'Y',
itemId: this.elemButtonSubscribe.dataset.item
},
onsuccess: BX.delegate(function (result) {
if(result.subscribe)
{
this.setButton(true);
this.listOldItemId[this.elemButtonSubscribe.dataset.item] = true;
}
else
{
this.setButton(false);
}
}, this)
});
}
};
window.JCCatalogProductSubscribe.prototype.subscribe = function()
{
this.elemButtonSubscribe = BX.proxy_context;
if(!this.elemButtonSubscribe) return false;
BX.ajax({
method: 'POST',
dataType: 'json',
url: this.ajaxUrl,
data: {
sessid: BX.bitrix_sessid(),
subscribe: 'Y',
itemId: this.elemButtonSubscribe.dataset.item,
siteId: BX.message('SITE_ID')
},
onsuccess: BX.delegate(function (result) {
if(result.success)
{
this.createSuccessPopup(result);
this.setButton(true);
this.listOldItemId[this.elemButtonSubscribe.dataset.item] = true;
}
else if(result.contactFormSubmit)
{
this.initPopupWindow();
this.elemPopupWin.setTitleBar(BX.message('CPST_SUBSCRIBE_POPUP_TITLE'));
var form = this.createContentForPopup(result);
this.elemPopupWin.setContent(form);
this.elemPopupWin.setButtons([
new subscribeButton({
text: BX.message('CPST_SUBSCRIBE_BUTTON_NAME'),
className : 'btn btn-primary',
events: {
click : BX.delegate(function() {
if(!this.validateContactField(result.contactTypeData))
{
return false;
}
BX.ajax.submitAjax(form, {
method : 'POST',
url: this.ajaxUrl,
processData : true,
onsuccess: BX.delegate(function (resultForm) {
resultForm = BX.parseJSON(resultForm, {});
if(resultForm.success)
{
this.createSuccessPopup(resultForm);
this.setButton(true);
this.listOldItemId[this.elemButtonSubscribe.dataset.item] = true;
}
else if(resultForm.error)
{
if(resultForm.hasOwnProperty('setButton'))
{
this.listOldItemId[this.elemButtonSubscribe.dataset.item] = true;
this.setButton(true);
}
var errorMessage = resultForm.message;
if(resultForm.hasOwnProperty('typeName'))
{
errorMessage = resultForm.message.replace('USER_CONTACT',
resultForm.typeName);
}
BX('bx-catalog-subscribe-form-notify').style.color = 'red';
BX('bx-catalog-subscribe-form-notify').innerHTML = errorMessage;
}
}, this)
});
}, this)
}
}),
new subscribeButton({
text : BX.message('CPST_SUBSCRIBE_BUTTON_CLOSE'),
className : 'btn',
events : {
click : BX.delegate(function() {
this.elemPopupWin.destroy();
}, this)
}
})
]);
this.elemPopupWin.show();
}
else if(result.error)
{
if(result.hasOwnProperty('setButton'))
{
this.listOldItemId[this.elemButtonSubscribe.dataset.item] = true;
this.setButton(true);
}
this.showWindowWithAnswer({status: 'error', message: result.message});
}
}, this)
});
};
window.JCCatalogProductSubscribe.prototype.validateContactField = function(contactTypeData)
{
var inputFields = BX.findChildren(BX('bx-catalog-subscribe-form'),
{'tag': 'input', 'attribute': {id: 'userContact'}}, true);
if(!inputFields.length || typeof contactTypeData !== 'object')
{
BX('bx-catalog-subscribe-form-notify').style.color = 'red';
BX('bx-catalog-subscribe-form-notify').innerHTML = BX.message('CPST_SUBSCRIBE_VALIDATE_UNKNOW_ERROR');
return false;
}
var contactTypeId, contactValue, useContact, errors = [], useContactErrors = [];
for(var k = 0; k < inputFields.length; k++)
{
contactTypeId = inputFields[k].getAttribute('data-id');
contactValue = inputFields[k].value;
useContact = BX('bx-contact-use-'+contactTypeId);
if(useContact && useContact.value == 'N')
{
useContactErrors.push(true);
continue;
}
if(!contactValue.length)
{
errors.push(BX.message('CPST_SUBSCRIBE_VALIDATE_ERROR_EMPTY_FIELD').replace(
'#FIELD#', contactTypeData[contactTypeId].contactLable));
}
}
if(inputFields.length == useContactErrors.length)
{
BX('bx-catalog-subscribe-form-notify').style.color = 'red';
BX('bx-catalog-subscribe-form-notify').innerHTML = BX.message('CPST_SUBSCRIBE_VALIDATE_ERROR');
return false;
}
if(errors.length)
{
BX('bx-catalog-subscribe-form-notify').style.color = 'red';
for(var i = 0; i < errors.length; i++)
{
BX('bx-catalog-subscribe-form-notify').innerHTML = errors[i];
}
return false;
}
return true;
};
window.JCCatalogProductSubscribe.prototype.reloadCaptcha = function()
{
BX.ajax.get(this.ajaxUrl+'?reloadCaptcha=Y', '', function(captchaCode) {
BX('captcha_sid').value = captchaCode;
BX('captcha_img').src = '/bitrix/tools/captcha.php?captcha_sid='+captchaCode+'';
});
};
window.JCCatalogProductSubscribe.prototype.createContentForPopup = function(responseData)
{
if(!responseData.hasOwnProperty('contactTypeData'))
{
return null;
}
var contactTypeData = responseData.contactTypeData, contactCount = Object.keys(contactTypeData).length,
styleInputForm = '', manyContact = 'N', content = document.createDocumentFragment();
if(contactCount > 1)
{
manyContact = 'Y';
styleInputForm = 'display:none;';
content.appendChild(BX.create('p', {
text: BX.message('CPST_SUBSCRIBE_MANY_CONTACT_NOTIFY')
}));
}
content.appendChild(BX.create('p', {
props: {id: 'bx-catalog-subscribe-form-notify'}
}));
for(var k in contactTypeData)
{
if(contactCount > 1)
{
content.appendChild(BX.create('div', {
props: {
className: 'bx-catalog-subscribe-form-container'
},
children: [
BX.create('div', {
props: {
className: 'checkbox'
},
children: [
BX.create('lable', {
props: {
className: 'bx-filter-param-label'
},
attrs: {
onclick: this.jsObject+'.selectContactType('+k+', event);'
},
children: [
BX.create('input', {
props: {
type: 'hidden',
id: 'bx-contact-use-'+k,
name: 'contact['+k+'][use]',
value: 'N'
}
}),
BX.create('input', {
props: {
id: 'bx-contact-checkbox-'+k,
type: 'checkbox'
}
}),
BX.create('span', {
props: {
className: 'bx-filter-param-text'
},
text: contactTypeData[k].contactLable
})
]
})
]
})
]
}));
}
content.appendChild(BX.create('div', {
props: {
id: 'bx-catalog-subscribe-form-container-'+k,
className: 'bx-catalog-subscribe-form-container',
style: styleInputForm
},
children: [
BX.create('div', {
props: {
className: 'bx-catalog-subscribe-form-container-label'
},
text: BX.message('CPST_SUBSCRIBE_LABLE_CONTACT_INPUT').replace(
'#CONTACT#', contactTypeData[k].contactLable)
}),
BX.create('div', {
props: {
className: 'bx-catalog-subscribe-form-container-input'
},
children: [
BX.create('input', {
props: {
id: 'userContact',
className: '',
type: 'text',
name: 'contact['+k+'][user]'
},
attrs: {'data-id': k}
})
]
})
]
}));
}
if(responseData.hasOwnProperty('captchaCode'))
{
content.appendChild(BX.create('div', {
props: {
className: 'bx-catalog-subscribe-form-container'
},
children: [
BX.create('span', {props: {className: 'bx-catalog-subscribe-form-star-required'}, text: '*'}),
BX.message('CPST_ENTER_WORD_PICTURE'),
BX.create('div', {
props: {className: 'bx-captcha'},
children: [
BX.create('input', {
props: {
type: 'hidden',
id: 'captcha_sid',
name: 'captcha_sid',
value: responseData.captchaCode
}
}),
BX.create('img', {
props: {
id: 'captcha_img',
src: '/bitrix/tools/captcha.php?captcha_sid='+responseData.captchaCode+''
},
attrs: {
width: '180',
height: '40',
alt: 'captcha',
onclick: this.jsObject+'.reloadCaptcha();'
}
})
]
}),
BX.create('div', {
props: {className: 'bx-catalog-subscribe-form-container-input'},
children: [
BX.create('input', {
props: {
id: 'captcha_word',
className: '',
type: 'text',
name: 'captcha_word'
},
attrs: {maxlength: '50'}
})
]
})
]
}));
}
var form = BX.create('form', {
props: {
id: 'bx-catalog-subscribe-form'
},
children: [
BX.create('input', {
props: {
type: 'hidden',
name: 'manyContact',
value: manyContact
}
}),
BX.create('input', {
props: {
type: 'hidden',
name: 'sessid',
value: BX.bitrix_sessid()
}
}),
BX.create('input', {
props: {
type: 'hidden',
name: 'itemId',
value: this.elemButtonSubscribe.dataset.item
}
}),
BX.create('input', {
props: {
type: 'hidden',
name: 'siteId',
value: BX.message('SITE_ID')
}
}),
BX.create('input', {
props: {
type: 'hidden',
name: 'contactFormSubmit',
value: 'Y'
}
})
]
});
form.appendChild(content);
return form;
};
window.JCCatalogProductSubscribe.prototype.selectContactType = function(contactTypeId, event)
{
var contactInput = BX('bx-catalog-subscribe-form-container-'+contactTypeId), visibility = '',
checkboxInput = BX('bx-contact-checkbox-'+contactTypeId);
if(!contactInput)
{
return false;
}
if(checkboxInput != event.target)
{
if(checkboxInput.checked)
{
checkboxInput.checked = false;
}
else
{
checkboxInput.checked = true;
}
}
if (contactInput.currentStyle)
{
visibility = contactInput.currentStyle.display;
}
else if (window.getComputedStyle)
{
var computedStyle = window.getComputedStyle(contactInput, null);
visibility = computedStyle.getPropertyValue('display');
}
if(visibility === 'none')
{
BX('bx-contact-use-'+contactTypeId).value = 'Y';
BX.style(contactInput, 'display', '');
}
else
{
BX('bx-contact-use-'+contactTypeId).value = 'N';
BX.style(contactInput, 'display', 'none');
}
};
window.JCCatalogProductSubscribe.prototype.createSuccessPopup = function(result)
{
this.initPopupWindow();
this.elemPopupWin.setTitleBar(BX.message('CPST_SUBSCRIBE_POPUP_TITLE'));
var content = BX.create('div', {
props:{
className: 'bx-catalog-popup-content'
},
children: [
BX.create('p', {
props: {
className: 'bx-catalog-popup-message'
},
text: result.message
})
]
});
this.elemPopupWin.setContent(content);
this.elemPopupWin.setButtons([
new subscribeButton({
text : BX.message('CPST_SUBSCRIBE_BUTTON_CLOSE'),
className : 'btn btn-primary',
events : {
click : BX.delegate(function() {
this.elemPopupWin.destroy();
}, this)
}
})
]);
this.elemPopupWin.show();
};
window.JCCatalogProductSubscribe.prototype.initPopupWindow = function()
{
this.elemPopupWin = BX.PopupWindowManager.create('CatalogSubscribe_'+this.buttonId, null, {
autoHide: false,
offsetLeft: 0,
offsetTop: 0,
overlay : true,
closeByEsc: true,
titleBar: true,
closeIcon: true,
contentColor: 'white'
});
};
window.JCCatalogProductSubscribe.prototype.setButton = function(statusSubscription)
{
this.alreadySubscribed = Boolean(statusSubscription);
if(this.alreadySubscribed)
{
this.elemButtonSubscribe.className = this.buttonClass + ' ' + this.defaultButtonClass + ' disabled';
this.elemButtonSubscribe.innerHTML = '<span>' + BX.message('CPST_TITLE_ALREADY_SUBSCRIBED') + '</span>';
BX.unbind(this.elemButtonSubscribe, 'click', this._elemButtonSubscribeClickHandler);
}
else
{
this.elemButtonSubscribe.className = this.buttonClass + ' ' + this.defaultButtonClass;
this.elemButtonSubscribe.innerHTML = '<span>' + BX.message('CPST_SUBSCRIBE_BUTTON_NAME') + '</span>';
BX.bind(this.elemButtonSubscribe, 'click', this._elemButtonSubscribeClickHandler);
}
};
window.JCCatalogProductSubscribe.prototype.showWindowWithAnswer = function(answer)
{
answer = answer || {};
if (!answer.message) {
if (answer.status == 'success') {
answer.message = BX.message('CPST_STATUS_SUCCESS');
} else {
answer.message = BX.message('CPST_STATUS_ERROR');
}
}
var messageBox = BX.create('div', {
props: {
className: 'bx-catalog-subscribe-alert'
},
children: [
BX.create('span', {
props: {
className: 'bx-catalog-subscribe-aligner'
}
}),
BX.create('span', {
props: {
className: 'bx-catalog-subscribe-alert-text'
},
text: answer.message
}),
BX.create('div', {
props: {
className: 'bx-catalog-subscribe-alert-footer'
}
})
]
});
var currentPopup = BX.PopupWindowManager.getCurrentPopup();
if(currentPopup) {
currentPopup.destroy();
}
var idTimeout = setTimeout(function () {
var w = BX.PopupWindowManager.getCurrentPopup();
if (!w || w.uniquePopupId != 'bx-catalog-subscribe-status-action') {
return;
}
w.close();
w.destroy();
}, 3500);
var popupConfirm = BX.PopupWindowManager.create('bx-catalog-subscribe-status-action', null, {
content: messageBox,
onPopupClose: function () {
this.destroy();
clearTimeout(idTimeout);
},
autoHide: true,
zIndex: 2000,
className: 'bx-catalog-subscribe-alert-popup'
});
popupConfirm.show();
BX('bx-catalog-subscribe-status-action').onmouseover = function (e) {
clearTimeout(idTimeout);
};
BX('bx-catalog-subscribe-status-action').onmouseout = function (e) {
idTimeout = setTimeout(function () {
var w = BX.PopupWindowManager.getCurrentPopup();
if (!w || w.uniquePopupId != 'bx-catalog-subscribe-status-action') {
return;
}
w.close();
w.destroy();
}, 3500);
};
};
})(window);