var geocoder; 

var formblock=false;

//Anzahl der Einträge pro Lifelog, die vorgeladen werden sollen - mindestens 6
var numberOfEntries=6;

//Geschwindigkeit der Carousels
var animationspeed="slow";

//Anzahl der Items die in einem Schub gescrollt werden
var scrollitems=6;

//Laufvariable für Einträge
var entry_e=0;	

//userid für einbinden der bilder
var userid;

//Übersetzung laufende nr->id
var eToID = new Array();
var lvlToID = new Array();

//gerade editierbare Einträge nach Lifelogs
var edit = new Array();

//zu fadender Eintrag (neu, editiert)
var fade;

//Bild und Videodateien nach Eintragsnummer
var media=new Array();

var widget=0;
var visibleItems=6;

/*
 * Ajax Session Keep-Alive
 */
setInterval("session_alive()", 600000);

function session_alive()
{
	
	 var param_list = '{'+
    '"module"               :   "lvl",'+
    '"file"                 :   "session_alive.php",'+
    '"debug"                :   "false",'+
    '"value"    : {}}';

    $.post(DIR_PROJECT_ROOT_WEB+'ajax.php', {param: param_list }, function(data)
    {
    });

}


/** 
 * Springt zu einem Datum im Lifelog
 * date: 26.02.08
 * @param Lifelog-ID
 * @author Sandra
 */
function showDate(id_lifelog){

	//Datum auslesen
	var date = $("div#JS_lvl_ov_"+id_lifelog).find("input.JS_lvl_ov_inp_showDate")[0].value;
	
	if(date.length>0)
	{
	
		//Aus Datum den Index des nächsten Eintrags bestimmen	
		var param_list = '{'+
						'"module"				:	"lvl",'+
						'"file"					:	"ajax_lvl_action_showDate.php",'+
						'"debug"				:	"false",'+
						'"value"	: { "date"  : "'+date+'", '+
									   '"id_lifelog" : "'+id_lifelog+'"'+	
		'}}';
		
		
		$.post(DIR_PROJECT_ROOT_WEB+'ajax.php', {param: param_list }, function(data){
			
			if(parseInt(data)!=0){
				var json = eval('(' + data + ')');
				
			//Update des Carousels um neuen Eintrag anzuzeigen
			fade=json.id_entry;
			reloadCarousel(id_lifelog, json.numberOfEntries, json.index, 0, 0, 0, 0, "date");	
			}
			
		});
	
	}
}




/** 
 * Läd neue Einträge in die Zeitleiste, wenn diese in einen Bereich gescrollt wird, in dem es noch keine gibt
 * date: 28.01.08
 * @param jCarousel spezifische Parameter und die Lifelog-ID, dessen Zeitleiste das Carousel repräsentiert
 * @author Sandra
 */
