 //////////////////////
//					//
//    FRUITUNES     //
//	UI Javascript   //
//					//
//////////////////////


////////////////////////////
// FLASH PLAYER FUNCTIONS //
////////////////////////////


/* INSTANCE VARIABLES */

var preSelect=null; //preselected song to start playing
var editing=false;  //editing mode or not
var searching=false;//searching
var curVol=0;		//current volume level
var fullscreen=false;	//fullscreen
var paused=1;
var username=null;
var repeat=0;
var lyricsScript;
var list=0;
var browseHistory = new Array();
var sorted=1;
var sorted_column="count";
var shuffled=0;
var curURL="";

function init() {
	resizeList();
	setupPlaceholders();
	recount();
	if($('history') && browseHistory.length>0) {
		$('history').innerHTML="";
		for(var i=browseHistory.length-2;i>browseHistory.length-5 && i>=0;i--) {
			$('history').innerHTML+=browseHistory[i]+', ';
		}
	}
	searching=false;
}

function getEverything() {
	var q = document.forms['searchForm'].q.value;
	var c = cr('div','popup','','body');
	c.style.background="none";
	var d = cr('div','popup_msg','','popup');
	c.appendChild(d);
	d.innerHTML='<h3>Retrieving...</h3>';
	AjaxIt('everything=1&q='+encodeURIComponent(q),'wrapper','postLoad');
}

function postLoad(myAjax) {
	closePopup();
	resizeList();
}

function addHistoryItem(item) {
	var prev = browseHistory[browseHistory.length-1];
	if(item==prev) return;
	browseHistory[browseHistory.length]=item;
}

function repeatTracks() {
	var elm = $('repeat');
	repeat=repeat+1;
	if(repeat>2) repeat=0;
	if(repeat==0) {
		elm.style.backgroundPosition="0 -0px";
		elm.setAttribute("title","Repeat List");
	}
	else if(repeat==1) {
		elm.style.backgroundPosition="0 -19px";
		elm.setAttribute("title","Repeat Song");
	}
	else {
		elm.style.backgroundPosition="0 -38px";
		elm.setAttribute("title","No Repeat");
	}
}

/* changeVolume */

//params: amount - provided by slider

//description: changes player volume

function changeVolume(amount) {
	player.sendEvent("VOLUME",amount);
	if(amount<50) {
		if(amount<5) $('vol_img').setAttribute("src","http://www.macwebos.com/icons/sound_none.png");
		else $('vol_img').setAttribute("src","http://www.macwebos.com/icons/sound_low.png");
	}
	else $('vol_img').setAttribute("src","http://www.macwebos.com/icons/sound.png");
	curVol=amount;
	if(slider) slider.set(amount);
}

function changeProgress(e) {
	if(e.clientX || window.Event) x = e.clientX;
	else x = e.pageX;
	if($('fullscreen')) var left = $('fullscreen_info').offsetLeft+330;
	else {
		var left = $('wrapper').offsetLeft + 210;
		if($('curAlbum').innerHTML!="") left=left+70;
	}
	x = x-left;
	var inc = (x/420)*duration;
	count=Math.floor(inc);
	player.sendEvent('SEEK',count);
}

/* playpause */

//description: plays or pauses the player

function playpause(elm) {
	if(elm.src.indexOf("play")==-1) elm.src="http://www.fruitunes.com/images/play_red.png";
	else elm.src="http://www.fruitunes.com/images/pause_red.png";
	if(current==null && paused==1 && $('curFile').innerHTML=="") select_track($('track_0'));
	else {
		if(paused==1) {
			player.sendEvent('PLAY',true);
			paused=0;
		}
		else {
			player.sendEvent('PLAY',false);
			paused=1;
		}
	}
}

function incPlayCount(which) {
	if(!$('playcount')) return;
	if($('playcount').innerHTML=="Plays") {
		var val = $('playcount_'+which).innerHTML;
		val = parseFloat(val);
		html('playcount_'+which,(val+1));
	}
}

/* searchFor */

//params: name - song or artist name

//description: searches through playlist

function searchFor(name) {
	var songs = $('songs').getElementsByTagName('li');
	for(i=0;i<songs.length;i++) {
		if(songs[i].className=="title") continue;
		var id = songs[i].getAttribute("num");
		if(songs[i].getAttribute("title")) var t = songs[i].getAttribute("title").toLowerCase();
		else var t="";
		if(songs[i].getAttribute("artist")) var a = songs[i].getAttribute("artist").toLowerCase();
		else var a="";
		var n = name.toLowerCase();
		if(t.indexOf(n)<0 && a.indexOf(n)<0) songs[i].style.display="none";
		else songs[i].style.display="";
	}
}

function searchLists(val) {
	var lis = $('alllists').getElementsByTagName('li');
	for(var i=0;i<lis.length;i++) {
		var a = lis[i].childNodes[1].innerHTML.toLowerCase();
		if(a.indexOf(val)<0) lis[i].style.display="none";
		else lis[i].style.display="";
	}
}

function setupPlaceholders() {
	if($('popupload')) $('popup').removeChild($('popupload'));
	var inputs = $('body').getElementsByTagName('input');
	for(i=0;i<inputs.length;i++) {
		if(inputs[i].type=="text") {
			inputs[i].setAttribute("onfocus","focusSearch(this)");
			inputs[i].setAttribute("onblur","blurSearch(this)");
			if(inputs[i].hasAttribute("placeholder")) {
				inputs[i].className="placehold";
				inputs[i].value = inputs[i].getAttribute("placeholder");
			}
		}
	}
}

function focusSearch(elm) {
	if(elm.hasAttribute("placeholder") && (elm.value==elm.getAttribute('placeholder'))) {
		elm.value='';
		elm.className='';
	}
	editing=true;
}

function blurSearch(elm) {
	if(elm.hasAttribute("placeholder") && elm.value=="") {
		elm.value=elm.getAttribute('placeholder');
		elm.className='placehold';
	}
	editing=false;
}

