/**
 * @author alltouch
 */
function aError(){
	
	
	this . error = false;
	this . errorText = '';
	this . items = [];
	
	this . opt = {};
	
	this . form = null;
	this . formId = null;
	
	this . errorBoxQuery = '.errorBox';
	this . errorBox = null;
	
	/**
	 * Загружает настройки для конкретной формы
	 */
	this . loadCustomOpt = function(name){
		if(!this . formOptions[name]){
			return false;
		} 
		
		this . formId = this . formOptions[name].formId;
		this . opt = this . formOptions[name].fields;
		this . form  = $('#' + this . formId);
		if ( this . form . length == 0){
			return false;
		}
		this . errorBox = this . form . find (this . errorBoxQuery);
		if(this . errorBox . length == 0){
			return false;
		}
		return this;
	}
	
	/**
	 * Добавление ошибки в масив ошибок
	 */
	this . add = function(field,text){
		this . error = true;
		this . items . push({
			'name' : field,
			'text' : text
		});
		
	}
	
	/**
	 * Очищение елементов формы от лишних стилей ( стилей ошибок)
	 */
	this . clearFields = function(){
		this . form . find('.red-border') . removeClass('red-border');
		this . form . find('.error') . removeClass('error');
	}
	
	/**
	 * Очищение текущего масива ошибок
	 */
	this . clear = function(){
		this . error = false;
		this . errorBox . hide();
		this . items = [];
	}
	
	/**
	 * Установить стили для поля без ошибок
	 */
	this . setRight = function(name){
		var el = this . form . find('[name=' + name + ']') . removeClass('red-border error')
				. parent();
		if(el.is('i')){
			el.removeClass('red-border');
			el = el . parent() . parent();
		}
		if(el . next().is('span.help')){
			el . next() . hide();
		} else {
			el . next() . next() . hide();
		}
	}
	
	/**
	 * Установить стили для полей с ошибками
	 */
	this . setWrang = function(name){
		var el = this . form . find('[name=' + name + ']');
		var help = el . parent();
		if(help.is('i')){
			help = help . parent() . parent();
		}
		if(!help.next().is('span.help')){
			help = help . next();
		}
		help = help . next() . addClass('help-red') . html(this . getErrorsText(name));
		
		if(!el . is('.red-border')){
			el . addClass('error')
			help . hide();
		} else {
			help . css('display', 'block');
			if(el . parent() . is('i')){
				el . parent() . addClass('red-border');
			}
		}				
		
	}
	
	/**
	 * Валидация поля
	 */
	this . checkField = function(nameField, showBox, next){

		if(!this . form ){
			piro . warning('Форма недоступна ' + this . formId);
			return false;
		}
		if(! this . opt[nameField]){
			piro . warning('Нет настроек для поля ' + this . formId + '.' + nameField);
			return false;
		}
		
		//
		var field = this . form . find('[name=' + nameField + ']');
		
		if(field . length == 0){
			piro . warning('Нет елемента ' + this . formId + '.' + nameField);
			return false;
		}
		
		//
		var fieldValue = field . val();
		
		var countErrors = 0;
		
		var opt = this.opt[nameField];
		
		if(opt . need){
			var needCheck = false;
			var z = opt . need . length;
			for(var i = 0 ; i < z ; i++){
				var elCheck = this . form . find('[name=' + opt. need[i].field + ']') 
				if(elCheck . length > 0 && elCheck.val() == opt.need[i].value){
					needCheck = true;
					break;
				}
			}
			if(!needCheck){
				return 0;
			}
		}
		
		//
		
		if(field . is('select')){
			if(typeof opt . empty == 'boolean' && !opt.empty && fieldValue == '-1'){
				this.add(nameField, 'обязательное для заполнения поле');
				countErrors++;
			}
		}
		else if (fieldValue.length > 0) {
					
					
			if (opt.min && fieldValue.length < opt.min) {
				this.add(nameField, 'минимальное кол-во символов: ' + opt.min);
				countErrors++;
			}
			
			if (opt.max && fieldValue.length > opt.max) {
				this.add(nameField, 'максимальное кол-во символов: ' + opt.max);
				countErrors++;
			}
			
			if(countErrors == 0 && opt . regexp && !fieldValue.match(opt . regexp)){
				this.add(nameField, 'введены недопустимые символы или неправильный формат данных');
				countErrors++;
			}
			
			var fieldValue2 = null;
			if (nameField == 'password' && (fieldValue2 = this.form.find('[name=password2]')).length > 0){
				fieldValue2 = fieldValue2.val();
				if (fieldValue != fieldValue2) {
					
					this.add(nameField, 'значения полей "Пароль" и "Повторите пароль" не совпадают');
					countErrors++;
					
					
				}
				if(next){
					this . checkField(nameField + '2', showBox, false);
				}
			}
			if (nameField == 'newPassword' && (fieldValue2 = this.form.find('[name=newPassword2]')).length > 0){
				fieldValue2 = fieldValue2.val();
				if (fieldValue != fieldValue2) {

					this.add(nameField, 'значения полей "Новый пароль" и "Повтор пароля" не совпадают');
					countErrors++;
					
				}
				if(next){
					this . checkField(nameField + '2', showBox, false);
				}
			}
			
			if (nameField == 'password2' && (fieldValue2 = this.form.find('[name=password]')).length > 0){
				fieldValue2 = fieldValue2.val();
				if (fieldValue != fieldValue2) {
					
					this.add(nameField, 'значения полей "Пароль" и "Повторите пароль" не совпадают');
					countErrors++;
					
					
				}
				if(next){
					this . checkField('password', showBox, false);
				}
			}
			if (nameField == 'newPassword2' && (fieldValue2 = this.form.find('[name=newPassword]')).length > 0){
				fieldValue2 = fieldValue2.val();
				if (fieldValue != fieldValue2) {

					this.add(nameField, 'значения полей "Новый пароль" и "Повтор пароля" не совпадают');
					countErrors++;
					
				}
				if(next){
					this . checkField('newPassword', showBox, false);
				}
			}
			
		} else if((typeof opt . empty == "boolean") && opt . empty == false){
			this.add(nameField, 'обязательное для заполнения поле');
			countErrors++;
		}
		
		/*if(opt.after){
			var value2 = this.form.find('[name=' + opt.after + ']').val();
			piro . log(value2 + '--' + value);			
			if(value2>=value){
				this.add(nameField, 'диапазон времени задан неправильно');
				countErrors++;
			}
		}*/
		
		/*if(nameField == 'deliveryDate'){
			this . checkField('fromTime', showBox, false);
			this . checkField('toTime', showBox, false);
		}*/
		if(nameField == 'fromTime' && next){
			this . checkField('toTime', showBox, false);
		}
		if(nameField == 'toTime' && next){
			this . checkField('fromTime', showBox, false);
		}
		
		if (countErrors == 0) {
			this . setRight(nameField);
		} else {
			this . setWrang(nameField);
			if(showBox){
				if(field . is('.error')){
					field . removeClass('error') . addClass('red-border');
					var el = field . parent();
					if(el . is('i')){
						el . addClass('red-border');
						el = el . parent() . parent();
					}
					if(el . next() . is('span.help')){
						el . next() . css('display', 'block');
					} else {
						el . next() . next() . css('display', 'block');
					}
					
				}
			}
		}
		return countErrors;
	}
	
	/**
	 * Валидация формы
	 */
	this . check = function(showBox){
		
		if(this . form . length == 0){
			piro . warning('Нет формы ' + this . formId);
			return false;	
		}
		
		this . clear();
		
		var i;
		for(i in this . opt){
			
			this . checkField(i , showBox, true);
			
		}		
		
		if(showBox && this . error){
			this . errorBox . show();
		}
	}
	
	/**
	 * Возвращает масив ошибок для поля
	 */
	this . getErrors = function(nameField){
		if(!this . error){
			return [];
		}
		
		var result = [];
		var l = this . items . length;
		for(var i = 0; i<l ; i++){
			if(this . items[i] . name == nameField){
				result . push(this . items[i] . text);
			}
		}
		return result;
	}
	
	/**
	 * Возращает текст ошибки для поля
	 */
	this . getErrorsText = function(nameField){
		
		//if(!this . opt[nameField] || !this . opt[nameField].error){
			return 'ошибка заполнения поля,<br/>' + this . getErrors(nameField) . join(',<br/>');
		//}
		
		//return this . opt[nameField] . error;
		
	}
	
	this . getHelpText = function(nameField){
		if(!this . opt[nameField] || !this . opt[nameField].help){
			return false;
		}
		return this . opt[nameField].help;
	}
	
	/**
	 * Прикручивает обработчики к полям, для того чтоб валидация автоматом работала
	 */
	this . addListener = function(field){
		if(!this . opt[field]){
			piro . warning('Нет настроек для поля ' + this . formId + '.' + field);
			return false;
		}
		
		var fieldObj = this . form . find('[name=' + field + ']');
		var helpObj =  fieldObj . parent();
		if(helpObj . is('i')){
			helpObj = helpObj . parent() . parent();
		}
		
		if (this.opt[field].reserve == true) {
			helpObj.parent().addClass('reserve');
		}
		
		if(helpObj . next() . length == 0){
			helpObj . after('<span class="help"></span>');
			helpObj = helpObj . next();
		} else if(!helpObj . next() . is('span.help')){
			helpObj . next() . after('<span class="help"></span>');
			helpObj = helpObj . next() . next();
		} else{
			helpObj = helpObj . next();
		}
		
		var greenHelpText = this . getHelpText(field);

		//
		fieldObj . unbind('focus') . bind('focus',function(){
			var el = fieldObj . parent(); 
			if(el . is('i')){
				el . parent() . addClass('bg');
			}
			fieldObj . removeClass('red-border');
			if(greenHelpText . length > 0){
				helpObj . removeClass('help-red') . html(greenHelpText) . css('display', 'block');
			} else {
				helpObj . hide();
			}
		});
		
		fieldObj . unbind('blur') . bind('blur',function(){
			var help = helpObj;
			var t = fieldObj;	
			var f = field;	
			
			var el = fieldObj . parent(); 
			if(el . is('i')){
				el . parent() . removeClass('bg');
			}	
			
			if(t.is('input[name=phoneHome], input[name=phoneMobile], input[name=fax]')){
				var v = t.val();
				if(v . length > 0 && v.substr(0,1)!= '+'){
					t.val('+' + v);
					
				}
								
			}
			
			var errorObj = t[0] . form . aError;
		
			errorObj . clear();
			errorObj . checkField(f,false)
			
			if(t.is('.error')){
				t . removeClass('error') . addClass('red-border');
				if(t.parent().is('i')){
					t.parent().addClass('red-border');
				}
				help . css('display', 'block');
			} else if(t.is('#f_from') && $('#f_to').is('.error')){
				var x = $('#f_to');
				x . removeClass('error') . addClass('red-border');
				if(x.parent().is('i')){
					x.parent().addClass('red-border');
				}
				help . css('display', 'block');
			} else if(t.is('#f_to') && $('#f_from').is('.error')){
				var x = $('#f_from');
				x . removeClass('error') . addClass('red-border');
				if(x.parent().is('i')){
					x.parent().addClass('red-border');
				}
				help . css('display', 'block');
			}
			
			
		})
		
		if(!fieldObj.is('select')){
			fieldObj . unbind('keyup') . bind('keyup',function(e){
				var t = fieldObj;
				var f = field;
				var help = helpObj;
				
				var errorObj = t[0] . form . aError;
				
				errorObj . clear();
				errorObj . checkField(f, false, true);
				
				if(greenHelpText . length > 0){
					helpObj . removeClass('help-red') . html(greenHelpText) . css('display', 'block');
				} else {
					helpObj . hide();
				}
			});
		}
		
		fieldObj . unbind('change') . bind('change',function(e){
			var t = fieldObj;
			var f = field;
			var help = helpObj;
			
			var errorObj = t[0] . form . aError;
			
			errorObj . clear();
			errorObj . checkField(f, false, true)
			
		});
		
	}
	/**
	 * Добавляет обработчики для всех елементов формы
	 */
	this . addListeners = function(arr){
		if(!arr){
			for(var j in this . opt){
				this . addListener(j);
			}
			return ;
		}
		
		var l = arr . length;
		for(var i = 0; i<l ; i++){
			this . addListener(arr[i]);
		}
	}
	
	/**
	 * Навешивает обработчик на кнопку сабмита
	 */
	this . addSubmitEvent = function(event, buttonId){
		piro . log('addSubmitEvent ' + this . formId);

		this . form . unbind('submit') . submit(function(){
			var _aError = $(this)[0].aError;
			_aError . clear();
			_aError . check(true);
			if(_aError . error){
				piro . alert . loadCustom ('incorrectFormValues');
				return false;
			}
			piro . call(event);
			return false;
		})
		
		if(buttonId){}
			this . form . find('#' + buttonId). unbind('click'). click(function(){
				$(this).parent().submit();
				return false;
			})
	}
	
	/**
	 * Отображает ошибки переданные с бекенда
	 * @param {Object} obj
	 */
	this . showBackendErrors = function(obj){
		this . form . find ('.red-border') . removeClass('red-border');
				
		var obj = eval('[' + obj.responseText + ']')[0]; //bad

		piro . log(obj)
		
		var txt = '<b>Некоторые поля заполнены с ошибками:</b><ul>';
		var l = obj.countErrors;
		for(var i = 0; i<l ; i++){
			txt += '<li>' + obj.errors[i].description + '</li>';
			this . form . find('[name=' + obj.errors[i].field + ']') . addClass('red-border')
				. parent() . addClass('red-border');
		}
		txt += '</ul>';
		piro . alert . showError ('<p>' + txt.substr(txt . indexOf('<ul>'))+'</p>') ;
		this . form . find ('div.errors') . html(txt) . show();
	}
	
	/**
	 * Вызывается при успешном сабмите
	 */
	this . AfterSubmitSuccess = function(){
		this . clearFields();
		this . form . find('div.errors').hide();
	}
}

