// -------------------------------------------------------------------------- //
// --------------------------- 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 );
}

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;
}

// создание формы - переопределено
FormController.prototype.createForm = function( name, target, idx ) {
	if( window[ name + 'Form' ] ) {
		var form;
		if ( !target.firstChild ){
			form = this.createNode( 'div', { 'class': 'form ' + name.toLowerCase() }, target );
		}
		else {
			form = target.firstChild;
		}
		var newForm = new window[ name + 'Form' ]( form, idx );
	} else {
		return false;
	}

	this.forms[ this.forms.length ] = newForm;
	newForm.attachObserver( 'formStatusChange', this.check, this );
	return newForm;
}

// -------------------------------------------------------------------------- //
// переопределяет функцию checkOnClick родителя
PrivateEnterController.prototype.checkAgree = function( form ) {
	form.checkToSubmit();
	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.getParams = function( form, number ) {
	var params = new Object();
	number = number || '';
	for ( var i = 0, lenI = form.inputs.length; i < lenI; i++ ){
		if ( form.inputs[ i ].Id == 'NTextInput' ){
			params[ form.inputs[ i ].name + number ] = form.inputs[ i ].getValue();
		}
		else {
			params[ form.inputs[ i ].name + number ] = form.inputs[ i ].getValueToParam();
		}
	}
	return params;
}

// -------------------------------------------------------------------------- //

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;
		this.authButton.eForm.submit();
	}
	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',
		'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(),
		'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.element.lastChild;

	this.inputs[ 0 ] = new NTextInput({
		'madeFromXSL': true,
		'idBlock': 'AuthLogin',
		'name': 'Login',
		'settings': FieldsSettings[ 'Login' ]
	});

	this.inputs[ 1 ] = new NTextInput({
		'madeFromXSL': true,
		'idBlock': 'AuthPassword',
		'iType': 'password',
		'name': 'Password',
		'settings': FieldsSettings[ '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; в&nbsp;целях обработки.';
	this.agree = this.inputs[ 2 ] = 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 NTextInput({
		'target': inputBlock,
		'name': 'LastName',
		'settings': FieldsSettings[ 'LastName' ]
	});

	this.inputs[ 1 ] = new NTextInput({
		'target': inputBlock,
		'name': 'FirstName',
		'settings': FieldsSettings[ 'FirstName' ]
	});
	
	this.inputs[ 2 ] = new NTextInput({
		'target': inputBlock,
		'name': 'Email',
		'settings': FieldsSettings[ 'Email' ]
	});

	var password = this.inputs[ 3 ] = new NTextInput({
		'target': inputBlock,
		'iType': 'password',
		'name': 'Password',
        'settings': FieldsSettings[ 'Password6' ]
	});
	
	this.inputs[ 4 ] = new NTextInput({
		'target': inputBlock,
		'iType': 'password',
		'name': 'ConfirmationPassword',
        'settings': FieldsSettings[ 'ConfirmationPassword' ]
	});

	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' );
	}

	var chbStr = 'Нажимая кнопку &laquo;Продолжить&raquo;, ' +
		'я подтверждаю свою дееспособность, даю согласие на передачу своих персональных данных ' +
		'от ООО&nbsp;&laquo;Интернет Трэвел&raquo; в&nbsp;ООО&nbsp;&laquo;Интернет Решения&raquo; в&nbsp;целях обработки.';

	this.agree = this.inputs[ 5 ] = new Checkbox({
		'target': this.element,
		'label': chbStr,
		'name': 'Confirmation',
		'checked': true,
		'required': true
	});

	chbStr = 'Даю согласие на&nbsp;получение рассылок рекламно-информационного характера и&nbsp;на&nbsp;обработку своих ' +
	'персональных данных ООО&nbsp;&laquo;Интернет Решения&raquo; и&nbsp;ООО&nbsp;&laquo;Интернет Трэвел&raquo; ' +
	'в&nbsp;целях продвижения товаров и&nbsp;услуг.';
	
	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 );

// -------------------------------------------------------------------------- //

$(document).ready(function() {
	window.controller = new PrivateEnterController();
});
