//
// Contains the implementation of the function set_session_variable()
// which allows PHP session variables to be set using JavaScript.
// Before page unloads, all pairs (name, val) such that 
// set_session_variable(name, val) has been called will be submitted
// sent to the server using XMLHttpRequest and added to the array of PHP
// session variables.
//

echo_on = false;
required_fields = new Array();
field_values = new Array();
validators = new Array();
has_field_values = false;

function register_required_field(name, label)
{
	
	required_fields[name] = label;
}

function unregister_required_field(name)
{
	var required = new Array();
	for (var f in required_fields)
		if (f != name)
			required[f] = required_fields[f];
	required_fields = required;
}

function set_field_value(name, value, validator, msg)
{
	echo ("name: " + name + ", value: " + value)
	if (value === '')
		return;
	field_values[name] = value;
	has_field_values = true;
	if (document.forms[0][name].value != value)
		document.forms[0][name].value = value;
	if (validator)
		register_validator(name, validator, msg);
	echo ("form value: " + document.forms[0][name].value)
}

window.set_session_variable = set_field_value;

function register_validator(name, validator, msg)
{
	validators[name] = [ validator, msg ];
}

function submit_if_valid(next, confirmation)
{
	echo('submit if valid');
	if (!bypass_validation()) {
		for (var f in required_fields) {
		    echo("required_field: " + f+': '+document.forms[0][f].value+' field_values: '+field_values[f]);
			if ( document.forms[0][f] && 
				 is_visible(document.forms[0][f]) && 
				 !field_is_set(f) && 
				 (!has_field_values ||  field_values[f] == undefined || field_values[f] == '') && required_fields[f] != 'Username' && required_fields[f] != 'Password') 
			{
				echo ('document.forms[0][f]: ' + document.forms[0][f] + ', is_visible(document.forms[0][f]): ' + is_visible(document.forms[0][f]) + ', field_is_set(f): ' + field_is_set(f) + ', !has_field_values: ' + !has_field_values + ', field_values[f] == undefined: ' + (field_values[f] == undefined) + ', field_values[f] == \'\': ' + (field_values[f] == ''))
				var message = window.ccPrefs__lang == 'en' ?
					"The field '" + required_fields[f] + "' is required" :
					"El campo '" + required_fields[f] + "' es obligatorio";
				alert(message);
				return;
			}	
		}
		for (var v in field_values)
			if (validators[v] != undefined && is_visible(document.forms[0][v]) && !validators[v][0](field_values[v])) {
				alert(validators[v][1]);
				return;
			}
	}
	if (confirmation != undefined && !confirm(confirmation))
		return;
	disable_buttons();
	if (next != null) {
		var href = document.location.href;
		var q = href.lastIndexOf("?");
		document.forms[0].current_page.value = href;
		document.forms[0].next_page.value = 
			href.substr(0, href.lastIndexOf("/") + 1) + 
			next + document.location.search;
	}
	document.forms[0].submit();

}

function is_visible(elt)
{		 		
	while (elt != null)
	{
		if ( elt.style && 
			 elt.style.display != undefined && 
			 elt.style.display == 'none' )
		{
			return false;
		}
		elt = elt.parentNode;
	}
	return true;
}

function field_is_set(id) {
	elt = document.forms[0][id];
	echo ('field_is_set, id: ' + id + ' type: ' + elt.type + ' value: ' + elt.value);
	if (elt.length && elt[0].type == 'radio') {
		for (z = 0; z < elt.length; ++z) {
			if (elt[z].checked)
				return true;
		}
		return false;
	}
	echo ('field_is_set, returning: ' + elt.type == 'checkbox' ? elt.checked : (elt.localName == 'radio' ? elt.value != '' && elt.value != undefined : (elt.type == undefined ? false : elt.value != '')))
	return elt.type == 'checkbox' ?
	  	elt.checked :
	  	(elt.localName == 'radio' ? elt.value != '' && elt.value != undefined : 
	  		(elt.type == undefined ? false : elt.value != ''));
} 

function bypass_validation()
{
	return document.forms[0].easter_egg && 
		   document.forms[0].easter_egg.value == '1';
}

function set_bypass_validation()
{
	document.forms[0].easter_egg.value = '1';
}

function disable_buttons()
{
	var submit = document.getElementsByTagName('input');
	for (var z = submit.length - 1; z != -1; --z) {
		var b = submit.item(z);
		if (b.type == 'submit' || b.type == 'button' || b.type == 'image') 
			b.disabled = true;
	}
}

function echo(msg) { if (window.echo_on) alert(msg); }
