
//http://blog.stevenlevithan.com/archives/faster-trim-javascript
//функция удаляет пробелы по краям строки
function trim(str) {	//trim12
	var	str = str.replace(/^\s\s*/, ''),
		ws = /\s/,
		i = str.length;
	while (ws.test(str.charAt(--i)));
	return str.slice(0, i + 1);
}


//функция назначается как метод объекта String
//позволяет заменять одни подстроки на другие (в любом количестве, а не только первое вхождение)
String.prototype.replaceAll = function(search, replace){
	return this.split(search).join(replace);
}


//функция проверки формы "вопрос-ответ"
function checkVotForm( form ){
	var result = true;
	if( typeof(form) === 'undefined' || form === null ){
		alert('Ошибка формы');
		result = false;
	}
	//проверяем значения полей
	if( trim(form.name.value) == '' ){
		alert("Вы не заполнили поле Имя.");
		form.name.focus();
		result = false;
	}else if( trim(form.email.value) == '' ){
		alert("Вы не заполнили поле E-mail.");
		form.email.focus();
		result = false;
	}else if( checkEmail(form.email.value) === false ){
		alert("Пожалуйста, введите корректный E-mail.");
		form.email.focus();
		result = false;
	}else if( trim(form.text.value) == '' ){
		alert("Вы не заполнили поле Сообщение.");
		form.question.focus();
		result = false;
	}
	return result;
}

function sendVotForm(){
	var form = document.forms['votForm'];
	if( checkVotForm(form) ){
		form.submit();
	}
}


//--------------------------------------------------------------------------------------
function showPhysFields()
{
 var form = '<table  class="register" cellpadding="7">'+
 '<tr><td>Серия и номер паспорта</td><td><input type="text" name="passport" size="40"/></td></tr>'+
 '<tr><td>Кем выдан</td><td><input type="text" name="whom" size="40"/></td></tr>'+
 '<tr><td>Дата выдачи</td><td><input type="text" name="when" size="40"/></td></tr>'+
 '<tr><td>Адрес прописки</td><td><input type="text" name="address_prop" size="40"/></td></tr>'+
 '<tr><td>Адрес доставки товара</td><td><input type="text" name="address_dest" size="40"/></td></tr>'+
 '<tr><td>Дата рождения</td><td><input type="text" name="birthdate" size="40"/></td></tr>'+
 '</table>';
 
 document.getElementById('facefields').innerHTML = form;
}
//--------------------------------------------------------------------------------------
function showLawFields()
{
 var form = '<table class="register" cellpadding="7">'+
 '<tr><td>Наименование организации</td><td><input type="text" name="company" size="40"/></td></tr>'+
 '<tr><td>Инн/кпп</td><td><input type="text" name="inn" size="40"/></td></tr>'+
 '<tr><td>Банк</td><td><input type="text" name="bank" size="40"/></td></tr>'+
 '<tr><td>Р/с</td><td><input type="text" name="rs" size="40"/></td></tr>'+
 '<tr><td>БИК</td><td><input type="text" name="bik" size="40"/></td></tr>'+
 '<tr><td>К/с</td><td><input type="text" name="ks" size="40"/></td></tr>'+
 '<tr><td>Юридический адрес организации</td><td><input type="text" name="address_j" size="40"/></td></tr>'+
 '<tr><td>Адрес доставки товара</td><td><input type="text" name="address_dest" size="40"/></td></tr>'+
 '<tr><td>ФИО Директора</td><td><input type="text" name="fiodir" size="40"/></td></tr>'+
 '<tr><td>Дата рождения директора</td><td><input type="text" name="birthdate" size="40"/></td></tr>'+
 '<tr><td>День рождения фирмы</td><td><input type="text" name="birthdate_firm" size="40"/></td></tr>'+
 '<tr><td>Контактный номер телефона</td><td><input type="text" name="phone_2" size="40"/></td></tr>'+
 '<tr><td>Контактное лицо</td><td><input type="text" name="contactface" size="40"/></td></tr>'+
 '</table>';
 
 document.getElementById('facefields').innerHTML = form;
}
//----------------------------------------------------------
function reject()
{
 alert('Мы понимаем Ваши опасения! Заказать воду "Подгородная" вы можете по телефону 948-948, также предварительно заключив договор. Уже являясь нашим клиентом, вы можете заказывать товары с помощью сайта. Повторная регистрация не потребует от Вас ваших личных данных или данных о вашей организации. Спасибо!');
}

