// Config

var maxTracks = 3;

var downloadUrl = 'http://darkwasthenight.com/widget/download.php?fid=';

var embedTemplate = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="200" height="300" id="mp3player" align="middle"><param name="wmode" value="transparent" /><param name="allowScriptAccess" value="sameDomain" /><param name="allowFullScreen" value="false" /><param name="movie" value="http://darkwasthenight.com/widget/widget.swf?%querystring%" /><param name="quality" value="high" /><param name="bgcolor" value="#cccccc" /><embed src="http://darkwasthenight.com/widget/widget.swf?%querystring%" quality="high" bgcolor="#cccccc" width="200" height="300" name="mp3player" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" wmode="transparent" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /></object>';

// End config

var mixtape = new mixtape();

function mixtape()
{
	this.tracksPicked = 0;
	this.reachedMax = false;

	this.mtTrackPicked = function (track)
	{
		var trackContainer = track.parentNode;
		var trackId = track.value;
		var newTrack = trackContainer.cloneNode(true);
		newTrack.style.display = 'none';

		// Ticking
		if(track.checked && !this.reachedMax) {
			if(this.tracksPicked < maxTracks) {
				$('mtSelectedTracks').appendChild(newTrack);
				var cbAfterTrack = function(e) {
					var wasChecked = track.checked;
					trackContainer.firstDescendant().checked = false;
					Effect.Appear(newTrack, {duration: 0.4});
					mixtape.updatePool(mixtape.reachedMax);
					mixtape.updateEmbedCode(wasChecked, true);
				}
				Sortable.create('mtSelectedTracks', {onUpdate: function(e) { mixtape.updateEmbedCode(false, false)} });
				Sortable.SERIALIZE_RULE = /^(.*)$/;
				this.tracksPicked++;
			}
			if(this.tracksPicked == maxTracks) {
				this.reachedMax = true;
			}
		}
		// Unticking
		else {
			this.tracksPicked--;
			this.reachedMax = false;
			var cbAfterTrack = function(e) {
				Effect.Appear(trackId, {duration: 0.4});
				trackContainer.remove();
				mixtape.updatePool(mixtape.reachedMax);
				mixtape.updateEmbedCode(track.checked, true);
			}
		}

		Effect.Fade(trackContainer, {afterFinish: cbAfterTrack, duration: 0.4});
	}
	
	// Enable/disable tracks in the pool
	this.updatePool = function(reachedMax)
	{
		$('mtTrackPool').select('li').each( function(aTrack) {
			// Disabled unselected tracks
			if(reachedMax) {
				aTrack.addClassName('mtDisabled');
				aTrack.firstDescendant().disabled = true;
			}
			// Enable tracks (on unselect event)
			else {
				aTrack.removeClassName('mtDisabled');
				aTrack.firstDescendant().disabled = false;
			}
		}); // end each track
	}
	
	// Updates the textarea containing the embed code to copy
	this.updateEmbedCode = function(checked, showHide)
	{
		var queryString = '';
		var varIndex = 0;
		
		$('mtSelectedTracks').select('li').each( function(selTrack) {
			
			varIndex++;
			
			// Start with &, except first time
			if(varIndex > 1) {
				queryString = queryString + '&';
			}

			// Get download url, title and artist from each track
			var url = downloadUrl + selTrack.id;
			var title = selTrack.select('.mtTrackTitle').first().innerHTML;
			var artist = selTrack.select('.mtTrackArtist').first().innerHTML;

			// Build query string for this track
			queryString = queryString + 'myLoad'+ varIndex + '=' + url + '&myTitle' + varIndex + '=' + title + '&myArtist' + varIndex + '=' + artist;
		});

		// Add extra empty set of empty variables to pad out if not max songs selected		
		if(varIndex < maxTracks) {
			for(i = varIndex + 1; i <= maxTracks; i++) {
				queryString = queryString + '&myLoad'+ i + '=&myTitle' + i + '=&myArtist' + i + '=';
			}
		}
		
		// Replace quotes and spaces
		queryString = queryString.replace(/'/g, '%39');
		queryString = queryString.replace(/"/g, '%22');
		queryString = queryString.replace(/ /g, '%20');

		// Insert into embed code template
		var embedCode = '';
		if('' != queryString) {
			var embedCode = embedTemplate.replace(/%querystring%/g, queryString);
		}
		var embedText = $('mtEmbedCode');
		embedText.value = embedCode;
		
		if(showHide) {
			// No tracks picked
			if(0 == mixtape.tracksPicked) {
				Effect.toggle('mtEmbedArea', 'slide', {duration: .5});
			}
			// First track picked
			else if(1 == mixtape.tracksPicked && checked) {
				Effect.toggle('mtEmbedArea', 'slide', {duration: .5});
			}
		}
	}

	this.embedCodeSelect = function()
	{
		var embedText = $('mtEmbedCode');
		embedText.focus();
		embedText.select();
	}
	
} // end mixtape class