var flashPlayer = new (function() {

	var self = this;

	var player;

	var current;

	var play = false;


	function _getDuration() {
		return self.duration;
	}

	function _getPosition() {
		return self.position;
	}

	function _setPosition(percents) {
		if (self.bytesPercent < percents) {
			return;
		}

		var position = _getDuration() / 100 * percents;

		player.SetVariable("method:setPosition", position);

		_getPoint().css({left: percents + '%'});
	}

	function _setVolume(percents) {
		if (percents > 100) {
			percents = 100;
		}
		
		player.SetVariable("method:setVolume", percents);

		_getVolumeButton().width(percents + '%');
	}


	function _getVolumeButton() {
		return $('.player__volume-size');
	}

	function _getPercentPosition() {
		return _getPosition() * self.bytesPercent / _getDuration();
	}

	function _isPlaying() {
		return self.isPlaying.toString() == "true";
	}

	function _isCurrent(obj) {
		return (current && current.get(0) == obj.get(0));
	}

	function _setTitle(name) {
		var title = current.find('.player__title');

		if (title.length) {
			title.text(_getCurrentMusic().attr('title'));
		}
	}

	function _clearTitle() {
		var title = current.find('.player__title');

		if (title.length) {
			title.text('');
		}
	}

	function _play() {
		player.SetVariable("method:play", "");

		play = true;

		_getPlayButton().addClass('player__play-pause');
		_setTitle();
	}

	function _pause() {
		player.SetVariable("method:pause", "");

		play = false;

		_getPlayButton().removeClass('player__play-pause');
	}

	function _stop() {
		player.SetVariable("method:stop", "");

		play = false;

		_getPlayButton().removeClass('player__play-pause');

		_clearTitle();
	}

	function _setUrl(url) {
		player.SetVariable("method:setUrl", url);
	}

	function _getPoint() {
		return current.find('.player__timeline-point');
	}

	function _getPlayButton() {
		return current.find('.player__play');
	}

	function _getMusic() {
		return current.find('.player__music-item');
	}

	function _getCountMusic() {
		return current.find('.player__music-item').length;
	}

	function _getCurrentMusic() {
		return current.find('.player__music-item-active');
	}

	function _setActiveMusic(obj) {
		_setUrl(obj.attr('href'));
		obj.siblings().removeClass('player__music-item-active').end().addClass('player__music-item-active');
	}

	function _next() {
		var active = _getCurrentMusic().next();

		if (!active.length) {
			active = _getMusic().first();
		}

		_setActiveMusic(active);
		_play();
	}

	function _prev() {
		var active = _getCurrentMusic().prev();

		if (!active.length) {
			active = _getMusic().last();
		}

		_setActiveMusic(active);
		_play();
	}

	this.onInit = function() {
		player = $('#flashplayer').get(0);
		player.SetVariable("enabled", "true");
	}

	this.onUpdate = function() {
		if (_isPlaying()) {
			_getPoint().css({left: _getPercentPosition() + "%"});
		} else {
			if (current && play) {
				if (_getCountMusic() > 1) {
					_next();
				} else {
					_stop();
				}
			}
		}
	}

	this.play = function(object) {
		if (_isCurrent(object)) {
			if (_isPlaying()) {
				_pause();
			} else {
				if (_getPosition() == 0) {
					if (!_getCurrentMusic.length) {
						_setActiveMusic(_getMusic().first());
					}
				}

				_play();
			}
		} else {
			if (current) {
				_stop();
			}

			current = object;
			
			_setActiveMusic(_getMusic().first());
			_play();
		}
	}

	this.setPosition = function(object, percents) {
		if (_isCurrent(object)) {
			_setPosition(percents);
		}
	}

	this.setVolume = function(object, percents) {
		if (_isCurrent(object)) {
			_setVolume(percents);
		}
	}

	this.next = function(object) {
		if (_isCurrent(object)) {
			_next();
		}
	}

	this.prev = function(object) {
		if (_isCurrent(object)) {
			_prev();
		}
	}


	this.stop = function() {
		_stop();
	}

	this.playMusic = function(object, music) {
		if (current) {
			_stop();
		}

		current = object;
		_setActiveMusic(music);
		_play();
	}

})();

$(function() {
	$('.player__play').live('click', function() {
		var player = $(this).parent();

		flashPlayer.play(player);
	});

	$('.player__timeline').live('click', function(event) {
		var px = event.pageX - $(this).offset().left + 3;

		var percents = px * 100 / $(this).width();
		var player = $(this).parent();

		flashPlayer.setPosition(player, percents);
	});

	$('.player__volume').live('click', function(event) {
		var px = event.pageX - $(this).offset().left + 3;

		var percents = px * 100 / $(this).width();
		var player = $(this).parent();

		flashPlayer.setVolume(player, percents);
	});

	$('.player__next').live('click', function(event) {
		var player = $(this).parent();

		flashPlayer.next(player);
	});

	$('.player__prev').live('click', function(event) {
		var player = $(this).parent();

		flashPlayer.prev(player);
	});

	$('.player__music-item').live('click', function(event) {
		event.preventDefault();
		var player = $(this).parents('.player');

		flashPlayer.playMusic(player, $(this));
	});


	$('.player__music-show').live('click', function(event) {
		event.preventDefault();
		var player = $(this).parents('.player');

		player.find('.player__music').toggle();
	});

	$('.player__title').each(function() {
		var title = $(this);

		title.text(title.parents('.player').find('.player__music-item').first().attr('title'));
	});
});
