Event.register('load', fieldCheck);
window.onbeforeunload = fieldCheckLeave;
document.onfocusin = function(){fieldcheckFocused = window.event.srcElement; }

var bFieldlist = false;
var bEnableFieldCheck = true;
var fieldcheckFocused = null;

function fieldCheckLeave(ev) {
	if ( browser.isIE ) {
		var target = fieldcheckFocused;
    } else if ( browser.isFF3 ) {
        var target   = ev.explicitOriginalTarget;
	} else {
		var target   = ev.target || ev.srcElement;
	}

	if ( bEnableFieldCheck && target.nodeName != 'FORM' && target.nodeName != 'INPUT' && target.nodeName != 'BUTTON' && !fieldCheck() )	{
		return 'Az oldal elhagyásával a módosítások elveszhetnek!';
	}

	return;
}

function check_i(i, inplist) {
	return !(typeof inplist[i] == 'object');
}

function preCheck(i, o, elem) {
	if ( isNaN(i) ) return false;
	if ( hasClass(elem, 'skip') ) return false;
	if ( check_i( i, o ) ) return false;
	return true;
}

function fieldCheck() {

	var a_input		= document.getElementsByTagName('input');
	var a_textarea	= document.getElementsByTagName('textarea');
	var a_select	= document.getElementsByTagName('select');

	var idx	= 0;

	// Hash generatrion / fields
	if ( !bFieldlist ) {
		for ( var i in a_input ) {
			if (!preCheck(i, a_input, a_input[i])) continue;

			switch (a_input[i].type)
			{
				case 'text':
				case 'hidden':
					a_input[i].setAttribute('fieldCheckHash', hex_md5(a_input[i].value));
					break;
			
				case 'radio':
				case 'checkbox':
					a_input[i].setAttribute('fieldCheckHash', hex_md5(new String(a_input[i].checked)));
					break;
			
			}
		}

		for ( var i in a_textarea ) {
			if (!preCheck(i, a_textarea, a_textarea[i])) continue;

			a_textarea[i].setAttribute('fieldCheckHash', hex_md5(a_textarea[i].value));
		}

		for ( var i in a_select ) {
			if (!preCheck(i, a_select, a_select[i])) continue;

			if ( !a_select[i].multiple ) {
				a_select[i].setAttribute('fieldCheckHash', hex_md5(a_select[i].value));
			} else {
				var text = '';
				for (var j=0; j<a_select[i].options.length; j++) {
					if (!a_select[i].options[j].selected) continue;
					text = text + a_select[i].options[j].value;
				}
				a_select[i].setAttribute('fieldCheckHash', hex_md5(text));
			}
		}

		bFieldlist = true;
		return true;
	}

	// Check for changes
	for ( var i in a_input ) {
		if (!preCheck(i, a_input, a_input[i])) continue;

		switch (a_input[i].type) {
			case 'text':
			case 'hidden':
				if ( a_input[i].getAttribute('fieldCheckHash') != hex_md5(a_input[i].value) ) return false;
				break;
		
			case 'radio':
			case 'checkbox':
				if (a_input[i].getAttribute('fieldCheckHash') != hex_md5(new String(a_input[i].checked)) ) return false;
				break;
		
		}
	}
	for ( var i in a_textarea ) {
		if (!preCheck(i, a_textarea, a_textarea[i])) continue;

		if ( a_textarea[i].getAttribute('fieldCheckHash') != hex_md5(a_textarea[i].value) ) return false;
	}

	for ( var i in a_select ) {
		if (!preCheck(i, a_select, a_select[i])) continue;

		if ( !a_select[i].multiple ) {
			if ( a_select[i].getAttribute('fieldCheckHash') != hex_md5(a_select[i].value) )
				return false;
		} else {
			var text = '';
			for (var j=0; j<a_select[i].options.length; j++) {
				if (!a_select[i].options[j].selected) continue;
				text = text + a_select[i].options[j].value;
			}
			if ( a_select[i].getAttribute('fieldCheckHash') != hex_md5(text) ) return false;
		}
	}

	return true;
}

