// JavaScript Document
function restrictinput(maxlength,e,placeholder)
{
	if (window.event && event.srcElement.value.length >= maxlength)
		return false;
	else if (e.target && e.target == eval(placeholder) && e.target.value.length >= maxlength)
	{
		var pressedkey=/[a-zA-Z0-9\'\"\?\(\)\+\-\_\.\,\/]/ //detect alphanumeric keys
		if (pressedkey.test(String.fromCharCode(e.which)))
			e.stopPropagation();
	}
}

function countlimit(maxlength,e,placeholder)
{
	var theform=eval(placeholder);
	var lengthleft=maxlength-theform.value.length;
	var placeholderobj=document.all ? document.all[placeholder] : document.getElementById(placeholder);
	
	if (window.event || e.target && e.target==eval (placeholder))
	{
		if (lengthleft < 0)
			theform.value = theform.value.substring(0,maxlength);
		placeholderobj.innerHTML = lengthleft;
	}
}


function displaylimit(thename, theid, thelimit)
{
	var theform = theid != "" ? document.getElementById(theid) : thename;
	var limit_text= '<b><span id="' + theform.toString() + '">' + thelimit + '</span></b> characters remaining';
	
	if (document.all || ns6)
		document.write(limit_text);
		
	if (document.all)
	{
		eval(theform).onkeypress=function(){ return restrictinput(thelimit,event,theform)};
		eval(theform).onkeyup=function(){ countlimit(thelimit,event,theform)};
	}
	else if (ns6)
	{
		document.body.addEventListener('keypress', function(event) { restrictinput(thelimit,event,theform) }, true); 
		document.body.addEventListener('keyup', function(event) { countlimit(thelimit,event,theform) }, true); 
	}
}


// Fellowship form validation
var emailFilter = /^\w+[\+\.\w-]*@([\w-]+\.)*\w+[\w-]*\.([a-z]{2,4}|\d+)$/
// mm/dd/yyyy
var fullDateFilter = /^\d{1,2}\/\d{1,2}\/\d{4}$/
// mm/yyyy
var halfDateFilter = /^\d{1,2}\/\d{4}$/

function ClearForm()
{
	document.FellowshipForm.reset();
}

function checkmail(email)
{
	var result = emailFilter.test(email.value);
	
	if (result == false)
	{
		alert("Please enter a valid email address.");
		e.select();
	}
	return result;
}


function verifyFullDate(obj)
{
	var check = "DOB " . obj.DateOfBirth.value; 
	alert(check);
	
	var result = fullDateFilter.test(obj.DateOfBirth.value);
	if (result == false)
	{
		alert("Please enter a valid date for \"Date of Birth\"");
		obj.DateOfBirth.select();
	}
	
	return result;
}

function verifyHalfDate(obj)
{
	var result = halfDateFilter.test(obj.PostGradYearOneDate.value);
	if (result == false)
	{
		alert("Please enter a valid date for \"1st Year Date\"");
		obj.PostGradYearOneDate.select();
	}
	
	result = halfDateFilter.test(obj.PostGradYearTwoDate.value);
	if (result == false)
	{
		alert("Please enter a valid date for \"2nd Year Date\"");
		obj.PostGradYearTwoDate.select();
	}
		
	result = halfDateFilter.test(obj.PostGradYearThreeDate.value);
	if (result == false)
	{
		alert("Please enter a valid date for \"3rd Year Date\"");
		obj.PostGradYearThreeDate.select();
	}
		
	result = halfDateFilter.test(obj.PostGradYearFourDate.value);
	if (result == false)
	{
		alert("Please enter a valid date for \"4th Year Date\"");
		obj.PostGradYearFourDate.select();
	}
		
	result = halfDateFilter.test(obj.AddlEduFromDate1.value);
	if (result == false)
	{
		alert("Please enter a valid date for Additional Education / Fellowship \"1st From Date\"");
		obj.AddlEduFromDate1.select();
	}
		
	result = halfDateFilter.test(obj.AddlEduToDate1.value);
	if (result == false)
	{
		alert("Please enter a valid date for Additional Education / Fellowship \"1st To Date\"");
		obj.AddlEduToDate1.select();
	}
		
	result = halfDateFilter.test(obj.AddlEduFromDate2.value);
	if (result == false)
	{
		alert("Please enter a valid date for Additional Education / Fellowship \"2nd From Date\"");
		obj.AddlEduFromDate2.select();
	}
		
	result = halfDateFilter.test(obj.AddlEduToDate2.value);
	if (result == false)
	{
		alert("Please enter a valid date for Additional Education / Fellowship \"2nd To Date\"");
		obj.AddlEduToDate2.select();
	}
		
	result = halfDateFilter.test(obj.ActDate1.value);
	if (result == false)
	{
		alert("Please enter a valid date for 1st Activity/Organizational Membership \"Date\"");
		obj.ActDate1.select();
	}
		
	result = halfDateFilter.test(obj.ActDate2.value);
	if (result == false)
	{
		alert("Please enter a valid date for 2nd Activity/Organizational Membership \"Date\"");
		obj.ActDate2.select();
	}
		
	result = halfDateFilter.test(obj.ActDate3.value);
	if (result == false)
	{
		alert("Please enter a valid date for 3rd Activity/Organizational Membership \"Date\"");
		obj.ActDate3.select();
	}
		
	result = halfDateFilter.test(obj.ActDate4.value);
	if (result == false)
	{
		alert("Please enter a valid date for 4th Activity/Organizational Membership \"Date\"");
		obj.ActDate4.select();
	}
		
	return result;
}

function formCheck(formobj)
{
	if (emailFilter.test(formobj.HomeEmail.value) == false)
	{
		alert("Please enter a valid email address.");
		formobj.HomeEmail.select();
		return false;
	}

	// See if Work, letter emails are valid since these are optional
	if (formobj.WorkEmail.value != "")
	{
		if (emailFilter.test(formobj.WorkEmail.value) == false)
		{
			alert("Please enter a valid work email address.");
			formobj.WorkEmail.select();
			return false;
		}
	}
	
/*
if (formobj.FirstLetterEmail.value != "")
	{
		if (emailFilter.test(formobj.FirstLetterEmail.value) == false)
		{
			alert("Please enter a valid email address for the 1st Letter of Recommendation.");
			formobj.FirstLetterEmail.select();
			return false;
		}
	}
	
	if (formobj.SecondLetterEmail.value != "")
	{
		if (emailFilter.test(formobj.SecondLetterEmail.value) == false)
		{
			alert("Please enter a valid email address for the 2nd Letter of Recommendation.");
			formobj.SecondLetterEmail.select();
			return false;
		}
	}
	
	if (formobj.ThirdLetterEmail.value != "")
	{
		if (emailFilter.test(formobj.ThirdLetterEmail.value) == false)
		{
			alert("Please enter a valid email address for the 3rd Letter of Recommendation.");
			formobj.ThirdLetterEmail.select();
			return false;
		}
	}
*/		
	if (fullDateFilter.test(formobj.DateOfBirth.value) == false)
	{
		alert("Please enter a valid Date of Birth.");
		formobj.DateOfBirth.select();
		return false;
	}
	
	if (formobj.EduGradDate.value != "")
	{
		if (halfDateFilter.test(formobj.EduGradDate.value) == false)
		{
			alert("Please enter a valid date for \"Graduation Date\"");
			formobj.EduGradDate.select();
			return false;
		}
	}
	
	if (formobj.EduGradGradDate.value != "")
	{
		if (halfDateFilter.test(formobj.EduGradGradDate.value) == false)
		{
			alert("Please enter a valid date for \"Graduation Date\"");
			formobj.EduGradGradDate.select();
			return false;
		}
	}

	if (formobj.PostGradYearOneDate.value != "")
	{
		if (halfDateFilter.test(formobj.PostGradYearOneDate.value) == false)
		{
			alert("Please enter a valid date for \"1st Year Date\"");
			formobj.PostGradYearOneDate.select();
			return false;
		}
	}
	
	if (formobj.PostGradYearTwoDate.value != "")
	{
		if (halfDateFilter.test(formobj.PostGradYearTwoDate.value) == false)
		{
			alert("Please enter a valid date for \"2nd Year Date\"");
			formobj.PostGradYearTwoDate.select();
			return false;
		}
	}			
	
	if (formobj.PostGradYearThreeDate.value != "")
	{
		if (halfDateFilter.test(formobj.PostGradYearThreeDate.value) == false)
		{
			alert("Please enter a valid date for \"3rd Year Date\"");
			formobj.PostGradYearThreeDate.select();
			return false;
		}
	}
			
	if (formobj.PostGradYearFourDate.value != "")
	{
		if (halfDateFilter.test(formobj.PostGradYearFourDate.value) == false)
		{
			alert("Please enter a valid date for \"4th Year Date\"");
			formobj.PostGradYearFourDate.select();
			return false;
		}
	}
			
	if (formobj.AddlEduFromDate1.value != "")
	{
		if (halfDateFilter.test(formobj.AddlEduFromDate1.value) == false)
		{
			alert("Please enter a valid date for Additional Education / Fellowship \"1st From Date\"");
			formobj.AddlEduFromDate1.select();
			return false;
		}
	}
	
	if (formobj.AddlEduToDate1.value != "")
	{
		if (halfDateFilter.test(formobj.AddlEduToDate1.value) == false)
		{
			alert("Please enter a valid date for Additional Education / Fellowship \"1st To Date\"");
			formobj.AddlEduToDate1.select();
			return false;
		}
	}
		
	if (formobj.AddlEduFromDate2.value != "")
	{
		if (halfDateFilter.test(formobj.AddlEduFromDate2.value) == false)
		{
			alert("Please enter a valid date for Additional Education / Fellowship \"2nd From Date\"");
			formobj.AddlEduFromDate2.select();
			return false;
		}
	}			
	
	if (formobj.AddlEduToDate2.value != "")
	{
		if (halfDateFilter.test(formobj.AddlEduToDate2.value) == false)
		{
			alert("Please enter a valid date for Additional Education / Fellowship \"2nd To Date\"");
			formobj.AddlEduToDate2.select();
			return false;
		}
	}
	
	if (formobj.ActDate1.value != "")
	{
		if (halfDateFilter.test(formobj.ActDate1.value) == false)
		{
			alert("Please enter a valid date for 1st Activity/Organizational Membership \"Date\"");
			formobj.ActDate1.select();
			return false;
		}
	}		
	
	if (formobj.ActDate2.value != "")
	{
		if (halfDateFilter.test(formobj.ActDate2.value) == false)
		{
			alert("Please enter a valid date for 2nd Activity/Organizational Membership \"Date\"");
			formobj.ActDate2.select();
			return false;
		}
	}
			
	if (formobj.ActDate3.value != "")
	{
		if (halfDateFilter.test(formobj.ActDate3.value) == false)
		{
			alert("Please enter a valid date for 3rd Activity/Organizational Membership \"Date\"");
			formobj.ActDate3.select();
			return false;
		}
	}
	
	if (formobj.ActDate4.value != "")
	{			
		if (halfDateFilter.test(formobj.ActDate4.value) == false)
		{
			alert("Please enter a valid date for 4th Activity/Organizational Membership \"Date\"");
			formobj.ActDate4.select();
			return false;
		}
	}
			
	// Check to make sure the Personal Statement is more than 5,000 characters
	var str = formObj.Statement.value;
	if (str.length >= 5000)
	{
		return true;
	}
	else
	{
		alert("Error!  Personal Statment must contain at least 5,000 CHARACTERS.");
		return false;
	}
			
	// Enter name of mandatory fields
	var fieldRequired = Array("FirstName", "LastName", "HomePhone", "age", "DateOfBirth", "PlaceOfBirth", "citizenship",
							"HomeAddress", "HomeCity", "HomeState", "HomeZip", "HomeEmail", "PhotoFile", "VitaeFile", "Statement");
							
	// Enter field description to appear in the dialog box
	var fieldDescription = Array("First Name", "Last Name", "Home Phone", "Age", "Date of Birth", "Place of Birth", "Citizenship",
							"Contact Information Address", "Contact Information City", "Contact Information State", "Contact Information Zip",
							"Contact Information Email", "Contact Information Photo", "Curriculum Vitae", "Personal Statement");
	// dialog message
	var alertMsg = "Please complete the following fields:\n";

	var l_Msg = alertMsg.length;

	for (var i = 0; i < fieldRequired.length; i++)
	{
		var obj = formobj.elements[fieldRequired[i]];
		
		if (obj)
		{
			switch(obj.type)
			{
				case "select-one":
					if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == "")
					{
						alertMsg += " - " + fieldDescription[i] + "\n";
					}
				break;
				case "select-multiple":
					if (obj.selectedIndex == -1)
					{
						alertMsg += " - " + fieldDescription[i] + "\n";
					}
					break;
				case "file":
				case "text":
				case "textarea":
					if (obj.value == "" || obj.value == null)
					{
						alertMsg += " - " + fieldDescription[i] + "\n";
					}
					break;
				default:
			}
			
			if (obj.type == undefined)
			{
				var blnchecked = false;
				for (var j = 0; j < obj.length; j++)
				{
					if (obj[j].checked)
					{
						blnchecked = true;
					}
				}
				
				if (!blnchecked)
				{
					alertMsg += " - " + fieldDescription[i] + "\n";
				}
			}
		}
	}

	if (alertMsg.length == l_Msg)
	{
		return true;
	}
	else
	{
		alert(alertMsg);
		return false;
	}
}

