/**
 * Функция проверки заполнения полей
 * @param code {string} id поля input
 * @param reg {string} регулярное выражение
 * @param field_name {string} название поля (подставляется в сообщение об ошибках)
 * @param warning_msg {string} более подробные сведения о несоответствии формату
 * @param both_msg {bool} 1 - проверка на соответствие формату и пустоту
 *                        0 - проверка на соответствие формату
 *
 * Для корректной работы требуется файл shopper_style.css
 */
function verify(code, reg, field_name, warning_msg, both_msg) {
	//Проверка на существование такого пол
	if (!$('#'+code).length) return '';

	//Форматирование warning сообщени
	if (warning_msg) {
		warning_msg=' ('+warning_msg+')';
	}

	//Если параметр both_msg равен 1, проверяем поле на пустоту
	//и соответствие формату регулярного выражени
	if (both_msg) {
		if (!$('#'+code).val()) {
			if ($('#'+code).hasClass('ok')) $('#'+code).removeClass('ok');
			$('#'+code).addClass('error');
			return '   • Пустое поле "'+field_name+'"\n';
		}
		else if (!(reg.test(trim($('#'+code).val())))) {
			if ($('#'+code).hasClass('ok')) $('#'+code).removeClass('ok');
			$('#'+code).addClass('error');
			return '   • Неверно заполнено поле "'+field_name+'"'+warning_msg+'\n';
		}
		else {
			if ($('#'+code).hasClass('error')) {
				$('#'+code).removeClass('error');
				$('#'+code).addClass('ok');
			}
			return '';
		}
	}

	//Если параметр both_msg равен 0, проверяем поле только на
	//соответствие формату регулярного выражени
	else {
		if ($('#'+code).val() && !(reg.test(trim($('#'+code).val())))) {
			if ($('#'+code).hasClass('ok')) $('#'+code).removeClass('ok');
			$('#'+code).addClass('error');
			return '   • Неверно заполнено поле "'+field_name+'"'+warning_msg+'\n';
		}
		else {
			if ($('#'+code).hasClass('error')) {
				$('#'+code).removeClass('error');
				$('#'+code).addClass('ok');
			}
			return '';
		}
	}
}

function trim(str) {
	return str.replace(/^\s*|\s*$/g, '');
}

/**
 * Функция проверки нажатия цифровой клавиши
 * @param keyCode {int}
 */
function check_digit_keys(keyCode) {
	if ((keyCode < 48 || keyCode > 57)	// Digit Keys 0-9
		&& keyCode != 8					// Backspace
		&& keyCode != 13				// Enter
		&& keyCode != 37				// Left Arrow
		&& keyCode != 39				// Right Arrow
		&& keyCode != 46				// Delete
		) { return false; }
}



/**
 * Функция форматирования чисел
 */
function number_format(number, decimals, dec_point, thousands_sep) {
	var i, j, kw, kd, km;

	if(isNaN(decimals = Math.abs(decimals))){
		decimals = 2;
	}
	if(dec_point == undefined){
		dec_point = ",";
	}
	if(thousands_sep == undefined){
		thousands_sep = ".";
	}

	i = parseInt(number = (+number || 0).toFixed(decimals)) + "";

	if((j = i.length) > 3) {
		j = j % 3;
	} else {
		j = 0;
	}

	km = (j ? i.substr(0, j) + thousands_sep : "");
	kw = i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands_sep);
	kd = (decimals ? dec_point + Math.abs(number - i).toFixed(decimals).replace(/-/, 0).slice(2) : "");

	return km + kw + kd;
}



/**
 * Функция просмотра полноразмерных изображений
 */
function view_img(url, width, height) {
	width = parseInt(width);
	height = parseInt(height);

	if (!width || !height) {
		return false;
	}

	var ratio = width / height;

	$('#dialog_view img').attr('width', width);
	$('#dialog_view img').attr('src', url);

	if (width > 800) {
		width = 800;
		$('#dialog_view img').attr('width', width);
	} else if (height > 600) {
		width = 600 * ratio;
		$('#dialog_view img').attr('width', width);
	}

	$('#dialog_view').dialog({
		title: 'Просмотр',
		position: ['auto',200],
		autoOpen: false,
		resizable: false,
		modal: true
	});

	$('#dialog_view').dialog('option', 'width', (width + 26) + 'px');
	$('#dialog_view').dialog('open');
}



