/********************************************************************************************************************
 * Base para dialogs
********************************************************************************************************************/
function DialogResult() { this.Done=1; this.Cancel=0 }
function BaseDialog(title, width, height) { this.title=title; this.width=width; this.height=height; }
BaseDialog.prototype.open = function(){
	this.openBackground();
	this.renderer();
	this.locate();
	 if(this.onInit)
	 	this.onInit();
	 //Si pulsa la tecla escape
	var me = this;
	$(window).keypress(function(e){
		if(e.keyCode == 27){
			me.close();
		}
	}); 
};
BaseDialog.prototype.close = function(){
	var dlg = document.getElementById(this.id);
	document.getElementsByTagName("body")[0].removeChild(dlg);
	this.closeBackground();
	$(window).unbind("keypress");
};
BaseDialog.prototype.locate = function() {
	var dlg = document.getElementById(this.id);
	$("#" + this.id).show();
	dlg.style.position = "fixed";
	if(dlg)
	{
		dlg.style.left = (document.body.clientWidth / 2) - (dlg.clientWidth / 2) + "px";
		dlg.style.top = (document.body.clientHeight / 2) - (dlg.clientHeight / 2) + "px";
	}
};
BaseDialog.prototype.getTemplate = function(){
	return frames.f_templates.document.getElementById("tpl_" + this.id).innerHTML;
}
BaseDialog.prototype.openBackground = function(){
	var divBack = document.createElement("div");
	divBack.style.position = "fixed";
	divBack.style.top = "0px";
	divBack.style.width = "100%";
	divBack.style.height = "100%";
	divBack.style.backgroundColor = this.backColor;
	divBack.id = "background";
	divBack.style.display = "none";
	var me = this;
	divBack.onclick = function(){ me.close(); };
	document.getElementsByTagName("body")[0].appendChild(divBack);
	$("#background").css({opacity: 0.8});
	$("#background").show();
	
}
BaseDialog.prototype.closeBackground = function(){
	document.getElementsByTagName("body")[0].removeChild(document.getElementById("background"));
};
BaseDialog.prototype.result="";
BaseDialog.prototype.renderer=null;
BaseDialog.prototype.body="";

function defaultDialogRenderer() {
	var divDlg = document.createElement("div");
	divDlg.id= this.id;
	divDlg.style.position = "fixed";
	var divTop = document.createElement("div");
	divTop.id = "popup_top";
	var divHowto = document.createElement("div");
	divHowto.id = "popup_howto";
	var h1 = document.createElement("h1");
	h1.appendChild(document.createTextNode(this.title));
	divHowto.appendChild(h1);
	var divBody = document.createElement("div");
	divBody.id = "popup_content";
	divBody.innerHTML = this.getBody();
	
	var divBottom = document.createElement("div");
	divBottom.id = "popup_bottom";
	
	var divClose = document.createElement("div");
	divClose.id = "popup_bottom_close";
	var me = this;
	divClose.onclick = function() {me.close()}; 
	divBottom.appendChild(divClose);
	
	divDlg.appendChild(divTop);
	divDlg.appendChild(divHowto);
	divDlg.appendChild(divBody);
	divDlg.appendChild(divBottom);
	divDlg.style.display = "none";
	document.getElementsByTagName("body")[0].appendChild(divDlg);
}