function more_menu(elm) {
	if($('more_menu')) {
		$('body').removeChild($('more_menu'));
	}
	$('body').setAttribute("onmouseup","hidemore()");
	var left = $('wrapper').offsetLeft + 863;
	var scroll = $('songslists_div').scrollTop;
	var parent = elm.parentNode.parentNode.parentNode;
	var id = parent.getAttribute("id");
	var count = parent.getAttribute("count");
	var top =parent.offsetTop + 270 - scroll;
	if($('profile_info')) top = top + $('profile_info').offsetHeight
	var c = cr('div','more_menu','','body');
	c.style.left=(left-55)+"px";
	c.style.top=top+"px";
	var a3 = cr('a','','twitter',$('more_menu'));
	var a4 = cr('a','','embed',$('more_menu'));
	a3.innerHTML="Post To Twitter";
	a4.innerHTML="Embed Song";
	if(parent.hasAttribute("list")) {
		var a5 = cr('a','','fix',$('more_menu'));
		a5.innerHTML="Fix Link";
		a5.setAttribute("href","#");
		a5.setAttribute("onmousedown","fixSong('"+id+"')");
	}	
	a3.setAttribute("href","#");
	a3.setAttribute("onmousedown","twitterid('"+id+"')");
	a4.setAttribute("href","#");
	a4.setAttribute("onmousedown","embedid('"+id+"')");
	var mp3url = parent.getAttribute("mp3_url_id");
	var loc = parent.getAttribute("location");
	var title = parent.getAttribute("title");
	if(parent.hasAttribute("download")) {
		var a1 = cr('a','','download',$('more_menu'));
		a1.innerHTML="Download Song";
		a1.setAttribute("href","#");
		a1.setAttribute("target","_blank");
		a1.setAttribute("onmousedown","window.location='"+loc+"'");
	}
	if(parent.hasAttribute("share")) {
		var a5 = cr('a','','shareme',$('more_menu'));
		a5.innerHTML="Share Song";
		a5.setAttribute("href","#");
		var username = parent.getAttribute("share");
		var theid = parent.getAttribute("num");
		a5.setAttribute("onmousedown","share('"+username+"','"+theid+"')");
		
		var a6 = cr('a','','linkto',$('more_menu'));
		a6.innerHTML="Get Link";
		a6.setAttribute("href","#");
		var username = parent.getAttribute("share");
		var songID = parent.getAttribute("num");
		a6.setAttribute("onmousedown","getLink('"+username+"','"+songID+"')");
	}
}

function hidemore() {
	if($('more_menu')) {
		$('body').removeChild($('more_menu'));
		$('body').removeAttribute("onmouseup");
	}
}

function fixSong(id) {
	var song = $(id);
	var songID = song.getAttribute("num");
	var q = song.getAttribute("title")+' '+song.getAttribute("artist");
	cr('div','popup','','body');
	cr('div','popupload','','popup');
	$('popupload').innerHTML='<img src="images/popupload.gif">';
	var url = "replace=1&songID="+songID+"&q="+encodeURIComponent(q);
	AjaxIt(url,'popup','checkFix');
}

function checkFix(myAjax) {
	if(myAjax.responseText=="") {
		closePopup();
		displayMsg("Sorry!","No alternate sources",1000);
	}
}

function replaceSongLink(newURL,songID) {
	$('title_'+songID).parentNode.setAttribute("location",newURL);
	AjaxIt('changeLink=1&songID='+songID+'&newURL='+encodeURIComponent(newURL));
	closePopup();
	displayMsg("Success","Song URL updated.",1000);
	$('state_'+songID).innerHTML="";
	if($('title_'+songID).parentNode.className=="playing" || $('title_'+songID).parentNode.className=="not_playing") {
		select_track($('title_'+songID).parentNode);
	}
	else $('title_'+songID).parentNode.setAttribute("class","");
}

//////////
// TABS //
//////////

function addTab() {
	var c = document.createElement('li');
	c.innerHTML='<a href="#" class="delete" onclick="deleteTab(this)"></a><span><a href="#" onclick="selectTab(this)">New Tab</a></span>';
	$('playlist_tabs').childNodes[1].insertBefore(c,$('add_tab').parentNode.parentNode);
	var links = $('playlist_tabs').getElementsByTagName('li');
	if(links.length>8) $('add_tab').style.display="none";
}

function selectTab(elm) {
	var links = $('playlist_tabs').getElementsByTagName('a');
	for(var i=0;i<links.length;i++) {
		if(links[i].className!="delete") links[i].className="";
	}
	elm.setAttribute("class","active");
}

function deleteTab(elm) {
	if(confirm("Are you sure you want to delete this playlist?")) {
		$('playlist_tabs').childNodes[1].removeChild(elm.parentNode);
		$('add_tab').style.display="";
	}
}

function shuffleSongs() {
	var elm = $('shuffle');
	if(shuffled==1) {
		shuffled=0;
		sortBy('count');
		elm.style.backgroundPosition="-1px -0px";
		return;
	}
	elm.style.backgroundPosition="-1px -19px";
	var lis = $('songs').getElementsByTagName('li');
	var myData = new Array();
	for(var i=0;i<lis.length;i++) {
		if(lis[i].getAttribute("class")=="title") {
			lis[i].style.display="none";
			continue;
		}
		var t = (lis[i].getAttribute("title")!="")?lis[i].getAttribute("title"):" ";
		var a = (lis[i].getAttribute("artist")!="")?lis[i].getAttribute("artist"):" ";
		var c = parseFloat(lis[i].getAttribute("count"));
		myData[i] = {title:t, artist:a, id:i, count:c};
	}
	myData.sort(function() { return 0.5 - Math.random()});
	for(var i=0;i<myData.length;i++) {
		var num = myData[i];
		if(num) {
			var elm = $("track_"+num.id);
			if(elm) $('songs').appendChild(elm);
		}
	}
	sorted_column="shuffle";
	shuffled=1;
	relabel(1);
}

