// JavaScript Document
function getElementsByTagNames(list,obj)
	{
		if (!obj) var obj = document;
		var tagNames = list.split(',');
		var resultArray = new Array();
		for (var i=0;i<tagNames.length;i++)
		{
			var tags = obj.getElementsByTagName(tagNames[i]);
			for (var j=0;j<tags.length;j++)
			{
				resultArray.push(tags[j]);
			}
		}
		var testNode = resultArray[0];
		if (testNode.sourceIndex)
		{
			resultArray.sort(function (a,b) {
					return a.sourceIndex - b.sourceIndex;
			});
		}
		else if (testNode.compareDocumentPosition)
		{
			resultArray.sort(function (a,b) {
					return 3 - (a.compareDocumentPosition(b) & 6);
			});
		}
		
		return resultArray;
	}

	function getElementsByClass(searchClass,node,tag) {
		var classElements = new Array();
		if ( node == null )
			node = document;
		if ( tag == null )
			tag = '*';
		var els = node.getElementsByTagName(tag);
		var elsLen = els.length;
		var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)');
		for (i = 0, j = 0; i < elsLen; i++) {
			if ( pattern.test(els[i].className) ) {
				classElements[j] = els[i];
				j++;
			}
		}
		return classElements;
	}	
	
	


function resetform(){
		var controls = getElementsByClass("ftext-error");
		for (var i = 0; i < controls.length; i++){
			controls[i].className = "ftext";
		if(controls[i].value == "Information Required" || controls[i].value == "Valid Email Required") controls[i].value = "";
		}
			var controls = getElementsByClass("ftext");
		for (var i = 0; i < controls.length; i++){
		if(controls[i].value == "Information Required" || controls[i].value == "Valid Email Required") controls[i].value = "";
		}
		var controls = getElementsByClass("ftext-area");
		for (var i = 0; i < controls.length; i++){
			
		if(controls[i].value == "Information Required") controls[i].value = "";
		}
		var controls = getElementsByClass("ftext-area-error");
		for (var i = 0; i < controls.length; i++){
			controls[i].className = "ftext-area";
		if(controls[i].value == "Information Required") controls[i].value = "";
		}
		

		var controls = getElementsByClass("error-message");
		for (var i = 0; i < controls.length; i++){
			controls[i].style.display = 'none';
		}	
	
	
	}
	

	function validate(formName){
	
		//to clear the form for new validation check
		resetform();

		var isValid = true;

		// get all the textboxes, and dropdown boxes
		var objForm = document.getElementById(formName);
		var controls = getElementsByTagNames('input,select,textarea', objForm);
		

		for (var i = 0; i < controls.length; i++){
			// set required on form eg. <textarea required="true"
			
			if (controls[i].id != "" && controls[i].getAttribute('required')){
				
					
					var rule = controls[i].getAttribute('rule');				
					var value = controls[i].value;
					var id = controls[i].id;
					
					var valid = false;
					var re = null;
					var re2= null;
					var errormessage = null;
					var confirmValid = true;
			
					
					if (controls[i].type == "radio"){

						var radiobuttonarray = document.getElementsByName(controls[i].name);

						var checkselected = false;
						if (radiobuttonarray){
							for (var n = 0; n <  radiobuttonarray.length; n++){
								if (radiobuttonarray[n].checked){
									checkselected = true;
								}
							}
						}

						if (checkselected){
							valid = true;
						}						
					
					}	
					
					if (controls[i].type == "checkbox"){
						// <input type="checkbox" name="choice"   choice required
						//one checkbox required to validate
						
						var checkboxarray = document.getElementsByName(controls[i].name);
						
						var checkboxselected = false;
						
						var j = 0;
						if (checkboxarray){
							for (j = 0; j < checkboxarray.length; j++){
								
								if (checkboxarray[j].checked){
									checkboxselected = true;

								}
							}
						}
						
						
						if (checkboxselected){

							valid = true;
						}						
					
					}
					
			
					
											
										
					// want to trim spaces for textbox and textarea entry
					if (controls[i].type == "text" || controls[i].type == "textarea"){
			           	value = value.replace( /^\s+/g, "" );// strip leading
           				value = value.replace( /\s+$/g, "" );// strip trailing
					}

									
					// figure which regular expression to use
					// set rule on form eg. <textarea rule="notempty"
					if (rule){
						switch(rule){
							case "notempty": 		// Something must be entered
								re = new RegExp(/.+/);
								valid = re.test(value);
								if(!valid) errormessage = "Information Required"
								break;
							case "notemptytxt": 		// Something must be entered can not be empty
								re = new RegExp(/.+/);
								re2 = new RegExp(/^[a-z ]*$/i);
								valid = ( re.test(value) && re2.test(value) );
								break;
							case "notemptynum" :			// Only numbers (allow decimal) can not be empty
								re = new RegExp(/^[\d\.]*$/);
								re2 = new RegExp(/^[\d\.]*$/);
								valid = ( re.test(value) && re2.test(value) );
								break;
							case "txt" : 			// Text only allowed and can be empty
								re = new RegExp(/^[a-z ]*$/i);
								valid = re.test(value);
								break;
							case "num" :			// Only numbers (allow decimal) and can be empty
								re = new RegExp(/^[\d\.]*$/);
								valid = re.test(value);
								break;
							case "int" :			// Integers only
								re = new RegExp(/^\d*$/);
								valid = re.test(value);
								break;		
							case "email" :			// Something valid-ish for an email
								re = new RegExp(/^[a-z\d\.\-_]+@[a-z\d\.\-_]{2,}\.[a-z]{2,10}$/i);
								valid = re.test(value);
								if(!valid) errormessage = "Valid Email Required"
								break;
							case "alphanum" :		// Alpha-numeric characters
								re = new RegExp(/^[\w ]*$/i);
								valid = re.test(value);
								break;
							case "curr" :			// Allows currency values eg. 202.23
								re = new RegExp(/^\d*,?\.?\d{0,2}$/i);
								valid = re.test(value);
								break;
							case "greaterthan" :
								re = new RegExp(/.+/);
								if(re.test(value) && re.test(compare)){
									valid = (value-0) > (compare-0);
								}
								break;
							case "lessthan" :
								re = new RegExp(/.+/);
								if(re.test(value) && re.test(compare)){
									valid = (value-0) < (compare-0);
								}				
								break;
							case "greaterequalthan" :
								re = new RegExp(/.+/);								
								valid = false;
								if(re.test(value) && re.test(compare)){
									valid = ((value-0) >= (compare-0));
								}					
								break;
							case "lessequalthan" :
								re = new RegExp(/.+/);
								if(re.test(value) && re.test(compare)){
									valid = ((value-0) <= (compare-0));
								}							
								break;
							case "zero" :
								re = new RegExp(/.+/);
								if(re.test(value)){
									valid = ((value-0) == 0);
								}							
								break;
							case "notnegative" :
								re = new RegExp(/.+/);
								if(re.test(value)){
									valid = ((value-0) >= 0);
								}							
								break;
							case "notnegativenotzero" :
								re = new RegExp(/.+/);
								if(re.test(value)){
									valid = ((value-0) > 0);
								}								
								break;
								
							
							default :
								
								// nothing here yet
						
						}											
					}
					



					
					if (!valid){

					

							// if it's not part of a group just activate the group and the associated errors
							isValid = false;
							if(controls[i].type == "textarea"){
								controls[i].className = "ftext-area-error";
							controls[i].value = errormessage;
							}
							else if (controls[i].type == "text"){
							controls[i].className = "ftext-error";
							controls[i].value = errormessage;
							}
							
							showErrorSet(controls[i].name);																	
						
						
												
					}
					
									
			}
		}

		if (isValid){

			return true;
			
		} else {			

			return false;
			
		}
		
	}
	
	
	function showErrorSet(id){
		var errorMessage = document.getElementById( 'error-message-' + id);
		if (errorMessage) errorMessage.style.display = 'block';
		
	}
	
