// -------------------------------------------------------------------------- //
// --------------------------- PrivateEnterController ----------------------- //
// -------------------------------------------------------------------------- //

PrivateEnterController = function() {
	PrivateEnterController.superClass.apply( this, arguments );

	this.Id = 'PrivateEnterController';
	// форма авторизации
	this.elementAuthorizationForm = this.getEl( 'authForm' );
	this.authorizationForm = this.createForm( 'Authorization', this.elementAuthorizationForm.firstChild );
	
	this.authButton = this.setButton( this.elementAuthorizationForm, this.authorizationForm );

	// форма регистрации
	this.elementRegistrationForm = this.getEl( 'regForm' );
	this.registrationForm = this.createForm( 'Registration', this.elementRegistrationForm.firstChild );
	
	this.regButton = this.setButton( this.elementRegistrationForm, this.registrationForm );
/*	
	this.authorizationFormWrap = this.getEl( 'authorization' );
	this.authorizationForm = this.createForm( '' );
	this.authorizationForm.attachObserver( 'formStatusChange', this.checkAuth, this );
	
	this.authButton = new Button( this.getEl( 'authButton' ), this.getEl( 'authForm' ), this.getEl( 'authButton' ).firstChild );
	this.authButton.attachObserver( 'buttonClicked', this.checkOnClickAuth, this );
	this.authButton.attachObserver( 'buttonClicked', function() { this.checkAgree( this.authorizationForm ) }, this );
	this.authButton.attachObserver( 'buttonSubmited', this.authorize, this );

	// форма регистрации
	this.registrationFormWrap = this.getEl( 'registration' );
	this.registrationForm = this.createForm( 'Registration' );
	this.registrationForm.attachObserver( 'formStatusChange', this.checkReg, this );

	this.regButton = new Button( this.getEl( 'regButton' ), this.getEl( 'regForm' ), this.getEl( 'regButton' ).firstChild );
	this.regButton.attachObserver( 'buttonClicked', this.checkOnClickReg, this );
	this.regButton.attachObserver( 'buttonClicked', function() { this.checkAgree( this.registrationForm ) }, this );
	this.regButton.attachObserver( 'buttonSubmited', this.registration, this );
*/
}

PrivateEnterController.inheritsFrom( FormController );

// -------------------------------------------------------------------------- //
// переопределение из-за 2х форм и 2-х разных действий в них
FormController.prototype.setButton = function( form, elForm ){
	var newButton = new Button( form.lastChild, form, form.lastChild.firstChild );
	newButton.attachObserver( 'buttonSubmited', function(){ this.send( elForm ); }, this );
	newButton.attachObserver( 'buttonClicked', function() { this.checkAgree( elForm ) }, this );
	return newButton;
}

/*
PrivateEnterController.prototype.createForm = function( type, idx ) {
	if( window[ type + 'Form' ] ) {
		var form = this.createNode( 'div', { 'class': 'form ' + type.toLowerCase() }, eval( 'this.' + type.toLowerCase() + 'FormWrap' ) );
		var newForm = new window[ type + 'Form' ]( form, idx );
	} else {
		return false;
	}

	this.forms[ this.forms.length ] = newForm;
	return newForm;
}
*/
// -------------------------------------------------------------------------- //
// переопределяет функцию checkOnClick родителя
PrivateEnterController.prototype.checkAgree = function( form ) {
	form.checkToSubmit();
	//form.setEmpty();
	if( !form || !form.agree ) return false;
	if( form.agree.getData() ) {
		return true;
	} else {
		this.alert( '<big>Регистрация не можеть быть продолжена без получения Вашего согласия ' +
			'на обработку Ваших персональных данных в соответствие с п. 1 статьи 6 ' +
			'Федерального Закона №152-ФЗ «О персональных данных»!</big>', true );
		return false;
	}
}

// -------------------------------------------------------------------------- //

