var ProfileManager = Class.create({

	loadProfile: function() {
		new Ajax.Request('/' + locale + '/GetProfile.json',
        {
        	method: 'get',
        	asynchronous: false,
        	parameters: { useResponseBody: 'true', jsonSource: '' },
        	onSuccess: function(transport) {
        		var json = transport.responseText.evalJSON();
        		switch (json.type) {
        			case 'JsonMethodMessage':
        				profileManager.profile = json.result;
        				break;
        			case 'JsonSystemExceptionMessage':
        				profileManager.profile = null;
        				break;
        		}
        	},
        	onFailure: function() {
        		profileManager.profile = null;
        	}
        });
	},

	login: function(email, password, feedbackPanel) {
		$(feedbackPanel).update();

		var jsonParams = {
			'login': email,
			'password': password
		}

		document.body.style.cursor = 'wait';
		new Ajax.Request('/' + locale + '/Login.json',
        {
        	method: 'get',
        	parameters: { useResponseBody: 'true', jsonString: Object.toJSON(jsonParams) },
        	onSuccess: function(transport) {
        		var json = transport.responseText.evalJSON();
        		switch (json.type) {
        			case 'JsonMethodMessage':
        				profileManager.profile = json.result;
        				//alert("Logged in...");
        				checkForumUserName();
        				break;
        			case 'JsonValidationMessage':
        				handleValidationError(feedbackPanel, json.messages);
        				break;
        			case 'JsonSystemExceptionMessage':
        				handleSystemExceptionError(feedbackPanel, json.message);
        				break;
        		}
        	},
        	onFailure: function() {
        		handleSystemExceptionError(feedbackPanel, json.message);
        	},
        	onComplete: function() {
        		document.body.style.cursor = 'default';
        	}
        });
	}
});

var profileManager;

document.observe("dom:loaded", function() {

	// initialize ProfileManager
	profileManager = new ProfileManager();

	// load profile
	profileManager.loadProfile();

	// To Hide registration link
	if (userLoggedIn) {
		hideRegistrationLink();
	}

	// registering events
	if ($('updateAccountOverlayLink') != null) {
		$('updateAccountOverlayLink').observe('click', showForumUserNameOverlay);
	}

	if ($('createUserNameButton') != null) {
		$('createUserNameButton').observe('click', createUserName);
	}

	if ($('forumUserNameClose') != null) {
		$('forumUserNameClose').observe('click', reloadPage);
	}

	if ($('loginOverlayLink') != null) {
		$('loginOverlayLink').observe('click', showLoginOverlay);
	}

	if ($('loginOverlayButton') != null) {
		$('loginOverlayButton').observe('click', loginUser);
	}

	if ($('createAccountOverlayLink') != null) {
		$('createAccountOverlayLink').observe('click', showCreateAccountOverlay);
	}

	if ($('createAccountButton') != null) {
		$('createAccountButton').observe('click', createAccount);
	}

	if ($('forgotPassword') != null) {
		$('forgotPassword').observe('click', forgotPasswordLinkClicked);
	}

	if ($('popup_closePassword') != null) {
		$('popup_closePassword').onclick = function() {
			hideForgotPasswordOverlay();
		};
	}

	if ($('forgotPasswordClose') != null) {
		$('forgotPasswordClose').observe('click', function(event) {
			hideForgotPasswordOverlay();
		});
	}
});

function reloadPage() {
	location.reload();
}

function showForumUserNameOverlay(event) {

	clearControl('forumUserNameFeedbackPanel');
	new Popup('forumUserNameOverlay', null, { modal: true }, { position: 'center' });
	$('forumUserNameOverlay').popup.show();
	$('popup_overlay').onclick = function() {
		$('forumUserNameOverlay').popup.hide();
		reloadPage();
	};
}

function showForumUserNameConfirmationPanel(message) {

	$('forumUserNameOverlay').select('div.formPanel')[0].hide();
	$('forumUserNameOverlay').select('div.confirmationPanel')[0].show();
	$('forumUserNameClose').observe('click', function(event) { $('forumUserNameOverlay').popup.hide(); });
}

function createUserName(event) {

	document.body.style.cursor = 'wait';
	var profileContainerDTO = {
		actions: 1,
		profileData: profileJsonString()
	};

	new Ajax.Request('/' + locale + '/UpdateProfile.json',
    {
    	method: 'get',
    	parameters: { useResponseBody: 'true', jsonString: Object.toJSON(profileContainerDTO) },
    	onSuccess: function(transport) {
    		var json = transport.responseText.evalJSON();
    		switch (json.type) {
    			case 'JsonMethodMessage':
    				profileManager.profile = json.result;
    				showForumUserNameConfirmationPanel();
    				break;
    			case 'JsonValidationMessage':
    				handleValidationError('forumUserNameFeedbackPanel', json.messages);
    				break;
    			case 'JsonSystemExceptionMessage':
    				handleSystemExceptionError('forumUserNameFeedbackPanel', json.message);
    				break;
    		}
    	},
    	onFailure: function() {
    		handleSystemExceptionError('forumUserNameFeedbackPanel', json.message);
    	},
    	onComplete: function() {
    		document.body.style.cursor = 'default';
    	}
    });

	event.stop();
}

