var ajax;
var updMsg;
var eMsgs;
var gradExp;
var mydays = new Array(12);
var dbpath;
var keepAddrVisi=false;	//indicate that address fields show be visible hence
var postCodeChecked="";

var isNew = false;
//-------------- prepare for Ajax calls -----------------------
	
function subFormInit() {
	updMsg = document.getElementById("updMsg");
	dbpath = document.getElementById("dbpath").innerHTML;
	eMsgs = document.getElementById("errDiv");
	
	ajax = new Ajax();
	isNew = (document.getElementById("isNewDiv").innerHTML == "Yes");
	var frm = window.document.forms[0];
}

function rowShow( rowName, setOn ) {
	try {
		document.getElementById( rowName ).style.display = (setOn) ? "" : "none";
	}
	catch (e){
		window.status = e + ":" + rowName;
	}
}

function addOption( selectbox, text, value )
{
	var optn = document.createElement("OPTION");
	optn.text = text;
	optn.value = value;
	selectbox.options.add(optn);
}

function isSelected( obj, exName ) {
	if (exName=="") return false;
	var i;
	for(i = 0; i < obj.options.length;i++) {
		if (obj.options[i].text == exName) {
			return (obj.options[i].selected);
		}
	}
	return false;
}

function validusername( uname ) {
	return (uname.search(/^[0-9a-zA-Z]*$/) != -1);
}

function getCheckedValue(radioObj) {
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}

function turnErrOff( e ) {
	try {
		var str = e.className;	
		if (str.indexOf( "Err" ) > -1) e.className = str.replace("Err",""); 
	}
	catch(x) {
	}
}

function turnErrOn( e ) {
	try {
		var str= e.className;
		if (str.indexOf( "Err" ) == -1) e.className = e.className +'Err';
	}
	catch(x) {
	}
}


//-------------------- AJAX section ---------------------

var nameHand = function(str) {
	hasNameAlready = (str.indexOf( "result>ERR") > -1);
}

function userCheck( uName ) {
	if (trim(uName) == "") return true;
	hasNameAlready = false;
	ajax.async = false;
	var rand = "&randkey=" + Math.random();
	var url = "/" + dbpath + "/$usercheck.xml?openagent&user=" + uName + rand;	
	ajax.setMimeType('text/xml');
	ajax.doGet( url, nameHand, "text");
	var obj	= document.getElementById("userNameNote");
	if (hasNameAlready){
		turnErrOn( frm.UserName );
		obj.innerHTML = frm.UserName.value + " is already in use.";
	} else {
		obj.innerHTML = "";
		turnErrOff( frm.UserName );
	}	
}

//-------------------- Email Check ---------------------
var emailHand = function(str) {
	hasEmailAlready = (str.indexOf( "result>ERR") > -1);
}

function emailCheckDB( email ) {
	if (trim(email) == "") return true;
	email = escape(email);
	hasEmailAlready = false;
	ajax.async = false;
	var rand = "&randkey=" + Math.random();
	var url = "/" + dbpath + "/$emailcheck.xml?openagent&emailaddr=" + email + rand;	
	ajax.setMimeType('text/xml');
	ajax.doGet( url, emailHand, "text");
	var obj	= document.getElementById("emailNote");
	if (hasEmailAlready){
		turnErrOn( frm.Email );
		obj.innerHTML = "Email is already in use.";
	} else {
		obj.innerHTML = "";
		turnErrOff( frm.Email );
	}
}

function docUpdate() {
	//now uses Ajax
	var formData = '';
	formData = formData2QueryString(frm);
	ajax.async = true;
	ajax.setMimeType('text/xml');
	ajax.doPost(frm.action, formData, handleSubFunc,'xml');
}

var handleSubFunc = function( xml) {
	var res = XMLParse.xml2ObjArray(xml, 'xml');
	if (res[0].status.code == "OK") {
		eMsgs.innerHTML = "";
		hideShowDiv( "errDiv",false);
		fadeIn("updMsg", "Record updated")
	} else {
	
		eMsgs.innerHTML = "";
		eMsgs.innerHTML= "<b>Errors:</b><ol><li>" + res[0].status.msg  + "</li></ol>";
		hideShowDiv( "errDiv",true);
	}
}

function addNoneNullVal( inVal ) {
	return ( inVal == null)? "": inVal;
}

