// START String functions

function String_trim_left(passed_string) 
	{
		while (passed_string.substring(0,1) == " ")
		{
			passed_string = passed_string.substring(1, passed_string.length);
		}
		return passed_string;
	}


function String_trim_right(passed_string) 
	{
		while (passed_string.substring(passed_string.length-1, passed_string.length) == " ")
		{
			passed_string = passed_string.substring(0,passed_string.length-1);
		}
		return passed_string;
	}


function String_trim(passed_string)
	{
		passed_string = String_trim_left(passed_string);
		passed_string = String_trim_right(passed_string);
		return passed_string;
	}


// END String functions


// START Date Functions

function Get_year(Date_object_passed)
	{
		if(isIE())
		{
			return Date_object_passed.getYear();
		}
		else
		{
			return Date_object_passed.getYear() + 1900;
		}
	}
	
function Get_month_name(Date_object_passed)
	{
	var Month_number =  Date_object_passed.getMonth();
	
		switch (Month_number)
		{
			case 0:
				return "January";
			
			case 1:
				return "February";
			
			case 2:
				return "March";
			
			case 3:
				return "April";
			
			case 4:
				return "May";
			
			case 5:
				return "June";
			
			case 6:
				return "July";
			
			case 7:
				return "August";
			
			case 8:
				return "September";
			
			case 9:
				return "October";
			
			case 10:
				return "November";
			
			case 11:
				return "December";
			
		}
	}
	
function Get_day_name(Date_object_passed)
	{
	var Day_number =  Date_object_passed.getDay();
	
		switch (Day_number)
		{
			case 0:
				return "Sunday";
			
			case 1:
				return "Monday";
			
			case 2:
				return "Tuesday";
			
			case 3:
				return "Wednesday";
			
			case 4:
				return "Thursday";
			
			case 5:
				return "Friday";
			
			case 6:
				return "Saturday";
						
		}
	}
	
function Long_date(Date_object_passed)
		{
		var Long_date_string = Get_day_name(Date_object_passed) + ", ";
		
		Long_date_string += Get_month_name(Date_object_passed) + " ";
		
		Long_date_string += Date_object_passed.getDate() + ", ";
		
		Long_date_string += Get_year(Date_object_passed);
		
		return Long_date_string;
		
		}
	
// END Date Functions




// START Image functions

function Slide_backgroundImage_left(Passed_element)
	{ 
			Passed_element.style.backgroundPosition = "left"
	}

function Slide_backgroundImage_right(Passed_element)
	{ 
			Passed_element.style.backgroundPosition = "right"
	}

// END Image functions




// END HTML Element functions

function Reset_select_element_default(Select_element)
	{
		for(var Options_index = 0; Options_index < Select_element.length; Options_index++)
		{
			if(Select_element.options[Options_index].defaultSelected)
			{
				Select_element.options[Options_index].selected = true;
			}
		}
	}

// START HTML Element functions






// START basic.css stylesheet event functions -- pass function_name(this)

function brightbluelink_over(Element_passed)
	{
		Element_passed.style.color = "rgb(50,100,250)"
		Element_passed.style.textDecoration = "underline"
	}

function brightbluelink_out(Element_passed)
	{
		Element_passed.style.color = "rgb(10,40,200)"
		Element_passed.style.textDecoration = "none"
	}

function uclabluelink_over(Element_passed)
	{
		Element_passed.style.color = "rgb(0,100,129)"
		Element_passed.style.textDecoration = "underline"
	}

function uclabluelink_out(Element_passed)
	{
		Element_passed.style.color = "rgb(83, 105, 149)"
		Element_passed.style.textDecoration = "none"
	}

function graylink_over(Element_passed)
	{
		Element_passed.style.color = "rgb(0,100,129)"
		Element_passed.style.textDecoration = "underline"
	}

function lavendarlink_out(Element_passed)
	{
		Element_passed.style.color = "rgb(153 ,153, 204)"
		Element_passed.style.textDecoration = "none"
	}

