﻿//Copyright 2007 Dan Wahlin
//http://www.xmlforasp.net

var _Albums = [];
var _AlbumsCanvas = null;
var _ArtistText = null;
var _AlbumDetailsCanvas = null;
var _LoadingCanvas = null;
var _NavCanvas = null;
var _SilverLightControl = null;
var _InError = false;
var _Debug = false;
 
function pageLoad() {
      Silverlight.createObject("Templates/EmptyTemplate.xaml", $get("SilverLightControlHost"), "SilverLightControl",
      { width: '100%', height: '100%', inplaceInstallPrompt: false, background: '#F5F5F5', isWindowless: 'false', framerate: '30', version: '1.0' },
      {onError:null, onLoad:null},null);
   }

function onSilverlightLoaded() {
    _SilverLightControl = document.getElementById("SilverLightControl");
    _AlbumsCanvas = _SilverLightControl.Content.FindName("AlbumsCanvas");    
    _ArtistText = _SilverLightControl.Content.FindName("ArtistText");
    _AlbumDetailsCanvas = _SilverLightControl.Content.FindName("AlbumDetailsCanvas");
    _LoadingCanvas = _SilverLightControl.Content.FindName("LoadingCanvas");    
    _NavCanvas = _SilverLightControl.Content.FindName("NavCanvas");
    DoArtistSearch();
}

function btnArtistSearch_Click() {
    DoArtistSearch();
}

function DoArtistSearch() {
    var artistText = "";
    StartStopLoader(true,artistText);
    InterfaceTraining.AlbumService.AlbumSearch(artistText,"1",onWSRequestComplete,onWSRequestFail);
          }

function onWSRequestComplete(results) {
    StartStopLoader(false,"");
    RemoveAlbums();
    if (results != null && results != 'undefined') {
        _Albums = results.Albums;
        UpdateXaml(results.XamlFragments);
        }
}

function onWSRequestFail(error) {
    _Albums = [];
    StartStopLoader(false,"");
    _NavCanvas.Opacity = "0";
    _ArtistText.Text = "Unable to locate artist.  Please try another one.";
    RemoveAlbums();
}

function StartStopLoader(start,artistText) {
    _AlbumDetailsCanvas.Opacity = "0";
    _LoadingCanvas.Opacity = (start==true)?"1":"0";
    _LoadingCanvas.children.GetItem(2).Text = artistText;
    _AlbumsCanvas.Opacity = (start==true)?"0":"1";
    _NavCanvas.Opacity = (start==true)?"0":"1";
    _ArtistText.Text = "";
    if (start) {
        _SilverLightControl.Content.FindName("LoadingCanvasAnimation").Begin();
    } else {
        _SilverLightControl.Content.FindName("LoadingCanvasAnimation").Stop();
    }
}

//_InError coding added to handle issue with bad images being loaded into the XAML tree
//Bad images seem to currently stop the process from continuing properly
function UpdateXaml(fragments) {
    var tb = $get("txtXaml");
    var badAlbums = new Array();
    tb.value = "";
    for (var i=0;i<fragments.length;i++) {
        if (_Debug) tb.value += fragments[i];
        try {
            //Caused by unhandled exception due to album image being bad or corrupt
            if (_InError) { 
                badAlbums[badAlbums.length] = i-1;
                _InError = false;
            }
              //aqui carga las imagenes del control silverlight
              var axml = fragments[i];
              var newAlbum = _SilverLightControl.Content.CreateFromXaml(axml);
            _AlbumsCanvas.Children.Add(newAlbum);
                   }
        catch (e) {
                //Firefox will hit this if XAML has bad image reference. IE hits global error handler
        _InError = true;
           
        }
    }
    if (_InError) { //Bad image likely so remove last child that would've caused it
        if (fragments.length > 0) badAlbums[badAlbums.length] = fragments.length-1;
        _InError = false;
    }
    /*if (badAlbums.length > 0) { //Remove bad album data 
        for (var i=0;i<badAlbums.length;i++) {
            _AlbumsCanvas.Children.RemoveAt(badAlbums[i])
        }
    }*/
    //AQUI PONGO EL NOMBRE EN EL ENCABEZADO SI SE DESEA
    //Write out artist name
    
  /*  if (_Albums[0].Artist.length = 40) {
        _ArtistText.Text = _Albums[0].Artist.substring(0,40) + "...";
       } else {
           if (_Albums[0].Artist == "") {
            _ArtistText.Text = $get("txtArtist").value;        
       } else {
            _ArtistText.Text = _Albums[0].Artist;        
       }
    }
    _SilverLightControl.Content.FindName("ArtistTextLine").Opacity = ".5";*/
}

function RemoveAlbums() {
   var albums = _AlbumsCanvas.children;
   while (albums.Count > 0) {
      albums.RemoveAt(0);
   }
}

function onLeftMouseButtonDown(sender, args) {
    var asin = GetAlbumCanvasName(sender);
    location.href = asin
   }

function GetAlbumCanvasName(rect) {
    return rect.Name.substring(0,rect.Name.indexOf("_"));
}

