/*
Generic Form Validation.

To Validate a Form Element Add the Custom Attribute:
validate="VALIDATEHOW" 

Your Current Options Are:
"not_empty"
"integer"
"number" - decimal allowed
"email"
"phone" - includes international phone numbers
Multiple Validation uses the following syntax:
validate="not_empty|integer"
To Add a Message Add the Custom Attribute:
msg="Name is a required field" 

By Default the Messages are shown next to the form element.
To Show Alert Boxes add a Custom Attribute in the form tag (show_alert):
<form action="mypage.aspx" show_alert="1? onSubmit="return Validate(this);"> 
Examples:
<html>
<head>
<script language="JavaScript" src="gfv.js" type="text/javascript"></script>
</head>
<body>
<form action="mypage.php" show_alert="1? onSubmit="return Validate(this);">
First Name <input type="Text" name="FirstName" maxlength="25? validate="not_empty" msg="First Name is Required" /><br/>
Email <input type="text" name="Email" maxlength="25? validate="email" msg="Email is Required" /><br/>
<input type="submit" value="Go">
</form></body></html>

ADVANCED USERS:
Add Your Own Function Calls to the validate attribute.
It Must return true or false
example:
<input type="text" name="Age" validate="ValidateAge" />
*/


function Validate(objForm) 
{	
	var arrValidated=new Array();
	for (var i=0; i<objForm.elements.length; i++) 
	{
		var element=objForm.elements[i];
		var elName=element.name;

		if ((!elName)||(elName.length == 0)||(arrValidated[elName]))
			continue;

		arrValidated[elName] = true;

		var validationType = element.getAttribute("validate");

		if ((!validationType)||(validationType.length == 0))
			continue;

		var strMessages=element.getAttribute("msg");

		if (!strMessages)
			strMessages = "";

		var arrMessages = strMessages.split("|");

		var arrValidationTypes = validationType.split("|");

		for (var j=0; j<arrValidationTypes.length; j++) 
		{
			var curValidationType = arrValidationTypes[j];

			var blnValid=true;

			switch (curValidationType) 
			{
				case "not_empty":
				
				blnValid = ValidateNotEmpty(element);
				
				break;
				
				case "not_zero":
				
				blnValid = ValidateNotZero(element);
				
				break;
				
				case "integer":
				
				blnValid = ValidateInteger(element);
				
				break;
				
				case "number":
				
				blnValid = ValidateNumber(element);
				
				break;
				
				case "email":
				
				blnValid = ValidateEmail(element);
				
				break;
				
				case "phone":
				
				blnValid = ValidatePhone(element);
				
				break;
				case "username":
				
				blnValid = ValidateUsername(element);
				
				break;
				case "validChar":
				blnValid = ValidateChar(element);
				break;
				
				break;
				case "validDate":
				blnValid = ValidateDate(element);
				break;

				case "validTime":
				blnValid = validTime(element);
				break;
				
				case "ValidateLength":
				blnValid = ValidateLength(element);
				break;
				case "validCharString":
				blnValid = ValidateCharString(element);
				break;
				
				
				default:
				
				try 
				{
					blnValid = eval(curValidationType+"(element)");
				}
				catch (ex) 
				{
					blnValid = true;
				}
			
			}

			if (blnValid == false) 
			{
			
				//var message="invalid value for "+element.name;
				//var message="forkert email adresse ";
				
				if (curValidationType != 'validTime')
				{
					var message="Invalid Value";	
							
			
					if ((j < arrMessages.length)&&(arrMessages[j].length > 0))
				
					message = arrMessages[j];
				
					InsertError(element, message);
				}
				
				if ((typeof element.focus == "function")||(element.focus)) 
				{
					element.focus();
				}
			
				return false;
			}
			else
				ClearError(element);

		} 
	}

}


function ValidateLength(objElement)
{
	var strValue = GetElementValue(objElement);
	if(strValue.length > 35)
	{
		return false;
	}
}


 
function ValidateUsername(objElement)
{
	var iChars = "!#$%^&*()+=[]\\\';,/{}|\":<>?";

	var strValue = GetElementValue(objElement);
	
	for (var i = 0; i < strValue.length; i++) 
	{
		if (iChars.indexOf(strValue.charAt(i)) != -1)
		{
			return false;
  		}
  	}	
}

function ValidateChar(objElement)
{
	var iChars =  "^=<>?";
	
	var strValue = GetElementValue(objElement);
	
	for (var i = 0; i < strValue.length; i++) 
	{
		if (iChars.indexOf(strValue.charAt(i)) != -1) 
		{
		return false;
  		}
  	}	
}

