/* FUNCIONES NECESARIAS PARA LA INICIALIZACI�N DE GOOGLE CALENDAR */
google.load("gdata","1");

function init_Calendar(){
		scope = "http://www.google.com/calendar/feeds/";
	  if(!google.accounts.user.checkLogin(scope)){
			document.getElementById("boton_login").style.display = "inline";
			document.getElementById("boton_logout").style.display = "none";
			document.getElementById("contenedor_opciones").style.display = "none";
		} else {
			document.getElementById("boton_login").style.display = "none";
			document.getElementById("boton_logout").style.display = "inline";
		}
}



function logMeIn(){
	scope = "http://www.google.com/calendar/feeds/";
  google.accounts.user.login(scope);	 
}

function logMeOut(){
   google.accounts.user.logout();
   window.location.reload();
}
/***********************************************************/

/*FUNCION QUE DEVUELVE LA LISTA DE CALENDARIOS DE LA CUENTA DE GOOGLE en el select INDICADO
destino --> select de destino, o en el caso que esTodos valga 'inputs' es una capa
esTodos --> value = 1 -> a�ade el campo Todos a la lista del select destino
            value = 'inputs' -> devuelve inputs a la capa destino
            value = 0 -> devuelve la lista del calendario al select destino
*/
function ListaCalendarios(destino,esTodos){ 
	  //comprobamos el login otra vez
	  scope = "http://www.google.com/calendar/feeds/";
	  if(!google.accounts.user.checkLogin(scope)) return;
	 
		// Crea el objeto Service del calendario
		var calendarService = new google.gdata.calendar.CalendarService('formacion');
		
		// Url del xml de los calendarios
		var feedUrl = 'http://www.google.com/calendar/feeds/default/allcalendars/full';
		
		
		// Funci�n de retorno del getAllCalendarsFeed
		var callback = function(result) {
			// Obtain the array of CalendarEntry
			var entries = result.feed.entry;
		  if(esTodos == 'inputs') var inputs = '';
		  
		  for (var i = 0; i < entries.length; i++) {
				var calendarEntry = entries[i];
				var calendarTitle = calendarEntry.getTitle().getText();
				var calendarId = calendarEntry.getId().getValue();
				var idcalend = calendarId.split('http://www.google.com/calendar/feeds/default/allcalendars/full/');
				
				if(esTodos == 'inputs')
				    inputs += '<input type="checkbox" name="'+calendarTitle+'" value="'+idcalend[1]+'"><label for="'+calendarTitle+'">  '+calendarTitle+'</label><br>';
				else {
				 elem = new Option(calendarTitle, idcalend[1], false, true);
				 destino.options[i+1] = elem;
			 }
			}
			if(esTodos == 'inputs') {
				  destino.innerHTML = inputs;
			} else {
				if(esTodos == 1) destino.options[entries.length] = new Option('Todos','Todos',false,true);
			  destino.options[0] = new Option('Selecionar','-1',false,true);
			}
		}
		
		// Funci�n de error de getCalendarsFeed
		var handleError = function(error) {
				alert(error);
		}
		
		// Enviar petici�n a traves del objetoService
		calendarService.getAllCalendarsFeed(feedUrl, callback, handleError);
}


/* CREA UN EVENTO EN EL CALENDARIO INDICADO
  idcalen: id google del calendario
  titulo: titulo del nuevo evento
  desc: descripcion del nuevo evento
  lugar: lugar del nuevo evento
  start: fecha de inicio del nuevo evento
  end: fecha de fin del nuevo evento
*/
function CrearEvento(idcalen,titulo,desc,lugar,start,end){
		if(idcalen != -1) {
		// Crea el objeto Service del calendario
		var calendarService = new google.gdata.calendar.CalendarService('formacion');
		
		// Url del xml de los calendarios
		var feedUri = 'http://www.google.com/calendar/feeds/'+idcalen+'/private/full';
		
		// Declaracion del objeto entry que sera el evento
		var entry = new google.gdata.calendar.CalendarEventEntry();
		
		// Titulo y descripcion del evento 
		entry.setTitle(google.gdata.Text.create(titulo));
		entry.setContent(google.gdata.Text.create(desc))
		
		// Declaraci�n del objeto When que sera la fecha
		var when = new google.gdata.When();
		
		// Declaraci�n del objeto Where que sera lugar
		var where= new google.gdata.Where();
		
		// Fecha Inicio, fecha Fin y lugar
		var startTime = google.gdata.DateTime.fromIso8601(start);
		var endTime = google.gdata.DateTime.fromIso8601(end);
		when.setStartTime(startTime);
		when.setEndTime(endTime);
		where.setValueString(lugar);
		
		// A�adimos los objetos when y where al evento
		entry.addTime(when);
		entry.addLocation(where);
		
		
		// Funcion de retorno de insertEntry
		var callback = function(result) {
		alert('event created!');
		}
		
		// Funcion de error de insertEntry
		var handleError = function(error) {
		alert(error);
		}
		
		// Enviamos la petici�n a traves del objeto Service
		calendarService.insertEntry(feedUri, entry, callback, handleError, google.gdata.calendar.CalendarEventEntry);
		} else {
		alert("Es necesario seleccionar un calendario");
		}
}