/**
 * Функция обработки показа изображений на странице футболок
 */
function replace_img(image_url, width) {
	$('#main_image').html('<img src="' + image_url + '" border="0" width="' + width + '" alt="Изображение" />');
}



/**
 * Функция вывода основного изображения на странице футболок
 */
function set_default_img(image_url, width) {
	$('#main_image').html('<img src="' + image_url + '" border="0" width="' + width + '" alt="Изображение" />');
}



/**
 * Прокрутка списка футболок по маркерам
 */
function scrollto(id) {
	// Перемотка в начало списка
	$('div.list_box').scrollTop(0);
	// Вычисление позиции вложенного элемента
	var position = $('#'+id).position();
	// Скролинг до выбранного маркера
	$('div.list_box').scrollTop(position.top);
}


/**
 * Функция формирования шапки
 **/
function set_header() {
	var new_width_screen;
	var is_ie = false;

	if (window.innerWidth) {
		new_width_screen = window.innerWidth;
	} else if (document.body && document.body.clientWidth) {
		new_width_screen = document.body.clientWidth;
		is_ie = true;
	}

	$('#telefon').css('top', '43px');

	$('#work_time').css('top', '134px');
	$('#work_time').css('left', '291px');
	$('#one_line').show();
	$('#two_line').hide();

	$('#small_cart').css('top', '0px');
	$('#small_cart').css('left', '808px');

	$('#small_cart_img').css('left', '26px');

	$('#small_cart_text').css('top', '90px');
	$('#small_cart_text').css('left', '0px');


	if ((is_ie && new_width_screen < 1259) || (!is_ie && new_width_screen < 1274)) {
		// Шапка
		$('#telefon').css('top', '43px');

		$('#work_time').css('top', '134px');
		$('#work_time').css('left', '291px');
		$('#one_line').show();
		$('#two_line').hide();

		$('#small_cart').css('top', '0px');
		$('#small_cart').css('left', '808px');

		$('#small_cart_img').css('left', '26px');

		$('#small_cart_text').css('top', '90px');
		$('#small_cart_text').css('left', '0px');

		// Видео баннер
		$('#video_banner').hide();

		// Баннеры доставки
		$('#banner_bottom').show();
		$('#banner_right').hide();
	} else {
		// Шапка
		$('#telefon').css('top', '58px');

		$('#work_time').css('top', '58px');
		$('#work_time').css('left', '746px');
		$('#one_line').hide();
		$('#two_line').show();

		$('#small_cart').css('top', '16px');
		$('#small_cart').css('left', '934px');

		$('#small_cart_img').css('left', '0px');

		$('#small_cart_text').css('top', '42px');
		$('#small_cart_text').css('left', '112px');

		// Видео баннер
		$('#video_banner').show();

		// Баннеры доставки
		$('#banner_bottom').hide();
		$('#banner_right').show();
	}
}



/**
 * Функция формирования меню и шапки, в зависимости от разрешения экрана.
 * Если разрешение >= 1300px, то выводится в две колонки.
 * В противном случае - в одну.
 */
function set_menu_type() {
	var new_width_screen;
	var is_ie = false;

	if (window.innerWidth) {
		new_width_screen = window.innerWidth;
	} else if (document.body && document.body.clientWidth) {
		// Если браузер поддерживает объект document.body и метод .clientWidth
		new_width_screen = document.body.clientWidth;
		is_ie = true;
	}

	if ((is_ie && new_width_screen < 1259) || (!is_ie && new_width_screen < 1274)) {
		// Меню
		$('#menu_column').css('width', '195px');
	} else {
		// Меню
		$('#menu_column').css('width', '305px');
	}
}



/**
 * Функция оптимизации вывода квадратной таблицы товаров.
 * В зависимости от разрешения экрана скрываются лишние позиции
 */
