if ( parent.window.location != window.location ) {
	parent.window.location = window.location;
}
var tabs;
var requiredFields = [];
var openTab ;
var dragsort = ToolMan.dragsort();
var newlist_alone = null;
function sortTable(e) {
	var targ = getTarget(e);
	var row = targ.parentNode;
	var i;
	var index;
	var sortItem;
	for ( i = 0 ; i < row.childNodes.length ; i++ ) {
		row.childNodes[i].style.textDecoration = 'none';
		if ( row.childNodes.item(i) == targ )  {
			sortItem = row.childNodes[i].innerHTML;
			index = i;
		}
	}
	var t = tableFromDescendant( row );
	sortTableByIndex( t, index );
}
function sortTableByIndex(t, index ) {
	var rows = t.rows;
	var sortItem = rows[0].childNodes[index].innerHTML;
	var hash = [];
	for ( var n = 1 ; n < rows.length ; n++ ) {
		hash.push( { key: rows[n].childNodes[index].innerHTML, rows: rows[n].innerHTML } );
	}
	var compareFunction;
	switch (sortItem) {
		case 'Sail no':
			compareFunction = compareSailNo;
			break;
		case 'CSA':
			compareFunction = compareRating;
			break;
		default:
			compareFunction = compareCells;
	}
	hash.sort(compareFunction);
	for ( var n = 0 ; n < hash.length ; n++ ) {
		rows[n+1].innerHTML = hash[n].rows;
	}
	rows[0].childNodes[index].style.textDecoration = 'underline';
	//alert('finished sorting by ' + sortItem + ' index ' + index + 'of this many rows: ' + t.rows.length );
	t.setAttribute('sortIndex', index);
}
function tableFromDescendant(d) {
	while ( d.tagName.toLowerCase() != 'table' ) { 
		d = d.parentNode;
	}
	return d;
}
function compareCells(a,b) {
	if ( a.key.toLowerCase() < b.key.toLowerCase() ) return -1;
	if ( b.key.toLowerCase() < a.key.toLowerCase() ) return 1;
	return 0;
}
function compareRating(a,b) {
	var a_number = a.key.replace(/[^\d]+/g,"");
	var b_number = b.key.replace(/[^\d]+/g,"");
	if ( a_number < b_number ) return 1;
	if ( b_number < a_number ) return -1;
	return 0;
}
function compareSailNo(a,b) {
	var a_number = a.key.replace(/[^\d]+/g,"");
	var b_number = b.key.replace(/[^\d]+/g,"");
	if ( a_number < b_number ) return -1;
	if ( b_number < a_number ) return 1;
	return 0;
}
function confirmEssential(t) {
	var errors = 0;
	var fields = gebi(openTab).getElementsByTagName('input');
	for ( var n = 0 ; n < fields.length ; n++ ) {
		if ( fields[n].getAttribute('required') == 'yes' && ( fields[n].value == '' || fields[n].value == null ) ) {
			fields[n].parentNode.style.backgroundColor = 'red';
			errors++;
		}
	}
	var fields = gebi(openTab).getElementsByTagName('select');
	for ( var n = 0 ; n < fields.length ; n++ ) {
		if ( fields[n].getAttribute('required') == 'yes' && ( fields[n].value == '' || fields[n].value == null ) ) {
			fields[n].parentNode.style.backgroundColor = 'red';
			errors++;
		}
	}
	if ( user_is_admin ) return true;
	if ( errors > 0 )  {
		alert( errors + ' required fields left blank');
		return false;
	}
	return true;
}
function tabClick(t) {
	if ( ! confirmEssential(  ) ) return false;
	clearTabs();
	setTab(t);
}
function prevPane(t) {
	var current = -1;
	for ( var n = tabs.length - 1 ; n >= 0 ; n-- ) {
		if ( current > 0 || tabs[n].id == t ) {
			current = n;
			if ( gebi( 'tab_' + tabs[n-1].id ).style.display != 'none' ) return tabClick( tabs[n-1].id );
		}
	}
}
function dims() {
	alert(document.body.offsetHeight + ' x ' + document.width );
}
function nextPane(t) {
	var current = -1;
	for ( var n = 0 ; n < tabs.length  - 1; n++ ) {
		if ( current > 0 || tabs[n].id == t ) {
			current = n;
			if ( gebi( 'tab_' + tabs[n+1].id ).style.display != 'none' ) return tabClick( tabs[n+1].id );
		}
	}
}
function CSACancel() {
	var t = gebi( csaDivId );
	t.innerHTML = '';
	t.style.display = 'none';
	gebi('maskDiv').style.display = 'none';
	gebi('csa_search_button').disabled = false;
}
function modalMessage(m) {
	var div = document.createElement('div');
	div.appendChild( document.createTextNode(m) );
	div.className = 'modalMessage';
	return div;
}
function CSAselectYacht( i ) {
	var rows = i.getElementsByTagName('input');
	var yacht_id;
	for ( var n = 0 ; n < rows.length ; n++ ) {
		if ( rows[n].checked ) {
			yacht_id = rows[n].value;
			break;
		}
	}
	//alert( yacht_id );
	var t = gebi( csaDivId );
	t.innerHTML = '';
	t.appendChild( modalMessage('Please wait while your CSA record is retreived...') );
	var e = document.createElement('div');
	var formRequest = XHRFactory.getInstance();
	formRequest.open( "POST", 'csarec', true);
	formRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	formRequest.onreadystatechange = function() {
		gebi('statusMessage').innerHTML = 'Request sent. Server status: ' + formRequest.readyState;
		if ( formRequest.readyState == 4 ) {
			// if "OK"
			if ( formRequest.status == 200 ) {
				gebi('statusMessage').innerHTML = 'CSA loaded';
				//alert( formRequest.responseText );
				var csa_doc = formRequest.responseXML;
				csa_cert = csa_doc.documentElement;
				special_objects['CSA'] = csa_cert;

				//gebi('csa_csa_cert').value = XML.serialize(csa_cert); //formRequest.responseText;

				csa_cert.normalize();
				//alert( csa_cert.getElementsByTagName('yacht')[0].getAttribute('loa') );
				if ( csa_cert.getElementsByTagName('yacht')[0].getAttribute('loa') > 0 ) {
					if ( gebi('yacht_loa') ) gebi('yacht_loa').disabled = true;
					if ( gebi('yacht_loa_unit') ) gebi('yacht_loa_unit').disabled = true;
					if ( gebi('yacht_loa') ) gebi('yacht_loa').value = csa_cert.getElementsByTagName('yacht')[0].getAttribute('loa');
					if ( gebi('yacht_loa_unit') ) gebi('yacht_loa_unit').value = 'metres';
					if ( gebi('yacht_name') ) if ( gebi('yacht_name').value == '' ) gebi('yacht_name').value = csa_cert.getElementsByTagName('yacht')[0].getAttribute('name');;
					if ( gebi('yacht_sail_no') ) if ( gebi('yacht_sail_no').value == '' ) gebi('yacht_sail_no').value = csa_cert.getElementsByTagName('yacht')[0].getAttribute('sail_no');;
					if ( gebi('yacht_design') ) gebi('yacht_design').value = csa_cert.getElementsByTagName('yacht')[0].getAttribute('design');;
					if ( gebi('owner_name') ) gebi('owner_name').value = csa_cert.getElementsByTagName('yacht')[0].getAttribute('owner');;
				}
				//loadForm( formRequest.responseXML );
				//e.innerHTML = formRequest.responseText;
				//t.appendChild( e );
				//t.setAttribute('outputField', 'yes');
				t.style.display = 'none';
				gebi('maskDiv').style.display = 'none';
				checkForm();
			} else {
				alert('Error: ' + formRequest.status);
				gebi('statusMessage').innerHTML = 'The entry was not saved. Please try again.';
			}
			XHRFactory.release( formRequest );
			gebi('csa_search_button').disabled = false;
		}
	};
	gebi('csa_yacht_id').value = yacht_id;
	formRequest.send( 'yacht_id='+ yacht_id );
}
var csaDivId;
function CSAsearchFor( t ) {
	var q = gebi(t).q;
	//alert('search ' + q.value );
	csa_search( csaDivId, q );
}
function csa_search( divid,q ) {
	gebi('csa_search_button').disabled = true;
	var t = gebi( divid );
	if ( ! t ) {
		var csaDiv = document.createElement('div');
		csaDiv.id = divid;
		csaDiv.className = 'externalDiv';
		csaDiv.style.minHeight = '200px';
		gebi('maskDiv').appendChild( csaDiv );
		t = csaDiv ;
		csaDivId = divid;
	}
	
	t.style.display = 'block';
	gebi('maskDiv').style.display = 'block';

	//gebi('maskDiv').style.height = gebi('wholeWorld').clientHeight + 'px';
	if ( t.lastChild ) t.removeChild( t.lastChild );

	t.appendChild( modalMessage('Please wait while the CSA search screen loads...') );

	var e = document.createElement('div');
	var formRequest = XHRFactory.getInstance();
	formRequest.open( "POST", 'csatie', true);
	formRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	formRequest.onreadystatechange = function() {
		gebi('statusMessage').innerHTML = 'Request sent. Server status: ' + formRequest.readyState;
		if ( formRequest.readyState == 4 ) {
			// if "OK"
			if ( formRequest.status == 200 ) {
				gebi('statusMessage').innerHTML = 'CSA loaded';
				//alert( formRequest.responseXML );
				//loadForm( formRequest.responseXML );
				e.innerHTML = formRequest.responseText;
				t.innerHTML = '';
				t.appendChild( e );
				t.setAttribute('outputField', 'yes');
				
			} else {
				alert('Error: ' + formRequest.status);
				gebi('statusMessage').innerHTML = 'The CSA search failed. Please save your entry, reload this page and try again.';
			}
			XHRFactory.release( formRequest );
		}
	};
	var query = gebi('yacht_name').value;
	if ( q ) query = q.value;
	formRequest.send( 'q='+ query );
}
function loadPage() {
	tabs = getTabs();// document.getElementsByName('tab');
	//alert( tabs[0].id );
	if ( tabs ) {
		clearTabs();
		setTab(openTab);
		//alert( 'in loadPage: ' +gebi('entry_id').value );
		loadEntry(gebi('entry_id').value, gebi('event_id').value);
		setTabs();
	}
	for ( var n = 0 ; n < loadProcesses.length ; n++ ) {
		loadProcesses[n]();
	}
}
function setTabs(t) {
	for ( var f in onChange ) {
		onChange[f]();
	}
	checkForm();
}
function OnChange(t) {
	okayToLeave = false;
	gebi('statusMessage').innerHTML = '<span style="color:red;font-weight:bold;">Your entry has unsaved changes. Do not use the browser "back" button.</span>';
	var fields = gebi(openTab).getElementsByTagName('input');
	var errors = 0;
	for ( var n = 0 ; n < fields.length ; n++ ) {
		if ( ! fields[n].value == '' ) {
			fields[n].parentNode.style.backgroundColor = null;
		}
	}
	setTabs();
	feeCalc(t);
}
function showDesc( target ) {
	alert( target.getAttribute('title') );
}
function setDisplay(id,state) {
	if ( state == 'yes' ) gebi(id).style.display = 'block';
	if ( state == 'no' ) gebi(id).style.display = 'none';
}
function hideTab(id) {
	gebi(id).style.display = 'none';
}
function toXML(f) {
	var doc2 = XmlDocument.create();
	var entry = doc2.appendChild( doc2.createElement('entry') );
	//alert( 'in toXML: ' + gebi('entry_id').value );
	entry.setAttribute('entry_id',gebi('entry_id').value);
	entry.setAttribute('event',gebi('event_id').value);
	var divs = f.getElementsByTagName('div');
	for ( var n = 0 ; n < divs.length ; n++ ) {
		if( divs[n].className == 'formBlock' ) {
			var e = doc2.createElement( divs[n].getAttribute('id') );
			if ( divs[n].getAttribute('id') == 'csa' ) {
			//alert( csa_cert );
				//alert( special_objects['csa_cert'] );
				if ( special_objects['CSA'] )
				e.appendChild( special_objects['CSA'].cloneNode(true) );
			}
			var inputs = divs[n].getElementsByTagName('input');

			if ( isNaN( inputs.length ) ){
				alert( 'You cannot use this version of Internet Explorer reliably with any javascript. Please get a different browser and try again.');
				return false;
			}
			for ( var m = 0 ; m < inputs.length ; m++ ) {
				if ( ! inputs[m].getAttribute('name') ) continue;
				switch ( inputs[m].type ) {
					case 'checkbox':
						if ( inputs[m].checked ) {
							var i = doc2.createElement( inputs[m].getAttribute('name') );
							i.appendChild( doc2.createTextNode( inputs[m].value ) );
							e.appendChild( i );
						}
						break;
					default:
						var i = doc2.createElement( inputs[m].getAttribute('name') );
						if ( inputs[m].value ) i.appendChild( doc2.createTextNode( inputs[m].value ) );
						e.appendChild( i );
						break;
				}
			}
			inputs = divs[n].getElementsByTagName('select');
			for ( var m = 0 ; m < inputs.length ; m++ ) {
				var i = doc2.createElement( inputs[m].getAttribute('name') );
				i.appendChild( doc2.createTextNode( inputs[m].value ) );
				e.appendChild( i );
			}
			inputs = divs[n].getElementsByTagName('textarea');
			for ( var m = 0 ; m < inputs.length ; m++ ) {
				var i = doc2.createElement( inputs[m].getAttribute('name') );
				if ( inputs[m].value ) i.appendChild( doc2.createTextNode( inputs[m].value ) );
				e.appendChild( i );
			}
			//if ( f.elements[n].value )
			//e.appendChild( doc2.createTextNode( f.elements[n].value ) );
			entry.appendChild(e);
		}
	}
	var x  = XML.serialize(doc2);
//alert( x );
	return x;
}
function checkForm( f ) {
	for ( var n in tabs ) {

		// This difficult to understand thing checks to see if the tab is visible in the tab bar.
		// If it is not, the whole tab as skipped for validation
		if ( gebi( 'tab_' + tabs[n].id ).style.display == 'none' ) continue;
		var status = 'okay';

		for ( var block_id in requiredFields[ tabs[n].id ] ) {
			var block = gebi( block_id );
			if ( block.style.display == 'none' ) continue;
			var field_list = requiredFields[ tabs[n].id ][block_id];
			//if ( ! confirm( block_id + ' = ' + requiredFields[ tabs[n].id ][block_id]  ) ) break;
			for ( var field_index in field_list ) {
				var field = gebi( field_list[field_index] );
				//alert( field_list[field_index] + ' = ' + field.value );
				if ( field.value == '' ) {
					gebi( 'tab_' + tabs[n].id ).getElementsByTagName('img')[0].src = 'static/images/pending.png';
					status = 'pending';
					break;
				}
			}
		}
		if ( status == 'okay' && gebi( 'tab_' + tabs[n].id ).getElementsByTagName('img')[0] )
		try{	gebi( 'tab_' + tabs[n].id ).getElementsByTagName('img')[0].src = 'static/images/okay.png'; } catch ( e ) { alert( 'no: tab_' + tabs[n].id ); }
	}
}
function loadForm( entry_doc ) {
	var entry_element = entry_doc.documentElement;
	gebi('entry_id').value = entry_element.getAttribute('entry_id');
	gebi('event_id').value = entry_element.getAttribute('event');


	//alert ( entry_doc.evaluate( '/entry/@entry_id', entry_doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue.textContent );

	if ( entry_element.getAttribute('entry_id') ) 
		gebi('statusMessage').innerHTML = 'Entry loaded';
	else 
		gebi('statusMessage').innerHTML = 'New entry';
	var blocks = entry_doc.documentElement.childNodes;
	for ( var n = 0 ; n < blocks.length ; n++  ) {
		if ( blocks[n].nodeType != 1 ) continue;
		blocks[n].normalize();
		var fields = blocks[n].childNodes;
		for ( var m = 0 ; m < fields.length ; m++ ) {
			fields[m].normalize();
			if ( fields[m].nodeType != 1 ) continue;
			var x  = XML.serialize(fields[m]);
			//alert( fields[m].nodeName );
			var b = gebi( blocks[n].nodeName + '_' + fields[m].nodeName );
	//		if ( ! confirm ( blocks[n].nodeName + '_' + fields[m].nodeName + '/' + b.type + ' = ' + fields[m].firstChild.nodeValue ) ) return false; //.getElementsByName( 'name' ) );
			if ( fields[m].firstChild ) 
			try {
				switch ( b.type ) { 
					case 'text':
						b.value = fields[m].firstChild.nodeValue;
						break;
					case 'select-one':
						b.value = fields[m].firstChild.nodeValue;
						break;
					case 'textarea':
						b.innerHTML = fields[m].firstChild.nodeValue;
						break;
					case 'checkbox':
						b.checked = fields[m].firstChild.nodeValue == 'yes' ? true : false;
						break;
					case 'span':
						b.innerHTML = fields[m].firstChild.nodeValue;
						break;
				}
			} catch(e) { 
				special_objects[fields[m].nodeName] = fields[m];
				//alert('calling csa with ' + XML.serialize( fields[m] ) );
				csa_ratings( fields[m] );
		//		alert( fields[m].nodeName + ' = ' + XML.serialize( fields[m] ) );
				//for ( var xxx in special_objects ) alert( xxx );
				//alert('error: ' + blocks[n].nodeName + '_' + fields[m].nodeName);
			}
			else try {
				switch ( b.type ) {
					case 'select-one':
						b.value = '';
						break;
				}
			} catch (e) {
			}
			
		}
	}
	setTabs();
	try { feeCalc() } catch (e) {} 
}
function csa_ratings( o ) {
	if ( o.nodeName != 'CSA' ) return false;
	var CSA = o;
	//alert( XML.serialize( CSA.getElementsByTagName('yacht')[0] ) );
	var yacht = CSA.getElementsByTagName('yacht')[0];
	var certs = yacht.getElementsByTagName('cert');
	if ( ! certs.length > 0 ) return false;
	var cert = certs[0];
	var ratings = cert.getElementsByTagName('rating');
	var rating_select = gebi('csa_rating_type');
	var rating_options = rating_select.options;
	for ( var m = 0 ; m < rating_options.length ; m++ ) {
		rating_options[m].disabled = true;
	}
	for ( var n = 0 ; n < ratings.length ; n++ ) {
		//alert( XML.serialize( ratings[n] ) );
		for ( var m = 0 ; m < rating_options.length ; m++ ) {
			if ( rating_options[m].value == ratings[n].getAttribute( 'type' ) ) {
				rating_options[m].innerHTML = ratings[n].getAttribute( 'type' ) + ' - ' + 
				cert.getAttribute( 'version' ) + ': ' +
				ratings[n].getAttribute( 'tcf' );
				rating_options[m].disabled = false;
			}
		}
	}
}
function loadEntry(entry_id, event_id) {
	var formRequest = XHRFactory.getInstance();
	formRequest.open( "POST", 'reg', true);
	formRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	formRequest.onreadystatechange = function() {
		gebi('statusMessage').innerHTML = 'Request sent. Server status: ' + formRequest.readyState;
		if ( formRequest.readyState == 4 ) {
			// if "OK"
			if ( formRequest.status == 200 ) {
				//alert( formRequest.responseText );
				gebi('statusMessage').innerHTML = 'Entry loaded';
				loadForm( formRequest.responseXML );
				
			} else {
				alert('Error: ' + formRequest.status);
				gebi('statusMessage').innerHTML = 'The entry was not loaded. Please try again.';
			}
			XHRFactory.release( formRequest );
		}
	};
	formRequest.send( 'p=entry_XML;event_id='+event_id+';entry_id='+entry_id );
}
function formSubmit( f,b ) {
	feeCalc();
	if ( ! f['agree'].checked ) {
		alert( 'You must check the "I agree" checkbox on the last tab of the entry form to submit your entry' );
		return false;
	}
	var xml = toXML(f);
	b.disabled = true;
	gebi('statusMessage').innerHTML = 'sending entry';
	var formRequest = XHRFactory.getInstance();
	formRequest.open( "POST", f.action, true);
	var boundary = 'abcdefGHIJKL';
	var separator = '--' + boundary + '\r\n';
	var params = [];
	var requested_events = f['requested_event_id'];
	if ( requested_events ) {
		if ( requested_events.value ) {
			params.push ( 'Content-Disposition: form-data; name="requested_event_id"\r\n\r\n' + requested_events.value );
		}
		if ( requested_events.length ) {
			for ( var n = 0 ; n < requested_events.length ; n++ ) {
				params.push ( 'Content-Disposition: form-data; name="requested_event_id"\r\n\r\n' + requested_events[n].value );
			}
		}
	}
	params.push ( 'Content-Disposition: form-data; name="p"\r\n\r\n' + 'entry_save_XML' );
	params.push ( 'Content-Disposition: form-data; name="entry"\r\n\r\n' + xml );

	var param_string = separator + params.join( '\r\n'+separator ) + '\r\n--' + boundary + '--\r\n';
	formRequest.setRequestHeader('Content-Type','multipart/form-data; boundary=' + boundary);
	formRequest.onreadystatechange = function() {
		gebi('statusMessage').innerHTML = 'Entry sent. Server status: ' + formRequest.readyState;
		if ( formRequest.readyState == 4 ) {
			// if "OK"
			if ( formRequest.status == 200 ) {
				//alert( formRequest.responseText );
				loadForm( formRequest.responseXML );

				gebi('statusMessage').innerHTML = 'Entry saved - entry ID = ' + formRequest.responseXML.documentElement.getAttribute('entry_id');
				if ( ! user_is_admin ) {
					gebi('messageMask').style.display='block';
					gebi('messageHeading').innerHTML = 'Entry saved';
					gebi('messageContent').innerHTML = 'Your entry has been saved.';
				}
			} else {
				alert('Error: ' + formRequest.status);
				gebi('statusMessage').innerHTML = 'The entry was not saved. Please try again.';
			}
			XHRFactory.release( formRequest );
			okayToLeave = true;
			b.disabled = false;
		}
	};
	//alert( param_string );
	formRequest.send( param_string );
	gebi('statusMessage').innerHTML = 'Entry sent. Waiting for confirmation...';
}
/* Utility functions */