function mycarousel_itemLoadCallback(carousel, state, lvl_id, userid)
{

	if(carousel.size()>0)
	{
		  
	     //Nummer des Lifelogs ermitteln	
		for(var nr in lvlToID)
		{
			if(lvlToID[nr]==lvl_id)
				break;
		}
		
		//Ist der sichtbare Bereich schon vollständig geladen, muss keine Abfrage durchgeführt werden
		if (carousel.has(carousel.first)&&carousel.has(carousel.last)) 
		{
	        return;
	    }
	    
	    
	   $("#JS_lvl_ov_"+lvl_id).find('div.lvl_loading_status').css("display", "block");
	    
	    //Position des Carousels
	    var first=carousel.first;
	    var last=carousel.last;
	    
	   
	     //Ab welchem Eintrag bis zu welchem Eintrag ist das Carousel leer?
	    var i=0;
		while(carousel.has(first+i) && i<6)
	    	i++
	    var j=0;
	    while(carousel.has(last-j) && j<6)
			j++;
		
		
		var start=first+i;
		var end=last-j;
		
		
		var param_list = '{'+
						'"module"				:	"lvl",'+
						'"file"					:	"ajax_lvl_action_reloadEntries.php",'+
						'"debug"				:	"false",'+
						'"value"	: {"id_lifelog" : "'+lvl_id+'",'+
									   '"start"		: "'+start+'", '+
									   '"widget"	: "'+widget+'", '+
									   '"end"		: "'+end+'"'+	
		'}}';
		
		 
		
		$.post(DIR_PROJECT_ROOT_WEB+'ajax.php', {param: param_list },
		function(data){
			
			var entries = eval('(' + data + ')');
			
			var i=start;
		    
		    var entry_length = end-start;
		    
		    userid = entries[0].userid;
		
			//Einträge setzen	
			for(var k=0; k <= entry_length; k++)
			{
						
				eToID[entry_e] = entries[k].id_entry;
				media[entry_e] = new Array();
					
					
				
					
				//Medien zu Medienarray hinzufügen			
				if(entries[k].media != null)
				{
					for(var item in entries[k].media)
					{
				  		media[entry_e].push(entries[k].media[item].file);
					}
				}
				
				//Eintrag setzen
				carousel.add(i, entries[k].html);	
	
				//Medienblätterfunktion initialisieren
			    initialise(entry_e, entries[k].id_entry, userid, entries[0].username, lvl_id);
			   
				entry_e++;
				i++;
				
				//Fade durchführen falls beim jeweiligen Eintrag gesetzt
				if(fade == entries[k].id_entry)
				{
					if(widget==0)
					{
						$("div.JS_lvl_entry_"+entries[k].id_entry).parent().animate({ backgroundColor: "#fff" }, 900).animate({ backgroundColor: "#c9dd7d" }, 500).animate({ backgroundColor: "#c9dd7d" }, 200).animate({ backgroundColor: "#fff" }, 500).animate({ backgroundColor: "#c9dd7d" }, 500).animate({ backgroundColor: "#fff" }, 2000);
						fade="";
					}
				}
				
				/*//Editierbaren Eintrag wieder umranden
				else if(entries[k].id_entry==edit[nr])
				{
					$("div.JS_lvl_entry_"+entries[k].id_entry).find("div.JS_lvl_ov_entry_editoverlay").addClass("JS_lvl_edit");	
				}*/
				
			}
				  
			//Overlay wieder einblenden, falls vorher eingeblendet	  
		   if (parseInt($('div#JS_lvl_carousel_' + lvl_id).find('div.JS_lvl_ov_overlay').length) > 0) 
		   {
			   	if ($('div#JS_lvl_carousel_' + lvl_id).find('div.JS_lvl_ov_overlay')[0].style.display == "block") 
			   		$("div#JS_lvl_ov_" + lvl_id).find("div.JS_lvl_ov_entry_editoverlay").css("display", "block");
		   }
		   
		   
			$(".lvl_entry_tooltip").not("[tooltipText]").tooltip({ 
			    track: true, 
			    delay: 500, 
			    showURL: false, 
			    opacity: 0.85, 
			    extraClass: "lvl_title_tooltip",
			    top: -70,
			    left: -40
				}); 
				
			$("div#JS_lvl_ov_"+lvl_id).find('div.lvl_loading_status').css("display", "none");
		   
		});	 
	
	}
}



/** 
 * Initialisiert die Bildershow eines Items
 * date: 02.02.08
 * @param Id des Eintrags-Divs
 * @author Sandra
 */
