//Author:       Stephanie DeAntoni
//Date:         09/12/2008
//Description:  Include for forms template

/**************************************************************************
Revision History:
00/00/00 - 
**************************************************************************/


function validateMyFields(frm)
{
	var errorText = "";
	
	//This will loop through the validateFields Array and validate each field
	//if they do not pass, they will be added to the error message and highlighted yellow
	//if they pass validation they will be highlighted white
	for (var i = 0; i < validateFields.length; i++)
	{
		
		//Have to put this into a string variable for FireFox to work with the getElementById
		theField = String(validateFields[i][0]);
		
		//Type of validation = Email 
		if (String(validateFields[i][2]) == "email") 
		{	
						
			//Check for Min and Max lengths
			var maxCommentsResult = 0;
			var minCommentsResult = "";
			
			if (validateFields[i][3] > 0)
			{
				maxCommentsResult = maxlength(document.getElementById(theField), validateFields[i][3]);	
			}
			if (validateFields[i][4] > 0)
			{
				minCommentsResult = minlength(document.getElementById(theField), validateFields[i][4]);	
			}			
			
			//First see if it's a valid email format
			if (!validateEmail(document.getElementById(theField)))			
			{
				if (errorText.length == 0) 
				{
					errorText = "Field Validation Errors:\n\n";						
					errorField = String(validateFields[i][0]);
				}	
				errorText = errorText + validateFields[i][1] + " - Invalid Email Address.\n";				
				document.getElementById(theField).style.background = "#FFFFCC";								
				
			} else if (maxCommentsResult > 0)	//If it's greater than max length
			{
				if (errorText.length == 0) 
				{
					errorText = "Field Validation Errors:\n\n";						
					errorField = String(validateFields[i][0]);
				}	
				
				errorText = errorText + validateFields[i][1] + " - This field is limited to " + validateFields[i][3] + " characters. Please abbreviate your text by at least " + maxCommentsResult + " characters.\n";
				document.getElementById(theField).style.background = "#FFFFCC";	
					
			}  else if (minCommentsResult == 1) //If it's less than min length 
			{
				if (errorText.length == 0) 
				{
					errorText = "Field Validation Errors:\n\n";						
					errorField = String(validateFields[i][0]);
				}	
				
				errorText = errorText + validateFields[i][1] + " - This field must contain at least " + validateFields[i][4] + " characters. Please add more text.\n";
				document.getElementById(theField).style.background = "#FFFFCC";		
			} else // Everything is just fine
			{
				document.getElementById(theField).style.background = "#FFFFFF";	
			}		
			
		}
		
		//Type of validation = Date
		if (String(validateFields[i][2]) == "date") 
		{			
			
			//Get Beg Date - could be a field id or a date string in the array, so we have to determine which			
			var begDate = validateFields[i][5];
			//If get element by id does not return null, then it is a field id, so we need to get the field value.			
			if (document.getElementById(validateFields[i][5]) != null)
			{
				begDate = document.getElementById([validateFields[i][5]]).value;
			}
			
						
			//Get End Date - could be a field id or a date string in the array, so we have to determine which			
			var endDate = validateFields[i][6];	
			//If get element by id does not return null, then it is a field id, so we need to get the field value.		
			if (document.getElementById(validateFields[i][6]) != null)
			{
				endDate = document.getElementById([validateFields[i][6]]).value;
			}
			
			var dateResults = isDate(document.getElementById(theField).value, begDate, endDate)
			
			if (dateResults.length > 0)
			{
				if (errorText.length == 0) 
				{
					errorText = "Field Validation Errors:\n\n";						
					errorField = String(validateFields[i][0]);
				}	
				errorText = errorText + validateFields[i][1] + " - " + dateResults + ".\n";
				document.getElementById(theField).style.background = "#FFFFCC";	
			} else 
			{
				document.getElementById(theField).style.background = "#FFFFFF";	
			}			
		}
		
				
		//Type of validation = SSN
		if (String(validateFields[i][2]) == "ssn") 
		{			
			if (!SSNValidation(document.getElementById(theField)))
			{
				if (errorText.length == 0) 
				{
					errorText = "Field Validation Errors:\n\n";						
					errorField = String(validateFields[i][0]);
				}	
				errorText = errorText + validateFields[i][1] + " - Invalid SSN. Must be 9 digits or in the form NNN-NN-NNNN.\n";
				document.getElementById(theField).style.background = "#FFFFCC";	
			} else 
			{
				document.getElementById(theField).style.background = "#FFFFFF";	
			}			
		}
		

		
		//Type of validation = Phone
		if (String(validateFields[i][2]) == "phone") 
		{			
			var phoneValidatonResults = validatePhone(document.getElementById(theField));
			if (phoneValidatonResults != 0)
			{
				if (errorText.length == 0) 
				{
					errorText = "Field Validation Errors:\n\n";						
					errorField = String(validateFields[i][0]);
				}	
				if (phoneValidatonResults == 1) 
				{
					errorText = errorText + validateFields[i][1] + " - contains illegal characters.\n";	
				} else if (phoneValidatonResults == 2)
				{
					errorText = errorText + validateFields[i][1] + " - is the wrong length. Make sure you included an area code.\n";		
				}
				
				document.getElementById(theField).style.background = "#FFFFCC";	
			} else 
			{
				document.getElementById(theField).style.background = "#FFFFFF";	
			}			
		}
		
		

		
		//Type of validation = State
		if (String(validateFields[i][2]) == "state") 
		{			
			if (!validateStateCode(document.getElementById(theField)))
			{
				if (errorText.length == 0) 
				{
					errorText = "Field Validation Errors:\n\n";						
					errorField = String(validateFields[i][0]);
				}	
				errorText = errorText + validateFields[i][1] + " - Invalid State Code.\n";
				document.getElementById(theField).style.background = "#FFFFCC";	
			} else 
			{
				document.getElementById(theField).style.background = "#FFFFFF";	
			}			
		}
		
		
		
		//Type of validateion = Zip
		if (String(validateFields[i][2]) == "zip") 
		{			
			if (!validateZipCode(document.getElementById(theField)))
			{
				if (errorText.length == 0) 
				{
					errorText = "Field Validation Errors:\n\n";						
					errorField = String(validateFields[i][0]);
				}	
				errorText = errorText + validateFields[i][1] + " - Invalid Format.\n";
				document.getElementById(theField).style.background = "#FFFFCC";	
			} else 
			{
				document.getElementById(theField).style.background = "#FFFFFF";	
			}			
		}
		
		
		
		
		
		//Type of validation = textarea 	
		if (String(validateFields[i][2]) == "textarea") 
		{		
			//First Check for Max Length	
			var maxCommentsResult = maxlength(document.getElementById(theField), validateFields[i][3]);
			
			//Now check for Min Length
			var minCommentsResult = minlength(document.getElementById(theField), validateFields[i][4]);
			
			
			if (maxCommentsResult > 0)
			{
				if (errorText.length == 0) 
				{
					errorText = "Field Validation Errors:\n\n";						
					errorField = String(validateFields[i][0]);
				}	
				
				errorText = errorText + validateFields[i][1] + " - This field is limited to " + validateFields[i][3] + " characters. Please abbreviate your text by at least " + maxCommentsResult + " characters.\n";
				document.getElementById(theField).style.background = "#FFFFCC";	
			} else if (minCommentsResult == 1)
			{
				if (errorText.length == 0) 
				{
					errorText = "Field Validation Errors:\n\n";						
					errorField = String(validateFields[i][0]);
				}	
				
				errorText = errorText + validateFields[i][1] + " - This field must contain at least " + validateFields[i][4] + " characters. Please add more text.\n";
				document.getElementById(theField).style.background = "#FFFFCC";			
			} else
			{
				document.getElementById(theField).style.background = "#FFFFFF";	
			}			
				
		}	
	
		
	}
	
	return errorText;	
}

