/* Класс игроков для поля */
var Player = Class.create({
	
	/* Конструктор */
	initialize: function(id, name, club, amplua, img, sport_name ) {
		this.id = id;					// ID игрока
		this.name = name;				// Имя игрока
		this.img = img;					// Картинка с формой
		this.amplua = amplua;			// амплуа 1-вратарь, 2-защитник, 3-нападающий
		this.club = club;				// клуб, за который играет
		this.isCaptain = 0;				// 1-капитан команды, 0-нет
		this.row = 0;					// линия, в которой играет игрок (0 - запасной)
		this.order = 0;					// каким стоит по порядку в автоматической замене (для запасных)
		this.price = 0;					// цена игрока
		this.points = 0;				// очки игрока
		this.lock = 0;					// 0 - игрок не заблокирован, 1 - игрок заблокирован, 2 - заблокирован вручную
		this.team_short_name = '';		// сокращенное название команды
		this.min = '';
		this.goals = '';
		this.pass = '';
		this.thru = '';
		this.ycard = '';
		this.rcard = '';
		this.delta = '';
		this.sport_name = sport_name;
		
		this.infoUrl = Field.baseUrl + '/player/profile';		// базовый URL карточки информации игрока
		this.limitName = 11;			// максимальное количество символов в имени игрока или клуба

		this.playerPreffix = 'fan_player_';
		this.playerTablePreffix = 'fan_player_row_';
		this.playerTransferPreffix = 'transfer_row_';


		this.playerAddImg = Field.baseUrl + '/skin/images/btn_add.gif';
		this.btnInfoImg = Field.baseUrl + '/skin/images/btn_info.gif';
		this.btnInfoOverImg = Field.baseUrl + '/skin/images/btn_info_over.gif';
		this.btnDeleteImg = Field.baseUrl + '/skin/images/btn_delete.gif';
		this.btnDeleteOverImg = Field.baseUrl + '/skin/images/btn_delete_over.gif';
		this.playerInfo2Img = Field.baseUrl + '/skin/images/btn_info2.gif';		
		if (sport_name == 'hockey')
		{			
			this.btnInfo3Img = Field.baseUrl + '/skin/images/btn_info3.gif';
			this.btnInfo3OverImg = Field.baseUrl + '/skin/images/btn_info3_over.gif';
			
			this.btnDelete2Img = Field.baseUrl + '/skin/images/btn_delete2.gif';
			this.btnDelete2OverImg = Field.baseUrl + '/skin/images/btn_delete2_over.gif';
			
			this.btnIcons = $A([Field.baseUrl + '/skin/images/amp_hk_forward.gif', 
								Field.baseUrl + '/skin/images/amp_hk_keeper.gif', 
								Field.baseUrl + '/skin/images/amp_hk_defender.gif', 
								Field.baseUrl + '/skin/images/amp_hk_forward.gif']) 					
		}		
		if (sport_name == 'basketball')
		{
			this.btnInfo3Img = Field.baseUrl + '/skin/images/btn_info_bb.gif';
			this.btnInfo3OverImg = Field.baseUrl + '/skin/images/btn_info_bb_over.gif';
			
			this.btnDelete2Img = Field.baseUrl + '/skin/images/btn_delete_bb.gif';
			this.btnDelete2OverImg = Field.baseUrl + '/skin/images/btn_delete_bb_over.gif';
			
			this.btnIcons = $A([Field.baseUrl + '/skin/images/amp_bb_pd.gif', 
								Field.baseUrl + '/skin/images/amp_bb_pd.gif', 
								Field.baseUrl + '/skin/images/amp_bb_ad.gif', 
								Field.baseUrl + '/skin/images/amp_bb_lf.gif', 
								Field.baseUrl + '/skin/images/amp_bb_hf.gif', 
								Field.baseUrl + '/skin/images/amp_bb_cen.gif']) 			
		}
		
	},
	
	setCaptain: function(is_captain)
	{
		this.isCaptain = is_captain;
	},
	
	setRow: function(row )
	{
		this.row = row;
	},

	setOrder: function(order )
	{
		this.order = order;
	},
	
	setPrice: function(price )
	{
		this.price = price;
	},
	
	setLock: function(lock )
	{
		this.lock = lock;
	},
	
	setPoints: function(points )
	{
		this.points = points;
	},
	
	setShortName: function(team_short_name )
	{
		this.team_short_name = team_short_name;
	},
	
	setMin: function(min )
	{
		this.min = min;
	},
	
	setDelta: function(delta )
	{
		this.delta = delta;
	},
	
	setGoals: function(goals )
	{
		this.goals = goals;
	},
	
	setPass: function(pass )
	{
		this.pass = pass;
	},

	setThru: function(thru )
	{
		this.thru = thru;
	},
	
	/* Метод генерации карточки игрока для поля */
	genCard: function(show_controls )
	{
		// Создаем основной слой карточки игрока
		var card_el = new Element('div');
		Element.extend(card_el );
		card_el.id = this.playerPreffix + this.id;
		card_el.addClassName('fan-player-card');
				
		// Добавляем картинку с формой игрока
		var img_el = new Element('img');
		Element.extend(img_el );
		img_el.src = this.img;
		if (this.sport_name == 'hockey')
		{
			img_el.width = 72;
			img_el.height = 42;
		}
		if (this.sport_name == 'basketball')
		{
			img_el.width = 30;
			img_el.height = 42;
		}
		img_el.alt = this.name;
		
		if (this.club) 
		{ 
			img_el.title = this.club;
		} 
		else 
		{
			img_el.title = this.name;
		}
		card_el.insert({bottom: img_el});
		
		// Добавляем поле с именем игрока
		card_el.insert({bottom: this.genNameP() });		
		
		// Добавляем поле с кнопкой i
		card_el.insert({bottom: this.genInfoBtn(3 ) } );
		
		// Добавляем кнопку c ценой игрока
		card_el.insert({bottom: this.genPriceBtn() });
		
		// Если не нужны элементы управления, возвращаем карточку
		if(!show_controls )
		{
			return card_el;
		}
		
		if(Field.mode == MODE_TRANSFER && this.lock == 0)
		{
			// Добавляем кнопку удаления игрока
			card_el.insert({bottom: this.genDeleteBtn(2 ) });
		}
			
		return card_el;
	},
	
	/* Метод генерации строки игрока для таблицы */
	genTableRow: function(show_controls )
	{
		// Создаем основной слой строки игрока
		var tr = new Element('tr');
		Element.extend(tr);
		
		// Добавляем ячейку с кнопками i, замены и отмены замены
		tr.id = this.playerTablePreffix + this.id;
		var td_info = new Element('td');
		Element.extend(td_info );
		td_info.setStyle({whiteSpace: "nowrap" });
		td_info.insert({bottom: this.genInfoBtn() } );
		if(show_controls && Field.mode == MODE_TRANSFER && this.lock == 0 )
		{
			td_info.insert({bottom: this.genDeleteBtn( ) } );
		}
		tr.insert({bottom: td_info } );

		// Добавляем ячейку с именем игрока
		var td_name = new Element('td');
		Element.extend(td_name );
		td_name.title = this.name;
		td_name.insert({bottom: this.genNameP() } );
		tr.insert({bottom: td_name } );
		
		// Добавляем ячейку с кнопкой амплуа игрока
		var td_amplua = new Element('td');
		Element.extend(td_amplua );
		td_amplua.insert({bottom: this.genAmpluaBtn() } );
		tr.insert({bottom: td_amplua } );
		
		if( Field.mode == MODE_SUBSTITUTION )
		{
			// Добавляем ячейку с очками игрока
			var td_points = new Element('td');
			Element.extend(td_points );
			td_points.update(this.points );
			tr.insert({bottom: td_points } );
			
			// Добавляем ячейку со стоимостью игрока
			var td_price = new Element('td');
			Element.extend(td_price );
			td_price.update(this.price );
			tr.insert({bottom: td_price } );
		}
		else if( Field.mode == MODE_TRANSFER )
		{
			// Добавляем ячейку со очками
			var td_points = new Element('td');
			Element.extend(td_points );
			td_points.update(this.points );
			tr.insert({bottom: td_points } );
			
			// Добавляем ячейку со ценой
			var td_price = new Element('td');
			Element.extend(td_price );
			td_price.update(this.price );
			tr.insert({bottom: td_price } );
		}
		
		// Добавляем ячейку с названием клуба
		var td_club = new Element('td');
		Element.extend(td_club );
		td_club.title = this.club;
		td_club.insert({bottom: this.genClubP() } );
		tr.insert({bottom: td_club } );
		
		return tr;
	},
	
	/* Метод генерации пустой строки игрока для таблицы */
	genDefaultTableRow: function()
	{
		// Создаем основной слой строки игрока
		var tr = new Element('tr');
		Element.extend(tr);
		
		// Добавляем ячейку с кнопками i, замены и отмены замены
		tr.id = 0;
		var td_info = new Element('td');
		Element.extend(td_info );
		tr.insert({bottom: td_info } );

		// Добавляем ячейку с именем игрока
		var td_name = new Element('td');
		Element.extend(td_name );
		tr.insert({bottom: td_name } );
		
		// Добавляем ячейку с кнопкой амплуа игрока
		var td_amplua = new Element('td');
		Element.extend(td_amplua );
		tr.insert({bottom: td_amplua } );
		
		// Добавляем ячейку с названием клуба
		var td_club = new Element('td');
		Element.extend(td_club );
		tr.insert({bottom: td_club } );
		
		return tr;
	},
	
	/* Метод генерации строки игрока для таблицы трансферов */
	genTransferRow: function(is_transfered)
	{		
		var tr = new Element('tr');
		tr.id = this.playerTransferPreffix + this.id;
		
		Element.extend(tr );
		if (this.lock > 0)
		{
			tr.addClassName('locked');
		}
		else if(is_transfered )
		{
			tr.addClassName('transfered');
		}
		
		var td_info = new Element('td');
		Element.extend(td_info );
		td_info.addClassName('m');
		td_info.update(this.genInfoBtn(2 ) );
		tr.insert({bottom: td_info } );
			
		var td_name = new Element('td');
		Element.extend(td_name );
		td_name.title = this.club;
		td_name.update(this.getName() );
		tr.insert({bottom: td_name } );

		var td_points = new Element('td');
		Element.extend(td_points );
		td_points.addClassName('m');
		td_points.update(this.delta );
		tr.insert({bottom: td_points } );
		
		var td_price = new Element('td');
		Element.extend(td_price );
		td_price.addClassName('m');
		td_price.update(this.price );
		tr.insert({bottom: td_price } );

		var td_add = new Element('td');
		Element.extend(td_add );
		td_add.addClassName('m');
		td_add.update(this.genAddBtn( ) );
		tr.insert({bottom: td_add } );
		
		return tr;
	},
	
	genAddBtn: function( )
	{
		var img = new Element('img');
		Element.extend(img);
		img.src = this.playerAddImg;
		img.width = 14;
		img.height = 14;
		img.alt = 'добавить игрока ' + this.name + ' в команду';
		img.title = img.alt;
		img.setStyle({
			'cursor': 'hand',
			'cursor': 'pointer'
		});
		img.observe('click', 
			function(event)
			{
				if(Field.addPlayer(this ) )
				{
					$(this.playerTransferPreffix + this.id ).addClassName('transfered');
				}
			}.bindAsEventListener(this)
		);
		return img;
	},
	
	/* Метод генерации кнопки i */
	genInfoBtn: function(type )
	{
		// Основной слой с кнопкой i
		var info_el = new Element('img');
		Element.extend(info_el );
		info_el.width = 14; 
		if (type == 3)
		{
			info_el.height = 16;
		}
		else
		{
			info_el.height = 14;
		}
		info_el.alt = 'подробная статистика игрока ' + this.name;
		info_el.title = 'подробная статистика игрока ' + this.name;
		info_el.setStyle({
			'cursor': 'hand',
			'cursor': 'pointer'
		});
		
		if(type == undefined )
		{
			var InfoOnSrc = this.btnInfoImg;
			var InfoOverSrc = this.btnInfoOverImg;
		}
		else if (type == 3)
		{
			var InfoOnSrc = this.btnInfo3Img;
			var InfoOverSrc = this.btnInfo3OverImg;
		}
		if(type == undefined || type == 3)
		{
			info_el.addClassName('ctrl');
			info_el.src = InfoOnSrc;
			info_el.observe('mouseover', 
				function(event)
				{
					var el = Event.element(event ); 
					el.src = InfoOverSrc;
				}.bindAsEventListener(this)
			);
			info_el.observe('mouseout', 
				function(event)
				{
					var el = Event.element(event ); 
					el.src = InfoOnSrc;
				}.bindAsEventListener(this) 
			);
			var info_over_el = new Element('img');
			info_over_el.src = InfoOverSrc;
		}
		else
		{
			info_el.src = this.playerInfo2Img;
		}
		info_el.observe('click', 
			this.popupInfoWindow.bindAsEventListener(this) 
		);
		return info_el;
	},

	/* Метод генерации кнопки с очками игрока */
	genPointsBtn: function(type )
	{
		var points_el = new Element('span');
		points_el.addClassName('points');
		points_el.update(this.points );
		return points_el;
	},
	
	/* Метод генерации кнопки с ценой игрока */
	genPriceBtn: function(type )
	{
		var price_el = new Element('span');
		price_el.addClassName('price-khl');
		if (this.price>999)
		{
			price_el.update(this.price );
		} else {
			price_el.update('&nbsp;' + this.price + '&nbsp;');
		}
		return price_el;
	},

	/* Метод генерации кнопки удаления игрока */
	genDeleteBtn: function(type )
	{
		// Основной слой с кнопкой удаления
		var delete_el = new Element('img');
		Element.extend(delete_el );
		delete_el.width = 14; 
		if (type == 2)
		{
			delete_el.height = 16;
		}
		else
		{
			delete_el.height = 14;
		}
		delete_el.alt = 'убрать игрока ' + this.name + ' из команды';
		delete_el.title = delete_el.alt;
		delete_el.setStyle({
			'cursor': 'hand',
			'cursor': 'pointer'
		});
		
		delete_el.addClassName('ctrl');
		if (type == 2)
		{
			delete_el.src = this.btnDelete2Img;
		}
		else
		{
			delete_el.src = this.btnDeleteImg;
		}
		delete_el.observe('mouseover', 
			function(event)
			{
				var el = Event.element(event ); 
				if (type == 2)
				{
					el.src = this.btnDelete2OverImg;
				}
				else
				{
					el.src = this.btnDeleteOverImg;
				}
			}.bindAsEventListener(this)
		);
		delete_el.observe('mouseout', 
			function(event)
			{
				var el = Event.element(event ); 
				if (type == 2)
				{
					el.src = this.btnDelete2Img;
				}
				else
				{
					el.src = this.btnDeleteImg;
				}
			}.bindAsEventListener(this) 
		);
		delete_el.observe('click', 
			function(event)
			{
				Field.deletePlayer(this );
			}.bindAsEventListener(this) 
		);
		var delete_over_el = new Element('img');
		delete_over_el.src = this.btnDeleteOverImg;
		
		return delete_el;
	},
	
	/* Метод обрезания имени игрока */
	getName: function()
	{

		var player_name = this.name;
		if(this.name.length > this.limitName )
		{
			player_name = this.name.substr(0,  this.limitName - 2 ) + '...';
		}
		else if(this.isCaptain == '1' && this.name.length > (this.limitName - 3) )
		{
			player_name = this.name.substr(0,  this.limitName - 5 ) + '...';
		}
		return player_name;
	},

	/* Метод генерации имени игрока */
	genNameP: function()
	{
		// Основной слой с фамилией игрока
		var name_el = new Element('p');
		
		Element.extend(name_el );
		var player_name = this.getName();

		if(this.isCaptain == '1' )
		{
			player_name = '<span>(C)</span>&nbsp;' + player_name;
		}
		name_el.update(player_name );
		
		return name_el;
	},
	
	/* Метод генерации имени глуба */
	genClubP: function()
	{
		// Основной слой с названием клуба
		var club_el = new Element('p');
		Element.extend(club_el );
		var player_club = this.club;
		if(this.club.length > this.limitName )
		{
			player_club = this.club.substr(0,  this.limitName - 2 ) + '...';
		}
		club_el.update(player_club );
		return club_el;
	},
	
	/* Метод генерации кнопки с амплуа игрока */
	genAmpluaBtn: function()
	{
		amplua_el = new Element('img');
		Element.extend(amplua_el );
		amplua_el.src = this.selectAmpluaIcon();
		amplua_el.width = 19; amplua_el.height = 9;
		amplua_el.alt = this.selectAmpluaName();
		amplua_el.title = this.selectAmpluaName();
		return amplua_el;
	},
	
	/* Метод выбора картинки по номеру амплуа */
	selectAmpluaIcon: function()
	{
		switch(this.amplua)
		{			
			case '5':
			case 5:
			case '4':
			case 4:
			case '3':
			case 3:
			case '2':
			case 2:
			case '1':
			case 1:
				return this.btnIcons[this.amplua];			
				
			default:
				return this.btnIcons[0];			
		}
	},
	
	/* Метод выбора названия по номеру амплуа */
	selectAmpluaName: function()
	{
		var amplua = parseInt(this.amplua );
		
		if (this.sport_name == 'hockey')
		{
			switch(amplua )
			{
				case '3':
				case 3:
					return 'нападающий';
				case '2':
				case 2:
					return 'защитник';
				case '1':
				case 1:
				default:
					return 'вратарь';
			}
		}
		
		if (this.sport_name == 'basketball')
		{
			switch(amplua )
			{
				case '5':
				case 5:
					return 'центровой';
				case '4':
				case 4:
					return 'тяжелый форвард';
				case '3':
				case 3:
					return 'легкий форвард';
				case '2':
				case 2:
					return 'атакующий защитник';
				case '1':
				case 1:
				default:
					return 'разыгрывающий защитник';
			}
		}
		return '';
	},
	
	/* Метод обмена карточек игроков на поле */
	switchCards: function(switch_player )
	{
		var switch_player_layer = $(switch_player.playerPreffix + switch_player.id );
		var player_layer = $(this.playerPreffix + this.id );
				
		switch_player_layer.replace(this.genCard(Field.showControls ) );
		player_layer.replace(switch_player.genCard(Field.showControls ) );
	},
	
	/* Метод обмена строк игроков в таблице */
	switchRows: function(switch_player )
	{
		var switch_player_row = $(switch_player.playerTablePreffix + switch_player.id );
		var player_row = $(this.playerTablePreffix + this.id );
		switch_player_row.replace(this.genTableRow(Field.showControls ) );
		player_row.replace(switch_player.genTableRow(Field.showControls ) );
	},
	
	/* Метод удаления карточки игрока */
	removeCard: function()
	{
		return $(this.playerPreffix + this.id ).remove();
		
	},
	
	/* Метод обновления карточки игрока на поле*/
	updateCard: function()
	{
		var player_layer = $(this.playerPreffix + this.id );
		player_layer.replace(this.genCard(Field.showControls ) );
	},

	/* Метод обновления строки игрока в таблице */
	updateRow: function()
	{
		var player_row = $(this.playerTablePreffix + this.id );
		player_row.replace(this.genTableRow(Field.showControls ) );
	},

	/* Метод открытия окна с информацией об игроке */
	popupInfoWindow: function(event )
	{	
		if (this.sport_name == 'hockey')
		{
			Popup.create('player_' + Field.seasonId + '_' + this.id, this.infoUrl + '/' + Field.seasonId + '/' + this.id + '.html', 'width=600,height=300,top=200');
		}
		if (this.sport_name == 'basketball')
		{
			Popup.create('player_' + Field.seasonId + '_' + this.id, this.infoUrl + '/' + Field.seasonId + '/' + this.id + '.html', 'width=840,height=330,top=200');
		}
	}
});