function lavendarlink_over(Element_passed)
	{
		Element_passed.style.color = "rgb(0,100,129)"
		Element_passed.style.textDecoration = "underline"
	}

function graylink_out(Element_passed)
	{
		Element_passed.style.color = "rgb(128, 128, 128)"
		Element_passed.style.textDecoration = "none"
	}

function input_focus(Element_passed)
	{
		Element_passed.style.backgroundColor='rgb(255,255,180)'
	}

function input_blur(Element_passed)
	{
		Element_passed.style.backgroundColor='rgb(255,255,255)'
	}

// END basic.css stylesheet event functions -- pass function_name(this)



// ----- START Browser testers
function isMac()
{
	if(navigator.userAgent.indexOf("Mac") != -1){
		return true;
	}
}
function isGecko()
{
// Safari browser also returns True as a Gecko Browser, usually it is compatible
// use isGeckoNotSafari() if you do not want to include Safari
	if(navigator.userAgent.indexOf("Gecko") != -1){
		return true;
	}
}
function isSafari()
{
// Safari browser also returns True as a Gecko Browser, usually it is compatible
// use isGeckoNotSafari() if you do not want to include Safari
	if(navigator.userAgent.indexOf("Safari") != -1){
		return true;
	}
}
function isIE()
{
	if(navigator.appName == "Microsoft Internet Explorer"){
		return true;
	}
}
function isOldNetscape()
{
	if( (navigator.appName == "Netscape") && ( parseInt(navigator.appVersion) < 5) ){
		return true;
	}
}

function isGeckoNotSafari()
{
	if(isGecko())
	{
		if(isSafari())
		{
			return false; 
		}
		else
		{
			return true;
		}
	}
}

function isGeckoNotMac()
{
	if(isGecko())
	{
		if(isMac())
		{
			return false; 
		}
		else
		{
			return true;
		}
	}
}


function isFirefox3()
{
	if(navigator.userAgent.indexOf("Firefox/3") != -1){
		return true;
	}
}



// ----- END Browser testers




	
// -- START XMLHttpRequest
// XMLHttpRequest_PostTo with multipart/form-data

function XMLHttpRequest_PostTo(Stringified_JSON_text,Post_to_url)
	{
	var boundary = "_BouNdarY_" + new Date().getMilliseconds();
	var body = ""
	var JSON_fieldname = "JSON_Request_BLOB"
	var xmlhttp;
	
	
		if(window.XMLHttpRequest)
		{
			// native XMLHttpRequest object Mozilla, Safari, etc.
			xmlhttp = new XMLHttpRequest();
	    }
	    else
	    {
	    	// for IE/Windows ActiveX version (added to original)
	    	xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	    }
	
	// asynchronous...
	 	//xmlhttp.open("POST", Post_to_url, true);
	// or...wait for response...
	 	xmlhttp.open("POST", Post_to_url, false);
	
	
		// OLD multipart/form-data quit working in Safari and didn't work in Chrome
		// probably because Safari and Chrome add character encodeing = UTF-8 to the Content-type
		//  4D doesn't parse the form variables.
		// Now it only works in Firefox and IE
		/*
		xmlhttp.setRequestHeader("Content-Type","multipart/form-data; boundary="+boundary);
		
		body =  "--" + boundary + '\r\n';
		body += 'Content-Disposition: form-data; name="' + JSON_fieldname + '"' + '\r\n\r\n';
		body += Stringified_JSON_text + '\r\n';	
		body += "--" + boundary + "--\r\n" ; //end of body
		
		if( isFirefox3() )
		{
		xmlhttp.sendAsBinary(body);  
		}
		else
		{
		xmlhttp.send(body);
		}
		*/
		
		
	 	//var encoded_submit = encodeURI(Stringified_JSON_text)
		
		if( typeof Stringified_JSON_text == "string") 
		{
			var encoded_submit = Stringified_JSON_text.replace(/\&/g,"%26")
		}
		else
		{
			encoded_submit = Stringified_JSON_text
		}
		
		
		xmlhttp.open("POST", Post_to_url, false);
			
		xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlhttp.setRequestHeader("Content-length", encoded_submit.length + 15 );
		xmlhttp.setRequestHeader("Connection", "close");
	
		body = "";
		body += JSON_fieldname + '=' ;
		body += encoded_submit;	

		xmlhttp.send(body);


		var status = xmlhttp.status
		var statusText = xmlhttp.statusText
		
				
		if( (status != 200) )
		{
			alert( "ERROR: Not able to connect or transfer data to the server. Contact tech support. " )
		}
		
		// responseText = xmlhttp.responseText
	
		return xmlhttp.responseText;
	
	 //...
	 }
	