// Go back to the fellowship application
function fellowshipApp()
{
	 window.location = "fellowship_app.php";
}

function SelectTitle(obj)
{
	var index = obj.selectedIndex;
	var value = obj.options[index].value;
	var oTitle = document.getElementById("title");

	if (value == "-1")
	{	// Selected other, show the title textbox
		oTitle.style.display = "inline";		
	}
	else
	{	// copy the title to textbox
		oTitle.value = value;
	}
}

function getNewSubmitForm()
{
	var submitForm = document.createElement("FORM");
	document.body.appendChild(submitForm);
	submitForm.method = "POST";
	return submitForm;
}

//helper function to add elements to the form
function createNewFormElement(inputForm, elementName, elementValue)
{
	// Works in IE and FireFox
	var input = document.createElement('input');
		input.setAttribute('type', 'hidden');
		input.setAttribute('name', elementName);
		input.setAttribute('value', elementValue);
		
	inputForm.appendChild(input);
}

/***********************************************
* Textarea Maxlength script- © Dynamic Drive (www.dynamicdrive.com)
* This notice must stay intact for legal use.
* Visit http://www.dynamicdrive.com/ for full source code
***********************************************/
function ismaxlength(obj)
{
	var mlength = obj.getAttribute ? parseInt(obj.getAttribute("maxlength")) : ""
		if (obj.getAttribute && obj.value.length>mlength)
			obj.value = obj.value.substring(0, mlength)
}

