//GLOBAALIT
//var selected_a = new Array(); //Listasta valitut ID:t
var current_list = new Array(); //Toistettava list
var shown_list = new Array(); //Näytettävä list
var current_list_id = -1;
var shown_list_id = -1;
var song_changed_ite=false; //Biisin loppumisen boolean
var text_input_focused=false;//Onko haku valittu
var dragged=-1; //Mitä raahataan?
var playamount_holder;
var current_playlist_id=-1;//Toistetun playlistin id
var shown_playlist_id=-1;//Näytetyn playlistin id
var hq_video=false;
var mute=false;
var coord_x;
var coord_y;

//DEFAULTIT
var default_new_pl_value="+ Luo uusi soittolista...";

//YLEISFUNKTIOT

function timePrint(duration) {
	var minutes=Math.floor(duration/60);
	var seconds=duration-(minutes*60);
	if(seconds<10) {
		seconds="0"+seconds;
	}
	return minutes+":"+seconds;
}

function resetGlobals() {
	shown_playlist_id=-1;
	dragged=-1;
}

//PIIRTOFUNKTIOT

/*
drawList - Listaelementin täyttäminen
list_a
['video_id']
['name']
['duration']
*/

function drawList(list_a) {
	//Listan globalisointi
	shown_list=list_a;
	//current_list_id=0;
	//Listan tyhjentäminen
	$("#browser_list").html('<div class="list_header"><div class="list_name">Nimi</div><div class="list_duration">Kesto</div></div>');
	for(i=0;i<list_a.length;i++) {
		$("#browser_list").append('<div class="list_row" title="'+i+'" id="list_item_'+i+'"><div class="list_name">'+list_a[i]['title']+'</div><div class="list_duration">'+timePrint(list_a[i]['duration'])+'</div><div class="clear"></div></div>');
	}
	//Jos klikataan...
	$("#browser_list > .list_row").click(function (){
		shown_list_id=parseInt(this.title);
		selectFromList();
	});
	$("#browser_list > .list_row").dblclick(function (){
		var t_title=parseInt(this.title);
		current_list=shown_list;
		current_list_id=t_title;
		current_playlist_id=shown_playlist_id;
		play();
	});
	$("#browser_list > .list_row").mousedown(function (e){
		dragged=this.title;
		coord_x=e.pageX;
		coord_y=e.pageY;
		return false;
	});
	$(document).mouseup(function (){
		dragged=-1;
		hidePlaylistDragged();
	});
}

function selectFromList() {
	$("#browser_list > .list_row").css("background","none");
	if(showingCurrentPlaylist()) {
		$("#list_item_"+current_list_id).css("background","#646464");
	}
	$("#list_item_"+shown_list_id).css("background","#878787");
}

function showingCurrentPlaylist() {
	if(current_playlist_id==shown_playlist_id) {
		return true;
	} else {
		return false;
	}
}

//NAVIGAATIO
function navigation(a,pid) {
	resetGlobals();
	shown_list_id=-1;
	$("#browser_list").css("display","none");
	$("#browser_html").css("display","none");
	$("#browser_pldel").css("display","none");
	switch(a) {
		case "getplaylist":
			$("#browser_list").css("display","block");
			dragged=-1;
			if(pid!=shown_playlist_id) {
				$.post("ajax/backend.php?a=showpl",{pid:pid},function (resp){
					drawList(resp);
					shown_playlist_id=pid;
					selectFromList();
				},"json");
			}
			//selectFromList();
		break;
		case "top100":
			$("#browser_list").css("display","block");
			dragged=-1;
			$.get("ajax/backend.php?a=top100",function(resp){
				drawList(resp);
				shown_playlist_id=-1;
				selectFromList();
			},"json");
		break;
		case "frontpage":
			$("#browser_html").css("display","block");
		break;
		case "playlist_deletion":
			$("#browser_pldel").css("display","block");
			$.get("ajax/backend.php?a=loadpl",function (resp){
				//Tulostaminen
				$("#browser_pldel").empty();
				$("#browser_pldel").html("<p>Poista:</p>");
				for(i=0;i<resp.length;i++) {
					$("#browser_pldel").append('<input type="button" class="list_row" title="'+resp[i]['id']+'" value="'+resp[i]['name']+'" onclick="deletePlaylist('+resp[i]['id']+');" />');
				}
			},"json");
		break;
	}
}