// -- END XMLHttpRequest




//--- START function Parses name 
function Parse_name_pass_input_ids(Fullname_id,Prefixname_id,Firstname_id,Middlename_id,Lastname_id,Suffixname_id,Focus_after_id)
	{
	var nameObj = document.getElementById(Fullname_id)
	var nameString = nameObj.value
	var prefixObj = document.getElementById(Prefixname_id)
	var prefixString = prefixObj.value
	var firstnameObj = document.getElementById(Firstname_id)
	var firstnameString = firstnameObj.value
	var midnameObj = document.getElementById(Middlename_id)
	var midnameString = midnameObj.value
	var lastnameObj = document.getElementById(Lastname_id)
	var lastnameString = lastnameObj.value
	var suffixObj = document.getElementById(Suffixname_id)
	var suffixString = suffixObj.value
	
	var focusAfterObject = document.getElementById(Focus_after_id)

	
	var aBlankPositions = new Array()
	var aBlankPositionsStripped = new Array()
	var aWords = new Array()
	aWords[0] =""  //this fixes null not object error
	var aPrefixes = new Array(28)
	aPrefixes[0] = "Mr."
	aPrefixes[1] = "Mr"
	aPrefixes[2] = "Mrs."
	aPrefixes[3] = "Mrs"
	aPrefixes[4] = "Ms."
	aPrefixes[5] = "Ms"
	aPrefixes[6] = "Miss"
	aPrefixes[7] = "Dr."
	aPrefixes[8] = "Dr"
	aPrefixes[9] = "Fr."
	aPrefixes[10] = "Fr"
	aPrefixes[11] = "Father"
	aPrefixes[12] = "Sr."
	aPrefixes[13] = "Sr"
	aPrefixes[14] = "Sister"
	aPrefixes[15] = "Br."
	aPrefixes[16] = "Br"
	aPrefixes[17] = "Brother"
	aPrefixes[18] = "Msgr."
	aPrefixes[19] = "Rev"
	aPrefixes[20] = "Rev."
	aPrefixes[21] = "The Rev"
	aPrefixes[22] = "The Rev."
	aPrefixes[23] = "The Reverend"
	aPrefixes[24] = "Rt. Rev."
	aPrefixes[25] = "Rt Rev"
	aPrefixes[26] = "The Rt. Rev."
	aPrefixes[27] = "Bishop"
	var aSuffixes = new Array(27)
	aSuffixes[0] = "Jr."
	aSuffixes[1] = "Jr"
	aSuffixes[2] = "Sr."
	aSuffixes[3] = "Sr"
	aSuffixes[4] = "II"
	aSuffixes[5] = "III"
	aSuffixes[6] = "IV"
	aSuffixes[7] = "V"
	aSuffixes[8] = "VI"
	aSuffixes[9] = "VII"
	aSuffixes[10] = "VIII"
	aSuffixes[11] = "IX"
	aSuffixes[12] = "X"
	aSuffixes[13] = "esq."
	aSuffixes[14] = "esq"
	aSuffixes[15] = "PhD"
	aSuffixes[16] = "Ph.D."
	aSuffixes[17] = "DDS"
	aSuffixes[18] = "D.D.S."
	aSuffixes[19] = "MD"
	aSuffixes[20] = "M.D."
	aSuffixes[21] = "sj"
	aSuffixes[22] = "s.j."
	aSuffixes[23] = "s.m."
	aSuffixes[24] = "sm"
	aSuffixes[25] = "ohc"
	aSuffixes[26] = "o.h.c."
	var aLastnamePrefixes = new Array(21)
	aLastnamePrefixes[0] = "de los"
	aLastnamePrefixes[1] = "delos"
	aLastnamePrefixes[2] = "de las"
	aLastnamePrefixes[3] = "delas"
	aLastnamePrefixes[4] = "delle"
	aLastnamePrefixes[5] = "della"
	aLastnamePrefixes[6] = "dela"
	aLastnamePrefixes[7] = "de la"
	aLastnamePrefixes[8] = "van der"
	aLastnamePrefixes[9] = "vander"
	aLastnamePrefixes[10] = "van den"
	aLastnamePrefixes[11] = "vanden"
	aLastnamePrefixes[12] = "van de"
	aLastnamePrefixes[13] = "vande"
	aLastnamePrefixes[14] = "del"
	aLastnamePrefixes[15] = "de"
	aLastnamePrefixes[16] = "la"
	aLastnamePrefixes[17] = "des"
	aLastnamePrefixes[18] = "von"
	aLastnamePrefixes[19] = "van"
	aLastnamePrefixes[20] = "el"
	
	// find blank spaces
	var blankPositionNo = 0
	for (i = 0; i < nameString.length; i++){
		if(nameString.charAt(i) == " " ){
		aBlankPositions[blankPositionNo] = i;
		blankPositionNo++
		}
	}
	// strip blanks at beginning of name
	var leadBlanksStripped = 0
	for (var i = 0; i < aBlankPositions.length; i++){
		if(nameString.charAt(0) == " "){
		nameObj.value = nameString.substr(1, nameString.length);
		nameString = nameObj.value
		aBlankPositions[i] = null
		leadBlanksStripped++
		}
	}
	//strip blanks at end of  name
	for (i = aBlankPositions.length -1; i > -1; i--){
		if(nameString.charAt(nameString.length - 1) == " "){
		nameObj.value = nameString.substr(0, nameString.length - 1);
		nameString = nameObj.value
		aBlankPositions[i] = null
		}
	}
	// create new array of blank positions
	var blankCounter = 0
	for (var i = 0; i < aBlankPositions.length; i++){
		if(aBlankPositions[i] != null){
		aBlankPositionsStripped[blankCounter] = aBlankPositions[i] - leadBlanksStripped
		blankCounter++
		}
	}
	// assign words
	var lastBlank = 0
	for(i = 0; i < aBlankPositionsStripped.length; i++){
		aWords[i] = nameString.substring(lastBlank,aBlankPositionsStripped[i])
		lastBlank = aBlankPositionsStripped[i] + 1
		if (i == aBlankPositionsStripped.length - 1){ aWords[ i +1] = (nameString.substring(lastBlank,nameString.length))}
	}
	
	// check words
	// count as you go flag done
	var totalWords = aWords.length
	var assignedCounter = 0
	var flagDone = false
	var aNameSlots = new Array(5)
	aNameSlots[0] = ""
	aNameSlots[1] = ""
	aNameSlots[2] = ""
	aNameSlots[3] = ""
	aNameSlots[4] = ""
	// create parallel words array to store which words have been assigned
	var aWordsAssigned = new Array()
	for(var i = 0; i < aWords.length; i++){
	aWordsAssigned[i] = false
	}
	//subroutine check if all assigned
	function checkDone(){
	if (assignedCounter == totalWords){flagDone = true}
	}
	// if only 2 use fname lname
	if(totalWords == 2){
	aNameSlots[1] = aWords[0];
	aNameSlots[3] = aWords[1];
	flagDone = true
	}
	//if word1 is prefix word1 into prefix, word2 into firstname
	if(flagDone == false){
		for(var i = 0; i < aPrefixes.length; i++){
			if (aWords[0].toUpperCase() == aPrefixes[i].toUpperCase()){
			aNameSlots[0] = aWords[0]; aWordsAssigned[0] = true;
			aNameSlots[1] = aWords[1]; aWordsAssigned[1] = true;
			assignedCounter = 2
			checkDone();
			}
		}
	}
	//if word1 not prefix it is firstname
	if(flagDone == false){
		if(aWordsAssigned[0] == false){
		aNameSlots[1] = aWords[0]; aWordsAssigned[0] = true;
		assignedCounter = 1
		checkDone();
		}
	}
	// if only 1 left put in lastname
	if(flagDone == false){
		if(assignedCounter + 1 == totalWords){
		aNameSlots[3] = aWords[aWords.length - 1]; aWordsAssigned[aWords.length - 1] = true;
		assignedCounter++
		checkDone();
		}
	}
	// if any word ends in comma, put first instance it into lastname or suffix as appropriate
	// move comma to beginning of next word and put remaining words into suffix
	if(flagDone == false){
	var usedComma = false
		for(var i = 0; i < aWords.length; i++){
			if(aWords[i].charAt(aWords[i].length - 1) == "," && usedComma == false){
				// if word before comma is a suffix, move it and everything after into suffix
				var commaDealtWith = false
				for(var ii = 0; ii < aSuffixes.length; ii++){
					if(aWords[i].substr(0, aWords[i].length - 1) == aSuffixes[ii]){
					aNameSlots[4] = aWords[i];
					assignedCounter++;  aWordsAssigned[i] = true;
					aNameSlots[3] = aWords[i - 1];
					assignedCounter++;  aWordsAssigned[i - 1] = true;
						for(var iii = i + 1; iii < aWords.length; iii++){
						aNameSlots[4] = aNameSlots[4] + " " + aWords[iii];
						assignedCounter++; aWordsAssigned[iii] = true;
						}
					usedComma = true; commaDealtWith = true;
					}
				}
				// if word before comma is not suffix (commaDealtWith = true), put into lastname and move comma
				// move comma to beginning of next word and put remaining words into suffix
				if(commaDealtWith == false){
				aWords[i] = aWords[i].substr(0, aWords[i].length - 1)
				aWords[i + 1] = ", " + aWords[i + 1]
				aNameSlots[3] = aWords[i];
				assignedCounter++;  aWordsAssigned[i] = true;
				aNameSlots[4] = aWords[i + 1];
				assignedCounter++;  aWordsAssigned[i + 1] = true;
					for(var iiii = i + 2; iiii < aWords.length; iiii++){
					aNameSlots[4] = aNameSlots[4] + " " + aWords[iiii];
					assignedCounter++; aWordsAssigned[iiii] = true;
					}
				usedComma = true;
				}
	
			checkDone();
			}
		}
	}
	// if more than 1 left, and lastword not assigned, if suffix put lastword into suffix and second to last into lastname
	if(flagDone == false){
		if(assignedCounter + 1 < totalWords && aWordsAssigned[aWords.length - 1] == false){
			for(var i = 0; i < aSuffixes.length; i++){
				if(aWords[aWords.length - 1].toUpperCase() == aSuffixes[i].toUpperCase()){
				aNameSlots[4] = aWords[aWords.length - 1];  aWordsAssigned[aWords.length - 1] = true;
				aNameSlots[3] = aWords[aWords.length - 2];  aWordsAssigned[aWords.length - 2] = true;
				assignedCounter = assignedCounter + 2
				checkDone();
				}
			}
		}
	}
	// if lastword is not yet assigned,  it is not a suffix, it is lastname
	if(flagDone == false){
			if(aWordsAssigned[aWords.length - 1] == false){
				aNameSlots[3] = aWords[aWords.length - 1];  aWordsAssigned[aWords.length - 1] = true;
				assignedCounter++
				checkDone();
			}
	}
	// put rest into midname
	if(flagDone == false){
		firstMidnameWord = 0
		for(var i = 0; i < aWords.length; i++){
			if (aWordsAssigned[i] == false){
				if(firstMidnameWord == 0){
				aNameSlots[2] = aWords[i];
				firstMidnameWord++; assignedCounter++;
				}else{
					// add expected midname word to existing midname
					aNameSlots[2] = aNameSlots[2] + " " + aWords[i];
					assignedCounter++
				}
			}
			checkDone();
		}
	}
	// if middlename includes a lastname prefix move it to lastname
	for(var i = 0; i < aLastnamePrefixes.length; i++){
		if(aNameSlots[2].length > aLastnamePrefixes[i].length){
			if((" " + aLastnamePrefixes[i]).toUpperCase() == aNameSlots[2].substr(aNameSlots[2].length - (aLastnamePrefixes[i].length + 1) , aNameSlots[2].length).toUpperCase()){
			aNameSlots[3] = aNameSlots[2].substr(aNameSlots[2].length - (aLastnamePrefixes[i]).length, aNameSlots[2].length) + " " + aNameSlots[3];
			aNameSlots[2] = aNameSlots[2].substr(0, aNameSlots[2].length - (aLastnamePrefixes[i].length + 1));
			}
		}
		if(aNameSlots[2].length == aLastnamePrefixes[i].length){
			if(aLastnamePrefixes[i].toUpperCase() == aNameSlots[2].substr(aNameSlots[2].length - (aLastnamePrefixes[i]), aNameSlots[2].length).toUpperCase()){
			aNameSlots[3] = aNameSlots[2].substr(aNameSlots[2].length - aLastnamePrefixes[i].length) + " " + aNameSlots[3];
			aNameSlots[2] = aNameSlots[2].substr(0, aNameSlots[2].substr(aNameSlots[2].length - (aLastnamePrefixes[i] + 1)));
			}
		}
	}
	// put into fields
	prefixObj.value = aNameSlots[0];
	firstnameObj.value = aNameSlots[1];
	midnameObj.value = aNameSlots[2];
	lastnameObj.value = aNameSlots[3];
	suffixObj.value = aNameSlots[4];
	
	focusAfterObject.focus();
	
	}
