/* some globals */

var currentOffset = 0;
var globalAllAlbums = [];

var firstSongID = 0;


if (typeof String.prototype.supplant == 'undefined') {
   String.prototype.supplant = function(o) {
     return this.replace(/{{([^{}]*)}}/g,
       function(a, b) {
         var r = o[b];
         return typeof r === 'string' ?
           r : a;
       }
     );  
   };
}




var Song = function(spec) {
  var that = {};
  that.discNumber = spec.discNumber;
  that.trackNumber = spec.trackNumber;
  that.title = spec.title;
  that.pageID = spec.pageID;
  that.lyrics = spec.lyrics;
  that.topspinWidgetID = spec.topspinWidgetID;
  that.album = spec.album;
  that.permalink = spec.permalink;
  that.debug = spec.debug;
  return that;
};

var Album = function(spec) {
  var that = {};
  that.title = spec.title;
  that.releaseDate = spec.releaseDate;
  that.cover = spec.cover;
  that.carouselCover = spec.carouselCover;
  that.songs = spec.songs;
  that.iTunesLink = spec.iTunesLink;
  that.amazonLink = spec.amazonLink;
  that.menuOrder = spec.menuOrder;
  that.debug = spec.debug;
  return that;
}



function ascending(a,b) {
  var result = 0;
  if (a < b)
    result -= 1;
  else
  if (a > b)
    result += 1;
  return result;
}

function descending(a,b) {
  var result = 0;
  if (a > b)
    result -= 1;
  else
  if (a < b)
    result += 1;
  return result;
}


function albumSortReleaseDateOldestFirst(a,b) {
  return ascending(a.ReleaseDate,b.ReleaseDate); //why doesn't this work?
}



function albumSortReleaseDateNewestFirst(a,b) {
  var result = 0;
  
  if (a.releaseDate > b.releaseDate)
    result -= 1;
  else
  if (a.releaseDate < b.releaseDate)
    result += 1;

  return result;
}

function albumSortMenuOrderAscending(a,b) {
  var result = 0;
  
  if (a.menuOrder < b.menuOrder)
    result -= 1;
  else
  if (a.menuOrder > b.menuOrder)
    result += 1;

  return result;
}






function updateSong(song,album) {
  ///var song = new Song(obj);
  ////console.log('updateSong',song,'permalink',song.permalink,song.pageID);
  
  $('#currentSongAlbumTitle').html(album.title);
  $('#currentSongTitle').html(song.title);
  $('#songBookmark').attr('href',song.permalink);
  
  
  //var prettyLyrics = song.lyrics.replace(/\r\n/g,'\r\n\<br />');
  //$('#currentSongLyrics').html(prettyLyrics);

  updateTopspin(song);
  
  
}


function updateTopspin(song) {

  var timestamp = topspinTimestamp();

  var playerTemplate = '';
  playerTemplate += ' <object type="application/x-shockwave-flash"'; 
  playerTemplate += ' height="20" ';
  playerTemplate += ' width="300" ';
  playerTemplate += ' id="TSWidget{{songID}}" ';
  playerTemplate += ' data="http://cdn.topspin.net/widgets/single/swf/TSSinglePlayer.swf?timestamp={{stamp}}" ';
  playerTemplate += ' bgColor="#000000">  ';
  playerTemplate += ' <param value="always" name="allowScriptAccess" />  ';
  playerTemplate += ' <param name="allowfullscreen" value="true" />  ';
  playerTemplate += ' <param name="quality" value="high" />  ';
  playerTemplate += ' <param id="movie" name="movie" value="http://cdn.topspin.net/widgets/single/swf/TSSinglePlayer.swf?timestamp={{stamp}}" />  ';
  playerTemplate += ' <param id="flashvars" name="flashvars" value="widget_id=http://cdn.topspin.net/api/v1/artist/{{artistID}}/single_track_player_widget/{{songID}}?timestamp={{stamp}}&amp;theme=black&amp;highlightColor=0xB7DC21" />';
  playerTemplate += ' <param name="wmode" value="transparent" />';
  playerTemplate += ' </object>';

  //var flashvarsTemplate = 'widget_id=http://cdn.topspin.net/api/v1/artist/1918/single_track_player_widget/{{songID}}?timestamp=1269387679&theme=black&highlightColor=0x00A1FF';
  ///////console.log('updateTopspin',song);
  //var flashvarsNew = flashvarsTemplate.supplant({songID: song.topspinWidgetID, artistID: 1918});
  //var flashvarsTemplate = 'asdf';
  var newPlayer = $(playerTemplate.supplant({songID: song.topspinWidgetID, artistID: 1918, stamp: timestamp}));
  //newPlayer.attr('flashvars',flashvarsNew);  
  //newPlayer.attr('id','TSWidget' + song.topspinWidgetID);
  //console.log(newPlayer);
  
  $('p.player object').replaceWith(newPlayer);
    
}