// ==================================== soSubmit where all validations go ========================//
function doSubmit(f){
 	hideShowDiv( "errDiv",false);
	var preMsg = "";
	var a = new Array();
	//Lines below not used in new records - these are check by basic chcks
	a[a.length] = [f.Title, 'Title'];
	a[a.length] = [f.FirstName, 'First Name'];
	a[a.length] = [f.LastName, 'Last Name'];
	a[a.length] = [f.Customer, 'School'];
	a[a.length] = [f.Addr, 'Address'];
	a[a.length] = [f.City, 'City'];
	a[a.length] = [f.postcode, 'Post Code'];
	a[a.length] = [f.OfficePhoneNumber, 'Telephone'];
	a[a.length] = [f.Email, 'email',['email']];
	if (isNew) a[a.length] = [f.NewPassword, 'Password'];
	validateRequiredFields( f, a );
	if (isNew) {
		turnErrOff( f.UserName );
		turnErrOff( f.Email1 );
		//alert("testing un1")
		f.UserName.value = trim(f.UserName.value);
		
		if (f.UserName.value.length >= 0 && f.UserName.value.length < 6) {
			//alert(">" + f.UserName.value + "<")
			errArr[errArr.length] = "User name is too short - must be 6 chars at least";
			turnErrOn( f.UserName );
		}
	
		if (!validusername(f.UserName.value)) {
			turnErrOn( f.UserName );
			errArr[errArr.length] = "User name must be alpha numeric and start with a character";
		}	
			
		if (f.Email.value.toLowerCase() != f.Email1.value.toLowerCase()) {
			turnErrOn( f.Email1 );
			errArr[errArr.length] = "The two email addresses you provided do not match.";	
		}
		
		if (document.getElementById("userNameNote").innerHTML != "") {
			turnErrOn( f.UserName );
			errArr[errArr.length] = "User name is already in use";
		}
	}
	
	eMsgs.innerHTML = "";
	if ( errArr.length > 0 ) {  //display the error here
		var errMsg="";
		for (e=0; e<errArr.length;e++) errMsg = errMsg + "<li>" + errArr[e] + "</li>";
		eMsgs.innerHTML= "<b>Errors found:</b><ol>" + errMsg + "</ol>" + CLOSE_DIV;
		hideShowDiv( "errDiv",true);
		scroll(0,0);
		return false;
	} else { 
		return true;
	}
}
function validateTeam(f){
	if (checkTeam(f)) alert( "Your Team was validated and all the data is OK" )
}

function checkTeam(f){
 	hideShowDiv( "errDiv",false);
	var preMsg = "";
	var ysYear = document.getElementById("ysYear").innerHTML;
	var lev = getCheckedValue( f.Level); 
	var lowVal = "";
	var topVal = "";
	
	var a = new Array();
	//Lines below not used in new records - these are check by basic chcks
	a[a.length] = [f.Topic, 'Topic'];
	a[a.length] = [f.name1, 'Chairperson'];
	a[a.length] = [f.name2, 'Main Speaker'];
	a[a.length] = [f.name3, 'Vote of Thanks'];
	
	if (lev == "Seniors") {
		lowVal = "1/9/" + (parseInt(ysYear)- 19)
		topVal = "31/8/" + (parseInt(ysYear)- 15)
	} else {
		lowVal = "1/9/" + (parseInt(ysYear)- 15)
		topVal = "31/8/" + (parseInt(ysYear)- 12)
	}
	
	a[a.length] = [f.Dob1, 'Chairperson DOB',['date',lowVal,topVal,"dd/mm/yyyy"]];
	a[a.length] = [f.Dob2, 'Main Speaker DOB',['date',lowVal,topVal,"dd/mm/yyyy"]];
	a[a.length] = [f.Dob3, 'Vote of Thanks DOB',['date',lowVal,topVal,"dd/mm/yyyy"]];
	
	validateRequiredFields( f, a );
		
	eMsgs.innerHTML = "";
	if ( errArr.length > 0 ) {  //display the error here
		var errMsg="";
		for (e=0; e<errArr.length;e++) errMsg = errMsg + "<li>" + errArr[e] + "</li>";
		eMsgs.innerHTML= "<b>Errors found:</b><ol>" + errMsg + "</ol>" + CLOSE_DIV;
		hideShowDiv( "errDiv",true);
		scroll(0,0);
		return false;
	} else { 
		return true;
	}
}
