function Skill(cntrl)
{
	var skill = {};
	skill = new NET(cntrl);// inherit net class
	
	/* Attributes */
	
	/* EOF Attributes */
	
	/* Function Declaration */
	
	skill.getData = getData;
	skill.increaseAttribute=increaseAttribute;
	skill.increaseAttributeCallback = increaseAttributeCallback;
	skill.acceptOffer = acceptOffer;
	skill.acceptOfferCallback = acceptOfferCallback;
	skill.loadPage = loadPage;
	skill.refreshAmt = refreshAmt;
	skill.refresh = refresh;	
	
	/* EOF Function Declaration */
	
	/* Function Definition */
	
	function getData(attribute)
	{
		var cur_skill = owner.skill_point;
		var cur_fav=owner.favour_point;
		var amt=$('#'+attribute+'_amt').val();
		switch(attribute)
		{
				case 'attack_strength':
					var req_skill=(parseInt(amt*1));
					if(cur_skill<req_skill)
					{
						skill.outputMessage('You need '+numberFormat(req_skill-cur_skill)+' more Skill points to upgrade '+amt+' Attack Strength.','i');
						return;
					}
					break;
				case 'defense_strength':
					var req_skill=(parseInt(amt*1));
					if(cur_skill<req_skill)
					{
						skill.outputMessage('You need '+numberFormat(req_skill-cur_skill)+' more Skill points to upgrade '+amt+' Defense Strength.','i');
						return;
					}
					break;
				case 'max_energy':
					var req_skill=(parseInt(amt*1));
					if(cur_skill<req_skill)
					{
						skill.outputMessage('You need '+numberFormat(req_skill-cur_skill)+' more Skill points to upgrade '+amt+' Maximum Energy.','i');
						return;
					}
					break;
				case 'max_health':
					var req_skill=((parseInt((amt*1)/10)));
					if(cur_skill<req_skill)
					{
						skill.outputMessage('You need '+numberFormat(req_skill-cur_skill)+' more Skill points to upgrade '+amt+' Maximum Health.','i');
						return;
					}
			    	break;
			    case 'max_stamina':
			    	var req_skill=(parseInt(amt*2));
			    	if(cur_skill<req_skill)
					{
						skill.outputMessage('You need '+numberFormat(req_skill-cur_skill)+' more Skill points to upgrade '+amt+' Maximum Stamina.','i');
						return;
					}
			    	break;		    	
		}
		skill.increaseAttribute(attribute,amt);	
	};

	function increaseAttribute(attribute,amt)
	{
		skill.makeRequest();
	};
	
	function increaseAttributeCallback(xml)
	{
		var message=$('data',xml).find('message').text(); 
		var attr = $('data',xml).find('attr').text();
		var attrVal = eval('owner.'+attr);
		$('#cur_'+attr).html(attrVal);
		var curFavPnt = $('owner',xml).find('fvrPnt').text();
		$('#cur_fav').html(curFavPnt);
		var cur_skill = $('owner',xml).find('sklPnt').text();
		$('#cur_skill').html(cur_skill+" ");
		skill.outputMessage(message,'s');		
	};
		
	function acceptOffer(attribute)
	{
		switch(attribute)
		{
			case 'health':
			case 'energy':
			    		if(owner.favour_point<10)
						{
							skill.outputMessage('You need '+numberFormat(10 - owner.favour_point)+' more Coins to upgrade max '+attribute+'.','i');
							return;
						}
						break;
			case 'stamina':
						if(owner.favour_point<20)
						{
							skill.outputMessage('You need '+numberFormat(20 - owner.favour_point)+' more Coins to upgrade max '+attribute+'.','i');
							return;
						}
						break;
		}	
		skill.makeRequest();
	};
	
	function acceptOfferCallback(xml)
	{
		var message=$('data',xml).find('message').text(); 
		var curFavPnt = owner.favour_point;
		$('#cur_fav').html(curFavPnt);
		skill.outputMessage(message,'s');		
	};
	
	function refreshAmt(attr)
	{ 
		var cur_skill = owner.skill_point;
		var cur_attackSth = owner.attack_strength;
		var cur_defenseSth = owner.defense_strength;
		var cur_max_energy = owner.max_energy;
		var cur_max_health = owner.max_health;
		var cur_max_stamina = owner.max_stamina;
		var cur_fav = owner.favour_point;
		$('#cur_skill').html(numberFormat(cur_skill));
		$('#cur_fav').html(numberFormat(cur_fav));
		$('#cur_attack_strength').html(cur_attackSth);
		$('#cur_defense_strength').html(cur_defenseSth);
		$('#cur_max_energy').html(cur_max_energy);
		$('#cur_max_health').html(cur_max_health);
		$('#cur_max_stamina').html(cur_max_stamina);
		var skill_amt = $('#'+attr+'_amt').val();
		switch(attr)
		{
			case 'attack_strength':
				var req_skill=(parseInt(skill_amt*1));
				$('#req_attack_skill').html(req_skill);
				break;
			case 'defense_strength':
				$('#req_defense_skill').html((parseInt(skill_amt*1)));
				break;
			case 'max_energy':
				$('#req_energy_skill').html((parseInt(skill_amt*1)));
				break;
			case 'max_health':
				$('#req_health_skill').html((parseInt((skill_amt*1)/10)));
		    	break;
		    case 'max_stamina':
		    	$('#req_stamina_skill').html((parseInt(skill_amt*2)));
		    	break;	    	
			case 'health':
				$('#req_favour_point').html(10);
				break;
			case 'energy':
				$('#req_favour_point').html(10);
				break;
			case 'stamina':
				$('#req_favour_point').html(20);
				break;
		}
	};
	
	function loadPage()
	{	
		skill.clearMessage();
		skill.adjustWindowHeight();
		skill.refreshAmt('attack_strength');
		skill.refreshAmt('defense_strength');
		skill.refreshAmt('max_energy');
		skill.refreshAmt('max_health');
		skill.refreshAmt('max_stamina');
		skill.refreshAmt('health');
		skill.refreshAmt('energy');
		skill.refreshAmt('stamina');
		//hover();	
	};
	
	function refresh()
	{
		skill.loadPage();
	};
	
	/* EOF Function Definition */
	
	return skill;
}