	function isEmpty(pString)
	{
		return ((typeof(pString) == "undefined") || (pString == null) || (pString.length == 0))
	}

	function getValidDate(dateString, dateFormat)
	{
		var retValue = null;

		var dArray = dateString.split("/");

		if(dArray.length == 3)
		{
			var month;
			var day;
			var year = parseInt(dArray[2]);

			// handle weird netscape parseInt problem

			if((typeof(dArray[1]) == "string") && (dArray[1].length == 2) && (dArray[1].charAt(0) == "0"))
				dArray[1] = dArray[1].charAt(1);

			if(dateFormat == 2)
			{
				month = parseInt(dArray[1]);
				day = parseInt(dArray[0]);
			}
			else
			{
				month = parseInt(dArray[0]);
				day = parseInt(dArray[1]);
			}

			if((month != NaN) && (day != NaN) && (year != NaN))
			{
				if(year < 100)
					year += 2000;

				if(year < 2038)
				{
					var tempDate = new Date(year, month - 1, day);
				
					if (tempDate.getDate() == day)
					{
						if (tempDate.getMonth() == month - 1)
						{
							var compYear = tempDate.getYear();
					
							if(navigator.appName.indexOf("Netscape") != -1)
								compYear += 1900;
					
							if(compYear == year)
								retValue = tempDate;
						}
					}
				}
			}
		}

		return retValue;
	}

	function isValidDate(dateString, dateFormat)
	{
		if(getValidDate(dateString, dateFormat) != null)
			return true;
		else
			return false;
	}

	function isValidFutureDate(dateString, dateFormat)
	{
		var retValue = true;

		var tempDate = getValidDate(dateString, dateFormat);

		//alert("tempDate = " + tempDate);

		if(tempDate != null)
		{
			var today = new Date();

			if(tempDate.getYear() < today.getYear())
			{
				retValue = false;
			}
			else
			{
				if(tempDate.getYear() == today.getYear())
				{
					if(tempDate.getMonth() < today.getMonth())
					{
						retValue = false;
					}
					else
					{
						if(tempDate.getMonth() == today.getMonth())
						{
							if(tempDate.getDate() < today.getDate())
							{
								retValue = false;
							}
						}
					}
				}
			}
		}
		else
			retValue = false;

		//alert("retValue " + retValue);

		return retValue;
	}

	function isStringWhiteSpace(pString)
	{
		if(pString.search(/^[ \t]+$/) != -1)
			return true;
		else
		    return false;
	}
	
	function doesStringContainWhiteSpace(pString)
	{
		if(pString.search(/\s/) != -1)
			return true;
		else
		    return false;
	}

	function isValidNameString(pString)
	{
		if(!isStringWhiteSpace(pString) && (pString.search(/^[A-Za-z0-9\- _\.]+$/) != -1))
			return true;
		else
		    return false;
	}

	function isValidAlphaNumericString(pString)
	{
		if(pString.search(/^[A-Za-z0-9]+$/) != -1)
			return true;
		else
		    return false;
	}

	function isValidEmail(pString)
	{
		if(pString.search(/^[A-Za-z0-9-_.']+@([A-Za-z0-9-_.]+[.])+[A-Za-z][A-Za-z]+$/) != -1)
			return true;
		else
		    return false;
	}

	//handles international in the format: +684 (123) 4567   84 (123) 4567   +384 (3123) 45675
	//handles US in the format: (777) 555-5555 555-555-5555

	function isValidUSPhoneNumber(pString)
	{
		//if(pString.search(/^((([0-9][0-9][0-9][\- \.])|([(][0-9][0-9][0-9][)][ ]?))[0-9][0-9][0-9][\- \.][0-9][0-9][0-9][0-9])|([+]?[0-9][0-9][0-9]?(([ ][0-9][0-9][0-9][0-9]?[ ])|([ ]?[(][0-9][0-9][0-9][0-9][)][ ]?))[0-9][0-9][0-9][0-9][0-9]?)$/) != -1)
		if(pString.search(/^(([0-9][0-9][0-9][\- \.])|([(][0-9][0-9][0-9][)][ ]?))[0-9][0-9][0-9][\- \.][0-9][0-9][0-9][0-9]$/) != -1)
			return true;
		else
		    return false;
	}

	function isValidPhoneNumberTypeString(pString)
	{
		if(pString.search(/^[\+\-0-9\(][\(\)\-\.+ 0-9]*$/) != -1)
			return true;
		else
		    return false;
	}

	function isValidZipCode(pString)
	{
		if(pString.search(/^[0-9][0-9][0-9][0-9][0-9]([\- ][0-9][0-9][0-9][0-9])?$/) != -1)
			return true;
		else
		    return false;
	}

	var USStateCodes = "AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY|AE|AA|AE|AE|AP"

	function isValidStateCode(pString)
	{
		if(isEmpty(pString)) 
			return false;
		else if (pString.length != 2)
			return false;
		else {
			
			var index = USStateCodes.indexOf(pString.toUpperCase());
			if (index == -1)
				return false;
			else if (index == 0)
				return true;
			else if (index >=3 && index % 3 == 0)
				return true;

			return false;
		}
	}


	function validateNameString(pString, pMessage)
	{
		if(typeof(pMessage) == "undefined")
			pMessage = "Please enter a valid name (Only Alpha-Numeric, space and \"-_.\"";

		var retValue = isValidNameString(pString);

		if(!retValue)
			alert(pMessage);

		return retValue;
	}

	function validateAlphaNumericString(pString, pMessage)
	{
		if(typeof(pMessage) == "undefined")
			pMessage = "Please enter a valid alphanumeric string";

		var retValue = isValidAlphaNumericString(pString);

		if(!retValue)
			alert(pMessage);

		return retValue;
	}

	function validateEmail(pString, pMessage)
	{
		if(typeof(pMessage) == "undefined")
			pMessage = "Please enter a valid email address (xxx@xxxx.xxxx)";

		var retValue = isValidEmail(pString);

		if(!retValue)
			alert(pMessage);

		return retValue;
	}

	function validateUSPhoneNumber(pString, pMessage)
	{
		if(typeof(pMessage) == "undefined")
			pMessage = "Please enter a valid U.S. phone number (###-###-####)";

		var retValue = isValidUSPhoneNumber(pString);

		if(!retValue)
			alert(pMessage);

		return retValue;
	}

	function validatePhoneNumberTypeString(pString, pMessage)
	{
		if(typeof(pMessage) == "undefined")
			pMessage = "Please enter a valid phone number (only Numbers, space, \"-\" and \"+\")";

		var retValue = isValidPhoneNumberTypeString(pString);

		if(!retValue)
			alert(pMessage);

		return retValue;
	}


	function validateZipCode(pString, pMessage)
	{
		if(typeof(pMessage) == "undefined")
			pMessage = "Please enter a valid zip code (#####[-####])";

		var retValue = isValidZipCode(pString);

		if(!retValue)
			alert(pMessage);

		return retValue;
	}

	function validateStateCode(pString, pMessage)
	{
		if(typeof(pMessage) == "undefined")
			pMessage = "Please enter a valid state code";

		var retValue = isValidStateCode(pString);

		if(!retValue)
			alert(pMessage);

		return retValue;
	}

	function validateFutureDate(dateString, dateFormat)
	{
		var retValue = isValidFutureDate(dateString, dateFormat);

		if(!retValue)
		{
			if(dateFormat == 2)
				alert('Please enter a valid date (dd/mm/yyyy) that is later than today');
			else
				alert('Please enter a valid date (mm/dd/yyyy) that is later than today');
		}

		//alert("retValue = " + retValue);

		return retValue;
	}

	function validateNameStringField(pField, pMessage)
	{
		var retValue = validateNameString(pField.value, pMessage)

		if(!retValue)
			pField.focus();

		return retValue;
	}

	function validateAlphaNumericStringField(pField, pMessage)
	{
		var retValue = validateAlphaNumericString(pField.value, pMessage)

		if(!retValue)
			pField.focus();

		return retValue;
	}

	function validateEmailField(pField, pMessage)
	{
		var retValue = validateEmail(pField.value, pMessage)

		if(!retValue)
			pField.focus();

		return retValue;
	}

	function validateUSPhoneNumberField(pField, pMessage)
	{
		var retValue = validateUSPhoneNumber(pField.value, pMessage)

		if(!retValue)
			pField.focus();

		return retValue;
	}

	function validatePhoneNumberTypeStringField(pField, pMessage)
	{
		var retValue = validatePhoneNumberTypeString(pField.value, pMessage)

		if(!retValue)
			pField.focus();

		return retValue;
	}

	function validateZipCodeField(pField, pMessage)
	{
		var retValue = validateZipCode(pField.value, pMessage)

		if(!retValue)
			pField.focus();

		return retValue;
	}

	function validateStateCodeField(pField, pMessage)
	{
		var retValue = validateStateCode(pField.value, pMessage)

		if(!retValue)
			pField.focus();

		return retValue;
	}

	function validateFutureDateField(pField, dateFormat)
	{
		var retValue = validateFutureDate(pField.value, dateFormat)

		if(!retValue)
			pField.focus();

		return retValue;
	}

	function validateRequiredField(field, name)
	{
		if (field.value == "") {
			alert(name + " is a required field.");
			field.focus();
			return false;
		} else
			return true;
	}

        // Hareeth MP2369: Copying some functions from above for validation of usernames. They are almost identical
       // to their parent functions barring the regular expression check.
       // We decided that usernames can have apostrophes in them. Can't modify the above functions  
       // since that will mean tons of more changes for queries and request parameters for organizations for 
       // which we call the same functions. Have to bear with this since supporting apostrophes as an after-thought 
       // is...
 
       // Similar to validateNameStringField
       function validateUsernameStringField(pField, pMessage)
       {
               var retValue = validateUsernameNameString(pField.value, pMessage)
 
               if(!retValue)
                       pField.focus();
 
               return retValue;
       }
 
       // Similar to validateNameString
       function validateUsernameNameString(pString, pMessage)
       {
               if(typeof(pMessage) == "undefined")
                       pMessage = "Please enter a valid name (Only Alpha-Numeric, space and \"-_.\"\'@";
 
               var retValue = isValidUsernameNameString(pString);
 
               if(!retValue)
                       alert(pMessage);
 
               return retValue;
       }
 
       function isValidUsernameNameString(pString)
       {
               // Diffrent from isValidNameString only in the regex
               if(!isStringWhiteSpace(pString) && (pString.search(/^[A-Za-z0-9\- _\.\'@]+$/) != -1))
                       return true;
               else
                   return false;
       }
       
       // 22 Oct 2007 - Check if password contains spaces.
       function isPasswordValid(pString)
       {
           // strip leading spaces
            pString = pString.replace(/^\s+/, "");
            // strip trailing spaces
            pString = pString.replace(/\s+$/, "");
            if(doesStringContainWhiteSpace(pString))
                return false;
            return true;
       }
 