/********************************************************************************************************************
 * Dialog login
********************************************************************************************************************/
function LoginDialog() {this.id = "dlg_login";}
LoginDialog.prototype = new BaseDialog(LG_LOGIN, 400, 300);
LoginDialog.prototype.renderer = defaultDialogRenderer;
LoginDialog.prototype.backColor = "#FFF";
LoginDialog.prototype.getBody = function(){
	var content = this.getTemplate();
	var tpl = new Template(content, null);
	return tpl.get();
}
LoginDialog.prototype.onInit = function(){
	$("#loginEmail").focus();
}
loginFormSubmit = function()
{
	$("#loginButton")
		.attr("disabled",true)
		.css("opacity",0.5);
	var params = new Params();
	params.add("email",$("#loginEmail").val());
	params.add("password",$("#loginPassword").val());
	params.add("remember",$("#loginRemember").attr("checked"));
	var queue = new AjaxQueue("index.php");
	queue.callServer("callbacks", "login" ,params,function(data){
		var isLogin = eval('(' + data + ')');
		if(isLogin != "false"){
			$("#loginEmail").css("background-image","url(css/images/input_bg.gif)");
			$("#loginPassword").css("background-image","url(css/images/input_bg.gif)");
			$("#login_content .error").hide();
			location.href = "/#main";
		}
		else{
			$("#loginEmail").css("background-image","url(css/images/input_bg_error.gif)");
			$("#loginPassword").css("background-image","url(css/images/input_bg_error.gif)");
			$("#login_content .error").show("slow");
		}
		$("#loginButton").attr("disabled",false);
		$("#loginButton").css("opacity",1.0);
	});
	return false;
}
/********************************************************************************************************************
 * Dialog control (el que sale al pinchar en una cancion)
********************************************************************************************************************/
function ControlDialog() {this.id = "dlg_control";}
ControlDialog.prototype = new BaseDialog("", 530, 420);
ControlDialog.prototype.renderer = function(){
	var divDlg = document.createElement("div");
	divDlg.id = this.id;
	divDlg.style.display = "none";
	divDlg.style.width = this.width+"px";
	divDlg.style.height = this.height+"px";
	divDlg.innerHTML = this.getBody();
	document.getElementsByTagName("body")[0].appendChild(divDlg);
};
ControlDialog.prototype.backColor = "#FFF";
ControlDialog.prototype.getBody = function(){
	var content = this.getTemplate();
	var tpl = new Template(content, null);
	return tpl.get();
}
ControlDialog.prototype.parentClose = BaseDialog.prototype.close;
ControlDialog.prototype.close = function(clearVars){
	this.parentClose();
	if(clearVars == true || clearVars == null){
		TRACK_ID = null;
		LIST_ID = null;
		SONG_ID = null;
		SONG_TEXT = null;
	}
	$("#menuControlSubShareContainer").css("display","none");
}
ControlDialog.prototype.onInit = function(){
	var me = this;
	var buttons = $("#menuControl div:not(#menuControlClose, #menuControlSubShareContainer)");
	
	if(TRACK_ID != null && LIST_ID != null)
	{
		$("#menuControlAdd").css("background-position","-448px -511px");
	}
	//Cambia la opacidad de todas las divisiones (excepto para el boton de cerrar)
	buttons.each(function(){
		$(this).css({opacity:0.5});
	});
	//Al pasar por encima pone el botón opaco
	buttons.mouseover(function(){
		$(this).css({opacity:1});
	});
	//Al salir del botón el botón vuelve a ser traslúcido
	buttons.mouseout(function(){
		$(this).css({opacity:0.5});
	});
	//Se hace click en cerrar
	$("#menuControlClose").click(function(){
		me.close();
	});
	//Se hace click en play
	$("#menuControlPlay").click(function(){
		if(TRACK_ID != null && LIST_ID != null)
		{
			player.setSong(LIST_ID, TRACK_ID);
		}
		else
			player.setSingleSong(SONG_TEXT,SONG_ID)
		me.close();
	});
	//Se hace click en Add
	$("#menuControlAdd").click(function(){
		me.close(false);
		if(TRACK_ID != null && LIST_ID != null)
		{
			player.delSong(LIST_ID, TRACK_ID);
		}
		else{
			var addDialog = new AddToListDialog();
			addDialog.open();
		}
		
	});
	//Click en share: mostramos/ocultamos el submenu
	$("#menuControlShare").click(function(){
		if($("#menuControlSubShareContainer").css("display") != "block")
			showSubMenu();
		else
			hideSubMenu();
	});
	//Click en el boton de enviar por email
	$("#menuControlEmail").click(function(){
		me.close(false);
		var emailDlg = new EmailDialog();
		emailDlg.open();
	});
	//Click en copiar url
	$("#menuControlUrl").click(function(){
		me.close(false);
		var urlDlg = new CopyUrlDialog();
		urlDlg.open();
	});
	
	//Salimos de share: ocultamos el submenu
	$("#menuControlShare").mouseout(function(){
		hideSubMenu();
	});
	//Estamos en el subMenu: forzamos que se muestre
	$("#menuControlSubShareContainer").mouseover(function(){
		showSubMenu();
	});
	function hideSubMenu(){
		$("#menuControlSubShareContainer").css({display:"none"});
		$("#menuControlEmail").css({opacity:0.5,display:"none"});
		$("#menuControlUrl").css({opacity:0.5,display:"none"});
	}
	function showSubMenu(){
		$("#menuControlSubShareContainer").css({display:"block"});
		$("#menuControlEmail").css({opacity:0.5,display:"block"});
		$("#menuControlUrl").css({opacity:0.5,display:"block"});
	}
}