function sortBy(which) {
	var lis = $('songs').getElementsByTagName('li');
	$('shuffle').style.backgroundPosition="-1px 0px";
	var myData = new Array();
	for(var i=0;i<lis.length;i++) {
		if(lis[i].getAttribute("class")=="title") {
			lis[i].style.display="none";
			continue;
		}
		var t = (lis[i].getAttribute("title")!="")?lis[i].getAttribute("title"):" ";
		var a = (lis[i].getAttribute("artist")!="")?lis[i].getAttribute("artist"):" ";
		var c = parseFloat(lis[i].getAttribute("count"));
		myData[i] = {title:t, artist:a, id:i, count:c};
	}
	
	if(sorted_column==which) sorted=-1*sorted;
	else sorted=1;
	sorted_column=which;
	
	var sclass = (sorted==1)?"up":"down";
	
	if(which=="title") {
		myData.sort(compareTitle);
		$('title_header').setAttribute("class","one select "+sclass);
		$('artist_header').setAttribute("class","two");
		$('order_header').setAttribute("class","zero");
	}
	else if(which=="artist") {
		myData.sort(compareArtist);
		$('title_header').setAttribute("class","one");
		$('artist_header').setAttribute("class","two select "+sclass);
		$('order_header').setAttribute("class","zero");
	}
	else {
		myData.sort(compareCount);
		$('title_header').setAttribute("class","one");
		$('artist_header').setAttribute("class","two");
		$('order_header').setAttribute("class","zero select "+sclass);
	}
	
	for(var i=0;i<myData.length;i++) {
		var num = myData[i];
		if(num) {
			var elm = $("track_"+num.id);
			if(elm) $('songs').appendChild(elm);
		}
	}
	relabel(1);
}

function compareTitle(a,b) {
    var x = a.title.toLowerCase();
    var y = b.title.toLowerCase();
    if(sorted==1) return ((x < y) ? -1 : ((x > y) ? 1 : 0));
    else return ((x < y) ? 1 : ((x > y) ? -1 : 0));
}

function compareArtist(a,b) {
	if(a.artist) var x = a.artist.toLowerCase();
	else x = " ";
    if(b.artist) var y = b.artist.toLowerCase();
    else y = " ";
    if(sorted==1) return ((x < y) ? -1 : ((x > y) ? 1 : 0));
    else return ((x < y) ? 1 : ((x > y) ? -1 : 0));
}

function compareCount(a,b) {
	var x = a.count;
	var y = b.count;
	if(sorted==1) return ((x < y) ? -1 : ((x > y) ? 1 : 0));
    else return ((x < y) ? 1 : ((x > y) ? -1 : 0));
}

/////////////////////////////
// DATABASE/AJAX FUNCTIONS //
/////////////////////////////

/* edit */

//params:
//num - song number in playlist
//elm - actual song list item element (li)

//description: replaces list item content with input boxes to allow editing

function edit(num,elm) {
	mySortables.detach();
	var title = $("title_"+num);
	var artist = $("artist_"+num);
	var link = title.getAttribute("onclick");
	title.removeAttribute("onclick");
	var input = document.createElement('input');
	input.setAttribute("class","edit");
	input.setAttribute("id","title_input_"+num);
	input.setAttribute("value",title.innerHTML);
	input.setAttribute("link",link);
	var input2 = document.createElement('input');
	input2.setAttribute("class","edit");
	input2.setAttribute("id","artist_input_"+num);
	input2.setAttribute("onblur","save("+num+",$('save_"+num+"'))");
	input2.setAttribute("value",artist.childNodes[1].nodeValue);
	artist.removeChild(artist.childNodes[1]);
	title.innerHTML="";
	artist.appendChild(input2);
	title.appendChild(input);
	input.focus();
	elm.setAttribute("onclick","save("+num+",this)");
	elm.innerHTML='<img src="http://www.macwebos.com/icons/disk.png">';
	editing=true;
}

/* save */

//params:
//num - song number in playlist
//elm - actual song list item element (li)

//description: stores list item content and saves input values

function save(num,elm) {
	if($('title_input_'+num).focus==true || $('artist_input_'+num).focus==true) return;
	mySortables.attach();
	elm.setAttribute("onclick","edit("+num+",this)");
	elm.innerHTML='<img src="http://www.macwebos.com/icons/pencil.png">';
	var title = $('title_input_'+num);
	var artist = $('artist_input_'+num);
	var ti = title.parentNode;
	var ai = artist.parentNode;
	var val = title.value;
	var aval = artist.value;
	ti.setAttribute("onclick",title.getAttribute("link"));
	title.parentNode.removeChild(title);
	artist.parentNode.removeChild(artist);
	ti.innerHTML+=val;
	ai.innerHTML+=aval;
	AjaxIt("save=1&num="+num+"&title="+val+"&artist="+aval);
	editing=false;
	if($('title_'+num).parentNode.getAttribute("id")=="track_"+current) {
		html('curTitle',title.value);
		html('curArtist',artist.value);
	}
	$('title_'+num).parentNode.setAttribute("title",val);
	$('title_'+num).parentNode.setAttribute("artist",artist.value);
}

/* saveList */

//description: saves playlist song order from drag & drop

function saveList() {
	var arr = this.serialize();
	var linkids = this.elements.map(function(el){
		return el.id.substring(5,el.id.length);
	});
	var params = "switchRank="+arr.join(',')+"&type=1&linkids="+linkids.join(',');
	AjaxIt(params);
}

/* get link */

function getLink(username,theid) {
	cr('div','popup','','body');
	AjaxIt("popup=link&song="+theid+"&user="+username,'popup');
	hidemore();
}

/* share */

//params:
//username - current playlist username
//song - 1 if sharing a song or 0 if not

//description: queries user for email addresses and sends an email to share song/playlist

function share(username,song) {
	var extra="playlist";
	if(song) extra="song";
	if(logged_on) pretext = "";
	else pretext = "1 of 2: ";
	var prom = prompt(pretext+"Enter the RECIPIENT email(s) to share this "+extra+" with them");
	if(prom!=null) {
		if(!logged_on) {
			var yours = prompt("2 of 2: Now enter YOUR email so they'll know who it's from!");
		}
		if((!logged_on && yours!=null) || logged_on) {
			var params = "share=1&email="+prom+"&username="+username;
			if(yours) params+="&fromemail="+yours;
			if(song) {
				params+="&song="+song;
				var title = $('title_'+song).parentNode.getAttribute("title");
				var artist = $('title_'+song).parentNode.getAttribute("artist");
				params+="&title="+title+"&artist="+artist;	
			}
			AjaxIt(params);
			displayMsg("Success","Your message has been sent!");
		}
	}
}