//---------------------------------------------------
function addField()
{
 is_client = 1;
 document.getElementById('addf1').innerHTML = 'На кого оформлен договор (фио или название организации)? *';
 document.getElementById('addf2').innerHTML = '<input type="text" size="35" maxlength="250" id="uwhom" name="uwhom"/>';
}
//------------------------------------------------------
function delField()
{
 is_client = 0;

 document.getElementById('addf1').innerHTML = '';
 document.getElementById('addf2').innerHTML = '<p>Прежде чем воспользоваться своим личным кабинетом, чтобы сделать заказ, Вам нужно указать ваши данные для заключения договора на поставку воды. Ваш экземпляр договора вам привезут с первой    поставкой воды</p>' + 
   '<input type="radio" name="face" value="1" onclick="showPhysFields()"/> Физическое лицо<br/>' + 
   '<input type="radio" name="face" value="2" onclick="showLawFields()"/> Юридическое лицо<br/><br/>' + 
   '<div id="facefields">' + 
   '</div>' + 
   '<br/>' + 
   '<input type="button" value="Я отказываюсь предоставить данные о себе или своей организации" onclick="reject()"/>';
}
//-------------------------------------------------------
function checkRegForm()
{
 var uname = document.getElementById('uname').value;
 var ulastname = document.getElementById('ulastname').value;
 var upatr = document.getElementById('upatr').value;
 var uemail = document.getElementById('uemail').value;
 var uphone = document.getElementById('uphone').value;
 var ulogin = document.getElementById('ulogin').value;
 var upass1 = document.getElementById('upass1').value;
 var upass2 = document.getElementById('upass2').value;

 var reg = /^[_0-9a-zA-Z\.-]+@([0-9a-zA-Z-]+\.)+[a-zA-Z]{2,4}$/;

   if (ulogin=='')
     { 
      alert('Вы не заполнили поле Логин');
      return false;
     }
	 
  if (upass1=='')
     { 
      alert('Вы не заполнили поле Пароль');
      return false;
     }

  if (upass2=='')
     { 
      alert('Вы не заполнили поле Подтверждение пароля');
      return false;
     }	 

  if (ulastname=='')
     { 
      alert('Вы не заполнили поле Фамилия');
      return false;
     }


  if (uname=='')
     { 
      alert('Вы не заполнили поле Имя');
      return false;
     }


  if (upatr=='')
     { 
      alert('Вы не заполнили поле Отчество');
      return false;
     }


  if (uemail=='')
     { 
      alert('Вы не заполнили поле Электронная почта');
      return false;
     }

  if (uphone=='')
     { 
      alert('Вы не заполнили поле Телефон');
      return false;
     }	 
	 
   if (!reg.test(uemail))
     { 
      alert('Неверный формат электронной почты');
      return false;
     }

  if (is_client==1) 
   {
     if (document.getElementById('uwhom').value=='') 
     { 
      alert('Вы не заполнили поле На кого оформлен договор');
      return false;
     }

       
   }

return true;

}
//-------------------------------------------------------------


//проверка корректности e-mail
function checkEmail(email){
	var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	if(reg.test(email) == false) {
		return false;
	}
	return true;
}


// fastcoder(.)org(/)articles(/)?aid=18 
// Установить куки 
function setCookie(name, value){
      var valueEscaped = escape(value);
      var expiresDate = new Date();
      expiresDate.setTime(expiresDate.getTime() + 365 * 24 * 60 * 60 * 1000); // срок - 1 год, но его можно изменить
      var expires = expiresDate.toGMTString();
      var newCookie = name + "=" + valueEscaped + "; path=/; expires=" + expires;
      if (valueEscaped.length <= 4000) document.cookie = newCookie + ";";
}

// Получить куки 
function getCookie(name) { 
      var prefix = name + "="; 
      var cookieStartIndex = document.cookie.indexOf(prefix); 
      if (cookieStartIndex == -1) return null; 
      var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length); 
      if (cookieEndIndex == -1) cookieEndIndex = document.cookie.length; 
      return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex)); 
}


