//********************************************************//
//	<SCRIPT LANGUAGE=javascript>
//  validation.js
//  Erez Mazor 
//  USGCLS


// ************ GLOBAL VARIABLES ************ 
var STD_ERR = "The entry form contains some errors.\n\n Please correct them and click continue again.";

var aryDaysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var bValidateSucess = true;
var exImg = "<img src='../img/exclamation.gif' id='excimg' width=8 height=15 border=0 alt='This field is missing or contains invalid information.'>";
var sErrPrefix = "";
var sErrPls = "";
var sErrEngChar = "";
var sErrEmail = "";
var sLErrGender="";
var sErrEngNumChar="";
var sErrPls2="";
var sErrTel="";
var sErrZip1 = "";
var sErrZip2 = "";
var sDay = "Day";



function checkChildUS(fldObj) 
{
	if ( isEmpty( fldObj.value ) ) return "";
	
	
	if ( fldObj.value==204 )
	{
		addError( fldObj );
		return "* You do not need to list children born in the United States.<br>";
	} 

	return "";
}

function setDaysInMonth( month, daysObj )
{
	if ( month.selectedIndex == 0 )	return;
	
	var currentDay = daysObj.selectedIndex;
	
	var numDays = aryDaysInMonth[month.selectedIndex-1]
	daysObj.options.length = 0;
	daysObj.options[0] = new Option(sDay,"");

	for( var i = 1; i< numDays+1; i++ )
	{
		daysObj.options[i] = new Option(i,i);
	}
	
	if( currentDay < numDays )
	{
		daysObj.selectedIndex = currentDay;
	}
	else
	{
		daysObj.style.backgroundColor = "#fffacd";
		daysObj.selectedIndex = 0;
	}
}

function isEmpty( s ){   
	return ( ( s == null ) || ( s.length == 0 ) || ( s == "" ) )
}


function checkNumeric(fldObj) 
{
	if ( isEmpty( fldObj.value ) ) return "";
	
	var regExForm = "^[0-9]";
	var emlRegEx = new RegExp(regExForm);
	if ( !emlRegEx.test(fldObj.value) )
	{
		addError( fldObj );
		return "* Please enter a valid number.<br>";
	} 

	return "";
}

function checkEmail(fldObj) 
{
	if ( isEmpty( fldObj.value ) ) return "";
	
	var regExForm = "^[\\w-_\.]*[\\w-_\.]\@[{\\w}]\.+[\\w]+[\\w]$";
	var emlRegEx = new RegExp(regExForm);
	if ( !emlRegEx.test(fldObj.value) )
	{
		addError( fldObj );
		return sErrEmail + "<br>";
	} 

	return "";
}

function filterNum(str) {
          re = /\$|,|@|#|~|`|\n|\%|\*|\^|\&|\(|\)|\+|\=|\[|\-|\_|\]|\[|\}|\{|\;|\:|\'|\"|\<|\>|\?|\||\\|\!|\$|\./g;
          // remove special characters like "$" and "," etc...
          return str.replace(re, "");
     }

function checkKeycode(e) 
{
	alert(e);
	
	var keycode;
	if (window.event) keycode = window.event.keyCode;
	else if (e) keycode = e.which;
	alert("keycode: " + keycode);
}

function checkEngBody(fldObj) {
 
  var i;
  var tmpstr;
  var sCheckStr="";
  
  if ( isEmpty( fldObj.value ) ) return "";
	
	
	tmpstr = fldObj.value;
	
	for(i=0;i<fldObj.value.length;i++)
	{
		if(tmpstr.charCodeAt(i)!= 13 && tmpstr.charCodeAt(i)!=10)
			sCheckStr+=fldObj.value.substr(i,1);
		
		if(tmpstr.charCodeAt(i)== 13)
			sCheckStr+=" ";
	}
	
		
	var regExForm = "[^A-Za-z0-9 -@_^{}#,.\/&()\\\\-]";
	
	var nameRegEx = new RegExp(regExForm);
	var str = new String();
	str=sCheckStr;
	str = filterNum(str);
	
	if ( nameRegEx.test(str) )
	{
		addError( fldObj );
		return getErrorText( fldObj.title );
	}
	
	return "";
}

function checkWords(fldObj)
{
	if ( isEmpty( fldObj.value ) ) return "";
	
	var regExForm = "[^A-Za-z0-9 -#,.\/&()\\\\-]";
	var nameRegEx = new RegExp(regExForm);
	if ( nameRegEx.test(fldObj.value) )
	{
		addError( fldObj );
		return getErrorText( fldObj.title );
	}
 
	return "";
}

function checkAddr(fldObj)
{
	if ( isEmpty( fldObj.value ) ) return "";
	
	var tmp="";
	tmp=checkWords(fldObj);
	if(tmp!="")
		return tmp;
	
	var regExForm = "[^A-Za-z0-9 -#,.\/&()\\\\-]";
	var nameRegEx = new RegExp(regExForm);
	if ( nameRegEx.test(fldObj.value) )
	{
		addError( fldObj );
		return sErrPls2 + fldObj.title + sErrEngNumChar + "<br>";
	}
	return "";
}

