﻿
function Player()
{
  this.status = null;
  this.select = null;
  
  this.x = 0;
  this.y = 0;
  
  this.moveTarget = null;
  
  this.nowMusic = 0;
  
  this.allMusic = new Array();
  this.allMusic[0] = "morningHazeShutdown";
  this.allMusic[1] = "ancientCrimsonMage";
  this.allMusic[2] = "moonStone";
  this.allMusic[3] = "gear";
  this.allMusic[4] = "mercilessHands";
  this.allMusic[5] = "anyaFubi";
  this.allMusic[6] = "whisperInTheDailylife";
  this.allMusic[7] = "eternalFalling";
  this.allMusic[8] = "voicesHistory";
  this.allMusic[9] = "borderOfDimgraysky";
  this.allMusic[10] = "orbitalVelocity";
  

  this.allMusicName = new Array();
  this.allMusicName[0] = "朝靄シャットダウン";
  this.allMusicName[1] = "古の紅蓮魔導士";
  this.allMusicName[2] = "月の石";
  this.allMusicName[3] = "Gear";
  this.allMusicName[4] = "Merciless Hands";
  this.allMusicName[5] = "暗夜風靡";
  this.allMusicName[6] = "囁きは日常の中に";
  this.allMusicName[7] = "EternalFalling";
  this.allMusicName[8] = "声は歴史を織って";
  this.allMusicName[9] = "仄暗い空の隙間";
  this.allMusicName[10] = "orbital velocity";
}

Player.prototype.handleLoad = function(control, userContext, sender)
{
  this.sender = sender;
  this.control = control;

  this.playName = new MBText(this.sender);
  this.playName.SetFontSize(30);
  this.playName.SetText(this.allMusicName[0]);
  this.playName.Color.Set("#FFFFFF");
  this.playName.Position.Set(20,10);
  
  this.playTime = new TextBlock(this.sender);
  this.playTime.Text.SetText("00:00");
  this.playTime.Text.SetFontSize(20);
  this.playTime.Position.Set(320,52);
  
  this.media = new Media(this.sender);
  this.media.SetSource("./media/" + this.allMusic[0] + ".mp3");
  this.media.SetAutoPlay(0);
  this.media.Size.Set(0, 0);
  this.media.Position.Set(0,0);
  
  
  for(var i = 0; i < this.allMusic.length; i++){
    var musicName = new MBText(this.sender.FindName("Playlist"));
    musicName.SetFontSize(16);
    musicName.SetText(this.allMusicName[i]);
    musicName.Color.Set("#FFFFFF");
    musicName.Position.Set(0,i* 18);
    
    this.sender.FindName(musicName.xName).AddEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.Change));
  }
  
  if(this.allMusic.length > 7){
    this.sender.FindName("bar").Height = 98 * (98/(this.sender.FindName(musicName.xName)["Canvas.Top"] + 16));
    this.sender.FindName("bar").AddEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.BarMove));
  }
  
  this.sender.FindName("Start").AddEventListener("MouseEnter", Silverlight.createDelegate(this, this.ButtonEnter));
  this.sender.FindName("Start").AddEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.Play));
  this.sender.FindName("Start").AddEventListener("MouseLeave", Silverlight.createDelegate(this, this.ButtonLeave));
  
  this.sender.FindName("MusicBack").AddEventListener("MouseEnter", Silverlight.createDelegate(this, this.ButtonEnter));
  this.sender.FindName("MusicBack").AddEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.Back));
  this.sender.FindName("MusicBack").AddEventListener("MouseLeave", Silverlight.createDelegate(this, this.ButtonLeave));
  
  this.sender.FindName("MusicNext").AddEventListener("MouseEnter", Silverlight.createDelegate(this, this.ButtonEnter));
  this.sender.FindName("MusicNext").AddEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.Next));
  this.sender.FindName("MusicNext").AddEventListener("MouseLeave", Silverlight.createDelegate(this, this.ButtonLeave));
  
  
  this.sender.FindName(this.media.xName).AddEventListener("MediaOpened", Silverlight.createDelegate(this, this.TimerStart));
  this.sender.FindName("progressThumb").AddEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.TimeMove));
  
  this.sender.FindName("playbackProgressRect").AddEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.BarClick));
  this.sender.FindName("downloadProgressRect").AddEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.BarClick));
  
  this.sender.AddEventListener("MouseLeftButtonUp", Silverlight.createDelegate(this, this.TimeEnd));
  this.sender.AddEventListener("MouseMove", Silverlight.createDelegate(this, this.Move));
  
}

Player.prototype.Change = function(sender, e)
{
  this.nowMusic = sender["Canvas.Top"]/18;
  sender.FindName("DummyTimer").stop();
  sender.FindName(this.media.xName).Stop();
  this.media.SetSource("./media/" + this.allMusic[this.nowMusic] + ".mp3");
  sender.FindName(this.media.xName).Play();
  sender.FindName("DummyTimer").begin();
  this.playName.SetText(this.allMusicName[this.nowMusic]);
  
  this.status = null;
}