function updateAlbumCover(album) {
  var imgPrefix = '/wp-content/files_mf/';
  $('#browseAlbumCover').attr('src',imgPrefix  + album.cover);
}



function updateAlbum(selectedSong,album) {

  //updateAlbumCover(album);
  
  
  /*
  var albumOffset = 0;
  $(globalAllAlbums).each(function(i,e) {
   if (e == album) {
    albumOffset = i;
   }
  });
  
  var page = Math.floor(albumOffset/5);
  
  gotoAlbumPage(page);
  */
  
  $('ul.buy li.amazon a').attr('href',album.amazonLink);
  $('ul.buy li.itunes a').attr('href',album.iTunesLink);
  
  var sortedSongs = album.songs.sort(trackSort);
  
  updateSongList(selectedSong,album);
  updateSong(selectedSong,album);
}


function trackSort(a,b) {
  var partA = a.discNumber;
  if (partA == '') {
    partA = 0;
  }
  partA *= 100;
  partA += Math.abs(a.trackNumber);

  var partB = b.discNumber;
  if (partB == '') {
    partB = 0;
  }
  partB *= 100;
  partB += Math.abs(b.trackNumber);
  return (partA - partB);
}



function updateSongList(selectedSong,album) {

  ////////console.log('updateSongList, album:',album,'selectedSong:',selectedSong);

  var songs = album.songs;
  
  ////console.log('updateSongList',songs);
  var sorted = songs.sort(trackSort);
  //console.log('sorted',sorted);

  var trackOL = $('#browseTrackList');
  trackOL.find('li').remove();

  $(sorted).each(function(i,e) {
    //console.log('got here');
    var songLI = $('<li>');
    var a = $('<a>');
      a.text(e.title);
      if (e == selectedSong) {
        a.addClass('selected');
      }
      
      a.attr('href',e.permalink);
      
      //a.click(function() {
      //  updateSong(e,album);
      //  $('#browseTrackList li a.selected').removeClass('selected');
      //  a.addClass('selected');        
      //});

    songLI.append(a);
    trackOL.append(songLI);
  });

}



function updateSongListAJAX(selectedSong,album) {

  ////////console.log('updateSongList, album:',album,'selectedSong:',selectedSong);

  var songs = album.songs;
  
  ////console.log('updateSongList',songs);
  var sorted = songs.sort(trackSort);
  //console.log('sorted',sorted);

  var trackOL = $('#browseTrackList');
  trackOL.find('li').remove();

  $(sorted).each(function(i,e) {
    //console.log('got here');
    var songLI = $('<li>');
    var a = $('<a>');
      a.text(e.title);
      if (e == selectedSong) {
        a.addClass('selected');
      }
      a.click(function() {
        updateSong(e,album);
        $('#browseTrackList li a.selected').removeClass('selected');
        a.addClass('selected');        
      });

    songLI.append(a);
    trackOL.append(songLI);
  });

}


function albumSongBySongID(songID) {
  var result = false;
  $(globalAllAlbums).each(function(i,al) {
    $(al.songs).each(function(j,so) {
      ///console.log('so.pageID',so.pageID,'songID',songID);
      if (so.pageID == songID) {
        ///console.log('hit on',so.title);
        result = [al,so];
      }
    });
  });
  return result;
}



