var only_once_elements = new Array();

var marked_row = new Array;


var playlist = new Array;
var playlist_songs = new Array;
var playlist_id = 'playlist';

var playlist_queue_add = '';
var playlist_queue_rem = '';

var hide_playlist = 0;
var current_playlist = 0;
var song_i = 0;
var playlist_i = 0;
var onmouseout = "this.className = this.className.replace( ' hover', '' );";


function createCookie(name,value,days)
{
	if (days)
	{
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	var cook = name+"="+value+expires+"; path=/";
	if(document.cookie.length + cook.length < 3096) document.cookie = cook;
}

function readCookie(name)
{
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++)
	{
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function deleteCookies()
{
        var nameEQ = name + "=";
        var ca = document.cookie.split(';');
        for(var i=0;i < ca.length;i++)
        {
                var c = ca[i];
                while (c.charAt(0)==' ') c = c.substring(1,c.length);
                var names = c.split('=', 2);
		eraseCookie(names[0]);
        }
        return null;
}

current_playlist = readCookie('current_playlist');
hide_playlist = 0;

function eraseCookie(name)
{
	createCookie(name,"",-1);
}

function playlist_init()
{
}

function playlist_add(song_id)
{
	$.post('/ajax/playlist/add/', 'song[]=' + encodeURIComponent(song_id) + '&playlist=' + current_playlist, function(txt){parsePlaylistXml(txt);});
}

function playlist_remove(song_id)
{
	$.post('/ajax/playlist/rem/', 'song[]=' + encodeURIComponent(song_id) + '&playlist=' + current_playlist, function(txt){parsePlaylistXml(txt);});
}

function playlist_issel(unique_id)
{
	for(var i=0; i < song_i; i++)
	{
		if(playlist_songs[i][0] == unique_id) return true;
	}
	return false;
}

function playlist_change(playlist_id)
{
	if(playlist_id == -1)
	{
		var reply = prompt("Enter the name of the new playlist", "");
		if(reply.length < 15)
		{
			$.post('/ajax/playlist/create/', 'playlist=' + current_playlist  + '&name=' + encodeURIComponent(reply), function(txt){parsePlaylistXml(txt);});
			playlist_draw();
		}
		else alert('Playlist names cannot be more than 15 characters');
	}
	else
	{
		current_playlist = playlist_id;
		createCookie('current_playlist', current_playlist, 999);
		$.post('/ajax/playlist/', 'playlist=' + current_playlist, function(txt){parsePlaylistXml(txt);});
		playlist_draw();
	}
}

function playlist_delete()
{
	if(current_playlist && confirm("Are you sure you want to delete this playlist?"))
	{
		$.post('/ajax/playlist/delete/', 'playlist=' + current_playlist, function(txt){parsePlaylistXml(txt);});
		playlist_change(0);
	}
}

function downloadSong(songid)
{
	if(songid)
	{
		var s = songid.split('song_');
		var song = s[1];
		if(song)
		{
			document.location.href = 'http://null3d.com/loki/download/' + song + '/song.mp3';
		}
	}
}

function playlist_draw()
{
	var selected;
        var pclass;
	var playlist_drop = ' ';
	for(var i=0; i < playlist_i; i++)
	{
		if(!current_playlist)
		{
			if('Default' == playlist[i][1]) selected = ' selected ';
	                else selected = '';
		}
		else
		{
			if(current_playlist == playlist[i][0]) selected = ' selected ';
			else selected = '';
		}
		//alert(playlist_drop);
		playlist_drop = playlist_drop + '<option' + selected + ' value="' + playlist[i][0] + '">' + playlist[i][1] + '</option>';
	}
	playlist_drop = playlist_drop + '<option value="-1">Create New</option>';
	var onchange = "playlist_change(this.value);";
	var m3u = "'/loki/playlist/m3u/" + current_playlist + "/playlist.m3u'";
        var html = '<div class="playlist_title">Playlist:&nbsp;<select onChange="' + onchange + '">' + playlist_drop + '</select><input type="button" class="playlist_play_btn" onclick="play()" /><input type="button" class="playlist_new_btn" onClick="playlist_change(-1);" /><input type="button" class="playlist_delete_btn" onClick="playlist_delete();" /><input type="button" onClick="document.getElementById(' + "'" + playlist_id + "'" + ').style.display = ' + "'none'" + ';createCookie(' + "'hide_playlist'" + ', 1, 999);" class="playlist_close_btn" /></div><div id="playlist_list">';
        var div = document.getElementById(playlist_id);
        var len = playlist_songs.length;
        var d=0;
        for(var i=0; i < len; i++)
        {
                                if(d++%2==0) pclass = 'alt1';
                                else pclass = 'alt2';

                                html = html + '<div song_id="' + playlist_songs[i][0]  +  '" onmouseout="' + onmouseout + '" onmouseover="this.className = this.className + ' + "' hover'" + ';" id="playlist_song_' + i + '" class="playlist_song ' + pclass + '"><div class="artist">' + playlist_songs[i][1] + '</div><div onclick="playsong(' + "'" +  playlist_songs[i][0] + "'"  + ')" class="song">&nbsp;&nbsp;-&nbsp;' + playlist_songs[i][2] + '</div><div class="playlist_delete"><input type="button" onClick="downloadSong(' + "'" + playlist_songs[i][0]  + "'"  + ');" class="playlist_save_btn" /><input type="button" onClick="playlist_remove(' + "'" + playlist_songs[i][0]  + "'"  + ');" class="playlist_trash_btn" /></div></div>';
        }
        html = html + '</div>';
        div.innerHTML = html;
	 RefreshRows('container');
}

function PMA_markRowsInit()
{
	var rows = document.getElementsByTagName('tr');
	for ( var i = 0; i < rows.length; i++ )
	{
        	if ('alt1' != rows[i].className.substr(0,4) && 'alt2' != rows[i].className.substr(0,4) )
		{
			continue;
		}
        	rows[i].onmouseover = function()
		{
                	this.className += ' hover';
        	}
        	rows[i].onmouseout = function()
		{
                	this.className = this.className.replace( ' hover', '' );
        	}
		var temp = rows[i].getElementsByTagName('input');
		if(temp)
		{
			var checkbox = temp[0];
			if(checkbox) checkbox.onclick = function()
			{
				var unique_id;
				var checkbox;

				checkbox = this;
				if(checkbox)
				{
					unique_id = checkbox.id;

					if ( typeof(marked_row[unique_id]) == 'undefined' || !marked_row[unique_id] )
					{
						playlist_add(unique_id);
					}
					else
					{
						playlist_remove(unique_id);
					}

				}
		        }
		}
	}
}

$(document).ready(function()
{
	playlist_init();
	RefreshRows('songs');
	$.post('/ajax/playlist/', 'playlist=' + current_playlist, function(txt){parsePlaylistXml(txt);});
});

function markAllRows( container_id )
{
    var rows = document.getElementById(container_id).getElementsByTagName('tr');
    var unique_id;
    var checkbox;
    var get = '';

	for ( var i = 0; i < rows.length; i++ )
	{

	        checkbox = rows[i].getElementsByTagName( 'input' )[0];

	        if ( checkbox && checkbox.type == 'checkbox' )
		{
	        	unique_id = checkbox.id;
		        if(checkbox.checked == false )
			{
				checkbox.checked = true;
				get = get + 'song[]=' + encodeURIComponent(checkbox.id) + '&';
		        }
	        }
	}
	doRequest('/loki/ajax/playlist.php?action=add&' + get + 'playlist=' + current_playlist );
	return true;
}

function unMarkAllRows( container_id ) {
    var rows = document.getElementById(container_id).getElementsByTagName('tr');
    var unique_id;
    var checkbox;
	var get = '';

	for ( var i = 0; i < rows.length; i++ )
	{

        	checkbox = rows[i].getElementsByTagName( 'input' )[0];

	        if ( checkbox && checkbox.type == 'checkbox' && checkbox.checked == true )
		{
			checkbox.checked = false;
			get = get + 'song[]=' + encodeURIComponent(checkbox.id) + '&';
	        }
    }

	doRequest('/loki/ajax/playlist.php?action=rem&' + get + 'playlist=' + current_playlist );
    return true;
}

function saToggle(checkbox)
{
	if(checkbox.checked == true)
	{
		markAllRows('container');
		//checkbox.checked = false;
	}
	else
	{
		unMarkAllRows('container');
		//checkbox.checked = false;
	}
}

function RefreshRows( container_id )
{
	var divid = document.getElementById(container_id);
	if(!divid) return;
    var rows = divid.getElementsByTagName('tr');
    var unique_id;
    var checkbox;

	for ( var i = 0; i < rows.length; i++ )
	{

        checkbox = rows[i].getElementsByTagName( 'input' )[0];

        if ( checkbox && checkbox.type == 'checkbox' && checkbox.id != 'sa' ) {
            unique_id = checkbox.id;
		rows[i].className = rows[i].className.replace(' marked', '');
		if(playlist_issel(unique_id))
		{
                    checkbox.checked = true;
                    rows[i].className = rows[i].className + ' marked';
                    marked_row[unique_id] = true;
		}
		else
		{
	            checkbox.checked = false;
	            marked_row[unique_id] = false;
		}
        }
    }

    return true;
}

	function GetXmlHttpObject(handler)
	{ 
		var objXmlHttp=null
		if (navigator.userAgent.indexOf("Opera")>=0){
			alert("This example doesn't work in Opera") 
			return 
		}
		if (navigator.userAgent.indexOf("MSIE")>=0){ 
			var strName="Msxml2.XMLHTTP"
			if (navigator.appVersion.indexOf("MSIE 5.5")>=0){
				strName="Microsoft.XMLHTTP"
			}//if 
			try{ 
				objXmlHttp=new ActiveXObject(strName)
				objXmlHttp.onreadystatechange=handler 
				return objXmlHttp
			} 
			catch(e){ 
				alert("Error. Scripting for ActiveX might be disabled") 
				return 
			} 
		}//if 
		if (navigator.userAgent.indexOf("Mozilla")>=0){
			objXmlHttp=new XMLHttpRequest()
			objXmlHttp.onload=handler
			objXmlHttp.onerror=handler 
			return objXmlHttp
		}
    }

var xmlHttp;

function stateChanged(obj)
{
	if(xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
	{
		var node = new Array;
		var node_i = 0;
		playlist_songs = new Array;
		playlist = new Array;
		song_i = 0;
		playlist_i = 0;
		var x = parseXML(xmlHttp.responseText);
		for(var i=0; i < x.childNodes.length; i++)
		{
			node[node_i] = x.childNodes[i];
			if(node[node_i].nodeType==1)
			{
				if(node[node_i].nodeName == 'songs')
				{
					for(var xx=0; xx < node[node_i].childNodes.length; xx++)
					{
						node_i++;
	                                        node[node_i] = node[node_i-1].childNodes[xx];
						if(node[node_i].nodeName == 'song')
						{
							var song_id = 0;
							var artist_name = '';
							var song_title = '';

							for(var ii=0; ii < node[node_i].childNodes.length; ii++)
							{
								if(node[node_i].nodeType==1)
								{
									node_i++;
									node[node_i] = node[node_i-1].childNodes[ii];
									if(node[node_i].nodeName == 'id') song_id = node[node_i].childNodes[0].nodeValue;
									else if(node[node_i].nodeName == 'artist') artist_name = node[node_i].childNodes[0].nodeValue;
									else if(node[node_i].nodeName == 'title') song_title = node[node_i].childNodes[0].nodeValue;
									node_i--;
								}
							}
	
						        playlist_songs[song_i] = new Array;
						        playlist_songs[song_i][0] = song_id;
						        playlist_songs[song_i][1] = artist_name;
						        playlist_songs[song_i][2] = song_title;
							song_i++;
						}
						node_i--;
					}
				}
                                else if(node[node_i].nodeName == 'playlists')
                                {
                                        for(var xx=0; xx < node[node_i].childNodes.length; xx++)
                                        {
                                                node_i++;
                                                node[node_i] = node[node_i-1].childNodes[xx];
                                                if(node[node_i].nodeName == 'playlist')
                                                {
                                                        var playlist_id = 0;
                                                        var playlist_name = '';

                                                        for(var ii=0; ii < node[node_i].childNodes.length; ii++)
                                                        {
                                                                if(node[node_i].nodeType==1)
                                                                {
                                                                        node_i++;
                                                                        node[node_i] = node[node_i-1].childNodes[ii];
                                                                        if(node[node_i].nodeName == 'id') playlist_id = node[node_i].childNodes[0].nodeValue;
                                                                        else if(node[node_i].nodeName == 'name') playlist_name = node[node_i].childNodes[0].nodeValue;
                                                                        node_i--;
                                                                }
                                                        }

                                                        playlist[playlist_i] = new Array;
                                                        playlist[playlist_i][0] = playlist_id;
                                                        playlist[playlist_i][1] = playlist_name;
                                                        playlist_i++;
                                                }
                                                node_i--;
                                        }
                                }
			}
		}
		playlist_draw();
	}
}


function doRequest(url)
{
                xmlHttp=GetXmlHttpObject(stateChanged);
                xmlHttp.open("GET", url , true);
                xmlHttp.send(null);
}

function parseXML(xml_str)
{
	// code for IE
	if (window.ActiveXObject)
	{
		var doc=new ActiveXObject("Microsoft.XMLDOM");
		doc.async="false";
		doc.loadXML(xml_str);
	}
	// code for Mozilla, Firefox, Opera, etc.
	else
	{
		var parser=new DOMParser();
		var doc=parser.parseFromString(xml_str,"text/xml");
	}
	return doc.documentElement;
}