function checkGender(male, female) {

	if ( !male.checked && !female.checked )
	{
		addError(female);	
		return sLErrGender + "<br>";
	}
	else
		return "";
}

function checkTelNo(fldObj)
{
	if ( isEmpty( fldObj.value ) ) return "";

	
	for(i=0;i<fldObj.value.length;i++)
	{
		if( ("0123456789().- ").indexOf(fldObj.value.charAt(i)) == -1 )
		{
			addError( fldObj );
			return sErrPls2 + fldObj.title + sErrTel + "<br>";

		}
	}
	return "";
}

function validateZIP(fldObj,CountryCode) 
{
	var valid = "0123456789-";
	var hyphencount = 0;
	

	if ( isEmpty( fldObj.value ) ) return "";
	
	var regExForm = "[^A-Za-z0-9 \\\\\/-]";
	var nameRegEx = new RegExp(regExForm);
	if ( nameRegEx.test(fldObj.value) )
	{
		addError( fldObj );
		return sErrPls2 + fldObj.title + sErrEngNumChar + "<br>";
	}
	
	if(CountryCode=="United States")
	{
		
		if (fldObj.value.length!=5 && fldObj.value.length!=10)
		{
			addError( fldObj );
			return sErrZip1 + "<BR>";
		}
		

		for (var i=0; i < fldObj.value.length; i++) 
		{
			temp = "" + fldObj.value.substring(i, i+1);
			
			if (temp == "-") 
				hyphencount++;
			
		}
		
		if (hyphencount > 1 || (fldObj.value.length==10 && hyphencount == 0)) 
		{
			addError( fldObj );
			return sErrZip2 + "<BR>";
		}

	}

	return "";
	
}

function checkZip(fldObj)
{
	if ( isEmpty( fldObj.value ) ) return "";
	
	var regExForm = "[^A-Za-z0-9 \\\\\/-]";
	var nameRegEx = new RegExp(regExForm);
	if ( nameRegEx.test(fldObj.value) )
	{
		addError( fldObj );
		return sErrPls2 + fldObj.title + sErrEngNumChar +"<br>";
	}

	return "";
}

function checkPassword(fldObj)
{
	if ( isEmpty( fldObj.value ) ) return "";
	
	var regExForm = "[^A-Za-z0-9_-]";
	var nameRegEx = new RegExp(regExForm);
	if ( nameRegEx.test(fldObj.value) )
	{
		addError( fldObj );
		return sErrPls2 + fldObj.title + sErrEngNumChar + "<br>";
	}

	return "";
}

function checkEmpty(frmObj, requiredFields)
{
	var bResetExclamations = true;
	
	if ( checkEmpty.arguments.length > 2 )
		bResetExclamations = checkEmpty.arguments[2];
	
	if( bResetExclamations == true )
		resetExclamations();
	
	var sEmptyError = "";
	
	var aryMissing = new Array();
	
	for(var i=0; i< requiredFields.length; i++)
	{
		var fld = document.getElementById(requiredFields[i]);
		
		fld.value = fld.value.trim();
		
		var tagName = fld.tagName.toLowerCase();
		if( tagName == "input" )
		{
			if( fld.value == null || fld.value == "" )
			{
				aryMissing[aryMissing.length] = fld.title;
				addError( fld );
			}
		}
		else if( tagName == "select" )
		{
			if ( fld.value == null || fld.value == "")
			{
				aryMissing[aryMissing.length] = fld.title;
				addError( fld );
			}
		}
	}
	
	
	if ( aryMissing != null && aryMissing.length > 0 )
	{	
		bValidateSucess = false;	
		for(var i=0; i<aryMissing.length; i++)
		{
			if( i == 0 )
			{
				sEmptyError = sErrPls + sErrPrefix + aryMissing[i];
			}
			else
			{
				sEmptyError += ", " + sErrPrefix  + aryMissing[i];
			}		
		}
		
		sEmptyError +=  ".<br>";
		return sEmptyError;
		
	}
	else
	{
		return "";
	}	
}

function getErrorText( fldName )
{
	return sErrPls + sErrPrefix + fldName + ' ' +sErrEngChar +"<br>";
}

function addError( fldObj )
{
	bValidateSucess = false;
	showExclamation( fldObj );
	fldObj.focus();
}

function showExclamation( fldObj )
{
	fldObj.insertAdjacentHTML("afterEnd", exImg );
}

function resetExclamations()
{
	var aryImg = document.getElementsByName("excimg");
	for( i=0; i<aryImg.length; i++)
	{
		aryImg[i].style.display = "none";
	}	
}

function cleanBreaks( sVal )
{
	while ( sVal.indexOf("<br") != -1 ) sVal = sVal.replace("<br>", "\n");
	return sVal;
}