function set_dimension() {
	var new_width_screen;
	var is_ie = false;

	if (window.innerWidth) {
		new_width_screen = window.innerWidth;
	} else if (document.body && document.body.clientWidth) {
		// Если браузер поддерживает объект document.body и метод .clientWidth
		new_width_screen = document.body.clientWidth;
		var is_ie = true;
	}

	// Обработчик количества отображаемых товаров на главной странице
	if ((is_ie && new_width_screen < 1080) || (!is_ie && new_width_screen < 1097)) {
		max_count_select = 4;
	} else if ((is_ie && new_width_screen >= 1080 && new_width_screen < 1248) || (!is_ie && new_width_screen >= 1097 && new_width_screen < 1265)) {
		max_count_select = 5;
	} else if ((is_ie && new_width_screen >= 1248 && new_width_screen < 1259) || (!is_ie && new_width_screen >= 1265 && new_width_screen < 1274)) {
		max_count_select = 6;
	} else if ((is_ie && new_width_screen >= 1259 && new_width_screen < 1333) || (!is_ie && new_width_screen >= 1274 && new_width_screen < 1350)) {
		max_count_select = 5;
	} else if ((is_ie && new_width_screen >= 1333 && new_width_screen < 1501) || (!is_ie && new_width_screen >= 1350 && new_width_screen < 1518)) {
		max_count_select = 6;
	} else if ((is_ie && new_width_screen >= 1501 && new_width_screen < 1669) || (!is_ie && new_width_screen >= 1518 && new_width_screen < 1686)) {
		max_count_select = 7;
	} else if ((is_ie && new_width_screen >= 1669 && new_width_screen < 1837) || (!is_ie && new_width_screen >= 1686 && new_width_screen < 1854)) {
		max_count_select = 8;
	} else if ((is_ie && new_width_screen >= 1837) || (!is_ie && new_width_screen >= 1854)) {
		max_count_select = 9;
	}

	// Скрыть товары, которые не влезают
	if (new_width_screen <= width_screen) {
		for (var i = max_count_select; i < 9; i ++) {
			$('div.ident_'+i).hide();
		}
	} else {
		for (var i = 0; i < max_count_select; i ++) {
			$('div.ident_'+i).show();
		}
	}

	width_screen = new_width_screen;
}



