/*
	registerFormClass
	работает по принципу статического класса:
	для работы требует создания одного объекта
*/
var profileFormClass = function(){
	profileFormClass.superClass.apply(this, arguments);

	this.ajaxUrls = {
		save: "/ajax/users/settings/",
		twitter: "/ajax/twitter/",
		regions: "/ajax/geo/regions/",
		cities: "/ajax/geo/cities/",
		friend: "/ajax/users/friends/",
		recommendation: "/ajax/users/recommendations/",
		files: "/ajax/users/getauthkey/",
		invite: "/ajax/blogs/userblogs/inviteuser/",
		invite_reply: "/ajax/blogs/userblogs/userreply/"
	};
	
	this.hidePanels = function(){
		if ($('js-addFriendMessage')) {
			$('js-addFriendMessage').addClass('hidden');
		}
		if ($('js-addRecommendation')) {
			$('js-addRecommendation').addClass('hidden');
		}
		if ($('js-inviteToBlog')) {
			$('js-inviteToBlog').addClass('hidden');
		}
	}
	
	Object.extendObject(
		this.xmlResponse, {
		
		twitter : {
			node: 'twitter',
			handler: 'xmlResponseHandler_twitter'
		},
		
		region : {
			node: 'region',
			handler: 'xmlResponseHandler_region'
		},
		
		city : {
			node: 'city',
			handler: 'xmlResponseHandler_city'
		},
		
		text : {
			node: 'text',
			handler: 'xmlResponseHandler_text'
		},
		
		message : {
			node: 'message',
			handler: 'xmlResponseHandler_message'
		},
		
		invitationslist : {
			node: 'invitationslist',
			handler: null
		},
		
		error : {
			node: 'error',
			handler: 'xmlResponseHandler_error'
		},
		
		result : {
			node: 'result',
			handler: 'xmlResponseHandler_result'
		}
	});

};

profileFormClass.inheritsFrom(ajaxFormClass);




