// ************************* PRIMARY FUNCTION *************************************//



	function IsFormComplete(FormName){
		var x = 0;
		
			
					while ((x < document.forms[FormName].elements.length))
					{
				
						var str = document.forms[FormName].elements[x].name;
						var parsElmt   = str.substring(str.length-4, str.length);
						var parsElmt2 = str.substring(str.length-9, str.length);
				
						// EMPTY
						 if (parsElmt == 'reqd') 
						 { 
								if(checkempty(FormName,str)==false)return false;
						}

						// EMAIL	 
						 if (parsElmt == 'mail') 
						 { 
								if(checkemail(FormName,str,'optional')==false)return false;
						}

						else if (parsElmt2 == 'mail_reqd')
						{
								if(checkemail(FormName,str,'required')==false)return false;
						}


						// FLOAT
						 if (parsElmt == 'flot') 
						 { 
								if(checkfloat(FormName,str,'optional')==false)return false;
						}

						else if (parsElmt2 == 'flot_reqd')
						{
								if(checkfloat(FormName,str,'required')==false)return false;
						}

						// INTEGER 
						 if (parsElmt == 'inte') 
						 { 
								if(checkinteger(FormName,str,'optional')==false)return false;
						}

						else if (parsElmt2 == 'inte_reqd')
						{
								if(checkinteger(FormName,str,'required')==false)return false;
						}

						// DATE (mm/dd/yyyy or mm-dd-yyyy)
						 if (parsElmt == 'date') 
						 { 
								if(checkdate(FormName,str,'optional')==false)return false;
						 }

						else if (parsElmt2 == 'date_reqd')
						{
								if(checkdate(FormName,str,'required')==false)return false;
						}


						// EURO DATE (dd/mm/yyyy or dd-mm-yyyy)
						 if (parsElmt == 'euro') 
						 { 
								if(checkeurodate(FormName,str,'optional')==false)return false;
						 }

						else if (parsElmt2 == 'euro_reqd')
						{
								if(checkeurodate(FormName,str,'required')==false)return false;
						}
						
						
						// TIME (hh:mm:ss)
						 if (parsElmt == 'time') 
						 { 
								if(checktime(FormName,str,'optional')==false)return false;
						}

						else if (parsElmt2 == 'time_reqd')
						{
								if(checktime(FormName,str,'required')==false)return false;
						}

						// TELEPHONE (###-###-####)
						 if (parsElmt == 'phon') 
						 { 
								if(checkphone(FormName,str,'optional')==false)return false;
						}

						else if (parsElmt2 == 'phon_reqd')
						{
								if(checkphone(FormName,str,'required')==false)return false;
						}
						 
						// ZIP CODE (#####-####)
						 if (parsElmt == 'code') 
						 { 
								if(checkzip(FormName,str,'optional')==false)return false;
						}
						else if (parsElmt2 == 'code_reqd')
						{
								if(checkzip(FormName,str,'required')==false)return false;
						}
					

						 x++;
					}
				
				return newcheck();
			}


		function newcheck()
			{
				var vld_FirstName =   /^[a-zA-Z0-9]*$/;

						
			var fld_val = document.testform.username_reqd.value;
					if( eval(vld_FirstName).test(fld_val) == false )
				{
					
					alert("Username can only be alphanumeric");
					return false;	

				}	
				if(document.testform.password_reqd.value != document.testform.password2_reqd.value)
				{
					alert("Password do not match");
					return false;
				}
					
			}


// ******************************** MAIN FUNCTIONS ********************************//

// CHECK EMPTY START
			function checkempty(FormName,ElemName)
			{
			var Temp    = document.forms[FormName].elements[ElemName];
				 if (Temp.value =='') { 
					if(document.all){	
								if (Temp.alt ==''){
									alert("Please fill in all the required fields");
								}else{
									alert(Temp.alt);
								}
						} else if(document.layers){
						alert("Please fill in all the required fields");
					}
					Temp.focus();
					return false ;
				 }
			}
// CHECK EMPTY END

// CHECKEMAIL START			
 function checkemail(FormName,ElemName,option)
		{
				var Temp    = document.forms[FormName].elements[ElemName];
				object_value = Temp.value;
				if(((option=='optional')&&(object_value!="")||(option=='required'))){
					var AtSym   = Temp.value.indexOf('@');
					var Period    =  Temp.value.lastIndexOf('.');
					//var Space = Temp.value.indexOf(' ');
					var Length   = (Temp.value.length - 1)

					if((AtSym < 1) ||                            // '@' cannot be in first position
						(Period <= AtSym+1) ||               // Must be atleast one valid char btwn '@' and '.'
						(Period == Length )) // 				   // Must be atleast one valid char after '.'
					//	(Space  != -1))                          // No empty spaces permitted
				   {  
					  alert("Please enter valid email address");
					  Temp.focus();
					  return false;
				   }	
				}
	}