function profileJsonString() {

	var profile = profileManager.profile;

	var profileInfo = {
		salutation: profile.salutation,
		firstName: profile.firstName,
		lastName: profile.lastName,
		address: profile.address,
		email: profile.email,
		forumsUsername: $F('forumUserName'),
		login: profile.email,
		newsletters: profile.newsletters
	};

	return profileInfo;
}

function loginUser(event) {

	profileManager.login($F('loginOverlayEmailAddress'), $F('loginOverlayPassword'), 'loginFeedbackPanel');
	event.stop();
}

function checkForumUserName() {

	var profile = profileManager.profile;

	if (profile.forumsUsername == "" || profile.forumsUsername == null) {
		hideLoginOverlay();
		showForumUserNameOverlay();

	} else {
		reloadPage();
	}
}

function showCreateAccountOverlay(event) {

	clearControl('createAccountFeedbackPanel');
	new Popup('createAccountOverlay', null, { modal: true }, { position: 'center' });
	$('createAccountOverlay').popup.show();
	$('popup_overlay').onclick = function() {
		$('createAccountOverlay').popup.hide();
		profileManager.login($F('createAccountEmail'), $F('createAccountPassword'), 'createAccountFeedbackPanel');
	};
}

function createAccount(event) {

	var profile = {
		forumsUsername: $F('createAccountForumUserName'),
		email: $F('createAccountEmail'),
		login: $F('createAccountEmail'),
		firstName: $F('createAccountFirstName'),
		lastName: $F('createAccountLastName'),
		password: $F('createAccountPassword'),
		confirmpassword: $F('createAccountConfirmPass'),
		privacyPolicyAgreement: true,
		termsAndConditionAgreement: true
	};

	document.body.style.cursor = 'wait';

	new Ajax.Request('/' + locale + '/CreateProfile.json',
    {
    	method: 'get',
    	parameters: { useResponseBody: 'true', jsonString: Object.toJSON(profile) },
    	onSuccess: function(transport) {
    		var json = transport.responseText.evalJSON();
    		switch (json.type) {
    			case 'JsonMethodMessage':
    				//alert("Success");                    
    				showCreateUserConfirmationPanel();
    				break;
    			case 'JsonValidationMessage':
    				handleValidationError('createAccountFeedbackPanel', json.messages);
    				break;
    			case 'JsonSystemExceptionMessage':
    				handleSystemExceptionError('createAccountFeedbackPanel', json.message);
    				break;
    		}
    	},
    	onFailure: function() {
    		handleSystemExceptionError('createAccountFeedbackPanel', json.message);
    	},
    	onComplete: function() {
    		document.body.style.cursor = 'default';
    	}
    });

	event.stop();
}

function showCreateUserConfirmationPanel() {

	$('createAccountOverlay').select('div.formPanel')[0].hide();
	$('createAccountOverlay').select('div.confirmationPanel')[0].show();
	$('createAccountClose').observe('click', function(event) {
		$('createAccountOverlay').popup.hide();
		profileManager.login($F('createAccountEmail'), $F('createAccountPassword'), 'createAccountFeedbackPanel');
	});
}

function forgotPasswordLinkClicked(event) {
	
	var emailClientID = $('emailClientID').innerHTML;	
	var jsonParam = {
		'email': $F(emailClientID)
	}

	document.body.style.cursor = 'wait';
	new Ajax.Request('/' + locale + '/ForgotPassword.json',
      {
      	method: 'get',
      	parameters: { useResponseBody: 'true', jsonString: Object.toJSON(jsonParam) },
      	onSuccess: function(transport) {
      		var json = transport.responseText.evalJSON();
      		switch (json.type) {
      			case 'JsonMethodMessage':
      				showForgotPasswordConfirmOverlay();
      				break;
      			case 'JsonValidationMessage':
      				handleValidationError('forgotPasswordFeedbackPanel', json.messages);
      				break;
      			case 'JsonSystemExceptionMessage':
      				handleSystemExceptionError('forgotPasswordFeedbackPanel', json.message);
      				break;
      		}
      	},
      	onFailure: function() {
      		handleSystemExceptionError('forgotPasswordFeedbackPanel', json.message);
      	},
      	onComplete: function() {
      		document.body.style.cursor = 'default';
      	}
      });

	event.stop();	
}

function showForgotPasswordConfirmOverlay() {

	new Popup('forgotPasswordOverlay', null, { modal: true }, { position: 'center' });
	$('forgotPasswordOverlay').popup.show();

	$('forgotPasswordOverlay').select('div.formPanel')[0].hide();
	$('forgotPasswordOverlay').select('div.confirmationPanel')[0].show();

	$('popup_overlay').onclick = function() {
		hideForgotPasswordOverlay();
	};
}

function hideRegistrationLink() {
	$('subcontent-a').select('div ul li').each(function(item) {
		var href = item.select('a')[0].getAttribute('href');
		if (href.length > 17) {
			var pageNameLength = href.length - 17;
			var pageName = href.substring(pageNameLength, href.length);
			if (pageName == "registration.html") {
				item.addClassName("hide");
			}
		}
	});
}
