/* Tak se mi to povedlo!! A vsichni kecaj, jak je to tezky! */
/* ale pozor na vic formularu na strance - to podle me nezvladne */
/* 

1) max 1 formular na stranku - teda muze jich byt vic, ale nejde zarucit,
   ze uzivatel neutece pryc tim druhym formularem
2) pokud se nechce, aby se formular checkoval, prida se mu do class "nocheck"
3) pozor na ruzne jine moznosti opustit stranku - javascriptove!! Napriklad:
	a) onChange="this.form.submit();" - autosubmitovani u ruznych prvku 
		na strance (napriklad rolet)
	b) onClick="window.location='...'"
	c) utek jinym formularem (regulerne tlacitkem submit)
		- to by se jeste dalo ohlidat
    - tam se to zatim musi delat rucne.. zavolanim confirm_leaving()
    
4) pokud chceme aby se u odkazu obsluzna fce onclick volala driv, nez ten test,
   pridame ji do class "onclick_before_unsavedchk"

5) je osetreno, kdyz dam ulozit a on mi vrati formualr k prepracovani - ted
   se to bere jako uz modifikovany formular, aniz by user do nej kliknul.
   Musi to ale podporovat phpko. Dela to tak ze kdyz se vraci formular k 
   opraveni tak ve formu prijde hidden  field unsaved_chk__data_unsaved 
   nastaveny na 1.
*/

var unsaved_data = 0;
var was_installed = 0;
var unsaved_chk_available = 1;

function add_confirm_to_hrefs()
{
	var hrefs=document.getElementsByTagName('a');
	for (i = 0; i < hrefs.length; i++) {
		//hrefs[i].onclick = 'return confirm("really?");';
		hrefs[i].old_onclick_bef_unschk = hrefs[i].onclick;
		hrefs[i].onclick = function() {
			call_old_onclick_first = this.className.match("onclick_before_unsavedchk");
			if (call_old_onclick_first) {
				if (this.old_onclick_bef_unschk)
					rv = this.old_onclick_bef_unschk();
				if (!rv)
					return false;
			}
			if (!confirm_leave())
				return false;
			if (!call_old_onclick_first && this.old_onclick_bef_unschk)
				return this.old_onclick_bef_unschk();
			return true;
		}
	}
}

function confirm_leave() 
{ 
	if (unsaved_data) {
		proceed = confirm("Ve formuláři jsou neuložená data. Chcete skutečně provést požadovanou akci?\n\n(kliknutím na OK o změny přijdete)"); 
		//proceed = !confirm("Vaše změny nejsou uloženy. Chcete se vrátit do formuláře?\n\n(zápornou odpovědí o změny přijdete)"); 
		//proceed = !confirm("Vaše změny nejsou uloženy. Chcete se vrátit do formuláře?"); 
		//proceed = !confirm("Vaše změny nejsou uloženy. Chcete se vrátit do formuláře? Odpovíte-li záporně, o své změny přijdete."); 
		if (!proceed)
			return false;
	}
	return true;
}


function set_onchange(obj)
{
/*	obj.onchange = function() {
		alert('hh');
	} 
*/
	obj.old_onchange_bef_unschk = obj.onchange;
	obj.onchange = function() { 
		if (obj.old_onchange_bef_unschk)
			obj.old_onchange_bef_unschk();
		data_modified();
	}
	if (obj.old_onchange_bef_unschk) {
	//	alert('y' + obj.nodeName + obj.nodeValue + obj.nodeType);
		//obj.className = "invisible";
	}

	/* !!! zajimave, ze tady to 'obj.' funguje stejne jako 'this.' !!! */
}

function set_onchange_foralltags(tag_name)
{
	var forms = document.getElementsByTagName('form');
	for (i = 0; i < forms.length; i++)
		if (!forms[i].className.match("nocheck")) {
			
			var inputs = forms[i].getElementsByTagName(tag_name);
			for (j = 0; j < inputs.length; j++)
				set_onchange(inputs[j]);
		}
}

function set_onchange_foralltags__orig(tag_name)
{
			var inputs = document.getElementsByTagName(tag_name);
			for (i = 0; i < inputs.length; i++)
				set_onchange(inputs[i]);
}

// toto spustit v window.onload:
// mela by se spis jmenvoat init...
function add_guard_to_forms()
{
	set_onchange_foralltags('input');
	set_onchange_foralltags('select');
	set_onchange_foralltags('textarea');

	spec = document.getElementsByName('unsaved_chk__data_unsaved')[0];
	if (spec && spec.value) {
		data_modified();
	}
}

//add_chk_to_hrefs();

function data_modified()
{
	if (!unsaved_data) {
		unsaved_data = 1;
		if (!was_installed) {
			add_confirm_to_hrefs();
			was_installed = 1;
		}
		//var unsaved = document.getElementById('unsaved_flag');
		//unsaved.className = 'unsaved_flag_set';
		
		var report_save = document.getElementById('report_save');
		if (report_save)
			report_save.className = 'invisible';
	}
}

function data_cancel(new_url)
{
	if (!unsaved_data || confirm('Opravdu chcete přijít o změny ve formuláři?')) { 
		unsaved_data = 0 /* pro jistotu i v pripade url, kdyby to same url nebo # */; 
		if (new_url)
			window.location = new_url;
		return true;
	} 
	else 
		return false;
}


window.onload_before_unsaved_chk34234 = window.onload;
window.onload = function()
{
	if (window.onload_before_unsaved_chk34234)
		window.onload_before_unsaved_chk34234();
	add_guard_to_forms();
}

