function Owner(cntrl)
{
	var owner = {};
	owner = new NET(cntrl);// inherit net class
	var params = gadgets.views.getParams();
	
	/* Attributes */
	
	owner.id 					= params['ownerId'];
	owner.installState			= params['installState'];
	owner.loadUserId			= params['user_id'];
	owner.attack_strength 		= null;
	owner.auto_deposit_plan		= null;
	owner.bank_status 			= null;
	owner.banned				= false;
	owner.bounty_collected 		= null;
	owner.cash 					= null;
	owner.cash_flow				= null;
	owner.cash_in_bank 			= null;
	owner.clas 					= null;
	owner.death_count			= null;
	owner.defense_strength 		= null;
	owner.display_name 			= null;
	owner.energy 				= null;
	owner.energy_cycle			= null;
	owner.energy_refresh		= null;
	owner.energy_timestamp 		= null;
	owner.experience 			= null;
	owner.favour_point 			= null;
	owner.fight_lost_count		= null;
	owner.fight_won_count 		= null;
	owner.firstLogin			= false;
	owner.first_login_of_day	= 0;
	owner.gang_size 			= null;
	owner.health 				= null;
	owner.health_cycle			= null;
	owner.health_refresh		= null;
	owner.health_timestamp 		= null;
	owner.income 				= null;
	owner.income_cycle			= null;
	owner.income_refresh		= null;
	owner.kill_count			= null;
	owner.level 				= 1;
	owner.level_experience		= 1;
	owner.max_energy 			= null;
	owner.max_health 			= null;
	owner.max_stamina 			= null;
	owner.mission_completed 	= null;
	owner.mktime				= null;
	owner.name 					= null;
	owner.num_of_marks			= null;
	owner.plan_timestamp		= null;
	owner.profile_url 			= null;
	owner.race 					= null;
	//owner.sklPnt	 			= null;
	owner.skill_point 			= null;
	owner.stamina 				= null;
	owner.stamina_cycle			= null;
	owner.stamina_refresh		= null;
	owner.stamina_timestamp 	= null;
	owner.thumbnail_url 		= null;
	owner.upkeep 				= null;
	owner.user_exist 			= null;
	owner.UreadComment 			= null;
	
	/* Used only in registration process */
	owner.reg_name 				= null;
	owner.reg_race 				= null;
	owner.reg_clas 				= null;
	
	/* EOF Attributes */
	
	/* Function Declaration */
	
	owner.chooseClass 					= chooseClass;
	owner.chooseRace 					= chooseRace;
	owner.clearMessage					= clearMessage;
	owner.isAppInstalled 				= isAppInstalled;
	owner.getOwnerInfo 					= getOwnerInfo;
	owner.getOwnerInfoCallback 			= getOwnerInfoCallback;
	owner.loadOwnerData 				= loadOwnerData;
	owner.loadOwnerDataCallback 		= loadOwnerDataCallback;
	owner.loadPage 						= loadPage;
	owner.outputMessage 				= outputMessage;
	owner.refresh						= refresh;
	owner.refreshCallback				= refreshCallback;
	owner.register 						= register;
	owner.registerCallback 				= registerCallback;
	owner.submitRegistrationPage 		= submitRegistrationPage;
	
	/* EOF Function Declaration */
	
	/* Function Definition */
	
	function chooseClass(clas)
	{
		owner.reg_clas = clas;
	};
	
	function chooseRace(race)
	{
		owner.reg_race = race;
	};
	
	function clearMessage()
	{
		$('#registration_message').html('');
		$('#registration_message').css('display', 'none');
	};
	
	function isAppInstalled()
	{
		if(owner.installState!=0)
			return true;
		else
			return false;
	};
	
	function getOwnerInfo()
	{
		var request = opensocial.newDataRequest();
		request.add(request.newFetchPersonRequest('OWNER'), "owner");
		request.send(owner.getOwnerInfoCallback);
	};
	
	function getOwnerInfoCallback(response)
	{
		if(response.hadError())
		 {
			owner.outputMessage('Error: '+response.get('owner').getErrorMessage);
			return;
		 }
		 var data = response.get('owner').getData();
		 if(!data.isOwner())
		 { 
			 owner.outputMessage(config.appNotInstalledMessage);
			 return;
		 }
		owner.thumbnail_url = data.getField('thumbnailUrl');
		owner.profile_url = data.getField('profileUrl');
		owner.display_name = data.getDisplayName('display_name');
		owner.loadOwnerData(escape(owner.thumbnail_url), escape(owner.profile_url));
	};

	/*
	 * @param display_name
	 * @param thumnailUrl
	 * @param profileUrl
	 * @return
	 */
	function loadOwnerData(thumnailUrl, profileUrl)
	{
		owner.makeRequest();
	};
	
	/*
	 * if user exist then loads the owner attributes with the server data
	 * if not then redirect to first page for user registration 
	 * @param xml
	 * @return
	 */
	function loadOwnerDataCallback(xml)
	{ 
		owner.user_exist = $('owner', xml).find('usrExst').text();
		$('#app_loading').hide();
		$('#appBody').show();
		if(owner.user_exist != 1)
		{
			app.loadPage('registration');
			return;
		}
		if(owner.banned)
		{
			app.loadPage('banned');
			return;
		}
		app.healthCounter();
		app.energyCounter();
		app.staminaCounter();
		app.goldCounter();
		$('#stat1, #stat2, #stat_refresh').show();
		app.loadPage('gang');// for start requesting friend list on app load
		if(owner.firstLogin)
		{
			app.loadPage('tutorial');
			return;
		}
		app.initializePage();
		if(owner.loadUserId)
		{
			app.loadPage('profile'); 
			return;
		}
		app.loadPage();
	};
	 	 
	function loadPage(page)
	{
		owner.adjustWindowHeight();
		$('#registration_user_name').html(owner.display_name);
		$('#registration_thumb').html("<img width=\"100px\" height=\"100px\" src=\""+owner.thumbnail_url+"\" />");
		$('#registration_greeting_message').html(config.registration['greeting_message']);
		$('#register_vampire').click(function(){$('#register_choose_race > div').removeClass('race_selected'); $(this).addClass('race_selected'); owner.chooseRace(1);});
		$('#register_human').click(function(){$('#register_choose_race > div').removeClass('race_selected'); $(this).addClass('race_selected'); owner.chooseRace(2);});
		$('#register_warewolf').click(function(){$('#register_choose_race > div').removeClass('race_selected'); $(this).addClass('race_selected'); owner.chooseRace(3);});
		$('#register_speed').click(function(){$('#register_choose_class > div').removeClass('class_selected'); $(this).addClass('class_selected'); owner.chooseClass(1);});
		$('#register_healer').click(function(){$('#register_choose_class > div').removeClass('class_selected'); $(this).addClass('class_selected'); owner.chooseClass(2);});
		$('#register_treasure').click(function(){$('#register_choose_class > div').removeClass('class_selected'); $(this).addClass('class_selected'); owner.chooseClass(3);});
		$('#register_recruiter').click(function(){$('#register_choose_class > div').removeClass('class_selected'); $(this).addClass('class_selected'); owner.chooseClass(4);});
	};
	
	function outputMessage(msg, type)
	{
		var str = "";
		switch(type)
		{
		default:
		case 'SUCCESS':
		case 'success':
		case 's':
		case 'S':
		case 1:
			str = "<div class=\"success\">"+msg+"</div>";
			break;
			
		case 'INFO':
		case 'info':
		case 'i':
		case 'I':
		case 2:
			str = "<div class=\"info\">"+msg+"</div>";
			break;
			
		case 'ERROR':
		case 'error':
		case 'e':
		case 'E':
		case 3:
			str = "<div class=\"error\">"+msg+"</div>";
			break;
			
		case 'WARNING':
		case 'warning':
		case 'w':
		case 'W':
		case 4:
			str = "<div class=\"warning\">"+msg+"</div>";
			break;
			
		case 'MESSAGE':
		case 'message':
		case 'm':
		case 'M':
		case 5:
			str = msg;
			break;
		}
		$('#registration_message').html(str);
		$('#registration_message').css('display', 'block');
		document.location = "#top";
	};
	
	function refresh(page)
	{
		app.startRefreshing();
		owner.makeRequest(false);
	};
	
	function refreshCallback(xml)
	{
		app.refresh(xml);
		app.stopRefreshing();
		var page = $(xml).find('page').text();
		if(page == 'app')
			return;
		var script = page+".refresh()";
		eval(script);
	};
	
	/**
	 * register a new user 
	 * @param name
	 * @param thumbnail_url
	 * @param profile_url
	 * @param race
	 * @param class
	 * @return
	 */
	function register(name, thumbnail_url, profile_url, race, clas)
	{
		owner.makeRequest();
	};
	
	function registerCallback(xml)
	{
		owner.firstLogin = true;
		owner.loadOwnerData(owner.thumbnail_url, owner.profile_url);
	};
	
	function submitRegistrationPage()
	{
		owner.reg_name = $('#registration_name').val();
		if(!owner.reg_name || owner.reg_name == "")
		{
			owner.outputMessage(config.registration['no_name_error'], 'info');
			return;
		}
		if(!owner.reg_race || owner.reg_race == "")
		{
			owner.outputMessage(config.registration['no_race_error'], 'i');
			return;
		}
		if(!owner.reg_clas || owner.reg_clas == "")
		{
			owner.outputMessage(config.registration['no_class_error'], 'i');
			return;
		}
		
		if(!$('#registration_tos').attr('checked'))
		{
			owner.outputMessage('Please read and accept the Terms of service to continue.', 'i');
			return;
		}
		owner.register(unescape(owner.reg_name), unescape(owner.thumbnail_url), unescape(owner.profile_url), owner.reg_race, owner.reg_clas);
	};
	
	/* EOF Function Definition */
	
	return owner;
}