/* reset_tracks*/

//description: resets background color of tracks

function reset_tracks() {
	var lis = $('songs').getElementsByTagName('li');
	for(i=0;i<lis.length;i++) {
		alt = lis[i].getAttribute("alt");
		num = lis[i].getAttribute("num");
		if(lis[i].className!="dead") lis[i].className=alt;
		$('state_'+num).innerHTML="";
	}
}

function logout() {
	AjaxIt("logout=1");
	var ul = $('rightnav');
	ul.innerHTML="";
	var li1 = document.createElement('li');
	var a1 = document.createElement('a');
	a1.setAttribute("href","#");
	a1.setAttribute("onclick","loadPopup('register')");
	a1.innerHTML="Sign Up";
	a1.setAttribute("title","Sign Up");
	li1.appendChild(a1);
	var li2 = document.createElement('li');
	var a2 = document.createElement('a');
	a2.setAttribute("href","#");
	a2.setAttribute("onclick","toggle('login_box')");
	a2.setAttribute("id","login_link");
	a2.innerHTML="Sign In";
	li2.appendChild(a2);
	ul.appendChild(li2);
	ul.appendChild(li1);
	if($('signin')) $('signin').style.display="none";
	displayMsg("You've Logged Out","Thanks for listening!",1000);
	if(logged_on==list) loadUser(list,username);
	logged_on=0;
	if(username) username=0;
}

/* login */

//description: sends ajax call with login form values

function login() {
	var form = document.forms['loginForm'];
	var username=form.username.value;
	var password=form.password.value;
	AjaxIt("login=1&username="+username+"&password="+password,'','actually_login');
}

/* actually_login */

//params: myAjax - ajax response

//description: if incorrect login, alert
//else alter top navigation bar

function actually_login(myAjax) {
	if(myAjax.responseText=="error") {
		$('login_error').style.display="";
		html("login_error","Incorrect username/password");
		document.forms['loginForm'].password.value="";
		document.forms['loginForm'].password.focus();
		return;
	}
	$('login_error').style.display="none";
	html('login_error','');
	username=document.forms['loginForm'].username.value;
	logged_on=1;
	$('login_box').style.display="none";
	var ul = $('rightnav');
	ul.innerHTML="";
	var li0 = document.createElement('li');
	var a0 = document.createElement('a');
	a0.setAttribute("href","#");
	a0.setAttribute("onclick","loadPopup('profile')");
	a0.innerHTML="Account";
	a0.setAttribute("title","Change Account Info");
	li0.appendChild(a0);
	var li1 = document.createElement('li');
	var a1 = document.createElement('a');
	a1.setAttribute("href","#");
	a1.setAttribute("onclick","loadUser(0,\'"+username+"\')");
	a1.innerHTML="Playlist";
	a1.setAttribute("title","Go to Playlist");
	li1.appendChild(a1);
	var li2 = document.createElement('li');
	var a2 = document.createElement('a');
	a2.setAttribute("href","#");
	a2.setAttribute("onclick","logout()");
	a2.innerHTML="Logout";
	li2.appendChild(a2);
	ul.appendChild(li2);
	ul.appendChild(li1);
	ul.appendChild(li0);
	if($('signin'))
		$('signin').style.display="none";
	if($('favin'))
		$('favin').style.display="";
	if($('songs')) {
		var as = $('songs').getElementsByTagName('img');
		for(i=0;i<as.length;i++) {
			if(as[i].getAttribute("class")=="add_btn") as[i].style.display="";
		}
		mySortables = new Sortables('#songs',{
			contrain:true,
			clone:true,
			opacity:.5,
			revert: {duraction: 500, transition: 'elastic:out' },
			onComplete: function() {
				result = this.serialize();
				var myAjax = new AjaxMe();
				var url = "ajax.php?serialize="+result;
				myAjax.open("GET",url,true);
				myAjax.send(null);
			}
		});
	}
	if(myAjax.responseText=="noloc") {
		loadPopup('profile','noloc');
	}
	else displayMsg("Welcome!","You are now logged in.",1000);
}

/* resizeList */

//description: resizes playlist height

function resizeList() {
	if($('middle')) var val=340;
	else var val=310;
	if($('songslists_div')) {
		var ch = xClientHeight();
		if((ch-val)<200) x = 200;
		else x = ch-val;
		if($('profile_info')) {
			var other = $('profile_info').offsetHeight;
			x=x-other;
		}
		if($('middle')) {
			var mh = x+183;
			if($('profile_info')) mh=mh+other;
			$('middle').style.height=mh+"px";
		}
		$('songslists_div').style.height=x+"px";
		$('results').style.height=(x+$('header').offsetHeight)+'px';
		if($('sidebar')) {
			$('sidebar').style.height=(x+$('header').offsetHeight-10)+'px';
		}
	}
}

function toggleThree(on) {
	var spans = $('results').getElementsByTagName('span');
	for(var i=0;i<spans.length;i++) {
		if(spans[i].className=="three" | spans[i].className=="swf") {
			if(!on) spans[i].style.display="none";
			else spans[i].style.display="";
		}
	}
}

function toggleSidebar() {
	if($('sidebar').style.display=="none") {
		$('sidebar').style.display="";
		$('results').style.marginLeft="150px";
		toggleThree();
	}
	else {
		$('sidebar').style.display="none";
		$('results').style.marginLeft="0px";
		toggleThree(1);
	}
}

function addPlaylist(elm) {
	var newli = document.createElement('li');
	newli.setAttribute("class","active");
	var input = document.createElement('input');
	input.setAttribute("type","text");
	input.setAttribute("onfocus","focusSearch(this)");
	input.setAttribute("onblur","saveListName(this);blurSearch(this)");
	newli.appendChild(input);
	$('playlists').insertBefore(newli,elm);
	input.focus();
}