//This function will check the character length on the passed in <textarea> or <text> field and, if it is below the min passed in length,
//will send back that it's too short.
function minlength(field, minvalue)
{
	//if a minvalue is passed in, it will be greater than 0	
	if (minvalue > 0)
	{
		if (field.value == null || field.value.length < minvalue)
		{
			return 1;	//field is too short
		}	
		
	} else
	{
		//no min value to check
		return 0;
	}	
	
}

    
//Validate fields in order from top to bottom. If a problem is found, an alert() box will be displayed, focus will
//shift to the first offending field, and error text will display in red on the form
function validateThisForm(frm) {
	
	var errorText = "";	
	
	//Validate that All Required Fields are Filled in	
	errorText = checkRequiredFields(frm);	
	
	if (errorText.length != 0) 
	{				
		document.errForm.txtErrMessage.value = errorText;
		document.errForm.txtErrMessage.className = "unhidden";
		document.errForm.submit;
		
		alert(errorText);	
		setFocus();
		return false;
	}

	//Now, all required fields are filled in, so let's validate all fields are in correct format
	errorText = validateMyFields(frm);
		
	if (errorText.length > 0) 
	{
		document.errForm.txtErrMessage.value = errorText;
		document.errForm.txtErrMessage.className = "unhidden";
		document.errForm.submit;
		
		alert(errorText);
		
		setFocus();		
		return false;
	} 
	
	return true;	
}