//--- END function Parses name 



// Phone_format_hyphen - syntax: onchange="Phone_format_hyphen(this)"

function Phone_format_hyphen(Phone_object)
{
var Phone_number=Phone_object.value
var Phone_number_stripped=""
var Phone_number_formatted=""
var Numeral_counter=0
   // strip all non numbers
   for(Char_counter=0; Char_counter<Phone_number.length; Char_counter++)
   {
      if( (Phone_number.charAt(Char_counter)=="0") | (Phone_number.charAt(Char_counter)=="1") | (Phone_number.charAt(Char_counter)=="2") | (Phone_number.charAt(Char_counter)=="3") | (Phone_number.charAt(Char_counter)=="4") | (Phone_number.charAt(Char_counter)=="5") | (Phone_number.charAt(Char_counter)=="6") | (Phone_number.charAt(Char_counter)=="7") | (Phone_number.charAt(Char_counter)=="8") | (Phone_number.charAt(Char_counter)=="9")  )
      {
         Phone_number_stripped = Phone_number_stripped + Phone_number.charAt(Char_counter)
				
         if(Numeral_counter<10)
         {
            Numeral_counter = Numeral_counter+1
         }
      }
      else
      {
         // after 10 numbers stripped out, just include everything else entered to deal with phone extensions
         if(Numeral_counter>9)
         {
            Phone_number_stripped = Phone_number_stripped + Phone_number.charAt(Char_counter)
         }
      }
   }
      // format new number

      Phone_number_formatted=""

      for(Char_counter=0; Char_counter<Phone_number_stripped.length;Char_counter++)
      {
         if(Char_counter==2)
         {
            Phone_number_formatted=Phone_number_formatted + Phone_number_stripped.charAt(Char_counter) + "-"
         }
         else
         {
            if(Char_counter==5)
            {
               Phone_number_formatted=Phone_number_formatted + Phone_number_stripped.charAt(Char_counter) + "-"
            }
            else
            {
               Phone_number_formatted=Phone_number_formatted + Phone_number_stripped.charAt(Char_counter)
            }
         }
      }
   Phone_object.value=Phone_number_formatted
}