function saveListName(elm) {
	if(elm.value.replace(/ /g,'')=="") {
		elm.parentNode.parentNode.removeChild(elm.parentNode);
		return;
	}
	elm.parentNode.setAttribute("class","");
	elm.parentNode.innerHTML=elm.value;
}

/* tabs */

//params: tab - which tab

//description: switch tabs

function tabs(which) {
	if(!$('popup_tabnav')) {
		var one;
		var two;
		if(which=="search") {
			one="search";
			two="discover";
		}
		else if(which=="discover") {
			one="discover";
			two="search";
		}
		$(one).style.display='';
		$(two).style.display='none';
		$(one+'_tab').className="active";
		$(two+'_tab').className="";
	}
	else {
		var lis = $('popup_tabnav').getElementsByTagName('li');
		for(var i=0;i<lis.length;i++) {
			lis[i].childNodes[0].className="";
			$(lis[i].childNodes[0].getAttribute("id")+"_div").style.display="none";
		}
		$(which).className="active";
		$(which+"_div").style.display="";
	}
}

/* deleteSong */

//params:
//id - id of song item
//elm - actual song list item (li)

//description: sends ajax call to remove song from DB
//removes list item from DOM and advances to next song

function deleteSong(id,elm) {
	if(confirm("Are you sure you want to delete this song from your playlist?")) {
		AjaxIt("del="+id);
		var div = elm.parentNode.parentNode;
		var outer = div.parentNode;
		if(div.getAttribute("id")=="track_"+current && paused==0) next_track();
		outer.removeChild(div);
		array_length=array_length-1;
		relabel();
	}
}

/* favorite */

//params:
//url - url of song location, title and artist
//elm - image element that was clicked

//description: sends ajax call to add song to DB and changes image

function favorite(elm) {
	if(!logged_on || logged_on==0) {
		loadPopup('register');
		return;
	}
	var parent = elm.parentNode.parentNode.parentNode;
	var id = parent.getAttribute("num");
	var title = parent.getAttribute("title");
	var artist = parent.getAttribute("artist");
	var mp3_url_id = parent.getAttribute("mp3_url_id");
	var location = parent.getAttribute("location");
	var album = parent.getAttribute("album");
	var params = "fav="+location+"&title="+title+"&artist="+artist+"&mp3_url_id="+mp3_url_id+"&album="+album;
	elm.parentNode.innerHTML='<img src="http://www.fruitunes.com/images/inlist.png" title="This song is in your playlist">';
	AjaxIt(params);
	displayMsg("Success","This song's been added to your list",1000);
}

function goTo(page) {
	if($('search')) window.location="http://www.fruitunes.com/"+page+".php";
	else {
		if(page=="index") {
			if(paused==0) {
				var conf = confirm("You're currently playing a song.\nAre you sure you want to navigate away from this page?");
				if(conf) window.location="http://www.fruitunes.com/index.php";
			}
			else window.location="http://www.fruitunes.com/index.php";
		}
		else if(page=="recent") getRecent();
		else getTopPlays();
	}
}

////////////////////
// FORM FUNCTIONS //
////////////////////

var email_check=0;
var username_check=0;
var password_check=0;

/* check Email */

//params: val - value to check

//description: checks whether value is a valid email address or not
//alters form display accordingly

function checkEmail() {
	var form = document.forms['registerForm'];
	var val = form.email.value;
	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(val)){
		$('email_check').innerHTML='<img src="http://www.macwebos.com/icons/accept.png">';
		email_check=1;
		if(password_check && username_check) form.submit_button.disabled=false;
		return true;
	}
	$('email_check').innerHTML='<img src="http://www.macwebos.com/icons/cancel.png"> Invalid format.';
	form.submit_button.disabled=true;
	email_check=0;
	return false;
}

function checkForNums(val) {
	if (!val) return false;
	var Chars = "0123456789-";
	
	for (var i = 0; i < val.length; i++) { 
		if (Chars.indexOf(val.charAt(i)) == -1) return false;
	}
	return true;
}

/* checkAvail */

//params: name - username to check

//description: queries DB via ajax to see check username availability
//alters form display accordingly

function checkAvail() {
	var name = document.forms['registerForm'].username.value;
	var c = checkForNums(name);
	if(name.length<5) {
		$('username_check').innerHTML='<img src="http://www.macwebos.com/icons/cancel.png"> Too short...';
		document.forms['registerForm'].submit_button.disabled=true;
		username_check=0;
		return false;
	}
	var myAjax = new AjaxMe();
	myAjax.open("GET","ajax.php?checkName="+name,true);
	myAjax.onreadystatechange=function() {
		if(myAjax.readyState==4 || myAjax.readyState=="complete") {
			var res = myAjax.responseText;
			if(res!="") {
				$('username_check').innerHTML='<img src="http://www.macwebos.com/icons/cancel.png"> Already taken or invalid';
				document.forms['registerForm'].submit_button.disabled=true;
				username_check=0;
				return false;
			}
			else {
				username_check=1;
				$('username_check').innerHTML='<img src="http://www.macwebos.com/icons/accept.png">';
				if(password_check && email_check) document.forms['registerForm'].submit_button.disabled=false;
				return true;
			}	
		}
	}
	myAjax.send(null);
}

/* checkPasswords */

//description: ensures passwords are the same

function checkPasswords() {
	var form = document.forms['registerForm'];
	var pass1 = form.password.value;
	var pass2 = form.password2.value;
	if(pass1=="" || pass2=="") return;
	if(pass1!=pass2) {
		form.submit_button.disabled=true;
		$('password_check').innerHTML='<img src="http://www.macwebos.com/icons/cancel.png"> Don\'t match.';
		password_check=0;
		return false;
	}
	else {
		password_check=1;
		$('password_check').innerHTML='<img src="http://www.macwebos.com/icons/accept.png">';
		if(username_check && email_check) form.submit_button.disabled=false;
		return true;
	}
}

