/****************Объект плейлистов************************************************/

function pList(name, id, nTracks){
	this.name = name;
	this.id = id;
	this.nTracks = nTracks;
}

function playlistFuncs (ownerNick){
	this.ownerNick = 0;
	if(ownerNick)
		this.ownerNick = ownerNick;
	this.obj = 0;
	this.nTracks = 0;
	this.nPlaylists = 0;
	this.jSData = 0;
	this.setNTracks = function(n){
		this.nTracks = n;
	};
	
	this.setNPlaylists = function(n){
		this.nPlaylists = n;
	};	
	
	this.setjSData = function(data){
		this.jSData = data;	
	};		

	this.setObject = function(obj){
		this.obj = obj;	
	};	
}

playlistFuncs.EVENT_TYPE_CHANGE = 'change';

playlistFuncs.prototype = {
	refresh:		function(func){
							var t = this;
						    $.get('/user/get_playlists/' + t.ownerNick, function(data)
							{
								t.setjSData(data);
								
								if(func){
									if (func=="core.refresh"){
										eval(func+"()");
									}
									func();
								}
								
						    });	
					},
	show:			function(obj){
						var t=this;
						if(!t.obj)
							t.obj = obj;
						if (!t.jSData) {
							t.refresh(function(){
								t.show(obj);
							});
							return;
						}
						var data = t.jSData;
						var nTracks = 0;

						var th = '';
						th += "<span class='playlistsLayout'>";
						for (i = 0; i < data.playlists.length; i++) {							
							th += "<div class='plLine' id='id_" + data.playlists[i].id + "'>";
							th += "<div class='plLayout'>";
							th += "<span class='playlistTitle'>";
							th += data.playlists[i].name.toUpperCase() + "</span>";
							th += "<span class='plMenu'>";
							if((data.playlists[i].name!='Мой поток')&&(!t.ownerNick))
								th += "<a class='editName rightBorder' href='javascript:;'>ред.</a>";
							if(data.playlists[i].name!='Мой поток')
								th += "<span class='nTracks rightBorder'>" + data.playlists[i].nTracks + " треков</span>";
							else
								th += "<span class='nTracks'>" + data.playlists[i].nTracks + "&nbsp;треков</span>";
							if((data.playlists[i].name!='Мой поток')&&(!t.ownerNick))
								th += "<a class='delPlaylist' href='javascript:;'>удалить</a>";
							else
								th += "<span style='float:left;width:62px;'></span>";
							th += "</span>";
							th += "</div>";
							th += "<a href='javascript:;' class='playlistPlay'></a>"
							th += "</div>";
							nTracks += 1*data.playlists[i].nTracks;
						}
						th += "</span>";
											
						var nPlaylists = data.playlists.length;
						if (!t.ownerNick) {
							h = "<div class='subTitle'>МОИ ПЛЕЙЛИСТЫ</div>";
							h += "<div class='pInfo'><span class='nPlaylists'>Всего плейлистов: <span id='nPlaylists'>" + data.playlists.length + "</span>, в них треков: <span id='nTracks'>" + nTracks + "</span></span>";
							h += "<span class='howToWork'><span class='cont'><span class='i-icon'></span><a href='javascript:;'>Как можно удобно работать с плейлистами?</a></span><span class='tale'></span></span>"
							h += '<a href="javascript:;" class="addPlistLink">Добавить плейлист</a></div>';
						}
						else
							h = "<div id='playlists'><span class='blockTitle user-color'><a href='javascript:;'>ПЛЕЙЛИСТЫ</a> пользователя <span class='titleTip'>" + ((nPlaylists>3)?(" (показаны 3 из " + nPlaylists + ")"):("")) + "</span></span>";
						h += th;
						
					/*	if (!t.ownerNick)
							//h += "<span class='dontWanna'>Не хотите создавать свои плейлисты? Пользуйтесь <a href='javascript:;'>уже созданными!</a></span>";
						else*/
							h += '</div>';
						$(t.obj).html(h);
						
						if (!t.ownerNick) {
							$('.playlistsLayout').sortable({
								axis: 'y',
								opacity: 0.6,
								placeholder: 'bordered'
							});
							$('.playlistsLayout').unbind('sortstop');
							$('.playlistsLayout').bind('sortstop', function(event, ui){
								var order = '';
								var pls = $('.playlistsLayout .plLine');
								var k = 0;
								jQuery.each(pls, function(){
									if (this != pls[0]) 
										order += 's';
									order += parseId(this.id);
									if (this == pls[pls.length - 1]) 
										$.post('/playlist/porder', {
											sortset: order
										}, function(data){
										
										});
									if (t.jSData.playlists[k].id != parseId(this.id)) {
										t.jSData.playlists[k].id = parseId(this.id);
										t.jSData.playlists[k].name = $('#' + this.id + ' .playlistTitle').html();
										t.jSData.playlists[k].nTracks = $('#' + this.id + ' .nTracks').html().split(' ')[0];
									}
									k++;
								});
								
							});
						} else{
							var full = 1;
							var fullHeight = (Math.round(nPlaylists)*48 + 32) + "px";
							$(t.obj).find('.blockTitle').css('cursor', 'pointer');
							if ($(t.obj).find('.blockTitle')[0]) {
								if (Get_Cookie('playlistsShow') != 'shown') {
									$(t.obj).css('height', '178px');
									full = 0;
								}
								else {
									$(t.obj).find(".titleTip").hide();
								}
							}
							if (nPlaylists > 3) {
								$(t.obj).find('.blockTitle').bind("click", function(){
									var height;
									if (!full) {
										height = fullHeight;
										full = 1;
										Set_Cookie('playlistsShow', 'shown', '', '/', '', '');
										$(t.obj).find(".titleTip").hide();
									}
									else {
										height = '178px';
										full = 0;
										Set_Cookie('playlistsShow', 'hidden', '', '/', '', '');
										$(t.obj).find(".titleTip").show();
									}
									$(t.obj).animate({
										height: height
									});
								});
							}
						}
						$(".playlistPlay").bind('click', function(){
							load_playlist_in_player("/playlist/getxml/" + parseId(this.parentNode.id) + "/");
						});		
				        $('a.delPlaylist').bind("click", function(){
							t.deletePlist(this);
				        });
						
				        $('.plMenu a.editName').bind("click", function(){
							t.plistEdit(this);
				        });						
											
				        $('a.addPlistLink').bind("click", function(){
							if($('.playlistsLayout #addNew')[0])
								t.hideAddForm();
							else
					            t.showAddPList();
				        });
						t.sNTracks(nTracks);
						t.sNPlaylists(data.playlists.length);	
						
					},
	plistEdit:		function(obj){
						var pid = parseId(obj.parentNode.parentNode.parentNode.id);
						var pName = $(obj).parent().parent().parent().find(".playlistTitle");
						var oldName = $(pName).html();
						var pLine = $(obj).parent().parent().parent();
						$(pName).replaceWith("<span class='renameLayout'><input class='nameInput' value='" + oldName + "' type='text'/><span class='renameMenu'><a href='javascript:;' class='save'>Сохранить</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='javascript:;' class='renameCancel'>Отмена</a></span></span>");
						
						$(pLine).find('.nameInput').focus();
						
						$(pLine).find('.renameCancel').click(function(){
							$(this).parent().parent().replaceWith(pName);
						});
							
						$(pLine).find('.save').click(function(){
							var t = this;
							var name = $(t).parent().parent().find('.nameInput').val();
							if(name=='')
								return;
							$.post('/playlist/p_rename/' + pid, {
								name: name
								}, function(data){
									$(t).parent().parent().replaceWith('<span class="playlistTitle">' + name.toUpperCase() + '</span>');		
								});
						});
						
						$(pLine).find('.nameInput').bind("keydown", function(event){
							if (event.keyCode == 27) {
								$(this).parent().find('.renameCancel').trigger('click');
							} else
							if (event.keyCode == 13) {
								$(this).parent().find('.save').trigger('click');
							}
						});		
					},
	plistAdd:		function(name, nPlaylists, data, func){
						var t = this;
						if(!nPlaylists){
							nPlaylists = t.nPlaylists;
							data = t.jSData;
						}
						$.post('/playlist/create/', {
		       				 Name: name
							 }, function(dt){
								t.addPlaylist(name, dt);
								t.nPlaylists += 1;
								t.sNPlaylists(t.nPlaylists);
								plst = new pList(name, dt, 0);
								t.jSData.playlists.unshift(plst);
								if(func)
									func(dt, name);
						 	});						
					},
					
	deletePlist:	function(object){
							var t = this;
							var nTracks = this.nTracks;
							var nPlaylists = this.nPlaylists;
							var jSonData = t.jSData;							
							
							var backup = $(object).parent().html();
														
							var pLine = $(object).parent().parent().parent();
							
							var nTracks = $(pLine).find('.nTracks').html().split(' ')[0];
							
							$('.playlistsLayout').sortable('disable');
							
							$(object).parent().html("<span style='float:left;'>Вы уверены?&nbsp;&nbsp;</span><a href='javascript:;' style='margin-right:20px;' class='yes'>Да</a><span style='float:left;'>|</span><a href='javascript:;' class='no' style='margin-right:22px'>Нет</a>");
							
							$(pLine).find('.no').click(function(){
								$(pLine).find('.plMenu').html(backup);
				        		$(pLine).find('a.delPlaylist').bind("click", function(){
									t.deletePlist(this);
				        		});
						
				        		$(pLine).find('.plMenu a.editName').bind("click", function(){
									t.plistEdit(this);							
				        		});
							 	$('.playlistsLayout').sortable('enable');
							});
							
							$(pLine).find('.yes').click(function(){
								$.post('/playlist/delete/', {
									id: parseId(pLine[0].id)
								}, function(data){
									$(pLine).hide("blind", {direction:"vertical"}, 500, function(){
										id = parseId(pLine[0].id);
										$(pLine).remove();
										nPlaylists -= 1;
										t.sNPlaylists(nPlaylists);
										var n = 0;
										for (i = 0; i < jSonData.playlists.length; i++){
											if(jSonData.playlists[i].id == id)
												n = i;
										}
										jSonData.playlists.splice(n, 1);
										t.setjSData(jSonData);
									});
							 		$('.playlistsLayout').sortable('enable');
									t.sNTracks(t.nTracks - nTracks);
								 });
							 });	
		
					},
	sNTracks:		function(n){
						this.setNTracks(n);
						$('#nTracks').html('' + n + '')
					},
	sNPlaylists:	function(n){
						this.setNPlaylists(n);
						$('#nPlaylists').html('' + n + '')		
					},
	showAddPList:	function(){
							var t = this;
							var nPlaylists = this.nPlaylists;
							var jSonData = t.jSData;														

							if($('#playlists #addNew').length)
								return;
							var h = "<div id='addNew' style='height:0;' class='plLine'>";
							h += "<div class='plLayout'>";

							h += "</div>";
							h += "<a href='javascript:;' class='playlistPlay'></a>"
							h += "</div>";
							
							$('.playlistsLayout').sortable('disable');

							$('.playlistsLayout').prepend(h);
							$('.playlistsLayout #addNew').animate({height:'44px'}, 500, function(){
								$(this).find('.plLayout').html("<span class='renameLayout'><input class='nameInput' type='text'/><span class='renameMenu'><a href='javascript:;' class='save'>Сохранить</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href='javascript:;' class='renameCancel'>Отмена</a></span></span>");
								$('.playlistsLayout #addNew input').focus();																
								$('.playlistsLayout #addNew input').bind('keydown', function(event){
									if(event.keyCode == 27){
										$('.playlistsLayout #addNew .renameCancel').trigger('click');
									}
									if(event.keyCode == 13){
										var name = $(this).val();
										if((name!='Мой поток')&&(name!=''))
											$.post('/playlist/create/', {
												Name: name
											}, function(data){
												t.addPlaylist(name, data);
												t.nPlaylists += 1;
												t.sNPlaylists(t.nPlaylists);
												plst = new pList(name, data, 0);
												t.jSData.playlists.unshift(plst);
												//t.oObservable.notify(playlistFuncs.EVENT_TYPE_CHANGE);												
											});
									}
								});
								$('.playlistsLayout #addNew .save').bind('click', function(){
									var name = $('.playlistsLayout #addNew input').val();
									if((name!='Мой поток')&&(name!=''))
										$.post('/playlist/create/', {
											Name: name
										}, function(data){
											t.addPlaylist(name, data);
											t.nPlaylists += 1;
											t.sNPlaylists(t.nPlaylists);
											plst = new pList(name, data, 0);
											t.jSData.playlists.unshift(plst);
											//t.oObservable.notify(playlistFuncs.EVENT_TYPE_CHANGE);
											$('.playlistsLayout').sortable('enable');
										});									
								});
								$('.playlistsLayout #addNew .renameCancel').bind('click', function(){
									$(this).parent().parent().parent().parent().animate({height:0}, function(){
										$(this).remove();
										$('.playlistsLayout').sortable('enable');
									});
								});								
							});
					},
	addPlaylist:	function(name, id){
						var t = this;
						if(name=='' || name.toLowerCase()=='мой поток')
							return;
						var h = "<div class='plLine' id='id_" + id + "'>";
						h += "<div class='plLayout'>";
						h += "<span class='playlistTitle'>";
						h += name.toUpperCase() + "</span>";
						h += "<span class='plMenu'>";
						h += "<a class='editName rightBorder' href='javascript:;'>ред.</a>";
						h += "<span class='nTracks rightBorder'>0 треков</span>";
						h += "<a class='delPlaylist' href='javascript:;'>удалить</a>";
						h += "</span>";
						h += "</div>";
						h += "<a href='javascript:;' class='playlistPlay'></a>"
						h += "</div>";
						if ($('.playlistsLayout #addNew')[0]) {
							$('.playlistsLayout #addNew').replaceWith(h);
						}
						else {
							$('.playlistsLayout').prepend(h);
						}
						a = $('a.playlistPlay');						
				        $(a[0]).bind("click", function(){
				            load_playlist_in_player("/playlist/getxml/" + parseId(this.parentNode.id) + "/");
				        });			
						a = $('a.delPlaylist');
				        $(a[0]).bind("click", function(){
							t.deletePlist(this);
				        });
						
						a = $('.plMenu a.editName');
						
				        $(a[0]).bind("click", function(){
							var pid = parseId(this.parentNode.parentNode.parentNode.id);
							var pName = $(this).parent().parent().parent().find(".playlistTitle");
							var oldName = $(pName).html();
							$(pName).replaceWith("<span class='renameLayout'><input class='nameInput' value='" + oldName + "' type='text'/><span class='renameMenu'><a href='javascript:;' class='save'>Сохранить</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href='javascript:;' class='renameCancel'>Отмена</a></span></span>");
							
							$(this).parent().parent().parent().find('.nameInput').focus();
							
							$(this).parent().parent().parent().find('.renameCancel').click(function(){
								$(this).parent().parent().replaceWith(pName);
							});
							
							$(this).parent().parent().parent().find('.save').click(function(){
								var t = this;
								var name = $(t).parent().parent().find('.nameInput').val();
								if(name=='')
									return;
								$.post('/playlist/p_rename/' + pid, {
									name: name
									}, function(data){
										$(t).parent().parent().replaceWith('<span class="playlistTitle">' + name.toUpperCase() + '</span>');		
									});
							});
							
							$(this).parent().parent().parent().find('.nameInput').bind("keydown", function(event){
								if (event.keyCode == 27) {
									$(this).parent().find('.renameCancel').trigger('click');
								} else
								if (event.keyCode == 13) {
									$(this).parent().find('.save').trigger('click');
								}
							});
							
				        });
						$('.playlistsLayout').sortable('enable');	
						
					}

}