PrivateEnterController.prototype.check = function( form ){
	if ( form.Id == 'AuthorizationForm' ){
		this.status = form.status;
		this.authButton.setValid( this.status );
	}
	if ( form.Id == 'RegistrationForm' ){
		this.status = form.status;
		this.regButton.setValid( this.status );
	}
	return this.status;
}
/*
PrivateEnterController.prototype.check = function( form, button ) {
	this.status = form.check();
	button.setValid( this.status );
	return this.status;
}
*/
// -------------------------------------------------------------------------- //
/*
PrivateEnterController.prototype.setEmpty = function( form ) {
	form.setEmpty();		// разукрасить форму, если что-то не заполнено
}
*/
// -------------------------------------------------------------------------- //
// -------------------------------------------------------------------------- //
// -------------------------------------------------------------------------- //
/*
PrivateEnterController.prototype.checkAuth = function() {
	this.check( this.authorizationForm, this.authButton );
}

// -------------------------------------------------------------------------- //

PrivateEnterController.prototype.checkOnClickAuth = function() {
	this.check( this.authorizationForm, this.authButton );
	this.setEmpty( this.authorizationForm );
}
*/
// -------------------------------------------------------------------------- //

PrivateEnterController.prototype.send = function( form ) {
	if ( form.Id == 'AuthorizationForm' ){
		this.authorize();
	}
	if ( form.Id == 'RegistrationForm' ){
		this.registration();
	}
}

// -------------------------------------------------------------------------- //

PrivateEnterController.prototype.authorize = function() {
	var form = this.authorizationForm;
	var params = this.getParams( form );
	params[ 'Commander.Command' ] = 'Logon';
	var loginStore = new Store( '/ajax/ajax-userservice-commander.html', params );
	loginStore.attachObserver( 'Loaded', this.isAuth, this );
	loginStore.load();
}

PrivateEnterController.prototype.isAuth = function( result ) {
	if( result[ 'Success' ] ) {
		window.location = this.authButton.eForm.action;
	}
	else {
		this.alert( result[ 'ErrorInfo' ] ? '<big>' + result[ 'ErrorInfo' ] + '</big>' : '<big>Произвести авторизацию не удалось.</big>' );
	}
}

// -------------------------------------------------------------------------- //
// -------------------------------------------------------------------------- //
// -------------------------------------------------------------------------- //
/*
PrivateEnterController.prototype.checkReg = function() {
	this.check( this.registrationForm, this.regButton );
}

PrivateEnterController.prototype.checkOnClickReg = function() {
	this.check( this.registrationForm, this.regButton );
	this.setEmpty( this.registrationForm );
}
*/
PrivateEnterController.prototype.registration = function() {
	var form = this.registrationForm;
	var params = this.getParams( form );
	params[ 'Commander.Command' ] = 'Registration';
	params[ 'AutoLogon' ] = true;
	var store = new Store( '/ajax/ajax-userservice-commander.html', params );
	/*{	'Commander.Command': 'Registration',
		//'Action': 'Registration',
		'LastName': form.lastName.getData(),
		'FirstName': form.firstName.getData(),
		'Email': form.mail.getData(),
		'Password': form.password.getData(),
		'ConfirmationPassword': form.confirm.getData(),
		'Confirmation': form.agree.getData(),
		'MailDelivery': form.mailDelivery.getData(),
		//'AutoPassword': true,
		'AutoLogon': true
	}*/
	store.attachObserver( 'Loaded', this.isRegistrated, this );
	store.load();
}

PrivateEnterController.prototype.isRegistrated = function( result ) {
	if( result[ 'Success' ] == true ) {
		this.data = {
			'ClientSalt': result[ 'ClientSalt' ] || false,
			'LogonMoment': result[ 'LogonMoment' ] || false//,
		}
		this.authButton.fillForm( false, this.data );
		this.authButton.submit();
	} else {
		this.alert( result[ 'ErrorInfo' ] ? '<big>' + result[ 'ErrorInfo' ] + '</big>' : '<big>Произошла ошибка.</big>' );
		return false;
	}
	return true;
}

// -------------------------------------------------------------------------- //
// -------------------------- AuthorizationForm ----------------------------- //
// -------------------------------------------------------------------------- //