function register() {
	var form = document.forms['registerForm'];
	document.forms['loginForm'].username.value=form.username.value;
	if(email_check && password_check && username_check) {
		AjaxIt('register=1&username='+form.username.value+'&email='+form.email.value+'&password='+form.password.value,'','actually_login');
		closePopup();
		displayMsg("Thanks for signing up","You're logged in, so start listening!");
	}
}

function getSearch() {
	searching=true;
	var text = document.forms['search'].q.value;
	addHistoryItem('<a href="#" onclick="document.forms[\'search\'].q.value=\''+text+'\';getSearch()">'+text+'</a>');
	if(text.replace(/ /g,"")=="") return;
	location.href = '#' + text.replace(/ /g,"");
	var t = text.split("-");
	var val="";
	if(t.length>1) val = "for songs similar to \""+t[1].substring(1,t[1].length)+"\" by "+t[0];
	else val = "for '"+text+"'";
	if($('searchFor')) $('searchFor').innerHTML="Searched "+val;
	if($('playcount')) $('playcount').style.display="none";
	document.title = "FruiTunes | Search";
	showWaiting("Searching "+val);
	search=1;
	curURL = "http://www.fruitunes.com/search.php?q="+encodeURIComponent(text);
	AjaxIt('load=1&type=search&q='+encodeURIComponent(text),'results','postsearch');
	//AjaxIt('search='+text,'results','postsearch');
}

function showWaiting(value) {
	var height = $('results').offsetHeight;
	var place = Math.floor(height/2)-20;
	$('results').innerHTML='<div class="loading"><img src="images/ajax-loader.gif" style="margin-top:'+place+'px;"><br/><h2>'+value+'</h2></div>';
	$('results').style.height=height+"px";
}

function postsearch(myAjax) {
	if($('songs')) {
		var found=false;
		var count = $('songs').getElementsByTagName('li');
		for(var i=0;i<count.length;i++) {
			if(count[i].className=="title") continue;
			if(count[i].getAttribute("location")==$('curLocation').innerHTML.replace(/%20/g," ")) {
				current=i;
				count[i].className="playing";
				var id = count[i].getAttribute("num");
				$('state_'+id).innerHTML = (paused==0)?"PLAYING":"PAUSED";
				count[i].scrollIntoView();
				found=true;
				break;
			}
		}
		if(!found) current=null;
	}
	if($('profile_info')) {
		if(searching) $('profile_info').style.display="none";
		else $('profile_info').style.display="";
	}
	init();
}

function recount() {
	if(!$('songs')) return;
	var count = $('songs').getElementsByTagName('li');
	array_length=count.length;
	if(count.length==0) num="no";
	else num=count.length;
	$('thecount').innerHTML=num+" Songs";
	if(num>=100 && search) {
		var search = document.forms['search'].q.value;
		var tt = search.split(":");
		if(tt.length<=1) var newsearch="2:"+search;
		else {
			var num = parseFloat(tt[0]) +1;
			var newsearch=num+":"+tt[1];
		}
		$('thecount').innerHTML+=' <a href="#" onclick="document.forms[\'search\'].q.value=\''+newsearch+'\';getSearch();">Show More</a>';
	}
}

function getRecent() {
	if($('searchFor')) $('searchFor').innerHTML="Recently Played";
	if(!slider) {
		$('curTitle').innerHTML = "Recently Played";
		$('curArtist').innerHTML = "Press play or click a song to start listening!";
	}
	search=0;
	list=0;
	curURL = "http://www.fruitunes.com/recent.php";
	document.title = "FruiTunes | Recent";
	showWaiting("Loading Recent Songs");
	hideProfile();
	AjaxIt('load=1&type=recent','results','postsearch');
}

function getTopPlays() {
	html('searchFor','Popular');
	if(!slider) {
		html('curTitle','Popular FruiTunes');
		html('curArtist','Press play or click a song to start listening!');
	}
	search=0;
	list=0;
	curURL = "http://www.fruitunes.com/top.php";
	document.title = "FruiTunes | Popular";
	hideProfile();
	showWaiting("Loading Popular Songs");
	AjaxIt('load=1&type=top25','results','postsearch');
}

function getFeed() {
	html('searchFor','Feed');
	if(!slider) {
		html('curTitle','Recently Added Songs');
		html('curArtist','Press play or click a song to start listening!');
	}
	search=0;
	list=0;
	curURL = "http://www.fruitunes.com/newsfeed.php";
	document.title = "FruiTunes | Feed";
	hideProfile();
	showWaiting("Loading Recently Added Songs");
	AjaxIt('load=1&type=newsfeed','results','postsearch');
}

function loadPlaylist(which,user) {
	if(!user || user=="") user=username;
	if($('search')) window.location='playlist.php?id='+which;
	else {
		if($('popup')) closePopup();
		html('searchFor',user+"'s FruiTunes <a class='share' href='#' onclick='share(\""+user+"\")'>Share</a>");
		if(!slider) {
			html('curTitle',user+"'s FruiTunes");
			html('curArtist',"Press play or click a song to start listening!");
		}
		search=0;
		list=which;
		curURL = "http://www.fruitunes.com/"+username;
		showWaiting("Loading "+user+"'s Playlist");
		AjaxIt('load=1&type=playlist&userID='+which,'results','postsearch');
	}
}

function favlist(which,elm) {
	elm.innerHTML="De-Favorite";
	elm.setAttribute("class","unfavlist");
	elm.setAttribute("onclick","unfavorite("+which+",this)");
	AjaxIt('favlist=1&list='+which);
}

function unfavlist(which,elm) {
	elm.innerHTML="Favorite";
	elm.setAttribute("class","favlist");
	elm.setAttribute("onclick","favorite("+which+",this)");
	AjaxIt('favlist=2&list='+which);
}

