//  
// Copyright 2008 iLike Inc.
//  

(function() {
  var _objectsForDiv = {};
  
  function _removeObjects(c, el_id) {
    if(_objectsForDiv[el_id]) {
      theApp.removeObjectsById(c, _objectsForDiv[el_id]);
      delete _objectsForDiv[el_id];
    }
  };

  function _addObjects(c, list, el_id) {
    var el_width = $(el_id).offsetWidth;
    _objectsForDiv[el_id] = new Array();
    for(var i = 0; i < list.length; ++i) {
      list[i].tag.width = el_width;
      _objectsForDiv[el_id].push(list[i].id);
    }
    theApp.createObjectsFromData(c, list, "");
  };

  function _replaceObjects(c, list, el_id) {
    _removeObjects(c, el_id);
    _addObjects(c, list, el_id);
  }
 
  function _commonParamsFromOptions(options, extra_params) {
    params = {};

    if (options.elId) {
      frm = $("_ilike_playlist_form_" + options.elId);

      if (frm) {  
        params = frm.serialize(true);
      }
    }    
    
    if(options && options.devKey) {
      params.dev_key = options.devKey;
    } else if (typeof(_iLikeDevKey) != 'undefined' && null != _iLikeDevKey) {
	  params.dev_key = _iLikeDevKey;
    }
    
    if(typeof(iLike.in_fb) != "undefined") {
      params.in_fb = 1;
    }
    
    if(extra_params) {
      for(p in extra_params)
        params["" + p] = extra_params["" + p];
    }
    return params;
  };

  function _playlistParamsFromOptions(options, extra_params) {
    params = _commonParamsFromOptions(options, extra_params);
    
    if(options.playlistName)
      params.playlist_name = options.playlistName;
    if(options.maxSongs)
      params.max_songs = options.maxSongs;
    if(options.editMode)
      params.edit_mode = options.editMode;
    if(options.showNumbers)
      params.show_numbers = options.showNumbers;
    if(options.elId)
      params.el_id = options.elId;
    if(options.passWidth) {
      if ($(options.elId)) {
        params.width = $(options.elId).offsetWidth;
      }
    }
    if(options.playlistKey)
      params.playlist_key = options.playlistKey;
    if(options.playlistId)
      params.playlist_id = options.playlistId;
    if(options.tracks)
      params.tracks = options.tracks;
    if(options.autoplay)
      params.autoplay = options.autoplay;
    if(options.templatePlaylist)
      params.template_playlist = options.templatePlaylist;

    return params;
  };
    
  function _insertContent(targetEl, content) {
    ilikeDiv = document.createElement('div');
    ilikeDiv.className = 'ilike_content';
    ilikeDiv.innerHTML = content;

    if(typeof(_iLikeStyles) != "undefined") {
      if(_iLikeStyles.color)
        ilikeDiv.style.color = _iLikeStyles.color;
      if(_iLikeStyles.backgroundColor)
        ilikeDiv.style.backgroundColor = _iLikeStyles.backgroundColor;
    }

    var container = $(targetEl);
    while(container.hasChildNodes()) {
      container.removeChild(container.lastChild);
    }
    container.appendChild(ilikeDiv);

    songData = _retrieveSongData(container);
    
    if(songData) {
      _replaceObjects(iLike.SongExpando, songData, targetEl);
    }
    
    return ilikeDiv;
  };

  function _ensureSwf(dev_id) {
    var installedSwf = false;
    if(typeof(InstalledPlayerSwf) != 'undefined' && InstalledPlayerSwf()) {
      installedSwf = true;
    }
    else if(typeof(InstallPlayerSwf) != 'undefined' && typeof(SWFObject)) {
      if(!$("music_player_container")) {
        playerDiv = document.createElement("div");
        playerDiv.setAttribute("id", "music_player_container");
        playerDiv.setAttribute("style", "position:absolute;top:0px;left:0px;");
        document.body.appendChild(playerDiv);
      }
      if(typeof(dev_id) == "undefined") {
        dev_id = 0;
      }
      InstallPlayerSwf(theApp.baseUrl, iLike.urls.swf, true, "C", null, "devnet:" + dev_id, null);
      installedSwf = true;
    }
    return installedSwf;
  };

  function _retrieveSongData(containerEl) {
    var children  = $(containerEl).getElementsByClassName('_js_song_data');
    var dataDiv = null;
    
    if (children && children.length >= 1) {
      dataDiv = children[0];  
    }
    
    if (dataDiv) {
      return dataDiv.innerHTML.evalScripts()[0];
    } else {
      return null;
    }
  }
  
  function _highlightTracks(ids, elId) {
    for (var i = 0; i < ids.length; i++) {
      _highlightTrack(ids[i], elId);
    }  
  };

  function _highlightTrack(trackId, elId) {
    var song = $("ilike_pl_song_" + elId + "_" + trackId);
    
    // NB: Scriptaculous may or may not be available.  
    if (song && (typeof(Effect) != 'undefined')) {  
      new Effect.Highlight(song, { startcolor: '#fffbe2', endcolor: '#ffffff' });
    }
  };
  
  function _displaySong(options) {
    params = _commonParamsFromOptions(options);
    params.r = new Date().getTime();
    if(options.songName)
      params.song_name = options.songName;
    if(options.artistName)
      params.artist_name = options.artistName;
    if(options.trackIds) 
      params.ids = options.trackIds;
    if(options.songKey) 
      params.song_key = options.songKey;
    if(options.elId)
      params.el_id = options.elId;
    if(options.ticket)
      params.ticket = options.ticket;
      
    new iLike.Ajax.Request(iLike.urls.displaySongs,
                            {method: "get", onSuccess: function(t,j){ _displaySongComplete(t,j,options);}, onFailure: function(){}, parameters: params});
  };
  
  function _displaySongComplete(transport, json, options) {
    var timer = setTimeout(function() {
      var dev_id = (json ? json.dev_id : 0);
      if(_ensureSwf(dev_id)) {
        _displaySongComplete = __displaySongComplete;
        clearTimeout(timer);
        _displaySongComplete(transport, json, options);
      }
    }, 10);
  };
 
  function __displaySongComplete(transport, json, options) {
    _insertContent(options.elId, transport.responseText);
    
    var callback;
    if(options && typeof(options.onDisplay) == "function")
      callback = options.onDisplay;
    else if(typeof(iLikeOnDisplaySong) == "function")
      callback = iLikeOnDisplaySong;

    if(callback) {
      data = {};
      if(options.elId)
        data.elId = options.elId
      if(options.songName)
        data.songName = options.songName;
      if(options.artistName)
        data.artistName = options.artistName;
      if(options.trackIds)
        data.trackIds = options.trackIds;

      songData = _retrieveSongData(options.elId);
      data.numSongs = (songData ? songData.length : 0);
        
      callback(data);
    }
  };

  function _positionSongChooser() {
    var chooserEl = $('__ilike_song_chooser');
    //chooserStyle = {position: 'absolute', zIndex: '100'};
	chooserStyle = {};
    chooserStyle.top = "" + ([_getViewportHeight() - chooserEl.getHeight(), 125].min() + _getScrollY()) + "px";
    chooserStyle.left = "" + ((document.body.offsetWidth - chooserEl.getWidth())/2) + "px";
    chooserEl.setStyle(chooserStyle);
  };
  
  function _songChooser(options, extra_params) {
    params = _commonParamsFromOptions(options, extra_params);
    if(options.searchString)
      params.artist_qp = options.searchString;

    new iLike.Ajax.Request(iLike.urls.chooseSongs,
                            {parameters: params, 
                             onSuccess: function(t,j){ _songChooserComplete(t,j,options,params);},
                             onFailure: function(t){}});
	
	
    // clean up in case we are reloading on top of an existing visible chooser
    _removeObjects(iLike.SongExpando, "_ilike_search_results");

    // create the chooser popup
    chooserDivId = "__ilike_song_chooser";

    chooserDiv = $(chooserDivId)
    if(!chooserDiv) {
      chooserDiv = Element.extend(document.createElement("div"));
      chooserDiv.setAttribute("id", chooserDivId);
      document.body.appendChild(chooserDiv);
    }
    chooserDiv.hide();

    /*screenDivId = "ilike_song_chooser_screen";
    screenDiv = $(screenDivId);
    if(!screenDiv) {
      screenDiv = Element.extend(document.createElement("div"));
      screenDiv.setAttribute("id", screenDivId);
      document.body.appendChild(screenDiv);
    }
    screenDiv.style.height = (_getViewportHeight() + _getScrollY()) + "px";
    screenDiv.show();*/
    Event.observe(window, "scroll", _onWindowScroll, false);

    chooserDiv.innerHTML = "<div class='ilike_content'><div id='_ilike_chooser_content' class='song_chooser'><div style='display:none;'><center><div style='padding-top:75px; padding-bottom:100px;'><img id='_ilike_spinner_image' src='spinner_50x50.gif' width='50' height='50' /><br/><br/>If this doesn't respond in 10 seconds, <a id='_ilike_song_search_resubmit' href='#'><b>click here to try your search again</b></a>.</div></center><div class='clearfix' style='width:400px;'><div style='float:left;padding-top:4px;'><a id='_ilike_logo_link' href='#'>Powered by <img id='_ilike_logo_image' src='logo_tiny.gif' width='28' height='11'/></a></div><div style='float:right; padding-right:40px;'><a href='#' id='_ilike_song_chooser_cancel' onclick='return false;'>Cancel</a></div></div></div></div></div>";

    //$('_ilike_spinner_image').src = iLike.urls.imageBase + '/spinner_50x50.gif';
    $('_ilike_logo_image').src = iLike.urls.imageBase + '/logo_tiny.gif';
    $('_ilike_logo_link').href = theApp.baseUrl;
    
    $('_ilike_song_search_resubmit').onclick = function() {
      _songChooser(options, extra_params);
      return false;
    }
    $('_ilike_song_chooser_cancel').onclick = function() {
      _removeObjects(iLike.SongExpando, "_ilike_search_results");
	  
      chooserDiv.hide();
      screenDiv.hide();
      Event.stopObserving(window, "scroll", _onWindowScroll, false);
      return false;
    }

    _positionSongChooser();
    chooserDiv.show();
  };

  function _songChooserComplete(transport, json, options, params) {
    var timer = setTimeout(function() {
      var dev_id = (json ? json.dev_id : 0);
      if(_ensureSwf(dev_id)) {
        _songChooserComplete = __songChooserComplete;
        clearTimeout(timer);
        _songChooserComplete(transport, json, options, params);
      }
    }, 10);
	
  };

  function _displaySearchResults(transport, json, params) {
	//load new css code to show result.
	var style = document.createElement("link");
	style.setAttribute("rel", "stylesheet")
	style.setAttribute("type", "text/css");
	style.setAttribute("href", "../css/search_result.css");
	style.setAttribute("charset", "utf-8");
	document.getElementsByTagName("head")[0].appendChild(style);
	
	//
    searchResultsDiv = $("_ilike_search_results");
    
    if(searchResultsDiv) {
      searchResultsDiv.hide();
      searchResultsDiv.innerHTML = transport.responseText;

      songData = _retrieveSongData(searchResultsDiv);
      
      if(songData) {
        _replaceObjects(iLike.SongExpando, songData, "_ilike_search_results");
      }

      _wirePageLinks(params);

      searchResultsDiv.show();
      $("_ilike_searching").hide();
	  
      _positionSongChooser();
    }  
  }

  function _wirePageLinks(current_params) {
    prevLink = $("_ilike_search_results_prev");
    nextLink = $("_ilike_search_results_next");

    function searchOffset(offset) {
      var new_params = {}
      for(param in current_params) {
        new_params[param] = current_params[param];
      }
      new_params.page = Math.max(current_params.page + offset, 0);
      new iLike.Ajax.Request(iLike.urls.searchSongs,
                            {parameters: new_params,
                             onSuccess: function(t,j){ _displaySearchResults(t,j,new_params);},
                             onFailure: function(t){}});
    }

    if(prevLink)
      prevLink.onclick = function(){searchOffset(-1); return false;}
    if(nextLink)
      nextLink.onclick = function(){searchOffset(1); return false;}
  }
  
  function __songChooserComplete(transport, json, options, params) {
    //chooserDivId = "_ilike_chooser_content";

    $("_ilike_chooser_content").innerHTML = transport.responseText;
	
	//document.getElementById('_ilike_song_chooser_cancel').style.display="none";
	//document.getElementById('_ilike_song_chooser_ok').style.margin="0 0 0 0";
	

    onSearchSubmit = function(evt) { 
      $("_ilike_search_results").hide();
      $("_ilike_searching").show();
      _positionSongChooser();
      search_params = _commonParamsFromOptions(options, $("_ilike_search_form").serialize(true));
      search_params.page = 0;
      new iLike.Ajax.Request(iLike.urls.searchSongs,
                            {parameters: search_params,
                             onSuccess: function(t,j){ _displaySearchResults(t,j,search_params);},
                             onFailure: function(t){}});
      return false;
    }
    
    onSearchSelect = function(evt) {
      var callback;
      if(options && typeof(options.onSelected) == "function") {
        callback = options.onSelected;
      } else if (typeof(iLikeSongSelected) == "function") {
        callback = iLikeSongSelected;
      }

      result_params = $("_ilike_search_results_form").serialize(true);
      if(callback && result_params.song_to_attach) {
        song_name = $("_ilike_song_name_" + result_params.song_to_attach).value;
        artist_name = $("_ilike_song_artistname_" + result_params.song_to_attach).value;

        callback(result_params.song_to_attach, song_name, artist_name);
      }
      _removeObjects(iLike.SongExpando, "_ilike_search_results");
      //chooserDiv.hide();
	  //$("ilike_song_chooser_screen").hide();
      Event.stopObserving(window, "scroll", _onWindowScroll, false);
      return false;
    }
    onSearchCancel = function(evt) {
      _removeObjects(iLike.SongExpando, "_ilike_search_results");
      //chooserDiv.hide();
      //$("ilike_song_chooser_screen").hide();
      Event.stopObserving(window, "scroll", _onWindowScroll, false);
	  history.go(0);
      return false;
    }

    searchForm = $("_ilike_search_form");
    if(searchForm) {
      searchForm.onsubmit = onSearchSubmit;
    }
    searchResubmit = $("_ilike_song_search_resubmit");
    if(searchResubmit) {
      searchResubmit.onclick = onSearchSubmit;
    }
    searchSelect = $("_ilike_song_chooser_ok");
    if(searchSelect) {
      searchSelect.onclick = onSearchSelect;
    }
    searchCancel = $("_ilike_song_chooser_cancel");
    if(searchSelect) {
      searchCancel.onclick = onSearchCancel;
	  //iLikeSongChooser({onSelected: mySongCallback})
    }

    songData = _retrieveSongData("_ilike_chooser_content");
    
    if(songData) {
      _replaceObjects(iLike.SongExpando, songData, "_ilike_search_results");
    }

    _wirePageLinks(params);

    _positionSongChooser();
  };

  function _onWindowScroll() {
    //$("ilike_song_chooser_screen").style.height = (_getViewportHeight() + _getScrollY()) + "px";
  }

  function _displayConcerts(params, extra_params, context) {
    if(!context)
      context = "onLoad";

    new iLike.Ajax.Request(iLike.urls.displayConcerts,
                           {parameters: {id:params.artistKey},
                            onSuccess: function(t){ _displayConcertsComplete(t,params,context);},
                            onFailure: function(t){_displayConcertsError(t,params);}});
  }

  function _displayConcertsComplete(transport, params, context) {
    $(params.elId).innerHTML = transport.responseText;
  }
  function _displayConcertsError(transport, params) {
    // Error
  }

  function _displayPlaylist(options, extra_params, context) {
    params = _playlistParamsFromOptions(options, extra_params);
	
    if(!context)
      context = "onLoad";

    new iLike.Ajax.Request(iLike.urls.displayPlaylist,
                          {parameters: params,
                            onSuccess: function(t,j){ _displayPlaylistComplete(t,j,options,context);},
                            onFailure: function(t){ _displayPlaylistError(t,options);}});
  };

  function _displayPlaylistProgress(text, elId) {
    var frm = $("_ilike_playlist_form_" + elId);
    var w = frm.getWidth();
    var h = frm.getHeight();
    
    // Show overlay
    var overlay = $("_ilike_playlist_overlay_" + elId);
    overlay.setStyle({width: w + "px", height: h + "px"});

    // Show spinner
    var spinner = $("_ilike_playlist_overlay_spinner_" + elId);
    var sh = spinner.getHeight();
    var midHeight = h < sh ? 0 : (h - sh) / 2;
    spinner.setStyle({marginTop: midHeight + "px", width: w + "px"});

    // Show/hide text depending on height of form (subtract 30px for the buttons)
    $("_ilike_playlist_overlay_text_" + elId).innerHTML = text;
    $("_ilike_playlist_overlay_text_" + elId).setStyle({display: h-30 > sh ? "" : "none"});

    // Reveal the elems
    overlay.setStyle({display: ""});
    spinner.setStyle({display: ""});
  };
  
  function _displayPlaylistError(transport, options) {
    // either an error from the server or a timeout
	
    // if we have a playlist already rendered then show an error overlay and revert to the last view
    var overlay = $('_ilike_playlist_overlay_' + options.elId);
    if(overlay) {
      var frm = $("_ilike_playlist_form_" + options.elId);
      var w = frm.offsetWidth;
      var h = frm.offsetHeight;

      // Show overlay
      overlay.setStyle({display: "", width: w + "px", height: h + "px"});

      var errorMessage = $('_ilike_playlist_overlay_error_' + options.elId);
      var sh = errorMessage.offsetHeight;
      errorMessage.setStyle({display: "", marginTop: Math.min(Math.max(parseInt(h/2)-parseInt(sh/2)-20, 0), 20) + "px", width: w + "px"});

      $('_ilike_playlist_overlay_spinner_' + options.elId).hide();

      var okTimer;
      var onOk = function() {
        errorMessage.hide();
        overlay.hide();

        if(okTimer) {
          clearTimeout(okTimer);
        }

        return false;
      }
      $('_ilike_playlist_overlay_error_ok_' + options.elId).onclick = onOk;
      okTimer = setTimeout(onOk, 5000);
    }
  };
  
	function _displayPlaylistComplete(transport, json, options, context) {
		var timer = setTimeout(function() {
			var dev_id = (json ? json.dev_id : 0);
			if(_ensureSwf(dev_id)) {
				_displayPlaylistComplete = __displayPlaylistComplete;
				clearTimeout(timer);
				_displayPlaylistComplete(transport, json, options, context);
			}
		}, 10);
	};

	function __displayPlaylistComplete(transport, json, options, context) {
    	// subscribe to onPlay and onShowHide handlers
   		var onPlay = function(id, userInitiated) {
			if (songListEl.getStyle("overflowY") == "scroll"){
				var songEl = $(id + "_li");
				var visible = songEl.offsetTop >= songListEl.scrollTop && (songEl.offsetTop + 21) < (songListEl.scrollTop + songListEl.getHeight());
	
				if (!visible)
					songListEl.scrollTop = songEl.offsetTop < songListEl.scrollTop ? songEl.offsetTop : (songEl.offsetTop + 21 - songListEl.getHeight());
			}
		}

		var onShowHideExpando = function(id, onShow) {
			enableScrollablePlaylist();
		}

    	// display the content
   		ilikeDiv = _insertContent(options.elId, transport.responseText);
		ilikeDiv = Element.extend(ilikeDiv);
	
    	songData = _retrieveSongData(options.elId);
    
    	if (songData) {
			$("playListDisplaySave").style.display="block";
      		for (var idx = 0; idx < songData.length; ++idx) {
        		songData[idx].tag.onPlay = onPlay;
        		songData[idx].tag.onShowHideExpando = onShowHideExpando;
      		}
    	}
    
    	var songListEl = $("_ilike_song_list_" + options.elId);

    	// make the song list scrollable if it is too long and not already in scroll mode
    	function enableScrollablePlaylist() {
      		if (options.maxHeight && songListEl && songListEl.getStyle("overflowY") != "scroll"){
        		var maxHeight = [parseInt(options.maxHeight), 190].max();
        		var curHeight = ilikeDiv.getHeight();

        		if (curHeight > maxHeight) {
          			songListEl.setStyle({height: songListEl.getHeight() - (curHeight - maxHeight) + "px", overflowY: "scroll", paddingRight: "8px"});
          			songListEl.scrollTop = 0;
        		}
      		}
    	}

    	enableScrollablePlaylist();

    	formData = $("_ilike_playlist_form_" + options.elId).serialize(true);

    	// Highlight any requested tracks
    	idsToHighlight = formData.ids_to_highlight;

    	if (idsToHighlight) {
      		_highlightTracks(idsToHighlight.split(','), options.elId);
    	}
    
    	// callback
    	var callback;
    	if(options && typeof(options.onDisplay) == "function")
      		callback = options.onDisplay;
    	else if(typeof(iLikeOnDisplayPlaylist) == "function")
      		callback = iLikeOnDisplayPlaylist;
			
		var playListCount = "You have <span style='color:#2097ca'>"+formData.num_tracks+"</span> songs in your Last Playlist (<span style='color:#2097ca'>"+formData.playlist_name+"</span>)";
		var playListCount = "You have <span style='color:#2097ca'>"+formData.num_tracks+"</span> songs in your Last Playlist";
		$("playListDisplayInfoCount").innerHTML = playListCount;
	
    	if(callback) {
      		callback({ playlistName: formData.playlist_name,
                 editMode: formData.edit_mode,
                 numSongs: formData.num_tracks,
                 context: context});
	  
    	}
	
    	showSpinner = function(text) {
      		_displayPlaylistProgress(text, options.elId);
    	}

    	onClickAdd = function(evt) {
      		onSelected = function(song_id, song_name, artist_name) {
				addSong(song_id);
      		};

      		chooser_options = {};
      		chooser_options.onSelected = onSelected;
			
      		if(options.devKey)
        		chooser_options.devKey = options.devKey;
				
      		extra_params = _playlistParamsFromOptions(options);
      
      		_songChooser(chooser_options, extra_params);

      		return false;
		};


		// ---- New Function ----
		showSearch = function(){
			chooser_options = {};
      		chooser_options.onSelected = onAddSelected;
			
      		if(options.devKey)
        		chooser_options.devKey = options.devKey;
				
     	 	extra_params = _playlistParamsFromOptions(options);
      
      		_songChooser(chooser_options, extra_params);

     		return false;
		};
	
	
		onAddSelected = function(song_id, song_name, artist_name) {
			addSong(song_id);
		};
		/*------------------ */

		function addSong(song_id) {
			if (songIDs == "") {
				songIDs = song_id;
			}
			else {
				songIDs = songIDs + "," + song_id;	
				$("playListDisplaySave").style.display="block";
			}
			
			setCookie('playlistSongID',songIDs,3650);
			$("playListDisplaySave").style.display="block";
			$("playListDisplaySave").style.margin="-10px auto 0 auto";
			$("playListDisplayFooter").style.padding="0";
		
			showSpinner("Adding song...");
        	params = _playlistParamsFromOptions(options, {track_id: song_id, editing: json.editing});
        	new iLike.Ajax.Request(iLike.urls.playlistAdd,
                              {parameters: params,
                               onSuccess: function(t,j){ _displayPlaylistComplete(t,j,options,"onAdd");},
                               onFailure: function(t){ _displayPlaylistError(t,options);}});
		}

		onClickEdit = function(evt) {
			showSpinner("Loading...");
			if ($("playListDisplaySave").style.display != "block") {
				$("playListDisplaySave").style.display="block";
				$("playListDisplaySave").style.margin="-96px auto 0 auto";
			}
			_displayPlaylist(options, {editing: true}, "onEdit");
			return false;
		};

    	onClickMoveToTop = function(position) {
      		showSpinner("Moving song...");
      		params = _playlistParamsFromOptions(options, {song: position, editing: true});
      		new iLike.Ajax.Request(iLike.urls.playlistMove,
                            {parameters: params,
                              onSuccess: function(t,j){ _displayPlaylistComplete(t,j,options,"onMoveToTop");},
                              onFailure: function(t){ _displayPlaylistError(t,options);}});
      		return false;
    	};

    	onClickDelete = function(position) {
      		showSpinner("Deleting song...");
	  
      		params = _playlistParamsFromOptions(options, {song_to_remove: position, editing: true});
      		new iLike.Ajax.Request(iLike.urls.playlistRemove,
                            {parameters: params,
                              onSuccess: function(t,j){ _displayPlaylistComplete(t,j,options,"onRemove");},
                              onFailure: function(t){ _displayPlaylistError(t,options);}});

      		var songIdsArr = songIDs.split(",");
	  
	  		var removeSongId = songIdsArr[position];
	  
			if (removedSongIDs == "") {
				removedSongIDs = removeSongId;
				$("playListDisplaySave").style.display="none";
			}
			else {
				removedSongIDs = removedSongIDs + "," + removeSongId;
			}
			resetSongIDs();
	  
      		return false;
    	};
    
    	onUpdate = function(editing) {
      		showSpinner("Updating playlist...");
      		params = $("_ilike_playlist_form_" + options.elId).serialize(true);
      		params.editing = editing;
     		new iLike.Ajax.Request(iLike.urls.playlistUpdate,
                            {parameters: params,
                              onSuccess: function(t,j){ _displayPlaylistComplete(t,j,options,(editing ? "onUpdate" : "onDone"));},
                              onFailure: function(t){ _displayPlaylistError(t,options);}});
      		return false;
    	};
    
    	// wire up the buttons
    	var container = $(options.elId);
	
		// --- start showing the search field ---
		showSearch();
	
		addButton = $("_ilike_playlist_add_" + options.elId);
    	if(addButton) {
      		addButton.onmousedown = onClickAdd;
    	}

    	editButton = $("_ilike_playlist_edit_" + options.elId);
    	if(editButton) {
      		editButton.onmousedown = onClickEdit;
    	}

    	updateButton = $("_ilike_playlist_update_order_" + options.elId);
    	if(updateButton) {
      		updateButton.onmousedown = function(){ return onUpdate(true)};
    	}

    	doneButton = $("_ilike_playlist_update_" + options.elId);
    	if(doneButton) {
      		doneButton.onmousedown =  function(){ return onUpdate(false)};
    	}

    	if(json && json.positions) {

      		setPerPositionHandlers = function(position) {
				moveBtn = $('_ilike_move_song_btn_' + options.elId + '_' + position);
				if(moveBtn) {
					moveBtn.onclick = function() { return onClickMoveToTop(position); };
				}
				deleteBtn = $('_ilike_remove_song_btn_' + options.elId + '_' + position);
				if(deleteBtn) {
				deleteBtn.onclick = function() { return onClickDelete(position); };
				}        
      		};
      
      		positions = json.positions.split(",");
      		for(var idx = 0; idx < positions.length; ++idx){
        		setPerPositionHandlers(positions[idx]);
      		}
    	}
	};

  function _displaySongLoading(options) {
    var timer = setInterval(function() {
      if(typeof(theApp) != 'undefined' && theApp && typeof(iLike.SongExpando) != 'undefined') {
        iLike.Embed.displaySong = _displaySong;
        clearInterval(timer);
        _displaySong(options);
      }
    }, 10);
  };
  
  function _displayPlaylistLoading(options) {
    var timer = setInterval(function() {
      if(typeof(theApp) != 'undefined' && theApp && typeof(iLike.SongExpando) != 'undefined') {
		iLike.Embed.displayPlaylist = _displayPlaylist;
        clearInterval(timer);
        _displayPlaylist(options);
      }
    }, 10);
  };
  
  function _songChooserLoading(options) {
    var timer = setInterval(function() {
      if(typeof(theApp) != 'undefined' && typeof(theApp.baseUrl) != 'undefined' && typeof(iLike.SongExpando) != 'undefined') {
        iLike.Embed.songChooser = _songChooser;
        clearInterval(timer);
        _songChooser(options);
      }
    }, 10);
  };

  function _displayConcertsLoading(options) {
    var timer = setInterval(function() {
      if(typeof(theApp) != 'undefined' && theApp) {
        iLike.Embed.displayConcerts = _displayConcerts;
        clearInterval(timer);
        _displayConcerts(options);
      }
    }, 10);
  };

  function _getViewportHeight() {
    var height = 0;
    if (typeof(window.innerWidth) == 'number') {
      //Non-IE
      height = window.innerHeight;
    } else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
      //IE 6+ in 'standards compliant mode'
      height = document.documentElement.clientHeight;
    } else if (document.body && (document.body.clientWidth || document.body.clientHeight)) {
      //IE 4 compatible
      height = document.body.clientHeight;
    }
    return height;
  }

  function _getScrollY() {
    var y = 0;
    if (typeof(window.pageYOffset) == 'number') {
      //Netscape compliant
      y = window.pageYOffset;
    } else if (document.body && (document.body.scrollLeft || document.body.scrollTop)) {
      //DOM compliant
      y = document.body.scrollTop;
    } else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
      //IE6 standards compliant mode
      y = document.documentElement.scrollTop;
    }
    return y;
  }
  

  iLike.Embed = {
    displaySong : _displaySongLoading,
    songChooser : _songChooserLoading,
    displayPlaylist : _displayPlaylistLoading,
    displayConcerts : _displayConcertsLoading
  };

  iLike.Utils = {
    displayPlaylistError: _displayPlaylistError,
    displayPlaylistProgress : _displayPlaylistProgress,
    displayPlaylistComplete : _displayPlaylistComplete,
    displaySearchResults : _displaySearchResults
  };
  
  if(typeof(iLike.API) == 'undefined') {
    iLike.API = {
      displaySong : function(options){ return iLike.Embed.displaySong(options);},
      songChooser : function(options){ return iLike.Embed.songChooser(options);},
      displayPlaylist : function(options){ return iLike.Embed.displayPlaylist(options);},
      displayConcerts : function(options){ return iLike.Embed.displayConcerts(options);}
    };

    window["iLikeDisplaySong"] = iLike.API.displaySong;
    window["iLikeDisplayPlaylist"] = iLike.API.displayPlaylist;
    window["iLikeSongChooser"] = iLike.API.songChooser;
    window["iLikeDisplayConcerts"] = iLike.API.displayConcerts;
  }
})();