//CHECKEMAIL END


// CHECKFLOAT START
		function checkfloat(FormName,ElemName,option){
				var Temp = document.forms[FormName].elements[ElemName];
				var object_value = Temp.value;

			if(((option=='optional')&&(object_value!="")||(option=='required')))	{
				
				//   Returns true if value is a number defined as
				//   having an optional leading + or -.
				//   having at most 1 decimal point.
				//   otherwise containing only the characters 0-9.

				var start_format = " .+-0123456789";
				var number_format = " .0123456789";
				var check_char;
				var decimal = false;
				var trailing_blank = false;
				var digits = false;

				//The first character can be + - .  blank or a digit.
				check_char = start_format.indexOf(object_value.charAt(0))
				//Was it a decimal?
				if (check_char == 1)	decimal = true;
				else if (check_char < 1)	{
					alert("Please enter valid number");
					Temp.focus();
					return false;
				}	
				//Remaining characters can be only . or a digit, but only one decimal.
				for (var i = 1; i < object_value.length; i++)
				{
					check_char = number_format.indexOf(object_value.charAt(i))
					if (check_char < 0){
						alert("Please enter valid number");
						Temp.focus();
						return false;
					}
					else if (check_char == 1)
					{
						if (decimal)	{
						alert("Please enter valid number");
						Temp.focus();	
						return false;// Second decimal.
						}
						else decimal = true;
					}
					else if (check_char == 0)
					{
						if (decimal || digits)	
						    trailing_blank = true;
					// ignore leading blanks
					}
						else if (trailing_blank){
						alert("Please enter valid number");
						Temp.focus();
						return false;
						}
					else
						digits = true;
				}	
				//All tests passed, so...
				return true
				}
			}
// CHECKFLOAT END


// CHECKINTEGER START
	function checkinteger(FormName,ElemName,option)	{
			var Temp = document.forms[FormName].elements[ElemName];
			var object_value= Temp.value;

		if(((option=='optional')&&(object_value!="")||(option=='required')))	{
			var check_char;
			var decimal= ".";	
				check_char = object_value.indexOf(decimal);
				
				if (check_char < 0) {
						if(!sub_checkfloat(object_value)){
						alert("Please enter a valid numeric value");
						Temp.focus();
						return false;
						}
				}
				else{
					alert("Please enter valid integer");
					Temp.focus();
					return false;
				}
		}
	}
// CHECKINTEGER END

// CHECKDATE START
		function checkdate(FormName,ElemName,option) {
				Temp = document.forms[FormName].elements[ElemName];
				dateStr =Temp.value;

			if(((option=='optional')&&(dateStr!="")||(option=='required')))	{

				var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
				var matchArray = dateStr.match(datePat); // is the format ok?

				if (matchArray == null) {
						alert("Please enter valid date either in mm/dd/yyyy or mm-dd-yyyy format");
					Temp.focus();
					return false;
				}

				month = matchArray[1]; // parse date into variables
				day	 = matchArray[3];
				year   = matchArray[5];

				if (month < 1 || month > 12) { // check month range
					alert("Month must be between 1 and 12.");
					Temp.focus();
					return false;
				}

				if (day < 1 || day > 31) {
					alert("Day must be between 1 and 31.");
					Temp.focus();
					return false;
				}

				if ((month==4 || month==6 || month==9 || month==11) && day==31) {
					alert("Month "+month+" doesn't have 31 days!")
					Temp.focus();
					return false;
				}

				if (month == 2) { // check for february 29th
					var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
					if (day > 29 || (day==29 && !isleap)) {
						alert("February " + year + " doesn't have " + day + " days!");
						Temp.focus();		
						return false;
					}
				}
				return true; // date is valid
			}
		}
// CHECKDATE END

// CHECKEURODATE START
		function checkeurodate(FormName,ElemName,option) {
				Temp = document.forms[FormName].elements[ElemName];
				dateStr =Temp.value;

			if(((option=='optional')&&(dateStr!="")||(option=='required'))) {

				var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
				var matchArray = dateStr.match(datePat); // is the format ok?

				if (matchArray == null) {
						alert("Please enter valid date either in dd/mm/yy or dd-mm-yy format");
					Temp.focus();
					return false;
				}

				day		= matchArray[1]; // parse date into variables
				month	= matchArray[3];
				year      = matchArray[5];

				if (month < 1 || month > 12) { // check month range
					alert("Month must be between 1 and 12.");
					Temp.focus();
					return false;
				}

				if (day < 1 || day > 31) {
					alert("Day must be between 1 and 31.");
					Temp.focus();
					return false;
				}

				if ((month==4 || month==6 || month==9 || month==11) && day==31) {
					alert("Month "+month+" doesn't have 31 days!")
					Temp.focus();
					return false;
				}

				if (month == 2) { // check for february 29th
					var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
					if (day > 29 || (day==29 && !isleap)) {
						alert("February " + year + " doesn't have " + day + " days!");
						Temp.focus();		
						return false;
					}
				}
				return true; // date is valid
			}
		}