function loadUser(which,user) {
	username=user;
	location.href = "#p_"+user;
	//$('results').setAttribute("id","results_"+location.hash);
	//var newdiv = cr('div','results','','');
	//$('body').insertBefore(newdiv,$('bottombar'));
	if($('search')) {
		window.location='playlist.php?id='+which;
		return;
	}
	if(!$('profile_info')) {
		$('middle').style.height = $('middle').offsetHeight+"px";
		var div = cr('div','profile_info','','');
		div.style.display="none";
		if($('middle')) $('middle').insertBefore(div,$('results'));
		else $('wrapper').insertBefore(div,$('results'));
	}
	AjaxIt('getuserinfo='+which,'profile_info');
	if($('popup')) closePopup();
	var inht = user+"\'s Playlist";
	html('searchFor',inht);
	if(!slider) {
		html('curTitle',user+"'s FruiTunes");
		html('curArtist',"Press play or click a song to start listening!");
	}
	search=0;
	list=which;
	curURL = "http://www.fruitunes.com/"+username;
	document.title = "FruiTunes | "+user;
	showWaiting("Loading "+user+"'s Playlist");
	AjaxIt('load=1&type=playlist&userID='+which,'results','postsearch');
}

function hideProfile() {
	if($('profile_info')) {
		if($('middle')) $('middle').removeChild($('profile_info'));
		else $('wrapper').removeChild($('profile_info'));
	}
	resizeList();
}

function forgotPassword(prempt) {
	var msg="";
	if(prempt) msg = prempt+"\n";
	msg+="Please enter your email address";
	var em = prompt(msg);
	if(em) {
		AjaxIt("sendPass=1&email="+em,'','postForgot');
	}
}

function postForgot(myAjax) {
	if(myAjax.responseText=="") {
		displayMsg("Success","We've emailed your password to you.");
		toggle('login_box');
		return;
	}
	else {
		forgotPassword("We don't have that email in our database...");
	}
}

function loadAccount() {
	if(!$('account_info')) {
		var div = cr('div','account_info','','');
		$('body').insertBefore(div,$('topbar'));
	}
	else {
		var q = new Fx.Slide('account_info');
		q.slideIn();
	}
	AjaxIt('account=1','account_info');

}

function saveAccount() {
	var form = document.forms['profileForm'];
	var e=true;
	var p=true;
	var email = form.email.value;
	if (!/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email)) {
		alert("Email invalid");
		form.email.value="";
		form.email.focus();
		e=false;
		return false;
	}
	AjaxIt('saveAccount=1&email='+form.email.value+"&password="+form.password.value+"&city="+form.city.value+"&state="+form.state.value+"&website="+form.website.value,'','postAccountSave');
	closePopup();
	displayMsg("Success","Your profile info has been saved.",2000);
	return false;
}

function postAccountSave(myAjax) {
	if(myAjax.responseText==parseFloat(list)) AjaxIt('getuserinfo=0','profile_info');
}

//////////////////////
// HELPER FUNCTIONS //
//////////////////////


/* checkKey */

//params: e - window event

//description: checks for arrow key press (L or R) and changes current playlist song

function checkKey(e) {
	if(editing || $('popup')) return;
	var code =  e.keyCode? e.keyCode : e.charCode
	if(code==37 && player) previous_track();
	else if(code==17 || code==224) command=true;
	else if(code==39 && player) next_track();
	else if(code==32 && player) playpause($('play_button'));
	else if(code==27) {
		if(fullscreen) toggle_fullscreen();
		if($('popup')) closePopup();
	}
}

/* toggle */

//params: id - id of element to toggle

//description: show/hide element, special case for login box

function toggle(id) {
	var elm = $(id);
	if(elm.style.display=="none") {
		elm.style.display="";
		if(id=="login_box") {
			document.forms['loginForm'].username.focus();
			$('login_link').style.backgroundImage="url(images/nav_bg.png)";
		}
		if(id=="rank") $('popup_inner').style.height="400px";
	}
	else {
		elm.style.display="none";
		if(id=="login_box") st('login_link','backgroundImage','');
		if(id=="rank") $('popup_inner').style.height="316px";
	}
}

function loadPopup(which,params) {
	if(which=="profile" && logged_on==0) return;
	cr('div','popup','','body');
	cr('div','popupload','','popup');
	$('popupload').innerHTML='<img src="images/popupload.gif">';
	var url ="popup="+which;
	if(params) url+="&params="+params;
	AjaxIt(url,'popup','setupPlaceholders');
}

function displayMsg(title,msg,dur) {
	if($('popup')) return;
	var c = cr('div','popup','','body');
	c.style.background="none";
	var d = cr('div','popup_msg','','popup');
	c.appendChild(d);
	d.innerHTML='<h3>'+title+'</h3>'+msg;
	if(!dur) dur=3000;
	setTimeout('closePopup()',dur);
}

function toggle_fullscreen() {
	if($('fullscreen')) {
		var d = $('play_area');
		var c = $('song_info');
		d.insertBefore($('counter'),$('song_info'));
		d.insertBefore($('curAlbum'),$('song_info'));
		c.appendChild($('curTitle'));
		c.appendChild($('curArtist'));
		c.appendChild($('progress'));
		$('wrapper').appendChild($('footer'));
		$('body').removeChild($('fullscreen'));
		fullscreen=false;
	}
	else {
		var c = cr('div','fullscreen','','body');
		var d = cr('div','fullscreen_div','','fullscreen');
		var e = cr('div','fullscreen_info','','fullscreen_div');
		var f = cr('div','fullscreen_titles','','fullscreen_info');
		e.appendChild($('curAlbum'));
		f.appendChild($('curTitle'));
		f.appendChild($('curArtist'));
		f.appendChild($('progress'));
		f.appendChild($('counter'));
		c.appendChild($('footer'));
		var img = cr('img','','logo','fullscreen_div');
		img.setAttribute("width","180");
		img.setAttribute('src','http://www.fruitunes.com/images/fruitunes_onblack.png');
		var a = cr('a','close_fullscreen','','fullscreen_div');
		a.setAttribute("onclick","toggle_fullscreen()");
		fullscreen=true;
	}
}

function closePopup() {
	$('body').removeChild($('popup'));
}