// Check date in format mm/dd/yyyy
function CheckDateMMDDYYYY(input, field)
{
	var validformat = /^\d{2}\/\d{2}\/\d{4}$/ //Basic check for format validity
	var returnval = false
	var msg;
	
	if (!validformat.test(input.value))
	{
		msg = "Invalid Date Format for \"" + field + "\". Must be in MM/DD/YYYY, i.e. 10/23/2008. Please correct and submit again." ;
		alert(msg);
	}
	else
	{ //Detailed check for valid date ranges
		var monthfield = input.value.split("/")[0];
		var dayfield = input.value.split("/")[1];
		var yearfield = input.value.split("/")[2];
		var dayobj = new Date(yearfield, monthfield-1, dayfield);
		if ((dayobj.getMonth() + 1 != monthfield) || (dayobj.getDate() != dayfield) || (dayobj.getFullYear() != yearfield))
		{
			msg = "Invalid Day, Month, or Year range detected for \"" + field + "\". Please correct and submit again.";
			alert(msg)
		}
		else
			returnval = true;
	}

	if (returnval == false) 
		input.select();
		
	return returnval;
}

// Check date in format yyyy/mm/dd
function CheckDateYYYYMMDD(input, field)
{
	var validformat = /^\d{4}\/\d{2}\/\d{2}$/ //Basic check for format validity
	var returnval = false
	var msg;
	
	if (!validformat.test(input.value))
	{
		msg = "Invalid Date Format for \"" + field + "\". Must be in YYYY/MM/DD, i.e. 2008/10/23. Please correct and submit again." 
		alert(msg)
	}
	else
	{ //Detailed check for valid date ranges
		var yearfield = input.value.split("/")[0]
		var monthfield = input.value.split("/")[1]
		var dayfield = input.value.split("/")[2]
		var dayobj = new Date(yearfield, monthfield-1, dayfield)
		if ((dayobj.getMonth() + 1 != monthfield) || (dayobj.getDate() != dayfield) || (dayobj.getFullYear() != yearfield))
		{
			msg = "Invalid Day, Month, or Year range detected for \"" + field + "\". Please correct and submit again."
			alert(msg)
		}
		else
			returnval = true
	}

	if (returnval == false) 
		input.select()
	return returnval
}

