
function setColor(el, bg) {
  if(el[0]) {
	for(ii=0;ii<el.length;ii++) {
	  if (el[ii].style) el[ii].style.backgroundColor = bg;
	}
  } else {
  	if (el.style) el.style.backgroundColor = bg;
  }
}

function isBadInputVal(fieldref) {
	if(fieldref[0]) {
		thischecker = 0;
		for(ii=0;ii<fieldref.length;ii++) {
			if(fieldref[ii].checked) {
				thischecker++;
			}
		}
		if(!thischecker) {
			return true;
		}
	} else {
		if(fieldref.value=="") {
			return true;
		}
	}
	return false;
}

function checkForm(thisform) {
	var bgBad = "#FFCCCC";
	var bgGood = "";
	if(thisform.required2.value!="") {
		var is_err = false;
		var err_mess = "";
		var r_fields = thisform.required2.value.split(",");
		for (t_field in r_fields) {
			r_field = r_fields[t_field];
			if(r_field == "email") {
				var fieldinq = eval("thisform." + r_field);
				var vEMailID=fieldinq.value;
				var atPos= vEMailID.indexOf("@") + 1
				var lastDotPos= vEMailID.lastIndexOf(".") + 1
				var firstDotPos = vEMailID.indexOf(".") + 1
				var atInstances=0
				var dotInstances=0
				var inValid = new Array()
				var errorMessages = new Array()
				var errNo = 0

				for(var i=0;i<vEMailID.length;i++)
				{
				if(vEMailID.charAt(i)=="@" )
				atInstances+=1
				else if(vEMailID.charAt(i)==".")
				dotInstances=1
				}

				inValid[errNo] = (atInstances==0)
				errorMessages[errNo] = "@ symbol is missing"
				errNo++

				inValid[errNo] = (dotInstances==0)
				errorMessages[errNo] = ". symbol is missing"
				errNo++

				inValid[errNo] = (atInstances>1)
				errorMessages[errNo] = "@ symbol should not repeat"
				errNo++

				inValid[errNo] = (Math.abs(firstDotPos-atPos)==1)
				errorMessages[errNo] = "@ and . symbols can't come together"
				errNo++

				inValid[errNo] = ((lastDotPos-atPos)<=1)
				errorMessages[errNo] = ". symbol can't come before @ symbol"
				errNo++

				inValid[errNo] = (atPos==vEMailID.length)
				errorMessages[errNo] = "@ symbol can't appear at end"
				errNo++

				inValid[errNo] = (lastDotPos==vEMailID.length)
				errorMessages[errNo] = ". symbol can't appear at end"
				errNo++

				inValid[errNo] = (atPos==1)
				errorMessages[errNo] = "@ symbol should not appear at first position"
				errNo++

				inValid[errNo] = (firstDotPos==1)
				errorMessages[errNo] = ". symbol should not appear at first position"
				errNo++

				inValid[errNo] = (vEMailID.indexOf(" ")>=0)
				errorMessages[errNo] = "E-mail can't contain blank spaces."
				errNo++

				inValid[errNo] = (vEMailID.indexOf("/")>=0) || (vEMailID.indexOf("\\")>=0)
				errorMessages[errNo] = "E-mail can't contain \\ or /"
				errNo++

				var fullErrorMessage = "Invalid email address:\n"
				for(var ind=0; ind<errNo; ind++)
				{
				if(inValid[ind])
				{
				fullErrorMessage += "-     " + errorMessages[ind] + "\n"
				}
				}
				if (fullErrorMessage.length>30) {
					setColor(fieldinq, bgBad);
					err_mess += fullErrorMessage + "\n";
					is_err = true;
				} else {
					setColor(fieldinq, bgGood);
				}
			} else {
				if(r_field.indexOf("-OR-")>=0) {
					rf1 = r_field.substring(0,r_field.indexOf("-OR-"));
					rf2 = r_field.substring(r_field.indexOf("-OR-")+4,r_field.length);
					// alert(rf1+" : "+rf2);
					if(rf2.indexOf("+")>=0) {
						rf2_1 = rf2.substring(0,rf2.indexOf("+"));
						rf2_2 = rf2.substring(rf2.indexOf("+")+1,rf2.length);
						// alert(rf1+" : "+rf2_1+" : "+rf2_2);
						var fieldinq1 = eval("thisform." + rf1);
						var fieldinq2_1 = eval("thisform." + rf2_1);
						var fieldinq2_2 = eval("thisform." + rf2_2);
						if(isBadInputVal(fieldinq1) && (isBadInputVal(fieldinq2_1) || isBadInputVal(fieldinq2_2))) {
							setColor(fieldinq1, bgBad);
							setColor(fieldinq2_1, bgBad);
							setColor(fieldinq2_2, bgBad);
							err_mess += "Please enter a value for either the "+rf1+" field or the "+rf2_1+" and "+rf2_2+" fields.\n";
							is_err = true;
						} else {
							setColor(fieldinq1, bgGood);
							setColor(fieldinq2_1, bgGood);
							setColor(fieldinq2_2, bgGood);
						}
					} else {
						var fieldinq1 = eval("thisform." + rf1);
						var fieldinq2 = eval("thisform." + rf2);
						if(isBadInputVal(fieldinq1) && isBadInputVal(fieldinq2)) {
							setColor(fieldinq1, bgBad);
							setColor(fieldinq2, bgBad);
							err_mess += "Please enter a value for either the "+rf1+" field or the "+rf2+" field.\n";
							is_err = true;
						} else {
							setColor(fieldinq1, bgGood);
							setColor(fieldinq2, bgGood);
						}
					}
				} else {
					var fieldinq = eval("thisform." + r_field);
					if(isBadInputVal(fieldinq)) {
						setColor(fieldinq, bgBad);
						err_mess += "Please enter a value for the "+r_field+" field.\n";
						is_err = true;
					} else {
						setColor(fieldinq, bgGood);
					}
				}
			}
		}
		if(is_err) {
			alert(err_mess);
			return false;
		} else {
			return true;
		}
	} else {
		return true;
	}
}

