var error 	= new Object();
var rootdir = '';

function SelectCity(id, selected)
{
	selected = 0;
	new Ajax.Updater('city', rootdir+'/ajax/getCity/'+id+'/'+selected, { method: 'get', asynchronous: false });
} 

/**
 * Метод для вывода ошибок в теге <span class="form-error"></span>
 *
 * @parent  - ID родительского контейнера тега с ошибкой
 * @text	- Текст ошибки 
 */
function addError(parent,text)
{
	//Поиск в родительском контейнере тега span с классом form-error
	var span = $(parent).down('span.form-error');
	if (!span){
		//Если нет такого тега, надо его создать
		var span = new Element('span', {'class' : 'form-error'});
		span.update(text);
		$(parent).insert(span);
	} else{
		span.update(text);
	}		
}


/**
* Метод для удаления неактуальных ошибок
* 
* @parent  - ID родительского контейнера тега с ошибкой
*/
function removeError(parent)
{
	var span = $(parent).down('span.form-error');
	if (span) span.remove();
}

/**
 * Метод для удаления пробелов
 * @str - Обрабатываемая строка
 */
function trim(str)
{
	str = str.replace(/^\s+/, '');
	str = str.replace(/\s+$/, '');
	return str;
}

/**
* Метод для поверки 
* правильности ввода Страны
*
*/	
function checkCountry(field)
{
	var name   = 'Страна';
	var parent = 'line-'+field;
	
	// Очистка
	removeError(parent);
	delete error[parent];

	// Проверка на заполненность поля
	if ($(field).value == '') { 
		addError(parent , 'Поле '+name+' должно быть заполнено.');
		error[parent]   = 'Поле '+name+' должно быть заполнено.';
	}

	// Если нет ошибок очистить span от красноты
	if (error[parent] == undefined){
		removeError(parent);
		return true;
	}
}


/**
* Метод для поверки 
* правильности ввода Города
*
*/
function checkCity(field)
{

	var name   = 'Город';
	var parent = 'line-'+field;
	
	// Очистка
	removeError(parent);
	delete error[parent];

	// Проверка на заполненность поля
	if ($(field).value == '') { 
		addError(parent , 'Поле '+name+' должно быть заполнено.');
		error[parent]   = 'Поле '+name+' должно быть заполнено.';
	}
	// Если нет ошибок очистить span от красноты
	if (error[parent] == undefined){
		removeError(parent);
		return true;
	}
}


/**
* Метод для поверки 
* правильности ввода E-mail
*
*/
function checkEmail(field)
{
	var name   = 'E-mail';
	var parent = 'line-'+field;

	// Очистка
	removeError(parent);
	delete error[parent];
	
	// Проверка на заполненность поля
	if ($(field).value == '') { 
		addError(parent , 'Поле '+name+' должно быть заполнено.');
		error[parent]   = 'Поле '+name+' должно быть заполнено.';
	}
	else
	{	
		new Ajax.Request(rootdir+'/ajax/email_check/', 
						{ method: "post",
						  asynchronous: false,
						  parameters: {email : $(field).value},
						  onComplete: function(request) {
							  if(request.responseText != '')
							  {
								  addError(parent , request.responseText);
								  error[parent] = request.responseText;
							  }
						  }
						}
					);
	}

	// Если нет ошибок очистить span от красноты
	if (error[parent] == undefined){
		removeError(parent);
		return true;
	}
}


/**
* Метод для поверки 
* правильности ввода reCAPTCHA
*
*/
function checkCaptcha(field)
{
	var name   = 'Число с картинки';
	var parent = 'line-'+field;
	
	// Очистка
	removeError(parent);
	delete error[parent];

	// Проверка на заполненность поля
	if ($(field).value == '') { 
		addError(parent , 'Поле '+name+' должно быть заполнено.');
		error[parent]   = 'Поле '+name+' должно быть заполнено.';
	}
	// Если нет ошибок очистить span от красноты
	if (error[parent] == undefined){
		removeError(parent);
		return true;
	}
}