//REKISTERÖINTI

function register() {
	var reg_user=$("#reg_user").val();
	var reg_pass1=$("#reg_pass1").val();
	var reg_pass2=$("#reg_pass2").val();
	$.post("ajax/backend.php?a=register",{reg_user:reg_user,reg_pass1:reg_pass1,reg_pass2:reg_pass2},function(resp){
		if(resp['type']==1) {
			location.href="./?firstrun=true";
		} else {
			$("#reg_error").css("display","block");
			$("#reg_error").html(resp['msg']);
		}
	},"json");
}

//SOITTOLISTAT

function deletePlaylist(pid) {
	$.post("ajax/backend.php?a=deletepl",{pid:pid},function(){ navigation("playlist_deletion"); refreshPlaylists(); });
}

function refreshPlaylists() {
	//Haku
	$.get("ajax/backend.php?a=loadpl",function (resp){
		if(resp) {
			//Tulostaminen
			$("#playlist_list").empty();
			for(i=0;i<resp.length;i++) {
				$("#playlist_list").append('<input type="button" class="left_bar_link list_row" title="'+resp[i]['id']+'" value="'+resp[i]['name']+'" onclick="navigation(\'getplaylist\','+resp[i]['id']+');" />');
			}
			//Raahaus
			$("#playlist_list > .list_row").mouseup(function (){
				if(dragged>=0) {
					//Lisääminen soittolistaan
					addToPlaylist(this.title);
				}
			});
			leftBarLinkEffect();
		}
	},"json");
}

/*function getPlaylist(pid) {
	resetGlobals();
	$.post("ajax/backend.php?a=showpl",{pid:pid},function (resp){
		drawList(resp);
	},"json");
	shown_playlist_id=pid;
}*/

function addToPlaylist(playlist_id) {
	var added=shown_list[dragged];
	$.post("ajax/backend.php?a=addtopl",{pid:playlist_id,video_id:added['video_id'],title:added['title'],duration:added['duration']});
	dragged=-1;
}

function deleteFromPlaylist() {
	if(shown_playlist_id>=0) {
		//poista
		$.post("ajax/backend.php?a=deletefrompl",{pid:shown_playlist_id,video_id:shown_list[shown_list_id]['video_id']},function(){ navigation("getplaylist",shown_playlist_id); });
	}
}

function createPlaylist(str) {
	$.post("ajax/backend.php?a=createpl",{pl_name:str},function(){
		refreshPlaylists();
	});
}

//TOISTO

function play() {
	if(ytvideo) {
		var video_id=current_list[current_list_id]['video_id'];
		$("#video_link").val("http://www.vapaatavara.com/?vid="+video_id);
		$("#video_info").html(current_list[current_list_id]['title']);
		if(video_id) {
			ytvideo.stopVideo();
			if(hq_video) {
				hq_q="hd720";
			} else {
				hq_q="medium";
			}
			ytvideo.cueVideoById(video_id,0,hq_q);
			//Duration
			var duration_sec=Math.round(current_list[current_list_id]['duration']);
			$("#seek_bar").slider("option","max",duration_sec);
			$("#seek_bar").slider("value",0);
			//Toisto
			playamount_holder=setTimeout(playamount,(duration_sec/3)*1000);
			clearTimeout(playamount_holder);
			playerControl("play");
			song_changed_ite=false;
			selectFromList();
		}
	}
}

function playamount() {
	$.post("ajax/backend.php?a=play",{video_id: current_list[current_list_id]['video_id'], title: current_list[current_list_id]['title'], duration: current_list[current_list_id]['duration']});
}

