1<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="iso-8859-1"%>
2<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
3
4<%--@elvariable id="model" type="java.util.Map"--%>
5
6<html><head>
7<%@ include file="head.jsp" %>
8<%@ include file="jquery.jsp" %>
9
10<c:if test="${not model.updateNowPlaying}">
11    <meta http-equiv="refresh" content="180;URL=nowPlaying.view?">
12</c:if>
13    <c:choose>
14        <c:when test="${model.customScrollbar}">
15            <link href="<c:url value="/style/customScrollbar.css"/>" rel="stylesheet">
16            <script type="text/javascript" src="<c:url value="/script/jquery.mousewheel.min.js"/>"></script>
17            <script type="text/javascript" src="<c:url value="/script/jquery.mCustomScrollbar.concat.min.js"/>"></script>
18        </c:when>
19        <c:otherwise>
20            <link href="<c:url value="/style/customScrollbarAuto.css"/>" rel="stylesheet">
21        </c:otherwise>
22    </c:choose>
23	<script type="text/javascript" src="<c:url value="/script/scripts.js"/>"></script>
24	<script type="text/javascript" src="<c:url value="/dwr/engine.js"/>"></script>
25    <script type="text/javascript" src="<c:url value="/dwr/interface/starService.js"/>"></script>
26	<script type="text/javascript" src="<c:url value="/dwr/interface/lovedTrackService.js"/>"></script>
27	<script type="text/javascript" src="<c:url value="/dwr/interface/multiService.js"/>"></script>
28	<script type="text/javascript" src="<c:url value="/dwr/interface/playlistService.js"/>"></script>
29
30    <script type="text/javascript" src="<c:url value="/script/jquery-migrate-1.2.1.min.js"/>"></script>
31    <script type='text/javascript' src="<c:url value="/script/jquery.scrollTo-1.4.2.js"/>"></script>
32    <script type='text/javascript' src="<c:url value="/script/jquery.dropdownReplacement-0.5.3.js"/>"></script>
33	<script type="text/javascript" src="<c:url value="/script/fancyzoom/FancyZoom.js"/>"></script>
34	<script type="text/javascript" src="<c:url value="/script/fancyzoom/FancyZoomHTML.js"/>"></script>
35	<script type="text/javascript" src="<c:url value="/script/lightview/lightview.js"/>"></script>
36	<link rel="stylesheet" type="text/css" href="<c:url value="/style/lightview/lightview.css"/>"></script>
37
38	<style type="text/css">
39	    .coverart { float: left; padding-left:0px; padding-right:5px; padding-bottom:10px }
40
41		.maincontrol .fa {
42			padding: 2px;
43		}
44
45	</style>
46    <link rel="stylesheet" href="<c:url value="/style/jquery.dropdownReplacement.css"/>" type="text/css">
47</head>
48<body class="mainframe bgcolor1" onload="init();" >
49
50<div id="content_main" class="content_main">
51<!-- CONTENT -->
52
53<madsonic:url value="createShare.view" var="shareUrl">
54    <madsonic:param name="id" value="${model.dir.id}"/>
55</madsonic:url>
56<madsonic:url value="download.view" var="downloadUrl">
57    <madsonic:param name="id" value="${model.dir.id}"/>
58</madsonic:url>
59<madsonic:url value="appendPlaylist.view" var="appendPlaylistUrl">
60    <madsonic:param name="id" value="${model.dir.id}"/>
61</madsonic:url>
62
63
64<c:if test="${model.dir.album}">
65	<script type="text/javascript">
66    $(document).ready(function() {
67        $("#moreActions").dropdownReplacement({selectCssWidth: 190, optionsDisplayNum: 10, onSelect : function(value, text, selectIndex){ actionSelected(value); }});
68    });
69    </script>
70</c:if>
71
72<script type="text/javascript" language="javascript">
73    function init() {
74
75        setupZoom('<c:url value="/"/>');
76
77        $("#dialog-select-playlist").dialog({resizable: true, width:450, height:400, modal: false, autoOpen: false,
78            buttons: {
79                "<fmt:message key="common.cancel"/>": function() {
80                    $(this).dialog("close");
81                }
82            }});
83
84        RefreshMediaType();
85
86        <c:if test="${model.dir.mediaType ne 'ALBUM'}">
87            <c:if test="${model.showArtistInfo}">
88            loadArtistInfo();
89            </c:if>
90        </c:if>
91
92        <c:if test="${model.dir.mediaType eq 'ALBUM'}">
93            <c:if test="${model.showArtistInfo}">
94                loadAlbumInfo();
95            </c:if>
96        </c:if>
97
98        loadArtistTopTracks();
99
100    }
101
102      function loadArtistInfo() {
103            multiService.getMainArtistInfo('${model.dir.id}', 8, function (artistInfo) {
104
105                if (artistInfo.similarArtists.length > 0) {
106                    var html = "";
107                    for (var i = 0; i < artistInfo.similarArtists.length; i++) {
108                        html += "<a href='main.view?id=" + artistInfo.similarArtists[i].mediaFileId + "' target='main'>" +
109                                escapeHtml(artistInfo.similarArtists[i].artistName) + "</a>";
110                        if (i < artistInfo.similarArtists.length - 1) {
111                            html += " <span class='similar-artist-divider'><img src='icons/default/sep.png'></span> ";
112                        }
113                    }
114                    $("#similarArtists").append(html);
115                    $("#similarArtists").show();
116                    $("#similarArtistsTitle").show();
117                    $("#similarArtistsRadio").show();
118                    $("#placeholder").show();
119                }
120
121                if (artistInfo.artistBio && artistInfo.artistBio.biography) {
122                $("#artistBio").append("<img src='<c:url value='/icons/default/artist.png'/>' style='width:16px;padding-right:4px'>");
123                $("#artistBio").append(artistInfo.artistBio.biography);
124                $("#artistBio").show();
125
126                    if (artistInfo.artistBio.mediumImageUrl) {
127                        $("#artistImage").attr("src", artistInfo.artistBio.largeImageUrl);
128                        $("#artistImageZoom").attr("href", artistInfo.artistBio.largeImageUrl);
129                        $("#artistImage").attr("src", artistInfo.artistBio.smallImageUrl);
130                        $("#artistImage").show();
131                    }
132                }
133            });
134        }
135
136    function loadAlbumInfo() {
137
138        multiService.getAlbumInfo('${model.dir.id}', 8, function (albumInfo) {
139
140            var artistInfo = albumInfo.artistInfo;
141
142                if (artistInfo.similarArtists.length > 0) {
143                    var html = "";
144                    for (var i = 0; i < artistInfo.similarArtists.length; i++) {
145                        html += "<a href='main.view?id=" + artistInfo.similarArtists[i].mediaFileId + "' target='main'>" +
146                                escapeHtml(artistInfo.similarArtists[i].artistName) + "</a>";
147                        if (i < artistInfo.similarArtists.length - 1) {
148                            html += " <span class='similar-artist-divider'><img src='icons/default/sep.png'></span> ";
149                        }
150                    }
151                    $("#similarArtists").append(html);
152                    $("#similarArtists").show();
153                    $("#similarArtistsTitle").show();
154                    $("#similarArtistsRadio").show();
155                    $("#placeholder").show();
156                }
157
158            if (artistInfo.artistBio && artistInfo.artistBio.biography) {
159            $("#artistBio").append("<img src='<c:url value='/icons/default/artist.png'/>' style='width:16px;padding-right:4px'>");
160            $("#artistBio").append(artistInfo.artistBio.biography);
161            $("#artistBio").show();
162
163                if (artistInfo.artistBio.mediumImageUrl) {
164                    $("#artistImage").attr("src", artistInfo.artistBio.largeImageUrl);
165                    $("#artistImageZoom").attr("href", artistInfo.artistBio.largeImageUrl);
166                    $("#artistImage").attr("src", artistInfo.artistBio.smallImageUrl);
167                    $("#artistImage").show();
168                }
169            }
170
171            if (albumInfo.notes) {
172                $("#albumBio").append("<img src='<c:url value='/icons/default/home.png'/>' style='width:16px;padding-right:4px'>");
173                $("#albumBio").append(albumInfo.notes);
174                $("#albumBio").show();
175            }
176        });
177    }
178
179    function loadArtistTopTracks() {
180        multiService.getTopTrackInfo('${model.dir.id}', function (topTrackInfo) {
181                if (topTrackInfo != null) {
182                    $("#topTrackResult").append("(" + topTrackInfo.topPlayedfound + "|" + topTrackInfo.toplastFMfound + ")");
183                    $("#playTopTrack").stop(1,1).fadeIn(500);
184                    $("#addTopTrack").stop(1,1).fadeIn(500);
185                }
186            });
187        }
188
189    function actionSelected(id) {
190        var selectedIndexes = getSelectedIndexes();
191
192        if (id == "top") {
193            return;
194        } else if (id == "selectAll") {
195            selectAll(true);
196        } else if (id == "selectNone") {
197            selectAll(false);
198        } else if (id == "share" && selectedIndexes != "") {
199            parent.frames.main.location.href = "${shareUrl}&" + selectedIndexes;
200        } else if (id == "download" && selectedIndexes != "") {
201            location.href = "${downloadUrl}&" + getSelectedIndexes();
202        } else if (id == "addNext" && selectedIndexes != "") {
203            onAddSelectedNext();
204        } else if (id == "addLast" && selectedIndexes != "") {
205            onAddSelectedLast();
206        } else if (id == "appendPlaylist" && selectedIndexes != "") {
207            onAppendPlaylist();
208        } else if (id == "savePlaylist") {
209            onSavePlaylist();
210    } else if (id == "savePlaylistNamed") {
211            onSavePlaylistNamed();
212        }
213        $("#moreActions").prop("selectedIndex", 0);
214    }
215
216    function getSelectedIndexes() {
217        var result = "";
218        for (var i = 0; i < ${fn:length(model.children)}; i++) {
219            var checkbox = $("#songIndex" + i);
220            if (checkbox != null  && checkbox.is(":checked")) {
221                result += "i=" + i + "&";
222            }
223        }
224        return result;
225    }
226
227    function selectAll(b) {
228        for (var i = 0; i < ${fn:length(model.children)}; i++) {
229            var checkbox = $("#songIndex" + i);
230            if (checkbox != null) {
231                if (b) {
232                    checkbox.attr("checked", "checked");
233                } else {
234                    checkbox.removeAttr("checked");
235                }
236            }
237        }
238    }
239
240    function toggleStar(mediaFileId, element) {
241        starService.star(mediaFileId, !$(element).hasClass("fa-star"));
242        $(element).toggleClass("fa-star fa-star-o starred");
243    }
244
245    function toggleLoved(mediaFileId, element) {
246        lovedTrackService.love(mediaFileId, !$(element).hasClass("fa-heart"));
247        $(element).toggleClass("fa-heart fa-heart-o loved");
248    }
249
250    function onAppendPlaylist() {
251        playlistService.getWritablePlaylists(playlistCallback);
252    }
253
254    function playlistCallback(playlists) {
255        $("#dialog-select-playlist-list").empty();
256        for (var i = 0; i < playlists.length; i++) {
257            var playlist = playlists[i];
258            $("<p class='dense'><b><a href='#' onclick='appendPlaylist(" + playlist.id + ")'>" + playlist.name + "</a></b></p>").appendTo("#dialog-select-playlist-list");
259        }
260        $("#dialog-select-playlist").dialog("open");
261    }
262
263    function appendPlaylist(playlistId) {
264        $("#dialog-select-playlist").dialog("close");
265
266        var mediaFileIds = new Array();
267        for (var i = 0; i < ${fn:length(model.children)}; i++) {
268            var checkbox = $("#songIndex" + i);
269            if (checkbox && checkbox.is(":checked")) {
270                mediaFileIds.push($("#songId" + i).html());
271            }
272        }
273        playlistService.appendToPlaylist(playlistId, mediaFileIds, function (){});
274        parent.main.location.href = "playlist.view?id=" + playlistId;
275    }
276
277    // --------------------------------------------
278    function onSavePlaylist() {
279        selectAll(true);
280        var mediaFileIds = new Array();
281        for (var i = 0; i < "${fn:length(model.children)}"; i++) {
282            var checkbox = $("#songIndex" + i);
283            if (checkbox && checkbox.is(":checked")) {
284                mediaFileIds.push($("#songId" + i).html());
285            }
286        }
287
288        playlistService.createPlaylistForMain(mediaFileIds, null, function (playlistId) {
289            // parent.left.updatePlaylists();
290            parent.main.location.href = "playlist.view?id=" + playlistId;
291            $().toastmessage("showSuccessToast", "<fmt:message key="playlist.toast.saveasplaylist"/>");
292        });
293    }
294
295    // --------------------------------------------
296    function onSavePlaylistNamed() {
297
298        selectAll(true);
299        var mediaFileIds = new Array();
300        var PlaylistName = "${model.artist} - ${model.album}";
301        for (var i = 0; i < ${fn:length(model.children)}; i++) {
302            var checkbox = $("#songIndex" + i);
303            if (checkbox && checkbox.is(":checked")) {
304                mediaFileIds.push($("#songId" + i).html());
305            }
306        }
307
308        playlistService.createPlaylistForMain(mediaFileIds, PlaylistName, function (playlistId) {
309            // parent.left.updatePlaylists();
310            parent.main.location.href = "playlist.view?id=" + playlistId;
311            $().toastmessage("showSuccessToast", "<fmt:message key="playlist.toast.saveasplaylist"/>");
312        });
313    }
314
315    // --------------------------------------------
316    function onAddSelectedNext() {
317        var mediaFileIds = new Array();
318        for (var i = 0; i < ${fn:length(model.children)}; i++) {
319            var checkbox = $("#songIndex" + i);
320            if (checkbox && checkbox.is(":checked")) {
321                mediaFileIds.push($("#songId" + i).html());
322            }
323        }
324        parent.playQueue.onAddSelectedNext(mediaFileIds);
325        $().toastmessage("showSuccessToast", "added next to PlayQueue");
326    }
327
328    // --------------------------------------------
329    function onAddSelectedLast() {
330        var mediaFileIds = new Array();
331        for (var i = 0; i < ${fn:length(model.children)}; i++) {
332            var checkbox = $("#songIndex" + i);
333            if (checkbox && checkbox.is(":checked")) {
334                mediaFileIds.push($("#songId" + i).html());
335            }
336        }
337        parent.playQueue.onAddSelectedLast(mediaFileIds);
338        $().toastmessage("showSuccessToast", "added last to PlayQueue");
339    }
340
341    // --------------------------------------------
342    function onPlayAll() {
343
344        var mediaFileIds = new Array();
345        ${model.ids}.forEach(function(entry) {
346        mediaFileIds.push(entry);
347        });
348        parent.playQueue.onPlayAll(mediaFileIds);
349        $().toastmessage("showSuccessToast", "Play all entries");
350    }
351
352    // --------------------------------------------
353    function onAddAll() {
354
355        var mediaFileIds = new Array();
356        ${model.ids}.forEach(function(entry) {
357        mediaFileIds.push(entry);
358        });
359        parent.playQueue.onAddAll(mediaFileIds);
360        $().toastmessage("showSuccessToast", "Add all entries");
361    }
362
363
364    // --------------------------------------------
365    function onPlayRandom() {
366
367        var mediaFileIds = new Array();
368        ${model.ids}.forEach(function(entry) {
369        mediaFileIds.push(entry);
370        });
371
372     // parent.playQueue.onAddAll(mediaFileIds);
373        parent.playQueue.onPlayRandomAll(mediaFileIds, 30);
374        $().toastmessage("showSuccessToast", "Play Random");
375    }
376
377    // --------------------------------------------
378    function PlayTopTrack() {
379
380        var mediaFileIds = new Array();
381        ${model.ids}.forEach(function(entry) {
382        mediaFileIds.push(entry);
383        });
384        parent.playQueue.onPlayTopTrack("${model.artist}");
385        $().toastmessage("showSuccessToast", "Play ${model.topPlayedfound} Top-Tracks");
386    }
387
388    // --------------------------------------------
389    function AddTopTrack() {
390
391        var mediaFileIds = new Array();
392        ${model.ids}.forEach(function(entry) {
393        mediaFileIds.push(entry);
394        });
395        parent.playQueue.onAddTopTrack("${model.artist}");
396        $().toastmessage("showSuccessToast", "Add ${model.topPlayedfound} Top-Tracks");
397    }
398
399
400    function playSimilar() {
401        parent.playQueue.onPlaySimilar(${model.dir.id}, 50);
402        $().toastmessage("showSuccessToast", "Play Similar Artist");
403    }
404
405
406    // --------------------------------------------
407    function onToastmessage(type, text) {
408        $().toastmessage(type, text);
409    }
410
411
412    // --------------------------------------------
413    function showAllAlbums() {
414        $("#showAllButton").hide();
415        $(".coverart").show();
416    }
417
418function RefreshMediaType() {
419
420//    console.log("--RefreshGUI--");
421    var mediatype = document.getElementsByName("mediatype");
422    for (var i=0; i < mediatype.length; i++) {
423        if (mediatype[i].checked == true) {
424    //        console.log("The " + (i + 1) + ". radio button is checked");
425        }
426    }
427    if ("${model.dir.mediaType}" == "MULTIARTIST") { mediatype[0].checked=true; }
428    if ("${model.dir.mediaType}" == "ARTIST")        { mediatype[1].checked=true; }
429    if ("${model.dir.mediaType}" == "DIRECTORY")   { mediatype[2].checked=true; }
430    if ("${model.dir.mediaType}" == "VIDEOSET")    { mediatype[3].checked=true; }
431    if ("${model.dir.mediaType}" == "ALBUMSET")    { mediatype[4].checked=true; }
432    if ("${model.dir.mediaType}" == "ALBUM")       { mediatype[5].checked=true; }
433    if ("${model.dir.mediaTypeOverride}"=="false") { mediatype[6].checked=true; }
434    }
435</script>
436
437<c:if test="${model.updateNowPlaying}">
438    <script type="text/javascript" language="javascript">
439        // Variable used by javascript in playlist.jsp
440        var updateNowPlaying = true;
441    </script>
442</c:if>
443
444    <h1>
445
446    <a id="artistImageZoom" rel="zoom" href="javascript:void(0)">
447        <img id="artistImage" class="circle" alt="" src="<c:url value="/icons/default/default_artist_alpha.png"/>" style="max-width:48px; max-height:48px">
448    </a>
449
450
451    <span class="icon-wrapper">
452    <i class="fa ${not empty model.dir.starredDate ? 'fa-star starred' : 'fa-star-o'} clickable custom-icon-header" onclick="toggleStar(${param.id}, this)"title="<fmt:message key="common.star"/>"><span class="fix-editor">&nbsp;</span></i></span>
453
454    <c:forEach items="${model.ancestors}" var="ancestor">
455        <madsonic:url value="main.view" var="ancestorUrl">
456            <madsonic:param name="id" value="${ancestor.id}"/>
457        </madsonic:url>
458
459    <c:choose>
460        <c:when test="${fn:startsWith(ancestor.name,'[')}">
461            <a href="${ancestorUrl}">${fn:split(ancestor.name,']')[1]}</a> &raquo;
462        </c:when>
463        <c:otherwise>
464            <a href="${ancestorUrl}">${ancestor.name}</a> &raquo;
465        </c:otherwise>
466    </c:choose>
467    </c:forEach>
468
469    <c:choose>
470        <c:when test="${not empty model.dir.albumSetName}">
471            ${model.dir.albumSetName}
472        </c:when>
473        <c:otherwise>
474            ${model.dir.name}
475        </c:otherwise>
476    </c:choose>
477
478    <c:if test="${model.dir.album and model.averageRating gt 0}">
479    <div style="display:inline;">
480    <span display="inline" class="detail" style="padding-left:1.5em;"}>
481        <c:import url="rating.jsp">
482            <c:param name="id" value="${model.dir.id}"/>
483            <c:param name="path" value="${model.dir.path}"/>
484            <c:param name="readonly" value="true"/>
485            <c:param name="rating" value="${model.averageRating}"/>
486        </c:import>
487        </span>
488        </div>
489    </c:if>
490    </h1>
491
492<c:if test="${not model.partyMode}">
493<h2>
494<div class="maincontrol">
495    <c:if test="${model.navigateUpAllowed}">
496        <madsonic:url value="main.view" var="upUrl">
497            <madsonic:param name="id" value="${model.parent.id}"/>
498        </madsonic:url>
499        <a href="${upUrl}"> <i class="fa fa-arrow-up accent"></i> <fmt:message key="main.up"/></a>
500        <c:set var="needSep" value="true"/>
501    </c:if>
502
503    <c:if test="${model.user.streamRole}">
504        <c:if test="${needSep}"> <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"></c:if>
505
506        <a href="#" onclick="onPlayAll();"> <i class="fa fa-play accent"></i> <fmt:message key="main.playall"/></a>
507
508        <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;">
509        <a href="#" onclick="onPlayRandom()"> <i class="fa fa-random accent"></i> <fmt:message key="main.playrandom"/> </a>
510
511        <c:if test="${model.lastFMTopTrackSearch}">
512            <c:if test="${model.user.lastFMRole}">
513                <c:if test="${not model.dir.album}">
514                    <c:if test="${model.dir.mediaType ne 'VIDEOSET'}">
515                    <span id="playTopTrack" style="display:none;">
516                    <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;">
517                    <a href="#" onclick="PlayTopTrack()"> <i class="fa fa-play accent"></i> <fmt:message key="main.playtoptrack"/>
518                    <span style="font-size:80% !important;" id="topTrackResult"></span>
519                    </a> <a href="#" onclick="parent.playQueue.onUpdateTopTrack(&quot;${model.artist}&quot;,${model.dir.id});"><i class="fa fa-refresh accent"></i></a>
520                    </span>
521                    </c:if>
522                </c:if>
523            </c:if>
524        </c:if>
525    <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;">
526
527    <a "similarArtistsRadio" href="javascript:playSimilar()"> <i class="fa fa-play accent"></i> <fmt:message key="main.playradio"/> <span style="font-size:75% !important;"></span></a>
528    <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;">
529    <a href="#" onclick="onAddAll()"> <i class="fa fa-plus-circle accent"></i> <fmt:message key="main.addall"/></a>
530
531        <c:if test="${model.lastFMTopTrackSearch}">
532            <c:if test="${model.user.lastFMRole}">
533                <c:if test="${not model.dir.album}">
534                    <c:if test="${model.dir.mediaType ne 'VIDEOSET'}">
535                    <span id="addTopTrack" style="display:none;">
536                    <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;">
537                    <a href="#" onclick="AddTopTrack()"> <i class="fa fa-plus-circle accent"></i> <fmt:message key="main.addtoptrack"/></a>
538                    </span>
539                    </c:if>
540                </c:if>
541            </c:if>
542        </c:if>
543        <c:set var="needSep" value="true"/>
544    </c:if>
545
546    <c:if test="${model.dir.album}">
547
548        <c:if test="${model.user.downloadRole}">
549            <madsonic:url value="download.view" var="downloadUrl">
550                <madsonic:param name="id" value="${model.dir.id}"/>
551            </madsonic:url>
552            <c:if test="${needSep}"> <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"></c:if>
553            <a href="${downloadUrl}"> <i class="fa fa-download accent"></i> <fmt:message key="common.download"/> </a>
554            <c:set var="needSep" value="true"/>
555        </c:if>
556
557        <c:if test="${model.user.coverArtRole}">
558            <madsonic:url value="editTags.view" var="editTagsUrl">
559                <madsonic:param name="id" value="${model.dir.id}"/>
560            </madsonic:url>
561            <c:if test="${needSep}"><img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"></c:if>
562            <a href="${editTagsUrl}"> <i class="fa fa-code accent"></i> <fmt:message key="main.tags"/> </a>
563            <c:set var="needSep" value="true"/>
564        </c:if>
565
566    </c:if>
567
568    <c:if test="${model.user.commentRole}">
569        <c:if test="${needSep}"><img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"></c:if>
570        <a href="javascript:toggleComment()"> <i class="fa fa-pencil-square-o accent"></i> <fmt:message key="main.comment"/></a>
571    <c:set var="needSep" value="true"/>
572    </c:if>
573
574    <c:if test="${model.showCreateLink}">
575        <c:if test="${model.user.adminRole}">
576            <c:if test="${needSep}"><img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"></c:if>
577            <a href="javascript:toggleCreateURL()"> <i class="fa fa-link accent"></i>  <fmt:message key="main.createlink"/></a>
578        </c:if>
579    </c:if>
580
581    <c:if test="${model.showMediaType}">
582        <c:if test="${model.user.coverArtRole}">
583            <c:if test="${needSep}"><img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"></c:if>
584            <a href="javascript:toggleMediaType()"> <i class="fa fa-bars accent"></i>  <fmt:message key="main.mediatype"/></a>
585        </c:if>
586    </c:if>
587
588    <c:if test="${model.user.shareRole and model.dir.mediaType ne 'ALBUMSET'}">
589        <c:if test="${needSep}"><img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"></c:if>
590			<a href="${shareUrl}"> <i class="fa fa-share accent"></i> <fmt:message key="main.sharealbum"/></a>
591		<c:set var="needSep" value="true"/>
592
593    </c:if>
594</div>
595</h2>
596
597</c:if>
598<c:if test="${not model.dir.album}">
599<c:if test="${model.user.searchRole}">
600
601        <div class="detail">
602        <div class="maincontrol">
603            <madsonic:url value="http://www.google.com/search" var="googleUrl" encoding="UTF-8">
604                <madsonic:param name="q" value="\"${model.dir.name}\""/>
605            </madsonic:url>
606            <madsonic:url value="http://en.wikipedia.org/wiki/Special:Search" var="wikipediaUrl" encoding="UTF-8">
607                <madsonic:param name="search" value="\"${model.dir.name}\""/>
608                <madsonic:param name="go" value="Go"/>
609            </madsonic:url>
610            <madsonic:url value="http://www.discogs.com/search" var="discogsUrl" encoding="UTF-8">
611                <madsonic:param name="q" value="${model.dir.name}"/>
612                <madsonic:param name="type" value="artist"/>
613            </madsonic:url>
614            <madsonic:url value="http://www.allmusic.com/search/artists/${model.dir.name}" var="allmusicUrl">
615            </madsonic:url>
616            <madsonic:url value="http://www.musik-sammler.de/search/${model.dir.name}/" var="MusiksammlerUrl" encoding="UTF-8">
617                <madsonic:param name="type" value="artist"/>
618            </madsonic:url>
619            <madsonic:url value="http://www.laut.de/Suche" var="lautUrl" encoding="UTF-8">
620                <madsonic:param name="q" value="${model.dir.name}"/>
621            </madsonic:url>
622            <madsonic:url value="http://www.last.fm/search" var="lastFmUrl" encoding="UTF-8">
623                <madsonic:param name="q" value="\"${model.dir.name}\""/>
624                <madsonic:param name="type" value="artist"/>
625            </madsonic:url>
626            <madsonic:url value="http://musicbrainz.org/search" var="musicbrainzUrl" encoding="UTF-8">
627                <madsonic:param name="query" value="${model.dir.name}"/>
628                <madsonic:param name="type" value="artist"/>
629            </madsonic:url>
630            <madsonic:url value="http://www.youtube.com/results" var="YoutubeUrl" encoding="UTF-8">
631                <madsonic:param name="search_query" value="${model.dir.name}"/>
632            </madsonic:url>
633
634            <span display="inline" class="detailcolor" style="margin-left: 10px;"><fmt:message key="top.search"/></span>
635
636            <a target="_blank" href="${googleUrl}"> <i class="fa fa-google accent" title="Search with Google"></i> Google</a>
637            <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;">
638
639            <a target="_blank" href="${wikipediaUrl}"> <i class="fa fa-wikipedia-w accent" title="Search with Wikipedia"></i> Wikipedia </a>
640            <img src="<spring:theme code="sepImage"/>" alt="">
641
642            <a target="_blank" href="${discogsUrl}"> <i class="fa fa-dot-circle-o accent" title="Search with Discogs"></i> Discogs</a>
643            <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;">
644
645            <a target="_blank" href="${musicbrainzUrl}"> <i class="fa fa-music accent" title="Search with MusicBrainz"></i> MusicBrainz</a>
646            <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;">
647
648            <a target="_blank" href="${lastFmUrl}"> <i class="fa fa-lastfm accent" title="Search with Last.FM"></i> Last.FM</a>
649            <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;">
650
651            <a target="_blank" href="${YoutubeUrl}"> <i class="fa fa-youtube-play accent" title="Search with Youtube"></i> Youtube</a>
652            <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;">
653
654            <a target="_blank" href="${allmusicUrl}"><img src="<spring:theme code="allmusicImage"/>" alt="" title="Search with Allmusic"> Allmusic</a>
655            <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;">
656
657            <a target="_blank" href="${MusiksammlerUrl}"> <i class="fa fa-search accent" title="Search with MusikSammler"></i> MusikSammler</a>
658            <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;">
659
660            <a target="_blank" href="${lautUrl}"><img src="<spring:theme code="lautImage"/>" alt="" title="Search with Laut"> Laut</a>
661    </div>
662</div>
663</c:if>
664</c:if>
665
666<c:if test="${model.dir.album}">
667
668    <c:if test="${model.user.searchRole}">
669
670    <div class="detail">
671        <div class="maincontrol" style="display:inline;padding-left:2px">
672
673        <c:if test="${not empty model.artist or not empty model.album}">
674            <madsonic:url value="http://www.google.com/search" var="googleUrl" encoding="UTF-8">
675                <madsonic:param name="q" value="\"${model.artist}\" \"${model.album}\""/>
676            </madsonic:url>
677            <madsonic:url value="http://en.wikipedia.org/wiki/Special:Search" var="wikipediaUrl" encoding="UTF-8">
678                <madsonic:param name="profile" value="default"/>
679                <madsonic:param name="search" value="album +${model.artist} +${model.album}"/>
680                <madsonic:param name="fulltext" value="Search"/>
681                <madsonic:param name="go" value="Go"/>
682            </madsonic:url>
683            <madsonic:url value="http://www.discogs.com/search" var="discogsUrl" encoding="UTF-8">
684                <madsonic:param name="q" value="${model.album}"/>
685                <madsonic:param name="type" value="release"/>
686            </madsonic:url>
687            <madsonic:url value="http://www.allmusic.com/search/albums/${model.album}" var="allmusicUrl">
688            </madsonic:url>
689            <madsonic:url value="http://www.musik-sammler.de/search/${model.album}/" var="MusiksammlerUrl" encoding="UTF-8">
690                <madsonic:param name="type" value="album"/>
691            </madsonic:url>
692            <madsonic:url value="http://www.laut.de/Suche" var="lautUrl" encoding="UTF-8">
693                <madsonic:param name="q" value="${model.artist} ${model.album}"/>
694            </madsonic:url>
695            <madsonic:url value="http://www.last.fm/search" var="lastFmUrl" encoding="UTF-8">
696                <madsonic:param name="q" value="\"${model.artist}\" \"${model.album}\""/>
697                <madsonic:param name="type" value="album"/>
698            </madsonic:url>
699            <madsonic:url value="http://musicbrainz.org/search" var="musicbrainzUrl" encoding="UTF-8">
700                <madsonic:param name="query" value="${model.album}"/>
701                <madsonic:param name="type" value="release"/>
702            </madsonic:url>
703            <madsonic:url value="http://www.youtube.com/results" var="YoutubeUrl" encoding="UTF-8">
704                <madsonic:param name="search_query" value="${model.artist} ${model.album}"/>
705            </madsonic:url>
706            <span display="inline" class="detailcolor"><fmt:message key="top.search"/></span>
707            <a target="_blank" href="${googleUrl}"> <i class="fa fa-google accent" title="Search with Google"></i> Google</a>
708            <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;">
709
710            <a target="_blank" href="${wikipediaUrl}"> <i class="fa fa-wikipedia-w accent" title="Search with Wikipedia"></i> Wikipedia </a>
711            <img src="<spring:theme code="sepImage"/>" alt="">
712
713            <a target="_blank" href="${discogsUrl}"> <i class="fa fa-dot-circle-o accent" title="Search with Discogs"></i> Discogs</a>
714            <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;">
715
716            <a target="_blank" href="${musicbrainzUrl}"> <i class="fa fa-music accent" title="Search with MusicBrainz"></i> MusicBrainz</a>
717            <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;">
718
719            <a target="_blank" href="${lastFmUrl}"> <i class="fa fa-lastfm accent" title="Search with Last.FM"></i> Last.FM</a>
720            <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;">
721
722            <a target="_blank" href="${YoutubeUrl}"> <i class="fa fa-youtube-play accent" title="Search with Youtube"></i> Youtube</a>
723            <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;">
724
725            <a target="_blank" href="${allmusicUrl}"><img src="<spring:theme code="allmusicImage"/>" alt="" title="Search with Allmusic"> Allmusic</a>
726            <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;">
727
728            <a target="_blank" href="${MusiksammlerUrl}"> <i class="fa fa-search accent" title="Search with MusikSammler"></i> MusikSammler</a>
729            <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;">
730
731            <a target="_blank" href="${lautUrl}"><img src="<spring:theme code="lautImage"/>" alt="" title="Search with Laut"> Laut</a>
732
733        </c:if>
734    </div>
735	<!--
736    <c:if test="${model.user.shareRole and model.dir.mediaType ne 'ALBUMSET'}">
737        <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;margin-right: 5px;">
738        <a href="${shareUrl}"><span class="detailcolor" style="margin-right: 5px;"><fmt:message key="main.sharealbum"/></span></a>
739        <a href="${shareUrl}"><img src="<spring:theme code="shareTwitterImage"/>" alt=""></a>
740        <a href="${shareUrl}"><img src="<spring:theme code="shareFacebookImage"/>" alt=""></a>
741        <a href="${shareUrl}"><img src="<spring:theme code="shareGooglePlusImage"/>" alt=""></a>
742    </c:if>
743	-->
744    </div>
745    </c:if>
746
747<div style="padding-top:0.8em;padding-bottom:1.0em;">
748
749    <select id="moreActions" name="moreActions" style="display:none">
750        <option value="top" selected="selected"><fmt:message key="main.more"/></option>
751        <option value="savePlaylist">Save as Playlist (Date)</option>
752        <option value="savePlaylistNamed">Save as Playlist (Named)</option>
753        <option value="selectAll"><fmt:message key="playlist.more.selectall"/></option>
754        <option value="selectNone"><fmt:message key="playlist.more.selectnone"/></option>
755        <c:if test="${model.user.shareRole}">
756        <option value="share"><fmt:message key="main.more.share"/></option>
757        </c:if>
758        <c:if test="${model.user.downloadRole}">
759        <option value="download"><fmt:message key="common.download"/></option>
760        </c:if>
761        <option value="appendPlaylist"><fmt:message key="playlist.append"/></option>
762        <option value="addNext">Add Next to PlayQueue</option>
763        <option value="addLast">Add Last to PlayQueue</option>
764    </select>
765
766    <c:if test="${model.user.commentRole}">
767    <span display="inline" class="detail" style="padding-left:1.5em;vertical-align: -webkit-baseline-middle;">
768        <c:import url="rating.jsp">
769            <c:param name="id" value="${model.dir.id}"/>
770            <c:param name="path" value="${model.dir.path}"/>
771            <c:param name="readonly" value="false"/>
772            <c:param name="rating" value="${model.userRating}"/>
773        </c:import>
774        </span>
775    </c:if>
776
777    <c:if test="${model.user.commentRole}">
778    <span display="inline" class="detail" style="padding-left:1.5em;vertical-align: -webkit-baseline-middle;">
779        <c:import url="hot.jsp">
780            <c:param name="id" value="${model.dir.id}"/>
781            <c:param name="flag" value="${model.hotRating}"/>
782        </c:import>
783        </span>
784    </c:if>
785</div>
786
787<span display="inline" class="detailcolor" style="padding-left:2px;margin-top:20px">
788
789<fmt:message key="main.playcount"><fmt:param value="${model.dir.playCount}"/></fmt:message>
790<c:if test="${not empty model.dir.lastPlayed}">
791    <fmt:message key="main.lastplayed">
792        <fmt:param><fmt:formatDate type="date" dateStyle="long" value="${model.dir.lastPlayed}"/></fmt:param>
793    </fmt:message>
794</c:if>
795</span>
796
797</c:if>
798
799<div id="createURLForm" display="inline" class="bgcolor2 detailcolor" style="display:none;margin-top:20px">
800    <form method="post" action="createURL.view">
801        <input type="hidden" name="action" value="create">
802        <input type="hidden" name="id" value="${model.dir.id}">
803        https://www.youtube.com/watch?v=
804        <input name="URL" size="15" value="mcixldqDIEQ">
805        <input name="title" size="35" value="Example YouTube Video">
806        <input type="submit" value="Create Link">
807    </form>
808</div>
809
810<div id="MediaTypeSwitch" class="bgcolor2" style="display:none;margin-top: 20px;">
811    <br>
812    <p class="info">Here you can override your current MediaFile-Type.</p>
813    <br>
814        <form method="post" action="setMediaFile.view">
815        <input type="hidden" name="id" value="${model.dir.id}">
816        <input type="hidden" name="action" value="setmediatype">
817        <input type="radio" name="mediatype" value="MULTIARTIST"> MULTIARTIST (Sorting on Title)<br>
818        <input type="radio" name="mediatype" value="ARTIST"> ARTIST<br>
819        <br>
820        <input type="radio" name="mediatype" value="DIRECTORY"> DIRECTORY<br>
821        <input type="radio" name="mediatype" value="VIDEOSET"> VIDEOSET <br>
822        <input type="radio" name="mediatype" value="ALBUMSET"> ALBUMSET <br>
823        <input type="radio" name="mediatype" value="ALBUM"> ALBUM <br>
824        <br>
825        <input type="radio" name="mediatype" value="AUTO"> AUTO<br>
826        <br>
827        <input type="submit" value="Update">
828    <br><br>
829    <span class="detailcolor">-- DEBUGINFO --</span><br><br>
830    <span class="detailcolordark">Media Id </span>
831    <span class="detailcolor">${model.dir.id} </span><br>
832    <span class="detailcolordark">Override </span>
833    <span class="detailcolor">${model.dir.mediaTypeOverride} </span><br>
834    <span class="detailcolordark">MediaType </span>
835    <span class="detailcolor">${model.dir.mediaType}</span>    <br>
836    <br>
837    </form>
838</div>
839
840<div id="comment" class="albumComment"><madsonic:wiki text="${model.dir.comment}"/></div>
841
842<div id="commentForm" class="bgcolor2" style="display:none;margin-top:20px;padding-bottom:10px;">
843    <form method="post" action="setMusicFileInfo.view">
844        <input type="hidden" name="action" value="comment">
845        <input type="hidden" name="id" value="${model.dir.id}">
846        <textarea name="comment" rows="8" cols="100">${model.dir.comment}</textarea>
847        <input type="submit" value="<fmt:message key="common.save"/>">
848    </form>
849    <fmt:message key="main.wiki"/>
850</div>
851
852<script type='text/javascript'>
853    function toggleComment() {
854        $("#commentForm").toggle();
855        $("#comment").toggle();
856    }
857
858    function toggleMediaType() {
859        $("#MediaTypeSwitch").toggle();
860    }
861
862    function toggleCreateURL() {
863        $("#createURLForm").toggle();
864    }
865
866</script>
867
868<c:if test="${model.user.adminRole}">
869    <c:if test="${model.showQuickEdit}">
870        <c:if test="${model.dir.mediaType eq 'ARTIST'} ">
871            <form method="post" action="setMediaFile.view">
872            <input type="hidden" name="id" value="${model.dir.id}">
873            <input type="hidden" name="action" value="setmediatype">
874            <input type="hidden" name="mediatype" checked value="ALBUMSET">
875            <input type="submit" value="Update to ALBUMSET">
876        </c:if>
877        <c:if test="${model.dir.mediaType eq 'ARTIST'}">
878            <form method="post" action="setMediaFile.view">
879            <input type="hidden" name="id" value="${model.dir.id}">
880            <input type="hidden" name="action" value="setmediatype">
881            <input type="hidden" name="mediatype" checked value="MULTIARTIST">
882            <input type="submit" value="Update to MULTIARTIST">
883            </c:if>
884        <c:if test="${model.dir.mediaType eq 'VIDEOSET'}">
885            <form method="post" action="setMediaFile.view">
886            <input type="hidden" name="id" value="${model.dir.id}">
887            <input type="hidden" name="action" value="setmediatype">
888            <input type="hidden" name="mediatype" checked value="ALBUMSET">
889            <input type="submit" value="Update to ALBUMSET">
890        </c:if>
891        <c:if test="${model.dir.mediaType ne 'VIDEOSET'}">
892            <form method="post" action="setMediaFile.view">
893            <input type="hidden" name="id" value="${model.dir.id}">
894            <input type="hidden" name="action" value="setmediatype">
895            <input type="hidden" name="mediatype" checked value="VIDEOSET">
896            <input type="submit" value="Update to VIDEOSET">
897        </c:if>
898        <c:if test="${model.dir.mediaType eq 'ALBUMSET' || model.dir.mediaType eq 'ALBUM' }">
899            <form method="post" action="setMediaFile.view">
900            <input type="hidden" name="id" value="${model.dir.id}">
901            <input type="hidden" name="action" value="setmediatype">
902            <input type="hidden" name="mediatype" checked value="ARTIST">
903            <input type="submit" value="Update to ARTIST">
904        </c:if>
905        <c:if test="${model.dir.mediaType ne 'ALBUM'}">
906            <form method="post" action="setMediaFile.view">
907            <input type="hidden" name="id" value="${model.dir.id}">
908            <input type="hidden" name="action" value="setmediatype">
909            <input type="hidden" name="mediatype" checked value="ALBUM">
910            <input type="submit" value="Update to ALBUM">
911        </c:if>
912        <c:if test="${model.dir.mediaType eq 'ARTIST' || model.dir.mediaType eq 'MULTIARTIST' }">
913            <form method="post" action="setMediaFile.view">
914            <input type="hidden" name="id" value="${model.dir.id}">
915            <input type="hidden" name="action" value="setmediatype">
916            <input type="hidden" name="mediatype" checked value="DIRETORY">
917            <input type="submit" value="Update to DIRETORY">
918        </c:if>
919        <span class="detailcolor">now: ${model.dir.mediaType}</span>
920    </c:if>
921</c:if>
922
923    <div style="position: absolute;top:0;right:10px;padding-top:20px;z-index:1000">
924        <Table>
925        <tr>
926            <td style="padding-left:0.2em; padding-bottom:0em;">
927            <%@ include file="viewSelector.jsp" %>
928            </td>
929        </tr>
930        </table>
931    </div>
932
933<table cellpadding="10" style="width:100%">
934<tr style="vertical-align:top;">
935
936    <c:if test="${model.viewAs eq 'list' or model.viewAs eq 'mixed' or model.viewAs eq 'grid' and model.dir.mediaType eq 'ALBUM'}">
937
938    <td style="vertical-align:top;min-width:360px;">
939        <table class="content" width="100%" style="border-collapse:collapse;white-space:nowrap">
940            <c:set var="cutoff" value="${model.visibility.captionCutoff}"/>
941            <c:forEach items="${model.children}" var="child" varStatus="loopStatus">
942                <%--@elvariable id="child" type="org.madsonic.domain.MediaFile"--%>
943                <c:choose>
944                    <c:when test="${loopStatus.count % 2 == 1}">
945                        <c:set var="htmlClass" value="class='bgcolor2'"/>
946                    </c:when>
947                    <c:otherwise>
948                        <c:set var="htmlClass" value=""/>
949                    </c:otherwise>
950                </c:choose>
951                <c:choose>
952                <c:when test="${model.dir.mediaType eq 'MULTIARTIST' or model.dir.mediaType eq 'VIDEOSET'}">
953                    <tr style="margin:0;padding:0;border:0;vertical-align: middle;">
954                    <td class="fit" >
955                    <c:import url="playAddDownload.jsp">
956                        <c:param name="id" value="${child.id}"/>
957                        <c:param name="video" value="true"/>
958                        <c:param name="playEnabled" value="${ (model.dir.mediaType eq 'VIDEOSET') and not child.directory}"/>
959                        <c:param name="playAddEnabled" value="false"/>
960                        <c:param name="addEnabled" value="false"/>
961                        <c:param name="downloadEnabled" value="false"/>
962                        <c:param name="artist" value="${fn:escapeXml(child.artist)}"/>
963                        <c:param name="title" value="${child.title}"/>
964                        <c:param name="starEnabled" value="${model.buttonVisibility.starredVisible}"/>
965                        <c:param name="starred" value="${not empty child.starredDate}"/>
966                        <c:param name="asTable" value="false"/>
967                        <c:param name="YoutubeEnabled" value="false"/>
968                    </c:import>
969                    </c:when>
970                    <c:otherwise>
971                    </td>
972                    <tr style="margin:0;padding:0;border:0">
973
974                    <td class="fit">
975                    <c:if test="${child.bookmarkPosition > 0}">
976                        <div class="icon-wrapper">
977                        <i class="fa fa-bookmark custom-icon starred" id="bookmarkSong" onclick="onToogleBookmark(this.id.substring(12) - 1)" title="<fmt:message key="common.bookmark"/>"><span class="fix-editor">&nbsp;</span></i></div>
978                    </c:if>
979                    </td>
980
981                    <c:if test="${child.rank > 0}">
982                        <td class="fit">
983                            <c:if test="${model.buttonVisibility.rankVisible}">
984                            <div class="icon-wrapper"><i class="fa custom-icon">
985
986                            <span class="custom-icon-rank starred" >
987                            <c:if test="${child.rank < 10}">0</c:if>${child.rank}<span class="fix-editor">&nbsp;</span></i>
988                            </span>
989                            </div>
990                            </c:if>
991                        </td>
992                    </c:if>
993
994
995                    <c:if test="${child.rank == 0}">
996                        <td class="fit" style="padding-right:0.25em;"></td>
997                    </c:if>
998
999                    <td class="fit">
1000                    <c:import url="playAddDownload.jsp">
1001                        <c:param name="id" value="${child.id}"/>
1002                        <c:param name="video" value="${child.video and model.player.web}"/>
1003                        <c:param name="playEnabled" value="${model.user.streamRole and not model.partyMode and model.buttonVisibility.playVisible}"/>
1004                        <c:param name="playAddEnabled" value="${model.user.streamRole and not model.partyMode and model.buttonVisibility.playAddVisible}"/>
1005                        <c:param name="playMoreEnabled" value="${model.user.streamRole and not model.partyMode and model.buttonVisibility.playMoreVisible}"/>
1006                        <c:param name="addEnabled" value="${model.user.streamRole and (not model.partyMode or not child.directory) and model.buttonVisibility.addContextVisible}"/>
1007                        <c:param name="addNextEnabled" value="${model.user.streamRole and (not model.partyMode or not child.directory) and model.buttonVisibility.addNextVisible}"/>
1008                        <c:param name="addLastEnabled" value="${model.user.streamRole and (not model.partyMode or not child.directory) and model.buttonVisibility.addLastVisible}"/>
1009                        <c:param name="downloadEnabled" value="${model.user.downloadRole and not model.partyMode and model.buttonVisibility.downloadVisible}"/>
1010                        <c:param name="artist" value="${fn:escapeXml(child.artist)}"/>
1011                        <c:param name="title" value="${child.title}"/>
1012                        <c:param name="starEnabled" value="${model.buttonVisibility.starredVisible}"/>
1013                        <c:param name="loveEnabled" value="${model.buttonVisibility.lovedVisible and model.dir.mediaType ne 'ARTIST' and model.dir.mediaType ne 'ALBUMSET'}"/>
1014                        <c:param name="starred" value="${not empty child.starredDate}"/>
1015                        <c:param name="loved" value="${not empty child.lovedDate}"/>
1016                        <c:param name="asTable" value="false"/>
1017                        <c:param name="YoutubeEnabled" value="${model.buttonVisibility.youtubeVisible}"/>
1018                        <c:param name="LyricEnabled" value="${model.buttonVisibility.lyricVisible}"/>
1019                        </c:import>
1020                        </td>
1021
1022                    </c:otherwise>
1023
1024                </c:choose>
1025
1026                    <c:choose>
1027                        <c:when test="${child.directory}">
1028                            <madsonic:url value="main.view" var="childUrl">
1029                                <madsonic:param name="id" value="${child.id}"/>
1030                            </madsonic:url>
1031
1032                            <td class="fit" colspan="1">
1033                                <c:if test="${child.mediaType eq 'ALBUMSET' and model.dir.mediaType ne 'VIDEOSET'}">
1034                                     <div class="icon-wrapper" style="margin-top:0px;">
1035                                     <i class="fa fa-dot-circle-o custom-icon" title="<fmt:message key="common.albumset"/>"></i>
1036                                     </div>
1037                                </c:if>
1038                            </td>
1039
1040                            <c:choose>
1041                                <c:when test="${model.showAlbumYear}">
1042                                    <td class="fit" style="padding-left:1em;padding-right:1em">
1043                                    <span class="detailyear"><c:if test="${not empty child.year}">[${child.year}]</c:if></span></td>
1044                                </c:when>
1045                                <c:otherwise>
1046                                </c:otherwise>
1047                            </c:choose>
1048
1049                            <c:if test="${not empty child.year}">
1050                                <c:if test="${not empty child.albumSetName}">
1051                                    <td class="fit" style="padding-left:0.5em;padding-right:1.5em" colspan="5">
1052                                        <a href="${childUrl}" title="${child.albumSetName}"><span class="album" style="white-space:nowrap;vertical-align:bottom;"><str:truncateNicely upper="${cutoff}">${child.albumSetName}</str:truncateNicely></span></a>
1053
1054                                    <c:if test="${child.newAdded}">
1055                                        <img id="newaddedImage" style="margin-left:5px;" src="<spring:theme code="newaddedImage"/>" width="14" height="14" title="new added">
1056                                    </c:if>
1057                                    </td>
1058
1059                                </c:if>
1060                                <c:if test="${not empty child.albumName and empty child.albumSetName}">
1061                                    <td class="fit" style="padding-left:0.5em;padding-right:1.5em" colspan="5">
1062                                        <a href="${childUrl}" title="${child.albumName}"><span class="album" style="white-space:nowrap;vertical-align: bottom;"><str:truncateNicely upper="${cutoff}">${child.albumSetName}</str:truncateNicely></span></a>
1063                                        <img id="cdImage" src="<spring:theme code="CDImage"/>" alt="Albumset">
1064                                    </td>
1065                                </c:if>
1066                            </c:if>
1067
1068                            <c:if test="${empty child.year}">
1069                                <c:if test="${not empty child.name}">
1070                                    <td class="fit" style="padding-left:0.5em;padding-right:0.5em" colspan="5">
1071                                        <a href="${childUrl}" title="${child.albumSetName}"><span class="album" style="white-space:nowrap;"><str:truncateNicely upper="${cutoff}">${child.name}</str:truncateNicely></span></a>
1072                                    </td>
1073                                </c:if>
1074                            </c:if>
1075                        </c:when>
1076
1077                        <c:otherwise>
1078
1079                            <c:if test="${model.dir.mediaType ne 'VIDEOSET'}">
1080                            <td class="fit" style="padding-left:0.5em;padding-right:0.5em;"><input type="checkbox" class="checkbox" id="songIndex${loopStatus.count - 1}">
1081                                <span id="songId${loopStatus.count - 1}" style="display: none">${child.id}</span></td>
1082                            </c:if>
1083
1084                            <c:if test="${model.visibility.discNumberVisible}">
1085                                <td class="fit"  style="padding-right:1.5em;text-align:right">
1086                                    <span class="detail">${child.discNumber}</span>
1087                                </td>
1088                            </c:if>
1089
1090                            <c:if test="${model.visibility.trackNumberVisible}">
1091                                <td class="fit"  style="padding-right:0.5em;text-align:right">
1092                                    <span class="detail">${child.trackNumber}</span>
1093                                </td>
1094                            </c:if>
1095
1096                            <td class="fit" style="padding-left:1.0em;padding-right:1.5em;white-space:nowrap">
1097                                    <span class="songTitle" title="${child.title}"><str:truncateNicely upper="${cutoff}">${fn:escapeXml(child.title)}</str:truncateNicely></span>
1098                            </td>
1099
1100                            <c:if test="${model.visibility.albumVisible}">
1101                                <td class="fit"  style="padding-right:1.5em;white-space:nowrap">
1102                                    <span class="detail" title="${child.albumName}"><str:truncateNicely upper="${cutoff}">${fn:escapeXml(child.albumName)}</str:truncateNicely></span>
1103                                </td>
1104                            </c:if>
1105
1106                            <c:if test="${model.visibility.artistVisible and model.multipleArtists}">
1107                                <td class="fit"  style="padding-right:1.5em;white-space:nowrap">
1108                                    <span class="detail" title="${child.artist}"><str:truncateNicely upper="${cutoff}">${fn:escapeXml(child.artist)}</str:truncateNicely></span>
1109                                </td>
1110                            </c:if>
1111
1112                            <c:if test="${model.visibility.composerVisible}">
1113                                <td class="fit"  style="padding-right:1.5em;white-space:nowrap">
1114                                    <span class="detail" title="${child.composer}"><str:truncateNicely upper="${cutoff}">${fn:escapeXml(child.composer)}</str:truncateNicely></span>
1115                                </td>
1116                            </c:if>
1117
1118                            <c:if test="${model.visibility.moodVisible}">
1119                                <td class="fit"  style="padding-right:1.5em;white-space:nowrap">
1120                                    <span class="detail">${child.mood}</span>
1121                                </td>
1122                            </c:if>
1123
1124                            <c:if test="${model.visibility.genreVisible}">
1125                                <td class="fit" style="padding-right:1.5em;white-space:nowrap">
1126                                    <span class="detail">${child.genre}</span>
1127                                </td>
1128                            </c:if>
1129
1130                            <c:if test="${model.visibility.yearVisible}">
1131                                <td class="fit"  style="padding-right:1.5em">
1132                                    <span class="detail">${child.year}</span>
1133                                </td>
1134                            </c:if>
1135
1136                            <c:if test="${model.visibility.bpmVisible}">
1137                                <td class="fit"  style="padding-right:1.5em;white-space:nowrap">
1138                                    <span class="detail">${child.bpm}</span>
1139                                </td>
1140                            </c:if>
1141
1142                            <c:if test="${model.visibility.formatVisible}">
1143                                <td class="fit"  style="padding-right:1.5em">
1144                                    <span class="detail">${fn:toLowerCase(child.format)}</span>
1145                                </td>
1146                            </c:if>
1147
1148                            <c:if test="${model.visibility.fileSizeVisible}">
1149                                <td class="fit"  style="padding-right:1.5em;text-align:right">
1150                                    <span class="detail"><madsonic:formatBytes bytes="${child.fileSize}"/></span>
1151                                </td>
1152                            </c:if>
1153
1154                            <c:if test="${model.visibility.durationVisible}">
1155                                <td class="fit"  style="padding-right:1.5em;text-align:right">
1156                                    <span class="detail">${child.durationString}</span>
1157                                </td>
1158                            </c:if>
1159
1160                            <c:if test="${model.visibility.bitRateVisible}">
1161                                <td class="fit"  style="padding-right:0em;text-align:right">
1162                                    <span class="detail">
1163                                        <c:if test="${not empty child.bitRate}">
1164                                            ${child.bitRate} Kbps ${child.variableBitRate ? "vbr" : ""}
1165                                        </c:if>
1166                                        <c:if test="${child.video and not empty child.width and not empty child.height}">
1167                                            (${child.width}x${child.height})
1168                                        </c:if>
1169                                    </span>
1170                                </td>
1171                            </c:if>
1172                               <td class="rightalign">
1173                                    <span class="detail">
1174                                    </span>
1175                                </td>
1176
1177                        </c:otherwise>
1178                    </c:choose>
1179                </tr>
1180            </c:forEach>
1181        </table>
1182    </td>
1183
1184    </c:if>
1185
1186    <c:if test="${model.viewAs eq 'grid' or model.viewAs eq 'mixed'}">
1187
1188    <td style="vertical-align:top;width:100%" rowspan="2">
1189
1190    <c:set var="coverArtSize" value="${model.player.coverArtScheme.size}"/>
1191    <c:set var="captionLength" value="${model.player.coverArtScheme.captionLength}"/>
1192
1193    <c:if test="${model.showGenericArtistArt} and ${model.artist} eq null">
1194    </c:if>
1195
1196    <c:if test="${model.showGenericArtistArt}">
1197        <div class="artistbanner" style="padding-bottom:6px;float:left; ">
1198        <c:import url="coverArt.jsp">
1199            <c:param name="albumId" value="${model.dir.id}"/>
1200            <c:param name="auth" value="${model.dir.hash}"/>
1201            <c:param name="artistName" value="${model.dir.name}"/>
1202            <c:param name="coverArtSize" value="${model.coverArtSize}"/>
1203            <c:param name="coverArtHQ" value="${model.coverArtHQ}"/>
1204            <c:param name="showChange" value="true"/>
1205            <c:param name="showLink" value="true"/>
1206            <c:param name="showZoom" value="false"/>
1207            <c:param name="showArtist" value="true"/>
1208		    <c:param name="typArtist" value="true"/>
1209            <c:param name="showTopTrack" value="false"/>
1210            <c:param name="showPlayAlbum" value="false"/>
1211            <c:param name="showAddAlbum" value="false"/>
1212            <c:param name="appearAfter" value="15"/>
1213            <c:param name="showSmoother" value="true"/>
1214        </c:import>
1215    </div>
1216
1217           <c:if test="${coverArt eq model.dir or coverArt eq model.album or coverArt eq model.artist}">
1218                <div id="placeholder" style="padding-right:0.5em; margin-left:${model.coverArtSize + 20}px;display:none" >
1219                    <span id="similarArtistsTitle" style="padding-right:0.5em; display:none;"><fmt:message key="main.similarartists"/></span>
1220                    <span id="similarArtists"></span>
1221                </div>
1222
1223                <div id="artistBio" style="max-width: 95%;padding-bottom:1em; margin-left:${model.coverArtSize + 20}px;display:none;"></div>
1224                <div id="albumBio" style="max-width: 95%;padding-bottom:1em; margin-left:${model.coverArtSize + 20}px;display:none;"></div>
1225
1226                <div style="clear:both;"></div>
1227            </c:if>
1228
1229    </c:if>
1230
1231        <c:forEach items="${model.coverArts}" var="coverArt" varStatus="loopStatus">
1232
1233            <div style="float:left; padding-bottom:6px; padding-right:12px;">
1234                <c:import url="coverArt.jsp">
1235                    <c:param name="albumId" value="${coverArt.id}"/>
1236                    <c:param name="auth" value="${coverArt.hash}"/>
1237                    <c:param name="albumName" value="${coverArt.albumSetName}"/>
1238                    <c:param name="artistName" value="${coverArt.artist}"/>
1239                    <c:param name="typVideo" value="${model.dir.mediaType eq 'VIDEOSET'}"/>
1240                    <c:param name="typArtist" value="${coverArt.mediaType eq 'ARTIST'}"/>
1241                    <c:param name="coverArtSize" value="${model.coverArtSize}"/>
1242                    <c:param name="coverArtHQ" value="${model.coverArtHQ}"/>
1243                    <c:param name="showLink" value="${coverArt ne model.dir}"/>
1244                    <c:param name="showZoom" value="${coverArt eq model.dir}"/>
1245                    <c:param name="showArtist" value="${(coverArt eq model.dir) and model.user.lastFMRole}"/>
1246                    <c:param name="showChange" value="${(coverArt eq model.dir) and (not model.isArtist)}"/>
1247                    <c:param name="showCaption" value="true"/>
1248                    <c:param name="showTopTrack" value="${coverArt eq model.dir and model.user.streamRole and model.dir.mediaType ne 'VIDEOSET'}"/>
1249                    <c:param name="showPlayAlbum" value="${model.user.streamRole and not model.partyMode}"/>
1250                    <c:param name="showAddAlbum" value="${model.user.streamRole and not model.partyMode}"/>
1251                    <c:param name="captionLength" value="${captionLength}"/>
1252                    <c:param name="appearAfter" value="${loopStatus.count * 15}"/>
1253                    <c:param name="showSmoother" value="true"/>
1254                </c:import>
1255
1256            </div>
1257           <c:if test="${coverArt eq model.dir or coverArt eq model.album or coverArt eq model.isArtist}">
1258                <div id="placeholder" style="padding-right:0.5em; margin-left:${model.coverArtSize + 20}px;display:none;" >
1259                    <img  id="similarArtistsIcon" src="icons/default/artists.png" style="width:16px;padding-right:4px">
1260                    <span id="similarArtistsTitle" style="padding-right:0.5em; display:none;"><fmt:message key="main.similarartists"/></span>
1261                    <span id="similarArtists"></span>
1262                </div>
1263
1264                <div id="artistBio" style="max-width: 95%;padding-bottom:1em; margin-left:${model.coverArtSize + 20}px;display:none;"></div>
1265                <div id="albumBio" style="max-width: 95%;padding-bottom:1em; margin-left:${model.coverArtSize + 20}px;display:none;"></div>
1266
1267                <div style="clear:both;"></div>
1268            </c:if>
1269        </c:forEach>
1270
1271    <c:if test="${model.multipleArtists}">
1272
1273    </c:if>
1274
1275    <c:if test="${model.showGenericCoverArt}">
1276    <div class="coverart" style="float:left;">
1277        <c:import url="coverArt.jsp">
1278            <c:param name="albumId" value="${model.dir.id}"/>
1279            <c:param name="auth" value="${model.dir.hash}"/>
1280            <c:param name="coverArtSize" value="${model.coverArtSize}"/>
1281            <c:param name="coverArtHQ" value="${model.coverArtHQ}"/>
1282            <c:param name="showLink" value="false"/>
1283            <c:param name="showZoom" value="false"/>
1284            <c:param name="showChange" value="${model.user.coverArtRole}"/>
1285            <c:param name="appearAfter" value="5"/>
1286            <c:param name="showSmoother" value="true"/>
1287        </c:import>
1288    </div>
1289
1290           <c:if test="${coverArt eq model.dir or coverArt eq model.album or coverArt eq model.artist}">
1291                <div id="placeholder" style="padding-right:0.5em; margin-left:${model.coverArtSize + 20}px;" >
1292                    <span id="similarArtistsTitle" style="padding-right:0.5em; display:none;"><fmt:message key="main.similarartists"/></span>
1293                    <span id="similarArtists"></span>
1294                </div>
1295
1296                <div id="artistBio" style="max-width: 95%;padding-bottom:1em; margin-left:${model.coverArtSize + 20}px;display:none;"></div>
1297                <div id="albumBio" style="max-width: 95%;padding-bottom:1em; margin-left:${model.coverArtSize + 20}px;display:none;"></div>
1298
1299                <div style="clear:both;"></div>
1300            </c:if>
1301
1302    </c:if>
1303    </td>
1304
1305    <td style="vertical-align:top;">
1306
1307       <c:forEach items="${model.sieblingAlbums}" var="sieblingAlbum" varStatus="loopStatus">
1308       <div class="coverart" style="display:${loopStatus.count < 5 ? 'inline-block' : 'none'}">
1309            <c:import url="coverArt.jsp">
1310                <c:param name="albumId" value="${sieblingAlbum.id}"/>
1311                <c:param name="auth" value="${sieblingAlbum.hash}"/>
1312                <c:param name="albumName" value="${sieblingAlbum.name}"/>
1313                <c:param name="coverArtSize" value="${model.sieblingCoverArtScheme.size}"/>
1314                <c:param name="coverArtHQ" value="${model.coverArtHQ}"/>
1315                <c:param name="showLink" value="true"/>
1316                <c:param name="showZoom" value="false"/>
1317                <c:param name="showChange" value="false"/>
1318                <c:param name="showCaption" value="true"/>
1319                <c:param name="captionLength" value="${model.sieblingCoverArtScheme.captionLength}"/>
1320                <c:param name="showPlayAlbum" value="${model.user.streamRole and not model.partyMode}"/>
1321                <c:param name="showAddAlbum" value="${model.user.streamRole and not model.partyMode}"/>
1322                <c:param name="appearAfter" value="${loopStatus.count * 15}"/>
1323                <c:param name="showSmoother" value="true"/>
1324            </c:import>
1325        </div>
1326        </c:forEach>
1327        <c:if test="${fn:length(model.sieblingAlbums) >= 5}">
1328            <input id="showAllButton" class="albumOverflowButton" type="button" value="<fmt:message key="main.showall"/>" onclick="showAllAlbums()">
1329        </c:if>
1330    </td>
1331
1332    </c:if>
1333
1334    <c:if test="${model.showAd}">
1335        <td class="ad" style="vertical-align:top;min-width:160px" rowspan="2">
1336            <h2 style="padding-bottom: 1em">Madsonic Premium</h2>
1337            <p style="font-size: 90%">
1338                Upgrade to Madsonic Premium and get:
1339            </p>
1340            <div style="font-size: 80%;padding-bottom: 0.5em">
1341
1342                <p>Your personal<br>
1343                   server address: <em>you</em>.madsonic.org</p>
1344                <p>Advanced LDAP support.</p>
1345                <p>Advanced user management.</p>
1346                <p>Advanced folder management.</p>
1347                <p>Sonos & Chromecast support.</p>
1348                <p>DLNA/UPnP device support.</p>
1349                <p>Audio conversion support.</p>
1350                <p>Video conversion support.</p>
1351                <p>Share with Social media.</p>
1352                <p>Logon with Signup service.</p>
1353                <p>Node management.</p>
1354                <p>No ads.</p>
1355            </div>
1356            <p class="forward" style="white-space: nowrap"><a href="http://beta.madsonic.org/pages/premium.jsp" target="_blank">Get Premium</a></p>
1357        </td>
1358        <td style="vertical-align:top;width:10px" rowspan="2">
1359        </td>
1360  </c:if>
1361
1362    </tr>
1363
1364
1365</table>
1366
1367<c:choose>
1368    <c:when test="${model.viewAs eq 'list'}">
1369        <table class="music indent" style="margin-left:23px; width: 97.5%;">
1370            <c:forEach items="${model.sieblingAlbums}" var="subDir">
1371                <tr>
1372                    <td class="fit">
1373                    <c:import url="playAddDownload.jsp">
1374                        <c:param name="id" value="${subDir.id}"/>
1375                        <c:param name="playEnabled" value="${model.user.streamRole and not model.partyMode and model.buttonVisibility.playVisible}"/>
1376                        <c:param name="playAddEnabled" value="${model.user.streamRole and not model.partyMode and model.buttonVisibility.playAddVisible}"/>
1377                        <c:param name="playMoreEnabled" value="${model.user.streamRole and not model.partyMode and model.buttonVisibility.playMoreVisible}"/>
1378                        <c:param name="addEnabled" value="${model.user.streamRole and (not model.partyMode or not subDir.directory) and model.buttonVisibility.addContextVisible}"/>
1379                        <c:param name="addNextEnabled" value="${model.user.streamRole and (not model.partyMode or not subDir.directory) and model.buttonVisibility.addNextVisible}"/>
1380                        <c:param name="addLastEnabled" value="${model.user.streamRole and (not model.partyMode or not subDir.directory) and model.buttonVisibility.addLastVisible}"/>
1381                        <c:param name="downloadEnabled" value="${model.user.downloadRole and not model.partyMode and model.buttonVisibility.downloadVisible}"/>
1382                        <c:param name="starEnabled" value="${model.buttonVisibility.starredVisible}"/>
1383                        <c:param name="starred" value="${not empty subDir.starredDate}"/>
1384                        <c:param name="asTable" value="false"/>
1385                    </c:import>
1386                    </td>
1387                    <td class="fit rightalign detailyear" style="padding-left:1em;padding-right:0.5em">[${subDir.year}]</td>
1388                    <td class="truncate"><a href="main.view?id=${subDir.id}" class="album" title="${fn:escapeXml(subDir.albumName)}">${fn:escapeXml(subDir.albumName)}</a></td>
1389
1390                </tr>
1391            </c:forEach>
1392        </table>
1393    </c:when>
1394</c:choose>
1395
1396<!--
1397<div style="padding-bottom: 1em">
1398    <c:if test="${not empty model.previousAlbum}">
1399        <madsonic:url value="main.view" var="previousUrl">
1400            <madsonic:param name="id" value="${model.previousAlbum.id}"/>
1401        </madsonic:url>
1402        <div class="back" style="float:left;padding-right:10pt"><a href="${previousUrl}" title="${model.previousAlbum.name}">
1403            <str:truncateNicely upper="55">${fn:escapeXml(model.previousAlbum.name)}</str:truncateNicely>
1404        </a></div>
1405    </c:if>
1406    <c:if test="${not empty model.nextAlbum}">
1407        <madsonic:url value="main.view" var="nextUrl">
1408            <madsonic:param name="id" value="${model.nextAlbum.id}"/>
1409        </madsonic:url>
1410        <div class="forwardright" style="float:left"><a href="${nextUrl}" title="${model.nextAlbum.name}">
1411            <str:truncateNicely upper="55">${fn:escapeXml(model.nextAlbum.name)}</str:truncateNicely>
1412        </a></div>
1413    </c:if>
1414</div>-->
1415
1416<div id="dialog-select-playlist" title="<fmt:message key="main.addtoplaylist.title"/>" style="display: none;">
1417    <p><fmt:message key="main.addtoplaylist.text"/></p>
1418    <div id="dialog-select-playlist-list"></div>
1419</div>
1420
1421<!-- CONTENT -->
1422</div>
1423
1424<c:if test="${model.customScrollbar}">
1425<script type="text/javascript">
1426        (function($){
1427            $(window).load(function(){
1428
1429                $("#content_main").mCustomScrollbar({
1430                    axis:"y",
1431                    scrollInertia:800, /*scrolling inertia: integer (milliseconds)*/
1432                    mouseWheel:true, /*mousewheel support: boolean*/
1433                    mouseWheelPixels:"auto", /*mousewheel pixels amount: integer, "auto"*/
1434                    autoDraggerLength:true, /*auto-adjust scrollbar dragger length: boolean*/
1435                    autoHideScrollbar:false, /*auto-hide scrollbar when idle*/
1436                    alwaysShowScrollbar:true,
1437                    advanced:{      updateOnBrowserResize:true, /*update scrollbars on browser resize (for layouts based on percentages): boolean*/
1438                                    updateOnContentResize:true, /*auto-update scrollbars on content resize (for dynamic content): boolean*/
1439                                    autoExpandHorizontalScroll:false }, /*auto expand width for horizontal scrolling: boolean*/
1440                    scrollButtons:{ enable:true, /*scroll buttons support: boolean*/
1441                                    scrollType:"continuous", /*scroll buttons scrolling type: "continuous", "pixels"*/
1442                                    scrollSpeed:"auto", /*scroll buttons continuous scrolling speed: integer, "auto"*/
1443                                    scrollAmount:40 },  /*scroll buttons pixels scroll amount: integer (pixels)*/
1444                                    theme:"${model.customScrollbarTheme}",
1445                                    scrollbarPosition:"inside"
1446                });
1447            });
1448        })(jQuery);
1449    </script>
1450</c:if>
1451
1452</body>
1453</html>
1454