aError . prototype . formOptions = {
	'formChangePassword' : {
		'fields' : {
			'oldPassword' : {
				'min' : 6,
				'max' : 30,
				'empty' : false,
				'help' : 'минимальная длина пароля: 6 символов,<br/>используйте цифры, а также большие и маленькие латинские буквы'
				
			},
			'newPassword' : {
				'min' : 6,
				'max' : 30,
				'empty' : false,
				'help' : 'минимальная длина пароля: 6 символов,<br/>используйте цифры, а также большие и маленькие латинские буквы'
			},
			'newPassword2' : {
				'min' : 6,
				'max' : 30,
				'empty' : false,
				'help' : 'минимальная длина пароля: 6 символов,<br/>используйте цифры, а также большие и маленькие латинские буквы'
			}
		},
		'formId' : 'formChangePassword'
	},
	'formRegisterUser' : {
		'fields' : {
			'surname' : {
				'max' : 30,
				'regexp' : /^[а-яёр-уіїєa-z\s\-]+$/i,
				'empty' : false
			},
			'name' : {
				'max' : 30,
				'regexp' : /^[а-яёр-уіїєa-z\s\-]+$/i,
				'empty' : false
			},
			'name2' : {
				'max' : 30,
				'regexp' : /^[а-яёр-уіїєa-z\s\-]+$/i,
				'empty' : true
			},
			'city' : {
				'max' : 30,
				'regexp' : /^[0-9а-яёр-уіїєa-z\s\-]+$/i,
				'empty' : false
			},
			'street' : {
				'max' : 30,
				'regexp' : /^[0-9а-яёр-уіїєa-z\s\-]+$/i,
				'empty' : false
			},
			'houseNumber' : {
				'max' : 30,
				'regexp' : /^[0-9а-яёр-уіїєa-z\s\/\-]+$/i,
				'empty' : false
			},
			'flatNumber' : {
				'max' : 30,
				'regexp' : /^[0-9а-яёр-уіїєa-z\s\/\-]+$/i,
				'empty' : false
			},
			'entrance' : {
				'max' : 2,
				'regexp' : /^[0-9]{1,2}$/i,
				'empty' : true
			},
			'doorCode' : {
				'max' : 10,
				'regexp' : /^[0-9а-яёр-уіїєa-z\s\/\-]+$/i,
				'empty' : true
			},
			'floor' : {
				'max' : 2,
				'regexp' : /^[0-9]{1,2}$/i,
				'empty' : true
			},
			'phoneHome' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : true,
				'help' : 'введите номер телефона в международном формате, например: +380441112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380441112233'
				
			},
			'phoneMobile' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : false,
				'help' : 'введите номер телефона в международном формате, например: +380501112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380501112233'
			},
			'email' : {
				'max' : 50,
				'regexp' : /^[a-z0-9\_\.\-]+@([a-z0-9\-]+\.)+[a-z0-9\-]+$/i,
				'empty' : false
			},
			'cardNumber' : {
				'max' : 10,
				'regexp' : /^[0-9]{1,10}$/i,
				'empty' : true
			},
			'password' : {
				'min' : 6,
				'max' : 30,
				'help' : 'минимальная длина пароля: 6 символов',
				'empty' : false
			},
			'password2' : {
				'min' : 6,
				'max' : 30,
				'help' : 'минимальная длина пароля: 6 символов',
				'empty' : false
			},
			'knowHowOther' : {
				'empty' : false,
				'max' : 100,
				'need' : [
					{
						'field' : 'knowHow',
						'value' : '10'
					}
				]
			},
			'knowHow' : {
				'empty' : false
			},
			'userType' : {
				'empty' : false
			},
			'comment' : {
				
			}
		},
		'formId' : 'formRegister'
	},
	'formRegisterPartner' : {
		'fields' : {
			'surname' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁР-Ур-уІіЇїЄєa-z\s\-]+$/i,
				'empty' : false
			},
			'name' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁР-Ур-уІіЇїЄєa-z\s\-]+$/i,
				'empty' : false
			},
			'name2' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁР-Ур-уІіЇїЄєa-z\s\-]+$/i,
				'empty' : false
			},
			'companyName' : {
				'max' : 500,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-'"]+$/i,
				'empty' : false
			},
			'companyPosition' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'city' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'postal' : {
				'min' : 5,
				'max' : 12,
				'regexp' : /[0-9]{5,12}/i,
				'empty' : true
			},
			'street' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'houseNumber' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i,
				'empty' : false
			},
			'flatNumber' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i,
				'empty' : false
			},
			'entrance' : {
				'max' : 2,
				'regexp' : /^[0-9]{1,2}$/i,
				'empty' : true
			},
			'doorCode' : {
				'max' : 10,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i,
				'empty' : true
			},
			'floor' : {
				'max' : 2,
				'regexp' : /^[0-9]{1,2}$/i,
				'empty' : true
			},
			'phoneHome' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'help' : 'введите номер телефона в международном формате, например: +380441112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380441112233'
			},
			'phoneMobile' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : false,
				'help' : 'введите номер телефона в международном формате, например: +380501112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380501112233'
			},
			'fax' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : true,
				'help' : 'введите номер телефона в международном формате, например: +380441112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380441112233'
			},
			'email' : {
				'max' : 50,
				'regexp' : /^[a-z0-9\_\.\-]+@([a-z0-9\-]+\.)+[a-z0-9\-]+$/i,
				'empty' : false
			},
			'cardNumber' : {
				'max' : 10,
				'regexp' : /^[0-9]{1,10}$/i,
				'empty' : true
			},
			'password' : {
				'min' : 6,
				'max' : 30,
				'help' : 'минимальная длина пароля: 6 символов',
				'empty' : false
			},
			'password2' : {
				'min' : 6,
				'max' : 30,
				'help' : 'минимальная длина пароля: 6 символов',
				'empty' : false
			},
			'knowHowOther' : {
				'empty' : false,
				'max' : 100,
				'need' : [
					{
						'field' : 'knowHow',
						'value' : '10'
					}
				]
			},
			'knowHow' : {
				'empty' : false
			},
			'userType' : {
				'empty' : false
			},
			'comment' : {
				
			}
		},
		'formId' : 'formRegister'
	},
	'formForgot' : {
		'formId' : 'formForgot',
		'fields' : {
			'email' : {
				'max' : 50,
				'regexp' : /^[a-z0-9\_\.\-]+@([a-z0-9\-]+\.)+[a-z0-9\-]+$/i,
				'empty' : false,
				'reserve' : true
			}
		}		
	},
	'formSaveOptionsUser' : {
		'fields' : {
			'surname' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'name' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'name2' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : true
			},
			'city' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'street' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'houseNumber' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i,
				'empty' : false
			},
			'flatNumber' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i,
				'empty' : false
			},
			'entrance' : {
				'max' : 2,
				'regexp' : /^[0-9]{1,2}$/i,
				'empty' : true
			},
			'doorCode' : {
				'max' : 10,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i,
				'empty' : true
			},
			'floor' : {
				'max' : 2,
				'regexp' : /^[0-9]{1,2}$/i,
				'empty' : true
			},
			'phoneHome' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'help' : 'введите номер телефона в международном формате, например: +380441112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380441112233'
				
			},
			'phoneMobile' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : false,
				'help' : 'введите номер телефона в международном формате, например: +380501112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380501112233'
			},
			'cardNumber' : {
				'max' : 10,
				'regexp' : /^[0-9]{1,10}$/i,
				'empty' : true
			},
			'birthday' : {
				'regexp' : /^(0[1-9]{1}|1[0-9]{1}|2[0-9]{1}|3[0-1]{1})\.(0[1-9]{1}|1[0-2]{1})\.[0-9]{4}$/i,
				'help' : 'укажите в формате дд.мм.гггг, указание года не обязательно, например: 01.01.0000',
				'error' : 'ошибка заполнения поля,<br/> укажите в формате дд.мм.гггг, указание года не обязательно, например: 01.01.0000'
			}
		},
		'formId' : 'formSaveOptions'
	},
	'formSaveOptionsPartner' : {
		'fields' : {
			'surname' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'name' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'name2' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : true
			},
			'companyName' : {
				'max' : 500,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-'"]+$/i,
				'empty' : false
			},
			'companyPosition' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'city' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'street' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'houseNumber' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i,
				'empty' : false
			},
			'flatNumber' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i,
				'empty' : false
			},
			'entrance' : {
				'max' : 2,
				'regexp' : /^[0-9]{1,2}$/i,
				'empty' : true
			},
			'doorCode' : {
				'max' : 10,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i,
				'empty' : true
			},
			'floor' : {
				'max' : 2,
				'regexp' : /^[0-9]{1,2}$/i,
				'empty' : true
			},
			'phoneHome' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'help' : 'введите номер телефона в международном формате, например: +380441112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380441112233'
				
			},
			'phoneMobile' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : false,
				'help' : 'введите номер телефона в международном формате, например: +380501112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380501112233'
			},
			'fax' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : true,
				'help' : 'введите номер телефона в международном формате, например: +380441112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380441112233'
			},
			'cardNumber' : {
				'max' : 10,
				'regexp' : /^[0-9]{1,10}$/i,
				'empty' : true
			},
			'birthday' : {
				'regexp' : /^(0[1-9]{1}|1[0-9]{1}|2[0-9]{1}|3[0-1]{1})\.(0[1-9]{1}|1[0-2]{1})\.[0-9]{4}$/i,
				'help' : 'укажите в формате дд.мм.гггг, указание года не обязательно, например: 01.01.0000',
				'error' : 'ошибка заполнения поля,<br/> укажите в формате дд.мм.гггг, указание года не обязательно, например: 01.01.0000'
			},
			'postal' : {
				'regexp' : /^[0-9]{0,}$/
			}
		},
		'formId' : 'formSaveOptions'
	},
	'formOrderNone' : {
		'formId' : 'formOrder',
		'fields' : {
			'surname' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'name' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'name2' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : true
			},
			'city' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'street' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'houseNumber' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i,
				'empty' : false
			},
			'flatNumber' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i,
				'empty' : false
			},
			'entrance' : {
				'max' : 2,
				'regexp' : /^[0-9]{1,2}$/i,
				'empty' : true
			},
			'doorCode' : {
				'max' : 10,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i,
				'empty' : true
			},
			'floor' : {
				'max' : 2,
				'regexp' : /^[0-9]{1,2}$/i,
				'empty' : true
			},
			'deliveryDate' : {
				'regexp' : /^(0[1-9]{1}|1[0-9]{1}|2[0-9]{1}|3[0-1]{1})\.(0[1-9]{1}|1[0-2]{1})\.[0-9]{4}$/i,
				'empty' : false
			},
			'fromTime' : {
				'empty' : false,
				'help' : 'укажите максимально возможный/удобный для Вас диапазон (например с 20:00 до 23:00), желательно чтобы диапазон времени доставки был как минимум 1-2 часа'
			},
			'toTime' : {
				'empty' : false,
				'after' : 'fromTime',
				'help' : 'укажите максимально возможный/удобный для Вас диапазон (например с 20:00 до 23:00), желательно чтобы диапазон времени доставки был как минимум 1-2 часа'
			},
			'phoneHome' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : true,
				'help' : 'введите номер телефона в международном формате, например: +380441112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380441112233'
				
			},
			'phoneMobile' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : false,
				'help' : 'введите номер телефона в международном формате, например: +380501112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380501112233'
			},
			'cardNumber' : {
				'max' : 10,
				'regexp' : /^[0-9]{1,10}$/i,
				'empty' : true
			},
			'email' : {
				'max' : 50,
				'regexp' : /^[a-z0-9\_\.\-]+@([a-z0-9\-]+\.)+[a-z0-9\-]+$/i
			},
			'knowHowOther' : {
				'empty' : false,
				'max' : 100,
				'need' : [
					{
						'field' : 'knowHow',
						'value' : '10'
					}
				]
			},
			'knowHow' : {
				'empty' : false
			},
			'comment' : {
				
			}
		}
	},
	'formOrderUser' : {
		'formId' : 'formOrder',
		'fields' : {
			'surname' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'name' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'name2' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : true
			},
			'city' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'street' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'houseNumber' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i,
				'empty' : false
			},
			'flatNumber' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i,
				'empty' : false
			},
			'entrance' : {
				'max' : 2,
				'regexp' : /^[0-9]{1,2}$/i,
				'empty' : true
			},
			'doorCode' : {
				'max' : 10,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i,
				'empty' : true
			},
			'floor' : {
				'max' : 2,
				'regexp' : /^[0-9]{1,2}$/i,
				'empty' : true
			},
			'deliveryDate' : {
				'regexp' : /^(0[1-9]{1}|1[0-9]{1}|2[0-9]{1}|3[0-1]{1})\.(0[1-9]{1}|1[0-2]{1})\.[0-9]{4}$/i,
				'empty' : false
			},
			'fromTime' : {
				'empty' : false,
				'help' : 'укажите максимально возможный/удобный для Вас диапазон (например с 20:00 до 23:00), желательно чтобы диапазон времени доставки был как минимум 1-2 часа'
			},
			'toTime' : {
				'empty' : false,
				'after' : 'fromTime',
				'help' : 'укажите максимально возможный/удобный для Вас диапазон (например с 20:00 до 23:00), желательно чтобы диапазон времени доставки был как минимум 1-2 часа'
			},
			'phoneHome' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : true,
				'help' : 'введите номер телефона в международном формате, например: +380441112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380441112233'
				
			},
			'phoneMobile' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : false,
				'help' : 'введите номер телефона в международном формате, например: +380501112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380501112233'
			},
			'cardNumber' : {
				'max' : 10,
				'regexp' : /^[0-9]{1,10}$/i,
				'empty' : true
			},
			'comment' : {
				
			}
		}
	},
	'formOrderPartner' : {
		'formId' : 'formOrder',
		'fields' : {
			'surname' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'name' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'name2' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : true
			},
			'companyName' : {
				'max' : 500,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-'"]+$/i,
				'empty' : false
			},
			'deliveryType' : {
				'empty' : false
			},
			'city' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false,
				'need' : [
					{
						'field' : 'deliveryType',
						'value' : '2'
					},
					{
						'field' : 'deliveryType',
						'value' : '3'
					},
					{
						'field' : 'deliveryType',
						'value' : '4'
					}
				]
			},
			'street' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false,
				'need' : [
					{
						'field' : 'deliveryType',
						'value' : 2
					}
				]
			},
			'houseNumber' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i,
				'empty' : false,
				'need' : [
					{
						'field' : 'deliveryType',
						'value' : 2
					}
				]
			},
			'deliveryDate' : {
				'regexp' : /^(0[1-9]{1}|1[0-9]{1}|2[0-9]{1}|3[0-1]{1})\.(0[1-9]{1}|1[0-2]{1})\.[0-9]{4}$/i,
				'empty' : false
			},
			'fromTime' : {
				'empty' : false,
				'help' : 'укажите максимально возможный/удобный для Вас диапазон (например с 20:00 до 23:00), желательно чтобы диапазон времени доставки был как минимум 1-2 часа'
			},
			'toTime' : {
				'empty' : false,
				'after' : 'fromTime',
				'help' : 'укажите максимально возможный/удобный для Вас диапазон (например с 20:00 до 23:00), желательно чтобы диапазон времени доставки был как минимум 1-2 часа'
			},
			'phoneHome' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : true,
				'help' : 'введите номер телефона в международном формате, например: +380441112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380441112233'
				
			},
			'phoneMobile' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : false,
				'help' : 'введите номер телефона в международном формате, например: +380501112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380501112233'
			},
			'comment' : {
			}
		}
	},
	'formWantShow' : {
		'formId' : 'formWantShow',
		'fields' : {
			'showDate' : {
				'regexp' : /^(0[1-9]{1}|1[0-9]{1}|2[0-9]{1}|3[0-1]{1})\.(0[1-9]{1}|1[0-2]{1})\.[0-9]{4}$/i
			},
			'fromTime' : {
				'empty' : false,
				'help' : 'укажите максимально возможный/удобный для Вас диапазон (например с 20:00 до 23:00), желательно чтобы диапазон времени доставки был как минимум 1-2 часа'
			},
			'toTime' : {
				'empty' : false,
				'after' : 'fromTime',
				'help' : 'укажите максимально возможный/удобный для Вас диапазон (например с 20:00 до 23:00), желательно чтобы диапазон времени доставки был как минимум 1-2 часа'
			},
			'place' : {
				'help' : 'название места/заведения, адрес, месторасположение',
				'empty' : false
			},
			'showTypeOther' : {
				'empty' : false,
				'max' : 100,
				'need' : [
					{
						'field' : 'showType',
						'value' : '10'
					}
				]
			},
			'wishes' : {
				'help' : 'укажите обязательные требования, виды фейерверков/спецэффектов, конкретные названия изделий, другие пожелания',
				'empty' : false
			},
			'price' : {
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\-\.\s]+$/i
			},
			'surname' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'name' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'name2' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : true
			},
			'phoneMobile' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : false,
				'help' : 'введите номер телефона в международном формате, например: +380501112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380501112233'
			},
			'email' : {
				'max' : 50,
				'regexp' : /^[a-z0-9\_\.\-]+@([a-z0-9\-]+\.)+[a-z0-9\-]+$/i
			},
			'knowHowOther' : {
				'empty' : false,
				'max' : 100,
				'need' : [
					{
						'field' : 'knowHow',
						'value' : '10'
					}
				]
			},
			'price' : {
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-\.]+$/i
			},
			'knowHow' : {
				'empty' : false
			},
			'comment':{
			}
		}
	},
	'formMakeBill' : {
		'formId' : 'formBill',
		'fields' : {
			'companyType' : {
				'empty' : false
			},
			'companyName' : {
				'max' : 500,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-'"]+$/i,
				'empty' : false
			},
			'servicesList' : {
				'empty' : false
			},
			'priceHDC' : {
				'regexp' : /^[0-9]+(\.[0-9]{1,2}){0,1}$/i,
				'empty' : false,
				'help' : 'Введите сумму в гривнах с учётом НДС, например: 1500.50'
			},
			'fioContact' : {
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i,
				'empty' : false
			},
			'phoneHome' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : true,
				'help' : 'введите номер телефона в международном формате, например: +380441112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380441112233'
				
			},
			'phoneMobile' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : false,
				'help' : 'введите номер телефона в международном формате, например: +380501112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380501112233'
			},
			'fax' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : false,
				'help' : 'введите номер телефона в международном формате, например: +380441112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380441112233'
			},
			'email' : {
				'max' : 50,
				'regexp' : /^[a-z0-9\_\.\-]+@([a-z0-9\-]+\.)+[a-z0-9\-]+$/i
			},
			'fioBoss':{
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i,
				'empty' : false
			},
			'basement' : {
				'help' : 'например: устав, доверенность, контракт и т.д.',
				'empty' : false
			},
			'identificationCode' : {
				'regexp' : /^[0-9]+$/i
			},
			'HDCCode' : {
				'regexp' : /^[0-9]+$/i
			},
			'ZKPOCode' : {
				'regexp' : /^[0-9]+$/i
			},
			'realAddress' : {
			},
			'juridicalAddress' : {
			},
			'comment' : {
			}
		}
	},
	'formRemember' : {
		'formId' : 'formRemember',
		'fields' : {
			'newPassword' : {
				'min' : 6,
				'max' : 30,
				'empty' : false,
				'help' : 'минимальная длина пароля: 6 символов,<br/>используйте цифры, а также большие и маленькие латинские буквы'
			},
			'newPassword2' : {
				'min' : 6,
				'max' : 30,
				'empty' : false,
				'help' : 'минимальная длина пароля: 6 символов,<br/>используйте цифры, а также большие и маленькие латинские буквы'
			}
		}
	},
	'formAddCard' : {
		'formId' : 'formAddCard',
		'fields' :{
			'clientType' : {
				'empty' : false
			},
			'surname' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i
			},
			'name' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'name2' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i
			},
			'birthday' : {
				'regexp' : /^(0[1-9]{1}|1[0-9]{1}|2[0-9]{1}|3[0-1]{1})\.(0[1-9]{1}|1[0-2]{1})\.[0-9]{4}$/i,
				'help' : 'укажите в формате дд.мм.гггг, указание года не обязательно, например: 01.01.0000',
				'error' : 'ошибка заполнения поля,<br/> укажите в формате дд.мм.гггг, указание года не обязательно, например: 01.01.0000'
			},
			'companyName' : {
				'max' : 500,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-'"]+$/i,
				'empty' : false,
				'need' : [
					{
						'field' : 'clientType',
						'value' : '2'
					},
					{
						'field' : 'clientType',
						'value' : '3'
					}
				]
			},
			'companyPosition' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'need' : [
					{
						'field' : 'clientType',
						'value' : '2'
					},
					{
						'field' : 'clientType',
						'value' : '3'
					}
				]
			},
			'city' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i
			},
			'street' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i
			},
			'houseNumber' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i
			},
			'flatNumber' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i
			},
			'entrance' : {
				'max' : 2,
				'regexp' : /^[0-9]{1,2}$/i
			},
			'doorCode' : {
				'max' : 10,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i
			},
			'floor' : {
				'max' : 2,
				'regexp' : /^[0-9]{1,2}$/i
			},
			'phoneHome' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : true,
				'help' : 'введите номер телефона в международном формате, например: +380441112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380441112233'
				
			},
			'phoneMobile' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : false,
				'help' : 'введите номер телефона в международном формате, например: +380501112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380501112233'
			},
			'fax' : {
				'regexp' : /^(\+)[0-9]{11,12}$/i,
				'empty' : true,
				'help' : 'введите номер телефона в международном формате, например: +380441112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380441112233',
				'need' : [
					{
						'field' : 'clientType',
						'value' : '2'
					},
					{
						'field' : 'clientType',
						'value' : '3'
					}
				]
			},
			'email' : {
				'max' : 50,
				'regexp' : /^[a-z0-9\_\.\-]+@([a-z0-9\-]+\.)+[a-z0-9\-]+$/i
			},
			'cardNumber' : {
				'max' : 10,
				'regexp' : /^[0-9]{1,10}$/i,
				'empty' : false
			},
			'cardNominal' : {
				'max' : 2,
				'regexp' : /^[0-9]{1,2}$/i,
				'empty' : false
			},
			'knowHowOther' : {
				'empty' : false,
				'max' : 100,
				'need' : [
					{
						'field' : 'knowHow',
						'value' : '10'
					}
				]
			},
			'knowHow' : {
				'empty' : false,
				'need' : [
					{
						'field' : 'clientType',
						'value' : '2'
					},
					{
						'field' : 'clientType',
						'value' : '3'
					}
				]
			}			
		}
	},
	'formEditCard' : {
		'formId' : 'formEditCard',
		'fields' :{
			'clientType' : {
				'empty' : false
			},
			'surname' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i
			},
			'name' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'name2' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i
			},
			'birthday' : {
				'regexp' : /^(0[1-9]{1}|1[0-9]{1}|2[0-9]{1}|3[0-1]{1})\.(0[1-9]{1}|1[0-2]{1})\.[0-9]{4}$/i,
				'help' : 'укажите в формате дд.мм.гггг, указание года не обязательно, например: 01.01.0000',
				'error' : 'ошибка заполнения поля,<br/> укажите в формате дд.мм.гггг, указание года не обязательно, например: 01.01.0000'
			},
			'companyName' : {
				'max' : 500,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-'"]+$/i,
				'empty' : false,
				'need' : [
					{
						'field' : 'clientType',
						'value' : '2'
					},
					{
						'field' : 'clientType',
						'value' : '3'
					}
				]
			},
			'companyPosition' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'need' : [
					{
						'field' : 'clientType',
						'value' : '2'
					},
					{
						'field' : 'clientType',
						'value' : '3'
					}
				]
			},
			'city' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i
			},
			'street' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i
			},
			'houseNumber' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i
			},
			'flatNumber' : {
				'max' : 30,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i
			},
			'entrance' : {
				'max' : 2,
				'regexp' : /^[0-9]{1,2}$/i
			},
			'doorCode' : {
				'max' : 10,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-]+$/i
			},
			'floor' : {
				'max' : 2,
				'regexp' : /^[0-9]{1,2}$/i
			},
			'phoneHome' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : true,
				'help' : 'введите номер телефона в международном формате, например: +380441112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380441112233'
				
			},
			'phoneMobile' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : false,
				'help' : 'введите номер телефона в международном формате, например: +380501112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380501112233'
			},
			'fax' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : true,
				'help' : 'введите номер телефона в международном формате, например: +380441112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380441112233',
				'need' : [
					{
						'field' : 'clientType',
						'value' : '2'
					},
					{
						'field' : 'clientType',
						'value' : '3'
					}
				]
			},
			'email' : {
				'max' : 50,
				'regexp' : /^[a-z0-9\_\.\-]+@([a-z0-9\-]+\.)+[a-z0-9\-]+$/i
			},
			'cardNominal' : {
				'max' : 2,
				'regexp' : /^[0-9]{1,2}$/i,
				'empty' : false
			},
			'knowHowOther' : {
				'empty' : false,
				'max' : 100,
				'need' : [
					{
						'field' : 'knowHow',
						'value' : '10'
					}
				]
			},
			'knowHow' : {
				'empty' : false,
				'need' : [
					{
						'field' : 'clientType',
						'value' : '2'
					},
					{
						'field' : 'clientType',
						'value' : '3'
					}
				]
			}
		}
	},
	'formMakeShow' : {
		'formId' : 'formMakeShow',
		'fields' : {
			'showDate' : {
				'regexp' : /^(0[1-9]{1}|1[0-9]{1}|2[0-9]{1}|3[0-1]{1})\.(0[1-9]{1}|1[0-2]{1})\.[0-9]{4}$/i
			},
			'fromTime' : {
				'empty' : false,
				'help' : 'укажите максимально возможный/удобный для Вас диапазон (например с 20:00 до 23:00), желательно чтобы диапазон времени доставки был как минимум 1-2 часа'
			},
			'toTime' : {
				'empty' : false,
				'after' : 'fromTime',
				'help' : 'укажите максимально возможный/удобный для Вас диапазон (например с 20:00 до 23:00), желательно чтобы диапазон времени доставки был как минимум 1-2 часа'
			},
			'place' : {
				'help' : 'название места/заведения, адрес, месторасположение',
				'empty' : false
			},
			'showTypeOther' : {
				'empty' : false,
				'max' : 100,
				'need' : [
					{
						'field' : 'showType',
						'value' : '10'
					}
				]
			},
			'agreedWith' : {
				'empty' : false,
				'need' : [
					{
						'field' : 'agreed',
						'value' : '1'
					}
				]
			},
			'clientType' : {
				'empty' : false
			},
			'surname' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'name' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'name2' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i
			},
			'phoneMobile' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : false,
				'help' : 'введите номер телефона в международном формате, например: +380501112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380501112233'
			},
			'numberVisitors' : {
				'regexp' : /^[0-9]+$/i
			},
			'scenario' : {
				'empty' : false
			},
			'priceShow' : {
				'regexp' : /^[0-9]+(\.[0-9]{1,2}){0,1}$/i
			},
			'pricePortage' : {
				'regexp' : /^[0-9]+(\.[0-9]{1,2}){0,1}$/i
			},
			'pricePrepay' : {
				'regexp' : /^[0-9]+(\.[0-9]{1,2}){0,1}$/i
			},
			'priceAll' : {
				'regexp' : /^[0-9]+(\.[0-9]{1,2}){0,1}$/i
			},
			'companyName' : {
				'max' : 500,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-'"]+$/i,
				'empty' : false,
				'need' : [
					{
						'field' : 'clientType',
						'value' : '1'
					},
					{
						'field' : 'clientType',
						'value' : '3'
					}
				]
			},
			'pricePartner' : {
				'regexp' : /^[0-9]+(\.[0-9]{1,2}){0,1}$/i,
				'need' : [
					{
						'field' : 'clientType',
						'value' : '1'
					}
				]
			},
			'phoneHome' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : true,
				'help' : 'введите номер телефона в международном формате, например: +380441112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380441112233',
				'need' : [
					{
						'field' : 'clientType',
						'value' : '3'
					}
				]				
			},
			'fax' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : true,
				'help' : 'введите номер телефона в международном формате, например: +380441112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380441112233',
				'need' : [
					{
						'field' : 'clientType',
						'value' : '3'
					}
				]				
			},
			'email' : {
				'max' : 50,
				'regexp' : /^[a-z0-9\_\.\-]+@([a-z0-9\-]+\.)+[a-z0-9\-]+$/i,
				'need' : [
					{
						'field' : 'clientType',
						'value' : '3'
					}
				]	
			},
			'knowHowOther' : {
				'empty' : false,
				'max' : 100,
				'need' : [
					{
						'field' : 'knowHow',
						'value' : '10'
					}
				]
			},
			'knowHow' : {
				'empty' : false,
				'need' : [
					{
						'field' : 'clientType',
						'value' : '2'
					},
					{
						'field' : 'clientType',
						'value' : '3'
					}
				]
			}
		}
	},
	'formEditShow' : {
		'formId' : 'formEditShow',
		'fields' : {
			'showDate' : {
				'regexp' : /^(0[1-9]{1}|1[0-9]{1}|2[0-9]{1}|3[0-1]{1})\.(0[1-9]{1}|1[0-2]{1})\.[0-9]{4}$/i
			},
			'fromTime' : {
				'empty' : false,
				'help' : 'укажите максимально возможный/удобный для Вас диапазон (например с 20:00 до 23:00), желательно чтобы диапазон времени доставки был как минимум 1-2 часа'
			},			
			'toTime' : {
				'empty' : false,
				'after' : 'fromTime',
				'help' : 'укажите максимально возможный/удобный для Вас диапазон (например с 20:00 до 23:00), желательно чтобы диапазон времени доставки был как минимум 1-2 часа'
			},
			'place' : {
				'help' : 'название места/заведения, адрес, месторасположение',
				'empty' : false
			},
			'showTypeOther' : {
				'empty' : false,
				'max' : 100,
				'need' : [
					{
						'field' : 'showType',
						'value' : '10'
					}
				]
			},
			'agreedWith' : {
				'empty' : false,
				'need' : [
					{
						'field' : 'agreed',
						'value' : '1'
					}
				]
			},
			'clientType' : {
				'empty' : false
			},
			'surname' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'name' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i,
				'empty' : false
			},
			'name2' : {
				'max' : 30,
				'regexp' : /^[а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\-]+$/i
			},
			'phoneMobile' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : false,
				'help' : 'введите номер телефона в международном формате, например: +380501112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380501112233'
			},
			'numberVisitors' : {
				'regexp' : /^[0-9]+$/i
			},
			'scenario' : {
				'empty' : false
			},
			'priceShow' : {
				'regexp' : /^[0-9]+(\.[0-9]{1,2}){0,1}$/i
			},
			'pricePortage' : {
				'regexp' : /^[0-9]+(\.[0-9]{1,2}){0,1}$/i
			},
			'pricePrepay' : {
				'regexp' : /^[0-9]+(\.[0-9]{1,2}){0,1}$/i
			},
			'priceAll' : {
				'regexp' : /^[0-9]+(\.[0-9]{1,2}){0,1}$/i
			},
			'companyName' : {
				'max' : 500,
				'regexp' : /^[0-9а-яА-ЯёЁр-уР-УіІїЇєЄa-z\s\/\-'"]+$/i,
				'empty' : false,
				'need' : [
					{
						'field' : 'clientType',
						'value' : '1'
					},
					{
						'field' : 'clientType',
						'value' : '3'
					}
				]
			},
			'pricePartner' : {
				'regexp' : /^[0-9]+(\.[0-9]{1,2}){0,1}$/i,
				'need' : [
					{
						'field' : 'clientType',
						'value' : '1'
					}
				]
			},
			'phoneHome' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : true,
				'help' : 'введите номер телефона в международном формате, например: +380441112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380441112233',
				'need' : [
					{
						'field' : 'clientType',
						'value' : '3'
					}
				]				
			},
			'fax' : {
				'regexp' : /^(\+)[0-9]{11,13}$/i,
				'empty' : true,
				'help' : 'введите номер телефона в международном формате, например: +380441112233',
				'error' : 'ошибка заполнения поля,<br/> введите номер телефона в международном формате, например: +380441112233',
				'need' : [
					{
						'field' : 'clientType',
						'value' : '3'
					}
				]				
			},
			'email' : {
				'max' : 50,
				'regexp' : /^[a-z0-9\_\.\-]+@([a-z0-9\-]+\.)+[a-z0-9\-]+$/i,
				'need' : [
					{
						'field' : 'clientType',
						'value' : '3'
					}
				]	
			},
			'knowHowOther' : {
				'empty' : false,
				'max' : 100,
				'need' : [
					{
						'field' : 'knowHow',
						'value' : '10'
					}
				]
			}
		}
	}
};