//функция центрирует указанный элемент посередине экрана с учетом прокрутки
//метод заявлен как кроссбраузерный
//http://www.xiper.net/collect/js-plugins/position-and-size/position-with-scroll.html
//элемент должен обладать четко установленными размерами height & width
function setOnCenterScreen(element){
	var elem = null;
	//определяем элемент
	if( typeof(element) == "object" ){
		elem = element;
	}else if ( typeof(element) == "string" ){
		elem = document.getElementById(element);
		if( typeof(elem) == 'undefined' ) { return false; }	//элемент не найден
	}
	//центрируем
	var h = elem.offsetWidth;	//размеры элемента
	var w = elem.offsetHeight;
	//размерчики рабочей области окна
	var windowSize = new Array();
	if (window.innerHeight !== undefined){
		windowSize= [window.innerWidth,window.innerHeight]    // для основных браузеров
	}else{ // для (IE 6-8)
		SizeIE = (document.body.clientWidth) ? document.body : document.documentElement; 
		windowSize = [SizeIE.clientWidth, SizeIE.clientHeight];
	}
	// центрируем блок по горизонтали
	elem.style.left = windowSize[0]/2 - w/2 + "px";
	// центрируем блок по вертикали + скролл
	elem.style.top = windowSize[1]/2 - h/2 + (document.body.scrollTop || document.documentElement.scrollTop) + "px";
	return true;
}


//форматирование чисел
/*
http://art-blog.ru/blog/topic/49/

Вызов функции:

string number_format ( float number [, object cfg ] )

Как видно выше, второй параметр (кстати, не обязательный) — объект. Для PHP передача такого параметра нетрадиционна, но все чаще встречается в js. Меня поймут все, кто хоть раз использовал jQuery или SWFObject, например.

Параметр cfg имеет пять свойств:
before — произвольные символы, которые будут вставлены перед числом (по-умолчание ничего)
after — произвольные символы, которые будут вставлены после числа (по-умолчание ничего)
decimals — число символов после запятой (точки :) (по-умолчанию 2)
dec_point — разделитель между целой и дробной частями числа (по-умолчанию «.»)
thousands_sep — разделитель тысяч в целой части числа (по-умолчанию «,»)

пример:
number_format(number, {thousands_sep: " ", dec_point: ","});

*/
function number_format(_number, _cfg){
  function obj_merge(obj_first, obj_second){
    var obj_return = {};
    for (key in obj_first){
      if (typeof obj_second[key] !== 'undefined') obj_return[key] = obj_second[key];
      else obj_return[key] = obj_first[key];
      }
    return obj_return;
  }
  function thousands_sep(_num, _sep){
    if (_num.length <= 3) return _num;
    var _count = _num.length;
    var _num_parser = '';
    var _count_digits = 0;
    for (var _p = (_count - 1); _p >= 0; _p--){
      var _num_digit = _num.substr(_p, 1);
      if (_count_digits % 3 == 0 && _count_digits != 0 && !isNaN(parseFloat(_num_digit))) _num_parser = _sep + _num_parser;
      _num_parser = _num_digit + _num_parser;
      _count_digits++;
      }
    return _num_parser;
  }
  if (typeof _number !== 'number'){
    _number = parseFloat(_number);
    if (isNaN(_number)) return false;
  }
  var _cfg_default = {before: '', after: '', decimals: 2, dec_point: '.', thousands_sep: ','};
  if (_cfg && typeof _cfg === 'object'){
    _cfg = obj_merge(_cfg_default, _cfg);
  }
  else _cfg = _cfg_default;
  _number = _number.toFixed(_cfg.decimals);
  if(_number.indexOf('.') != -1){
    var _number_arr = _number.split('.');
    var _number = thousands_sep(_number_arr[0], _cfg.thousands_sep) + _cfg.dec_point + _number_arr[1];
  }
  else var _number = thousands_sep(_number, _cfg.thousands_sep);
  return _cfg.before + _number + _cfg.after;
}


function getMousePageXY(e){
  var x = 0, y = 0;

  if (!e) e = window.event;

  if (e.pageX || e.pageY)
  {
    x = e.pageX;
    y = e.pageY;
  }
  else if (e.clientX || e.clientY)
  {
    x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
    y = e.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop;
  }

  return {"x":x, "y":y};
}