function clearTabs() {
	for ( var n = 0 ; n < tabs.length ; n++ ) {
		tabs[n].style.display = 'none';
		gebi( 'tab_' + tabs[n].id ).className = 'tabOther';
	}
}
function setTab(t) {
	if ( gebi( 'tab_' + t ) ) gebi( 'tab_' + t ).className = 'tabPicked';
	if ( gebi(t) ) gebi(t).style.display = 'block';
	openTab = t;
}
function gebi(n) { return document.getElementById(n); }

function getTabs() {
	var outer = gebi('outer');
	if ( outer ) {
		var divs = outer.getElementsByTagName('div');
		var returnArray = [];
		for ( var n = 0 ; n < divs.length ; n++ ) {
			if ( divs[n].className == 'tab' ) returnArray.push( divs[n] );
		}
		return returnArray;
	}
	return false;
}
function hideLoginPopUp(t) {
	try {
		gebi('generalPopUp').removeChild(gebi('generalPopUp').lastChild);
	} catch ( e ) {}
	gebi('maskDiv').style.display='none';

}
function loginPopUp() {
	gebi('maskDiv').style.display='block';
	var loginInstance = gebi('loginForm').cloneNode(true);
	gebi('generalPopUp').appendChild(loginInstance);
	loginInstance.style.display = 'block';
	//loginInstance.style.right = px( gebi('loginstripe').offsetWidth + gebi('loginstripe').offsetLeft );
	loginInstance.style.left = px( gebi('loginstripe').offsetWidth + gebi('loginstripe').offsetLeft - 350 );
	loginInstance.style.top = px( gebi('loginstripe').offsetHeight + gebi('loginstripe').offsetTop );
	loginInstance.elements[0].focus();
}
function px(n) { return n + 'px'; }
function checkLogin(f,e) {
	//var f = t.form;
	var formRequest = XHRFactory.getInstance();
	formRequest.open( "POST", 'reg', true);
	formRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	formRequest.onreadystatechange = function() {
		if ( formRequest.readyState == 4 ) {
			// if "OK"
			if ( formRequest.status == 200 ) {
				var logindoc = formRequest.responseXML;
				if ( logindoc.documentElement.getAttribute('status') == 'okay' ) {
					var locurl = String( document.location );
					if ( locurl.match( /new_login_reg/ ) ) document.location = 'reg';
					else document.location.reload();
				} else {
					//alert( 'Incorrect login information');
					hideLoginPopUp();
					showModalMessage('Login incorrect','Your username or password were not entered correctly');
				}
				
			} else {
				alert('Error: ' + formRequest.status);
			}
			XHRFactory.release( formRequest );
		}
	};
	formRequest.send( 'p=loginXML;login_email='+ f.login_email.value + ';login_password=' + f.login_password.value );
	//alert('request is sent');

	//hideLoginPopUp();

	//document.location.reload();
	return false;
}