// validate date 12/08/2008
function ValidateDate(objElement)
{
	var objRegExp =  "/^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/" ;
	
	var blnResult = true;
	
	var strValue = GetElementValue(objElement);
	
	if (!objRegExp.test(strValue)) 
	{
		blnResult = false;
	}
	
	 return blnResult;
}

//Empty Validation

function ValidateNotEmpty(objElement) {

 var strValue = GetElementValue(objElement);

 var blnResult = true;

 if(allTrim(strValue) == "") //check for nothing

 {

 blnResult = false;

 }

 return blnResult;

}

//Zero Validation

function ValidateNotZero(objElement) {

 var strValue = GetElementValue(objElement);

 var blnResult = true;

 if(allTrim(strValue) == "00") //check for nothing

 {

 blnResult = false;

 }

 return blnResult;

}

//Integer Validation

function ValidateInteger(objElement)

// check for valid numeric strings

{

var strString = GetElementValue(objElement);

var strValidChars = "0123456789";

var strChar;

var blnResult = true;

 

// test strString consists of valid characters listed above

for (i = 0; i < strString.length && blnResult == true; i++)

{

strChar = strString.charAt(i);

if (strValidChars.indexOf(strChar) == -1)

{

blnResult = false;

}

}

return blnResult;

}

 

//Number Validation

function ValidateNumber(objElement)

// check for valid numeric strings

{

var strString = GetElementValue(objElement);

var strValidChars = ".0123456789"; //decimal ok

var strChar;

var blnResult = true;

 

// test strString consists of valid characters listed above

for (i = 0; i < strString.length && blnResult == true; i++)

{

strChar = strString.charAt(i);

if (strValidChars.indexOf(strChar) == -1)

{

blnResult = false;

}

}

return blnResult;

}

//char Validation

function ValidateCharString(objElement)

// check for valid char strings

{

var strString = GetElementValue(objElement);

var strValidChars = ".0123456789"; //decimal ok

var strChar;

var blnResult = true;

 

// test strString consists of valid characters listed above

for (i = 0; i < strString.length && blnResult == true; i++)

{

strChar = strString.charAt(i);

if (strValidChars.indexOf(strChar) != -1)

{

blnResult = false;

}

}

return blnResult;

}


 

//Email Validation

function ValidateEmail(objElement) {

 // Will check for @, period after @ and text in between

 var strValue = GetElementValue(objElement);

 	if (strValue != "")
	{
		 var in_space = strValue.indexOf(" ");
		
		 if (in_space != -1)
		
		 { return false; }
		
		 
		
		 var len = strValue.length;
		
		 var alpha = strValue.indexOf("@");
		
		 var last_alpha = strValue.lastIndexOf("@");
		
		 
		
		 if (alpha != last_alpha)
		
		{ return false; }
		
		 
		
		 // No @, in first position, or name too short
		
		 if (alpha == -1 || alpha == 0 || len<6 )
		
		{ return false; }
		
		 
		
		 var last_p = strValue.lastIndexOf(".");
		
		// Be sure period at least two spaces after @, but not last char.
		
		 
		
		 if (last_p - alpha < 2 || last_p == (len - 1) )
		
		{ return false; }
	}

 }

 

 

 

 //Valid PhoneNumber

 function ValidatePhone(objElement){

 // non-digit characters which are allowed in phone numbers

 var phoneNumberDelimiters = "()- ";

 // characters which are allowed in international phone numbers

 // (a leading + is OK)

 var validWorldPhoneChars = phoneNumberDelimiters + "+";

 // Minimum no of digits in an international phone no.

 var minDigitsInIPhoneNumber = 10;

 

 var strValue = GetElementValue(objElement);

 s=stripCharsInBag(strValue,validWorldPhoneChars);

 return (ValidateInteger(s) && s.length >= minDigitsInIPhoneNumber);

 }

 

 

function GetElementValue(objElement) {

 var result="";

 switch (objElement.type) {

case "text":

case "hidden":

case "textarea":

case "password":

result = objElement.value;

break;

case "select-one":

case "select":

if (objElement.selectedIndex >= 0)

result = objElement.options[objElement.selectedIndex].value;

break;

case "select-multiple":

if (objElement.selectedIndex >= 0)


result = objElement.options[objElement.selectedIndex].value;

break;

case "radio":

case "checkbox":

for (var i=0; i<objElement.form.elements.length; i++) {

if (objElement.form.elements[i].name == objElement.name) {

if (objElement.form.elements[i].checked)

result += objElement.form.elements[i].value+",";

}

}

break;

 }

 return result;

}

 

