// Declaring valid date character, minimum year and maximum year
var dtCh= "/";
var minYear=1980;
now = new Date();


function isInteger(s){
    var i;
   for (i = 0; i < s.length; i++){   
        // Check that current character is number.
       var c = s.charAt(i);
       if (((c < "0") || (c > "9"))) return false;
   }
   // All characters are numbers.
   return true;
}

function stripCharsInBag(s, bag){
    var i;
   var returnString = "";
   // Search through string's characters one by one.
   // If character is not in bag, append to returnString.
   for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
       if (bag.indexOf(c) == -1) returnString += c;
   }
   return returnString;
}

function daysInFebruary (year){
    // February has 29 days in any year evenly divisible by four,
   // EXCEPT for centurial years which are not also divisible by 400.
   return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
    for (var i = 1; i <= n; i++) {
         this[i] = 31
         if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
         if (i==2) {this[i] = 29}
  } 
   return this
}

function isDate(dtStr){
    var daysInMonth = DaysArray(12)
    var pos1=dtStr.indexOf(dtCh)
    var pos2=dtStr.indexOf(dtCh,pos1+1)
    var strMonth=dtStr.substring(0,pos1)
    var strDay=dtStr.substring(pos1+1,pos2)
    var strYear=dtStr.substring(pos2+1)
    strYr=strYear
    if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
    if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
    for (var i = 1; i <= 3; i++) {
         if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
    }
    month=parseInt(strMonth)
    day=parseInt(strDay)
    year=parseInt(strYr)
    if (pos1==-1 || pos2==-1){
         alert("The date format should be : mm/dd/yyyy")
         return false
    }
    if (strMonth.length<1 || month<1 || month>12){
         alert("Please enter a valid month")
         return false
    }
    if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
         alert("Please enter a valid day")
         return false
    }
    if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
         alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
         return false
    }
    if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
         alert("Please enter a valid date")
         return false
    }
return true
}

function isSpecialCharacters(string) {

   if (!string) return false;
   var iChars = "*~|\"<>[]{}`\;()&=+^\\";

   for (var i = 0; i < string.length; i++) {
      if (iChars.indexOf(string.charAt(i)) != -1)
	    return false;
   }
   return true;
}                      

function validateInputs(formName) {

	var whichForm = formName;
	var x = 0;
	var y = 0;
	var z = 0;
	var formValidates = true;
	var strNote, strTmp1, strTmp2, strTmp3;

	while ((x < whichForm.elements.length) && (formValidates)) {
	


		//check to make sure the input is not empty, unless its name is Optional
		if ((whichForm.elements[x].value=="") && (whichForm.elements[x].title != "Optional")) {
			alert("Please Provide the Required Information For " + whichForm.elements[x].title + ".");
			whichForm.elements[x].focus();
			formValidates = false;
		}


		if (((whichForm.elements[x].name=="email") || (whichForm.elements[x].name=="Email")) && (whichForm.elements[x].value!="")) {		
			var str=whichForm.elements[x].value;
			var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
			if (filter.test(str))
				testresults=true
			else{
				alert("Please Provide a Valid E-mail Address.")
				whichForm.elements[x].focus();
				formValidates=false
			}
		}


		
	//
	

		if ((whichForm.elements[x].name=="date1") || (whichForm.elements[x].name=="date2")) {

	    	var dt=whichForm.elements[x].value;
	    	if (isDate(dt)==false){	
				whichForm.elements[x].focus();
	        	return false
	    	}
		}
	
	
	
		// check for number
		if (((whichForm.elements[x].name=="PhoneNumber1") || (whichForm.elements[x].name=="year") || (whichForm.elements[x].name=="PhoneNumber2") || (whichForm.elements[x].name=="PhoneNumber3")) && (whichForm.elements[x].title != "Optional")) {
		var num = whichForm.elements[x].value;
		var tORf1 = isNaN(num)
		if (tORf1 != false) 
			{
			alert("Numbers Only");
			whichForm.elements[x].focus();
			formValidates = false;
			}
		}

	    if ((whichForm.elements[x].value !="") && (isSpecialCharacters(whichForm.elements[x].value) == false) && (whichForm.elements[x].title != "Optional")) {
	        alert("Invalid Character(s) Entered. " + whichForm.elements[x].name + ".");
	        whichForm.elements[x].focus();
			
	        return false;
	    }
		x++;
	}
	
	while ((y < whichForm.elements.length) && (formValidates)) {
		//replace single quotes in form value
		while (whichForm.elements[y].value.indexOf("'") > -1) {
			strNote = whichForm.elements[y].value;
			strTmp1 = strNote.substring(0,strNote.indexOf("'"));
			strTmp2 = strNote.substring(strNote.indexOf("'")+1,strNote.length);
			strTmp3 = strTmp1 + "&rsquo;" + strTmp2;
			whichForm.elements[y].value = strTmp3;
		}
		y++;
	}

	while ((z < whichForm.elements.length) && (formValidates)) {
		//replace less than characters to break any HTML tags in form value
		while (whichForm.elements[z].value.indexOf("<") > -1) {
			strNote = whichForm.elements[z].value;
			strTmp1 = strNote.substring(0,strNote.indexOf("<"));
			strTmp2 = strNote.substring(strNote.indexOf("<")+1,strNote.length);
			strTmp3 = strTmp1 + "&lt;" + strTmp2;
			whichForm.elements[z].value = strTmp3;
		}
		z++;
	}		
			
	return formValidates;
}