function embedid(id) {
	cr('div','popup','','body');
	var parent = $(id);
	var id = parent.getAttribute("num");
	var title = parent.getAttribute("title");
	var artist = parent.getAttribute("artist");
	var mp3 = parent.getAttribute("mp3_url_id");
	var location = parent.getAttribute("location");
	AjaxIt('popup=embed&title='+title+'&artist='+artist+'&mp3_url_id='+mp3+'&soundFile='+location,'popup');
	hidemore();
}

function embed(elm) {
	cr('div','popup','','body');
	var parent = elm.parentNode.parentNode;
	var id = parent.getAttribute("num");
	var title = parent.getAttribute("title");
	var artist = parent.getAttribute("artist");
	var mp3 = parent.getAttribute("mp3_url_id");
	var location = parent.getAttribute("location");
	AjaxIt('popup=embed&title='+title+'&artist='+artist+'&mp3_url_id='+mp3+'&soundFile='+location,'popup');
}

function lyrics(elm) {
	cr('div','popup','','body');
	var parent = elm.parentNode.parentNode;
	var a = parent.getAttribute("artist");
	var t = parent.getAttribute("title");
	AjaxGet('lyrics.php?artist='+a+'&title='+t,'popup','postlyrics');
}

function postlyrics(myAjax) {
	if(myAjax.responseText=="") {
 		closePopup();
  		displayMsg("Sorry!","The lyrics couldn't be found",2000);
		return;
	}
	var ch = xClientHeight() - 236;
	if(ch>316) {
	 	$('popup_inner').style.height=ch+"px";
	  	$('popupcontent').style.height=(ch-81)+"px";
	}
	/*
if($('curAlbum').childNodes[0]) {
		var img = document.createElement('img');
		img.setAttribute("class","album");
		img.setAttribute("src",$('curAlbum').childNodes[0].getAttribute("src"));
		$('popupcontent').insertBefore(img,$('lyrics'));
	}
*/
}
/*

function lyrics(elm) {
 	cr('div','popup','','body');
	var parent = elm.parentNode.parentNode;
	var id = parent.getAttribute("num");
	var title = parent.getAttribute("title");
	var artist = parent.getAttribute("artist");
	var url = "http://lyricwiki.org/api.php?artist=" + encodeURIComponent(artist) + "&song=" + encodeURIComponent(title) + "&fmt=js";
	loadLyrics(url);
}

function lyricsid(id) {
	cr('div','popup','','body');
	var parent = $(id);
	var id = parent.getAttribute("num");
	var title = parent.getAttribute("title");
	var artist = parent.getAttribute("artist");
	var url = "http://lyricwiki.org/api.php?artist=" + encodeURIComponent(artist) + "&song=" + encodeURIComponent(title) + "&fmt=js";
	loadLyrics(url);
	hidemore();
}

function write(song) {
  if (!song || song.lyrics=="Not found") {
 	closePopup();
  	displayMsg("Sorry!","The lyrics couldn't be found",2000);
  	return;
  }
  var div = cr('div','popup_inner','','popup');
  div.innerHTML='<span class="close_link"><img onclick="closePopup()" src="http://www.fishofthebay.com/images/closebox.png"/></span><h1>Song Lyrics</h1><div id="popupcontent"></div>';
  document.getElementById('popupcontent').innerHTML = '<b>"'+song.song+'" by '+song.artist+'</b><br/><small>Courtesy of <a href="http://www.lyricswiki.org">lyricswiki.org</a></small><div class="lyrics">'+song.lyrics.replace(/\n/g, "<br />")+'<br/><br/></div>';
  var ch = xClientHeight() - 236;
  if(ch>316) {
 	$('popup_inner').style.height=ch+"px";
  	$('popupcontent').style.height=(ch-81)+"px";
  }
}

function loadLyrics(url) {
  var head = document.getElementsByTagName('head')[0]
  var callback = function() {write(song)}

  if (lyricsScript) {
    lyricsScript.onReadyStateChange = null
    head.removeChild(lyricsScript)
  }
  lyricsScript = document.createElement("script")
  lyricsScript.setAttribute("type", "text/javascript")
  lyricsScript.setAttribute("src", url)
  lyricsScript.setAttribute("charset", "utf-8")
  head.appendChild(lyricsScript)

  if (lyricsScript.addEventListener) {
    // firefox and opera
    lyricsScript.addEventListener("load", callback, false)
  } else if (lyricsScript.attachEvent) {
    // IE
	window.attachEvent("onload", callback)
  } else{
	//script.onload= callback;
  }
}

*/
function twitter(elm) {
	cr('div','popup','','body');
	var parent = elm.parentNode.parentNode;
	var id = parent.getAttribute("num");
	var title = parent.getAttribute("title");
	var artist = parent.getAttribute("artist");
	AjaxIt("popup=twitter&song="+title+"&artist="+artist,'popup');
}

function twitterid(id) {
	cr('div','popup','','body');
	var parent = $(id);
	var id = parent.getAttribute("num");
	var title = parent.getAttribute("title");
	var artist = parent.getAttribute("artist");
	AjaxIt("popup=twitter&song="+title+"&artist="+artist,'popup');
	hidemore();
}
/*

function getLink(count,url) {
	cr('div','popup','','body');
	AjaxIt("popup=link&count="+count+"&url="+url,'popup');
	hidemore();
}
*/

function tweet() {
	var form = document.forms['popupForm'];
	var user = form.t_user.value;
	var pass = form.t_pass.value;
	var title = form.title.value;
	var artist = form.artist.value;
	AjaxIt('user='+user+'&password='+pass+'&title='+title+'&artist='+artist,'','postTweet','twitter.php');
}

function postTweet(myAjax) {
	if(myAjax.responseText!="") {
		alert("Incorrect login credentials");
		document.forms['popupForm'].t_pass.value="";
		document.forms['popupForm'].t_pass.focus();
	}
	else {
		closePopup();
		displayMsg("Tweet!","Your Twitter status has been updated",1000);
	}
}

function fix(elm,title,artist,location,mp3) {
	AjaxIt('fix=1&title='+title+'&artist='+artist+'&location='+location+'&mp3_url_id='+mp3);
	elm.setAttribute("src","http://www.macwebos.com/icons/link.png");
}