function playerControl(func) {
	switch(func) {
		case "play":
			if(ytvideo.getPlayerState()!=1) {
				//play
				ytvideo.playVideo();
				$("#pc_play").css("background-image","url(images/pc_pause.png)");
			} else {
				//pause
				ytvideo.pauseVideo();
				$("#pc_play").css("background-image","url(images/pc_play.png)");
			}
		break;
		case "prev":
			var temp_id=current_list_id-1;
			if(temp_id>=0) {
				current_list_id=temp_id;
				if(showingCurrentPlaylist()) {
					shown_list_id=temp_id;
				}
				selectFromList();
				play();
			}
		break;
		case "frwd":
			var temp_id=current_list_id+1;
			if(temp_id<current_list.length) {
				current_list_id=temp_id;
				if(showingCurrentPlaylist()) {
					shown_list_id=temp_id;
				}
				selectFromList();
				play();
			}
		break;
		case "hq":
			if(ytvideo) {
				if(!hq_video) {
					var video_quality="hd720";
					hq_video=true;
					$("#pc_hq").css("background-position","right top");
				} else {
					var video_quality="medium";
					hq_video=false;
					$("#pc_hq").css("background-position","left top");
				}
				ytvideo.setPlaybackQuality(video_quality);
				$.post("ajax/backend.php?a=setquality",{quality:video_quality});
			}
		break;
		case "mute":
			if(ytvideo) {
				if(!mute) {
					ytvideo.mute();
					mute=true;
					$("#pc_mute").css("background-position","right top");
				} else {
					ytvideo.unMute();
					mute=false;
					$("#pc_mute").css("background-position","left top");
				}
			}
		break;
	}
}

function playerSeekBarSlide() {
	if(ytvideo) {
		ytvideo.seekTo($("#seek_bar").slider("value"),true);
	}
}

//EI TOIMI JOS BIISIEN PITUUS ON SAMA!
function playerUpdate() {
	if(ytvideo && current_list_id!=undefined && current_list.length>0) {
		//seek bar
		var player_time=Math.round(ytvideo.getCurrentTime()); 
		$("#seek_bar").slider("value",player_time);
		//seek bar print
		$("#time_print").text(timePrint(player_time)+" / "+timePrint(current_list[current_list_id]['duration']));
		//Loppuuko biisi?
		if(ytvideo.getPlayerState()==0 && !song_changed_ite) {
			song_changed_ite=true;
			playerControl('frwd');
		}
	}
}

//YT HAKU

function searchYoutube(query) {
	
	$("#browser_list").css("display","block");
	$("#browser_html").css("display","none");
	$("#browser").scrollTop(0);
	
	var search_results_a = new Array();
	
	shown_playlist_id=-2;
	
	//, category: "music"
	$.get("http://gdata.youtube.com/feeds/api/videos",{q: query, orderby: "relevance", v: "2", alt: "json"}, function(resp){
	
		for(var i=0;i<100;i++) {
			
			var yt_sr = resp['feed']['entry'][i];
			var yt_result_temp = new Array();
			
			if(yt_sr) {
				
				var video_id_a = yt_sr['id']['$t'].split(":");
				
				yt_result_temp['video_id'] = video_id_a.pop();
				yt_result_temp['title'] = stripYoutubeTitle(yt_sr['title']['$t']);
				yt_result_temp['duration'] = yt_sr['media$group']['yt$duration']['seconds'];
				
				search_results_a.push(yt_result_temp);
				
			}
			
		}
		
		drawList(search_results_a);
		
	}, "json");
	
}

function playByVideoId(vid) {
	$.get("http://gdata.youtube.com/feeds/api/videos/"+vid+"?v=2&alt=json",function(resp){
		var yt_sr = resp['entry'];
		var yt_result_temp = new Array();
		if(yt_sr) {
			var video_id_a = yt_sr['id']['$t'].split(":");
			yt_result_temp['video_id'] = video_id_a.pop();
			yt_result_temp['title'] = stripYoutubeTitle(yt_sr['title']['$t']);
			yt_result_temp['duration'] = yt_sr['media$group']['yt$duration']['seconds'];
		}
		current_list.push(yt_result_temp);
		current_list_id=0;
		play();
	},"json");
}

