// TODO: Make sure sorting logic is sound

var mediaLibraryTable;
var assetDataSourceCache = new Hash();
var intervalIdHash = new Hash();
var quickchart = "13";

LIFEWAY.medialibrary2 = new function() {
	
	return {
		//--------------------------------------------------------------------------------
		// Main routine that draws the top-level media library table 
		//--------------------------------------------------------------------------------
	
		displayMediaLibrary : function() 
		{
			
			// prerequisite components
			//alert('this is happening');
			var tableHeaders = buildMediaLibraryTableHeaders();
			var dataSource = buildMediaLibraryDataSource();
			
			// default styles
			YAHOO.widget.DataTable.CLASS_ODD = LIFEWAY.medialibrary2.CLASS_ODD
			YAHOO.widget.DataTable.CLASS_EVEN = LIFEWAY.medialibrary2.CLASS_EVEN
			YAHOO.widget.DataTable.CLASS_TABLE = "library_media_table";			
			YAHOO.widget.DataTable.CLASS_SORTABLE = "sortable";
			YAHOO.widget.DataTable.CLASS_HEADTEXT = "library_media_table_active";
			YAHOO.widget.DataTable.MSG_ERROR = "No records found.";
			
			// data table
			var initialSort = { sortedBy: { key:"mediaTitle", dir:"asc" } };
			mediaLibraryTable = new YAHOO.widget.DataTable("media_library_middle", tableHeaders, dataSource, initialSort);
			applyOnClickToHeaders();
			mediaLibraryTable.subscribe("columnSortEvent", setArrow);
			
			//Set initial style of title column with up arrow
			var sortableSpans = $$('span.yui-dt-label');
			new Insertion.Before(sortableSpans[1],"<span id='arrow_img1'><img src='/images/grey_arrow_up.gif'/></span>");
		},
		
		searchForMusicElements : function() {
			removeYUITableRows(mediaLibraryTable.getTableEl());
			var params = 'searchParam=' + $('media_library_search_text').value;			
			mediaLibraryTable.getDataSource().sendRequest(params, mediaLibraryTable.onDataReturnInitializeTable, mediaLibraryTable);			
		},		
		
		//--------------------------------------------------------------------------------
		// Handler for when media element expands/collapses 
		//--------------------------------------------------------------------------------		
		handleMediaElementOnClick : function(arrowImg, elementId, cellId, hasAudioAssets, hasMediaAssets, hasPrintAssets) {
			var parentRow = $(cellId).parentNode;
			
			var arrowImageElement = $(arrowImg);
						
			if (toggleElementArrow(arrowImageElement) === 'expanded') {				
				if (hasMediaElementRowsBeenExpanded(elementId)) {
					expandMediaElementRows(elementId, parentRow);
				} else {
					initExpandMediaElementRows(elementId, parentRow, hasAudioAssets, hasMediaAssets, hasPrintAssets);
				}				
			} else {
				collapseMediaElementRows(elementId, parentRow);				
			}
		},
		
		addToCart : function( versionId, elementId ) {
			var url = "/mediaLibrary/addToCart";
			var params = "versionId="+versionId+"&elementId=" + elementId;
			sendAjaxRequest(url, 'POST', true, params, addToCartSuccess, addToCartFailure);
				
			function addToCartSuccess(oReq){
				$('home_cart').show();
				// Change Add button to Added button
				var addToCartLink = $('addToCart' + oReq.responseText); 
				addToCartLink.innerHTML = 'Added';
				addToCartLink.style.color="#767272";
				addToCartLink.style.textDecoration = "none";
				addToCartLink.onclick = null;
				Element.show("cartImage");	
			};
			
			function addToCartFailure(oReq){
				var responseJSON = eval( '(' + oReq.responseText + ')');
				if(responseJSON.type=="Missing"){
					LIFEWAY.findandbuy.displayMissingErrorDialog();
				} else if(responseJSON.type=="Duplicate") {
					LIFEWAY.findandbuy.displayDuplicateErrorDialog(responseJSON.version);
				}
			};				
		},		
		
		toggleRepeatSectionCheckbox : function(turnOnId, turnOffId) {
		  $(turnOnId).checked = true;
		  $(turnOffId).checked = false;
		},
		
		downloadAssetWithRepeatedSections : function(repeatSections, url, id) {
		  var repeatSections = $(repeatSections).checked == true ? true : false;
		  LIFEWAY.dialog.removeDialog('repeatSection');
		  
		  LIFEWAY.medialibrary2.downloadAsset(url + '&repeatSections=' + repeatSections, id);
		},
		
		downloadAsset : function(url, id,assetDesc) 
		{
		  var updated_url= url+"&content-type=application/octet-stream&content-disposition=attachment&filename="+assetDesc;	
		  updateDateDownloaded(id);		 
		  window.open(updated_url, "repeatSectionsWindow");
		},
		
		repeatSectionsPrompt : function(url, description, songVersionName, id) {
		  LIFEWAY.dialog.displayAjpDialog("/repeatSections.ajp", {description: description,url: url, songVersionName: songVersionName, id: id}, "repeatSection");
        },
		
		// NOTE: This function is an onclick event handler that needs to stay part of the public API
		toggleDivVisibility : function(divId, imgId){
			if(Element.hasClassName(imgId, 'expanded_png')){
				$(imgId).src="/images/library/library_active_arrow_right.png";
				Element.removeClassName(imgId, 'expanded_png');
				if(Prototype.Browser.IE){ fixPng($(imgId)); }
				$(divId).hide();
			}else{
				$(imgId).src="/images/library/library_active_arrow_down.png";
				Element.addClassName(imgId, 'expanded_png')
				if(Prototype.Browser.IE){ fixPng($(imgId)); }
				$(divId).show();
			}
		},
		
		displayPrintDialog : function(canPrint)
		{
						
				//window.open("/mediaLibrary/printOptions","printPreviewWindow","width=950, height=800, top=100, left=100, toolbar=0, menubar=1, location=0, status=0, scrollbars=1, resizable=1");
				window.print();
								
		}
		
	}
		
	//--------------------------------------------------------------------------------
	// Expand/Collapse media element row routines
	//--------------------------------------------------------------------------------
	function updateDateDownloaded(id) {
        var url = '/mediaLibrary/downloadDate/' + id;
        sendAjaxRequest(url, 'POST', true, null, updateDateDownloadedSuccess);
    }
    
    function updateDateDownloadedSuccess(oReq) {
        var json = eval( '(' + oReq.responseText + ')');
        var assetId = json.MediaAsset.id;
        var downloadDate = json.MediaAsset.downloadDate;
        
        $('download_date_' + assetId).update(downloadDate);
    }
	
	function hasMediaElementRowsBeenExpanded(elementId) {
		return document.getElementById(elementId + '_expanded_row_assets') != null;		
	}
	
	function initExpandMediaElementRows(elementId, parentRow, hasAudioAssets, hasMediaAssets, hasPrintAssets) {
		// change style of element row to active		
		if (isOdd(parentRow.sectionRowIndex)) {			
			Element.removeClassName(parentRow, LIFEWAY.medialibrary2.CLASS_ODD);
		}
		Element.addClassName(parentRow, "library_media_active");
	
	
		var rowNum = parentRow.rowIndex;
		if (hasAudioAssets) {
			buildAssetDataTable(elementId, 'Audio', "MediaElement.audioAssets.MediaAsset", ++rowNum, true);
		}
		if (hasMediaAssets) {			
			buildAssetDataTable(elementId, 'Media', "MediaElement.mediaAssets.MediaAsset", ++rowNum, false);
		}
		if (hasPrintAssets) {
			buildAssetDataTable(elementId, 'Print', "MediaElement.printAssets.MediaAsset", ++rowNum, false);
		}
		// create and insert header table in div
		var mainDiv = document.getElementById(elementId + '_expanded_assets');
		new Insertion.Top(mainDiv, LIFEWAY.medialibrary2.HTML_HEADER_TABLE);
	}
	
	function collapseMediaElementRows(elementId, parentRow) {
		// revert style of element row depending on odd/even index 			
		Element.removeClassName(parentRow, "library_media_active");	
		if (isOdd(parentRow.sectionRowIndex)) {	
			Element.addClassName(parentRow, LIFEWAY.medialibrary2.CLASS_ODD);
		}				
	
		var expDivs = $('media_library_middle').getElementsByTagName('tr');
		for(var i = expDivs.length-1; i > 0; i--) {
			if (typeof expDivs[i].id != "undefined" && expDivs[i].id.startsWith(elementId + "_expanded")){
				if (expDivs[i] != null) {
					Element.hide(expDivs[i]);
				}
			}
		}	
		var dataSource = assetDataSourceCache[elementId + "Audio"];
		var intervalId = intervalIdHash[elementId];
		if (dataSource && intervalId) {
			dataSource.clearInterval(intervalId);
		}		
	}
	
	function collapseAllMediaElementRows() {
		var expDivs = $('media_library_middle').getElementsByTagName('tr');
		for(var i=expDivs.length-1; i > 0; i--) {
			if (expDivs[i] && typeof expDivs[i].id != "undefined" && expDivs[i].id.indexOf("_expanded") > -1) {
				var elementId = expDivs[i].id.split('_')[0];
				var rowId = 'row_' + elementId;
				Element.removeClassName(rowId, 'library_media_active');
				Element.remove(expDivs[i]);
			}
		}
	}
		
	function expandMediaElementRows(elementId, parentRow) {
		// change style of element row to active		
		if (isOdd(parentRow.sectionRowIndex)) {			
			Element.removeClassName(parentRow, LIFEWAY.medialibrary2.CLASS_ODD);
		}
		Element.addClassName(parentRow, "library_media_active");
	
		var expDivs = $('media_library_middle').getElementsByTagName('tr');
		for(var i = expDivs.length-1; i > 0; i--) {
			if (typeof expDivs[i].id != "undefined" && expDivs[i].id.startsWith(elementId + "_expanded")){
				if (expDivs[i] != null) {
					Element.show(expDivs[i]);
				}
			}
		}
	}
			
	//--------------------------------------------------------------------------------
	// Table building routines
	//--------------------------------------------------------------------------------
	
	function buildMediaLibraryTableHeaders() {
		var tableHeaders = [ 
			{ 
				key: "id", 
				label: " ",
				formatter: formatExpandButton 
			},
		    { 
		    	key:"mediaTitle",
		    	label: "Media Title", 
		    	sortable: true, 
		    	sortOptions: { ascFunction: sortTitleAsc, descFunction: sortTitleDesc },
				formatter: formatVersionName, 
				className: "library_media_title" 
			},
			{
				key:"", 
				label:"Info", 
				width:"7%",
				sortable: true, 
				formatter:formatIconButton,			 
				className:"buy_song_results noprint"
			}, 
			{ 
				key: "versionType",
				label: "Version", 
				sortable: true, 
				sortOptions: { ascFunction: sortSongTypeAsc, descFunction: sortSongTypeDesc },					  
				formatter: formatSongType, 
				className: "library_song_type" 
			},
			{ 
				key: "songMapLegend",
				label: "Song Map", 
				sortable: true, 
				sortOptions: { ascFunction: sortSongMapAsc, descFunction: sortSongMapDesc },					  
				formatter: formatSongMap, 
				className: "library_song_map" 
			},
		    { 
		    	key:"hasAudioAssets", 
		    	label:"Audio", 
			    sortable:true, 
			    sortOptions: { ascFunction: sortAudioAsc, descFunction: sortAudioDesc },				    
				formatter: formatImage, 
				className:"library_media_audio" 
			}, 
		    { 
		    	key: "hasMediaAssets", 
		    	label: "Media", 
		    	sortable: true, 
		    	sortOptions: { ascFunction: sortMediaAsc, descFunction: sortMediaDesc },				    
				formatter: formatImage, 
				className:"library_media_media" 
			}, 
		    { 
		    	key:"hasPrintAssets", 
		    	label:"Print", 
		    	sortable:true, 
		    	sortOptions: { ascFunction: sortPrintAsc, descFunction: sortPrintDesc }, 			    	 										
				formatter: formatImage, 
				className:"library_media_print" 
			},
		    { 
		    	key: "activityDate", 
		    	label: "Add&nbsp;to&nbsp;Cart", 
		    	sortable: false, 
				formatter: formatAddToCart, 
				className: "library_media_date noprint" 
			}
		];
		
		return new YAHOO.widget.ColumnSet(tableHeaders);
	}	

	function buildMediaLibraryDataSource() {
		var dataSource = new YAHOO.util.DataSource('/mediaLibrary/libraryJSON?');
		dataSource.connMethodPost = true;
		var fields = ["id", "versionId", "versionName", "abbrevSongMapLegend", "songMapLegend", "hasAudioAssets", "hasMediaAssets", "hasPrintAssets", "activityDate", "versionType", "inCart"]; 
		dataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
		dataSource.responseSchema = { resultsList: "MediaElement", fields: fields }; 
		return dataSource; 			
	}
	
	function buildAssetDataTable(elementId, assetType, jsonQualification, rowNum, pollForChanges) {
		// create div
		var mainDiv = document.createElement('div');
		mainDiv.id = elementId + '_expanded_assets';
		mainDiv.className="audio_asset"; // used for media, print, and audio?
											
		// create asset table label
		var labelDiv = document.createElement('div');
		labelDiv.id = elementId + assetType;
		labelDiv.className = "expanded_row_type_label";
		var assetTableDivName = elementId + '_expanded_asset_'+ assetType ;
		var assetLabelImg = elementId + '_button_'+ assetType;
		labelDiv.innerHTML="<img class='expanded_png' id='" + assetLabelImg + "' src='/images/library/library_active_arrow_down.jpg' onclick=\"LIFEWAY.medialibrary2.toggleDivVisibility('" + assetTableDivName  + "', '" + assetLabelImg + "')\" /> <span>" + assetType + "</span>";
		// append to main
		mainDiv.appendChild(labelDiv);
		
		// create asset table div
		var assetTableDiv = document.createElement('div');
		assetTableDiv.id = elementId + '_expanded_asset_' + assetType;
		assetTableDiv.style.width = '100%';
		// append to main
		mainDiv.appendChild(assetTableDiv);		
													
		// create td containing mainDiv
		var td = document.createElement('td');
		td.className = "expanded_row";
		td.colSpan = "8";
		td.appendChild(mainDiv);					
							
		// create tr containing td									
		var tr = mediaLibraryTable.getTableEl().insertRow(rowNum);				
		tr.id = elementId + '_expanded_row_assets';
		tr.className= "expanded_row";												
		tr.appendChild(td);
												
		// create asset table
		var assetTableHeaders = buildAssetTableHeaders();
		var assetTableDataSource = buildAssetDataSource(elementId, assetType, jsonQualification);
		
	 	var params = 'elementId=' + elementId				
		var assetTable = new YAHOO.widget.DataTable(assetTableDiv, assetTableHeaders, assetTableDataSource, {initialRequest: params});
		assetTable.getTableEl().className = 'library_media_table_active_no_header';
		if (pollForChanges) {
			var intervalId = assetTableDataSource.setInterval(60000, params, assetTable.onDataReturnInitializeTable, assetTable);
			intervalIdHash[elementId] = intervalId;
		}		
	}
	
	function buildAssetTableHeaders() {
		var tableHeaders = [ 
			{key: "blank" , label: ""},
			{key: "assetDescription", label: ""},
		    {key: "assetKey", label: "", formatter: formatKey},		   
		    {key: "assetCat", label: "", formatter: formatCatImage},
		    {key: "purchaseDate", label: "" },		    
		    {key: "downloadDate", label: "", formatter: formatDownloadDate },
		    {key: "assetQty", label: "" },
		    {key: "numDownloads", label: "" , formatter: formatDownloadLink}
		]; 
		
		return new YAHOO.widget.ColumnSet(tableHeaders);	
	} 
	
	function buildAssetDataSource(elementId, assetType, jsonQualification) {
		var cacheKey = elementId + assetType;
		var dataSource = assetDataSourceCache[cacheKey];
		
		if (dataSource == null) 
		{
			var dataSource = new YAHOO.util.DataSource('/mediaLibrary/mediaAssetsJSON?');
			dataSource.connXhrMode = "queueRequests";		
			dataSource.connMethodPost = true;
			var fields = [ "id", "assetId", "assetDescription", "mediaElementId", "numDownloads", "downloadsAllowed", "purchaseDate", "downloadDate", "assetType", "assetCat", "hasSongMap", "downloadUrl", "songVersionId", "songVersionName", "assetKey", "assetQty", "deliverableTypeId","assetFiletype"]
	  		dataSource.responseSchema = { resultsList: jsonQualification, fields: fields };
			dataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
			assetDataSourceCache[cacheKey] = dataSource;	
		}
		return dataSource;	
	}
	
	function applyOnClickToHeaders() {
		var ths = document.getElementsByTagName('th');
		var divs;
		for (var i = 0; i < ths.length; i++) {
			if(ths[i] && ths[i].className && ths[i] != 'undefined'){
				divs = ths[i].getElementsByTagName('div');
				for (var z = 0; z < divs.length; z++) {
					 if (window.addEventListener) {
					 	divs[z].addEventListener('click', collapseAllMediaElementRows, false);
					 } else {
					 	divs[z].attachEvent('onclick', collapseAllMediaElementRows);
					 }
				}
			}
		}		
	}
	
	function removeYUITableRows(table) {
		var tbody = table.childNodes[2];
		for (var i =  tbody.childNodes.length-1; i >=0; i--){
			table.deleteRow(tbody.childNodes[i].rowIndex);
		}
	}	
		
	//--------------------------------------------------------------------------------
	// Sorting routines
	//--------------------------------------------------------------------------------
	
	// returns null if both objects are comparable, otherwise -1, 0, 1 if 
	// a is less than, equal to, or greater than b repectively.
	function nullSafeComparison(a, b) {
    	// null safe comparison checks
		if (isNotComparable(a) && isNotComparable(b)) {
			return 0;	// a == b
		} else if (isNotComparable(a)) {
			return -1;	// a < b
		} else if (isNotComparable(b)) {
			return 1;	// a > b
		} else {
			return null;
		}	
	}
	
	function isNotComparable(x) {
		return (x === null) || (typeof x == "undefined");
	}	
	
	function compAsc(a, b) {
	    var comp = YAHOO.util.Sort.compareAsc; 
	    var primaryCompare = comp(a, b); 
	    return (primaryCompare !== 0) ? primaryCompare : sortTitleAsc(a, b);	
	}
			
	function sortTitleAsc(a, b) {
		// Do not call compAsc here, could result in stack overflow
	    return YAHOO.util.Sort.compareAsc(a.versionName, b.versionName); 
	} 
	
    function sortTitleDesc(a, b) {
    	return sortTitleAsc(b, a); 
	}
	
	function sortSongTypeAsc(a, b) {
		// Do not call compAsc here, could result in stack overflow
	    return YAHOO.util.Sort.compareAsc(a.versionType, b.versionType); 
	} 
	
    function sortSongTypeDesc(a, b) {
    	return sortSongTypeAsc(b, a); 
	}
			
	function sortSongMapAsc(a, b) {
		// Do not call compAsc here, could result in stack overflow
	    return YAHOO.util.Sort.compareAsc(a.songMap, b.songMap); 
	} 
	
    function sortSongMapDesc(a, b) {
    	return sortSongMapAsc(b, a); 
	}
			
    function sortAudioAsc(a, b) {
	    var check = nullSafeComparison(a, b);
	    return (check === null) ? compAsc(a.hasAudioAssets, b.hasAudioAsset) : check;	    
	}

    function sortAudioDesc(a, b) {
    	return sortAudioAsc(b, a);
	} 	
	
    function sortMediaAsc(a, b) { 
	    var check = nullSafeComparison(a, b);
	    return (check === null) ? compAsc(a.hasMediaAssets, b.hasMediaAsset) : check;	    
	} 

    function sortMediaDesc(a, b) {
    	return sortMediaAsc(b, a); 
	}		
	
    function sortPrintAsc(a, b) { 
	    var check = nullSafeComparison(a, b);
	    return (check === null) ? compAsc(a.hasPrintAssets, b.hasPrintAsset) : check;	     
	} 

    function sortPrintDesc(a, b) {
    	return sortPrintAsc(b, a); 
	}

    function sortActivityDateAsc(a, b) { 
	    var check = nullSafeComparison(a, b);
	    return (check === null) ? compAsc(a.activityDate, b.activityDate) : check; 
	}
	
    function sortActivityDateDesc(a, b) { 
    	return sortActivityDateAsc(b, a);
	}
	
	//--------------------------------------------------------------------------------
	// Formatting routines
	//--------------------------------------------------------------------------------
	
	function formatVersionName(elCell, oRecord, oColumn, oData) {
	    var elCellId = elCell.id;
	    var versionId = oRecord.getData("id");
	    var spanId = "version_title_" + versionId;
	    var arrowImgId = "img_" + versionId;
        var hasAudioAssets = oRecord._oData.hasAudioAssets
        var hasMediaAssets = oRecord._oData.hasMediaAssets
        var hasPrintAssets = oRecord._oData.hasPrintAssets

        var onclickFunction = "onclick=\"LIFEWAY.medialibrary2.handleMediaElementOnClick('" +
            arrowImgId + "', " + versionId + ", '" + elCellId + "', " + 
            hasAudioAssets + ", " + hasMediaAssets + ", " + hasPrintAssets + ");\"";
            
		YAHOO.util.Dom.addClass(elCell, "text_left");
		elCell.innerHTML= "<span id='" + spanId + "' " + onclickFunction + ">" + oRecord._oData.versionName + "</span>";
	}
	
	function formatSongType(elCell, oRecord, oColumn, oData) {
		YAHOO.util.Dom.addClass(elCell, "text_left");
		elCell.innerHTML=oRecord._oData.versionType;	
	}

	function formatSongMap(elCell, oRecord, oColumn, oData) {
		YAHOO.util.Dom.addClass(elCell, "text_left");
		elCell.innerHTML = '<span id="txt_' + elCell.id + '">' + oRecord._oData.abbrevSongMapLegend + '</span>';
		if(oRecord._oData.songMapLegend != null && oRecord._oData.songMapLegend != ''){
			new YAHOO.widget.Tooltip('myTooltip' + elCell.id, { context:'txt_' + elCell.id, text:oRecord._oData.songMapLegend } );
		}
	}

	function formatIconButton(elCell, oRecord, oColumn, oData)
	{
		//var name = oRecord.getData('name').replace("'", "''");
		elCell.innerHTML = "<img id=\"infoBtn" + oRecord.getData('versionId') 
			+ "\" class=\"btnPtr\"  src=\"/images/info.gif\"  onclick=\"LIFEWAY.worshipplan.displayElementInformation( '" 
			+ oRecord.getData('versionId') + "');\"/>";
	}
	
	function formatImage(elCell, oRecord, oColumn, oData) {
		if (oData == "true") {
			elCell.innerHTML="<img src='/images/library/library_check.png' />";
		} else {
			elCell.innerHTML="";
		}
	}
			
	function formatAddToCart(elCell, oRecord, oColumn, oData) {
		var versionId = oRecord.getData("versionId");
		var elementId = oRecord.getData("id");
		var inCart = oRecord.getData("inCart");

		if (inCart == "true") {
			elCell.innerHTML= '<a href="#" style="font-weight:bold;color: #767272;text-decoration:none;" id="addToCart' + elementId + '">Added</a>';
			Element.show("cartImage");
		} else {
			elCell.innerHTML= '<a href="#" style="color: #D46038" id="addToCart' + elementId + '" onclick="LIFEWAY.medialibrary2.addToCart(' + versionId + ', ' + elementId + ')" >Add</a>';		
		}
	}

	function formatDownloadDate(elCell, oRecord, oColumn, oData) {
		elCell.innerHTML= '<span id="download_date_' + oRecord.getData("id") + '">' + oRecord.getData('downloadDate') + '</span>';
	}
	
	function formatExpandButton(elCell, oRecord, oColumn, oData) {
		var elCellId = elCell.id;
		var arrowImgId = 'img_' + oData;
		var hasAudioAssets = oRecord._oData.hasAudioAssets
		var hasMediaAssets = oRecord._oData.hasMediaAssets
		var hasPrintAssets = oRecord._oData.hasPrintAssets
		var onclickFunction = "onclick=\"LIFEWAY.medialibrary2.handleMediaElementOnClick('" +
            arrowImgId + "', " + oData + ", '" + elCellId + "', " + 
            hasAudioAssets + ", " + hasMediaAssets + ", " + hasPrintAssets + ");\"";
		elCell.parentNode.id = 'row_' + oData;
        elCell.innerHTML = "<img  id='img_" + oData + "' " + onclickFunction + " src='/images/arrow_right.png'/>";
	}
	
	function formatDownloadLink(elCell, oRecord, oColumn, oData)
	{
		var fileExtn = (oRecord.getData('assetFiletype'));
		var svn = oRecord.getData('songVersionName').replace(/'/g,"&rsquo;");
		svn=svn+"_"+oRecord.getData('assetDescription')+"_"+oRecord.getData('assetKey')+fileExtn;
		
		
		if(oRecord.getData('downloadUrl') != null) {
			if (oRecord.getData('hasSongMap') == 'yes' && oRecord.getData('assetCat') == 'Print' && oRecord.getData('deliverableTypeId') != quickchart) {
                elCell.innerHTML = '<a class="downloadLink noprint" id="asset_' + oRecord.getData("id") + '"   onclick="LIFEWAY.medialibrary2.repeatSectionsPrompt(\'' + oRecord.getData('downloadUrl') + '\',\'' + oRecord.getData('assetDescription') + '\',\'' + oRecord.getData('songVersionName').replace(/'/g,"&rsquo;") + '\',' + oRecord.getData('id') + ');">Download</a>';
			} else {
				elCell.innerHTML = '<a class="downloadLink noprint" id="asset_' + oRecord.getData("id") + '" onclick="LIFEWAY.medialibrary2.downloadAsset(\'' + oRecord.getData('downloadUrl') + '\',' + oRecord.getData('id') + ',\'' + svn + '\');return false;">Download</a>';
			}
		} else {
			var tooltipDiv = 'asset_' + oRecord.getData("id");
			elCell.innerHTML = '<a id="' + tooltipDiv + '" href="#">Your download is currently being mapped</a>';
			new YAHOO.widget.Tooltip('myTooltip' + oRecord.getData("id"), { 
				context:tooltipDiv, 
				text:"Your download is currently being assembled. Please check back in a few minutes to download. If your download is not ready within fifteen minutes, please email worship@lifeway.com" } ); 			 	
		}
	}
	
	
	function formatAssetType(elCell, oRecord, oColumn, oData){
		var checkBoxHtml;
		Element.addClassName(elCell, 'row_indent');
		
		if ((oRecord.downloadsAllowed - oRecord.numDownloads) > 0) {
			checkBoxHtml = '<img id="cb_' + oRecord.mediaElementId + '_' + oRecord.assetCat + '_' + oRecord.id + '" onClick="LIFEWAY.medialibrary.handleCheck(this)" ' + ' src="/images/check_box_empty.gif" />';
		} else {
			checkBoxHtml = '<img id="cb_' + oRecord.mediaElementId + '_' + oRecord.assetCat + '_' + oRecord.id + '" onClick="LIFEWAY.medialibrary.handleCheck(this)" ' + ' src="/images/check_box_grey.gif" />';			
		}
		
		elCell.innerHTML = '<div align="left"> ' + checkBoxHtml + oRecord.assetType + '</div>';
	}
	
	function formatCatImage(elCell, oRecord, oColumn, oData){
		// This cell can be redrawn multiple times by a polling datasource and we don't want it to change
		// if a song is playing
		if (elCell.innerHTML == "") {		
			var id = oRecord.getData("songVersionId") + '-' + oRecord.getId();		
			if (oData == 'Audio') {			
				if (oRecord.getData("downloadUrl") != null) {		
				elCell.innerHTML = '<img class="audioBtnPlay noprint" id="audioBtn' + id +  '" src="/images/play.gif" onclick="LIFEWAY.worship.previewplayer.playFullSong(\'' + id + '\',\'' + oRecord.getData('downloadUrl') + '\');"/>';
				} else {
					elCell.innerHTML = '';
				}
			} else if (oData == 'Media') {
				elCell.innerHTML = '<img src="/images/media_icon.gif"/>';
			} else if (oData == 'Print') {
				elCell.innerHTML = '<img id="printBtn_' + id + '" src="/images/print_icon.gif"/>';
			}
		}
	}	
	
	function formatKey(elCell, oRecord, oColumn, oData){
		var key = oRecord.getData('assetKey');
		if (oRecord.getData('hasSongMap') == 'no') {		
			if(key != null) {	
				elCell.innerHTML = key;
			} else {
				elCell.innerHTML = "";
			}
		} 
	}	
	
	//--------------------------------------------------------------------------------
	// Toggling routines
	//--------------------------------------------------------------------------------	
	
	function toggleElementArrow(img){
		if (Element.hasClassName(img.id, 'expanded_png')){
			img.src = LIFEWAY.medialibrary2.IMG_ARROW_RIGHT;
			Element.removeClassName(img.id, 'expanded_png');
			if(Prototype.Browser.IE) { fixPng(img); }
			return 'collapsed';
		} else {
			img.src = LIFEWAY.medialibrary2.IMG_ARROW_DOWN;
			Element.addClassName(img.id, 'expanded_png')
			if (Prototype.Browser.IE) { fixPng(img); }
			return 'expanded';
		}
	}
	
	function setArrow(args) {
		var dir = args.dir;
		var col = args.column.getIndex();
		var arrow = dir == "desc" ? ".jpg" : "_up.gif";
				
		// Only col 1 & 7 (Media Title, Last Purchase) get a sort arrow
		if (col == "1") {
			$("arrow_img1").innerHTML="<img src='/images/grey_arrow" + arrow + "' />";
			$("arrow_img7").innerHTML="";
		} else if (col == "7") {
			$("arrow_img7").innerHTML="<img src='/images/grey_arrow" + arrow + "' />";
			$("arrow_img1").innerHTML="";		
		} else {
			$("arrow_img1").innerHTML="";
			$("arrow_img7").innerHTML="";
		}
	}	
		
	//--------------------------------------------------------------------------------
	// Helper routines
	//--------------------------------------------------------------------------------
	
	function isOdd(num) {
		return num % 2 != 0;
	}	
	
	function fixPng(img){
		var src = img.src;
		img.style.width = img.width + "px";
		img.style.height = img.height + "px";
		img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+src+"', sizingMethod='crop')"
		img.src = LIFEWAY.medialibrary2.IMG_SPACER;
	}	
};

//--------------------------------------------------------------------------------
// Public constants
//--------------------------------------------------------------------------------

LIFEWAY.medialibrary2.CLASS_ACTIVE 		= "library_media_active";
LIFEWAY.medialibrary2.CLASS_ODD 		= "library_media_odd";
LIFEWAY.medialibrary2.CLASS_EVEN 		= " ";
LIFEWAY.medialibrary2.IMG_ARROW_DOWN 	= "/images/arrow_down.png";
LIFEWAY.medialibrary2.IMG_ARROW_RIGHT 	= "/images/arrow_right.png";
LIFEWAY.medialibrary2.IMG_SPACER	 	= "/images/spacer.gif";
LIFEWAY.medialibrary2.HTML_HEADER_TABLE	= '<div id="assetHeader"><table class="library_media_table_active">' +
	'<th id="yui-dt1-col8" class="yui-dt-col-assetDescription yui-dt-first" style="width: 20%;" rowspan="1" colspan="1">Title</th>'+
	'<th id="yui-dt1-col9" class="yui-dt-col-hasSongMap" style="width: 10%;" rowspan="1" colspan="1">Key</th>'+
	'<th id="yui-dt1-col10" class="yui-dt-col-assetCat noprint" style="width: 9%;" rowspan="1" colspan="1">Play/View</th>'+
	'<th id="yui-dt1-col11" class="yui-dt-col-purchaseDate" style="width: 14%;" rowspan="1" colspan="1">Date Purchased</th>'+
	'<th id="yui-dt1-col12" class="yui-dt-col-downloadDate" style="width: 17%;" rowspan="1" colspan="1">Last Downloaded</th>'+
	'<th id="yui-dt1-col12" class="yui-dt-col-downloadDate" style="width: 9%;" rowspan="1" colspan="1">Qty</th>'+
	'<th id="yui-dt1-col13" class="yui-dt-col-numDownloads yui-dt-last noprint" style="width: 19%;" rowspan="1" colspan="1">Download</th>'+
	'</tr></table><div>';
