	//   JAVASCRIT - Version 2
	//	 New : validation for multiple select options
	
	//********************************************************************************************
	function ignoreSpaces(string) 
	{
		var temp = "";
		var startIndex = 0;
		var lastIndex = string.length - 1;
		
		while (string.charAt(startIndex) == " ")
		{
			startIndex++;
		}
	
		while (string.charAt(lastIndex)== " ")
		{
			lastIndex--;
		}
		
		temp = string.substring(startIndex, (lastIndex +1));

		return temp;
	
	}	//End of ignoreSpaces	

	//****************************************************************************************************
	function IsEmailValid(email)
	{
		var EmailOk  = true;
		var AtSym    = email.indexOf('\@');
		var Period   = email.lastIndexOf('.');
		var Space    = email.indexOf(' ');
		var Length   = email.length - 1;   // Array is from 0 to 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
   		{  
      		EmailOk = false;
   		}
		return EmailOk;
	
	} //End of IsEmailValid

	//****************************************************************************************************
	function check_url(address) 
	{
		if ((address == "")|| 
			(address.indexOf ('http://') == -1) || 
			(address.indexOf ('.') == -1))
      			return false;

	  	return true;
	} //End of check_url

	//****************************************************************************************************
	function checkRequiredTextFields(formObj)
	{
		var message = "";
		var i = 0;

		// If field doesn't exists then return null message
		if (!formObj.requiredTextFields)
			return message;

		var requiredString = formObj.requiredTextFields.value;
		//alert("requiredString = " + requiredString + "\n");
		var fieldName;
        
		var startIndex = -1;
		var endIndex = requiredString.indexOf(',', startIndex + 1);
        
		while (endIndex != -1)
		{
			fieldName = requiredString.substring(startIndex + 1, endIndex);
			//alert("fieldName = " + fieldName + "\n");
             
			// If the element of name 'fieldName' exists, then pocess it, else ignore it
			if (formObj.elements[fieldName])
			{
				formObj.elements[fieldName].value = ignoreSpaces(formObj.elements[fieldName].value);
				if (formObj.elements[fieldName].value.length == 0)
				{
	 				message = message + "Please enter the " + fieldName + "\n";
	 			}

			}

			startIndex = endIndex;	 		
	 		endIndex = requiredString.indexOf(',', startIndex + 1);
		}

		// Last element in the required list, only if requiredString != NULL
		if (requiredString.length != 0)
		{
			endIndex = requiredString.length;
			fieldName = requiredString.substring(startIndex + 1, endIndex);


			// If the element of name 'fieldName' exists, then pocess it, else ignore it
			if (formObj.elements[fieldName])
			{
				formObj.elements[fieldName].value = ignoreSpaces(formObj.elements[fieldName].value);
				if (formObj.elements[fieldName].value.length == 0)
				{
	 				message = message + "Please enter the " + fieldName + "\n";
	 			}

			}
		}			

		return message;
	}

	//****************************************************************************************************
	function checkRequiredSelectFields(formObj)
	{
		var message = "";
		var i = 0;

		// If field doesn't exists then return null message
		if (!formObj.requiredSelectFields)
			return message;

		var requiredString = formObj.requiredSelectFields.value;
		//alert("requiredString = " + requiredString + "\n");
		var fieldName;
		
		var startIndex = -1;
		var endIndex = requiredString.indexOf(',', startIndex + 1);

		while (endIndex != -1)
		{
			fieldName = requiredString.substring(startIndex + 1, endIndex);


			// If the element of name 'fieldName' exists, then pocess it, else ignore it
			if (formObj.elements[fieldName])
			{

				if (formObj.elements[fieldName].options[formObj.elements[fieldName].selectedIndex].value == -1)
				{
					message = message + "Please select " + fieldName + "\n";
				}
				
			}
			
			startIndex = endIndex;	 		
	 		endIndex = requiredString.indexOf(',', startIndex + 1);
		}

		// Last element in the required list, only if requiredString != NULL
		if (requiredString.length != 0)
		{
			endIndex = requiredString.length;
			fieldName = requiredString.substring(startIndex + 1, endIndex);
	
			// If the element of name 'fieldName' exists, then pocess it, else ignore it
			if (formObj.elements[fieldName])
			{
				if (formObj.elements[fieldName].options[formObj.elements[fieldName].selectedIndex].value == -1)
				{
					message = message + "Please select " + fieldName + "\n";
				}
				
			}
		}			

		return message;
	}