function stripYoutubeTitle(str_i) {
	var str=str_i.toLowerCase();
	var to_strip=new Array("(",")","[","]","{","}","\\\"","\"","official music video","official music","official video","music video","lyrics","sanat"," hd"," hq","new music");
	for(var i=0;i<to_strip.length;i++) {
		var str=str.replace(to_strip[i],"");
	}
	var str_a=str.split(" ");
	var str="";
	for(var i=0;i<str_a.length;i++) {
		var str=str+" "+str_a[i].substring(0,1).toUpperCase()+str_a[i].substring(1,str_a[i].length);
	}
	return str;
}

//YT PLAYER ALUSTUS

function createPlayer() {
	var params = { allowScriptAccess: "always" };
	var atts = { id: "youtube_player" };
	swfobject.embedSWF("http://www.youtube.com/apiplayer?enablejsapi=1&playerapiid=ytvideo&version=3","youtube_video", "240", "180", "8", null, null, params, atts);
}

function onYouTubePlayerReady(player_id) {
	ytvideo=document.getElementById('youtube_player');
	setInterval(playerUpdate,200);
	if(get_video_id){
		playByVideoId(get_video_id);
	}
	if(get_hq) {
		playerControl("hq");
	}
}

//TESTIDATAA ---------------------------------------------

//DOKUMENTTI VALMIS

$(document).ready(function() {
	//Luodaan soitin
	createPlayer();
	//Luodaan seek bar
	$("#seek_bar").slider({slide:playerSeekBarSlide});
	//Hakukentän kuuntelu
	$("#search_text").focus(function(){
		text_input_focused=true;
	});
	$("#search_text").blur(function(){
		text_input_focused=false;
	});
	$("#search_text").keypress(function(event) {
		switch(event['which']) {
			case 13:
			//enter
			searchYoutube($('#search_text').val());
			break;
		}
	});
	//Dokumentin kuuntelu
	$(document).keypress(function(event) {
		switch(event['which']) {
			case 32:
			//space
			if(ytvideo) {
				if(!text_input_focused) {
					playerControl("play");
				}
			}
			break;
			case 0:
			case 8:
			case 100:
			//delete, backspace
				if(!text_input_focused) {
					deleteFromPlaylist();
				}
			break;
		}
	});
	//Soittolistojen haku
	refreshPlaylists();
	if(!using_ie) {
		$("#loading").delay(700).fadeOut(200);
	}
	//Uusi soittolista -painike
	$("#new_playlist_input").val(default_new_pl_value);
	$("#new_playlist_input").focus(function(){
		text_input_focused=true;
		if(this.value==default_new_pl_value) {
			this.value="";
		}
	});
	$("#new_playlist_input").blur(function(){
		text_input_focused=false;
		if(this.value.length>0 && this.value!=default_new_pl_value) {
			createPlaylist(this.value);
		}
		this.value=default_new_pl_value;
	});
	$("#new_playlist_input").keypress(function(event){
		if(event['which']==13) {
			text_input_focused=false;
			if(this.value.length>0) {
				createPlaylist(this.value);
			}
			this.value=default_new_pl_value;
			this.blur();
		}
	});
	$("#browser_list").ready(function() {
		this.onselectstart = function () { return false; };
	});
	leftBarLinkEffect();
});

function leftBarLinkEffect() {
	$(".left_bar_link").click(function(){
		$(".left_bar_link").css("background","none");
		$(this).css("background","#646464");
	});
}

//Hiiren liike

$(window).mousemove(function(e){
	if(dragged>-1) {
		var x_change=e.pageX;
		var y_change=e.pageY;
		if(Math.abs(x_change-coord_x)>10 || Math.abs(y_change-coord_y)>10) {
			if($("#playlist_dragged").css("display")!="block") {
				$("#playlist_dragged").css("display","block");
				$("#playlist_dragged").html(shown_list[dragged]['title']);
			}
			$("#playlist_dragged").width($(window).width()-x_change-10);
			$("#playlist_dragged").css("left",x_change);
			$("#playlist_dragged").css("top",y_change+2);
		}
	}
});

function hidePlaylistDragged() {
	$("#playlist_dragged").css("display","none");
}

