// JavaScript Document


/********************************************
 * This function will validate a standard form. It will
 * look for form names that start with r_ and validate that they
 * have a value and are not blank ('')
 ********************************************/
function validateForm() {
	var errorMsg = "";
	var elements;
	var elementCount = 0;
	
	/*********************
	 * Check if the field is Required
	 ********************/
	elements = getElementsByClass("formRequired");
	elementCount = elements.length;

	for (i = 0; i < elementCount; i++) {
		if (elements[i].value == "") {
			errorMsg += elements[i].title + " is empty. \n";
		}	// end of if (elements[i].value == "") 
	}	// end of for (i = 0; i < elementCount; i++) [REQUIRED Check]
	
	/*********************
	 * Check if the field contains only Alpha characters
	 ********************/
	elements = getElementsByClass("formAlpha");
	elementCount = elements.length;

	for (i = 0; i < elementCount; i++) {
	    if (( /[^a-zA-Z\.\, ]/.test(elements[i].value)) && (elements[i].value != ""))  {
            errorMsg +=  elements[i].title + " contains non-alphabetic characters. \n";
		}	// end of if (( /[^a-zA-Z\.\,]/.test(elements[i].value)) && (elements[i].value != ""))
	}		// end of for (i = 0; i < elementCount; i++) [ALPHA Check]
	
	/*********************
	 * Check if the field contains only Alpha characters
	 ********************/
	elements = getElementsByClass("formNumeric");
	elementCount = elements.length;

	for (i = 0; i < elementCount; i++) {
		elements[i].value = elements[i].value.replace(/,/, "");	// remove commas from this element
	    if (/[^0-9\.]/.test(elements[i].value)) {
            errorMsg +=  elements[i].title + " contains non-numeric characters. \n";
		}	// end of if (/[^0-9\.]/.test(elements[i].value))
	}		// end of for (i = 0; i < elementCount; i++) [Numeric Check]

	
	/*********************
	 * Check if the field is valid Email
	 ********************/
	elements = getElementsByClass("formEmail");
	elementCount = elements.length;

	for (i = 0; i < elementCount; i++) {
		errorMsg += emailCheck(elements[i].value);
	}		// end of for (i = 0; i < elementCount; i++) [Numeric Check]

	
	/*********************
	 * Check if the field is checked
	 ********************/
	elements = getElementsByClass("formChecked");
	elementCount = elements.length;

	for (i = 0; i < elementCount; i++) {
		if (elements[i].checked == false) {
            errorMsg +=  elements[i].title + " has not been checked yet. \n";
		}	// end of if (elements[i].checked == false) {
	}		// end of for (i = 0; i < elementCount; i++) [Numeric Check]
	
	/*********************
	 * Check if the radio field is checked
	 ********************/
	elements = getElementsByClass("formRadioChecked");
	elementCount = elements.length;

	var radioArray = new Array(elementCount);
	var radioTitle = new Array(elementCount);

	for (i = 0; i < elementCount; i++) {
		if (radioArray[elements[i].name] == "") {
			radioArray[elements[i].name] = elements[i].checked;
			radioTitle[elements[i].name] = elements[i].title;
		}	// end of if (radioArray[elements[i].name] != "")
		else if (! radioArray[elements[i].name]) {
			radioArray[elements[i].name] = elements[i].checked;
			radioTitle[elements[i].name] = elements[i].title;
		}	// end of else if (! radioArray[elements[i].name]) {	
	}		// end of for (i = 0; i < elementCount; i++) [Numeric Check]

	for (i in radioArray) {
		
		if (! radioArray[i]) {
            errorMsg +=  radioTitle[i] + " has not been selected yet. \n";
		}		// end of if (! radioArray[i]) {
	}			// end of for (i in radioArray) {

	if (errorMsg == "") {
		return true;
	}
	else {
		alert(errorMsg);
		return false;
	}
	
}		// end of function validateForm() 


/*********************
 * Check if the field contains only Alpha characters
 ********************/
function cleanNumeric() {
	var errorMsg = "";
	var elements;
	var elementCount = 0;
	elements = getElementsByClass("formNumeric");
	elementCount = elements.length;

	for (i = 0; i < elementCount; i++) {
		elements[i].value = elements[i].value.replace(/,/, "");	// remove commas from this element
	    if (/[^0-9\.]/.test(elements[i].value)) {
            errorMsg +=  elements[i].title + " contains non-numeric characters. \n";
		}	// end of if (/[^0-9\.]/.test(elements[i].value))
	}		// end of for (i = 0; i < elementCount; i++) [Numeric Check]
	
	return errorMsg;

}

/*******************************************
 * Get all of the elements with a particular class name
 * 
 ******************************************/
function getElementsByClass(searchClass) {
	var classElements = new Array();
	var els = document.getElementsByTagName('*'); // use "*" for all elements
	var elsLen = els.length;
	var pattern = new RegExp("\\b"+searchClass+"\\b");
	for (i = 0, j = 0; i < elsLen; i++) {
 		if ( pattern.test(els[i].className) ) {
 			classElements[j] = els[i];
 			j++;
	 	}
	}
	return classElements;
}

// email checker
function emailCheck(str) {

		var at="@";
		var dot=".";
		var lat=str.indexOf(at);
		var lstr=str.length;
		var ldot=str.indexOf(dot);
		
		if (str.indexOf(at)==-1){
		   return "Invalid E-mail Address\n";
		}

		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
		   return "Invalid E-mail Address\n";
		}

		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		    return "Invalid E-mail Address\n";
		}

		 if (str.indexOf(at,(lat+1))!=-1){
		    return "Invalid E-mail Address\n";
		 }

		 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		    return "Invalid E-mail Address\n";
		 }

		 if (str.indexOf(dot,(lat+2))==-1){
		    return "Invalid E-mail Address\n";
		 }
		
		 if (str.indexOf(" ")!=-1){
		    return "Invalid E-mail Address\n";
		 }

 		 return "";					
}		// end of function emailCheck(str)
