function GetSum(val,precision) {
if(typeof (precision) == "undefined" || precision < 0) { precision = 0; }
// Возводим в степень точности 10 для округления
var p = Math.pow(10,precision);
try {return Math.round(parseFloat(eval(val.toString().replace(/\s/gi, "").replace(/,/gi, ".")))*p)/p;} catch (e) {return 0;}
}
// Возвращает правильное окончание для слова
function genWordEnd(num, e, m, mm) {
// Если забыли указать окончания
if(typeof (e) == "undefined") { e = ''; }
if(typeof (m) == "undefined") { m = 'а'; }
if(typeof (mm) == "undefined"){ mm = 'oв'; }
// Если передали пустую строку, вместо цифры
if(0 == num.length) { num = 0; }
// Превращаем цифру в правильный INT
num = GetSum(num).toString();
// Получаем последний символ цифры
ch1 = num.substring(num.length-1);
// Получаем последний символ цифры
ch2 = num.length == 1 ? 0 : num.substring(num.length-2, num.length-1);
// Если последняя цифра - 1, вернем единственное число
if(ch2!=1 && ch1==1) {return e;}
// Если последняя цифра - от 2 до 4х , вернем множественное чило из массива с индексом 2
else if(ch2!=1 && ch1>1 && ch1<=4) {return m;}
// Если последняя цифра - от 5 до 0 , вернем множественное чило из массива с индексом 3
else if(ch2==1 || ch1>4 || ch1==0) {return mm;}
}
// Добавление/удаление товара на сравнение через ajax
$('.add_to_compare_small, .add_to_wishlist_small').click(function(){
// Объект ссылки, по которой кликнули
var
a = $(this)
,addUrl = a.attr('data-action-add-url')
,delUrl = a.attr('data-action-delete-url')
,addTitle = a.attr('data-action-add-title')
,delTitle = a.attr('data-action-delete-title')
,isAdd = a.attr('data-action-is-add')
,aText = a.parent().find('.add_to_wishlist_small_text, .add_to_compare_small_text')
requestUrl = a.attr('href')
;
// Если в ссылке присутствует идентификатор, который мы можем узнать только вытащив его с текущей страницы
if( /GET_GOODS_MOD_ID_FROM_PAGE/.test(requestUrl)) {
requestUrl = requestUrl.replace(new RegExp('GET_GOODS_MOD_ID_FROM_PAGE'), $('.goodsDataMainModificationId').val());
}
// Если есть информация о том какие URL адреса будут изменены, то можено не перегружать страницу и сделать запрос через ajax
if(addUrl && delUrl) {
$.ajax({
type : "POST",
dataType: 'json',
cache : false,
url : requestUrl,
data : {
'ajax_q': 1
},
success: function(data) {
if('ok' == data.status) {
if(isAdd == 1) {
var
from = addUrl
,to = delUrl
,newIsAddStatus = 0
,newTitle = delTitle ? delTitle : ''
;
a.addClass('added');
} else {
var
from = delUrl
,to = addUrl
,newIsAddStatus = 1
,newTitle = addTitle ? addTitle : ''
;
a.removeClass('added');
}
// Если указано, что изменилось число товаров на сравнении
if(typeof(data.compare_goods_count) != 'undefined') {
// Блок информации о том, что есть товары на сравнении
var compareBlock = $('.compareInfo');
// Если на сравнении больше нет товаров
if(0 < data.compare_goods_count) {
compareBlock.show();
// Если на сравнении есть новые товары
} else {
compareBlock.hide();
}
// Указываем информацию о новом количестве товаров на сравнении
compareBlock.find('.nb_goods').text( data.compare_goods_count + ( typeof(genWordEnd) == 'function' ? ' товар' + genWordEnd(data.compare_goods_count, "", "а", "ов") : '') );
}
// Обновляем ссылку, на которую будет уходить запрос и информацию о ней
a.attr('href', a.attr('href').replace(new RegExp(from), to))
.attr('title', newTitle)
.attr('data-action-is-add', newIsAddStatus);
// Если рядом с ссылкой в виде круга есть текстовая надпись с описанием действия
if(aText.length) {
aText.text(aText.attr(isAdd == 1 ? 'data-action-text-delete' : 'data-action-text-add'));
}
// Если есть функция, которая отображает сообщения пользователю
if(typeof(noty) == "function") {
noty({
text:data.message
,layout:"center"
,type:"success"
,textAlign:"center"
,easing:"swing"
,animateOpen:{"height":"toggle"}
,animateClose:{"opacity":"hide"}
,speed:"500"
,timeout:"3000"
,closable: false
,modal: false
,dismissQueue: true
,onClose: true
,killer: true
});
}
} else if('error' == data.status) {
// Если есть функция, которая отображает сообщения пользователю
if(typeof(noty) == "function") {
noty({
text:data.message
,layout:"center"
,type:"error"
,textAlign:"center"
,easing:"swing"
,animateOpen:{"height":"toggle"}
,animateClose:{"opacity":"hide"}
,speed:"500"
,timeout:"3000"
,closable: false
,modal: false
,dismissQueue: true
,onClose: true
,killer: true
});
}
}
}
});
return false;
}
});