AuthorizationForm = function( target ) {
	AuthorizationForm.superClass.apply( this, arguments );
	
	this.Id = 'AuthorizationForm';
	var str = '<h2>Для зарегистрированных пользователей</h2>' +
		'<p>Для доступа к личному кабинету введите свой логин ' +
		'(обычно совпадает с&nbsp;<span class="nowrap">E-mail</span>) и пароль на OZON.RU:</p>';
	var textInForm = this.createNode( 'div', { 'class': 'form-text' }, this.element, str );

	var inputBlock = this.createNode( 'div', { 'class': 'form-fields clearfix' }, this.element );

	this.inputs[ 0 ] = new TextInput({
		target: inputBlock,
		name: 'Login',
		label: 'электронная почта',
		tip: 'логин',
		required: true,
		//inputPattern: /^.*$/,
		pattern: /^.{2,}$/,
		errorInputText: '',
		errorPatternText: 'Должно быть больше 2-х символов'
	});
	
	this.inputs[ 1 ] = new TextInput({
		target: inputBlock,
		iType: 'password',
		name: 'Password',
		label: 'пароль',
		tip: 'пароль',
		required: true,
		pattern: /^.{2,}$/,
		errorInputText: '',
		errorPatternText: 'Должно быть больше 2-х символов'
	});
	
	//this.login = this.setTextInput( this.element, 'Электронная почта', 'логин', false /* /^[\.\-_A-z0-9]+?@[\.\-A-z0-9]+?\.[A-z0-9]{2,6}$/ */, 'lgn' );
	//this.password = this.setTextInput( this.element, false, 'пароль', /*/^[^\s]+$/*/ false, 'pswd', 'password' );

	this.remind = this.createNode( 'span', { 'class': 'pseudo-href', 'id': 'remind' }, inputBlock, 'Забыли логин/пароль?' );
	
	this.addHandler( this.remind, 'click', function( params, ev ) {
		window.location.href = '/my/remind-password/';
	});

	var chbStr = 'Нажимая кнопку &laquo;Продолжить&raquo;, ' +
		'я подтверждаю свою дееспособность, даю согласие на передачу своих персональных данных ' +
		'от ООО&nbsp;&laquo;Интернет Трэвел&raquo; в ООО&nbsp;&laquo;Интернет Решения&raquo; в целях обработки.';
	this.agree = new Checkbox({
		target: this.element,
		label: chbStr,
		name: 'Confirmation',
		checked: true,
		required: true
	});

	for ( var i = 0; i < this.inputs.length; i++ ){
		this.inputs[ i ].attachObserver( 'inputStatusChange', function(){ this.check(); }, this );
		//this.inputs[ i ].attachObserver( 'inputSetted', function(){ this.check(); }, this ); 
	}
}
AuthorizationForm.inheritsFrom( Form );

// -------------------------------------------------------------------------- //
// ------------------------------ RegistrationForm -------------------------- //
// -------------------------------------------------------------------------- //

