//Profile class SINGLETON!
if(!mapness){
	var mapness = {};
}

mapness.profile = new function Profile(){
	var that = this; //Douglas does that!
	var cpassword = '';
	var npassword = '';
	var email = '';
	var pass = '';
	/** 
	 *  public variables 
	 */
	this.id = null;
	this.about = null;
	this.name = null;
	this.login = null;
	this.birth = null;
	this.sex = null;
	this.street = null;
	this.city = null;
	this.country = null;
	this.languages = [];
	this.website = null;
	this.interests = null;
	this.interestsCountries = null;
	this.bestExperience = null;
	this.worstExperience = null;
	
	this.initialize = function(data){
		if(data){
			that.id = data.id;
			that.about = data.about;
			that.name = data.name;
			that.birth = data.birth;
			that.sex = data.sex;
			that.city = data.city;
			that.country = data.country;
			that.languages = data.languages;
			that.website = (data.website === null? '' : data.website);
			if(data.interests){
				that.interests = data.interests.interest;
				that.interestsCountries = data.interests.country;
			}
			that.bestExperience = (data.bestExperience === null? '': data.bestExperience);
			that.worstExperience = (data.worstExperience === null? '' : data.worstExperience);
		}
	}
	
	this.sendAbout = function(){
		if(that.about === null || that.id === null){
			return false;
		}else{
			var request = new RequestO("post", "/xhr/edit_profile-about.php", { "profile[id]" : that.id, "profile[about]" : that.about	},{
				"loading": function(){
					mapness.ui.hideError($("#profile-aboutInfo"));
					$("#profile-aboutInfo").prepend('<div class="loaderHolder"></div>');
					mapness.ui.showLoader($("#profile-aboutInfo div.loaderHolder"), 'aboutInfo-loader');		
				},
				"complete": function(response) {
					var response = json_parse(response);
						mapness.ui.hideLoader($("#profile-aboutInfo"));
					if(response.isSuccess){
						mapness.ui.toggleEditProfileInfo("profile-aboutInfo");						
					}else{
						mapness.ui.displayError($("#profile-aboutInfo  h2"),response.callback);
					}
				}
			});
		}
	}
	
	this.sendPersonalInfo = function(){
		if(that.id === null){
			return false;
		}else{
			var request = new RequestO("post", "/xhr/edit_profile-personalInfo.php", { 
					"profile[id]" : that.id, 
					"profile[name]" : that.name,
					"profile[birth]" : that.birth,
					"profile[sex]" : that.sex,
					"profile[street]" : that.street,
					"profile[city]" : that.city,
					"profile[country]" : that.country,
					"profile[languages]" : that.languages,
					"profile[website]" : that.website
				},{
				"loading": function(){
					mapness.ui.hideError($("#personalInfo-name"));
					$("#profile-personalInfo").prepend('<div class="loaderHolder"></div>');
					mapness.ui.showLoader($("#profile-personalInfo div.loaderHolder"), 'personalInfo-loader');	
				},
				"complete": function(response) {
					var response = json_parse(response);
						mapness.ui.hideLoader($("#profile-personalInfo"));
					if(response.isSuccess){
						mapness.ui.toggleEditProfileInfo("profile-personalInfo");
						mapness.ui.handleProfileInfoCallback(response.callback);						
					}else{
						mapness.ui.displayError($("#profile-personalInfo h2"),response.callback.error);
					}
				}
			});
		}
	}
	
	this.sendInterests = function(){
		if(that.id === null){
			return false;
		}else{
			var request = new RequestO("post", "/xhr/edit_profile-interests.php", { 
					"profile[id]" : that.id, 
					"profile[interests]" : that.interests,
					"profile[interestsCountries]" : that.interestsCountries,
					"profile[bestExperience]":that.bestExperience,
					"profile[worstExperience]":that.worstExperience
				},{
				"loading": function(){
					mapness.ui.hideError($("#profile-interests"));
					$("#profile-interests").prepend('<div class="loaderHolder"></div>');
					mapness.ui.showLoader($("#profile-interests div.loaderHolder"), 'interests-loader');	
				},
				"complete": function(response) {
					var response = json_parse(response);
						mapness.ui.hideLoader($("#profile-interests"));
					if(response.isSuccess){
						mapness.ui.toggleEditProfileInfo("profile-interests");
						mapness.ui.handleProfileInterestsCallback(response.callback);						
					}else{
						mapness.ui.displayError($("#profile-interests h2"),response.callback.error);
					}
				}
			});
		}
	}
	
	this.sendNewData = function() {
		if(mapness.journey.j_id != null && mapness.journey.au_id == 0){
			var j_id = mapness.journey.j_id;
		}else{
			var j_id = "";
		} 
		var prequest = new RequestO("post", "/xhr/new_user.php", { 
			"profile[au_login]" : login,
			"profile[au_email]" : email, 
			"profile[au_npassword]" : npassword, 
			"profile[au_cpassword]" : cpassword, 
			"profile[j_id]": j_id			 
		},{
			"loading" : 
				function() {
					mapness.ui.showLoading(DOMcache.get('#profileFormError'),DOMcache.get("#profileForm"),1,"center");						
				},
			"complete" :
				function (response) {		
					if (jQuery.browser.msie) {
						var xmlResponse = new ActiveXObject("Microsoft.XMLDOM");
						xmlResponse.loadXML(response);
					}
					else {
						xmlResponse = response;
					}
					if ($("error",xmlResponse).size() === 0) {
//						that.profileUpdated(response);
						DOMcache.get('#profileFormSuccess').show();
						DOMcache.get('#profileFormHolder').find('.jsLoginForm').hide();
					}
					else {
						that.errorHandler(xmlResponse,DOMcache.get('#profileForm'));
					}
				}
		});
	}
	
	this.sendLoginData = function() {
		var j_id;
		if(mapness.journey.j_id != null && mapness.journey.au_id == 0){
			j_id = mapness.journey.j_id;
		}else{
			j_id = "";
		}
		var prequest = new RequestO("post", "/xhr/login.php", { 
			"login" : login,
			"pass" : pass, 
			"mode" : 2, 
			"j_id": j_id
		},{
			"loading" : 
				function() {
					mapness.ui.showLoading(DOMcache.get('#loginFormError'),DOMcache.get('#loginForm'),1,"center");
				},
			"complete" :
			function (response) {
				if (jQuery.browser.msie) {
					var xmlResponse = new ActiveXObject("Microsoft.XMLDOM");
					xmlResponse.loadXML(response);
				}
				else {
					xmlResponse = response;
				}
				if ($("error",xmlResponse).size() === 0) {					
					that.profileLoggedIn();
				} else {
					that.errorHandler(xmlResponse,DOMcache.get('#loginForm'));
				}
			}
		});
		return false;
	}
	/**
	 * Not used on journey:
	 */
	
	this.profileLoggedIn = function(){
		var host = window.location.hostname;
		var address = "http://"+host+"/journey/";
//		if(mapness.journey.getOwner() === 0){			
		if(mapness.journey.j_id === null){
			window.location = address;
		}else{
			window.location = address+mapness.journey.j_id;	
		}
				
//		}else{
//			document.location.reload();
//		}				
				
	}
	
	this.errorHandler = function(response,formholder){
		$("error",response).each(function() {
			var error = $(this).text();
			DOMcache.get('#'+formholder.attr("id")+'Error').html(error+"<br/>").show();
			formholder.show();
//			mapness.ui.displayError(error,formholder,'profile'); THAT IS:
//			mapnessDOM[namespace][placeholder.attr("id")+"Error"].html(error+"<br/>");
//			mapnessDOM[namespace][placeholder.attr("id")+"Error"].show();
//			placeholder.show();	
						
		})
	}
	
	this.setData = function(form) {		
		if(form == 'register'){
			login = DOMcache.get('#au_login').val().entityify();
			email = DOMcache.get('#au_email').val().entityify();
			npassword = DOMcache.get('#au_npassword').val().entityify();
			cpassword = DOMcache.get('#au_cpassword').val().entityify();
		}else{
			login = DOMcache.get('#login').val().entityify();
			pass = DOMcache.get('#pass').val().entityify();
		}
	}
	
	this.ev = {};
	
	this.ev.submitProfile = function() {
		$("#profileForm").validate({
			debug: true,
			rules: {	
				"profile[au_login]": { 		
					required: true,
					minlength: 3,
					maxlength: 16
				},
				"profile[au_email]": {
					required: true,
					email: true
				},
				"profile[au_npassword]": {
					required: function() {
						if(mapness.profile.au_id == 0){ //<--- @Mike: Note to self: TU JEST ZJEBANE!!!
							return true;						
						}
					},
					minlength: 4
				},
				"profile[terms]": {
					required: function() {
						if(mapness.profile.id === 0){
							return "required";
						}
					}
				},
				"profile[au_cpassword]": {
					required: function() {
						if( DOMcache.get("#au_npassword").val() != ""){
//						if( mapnessDOM.profile.au_npassword.val() != ""){
							return true;
						}else{
							return false;
						}
					},
					equalTo: "#au_npassword"
				},
				"profile[au_password]": {
					required: function() {
						if( DOMcache.get("#au_npassword").val().entityify() != "" || mapness.profile.email != DOMcache.get("#au_email").val().entityify()   ){ // removed:.entityify();
//						if( mapnessDOM.profile.au_npassword.val().entityify() != "" || mapnessJSON.profile.email != mapnessDOM.profile.au_email.val().entityify()   ){ // removed:.entityify();
							return true;
						} else {
							return false;
						}
					},
					minLength: 4
				}
			},
			
			messages: {		
				"profile[terms]": {
					required: mapness.dict.words.required_terms_accept
				},		
				"profile[au_login]": {
					required: mapness.dict.words.required_login,
					minlength: mapness.dict.words.required_min_login_length,
					maxlength: mapness.dict.words.required_max_login_length
				},
				"profile[au_email]":{
					required: mapness.dict.words.required_email,
					email: mapness.dict.words.required_email
				},
				"profile[au_npassword]": {
					required: mapness.dict.words.required_confirm_password,
					equalTo: mapness.dict.words.required_equal_password,
					minlength: mapness.dict.words.required_min_pass_length,
					maxlength: mapness.dict.words.required_max_pass_length
				},
				"profile[au_password]": mapness.dict.words.required_confirm_password,
				"profile[au_cpassword]" : mapness.dict.words.required_equal_password
										
			},		
			submitHandler: function() {
				mapness.profile.setData('register');
				if(mapness.profile.id === 0){
//					if(mapness.journey.j_id != null && mapness.journey.au_id == 0){
//						mapness.profile.setLoginJID();
//					}
					mapness.profile.sendNewData();
				}
			}
		});
	}
	
	this.ev.submitLogin = function() {
		if( mapness.profile.id === 0){ // valideate only if form is present
		 	DOMcache.get("#loginForm").validate({
//		 	mapnessDOM.profile.loginForm.validate({
				rules: {
					"login": "required",
					"pass": "required"
				},
				submitHandler: function() {
					//mapness.initProfile();
					mapness.profile.setData('login');
//					mapness.profile.setLoginJID();	// ONLE NECCESARY IF profile[j_id] from setData() won't work
					mapness.profile.sendLoginData();
				}
			});	
		};
	}
}

