// Отправляет ошибку на сервер, для того, чтобы служба тех поддержки могла разобраться в проблеме как можно быстрее.
function sendError(desc, page, line) {
var img = document.createElement('img');
img.src = 'http://storeland.ru/error/js?desc=' + encodeURIComponent(desc) + '&page=' + encodeURIComponent(window.location) + '&line=0';
img.style.position = 'absolute';
img.style.top = '-9999px';
try {
document.getElementsByTagName('head') .appendChild(img)
} catch (e) {
}
return false;
}
// Форматирует цену
function number_format(number, decimals, dec_point, thousands_sep) {
var n = number,
prec = decimals;
var toFixedFix = function (n, prec) {
var k = Math.pow(10, prec);
return (Math.round(n * k) / k) .toString();
};
n = !isFinite( + n) ? 0 : + n;
prec = !isFinite( + prec) ? 0 : Math.abs(prec);
var sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep;
var dec = (typeof dec_point === 'undefined') ? '.' : dec_point;
var s = (prec > 0) ? toFixedFix(n, prec) : toFixedFix(Math.round(n), prec);
var abs = toFixedFix(Math.abs(n), prec);
var _,
i;
if (abs >= 1000) {
_ = abs.split(/\D/);
i = _[0].length % 3 || 3;
_[0] = s.slice(0, i + (n < 0)) +
_[0].slice(i) .replace(/(\d{3})/g, sep + '$1');
s = _.join(dec);
} else {
s = s.replace('.', dec);
}
var decPos = s.indexOf(dec);
if (prec >= 1 && decPos !== - 1 && (s.length - decPos - 1) < prec) {
s += new Array(prec - (s.length - decPos - 1)) .join(0) + '0';
}
else if (prec >= 1 && decPos === - 1) {
s += dec + new Array(prec) .join(0) + '0';
}
return s;
}
// Превращает поле пароля в текстовое поле и обратно
// @LinkObject - ссылка по которой кликнули
// @InputObject - объект у которого нужно изменить тип поля
function ChangePasswordFieldType(LinkObject, InputObject) {
var
// Ссылка по которой кликнули
LObject = $(LinkObject),
// Объект у которого изменяем тип с password на text
IObject = $(InputObject),
// Старый текст ссылки
txtOld = LObject.text(),
// Новый текст ссылки
txtNew = LObject.attr('rel');
// Если объекты не получены, завершим работу функции
if (LObject.length == 0 || IObject.length == 0) {
return false;
}
// Изменяем у ссылки текст со старого на новый
LObject.html(txtNew);
// Старый текст ссылки сохраняем в атрибуте rel
LObject.attr('rel', txtOld);
// Изменяем тип input поля
if (IObject[0].type == 'text') {
IObject[0].type = 'password';
} else {
IObject[0].type = 'text';
}
}
// Крутит изображение при обновлении картинки защиты от роботов
function RefreshImageAction(img, num, cnt) {
if (cnt > 13) {
return false;
}
$(img) .attr('src', $(img) .attr('rel') + 'icon/refresh/' + num + '.gif');
num = (num == 6) ? 0 : num;
setTimeout(function () {
RefreshImageAction(img, num + 1, cnt + 1);
}, 50);
}
// Проверяет хэш, переданый пользователем и открывает соответствующий раздел
function checkTabHash() {
// Определяем текущий хэш страницы
var hash = window.location.hash.substr(1);
if (hash == 'goodsDataOpinionAdd') {
// $('#goodsDataOpinionAddBlock').show('blind');
return false;
}
if (!hash.length || hash.indexOf('show_tab_') == - 1) {
return false;
}
// Открываем тот таб, который был указан в hash-е
tabSwitch(hash.replace('show_tab_', ''))
}
// Выбор вкладки на странице товара
function tabSwitch(nb) {
var tabBlock = $('.tabbed_area');
tabBlock.find('.tabs li > a') .removeClass('active');
tabBlock.find('div.content') .hide();
$('#tab_' + nb) .addClass('active');
$('#content_' + nb) .show();
// Записываем в хэш информацию о том какой таб сейчас открыт, для возможности скопировать и передать ссылку с открытым нужным табом
document.location.hash = '#show_tab_' + nb;
}
// Инициализация табов на странице ДОСТАВКИ
function initTabs() {
// Блок в котором находятся табы
var tabBlock = $('.tabbed_area1');
if (!tabBlock.length) {
return false;
}
// По умолчанию делаем отметку о том что активного таба не найдено
var isFind = 0;
tabBlock.find('.tabs li > a') .each(function (i) {
// Если нашёлся активный там
if ($(this) .hasClass('active')) {
// Инициализируем найденный таб
$(this) .click();
// Ставим отметку, о том что не нужно инициализировать первый таб на странице
isFind = 1;
}
});
// Если не найдено ни одного таба с отметкой о том что он активен
if (!isFind) {
// Ставим активным первый таб на странице.
tabSwitch1(1);
}
// Проверяет хэш и если по нему была открыта вкладка, то эта функция автоматически откроет её.
checkTabHash();
// Биндим изменение хэша - проверка какой FAQ вопрос нужно открыть.
$(window) .bind('hashchange', function () {
checkTabHash();
});
}
// Проверяет хэш, переданый пользователем и открывает соответствующий раздел
function checkTabHash() {
// Определяем текущий хэш страницы
var hash = window.location.hash.substr(1);
if (hash == 'goodsDataOpinionAdd') {
// $('#goodsDataOpinionAddBlock').show('blind');
return false;
}
if (!hash.length || hash.indexOf('show_tab_') == - 1) {
return false;
}
// Открываем тот таб, который был указан в hash-е
tabSwitch1(hash.replace('show_tab_', ''))
}
function tabSwitch1(nb) {
var tabBlock = $('.tabbed_area1');
tabBlock.find('.tabs li > a') .removeClass('active');
tabBlock.find('div.content1') .hide();
$('#tab_' + nb) .addClass('active');
$('#content_' + nb) .show();
// Записываем в хэш информацию о том какой таб сейчас открыт, для возможности скопировать и передать ссылку с открытым нужным табом
document.location.hash = '#show_tab_' + nb;
}
function addone(i) {
ta1 = document.getElementById('quantity_wanted');
ta1.value = parseInt(ta1.value) + i;
if (parseInt(ta1.value) <= 0) {
ta1.value = 0;
}
}
// Инициализация табов на странице товара
function initTabs() {
// Блок в котором находятся табы
var tabBlock = $('.tabbed_area');
if (!tabBlock.length) {
return false;
}
// По умолчанию делаем отметку о том что активного таба не найдено
var isFind = 0;
tabBlock.find('.tabs li > a') .each(function (i) {
// Если нашёлся активный там
if ($(this) .hasClass('active')) {
// Инициализируем найденный таб
$(this) .click();
// Ставим отметку, о том что не нужно инициализировать первый таб на странице
isFind = 1;
}
});
// Если не найдено ни одного таба с отметкой о том что он активен
if (!isFind) {
// Ставим активным первый таб на странице.
tabSwitch(1);
}
// Проверяет хэш и если по нему была открыта вкладка, то эта функция автоматически откроет её.
checkTabHash();
// Биндим изменение хэша - проверка какой FAQ вопрос нужно открыть.
$(window) .bind('hashchange', function () {
checkTabHash();
});
}
// Быстрый заказ
function quickorder(formSelector) {
// Находим форму, которую отправляем на сервер, для добавления товара в корзину
var formBlock = $($(formSelector) .get(0));
// Проверка на существование формы отправки запроса на добавление товара в корзину
if (1 > formBlock.length || formBlock.get(0) .tagName != 'FORM') {
alert('Не удалось найти форму добавления товара в корзину');
return false;
}
// Получаем данные формы, которые будем отправлять на сервер
var formData = formBlock.serializeArray();
// Сообщаем серверу, что мы пришли через ajax запрос
formData.push({
name: 'ajax_q',
value: 1
});
// Так же сообщим ему, что нужно сразу отобразить форму быстрого заказа
formData.push({
name: 'fast_order',
value: 1
});
// Аяксом добавляем товар в корзину и вызываем форму быстрого заказа товара
$.ajax({
type: 'POST',
cache: false,
url: formBlock.attr('action'),
data: formData,
success: function (data) {
$.fancybox({
content: data
// При изменении размера окна изменяем размер окна оформления заказа
,
onUpdate: function () {
var w = $(window) .width() * 0.8;
if (w < 800) {
// Автоматический ресайз внутреннего блока fancybox-а
$('.fancybox-inner') .css('width', 'auto');
// Изменяем размер fancybox окна
$('.fancybox-wrap') .css({
'width': w + 'px'
});
}
return false;
}
});
// :
}
});
return false;
}
$(document) .ready(function () {
// Валидация формы на странице оформления заказа, а так же формы на страницы связи с администрацией
$('.order form, .feedbackForm, .clientForm, .goodsDataOpinionAddForm') .submit(function () {
if ($(this) .valid()) {
// Кнопка отправки формы
SubmitButton = $(this) .find('input:submit, button:submit');
// Если кнопку уже нажали, видимо отправка формы производилась по нажатию на кнопку enter, не допускаем этого.
if ($(SubmitButton.get(0)) .attr('disabled')) {
return false;
}
// Устанавливаем на кнопку отправки формы блокировку повторной оптравки
SubmitButton.attr('disabled', true);
// Через 10 секунд блокировка отправки формы снимается.
setTimeout('SubmitButton.attr("disabled", false);', 10000);
}
}) .validate();
// Отправка формы по Ctrl+Enter
$('form') .bind('keypress', function (e) {
if ((e.ctrlKey) && ((e.which == 10) || (e.which == 13))) {
$(this) .submit();
}
// Отправка данных формы по нажатию на Enter в случае если курсор находится в input полях (В некоторых браузерах при нажатии по enter срабатывает клик по первому submit полю, которое является кнопкой назад. Для этого написан этот фикс)
}) .find('input') .bind('keypress', function (e) {
if (((e.which == 10) || (e.which == 13))) {
try {
$(this.form) .submit();
} catch (e) {
}
return false;
}
});
// В форме оформления заказа при клике на кнопку назад просто переходим на предыдущую страницу
$('.order form input:submit[name="toprev"]') .click(function () {
var act = this.form.action;
this.form.action = act + (act.indexOf('?') > - 1 ? '&' : '?') + 'toprev=1';
this.form.submit();
return false;
});
// Настройки галереи изображений
$.nyroModalSettings({
// из всех элементов с атрибут rel="gallery" будем создавать галерею
gallery: 'gallery',
// Включаем прокрутку с последнего изображения на первое
galleryLoop: true,
closeButton: '<a href="#" class="nyroModalClose" id="closeBut" title="close"></a>'
});
// Увеличение изображение при клике на него и открытие галереи изображений
$('.goodsDataMainImage a, .goodsDataMainImageZoom a') .click(function () {
// Идентификатор главной картинки
var goodsImageId = $('.goodsDataMainImage input') .attr('rel'),
// Маленькое изображение, по которому на самом деле будем кликать
goodsImageIconElement = $('.goodsDataMainImagesIcon input[rel="' + goodsImageId + '"]') .parent() .find('a');
// Для иконки изображения запустим галерею
goodsImageIconElement.nyroModalManual();
return false;
});
// Добавление товара в корзину через ajax
//$('.goodsDataForm, .goodsToCartFromCompareForm, .goodsListForm').submit(function(){
// $(this).nyroModalManual({
// formIndicator: 'ajax_q', // Value added when a form is sent
// minWidth: 450, // Minimum width
// minHeight: 140, // Minimum height
// gallery: null // Gallery name if provided
// });
// return false;
// });
// Изменение главного изображения товара при нажатии на миниатюру
$('.goodsDataMainImagesIcon a') .click(function () {
// Путь к среднему изображению
var MediumImageUrl = $(this) .find('img') .attr('rel'),
// Главное изображение, в которое будем вставлять новое изображение
MainImage = $('.goodsDataMainImage img'),
// В этом объекте хранится идентификатор картинки главного изображения для коректной работы галереи изображений
MainImageIdObject = $('.goodsDataMainImage input'),
// Получаем идентификатор этого изображения из соседнего input поля
GoodsImageIconId = $(this) .parent() .find('input') .attr('rel');
// Изменяем главное изображение
MainImage.attr('src', MediumImageUrl);
// Изменяем идентификатор главного изображения
MainImageIdObject.attr('rel', GoodsImageIconId);
return false;
});
// Функция собирает свойства в строку, для определения модификации товара
function getSlugFromGoodsDataFormModificationsProperties(obj) {
var properties = new Array();
$(obj) .each(function (i) {
properties[i] = parseInt($(this) .val());
});
return properties.sort(function (a, j) {
return a - j
}) .join('_');
}
var
// Запоминаем поля выбора свойств, для ускорения работы со значениями свойств
goodsDataProperties = $('form.goodsDataForm select[name="form[properties][]"]'),
// Запоминаем блоки с информацией по модификациям, для ускорения работы
goodsDataModifications = $('div.goodsDataMainModificationsList');
// Обновляет возможность выбора свойств модификации, для отключения возможности выбора по характеристикам модификации которой не существует.
function updateVisibility(y) {
// Проверяем в каждом соседнем поле выбора модификаций, возможно ли подобрать модификацию для указанных свойств
goodsDataProperties.each(function (j) {
// Если мы сравниваем значения свойства не с самим собой, а с другим списком значений свойств
if (j != y) {
// Проходим по всем значениям текущего свойства модификации товара
$(this) .find('option') .each(function () {
// Записываем временный массив свойств, которые будем использовать для проверки существования модификации
var checkProperties = new Array();
$(goodsDataProperties) .each(function (i) {
checkProperties[i] = parseInt($(this) .val());
});
// Пытаемся найти модификацию соответствующую выбранным значениям свойств
checkProperties[j] = parseInt($(this) .attr('value'));
// Собираем хэш определяющий модификацию по свойствам
slug = checkProperties.sort(function (a, j) {
return a - j
}) .join('_');
// Ищем модификацию по всем выбранным значениям свойств товара. Если модификации нет в возможном выборе, отмечаем потенциальное значение выбора как не доступное для выбора, т.к. такой модификации нет.
if (!goodsDataModifications.filter('[rel="' + slug + '"]') .length) {
$(this) .attr('disabled', true);
// Если выбрав данное значение свойства товара можно подобрать модификацию, то выделяем вариант выбора как доступный.
} else {
$(this) .attr('disabled', false);
}
});
}
});
}
// Обновляем возможность выбора модификации товара по свойствам. Для тех свойств, выбор по которым не возможен, отключаем такую возможность.
// Проверяем возможность выбора на всех полях кроме первого, чтобы отключить во всех остальных варианты, которые не возможно выбрать
updateVisibility(0);
// Проверяем возможность выбора на всех полях кроме второго, чтобы в первом поле так же отключилась возможность выбора не существующих модификаций
updateVisibility(1);
// Изменение цены товара при изменении у товара свойства для модификации
goodsDataProperties.each(function (y) {
$(this) .change(function () {
var slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties),
modificationBlock = goodsDataModifications.filter('[rel="' + slug + '"]'),
modificationId = parseInt(modificationBlock.find('[name="id"]') .val()),
modificationArtNumber = modificationBlock.find('[name="art_number"]') .val(),
modificationPriceNow = parseFloat(modificationBlock.find('[name="price_now"]') .val()),
modificationPriceNowFormated = modificationBlock.find('.price_now_formated') .html(),
modificationPriceOld = parseFloat(modificationBlock.find('[name="price_old"]') .val()),
modificationPriceOldFormated = modificationBlock.find('.price_old_formated') .html(),
modificationRestValue = parseFloat(modificationBlock.find('[name="rest_value"]') .val()),
modificationDescription = modificationBlock.find('.description') .html(),
modificationMeasureId = parseInt(modificationBlock.find('[name="measure_id"]') .val()),
modificationMeasureName = modificationBlock.find('[name="measure_name"]') .val(),
modificationMeasureDesc = modificationBlock.find('[name="measure_desc"]') .val(),
modificationMeasurePrecision = modificationBlock.find('[name="measure_precision"]') .val(),
modificationIsHasInCompareList = modificationBlock.find('[name="is_has_in_compare_list"]') .val(),
goodsModificationId = $('.goodsDataMainModificationId'),
goodsPriceNow = $('.goodsDataMainModificationPriceNow'),
goodsPriceOld = $('.goodsDataMainModificationPriceOld'),
goodsAvailable = $('.goodsDataMainModificationAvailable'),
goodsAvailableTrue = goodsAvailable.find('.available-true'),
goodsAvailableFalse = goodsAvailable.find('.available-false'),
goodsArtNumberBlock = $('.goodsDataMainModificationArtNumber'),
goodsArtNumber = goodsArtNumberBlock.find('span');
goodsCompareAddButton = $('.goodsDataCompareButton.add');
goodsCompareDeleteButton = $('.goodsDataCompareButton.delete');
goodsModDescriptionBlock = $('.goodsDataMainModificationsDescriptionBlock');
// Изменяем данные товара для выбранных параметров. Если нашлась выбранная модификация
if (modificationBlock.length) {
// Цена товара
goodsPriceNow.html(modificationPriceNowFormated);
// Старая цена товара
if (modificationPriceOld > modificationPriceNow) {
goodsPriceOld.html(modificationPriceOldFormated);
} else {
goodsPriceOld.html('');
}
// Есть ли товар есть в наличии
if (modificationRestValue > 0) {
goodsAvailableTrue.show();
goodsAvailableFalse.hide();
// Если товара нет в наличии
} else {
goodsAvailableTrue.hide();
goodsAvailableFalse.show();
}
// Если товар есть в списке сравнения
if (modificationIsHasInCompareList > 0) {
goodsCompareAddButton.hide();
goodsCompareDeleteButton.show();
// Если товара нет в списке сравнения
} else {
goodsCompareAddButton.show();
goodsCompareDeleteButton.hide();
}
// Покажем артикул модификации товара, если он указан
if (modificationArtNumber.length > 0) {
goodsArtNumberBlock.show();
goodsArtNumber.html(modificationArtNumber);
// Скроем артикул модификации товара, если он не указан
} else {
goodsArtNumberBlock.hide();
goodsArtNumber.html('');
}
// Описание модификации товара. Покажем если оно есть, спрячем если его у модификации нет
if (modificationDescription.length > 0) {
goodsModDescriptionBlock.show() .html('<div>' + modificationDescription + '</div>');
} else {
goodsModDescriptionBlock.hide() .html();
}
// Идентификатор товарной модификации
goodsModificationId.val(modificationId);
} else {
// Отправим запись об ошибке на сервер
sendError('no modification by slug ' + slug);
alert('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.');
}
// Обновляем возможность выбора другой модификации для текущих значений свойств модификации товара.
updateVisibility(y);
});
});
// Кнопка добавления товара на сравнение сравнения товаров
$('.goodsDataCompareButton') .click(function () {
window.location.href = $(this) .attr('rel') + ($(this) .attr('rel') .indexOf('?') > - 1 ? '&' : '?') +
'id=' +
$('.goodsDataMainModificationId') .val() +
'&from=' +
$('input[name="form[goods_from]"]') .val();
return false;
});
// Сравнение товаров. Увеличение изображение при клике на ссылку увеличения и открытие галереии с изображениями этого товара
$('.CompareGoodsImageZoom') .click(function () {
// Галлерея фотографий для данной модификации товаров
var galleryBlock = $('.galleryBlock' + $(this) .attr('rel')),
// Главное изображение товара, которое сейчас стоит у товара
galleryMainImage = $('.CompareGoodsImageMain' + $(this) .attr('rel')),
// Изображение по которому нужно кликнуть в галлерее изображений
ImageIngallery = galleryBlock.find('.CompareGoodsImageGallery' + galleryMainImage.attr('rel'));
// Запускаем галлерею изображений от изображения товара, чтобы если например кликнули по гайке, то и открылись гайка, а не еще какой-либо изображение этого товара
ImageIngallery.nyroModalManual({
gallery: 'gallery' + $(this) .attr('rel')
});
return false;
});
// Сравнение товаров. Инвертирование свойств для сравнения товара
$('.CompareCheckbox.invert') .click(function () {
var checked = true,
checkboxes = $('.CompareCheckbox:not(.invert)');
checkboxes.each(function () {
if ($(this) .attr('checked')) {
checked = false;
return false;
}
});
checkboxes.each(function () {
$(this) .attr('checked', checked);
});
$(this) .attr('checked', checked);
});
// Сравнение товаров. Скрытие характеристик товара, которые выделил пользователь
$('.CompareGoodsHideSelected') .click(function () {
$('.CompareGoodsTableTbodyComparisonLine') .each(function () {
var CheckedCheckbox = $(this) .find('.CompareCheckbox:checked:not(.invert)');
if (CheckedCheckbox.length > 0) {
$(this) .hide();
}
});
// отменяем выделение характеристик товаров
$('.CompareCheckbox') .attr('checked', false);
return false;
});
// Сравнение товаров. Отображение скрытых характеристик товара
$('.CompareGoodsShowAll') .click(function () {
$('.CompareGoodsTableTbodyComparisonLine:hidden') .show();
return false;
});
// Сравнение товаров. Верхняя навигация изменение фильтра на отображение всех характеристик товаров
$('.CompareGoodsTableFilterShowAll') .click(function () {
$('.CompareGoodsTableFilterSelected') .removeClass('CompareGoodsTableFilterSelected');
$('.CompareGoodsTableTbodyComparisonLine:hidden') .show();
$(this) .addClass('CompareGoodsTableFilterSelected');
return false;
});
// Сравнение товаров. Фильтр в верхней навигации. Отображение только различающихся характеристик товара
$('.CompareGoodsTableFilterShowOnlyDifferent') .click(function () {
$('.CompareGoodsTableFilterSelected') .removeClass('CompareGoodsTableFilterSelected');
$('.CompareGoodsTableTbodyComparisonLine:not(.same)') .show();
$('.CompareGoodsTableTbodyComparisonLine.same') .hide();
$(this) .addClass('CompareGoodsTableFilterSelected');
return false;
});
// Сравнение товаров. При наведении на строку сравнения, она выделяется цветом
$('.CompareGoodsTableTbodyComparisonLine') .hover(function () {
$(this) .addClass('hover');
}, function () {
$(this) .removeClass('hover');
}
);
// При клике по строке выделяем свойство
$('.CompareGoodsTableTbodyComparisonLine td:not(.ceil1)') .click(function () {
var CompareCheckbox = $(this) .parent() .find('.CompareCheckbox');
if (CompareCheckbox.attr('checked')) {
CompareCheckbox.attr('checked', false);
} else {
CompareCheckbox.attr('checked', true);
}
});
// Форма регистрации нового пользователя, действие ссылки "показать пароль"
$('.clientForm .showPass') .click(function () {
ChangePasswordFieldType(this, $('#sites_client_pass'));
return false;
});
// Форма регистрации нового пользователя, при оформлении заказа
$('.OrderShowPass') .click(function () {
ChangePasswordFieldType(this, $('#contactPassWord'));
return false;
});
// При вводе пароля с caps lockом, покажет блок с сообщением для пользователя
$('#sites_client_pass, #contactPassWord') .capslock({
caps_lock_on: function () {
$('#caps_lock') .show();
},
caps_lock_off: function () {
$('#caps_lock') .hide();
}
});
// При оформлении заказа дадим возможность зарегистрироваться пользователю
$('#contactWantRegister') .click(function () {
if ($(this) .attr('checked')) {
$('.contactRegisterNeedElement') .show();
$('#contactEmail, #contactPassWord') .addClass('required');
} else {
$('.contactRegisterNeedElement') .hide();
$('#contactEmail, #contactPassWord') .removeClass('required');
}
});
// Добавление отзыва о товаре. Рейтинг
if (typeof ($('.goodsDataOpinionTableRating') .stars) == 'function') {
$('.goodsDataOpinionTableRating') .stars({
inputType: 'input',
split: 2,
captionEl: $('.goodsDataOpinionMsg'),
cancelShow: false
});
}
// Список отзывов о товаре. Ссылка на отображение формы для добавление отзыва о товаре
$('.goodsDataOpinionShowAddForm') .click(function () {
if (0 == $('#goodsDataOpinionAddBlock:visible') .length) {
$('#goodsDataOpinionAddBlock') .show('blind');
} else {
$('#goodsDataOpinionAddBlock') .hide('blind');
return false;
}
});
// Добавление отзыва о товаре. кнопка reset скрывающая форму добавления отзыва о товаре
$('.goodsDataOpinionAddForm input:reset') .click(function () {
$('#goodsDataOpinionAddBlock') .hide('blind');
});
// Иконка для обновления изображение капчи
$('.goodsDataOpinionCaptchaRefresh') .click(function () {
RefreshImageAction(this, 1, 1);
$('.goodsDataOpinionCaptchaImg') .attr('src', $('.goodsDataOpinionCaptchaImg') .attr('src') + '&rand' + Math.random(0, 10000));
return false;
});
// Фильтры по товарам. При нажании на какую-либо характеристику или свойство товара происходит фильтрация товаров
$('.contentTbodySearchFilterBlock input') .click(function () {
$(this) [0].form.submit();
});
var
// Минимальное значение цены для фильтра
priceFilterMinAvailable = parseInt($('.goodsFilterPriceRangePointers .min') .text())
// Максимальное значение цены для фильтра
,
priceFilterMaxAvailable = parseInt($('.goodsFilterPriceRangePointers .max') .text())
// Максимальное значение цены для фильтра
,
priceSliderBlock = $('#goods-filter-price-slider')
// Поле ввода текущего значения цены "От"
,
priceInputMin = $('#goods-filter-min-price')
// Поле ввода текущего значения цены "До"
,
priceInputMax = $('#goods-filter-max-price')
// Блок с кнопкой, которую есть смысл нажимать только тогда, когда изменялся диапазон цен.
,
priceSubmitButtonBlock = $('.goodsFilterPriceSubmit')
;
// Изменяет размер ячеек с ценой, т.к. у них нет рамок, есть смысл менять размеры полей ввода, чтобы они выглядили как текст
function priceInputsChangeWidthByChars() {
// Если есть блок указания минимальной цены
if (priceInputMin.length) {
priceInputMin.css('width', (priceInputMin.val() .length * 7 + 3) + 'px');
priceInputMax.css('width', (priceInputMax.val() .length * 7 + 3) + 'px');
}
}
// Слайдер, который используется для удобства выбора цены
priceSliderBlock.slider({
range: true,
min: priceFilterMinAvailable,
max: priceFilterMaxAvailable,
values: [
parseInt($('#goods-filter-min-price') .val()),
parseInt($('#goods-filter-max-price') .val())
],
slide: function (event, ui) {
priceInputMin.val(ui.values[0]);
priceInputMax.val(ui.values[1]);
priceSubmitButtonBlock.show();
priceInputsChangeWidthByChars();
}
});
// При изменении минимального значения цены
priceInputMin.keyup(function () {
var newVal = parseInt($(this) .val());
if (newVal < priceFilterMinAvailable) {
newVal = priceFilterMinAvailable;
}
priceSliderBlock.slider('values', 0, newVal);
priceSubmitButtonBlock.show();
priceInputsChangeWidthByChars();
});
// При изменении максимального значения цены
priceInputMax.keyup(function () {
var newVal = parseInt($(this) .val());
if (newVal > priceFilterMaxAvailable) {
newVal = priceFilterMaxAvailable;
}
priceSliderBlock.slider('values', 1, newVal);
priceSubmitButtonBlock.show();
priceInputsChangeWidthByChars();
});
// Обновить размеры полей ввода диапазона цен
priceInputsChangeWidthByChars();
// Действия при выборе варианта доставки на этапе оформления заказа
$('.deliveryRadio') .click(function () {
// Если текущая выделенная зона доставки не относится к выбранному варианту доставки, снимаем выделение с зоны доставки
if ($('.deliveryZoneRadio:checked') .attr('deliveryid') != $(this) .val()) {
$('.deliveryZoneRadio:checked') .click() .attr('checked', false);
}
});
// Действия при выборе зоны внутри варианта доставки на этапе оформления заказа
$('.deliveryZoneRadio') .click(function () {
var
deliveryId = $(this) .attr('deliveryid'),
deliveryZonePrice = $(this) .parent() .find('.deliveryZonePrice'),
deliveryTbody = $('.orderStageDeliveryListTable tbody[rel="' + deliveryId + '"]'),
deliveryBlock = deliveryTbody.find('#deliveryId' + deliveryId),
deliveryZonePriceBlock = deliveryTbody.find('.orderStageDeliveryZonePrice'),
deliveryDefaultPriceBlock = deliveryTbody.find('.orderStageDeliveryDefaultPrice')
;
// Если этот пункт уже выбран, при повторном клике пользователь видимо хочет снять выделение зоны доставки
if ('true' == $(this) .attr('rel')) {
$(this) .attr('checked', false);
$(this) .attr('rel', 'false');
// Показываем цену по умолчанию
deliveryDefaultPriceBlock.show();
// Скрываем цену образованную от зоны
deliveryZonePriceBlock.hide();
// Отмечаем у всех радио баттонов зон доставки свойство говорящее что они не отмечены
} else {
$('.deliveryZoneRadio') .attr('rel', 'false');
$(this) .attr('rel', 'true');
// Показываем цену по умолчанию
deliveryDefaultPriceBlock.hide();
// Скрываем цену образованную от зоны
deliveryZonePriceBlock.show() .html(deliveryZonePrice.html());
// Выделяем вариант доставки к которому относится зона доставки
deliveryBlock.attr('checked', true);
}
});
$('#deliveryConvenientDate') .datepicker({
dayNames: [
'Понедельник',
'Вторник',
'Среда',
'Четверг',
'Пятница',
'Суббота',
'Воскресенье'
],
dayNamesMin: [
'Вс',
'Пн',
'Вт',
'Ср',
'Чт',
'Пт',
'Сб'
],
closeText: 'Готово',
currentText: 'Сегодня',
duration: '',
monthNames: [
'Январь',
'Февраль',
'Март',
'Апрель',
'Май',
'Июнь',
'Июль',
'Август',
'Сентябрь',
'Октябрь',
'Ноябрь',
'Декабрь'
],
monthNamesShort: [
'Янв',
'Фев',
'Март',
'Апр',
'Май',
'Июнь',
'Июль',
'Авг',
'Сен',
'Окт',
'Ноя',
'Дек'
],
yearRange: '-6:+6',
dateFormat: 'dd.mm.yy',
minDate: new Date(),
firstDay: 1
});
});
//смена цены при изменении кол-ва товара
$(function () {
$('[name="form[goods_mod_quantity]"]') .keyup(function () {
var mod = $('select[name="form[properties][]"]') .val();
var list = $('.goodsDataMainModificationsList[rel="' + mod + '"]');
if (list.length) {
var price = parseFloat(list.find('.price_now_formated .num') .text() .replace(/\W+/, ''));
var total = (price * parseInt($(this) .val()));
$('.goodsDataMainModificationPriceNow .num') .text(number_format(total, 0, ',', ' '));
}
});
});
$(function () {
/*ДОБАВИЛА СТРЕЛКИ ДЛЯ КОЛ-ВА ТОВАРА*/
$('.qty-plus') .live('click', function () {
var
quantity = $(this) .parent() .find('.quantity'),
currentVal = parseInt(quantity.val())
;
if (!isNaN(currentVal)) {
quantity.val(currentVal + 1);
quantity.trigger('keyup');
}
return false;
});
$('.qty-minus') .live('click', function () {
var
quantity = $(this) .parent() .find('.quantity'),
currentVal = parseInt(quantity.val())
;
if (!isNaN(currentVal) && !(currentVal <= 1)) {
quantity.val(currentVal - 1);
quantity.trigger('keyup');
}
return false;
});
});
// Инициализируем табы на странице
$(function () {
initTabs();
});
//всплывающее окно
$(function () {
$('#dostavka') .click(function () {
$('#parent_popup1') .show();
return (false);
})
});
//скользящая корзина
$(function () {
$('form.goodsDataForm, form.goodsToCartFromCompareForm, form.goodsListForm') .each(function () {
$(this) .addClass('ajaxForm');
});
$(this) .find('.listing, .goodsDataMainImage, .goodsListItemBlock') .addClass('form-block-wrapper');
$(this) .find('.listing img, .goodsDataMainImage img, .goodsListItemImage img') .addClass('product-img');
$('form.ajaxForm') .submit(function () {
var formData = $(this) .serializeArray();
formData.push({
name: 'ajax_q',
value: 1
});
$.post($(this) .attr('action'), formData, $.proxy(function (html) {
$('#cartSum') .html($(html) .find('.newCartSum') .html());
$('#cartCount') .html($(html) .find('.newCartCount') .html());
var wrapper = $(this) .closest('.form-block-wrapper') .length ? $(this) .closest('.form-block-wrapper') : $(this);
var product_img = wrapper.find('.product-img');
var img = product_img.clone() .appendTo($('body'));
img.css({
position: 'absolute',
left: product_img.offset() .left,
top: product_img.offset() .top,
display: 'block',
zIndex: 999
}) .animate({
width: 0,
height: 0,
left: $('#cartInfo') .offset() .left,
top: $('#cartInfo') .offset() .top
}, 800, 'linear', function () {
$(this) .remove();
});
}, this));
return (false);
});
});