/**
* Translate
*
* JC.__({id}) - метод для перевода
* JC.locale - текущая локаль
*/
$(document).ready(function() {
$('.filter .close').on('click', function(e){
$('#opaco').hide();
$(this).parents('.filter').hide();
return false;
});
if ($('.go-date').length > 0) {
$('.go-date').on('click', function (e) {
e.preventDefault();
var curdatetype = $('[name="filter[datetype]"]').val();
var datetype = $(this).attr('rel');
if (curdatetype == datetype) {
return false;
} else {
$('.go-date').addClass('blue').removeClass('black').removeClass('no-decor');
$(this).removeClass('blue').addClass('black').addClass('no-decor');
$('[name="filter[datetype]"]').val(datetype);
}
$.ajax({
url: '/common/getdatesbydatetype/',
cache: false,
async: false,
type: 'POST',
data: {datetype: datetype},
dataType: 'json',
success: function (xhr) {
if (xhr.status === true) {
//fix для дат. Т.к. только в воронках date_b - это начало периода (так должно быть везде!!!)
if ($('[name="quickfilter_page"]').length && $('[name="quickfilter_page"]').val() == 'funnel') {
$('[name="filter[date_b]"]').val(xhr.data.dateStart);
$('[name="filter[date_e]"]').val(xhr.data.dateEnd);
} else {
$('[name="filter[date_e]"]').val(xhr.data.dateStart);
$('[name="filter[date_b]"]').val(xhr.data.dateEnd);
}
if ($('[name="filter[date_interval]"]').length > 0) {
$('[name="filter[date_interval]"]').attr('checked', false);
$('[name="filter[date_interval]"]').each(function () {
if ($(this).val() == xhr.data.dateInterval)
$(this).attr('checked', true);
});
}
$('a[name="find"]').click();
}
}
});
});
}
if ($('.jc-shops').length==0 && $('.form-group').length==0 && $('nav.nav-control').length==0 &&
($('.top-control').length > 0 || $('.acordeon').length > 0)
) {
$('.acordeon-tit a').removeClass('button');
$('select.select').removeClass('select').addClass('select2');
$('.newListSelected.select').remove();
$('.form-buttons span').each(function(e) {
if ($(this).text() == JC.__('javascript.or')) {
$(this).text('');
}
});
$('.form-buttons .in input').closest('span').html($('.form-buttons .in input:first'));
$('span.rub').html('');
$('.acordeon-tit').each(function(e,el) {
var self = el;
if ($(el).hasClass('showed')){
$(el).find('.fa.icon-showed').removeClass('fa-arrow-circle-right').addClass('fa-arrow-circle-down');
}
});
$('.top-control nav').remove();
$('.icon-showed').each(function(i,el){
if (!$(el).hasClass('fa-arrow-circle-right') && !$(el).hasClass('fa-arrow-circle-down')) {
if ($(el).closest('.acordeon-tit').hasClass('showed')) {
$(el).addClass('fa').addClass('fa-arrow-circle-down');
} else {
$(el).addClass('fa').addClass('fa-arrow-circle-right');
}
}
});
$('div#alert_loading').css('opacity','0.9').css('background','rgba(0, 0, 0, 0.69)');
$('head').prepend('');
}
});
/*********************TEMPORARY****************/
function array_diff (array) { // Computes the difference of arrays, like in PHP
var arr_dif = [], i = 1, argc = arguments.length, argv = arguments, key, key_c, found=false, j = 0;
for (key in array){
for (i = 1; i< argc; i++){
found = false;
for (key_c in argv[i]) {
if (argv[i][key_c] == array[key]) {
found = true;
break;
}
}
if(!found){
arr_dif[j] = array[key];
j++;
}
}
}
return arr_dif;
}
function implode(glue, pieces) { // Join array elements with a string, like in PHP
return ((pieces instanceof Array) ? pieces.join (glue) : pieces);
}
// align element at window center
jQuery.fn.alignCenter = function() {
var marginLeft = Math.max(0, parseInt(jQuery(window).width()/2 - jQuery(this).innerWidth()/2));
var marginTop = Math.max(0, parseInt(jQuery(window).height()/2 - jQuery(this).innerHeight()/2));
return jQuery(this).css({"top":marginTop + "px", "left":marginLeft + "px"});
};
// jQuery plugins
jQuery.fn.extend({
// ajax box
ajaxBox: function(options) {
AppAjaxBox.init(this, options || null);
return this;
}
});
var ajaxWait = {
start : function() {
jQuery("#jc-loader").show();
},
stop : function() {
jQuery("#jc-loader").hide();
}
};
$(".ajax-cancel").on('click', function(){
ajaxWait.stop();
});
$(".new_form a").on('click', function(){
ajaxWait.start(".new_form");
});
$(".ui-autocomplete a,.rich-editor,#rich-editor,[id*='cke_'],#clear-pay-text,#cke_good_pay_text,#script-check,.internal,.internal2,.external,a[target='_blank'],#clear-text, a[href='#ticket']").on('click', function(){
ajaxWait.stop();
});
$(".ajax-submit, .CmsFormSubmit").on('click', function() {
$val = $(this).val();
// todo протестировать условие, в идеале переписать
if ($val !== JC.__('javascript.export')) {
ajaxWait.start();
}
});
/**
* Set cookie after close the notice
*/
$(document).on('click', '.notice .notice-close', function(e) {
e.preventDefault();
var cookieName = $(this).attr('rel'),
expDate = $(this).data('hide-period');
if (typeof expDate === 'undefined') {
expDate = 15;
}
if (cookieName){
if ((cookieName.indexOf('publicity_info_') + 1) || (cookieName.indexOf('mini_status_off_') + 1)) {
expDate = 365;
}
$.cookie(cookieName, 1, { expires: expDate, path: '/'});
$(this).attr('rel', '');
}
});
/**
* Simple notify
* @param text
* @param time
* @param bannerName
*/
function notify(text, time, bannerName) {
var $alert = JC.jquery('.collapseAlert');
if (typeof time === "undefined") {
time = 3000;
}
$alert.find('.notice__head__name').html(text);
$alert.find('a[href="#collapseAlertContent"]').addClass('hidden collapsed');
$alert.find('#collapseAlertContent').removeClass('in');
$alert.clearQueue().collapse('show');
if (time > 0) {
setTimeout(function () {
$alert.collapse('hide');
}, time);
}
}
/**
* Full notify
* @param shortText
* @param fullText
* @param btnText
* @param cookieName
* @param disposable
* @param hidePeriod
*/
function sysnotify(shortText, fullText, btnText, cookieName, disposable, hidePeriod) {
var $alert = JC.jquery('.collapseAlert');
var btn = btnText || JC.__('javascript.now_i_know') + '!';
disposable = disposable || false;
hidePeriod = hidePeriod || false;
$alert.find('.notice__content .notice-close').html(btn);
if (fullText) {
fullText = fullText.replace('', shortText);
$alert.find('.notice__content p').html(fullText);
$alert.find('a[href="#collapseAlertContent"]').removeClass('hidden');
}
if (cookieName) {
$alert.find('.notice__content .notice-close').attr('rel', cookieName);
if (disposable) {
$alert.find('[data-target=".collapseAlert"]').addClass('notice-close').attr('rel', cookieName);
}
}
if (hidePeriod) {
$alert.find('.notice-close').attr('data-hide-period', hidePeriod);
}
$alert.find('.notice__head__name').html(shortText);
$alert.clearQueue().collapse('show');
}
function registerModule(module, id) {
return {
type: 'REGISTER_MODULE',
module: module,
id: id
}
}
function reposition(label) {
return {
type: 'REPOSITION',
label: label
}
}
var AppAjaxBox = {
// load content into box
init: function(target, options) {
if (options !== null) {
target.data('ajaxbox-options', options);
}
else {
options = target.data('ajaxbox-options');
}
// prevent multiple requests
if (target.data('ajaxbox-process')) return;
if (typeof options.type == 'undefined') {
options.type = 'GET';
}
// request data
jQuery.ajax({
beforeSend: function() {
target.data('ajaxbox-process', true);
AppAjaxBox.enable(target);
},
complete: function(xhr) {
target.data('ajaxbox-process', false);
if (options.request.loadingNotOff !== true) {
AppAjaxBox.disable(target);
}
},
error: function(xhr) {
if (xhr.status === 0) {
console.log(xhr);
return;
}
target.data('ajaxbox-error', true);
AppAjaxBox.disable(target);
// jQuery.blink('Application error', 5);
},
url: options.url,
cache: false,
type: options.type,
data: options.request,
success: function(response, status, xhr) {
var contentType = xhr.getResponseHeader("content-type") || "";
if (contentType.indexOf('html') > -1) {
target.html(response);
JC.ModuleLoader.importModules(target.find('.jc-module'));
JC.Store.dispatch(registerModule('legacy-ajax', 'on-load-page'));
JC.Store.dispatch(reposition('legacy-ajax-'+ options.url));
} else if (contentType.indexOf('json') > -1) {
if (response.status == true && response.html) {
target.html(response.html);
JC.ModuleLoader.importModules(target.find('.jc-module'));
JC.Store.dispatch(registerModule('legacy-ajax', 'on-load-page'));
JC.Store.dispatch(reposition('legacy-ajax-'+ options.url));
} else if (response.messages) {
alert(respnose.messages);
}
} else {
target.html(JC.__('javascript.invalid_response_format'));
}
}
});
return this;
},
// loading
enable: function() {
$("#jc-loader").show();
},
disable: function() {
$("#jc-loader ").hide();
}
};
//form ajax submit
jQuery.fn.ajaxPaginator = function(paginator) {
var pName = "p_p_"+$.cookie('auth_user_name');
var expDate = new Date();
var minutes = 5;
expDate.setTime(expDate.getTime() + (minutes * 60 * 1000))
// get $target options
var $target = this;
var options = $target.data('ajaxbox-options');
if (!options || !options.pagination) return false;
var pagination = $(options.pagination.controller);
if (paginator == 'refreshPage'){
$target.ajaxBox(options);
return;
}
if (paginator == 'isActive'){
return ($(".currentpage:visible").length > 0);
}
if (paginator.pageCount > 1) {
pagination.show();
}
else {
pagination.hide();
}
// unbind handlers
pagination.children().unbind();
$target.find(".perpage").find('A').removeClass('active');
$target.find(".perpage").find('A.per10').addClass('active');
if (paginator.numItemsPerPage) {
if ($target.find(".perpage").find('A.per' + paginator.numItemsPerPage).length > 0) {
$target.find(".perpage").find('A').removeClass('active');
$target.find(".perpage").find('A.per' + paginator.numItemsPerPage).addClass('active');
}
}
// bind switch to previous
if (!paginator.previous) {
$(".arrow-prevpage", pagination).addClass("disabled");
} else {
$(".arrow-prevpage", pagination).bind('click', function(e) {
e.preventDefault();
location.href = "#filters";
options.request.p = paginator.previous;
$target.ajaxBox(options);
//alert(paginator.previous);
$.cookie(pName, paginator.previous, { expires: expDate, path: document.location.pathname});
}).removeClass("disabled");
}
// bind switch to next
if (!paginator.next) {
$(".arrow-nextpage", pagination).addClass("disabled");
} else {
$(".arrow-nextpage", pagination).bind('click', function(e) {
e.preventDefault();
location.href = "#filters";
options.request.p = paginator.next;
$target.ajaxBox(options);
//alert(paginator.next);
$.cookie(pName, paginator.next, { expires: expDate, path: document.location.pathname});
}).removeClass("disabled");
}
// bind page text
$(".currentpage", pagination)
.change(function(){
var gotopage = parseInt($(".currentpage", pagination).val());
if (gotopage != paginator.current && (gotopage >= paginator.first && gotopage <= paginator.last)) {
location.href = "#filters";
paginator.current = options.request.p = gotopage;
$target.ajaxBox(options);
} else {return false;}
})
.click(function(){
$(this).select();
})
.keypress(function(event){
if (event.which === 13) {
event.preventDefault();
$(this).blur().trigger('change');
//alert(paginator.current);
$.cookie(pName, paginator.current, { expires: expDate, path: document.location.pathname});
}
});
var pp = parseInt($.cookie(pName));
if(pp > paginator.pageCount)
$(".currentpage", pagination).val(paginator.current);
else
$(".currentpage", pagination).val(pp);
$(".currentpage", pagination).val(paginator.current);
$(".totalpages", pagination).text(paginator.pageCount);
// listing
if (options.pagination.listing) {
if (paginator.totalItemCount > 0) {
$(options.pagination.listing).html(
"" + paginator.firstItemNumber + "-" + paginator.lastItemNumber + " " +
JC.__('javascript.of') + " " +
"" + paginator.totalItemCount + "").show();
} else {
$(options.pagination.listing).hide();
}
}
// callback
if (options.pagination.callback) {
options.pagination.callback(paginator);
}
return this;
}
function formatPrice(str) {
return str != undefined ? (str + '').replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ') : str;
}
//Work with URL & Links
function urlencode(str) {
str = (str+'').toString();
return encodeURIComponent(str)
.replace(/!/g, '%21')
.replace(/'/g, '%27')
.replace(/\(/g, '%28')
.replace(/\)/g, '%29')
.replace(/\*/g, '%2A')
.replace(/%20/g, '+');
}
function urldecode(str) {
return decodeURIComponent((str+'').replace(/\+/g, '%20'));
}
function parse_str(str, array) {
var glue1 = '=', glue2 = '&', array2 = String(str).replace(/^&?([\s\S]*?)&?$/, '$1').split(glue2),
i, j, chr, tmp, key, value, bracket, keys, evalStr, that = this,
fixStr = function (str) {
return that.urldecode(str).replace(/([\\"'])/g, '\\$1').replace(/\n/g, '\\n').replace(/\r/g, '\\r');
};
if (!array) {
array = this.window;
}
for (i = 0; i < array2.length; i++) {
tmp = array2[i].split(glue1);
if (tmp.length < 2) {
tmp = [tmp, ''];
}
key = fixStr(tmp[0]);
value = fixStr(tmp[1]);
while (key.charAt(0) === ' ') {
key = key.substr(1);
}
if (key.indexOf('\0') !== -1) {
key = key.substr(0, key.indexOf('\0'));
}
if (key && key.charAt(0) !== '[') {
keys = [];
bracket = 0;
for (j = 0; j < key.length; j++) {
if (key.charAt(j) === '[' && !bracket) {
bracket = j + 1;
}
else if (key.charAt(j) === ']') {
if (bracket) {
if (!keys.length) {
keys.push(key.substr(0, bracket - 1));
}
keys.push(key.substr(bracket, j - bracket));
bracket = 0;
if (key.charAt(j + 1) !== '[') {
break;
}
}
}
}
if (!keys.length) {
keys = [key];
}
for (j = 0; j < keys[0].length; j++) {
chr = keys[0].charAt(j);
if (chr === ' ' || chr === '.' || chr === '[') {
keys[0] = keys[0].substr(0, j) + '_' + keys[0].substr(j + 1);
}
if (chr === '[') {
break;
}
}
evalStr = 'array';
for (j = 0; j < keys.length; j++) {
key = keys[j];
if ((key !== '' && key !== ' ') || j === 0) {
key = "'" + key + "'";
}
else {
key = eval(evalStr + '.push([]);') - 1;
}
evalStr += '[' + key + ']';
if (j !== keys.length - 1 && eval('typeof ' + evalStr) === 'undefined') {
eval(evalStr + ' = [];');
}
}
evalStr += " = '" + value + "';\n";
eval(evalStr);
}
}
}
function parse_url(str, component) {
var o = {
strictMode: false,
key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
q: {
name: "queryKey",
parser: /(?:^|&)([^&=]*)=?([^&]*)/g
},
parser: {
strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/\/?)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ // Added one optional slash to post-protocol to catch file:/// (should restrict this)
}
};
var m = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
uri = {},
i = 14;
while (i--) {uri[o.key[i]] = m[i] || "";}
// Uncomment the following to use the original more detailed (non-PHP) script
/*
uri[o.q.name] = {};
uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
if ($1) uri[o.q.name][$1] = $2;
});
return uri;
*/
switch (component) {
case 'PHP_URL_SCHEME':
return uri.protocol;
case 'PHP_URL_HOST':
return uri.host;
case 'PHP_URL_PORT':
return uri.port;
case 'PHP_URL_USER':
return uri.user;
case 'PHP_URL_PASS':
return uri.password;
case 'PHP_URL_PATH':
return uri.path;
case 'PHP_URL_QUERY':
return uri.query;
case 'PHP_URL_FRAGMENT':
return uri.anchor;
default:
var retArr = {};
if (uri.protocol !== '') {retArr.scheme=uri.protocol;}
if (uri.host !== '') {retArr.host=uri.host;}
if (uri.port !== '') {retArr.port=uri.port;}
if (uri.user !== '') {retArr.user=uri.user;}
if (uri.password !== '') {retArr.pass=uri.password;}
if (uri.path !== '') {retArr.path=uri.path;}
if (uri.query !== '') {retArr.query=uri.query;}
if (uri.anchor !== '') {retArr.fragment=uri.anchor;}
return retArr;
}
}
//END Work with URL & Links
function GetComission(value, base, min, max) {
if (value > 0) {
if (base > 0) {
var total = value * base / 100;
if (min > 0 && total < min) {
return min;
}
if (max > 0 && total > max) {
return max;
}
return total;
}
else {
return 0;
}
}
else {
return false;
}
}
/*
* Предварительно нужно:
* - подключить библиотеку в шаблоне
* - google.load("visualization", "1", {packages:["corechart"]}); вызвать js-код
*
* idArea - ид div-блока, в котором появится график
* obj - массив данных, вида key-value
* opt - дополнительные параметры, вида key-value
*/
function drawPieChart(idArea, obj, opt) {
var data = new google.visualization.DataTable();
data.addColumn('string', 'Name');
data.addColumn('number', 'Count');
for(var i in obj)
data.addRow([i, obj[i]]);
options = {
//legend: 'none',
title: opt['title'],
//backgroundColor: '#333',
tooltip: {isHtml: true},
};
var chart = new google.visualization.PieChart(document.getElementById(idArea));
chart.draw(data, options);
}
/**
* Создаем уникальный ID
*/
var uniqueId = function () {
// Math.random should be unique because of its seeding algorithm.
// Convert it to base 36 (numbers + letters), and grab the first 9 characters
// after the decimal.
return '_' + Math.random().toString(36).substr(2, 9);
};
/**
* Замена темы мгновенного/автоматического письма на содержимое тега title
*/
function MoveTitleToSubject(textarea) {
var title = textarea.val().match(/]*>([\s\S]*?)<\/title>/g);
if (title != null && typeof(title) != 'undefined') {
title = title.toString().replace('', '').replace('', '');
if (title != '') {
var form = textarea.closest('.anons-form');
if (form.length == 0) {
form = textarea.closest('.serial-form');
}
if (form.length == 0) {
return false;
}
var subject = form.find('.subject');
subject.val(title);
var text = textarea.val().replace(title, '');
textarea.val(text);
var editor_name = subject.attr('name').replace('subject', 'html');
var editor = CKEDITOR.instances[editor_name];
var data = editor.getData().replace(title, '');
editor.setData(data);
}
}
}
// tracking ajax errors for old scripts
$(document).ajaxError(function(event, jqxhr, settings, exception) {
var response = 'incorrect response';
var type = (!!event.type) ? event.type : '';
var mark = (typeof window.addBlockDisable === 'undefined') ? ' [old, addBlock enable] : ' : ' [old] : ';
var status = exception || jqxhr.statusText || '';
if (!!jqxhr.responseText) {
response = (jqxhr.responseText.length > 500) ? jqxhr.responseText.substring(0, 500) + '...' : jqxhr.responseText
}
JC.sentry.send(String(type + mark + status), {
url: settings.url,
type: settings.type,
data: settings.data,
status: jqxhr.status,
error: exception || jqxhr.statusText,
response: response
}
);
});