// ---- funktioner för live-scroller ----

var live_timer=[];
var live_hide_timer=[];
var live_last_shown=[];
var live_current_url=[];
var live_current_timer=[];
var live_title_url=[];
var live_shown=[];
var live_instances=[];
var live_reloads=[];

// tid mellan meddelanden
var live_interval=10;
// max antal meddelanden som bör hinna visas (reload efter detta*intervall)
// bör normalt vara samma som live_current_max i live.php
var live_max_messages=4;

function live_activate(id,current_url,title_url){
    // effekt: aktiverar div id till live-visning från current_url
    //         och tooltip i a (title) från title_url (tål att upprepas)

    // registrera instans
    var found=0;
    for(var i=0;i < live_instances.length;i++){
	if(live_instances[i]==id) found=1;
    };
    if(!found) live_instances.push(id);

    // nollställ visade
    live_shown[id]=[];

    // nollställ antal omladdningar
    live_reloads[id]=0;

    // spara url
    live_current_url[id]=current_url;
    live_title_url[id]=title_url;

    // sätt svara-knapp (här också, eftersom current laddas innan knapp)
    live_set_reply(id);
};

function live_activate_current(id,clear,scroll){
    // effekt: aktivera timers mm efter laddning av current-fält för id
    //         om clear så töms shown-listan. om scroll så scrollar live

    // ta bort ev tidigare timers
    live_clear_timers(id);

    // töm shown-listan
    if(clear){
	live_clear_shown(id);
    };
   
    if(scroll){
	// sätt återkommande tick för uppdatering
	live_timer[id]=window.setInterval(function(){
	    live_scroll(id);
	},live_interval*1000);
	
	// begränsa nuvarande
	live_set_hide(id);
    };
    
    // sätt svara-knapp
    live_set_reply(id);
    
    // sätt current-timer
    live_set_current_timer(id);
};

function live_clear_timers(id){
    // effekt: ta bort ev tidigare timers för id
 
    if(live_timer[id]){
	clearInterval(live_timer[id]);
	delete(live_timer[id]);
    };
    if(live_hide_timer[id]){
	clearTimeout(live_timer[id]);
	delete(live_hide_timer[id]);
    };
    if(live_current_timer[id]){
	clearTimeout(live_current_timer[id]);
	delete(live_current_timer[id]);
    };
};

function live_clear_shown(id){
    // effekt: tömmer shown-lista för id
    live_shown[id]=[];
};

function live_all_scroll(scroll){
    // effekt: sätter igång slår av scroll för alla live-instanser

    for(var i=0;i < live_instances.length;i++){
	var id=live_instances[i];
	live_activate_current(id,0,scroll);
    };
};

// -- redigeringsläge och verifiering --

function live_submit(id,url){
    // effekt: ersätter innehåll i id med url + formulärparametrar

    var title_input=document.getElementById(id+"title");
    var title=title_input.value;
    var text_input=document.getElementById(id+"text");
    var text=text_input ? text_input.value : "";
    var subscribe_input=document.getElementById(id+"subscribe");
    var subscribe=subscribe_input ? subscribe_input.checked+0 : 1;
    
    if(!title || title==live_text.default_title){
	alert(live_text.warn_empty);
	return;
    };
    if(!confirm(live_text.reminder)) return;
    if(!confirm(live_text.consent)) return;

		if (live_text.default_text==text) text='';
	
    url=add_param(url,title);
    url=add_param(url,text);
    url=add_param(url,subscribe);
    replace_id(id,url);
};

function live_set_reset(id,url){
    // effekt: återställer id till url om ett tag (för återgång till visning)

    window.setTimeout(function(){
	replace_id(id,url);
    },5*1000);
};

function live_check(id,url,turn){
    // effekt   : kontrollerar om betalning kommit in mha url, om så, ersätt id
    // rekursion: turn ökar

    // stänger ev. tidigare XHR-begäran
    cancel_id(id);

    // öka gång
    if(!turn) turn=0;
    turn++;

    // kör uppdaterare
    runXHR(url,function(text,xhr){live_check_place(id,url,turn,text,xhr)},id);
};

function live_check_place(id,url,turn,text,xhr){
    // effekt   : ersätter id med element från xhr om text
    //            eller kör live_check igen om turn är tillräckligt liten
    // rekursion: turn ökar

    if(text){
	// om innehåll fanns
	replace_element(document.getElementById(id),xhr);
    }
    else{
	// inget än - kör på nytt
	if(turn < 60){
	    live_check(id,url,turn);
	};
    };
};

function live_max_input(id){
    // effekt: duplicerar input i id till span och mäter denna för att se om
    //         för mycket text. om så är fallet visa alert för användare
		
    var grace=30;
    
    var real = document.getElementById(id+"title");
    var dummy = document.getElementById("tyda_tl_input_dummy");

    if (dummy && real && real.value != live_text.default_title){
    	dummy.innerHTML = real.value;
	if (dummy.offsetWidth > real.offsetWidth - grace){
	    real.disabled=true;
	    alert(live_text.warn_cut);
	    real.disabled=false;
	    real.value = real.value.substring(0, real.value.length-1);
	};
    };
};