RegistrationForm = function( target ) {
	RegistrationForm.superClass.apply( this, arguments );

	this.Id = 'RegistrationForm';
	var textInForm = this.createNode( 'div', { 'class': 'form-text' }, this.element, '<h2>Для новых пользователей</h2>' );

	this.createNode( 'p', false, textInForm, 'В личном кабинете вы&nbsp;сможете отслеживать состояние вашего заказа.' );

	var inputBlock = this.createNode( 'div', { 'class': 'form-fields clearfix' }, this.element );

	this.inputs[ 0 ] = new TextInput({
		target: inputBlock,
		name: 'LastName',
		label: 'фамилия',
		tip: 'рус/лат буквами',
		required: true,
		inputPattern: /^[А-яA-z- ]*$/,
		pattern: /^[А-яA-z- ]{2,}$/,
		errorInputText: 'Фамилия должна состоять из русских или латинских букв',
		errorPatternText: 'Должно быть больше 2-х символов'
	});

	this.inputs[ 1 ] = new TextInput({
		target: inputBlock,
		name: 'FirstName',
		label: 'имя',
		tip: 'рус/лат буквами',
		required: true,
		inputPattern: /^[А-яA-z- ]*$/,
		pattern: /^[А-яA-z- ]{2,}$/,
		errorInputText: 'Имя должно состоять из русских или латинских букв',
		errorPatternText: 'Должно быть больше 2-х символов'
	});

	this.inputs[ 2 ] = new TextInput({
		target: inputBlock,
		name: 'Email',
		label: 'электронная почта',
		tip: 'e-mail',
		required: true,
		inputPattern: /^[\.\-_A-z0-9@]*$/,
		pattern: /^[\.\-_A-z0-9]+?@[\.\-A-z0-9]+?\.[A-z0-9]{2,6}$/,
		errorInputText: 'Электронная почта может содержать латинские буквы, точки, цифры, тире, подчеркивания и символ "@"',
		errorPatternText: 'Электронная почта должна быть в виде "name@host.ru"'
	});

	var password = this.inputs[ 3 ] = new TextInput({
		target: inputBlock,
		iType: 'password',
		name: 'Password',
		label: 'пароль',
		tip: 'пароль для входа',
		required: true,
		pattern: /^.{2,}$/,
		errorInputText: '',
		errorPatternText: 'Должно быть больше 2-х символов'
	});
	
	this.inputs[ 4 ] = new TextInput({
		target: inputBlock,
		iType: 'password',
		name: 'ConfirmationPassword',
		label: 'подтверждение пароля',
		tip: 'совпадает с паролем',
		required: true,
		pattern: /^.{2,}$/,
		errorInputText: '',
		errorPatternText: 'Подтверждение пароля должно совпадать с паролем'
	});
	
	this.inputs[ 4 ].checkPattern = function() {
		var oS = this.status;

		this.status = false;
		if(	this.getData() == password.getData() ) this.status = true;

		this.setError( !this.status, this.errorPatternText );
		if( !( oS === this.status ) ) this.notify( 'inputStatusChange' );
	}
	
/*	this.lastName = this.setTextInput( this.element, 'Фамилия', 'Фамилия', /^[А-я- A-z]+$/, 'reglnm' );
	this.firstName = this.setTextInput( this.element, 'Имя', 'Имя', /^[А-я- A-z]+$/, 'regfnm' );
	this.mail = this.setTextInput( this.element, 'Электронная почта', '', /^[\.\-_A-z0-9]+?@[\.\-A-z0-9]+?\.[A-z0-9]{2,6}$/, 'regeml' );
	var password = this.password = this.setTextInput( this.element, false, 'пароль', false, 'regpswd', 'password' );
	this.confirm = this.setTextInput( this.element, false, 'подтверждение', false, 'confirm', 'password' );
	this.agree = this.setCheckBox( this.element, true, 'Нажимая кнопку &laquo;Продолжить&raquo;, я подтверждаю свою дееспособность, даю согласие на передачу своих персональных данных от ООО&nbsp;&laquo;Интернет Трэвел&raquo; в ООО&nbsp;&laquo;Интернет Решения&raquo; в целях обработки.' );
	this.mailDelivery = this.setCheckBox( this.element, false, 'Даю согласие на получение рассылок рекламно-информационного характера, содержащих рекламу ООО&nbsp;&laquo;Интернет Трэвел&raquo;, и на обработку своих персональных данных ООО&nbsp;&laquo;Интернет Решения&raquo; и ООО&nbsp;&laquo;Интернет Трэвел&raquo; в целях продвижения товаров и услуг.' );
	this.agree.setData( true );
	this.mailDelivery.setData( true );*/

	var chbStr = 'Нажимая кнопку &laquo;Продолжить&raquo;, ' +
		'я подтверждаю свою дееспособность, даю согласие на передачу своих персональных данных ' +
		'от ООО&nbsp;&laquo;Интернет Трэвел&raquo; в ООО&nbsp;&laquo;Интернет Решения&raquo; в целях обработки.';
	this.agree = this.inputs[ 5 ] = new Checkbox({
		target: this.element,
		label: chbStr,
		name: 'Confirmation',
		checked: true,
		required: true
	});

	chbStr = 'Даю согласие на получение рассылок рекламно-информационного характера, ' +
		'содержащих рекламу ООО&nbsp;&laquo;Интернет Трэвел&raquo;, и на обработку ' +
		'своих персональных данных ООО&nbsp;&laquo;Интернет Решения&raquo; ' +
		'и ООО&nbsp;&laquo;Интернет Трэвел&raquo; в целях продвижения товаров и услуг.';
	this.mailDelivery = this.inputs[ 6 ] = new Checkbox({
		target: this.element,
		label: chbStr,
		name: 'MailDelivery',
		checked: true
	});

	for ( var i = 0; i < this.inputs.length; i++ ){
		this.inputs[ i ].attachObserver( 'inputStatusChange', function(){ this.check(); }, this ); 
	}

}
RegistrationForm.inheritsFrom( Form );

// -------------------------------------------------------------------------- //

onload = function() {
	window.controller = new PrivateEnterController();
}