function okayToLeave() { 
	return true;
}

function smallTabHideAll(event_id, class_tag) {
	var eventDiv = gebi( 'event_'+event_id );

	var divs = eventDiv.getElementsByTagName('div');

	for ( var n = 0 ; n < divs.length ; n++ ) {
		if ( divs[n].className.match(/\bsmallTabPane\b/) ) divs[n].className = 'smallTabPane';
		if ( divs[n].className.match(/\bsmallTab\b/) ) divs[n].className = 'smallTab';
	}
}
function getTarget(e) {
	return ( e.target ) ? e.target : e.srcElement
}
function newTabClick(e) {
	var targ = getTarget(e);
	if ( ! targ.id ) return false;
	var i = targ.id;
	var class_id = targ.getAttribute('class_id');
	var p = i.replace(/tab_(.*)/, "$1");
	var event_id = i.replace(/tab_(\d+)_(.*)/, "$1");
	var class_tag = i.replace(/tab_(\d+)_(.*)/, "$2");
	
	showClass(event_id, class_id, class_tag);
}
function showClass( event_id, class_id, class_tag ) {
	smallTabShowTab(event_id, class_tag);
	showPane(event_id, class_id, class_tag);
}
function smallTabClick(e) {
	var targ = getTarget(e);
	if ( ! targ.id ) return false;
	var i = targ.id;
	var p = i.replace(/tab_(.*)/, "$1");
	var event_id = i.replace(/tab_(\d+)_(.*)/, "$1");
	var class_tag = i.replace(/tab_(\d+)_(.*)/, "$2");
	smallTabShowTab(event_id, class_tag);
	//tabbedClassFetch(event_id, class_tag);
}
function smallTabShowTab(event_id, class_tag) {
	smallTabHideAll(event_id, class_tag);
	gebi('pane_' + event_id + '_' + class_tag ).className = 'smallTabPane vis';
	gebi('tab_' + event_id + '_' + class_tag ).className = 'smallTab high';
}
function loadTable( pane, doc ) {
	var table = gebi(pane).getElementsByTagName('table')[0];
	var sortIndex = 0;
	if ( table.getAttribute('sortIndex') ) {
		sortIndex = table.getAttribute('sortIndex');
	}
	//alert( sortIndex );
	table.outerHTML = doc;
	if ( sortIndex ) sortTableByIndex( table, sortIndex );
}
function findElemValue( elem, path ) {
	var t = elem;
	for ( var n = 0; n < path.length ; n++ ) {
		var x = t.getElementsByTagName(path[n]);
		if ( x.length > 0 ) t = x[0];
		else return null;
	}
	if ( t['firstChild'] )  return t.firstChild.nodeValue;
}
function tabbedClassFetch(event_id, classTag) {
	var formRequest = XHRFactory.getInstance();
	formRequest.open( "POST", 'reg', true);
	formRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	formRequest.onreadystatechange = function() {
		//gebi('statusMessage').innerHTML = 'Request sent. Server status: ' + formRequest.readyState;
		if ( formRequest.readyState == 4 ) {
			// if "OK"
			if ( formRequest.status == 200 ) {
				//alert( formRequest.responseText );
				//gebi('statusMessage').innerHTML = 'Entries loaded';

				loadTable( 'pane_'+event_id + '_' +classTag, formRequest.responseText );
				
			} else {
				alert('Error: ' + formRequest.status);
				gebi('statusMessage').innerHTML = 'The entry was not saved. Please try again.';
			}
			XHRFactory.release( formRequest );
		}
	};
	formRequest.send( 'p=entriesXML;event_id='+event_id+';class_tag='+classTag );
}
function showProgressMessage( heading, body ) {
	gebi('progressMask').style.display='block';
	//gebi('progressHeading').innerHTML = heading
	gebi('progressContent').innerHTML = body;
}
function dismissProgress() {
	gebi('progressMask').style.display = 'none';
}
function showModalMessage( heading, thebody ) {
	gebi('messageMask').style.display='block';
	gebi('messageHeading').innerHTML = heading
	gebi('messageContent').innerHTML = thebody; 
}
function dismissError() {
	gebi('messageMask').style.display = 'none';
}
function checkRegister(f,e) {
	//var f = t.form;
	var formRequest = XHRFactory.getInstance();
	formRequest.open( "POST", 'reg', true);
	formRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	formRequest.onreadystatechange = function() {
		if ( formRequest.readyState == 4 ) {
			// if "OK"
			if ( formRequest.status == 200 ) {
				var logindoc = formRequest.responseXML;
				if ( logindoc.documentElement.getAttribute('status') == 'okay' ) {
					var locurl = String( document.location );
					if ( locurl.match( /new_login_reg|register/ ) ) document.location = 'reg';
					else document.location.reload();
				} else {
					//alert( 'Incorrect login information');
					//hideLoginPopUp();
					var messagetext = '<ul>';
					var errors = logindoc.documentElement.getElementsByTagName('error');
					for ( var n = 0 ; n < errors.length ; n++ ) {
						if ( errors[n].getAttribute('type') == 'no-username' ) messagetext = messagetext + '<li>' + 'You must enter an email address as a username' + '</li>';
						if ( errors[n].getAttribute('type') == 'duplicate-username' ) messagetext = messagetext + '<li>' + 'The username you entered is already registered.' + '</li>';
						if ( errors[n].getAttribute('type') == 'no-password' ) messagetext = messagetext + '<li>' + 'You must enter a password' + '</li>';
						if ( errors[n].getAttribute('type') == 'no-fullname' ) messagetext = messagetext + '<li>' + 'You must enter your name' + '</li>';
					}
					var messagetext = messagetext + '</ul>';
					showModalMessage('Register failed:', messagetext );
				}
				
			} else {
				alert('Error: ' + formRequest.status);
			}
			XHRFactory.release( formRequest );
		}
	};
	formRequest.send( 'p=registerXML;username='+ f.username.value + ';password=' + f.password.value + ';fullname=' + f.fullname.value );
	//alert('request is sent');

	//hideLoginPopUp();

	//document.location.reload();
	return false;
}