function InsertError(element, strMessage) {

 if ((element.form.getAttribute("show_alert")) && (element.form.getAttribute("show_alert") != "0")) {

alert(strMessage);

return;

 }

 

 var strSpanID = element.name+"_val_error";

 var objSpan = document.getElementById(strSpanID);

 if (!objSpan) {

if ((element.type == "radio")||(element.type == "checkbox")) {

for (var i=0; i<element.form.elements.length; i++) {

if (element.form.elements[i].name == element.name) {

element = element.form.elements[i];

}

}

}

objSpan = document.createElement("span");

objSpan.id = strSpanID;
objSpan.className = "validation_error";

var nodeAfter=0;

var nodeParent = element.parentNode;

for (var i=0; i<nodeParent.childNodes.length; i++) {

if (nodeParent.childNodes[i] == element) {

if (i < (nodeParent.childNodes.length-1))

nodeAfter = nodeParent.childNodes[i+1];

break;

}

}

if ((!nodeAfter)&&(nodeParent.parentNode)) {

nodeParent = nodeParent.parentNode;

for (var i=0; i<nodeParent.childNodes.length; i++) {

if (nodeParent.childNodes[i] == element.parentNode) {

if (i < (nodeParent.childNodes.length-1))

nodeAfter = nodeParent.childNodes[i+1];

break;

}

}

}

if (nodeAfter)

nodeParent.insertBefore(objSpan, nodeAfter);

else

document.body.appendChild(objSpan);

 }

 objSpan.innerHTML = "<br> <font color='#FF0000'>" +strMessage+"</font>";

}

 
function ClearError(element) {

 var strSpanID = element.name+"_val_error";

 var objSpan = document.getElementById(strSpanID);

 if (objSpan) {

objSpan.innerHTML = "";

 }

}

 

function allTrim(cValue){

 var lDone=false;

 while (lDone==false){


if (cValue.length==0) {return cValue;}

if (cValue.indexOf(' ')==0){cValue=cValue.substring(1);lDone=false; continue;}

else {lDone=true;}

if (cValue.lastIndexOf(' ')==cValue.length-1){cValue=cValue.substring(0, cValue.length-1);lDone=false;continue;}

else {lDone=true;}

 }

 return cValue;

}

 

function stripCharsInBag(s, bag)

{ var i;

var returnString = "";

// Search through string’s characters one by one.

// If character is not in bag, append to returnString.

for (i = 0; i < s.length; i++)

{
// Check that current character isn’t whitespace.
var c = s.charAt(i);
if (bag.indexOf(c) == -1) returnString += c;
}
return returnString;
}


function Confirmalert()
{
	//if(confirm('Er du sikker på at du ønsker at slette optegnelsen ?'))
	if(confirm('Are you sure want to delete this record?'))
	  return true;
	  else
	  return false;
}

<!-- Begin
function validTime(objElement) {
// Checks if time is in HH:MM:SS AM/PM format.
// The seconds and AM/PM are optional.
var timeStr = GetElementValue(objElement);
//var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;
var timePat = /^(\d{1,2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;

var fldName = objElement.id;

if (timeStr != '')
{
	var matchArray = timeStr.match(timePat);
	if (matchArray == null) {
	alert(fldName+" Time is not in a valid format.");
	return false;
	}
	hour = matchArray[1];
	minute = matchArray[2];
	//second = matchArray[4];
	ampm = matchArray[4];
	
	/*if (second=="") { second = null; }*/
	if (ampm=="") { ampm = null }
	
	if (hour < 0  || hour > 23) {
	alert(fldName+"Hour must be between 1 and 12. (or 0 and 23 for military time)");
	return false;
	}
	if (hour <= 12 && ampm == null) {
	if (confirm(fldName+" Please indicate which time format you are using.  OK = Standard Time, CANCEL = Military Time")) {
	alert("You must specify AM or PM.");
	return false;
	   }
	}
	if  (hour > 12 && ampm != null) {
	alert(fldName+" You can't specify AM or PM for military time.");
	return false;
	}
	if (minute<0 || minute > 59) {
	alert (fldName+" Minute must be between 0 and 59.");
	return false;
	}
	/*if (second != null && (second < 0 || second > 59)) {
	alert (fldName+" Second must be between 0 and 59.");
	return false;
	}*/
}
//return false;
}
//  End -->