function open_size_dialog(category_name) {
	var html_content="";

	switch (category_name) {
		case "original_tshirt":
			html_content+="<table class=\"bordered\">"+
			"<tr><th>&nbsp;</th><th colspan=\"2\">Мужские размеры</th><th colspan=\"2\">Женские размеры</th></tr>"+
			"<tr><th>Классификация США</th><th>Стандарт РФ</th><th>Рост (см)</th><th>Стандарт РФ</th><th>Рост (см)</th></tr>"+
			"<tr><td>S</td><td align=\"center\">42-44</td><td align=\"center\">174</td><td align=\"center\">42-44</td><td  align=\"center\">163</td></tr>"+
			"<tr><td>M</td><td align=\"center\">46-48</td><td align=\"center\">180</td><td align=\"center\">46-50</td><td align=\"center\">168</td></tr>"+
			"<tr><td>L</td><td align=\"center\">50-52</td><td align=\"center\">186</td><td align=\"center\">50-52</td><td align=\"center\">173</td></tr>"+
			"<tr><td>XL</td><td align=\"center\">54-56</td><td align=\"center\">192</td><td colspan=\"2\" rowspan=\"3\">&nbsp;</td></tr>"+
			"<tr><td>XXL</td><td align=\"center\">58-60</td><td align=\"center\">198</td></tr>"+
			"<tr><td>XXXL</td><td align=\"center\">62-64</td><td align=\"center\">204</td></tr>"+
			"</table>";
			break;
		case "man_tshirt":
			html_content+="<table class=\"bordered\">"+
			"<tr><th colspan=\"3\">Мужские размеры</th></tr>"+
			"<tr><th>Классификация США</th><th>Стандарт РФ</th><th>Рост (см)</th></tr>"+
			"<tr><td>S</td><td align=\"center\">42-44</td><td align=\"center\">174</td></tr>"+
			"<tr><td>M</td><td align=\"center\">46-48</td><td align=\"center\">180</td></tr>"+
			"<tr><td>L</td><td align=\"center\">50-52</td><td align=\"center\">186</td></tr>"+
			"<tr><td>XL</td><td align=\"center\">54-56</td><td align=\"center\">192</td></tr>"+
			"<tr><td>XXL</td><td align=\"center\">58-60</td><td align=\"center\">198</td></tr>"+
			"<tr><td>XXXL</td><td align=\"center\">62-64</td><td align=\"center\">204</td></tr>"+
			"</table>";
			break;
		case "woman_tshirt":
			html_content+="<table class=\"bordered\">"+
			"<tr><th colspan=\"3\">Женские размеры</th></tr>"+
			"<tr><th>Классификация США</th><th>Стандарт РФ</th><th>Рост (см)</th></tr>"+
			"<tr><td>S</td><td align=\"center\">42-44</td><td align=\"center\">163</td></tr>"+
			"<tr><td>M</td><td align=\"center\">46-50</td><td align=\"center\">168</td></tr>"+
			"<tr><td>L</td><td align=\"center\">50-52</td><td align=\"center\">173</td></tr>"+
			"</table>";
			break;
		case "child_tshirt":
			html_content+="<table class=\"bordered\">"+
			"<tr><th colspan=\"3\">Детские размеры</th></tr>"+
			"<tr><th>Классификация США</th><th>Возраст</th><th>Рост (см)</th></tr>"+
			"<tr><td>3XS</td><td align=\"center\">2</td><td align=\"center\">86</td></tr>"+
			"<tr><td>2XS</td><td align=\"center\">4</td><td align=\"center\">104</td></tr>"+
			"<tr><td>XS</td><td align=\"center\">6</td><td align=\"center\">116</td></tr>"+
			"<tr><td>S</td><td align=\"center\">8</td><td align=\"center\">128</td></tr>"+
			"<tr><td>M</td><td align=\"center\">10</td><td align=\"center\">140</td></tr>"+
			"</table>";
			break;
	}
	$('#dialog_size').dialog({title: 'Таблица размеров', modal:true, width: 'auto', draggable:true, resizable:false, bgiframe:true, autoOpen:false});
	$('#dialog_size').html(html_content);
	$('#dialog_size').dialog('open');
}

/**
 * Проверка полей регистрации
 */