var playlists = new playlistFuncs();

/**************** Объект плейлиста (окно с треками)************************************************/
function trackObject(id, tid, name, performer, trackLength){
	this.id = id;
	this.tid = tid;
	this.name = name;	
	this.performer = performer;
	this.trackLength = trackLength;
}

function trackList (ownerNick){
	this.ownerNick = 0;
	if(ownerNick)
		this.ownerNick = ownerNick;
	this.nTracks = 0;
	this.jSData = 0;
	this.name = '';
	this.obj = 0;
	this.id = 0;

	this.setNTracks = function(n){
		this.nTracks = n;
	};
	
	this.setObj = function(obj){
		this.obj = obj;
	};
	
	this.setjSData = function(data){
		this.jSData = data;
	};
	
	this.setName = function(name){
		this.name = name;
	};	
}

trackList.prototype = {
	refresh:		function( func, id){
							var t = this;
							t.id = id;
							$.post('/playlist/get/' + id + '/', {									
							}, function(data){
								t.setjSData(data);
								t.nTracks = data.tracks.length;
								t.name = data.name;
								func();

						    });												
					},
	show:			function(object){
						curTrackPage = 0;
						globalIndex = 0;
						var t=this;
						t.setObj(object);
						if (!t.jSData) {
							t.refresh(function(){
								t.show(object);
							}, parseId(object.parentNode.parentNode.id));
							return;
						}
						$(object.parentNode.parentNode).addClass('highlighted');						
						data = t.jSData;
						var h ="";
						if (navigator.appVersion.indexOf('MSIE 6.0') == -1) {
							h = '<div class="top_sh"></div>';
							h += '<div class="right_sh"></div>';
							h += '<div class="left_sh"></div>';
							h += '<div class="bottom_sh"></div>';
							h += '<div class="top_left_sh"></div>';
							h += '<div class="top_right_sh"></div>';
							h += '<div class="bottom_right_sh"></div>';
							h += '<div class="bottom_left_sh"></div>';
						}						
						h += '<div style="background-color: #fabb00;width:460px;height:100%;padding:0;">';
						h += '<div id="header" class="header"><a id="close" href="javascript:;"></a></div>';
						h += '<div class="title"><span class="playlistName">' + data.name + '</span>';
						if(data.name!='Мой поток')
							h += '<a class="renamePlaylist" href="javascript:;">ред. название</a>';
						h += '</div>';
						h += '<div class="searchBlock">';
						h += '<input class="searchLine"  value="Быстрый поиск" onblur="if(this.value==\'\') this.value=\'Быстрый поиск\';" onfocus="focused = 0;if(this.value==\'Быстрый поиск\') this.value=\'\';"/>'

						h += '</div>';
						h += "<div class='trackBlock'>";
						h += '<a class="scrollUpLink"></a>';						
						h += '<div class="trackBlockChild" >';
						h += '<ul>';
						if (data.tracks.length <= 100) 
							tracksLimit = data.tracks.length;
						else {
							tracksLimit = 100;
						}
						for(i=0; i<tracksLimit; i++){
							h += generateTrackLine({
								element : 'li',
								addClass : '',
								id : data.tracks[i].id,
								trackId : data.tracks[i].tid,
								performerId : data.tracks[i].performer_id,
								trackLength : data.tracks[i].trackLength,
								performer : data.tracks[i].performer,
								title : data.tracks[i].name,
								ownerNick : t.ownerNick,
								color : 'yellow',
								tooltipLen : 30
							});
						}
						h += "</ul>";

						h += "</div>";	
						h += '<a class="scrollDownLink"></a>';							
						h += "</div>";						
						if (!t.ownerNick) {
							h += '<a href="javascript:;" class="selectAll">Выделить все треки</a>';
							h += '<a href="javascript:;" class="delSelected">Удалить выделенное</a>';
						}
						h += '<div class="footer"><img src="/media/images/tracklistpic.jpg"/> <p>Выделяй, зажав ctrl</p></div>';														
						h += "</div>";	
						if(!document.getElementById('currentPlaylist')){
							var plstWnd = document.createElement('div');
							plstWnd.id = "currentPlaylist";
							plstWnd.className = "currentPlaylist";									
							document.getElementById('mainLayout').appendChild(plstWnd);
						}
						else{
							$('#currentPlaylist').css('display', 'block');
						}
						$('#currentPlaylist').html(h);

						$('#currentPlaylist .performer').bind('click', function(){
							tracklists[activeTracklist].closeWnd();
						});
						$('#currentPlaylist .songTitle').bind('click', function(){
							tracklists[activeTracklist].closeWnd();
						});						
						$('#currentPlaylist').draggable({ handle: 'div.header' });
						if (!t.ownerNick) {
							$('#currentPlaylist .trackBlockChild ul').sortable({
								axis: 'y',
								opacity: 0.6
							});
							$('#currentPlaylist .trackBlockChild ul').bind('sortstop', function(event, ui){
								var order = '';
								var tracks = $('#currentPlaylist .trackLine');
								var k = 0;
								var limit = curTrackPage*25;								
								jQuery.each(tracks, function(){
									if (this != tracks[0]) 
										order += 's';
									order += parseId(this.id);
									if (this == tracks[tracks.length - 1]) {
										var eorder = '';
										for(w = 0; w<limit; w++){
											eorder += t.jSData.tracks[w].id + 's';
										}
										order = eorder += order;
										for(w = limit + 100; w<t.jSData.tracks.length; w++){
											order += t.jSData.tracks[w].id + 's';
										}										
										$.post('/playlist/torder/' + activeTracklist, {
											sortset: order
										}, function(data){
										
										});
									}
									if (t.jSData.tracks[k + limit].tid != this.id) {
										t.jSData.tracks[k + limit].tid = this.id;
										p = $(this).children('.songTitle').html();
										t.jSData.tracks[k + limit].performer = $(this).children('.performer').html();
										t.jSData.tracks[k + limit].name = p;
										t.jSData.tracks[k + limit].trackLength = $(this).children('.rightField').children('.length').html();
									}
									k++;
								});
							});
						}
						$('#currentPlaylist .trackBlockChild ul').gorshSel({elements:'li'});

						$('#currentPlaylist .trackBlockChild').scrollable({
							items: 'ul',
							vertical: true,
							prevPage:'a.scrollUpLink',
							nextPage:'a.scrollDownLink',
							size: 15
						});
						
						$('#currentPlaylist a.playButton').bind("click", function(){
							sendTrackToPlayer(this, '#fabb00');
//							load_track_in_player("/track/get/" + this.id + "/");
						});
						
						$('#currentPlaylist #close').bind("click", function(){
							t.closeWnd();
						});
						
						$('#currentPlaylist .searchLine').bind("keyup", function(){
							if(this.value!='Быстрый поиск')
								t.search(this);
						});		
						
						$('#currentPlaylist .delTrack').bind("click", function(){
							t.deleteTracks(this);
						});
						
						$('#currentPlaylist .selectAll').bind("click", function(){
							allTracksSelected = 1;
							$('#currentPlaylist li').addClass('selected');
						});						
						$('#currentPlaylist .delSelected').bind("click", function(){
							t.deleteTracks();
						});
						$('#currentPlaylist .title .playlistName').bind("click", function(){
							t.renamePlaylist();
						});						
						$('#currentPlaylist .title a.renamePlaylist').bind("click", function(){
							t.renamePlaylist();
						});
					
					    $('#currentPlaylist a.plusButton').bind("click", function(){
							pPopup.openWnd(this);
					    });						
						$('.scrollUpLink').trigger("click");
						$("#currentPlaylist").pngFix( { blankgif:'/media/images/blank.gif' });						
					},
	rebuildList:	function(mode, to){
						disableScrolling = 1;
						var t = this;
						var trackLines;
						trackLines = $('#currentPlaylist .trackBlockChild li');
						var start;
						var limit;
						var h = '';
						if (mode == 1) {
							start = 100 + curTrackPage * 25;
							limit = 125 + curTrackPage * 25;
							if (limit > t.jSData.tracks.length)
								limit = t.jSData.tracks.length;
							if (limit == t.jSData.tracks.length) {
								lastPageReached = 1;
							}
							if (limit - start > 0) {
								for (i = 0; i < limit - start; i++) {
									$(trackLines[i]).remove();
								}
								for (i = start; i < limit; i++) {
									if(allTracksSelected==1){
										h += generateTrackLine({
											element : 'li',
											addClass : 'selected',
											id : t.jSData.tracks[i].id,
											trackId : t.jSData.tracks[i].tid,
											performerId : t.jSData.tracks[i].performer_id,
											trackLength : t.jSData.tracks[i].trackLength,
											performer : t.jSData.tracks[i].performer,
											title : t.jSData.tracks[i].name,
											ownerNick : t.ownerNick,
											color : 'yellow',
											tooltipLen : 30
										});										
									}
									else
										h += generateTrackLine({
											element : 'li',
											addClass : '',
											id : t.jSData.tracks[i].id,
											trackId : t.jSData.tracks[i].tid,
											performerId : t.jSData.tracks[i].performer_id,
											trackLength : t.jSData.tracks[i].trackLength,
											performer : t.jSData.tracks[i].performer,
											title : t.jSData.tracks[i].name,
											ownerNick : t.ownerNick,
											color : 'yellow',
											tooltipLen : 30
										});
								}
								var txt = $('#currentPlaylist .trackBlockChild ul').html();
								h = txt + h;
								globalIndex = to - (limit - start);
								$('#currentPlaylist .trackBlockChild').replaceWith('<div class="trackBlockChild"><ul style="top:-' + globalIndex * 22 + 'px;">' + h + '</ul></div>');
								curTrackPage++;
							}
							disableScrolling = 0;
						}
						else{
							limit = curTrackPage*25;
							start = (curTrackPage-1)*25;							
							if ((lastPageReached == 1)&&(t.jSData.tracks.length%25!=0)) {
								limit = start + t.jSData.tracks.length%25;
								lastPageReached = 0;		
							}
							for (i = 1; i <= limit - start; i++) {
								$(trackLines[trackLines.length - i]).remove();
							}
							if (start < 0) {
								start = 0;
							}
							for (i = start; i < limit; i++) {
								if(allTracksSelected==1){
									h += generateTrackLine({
										element : 'li',
										addClass : 'selected',
										id : t.jSData.tracks[i].id,
										trackId : t.jSData.tracks[i].tid,
										performerId : t.jSData.tracks[i].performer_id,
										trackLength : t.jSData.tracks[i].trackLength,
										performer : t.jSData.tracks[i].performer,
										title : t.jSData.tracks[i].name,
										ownerNick : t.ownerNick,
										color : 'yellow',
										tooltipLen : 30
									});										
								}
								else
									h += generateTrackLine({
										element : 'li',
										addClass : '',
										id : t.jSData.tracks[i].id,
										trackId : t.jSData.tracks[i].tid,
										performerId : t.jSData.tracks[i].performer_id,
										trackLength : t.jSData.tracks[i].trackLength,
										performer : t.jSData.tracks[i].performer,
										title : t.jSData.tracks[i].name,
										ownerNick : t.ownerNick,
										color : 'yellow',
										tooltipLen : 30
									});
							}
							var txt = $('#currentPlaylist .trackBlockChild ul').html();
							h = h + txt;

							$('#currentPlaylist .trackBlockChild').replaceWith('<div class="trackBlockChild"><ul style="top:-' + (25 + limit - start)*22 + 'px;">' + h + '</ul></div>');

							curTrackPage--;
							if(curTrackPage<0)
								curTrackPage = 0;
							disableScrolling = 0;
							globalIndex = to + limit - start;
						}
						$('#currentPlaylist .trackLine a').unbind();
						$('#currentPlaylist a.playButton').bind("click", function(){
							sendTrackToPlayer(this, '#fabb00');							
						});
						$('#currentPlaylist .trackBlockChild ul').gorshSel({elements:'li'});
						$('#currentPlaylist .trackBlock a.scrollUpLink').unbind();
						$('#currentPlaylist .trackBlock a.scrollDownLink').unbind();						
						$('#currentPlaylist .trackBlockChild').scrollable({
							items: 'ul',
							vertical: true,
							prevPage:'a.scrollUpLink',
							nextPage:'a.scrollDownLink',
							size: 15
						});			
		
						$('#currentPlaylist .delTrack').bind("click", function(){
							t.deleteTracks(this);
						});						
					    $('#currentPlaylist a.plusButton').bind("click", function(){
							pPopup.openWnd(this);
					    });
						if (!t.ownerNick) {
							$('#currentPlaylist .trackBlockChild ul').sortable({
								axis: 'y',
								opacity: 0.6
							});
							$('#currentPlaylist .trackBlockChild ul').unbind('sortstop');
							$('#currentPlaylist .trackBlockChild ul').bind('sortstop', function(event, ui){
								var order = '';
								var tracks = $('#currentPlaylist .trackLine');
								var k = 0;
								var limit = curTrackPage*25;
								if((lastPageReached==1)&&(t.jSData.tracks.length%25!=0)){
									limit += t.jSData.tracks.length%25 - 25;
								}
								jQuery.each(tracks, function(){
									if (this != tracks[0]) 
										order += 's';
									order += parseId(this.id);
									if (this == tracks[tracks.length - 1]) {
										var eorder = '';
										for(w = 0; w<limit; w++){
											eorder += t.jSData.tracks[w].id + 's';
										}
										order = eorder += order;
										for(w = limit + 100; w<t.jSData.tracks.length; w++){
											order += t.jSData.tracks[w].id + 's';
										}										
										$.post('/playlist/torder/' + activeTracklist, {
											sortset: order
										}, function(data){
										
										});
									}
									if (t.jSData.tracks[k + limit].tid != this.id) {
										t.jSData.tracks[k + limit].tid = this.id;
										p = $(this).children('.songTitle').html();
										t.jSData.tracks[k + limit].performer = $(this).children('.performer').html();
										t.jSData.tracks[k + limit].name = p;
										t.jSData.tracks[k + limit].trackLength = $(this).children('.rightField').children('.length').html();
									}
									k++;
								});
							});
						}
					},
	closeWnd:		function(){
						if ($('#currentPlaylist').css('display') == 'block') {
							$(this.obj.parentNode.parentNode).removeClass('highlighted');
							$('#currentPlaylist').remove();
							focused = 0;
						}
					},
	search:			function(obj){
						var t = this;
						var data = t.jSData;
						var filter = $(obj).val().toLowerCase();
						var trackLines = $('#currentPlaylist .trackLine');
						if (filter == '') {
							trackLines.parent().css('display', 'block');
						}
						for(i=0;i<trackLines.length;i++){
							var pObj = $(trackLines[i]).children('.performer')[0];
							tagFree(pObj, 'span');
							var h = $(pObj).html();
							var change = 0;
							var text = h
							if (text != h) {
								change = 1;
								h = text;
							}
							text = h.toLowerCase();
							var nObj = $(trackLines[i]).children('.songTitle')[0];
							tagFree(nObj, 'span');							
							var h1 = $(nObj).html();
							var change1 = 0;
							var text1 = h1;
							if (text1 != h1) {
								change1 = 1;
								h1 = text1;
							}
							text1 = h1.toLowerCase();
							if ((text.indexOf(filter) == -1) && (text1.indexOf(filter) == -1)) {
								if (($(trackLines[i]).parent().css('display') != 'none')) 
									$(trackLines[i]).parent().css('display', 'none');
							}
							else {
								if (($(trackLines[i]).parent().css('display') == 'none')) 
									$(trackLines[i]).parent().css('display', 'block');

								text = spanAdd(h, text, filter);
								if(h!=text){
									change = 1;
									h=text;
								}
								
								text1 = spanAdd(h1, text1, filter);
								if(h1!=text1){
									change1 = 1;
									h1=text1;
								}								
								if(change)
									$(pObj).html(h);
								if(change1)
									$(nObj).html(h1);
							}
						}
					},
	addSong:		function(tracks, id, name){
						var t = this;
						if (!t.jSData) {
							t.refresh(function(){
								t.addSong(tracks, id, name);
							}, id);
							return;
						}
						$.post('/playlist/add/', {
							Name: name,
							pid: id,
							tracks: tracks
						}, function(data){
							var n = 0;
							for(i=0;i<data.length;i++){
									tr = new trackObject(data[i].tid, data[i].id, data[i].title, data[i].performer, data[i].trackLength);
									t.jSData.tracks[t.jSData.tracks.length]=tr;
									n++;
							}
							t.setjSData(t.jSData);
							t.sNTracks(t.nTracks + n);
							playlists.sNTracks(playlists.nTracks + n);	
					    });
					},
	sNTracks:		function(n){
						var t = this;
						t.nTracks = n;
						for (i = 0; i < playlists.jSData.playlists.length; i++) {
							if (playlists.jSData.playlists[i].id == t.id) {
								playlists.jSData.playlists[i].nTracks = n;
								break;
							}
						}
						$('#playlists #nListTr' + t.id).html(t.nTracks);
					},
	deleteTracks:	function(noConfirm, id, func){
							var callback = func;
							var t = this;
							var nTracks = this.nTracks;
							var jSonData = t.jSData;							
							if ($('#messageAlert').css('display') == 'block') {
								cAlert.closeWnd();
							}
							if((!$('#currentPlaylist .trackBlock').find('.selected').length)&&(allTracksSelected!=1))
								return;
							if (noConfirm != 1) {
								cAlert.openWnd('Подтвердить удаление треков?', function(){
									var selectedTracks = $('#currentPlaylist .trackBlock .selected');
									var tracks = '[';
									if (allTracksSelected == 1) {
										for (i = 0; i < t.jSData.tracks.length; i++) {
											tracks += '{"tid":"' + t.jSData.tracks[i].id + '"}';
											if (i != t.jSData.tracks.length - 1) 
												tracks += ', ';
										}
									}
									else 
										jQuery.each(selectedTracks, function(){
											tracks += '{"tid":"' + parseId(this.id) + '"}';
											if (this != selectedTracks[selectedTracks.length - 1]) 
												tracks += ', ';
										});
									tracks += ']';
									$.post('/playlist/t_delete/', {
										tracks: tracks,
										pid: t.id
									}, function(data){
										jQuery.each(selectedTracks, function(){
											$(this).hide('blind', {
												direction: 'vertical'
											}, 500);
											var n = 0;
											if (allTracksSelected != 1) {
											
												for (i = 0; i < t.jSData.tracks.length; i++) 
													if (t.jSData.tracks[i].id == parseId($(this)[0].id)) {
														n = i;
													}
												t.jSData.tracks.splice(n, 1);
												n = t.nTracks - 1;
												playlists.sNTracks(playlists.nTracks - 1);
											}
											else 
												t.jSData.tracks.splice(0, t.jSData.tracks.length);
											t.sNTracks(n);
											$(this).remove();
										});
									});
								});
							} else{
								if (!t.jSData) {
									t.refresh(function(){
										var tracks = '[';
										if (allTracksSelected == 1) {
											for (i = 0; i < t.jSData.tracks.length; i++) {
												tracks += '{"tid":"' + t.jSData.tracks[i].id + '"}';
												if (i != t.jSData.tracks.length) 
													tracks += ', ';
											}
										}
										tracks += ']';
										$.post('/playlist/t_delete/', {
											tracks: tracks,
											pid: t.id
										}, function(data){
											t.sNTracks(0);
											t.jSData.tracks.splice(0, t.jSData.tracks.length);
											if (callback) {
												callback();
											}
										});
									}, id);
									return;
								}
								else {

										var tracks = '[';
										if (allTracksSelected == 1) {
											for (i = 0; i < t.jSData.tracks.length; i++) {
												tracks += '{"tid":"' + t.jSData.tracks[i].id + '"}';
												if (i != t.jSData.tracks.length - 1) 
													tracks += ', ';
											}
										}
										tracks += ']';
										$.post('/playlist/t_delete/', {
											tracks: tracks,
											pid: t.id
										}, function(data){
											t.sNTracks(0);
											t.jSData.tracks.splice(0, t.jSData.tracks.length);
											if (callback) {
												callback();
											}
										});

								}
							}
					},
	renamePlaylist:	function(){
							t =this;
							if(t.name == 'Мой поток')
								return;
							$('#currentPlaylist .playlistName').replaceWith('<input class="playlistRename" type="text" value="' + t.name + '" onfocus="focused=0;"></input>');
							$('#currentPlaylist .playlistRename').focus();
							$('#currentPlaylist .playlistRename').bind("keydown", function(event){
								if (event.keyCode == 27) 
									t.hideRenameInput();
								else 
									if (event.keyCode == 13) {
										$.post('/playlist/p_rename/' + activeTracklist, {
											name: $('#currentPlaylist .playlistRename').val()
											}, function(data){
													$(t.obj).html($('#currentPlaylist .playlistRename').val());
													t.name = $('#currentPlaylist .playlistRename').val();
													t.jSData.name = t.name;
													t.hideRenameInput();												
											});
									}
							});
					},
	hideRenameInput: function(){
							t = this;
							$('#currentPlaylist .playlistRename').replaceWith('<span class="playlistName">' + t.name + '</span>')
							$('#currentPlaylist .title .playlistName').bind("click", function(){
								t.renamePlaylist();
							});													
					}
}