function initialise(e, id_entry, userid, username, id_lifelog)
{
	
	//Laufende Nummerierung als Eintrags-Klasse setzen
	var entry_id = $("div.JS_lvl_entry_"+id_entry);
	
	entry_id[0].id="JS_lvl_entry_nr_"+e;
    
    //Löschen und editieren Link setzen, wenn edit-Overlay vorhanen
    var id_entry_length = entry_id.find("div.JS_lvl_ov_entry_editoverlay > a").length;
  
    if(id_entry_length > 0)
    {	
    	
    	var editoverlays =$("div.JS_lvl_entry_"+id_entry+" > div.JS_lvl_ov_entry_editoverlay > a");
    	editoverlays[0].href="javascript:ajax_lvl_action_admin_entry_editEntry("+e+", "+id_entry+")";
		editoverlays[1].href="javascript:ajax_lvl_action_admin_entry_deleteEntry("+e+", "+id_entry+")";
    } 
  	
    //Wenn Bilder vorhanden > Erstes Bild setzen
    var media_length = media[e].length;
    if(media_length != 0)
    {
    	
        var picid = 0;
        var ending = media[e][0].split("."); 
        
        //Video
        
        var entry_media = $("div#JS_lvl_entry_nr_"+e).find(".lvl_ov_entry_pics");
        
    
        entry_media.append('<img style="vertical-align:middle; margin-left:-1px;" src="'+MODULE_LVL_WEBROOT+'img/leer.png" /><span id="0">'+media[e][0]+'</span>'); 
        
       
        //Next Button
        var next_Button = $("div#JS_lvl_entry_nr_"+e).find(".JS_lvl_ov_nextpic");
      
        //Previous Button
        var prev_Button = $("div#JS_lvl_entry_nr_"+e).find(".JS_lvl_ov_prevpic");
       
    	//Initialisierung Tooltips
        next_Button[0].title=media_length-1+" "+loggel_lvl_after;
       
        prev_Button[0].title="0 "+loggel_lvl_before;
		
        if(picid!=media_length-1)
             next_Button.addClass("JS_lvl_ov_nextpic_active");
    
    
        //NEXT Button Click
        next_Button.bind("click", function(event)
        {
        	//Aktuelle Bildnummer
            var picid =  $("div#JS_lvl_entry_nr_"+e).find("div.lvl_ov_entry_pics>span")[0].id;
            
            //Wenn noch mehr Bilder dahinter vorhanden, picid erhöhen
            if(picid < media_length -1)
                 picid = parseInt(picid)+1;
                
            //Tooltips setzen
            next_Button[0].title=media_length-1-picid+" "+loggel_lvl_after;
            prev_Button[0].title=picid+" "+loggel_lvl_before;
            
            //Pfeile updaten (disabled/active)
            if(picid==media_length -1)
                next_Button.removeClass("JS_lvl_ov_nextpic_active");
            if(picid!="0")
                prev_Button.addClass("JS_lvl_ov_nextpic_active");
    
    
    		//Bild/ Video anzeigen
            var ending= media[e][picid].split("."); 
      
	        $("div#JS_lvl_entry_nr_"+e).find("div.lvl_ov_entry_pics > span").replaceWith('<span id="'+picid+'">'+media[e][picid]+'</span>');   
        });
     
     
        //PREV Button Click
        prev_Button.bind("click", function(event)
        {
        	//Aktuelle Bildnummer
            var picid =  $("div#JS_lvl_entry_nr_"+e).find("div.lvl_ov_entry_pics>span")[0].id;
        
        	//Wenn noch Bilder davor vorhanden
            if(picid>0)
            {
            	picid = parseInt(picid)-1;
            }
            	
            //Tooltips update
            prev_Button[0].title=picid+" "+loggel_lvl_before;
            next_Button[0].title=media_length-1-picid+" "+loggel_lvl_after;
            
            //Next/Prev updaten (disabled/active)
            if(picid!=media_length -1)
            {
                next_Button.addClass("JS_lvl_ov_nextpic_active");
            }
            if(picid=="0")
            {
                prev_Button.removeClass("JS_lvl_ov_nextpic_active");
            }
               
            //Neues Bild/Video anzeigen 
            var ending = media[e][picid].split("."); 
            

			$("div#JS_lvl_entry_nr_"+e).find("div.lvl_ov_entry_pics > span").replaceWith('<span id="'+picid+'">'+media[e][picid]+'</span>');

        });
         
     
     
    }
	return;	
}




/** 
 * Läd die Zeitleiste neu, wenn diese durch Hinzufügen eines Eintrags geändert wurde
 * date: 28.01.08
 * @param Id des Lifelogs, der durch das Carousel repräsentiert wird, neue Größe des Lifelogs und Index des neu 
 * hinzugefügten Elements, neue period, erster eintrag, letzter eintrag und action
 * (new (neuer Eintrag), change und chance_d (edit mit und ohne Datumswechsel), date (datumssprung), delete
 * @author Sandra
 */
