<?php
use Orchard\Feature\Feature;
use Orchard\Service\SegmentAnalyticsTracking;

    $segmentKeyConfigured = SegmentAnalyticsTracking::getKey('workstation');
    $editTrackOptions = ($segmentKeyConfigured) ? 'editTrackOptions(this);' : '';
    $trackAttributes = ($segmentKeyConfigured) ? 'data-event="click" data-event-category="Release" data-event-action="Edit Existing Track" data-event-text="Edit Existing Track" data-event-label="' . $this->vendor_id . '"' : '';
?>

function editTrackOptions(trigger) {
    modalSegmentAnalytics(trigger);
}

var isThirdPartyPublishingEnabled = <?=json_encode($this->isThirdPartyPublishingEnabled)?>;
var applytoallUsPublishingObligationEnabled = <?=json_encode($this->applytoallUsPublishingObligationEnabled)?>;


var isLocaleFeatureEnabled = <?php echo ($this->isLocaleFeatureEnabled) ? 1 : 0 ?>;
var trackChanged = "";
var volumeDividerDeleted = false;
var showLoadingBar = true;
var TrackManager = function(setting){

		this.compilationLink = setting.compilationLink;
		this.addVolumeDividerLink = setting.addVolumeDividerLink;
		this.multiuploadButton = setting.multiuploadButton;
		this.trackListPlaceholder = setting.trackListPlaceholder;
		this.firstDivider = setting.firstDivider;
		this.loadingTrackMessage = setting.loadingTrackMessage;
		this.trashBin = setting.trashBin;
		this.noTracksAdded = setting.noTracksAdded;
		this.saveForLater = setting.saveForLater;
		this.submitRelease = setting.submitRelease;
		this.customParams = setting.customParams;
		this.allTracks = [];
		this.tracks_cache = [];
		this.track_array_with_old_order = [];
		this.stateVars = {"deleting":0};
		this.audiofilequeue = [];
		this.newlyUploadedTracks = [];
		this.editTrackModalOpening = false;
		this.isReleaseRejected = false;
		this.completedSaveProcess = false;
		this.saveTracksFlag = 0;

		this.loadTracksFromDb = function(callback){
			var tm = this;
			var release_status = this.customParams.release_status;
			var isEditable = this.customParams.isEditable;
			var isInContent = this.customParams.isInContent;
			var submitErrorCorrection = this.customParams.submitErrorCorrection;
    		var tmpAllTracks = [];
    		$.extend(true, tmpAllTracks, this.allTracks);
    		$.ajax({
				 type: 'POST',
				 url: '/releasebuilder/gettracks',
				 data: "release_type="+release_status+"&release_id="+this.customParams.release_id+"&isEditable="+isEditable+"&isInContent="+isInContent,
				 success: function( XMLHttpResponse, textStatus, XMLHttpRequest ){
					$('#releasebuilder_tracks').show();
					$('#trackloading').hide();
				    var response = eval("("+XMLHttpResponse+")");
					for(var i in response){
						if(jQuery.inArray(i,tm.getTracksArrayUniqueKeys()) == -1){
							tmpAllTracks[i] = [];
							tmpAllTracks[i]["unique_id"] = i;
							tmpAllTracks[i]["existing_track_id"] = response[i]["existing_track_id"];
							tmpAllTracks[i]["unique_track_id"] = i.replace("db","");
							tmpAllTracks[i]["trackNumber"] = response[i]["track_id"];
							tmpAllTracks[i]["original_track_id"] = response[i]["original_track_id"];
							tmpAllTracks[i]["cd"] = response[i]["cd"];
							tmpAllTracks[i]["original_cd"] = response[i]["original_cd"];
							tmpAllTracks[i]["upc"] = response[i]["upc"];
							tmpAllTracks[i]["ISRC"] = response[i]["isrc"];
							tmpAllTracks[i]["explicit"] = response[i]["explicit_lyrics"];
							tmpAllTracks[i]["trackName"] = $.trim(response[i]["track_name"]);
							tmpAllTracks[i]["trackWork"] = $.trim(response[i]["track_work"]);
							tmpAllTracks[i]["trackMovement"] = $.trim(response[i]["track_movement"]);
							tmpAllTracks[i]["offertype"] = response[i]["offer_type"];
							tmpAllTracks[i]["displayedAsHidden"] = $.trim(response[i]["track_name"]);
							tmpAllTracks[i]["trackType"] = response[i]["track_type"];
							tmpAllTracks[i]["writers"] = response[i]["writers"];
							tmpAllTracks[i]["publishers"] = response[i]["publishers"];
							tmpAllTracks[i]["album_artist"] = response[i]["album_artist"];
							tmpAllTracks[i]["trackLevelArtists"] = response[i]["track_artists"];
							tmpAllTracks[i]["pline"] = response[i]["p_line"];
							tmpAllTracks[i]["selectedTrack"] = 0;
							tmpAllTracks[i]["percentage"] = 0;
							tmpAllTracks[i]["path"] = (response[i]["path"]!=undefined ? response[i]["path"] : "");
							tmpAllTracks[i]["duration"] = (response[i]["duration"]!=undefined ? response[i]["duration"] : "");
							tmpAllTracks[i]["import_asset_id"] = 0;
							tmpAllTracks[i]["inprogress"] = 0;
							tmpAllTracks[i]["audio_file_number"] = response[i]["audio_file_number"];
							tmpAllTracks[i]["original_file_name"] = response[i]["original_file_name"];
							tmpAllTracks[i]["audio_upload_error"] = response[i]["audio_upload_error"];
							tmpAllTracks[i]["look_for_mp3"] = (response[i]["look_for_mp3"]!=undefined ? response[i]["look_for_mp3"] : "N");
							tmpAllTracks[i]["mp3_check_count"] = 0;
							tmpAllTracks[i]["previewstarttime"] = (response[i]["preview_start_time"]!=undefined ? response[i]["preview_start_time"] : "");

							tmpAllTracks[i]['ItunesPricingTierId'] = (response[i]["itunes_pricing_tier_id"] != undefined ? response[i]["itunes_pricing_tier_id"].toString() : "");
							tmpAllTracks[i]['old_ItunesPricingTierId'] = (response[i]["old_itunes_pricing_tier_id"] != undefined ? response[i]["old_itunes_pricing_tier_id"].toString() : "");
							tmpAllTracks[i]['trackiTunesPricingTierId'] = (response[i]["track_iTunes_pricing_tier_id"] != undefined ? response[i]["track_iTunes_pricing_tier_id"].toString() : 0);
							tmpAllTracks[i]['AmazonPricingTierId'] = (response[i]["amazon_pricing_tier_id"] != undefined ? response[i]["amazon_pricing_tier_id"].toString() : "");
							tmpAllTracks[i]['old_AmazonPricingTierId'] = (response[i]["old_amazon_pricing_tier_id"] != undefined ? response[i]["old_amazon_pricing_tier_id"].toString() : "");
							tmpAllTracks[i]['trackAmazonPricingTierId'] = (response[i]["track_amazon_pricing_tier_id"] != undefined ? response[i]["track_amazon_pricing_tier_id"].toString() : 0);

							tmpAllTracks[i]["versionName"] = $.trim(response[i]["version"]);
							tmpAllTracks[i]["old_versionName"] = $.trim(response[i]["version"]);
							tmpAllTracks[i]["VendorTrackIdentifier"] = (response[i]["vendor_track_identifier"]);
							tmpAllTracks[i]["old_VendorTrackIdentifier"] = (response[i]["vendor_track_identifier"]);
							if (isThirdPartyPublishingEnabled)
								tmpAllTracks[i]['USPublishingObligation'] = (response[i]['us_publishing_obligation']);
							if(isInContent && response[i]["third_party_publisher"]=='')
							{
								tmpAllTracks[i]["third_party_publisher"]="N";
							}
							else
							{
								tmpAllTracks[i]["third_party_publisher"] = response[i]["third_party_publisher"];
							}
							tmpAllTracks[i]["trackLevelFeaturingArtists"] = response[i]["featuring"];
							tmpAllTracks[i]["trackLevelRemixer"] = response[i]["remixer"];

							tmpAllTracks[i]["old_trackName"] = $.trim(response[i]["track_name"]);
							tmpAllTracks[i]["old_trackWork"] = $.trim(response[i]["track_work"]);
							tmpAllTracks[i]["old_trackMovement"] = $.trim(response[i]["track_movement"]);

							tmpAllTracks[i]["old_explicit"] = response[i]["explicit_lyrics"];
							tmpAllTracks[i]["old_pline"] = response[i]["p_line"];
							tmpAllTracks[i]["old_previewstarttime"] = (response[i]["preview_start_time"]!=undefined ? response[i]["preview_start_time"] : "");
							tmpAllTracks[i]["old_trackLevelArtists"] = response[i]["track_artists"];
							tmpAllTracks[i]["old_writers"] = response[i]["writers"];
							tmpAllTracks[i]["old_publishers"] = response[i]["publishers"];
							tmpAllTracks[i]["old_trackLevelFeaturingArtists"] = response[i]["featuring"];
							tmpAllTracks[i]["old_trackLevelRemixer"] = response[i]["remixer"];
							/** classical genre entries */
							tmpAllTracks[i]["old_performer"] = response[i]["performer"];
							tmpAllTracks[i]["old_composer"] = response[i]["composer"];
							tmpAllTracks[i]["old_orchestra"] = response[i]["orchestra"];
							tmpAllTracks[i]["old_ensemble"] = response[i]["ensemble"];
							tmpAllTracks[i]["old_conductor"] = response[i]["conductor"];

							/** classical genre entries */
							tmpAllTracks[i]["performer"] = response[i]["performer"];
							tmpAllTracks[i]["composer"] = response[i]["composer"];
							tmpAllTracks[i]["orchestra"] = response[i]["orchestra"];
							tmpAllTracks[i]["ensemble"] = response[i]["ensemble"];
							tmpAllTracks[i]["conductor"] = response[i]["conductor"];

							/** Changed Fields **/
							tmpAllTracks[i]["changedField"] = response[i].changedField;

							/** Rejection Comments set here and isReleaseRejected flag **/
							tmpAllTracks[i]["rejectedNotesObj"] 		= response[i].rejectedNotesObj;
							(response[i].rejectedNotesObj > 0 && !tm.isReleaseRejected) ? tm.isReleaseRejected = true	:	'';

							tmpAllTracks[i]['rejectedFields'] = response[i].rejectedFields;
							tmpAllTracks[i]['rejectionCorrectedFields']	= (response[i].rejectionCorrectedFields.length > 0 ? (response[i].rejectionCorrectedFields).split("|") :  new Array() );
							tmpAllTracks[i]['rejectionCorrectedCount'] =  response[i].rejectionCorrectedCount;

							if(response[i].commentTrackName != '') {
								tmpAllTracks[i]["commentTrackName"] = response[i].commentTrackName;
							}

							if(response[i].commentTrackWork != '') {
								tmpAllTracks[i]["commentTrackWork"] = response[i].commentTrackWork;
							}
							if(response[i].commentTrackMovement != '') {
								tmpAllTracks[i]["commentTrackMovement"] = response[i].commentTrackMovement;
							}
							if(response[i].commentoffertype != '') {
								tmpAllTracks[i]["commentoffertype"] = response[i].commentoffertype;
							}
							if(response[i].commentTrackVersion != '') {
								tmpAllTracks[i]["commentTrackVersion"] = response[i].commentTrackVersion;
							}

							if(response[i].commentVendorTrackIdentifier != '') {
								tmpAllTracks[i]["commentVendorTrackIdentifier"] = response[i].commentVendorTrackIdentifier;
							}

							if(response[i].commentTrackLevelArtists != '') {
								tmpAllTracks[i]["commentTrackLevelArtists"] = response[i].commentTrackLevelArtists;
							}

							if(response[i].commentTrackLevelFeaturingArtists != '') {
        						tmpAllTracks[i]["commentTrackLevelFeaturingArtists"] = response[i].commentTrackLevelFeaturingArtists;
					        }
					        if(response[i].comment_explicit != '') {
        						tmpAllTracks[i]["comment_explicit"] = response[i].comment_explicit;
					        }
					       if(response[i].commentTrackLevelRemixerArtists != '') {
					        	tmpAllTracks[i]["commentTrackLevelRemixerArtists"] = response[i].commentTrackLevelRemixerArtists;
					       }
 						   if(response[i].comment_pLine != '') {
								tmpAllTracks[i]["comment_pLine"] = response[i].comment_pLine;
							}

							if(response[i].comment_previewstarttime != '') {
								tmpAllTracks[i]["comment_previewstarttime"] = response[i].comment_previewstarttime;
							}

							if(response[i].comment_track_writer != '') {
								tmpAllTracks[i]["comment_track_writer"] = response[i].comment_track_writer;
							}

							if(response[i].comment_track_publisher != '') {
								tmpAllTracks[i]["comment_track_publisher"] = response[i].comment_track_publisher;
							}

							if(response[i].commentPerformer != '') {
								tmpAllTracks[i]["commentPerformer"] = response[i].commentPerformer;
							}

							if(response[i].comment_composer != '') {
								tmpAllTracks[i]["comment_composer"] = response[i].comment_composer;
							}

							if(response[i].comment_orchestra != '') {
								tmpAllTracks[i]["comment_orchestra"] = response[i].comment_orchestra;
							}

							if(response[i].comment_ensemble != '') {
								tmpAllTracks[i]["comment_ensemble"] = response[i].comment_ensemble;
							}

							if(response[i].comment_conductor != '') {
								tmpAllTracks[i]["comment_conductor"] = response[i].comment_conductor;
							}
							if(response[i].commentOriginalFileName != '') {
       							 tmpAllTracks[i]["commentOriginalFileName"] = response[i].commentOriginalFileName;
       						}
       						if(response[i].commentTrackDeductPublishing != '') {
								tmpAllTracks[i]["commentTrackDeductPublishing"] = response[i].commentTrackDeductPublishing;
							}

							if(response[i].comment_meta_language != '') {
								tmpAllTracks[i]["commentTrackLanguage"] = response[i].comment_meta_language;
							}

							if(response[i].commentItunesPricingTierId != '') {
								tmpAllTracks[i]["commentItunesPricingTierId"] = response[i].commentItunesPricingTierId;
							}

							if(response[i].commentAmazonPricingTierId != '') {
								tmpAllTracks[i]["commentAmazonPricingTierId"] = response[i].commentAmazonPricingTierId;
							}

							if( response[i]["meta_language"]) {
								tmpAllTracks[i]['trackLanguage'] = response[i]["meta_language"];
							}
							tmpAllTracks[i]['old_trackLanguage'] = response[i]["meta_language"];
						}else{
							tmpAllTracks[i] = tm.allTracks[i];
						}
						//localicazation data
						if(isLocaleFeatureEnabled) {
						    tmpAllTracks[i]['trackLocale'] = response[i]["trackLocale"];
						}
					}
					tm.allTracks = $.extend(true, [], tmpAllTracks);
					tm.getTracks();

					if(tm.customParams.isEditable ){
						tm.rebuildTrackList();
						tm.partitionTracks();
						tm.backupTracksArray();
					}else{
						$('#'+this.addVolumeDividerLink).hide();
						tm.populateTracksContainer();
					}
					$("tbody#loading_track_message").html("");
					eval(callback);
					$('#deleteModalMaskId').css("width",$(document).width());
		            $('#deleteModalMaskId').css("height", $(document).height());
				 },
				 error: function( xhr, textStatus, errorThrown ){
					$('#trackloading').hide();
			 	 }
			 });
   		}
   		this.constructTrackElement = function(cd, trackNumber, original_file_name, unique_track_id, queueID, trackType,itunesDefault,amazonDefault){
   			var tmpAllTracks = [];
   			tmpAllTracks["unique_id"] = "db"+unique_track_id;
			tmpAllTracks["unique_track_id"] = unique_track_id;
			tmpAllTracks["trackNumber"] = trackNumber;
			tmpAllTracks["original_track_id"] = trackNumber;
			tmpAllTracks["cd"] = cd;
			tmpAllTracks["original_cd"] = cd;
			tmpAllTracks["upc"] = this.customParams.upc;
			tmpAllTracks["ISRC"] = "";
			tmpAllTracks["explicit"] = "N";
			tmpAllTracks["trackName"] = "";
			tmpAllTracks["trackWork"] = "";
			tmpAllTracks["trackMovement"] = "";
			tmpAllTracks["displayedAsHidden"] = "";
			tmpAllTracks["displayedAsHidden"] = "";
			tmpAllTracks["writers"] = "";
			tmpAllTracks["publishers"] = "";
			tmpAllTracks["album_artist"] = this.customParams.album_artist;
			tmpAllTracks["trackLevelArtists"] = "";
			tmpAllTracks["pline"] = "";
			tmpAllTracks["selectedTrack"] = 0;
			tmpAllTracks["percentage"] = 0;
			tmpAllTracks["path"] = "";
			tmpAllTracks["duration"] = "";
			tmpAllTracks["import_asset_id"] = 0;
			tmpAllTracks["inprogress"] = 1;
			tmpAllTracks["audio_file_number"] = "";
			tmpAllTracks["original_file_name"] = original_file_name;
			tmpAllTracks["audio_upload_error"] = "";
			tmpAllTracks["look_for_mp3"] = "Y";
			tmpAllTracks["mp3_check_count"] = 0;
                        if (isThirdPartyPublishingEnabled) {
                            tmpAllTracks['USPublishingObligation'] = '';
                            tmpAllTracks['third_party_publisher'] = '';
                        } else {
                            tmpAllTracks["third_party_publisher"] = "N";
                        }
			tmpAllTracks["offertype"] = "N";
			tmpAllTracks["old_trackName"] = "";
			tmpAllTracks["old_trackWork"] = "";
			tmpAllTracks["old_trackMovement"] = "";
			tmpAllTracks["old_explicit"] = "";
			tmpAllTracks["old_pline"] = "";
			tmpAllTracks["old_trackLevelArtists"] = "";
			tmpAllTracks["old_writers"] = "";
			tmpAllTracks["old_publishers"] = "";
			tmpAllTracks["trackLevelFeaturingArtists"] = "";
			tmpAllTracks["trackLevelRemixer"] = "";
			tmpAllTracks["old_trackLevelFeaturingArtists"] = "";
			tmpAllTracks["old_trackLevelRemixer"] = "";
			tmpAllTracks["old_performer"] = "";
			tmpAllTracks["old_composer"] = "";
			tmpAllTracks["old_orchestra"] = "";
			tmpAllTracks["old_ensemble"] = "";
			tmpAllTracks["old_conductor"] = "";
			if(queueID != undefined && queueID != null && queueID != ""){
				tmpAllTracks["queueID"] = queueID;
			}

			tmpAllTracks["performer"] = "";
			tmpAllTracks["composer"] = "";
			tmpAllTracks["orchestra"] = "";
			tmpAllTracks["ensemble"] = "";
			tmpAllTracks["conductor"] = "";
			tmpAllTracks["trackType"] = trackType;
			tmpAllTracks["trackLanguage"] = "";
			tmpAllTracks["old_trackLanguage"] = "";
			tmpAllTracks["previewstarttime"] = "";
			tmpAllTracks["old_previewstarttime"] = "";
			tmpAllTracks["ItunesPricingTierId"] = itunesDefault;
			tmpAllTracks["old_ItunesPricingTierId"] = "";
			tmpAllTracks["trackiTunesPricingTierId"] = "";
			tmpAllTracks["AmazonPricingTierId"] = amazonDefault;
			tmpAllTracks["old_AmazonPricingTierId"] = "";
			tmpAllTracks["trackAmazonPricingTierId"] = "";
			tmpAllTracks["versionName"] = "";
			tmpAllTracks["old_versionName"] = "";
			tmpAllTracks["VendorTrackIdentifier"] = "";
			tmpAllTracks["old_VendorTrackIdentifier"] = "";
			if(isLocaleFeatureEnabled) {
			    tmpAllTracks["trackLocale"] = "";
			}
			return tmpAllTracks;
   		}
   		this.performSaveTrackCall = function (refresh){
   			var tm = this;
   			params = this.params;
   			var saveTracksFlag = 0;
   			var trackParams = {};
   			var trackArray = this.trackArray;
   			for(var i in trackArray){
   				if(trackArray[i]['save_track'] !== undefined && trackArray[i]['save_track'] === true){
   					trackParams[i] = trackArray[i];
   					saveTracksFlag = 1;
   				}
   			}
			if(saveTracksFlag == 1){
   			var jsonParams = encodeURIComponent(JSON.stringify({jsonData:trackParams}));
   			display_track_message("<?=$this->escapejs($this->translate->_('Saving...'))?>");
			tm.completedSaveProcess = false;
			var posturl = "/releasebuilder/savetracks";
			if(checkaudio){
				posturl += "?no_upload_request=1";
			}
			showSaveTrackMask("<?=$this->escapejs($this->translate->_('Saving Data'))?>");
			$.ajax({
				type: 'POST',
				url: posturl,
				data: 'param=' + jsonParams,
				success: function( XMLHttpResponse, textStatus, XMLHttpRequest ){
					$("#vectorapi_error").html('');
					var data = eval("("+XMLHttpResponse+")");
					if(data != null && data.err){
						alert("<?=$this->escapejs($this->translate->_('Sorry, an error occurred'))?> ");
						return false;
						location.reload();
					}
					for(var i in data){
						if(data[i].import_asset_id != ""){
							tm.allTracks[i]["import_asset_id"] = data[i].import_asset_id;
						}
						tm.allTracks[i]["trackName"] = data[i].trackName;
						tm.allTracks[i]["versionName"] = data[i].versionName;
						if(data[i].VendorTrackIdentifier != ""){
							tm.allTracks[i]["VendorTrackIdentifier"] = data[i].VendorTrackIdentifier;
						}
						//added new pricing id in all tracks array
						if(typeof data[i].itunesPricing != 'undefined'){
							if(typeof data[i].itunesPricing.itunes_pricing_tier_id != 'undefined'){
								tm.allTracks[i]["ItunesPricingTierId"] = data[i].itunesPricing.itunes_pricing_tier_id;
							}
							if(typeof data[i].itunesPricing.old_itunes_pricing_tier_id != 'undefined'){
								tm.allTracks[i]["old_ItunesPricingTierId"] = data[i].itunesPricing.old_itunes_pricing_tier_id;
							}
							if(typeof data[i].itunesPricing.track_iTunes_pricing_tier_id != 'undefined'){
								tm.allTracks[i]["trackiTunesPricingTierId"] = data[i].itunesPricing.track_iTunes_pricing_tier_id;
							}
						}
						if(typeof data[i].amazonPricing != 'undefined'){
							if(typeof data[i].amazonPricing.amazon_pricing_tier_id != 'undefined'){
								tm.allTracks[i]["AmazonPricingTierId"] = data[i].amazonPricing.amazon_pricing_tier_id;
							}
							if(typeof data[i].amazonPricing.old_amazon_pricing_tier_id != 'undefined'){
								tm.allTracks[i]["old_AmazonPricingTierId"] = data[i].amazonPricing.old_amazon_pricing_tier_id;
							}
							if(typeof data[i].amazonPricing.track_amazon_pricing_tier_id != 'undefined'){
								tm.allTracks[i]["trackAmazonPricingTierId"] = data[i].amazonPricing.track_amazon_pricing_tier_id;
							}
						}
					}
		    		$('#error_display').html(data);
		    		tm.backupTracksArray();
		    		if(refresh!=1){
		    			tm.rebuildTrackList();
		    			tm.partitionTracks();
		    		}else{
		    			tm.populateTrackUniqueID();
		    		}
		    		tm.completedSaveProcess = true;
		    		$(document).trigger('TRACK_CHANGED');
		    		hideSaveTrackMask();
				},
				error: function( xhr, textStatus, errorThrown ){
					var err = $.parseJSON(xhr.responseText);
					hideSaveTrackMask();
				}
			});
}
   		}
   		this.saveTrackData = function(refresh, checkaudio){
				this.saveTracksFlag = 0;
				var params = {};
				var trackArray = {};
				var ignoreFieldsForComparison = ["AudioChange", "changedField", "previous", "next", "selectedTrack", "displayedAsHidden"];
				for (key in this.allTracks) {
					for (field in this.allTracks[key]) {
						if($.inArray(field, ignoreFieldsForComparison) < 0){
			    		   if( this.tracks_cache[key] && typeof(this.tracks_cache[key])!="undefined"
								&& this.tracks_cache[key]!="undefined"
								&& ( $.compare(this.tracks_cache[key][field], this.allTracks[key][field])
	     							|| (this.tracks_cache[key][field] == null && this.allTracks[key][field] == "")
	     							|| (this.tracks_cache[key][field] == "" && this.allTracks[key][field] == null)
	   							   )
							){
			    				//do nothing
			    			}else{
			    				params[key+'[save_track]']= true;

			    				if(trackArray[key] == 'undefined' || trackArray[key] == null){
									trackArray[key] = {};
								}
								trackArray[key]['save_track'] = true

			    				this.saveTracksFlag = 1;
			    			}
						}
						val = ((this.allTracks[key][field]&&this.allTracks[key][field]!='null')?this.allTracks[key][field]:'');
						(field == 'explicit' && val == '') ? val = 'N' : '';
						params[key+'['+field+']']= val;
						params[key+'[release_id]']= release_id;
						if(trackArray[key] == 'undefined' || trackArray[key] == null){
								trackArray[key] = {};
						}
							trackArray[key][field] = val
							trackArray[key]['release_id']= release_id;
					}
				}

				this.params = params;
				this.trackArray = trackArray;

				if(this.saveTracksFlag == 1 || refresh == 1){
					removeAttributeSubmit();
					this.performSaveTrackCall(refresh);
				}
		}

		this.saveTrackField = function(releaseId,fieldType,fieldValue,thirdPartyPublisher=''){
				$('.applyall, #save_and_close_button, ul.trackNumberList li, #next_button, #previous_button').addClass('loading').attr('disabled','disabled');
				$('.applyall, #save_and_close_button').parent().css('cursor','default');
			if (applytoallUsPublishingObligationEnabled && fieldType == 'USPublishingObligation') {
			    params = {'release_id':releaseId, 'fieldType':fieldType,'fieldValue':fieldValue,'thirdPartyPublisher':thirdPartyPublisher};
			} else {
			    params = {'release_id':releaseId, 'fieldType':fieldType,'fieldValue':fieldValue};
			}
			showSaveTrackMask("<?=$this->escapejs($this->translate->_('Saving Data'))?>");
			$.ajax({
					type: 'POST',
					url: '/releasebuilder/savetrackfield',
					data: params,
					success: function( XMLHttpResponse, textStatus, XMLHttpRequest ){
						this.saveTracksFlag = 0;
						<?php if ($this->isLocaleFeatureEnabled) { ?>
						    TrackLocale.applyLocaleToAll(fieldType);
						<?php } ?>
						$(document).trigger('TRACK_CHANGED');
						$('.applyall, #save_and_close_button, ul.trackNumberList li, #next_button, #previous_button').removeClass('loading').removeAttr('disabled');
						$('.applyall, #save_and_close_button').parent().css('cursor','auto');
						hideSaveTrackMask();
					},
					error: function( xhr, textStatus, errorThrown ){
						var err = $.parseJSON(xhr.responseText);
						$('.applyall, #save_and_close_button, ul.trackNumberList li, #next_button, #previous_button').removeClass('loading').removeAttr('disabled');
						$('.applyall, #save_and_close_button').parent().css('cursor','auto');
						hideSaveTrackMask();
					}
				});
		}

		this.backupTrackField = function(trackField,trackValue){
   			var tmp_tracks_cache = [];
     		$.extend(true, tmp_tracks_cache, this.tracks_cache);
     		this.tracks_cache = [];
		   	for (key in  tmp_tracks_cache){
				this.tracks_cache[key] = {};
		    	for (var field in  tmp_tracks_cache[key]) {
		     		if(field == trackField){
		      			this.tracks_cache[key][field] = trackValue;
		     		}else{
						this.tracks_cache[key][field] = tmp_tracks_cache[key][field];
					}
		   		}
		   }
  		}

	   	this.saveTrack = function(track_unique_id, input_arr) {
	   		var tmpAllTracks = [];
			// Update all tracks with localization data only when release status is NOT in_content
			if (isLocaleFeatureEnabled && tm.customParams.release_status !== 'in_content') {
				TrackLocale.trackId = track_unique_id;
				TrackLocale.updateTrackManager();
			}
    		$.extend(true, tmpAllTracks, this.allTracks);
			input_arr.each(function(i, s){
				if(s.id && $("#"+s.id)!="undefined"){
					var tmp_key = s.id;
					tmp_key = tmp_key.split("_");
					var value = $("#"+s.id).val();
					var txtFieldName	= tmp_key[1];
					var multipleFields = new Array("trackLevelArtists","trackLevelFeaturingArtists","trackLevelRemixer","writers","publishers","performer","composer","orchestra","ensemble","conductor");
     				if($.inArray(txtFieldName, multipleFields) >= 0){
	      				if(value.length > 0 && (value.charAt(value.length-1)) == "|"){
	       					value = value.substring(0, value.length-1);
	      				}
     					if(value.length > 0){
							var valueArray = value.split("|");
							var valueArrayDist = new Array();
							$(valueArray).each(function(index, item) {
								if ($.inArray(item, valueArrayDist) == -1)
									valueArrayDist.push(item);
							});
							value = valueArrayDist.join("|");
						}
     				}
			     	if(txtFieldName == "trackLevelArtists" && (tmpAllTracks[track_unique_id][txtFieldName] == "" || tmpAllTracks[track_unique_id][txtFieldName] == undefined)){
			      		txtFieldName = "album_artist";
			    	}

					if(txtFieldName == "track" && trackChanged=="true"){
						if(TM.isReleaseRejected == true){
								/** IF ALL REJECTED FIELDS ARE CORRECTED - SHOW YELLOW ELSE SHOW RED */
								if((tmpAllTracks[track_unique_id]['rejectedNotesObj'] - tmpAllTracks[track_unique_id]['rejectionCorrectedFields'].length) <= 0)
									changeExistingClass(track_unique_id);
						}else if(TM.customParams.isInContent == true){
								changeExistingClass(track_unique_id);
						}
     	 				trackChanged = false;
     				}

     				//explicit radio button processing
     				if(txtFieldName == 'explicit'){
     					if($("#"+s.id).attr('checked')){
     						tmpAllTracks[track_unique_id]["explicit"] = tmp_key[2];
     					}
     				}

					if(txtFieldName == 'offertype'){
     					if($("#"+s.id).attr('checked')){
     						value = 'Y'
     					}else{
     						value = 'N';
     					}
     				}

					if(tmpAllTracks[track_unique_id][txtFieldName] != value && value != ''){
						if(tmpAllTracks[track_unique_id][txtFieldName] != undefined || txtFieldName == "trackLanguage"){
							if((TM.customParams.isInContent == true || TM.isReleaseRejected == true)&& TM.customParams.isEditable == true){
								var dbFieldname =  TM.getErrorDbTxtFieldRels(tmp_key[1]);

								if(dbFieldname.length > 0){
									var totalFieldCount = 0;
									if(tmpAllTracks[track_unique_id]["changedField"] != undefined) {
										totalFieldCount	= tmpAllTracks[track_unique_id]["changedField"].length;
										rejectedChanged = getRejectedChanged(tmpAllTracks[track_unique_id]["changedField"] ,track_unique_id );
									}else{
										tmpAllTracks[track_unique_id]["changedField"] = new Array();
									}
									var searchkey = $.inArray(value, tmpAllTracks[track_unique_id]["changedField"]);
									if(searchkey == "-1"){
										tmpAllTracks[track_unique_id]["changedField"][totalFieldCount] =  dbFieldname;
									}
								}
								if(TM.isReleaseRejected == true){
									/** IF ALL REJECTED FIELDS ARE CORRECTED - SHOW YELLOW ELSE SHOW RED */
									if(tmpAllTracks[track_unique_id]['rejectionCorrectedFields'] != undefined){
										if((parseInt(tmpAllTracks[track_unique_id]['rejectedNotesObj']) - parseInt(tmpAllTracks[track_unique_id]['rejectionCorrectedFields'].length)) <= 0){
											changeExistingClass(track_unique_id);
										}
									} else if(tm.allTracks[track_unique_id]['changedField']!=undefined){
										changeExistingClass(track_unique_id);
									 }
								}else if(TM.customParams.isInContent == true){
									changeExistingClass(track_unique_id);
								}
							}
						}
					}

					if(txtFieldName == 'offertype'){
     					if($("#"+s.id).attr('checked')){
     						if(tmp_key[2] != ''){
     							tmpAllTracks[track_unique_id]["offertype"] == "Y";
     						}else{
								tmpAllTracks[track_unique_id]["offertype"] == "N";
     						}
     					}
     				} else if(txtFieldName == 'explicit') {
     					//do nothing
     				}else{
						tmpAllTracks[track_unique_id][tmp_key[1]] = value;
					}
				}
				if(txtFieldName == "AudioChange"){
						if(value == "true"){
							if(TM.isReleaseRejected == true){
								/** IF ALL REJECTED FIELDS ARE CORRECTED - SHOW YELLOW ELSE SHOW RED */
								if(tmpAllTracks[track_unique_id]['rejectedNotesObj'] - tmpAllTracks[track_unique_id]['rejectionCorrectedFields'] <= 0)
									changeExistingClass(track_unique_id);
							}else if(TM.customParams.isInContent == true){
								changeExistingClass(track_unique_id);
							}
						}
                  }
				tmpAllTracks[track_unique_id]["third_party_publisher"] = $("input[name='edittrackmodal_third_party_publisher']:checked").val();
			});
			this.allTracks = $.extend(true, [], tmpAllTracks);
			this.rebuildTrackList();
		}
		this.getErrorDbTxtFieldRels = function(txtFieldname){
			var retValue = "";
			switch(txtFieldname){
				case 'trackName' : retValue = "track_name";   break;
				case 'trackWork' : retValue = "track_work";   break;
				case 'trackMovement' : retValue = "track_movement";   break;
				case 'offertype' : retValue = "offer_type"; break;
				case 'trackLevelArtists' : retValue = "performers";   break;
				case 'trackLevelFeaturingArtists' : retValue = "featuring";   break;
    			case 'trackLevelRemixer' : retValue = "remixer";   break;
				case 'pline' : retValue = "p_line"; break;
				case 'writers' : retValue = "track_writer"; break;
				case 'publishers' : retValue = "track_publisher"; break;
				case 'performer' : retValue = "performers"; break;
				case 'composer' : retValue = "composers"; break;
				case 'orchestra' : retValue = "orchestras"; break;
				case 'ensemble' : retValue = "ensembles"; break;
				case 'conductor' : retValue = "conductors"; break;
				case 'explicit' : retValue = "explicit_lyrics"; break;
				case 'trackLanguage' : retValue = "meta_language"; break;
				case 'previewstarttime' : retValue = "previewstarttime"; break;
				case 'ItunesPricingTierId' : retValue = "track_itunes_pricing"; break;
				case 'AmazonPricingTierId' : retValue = "track_amazon_pricing"; break;
				case 'versionName' : retValue = "version"; break;
				case 'VendorTrackIdentifier' : retValue = "vendor_track_identifier"; break;
			}
			return retValue;
		}
	   	this.getTracks = function(){
	   			$("#"+this.trackListPlaceholder).html("");
	   			var tmpAllTracks = [];
	    		$.extend(true, tmpAllTracks, this.allTracks);
	    		if(this.getTotalNumOfTracks()>0){
	    			var old_cd = 1;
	    			for(var i in tmpAllTracks){
	    				var cd = tmpAllTracks[i]["cd"];
	    				var path = tmpAllTracks[i]["path"];
	    				var duration = tmpAllTracks[i]["duration"];

	    				if((parseInt(cd) - parseInt(old_cd)) != 1 && cd != old_cd){
							for(var z=1; z<(parseInt(cd) - parseInt(old_cd)); z++){
								this.addDivider();
							}
						}
						if(old_cd != cd){
							this.addDivider();
						}

						this.appendTrackHTML(i);

						/** displaying error correction track**/
						if(tmpAllTracks[i]['rejectedNotesObj'] != undefined)
						{	/** IF ALL REJECTED FIELDS ARE CORRECTED - SHOW YELLOW ELSE SHOW RED */
							if(tmpAllTracks[i]['rejectedNotesObj'] - tmpAllTracks[i]['rejectionCorrectedCount'] > 0)
								addClassRejection(i);
							else
								changeExistingClass(i);
						}
						else if(tmpAllTracks[i]['changedField'] != undefined)
                        {
							addClassErrorCorrection(i);
                        }

						if(this.customParams.isEditable && !(this.customParams.isInContent)){// LABEL PROCESSING
							if ($('#'+this.trashBin).is(':hidden')) {
								$('#'+this.trashBin).fadeIn('slow');
							}
						}else if(this.customParams.isEditable && (this.customParams.isInContent)){ // IN CONTENT - EDIT
							$("#"+i+" > td").css("cursor","default");
							$("td.ro").html("");
						}else{	// IN CONTENT - VIEW
							$("#"+i+" > td").css("cursor","default");
							$("td.ro").html("");
							$("td.ed").html("");
						}
						if(path && duration && path!=null && duration!=null){
							this.generateSmallPlayer(i, "#mediacontainer_"+i, path, duration);
							tmpAllTracks[i]["look_for_mp3"] = "N";
							tmpAllTracks[i]["mp3_check_count"] = 0;
							tmpAllTracks[i]["audio_upload_error"] = "";
						}
						old_cd = cd;
	    			}
	    			this.allTracks = $.extend(true, [], tmpAllTracks);
	    			this.track_array_with_old_order = $.extend(true,[],this.allTracks);

	    			for(var i in this.allTracks){
						if(this.allTracks[i]["trackType"] == "music"){
		    				if((this.allTracks[i]["path"]=="" || this.allTracks[i]["path"]==null || this.allTracks[i]["path"]==undefined) && this.allTracks[i]["look_for_mp3"]=="N"){
				    			if(this.allTracks[i]["audio_upload_error"] != "" && this.allTracks[i]["audio_upload_error"] != null && this.allTracks[i]["audio_upload_error"] != undefined){
									this.setAudioErrorLabel(i, this.allTracks[i]["audio_upload_error"]);
								}else{
									this.setAudioErrorLabel(i, "File not found");
								}
							}
						}else if (this.allTracks[i]["trackType"] == "video") {
							this.setAudioErrorLabel(i, "Music Video");
						}
					}
	    		}
	    		this.toggleNoTrackFound();
	   	}

	    this.setTracks = function(){
	   			var tmpAllTracks = [];
	    		$.extend(true, tmpAllTracks, this.allTracks);
	   	}
	   	this.addDivider = function(){
	   			var tmpAllTracks = [];
	    		$.extend(true, tmpAllTracks, this.allTracks);
	    		var date = new Date();
				var key = this.getNumOfDividers() + 1;
				var mixedrelease = this.checkMixedRelease();
				if(mixedrelease){
					$("#"+this.trackListPlaceholder).append('\
							<tr id="divider'+key+'">\
								<td class="ro"></td>\
								<td colspan="8"><div class="divider"></div></td>\
								<td class="ed"></td>\
							</tr>\
						');
				} else {
					$("#"+this.trackListPlaceholder).append('\
							<tr id="divider'+key+'">\
								<td class="ro draggable"><img src="/images/reorderarrows.png" width="20" height="45"/></td>\
								<td colspan="8"><div class="divider draggable"></div></td>\
								<td class="ed"></td>\
							</tr>\
						');
				}
				if(this.customParams.isEditable && !(this.customParams.isInContent) && (!mixedrelease)){
					$("#divider"+key).mouseover(function(){
						 $("#divider"+key).css({"cursor":"move"});
				     }).mouseout(function(){
						 $("#divider"+key).css({"cursor":"default"});
				     });
				}
				this.partitionTracks();
				$("#"+this.firstDivider).show();
	   	}
	   	this.getNumOfDividers = function(){
		   		var arr = $('#'+this.trackListPlaceholder).sortable('toArray');
				var num_of_dividers = 0;
				for(i in arr){
					if(arr[i].substring(0,7)=="divider"){
						num_of_dividers++;
					}
				}
				return num_of_dividers;
	   	}
	   	this.partitionTracks = function(){
	   			var tmpAllTracks = [];
	    		$.extend(true, tmpAllTracks, this.allTracks);
		   		arr = $('#'+this.trackListPlaceholder).sortable('toArray');
				var cd = 1;
				var index = 1;
				for(i in arr){
					if (arr[i] != ""){
						if(arr[i].substring(0,7)=="divider"){
							cd++;
							index = 0;
						}else{
							if (isDefined(tmpAllTracks[arr[i]])) {
								tmpAllTracks[arr[i]]["cd"] = cd;
								tmpAllTracks[arr[i]]["trackNumber"] = index;
								$("tr#"+arr[i]+" td.num div.roundedCornerBG").html(index);
							}
						}
					}
					index++;
				}
				arr = $('div.divider');
				cd = parseInt(1);
				arr.each(function(i,s){
						s.innerHTML = "Volume "+cd;
						cd++;
				});
				this.allTracks = $.extend(true, [], tmpAllTracks);
	   	}
	   	this.appendTrackHTML = function(unique_key){
	   			var tmpAllTracks = [];
	    		$.extend(true, tmpAllTracks, this.allTracks);
	   			if(this.allTracks[unique_key]["trackType"] == "music"){
					if(tm.customParams.submitErrorCorrection == true && tm.customParams.isEditable == true) {
                    var cssClass = "";
                        cssClass = "handPointer";
		    		$("#"+this.trackListPlaceholder).append('\
						<tr id="'+unique_key+'">\
							<td class="ro whitebg draggable"><img src=\"/images/reorderarrows.png\" width=\"20\" height=\"45\"/></td>\
							<td class="num draggable"><div class="roundedCornerBG">--</div></td>\
							<td class="sp">&nbsp;</td>\
							<td class="tn" <?=$trackAttributes?> onclick="<?=$editTrackOptions?> modalWindoweditTrackModal({\'uid\' : \''+unique_key+'\',\'release_id\' : \''+release_id+'\'});">--</td>\
							<td class="an text-center" <?=$trackAttributes?> onclick="<?=$editTrackOptions?> modalWindoweditTrackModal({\'uid\' : \''+unique_key+'\',\'release_id\' : \''+release_id+'\'});">'+(this.customParams.album_artist).replace(/\|/g , ', ' )+'</td>\
							<td class="expl text-center" <?=$trackAttributes?> onclick="<?=$editTrackOptions?> modalWindoweditTrackModal({\'uid\' : \''+unique_key+'\',\'release_id\' : \''+release_id+'\'});">--</td>\
							<td class="isrc text-center" <?=$trackAttributes?> onclick="<?=$editTrackOptions?> modalWindoweditTrackModal({\'uid\' : \''+unique_key+'\',\'release_id\' : \''+release_id+'\'});">--</td>\
							<td class="of text-center" <?=$trackAttributes?> onclick="<?=$editTrackOptions?> modalWindoweditTrackModal({\'uid\' : \''+unique_key+'\',\'release_id\' : \''+release_id+'\'});"><img src="/images/icons/pline-off.png" width="22" height="26" /><img src="/images/icons/copyright-off.png" width="22" height="26" /><img src="/images/icons/writers-off.png" width="22" height="26" /><img src="/images/icons/publishers-off.png" width="22" height="26" /></td>\
							<td class="aud" ><div id="mediacontainer_' + unique_key + '" class="audioUploadStatus" <?=$trackAttributes?> onclick="<?=$editTrackOptions?>"></div></td>\
							<td class="ed subtextlink text-center" <?=$trackAttributes?> onclick="<?=$editTrackOptions?> modalWindoweditTrackModal({\'uid\' : \''+unique_key+'\',\'release_id\' : \''+release_id+'\'});"><a class=\''+cssClass+'\'><img src="/images/icons/edit.png"/>edit</a></td>\
						</tr>\
					');
					} else {
						$("#"+this.trackListPlaceholder).append('\
						<tr id="'+unique_key+'">\
							<td class="ro whitebg"></td>\
							<td class="num"><div class="roundedCornerBG">--</div></td>\
							<td class="sp">&nbsp;</td>\
							<td class="tn">--</td>\
							<td class="an text-center">'+(this.customParams.album_artist).replace(/\|/g , ', ' )+'</td>\
							<td class="expl text-center" >--</td>\
							<td class="isrc text-center">--</td>\
							<td class="of text-center"><img src="/images/icons/pline-off.png" width="22" height="26" /><img src="/images/icons/copyright-off.png" width="22" height="26" /><img src="/images/icons/writers-off.png" width="22" height="26" /><img src="/images/icons/publishers-off.png" width="22" height="26" /></td>\
							<td class="aud" ><div id="mediacontainer_' + unique_key + '" class="audioUploadStatus"></div></td>\
							<td class="ed subtextlink text-center" ></td>\
						</tr>\
						');
					}
				} else if (this.allTracks[unique_key]["trackType"] == "video"){
					$("#"+this.trackListPlaceholder).append('\
					<tr id="'+unique_key+'" class="mixedReleaseNoDrag">\
						<td class="ro whitebg"></td>\
						<td class="num"><div class="roundedCornerBG">--</div></td>\
						<td class="sp">&nbsp;</td>\
						<td class="tn">--</td>\
						<td class="an text-center">'+(this.customParams.album_artist).replace(/\|/g , ', ' )+'</td>\
						<td class="expl text-center" >--</td>\
						<td class="isrc text-center" >--</td>\
						<td class="of text-center" ><img src="/images/icons/pline-off.png" width="22" height="26" /><img src="/images/icons/copyright-off.png" width="22" height="26" /><img src="/images/icons/writers-off.png" width="22" height="26" /><img src="/images/icons/publishers-off.png" width="22" height="26" /></td>\
						<td class="aud" ><div id="mediacontainer_' + unique_key + '" class="audioUploadStatus"></div></td>\
						<td class="ed subtextlink text-center" ></td>\
					</tr>\
				');
				}
	   	}
	   	this.reuploadTrack = function(){
	   			var tmpAllTracks = [];
	    		$.extend(true, tmpAllTracks, this.allTracks);
	   	}
	   	this.getTotalNumOfTracks = function(){
	   			var tmpAllTracks = [];
	    		$.extend(true, tmpAllTracks, this.allTracks);
	    		var total = 0;
	    		for(var i in tmpAllTracks){
	    			total++;
	    		}
	    		return total;
	   	}
	   	this.checkMixedRelease = function(){
	   		var tmpAllTracks = [];
	    	$.extend(true, tmpAllTracks, this.allTracks);

	    	var mixed_release = 0;
	    	for(var i in tmpAllTracks){
	    		if(tmpAllTracks[i]["trackType"] == "video"){
					mixed_release = 1;
	    		}
	    	}
	    	return mixed_release;
	   	}
	   	this.getArraySize = function(arr){
	   			var tmpAllTracks = [];
	    		$.extend(true, tmpAllTracks, arr);
	    		var total = 0;
	    		for(var i in tmpAllTracks){
	    			total++;
	    		}
	    		return total;
	   	}
	   	this.alertTracksArrContent = function(arr){
	   		var tmp = [];
	   		var output = [];
	   		var output_str = [];
	    	$.extend(true, tmp, arr);
	    	var c = 0;
	    	for(var i in arr){
	    		output[c] = [];
	    		for(var j in arr[i]){
	    			output[c].push(j+":"+arr[i][j]);
	    		}
	    		output_str.push(output[c].join(','));
	    		c++;
	    	}
	    	alert("["+output_str.join("],\n\n[")+"]");
	   	}
	   	this.alertTracksSimple = function(arr){
	   		var tmp = [];
	   		var output = [];
	    	$.extend(true, tmp, arr);
	    	var c = 0;
	    	for(var i in arr){
	    		output[c] = [];
	    		for(var j in arr[i]){
	    			if(jQuery.inArray(j,["unique_id","unique_track_id", "trackName","cd","trackNumber","selectedTrack","inprogress","percentage"]) != -1){
	    				output[c].push(j+":"+arr[i][j]);
	    			}
	    		}
	    		c++;
	    	}
	    	alert(output.toSource());
	   	}
	   	this.getTracksArrayUniqueKeys = function(){
   				var tmpAllTracks = [];
	    		$.extend(true, tmpAllTracks, this.allTracks);
	    		var output = [];
	    		if(this.getTotalNumOfTracks()>0){
	    			for(var i in tmpAllTracks){
	    				output.push(i);
	    			}
	    			return output;
	    		}
	    		return false;
   		}
   		this.rebuildTrackList = function(){
   				var tmpAllTracks = [];
	    		$.extend(true, tmpAllTracks, this.allTracks);

   				var new_tracks = [];
				var arr = $('#'+this.trackListPlaceholder).sortable('toArray');
				var index = 1;
				var total_number_of_tracks = 0;
				var track_name;
				var original_artist_name = (this.customParams.album_artist).replace(/\|/g , ', ' );

				for(i in arr){
					if(arr[i]!="" && arr[i].substring(0,7)!="divider"){
						new_tracks[arr[i]] = (tmpAllTracks[arr[i]]) ? tmpAllTracks[arr[i]] : {};
						if (tmpAllTracks[arr[i]]) {
							new_tracks[arr[i]]["trackNumber"] = index;
						}
						$("tr#"+arr[i]+" td.num div.roundedCornerBG").html(index);

						/** process track names for display */
						var track_name_tool_tip_message = "";
						track_name = "";
						if(this.customParams.genre_id == "12" && new_tracks[arr[i]]["trackWork"]!=undefined){
							track_name = $.trim(track_name+new_tracks[arr[i]]["trackWork"]);
							if(new_tracks[arr[i]]["trackMovement"]!=undefined && new_tracks[arr[i]]["trackMovement"]!=""){
								track_name = track_name+": "+$.trim(new_tracks[arr[i]]["trackMovement"]);
							}
						}else if(new_tracks[arr[i]]["trackName"]!=undefined && new_tracks[arr[i]]["trackName"]!=""){
							track_name = $.trim(track_name+new_tracks[arr[i]]["trackName"]);
						}
						if(new_tracks[arr[i]]["versionName"]!=undefined && new_tracks[arr[i]]["versionName"]!="" && $.trim(new_tracks[arr[i]]["versionName"]) != ""){
							track_name = $.trim(track_name +" ("+new_tracks[arr[i]]["versionName"]+")");
						}
						if (track_name == ""){
							track_name = "<div class='no_track_name'><?=$this->escapejs($this->translate->_("Click to Edit Track Name"))?></div>";
						} else {
							if (track_name.length > 25) {
								track_name_tool_tip_message = track_name;
								track_name = track_name.substr(0,24) + '...';
							}
						}
						if (track_name_tool_tip_message == ""){
							$("tr#"+arr[i]+" td.tn").html(track_name);
						} else {
							$("tr#"+arr[i]+" td.tn").html("<div class='track_name_tool_tip'>" + track_name + "</div>");
							$("tr#"+arr[i]+" td.tn .track_name_tool_tip").attr('title', track_name_tool_tip_message);
						}

						/** process artist names for display */
                        var tmp_track_artists = (new_tracks[arr[i]]["trackLevelArtists"]) ? trimCommas(new_tracks[arr[i]]["trackLevelArtists"]) : "";
						var artist_tool_tip_message = "";

						/** classical tooltips values */
						if (this.customParams.genre_id == "12") {

                            var performer = trimCommas(new_tracks[arr[i]]["performer"]);
							if(typeof(performer) !="undefined"){
								performer = performer.replace(/\|/gi, ", ");
							}

                            var composer = trimCommas(new_tracks[arr[i]]["composer"]);
							if(typeof(composer) !="undefined"){
								composer = composer.replace(/\|/gi, ", ");
							}

                            var orchestra = trimCommas(new_tracks[arr[i]]["orchestra"]);
							if(typeof(orchestra) !="undefined"){
								orchestra = orchestra.replace(/\|/gi, ", ");
							}

                            var ensemble = trimCommas(new_tracks[arr[i]]["ensemble"]);
							if(typeof(ensemble) !="undefined"){
								ensemble = ensemble.replace(/\|/gi, ", ");
							}

                            var conductor = trimCommas(new_tracks[arr[i]]["conductor"]);
							if(typeof(conductor) !="undefined"){
								conductor = conductor.replace(/\|/gi, ", ");
							}
						}

						/** if no track level artists, just display the display artist with tooltip if necessary */
						if (tmp_track_artists == ""){
							if (this.customParams.album_artist.length > 27) {
								var album_artist_shortened = this.customParams.album_artist.substr(0,26) + '...';
								album_artist_shortened 	   = album_artist_shortened.replace(/\|/g , ', ' );
								/** classical tooltips */
								if (this.customParams.genre_id == "12"){
									var tooltipValues = this.buildClassicalToolTips(performer, composer, orchestra, ensemble, conductor);
									$("tr#"+arr[i]+" td.an").html("<div class='track_row_tool_tip_artist'>" + tooltipValues['visible_value'] + "</div>");
									$("tr#"+arr[i]+" td.an .track_row_tool_tip_artist").attr('title', tooltipValues['tooltip']);
								} else {
									$("tr#"+arr[i]+" td.an").html("<div class='track_row_tool_tip_artist'>" + album_artist_shortened + "</div>");
									$("tr#"+arr[i]+" td.an .track_row_tool_tip_artist").attr('title', original_artist_name);
								}

							} else {

								/** classical tooltips */
								if (this.customParams.genre_id == "12"){
									var tooltipValues = this.buildClassicalToolTips(performer, composer, orchestra, ensemble, conductor);
									if(tooltipValues['visible_value'] != ""){
										$("tr#"+arr[i]+" td.an").html("<div class='track_row_tool_tip_artist'>" + tooltipValues['visible_value'] + "</div>");
									}else{
										$("tr#"+arr[i]+" td.an").html("--");
									}
									$("tr#"+arr[i]+" td.an .track_row_tool_tip_artist").attr('title', tooltipValues['tooltip']);
								} else {
									$("tr#"+arr[i]+" td.an").html("--");
								}
							}
						} else {
							if (tmp_track_artists.length > 40) {
								if (tmp_track_artists != "Various Artists"){
									artist_tool_tip_message = tmp_track_artists.replace(/\|/gi, "<br/>");
									tmp_track_artists = tmp_track_artists.replace(/\|/gi, ", ");
									tmp_track_artists = tmp_track_artists.substr(0,39) + '...';
									$("tr#"+arr[i]+" td.an").html("<div class='track_row_tool_tip_artist'>" +  tmp_track_artists + "</div>");
									$("tr#"+arr[i]+" td.an .track_row_tool_tip_artist").attr('title', artist_tool_tip_message);
								} else {
									$("tr#"+arr[i]+" td.an").html("");
								}
							} else {
									tmp_track_artists = tmp_track_artists.replace(/\|/gi, ", ");
									$("tr#"+arr[i]+" td.an").html(tmp_track_artists);
							}
						}

						/** process explicit lyrics for display */
						var explicit = (new_tracks[arr[i]]["explicit"]) ? new_tracks[arr[i]]["explicit"] : "N";
						$("tr#"+arr[i]+" td.expl").html((explicit=="Y" ? "<img src='/images/explicit.png'></img>" : (explicit=="C" ? "<img src='/images/clean.png'></img>" : "--")));
						$("tr#"+arr[i]+" td.isrc").html(new_tracks[arr[i]]["ISRC"] ? new_tracks[arr[i]]["ISRC"] : "<?=$this->escapejs($this->translate->_("Auto-assigned"))?>");

                        var writers = (new_tracks[arr[i]]["writers"]) ? trimCommas(new_tracks[arr[i]]["writers"]) : "";
						var writers_display = writers.replace(/\|/gi, "<br/>");
                        writers_display = escapeDoubleQuote(writers_display);

                        var publishers = (new_tracks[arr[i]]["publishers"]) ? trimCommas(new_tracks[arr[i]]["publishers"]) : "";
						var publishers_display = publishers.replace(/\|/gi, "<br/>");
                        publishers_display = escapeDoubleQuote(publishers_display);

						var pline = new_tracks[arr[i]]["pline"];

						var previewstarttime = new_tracks[arr[i]]["previewstarttime"];

						var itunes_pricing_tier_id = (new_tracks[arr[i]]["ItunesPricingTierId"]) ? new_tracks[arr[i]]["ItunesPricingTierId"] : "";
						var amazon_pricing_tier_id = (new_tracks[arr[i]]["AmazonPricingTierId"]) ? new_tracks[arr[i]]["AmazonPricingTierId"] : "";

						var version = ($.trim(new_tracks[arr[i]]["versionName"])) ? new_tracks[arr[i]]["versionName"] : "";
						var vendortrackidentifier = (new_tracks[arr[i]]["VendorTrackIdentifier"]) ? new_tracks[arr[i]]["VendorTrackIdentifier"] : "";
						var writers_icon = (writers ? "writers-on" : "writers-off");
						var publishers_icon = (publishers ? "publishers-on" : "publishers-off");
						var pline_icon = (pline ? "pline-on" : "pline-off");

						/** if values, apply official tooltip */
						var writers_tooltip = (writers ? ' title="'+ writers_display +'" class="picture_tooltip"' : '');
						var publishers_tooltip = (publishers ? ' title="'+ publishers_display +'" class="picture_tooltip"' : '');
						var pline_tooltip = (pline ? ' title="'+ pline +'" class="picture_tooltip"' : '');

						/** if no values yet, apply titles only image hover */
						if (writers_tooltip == ""){
						    writers_tooltip = " title='<?=$this->escapejs($this->translate('Songwriter(s)'))?>'";
						}
						if (publishers_tooltip == ""){
							publishers_tooltip = " title='<?=$this->escapejs($this->translate->_("Publishers"))?>'";
						}
						if (pline_tooltip == ""){
							pline_tooltip = " title='<?=$this->escapejs($this->translate->_("Pline"))?>'";
						}

						$("tr#"+arr[i]+" td.of").html('<img height="26" width="22" '+ pline_tooltip +' src="/images/icons/'+pline_icon+'.png"/><img height="26" width="22" ' + writers_tooltip +' src="/images/icons/'+writers_icon+'.png"/><img height="26" width="22" ' + publishers_tooltip +' src="/images/icons/'+publishers_icon+'.png"/>');

					}else{
						index = 0;
					}
					index++;
					total_number_of_tracks++;
				}

				/** re-apply tooltips this is only for label-processing mode */
				this.applyTrackToolTips();

				for (var key in new_tracks) {
					if (isDefined(new_tracks[key]["trackName"])) {
						tmpAllTracks[key] = new_tracks[key];
					}
				}

				/** if no tracks, then fade back out the trash can */
				if (total_number_of_tracks < 1){
					$('#'+this.trashBin).fadeOut('slow');
					$("#"+this.noTracksAdded).fadeIn('slow');
					$('#'+this.addVolumeDividerLink).removeAttr("href");
				}
   		}
   		this.populateTracksContainer = function(){
   				var tmpAllTracks = [];
	    		$.extend(true, tmpAllTracks, this.allTracks);
				var original_artist_name = (this.customParams.album_artist).replace(/\|/g , ', ' );
				for(i in tmpAllTracks){
					$("tr#"+i+" td.num div.roundedCornerBG").html(tmpAllTracks[i]["trackNumber"]);

					/** process track names for display */
					var track_name_tool_tip_message = "";
					track_name = tmpAllTracks[i]["trackName"];
					if (track_name == ""){
						track_name = "<div class='no_track_name'><?=$this->escapejs($this->translate->_("Click to Edit Track Name"))?></div>";
					} else {
						if (track_name.length > 25) {
							track_name_tool_tip_message = track_name;
							track_name = track_name.substr(0,24) + '...';
						}
						if(tmpAllTracks[i]["versionName"]!=undefined && tmpAllTracks[i]["versionName"]!="" && $.trim(tmpAllTracks[i]["versionName"]) != ""){
							track_name = $.trim(track_name +" ("+tmpAllTracks[i]["versionName"]+")");
						}
					}
					if (track_name_tool_tip_message == ""){
						$("tr#"+i+" td.tn").html(track_name);
					} else {
						$("tr#"+i+" td.tn").html("<div class='track_name_tool_tip'>" + track_name + "</div>");
						$("tr#"+i+" td.tn .track_name_tool_tip").attr('title', track_name_tool_tip_message);
					}

					/** process artist names for display */
                    var tmp_track_artists = trimCommas(tmpAllTracks[i]["trackLevelArtists"]);
					var artist_tool_tip_message = "";

					/** classical tooltips values */
					if (this.customParams.genre_id == "12") {

                        var performer = trimCommas(tmpAllTracks[i]["performer"]);
						if(typeof(performer) !="undefined"){
								performer = performer.replace(/\|/gi, ", ");
						}

                        var composer = trimCommas(tmpAllTracks[i]["composer"]);
						composer = composer.replace(/\|/gi, ", ");

                        var orchestra = trimCommas(tmpAllTracks[i]["orchestra"]);
						orchestra = orchestra.replace(/\|/gi, ", ");

                        var ensemble = trimCommas(tmpAllTracks[i]["ensemble"]);
						ensemble = ensemble.replace(/\|/gi, ", ");

                        var conductor = trimCommas(tmpAllTracks[i]["conductor"]);
						conductor = conductor.replace(/\|/gi, ", ");
					}

					/** if no track level artists, just display the display artist with tooltip if necessary */
					if (tmp_track_artists == "" || tmp_track_artists == undefined){
						if (this.customParams.album_artist.length > 27) {
							var album_artist_shortened = this.customParams.album_artist.substr(0,26) + '...';
							album_artist_shortened 	   = album_artist_shortened.replace(/\|/g , ', ' );

							/** classical tooltips */
							if (this.customParams.genre_id == "12"){
								var tooltipValues = this.buildClassicalToolTips(performer, composer, orchestra, ensemble, conductor);
								$("tr#"+i+" td.an").html("<div class='track_row_tool_tip_artist'>" + tooltipValues['visible_value'] + "</div>");
								$("tr#"+i+" td.an .track_row_tool_tip_artist").attr('title', tooltipValues['tooltip']);
							} else {
								if (original_artist_name != "Various Artists"){
									$("tr#"+i+" td.an").html("<div class='track_row_tool_tip_artist'>" + album_artist_shortened + "</div>");
									$("tr#"+i+" td.an .track_row_tool_tip_artist").attr('title', original_artist_name);
								} else {
									$("tr#"+i+" td.an").html("");
								}
							}

						} else {

							/** classical tooltips */
							if (this.customParams.genre_id == "12"){
								var tooltipValues = this.buildClassicalToolTips(performer, composer, orchestra, ensemble, conductor);
								if(tooltipValues['visible_value'] != ""){
									$("tr#"+i+" td.an").html("<div class='track_row_tool_tip_artist'>" + tooltipValues['visible_value'] + "</div>");
								}else{
									$("tr#"+i+" td.an").html("--");
								}
								$("tr#"+i+" td.an .track_row_tool_tip_artist").attr('title', tooltipValues['tooltip']);
							} else {
								$("tr#"+i+" td.an").html("--");
							}
						}
					} else {
						if (tmp_track_artists.length > 40) {
							if (tmp_track_artists != "Various Artists"){
								artist_tool_tip_message = tmp_track_artists.replace(/\|/gi, "<br/>");
								tmp_track_artists = tmp_track_artists.replace(/\|/gi, ", ");
								tmp_track_artists = tmp_track_artists.substr(0,39) + '...';
								$("tr#"+i+" td.an").html("<div class='track_row_tool_tip_artist'>" +  tmp_track_artists + "</div>");
								$("tr#"+i+" td.an .track_row_tool_tip_artist").attr('title', artist_tool_tip_message);
							} else {
								$("tr#"+i+" td.an").html("");
							}
						} else {
							if (tmp_track_artists != "Various Artists"){
								tmp_track_artists = tmp_track_artists.replace(/\|/gi, ", ");
								$("tr#"+i+" td.an").html(tmp_track_artists);
							} else {
								$("tr#"+i+" td.an").html("");
							}
						}
					}

					/** process explicit lyrics for display */
					var explicit = tmpAllTracks[i]["explicit"];
					$("tr#"+i+" td.expl").html((explicit=="Y" ? "<img src='/images/explicit.png'></img>" : (explicit=="C" ? "<img src='/images/clean.png'></img>" : "--")));
					$("tr#"+i+" td.isrc").html(tmpAllTracks[i]["ISRC"]?tmpAllTracks[i]["ISRC"]:"<?=$this->escapejs($this->translate->_("Auto-assigned"))?>");

                    var writers = trimCommas(tmpAllTracks[i]["writers"]);
					var writers_display = (writers!=undefined) ? writers.replace(/\|/gi, "<br/>") : "";
                    writers_display = escapeDoubleQuote(writers_display);

                    var publishers = trimCommas(tmpAllTracks[i]["publishers"]);
					var publishers_display = (publishers!=undefined) ? publishers.replace(/\|/gi, "<br/>") : "";
                    publishers_display = escapeDoubleQuote(publishers_display);

					var pline = tmpAllTracks[i]["pline"];
					var offertype = tmpAllTracks[i]["offertype"];
					var previewstarttime = tmpAllTracks[i]["previewstarttime"];
					var writers_icon = (writers ? "writers-on" : "writers-off");
					var publishers_icon = (publishers ? "publishers-on" : "publishers-off");
					var pline_icon = (pline ? "pline-on" : "pline-off");

					/** if values, apply official tooltip */
					var writers_tooltip = (writers ? ' title="'+ writers_display +'" class="picture_tooltip"' : '');
					var publishers_tooltip = (publishers ? ' title="'+ publishers_display +'" class="picture_tooltip"' : '');
					var pline_tooltip = (pline ? ' title="'+ pline +'" class="picture_tooltip"' : '');

					/** if no values yet, apply titles only image hover */
					if (writers_tooltip == ""){
						writers_tooltip = " title='Songwriter(s)'";
					}
					if (publishers_tooltip == ""){
						publishers_tooltip = " title='Publishers'";
					}
					if (pline_tooltip == ""){
						pline_tooltip = " title='Pline'";
					}

					$("tr#"+i+" td.of").html('<img height="26" width="22" '+ pline_tooltip +' src="/images/icons/'+pline_icon+'.png"/><img height="26" width="22" ' + writers_tooltip +' src="/images/icons/'+writers_icon+'.png"/><img height="26" width="22" ' + publishers_tooltip +' src="/images/icons/'+publishers_icon+'.png"/>');

				}

				/** apply tooltips */
				this.applyTrackToolTips();
		}
   		this.prepopulateClassical = function(list, classical_field){
			/** if list values populate token input */
			var list_array = Array();
			if (list.length > 0){
				list_array = this.buildTokenInputPrepopulate(list);
			} else if(classical_field.length >0 ){
				list_array = this.buildTokenInputPrepopulate(classical_field);
			}
			return list_array;
		}
		this.buildTokenInputPrepopulate = function(token_values){
			var token_entries_array = new Array();
            var token_values = trimCommas(token_values);
			var token_entries_array_build = token_values.split("|");

			for (var entry in token_entries_array_build){
				if (token_entries_array_build[entry] != ""){
					token_entries_array[token_entries_array_build[entry]] = token_entries_array_build[entry];
				}
			}
			return token_entries_array;
		}
   		this.buildClassicalToolTips = function(performer, composer, orchestra, ensemble, conductor) {
				/** tooltip value */
				var classical_tool_tip_message = "";
				classical_tool_tip_message = classical_tool_tip_message + "<br/><strong><?=$this->escapejs($this->translate->_("Performer(s)"))?>:</strong> " + performer;
				classical_tool_tip_message = classical_tool_tip_message + "<br/><strong><?=$this->escapejs($this->translate->_("Composer(s)"))?>:</strong> " + composer;
				classical_tool_tip_message = classical_tool_tip_message + "<br/><strong><?=$this->escapejs($this->translate->_("Orchestra(s)"))?>:</strong> " + orchestra;
				classical_tool_tip_message = classical_tool_tip_message + "<br/><strong><?=$this->escapejs($this->translate->_("Ensemble(s)"))?>:</strong> " + ensemble;
				classical_tool_tip_message = classical_tool_tip_message + "<br/><strong><?=$this->escapejs($this->translate->_("Conductor(s)"))?>:</strong> " + conductor;

				/** artist field value */
				var artist_field_value_list = Array();
				var artist_value_count = 0;

				if (performer != ""){
					artist_value_count ++;
					artist_field_value_list[artist_value_count] = performer;
				}
				if (composer != ""){
					artist_value_count ++;
					artist_field_value_list[artist_value_count] = composer;
				}
				if (orchestra != ""){
					artist_value_count ++;
					artist_field_value_list[artist_value_count] = orchestra;
				}
				if (ensemble != ""){
					artist_value_count ++;
					artist_field_value_list[artist_value_count] = ensemble;
				}
				if (conductor != ""){
					artist_value_count ++;
					artist_field_value_list[artist_value_count] = conductor;
				}

				var artist_field_value = artist_field_value_list.join(', ');
				artist_field_value = artist_field_value.replace(/^\, /, "");

				if (artist_field_value.length > 27) {
					if(typeof(artist_field_value) !="undefined") {
						artist_field_value = artist_field_value.substr(0,26) + '...';
						artist_field_value = artist_field_value.replace(/, ...$/, "...");
					}
				}

			    var returnToolTip = new Array();
			    returnToolTip['tooltip'] = classical_tool_tip_message;
			    returnToolTip['visible_value'] = artist_field_value;
			    return returnToolTip;
		}
   		this.applyTrackToolTips = function(){
                var tooltip_start_html = "<div id='tooltip' class='tooltip top-arrow-sm notDisplay'>";
                var tooltip_end_html = "</div>";
				/** apply tooltips to images */
				$(".picture_tooltip").each(function(i,s){
					var return_value = tooltip_start_html + this.title + tooltip_end_html + "";
					$(this).after(return_value);

					$(this).tooltip({
						track: true,
						delay: 250,
						showURL: false,
						fixPNG: true,
						fade: 150,
						});
				});
				/** apply trackname tooltips */
				$(".track_name_tool_tip").each(function(i,s){
					var return_value = tooltip_start_html + this.title + tooltip_end_html + "";
					$(this).after(return_value);

					$(this).tooltip({
						track: true,
						delay: 250,
						showURL: false,
						fixPNG: true,
						fade: 150,
					    bodyHandler: function() {
					        return title;
					    }
						});
				});
				/** apply tooltips to row artist tooltips */
				$(".track_row_tool_tip_artist").each(function(i,s){
					var return_value = tooltip_start_html + this.title + tooltip_end_html + "";
					$(this).after(return_value);
					$(this).tooltip({
						track: true,
						delay: 250,
						showURL: false,
						fixPNG: true,
						fade: 150,
					    bodyHandler: function() {
					        return title;
					    }
						});
				});
		}
		this.backupTracksArray = function(){
			var tmpAllTracks = [];
	    	$.extend(true, tmpAllTracks, this.allTracks);
			this.tracks_cache = [];
			for (key in tmpAllTracks){
				this.tracks_cache[key] = {};
				for (var field in tmpAllTracks[key]) {
					this.tracks_cache[key][field] = tmpAllTracks[key][field];
				}
			}
		}
		this.setSelectedTrack = function(uid){
			var tmpAllTracks = [];
	    	$.extend(true, tmpAllTracks, this.allTracks);
			for(i in tmpAllTracks){
				tmpAllTracks[i]["selectedTrack"] = 0;
			}
			tmpAllTracks[uid]["selectedTrack"] = 1;
			this.allTracks = $.extend(true, [], tmpAllTracks);
		}
		this.getSelectedTrack = function(){
			var tmpAllTracks = [];
	    	$.extend(true, tmpAllTracks, this.allTracks);
			var uid = "";
			for(i in tmpAllTracks){
				if(tmpAllTracks[i]["selectedTrack"] === 1)
					uid = i;
			}
			return uid;
		}
		this.grabTrackInfo = function(track_unique_id, output_arr){
				$("#trackartistsplaceholder").html("");
				$("#edittrackmodal_trackLevelArtists_display").val("");
				$("#edittrackmodal_trackLevelArtists").val("");

				/** return info in the following variables to prepopulate the token (facebook) inputs */
				var return_info = [];

				var featuring_artist_list ="";
				var featuring_artist_list_array = [];

				var remixer_artist_list ="";
				var remixer_artist_list_array = [];

				var writers_list ="";
				var writers_list_array = [];

				var publishers_list ="";
				var publishers_list_array = [];

				var track_artist_list ="";
				var track_artist_list_array = [];

				var performer_list ="";
				var performer_list_array = [];

				var composer_list ="";
				var composer_list_array = [];

				var orchestra_list ="";
				var orchestra_list_array = [];

				var ensemble_list ="";
				var ensemble_list_array = [];

				var conductor_list ="";
				var conductor_list_array = [];

				var tm = this;
				output_arr.each(function(i,s){
					if(s.id){
						var tmp_key = s.id;
						tmp_key = tmp_key.split("_");
						var element_val = "";

						if(tm.allTracks[track_unique_id][tmp_key[1]] !== undefined){
							element_val = tm.allTracks[track_unique_id][tmp_key[1]];

							switch (tmp_key[1]) {

								case "trackLevelArtists":
									track_artist_list = element_val;
									break;

								case "ISRC":
									if(element_val == null || element_val == "" || !element_val){
										$("#edittrackmodal_ISRC").hide();
										$("#edittrackmodal_isrc_orch").attr("checked", "checked");
										$("#isrc_applyall").show();
										$("#isrc_example").hide();
									}else{
										$("#edittrackmodal_ISRC").show();
										$("#edittrackmodal_isrc_own").attr("checked", "checked");
										$("#"+s.id).val(element_val);
										$("#isrc_applyall").hide();
										$("#isrc_example").show();
									}
									break;

								case "trackLevelFeaturingArtists":
									 featuring_artist_list =  element_val;
									 break;

								case "trackLevelRemixer":
									remixer_artist_list = element_val;
									break;

								case "writers":
									writers_list = element_val;
									break;

								case "publishers":
									publishers_list = element_val;
									break;

								case "performer":
									performer_list = element_val;
									break;

								case "composer":
									composer_list = element_val;
									break;

								case "orchestra":
									orchestra_list = element_val;
									break;

								case "ensemble":
									ensemble_list = element_val;
									break;

								case "conductor":
									conductor_list = element_val;
									break;
								case "offertype":
									if(element_val =="album_download_only" || element_val=="Y"){
										$("#edittrackmodal_offertype").attr("checked", "checked");
									}else{
										$('#edittrackmodal_offertype').removeAttr('checked');
									}
									break;
								case 'USPublishingObligation':
									if (isThirdPartyPublishingEnabled && element_val != null)
										$('#' + s.id).val(element_val);
								        break;
								default:
									$("#"+s.id).val(element_val);
									break;
							}
						}
					}
					$("#edittrackmodal_explicit_"+tm.allTracks[track_unique_id]["explicit"]).attr("checked", "checked");
                                        //@todo: Remove else condition when third_party_publishing feature will teardown.
                                        if (isThirdPartyPublishingEnabled) {
                                            if (tm.allTracks[track_unique_id]['third_party_publisher'] != '' && tm.allTracks[track_unique_id]['third_party_publisher'] != null) {
                                                $('.edittrackmodal_third_party_publisher_' + tm.allTracks[track_unique_id]['third_party_publisher']).attr('checked', 'checked');
                                            } else {
                                                $('input:radio[name=edittrackmodal_third_party_publisher]').attr('checked', false);
                                            }
                                        } else {
                                            $('.edittrackmodal_third_party_publisher_' + tm.allTracks[track_unique_id]['third_party_publisher']).attr('checked', 'checked');
                                        }
				});

				/** if fearuring artist populate token input - commented prepopulate code **/
				//featuring_artist_list_array = this.prepopulateClassical(featuring_artist_list, 'featuring_artist_display');
				/** if remixer artist populate token input **/
				//remixer_artist_list_array = this.prepopulateClassical(remixer_artist_list, 'remixer_artist_display');

				if (featuring_artist_list.length > 0){
					featuring_artist_list_array = this.buildTokenInputPrepopulate(featuring_artist_list);
				}

				/** if remixer artist populate token input **/
				if (remixer_artist_list.length > 0){
					remixer_artist_list_array = this.buildTokenInputPrepopulate(remixer_artist_list);
				}
				/** if writers populate token input */
				if (writers_list.length > 0){
					writers_list_array = this.buildTokenInputPrepopulate(writers_list);
				}

				/** if publishers populate token input */
				if (publishers_list.length > 0){
					publishers_list_array = this.buildTokenInputPrepopulate(publishers_list);
				}

				/** prepopulate performers token input values */
				performer_list_array = this.prepopulateClassical(performer_list, '');

				/** prepopulate composers token input values */
				composer_list_array = this.prepopulateClassical(composer_list, '');

				/** prepopulate orchestras token input values */
				orchestra_list_array = this.prepopulateClassical(orchestra_list, '');

				/** prepopulate ensembles token input values */
				ensemble_list_array = this.prepopulateClassical(ensemble_list, '');

				/** prepopulate conductors token input values */
				conductor_list_array = this.prepopulateClassical(conductor_list, '');

				/** if track artists populate token input, only prepopulate track artists in edit track modal if it's not classical */
				if (this.customParams.genre_id != '12'){
					if (track_artist_list.length > 0){
						track_artist_list_array = this.buildTokenInputPrepopulate(track_artist_list);
					} else {
						track_artist_list_array = Array();
					}
				} else {
					track_artist_list_array = Array();
				}

				/** build return info for token inputs in edit track modal */
				return_info['writers'] = writers_list_array;
				return_info['publishers'] = publishers_list_array;
				return_info['track_artist'] = track_artist_list_array;
				return_info['featuring_artist'] = featuring_artist_list_array;
				return_info['remixer_artist'] = remixer_artist_list_array;
				return_info['performer'] = performer_list_array;
				return_info['composer'] = composer_list_array;
				return_info['orchestra'] = orchestra_list_array;
				return_info['ensemble'] = ensemble_list_array;
				return_info['conductor'] = conductor_list_array;

				return return_info;
		}
   		this.generateSmallPlayer = function(uid, div_obj, path, duration){
   			var tmpAllTracks = [];
	    	$.extend(true, tmpAllTracks, this.allTracks);
			var totalTime = this.toTime(duration);
			var end_begin_from;

			fileName = tmpAllTracks[uid]['original_file_name'];
			if (fileName){
				fileName = this.generateTrackNameForDisplay(fileName);
			} else {
				fileName = "&nbsp;";
			}
			var newPlayer = '<div id="smallPlayer'+uid+'"><div class="audioUploadStatus"><div id="totaltime'+uid+'" class="time">'+totalTime+'</div><a class="audio" onclick="addClip(\''+uid+'\',\''+path+'\',\''+duration+'\');"> </a><div class="track"></div><div id="controlBar'+uid+'" class="controlsClass"></div></div><p class=\"original_file_name\">' + fileName + '</p></div>';
			$(div_obj).html(newPlayer);
			this.setControls(uid);
			tmpAllTracks[uid]['path'] = path
			tmpAllTracks[uid]['duration'] = duration;
			var inMillisec = duration*1000;
			if(inMillisec > 75000){
			tmpAllTracks[uid]['previewstarttime'] = "00:00:45";
			}else{
			tmpAllTracks[uid]['previewstarttime'] = "00:00:00";

			}
			$("#controlBar"+uid).hide();
			this.allTracks = $.extend(true, [], tmpAllTracks);
		}
		this.generateTrackNameForDisplay = function(track_name){
			if(track_name == "" || track_name == undefined || track_name == null){
				return "";
			}
			var end_begin_from;
			var track_name_for_display;
            if (track_name.length > 25) {
                end_begin_from = track_name.length - 12;
                track_name_for_display = track_name.substr(0,12) + '...' + track_name.substr(end_begin_from,track_name.length);
            } else {
                track_name_for_display = track_name;
            }
			track_name_for_display = track_name_for_display;
			return track_name_for_display;
		}
		this.toTime = function(sec) {
			var h = Math.floor(sec / 3600);
			var min = Math.floor(sec / 60);
			sec = sec - (min * 60);
			if (h >= 1) {
				min -= h * 60;
				return pad(h) + ":" + pad(min) + ":" + pad(sec);
			}
			return pad(min) + ":" + pad(sec);
		}
		this.setControls = function(uid){
			$f().controls("controlBar"+uid);
		}
		this.setAudioErrorLabel = function(track_array_unique_key, error_msg){
				if(this.allTracks[track_array_unique_key]["trackType"] == "music"){
					if(error_msg == null || error_msg == undefined){
						error_msg = "";
					}
					if(error_msg != "" && error_msg != null && error_msg != undefined){
				    	this.allTracks[track_array_unique_key]["audio_upload_error"] = error_msg;
				    	this.allTracks[track_array_unique_key]["look_for_mp3"] = "N";
				    	this.allTracks[track_array_unique_key]["inprogress"] = 0;
					}
					target_location = "#mediacontainer_"+track_array_unique_key;
					if(tm.customParams.release_status == "label_processing" ||  tm.customParams.release_status == "orchard_processing" || (tm.customParams.submitErrorCorrection == true && tm.customParams.isEditable == true)) {
						$(target_location).html('\
							<a href="javascript:modalWindoweditTrackModal({\'uid\' : \''+track_array_unique_key+'\',\'release_id\' : \''+release_id+'\'})" class="uploadErrorLink">\
							<div class="warningBox">\
							<span class="missing"> <?=$this->escapejs($this->translate->_("Audio Upload Error"))?></span>\
							<div id="warningBox_container_'+track_array_unique_key+'">'+this.allTracks[track_array_unique_key]["audio_upload_error"]+'</div>\
							</div>\
							</a>\
						');
					}
					else {
						$(target_location).html('\
							<div class="warningBox">\
							<span class="missing"> <?=$this->escapejs($this->translate->_("Audio Upload Error"))?></span>\
							<div id="warningBox_container_'+track_array_unique_key+'">'+this.allTracks[track_array_unique_key]["audio_upload_error"]+'</div>\
							</div>\
						');
					}
					if(this.getSelectedTrack() == track_array_unique_key && $("#modal_overlay:contains('<?=$this->escapejs($this->translate->_("Edit Track Details"))?>')").length > 0 && modal_overlay.isOpened()){
						$('#mediacontainer_'+track_array_unique_key).removeClass("audioUploadStatus");
						if($('#mediacontainer_'+track_array_unique_key+' > a').html() != null && $('#mediacontainer_'+track_array_unique_key+' > a').html() != undefined && $('#mediacontainer_'+track_array_unique_key+' > a').html() !=  ""){
							var error_html = $('#mediacontainer_'+track_array_unique_key+' > a').html();
							$('#mediacontainer_'+track_array_unique_key).html(error_html);
						}
					}else{
						$('#warningBox_container_'+track_array_unique_key).hide();
					}
				} else if (this.allTracks[track_array_unique_key]["trackType"] == "video"){
					target_location = "#mediacontainer_"+track_array_unique_key;
					$(target_location).html('\
						<a href="#" class="uploadErrorLink">\
				    	<div class="videoBox">\
				    	<span class="video"> <?=$this->escapejs($this->translate->_("Music Video"))?></span>\
				    	<div id="warningBox_container_'+track_array_unique_key+'"></div>\
				    	</div>\
				    	</a>\
				    ');
				}
		}

		this.getTrackIndex = function(uid) {
			var tmpAllTracks = [];
	    	$.extend(true, tmpAllTracks, this.allTracks);
			var ord = 0;
			for (var key in tmpAllTracks) {
				if (key == uid) {
					break;
				}
				ord++;
			}
			return ord;
		}
		this.sortTracksArr = function(arr, sort_by){
				var tmpAllTracks = [];
	    		$.extend(true, tmpAllTracks, arr);
				var fields_to_be_sorted = [];
				var output_arr = [];
				var d = new Date();
				var key = "_"+d.getTime()+"_";
				for(var i in tmpAllTracks){
					var sort_by_str = "";
					for(var k in sort_by){
						sort_by_str += tmpAllTracks[i][sort_by[k]];
					}
					fields_to_be_sorted.push(sort_by_str+key+i);
				}
				fields_to_be_sorted.sort(natcompare);

				for(var j in fields_to_be_sorted){
					var search_index = fields_to_be_sorted[j].search(key);
					var uid = fields_to_be_sorted[j].substring(search_index,fields_to_be_sorted[j].length).replace(key,"");
					output_arr[uid] = tmpAllTracks[uid];
				}
				return output_arr;
		}
		this.sortTracksArrByCdTrackNo = function(arr){
				var tmpAllTracks = [];
	    		$.extend(true, tmpAllTracks, arr);
				var fields_to_be_sorted = [];
				var output_arr = [];
				for(var i in tmpAllTracks){
					var tmp_sort_array = [];
					tmp_sort_array["cd"] = tmpAllTracks[i]["cd"];
					tmp_sort_array["trackNumber"] = tmpAllTracks[i]["trackNumber"];
					tmp_sort_array["key"] = i;

					fields_to_be_sorted.push(tmp_sort_array);
				}
				fields_to_be_sorted.sort(function(a, b) {
					return parseInt(a["cd"]) > parseInt(b["cd"])
						|| (parseInt(a["cd"]) == parseInt(b["cd"]) && parseInt(a["trackNumber"]) > parseInt(b["trackNumber"]));
				});

				for(var j in fields_to_be_sorted){
					var search_key = fields_to_be_sorted[j]["key"];
					output_arr[search_key] = tmpAllTracks[search_key];
				}
				return output_arr;
		}
		this.updateTracksDB = function(){
				var tmpAllTracks = [];
	    		$.extend(true, tmpAllTracks, this.allTracks);
	    		var updateTrackFields = ["unique_track_id", "cd", "trackNumber"];
				var params = {};
				for (key in tmpAllTracks) {
					for (field in tmpAllTracks[key]) {
						if($.inArray(field, updateTrackFields) >= 0){
							if(params[key] == 'undefined' || params[key] == null){
								params[key] = {};
							}
							params[key][field]= (tmpAllTracks[key][field]&&tmpAllTracks[key][field]!='null'?tmpAllTracks[key][field]:'');
						}
					}
				}
				track_data = {};
				track_data.param = encodeURIComponent(JSON.stringify({jsonData:params}));
				var TM = this;

				$.post('/releasebuilder/updatetracks?release_id='+this.customParams.release_id, track_data, function(data) {
					display_track_message("<?=$this->escapejs($this->translate->_('Saving...'))?>");
					display_user_message("<?=$this->escapejs($this->translate->_('Saving...'))?>");
					$(document).trigger('TRACK_CHANGED');
					TM.toggleNoTrackFound();

					if ($('#dialog-confirm').length){
						$("#dialog-confirm center p").text('');
						$("#dialog-confirm #loadingbar_id").hide();
						if(volumeDividerDeleted){
							$("#dialog-confirm center p").text(' Volume Deleted!');
						}else{
							$("#dialog-confirm center p").text('Track Deleted!');
						}
						$("#dialog-confirm #success_sign").show();
						$('.close.btn').show();
						//close the dialog after 2 sec.
						if(!showLoadingBar){
							setTimeout(function(){modal_overlaydeletetrackmodal.close();}, 2000);
						}
					}
				});
		}
		this.getReuploadButtons = function(array_unique_id){

			if(this.allTracks[array_unique_id]["inprogress"]==0 && this.allTracks[array_unique_id]["look_for_mp3"]=="N"){
				$("#editTrackReUpload_li").html("<label>&nbsp</label><div>Loading...</div>");
				var unique_track_ids = new Array();
				var html = "";
				var i = array_unique_id;
                html = ('<div id="editTrackReUpload_li_div_db'+this.allTracks[i]["unique_track_id"]+'" class="indent">\
                                <input size="1" style="position:absolute;z-index:1011;cursor:hand;opacity:0;-moz-opacity:0;filter:alpha(opacity: 0);" type="file" name="Filedata'+this.allTracks[i]["unique_track_id"]+'" id="Filedata'+this.allTracks[i]["unique_track_id"]+'" tabindex="19" onchange="if(checkAudioById(\'Filedata'+this.allTracks[i]["unique_track_id"]+'\')){setTrackAudio();ajaxFileUpload(\'Filedata'+this.allTracks[i]["unique_track_id"]+'\', \'#uploading_images\');}"/>\
                            <button class="btn btn-default"><span><?=$this->escapejs($this->translate->_("re-upload audio"))?></span></button>\
                        </div>');
				$("#editTrackReUpload_li").html(html);
				$("#editTrackReUpload_li").show();
			}else{
				$("#editTrackReUpload_li").hide("");
			}
		}
		this.populateTrackUniqueID = function(){
			var tm = this;
			$.post("/releasebuilder/gettracks", {release_id: release_id}, function(response){
				for(i in response){
					var tmp_obj = new Object();
					var key = response[i].id;
					var cd = response[i].cd;
					var track_id = response[i].track_id;

					for(unique_id in tm.allTracks){
						if(tm.allTracks[unique_id]["cd"] == cd && tm.allTracks[unique_id]["trackNumber"]==track_id){
							tm.allTracks[unique_id]["unique_track_id"] = key;
						}
					}
				}
			},"json");
		}
		this.getCdTrackNumberFromQueueID = function(queueID){
			var tmpAllTracks = [];
			$.extend(true, tmpAllTracks, this.allTracks);
			var cd = 0;
			var trackNumber = 0;
			for(var i in tmpAllTracks){
				if(tmpAllTracks[i]["queueID"] == queueID){
					return {cd:tmpAllTracks[i]["cd"],trackNumber:tmpAllTracks[i]["trackNumber"]};
					break;
				}
			}
			return false;
		}
		this.getMaxTrackNumberAndCd = function(arr){
			var tmpAllTracks = [];
			if(arr != undefined && arr != null && arr != null){
				$.extend(true, tmpAllTracks, arr);
			}else{
    			$.extend(true, tmpAllTracks, this.allTracks);
    		}
    		tmpAllTracks = $.extend(true, [], TM.sortTracksArrByCdTrackNo(tmpAllTracks));
    		var cd = 1;
    		var trackNumber = 0;
    		for(var i in tmpAllTracks){
    			trackNumber = tmpAllTracks[i]["trackNumber"];
    			cd = tmpAllTracks[i]["cd"];
    		}
    		return {"cd":cd,"trackNumber":trackNumber};
		}
		this.getUniqueKeyByCdTrackNumber = function(cd, trackNumber, trackArr){
			for(var unique_key in trackArr){
				if(trackArr[unique_key]["cd"] == cd && trackArr[unique_key]["trackNumber"] == trackNumber){
					return unique_key;
					break;
				}
			}
		}
		this.renderUploadify = function(placeholder, queue, multi, unique_key){
			var TM = this;
			extensionList = '*.wav;*.m4a;*.flac';
			fileDescription = 'WAV/M4A/FLAC audio';

			$("#"+placeholder).html('<input id="'+unique_key+'" height="36" width="106" type="file"/>');
			$('#'+unique_key).uploadify({
					'uploader'  : '/scripts/uploadify/uploadify.swf',
					'script'    : '/releasebuilder/uploadify',
					'scriptData': {'upc':TM.customParams.upc},
					'cancelImg' : '/scripts/uploadify/cancel.png',
					'auto'      : false,
					'folder'    : '/scripts/uploads',
					'queueID'   : queue,
					'wmode'		: 'transparent',
					'height'    : 36,
					'width'     : 110,
					'sizeLimit' : '943718400',
					'fileDesc'  : fileDescription,
					'fileExt'   : extensionList,
					'wmode' : 'opaque',
					'multi' : multi,
					onSelect	: function(event, queueID, fileObj){
						if(validateAudio(fileObj)){
							var trackNumberAndCd = TM.getMaxTrackNumberAndCd();
							var newlyUploadedTracksArrSize = parseInt(TM.getArraySize(TM.newlyUploadedTracks)) + parseInt(1);
							TM.newlyUploadedTracks["db"+queueID] = TM.constructTrackElement(trackNumberAndCd.cd, newlyUploadedTracksArrSize, fileObj.name, queueID);
						}
					},
					onSelectOnce	: function(event, data){
						if(parseInt(TM.getArraySize(TM.newlyUploadedTracks)) > 0){
							$("#"+TM.noTracksAdded).hide();
							$("#"+TM.multiuploadButton+" span").html("Uploading...");
							$("#"+TM.multiuploadButton).addClass("submitOff");

							$("#"+TM.trashBin).hide();
							var params = {};
							var trackArray = {};
							TM.newlyUploadedTracks = TM.sortTracksArrByCdTrackNo(TM.newlyUploadedTracks);
							var trackNumberAndCd = TM.getMaxTrackNumberAndCd(TM.newlyUploadedTracks);
							var mainTrackArrCdTrackNumber = TM.getMaxTrackNumberAndCd();
							TM.newlyUploadedTracks = TM.sortTracksArr(TM.newlyUploadedTracks, ["original_file_name"]);

							var counter = parseInt(mainTrackArrCdTrackNumber.trackNumber) + parseInt(1);
							for(var tmp_key in TM.newlyUploadedTracks){
								var unique_track_id = TM.newlyUploadedTracks[tmp_key]["unique_track_id"];
								TM.newlyUploadedTracks[tmp_key]["cd"] = trackNumberAndCd.cd;
								TM.newlyUploadedTracks[tmp_key]["trackNumber"] = counter;
								var queueID = tmp_key.replace("db","");
								TM.audiofilequeue.push(queueID);
								counter++;
							}

							for (key in TM.newlyUploadedTracks) {
								for (var field in TM.newlyUploadedTracks[key]) {
									params[key+'['+field+']']= (TM.newlyUploadedTracks[key][field]&&TM.newlyUploadedTracks[key][field]!='null'?TM.newlyUploadedTracks[key][field]:'');
									params[key+'[release_id]']= TM.customParams.release_id;

									if(trackArray[key] == 'undefined' || trackArray[key] == null){
										trackArray[key] = {};
									}
									trackArray[key][field] = (TM.newlyUploadedTracks[key][field]&&TM.newlyUploadedTracks[key][field]!='null'?TM.newlyUploadedTracks[key][field]:'');
									trackArray[key]['release_id'] = TM.customParams.release_id;
								}
							}
							var jsonParams = encodeURIComponent(JSON.stringify({jsonData:trackArray}));
							$.ajax({
								 type: 'POST',
								 url: '/releasebuilder/savetracks',
								 data: 'param=' + jsonParams,
								 success: function( XMLHttpResponse, textStatus, XMLHttpRequest ){
								    var tmp = eval("("+XMLHttpResponse+")");
								    var trackNumberAndCd = TM.getMaxTrackNumberAndCd();
								    var tracks_for_import = new Array();
								    for(var i in tmp){
								    	var queueID = i.replace("db","");
								    	var track_array_unique_key = "db"+tmp[i]["track_id"];
							    		TM.allTracks[track_array_unique_key] = TM.constructTrackElement(tmp[i]["cd"], tmp[i]["trackNumber"], tmp[i]["original_file_name"], tmp[i]["track_id"], queueID, tmp[i]["trackType"],tmp[i]["itunesDefault"],tmp[i]["amazonDefault"]);
							    		TM.appendTrackHTML("db"+tmp[i]["track_id"]);
							    		var encoding_name_display = TM.generateTrackNameForDisplay(tmp[i]["original_file_name"]);
	    								$("#mediacontainer_db"+tmp[i]["track_id"]).html('<div class="audioUploadProgress">\
	    									<button class="cancel" onclick="if(confirm(\'<?=$this->escapejs($this->translate->_('Are you sure?'))?>\')){ \
	    									tm.removeTrack(\'db'+tmp[i]['track_id']+'\',\''+queueID+'\'); }"></button>\
	    									<div class="progressBarBG"><span id="' + track_array_unique_key + 'ProgressBar" class="progressBar"></span></div>\
	    									<span class="percentage"></span>\
	    									</div>\
	    									<br/>\
	    									<p class="original_file_name_uploading">' + encoding_name_display + '</p>');
							    		var tmp_track_code = TM.customParams.upc+"_"+tmp[i]["track_id"];
							    		tracks_for_import.push("track_codes["+tmp_track_code+"]="+tmp_track_code);
								    }
								   	for(var i in TM.allTracks){
								   		if(isNaN(TM.allTracks[i]["unique_track_id"])){
								   			delete TM.allTracks[i];
								   		}
								   	}
								   	TM.track_array_with_old_order = $.extend(true,[],TM.allTracks);
								    $.ajax({
	    							        type: "POST",
	    							        url: "/releasebuilder/addaudioimportassetbatch",
	    							        data: "format=json&"+tracks_for_import.join("&")+"&correction_flag="+tm.customParams.isInContent+"&release_status="+tm.customParams.release_status,
	    							        success: function(XMLHttpRequest, textStatus, errorThrown){
	    							        	TM.uploadNextFile(unique_key);
	    							        	var track_import_asset_id_map_arr = XMLHttpRequest.track_import_asset_id_map;
	    							        	if(track_import_asset_id_map_arr){
													for(var unique_track_id in track_import_asset_id_map_arr){
														TM.allTracks["db"+unique_track_id]["import_asset_id"] = track_import_asset_id_map_arr[unique_track_id];
													}
	        							        }
	        							        TM.rebuildTrackList();
	    										TM.partitionTracks();
	    										$("#"+TM.trashBin).show();
	    							        },
	    							        error: function(XMLHttpRequest, textStatus, errorThrown) {
												$("#"+TM.trashBin).show();
	    							        }
	    							});
								 },
								 error: function( xhr, textStatus, errorThrown ){
								 checkSessionTimeout(xhr);
										$("#"+TM.trashBin).show();
							 	 }
							 });
						}
					},
					onComplete	: function(event, queueID, fileObj, response, data){
							var completed_track_cd_trackNumber = TM.getCdTrackNumberFromQueueID(queueID);
							var response_json = eval('('+response+')');
							var track_array_unique_key = TM.getUniqueKeyByCdTrackNumber(completed_track_cd_trackNumber.cd, completed_track_cd_trackNumber.trackNumber,TM.allTracks);
							var asset_code_name = getAudioAssetCodeName(track_array_unique_key);
    						var import_asset_id = TM.allTracks[track_array_unique_key]['import_asset_id'];
    						var target_location = "#mediacontainer_"+track_array_unique_key;
    						if(asset_code_name!==false){
									encoding_name_display = TM.generateTrackNameForDisplay(TM.allTracks[track_array_unique_key]["original_file_name"]);
    								$(target_location).html('<div class="encoding_audio"><?php echo $this->escapejs($this->translate->_("Encoding Audio...")); ?><img src="/images/ajax-loader.gif"/><br/><div class="encoding_audio_filename">' + encoding_name_display + '</div></div>');
    								tm.allTracks[track_array_unique_key]["look_for_mp3"] = "Y";
    								check_audio_files();
    						    	$.post("/releasebuilder/upload", {filename: response_json.destination, asset_code: asset_code_name, upc: TM.customParams.upc, releaseId:TM.customParams.release_id, vendor_id: TM.customParams.vendor_id, user_id: TM.customParams.user_id, user_type: TM.customParams.user_type, total_tracks: 0, import_asset_id: import_asset_id, correction_flag : tm.customParams.isInContent, reupload_filename : encoding_name_display}, function(theResponse){
									  	if(theResponse){
    										$("th.num button").css({'visibility':'visible'});
        						   	}
    					    		},"json");
    						}
    						if ($('#trash_can').is(':hidden')) {
								$('#trash_can').fadeIn('slow');
							}
							TM.uploadNextFile(unique_key);
					},
					onProgress : function(event, queueID, fileObj, data){
							var inprogress_track_cd_trackNumber = TM.getCdTrackNumberFromQueueID(queueID);

							var track_array_unique_key = TM.getUniqueKeyByCdTrackNumber(inprogress_track_cd_trackNumber.cd, inprogress_track_cd_trackNumber.trackNumber,TM.allTracks);
							var bytes_loaded = data.bytesLoaded;
							var filesize = fileObj.size;
							var bytes_completed_percentage = ((bytes_loaded / filesize) * 100).toFixed(2);
							TM.allTracks[track_array_unique_key]["percentage"] = data.percentage;
							$("#" + track_array_unique_key + "ProgressBar").css('width', (((data.percentage - 7.8125) <= 0) ? 0 : (data.percentage - 7.8125)) + '%');
							var displayData = "";
							if (event.data.toDisplay == 'percentage') displayData = ' ' + (bytes_completed_percentage) + '%';
							$("#mediacontainer_" + track_array_unique_key + " .percentage").text(displayData);
					},
					onError : function(event, queueID, fileObj, errorObj){
							if(fileObj.size == 0){
								var msg = "The audio file you uploaded is <b>0 bytes</b>. Please upload only Raw, uncompressed WAV audio files, 44.1khz, 16-bit, stereo quality.<br>";
							}else{
								var msg = errorObj.info;
							}
							TM.setAudioErrorLabel(unique_key+queueID, msg);
							TM.saveTrackData();
							if ($('#trash_can').is(':hidden')) {
								$('#trash_can').fadeIn('slow');
							}
							if(errorObj.info == "Error #2038" && fileObj.size > 0){
								upload_error_interval = setTimeout("retryUploadifyAudio('"+unique_key+"')",40000);
							}else{
								TM.uploadNextFile(unique_key);
							}

							TM.getReuploadButtons(unique_key+queueID);
							return true;
					},
					onAllComplete : function(){
							//stop timer
							$("#edittrackmodalprogressbar").stopTime('edittrackmodalprogressbar');
							$("#upload_audio_button").html("<?=$this->escapejs($this->translate->_("Upload Audio"))?>");
							$("#upload_audio_button").removeClass("submitOff");
							$(document).trigger('TRACK_CHANGED');
							$("#"+TM.multiuploadButton+" span").html("Upload Audio");
							$("#"+TM.multiuploadButton).removeClass("submitOff");
							TM.newlyUploadedTracks = [];
					},
					onSWFReady : function (){
						$("#multiuploadUploader").hide();
					}
			});
		}
		this.uploadNextFile = function(unique_key){
			if(this.audiofilequeue.length > 0){
				current_queue_id = this.audiofilequeue.splice(0,1);
				$('#'+unique_key).uploadifyUpload(current_queue_id);
			}
		}
		this.removeTrack = function(track_index, fileID){
			if(tm.allTracks[track_index]["percentage"] < 100){
				var tmp_index = tm.audiofilequeue.indexOf(fileID);
				if(tmp_index != -1){
					tm.audiofilequeue.splice(tmp_index,1);
					delete tm.allTracks[track_index];
					$('#'+track_index).remove();
					tm.rebuildTrackList();
					tm.populateTracksContainer();
					tm.updateTracksDB();
					$('#multiupload').uploadifyCancel(fileID);
				}
			}
		}
		this.toggleNoTrackFound = function(){
			var track_still_exist = 0;
		    for(var i in this.allTracks){
		    	track_still_exist = 1;
		    	$("#"+this.noTracksAdded).hide();
		    	$('#'+this.trashBin).fadeIn('slow');
		    	break;
		    }
		    if(track_still_exist == 0){
		     	$("#"+this.noTracksAdded).fadeIn('slow');
		    }
		}
		this.getMediaContainerContent = function(){
			var tmpAllTracks = [];
			$.extend(true, tmpAllTracks, this.allTracks);

			for(var i in tmpAllTracks){
				if(tmpAllTracks[i]["inprogress"]){
					var encoding_name_display = this.generateTrackNameForDisplay(tmpAllTracks[i]["original_file_name"]);
    				$("#mediacontainer_"+i).html('<div class="encoding_audio"><?php echo $this->escapejs($this->translate->_("Encoding Audio...")); ?><img src="/images/ajax-loader.gif"/><br/><div class="encoding_audio_filename">' + encoding_name_display + '</div></div>');
				}
			}
		}

   		var TM = this;
   		$("#"+this.trackListPlaceholder).sortable({
   			disabled: ((!TM.customParams.isEditable) || TM.customParams.isInContent),
			opacity: 1,
			cursor: 'move',
			scroll:true,
			axis:'y',
			opacity:'0.5',
			handle: '.draggable',
			start: function (){
			},
			update: function() {
				updateTrackList(TM);
			},
			stop: function(event, ui){
				if ($(this).hasClass('dropped')){
		            $(this).sortable('cancel');
		            $(this).removeClass('dropped');
		            return false;
		        }else{
		        	showLoadingBar = true;
		        	TM.updateTracksDB();
					TM.backupTracksArray();
					$(".in_trash_can").remove();
				}
			}
		});

		this.deleteSeletedTrack = function(draggable_id){
			showLoadingBar = false;
			$('#' + draggable_id).fadeIn("fast", function(){
				$('#' + draggable_id).css("opacity", "");
			});
			$f().stop();
			$f().close();
			if (draggable_id.match(/divider/gi)){
				$("#"+draggable_id+" div").removeClass("divider").removeClass("draggable");
				$("#"+draggable_id).addClass("in_trash_can");
				if(TM.getNumOfDividers()==0){
					$("#first_divider").hide();
				}
				$("#dialog-confirm center p").text('');
				$("#dialog-confirm center p").text('Deletion in progress...');
				$(".close.btn").hide();
				$("#dialog-confirm #loadingbar_id").show();
				$("#Cancel_button").hide();
				$("#Delete_button").hide();
			}else{
				check_for_encoding = $('#' + draggable_id + " .aud").html();
				check_for_uploading = $('#' + draggable_id + " .aud .audioUploadProgress").html();
				if(check_for_encoding.match(/<?=$this->escapejs($this->translate->_("Encoding Audio..."))?>/gi)){
					$("#dialog-confirm center p").text('');
					$("#dialog-confirm center p").text('File Encoding in Process, please wait.');
					$("#Delete_button").hide();
					$("#"+this.trashBin).css('background-image', 'url(../images/trash-bg.png)');
					$("#"+this.trashBin).css({"cursor":"default"});
					return false;
				}else if(check_for_uploading){
					$("#dialog-confirm center p").text('');
					$("#dialog-confirm center p").text('File Upload in Process, please wait.');
					$("#Delete_button").hide();
					$("#"+this.trashBin).css('background-image', 'url(../images/trash-bg.png)');
					$("#"+this.trashBin).css({"cursor":"default"});
					return false;
				}else{
					$("#dialog-confirm center p").text('');
					$("#dialog-confirm center p").text('Deletion in progress...');
					$("#dialog-confirm #loadingbar_id").show();
					$('.close.btn').hide();
					$("#Cancel_button").hide();
					$("#Delete_button").hide();

					delete TM.allTracks[draggable_id];
					TM.updateVolumeDividers();
					TM.partitionTracks();
					$("#"+draggable_id).addClass("in_trash_can");
				}
			}
			TM.updateTracksDB();
			TM.backupTracksArray();
			$(".in_trash_can").remove();
			updateTrackList(TM);
		}

       this.cancelSeletedTrack = function(draggable_id){
	       $('#' + draggable_id).fadeIn("fast", function(){
	    		$('#' + draggable_id).css("opacity", "");
		   });
	       TM.allTracks = $.extend(true, [], TM.track_array_with_old_order);
		   rearrangeTrackList(TM);
		   $("tbody#loading_track_message").html("");
	   }

		$('#'+this.trashBin).droppable({
			over: function(){
				$("#"+this.trashBin).css('background-image', 'url(../images/trash-bg-on.png)');
				$("#"+this.trashBin).css({"cursor":"pointer"});
			},
			out: function(){
				$("#"+this.trashBin).css('background-image', 'url(../images/trash-bg.png)');
				$("#"+this.trashBin).css({"cursor":"default"});
			},
			drop: function(event, ui) {
				draggable_id = ui.draggable.attr('id');
				track_name = '';
				track_name = $('#' + draggable_id + " .tn").text();
				var volume_name = '';
				volume_name = $('#' + draggable_id + " .divider").text();

				if(track_name != "" && track_name.indexOf("...") >= 0){
					track_name = $('#' + draggable_id + " .tn .tooltip_contents").text();
				}else if($.trim(track_name) == "Click to Edit Track Name"){
					track_name = 'track';
					volumeDividerDeleted = false;
				}else if((track_name == null) || (track_name == "")){
					track_name = volume_name;
					volumeDividerDeleted = true;
				}else{
					volumeDividerDeleted = false;
				}
				 $f().pause();
				 ui.draggable.parent().addClass('dropped');
				 $('#' + draggable_id).fadeOut("fast");
				 modalWindowdeletetrackmodal({'track_name' : track_name,'draggable_item_id':draggable_id});
				 $("#trash_can").css('background-image', 'url(../images/trash-bg.png)');
				 $("#trash_can").css({"cursor":"default"});
			}
		});

	this.updateVolumeDividers = function(){
		arr = $('#'+this.trackListPlaceholder).sortable('toArray');
		var dividerCnt = 0;
		for(j in arr){
			if (arr[j] != ""){
				if(arr[j].substring(0,7)=="divider"){
					if(dividerCnt == 0){
				    	$('#'+arr[j]).remove();
				    }
				    dividerCnt = 0;
				}else{
					dividerCnt++;
				}
			}
		}
   	}
}

