﻿function Player() {
	this.initialize.apply(this, arguments);
}


Player.prototype = {
	obj: null,
  // 初期化
	initialize: function(name) {
		pSelf.obj = pSelf.flash.getObj(name)

		// 右クリック禁止、選択禁止
		$('#player').bind('contextmenu', function(e){
    	return false;
  	}).bind('selectstart', function(e) {
			return false;
		}).bind('mousedown', function(e) {
			return false;
		}).bind('scroll', function(e) {
			return false;
		})
		.after('<div id="player_show"><img src="images/player_show.gif" alt="show" /></div>');

		// 表示非表示
		$('#player_show').click(function() {
			if ($.data(this, 'player')) {
				$('#player').animate({ left: -240 }, { duration: 200 })
					.next('#player_show').animate({ left: 0 }, { duration: 200 });
				$.data(this, 'player', false);
			}
			else {
				$('#player').animate({ left: 0 }, { duration: 200 })
					.next('#player_show').animate({ left: 240 }, { duration: 200 });
				$.data(this, 'player', true);
			}
		});
	},
	// FLASH関連
	flash: {
		getObj: function(fname) {
  		return (navigator.appName.indexOf ("Microsoft") !=-1) ? window[fname] : document[fname];
		},
		isLoaded: function() {
			return (typeof(pSelf.obj) != "undefined") ? (pSelf.obj.PercentLoaded() == 100) : false;
		}
	},
	// ロード
	load: function(file) {
	  pSelf.obj.SetVariable('currentSong', file);
		pSelf.obj.TCallLabel('/','load');
	},
	// 再生
	play: function() {
		pSelf.obj.TCallLabel('/','play');
	},
	// ロードと再生
	lPlay: function(file) {
		pSelf.load(file);
		pSelf.play();
	},
	// 停止
	stop: function() {
		pSelf.obj.TCallLabel('/','stop');
	},
	// 再生状態を取得
	getPlayingState: function () {
		// returns 'playing', 'paused', 'stopped' or 'finished'
		return pSelf.obj.GetVariable('playingState');
	},
	// 自前イベントの登録
	registerEvent: function (eventName, action) {
		pSelf.obj.SetVariable(eventName, action);
	},
	// スライダーと同期
	showPlay: function (cutno) {

		url = location + 'playlist/' + cutno;
		pSelf.list.load(url, function() {
			$('#player').animate({ left: 0 }, { duration: 300 })
				.next('#player_show').animate({ left: 240 }, { duration: 300 });
			$.data($('#player_show').get(0), 'player', true);

			pSelf.list.play(0); // Firefox
		});
		
		pSelf.list.play(0); // IE
	},
	list: {
		// XMLを解析してプレイリストを表示
		load: function(url, onloadfinish) {
			$('#playlist').empty(); // プレイリストを空に
			$('#player_jacket').attr('src', $('.jacket').attr('src'));

			$.ajax({
				type: 'GET',
				url: url,
				dataType: 'xml',
				success: function(xml) {
					$(xml).find('track').each(function(index, elem) {
						var title = $(this).find('annotation').text();
						var url   = $(this).find('location').text();

						$('#playlist').append($('<li>' + title + '</li>'));

						var obj = $('#playlist li').eq(index).get(0);
						$.data(obj, 'title', title);
						$.data(obj, 'song', url);
					});

					onloadfinish();
				}
			});

			// リストをクリックしたとき
			$('#playlist').click(function(e) {
				if ($(e.target).hasClass('playing')) return; // 再生中の曲を選んだとき

				var url   = $.data(e.target, 'song');
				var title = $.data(e.target, 'title');

				if (url) {
					// 再生中の曲をハイライト
					$('#playlist li').removeClass('playing');
					$(e.target).addClass('playing');

					// 再生中の曲にスクロール
					var index = $('#playlist li').index(e.target);
					$('#playlist').animate({ scrollTop: (index * 20) - ($('#playlist').height() / 4) });

					// タイトル
					$('#playtitle').empty().append('<marquee behavior="scroll" scrollamount="3">' + title + '</marquee>');

					pSelf.lPlay(url);

					// 自動的に次の曲へ行くようにする
					pSelf.registerEvent('onSongOver', 'player.list.play("next");');

				}
			});

		},
		// リストから再生
		play: function(idx) {
			if (idx == 'next') {
				$("#playlist li[class='playing']").next().click();
			}
			else if (idx == 'prev') {
				$("#playlist li[class='playing']").prev().click();
			}
			else {
				$('#playlist li').eq(idx).click();
			}
		}
	}
};

var pSelf  = Player.prototype;
var player = new Player('othplayer');

