/* FORM VALIDATOR FOR ONLINE ENROLMENT */
/* THIS WILL ALSO BE RECHECKED ON THE ONLINE PAGE */

var validator = new Validator("validator");

// CUSTOM ERROR MESSAGE
var o = validator;
// VALUE REQUIRED
o.c_msgList.onEmpty["LastName"] 	= "Please enter your last name.";
o.c_msgList.onEmpty["FirstName"] 	= "Please enter your first name.";
o.c_msgList.onEmpty["MiddleName"] 	= "Please enter your middle name.";
o.c_msgList.onEmpty["Gender"]	 	= "Please specify your gender";


// INVALID E-MAIL ADDRESS
o.c_msgList.onInvalid["Email"] 	= "Please enter a valid email address.<BR>e.g. name@mail.com";


// ADDITIONAL REQUIRED FIELDS 
o.addRequiredFields("Password");
o.addRequiredFields("Password2");

// FUNCHOLDER
if(!this.FUNCHLD) this.FUNCHLD = new Array();

// CUSTOM CHECKING OF FORMS
o.checkMore = function(pObj) {
	var thisObj = this;
	
	// CHECK WHAT TYPE IS pObj: OBJ OR STR?
	if(pObj.charCodeAt) {
		var objFrm = document.getElementById("f_" + pObj);
		var objName = pObj;
	}
	else{
		var objFrm = pObj;
		var objName = thisObj.returnObjName(pObj);
	}
	
	// START THE PROCESS
	var t_errmsg = "";
	var objValue = objFrm.value;
	
	// CUSTOM VALIDATION FOR EACH OBJECT
	switch(objName) {
		// EMAIL ADDRESS
		case "Email":
			// REGEX:    \b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b
			if(objValue.search(/([A-Za-z0-9._%+-]+@[A-Za-z0-9_-]+\.[A-Za-z0-9]{2,4})/) < 0) {
				t_errmsg = "<!e:Invalid>Please enter a valid e-mail address.";
			}
			break;
			
		// THE TWO PASSWORDS MUST BE THE SAME
		case "Password2":
			var objPW1 = document.getElementById("f_Password"),
			    objPW2 = document.getElementById("f_Password2");
			if(objPW1.value != objPW2.value) {
				t_errmsg = "Please revalidate your password.";
			}
			else {
				t_errmsg = "";
				// POST MESSAGE: CUSTOM
				this.postMsg(objW1, "");
				this.postMsg(objPW2, "");
			}
			break;
		case "Username":
			this.UserAvail.addOptions();
	}  //*/
	
	return t_errmsg;	
}



// ---------.---------.---------.---------.---------.---------.---------.---------.
// ADD USER OPTIONS
o.UserAvail = new Object();
FUNCHLD[o.UserAvail.thisInd = FUNCHLD.length] = o.UserAvail;

o.UserAvail.parent	= o;
o.UserAvail.hasLoader 	= false;

// THIS WILL ADD OPTIONS ON USER AVAILABILITY: AFTER THE USERNAME FIELD
o.UserAvail.addOptions = function() {
	this.formObj 	= document.getElementById("f_Username");

	// DETECT PARENT ELEMENT WHOSE CLASS IS "frm"
	var parObj = this.formObj;
	do {
		if(
			((" "+parObj.className+" ").indexOf(" frm ") >= 0) ||
			(parObj.tagName.toUpperCase() == "BODY")
		) break;
		parObj = parObj.parentNode;
	} while (true);

	// CREATE LOADER
	if(!this.hasLoader) {
		this.hasLoader = true;
		var node = document.createElement("DIV");
		node.innerHTML = 
			"<DIV STYLE='display:none;'>"+
			"<IFRAME SRC='#' NAME='f_Username__loader' HEIGHT=1 WIDTH=1></IFRAME>"+
			"</DIV>"+
			"<DIV ID='f_Username__opt' CLASS='frm_msg2'></DIV>";
		parObj.appendChild(node);
		this.loader 	= f_Username__loader;
		this.userOpt 	= document.getElementById("f_Username__opt");
	}
	
	// ADD THE OPTIONS
	this.userOpt.style.display = "";
	this.userOpt.className = (" "+this.userOpt.className+" ").split(" goodMsg ").join(" ").split("  ").join(" ");
	this.userOpt.innerHTML = "<A HREF='javascript:' ONCLICK='validator.UserAvail.scanUser();'>Check availability</A>";
}

// THIS WILL SCAN THE USER AVAILABILITY
o.UserAvail.checkInt 		= 0;
o.UserAvail.checkInt_sec 	= 0;
o.UserAvail.scanUser = function () {
	
	this.loader.isLoaded = false;
	this.loader.document.location.href = par + "/assets/_aloader/register_checkUser.php?uname=" + escape(this.formObj.value);
	clearInterval(this.checkInt);
	this.checkInt = setInterval("FUNCHLD["+this.thisInd+"].checkLoad();", 1000);
}

// CHECK THE LOADING OF THE USER AVAILABILITY PAGE.
o.UserAvail.checkLoad = function() {
	if(this.loader.isLoaded) {
		// CHECK THE AVAILABILITY OF USER
		if(this.loader.isAvailable) {
			this.userOpt.innerHTML = "This username is available.";
			this.userOpt.className = (" "+this.userOpt.className+" ").split(" goodMsg ").join(" ").split("  ").join(" ");
			this.userOpt.className += " goodMsg"
		}
		else {
			this.parent.postMsg(this.formObj, "This username is unavailable.");
			this.userOpt.style.display = "none";
		}
		
		// STOP CHECKING
		clearInterval(this.checkInt);
	}
}