//****************************************************************************************************
	// Sub to check for multiple select options
	// the field name is passed as <field>.<minOptions>.<maxOptions>
	//	<field> -- Name of the select box
	//	<minOptions> -- Minimum options to be selected from the selectBox
	//					-- If nothing can be selected then pass minOptions=0
	//  <maxOptions> -- Maximum options can be selected
	//					-- If there is no limit for options to select pass maxOptions=0
	
	function checkRequiredMultipleSelectFields(formObj)
	{
		var message = "";
		var i = 0;

		// If field doesn't exists then return null message
		if (!formObj.requiredMultipleSelectFields)
			return message;

		var requiredString = formObj.requiredMultipleSelectFields.value;
		//append a "," to the end of the requiredString so that last field is also selected 
		requiredString = requiredString + ",";
		//alert("requiredString = " + requiredString + "\n");
		
		var fieldName;
		
		var startIndex = -1;
		var endIndex = requiredString.indexOf(',', startIndex + 1);

		var field , minOptions , maxOptions	;
		var num_selected = 0; // To store total options selected
		var fieldStartIndex = -1, fieldEndIndex;
		
		while (endIndex != -1)
		{
			fieldName = requiredString.substring(startIndex + 1, endIndex);
			//reset all constants
			num_selected = 0;
			fieldStartIndex = -1;
			fieldEndIndex = 0;
			
			//Each fieldName = <field>.<minOptions>.<maxOptions>
			fieldEndIndex = fieldName.indexOf(".", fieldStartIndex+1 )
			field = fieldName.substring(fieldStartIndex+1, fieldEndIndex)
//			alert('field=' + field);
			
			fieldStartIndex = fieldEndIndex;
			fieldEndIndex = fieldName.indexOf(".", fieldStartIndex+1)
			minOptions = fieldName.substring(fieldStartIndex+1, fieldEndIndex)
//			alert('minOptions='+minOptions);
			
			fieldStartIndex = fieldEndIndex;
			fieldEndIndex = fieldName.length;
			maxOptions = fieldName.substring(fieldStartIndex+1, fieldEndIndex)
//			alert('maxOptions='+maxOptions);			

			// If the element of name 'field' exists, then process it, else ignore it
			if (formObj.elements[field])
			{
				// If any of the options is "-1" then ignore all
				
				
				//Count number of options selected
				for(var i=0; i<formObj.elements[field].length ; i++)
					{
						if(formObj.elements[field].options[i].selected)
							{num_selected = num_selected+1;}
					}
				
//				alert('num_selected=' + num_selected);	
				//Check the minimum options to be selected
				//If minOptions = 0 then no need to select the select box
				if (num_selected < minOptions)
				{message = message + "Please select atleast " + minOptions + " options from " +  field + "\n";}
				
				//Check the Maximum no. of options can selected
				//If maxOptions = 0 i.e there is no limit for max options
				if ((maxOptions > 0) && (num_selected > maxOptions))
				{message = message + "Please select ONLY " + maxOptions + " options from " +  field + "\n";}
				
			}
			
			startIndex = endIndex;	 		
	 		endIndex = requiredString.indexOf(',', startIndex + 1);
		}

		return message;
	}