//this will enable or disable the passed in text box field and set the background color appropriately.
function enableTextBox(field)
{
	if (field.disabled)
	{
		field.disabled = false;
		field.style.background="#FFFFFF";			
	} else
	{
		field.disabled = true;
		field.style.background="#CCCCCC";	
	}
	
}


//////////////  Start of Date Validation functions //////////////////////////////////////////////////////

/**
 * DHTML date validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
 */
// Declaring valid date character, minimum year and maximum year
var dtCh= "/";
//var minYear=1900;
//var maxYear=2100;

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, minDate, maxDate){
	
	var thisMinDate = "01/01/2000";
	var thisMaxDate = "01/01/2020";
	
	if (minDate != "") thisMinDate = minDate;
	if (maxDate != "") thisMaxDate = maxDate;
	
	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);
	
	//turn passed in date into a date instead of string so we can compare
	var thisDate = new Date();
	thisDate.setYear(year);
	thisDate.setMonth(month - 1);
	thisDate.setDate(day);
	
	//maxDate - turn it into date so you can compare date to date
	var maxDatePos1=thisMaxDate.indexOf(dtCh);
	var maxDatePos2=thisMaxDate.indexOf(dtCh,maxDatePos1+1);
	var strmaxDateMonth=thisMaxDate.substring(0,maxDatePos1);
	var strmaxDateDay=thisMaxDate.substring(maxDatePos1+1,maxDatePos2);
	var strmaxDateYear=thisMaxDate.substring(maxDatePos2+1);
	maxDateMonth=parseInt(strmaxDateMonth);
	maxDateDay=parseInt(strmaxDateDay);
	maxDateYear=parseInt(strmaxDateYear);
	
	thisMaxDate = new Date();
	thisMaxDate.setYear(maxDateYear);
	thisMaxDate.setMonth(maxDateMonth - 1);
	thisMaxDate.setDate(maxDateDay);

	//minDate - turn it into date so you can compare date to date
	var minDatePos1=thisMinDate.indexOf(dtCh);
	var minDatePos2=thisMinDate.indexOf(dtCh,minDatePos1 + 1);
	var strMinDateMonth=thisMinDate.substring(0,minDatePos1);
	var strMinDateDay=thisMinDate.substring(minDatePos1+1,minDatePos2);
	var strMinDateYear=thisMinDate.substring(minDatePos2+1);
	minDateMonth=parseInt(strMinDateMonth);
	minDateDay=parseInt(strMinDateDay);
	minDateYear=parseInt(strMinDateYear);
	
	thisMinDate = new Date();
	thisMinDate.setYear(minDateYear);
	thisMinDate.setMonth(minDateMonth - 1);
	thisMinDate.setDate(minDateDay);
	
	if (pos1==-1 || pos2==-1){		
		return "The date format should be : mm/dd/yyyy";
	}
	if (strMonth.length < 1 || month < 1 || month > 12){
		return "Please enter a valid month";
	}
	if (strDay.length < 1 || day < 1 || day > 31 || (month == 2 && day > daysInFebruary(year)) || day > daysInMonth[month]){
		return "Please enter a valid day";
	}
	if (strYear.length != 4 ){
		return "Please enter a valid 4 digit year";
	}
	
	if (thisDate < thisMinDate || thisDate > thisMaxDate){
		return "Please enter a valid date between " + minDateMonth + "/" + minDateDay + "/" + minDateYear  + " and " + maxDateMonth + "/" + maxDateDay + "/" + maxDateYear;
	}
	
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		return "Please enter a valid date";
	}
return "";
}
////////  End of Date Validation functions /////////////////////////////////////////////////////////////