/********************************************************************************************************************
 * Dialog para añadir cancion a lista
********************************************************************************************************************/
function AddToListDialog() {this.id = "dlg_add_song";}
AddToListDialog.prototype = new BaseDialog(LG_SELECT_LIST, 530, 420);
AddToListDialog.prototype.renderer = defaultDialogRenderer;
AddToListDialog.prototype.backColor = "#FFF";
AddToListDialog.prototype.getBody = function(){
	var content = this.getTemplate();
	var tpl = new Template(content, null);
	return tpl.get();
}
AddToListDialog.prototype.onInit = function(){
	var me = this;
	//Carga las listas de reproduccion en el popup
	function loadPopupPlaylists(){
		var ul = $("#popup_content ul");
		ul.empty();
		if(player.playLists && player.playLists.length > 0)
		{
			var i;
			for(i=0; i<player.playLists.length;i++)
			{
				ul.append("<li><a class='add_to_list' id='list-" + player.playLists[i].id + "'>" + player.playLists[i].name + "</a></li>");
			}
		}
		//Añade el evento click a las listas mostradas
		$(".add_to_list").click(function(){
			player.addSong(this.id.substring(5),SONG_ID,SONG_TEXT);
			me.close();
		});
	}
	//Formulario de crear una nueva lista
	$("#popupPlaylists_form").submit(function(){
		var new_list = $("#txt_new_list");
		var list = new_list.val();
		new_list.val("");
		//Compruebo que se ha escrito algo
		if(list.trim().length > 0){
			//Desabilita el boton
			$("#btn_add_list")
				.attr("disabled",true)
				.css("opacity",0.5);
			//Se envia la peticion AJAX
			player.addAlbum(list, function(data){
				//Al llegar la respuesta, repinta las listas
				loadPopupPlaylists();
				imprimeListas(false); 
				//Habilita el boton
				$("#txt_new_list").val(""); 
				$("#btn_add_list")
					.attr("disabled",false)
					.css("opacity",1);
				
			});
		}
		return false;
	});
	loadPopupPlaylists();
}
AddToListDialog.prototype.parentClose = BaseDialog.prototype.close;
AddToListDialog.prototype.close = function(){
	this.parentClose();
	SONG_ID = null;
	SONG_TEXT = null;
}
/********************************************************************************************************************
 * Dialog para enviar email
********************************************************************************************************************/
function EmailDialog() {this.id = "dlg_email";}
EmailDialog.prototype = new BaseDialog(LG_SHARE, 530, 420);
EmailDialog.prototype.renderer = defaultDialogRenderer;
EmailDialog.prototype.backColor = "#FFF";
EmailDialog.prototype.getBody = function(){
	var content = this.getTemplate();
	var tpl = new Template(content, null);
	return tpl.get();
}
EmailDialog.prototype.onInit = function(){
	this.mails = $("#suggestEmail").val();
	this.content = $("#suggestMessage").val();
	var me = this;
	$("#suggestEmail").focus(function(){
		if(this.value == me.mails)
			this.value = "";
	});
	$("#suggestEmail").blur(function(){
		if(this.value == "")
			this.value = me.mails;
	});
	$("#suggestMessage").focus(function(){
		if(this.value == me.content)
			this.value = "";
	});
	$("#suggestMessage").blur(function(){
		if(this.value == "")
			this.value = me.content;
	});
	$("#suggestSong").submit(function(){
		if($("#suggestMessage").val() == me.content || $("#suggestEmail").val() == me.mails)
			return false;
		$("#suggestSongButton").attr("disabled",true);
		$("#suggestSongButton").css("opacity",0.5);
		var params = new Params();
		params.add("email",$("#suggestEmail").val());
		params.add("message",$("#suggestMessage").val());
		params.add("song",SONG_ID);
		params.add("songName",SONG_TEXT);
		queue.callServer("callbacks", "share",params,function(data){
			if(data == true){
				$("#suggestEmail").css("background-image","url(css/images/input_bg.gif)");
				$("#suggestMessage").css("background-image","url(css/images/input_bg.gif)");
				$("#popupEmail_content .error").hide("fast");
				$("#popup_content .done").show("slow");
			}
			else{
				$("#suggestEmail").css("background-image","url(css/images/input_bg_error.gif)");
				$("#suggestMessage").css("background","url('css/images/input_bg_error.gif') repeat-x");
				$("#suggestMessage").css("background-color","#ffe5e5");
				$("#popup_content .error").show("slow");
			}
			$("#suggestSongButton").attr("disabled",false);
			$("#suggestSongButton").css("opacity",1.0);
		});
		return false;
	});
}
EmailDialog.prototype.parentClose = BaseDialog.prototype.close;
EmailDialog.prototype.close = function(){
	this.parentClose();
	SONG_ID = null;
	SONG_TEXT = null;
}
/********************************************************************************************************************
 * Dialog para copiar URL
********************************************************************************************************************/
function CopyUrlDialog() {this.id = "dlg_copy_url";}
CopyUrlDialog.prototype = new BaseDialog(LG_COPYURL, 530, 420);
CopyUrlDialog.prototype.renderer = defaultDialogRenderer;
CopyUrlDialog.prototype.backColor = "#FFF";
CopyUrlDialog.prototype.getBody = function(){
	var content = this.getTemplate();
	var tpl = new Template(content, null);
	return tpl.get();
}
CopyUrlDialog.prototype.onInit = function(){
	$("#urlSongMessage").val("http://www.plusmusica.com/#song/" + SONG_ID);
	//Copy Url
	$("#urlSongMessage").click(function(){
		$(this).select();
	});
}