var tracklists = [];
var activeTracklist = 0;

function topPlaylistsFuncs (data){
	this.obj = 0;
	this.nEvents = 0;
	this.jSData = 0;
	if(data){
		this.jSData = {
			"playlists": data
		};
	}
}

topPlaylistsFuncs.prototype = {

	refresh:		function(){
						var t = this;
						$.post('/playlist/top/8', function(data){
					        data = {"playlists":data};
							t.jSData = data;
							t.show();								
						});
					},
	
	setData:		function(data){
						var t = this;
						t.jSData = data;
						t.no = 1;
					},
	show:			function(obj){
						var t=this;
						if (!t.obj) {
							this.obj = obj;
						}
						if (!t.jSData) {
							t.refresh();
							return;
						}
						var data = t.jSData;
						var h = '';
						h += "<span class='blockTitle music-color' style='position:relative;float:left;'>";
						h += "популярные ";
						h += "<a href='javascript:;'>ПЛЕЙЛИСТЫ</a>";
						h += "</span><br clear='All'/>"
						h += "<span class='playlistsLayout'>";
						for (i = 0; i < data.playlists.length; i++) {							
							h += "<div class='plLine' id='id_" + data.playlists[i].id + "'>";
							h += "<div class='plLayout'>";
							h += "<span class='playlistTitle'>";
							h += data.playlists[i].name.toUpperCase() + "</span>";
							h += "<span class='plMenu'>";
							h += "<span class='nTracks rightBorder'>" + data.playlists[i].tracks_num + "&nbsp;треков</span>";
							h += "<a class='userLink' href='/#users/" + data.playlists[i].nick + "'>" + data.playlists[i].nick + "</a>";
							h += "</span>";
							h += "</div>";
							h += "<a href='javascript:;' class='playlistPlay'></a>"
							h += "</div>";
						}
						h += "</span>";
						$(t.obj).html(h);
						
						$(".playlistPlay").bind('click', function(){
							load_playlist_in_player("/playlist/getxml/" + parseId(this.parentNode.id) + "/");
						});
					}
}