/*MUESTRA UN PREVIEW DE UN CALENDARIO A TRAVES DE UN IFRAME
  destino: capa destino donde se mostrara el iframe
  id: id de google del calendario
*/
function mostrar_preview(destino,id){
		if(id != -1){
			destino.innerHTML = '<iframe id="embedcal" src="http://www.google.com/calendar/embed?showTitle=0&amp;showDate=0&amp;src='+id+'" width="450" frameborder="0" height="300"></iframe>';
			destino.style.display = "inline";
		} else {
			destino.innerHTML = '';
			destino.style.display = "none";
    }
}

/*CAMBIAR FORMATO DE FECHA    
   fecha: campo de tipo fecha dd/mm/yyyy
*/
function cambiarFecha(fecha){
		if(fecha != ''){
				var splitFecha = fecha.split(" ");
				var Data = splitFecha[0].split("/");
				var Time = splitFecha[1];
				
				if(Data[0].length < 2) Data[0] = '0'+Data[0];
				if(Data[1].length < 2) Data[1] = '0'+Data[1];
				
				fecha = Data[2]+'-'+Data[1]+'-'+Data[0]+'T'+Time+'.000+02:00';				
	}
	return fecha;
}

/*Buscar Evento en un CALENDARIO
  nombreCalend : string con el nombre del calendario
  idcalen: string con el id de google del calendario
  txt: texto a buscar
  capa_resultados: capa donde se mostraran los resultados
  numCalend: numero de calendario que se esta tratando por defecto sera 0
*/
function BuscarEventos(nombreCalend,idcalen,txt,capa_resultados,numCalend,start,end) {
		// Crea el objeto Service del calendario
			var calendarService = new	google.gdata.calendar.CalendarService('formacion');
			
		// Funci�n de error de getAllCalendarsFeed
			var handleError = function(error) {
			  alert(error);
			}
			
		//limpiamos el contenido de la capa_resultados
		if(numCalend == 0) capa_resultados.innerHTML = '';
	
		if (idcalen == 'Todos') {
				var feedUrl = 'http://www.google.com/calendar/feeds/default/allcalendars/full';	
			 	
			  var retorno = function(result) {
			  	var calen = result.feed.entry;		
				 for (var i = 0; i < calen.length; i++) {
				 	  var nombre = calen[i].getTitle().getText();
						var calendarId = calen[i].getId().getValue();
						var idcalend = calendarId.split('http://www.google.com/calendar/feeds/default/allcalendars/full/');
		        BuscarEventos(nombre,idcalend[1],txt,capa_resultados,numCalend++,start,end);
					}	  
			   }			  
			 calendarService.getAllCalendarsFeed(feedUrl, retorno, handleError);
	  } else {		

      // Url del calendario
			var feedUri = 'http://www.google.com/calendar/feeds/'+idcalen+'/private/full';
			
			// Texto a buscar
			var searchText = txt;
			
      // Declaramos el objeto Query que servira para realizar la query al xml de datos
			var query = new google.gdata.calendar.CalendarEventQuery(feedUri);
			
			// Introducimos la condicion del texto a buscar
			query.setFullTextQuery(searchText);
			if (start != ''){
				 var startTime = google.gdata.DateTime.fromIso8601(start);
				 query.setMinimumStartTime(startTime);
			}
			if (end != ''){ 
				 var endTime = google.gdata.DateTime.fromIso8601(end);
				 query.setMaximumStartTime(endTime);
		  }
			
			// Funci�n de retorno de getEventsFeed
			var callback = function(root) {
			
			// Obtenemos el array de eventos filtrados
			  var eventEntries = root.feed.getEntries();			 
			   
			  //Montamos la tabla
			  if (eventEntries.length > 0) {			  	
			  	var tabla = '<div><b>'+nombreCalend+'</b></div><br><table border="0"><tr class="top_capsa"><th>Title</th><th>Start date</th><th>End date</th><th></th><th></th>';
			  	
			  	for (var i = 0; i < eventEntries.length; i++) {
			      var event = eventEntries[i];
			      var titulo = event.getTitle().getText();
			         idEvent = event.getId().getValue();
			         tabla += '<tr><td class="noticia_tabla">'+titulo+'</td>';   
			         tabla += '<td class="noticia_tabla">'+event.getTimes()[0].getStartTime().date+'</td>';
			         tabla += '<td class="noticia_tabla">'+event.getTimes()[0].getEndTime().date+'</td>';
			         tabla += '<td class="noticia_tabla"><a class="delete" onclick=';
			         tabla += 'BorrarEvento("'+idEvent+'","'+escape(titulo)+'","'+feedUri+'")>Delete</a></td>';
			         tabla += '<td class="noticia_tabla"><a class="editar" onclick=';
			         tabla += 'UpdateEvento("'+idEvent+'","'+escape(titulo)+'","'+feedUri+'")>Edit</a></td></tr>';
			    }	
			    bEvents = true;
			    
			    capa_resultados.style.display = 'block';
			    tabla += '</table><br>';
          div = document.createElement("div");
          div.setAttribute("id", "tabla"+nombreCalend);
          div.innerHTML = tabla;
          capa_resultados.appendChild(div); 
			  }
			}
      //Enviamos la petici�n a traves del objeto Service
			calendarService.getEventsFeed(query, callback, handleError);
	} 	
}

