// --------------------------------------------
//  Generic form validation v1.5
//	Copyright 2007 by Prospatek Ltd
//	All rights reserved.
//	A licence fee is reqired to install this software
//	onto a website.
// --------------------------------------------
//
// Field Valid is called from the function specific to a form. It checks text, textarea, select options and checkboxes;
// check is either: num, dec, lower, upper, alpha, alphanum, alphanumext,
//        text, phone, price, decprice, em (this is an e-mail address check);
// for a checkbox: mand=number of checkboxes to be checked, and check=the field name;


function getradiovalue(radiobuttons){
//alert(radiobuttons.length);
    for (var i=0; i < radiobuttons.length; i++) {
    if (radiobuttons[i].checked){
    var rad_val = radiobuttons[i].value;
    return rad_val;
    }
  }
}

function setradiovalue(radiobuttons, buttonvalue){
//alert(radiobuttons.length+" "+buttonvalue);
  for (var i=0; i < radiobuttons.length; i++) {
    if (radiobuttons[i].value == buttonvalue){
    radiobuttons[i].checked = true;
    }
  }
}


// ----------------
// Field Validation
// ----------------
function FieldValid(fld, mand, check){
//alert("in field validation - start ---    "+fld.name+" "+fld.value+" "+mand+" "+check);
// select option check;

if(fld.type=="select-one"){
	if ((mand=="y") &&  (fld.value=='')) {
		alert("Field "+fld.name+" : you must be SELECT A VALUE from the list");
		return false;
		} else {
		return true;
		}
}

//checkbox check - ensures at least one box is checked;
if(isNum(mand)){

	var box=0;
	var cblength=fld.length;
	var msg="checkbox";
	if(mand>1) msg="checkboxes";
	if (cblength == "undefined"){
		//only one check box not an array
			if (fld.check==true) box++;
	} else {
	//check box array more than one box
		for(i=0;i<cblength;i++){
			if(fld[i].checked)  box++;
		}
	}

	if(box<mand){
	alert("Please select at least " +mand+ " "+msg+" in the "+check+" field." );
	return false;
	} else {
	return true;
	}
}


// text and textarea check;
if(fld.type=="text" || fld.type=="textarea"){
	if (((mand=="y") &&  notEmpty(fld)) || mand=="n"){

	switch(check) {
	case 'num':
		if (!isNum(fld.value)) {
		alert("Field "+fld.name+" : must be NUMERIC");
		return false;
		} else {
		return true;
		}
		break;
	case 'dec':
		if (!isDec(fld.value)) {
		alert("Field "+fld.name+" : must be NUMERIC or DECIMAL");
		return false;
		} else {
		return true;
		}
		break;
	case 'lower':
		if (!isLower(fld.value)) {
		alert("Field "+fld.name+" : must be LOWER case only");
		return false;
		} else {
		return true;
		}
		break;
	case 'upper':
		if (!isUpper(fld.value)) {
		alert("Field "+fld.name+" : must be UPPER case only");
		return false;
		} else {
		return true;
		}
		break;
	case 'alpha':
		if (!isAlpha(fld.value)) {
		alert("Field "+fld.name+" : must be ALPHA characters only");
		return false;
		} else {
		return true;
		}
		break;
	case 'alphanum':
		if (!isAlphanum(fld.value)) {
		alert("Field "+fld.name+" : must be ALPHA NUMERIC only");
		return false;
		} else {
		return true;
		}
		break;
	case 'alphanumext':
		if (!isAlphanumext(fld.value)) {
		alert("Field "+fld.name+" : must be ALPHA NUMERIC and /,.;: only");
		return false;
		} else {
		return true;
		}
		break;
	case 'text':
		if (!isText(fld.value)) {
		alert("Field "+fld.name+" : must be ALPHA, NUMERIC, newlines, and /,.;:'?-*&#% only");
		return false;
		} else {
		return true;
		}
		break;
	case 'phone':
		if (!isPhone(fld.value)) {
		alert("Field "+fld.name+" : must be NUMERIC,spaces, +, () only");
		return false;
		} else {
		return true;
		}
		break;
	case 'price':
		if (!isPrice(fld.value)) {
		alert("Field "+fld.name+" : must be NUMERIC, and commas only");
		return false;
		} else {
		return true;
		}
		break;
	case 'decprice':
		if (!isDecPrice(fld.value)) {
		alert("Field "+fld.name+" : must be NUMERIC or DECIMAL and commas only");
		return false;
		} else {
		return true;
		}
		break;
	case 'em':
		if (!validateEmail(fld,fld.value,'y','y')){
		//alert("Field "+fld.name+" : must be a VAILD e-MAIL ADDRESS only");
		return false;
		} else {
		return true;
		}
		break;

	default:
		return true;
	}

}}}

