jQuery(document).ready(function () {MyAccount.init.call()});

MyAccount = {};

MyAccount.saveUrl             = MTSettings.sitepath + 'ajax/myaccount.cfc?method=saveProperty';
MyAccount.setShowInProfileUrl = MTSettings.sitepath + 'ajax/myaccount.cfc?method=setShowInProfile';
MyAccount.updateProfileUrl    = MTSettings.sitepath + 'ajax/myaccount.cfc?method=profile';

MyAccount.init = function () {
	jQuery('.hover-edit').hoveredit({
		saveCallback: MyAccount.saveUserProperty,
		autoresize: true
	})
	.bind('error.input-required', MyAccount.showInputRequiredError);

	jQuery('.overlay-trigger').overlay({
		top: 'center',
		left: 'center',
		fixed: false,
		mask: {
			color: '#000',
			opacity: 0.4
		}
	});

	/* bind click events on show-in-profile checkboxes */
	jQuery('.show-in-profile').click(MyAccount.setShowInProfile);

	jQuery('.overlay-container .mt-ajax-form').bind('ajaxFormSuccess', MyAccount.closeOverlay);
	jQuery('#changeAvatarForm').bind('ajaxFormSuccess', MyAccount.updateAvatar);
	jQuery('#formEvotingPoll').bind('ajaxFormSuccess', MyAccount.updateHobbies);
	jQuery('#is_newsletter').click(MyAccount.toggleNewsletter);
	// PASSWORD VALIDATION ONBLUR
	onBeforeLoad: jQuery('#change-password-overlay input:password[name=old_password]').val('');
	jQuery('#change-password-overlay input.input-required:password').blur(MyAccount.validatePassword);
};

MyAccount.updateProfile = function () {
	jQuery.ajax({
		url: MyAccount.updateProfileUrl,
		type: 'get',
		dataType: 'html',
		data: {
			'lang_id': MTSettings.langId
		},
		success: function (response) {
			jQuery('#profile-preview .dynamic').replaceWith(response);
		}
	});
};

/**
 * Saves a user property.
 * This function is passed to and called by the hoveredit plugin.
 * It must therefore call wrapper.hoveredit('success') once the
 * ajax call returns successfully.
 * @this wrapper element to the hoveredit form element
 */
MyAccount.saveUserProperty = function (form_element, old_value) {
	var wrapper = this;
	jQuery.ajax({
		url: MyAccount.saveUrl,
		type: 'post',
		dataType: 'json',
		data: {
			'name': form_element.attr('name'),
			'value': form_element.val(),
			'lang_id': MTSettings.langId
		},
		success: function (response) {
			if (response.success) {
				wrapper.hoveredit('success');
				MyAccount.updateProfile();
			} else {
				MyAccount.showErrorFadeOut(wrapper, response.error);
				wrapper.hoveredit('error');
			}
		}
	});
};

/* toggle Newsletter subscription ON / OFF */
MyAccount.toggleNewsletter = function () {
	if (jQuery('#is_newsletter:checked').length == 0) {
		var is_newsletter_val = false;
	} else {
		var is_newsletter_val = true;
	}
	jQuery.ajax({
		url: MyAccount.saveUrl,
		type: 'post',
		dataType: 'json',
		data: {
			'name': 'is_newsletter',
			'value': is_newsletter_val,
			'lang_id': MTSettings.langId
		}
	});
};

MyAccount.showInputRequiredError = function (event, wrapper) {
	MyAccount.showErrorFadeOut(wrapper, MTSettings.myaccount.errors.inputRequired);
};

MyAccount.showErrorFadeOut = function(wrapper, error) {
	formHint = wrapper.siblings('.formHint:first');
	wrapper.siblings('.errorHint:first')
		.text(error)
		.delay(5000)
		.fadeOut('normal', function () {
			formHint.show();
			jQuery(this).text("").show();
		});
	formHint.hide();
};

/***** PASSWORD VALIDATION *****/

MyAccount.validatePassword = function () {
	var value = jQuery(this).val();
	var attrName = jQuery(this).attr('name');

	// PASSWORD REGEX VALIDATION
	if (attrName == 'new_password') {
		if(!isValidPassword(value)) {
			jQuery(this).parent().find('.errorHint').show();
		} else {
			jQuery(this).parent().find('.errorHint').hide();
		}
	}
	// PASSWORD CONFIRMATION VALIDATION
	if (attrName == 'new_password_confirmation') {
		var pass1 = jQuery('#new_password').val();
		var pass2 = jQuery('#new_password_confirmation').val();
		if(pass1 !== pass2) {
			jQuery(this).parent().find('.errorHint').show();
		} else {
			jQuery(this).parent().find('.errorHint').hide();
		}
	}
};
function isValidPassword(Password) {
	var pattern = new RegExp(/([a-zA-Z0-9]{6,10})/i);
	return pattern.test(Password);
}
/***** AJAX FORM HANDLING *****/

MyAccount.closeOverlay = function (event, data) {
	MyAccount.updateProfile();
	rel_id = jQuery(this).parents('.overlay-container').attr('id');
	jQuery('.overlay-trigger[rel=#'+rel_id+']').each(function () {
		var api = jQuery(this).data('overlay');
		if (api.isOpened()) {
			if(rel_id = 'change-password-overlay'){
				var tickiSuccessMsg = jQuery('#change-password-overlay-ticki-msg').html();
				Ticki.openTickiPopup(tickiSuccessMsg);
			};
			api.close();
		}
	});
};

MyAccount.updateHobbies = function (event, response) {
	jQuery('#hobbies-list').text(response.hobbies);
};

MyAccount.updateAvatar = function (event, response) {
	jQuery('#avatar-img').attr('src', response.avatarUrl);
};

/***** SHOW IN PROFILE CHECKBOXES *****/

MyAccount.setShowInProfile = function (event) {
	form_element = jQuery(this);
	jQuery.ajax({
		url: MyAccount.setShowInProfileUrl,
		type: 'post',
		dataType: 'json',
		data: {
			'name': form_element.val(),
			'value': form_element.is(':checked'),
			'lang_id': MTSettings.langId
		},
		success: function (response) {
			if(response.success) {
				MyAccount.updateProfile();
			} else {
				//TODO: Error handling?
			}
		}
	});
};