function mostrarCapa(capa){
if(document.getElementById(capa).style.display == 'block' || document.getElementById(capa).style.display == ''){
document.getElementById(capa).style.display = 'none';
jQuery("#pestanya").removeClass("pestanya2").addClass("pestanya");
} else {
document.getElementById(capa).style.display = 'block';
jQuery("#pestanya").removeClass("pestanya").addClass("pestanya2");
}
}
function cerrarVentana(){
jQuery("#caja").css("display","none");
jQuery("#mensaje").css("display","none");
}

function mostrarVentana(capa,modo){
var html = jQuery("#"+capa).html();
if(modo == 1) html1 = html.replace(/crear_Evento/,'crear_Evento_nuevo');
if(modo == 2) html1 = html.replace(/BuscarEvento/,'buscar_Evento_nuevo');
jQuery("#capa_mensaje").html(html1);
jQuery("#caja").css("display","block");
jQuery("#mensaje").css("display","block");
if(modo == 1) ListaCalendarios(document.getElementById('lista_crear'),0);
if(modo == 2) ListaCalendarios(document.getElementById('lista_buscar'),1);
}


/*Borra un evento
  evento : objeto evento
  idEvento: id del Evento
  nombre: nombre del evento
*/
function BorrarEvento(idEvento,nombre,feedUrl){
	var calendarService = new google.gdata.calendar.CalendarService('borrar_evento');
	var query = new google.gdata.calendar.CalendarEventQuery(feedUrl);
  query.setFullTextQuery(unescape(nombre));
		
  var callback = function(salida){
		 var entry = salida.feed.entry;
		 for(var i=0;i<entry.length;i++)
		 {
		 	  if(entry[i].getId().getValue() == idEvento){
		 	   	entry[i].deleteEntry(
            function(result) {
                alert('Event deleted!');
             },handleError);
		 	   }
		 }
	}	
	var handleError = function(error){
	    alert(error);
	}
	
	calendarService.getEventsFeed(query, callback, handleError);
}

function UpdateEvento(idEvento,nombre,feedUrl){
    document.getElementById("capa_buscar").style.display = "none";
    document.getElementById("capa_update").style.display = "block";
    document.getElementById("lista_encontrados").style.display = "block";
    
	
		var calendarService = new google.gdata.calendar.CalendarService('update_evento');
		var query = new google.gdata.calendar.CalendarEventQuery(feedUrl);
	  query.setFullTextQuery(unescape(nombre));
			
	  var callback = function(salida){
			 var entry = salida.feed.entry;
			 for(var i=0;i<entry.length;i++)
			 {
			 	  if(entry[i].getId().getValue() == idEvento){
			 	  	var formu = '<div class="titular_tabla">Edit Event</div><br><form name="update_event"><table border="0">';
			 	  	formu += '<tr><td><label class="text_tabla" for="nombre">Name:</label></td><td><input class="text_tabla" type="text" name="nombre" value="'+entry[i].getTitle().getText()+'"></td></tr>';
			 	  	formu += '<tr><td><label class="text_tabla" for="desc">Description:</label></td><td><textarea class="text_tabla" name="desc" rows="5" cols="50">'+entry[i].getContent().getText()+'</textarea></td></tr>';
			 	  	formu += '<tr><td><label class="text_tabla" for="lugar">Place:</label></td><td><input class="text_tabla" type="text" name="lugar" value="'+entry[i].getLocations()[0].getValueString()+'"></td></tr>';
			 	  	formu += '<tr><td colspan="2" align="center"><input class="boton" type="button" value="Update" name="actualizar" onclick=';
	          formu += 'obtenerDatos("'+idEvento+'","'+nombre+'","'+feedUrl+'",this.form.nombre.value,this.form.desc.value,this.form.lugar.value);></td></tr></form>';
	          document.getElementById("capa_update").innerHTML= formu;
			 	 }
		   }
		}
		var handleError = function(error){
		    alert(error);
		}
		
		calendarService.getEventsFeed(query, callback, handleError);	
}