//функция выравнивает высоту вертикальных блоков
//в аргументах может передаваться любое количество идентификаторов блоков в строковом виде
//например: letAjustDivsHeight("leftBloc","centerBlock","rightBlock")
function letAjustDivsHeight(){
	if( arguments.length == 0 ){
		return false;
	}
	var divs = new Array();
	var tmp = null;
	var maxHeight = 0;
	for( i=0; i<arguments.length; i++ ){
		tmp = document.getElementById( arguments[i] );
		if( (tmp != null) && (typeof(tmp) != 'undefined') ){
			divs[i] = tmp;
			if( tmp.offsetHeight > maxHeight ){
				maxHeight = tmp.offsetHeight;
			}
		}
	}
	if( divs.length == 0 ){
		return false;
	}
	for( i=0; i<divs.length; i++ ){
		divs[i].style.height = maxHeight + "px";
	}
	return true;
}



/**
	Стилизованные checkbox'ы
	ArtProduct.ru
	05.2011
	Куцевалов К.Д.
	
	Принцип работы
		Оригинальные <input type=checkbox/> делаются [display=none], а возле них создается <span> с background'ом и событием onclick,
		при котором у input'a меняется атрибут checked.
		Таким образом при [submit], не выбранный <input type=checkbox/> отправлен на сервер(скрипту) не будет.
	Стили
		Каждый чекбокс (span) имеет всего два класса которыми можно манипулировать в CSS: artCheckbox и checked.
		Соответственно .artCheckbox - не выбран, .artCheckbox.checked - выбран.
*/

if( typeof art === 'undefined' ){ var art = {}; }

//стили
art.checkBoxCSS = ".artCheckbox {" +
		"display: inline-block;" +
		"background-repeat: no-repeat;" +
		"background-position: 0% 0%;" +
		"cursor: pointer; }" +
		".artCheckbox.checked {" +
		"background-position: 100% 0%; }";


art.checkBox = function( cImage ){
	if( typeof cImage === 'undefined' || cImage === null ){	console.log('no image'); return false; }
	
	var img = new Image();
	//сразу после загрузки картинки начнется подмена <input'ов>
	//вот этой функцией
	img.onload = function(){
		//подключаем стили
		var style = document.createElement('style');
		style.type = 'text/css';
		style.innerHTML = art.checkBoxCSS;
		var headTag = document.getElementsByTagName('head')[0];
		if( typeof headTag == 'undefined' ){
			console.error( 'not found head tag' );
			return false; // !
		}
		//помещаем в <head>
		headTag.appendChild( style );
		//сканируем все input
		var inputs = document.getElementsByTagName('input');
		var checkboxes = [];
		var t = 0;
		for( i=0; i<inputs.length; i++ ){	//отбираем только checkbox'ы
			if( inputs[i].type == 'checkbox' ){
				checkboxes[t] = inputs[i];
				t++;
			}
		}
		if( t == 0 ){ return false; /* ! */ }	//нет чекбоксов
		//удаляем input и добавляем span
		var elem = null;
		var chSpan = null;
		var container = null;
		for( i=0; i<checkboxes.length; i++ ){
			//создаем span'ы и пичкаем их атрибутами
			elem = checkboxes[i];
			elem.style.display = 'none';
			container = elem.parentNode;
			chSpan = document.createElement('span');
			chSpan.id = elem.name;	//запоминаем name input'a в id span'a
			chSpan.className = 'artCheckbox';
			chSpan.style.width = Math.round(img.width/2) + 'px';	//рисунок делится на 2 части
			chSpan.style.height = img.height + 'px';
			chSpan.style.backgroundImage = "url(" + cImage + ")";
			container.insertBefore( chSpan, elem );	//добавляем элемент
			if( elem.checked ){ //если чекбокс по умолчанию выбранный, то сразу смещаем бекграунд и помечаем классом checked
				chSpan.className = 'artCheckbox checked';
				elem.checked = 'checked';
			}else{
				elem.checked = null;
			}
			//регистрируем событие
			chSpan.onclick = function(){
				var inputHidden = document.getElementsByName(this.id);
				if( typeof inputHidden != 'undefined' ){
					if( inputHidden[0].checked ){
						inputHidden[0].checked = null;
						this.className = 'artCheckbox';
					}else{
						inputHidden[0].checked = 'checked';
						this.className = 'artCheckbox checked';
					}
				}else{
					console.log( this.id + ' not found');
				}
			}
		}
	}
	
	img.src = cImage;	//загружаем картинку
};