// CHECKEURODATE END

// CHECKTIME START
		function checktime(FormName,ElemName,option)
			{
				Temp = document.forms[FormName].elements[ElemName];
				var object_value = Temp.value;

			if(((option=='optional')&&(object_value!="")||(option=='required')))	{

				 if(object_value.indexOf(":") == 1) {
					var a =0;
					object_value = (a+object_value);
					alert(object_value);
				} 

				if((object_value.length != 8) && (object_value.length != 5)){
					alert("Please enter time in hh:mm:ss (00-23:00-59:00-59 ) format ");
					Temp.focus();
					return false;

				} else if(object_value.indexOf(":") != 2 && object_value.indexOf(":") != 5){
					alert("Please enter time in hh:mm:ss (00-23:00-59:00-59 ) format ");
					Temp.focus();
					return false;
				}

				sHour		= object_value.substring(0,2);
				sMinute  = object_value.substring(3,5);
				sSecond	= object_value.substring(6,8);

				if((sHour > 23 || sHour<0) || (sMinute > 59 || sMinute<0) || (sSecond > 59 || sSecond<0)){
					alert("Please enter time in hh:mm:ss (00-23:00-59:00-59 ) format ");
					Temp.focus();
					return false;
				}


				if(isNaN(sHour) || isNaN(sMinute) || isNaN(sSecond)){
					alert("Please enter time in hh:mm:ss (00-23:00-59:00-59 ) format ");
					Temp.focus();
					return false;
				}
			}
		}
//CHECKTIME END


// CHECK PHONENUMBER START
		function checkphone(FormName,ElemName,option)
			{
				Temp = document.forms[FormName].elements[ElemName];
				object_value = Temp.value;

			if(((option=='optional')&&(object_value!="")||(option=='required')))	{
				if (object_value.length != 12){ 
					alert("Please enter telephone number in  ###-###-####  format");	
					Temp.focus();
					return false;
				}

				// check if first 3 characters represent a valid area code
				if (!sub_checknumber(object_value.substring(0,3))){
					alert("Please enter telephone number in  ###-###-####  format");	
					Temp.focus();
					return false;
				}
				else if (!sub_numberrange((eval(object_value.substring(0,3))),100, 1000)){
					alert("Please enter telephone number in  ###-###-####  format");	
					Temp.focus();
					return false;
				}

				// check if area code/exchange separator is either a '-' or ' '
				if (object_value.charAt(3) != "-" && object_value.charAt(3) != " "){
					alert("Please enter telephone number in  ###-###-####  format");	
					Temp.focus();
					return false;
				}
				// check if  characters 5 - 7 represent a valid exchange

				if (! sub_checknumber(object_value.substring(4,7))){
					alert("Please enter telephone number in  ###-###-####  format");	
					Temp.focus();
					return false;
				}
				else	if (! sub_numberrange((eval(object_value.substring(4,7))), 100, 1000)){
					alert("Please enter telephone number in  ###-###-#### format");	
					Temp.focus();
					return false;
				}
				// check if exchange/number separator is either a'-' or ' '
				if (object_value.charAt(7) != "-" && object_value.charAt(7) != " "){
					alert("Please enter telephone number in  ###-###-####  format");	
					Temp.focus();
					return false;
				}
				// make sure last four digits are a valid integer
				if (object_value.charAt(8) == "-" || object_value.charAt(8) == "+"){
					alert("Please enter telephone number in  ###-###-####  format");	
					Temp.focus();
					return false;
				}
				
				if(!sub_checkinteger(object_value.substring(8,12))){
					alert("Please enter telephone number in  ###-###-####  format");	
					Temp.focus();
					return false;
				}
			}
		}
// CHECKPHONENUMBER_END 