function remindPassword(f,e) {
	//var f = t.form;
	var formRequest = XHRFactory.getInstance();
	formRequest.open( "POST", 'reg', true);
	formRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	formRequest.onreadystatechange = function() {
		if ( formRequest.readyState == 4 ) {
			// if "OK"
			if ( formRequest.status == 200 ) {
				var logindoc = formRequest.responseXML;
				if ( logindoc.documentElement.getAttribute('status') == 'okay' ) {
					var locurl = String( document.location );
					if ( locurl.match( /new_login_reg|register/ ) ) document.location = 'reg';
					else document.location.reload();
				} else {
					//alert( 'Incorrect login information');
					var messagetext = '<ul>';
					var errors = logindoc.documentElement.getElementsByTagName('error');
					var modalHeading = 'Password reminder error:';
					for ( var n = 0 ; n < errors.length ; n++ ) {
						if ( errors[n].getAttribute('type') == 'no-username' ) messagetext = messagetext + '<li>' + 'You must enter an email address as a username' + '</li>';
						if ( errors[n].getAttribute('type') == 'username-not-found' ) messagetext = messagetext + '<li>' + 'The username you entered was not found' + '</li>';
						if ( errors[n].getAttribute('type') == 'reminder-sent' ) { 
							modalHeading = 'Success!';
							messagetext = messagetext + '<li>' + 'Your password reminder has been sent and will appear in your inbox shortly' + '</li>';
						}
					}
					var messagetext = messagetext + '</ul>';
					showModalMessage(modalHeading, messagetext );
				}
				
			} else {
				alert('Error: ' + formRequest.status);
			}
			XHRFactory.release( formRequest );
		}
	};
	formRequest.send( 'p=remindXML;username='+ f.username.value );
	//alert('request is sent');

	//hideLoginPopUp();

	//document.location.reload();
	return false;
}
function searchEntries( str ) {
	var tables = document.getElementsByTagName('table');
	var re = new RegExp( str, 'i' );
	for ( var t = 0 ; t < tables.length ; t++ ) {
		if ( tables[t].className != 'user_entry_list' ) continue;
		var rows = tables[t].rows;
		var paneId = tables[t].parentNode.id;
		var tab_id = tables[t].parentNode.id.replace( /^pane_/, "tab_" );
		gebi( tab_id ).style.backgroundColor = null;
		for ( var r = 1 ; r < rows.length ; r++ ) {
			rows[r].style.backgroundColor = null;
			for ( var c = 0 ; c < rows[r].childNodes.length ; c++ ) 
			if ( rows[r].childNodes[c].innerHTML.search( re ) > -1 ) {
				//alert( 'Found: '+ str + ' in ' + rows[r].childNodes[c].innerHTML ) 
				rows[r].style.backgroundColor = 'red';
				gebi( tab_id ).style.backgroundColor = 'red';
				break;
			}
		}
	}
}
function testPop( entry_id, e ) {
	var span = getTarget( e );
	var cell = document.evaluate( 'ancestor::td',span,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;
	var row = document.evaluate( 'ancestor::tr',span,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;
	var table = document.evaluate( 'ancestor::table',span,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;
	var div = document.evaluate( '//div[@id = "popMask"]',span.ownerDocument,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;
	var formRequest = XHRFactory.getInstance();
	formRequest.open( "GET", 'persite/tabbed_layout.xml', false);
	formRequest.send( null );
	var xml_doc = formRequest.responseXML;
	
	var formRequest = XHRFactory.getInstance();
	formRequest.open( "GET", 'static/pop_form.xsl', false);
	formRequest.send( null );
	var xsl_doc = formRequest.responseXML;

	var xsltProcessor=new XSLTProcessor();
	xsltProcessor.importStylesheet(xsl_doc);
	var resultDocument = xsltProcessor.transformToDocument(xml_doc);
	var scripts = resultDocument.evaluate( '//script', resultDocument.documentElement, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
	/*for ( var i = 0 ; i < scripts.snapshotLength ; i++ ) {
		eval(  scripts.snapshotItem(i).firstChild.nodeValue ) ;
	} */
	var newDiv = document.createElement( 'div' );
	newDiv.style.position = 'normal';
	newDiv.style.zIndex = '0';
	newDiv.style.top = '10%';
	newDiv.style.left = '10%';
	newDiv.style.width = '600px';
	newDiv.style.textAlign = 'left';
	newDiv.style.backgroundColor = 'white';
	var cbutton = document.createElement('input');
	cbutton.type = 'button';
	cbutton.onclick = function() { newDiv.parentElement.removeChild( newDiv ); div.style.display = 'none'; }
	cbutton.value = 'close';

	div.appendChild( newDiv );
	div.style.display = 'block';
	newDiv.innerHTML = XML.serialize( resultDocument );
	newDiv.appendChild( cbutton );

	tabs = getTabs();// document.getElementsByName('tab');
	//alert( tabs[0].id );
	if ( tabs ) {
		//clearTabs();
		openTab = 'paneYacht';
		setTab(openTab);
		//alert( 'in loadPage: ' +gebi('entry_id').value );
		setTabs();
	}
	var entryDoc = getEntry( entry_id );
	var eventDoc = loadEvent( entryDoc.documentElement.getAttribute('event') );
	var classSnap = eventDoc.evaluate( '//class', eventDoc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
	for ( var i = 0 ; i < classSnap.snapshotLength ; i++ ) {
		var op = document.createElement( 'option' );
		op.value = classSnap.snapshotItem(i).getAttribute( 'class_tag' );
		op.innerHTML = classSnap.snapshotItem(i).getAttribute( 'class_name' );
		gebi('yacht_class').appendChild( op );
	}
	loadForm( entryDoc );
}
function getEntry( entry_id ) {
	var formRequest = XHRFactory.getInstance();
	formRequest.open( "POST", 'reg', false);
	formRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	formRequest.send( 'p=entry_XML;entry_id='+entry_id );
	return formRequest.responseXML;
}
function loadEvent( event_id ) {
	var formRequest = XHRFactory.getInstance();
	formRequest.open( "POST", 'reg', false);
	formRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	formRequest.send('p=eventXML;event_id=' + event_id );
	var xml_doc = formRequest.responseXML;
	return xml_doc;
}
function adminPay( entry_id, event ) {
//	alert( 'entry_id: ' + entry_id + ', event: ' + event );
	window.open( 'reg?p=enter_payment;entry_id='+ entry_id, 'pay' );
}

//var Coordinates = ToolMan.coordinates();
//var dragsort = ToolMan.dragsort();
function verticalOnly(item) {
	item.toolManDragGroup.verticalOnly()
}
function thresholdBig(item) {
	item.toolManDragGroup.setThreshold(6);
}
function clearListSelection( l ) {
	var list = l.getElementsByTagName('li');
	for ( var i = 0 ; i < list.length ; i++ ) {
		deselectItem( list[i] );
	}
}
function selectItem( item ) {
	item.selected = true;
	item.style.backgroundColor = '#fcc';
	var s = document.evaluate('.//div[@class = "secondRow"]',item,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);
	if ( s.singleNodeValue ) s.singleNodeValue.style.display = 'block';
}
function deselectItem( item ) {
	item.selected = false;
	item.style.backgroundColor = null;
	var s = document.evaluate('.//div[@class = "secondRow"]',item,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);
	if ( s.singleNodeValue ) s.singleNodeValue.style.display = 'none';
}
function clickItem( event, t ) {
	var targ = getTarget( event );
	if ( targ.nodeName != 'DIV' ) {
		return true;
	}
	var list = t.parentNode;
	if ( ! list.selectAnchorNode ) {
		list.selectAnchorNode = t;
		selectItem( t );
	} else {
		// There is an anchor - this click is either a 'clean' click or a 'shift-click'
		switch( true ) {
			case event.shiftKey:
				// Extend selection.
				list.selectionFocusNode = t;
				var items = list.childNodes;
				var selecting = false;
				var endselecting = false;
				for ( var i = 0 ; i < items.length ; i++ ) {
					if ( list.selectionFocusNode == list.selectAnchorNode ) break;
					if ( items[i] == list.selectionFocusNode || items[i] == list.selectAnchorNode ) 
						if ( selecting ) endselecting = true;
							else selecting = true;
					if ( selecting ) selectItem(items[i]);
					if ( endselecting ) selecting = false;
				}
				break;
			case event.metaKey:
				// Toggle clicked item.
				if ( t.selected ) {
					list.selectAnchorNode = null;
					deselectItem( t );
				} else {
					selectItem( t );
					list.selectAnchorNode = t;
				}
				break;
			default:
				// No modifier, so remove other highlights and select this one.
				clearListSelection( list );
				selectItem( t );
				list.selectAnchorNode = t;
		}
	}
	return true;
}
function showPane(event_id, class_id, class_tag, target ) {
	fetchClass( event_id, class_id, 'pane_' + event_id + '_' + class_tag );
}
function fetchClass(event_id, class_id, target ) {
	var maskDiv = gebi('maskDiv');
	var spinner = document.createElement( 'img' );
	spinner.src = 'static/spinner.gif';
	spinner.style.position = 'absolute';
	spinner.style.top = '50%';
	spinner.style.left = '50%';
	maskDiv.style.display = 'block';
	maskDiv.innerHTML = '';
	maskDiv.appendChild( spinner );

	window.status = 'fetching for class '+ class_id;
	var targetDiv = gebi( target );


	var formRequest = XHRFactory.getInstance();
	formRequest.open( "GET", 'reg?p=classXML;class_id='+class_id+';event_id='+event_id, false);
	formRequest.send( null );
	var xml_doc = formRequest.responseXML;

	if ( ! newlist_alone ) {
		var formRequest = XHRFactory.getInstance();
		formRequest.open( "GET", 'static/newlist_alone.xsl', false);
		formRequest.send( null );
		var xsl_doc = formRequest.responseXML;

		var xsltProcessor=new XSLTProcessor();
		xsltProcessor.importStylesheet(xsl_doc);
		newlist_alone = xsltProcessor;
	}
	var resultDocument = newlist_alone.transformToDocument( xml_doc );

	var setup = [];
	targetDiv.innerHTML = XML.serialize( resultDocument.documentElement );
	
	var range = document.createRange();
	range.selectNodeContents( targetDiv.firstChild );
	var frag = range.extractContents();
	//alert( XML.serialize( frag ) );
	targetDiv.appendChild( frag );
	targetDiv.removeChild( targetDiv.firstChild );
	range.detach();
	/*
	*/

	


	/*
	var range = resultDocument.createRange();
	//range.selectNodeContents( targetDiv.firstChild );
	targetDiv.innerHTML = '';

	range.selectNodeContents( resultDocument );
	var frag = range.extractContents();
	alert( XML.serialize( frag ) );
	targetDiv.appendChild( frag );

	*/
	window.status = 'class '+ class_id + ' preparing lists';

	var flags = targetDiv.ownerDocument.evaluate( './/div[@class="flag_colour right" or @class= "flag_colour left" ]',targetDiv,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
	for ( var i = 0 ; i < flags.snapshotLength ; i++ ) {
		var fd = flags.snapshotItem(i);
		fd.colorChosen = function() { this.style.backgroundColor = arguments[0]; saveFlag( this.id, this.style.backgroundColor ); };
	}

	var uls = targetDiv.ownerDocument.evaluate( './/ul[@class = "user_entry_list"]',targetDiv,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
	for ( var i = 0 ; i < uls.snapshotLength ; i++ ) {
		var list = uls.snapshotItem(i);
		var div_id = list.id;
/*
		DragDrop.makeListContainer( list );
		list.onDragOver = function() { this.style["background"] = "#EEF"; };
		list.onDragOut = function() {this.style["background"] = "none"; };
		*/
		list.division = new Division( class_id, div_id );
		list.division.setList( list );
		/*
		list.saveOrder = function ( item ) { if ( ! item.group._isThresholdExceeded ) return true; saveDraggedEntry( item ); };
*/
		var items = list.getElementsByTagName('li');
		if ( items.length == 0 ) {
			var heading = list.ownerDocument.evaluate('ancestor::div[@class = "divisionWrapper"]//h4',list,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;


		}
		for ( var j = 0 ; j < items.length  ; j++ ) {
			if ( items[j].nodeName != 'LI' ) continue;
			if ( ! items[j].getAttribute('id') ) {
				alert( 'error\n' + XML.serialize( items[j].parentNode ) );
			}
			items[j].entry = new Entry( div_id, items[j].getAttribute('class_id'), items[j].getAttribute('id')  );
			var entry_id = items[j].getAttribute('id').replace( /^entry_(\d+)$/, "$1" );
			var entry_rec = xml_doc.evaluate('//entry[@entry_id = "'+ entry_id +'"]', xml_doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;
			items[j].entry.setEntryElement( entry_rec );
		}
	}
	targetList = targetDiv.ownerDocument.evaluate( './ul[@class="classWrapper"]',targetDiv, null, XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;
/*
	dragsort.makeListSortable(targetList, setHandle, setSaveOrder );
*/

	maskDiv.style.display = 'none';
	window.status = 'class '+ class_id + ' loaded';
}
function setSaveOrder(item) {
	var group = item.toolManDragGroup;
	var list = group.element.parentNode;
	var id = list.getAttribute("id")
	if (id == null) return;
	group.register('dragend', function() {
		if ( ! group._isThresholdExceeded ) return true;
		saveDivOrder(list);
	})
}
function saveDivOrder(list) {
	var class_id = Number( list.id.replace( /^ul_(\d+)$/,  "$1" ) );
	var items = getItemsArrayFromList( list );
	var divs = [ 'p=saveDivOrderXML;class_id=' + class_id ];
	for ( var i = 0 ; i < items.length ; i++ ) {
		var div_id = items[i].id.replace( /li_div_(\d+)/, "$1" );
		if ( isNaN( div_id ) ) { continue; }
		divs.push ( 'div_id=' + div_id );
	}

	var formRequest = XHRFactory.getInstance();
	formRequest.open( "POST", 'reg', true);
	formRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	formRequest.onreadystatechange = function() {
		if ( formRequest.readyState == 4 ) {
			if ( formRequest.status == 200 ) {
				if ( formRequest.responseXML ) {
					var responseElement = formRequest.responseXML.documentElement;
					if ( responseElement.getAttribute('okay') == 'yes' ) {
						window.status = 'division order saved';
					} else {
						alert( formRequest.responseText );
					}
				} else {
					alert( 'XML document not receieved');
				}
			} else {
				alert('Error: ' + formRequest.status);
			}
			XHRFactory.release( formRequest );
		}
	};
	formRequest.send( divs.join(';') );
}
function getItemsArrayFromList( list ) {
	var items = [];
	var s = list.ownerDocument.evaluate( './li',list,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
	for ( var i = 0 ; i < s.snapshotLength ; i++ ) items.push( s.snapshotItem(i) );
	return items;
}
function setHandle(item) {
	item.toolManDragGroup.setHandle(findHandle(item));
	item.toolManDragGroup.setThreshold(6);
}
function findHandle(item) {
	return item.firstChild;
}
function makeDivsDraggable( targetDiv ) {
	
	targetList = targetDiv.ownerDocument.evaluate( './ul[@class="classWrapper"]',targetDiv, null, XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;
	dragsort.makeListSortable(targetList, setHandle );

	DragDrop.makeListContainer( targetList );
	var items = targetList.childNodes;
	for ( var i = 0 ; i < items.length ; i++ ) {
		if( items[i].nodeName != 'LI' ) continue;
		//alert( items[i].firstChild );
		items[i].setDragHandle( items[i].firstChild );
	}

}
function saveDraggedEntry( item ) {
	var entry_id = item.id.replace(/^entry_(\d+)/,"$1");
	if ( item.beginContainer.division.div_id == item.parentNode.division.div_id ) return;
	var spinner = document.createElement( 'img' );
	spinner.style.float = 'right';
	spinner.src = 'static/spinner_16x16_blk.gif';
	item.insertBefore( spinner , item.firstChild );

	var formRequest = XHRFactory.getInstance();
	formRequest.open( "POST", 'reg', true);
	formRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	formRequest.onreadystatechange = function() {
		if ( formRequest.readyState == 4 ) {
			if ( formRequest.status == 200 ) {
				var responseDoc = formRequest.responseXML;
				var responseElement = responseDoc.documentElement;
				if ( responseElement.getAttribute('okay') == 'yes' ) {
					spinner.parentNode.removeChild( spinner );
					if( item.beginContainer.getElementsByTagName('li').length == 0 ) {
						//alert( 'empty list - can be deleted' );
						//item.beginContainer.parentNode.style.backgroundColor = '#f99';
					}
					if ( item.parentNode.getElementsByTagName('li').length > 0 ) {
						item.parentNode.parentNode.style.backgroundColor = null;
					}
				} else {
					alert( formRequest.responseText );
				}
			} else {
				alert('Error: ' + formRequest.status);
			}
			XHRFactory.release( formRequest );
		}
	};
	formRequest.send( 'p=entryChangeDivXML;entry_id=' + item.entry.entry_id + ';before_div_id=' + item.beginContainer.division.div_id + ';after_div_id=' + item.parentNode.division.div_id  );

}
function Entry( div_id, class_id, entry_id ) {
	if ( ! entry_id ) alert( 'no entry id' );
	this.entry_id = entry_id.replace( /^entry_(\d+)$/, "$1" );
	this.class_id = class_id.replace( /^class_(\d+)$/, "$1" );
	this.div_id = div_id.replace( /^div_(\d+)$/, "$1" );
	this.entryElement = null;
	this.setEntryElement = function( e ) {
		this.entryElement = e;
	}
}
function Division (class_id, div_id_string) {
	var div_id = div_id_string.replace(/div_(.*)/, "$1");
	this.class_id = class_id;
	if ( isNaN( div_id ) ) div_id = 0;
	this.div_id = div_id;
	this.list;
	this.setList = function( list ) {
		this.list = list;
	}
	this.compareCSA = function (a,b) {
		var a_entryElement = a.entry.entryElement;
		var b_entryElement = b.entry.entryElement;
		try{ var a_rating_type = a_entryElement.ownerDocument.evaluate( './csa/rating_type', a_entryElement, null, XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue.textContent; } catch (e) { }
		try{ var a_rating_tcf = a_entryElement.ownerDocument.evaluate( './csa/CSA/yacht/cert[1]/rating[@type = "'+ a_rating_type+'"]/@tcf', a_entryElement, null, XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue.textContent;
		} catch(e) {}
		try{ var b_rating_type = a_entryElement.ownerDocument.evaluate( './csa/rating_type', b_entryElement, null, XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue.textContent; } catch (e) { }
		try{ var b_rating_tcf = a_entryElement.ownerDocument.evaluate( './csa/CSA/yacht/cert[1]/rating[@type = "'+ b_rating_type+'"]/@tcf', b_entryElement, null, XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue.textContent;
		} catch(e) {}
		if ( ! a_rating_tcf ) a_rating_tcf = 0;
		if ( ! b_rating_tcf ) b_rating_tcf = 0;
		if ( a_rating_tcf < b_rating_tcf ) return 1;
		if ( a_rating_tcf > b_rating_tcf ) return -1;
		return 0;
	};
	this.compareNames = function (a,b) {
		var a_entryElement = a.entry.entryElement;
		var b_entryElement = b.entry.entryElement;
		var a_yacht_name = a_entryElement.ownerDocument.evaluate( './yacht/name', a_entryElement, null, XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;
		var b_yacht_name = b_entryElement.ownerDocument.evaluate( './yacht/name', b_entryElement, null, XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;
		if ( a_yacht_name.textContent.toLowerCase() < b_yacht_name.textContent.toLowerCase() ) return -1;
		if ( a_yacht_name.textContent.toLowerCase() > b_yacht_name.textContent.toLowerCase() ) return 1;
		return 0;
	};
	this.sortByRating = function() {
		var items = this.list.getElementsByTagName( 'li' );
		var arr = [];
		for ( var i = items.length - 1 ; i >= 0 ; i-- ) {
			arr.push( items[i] );
			this.list.removeChild( items[i] );
		}
		arr.sort(this.compareCSA);
		for ( var i = 0 ; i < arr.length ; i++ ) {
			this.list.appendChild( arr[i] );
		}

		return 'okay';
	};
	this.sortByName = function() {
		var items = this.list.getElementsByTagName( 'li' );
		var arr = [];
		for ( var i = items.length - 1 ; i >= 0 ; i-- ) {
			arr.push( items[i] );
			this.list.removeChild( items[i] );
		}
		arr.sort(this.compareNames);
		for ( var i = 0 ; i < arr.length ; i++ ) {
			this.list.appendChild( arr[i] );
		}

		return 'okay';
	};
}
function RegattaClass( class_id, class_tag, class_name, event_id ) {
	this.class_id = class_id;
	this.class_tag = class_tag;
	this.class_name = class_name;
	this.event_id = event_id;
}
function changeClass( targ ) {
	var item = targ.ownerDocument.evaluate('ancestor-or-self::li[@class = "entryListItem"]',targ,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;
	var entry_id = item.entry.entry_id;
	var class_id = item.entry.class_id;
	var event_id = item.getAttribute('event_id');
	var eventDiv = gebi('event_' + event_id );
	var eventElement = eventDiv.regattaEvent.eventDoc.documentElement;
	var classes = eventElement.getElementsByTagName('class');

	var controlDiv = document.createElement('div');
	var newSelect = document.createElement('select');
	controlDiv.appendChild( newSelect );
	for ( var i = 0 ; i < classes.length ; i++ ) {
		var newOpt = document.createElement('option');
		newOpt.value = classes[i].getAttribute('class_id');
		newOpt.innerHTML = classes[i].getAttribute('class_name');
		newSelect.appendChild( newOpt );
	}
	var newOkay = document.createElement('input');
	newOkay.type = 'button';
	newOkay.value = 'ok';
	newOkay.onclick = function() { classChangeOkay( item ); };
	controlDiv.appendChild( newOkay );
	var newCancel = document.createElement('input');
	newCancel.type = 'button';
	newCancel.value = 'cancel';
	newCancel.onclick = function() { classChangeCancel( item ); };
	controlDiv.appendChild( newCancel );
	targ.parentNode.appendChild( controlDiv );
	controlDiv.className = 'controlDiv';
	item.onmousedown = null;
}
function classChangeCancel( item ) {
	item.onmousedown = Drag.onMouseDown;
	var controlDiv = item.ownerDocument.evaluate('.//div[@class = "controlDiv"]',item,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;
	controlDiv.parentNode.removeChild( controlDiv );
}

function classChangeOkay( item ) {
	var controlDiv = item.ownerDocument.evaluate('.//div[@class = "controlDiv"]',item,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;
	var select = controlDiv.getElementsByTagName('select')[0];
	var controlParent = controlDiv.parentNode;
	if ( item.entry.class_id != select.value ) {
		controlParent.removeChild( controlDiv );
		var spinner = document.createElement( 'img' );
		spinner.src = 'static/spinner_16x16_blk.gif';
		controlParent.appendChild( spinner );

		var formRequest = XHRFactory.getInstance();
		formRequest.open( "POST", 'reg', true);
		formRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		formRequest.onreadystatechange = function() {
			if ( formRequest.readyState == 4 ) {
				if ( formRequest.status == 200 ) {
					var responseDoc = formRequest.responseXML;
					var responseElement = responseDoc.documentElement;
					if ( responseElement.getAttribute('okay') == 'yes' ) {
						item.parentNode.removeChild( item );
						//maybe the destination class shoudl refresh?
					} else {
						controlParent.removeChild(spinner);
						alert( formRequest.responseText );
					}
				} else {
					alert('Error: ' + formRequest.status);
				}
				XHRFactory.release( formRequest );
			}
		};
		formRequest.send( 'p=entryChangeClassXML;entry_id=' + item.entry.entry_id + ';class_id=' + select.value + ';before_div_id=' + item.parentNode.division.div_id );

	} else {
		controlParent.removeChild( controlDiv );
		item.onmousedown = Drag.onMouseDown;
	}
}

function initClassDiv( class_id, class_tag, class_name, event_id ) {
	var classPane = gebi( 'pane_' + event_id + '_' + class_tag );
	classPane.regattaClass = new RegattaClass( class_id, class_tag, class_name, event_id );
}
function RegattaEvent( event_id ) {
	this.event_id = event_id;
	var formRequest = XHRFactory.getInstance();
	var self = this;
	formRequest.open( "POST", 'reg', true);
	formRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	formRequest.onreadystatechange = function() {
		if ( formRequest.readyState == 4 ) {
			if ( formRequest.status == 200 ) {
				self.eventDoc = formRequest.responseXML;
			} else {
				alert('Error: ' + formRequest.status);
			}
			XHRFactory.release( formRequest );
		}
	};
	formRequest.send( 'p=eventXML;event_id=' + event_id );

}
function editName( field ) {
	field.formerValue = field.textContent; field.contentEditable = true; field.focus();
}
function renameDivision( div_id, field, class_id, class_name ) {
	var div_name = field.textContent;
	var prev_div_name = field.formerValue;
	field.contentEditable = false;
	if ( div_name == prev_div_name ) return;
	if ( isNaN( div_id ) || div_id < 1 ) {
		alert('cannot do this yet');
		field.innerHTML = prev_div_name;
		return;
		if ( confirm( 'Create a new division called "' + div_name + '" and allocate all un-allocated yachts to it?' ) ) {
			window.status = 'renaming the unallocated - which is the same as allocating all unallocated in ' + class_name + ' (' + class_id + ')';
		} else {
			window.status = 'restoring division ' + div_id + ' to ' + prev_div_name;
			field.innerHTML = prev_div_name;
		}
		return;
	}
	if ( confirm( 'rename divsion "' + prev_div_name + '" (id: '+ div_id +') to "' + div_name + '"?') ) {
		window.status = 'renaming division "' + prev_div_name + '" (id: '+ div_id +') to "' + div_name + '"';
		
		var formRequest = XHRFactory.getInstance();
		formRequest.open( "POST", 'reg', false);
		formRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		formRequest.setRequestHeader('Content-Encoding','UTF-8');
		formRequest.send( 'p=renameDivXML;div_id='+div_id+';div_name=' + escape( div_name ) );
		var xml_doc = formRequest.responseXML;
		if ( xml_doc.documentElement.getAttribute('okay') == 'yes' ) return;
		else field.innerHTML = prev_div_name;

	} else {
		window.status = 'restoring division ' + div_id + ' to ' + prev_div_name;
		field.innerHTML = prev_div_name;
	}
}
function setBowNo ( entry_id, field ) {
	var bow_num =  field.textContent;
	field.contentEditable = false;
	if ( bow_num == field.formerValue ) return;
	var formRequest = XHRFactory.getInstance();
	formRequest.open( "POST", 'reg', false);
	formRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	formRequest.setRequestHeader('Content-Encoding','UTF-8');
	formRequest.send( 'p=saveBowXML;entry_id='+entry_id+';bow_number=' + escape( bow_num ) );
	var xml_doc = formRequest.responseXML;
	if ( xml_doc.documentElement.getAttribute('okay') == 'yes' ) {
		field.formerValue = bow_num;
		return;
	}
	else field.innerHTML = field.formerValue;

}
function setSailNo ( entry_id, field ) {
	var sail_no =  field.textContent;
	field.contentEditable = false;
	if ( sail_no == field.formerValue ) return;
	var formRequest = XHRFactory.getInstance();
	formRequest.open( "POST", 'reg', false);
	formRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	formRequest.setRequestHeader('Content-Encoding','UTF-8');
	formRequest.send( 'p=setSailNoXML;entry_id='+entry_id+';sail_no=' + escape( sail_no ) );
	var xml_doc = formRequest.responseXML;
	if ( xml_doc.documentElement.getAttribute('okay') == 'yes' ) {
		field.formerValue = sail_no;
		return;
	}
	else field.innerHTML = field.formerValue;

}
function initEvent( event_id ) {
	var eventDiv = gebi( 'event_' + event_id );
	eventDiv.regattaEvent = new RegattaEvent( event_id );
}

function newDivision( event_id, class_id, class_tag ) { 
	getNewDivision( event_id, class_id, class_tag );
}
function cancelNewDivision( theForm ) {
	theForm.new_div_name.value = '';
	theForm.style.display = 'none';
}
function getNewDivision( event_id, class_id, class_tag ) {
	var targetDivId = 'pane_' + event_id + '_' + class_tag;
	var targetDiv = gebi ( targetDivId );
	targetList = targetDiv.ownerDocument.evaluate( './ul[@class="classWrapper"]',targetDiv, null, XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;

	var formRequest = XHRFactory.getInstance();
	formRequest.open( "GET", 'static/newdivision.xsl', false);
	formRequest.send( null );
	var xsl_doc = formRequest.responseXML;

	var formRequest = XHRFactory.getInstance();
	var new_div_name = 'Untitled';
	formRequest.open( "GET", 'reg?p=newDivisionXML;class_id='+class_id+';event_id='+event_id + ';div_name=' + new_div_name, false);
	formRequest.send( null );
	var xml_doc = formRequest.responseXML;
	
	var test_doc = xml_doc

	var xsltProcessor=new XSLTProcessor();
	xsltProcessor.importStylesheet(xsl_doc);
	var resultDocument = xsltProcessor.transformToDocument( test_doc );
	var range = resultDocument.createRange();
	range.selectNodeContents( resultDocument.documentElement );
	var frag = range.extractContents();
	//alert( XML.serialize( frag ) );
	targetList.appendChild( frag );
	range.detach();

	//var myName = targetDiv.lastChild.ownerDocument.evaluate( '//h4/span', targetDiv.lastChild, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;
	//myName.ondblclick = function() { alert( 'hey' ); editName( myName ); };
	//myName.onblur = function () {  myName.onblur() } ;

	var list_id = 'div_' + test_doc.documentElement.getAttribute('div_id');

	var list = gebi( list_id );
	DragDrop.makeListContainer( list );
	list.onDragOver = function() { this.style["backgroundColor"] = "#EEF"; };
	list.onDragOut = function() {this.style["background"] = "none"; };
	var div_id = list.id;
	list.division = new Division( class_id, div_id );
	list.division.setList( list );
	list.saveOrder = function ( item ) { if ( ! item.group._isThresholdExceeded ) return true; saveDraggedEntry( item ); };
	
	window.setTimeout( function() { dragsort.makeListSortable(targetList, setHandle, setSaveOrder ); }, 1000 );
}
function saveFlag( flag_div, color ) {
	//alert( flag_div + ': ' + color );
	
}
function deleteDiv( div_id, doc_div_id ) {
	var divItem = gebi(doc_div_id);
	var divList = divItem.ownerDocument.evaluate( './ul[@class = "user_entry_list"]', divItem, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;

	if ( getItemsArrayFromList( divList ).length > 0  ) {
		alert( 'Before you delete a division, remove the entries first' );
		return;
	}
	if ( ! confirm( 'delete div ' + div_id ) ) return ;

	var formRequest = XHRFactory.getInstance();
	formRequest.open( "POST", 'reg', true);
	formRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	formRequest.onreadystatechange = function() {
		if ( formRequest.readyState == 4 ) {
			if ( formRequest.status == 200 ) {
				if ( formRequest.responseXML ) {
					var responseElement = formRequest.responseXML.documentElement;
					if ( responseElement.getAttribute('okay') == 'yes' ) {
						window.status = 'division deleted';
						gebi(doc_div_id).parentNode.removeChild( gebi(doc_div_id) );
					} else {
						alert( formRequest.responseText );
					}
				} else {
					alert( 'XML document not receieved');
				}
			} else {
				alert('Error: ' + formRequest.status);
			}
			XHRFactory.release( formRequest );
		}
	};
	formRequest.send( 'p=deleteDivXML;div_id=' + div_id );
}
function deleteEntry ( targ, entry_id ) {
	var li = getFirstElementByXpath( targ, 'ancestor::li[@class = "entryListItem"]' );
	if ( ! confirm( 'delete this entry? ' ) ) return false;
	if ( confirm( 'STOP!\nIf you REALLY want to delete this entry click "Cancel" ' ) ) return false;
	if ( ! confirm( 'Okay!\nIf you REALLY, REALLY want to delete this entry click "Okay" ' ) ) return false;

	var formRequest = XHRFactory.getInstance();
	formRequest.open( "POST", 'reg', true);
	formRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	formRequest.onreadystatechange = function() {
		if ( formRequest.readyState == 4 ) {
			if ( formRequest.status == 200 ) {
				alert( formRequest.responseText );
				if ( formRequest.responseXML ) {
					var responseElement = formRequest.responseXML.documentElement;
					if ( responseElement.getAttribute('okay') == 'yes' ) {
						window.status = 'entry deleted';
						li.parentNode.removeChild( li );
					} else {
						alert( formRequest.responseText );
					}
				} else {
					alert( 'XML document not receieved');
				}
			} else {
				alert('Error: ' + formRequest.status);
			}
			XHRFactory.release( formRequest );
		}
	};
	formRequest.send( 'p=deleteEntryXML;entry_id=' + entry_id );
}
function getFirstElementByXpath( current, xpath ) {
	var element = current.ownerDocument.evaluate( xpath , current, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
	return element;
}
function makeEntriesDraggable( class_list_id ) {
	var class_id = class_list_id.replace(/^ul_(\d+)$/,"$1" ) ;
	targetList = gebi( class_list_id );
	var divItems = targetList.ownerDocument.evaluate( './li',targetList,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
	for ( var i = 0 ; i < divItems.snapshotLength ; i++ ) {
		findHandle( divItems.snapshotItem(i) ).className = 'divHandle visible';
	}
	var uls = targetList.ownerDocument.evaluate( './/ul[@class = "user_entry_list"]',targetList,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);

	for ( var i = 0 ; i < uls.snapshotLength ; i++ ) {
		var list = uls.snapshotItem(i);
		DragDrop.makeListContainer( list );
		list.onDragOver = function() { this.style["background"] = "#EEF"; };
		list.onDragOut = function() {this.style["background"] = "none"; };
		var div_id = list.id;
		list.division = new Division( class_id, div_id );
		list.division.setList( list );
		list.saveOrder = function ( item ) { if ( ! item.group._isThresholdExceeded ) return true; saveDraggedEntry( item ); };
		var items = list.getElementsByTagName('li');
		if ( items.length == 0 ) {
			var heading = list.ownerDocument.evaluate('ancestor::div[@class = "divisionWrapper"]//h4',list,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;
		}
	}
	dragsort.makeListSortable(targetList, setHandle, setSaveOrder );
}
function saveNotes( f ) {
	var fields = f.elements;
	var params = ['p=saveNotesXML'];
	for ( var i = 0 ; i < fields.length ; i++ ) {
		if ( fields[i].name == '' ) continue;
		if ( fields[i].type == 'checkbox' ) params.push( fields[i].name + '=' + ( fields[i].checked ? 'yes' : 'no' ) );
		else params.push( fields[i].name + "=" + escape( fields[i].value ) );
	}
	var formRequest = XHRFactory.getInstance();
	formRequest.open( "POST", 'reg', false);
	formRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	formRequest.setRequestHeader('Content-Encoding','UTF-8');
	formRequest.send( params.join(';') );
	var xml_doc = formRequest.responseXML;
	if ( xml_doc.documentElement.getAttribute('okay') == 'yes' ) {
		return;
	}
}
function cloneToCC( entry_id ) {
	var params = ['p=cloneToCC;entry_id=' + entry_id ];
	alert( params.join(';') );
	var formRequest = XHRFactory.getInstance();
	formRequest.open( "POST", 'reg', false);
	formRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	formRequest.setRequestHeader('Content-Encoding','UTF-8');
	formRequest.send( params.join(';') );
	var xml_doc = formRequest.responseXML;
	if ( xml_doc.documentElement.getAttribute('okay') == 'yes' ) {
		window.open('reg?p=entry;entry_id=' + xml_doc.documentElement.getAttribute('entry_id'), 'e' );
	}
}
function loadPaymentDetails(pay_id, entry_id) {

	var params = [  'p=payment_block',
					'entry_id=' + entry_id,
					'pay_id=' + pay_id ];
	var formRequest = XHRFactory.getInstance();
	formRequest.open( "POST", 'reg', false);
	formRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	formRequest.setRequestHeader('Content-Encoding','UTF-8');
	formRequest.send( params.join(';') );
	var html_block = formRequest.responseText;
	var xml_doc = formRequest.responseXML;
	var plate = gebi('payment_plate');
	
	var real_wrap = gebi('pay_edit_area');

	var wrap = document.createElement('div');
	wrap.innerHTML = html_block;
	var range = document.createRange();
	range.selectNodeContents( wrap );
	var frag = range.extractContents();
	real_wrap.innerHTML = '';
	real_wrap.appendChild( frag );
}
function resetTotal(f,id) {
	var elems = f.elements;
	var total = Number( 0 );
	for ( var i = 0 ; i < elems.length ; i++ ) {
		if ( elems[i].name == 'amount' )
		total = Number( total ) + Number( elems[i].value );
	}
	gebi(id).value = total;

}

function copyEntryToEvent( t, entry_id ) {
	conslog(t.form.copy_event_id.value);
	conslog(entry_id);
	var backchat = loadXML( 'reg', [ { name: 'p', value: 'copyEntryToEvent' }, { name: 'entry_id', value: entry_id }, { name: 'event_id', value: t.form.copy_event_id.value } ] );
	conslog( backchat );
	window.location = backchat.documentElement.getAttribute('url');
	return false;
}
function loadXML ( url, params ) {
	var formRequest = XHRFactory.getInstance();

	if ( params && params.length ) {
		var boundary = 'xyzXYZ';
		var paramString = createMultipartDataString( params, boundary );
		formRequest.open( "POST", url, false);
		formRequest.setRequestHeader('Content-Type','multipart/form-data;boundary=' + boundary );
		formRequest.send( paramString );
	} else {
		formRequest.open( "GET", url, false);
		formRequest.send(null);
	}

	return formRequest.responseXML;
}
function createMultipartDataString( arr, boundary ) {
	if ( ! arr ) return null;
	var separator = '--' + boundary + '\r\n';
	var params = [];
	for ( var n = 0 ; n < arr.length ; n++ ) {
		switch( arr[n].type ) {
			case 'textarea':
				params.push ( 'Content-Disposition: form-data; name="' + arr[n].name + '"\r\n\r\n' + arr[n].firstChild.nodeValue );
				break;
			case 'checkbox':
				params.push ( 'Content-Disposition: form-data; name="' + arr[n].name + '"\r\n\r\n' + arr[n].checked ? 'yes' : 'no' );
				break;
			default:
				params.push ( 'Content-Disposition: form-data; name="' + arr[n].name + '"\r\n\r\n' + arr[n].value );
				break;
		}
	}
	var param_string = separator + params.join( '\r\n'+separator ) + '\r\n--' + boundary + '--\r\n';
	return param_string;
}
function conslog(m) {
	if ( window.console ) console.log(m);
}