function obtenerDatos(idEvento,nombre,feedUrl,titulo,descripcion,lugar){
		var calendarService = new google.gdata.calendar.CalendarService('update_evento');
		var query = new google.gdata.calendar.CalendarEventQuery(feedUrl);
	  query.setFullTextQuery(unescape(nombre));
			
	  var callback = function(salida){
			 var entry = salida.feed.entry;
			 for(var i=0;i<entry.length;i++)
			 {
			 	  if(entry[i].getId().getValue() == idEvento){
			 	  	  var ArrayWh = new Array(1);
			 	  		var where = new google.gdata.Where();		
		 		      where.setValueString(lugar);			 	  	
			 	  	
              ArrayWh[0] = where;
              			 	  	
				 	  	entry[i].setTitle(google.gdata.Text.create(titulo));
				 	  	entry[i].setContent(google.gdata.Text.create(descripcion));
		          entry[i].setLocations(ArrayWh);
				 	   	entry[i].updateEntry(
	            function(result) {
	                alert('Event updated!');
	                document.getElementById("capa_buscar").style.display = "block";
	                document.getElementById("capa_update").style.display = "none";
	                document.getElementById("lista_encontrados").style.display = "none";
	             },handleError);
			 	   }
			 }
		}	
		var handleError = function(error){
		    alert(error);
		}
		
		calendarService.getEventsFeed(query, callback, handleError);
}

  


/*Crea el url del iframe a partir de los checkbox marcados
 Contenedor : capa que contiene los checkbox de los calendarios
 destino: capa en donde se mostrara el iframe y la lista.
*/
function UrlIframe(formulario,destino) {
		var url_iframe = '';
		var color = new Array(8);
		color[0] = '4E5D6C';
		color[1] = '528800';
		color[2] = '5229A3';
		color[3] = '8D6F47';
		color[4] = '865A5A';
		color[5] = 'A32929';
		color[6] = 'B1365F';
		color[7] = 'B1440E';
		
		var check = formulario.getElementsByTagName("input");
		for (var i=0;i<check.length;i++) {
		     if (check[i].checked == true) {
			   url_iframe += '&amp;src='+check[i].value+'&amp;color=%23'+color[i];			 
		  }
		}
		
		var alto = formulario.altura.value;
		if(alto == '' || alto < 350) alto = 350;
	  var ancho = formulario.ancho.value;
	  if(ancho == '' || ancho < 350) ancho = 350;
	  var bgcol = formulario.fondo.value;
	  if(bgcol == '') bgcol = jQuery("#color_defecto").html();
          document.getElementById("contenedor_general").style.backgroundColor = '#'+bgcol;
	  
	  var idioma = formulario.hl.value;
	  var startweek = formulario.startweek.value;
	  var ctz = formulario.ctz.value;
	  
		 var complet = '<iframe id="embedcal" src="http://www.google.com/calendar/embed?showTitle=0&amp;showDate=0&amp;wkst='+startweek+'&amp;hl='+idioma+'&amp;bgcolor=%23'+bgcol+'&amp;bgcolor=%23c0c0c0'+url_iframe+'&amp;ctz='+ctz+'" width="'+ancho+'" frameborder="0" height="'+alto+'"></iframe>';
		 destino.innerHTML = complet;
		 destino.style.display = 'inline';
}

/*Comprobar campos al CrearEvento*/

function comprobarCrearEvento(idcalen,titulo,desc,lugar,start,end){
	 var campos = '';
	 
	 if(idcalen == -1)campos += 'Calendario\n';	 
	 if(titulo == '')campos += 'Titulo\n';
	 if(desc == '')campos += 'Descripcion\n';
   if(lugar == '')campos += 'Lugar\n';
   if(start == undefined) campos += 'Fecha Inicio\n';
   if(end == undefined) campos += 'Fecha Fin\n';
   
	 if(campos == '') CrearEvento(idcalen,titulo,desc,lugar,start,end);
	 else alert(campos);
}


function comprobarBuscarEventos(nombreCalend,idcalen,txt,capa_resultados,numCalend,start,end){
	 var campos = '';
	 
	 if(nombreCalend == '') campos += 'Nombre Calendario\n';
	 if(idcalen == -1) campos += 'Calendario\n';	 
	 if(txt == '') campos += 'Texto\n';
	 if(capa_resultados == '') campos += 'Capa resultados\n';
	 
	 if(campos == '') BuscarEventos(nombreCalend,idcalen,txt,capa_resultados,numCalend,start,end);
	 else alert(campos);
}