function onMouseEnter(sender,args) {
   sender.Stroke = "Yellow";    
   sender.Width = sender.Width * 1.20;
   ////////////////////
   //aqui aparece la imagen que necesitamos
   //document.body.style.cursor = 'hand';

   var id = sender.Name;
   try {
       var reflect = _SilverLightControl.Content.FindName(sender.Name + "Reflection");
       reflect.Stroke = "yellow";
       reflect.Width = reflect.Width * 1.20;
   }
   catch (e) {}
   
   // ShowAlbum(id);
    //////////////////////////////////
}


//con estas 2 funciones podemos visualizar la imagen debajo del carrusel
//y sacar la informacion del objeto album

/*function ShowAlbum(id) {
   var album = null;
   //Write out album info
   for (var i=0;i<_Albums.length;i++) {
      if (id == _Albums[i].ID + "_Rect") {
          album = _Albums[i];
          break;
      }
   }
   
   if (album != null) {
      try {
        _AlbumDetailsCanvas.children.GetItem(0).Fill.ImageSource = album.ImageUrlMedium;
      }
      catch (e) {}
      _AlbumDetailsCanvas.Opacity = "1";
      _AlbumDetailsCanvas.children.GetItem(1).Text = album.Title;
      _AlbumDetailsCanvas.children.GetItem(2).Text = (album.Price)?album.Price:"";
      SetRating(album);
   }
}*/

function SetRating(album) {
    var avgRating = Math.round(album.AverageRating);
    for (var i=1;i<6;i++) {
        var opacity = (i > avgRating)?".2":"1";
        _SilverLightControl.Content.FindName("Rating" + i).Opacity = opacity;
    }    
}

function onMouseLeave(sender,args) {
    sender.Stroke = "Gray";
    sender.Width = sender.Width / 1.20;
    //document.body.style.cursor = 'default';

    try {
        var reflect = _SilverLightControl.Content.FindName(sender.Name + "Reflection");
        reflect.Stroke = "Gray";
        reflect.Width = reflect.Width / 1.20;
    }
    catch (e) {}
    _AlbumDetailsCanvas.Opacity = "0";
    _AlbumDetailsCanvas.children.GetItem(1).Text = "";  //Album Title
    _AlbumDetailsCanvas.children.GetItem(2).Text = "";  //Album Price
}

var canvasWidth = 300;
var canvasHeight = 390;
var imageWidth = 82.5;
var imageHeight = 79.2;
var radiusX = 100;  //how wide of radius  325
var radiusY = 40;   //how tall of radius  70
var centerX = (canvasWidth / 2) - (imageWidth / 2);
var centerY = (canvasHeight / 2) - (imageHeight * 1.8);
var speed = 0.05;
var perspective = -75;
var currAngle = 0;
var delay = 15;
var tid = null;
var angleChange = 0;
 
function NavLeft_Enter(sender,args) {   
    SetNavImageSource(sender,"enter");
    angleChange = .01;
    SetInterval();
}

function NavRight_Enter(sender,args) {
    SetNavImageSource(sender,"enter");
    angleChange = -.01;
    SetInterval();
}

function NavLeft_Leave(sender,args) {
    SetNavImageSource(sender,"leave");
    ClearInterval();
}

function NavRight_Leave(sender,args) {
    SetNavImageSource(sender,"leave");
    ClearInterval();
}

function SetInterval() {
    tid = window.setInterval("MoveAlbums()",delay);
}

function ClearInterval() {
    window.clearInterval(tid);
    tid = null;
}

function SetNavImageSource(img,state) {
    var baseImage = "imagenes/animacion/" + img.Name;
    var endImage = (state=="enter")?"Over.png":".png";
    var fullImage = baseImage + endImage;
    img.Source = fullImage;
    _NavCanvas.FindName(img.Name + "_Reflect").Source = fullImage;
}


function MoveAlbums() {
    currAngle = currAngle + angleChange;
    var albumCount = _Albums.length;
    var albumCanvases = _AlbumsCanvas.children;

    for (var i=0; i < albumCount; i++)
    {
        var angle = i * ((Math.PI * 2) / albumCount);
        angle += currAngle;
        var x = (Math.cos(angle) * radiusX) + centerX;
        var y = (Math.sin(angle) * radiusY) + centerY;
        var scale = (y - perspective) / (centerY + radiusY - perspective);
        var c = albumCanvases.GetItem(i);
        c["Canvas.Left"] = x;
        c["Canvas.Top"] = y;
        if (y < centerY) c["Canvas.ZIndex"] = 0;
        if (y > centerY) c["Canvas.ZIndex"] = 1;
        var rect = c.FindName(c.Name + "_Rect");
        if (Math.abs(centerX - x) < 2 && y > centerY);// ShowAlbum(rect.Name);
        //aqui veo el efecto 3d que quiero darle a las imagenes
        var s = (y  - c.RenderTransform.ScaleY + 50) / (centerY+radiusY-c.RenderTransform.ScaleY + 50);
        c.RenderTransform.ScaleX = s;
        c.RenderTransform.ScaleY = s;
    }
}

function onKeyPress(e) {
    var evt = new Sys.UI.DomEvent(e);  //Cross-browser handling of event with ASP.NET AJAX DomEvent object
    if (evt.charCode == Sys.UI.Key.enter) {  //pressed enter key 
        evt.stopPropagation(); 
		DoArtistSearch();
	}
}

  function onError(line, col, hr, string) {
    _InError = true;  //IE will hit this if XAML has bad image
  }  