// allow for space, (, ), -, +, comma and numbers only
// 32 = space, 40 = (, 41 = ), 43 = +, 44 = *, 45 = -
function AllowOnlyPhoneNumber()
{
    var key = window.event.keyCode;

    // check for 0 - 9
    if (key > 47 && key < 58 || key == 32 || key == 40 || key == 41 || key == 43 || key == 44|| key == 45)
	{
        return;
	}
    else
        window.event.returnValue = null;    //Dispose of the key since not numeric
}

function AllowOnlyNumeric()
{
    var key = window.event.keyCode;

    // check for 0 - 9
    if (key > 47 && key < 58)
	{
        return; // key is numeric
	}
    else
        window.event.returnValue = null;    //Dispose of the key since not numeric
}

function AllowOnlyNumericDecimal()
{
    var key = window.event.keyCode;

    // check for 0 - 9
    if (key > 47 && key < 58 || key == 46)
	{
        return; // key is numeric
	}
    else
        window.event.returnValue = null;    //Dispose of the key since not numeric
}

function AllowOnlyCurrency()
{
    var key = window.event.keyCode;

    // check for 0 - 9
    if (key > 47 && key < 58 || key == 46)
        return; // key is numeric and period
    else
        window.event.returnValue = null;    //Dispose of the key since not numeric
}

// Assume date is in format mm/dd/yyyy
function AllowOnlyDate()
{
    var key = window.event.keyCode;

    // check for 0 - 9
    if (key > 47 && key < 58 || key == 47 || key == 92)
	{
        return; // key is numeric and slash (/ or \)
	}
    else
        window.event.returnValue = null;    //Dispose of the key since not numeric
}

// function to encode URL, returns the urlencoded format
function urlencode(str) 
{
	return escape(str).replace(/\+/g,'%2B').replace(/%20/g, '+').replace(/\*/g, '%2A').replace(/\//g, '%2F').replace(/@/g, '%40');
}