function reloadCarousel(lvl_id, size, index, timespan, min_entry, min_entryTS, max_entry, geocount, action)
{
		
		//Zum gerade geänderten Lifelog springen wenn nötig
		if(parseInt($("div#JS_lvl_ov_"+lvl_id).offset().top)+40<$(window).scrollTop())
			window.location.href = "#JS_lvl_ov_"+lvl_id;
	
		$('div#JS_lvl_ov_'+lvl_id).find("div.JS_lvl_ov_noEntries").css("display", "none");	
		
		//Aktuelles Datum bestimmen für Heute Datum im Carousel
		var a = new Date();
		var b = a.getDate()+"";
		
		if(b.length==1)
			b="0"+b;
		var c = a.getMonth()+1+"";
	
		if(c.length==1)
			c="0"+c;
		var d = a.getFullYear();
		
		var date_formatted =b+"."+c+"."+d;


		//Basisinfos der Lifelogs updaten und Datepicker setzen
		//Nicht nötig, wenn nur der Inhalt eines Eintrags (nicht das Datum) geändert wurde oder wenn Datumssprung
		if(action=="change_d" || action=="new" || action=="delete"){

			//Anzahl von Einträgen updaten
			$("div#JS_lvl_ov_"+lvl_id).find("span.JS_lvl_ov_numberEntries")[0].innerHTML=size;
				
			//Zeitspanne updaten	
			$("div#JS_lvl_ov_"+lvl_id).find("span.JS_lvl_ov_period")[0].innerHTML=timespan;
		
			//Startdatum
			$("div#JS_lvl_ov_"+lvl_id).find("span.JS_lvl_ov_startdate")[0].innerHTML=min_entry;
								
			//Datumssprung-Kalender
			$("div#JS_lvl_ov_"+lvl_id).find("input.JS_lvl_ov_inp_showDate").datePicker({startDate:min_entry, horizontalOffset:-110, verticalOffset:-80, endDate:max_entry, clickInput:true, lvlId:lvl_id})
			
		
			//DatumsSprung-Link
			$("#lvl_ov_showDateLink_"+lvl_id).dpSetEndDate(max_entry).dpSetStartDate(min_entry);

		}
		
		//Zur besseren Orientierung erscheint der Eintrag wenn möglich auf der ersten Seite des Carousels
		//Bei Datumssprung erscheint der Eintrag in der Mitte, bei change dort, wo er vorher war
		if(action=="new" || action=="change_d"){
			if(index<=5)
			index=0;
		}
		
		
		//Carousel weg
		$('div#JS_lvl_carousel_'+lvl_id).remove();
		
		//Carouseldiv wieder erstellen
		$("div#JS_lvl_ov_"+lvl_id+">div>.lvl_ov_entries").append('<div id="JS_lvl_carousel_'+lvl_id+'" class="jcarousel-skin-tango"><ul></ul></div>');
		
		
		if(parseInt(size)>0){
			$('div#JS_lvl_carousel_'+lvl_id).jcarousel({
				        
				 //Items löschen, wenn außer Sicht       
				itemVisibleOutCallback: {onAfterAnimation: function(carousel, item, i, state, evt) { 
				   	if(carousel.size()>10) 	{
					   		var idcomplete= $(".jcarousel-item-"+i+">div")[0].id;
							var idnumber= idcomplete.substr(5);
							
							media[idnumber]= [];
							carousel.remove(i);
					} 
				}},
		      
		      	animation:animationspeed,
		      	start: parseInt(index),
		      	scroll:scrollitems,
		        visible:visibleItems,
		        initCallback: function(carousel, state){
		        	
					//Länge des Carousels setzen
				    carousel.size(parseInt(size));
				    
				    carousel.today=date_formatted;
				    
			    	var width=118*parseInt(carousel.size())+700;
					$('div#JS_lvl_carousel_'+lvl_id).append('<div class="JS_lvl_ov_overlay" style="width:7px; left:738px;"></div>').prepend('<div class="JS_lvl_ov_overlay" style="width:6px; left:24px;"></div>').find("ul.jcarousel-list").append('<div class="JS_lvl_ov_overlay" style="width:7px; left:738px;"></div>').append('<div class="JS_lvl_ov_overlay" style="width:'+width+'px;"></div>');		 
				  
				    
				    //Edit Button (wieder) einblenden
					$('div#JS_lvl_ov_'+lvl_id).find(".lvl_ov_editlink").removeClass("lvl_green_button_inactive");
				
				    //Carousel eine Lifelogid übergeben, um es besser referenzieren zu können
					carousel.lvlid=lvl_id;
					
				},
		
				 //Einträge nachladen	
				 itemLoadCallback: {onAfterAnimation: function(carousel, state){
							
						mycarousel_itemLoadCallback(carousel, state, carousel.lvlid);
							
				}}
				
		    });	
		    
	    		
		    	
			 
		 	
		 	
		 }
		 else{
		   jQuery('div#JS_lvl_carousel_'+lvl_id).jcarousel(
				    {
				    	animation: animationspeed,
				      	scroll: scrollitems,
				        visible:6,
				         //Beim ersten Laden des Carousels
				        initCallback: function(carousel, state)
				        {	        
							//Setzen der Größe
						    carousel.size(0);
							carousel.lvlid=+lvl_id;
							carousel.today=date_formatted;
							var lifelog_div=$('div#JS_lvl_ov_'+lvl_id);
							lifelog_div.find("div.JS_lvl_ov_noEntries").css("display", "block");
							lifelog_div.find(".lvl_ov_editlink").addClass("lvl_green_button_inactive");
							
						}
					});	
			
			
			$(".tooltiptarget").not("[tooltipText]").tooltip({ 
			    track: true, 
			    delay: 0, 
			    showURL: false, 
			    opacity: 0.85, 
			    extraClass: "loggel_tooltip"
			}); 
			
		 
		 
		 }	    
	
	}



function WriteConsoleObject(obj)
{
    // get properties of the object
    var msg = "";
    for (prop in obj)
    {
        // show only prperties that are not null
        if (obj[prop] != null && obj[prop] != '')
            msg += "property : " + prop + "\t\t value : " + obj[prop] + "\n";
    }
        
    alert(msg);
}