/**
* Метод для поверки 
* правильности ввода Логина
*
*/
function checkLogin()
{
	var field  = 'login';
	var name   = 'Логин';
	var minlen = 5; 
	var maxlen = 20; 
		
	var parent = 'line-'+field;
	
	// Очистка
	removeError(parent);
	delete error[parent];

	// Проверка на заполненность поля
	if (trim($(field).value) == '') { 
		addError(parent , 'Поле '+name+' должно быть заполнено.');
		error[parent]   = 'Поле '+name+' должно быть заполнено.';
	}
	else if (trim($(field).value).length < minlen) { 
		// Проверка на длину поля
		addError(parent , 'Поле '+name+' должно быть не короче '+minlen+' символов.');
		error[parent]   = 'Поле '+name+' должно быть не короче '+minlen+' символов.';
	}
	else if (trim($(field).value).length > maxlen) { 
		// Проверка на длину поля
		addError(parent , 'Поле '+name+' должно быть не длиннее '+maxlen+' символов.');
		error[parent]   = 'Поле '+name+' должно быть не длиннее '+maxlen+' символов.';
	}
	else {
		new Ajax.Request(rootdir+'/ajax/login_check/', 
				{ method: "post",
				  asynchronous: false,
				  parameters: {login : $(field).value},
				  onComplete: function(request) {
					  if(request.responseText != '')
					  {
						  addError(parent , request.responseText);
						  error[parent] = request.responseText;
					  }
				  }
				}
			);
	}
	
	// Если нет ошибок очистить span от красноты
	if (error[parent] == undefined){
		removeError(parent);
		return true;
	}
}


/**
* Метод для поверки 
* правильности ввода Пароля
*
*/
function checkPassword()
{
	var field  = 'password';
	var name   = 'Пароль';
	var minlen = 6; 
	var maxlen = false; 
		
	var parent = 'line-'+field;
	
	// Очистка
	removeError(parent);
	delete error[parent];

	// Проверка на заполненность поля
	if (trim($(field).value) == '') { 
		addError(parent , 'Поле '+name+' должно быть заполнено.');
		error[parent]   = 'Поле '+name+' должно быть заполнено.';
	}
	else if (trim($(field).value).length < minlen) { 
		// Проверка на длину поля
		addError(parent , 'Поле '+name+' должно быть не короче '+minlen+' символов.');
		error[parent]   = 'Поле '+name+' должно быть не короче '+minlen+' символов.';
	}
	else if (!/^[A-z0-9-_]+$/.test(trim($(field).value))) {
		// Проверка на содержание требуемых символов
		addError(parent , 'Поле '+name+' может содержать только буквы латинского алфавита, цифры, подчеркивания и тире.');
		error[parent]   = 'Поле '+name+' может содержать только буквы латинского алфавита, цифры, подчеркивания и тире.';
	}
	
	// Если нет ошибок очистить span от красноты
	if (error[parent] == undefined){
		removeError(parent);
		return true;
	}
}


/**
* Метод для поверки 
* правильности ввода Подтверждения пароля
*
*/
function checkPassconf()
{
	var field  = 'passconf';
	var name   = 'Подтверждение пароля';

	var parent = 'line-'+field;

	// Очистка
	removeError(parent);
	delete error[parent];

	// Проверка на заполненность поля
	if (trim($(field).value) == '') { 
		addError(parent , 'Поле '+name+' должно быть заполнено.');
		error[parent]   = 'Поле '+name+' должно быть заполнено.';
	}
	else if (checkPassword()) {
		// Проверка на соответствие паролей
		if ($(field).value != $('password').value) { 
			addError(parent , 'Поле '+name+' не совпадает с полем Пароль');
			error[parent]   = 'Поле '+name+' не совпадает с полем Пароль';
		}			
	}

	// Если нет ошибок очистить span от красноты
	if (error[parent] == undefined){
		removeError(parent);
		return true;
	}
}