function check_regform() {
	error_msg = '';

	error_msg += verify('regform input[name=user_email]', /^\w+([\.-]?[\w,\-]+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/, 'Электронная почта', 'допустимо использовать только латинские буквы, цифры, знак подчеркивания "_", точку ".", минус "-"', 1);
	error_msg += verify('regform input[name=last_name]', /^[a-z,A-Z,а-я,А-Я,ё,й]+$/, 'Фамилия', '', 1);
	error_msg += verify('regform input[name=first_name]', /^[a-z,A-Z,а-я,А-Я,ё,й]+$/, 'Имя', '', 1);
	error_msg += verify('regform input[name=middle_name]', /^[a-z,A-Z,а-я,А-Я,ё,й]+$/, 'Отчество', '', 0);
	error_msg += verify('regform input[name=phone_1]', /^[\d,\+,\(,\),\-,\s]{4,32}$/, 'Городской телефон', '', 0);
	error_msg += verify('regform input[name=phone_2]', /^[\d,\+,\(,\),\-,\s]{4,32}$/, 'Мобильный телефон', '', 1);
	error_msg += verify('regform input[name=password]', /^.+$/, 'Новый пароль', '', 1);
	error_msg += verify('regform input[name=password2]', /^.+$/, 'Подтвердить пароль', '', 1);
	error_msg += verify('regform input[name=partner_site]', /^(?:https?:\/\/|www\.)[\w,\-]{3,128}\.[\w,\-]{0,24}\.?[a-z,A-Z]{1,3}\/?$/i, 'Адрес партнёрского сайта', '', 1);

	if (error_msg) {
		alert ('Пожалуйста, исправьте следующие ошибки:\n'+error_msg);
		return false;
	} else {
		// Проверяем, совпадают ли значение нового и подтверждённого парол
		if ($('#regform input[name=password]').val() != $('#regform input[name=password2]').val()) {
			if ($('#regform input[name=password]').hasClass('ok')) {
				$('#regform input[name=password]').removeClass('ok');
			}
			if ($('#regform input[name=password2]').hasClass('ok')) {
				$('#regform input[name=password2]').removeClass('ok');
			}
			$('#regform input[name=password]').addClass('error');
			$('#regform input[name=password2]').addClass('error');
			alert ('Новый пароль и подтверждённый не совпадают');
			return false;
		}
		// Проверка дублирования e-mail
		if (check_email($('#regform input[name=user_email]').val())) {
			return true;
		}
	}
}

/**
 * Верификация формы авторизации зарегистрированного пользовател
 */
function check_authform() {
	error_msg='';

	//Проверка правильности ввода email
	error_msg += verify('authform input[name=user_email]', /^\w+([\.-]?[\w,\-]+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/, 'Электронная почта', 'допустимо использовать только латинские буквы, цифры, знак подчеркивания "_", точку ".", минус "-"', 1);
	error_msg += verify('authform input[name=password]', /^.+$/, 'Пароль', '', 1);

	if (error_msg) {
		alert ('Пожалуйста, исправьте следующие ошибки:\n'+error_msg);
		return false;
	} else {
		//AJAX запросом проверяем существование такого email в БД
		//от этого зависит какой шаг регистрации будет следующий (2 или 3)
		if (login($('#authform input[name=user_email]').val(), $('#authform input[name=password]').val())) {
			return true;
		}
	}
}

/**
 * Определение версии браузера
 */
function browserDetectNav(chrAfterPoint) {
	var
		UA=window.navigator.userAgent,       // содержит переданный браузером юзерагент

		OperaB = /Opera[ \/]+\w+\.\w+/i,     //
		OperaV = /Version[ \/]+\w+\.\w+/i,   //
		FirefoxB = /Firefox\/\w+\.\w+/i,     // шаблоны для распарсивания юзерагента
		ChromeB = /Chrome\/\w+\.\w+/i,       //
		SafariB = /Version\/\w+\.\w+/i,      //
		IEB = /MSIE *\d+\.\w+/i,             //
		SafariV = /Safari\/\w+\.\w+/i,       //

		browser = new Array(),               //массив с данными о браузере
		browserSplit = /[ \/\.]/i,           //шаблон для разбивки данных о браузере из строки
		OperaV = UA.match(OperaV),
		Firefox = UA.match(FirefoxB),
		Chrome = UA.match(ChromeB),
		Safari = UA.match(SafariB),
		SafariV = UA.match(SafariV),
		IE = UA.match(IEB),
		Opera = UA.match(OperaB);

	//----- Opera ----
	if ((!Opera == "")&(!OperaV == "")) {
		browser[0] = OperaV[0].replace(/Version/, "Opera");
	} else {
		if (!Opera == "") {
			browser[0] = Opera[0];
		} else {
			//----- IE -----
			if (!IE=="") {
				browser[0] = IE[0];
			} else {
				//----- Firefox ----
				if (!Firefox=="") {
					browser[0] = Firefox[0];
				} else {
					//----- Chrom ----
					if (!Chrome=="") {
						browser[0] = Chrome[0];
					} else {
						//----- Safari ----
						if ((!Safari=="") && (!SafariV=="")) {
							browser[0] = Safari[0].replace("Version", "Safari");
						}
					}
				}
			}
		}
	}
	//------------ Разбивка версии -----------

	var
		outputData;		// возвращаемый функцией массив значений
						// [0] - имя браузера, [1] - целая часть версии
						// [2] - дробная часть версии
	if (browser[0] != null) {
		outputData = browser[0].split(browserSplit);
	}
	if ((chrAfterPoint==null)&&(outputData != null)) {
			chrAfterPoint=outputData[2].length;
			outputData[2] = outputData[2].substring(0, chrAfterPoint); // берем нужное ко-во знаков
			return(outputData);
	} else {
		return(false);
	}
}

function showBrowVer() {
	var
	data = browserDetectNav();	//вызываем функцию, параметр НЕ передаем,
								//поэтому в результате получим все знаки версии после запятой
	//alert("Браузер: "+data[0]+", Версия: "+data[1]+"."+data[2]); //выводим результат
	return data[0];
}