// --------------------
// Character validation
// This section checks for valid characters;
// --------------------
var numb = '0123456789';
var numbdec = '0123456789.';
var price = '0123456789,';
var decprice = '0123456789,.';
var lwr = 'abcdefghijklmnopqrstuvwxyz';
var upr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var space  = ' ';
var phon = '+()';
var crlf = '\r\n';
var ext = '/,.;:';
var punct = "/,.;:'?-*&#%";

function isValid(parm,val) {
if (parm == "") return true;
for (i=0; i<parm.length; i++) {
if (val.indexOf(parm.charAt(i),0) == -1) return false;
}
return true;
}

function isNum(parm) {return isValid(parm,numb);}
function isDec(parm) {return isValid(parm,numbdec);}
function isPrice(parm) {return isValid(parm,price);}
function isDecPrice(parm) {return isValid(parm,decprice);}
function isLower(parm) {return isValid(parm,lwr+space);}
function isUpper(parm) {return isValid(parm,upr+space);}
function isAlpha(parm) {return isValid(parm,lwr+upr+space);}
function isAlphanum(parm) {return isValid(parm,lwr+upr+numb+space);}
function isAlphanumext(parm) {return isValid(parm,lwr+upr+numb+space+ext);}
function isPhone(parm) {return isValid(parm,numb+space+phon);}
function isText(parm) {return isValid(parm,lwr+upr+numb+space+crlf+punct);}


// --------------------
// Not empty check for text and textarea
// --------------------
function notEmpty(elem){
var str = elem.value;
if(str.length == 0){
alert("Please fill in ALL required fields marked with (*)");
return false;
} else {
return true;
}}


// --------------------
// Validates the textarea number of characters when textarea loses focus
// --------------------
function fValTAmaxlength(formname, formelement, maxvalue)
     {
    var q = eval("document."+formname+"."+formelement+".value.length");
     var r = q - maxvalue;
     var msg = "Sorry, you have input "+q+" characters into the "+
       "text area box you just completed. It can return no more than "+
       maxvalue+" characters to be processed. Please abbreviate "+
       "your text by at least "+r+" characters";
     if (q > maxvalue) alert(msg);
     }

// --------------------
// validates the textarea field at each keypress;
// --------------------
function fValTAupdate(formname, formelement, maxval)
{
    var counterval = eval("document."+formname+"."+formelement+".value.length");
     if(counterval > maxval) {
        var msg = "Too much data in the text box! Maximum "+maxval+" characters. Please delete your last character.";
        alert(msg);
}}


// --------------------
//Validates e-mail addresses - used by ;
// --------------------
function validateEmail(fld,addr,man,db) {
// this first section will always return true, as we check for mandatory before this
if (addr == '' && man) {
   if (db) alert('email address is mandatory');
alert('email address is mandatory');
   return false;
}
var invalidChars = '\/\'\\ ";:?!()[]\{\}^|';
for (i=0; i<invalidChars.length; i++) {
   if (addr.indexOf(invalidChars.charAt(i),0) > -1) {
      if (db) alert('email address contains invalid characters');
      return false;
   }
}
for (i=0; i<addr.length; i++) {
   if (addr.charCodeAt(i)>127) {
      if (db) alert("email address contains non ascii characters.");
      return false;
   }
}

var atPos = addr.indexOf('@',0);
if (atPos == -1) {
   if (db) alert('Field '+fld.name+' : email address must contain an @');
   return false;
}
if (atPos == 0) {
   if (db) alert('Field '+fld.name+' : email address must not start with @');
   return false;
}
if (addr.indexOf('@', atPos + 1) > - 1) {
   if (db) alert('Field '+fld.name+' : email address must contain only one @');
   return false;
}
if (addr.indexOf('.', atPos) == -1) {
   if (db) alert('Field '+fld.name+' : email address must contain a period in the domain name');
   return false;
}
if (addr.indexOf('@.',0) != -1) {
   if (db) alert('Field '+fld.name+' : period must not immediately follow @ in email address');
   return false;
}
if (addr.indexOf('.@',0) != -1){
   if (db) alert('Field '+fld.name+' : period must not immediately precede @ in email address');
   return false;
}
if (addr.indexOf('..',0) != -1) {
   if (db) alert('Field '+fld.name+' : two periods must not be adjacent in email address');
   return false;
}
//var suffix = addr.substring(addr.lastIndexOf('.')+1);
//if (suffix.length != 2 && suffix != 'com' && suffix != 'net' && suffix != 'org' && suffix != 'edu' && suffix != 'int' && suffix != 'mil' && suffix != 'gov' & suffix != 'arpa' && suffix != 'biz' && suffix //!= //'aero' && suffix != 'name' && suffix != 'coop' && suffix != 'info' && suffix != 'pro' && suffix != 'museum') {
//  if (db) alert('invalid primary domain in email address');
//   return false;
//}
return true;
}