Player.prototype.Back = function(sender, e)
{
  if(this.nowMusic != 0){
    this.nowMusic--;
    sender.FindName("DummyTimer").stop();
    sender.FindName(this.media.xName).Stop();
    this.media.SetSource("./media/" + this.allMusic[this.nowMusic] + ".mp3");
    sender.FindName("DummyTimer").begin();
    this.playName.SetText(this.allMusicName[this.nowMusic]);
    
    this.status = null;
  }
}
Player.prototype.Next = function(sender, e)
{
  if(this.nowMusic != (this.allMusic.length - 1)){
    this.nowMusic++;
    sender.FindName("DummyTimer").stop();
    sender.FindName(this.media.xName).Stop();
    this.media.SetSource("./media/" + this.allMusic[this.nowMusic] + ".mp3");
    sender.FindName("DummyTimer").begin();
    this.playName.SetText(this.allMusicName[this.nowMusic]);
    
    this.status = null;
  }
}

Player.prototype.ButtonEnter = function(sender, e)
{
  sender.children.GetItem(0).Fill="#999999";
}

Player.prototype.ButtonLeave = function(sender, e)
{
  sender.children.GetItem(0).Fill="#000000";
}

Player.prototype.Move = function(sender, e)
{
  if(this.moveTarget == 1){
    var left = this.mouseDownX + e.getPosition(null).x;
    if(left <= (sender.findName("downloadProgressRect").Width - 1) && left >= 1){
      sender.FindName("progressThumb")["Canvas.Left"] = left - 8;
      sender.FindName("playbackProgressRect").width = left;
      
      if((sender.FindName("progressThumb")["Canvas.Left"] - 1) / 300 <= 1){
        this.TimeChange(this.sender.FindName(this.media.xName).naturalDuration.seconds * ((sender.FindName("progressThumb")["Canvas.Left"] + 8) / 300));
      }
    }
  }else if(this.moveTarget == 2){
    var top = this.mouseDownY + e.getPosition(null).y;
    if(top >= 16 && (top + sender.FindName("bar").Height) <= 114){
      sender.FindName("bar")["Canvas.Top"] = top;
      sender.FindName("Playlist")["Canvas.Top"] =  -((top/114) * (this.allMusic.length * 18) - 34);
    }
  }
}


Player.prototype.BarClick = function(sender, e)
{
  
  sender.FindName("progressThumb")["Canvas.Left"] = e.GetPosition(null).x - sender.FindName("progressThumb").GetParent()["Canvas.Left"] - sender.FindName("progressThumb").children.getItem(0).Width/2;
  //e.GetPosition(null).x -= sender.FindName("progressThumb").children.getItem(0).Width/2;
  //this.TimeMove(sender.FindName("progressThumb"), e);
  this.TimeChange(this.sender.FindName(this.media.xName).naturalDuration.seconds * ((sender.FindName("progressThumb")["Canvas.Left"] + 8) / 300));
}


Player.prototype.TimeMove = function(sender, e)
{
  this.mouseDownX = sender["Canvas.Left"] - e.getPosition(null).x;
  this.mouseDownY = sender["Canvas.Top"] - e.getPosition(null).y;
  this.moveTarget = 1;
}

Player.prototype.BarMove = function(sender, e)
{
  this.mouseDownY = sender["Canvas.Top"] - e.getPosition(null).y;
  this.moveTarget = 2;
}

Player.prototype.TimeEnd = function(sender, e)
{
  this.moveTarget = null;
}

Player.prototype.TimerStart = function(sender, e)
{
  sender.FindName("DummyTimer").AddEventListener("Completed", Silverlight.createDelegate(this, this.Timer));
  sender.FindName("DummyTimer").begin();
}

Player.prototype.Timer = function(sender, e)
{
  var time = this.sender.FindName(this.media.xName).position.seconds;
  
  sender.findName("downloadProgressRect").width = (this.sender.FindName(this.media.xName).downloadProgress * 300);
  if(this.moveTarget != 1){
    if(this.sender.FindName(this.media.xName).naturalDuration.seconds != 0){
      sender.findName("playbackProgressRect").width =0 + ((time / this.sender.FindName(this.media.xName).naturalDuration.seconds) * 300);
      sender.findName("progressThumb")["Canvas.Left"] =-8 +((time /this.sender.FindName(this.media.xName).naturalDuration.seconds) * 300);
    }
    this.ViewPlayTime(time);
  }
  sender.begin();
}


Player.prototype.Play = function(sender, e)
{
  if(this.status == null){
    sender.FindName(this.media.xName).play();
    this.status = 1;
  }else{
    sender.FindName(this.media.xName).pause();
    this.status = null;
  }
}


Player.prototype.TimeChange = function(val)
{
  var timeSpan = this.sender.FindName(this.media.xName).position;
        timeSpan.seconds = val;
        
        this.sender.FindName(this.media.xName).position = timeSpan;
        
        this.ViewPlayTime(timeSpan.seconds);
}

Player.prototype.ViewPlayTime = function(val)
{
  var min = Math.floor(val / 60);
  var sec = Math.floor(val - (min * 60));
  if(min < 10) min = "0" + min.toString();
  if(sec < 10) sec = "0" + sec.toString();
  this.playTime.Text.SetText(min.toString() + ":" + sec.toString());
}

