var xmlHttp;
var reservations_by_date = [];
var total_registrant_fields = [];
var all_dates = [];
var authid;

function toggle_pchart(a_elt, pchart_elt_id)
{
	curStyle = getStyleById(pchart_elt_id, 'display');
	
	if(curStyle == 'block')
		setStyleById(pchart_elt_id, 'display', 'none');
	else
		setStyleById(pchart_elt_id, 'display', 'block');
		
	if(curStyle == 'none')
		a_elt.childNodes[0].replaceData(0, 100, "Hide price chart");
	else
		a_elt.childNodes[0].replaceData(0, 100, "Purchase tickets");
}

function submit_addl_registrants()
{
	setStyleById('addl_registrants_ajax_loader', 'display', 'block');
	setStyleById('addl_registrants_submit_controls', 'display', 'none');

	createXMLHttpRequest();
	
	var url = "index.php?module=EventStore&func=submit_addl_registrants";
	
	for(var i=0; i<all_dates.length; i++)
	{
		var did = all_dates[i];
		var num_extra_fields = total_registrant_fields[did];
		var rid = reservations_by_date[did];
		
		url = url + '&rids[]=' + rid;
		
		for(var j=0; j<num_extra_fields; j++)
		{
			var firstname = document.getElementById('addl_registrants_' + did + '_' + j + '_fn').value;
			var lastname = document.getElementById('addl_registrants_' + did + '_' + j + '_ln').value;
			var email = document.getElementById('addl_registrants_' + did + '_' + j + '_em').value;
			
			url = url + '&fn_' + rid + '[' + j + ']=' + firstname
				+ '&ln_' + rid + '[' + j + ']=' + lastname
				+ '&em_' + rid + '[' + j + ']=' + email;
		}
	}
	
	url = url + '&authid=' + authid;
	url = url + "&theme=Blank";
	
	xmlHttp.onreadystatechange = handleStateChangeSubmitAddlReg;
	xmlHttp.open("GET", url, true);
	xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlHttp.send(null);
}

function skip_addl_registrants()
{
	setStyleById('payment_submit', 'display', 'block');
}

function createXMLHttpRequest(which)
{
	if(window.ActiveXObject)
		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	else
		xmlHttp = new XMLHttpRequest();
}

//Handle state changes in the XMLHttpRequest object
function handleStateChangeSubmitAddlReg()
{
	if(xmlHttp.readyState == 4)
	{
		if(xmlHttp.status == 200)
		{
			//Do stuff with the returned data
			if(xmlHttp.responseXML)
				finish_addl_reservation_add(xmlHttp.responseXML.documentElement);
		}
	}
}

//Handle results of call to submit_addl_registrants
function finish_addl_reservation_add(xml)
{
	var result, new_authid, error, errormsg;
	
	if(xml.getElementsByTagName('Result')[0].firstChild)
		result = parseInt(xml.getElementsByTagName('Result')[0].firstChild.nodeValue);
	
	if(xml.getElementsByTagName('AuthID')[0].firstChild)
		new_authid = xml.getElementsByTagName('AuthID')[0].firstChild.nodeValue;
		
	if(xml.getElementsByTagName('Error')[0].firstChild)
		error = xml.getElementsByTagName('Error')[0].firstChild.nodeValue;
	
	if(xml.getElementsByTagName('ErrorMsg')[0].firstChild)
		errormsg = xml.getElementsByTagName('ErrorMsg')[0].firstChild.nodeValue;
	
	//Regardless of success or failure, we need a new authid for further action
	authid = new_authid;
	
	//Success reported	
	if(result)
	{
		setStyleById('payment_submit', 'display', 'block');
		setStyleById('addl_registrants_ajax_error', 'display', 'none');
		setStyleById('addl_registrants_ajax_loader', 'display', 'none');
		setStyleById('addl_registrants_success', 'display', 'block');
		setStyleById('addl_registrants_submit', 'display', 'none');
		setStyleById('addl_registrants_submit_controls', 'display', 'none');
	}
	
	//Error reported
	else
	{
		setStyleById('addl_registrants_ajax_error', 'display', 'block');
		
		switch(error)
		{
			case 'authid':
				set_node_text('addl_registrants_ajax_errormsg', "Bad authorization code sent to the server from this form. Please try submitting the request again.");
				break;
				
			case 'create':
				set_node_text('addl_registrants_ajax_errormsg', errormsg);
				break;
		}
		
		setStyleById('addl_registrants_submit_controls', 'display', 'block');
		setStyleById('addl_registrants_ajax_loader', 'display', 'none');
		setStyleById('payment_submit', 'display', 'block');
	}
}

//Replaces the first child of the given element with a new text node containing new_text,
//or adds a new text node if there are no children
function set_node_text(elt_id, new_text)
{
	elt = document.getElementById(elt_id);
	
	if(!elt)
		return;
	
	newTextNode = document.createTextNode(new_text);
	
	if(elt.childNodes[0])
		elt.replaceChild(newTextNode, elt.childNodes[0]);
	else
		elt.appendChild(newTextNode);
}