/**
	Стилизованные radiobutton'ы
	ArtProduct.ru
	05.2011
	Куцевалов К.Д.
	
	Принцип работы
		Оригинальные <input type=radio/> делаются [display=none], а возле них создается <span> с background'ом и событием onclick,
		при котором у input'a меняется атрибут checked.
	Стили
		Каждый radiobutton (span) имеет всего два класса которыми можно манипулировать в CSS: artRadioButton и checked.
		Соответственно .artRadioButton - не выбран, .artRadioButton.checked - выбран.
*/

if( typeof art === 'undefined' ){ var art = {}; }

//стили
art.radioButtonCSS = ".artRadioButton {" +
		"display: inline-block;" +
		"background-repeat: no-repeat;" +
		"background-position: 0% 0%;" +
		"cursor: pointer; }" +
		".artRadioButton.checked {" +
		"background-position: 100% 0%; }";

art.radioButton = function( cImage ){
	if( typeof cImage === 'undefined' || cImage === null ){	console.log('no image'); return false; }
	
	var img = new Image();
	//сразу после загрузки картинки начнется подмена <input'ов>
	//вот этой функцией
	img.onload = function(){
		//подключаем стили
		var style = document.createElement('style');
		style.type = 'text/css';
		style.innerHTML = art.radioButtonCSS;
		var headTag = document.getElementsByTagName('head')[0];
		if( typeof headTag == 'undefined' ){
			console.error( 'not found head tag' );
			return false; // !
		}
		//помещаем в <head>
		headTag.appendChild( style );
		//сканируем все input
		var inputs = document.getElementsByTagName('input');
		var radiobuttones = [];
		var t = 0;
		for( i=0; i<inputs.length; i++ ){	//отбираем только radiobutton'ы
			if( inputs[i].type == 'radio' ){
				radiobuttones[t] = inputs[i];
				t++;
			}
		}
		if( t == 0 ){ return false; }	//нет чекбоксов
		//удаляем input и добавляем span
		var elem = null;
		var chSpan = null;
		var container = null;
		for( i=0; i<radiobuttones.length; i++ ){
			//создаем span'ы и пичкаем их атрибутами
			elem = radiobuttones[i];
			elem.id = 'radio' + i;	//создаем id для отличия одноименных radiobutton
			elem.style.display = 'none';
			container = elem.parentNode;
			chSpan = document.createElement('span');
			chSpan.id = elem.name + '_' + elem.id;	//запоминаем name и id input'a в id span'a
			chSpan.className = 'artRadioButton';
			chSpan.style.width = Math.round(img.width/2) + 'px';	//рисунок делится на 2 части
			chSpan.style.height = img.height + 'px';
			chSpan.style.backgroundImage = "url(" + cImage + ")";
			container.insertBefore( chSpan, elem );	//добавляем элемент
			if( elem.checked ){ //если чекбокс по умолчанию выбранный, то сразу смещаем бекграунд и помечаем классом checked
				chSpan.className = 'artRadioButton checked';
				elem.checked = 'checked';
			}else{
				elem.checked = null;
			}
			//регистрируем событие
			chSpan.onclick = function(){
				var inpID = this.id.split('_')[1];	//разделяем name и id input'a
				var inpName = this.id.split('_')[0];
				var inputHidden = document.getElementsByName( inpName );
				if( typeof inputHidden != 'undefined' ){
					var startID = inputHidden[0].id.split('radio').join('');	//стартовый номер id для текущего name
					for( i=0; i<inputHidden.length; i++ ){
						if( inputHidden[i].id === inpID ){ //если выбранный элемент
							inputHidden[i].checked = 'checked';
							this.className = 'artRadioButton checked';
						}else{	//не выбранный
							inputHidden[i].checked = null;
							var otherSpan = document.getElementById( inpName + '_radio' + startID );	//ищем span привязанный к текущему инпуту по id
							if( typeof otherSpan != 'undefined' ){// && otherSpan !== null ){
								otherSpan.className = 'artRadioButton';
							}
						}
						startID++;
					}
				}else{
					console.log( this.id + ' not found');
				}
			}
		}
	}
	
	img.src = cImage;	//загружаем картинку
};