function getAllAlbums() {
    ////console.log('current offset: ',currentOffset)
    ///gotoAlbumPage(currentOffset);

    $.ajax({
      type: 'POST',
      data: { action: 'getAllAlbums'},
      url: "/wp-admin/admin-ajax.php",
      cache: false,
      cookie: encodeURIComponent(document.cookie),
      beforeSend: function () {
       $('#loadingIcon').html('<img src="/wp-content/themes/bluestraveler/images/ajax-loader.gif"'); 
      },
      success: function(json) {
        $('#loadingIcon').html('');
        globalAllAlbums = eval('(' + json  + ')');
        globalAllAlbums = globalAllAlbums.sort(albumSortMenuOrderAscending);
        /////console.log('gAA',globalAllAlbums);
        //updateAlbumList(globalAllAlbums);
        
        var firstAlbum = globalAllAlbums[0];
        var firstSong = firstAlbum.songs.sort(trackSort)[0];
        
        if (typeof startSongID != "undefined" && startSongID != 0) {
          ///console.log('in here');
          var as = albumSongBySongID(startSongID);
          firstAlbum = as[0];
          firstSong = as[1];
          ///console.log('fa',firstAlbum);
          ///console.log('fs',firstSong);
        }
        
        
        
                
        updateAlbum(firstSong,firstAlbum); //which in turn does songlist and defaults to song 0  call#1
        //zz
        
        ////updateSong(firstSong,firstAlbum);
        //gotoAlbumPage(selectedPage)
      }
    });       

}





function updateAlbumList(albums) {
  ///console.log('updateAlbumList',albums);

  var imgPrefix = '';///////wp-content/files_mf/';    

  var sorted = albums.sort(albumSortMenuOrderAscending);
  //console.log('sorted',sorted);

  var albumUL = $('#albumList');
  albumUL.find('li').remove();

  $(sorted).each(function(i,e) {
    ///console.log(i,e);
    //console.log('got here');
    var thisAlbum = e;//sorted[i];
    //console.log('thisAlbum',thisAlbum);
    var albumLI = $('<li>');
    var a = $('<a>');
    var img = $('<img>');
    var albumCoverWrap = $('<div class="albumCoverWrap"></div>');
    
    img.attr('src',thisAlbum.carouselCover);


    var srt = e.songs.sort(trackSort);
    a.attr('href',srt[0].permalink);

    /*
    a.click(function() {
      updateAlbum(srt[0],e); //call #2
    });
    */


    a.append(img);
    albumCoverWrap.append(a);    
    albumLI.append(albumCoverWrap);
    albumLI.append('<span class="carouselAlbumTitle">' + e.title + '</span>');
    //albumLI.append(e.title);
    albumUL.append(albumLI);
  });



}

  function totalPages(numAlbums) {
    return Math.ceil(numAlbums/5);
  }

  function fooPage(offset,dur,width) {
  
    var highestPageOffset = totalPages(globalAllAlbums.length) - 1;
  
    currentOffset = offset;
  
    if (currentOffset >= highestPageOffset) {
     currentOffset = highestPageOffset;
     }
     if (currentOffset <= 0) {
     currentOffset = 0;
     }
  
    //125 to go album by album. 125x5 for paging
    $('div.wrap').scrollTo(currentOffset*width*5,{axis: 'x',duration: dur});
    
     //$('.featureButton').removeClass('active');
     //$('#button-' + currentOffset).addClass('active');
  
   } 


  function gotoAlbumPageForce(offset,dur) {
    currentOffset = offset;  
    //125 to go album by album. 125x5 for paging
    $('div.wrap').scrollTo(currentOffset*130*5,{axis: 'x',duration: dur});
  }



  function gotoAlbumPage(offset,dur) {
    
    var highestPageOffset = totalPages(globalAllAlbums.length) - 1;

  
    currentOffset = offset;
  
    if (currentOffset >= highestPageOffset) {
     currentOffset = highestPageOffset;
     }
     if (currentOffset <= 0) {
     currentOffset = 0;
     }
  
    $('div.wrap').scrollTo(currentOffset*130*5,{axis: 'x',duration: dur});
   } 