/**
* Метод для поверки 
* правильности ввода Имени
*
*/
function checkName()
{
	var field  = 'name';
	var name   = 'Имя';
	var minlen = 2; 
	var maxlen = false; 
		
	var parent = 'line-'+field;
	
	// Очистка
	removeError(parent);
	delete error[parent];

	// Проверка на заполненность поля
	if (trim($(field).value) == '') { 
		addError(parent , 'Поле '+name+' должно быть заполнено.');
		error[parent]   = 'Поле '+name+' должно быть заполнено.';
	}
	else if (trim($(field).value).length < minlen) { 
		// Проверка на длину поля
		addError(parent , 'Поле '+name+' должно быть не короче '+minlen+' символов.');
		error[parent]   = 'Поле '+name+' должно быть не короче '+minlen+' символов.';
	}
	else if (!/^[A-zА-я0-9-_]+$/.test(trim($(field).value))) {
		// Проверка на содержание требуемых символов
		addError(parent , 'Поле '+name+' может содержать только буквы, цифры, подчеркивания и тире.');
		error[parent]   = 'Поле '+name+' может содержать только буквы, цифры, подчеркивания и тире.';
	}
	
	// Если нет ошибок очистить span от красноты
	if (error[parent] == undefined){
		removeError(parent);
		return true;
	}
}

/**
* Метод для поверки 
* правильности ввода Фамилии
*
*/
function checkSurname()
{
	var field  = 'surname';
	var name   = 'Фамилия';
	var minlen = 2; 
	var maxlen = false; 
		
	var parent = 'line-'+field;
	
	// Очистка
	removeError(parent);
	delete error[parent];

	// Проверка на заполненность поля
	if (trim($(field).value) == '') { 
		addError(parent , 'Поле '+name+' должно быть заполнено.');
		error[parent]   = 'Поле '+name+' должно быть заполнено.';
	}
	else if (trim($(field).value).length < minlen) { 
		// Проверка на длину поля
		addError(parent , 'Поле '+name+' должно быть не короче '+minlen+' символов.');
		error[parent]   = 'Поле '+name+' должно быть не короче '+minlen+' символов.';
	}
	else if (!/^[A-zА-я0-9-_]+$/.test(trim($(field).value))) {
		// Проверка на содержание требуемых символов
		addError(parent , 'Поле '+name+' может содержать только буквы, цифры, подчеркивания и тире.');
		error[parent]   = 'Поле '+name+' может содержать только буквы, цифры, подчеркивания и тире.';
	}
	
	// Если нет ошибок очистить span от красноты
	if (error[parent] == undefined){
		removeError(parent);
		return true;
	}
}
function checkBirthday()
{
	var field  = 'birthday';
	var name   = 'Дата рождения';
		
	var parent = 'line-'+field;
	
	// Очистка
	removeError(parent);
	delete error[parent];

	// Проверка на заполненность поля
	if ($('day').value == '' || $('month').value == '' || $('year').value == '') { 
		addError(parent , 'Поле '+name+' должно быть заполнено.');
		error[parent]   = 'Поле '+name+' должно быть заполнено.';
	}
	else {
		new Ajax.Request(rootdir+'/ajax/day_check/', 
				{ method: "post",
				  asynchronous: false,
				  parameters: {day : $('day').value, month : $('month').value, year : $('year').value},
				  onComplete: function(request) {
					  if(request.responseText != '')
					  {
						  addError(parent , request.responseText);
						  error[parent] = request.responseText;
					  }
				  }
				}
			);
	}
	
	// Если нет ошибок очистить span от красноты
	if (error[parent] == undefined){
		removeError(parent);
		return true;
	}
}


