/* Tak se mi to povedlo!! A vsichni kecaj, jak je to tezky! */

/* 

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()
*/

var unsaved_data = 0;
var was_installed = 0;

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() { 
			if (!confirm_leave())
				return false;
			if (this.old_onclick_bef_unschk)
				return this.old_onclick_bef_unschk();
			return true;
		}
	}
}

function confirm_leave() 
{ 
	if (unsaved_data) {
		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:
function add_guard_to_forms()
{
	set_onchange_foralltags('input');
	set_onchange_foralltags('select');
	set_onchange_foralltags('textarea');
}

//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;
}