Object.extendObject(
	profileFormClass.prototype, {

// Проверка поля при onload
	checkField_onload: function(field){
		
		field.focus();
		field.blur();		
	},


//	Проверка поля с url
	checkField_url: function(e, field, action){
		if(!e) e = window.event;

			switch (e.type){
				case 'focus':
					this.markField_clear(field);
					break;
				case 'keydown':
					this.markField_clear(field);
					break;
			}
	},


//	Проверка поля с email
	checkField_email: function (e, field, action){
			if(!e) e = window.event;

			switch (e.type){
				case 'keyup':
					if(field.value.match(/[^a-z0-9\_\.\-\@]+/i)){ // проверка на допустимые символы
						this.markField_error(field, this.errorMessages.inputIsIncorrect);
						return;

					// если ввод не соотвествует маске email - очищаем поле от всех маркеров
					} else if(!field.value.match(/^[a-z0-9][a-z0-9_.-]*@[a-z0-9_.-]+\.[a-z]{2,7}$/i)){
						this.markField_clear(field);
						return;

					}/* else { // если вдруг совпали с регулярным выражением - проверяем существования значения поля в базе сервера
						clearTimeout(this.emailTimer);
						var _this = this;
						this.emailTimer = setTimeout(function(){_this.checkData(field, action)}, 500);
						return;
					}*/
					break;

				case 'keydown':
					clearTimeout(this.emailTimer); // каждое новое нажатие останавливает отправку запроса на сервер
					break;

				case 'blur':
					if(field.value.length == ''){ // если ничего не ввели
						this.markField_clear(field);
						return;
					
					} else if(field.value.match(/[^a-z0-9\_\.\-\@]+/i)){ // если ввели недопустимый символ
						this.markField_error(field, this.errorMessages.inputIsIncorrect);
						return;

					// если ввод не соотвествует маске email
					} else if(!field.value.match(/^[a-z0-9][a-z0-9_.-]*@[a-z0-9_.-]+\.[a-z]{2,7}$/i)){
						this.markField_error(field, this.errorMessages.emailIsIncorrect);
						return;

					}/* else { // проверка существования значения поля в базе сервера
						clearTimeout(this.emailTimer);
						this.checkData(field, action);
					}*/
					break;
			}
	},


//	Проверка полей с password
	checkField_password: function(e, field){
			if(!e) e = window.event;

			var currentForm = field.form;
			
			var fieldPass_1 = $(currentForm).getElement('input.' + this.classNames.fieldPass_1);
			var fieldPass_2 = $(currentForm).getElement('input.' + this.classNames.fieldPass_2);


			if(field == fieldPass_1){  // если вводили пароль 1 (основной)

					var fieldPass_2_parent = $(fieldPass_2).getParent('.' + this.classNames.fieldHolder);

					if(fieldPass_1.value.length > 3){ // если длина пароля уже достаточна

						 // если уже вводили пароль 2
						if(fieldPass_2.value.length > 0 && fieldPass_1.value != fieldPass_2.value){ // и значения не совпадают
							this.markField_error(fieldPass_2, this.errorMessages.passwordsAreNotEqual);

						} else if(fieldPass_2.value.length > 0 && fieldPass_1.value == fieldPass_2.value){ // и значения совпадают
							this.markField_checked(fieldPass_2);
						}

						this.markField_checked(fieldPass_1); // метим как прошедшее проверку

						// открываем поле пароля 2
						if(fieldPass_2_parent){
							$(fieldPass_2_parent).removeClass('disabled');
						}
						fieldPass_2.disabled = false;

					} else {  // если длина пароля недостаточна
						switch(e.type){
							case 'blur':
								if(fieldPass_1.value.length){ // если уже было что-то набрано
									this.markField_error(fieldPass_1 , this.errorMessages.passwordIsShort);

								} else { // если ничего не набрано
									this.markField_clear(fieldPass_1);
								}
								break;

							case 'keyup':
								this.markField_clear(fieldPass_1);
								break;
						}

						// скрываем поле пароля 2
						if(fieldPass_2_parent){
							$(fieldPass_2_parent).addClass('disabled');
						}
						fieldPass_2.disabled = true;
					}

			} else if(field == fieldPass_2){  // если вводили пароль 2 (дублирующий)

					switch(e.type){
						case 'blur':
							if(fieldPass_2.value.length == 0){ // если ничего не введено
								this.markField_clear(fieldPass_2);

							} else if(fieldPass_1.value != fieldPass_2.value){  // если пароли не совпадают
								this.markField_error(fieldPass_2 , this.errorMessages.passwordsAreNotEqual);

							} else { // все в порядке
								this.markField_checked(fieldPass_2);
							}
							break;

						case 'keyup':
							if(fieldPass_2.value.length >= fieldPass_1.value.length && fieldPass_1.value != fieldPass_2.value){ // если ввели весь пароль 2
								this.markField_error(fieldPass_2, this.errorMessages.passwordsAreNotEqual);

							} else if (fieldPass_2.value.length < fieldPass_1.value.length) { // если пока не успели ввести весь пароль 2
								this.markField_clear(fieldPass_2);

							} else { // все в порядке
								this.markField_checked(fieldPass_2);
							}
							break;
					}
			}
	},
	
	addContactField : function () {
		if ($('user-contacts-add-field').value != '') {			
			var newField = document.createElement('input');
			newField.setAttribute('class','js-field-data');
			newField.setAttribute('id', 'contact_' + $('user-contacts-add-field').value);
			newField.setAttribute('name', 'userdata[link]['+ $('user-contacts-add-field').value +']');
			newField.setAttribute('type', 'text');
			
			var newFieldLabel = document.createElement('label');
			
			var fullText = contactSources[$('user-contacts-add-field').options[$('user-contacts-add-field').selectedIndex].innerHTML];
			var bits = fullText.split('{input}');
			if (!bits[1]) {
				bits[1] = '';
			}
			
			var beforeLabel = document.createElement('span');
			beforeLabel.setAttribute('class','label');

			var beforeName = document.createElement('span');
			beforeName.setAttribute('class','name');
			beforeName.innerHTML = $('user-contacts-add-field').options[$('user-contacts-add-field').selectedIndex].innerHTML;

			var beforeUrl = document.createElement('span');
			beforeUrl.setAttribute('class','begin');
			beforeUrl.innerHTML = bits[0];
			
			beforeLabel.appendChild(beforeName);
			beforeLabel.appendChild(beforeUrl);
			
			newFieldLabel.appendChild(beforeLabel);
			newFieldLabel.appendChild(newField);
			
			var afterFieldText = document.createElement('span');
			afterFieldText.setAttribute('class','end');
			afterFieldText.innerHTML = bits[1] + '&nbsp;';
			newFieldLabel.appendChild(afterFieldText);
			
			var newFieldDiv = document.createElement('div');
			newFieldDiv.setAttribute('class','js-field-holder');

			var newErrorP = document.createElement('p');
			newErrorP.setAttribute('class','achtung-minen js-field-error-msg');

			newFieldDiv.appendChild(newFieldLabel);
			newFieldDiv.appendChild(newErrorP);

			/* var newFieldHTML = '<label><input class="js-field-data" id="contact_'	+ $('user-contacts-add-field').value + '" name="userdata[link]['+ $('user-contacts-add-field').value +']" type="text" /> ' + $('user-contacts-add-field').options[$('user-contacts-add-field').selectedIndex].innerHTML + '</label>'; */		
			$('user-contacts').appendChild(newFieldDiv);
			
			$('user-contacts-add-field').remove($('user-contacts-add-field').selectedIndex);
			$('user-contacts-add-field').selectedIndex = 0;
		}
	},
	
	xmlResponseHandler_twitter : function(xmlNodes, params){
		$(params.form).removeClass(params.loadingClassName);
		if(xmlNodes.twitter && xmlNodes.twitter.length) {
			var iHTML = '';
			iHTML += xmlNodes.twitter[0].firstChild.data;
			iHTML += ' (<a href="' + xmlNodes.twitter[0].getAttribute('url') + '" target="_blank">' + xmlNodes.twitter[0].getAttribute('time_humanized') + '</a>)';
			$('js-twitter-status-live').removeClass('hidden');
			$('js-twitter-status-live').innerHTML = iHTML;
		}
	},
	
	xmlResponseHandler_region : function (xmlNodes, params) {
		$(params.form).removeClass(params.loadingClassName);
		if(xmlNodes.region && xmlNodes.region.length) {
			var iHTML = '<select name="userdata[region]" class="js-field-data" onchange="profileForm.sendData(this.form, \'cities\');">';
			iHTML += '<option value="">укажите регион</option>';
			for (var i=0; i < xmlNodes.region.length; i++) {
				iHTML += '<option value="'+ xmlNodes.region[i].getAttribute('id') +'">'+ xmlNodes.region[i].firstChild.data +'</option>';
			}
			iHTML += '</select>';
			$('js-formProfile-region-select').innerHTML = iHTML;
			$('js-formProfile-city-select').innerHTML = '';
		}
	},
	
	xmlResponseHandler_city : function (xmlNodes, params) {
		$(params.form).removeClass(params.loadingClassName);
		if(xmlNodes.city && xmlNodes.city.length) {
			var iHTML = '<select name="userdata[city]" class="js-field-data">';
			iHTML += '<option value="">укажите город</option>';
			for (var i=0; i < xmlNodes.city.length; i++) {
				iHTML += '<option value="'+ xmlNodes.city[i].getAttribute('id') +'">'+ xmlNodes.city[i].firstChild.data +'</option>';
			}
			iHTML += '</select>';
			$('js-formProfile-city-select').innerHTML = iHTML;
		}
	},
	
	
	xmlResponseHandler_result : function (xmlNodes, params) {
		$(params.form).removeClass(params.loadingClassName);
		if(xmlNodes.result && xmlNodes.result.length) {
			var name = xmlNodes.result[0].getAttribute('name');
			var value = xmlNodes.result[0].getAttribute('value');
			swf_upload_control_avatar.setUploadURL(this.ajaxUrls.save + '?' + name + '=' + value);
			swf_upload_control_foto.setUploadURL(this.ajaxUrls.save + '?' + name + '=' + value);
			try {
				swf_upload_control_avatar.startUpload();
				swf_upload_control_foto.startUpload();
			} catch (ex) {
				alert(ex);
			}
		}
	},
	
	xmlResponseHandler_message : function(xmlNodes, params){
		$(params.form).removeClass(params.loadingClassName);
		if(xmlNodes.message && xmlNodes.message.length && xmlNodes.message[0].firstChild.data == 'ok') {
			futu_alert(FAT.profile_header, 'Новые настройки успешно сохранились' , false, 'message');
		}
	},
	
	sendFotoAvatarFlash : function () {
		swf_upload_control_avatar.setUploadURL(swf_upload_control_avatar.getSetting('upload_url'));
		
		uploadDone = function () {
			alert(redirect_url);
		};
	},
	
	getInvitationList : function() {
		profileForm.hidePanels();
		var url = '/ajax/blogs/userblogs/invitationslist/';
		var data = '';
		ajaxLoadPost(url, data, this.getInvitationListOnload, this)
	},
	
	getInvitationListOnload : function(ajaxObj) {
		var xmlObj = ajaxObj.responseXML;
		
		var xmlNodes = {};

		for (prop in this.xmlResponse){
			xmlNodes[prop] = xmlObj.getElementsByTagName(this.xmlResponse[prop].node);
		}

		if(xmlNodes.error && xmlNodes.error.length) {
			futu_alert(FAT.profile_header, xmlNodes.error[0].firstChild.data, true, 'error');
		}

		if(xmlNodes.invitationslist && xmlNodes.invitationslist.length) {
			$('js-invitationList').innerHTML = xmlNodes.invitationslist[0].firstChild.data;
			$('js-inviteToBlog').removeClass('hidden');
		}
	},
	
	inviteToBlog: function(form){
		var data = this.realSerializeForm(form);
		ajaxLoadPost(this.ajaxUrls.invite, data, this.inviteToBlogOnload, this);
	},
	
	inviteToBlogOnload: function(ajaxObj) {
		var xmlObj = ajaxObj.responseXML;
		var xmlNodes = {};
		for (prop in this.xmlResponse){
			xmlNodes[prop] = xmlObj.getElementsByTagName(this.xmlResponse[prop].node);
		}
		if (xmlNodes.result && xmlNodes.result[0]) {
			if (xmlNodes.result[0].getAttribute('success') == 'true') {
				futu_alert(FAT.profile_header, xmlNodes.result[0].firstChild.data, false, 'message');							
			} else {
				futu_alert(FAT.profile_header, xmlNodes.result[0].firstChild.data, true, 'error');
			}
		}
		if (xmlNodes.error && xmlNodes.error[0]) {
			futu_alert(FAT.profile_header, xmlNodes.error[0].firstChild.data, true, 'error');
		}
		$('js-inviteToBlog').addClass('hidden');
	},
	
	replyInviteToBlog: function(form, answer){
		var data = this.realSerializeForm(form);
		data += '&answer=' + answer;
		ajaxLoadPost(this.ajaxUrls.invite_reply, data, this.replyInviteToBlogOnload, this);
	},
	
	replyInviteToBlogOnload: function(ajaxObj){
		if(ajaxObj && ajaxObj.responseXML){

			var xmlObj = ajaxObj.responseXML;
			
			var xmlNodes = {};

			for (prop in this.xmlResponse){
				xmlNodes[prop] = xmlObj.getElementsByTagName(this.xmlResponse[prop].node);
			}

			if(xmlNodes.error && xmlNodes.error.length) {
				futu_alert(FAT.profile_header, xmlNodes.error[0].firstChild.data, true, 'error');
			}

			if(xmlNodes.text && xmlNodes.text.length) {
				$('recommendation-mail-action').innerHTML = xmlNodes.text[0].firstChild.data;
			}
			
		}		
	},
	
	addRecommendation : function(friendId) {
		profileForm.hidePanels();
		$('js-addRecommendation').removeClass('hidden');
	},
	
	addRecommendationSend : function(friendId) {
		var type = $('js-addRecommendationType').value;
		var data = 'action=request&type=' + type + '&to_user_id=' + friendId + '&text=' + $('js-addRecommendationMessage').value;
		ajaxLoadPost(this.ajaxUrls.recommendation, data, this.addRecommendationOnload, this);
	},
	addRecommendationOnload : function(ajaxObj) {
		if(ajaxObj && ajaxObj.responseXML){

			var xmlObj = ajaxObj.responseXML;
			
			var xmlNodes = {};

			for (prop in this.xmlResponse){
				xmlNodes[prop] = xmlObj.getElementsByTagName(this.xmlResponse[prop].node);
			}

			if(xmlNodes.error && xmlNodes.error.length) {
				futu_alert(FAT.profile_header, xmlNodes.error[0].firstChild.data, true, 'error');
			}

			if(xmlNodes.text && xmlNodes.text.length) {
				$('js-addRecommendation').getElementsByTagName('fieldset')[0].innerHTML = '<div class="js-addRecommendationMessage">' + xmlNodes.text[0].firstChild.data + '</div>';
			}

		}
	},
	approveRecommendation : function(form, answer) {
		var data = 	'action=reply&answer=' + answer + '&message_id=' + form.elements['message_id'].value + '&request_id=' + form.elements['request_id'].value +	'&recommendation_id=' + form.elements['recommendation_id'].value + '&user_id=' + form.elements['user_id'].value + '&to_user_id=' + form.elements['to_user_id'].value;
		ajaxLoadPost(this.ajaxUrls.recommendation, data, this.approveRecommendationOnload, this);
	},
	approveRecommendationOnload : function(ajaxObj) {
		if(ajaxObj && ajaxObj.responseXML){

			var xmlObj = ajaxObj.responseXML;
			
			var xmlNodes = {};

			for (prop in this.xmlResponse){
				xmlNodes[prop] = xmlObj.getElementsByTagName(this.xmlResponse[prop].node);
			}

			if(xmlNodes.error && xmlNodes.error.length) {
				futu_alert(FAT.profile_header, xmlNodes.error[0].firstChild.data, true, 'error');
			}

			if(xmlNodes.text && xmlNodes.text.length) {
				$('recommendation-mail-action').innerHTML = xmlNodes.text[0].firstChild.data;
			}
			
		}
	}
});


var profileForm = new profileFormClass();