/**
* Метод для поверки 
* правильности ввода Пола
*
*/
function checkSex()
{
	var field  = 'sex';
	var name   = 'Пол';
		
	var parent = 'line-'+field;
	
	// Очистка
	removeError(parent);
	delete error[parent];

	// Проверка на заполненность поля
	if ($('male').checked == '' && $('female').checked == '') { 
		addError(parent , 'Поле '+name+' должно быть заполнено.');
		error[parent]   = 'Поле '+name+' должно быть заполнено.';
	}
	// Если нет ошибок очистить span от красноты
	if (error[parent] == undefined){
		removeError(parent);
		return true;
	}
}


/**
* Метод для поверки 
* правильности ввода Телефона
*
*/
function checkPhone()
{
	var field  = 'phone';
	var name   = 'Телефон';
		
	var parent = 'line-'+field;
	
	// Очистка
	removeError(parent);
	delete error[parent];

	// Проверка на заполненность поля
	if (trim($(field).value) == '') { 
		addError(parent , 'Поле '+name+' должно быть заполнено.');
		error[parent]   = 'Поле '+name+' должно быть заполнено.';
	}
	else if (!/^[0-9]+$/.test(trim($(field).value))) {
		// Проверка на содержание требуемых символов
		addError(parent , 'Поле '+name+' должно содержать только числовые символы.');
		error[parent]   = 'Поле '+name+' должно содержать только числовые символы.';
	}
	else {
		new Ajax.Request(rootdir+'/ajax/phone_check/', 
				{ method: "post",
				  asynchronous: false,
				  parameters: {phone : $(field).value},
				  onComplete: function(request) {
					  if(request.responseText != '')
					  {
						  addError(parent , request.responseText);
						  error[parent] = request.responseText;
					  }
				  }
				}
			);
	}
	
	// Если нет ошибок очистить span от красноты
	if (error[parent] == undefined){
		removeError(parent);
		return true;
	}
}

function checkPromocode()
{
	var field  = 'promocode';
	var name   = 'Промо код';
	
	var parent = 'line-'+field;
	
	// Очистка
	removeError(parent);
	delete error[parent];
	
	if (trim($(field).value) != '' && !/^[0-9]+$/.test(trim($(field).value))) {
		// Проверка на содержание требуемых символов
		addError(parent , 'Скорее всего у вас просто нет промо-кода. :) Оставьте это поле пустым.');
		error[parent]   = 'Скорее всего у вас просто нет промо-кода. :) Оставьте это поле пустым.';
	}
}

function registration_step1()
{		
	var country = checkCountry('country');
	var city 	= checkCity('city');
	var email 	= checkEmail('email');

	if (country && city && email)
	{
		if ($('line-captcha').style.display == 'none')
			Effect.toggle('line-captcha', 'blind', { duration: 0.2 });
		else {
			if(checkCaptcha('captcha')) 
				document.getElementById('form-registration').submit(); 
		}
	}
}
function registration_signup()
{		
	var country = checkCountry('country');
	var city 	= checkCity('city');
	var email 	= checkEmail('email');

	if (country && city && email)
	{
		if ($('line-captcha').style.display == 'none')
			Effect.toggle('line-captcha', 'blind', { duration: 0.2 });
		else {
			if(checkCaptcha('captcha')) 
				document.getElementById('form-signup').submit(); 
		}
	}
}
function registration_step2()
{		
	var login		= checkLogin();
	var password 	= checkPassword();
	var passconf 	= checkPassconf();
	var name 		= checkName();
	var surname 	= checkSurname();
	var birthday 	= checkBirthday();
	var sex 		= checkSex();
	var phone 		= checkPhone(); 

	if (login && password && passconf && name && surname && birthday && sex && phone)
	{
		if (confirm('На номер ' + ($('phone').value) + ' будет отправлено смс с кодом активации! Это действительно ваш номер?'))
			document.getElementById('form-registration-step2').submit(); 
		else
			return false;
	}
}