function live_more_reset(t){
    // effekt: rensar default-value för textarea t
    t.innerHTML='';
};

// -- bläddring mellan inlägg i current --

function live_set_current_timer(id){
    // effekt: sätter timer som är kvar så länge current anses aktuell för id

    // ta bort ev tidigare timer
    if(live_current_timer[id]){
	window.clearTimeout(live_current_timer[id]);
    };
    
    live_current_timer[id]=window.setTimeout(function(){
	// tar bort aktuell-flagga tillika timer
	window.clearTimeout(live_current_timer[id]);
	delete(live_current_timer[id]);
    },(live_interval*live_max_messages-1)*1000);
};

function live_set_hide(id){
    // effekt: gömmer aktiv li under id om ett tag, sätter live_last_shown

    // göm aktiv efter ett tag (så att det blir 1s paus mellan inläggen)
    live_hide_timer[id]=window.setTimeout(function(){
	live_hide(id);
	live_set_reply(id);
    },(live_interval-1)*1000);
};

function live_hide(id){
    // effekt: gömmer aktiv li under id, sätter live_last_shown

    var current=document.getElementById(id+"current");

    // återgå om ingen text visas
    if(!current) return;

    // leta aktiv li
    var active=find_below(current,'li','class','tyda_tl_active');
    if(!active[0]) return;

    // gömmer bara om äkta live (ej tyda-filler)
    var inputs=find_below(active[0],"input","name","tyda_live_message");
    if(!inputs.length) return;

    // gömmer
    var a=active[0];
    set_attribute(a,'class','tyda_tl_passive');

    // markerar att sett
    live_last_shown[id]=a;
    // markera forum-id för meddelande som sett
    live_shown[id][inputs[0].value]=1;
};

function live_scroll(id){
    // effekt: bläddrar synligt element bland live-meddelanden i id
    
    var current=document.getElementById(id+"current");
    // återgå om ingen text visas
    if(!current) return;

    // återställ ev aktiv
    live_hide(id);
    
    // leta passiva li
    var lis=find_below(current,'li','class','tyda_tl_passive');
    
    var next=null;
    for(var i=0;i < lis.length;i++){
	if((lis[i]==live_last_shown[id]) && lis[i+1]){
	    next=lis[i+1];
	};
    };
    
    if(next){
	// nästa hittat, visar
	set_attribute(next,'class','tyda_tl_active');

	// sätter ny timeout
	live_set_hide(id);
	
	// sätt svara-knapp
	live_set_reply(id);
    }
    else{
	// slut på listan - förnyar om tillräcklig tid har gått
	if(!live_current_timer[id]){
	    live_reload(id);
	};
    };
};

function live_set_reply(id){
    // effekt: sätter svara-knapp från ev aktiv live under id+"current"

    var a=document.getElementById(id+"reply");
    var current=document.getElementById(id+"current");

    // återgå om ingen text visas
    if(!current) return;
    if(!a) return;

    // bild som ändras beroende på aktiv eller ej
    // variabel session_lang hämtas sätts av /lib/main
    var imgs=find_below(a,'img');

    var inputs=null;
    var active=find_below(current,'li','class','tyda_tl_active');
    if(active[0]){
	var inputs=find_below(active[0],"input","name","tyda_live_message");
    };
	
    // gör länk till meddelande om hittat, annars inget
    if(inputs && inputs.length){
	set_attribute(a,"href","/forum-message?parent="+inputs[0].value);
	a.onclick=null;
	if(imgs.length){
	    set_attribute(imgs[0],'class','tyda_tl_reply_'+session_lang);
	};
    }
    else{
	set_attribute(a,"href","#");
	a.onclick=function(){return false};
	if(imgs.length){
	    set_attribute(imgs[0],'class','tyda_tl_reply_grey_'+session_lang);
	    set_attribute(imgs[0],'title','');
	};
    };
};

function live_reload(id){
    // effekt: laddar om och återställer textvisning i id+"current"
    //         om reloads för id < ett maxvärde. ökar antal reloads för id

    // öka och kolla maxvärde
    live_reloads[id]++;
    if(live_reloads[id] > 10){
	// stäng av alla timers (spara kanske någon mA ström)
	live_clear_timers(id);
	return;
    };
    
    url=live_current_url[id];
    var a=[];
    for(var k in live_shown[id]){
	a.push(k);
    };
    var shown=a.join(',');
    url=add_param(url,shown);
    replace_id(id+"current",url);
};

// -- tooltip för länkar --

function live_title(id,a,forum){
    // effekt: sätter titel för a till text i forum via länk för id

    // sätt bara om tom
    if(!attribute(a,'title')){
	url=live_title_url[id];
	url=add_param(url,forum);
	runXHR(url,function(text,xhr){live_title_place(id,a,text)});
    };
};

function live_title_place(id,a,text){
    // effekt: sätter titel för a till text

    set_attribute(a,'title',text);
};