//****************************************************************************************************	
	function checkRequiredCheckBoxesFields(formObj)
	{
		var message = "";
		var i = 0;
		
		// If field doesn't exists then return null message
		if (!formObj.requiredCheckBoxFields)
			return message;
			
		var requiredString = formObj.requiredCheckBoxFields.value;
		//alert("requiredString = " + requiredString + "\n");
		var fieldName;
		
		var startIndex = -1;
		var endIndex = requiredString.indexOf(',', startIndex + 1);

		while (endIndex != -1)
		{
			fieldName = requiredString.substring(startIndex + 1, endIndex);


			// If the element of name 'fieldName' exists, then pocess it, else ignore it
			if (formObj.elements[fieldName])
			{

				if (!formObj.elements[fieldName].checked)
				{
					message = message + "Please select " + fieldName + "\n";
				}
			}
			
			startIndex = endIndex;	 		
	 		endIndex = requiredString.indexOf(',', startIndex + 1);
		}

		// Last element in the required list, only if requiredString != NULL
		if (requiredString.length != 0)
		{
			endIndex = requiredString.length;
			fieldName = requiredString.substring(startIndex + 1, endIndex);

			// If the element of name 'fieldName' exists, then pocess it, else ignore it
			if (formObj.elements[fieldName])
			{
				if (!formObj.elements[fieldName].checked)
				{
					message = message + "Please select " + fieldName + "\n";
				}
				
			}
		}			

		return message;
	}

	//****************************************************************************************************		
	function validateAllEmailFields(formObj)
	{
		var message = "";
		var i = 0;
		
		// If field doesn't exists then return null message
		if (!formObj.emailFieldsToValidate)
			return message;
			
		var requiredString = formObj.emailFieldsToValidate.value;
		//alert("requiredString = " + requiredString + "\n");
		var fieldName;
		
		var startIndex = -1;
		var endIndex = requiredString.indexOf(',', startIndex + 1);

		while (endIndex != -1)
		{
			fieldName = requiredString.substring(startIndex + 1, endIndex);


			// If the element of name 'fieldName' exists and is not empty, then pocess it, else ignore it
			if (formObj.elements[fieldName] && formObj.elements[fieldName].value.length != 0)
			{
				if (!IsEmailValid(formObj.elements[fieldName].value))
				{
					message = message + "Please enter a valid email address for " + fieldName + "\n";
				}
			}
			
			startIndex = endIndex;	 		
	 		endIndex = requiredString.indexOf(',', startIndex + 1);
		}

		// Last element in the required list, only if requiredString != NULL
		if (requiredString.length != 0)
		{
			endIndex = requiredString.length;
			fieldName = requiredString.substring(startIndex + 1, endIndex);

			// If the element of name 'fieldName' exists and is not empty, then pocess it, else ignore it
			if (formObj.elements[fieldName] && formObj.elements[fieldName].value.length != 0)
			{
				if (!IsEmailValid(formObj.elements[fieldName].value))
				{
					message = message + "Please enter a valid email address for " + fieldName + "\n";
				}
			}
		}			

		return message;
	}
	
	//****************************************************************************************************
	function validateAllURLFields(formObj)
	{
		var message = "";
		var i = 0;
		
		// If field doesn't exists then return null message
		if (!formObj.urlFieldsToValidate)
			return message;
			
		var requiredString = formObj.urlFieldsToValidate.value;
		//alert("requiredString = " + requiredString + "\n");
		var fieldName;
		
		var startIndex = -1;
		var endIndex = requiredString.indexOf(',', startIndex + 1);

		while (endIndex != -1)
		{
			fieldName = requiredString.substring(startIndex + 1, endIndex);

			// If the element of name 'fieldName' exists and is not empty, then pocess it, else ignore it
			if (formObj.elements[fieldName] && formObj.elements[fieldName].value.length != 0)
			{
				if (!check_url(formObj.elements[fieldName].value))
				{
					message = message + "Please enter a valid url address for " + fieldName + "\n";
				}
			}
			
			startIndex = endIndex;	 		
	 		endIndex = requiredString.indexOf(',', startIndex + 1);
		}

		// Last element in the required list, only if requiredString != NULL
		if (requiredString.length != 0)
		{
			endIndex = requiredString.length;
			fieldName = requiredString.substring(startIndex + 1, endIndex);
			// If the element of name 'fieldName' exists and is not empty, then pocess it, else ignore it
			if (formObj.elements[fieldName] && formObj.elements[fieldName].value.length != 0)
			{	
				if (!check_url(formObj.elements[fieldName].value))
				{
					message = message + "Please enter a valid url address for " + fieldName + "\n";
				}
			}
		}			

		return message;
	}

	
	//****************************************************************************************************
	function IsDateValid(year, month, day)
	{


		if (((month == 4 )|| (month == 6) || (month== 9) || (month == 11)) && day == 31) {
				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)) {
					return false;
   				}
		}
      return true;

	} 	//End of IsDateValid
	

	//***************************************************************************************************
	//To validate teh dates in the form
	//Dates will be like select boxes for month , year , day
	//Pass all prefix of the date fileds in the form
	// So, Date will be Prefix+year/prefix+month/prefix+day
	
	
	function checkDateFields(formObj)
	{
		var message = "";
		var i = 0;

		// If field doesn't exists then return null message
		if (!formObj.dateFields)
			return message;
		
		var requiredString = formObj.dateFields.value;
		//alert('requiredString=' + requiredString);
		//append  a',' to the end of the string so that last element is also selected
		requiredString += ',';
		//alert("requiredString = " + requiredString + "\n");
		var prefix;
		var month,year,day;
		
		var startIndex = -1;
		var endIndex = requiredString.indexOf(',', startIndex + 1);

		while (endIndex != -1)
		{
			prefix = requiredString.substring(startIndex + 1, endIndex);
			//alert("fieldName = " + fieldName + "\n");
			month =	formObj.elements[prefix + 'Month'].options[formObj.elements[prefix + 'Month'].selectedIndex].value;
			year = formObj.elements[prefix + 'Year'].options[formObj.elements[prefix + 'Year'].selectedIndex].value;
			day = formObj.elements[prefix + 'Day'].options[formObj.elements[prefix + 'Day'].selectedIndex].value;
			
			// If the element of name 'fieldName' exists, then pocess it, else ignore it
				if (!IsDateValid(year, month, day))
				{
	 				message = message + "Invalid " + prefix + " Date \n";
	 			}

			startIndex = endIndex;	 		
	 		endIndex = requiredString.indexOf(',', startIndex + 1);
		}

		return message;
	}


	//****************************************************************************************************		
	function validateNumericFields(formObj)
	{
		var message = "";
		var i = 0;
		
		// If field doesn't exists then return null message
		if (!formObj.numericFields)
			return message;
			
		var requiredString = formObj.numericFields.value;
		//alert("requiredString = " + requiredString + "\n");
		requiredString += ","
		var fieldName;
		
		var startIndex = -1;
		var endIndex = requiredString.indexOf(',', startIndex + 1);

		while (endIndex != -1)
		{
			fieldName = requiredString.substring(startIndex + 1, endIndex);


			// If the element of name 'fieldName' exists and is not empty, then pocess it, else ignore it
			if (formObj.elements[fieldName])
			{
				if (isNaN(formObj.elements[fieldName].value))
				{
					message = message + "Please enter a numeric value for " + fieldName + "\n";
				}
			}
			
			startIndex = endIndex;	 		
	 		endIndex = requiredString.indexOf(',', startIndex + 1);
		}


		return message;
	}

	
	
	//****************************************************************************************************
	function checkForm(formObj)
	{
		var message = "";

		message += checkRequiredTextFields(formObj);
 		message += checkRequiredSelectFields(formObj);
		message += checkRequiredCheckBoxesFields(formObj);
		message += validateAllEmailFields(formObj);
		message += checkDateFields(formObj);
		message += validateNumericFields(formObj);
		message += validateAllURLFields(formObj);
		message += checkRequiredMultipleSelectFields(formObj);
		if (message.length > 0){
			alert("Please Fill the Following:\n" + message);
			return false;
		}
		else
		{
//			formObj.action = "mailto:" + formObj.mailtoAddress.value + "?subject=" + formObj.formSubject.value;
			formObj.action;
			return true;
		}
	}
	
	
	//***************************************************************************************************
	//Function to validate the start and end dates
	//Before calling this function dates are validated

	function validate_start_end_Dates(formObj,startPrefix,endPrefix)
		{
				var sYear = formObj.elements[startPrefix + 'Year'].options[formObj.elements[startPrefix + 'Year'].selectedIndex].value;
				var sMonth = formObj.elements[startPrefix + 'Month'].options[formObj.elements[startPrefix + 'Month'].selectedIndex].value;
				var sDay = formObj.elements[startPrefix + 'Day'].options[formObj.elements[startPrefix + 'Day'].selectedIndex].value;
				var eYear = formObj.elements[endPrefix + 'Year'].options[formObj.elements[endPrefix + 'Year'].selectedIndex].value;
				var eMonth = formObj.elements[endPrefix + 'Month'].options[formObj.elements[endPrefix + 'Month'].selectedIndex].value;
				var eDay = formObj.elements[endPrefix + 'Day'].options[formObj.elements[endPrefix + 'Day'].selectedIndex].value;
				//Checking for validity of dates
				if( IsDateValid(sYear, sMonth, sDay) && IsDateValid(eYear, eMonth, eDay) )
					{	sDate = new Date(sYear, sMonth, sDay);
						eDate = new Date(eYear, eMonth, eDay);
						//Checking if start date is less than end date or not
						if (eDate < sDate)
							{alert( startPrefix + ' Date is Greater than ' + endPrefix + ' Date');return false;}
					}
					else
						{alert("Invalid Dates");return false;}					
				return true;	
		}
	
	
	


	//***************************************************************************************************
	//To validate the dates where only month and year are passed in the form
	//Dates will be like select boxes for month & year
	//end date can be present whose month = 0 then check for current month and year
	//Pass all prefixes of the date fileds in the form
	// where startmonth select box name = prefix + 'Month' and year = prefix + 'Year'
	//	|||y for the end month and end year



	// If end month = 0 then endMonth = current month and endYear = current Year	
	
	function validate_start_end_monthYearDates(formObj,startPrefix,endPrefix)
		{
			var sYear = formObj.elements[startPrefix + 'Year'].options[formObj.elements[startPrefix + 'Year'].selectedIndex].value;
			var sMonth = formObj.elements[startPrefix + 'Month'].options[formObj.elements[startPrefix + 'Month'].selectedIndex].value;

			var eYear = formObj.elements[endPrefix + 'Year'].options[formObj.elements[endPrefix + 'Year'].selectedIndex].value;
			var eMonth = formObj.elements[endPrefix + 'Month'].options[formObj.elements[endPrefix + 'Month'].selectedIndex].value;
			
			//If present is checked for end date then
			//For present then ignore the validation
			if(eMonth == 0 ) 
				{return true;}
			
			var errorId = 0;
			//Checking if start date is less than end date or not

			//Check if startYear is greater than end Year
			if(sYear > eYear)
				{errorId = 1 ;}
					
			else //If start Year is <= end year then 
				{// If start Year = end year then check for the months
					if(sYear == eYear)
						// Check if start month > end Month
						{if(sMonth > eMonth){errorId = 1;}
						}
				}

			
			
			if(errorId == 1) 
				{alert( startPrefix + 'date is greater than ' + endPrefix + 'date');return false;}
			else 
				{return true;}
		}



		


	// end of hiding javascript 


//<FORM NAME="   " method="POST" ENCTYPE="text/plain" onSubmit="return checkForm(this)">
//<input type="HIDDEN" name="requiredTextFields" value="name,title,tel,email,city,organization">
//<input type="HIDDEN" name="requiredSelectFields" value="country,areaOfInterest">
//<input type="HIDDEN" name="requiredCheckBoxFields" value="country,areaOfInterest">
//<input type="HIDDEN" name="emailFieldsToValidate" value="primary_email,second_email">
//<input type="HIDDEN" name="urlFieldsToValidate" value="primary_url,second_url">
//<input type="HIDDEN" name="numericFields" value="age">
//<input type="HIDDEN" name="dateFields" value="dob">
//<input type="Hidden" name="requiredMultipleSelectFields" value="location.0.5,job_category.0.5">

//<input type="HIDDEN" name="mailtoAddress" value="basil@scala-me.com">
//<input type="HIDDEN" name="formSubject" value="Contact Us Form">