$(document).bind('RELEASE_ARTIST_UPDATED', function(e, data) {
	return;
	if (data.previous_genre_id == 12 && data.genre_id != 12) {

					/** apply all the new 'performer' type to all the trackLevelArtists in tracks array */
					for(var i in tracks) {

						var trackLevelArtists = "";
						$.each(data, function(key, value) {
							if (tracks[i]['unique_track_id'] == key) {
								$.each(value, function(track_arist_key, track_arist_value) {
									trackLevelArtists = trackLevelArtists + track_arist_value + "|";
								});
								tracks[i]['trackLevelArtists'] = trackLevelArtists.replace(/\|$/g,"");
							}
						});

						tracks[i]['performer'] = "";
						tracks[i]['composer'] = "";
						tracks[i]['orchestra'] = "";
						tracks[i]['ensemble'] = "";
						tracks[i]['conductor'] = "";
					}
				}

				/** if we're entering classical mode, we must apply trackLevelArtists to performer type */
				if (genre_id != 12 && this_genre == 12) {
					for(var i in tracks) {
						tracks[i]['performer'] = tracks[i]['trackLevelArtists'];
						tracks[i]['trackLevelArtists'] = "";
					}
				}

				/** set the current genre in the release to what the user saved. */
				genre_id = this_genre;

				for(var i in tracks) {
					/** don't do for classical releases */
					 if (genre_id != 12) {
						/** if the track level artist matched what the previous release level artist was then do this */
						if (($("tr#"+i+" td.an").html() == current_album_artist) || ($("tr#"+i+" td.an").html() == "")){
							if (album_artist != "Various Artists") {
								$("tr#"+i+" td.an").html(album_artist);
								tracks[i]['trackLevelArtists'] = album_artist;
							} else {
								$("tr#"+i+" td.an").html("");
								tracks[i]['trackLevelArtists'] = "";
							}
						}
					 }
				}

				/* update classical fields if neccessary */
				if (genre_id == "12") {

					$("#extra_classical_information").show();

					/** Gather Release Level Prepopulated Token Box Values for possible track level to release level alignment */
					var new_performers = "";
					$.each(data.classical_release_fields.performers, function(key, value) {
						new_performers = new_performers + value + "|";
					});
					new_performers = new_performers.replace(/\|$/g,"");

					var new_composers = "";
					$.each(data.classical_release_fields.composers, function(key, value) {
						new_composers = new_composers + value + "|";
					});
					new_composers = new_composers.replace(/\|$/g,"");

					var new_orchestras = "";
					$.each(data.classical_release_fields.orchestras, function(key, value) {
						new_orchestras = new_orchestras + value + "|";
					});
					new_orchestras = new_orchestras.replace(/\|$/g,"");

					var new_ensembles = "";
					$.each(data.classical_release_fields.ensembles, function(key, value) {
						new_ensembles = new_ensembles + value + "|";
					});
					new_ensembles = new_ensembles.replace(/\|$/g,"");

					var new_conductors = "";
					$.each(data.classical_release_fields.conductors, function(key, value) {
						new_conductors = new_conductors + value + "|";
					});
					new_conductors = new_conductors.replace(/\|$/g,"");

					/** Dynamically Populate Extra Classical Info Box on the Create Release Page */
					var performers 	= "";
					performers		= data.classical_release_fields.performers.toString();

					var composers 	= "";
					composers		= data.classical_release_fields.composers.toString();

					var orchestras 	= "";
					orchestras		= data.classical_release_fields.orchestras.toString();

					var ensembles 	= "";
					ensembles		= data.classical_release_fields.ensembles.toString();

					var conductors	= "";
					conductors		= data.classical_release_fields.conductors.toString();

					performers = performers.replace(/,$/, "");
					$("#primary_artist_display").html(performers.replace(/,/g,", "));

					composers = composers.replace(/,$/, "");
					$("#classical_composers_display").html(composers.replace(/,/g,", "));

					orchestras = orchestras.replace(/,$/, "");
					$("#classical_orchestras_display").html(orchestras.replace(/,/g,", "));

					ensembles = ensembles.replace(/,$/, "");
					$("#classical_ensembles_display").html(ensembles.replace(/,/g,", "));

					conductors = conductors.replace(/,$/, "");
					$("#classical_conductors_display").html(conductors.replace(/,/g,", "));

					/** if track level any empty entries for classical fields, make them the release level, if they are in sync with the previous release level, also update */
					for(var i in tracks) {

						/** the current set of classical entries is now the former  */
						if((tracks[i]['performer'] == "") || (tracks[i]['performer'] == previous_release_performers) || (tracks[i]['performer'] == undefined) || (tracks[i]['performer'] == null)) {
							tracks[i]['performer'] = new_performers;
						}

						if((tracks[i]['composer'] == "") || (tracks[i]['composer'] == previous_release_composers) || (tracks[i]['composer'] == undefined) || (tracks[i]['composer'] == null)) {
							tracks[i]['composer'] = new_composers;
						}

						if((tracks[i]['orchestra'] == "") || (tracks[i]['orchestra'] == previous_release_orchestras) || (tracks[i]['orchestra'] == undefined) || (tracks[i]['orchestra'] == null)) {
							tracks[i]['orchestra'] = new_orchestras;
						}

						if((tracks[i]['ensemble'] == "") || (tracks[i]['ensemble'] == previous_release_ensembles) || (tracks[i]['ensemble'] == undefined) || (tracks[i]['ensemble'] == null)) {
							tracks[i]['ensemble'] = new_ensembles;
						}

						if((tracks[i]['conductor'] == "") || (tracks[i]['conductor'] == previous_release_conductors) || (tracks[i]['conductor'] == undefined) || (tracks[i]['conductor'] == null)) {
							tracks[i]['conductor'] = new_conductors;
						}
					}
				}
				rebuildTrackList();

});
//Escapes double quotes into input string
function escapeDoubleQuote(val){
    var escapeQuoteString = val.replace(/\"/g, "&#34;");
    return escapeQuoteString;
}

function trimCommas(val){
    var artistElements = [];
    var valueArray = [];
    valueArray = val.split("|");
    for (j=0;j < valueArray.length;j++) {
        var newWord = valueArray[j].replace(/^[,\s]+|[,\s]+$/g, '');
        artistElements.push(newWord);
    }
    //Remove blank values
    var artistElements = artistElements.filter(function(v){ return v!==''; });
    var artistArray = artistElements.filter(function(item, k, arr){ return arr.indexOf(item) === k; });
    var artStr = artistArray.join('|');
    return artStr;
}
function setTrackAudio(){
	trackChanged = "true";
	tmp_id = tm.getSelectedTrack();
	if(tm.isReleaseRejected ){
		var tempLength = tm.allTracks[tmp_id]['rejectionCorrectedFields'].length;
		tm.allTracks[tmp_id]['rejectionCorrectedFields'][tempLength] = "original_file_name"  ;
	}
}

//Added refactored view.phtml
function hasUploadError(uid){
	if(tm.allTracks[uid]["audio_upload_error"] == null || tm.allTracks[uid]["audio_upload_error"] == "" || tm.allTracks[uid]["audio_upload_error"] == undefined){
		return false;
	}
	return true;
}

function retryUploadifyAudio(unique_key){
    $.ajax({
        type: "GET",
        url: "/releasebuilder/getreleasestatus",
        data: "release_id=release_id",
        success: function(msg){
	        //alert("Connection active!");
    	     clearTimeout(upload_error_interval);
        	 tm.uploadNextFile(unique_key)
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
        	upload_error_interval = setTimeout("retryUploadifyAudio('"+unique_key+"')",40000);
        }
    });
}

function unloadPage(){
	for (key in tm.allTracks) {
		for (field in tm.allTracks[key]) {
			if(field == "inprogress"){
    			if(tm.allTracks[key][field] == 1){
    				return "File upload is in Progress...";
    			}
			}
		}
	}
    return;
}

//Refactor end
function getRejectedChanged(changed_array ,track_id ){
	var returnArr = new Array();
	for(i=0 ; i < changed_array.length ; i++){
		if(isRejectedField(track_id , changed_array[i]) ){
			returnArr.push(changed_array[i]);
		}
	}
	return returnArr;
}
function isRejectedField(track_id, field_name){
	returnVal = false;
	if(tm.isReleaseRejected){
		if(tm.allTracks[track_id][field_name] != "" && tm.allTracks[track_id][field_name] != undefined && tm.allTracks[track_id][field_name] != 'undefined' )
			returnVal=true  ;
	}
	return returnVal;
}
function checkAudioById(id){
	var fileObj = document.getElementById(id).files[0];
	return validateAudio(fileObj);
}

function validateAudio(fileObj){
	var name = fileObj.name;
	var ext = name.match(/(\.\w+)$/);
    var extensions = ["wav", "m4a", "flac"];

	if(ext!=null){
		ext = ext[0].slice(1);
	}

	if(jQuery.inArray(ext.toLowerCase(), extensions) == -1){
		alert("The file " + name + " is not in an accepted file format. Your file must be in " + extensions.toString() + " format.");
		return false;
	}else if (fileObj.size > 943718400 ) {
        alert("The file " + name + " is too large." + '\n' + "Your file must be no larger than 900MB.");
        return false;
    }else if (fileObj.size == 0 ) {
        alert("The file " + name + " is an empty file.");
        return false;
    }
	return true;
}

function rearrangeTrackList(TM){
	if(TM.customParams.isEditable && !TM.customParams.isInContent){
	    TM.rebuildTrackList();
		TM.partitionTracks();
		TM.backupTracksArray();
		TM.getMediaContainerContent();
	}else{
		$('#'+this.addVolumeDividerLink).hide();
		TM.populateTracksContainer();
	}
}

function updateTrackList(TM){
	TM.rebuildTrackList();
	TM.updateVolumeDividers();
	TM.partitionTracks();
	TM.allTracks = $.extend(true, [], TM.sortTracksArrByCdTrackNo(TM.allTracks));
	TM.track_array_with_old_order = $.extend(true,[],TM.allTracks);
}