// CHECKZIPCODE START
		function checkzip(FormName,ElemName,option)
			{
				Temp = document.forms[FormName].elements[ElemName];
				object_value = Temp.value;

			if(((option=='optional')&&(object_value!="")||(option=='required')))	{
						if (object_value.length != 5 && object_value.length != 10){
						alert("Please enter zip code in ##### or #####-#### format");
						Temp.focus();
						return false;
					}

					// make sure first 5 digits are a valid integer
					if (object_value.charAt(0) == "-" || object_value.charAt(0) == "+"){
							alert("Please enter zip code in ##### or #####-#### format");	
							Temp.focus();
							return false;
					}

					if (!sub_checkinteger(object_value.substring(0,5))){
							alert("Please enter zip code in ##### or #####-#### format");
							Temp.focus();
							return false;
					}

					if (object_value.length == 5)	return true;
					
					// check if separator is either a'-' or ' '
					if (object_value.charAt(5) != "-" && object_value.charAt(5) != " "){
						alert("Please enter zip code in ##### or #####-#### format");
						Temp.focus();
						return false;
					}


					// check if last 4 digits are a valid integer
					if (object_value.charAt(6) == "-" || object_value.charAt(6) == "+"){
						alert("Please enter zip code in ##### or #####-#### format");
						Temp.focus();
						return false;
					}


					if(!sub_checkinteger(object_value.substring(6,10))){
						alert("Please enter zip code in ##### or #####-#### format");
						Temp.focus();
						return false;
					}
				}
			}
// CHECKZIPCODE END 


// ******************************* SUB FUNCTIONS *********************************//

// SUB-CHECKFLOAT START
			function sub_checkfloat(object_value){
				var start_format = " .+-0123456789";
				var number_format = " .0123456789";
				var check_char;
				var decimal = false;
				var trailing_blank = false;
				var digits = false;

				//The first character can be + - .  blank or a digit.
				check_char = start_format.indexOf(object_value.charAt(0))
				//Was it a decimal?
				if (check_char == 1)	decimal = true;
				else if (check_char < 1)	{
					return false;
				}	
				//Remaining characters can be only . or a digit, but only one decimal.
				for (var i = 1; i < object_value.length; i++)
				{
					check_char = number_format.indexOf(object_value.charAt(i))
					if (check_char < 0){
						return false;
					}
					else if (check_char == 1)
					{
						if (decimal)	{
						return false;// Second decimal.
						}
						else decimal = true;
					}
					else if (check_char == 0)
					{
						if (decimal || digits)	
						    trailing_blank = true;
					// ignore leading blanks
					}
						else if (trailing_blank){
						return false;
						}
					else
						digits = true;
				}	
				//All tests passed, so...
				return true
				}
// SUB CHECKFLOAT END


// SUB CHECKINTEGER START
		function sub_checkinteger(object_value)	{
			var check_char;
			var decimal= ".";	
				check_char = object_value.indexOf(decimal);
				
				if (check_char < 0) {
					return sub_checkfloat(object_value);
				}
				else{
					return false;
				}
			}
// SUB CHECKINTEGER END

// SUB CHECKRANGE START
		function sub_checkrange(object_value, min_value, max_value) {
		//if value is in range then return true else return false

		if (!sub_checknumber(object_value)){
			return false;
		}else{
			return (sub_numberrange((eval(object_value)), min_value, max_value));
	}
    //All tests passed, so...
    return true;
    }

// SUB CHECKRANGE END 

// SUB CHECK NUMBERRANGE START
function sub_numberrange(object_value, min_value, max_value)
    {
    // check minimum
    if (min_value != null)
	{
        if (object_value < min_value)
		return false;
	}

    // check maximum
    if (max_value != null)
	{
	if (object_value > max_value)
		return false;
	}
	
    //All tests passed, so...
    return true;
    }
// SUB CHECK NUMBERRANGE END



// SUB CHECK NUMBER START
			function sub_checknumber(object_value){
				var start_format = " .+-0123456789";
				var number_format = " .0123456789";
				var check_char;
				var decimal = false;
				var trailing_blank = false;
				var digits = false;

				//The first character can be + - .  blank or a digit.
				check_char = start_format.indexOf(object_value.charAt(0))
				//Was it a decimal?
				if (check_char == 1)	decimal = true;
				else if (check_char < 1)	{
					Temp.focus();
					return false;
				}	
				//Remaining characters can be only . or a digit, but only one decimal.
				for (var i = 1; i < object_value.length; i++)
				{
					check_char = number_format.indexOf(object_value.charAt(i))
					if (check_char < 0){
						Temp.focus();
						return false;
					}
					else if (check_char == 1)
					{
						if (decimal)	{
						Temp.focus();	
						return false;// Second decimal.
						}
						else decimal = true;
					}
					else if (check_char == 0)
					{
						if (decimal || digits)	
						    trailing_blank = true;
					// ignore leading blanks
					}
						else if (trailing_blank){
						Temp.focus();
						return false;
						}
					else
						digits = true;
				}	
				//All tests passed, so...
				return true
				}


	

// SUB CHECKNUMBER END