function userPlaylists_page(data)
{
    var h = "";	
    if (data.isLogin != 0) {
		h += "<div class='subMenu user'>";
		h += "<a class='menuItem' href='/#main'>гараж</a>";
		h += "<a class='menuItem' href='/#friends'>друзья</a>";
	/*	h += "<a class='menuItem' href='/#favourites'>избранное</a>";
		h += "<a class='menuItem' href='/#photos'>фотографии</a>";
		h += "<a class='menuItem' href='/#events'>события</a>";
		h += "<a class='menuItem' href='/#news'>новости</a>";
		h += "<a class='menuItem' href='/#stream'>потоки</a>";*/
		h += "<a class='menuItem' href='/#profile'>профиль</a>";
		h += "</div>";
		h += "<div class='mPlaylists'></div>";
		
		$('#leftContent').html(h);

		playlists.show(".mPlaylists");
	}

}

function importPlaylistWnd(){
}

importPlaylistWnd.prototype = {
	openWnd :	function(tracks){
					var isLogin = $('#loginLayout #logOutLink');
					if(!isLogin[0]){
						alert('Чтобы воспользоваться данной функцией необходимо зарегистрироваться.');
						return;
					}		
					var t=this;
					var al = document.getElementById('importPlaylistWnd');
					if(!al){
						var impWnd = document.createElement('div');
						impWnd.id = "importPlaylistWnd";
						impWnd.className = "importPlaylistWnd";									
						document.getElementById('mainLayout').appendChild(impWnd);
						var h = "";
						if (navigator.appVersion.indexOf('MSIE 6.0') == -1) {
							h = '<div class="top_sh" style="width:246px"></div>';
							h += '<div class="right_sh" style="height:157px"></div>';
							h += '<div class="left_sh"  style="height:157px"></div>';
							h += '<div class="bottom_sh" style="width:246px"></div>';
							h += '<div class="top_left_sh"></div>';
							h += '<div class="top_right_sh"></div>';
							h += '<div class="bottom_right_sh"></div>';
							h += '<div class="bottom_left_sh"></div>';
						}
						h += '<div id="header" class="header"><span>Сохранение текущего плейлиста</span><a class="close" href="javascript:;"></a></div>';
						h += '<div class="content">';
						h += '<span>Введите название нового плейлиста:</span>';
						h += '<input class="newPlaylistName"></input>';
						h += '<span>Или добавьте треки к уже существующему:</span><br/>';
						h += '<select>';
				        h += '</select>';
						h += '<a href="javascript:;" class="refButton"></a>';
						h += '<a href="javascript:;" class="clrButton"></a>';
						h += '<a href="javascript:;" class="saveButton">Сохранить</a>';
						h += '</div>';
						$('#importPlaylistWnd').html(h);
					}
					t.plRefresh();
					$('#importPlaylistWnd input').val('');
					$('#importPlaylistWnd').css('display', 'block');
					$('#importPlaylistWnd').draggable({ handle: 'div.header'});
				    $('#importPlaylistWnd .close').bind("click", function(){
						t.closeWnd();
				    });			
				    $('#importPlaylistWnd .saveButton').bind("click", function(){
						var plName = $('#importPlaylistWnd input').val();
						if (plName == '') {
							$('#importPlaylistWnd .saveButton').css('display', 'none');
							$('#importPlaylistWnd .refButton').css('display', 'none');							
							$('#importPlaylistWnd .clrButton').css('display', 'none');							
							h = '<span class="alert">При сохранении произошла ошибка, попробуйте еще раз.</span>';
							$('#importPlaylistWnd .content').append(h);
							setTimeout(function(){
								$('#importPlaylistWnd .alert').remove();								
								$('#importPlaylistWnd .saveButton').css('display', 'block');
								$('#importPlaylistWnd .refButton').css('display', 'block');							
								$('#importPlaylistWnd .clrButton').css('display', 'block');	
							}, 1500);
						} else {
							playlists.plistAdd(plName, 0, 0, function(plid, plName){
								if(!tracklists[plid])
									tracklists[plid] = new trackList;
								tracklists[plid].addSong(tracks, plid, plName);
							});
							t.closeWnd();
						}
				    });
				    $('#importPlaylistWnd .refButton').bind("click", function(){
						plId = $('#importPlaylistWnd select').val();
						if(!tracklists[plId])
							tracklists[plId] = new trackList;
						tracklists[plId].addSong(tracks, plId);
						t.closeWnd();						
					});
				    $('#importPlaylistWnd .clrButton').bind("click", function(){
						plId = $('#importPlaylistWnd select').val();
						if(!tracklists[plId])
							tracklists[plId] = new trackList;
						allTracksSelected = 1;
						tracklists[plId].deleteTracks(1, plId, function(){
							tracklists[plId].addSong(tracks, plId);							
						});
						t.closeWnd();
					});				
					$('#importPlaylistWnd select').bind("change", function(){
						if ($(this).val() == 0) {
							$('#importPlaylistWnd .refButton').html('');
							$('#importPlaylistWnd .clrButton').html('');							
							$('#importPlaylistWnd .refButton').animate({
								left: '52px'
							}, 500);
							$('#importPlaylistWnd .clrButton').animate({
								left: '138px'
							}, 500, function(){
								$('#importPlaylistWnd .saveButton').css('display', 'block');
							});
						}
						else {
							$('#importPlaylistWnd .saveButton').css('display', 'none');
							$('#importPlaylistWnd .refButton').animate({
								left: '20px'
							}, 500);
							$('#importPlaylistWnd .clrButton').animate({
								left: '170px'
							}, 500, function(){
								$('#importPlaylistWnd .refButton').html('Добавить');
								$('#importPlaylistWnd .clrButton').html('Заменить');								
							});
						}
					});
				},
	plRefresh:		function(){
						var h = '';
						if(!playlists.jSData)
							return;
						h += '<option value="0">Выберите плейлист</option>';							
						for(i =0; i<playlists.jSData.playlists.length;i++){
							h += "<option value='" + playlists.jSData.playlists[i].id + "'>";
							h += playlists.jSData.playlists[i].name;
							h += "</option>";
						}
						
						$('#importPlaylistWnd select').html(h);
					},				
	closeWnd :	function(){
					if ($('#importPlaylistWnd').css('display') == 'block') {
						$('#importPlaylistWnd .refButton').css('left', '52px');
						$('#importPlaylistWnd .clrButton').css('left', '138px');
						$('#importPlaylistWnd .saveButton').css('display', 'block');						
						$('#importPlaylistWnd').css('display', 'none');
				        $('#importPlaylistWnd a.saveButton').unbind("click");
					    $('#importPlaylistWnd a.refButton').unbind("click");
					    $('#importPlaylistWnd a.clrButton').unbind("click");						
					    $('#importPlaylistWnd .close').unbind("click");
					}
				}
};

var importWnd = new importPlaylistWnd();
