function display_appointments(){

	var appointment_area = document.getElementById('appointment_area');
	var scroll_height = appointment_area.scrollHeight;
	var current_content = document.getElementById('current_content');

	if(document.getElementById('show_apts').checked){
		var outer_start_height = current_content.scrollHeight;
		var outer_end_height = outer_start_height + scroll_height;
		var inner_start_height = 0;
		var inner_end_height = scroll_height;
	} else {
		var outer_start_height = current_content.scrollHeight;
		var outer_end_height = outer_start_height - scroll_height;
		var inner_start_height = scroll_height;
		var inner_end_height = 0;
	}

	var outer_start_rect = new Spry.Effect.Utils.Rectangle();
	outer_start_rect.width = 615;
	outer_start_rect.height = outer_start_height;
	var outer_end_rect = new Spry.Effect.Utils.Rectangle();
	outer_end_rect.width = 615;
	outer_end_rect.height = outer_end_height;
	var inner_start_rect = new Spry.Effect.Utils.Rectangle();
	inner_start_rect.width = 615;
	inner_start_rect.height = inner_start_height;
	var inner_end_rect = new Spry.Effect.Utils.Rectangle();
	inner_end_rect.width = 615;
	inner_end_rect.height = inner_end_height;

	Spry.Effect.makeClipping(appointment_area);
	var resize_appointments = new Spry.Effect.Size(appointment_area, inner_start_rect, inner_end_rect, {duration: 100, finish: function(){
			Spry.Effect.makeClipping(current_content);
			var resize_content = new Spry.Effect.Size(current_content, outer_start_rect, outer_end_rect, {duration: 600});
			resize_content.start();
		}});
	resize_appointments.start();
}

function time_select(tagname, start, finish, fill_id){
	var time_html = "<select name='"+tagname+"' size='1'>";
	time_html += "<option selected value=''>select a time</option>";
	var current = start;
	while(current<=finish){
		if(current>11){
			var current_alt = ((current-1)%12)+1;
			time_html += "<option value='";
			time_html += current + "'>";
			time_html += current_alt + "PM</option>";
		} else {
			time_html += "<option value='";
			time_html += current + "'>";
			time_html += current + "AM</option>";
		}
		current++;
	}
	time_html += "</select>";
	document.getElementById(fill_id).innerHTML=time_html;
}

function load_form_components(){

	//display_appointments();
	
	time_select('begin_time', 9, 20, 'phone_start_time');
	time_select('end_time', 10, 21, 'phone_end_time');
	
	time_select('tuesday_start', 11, 20, 'tuesday_start');
	time_select('tuesday_end', 12, 21, 'tuesday_end');
	time_select('wednesday_start', 11, 20, 'wednesday_start');
	time_select('wednesday_end', 12, 21, 'wednesday_end');
	time_select('thursday_start', 12, 20, 'thursday_start');
	time_select('thursday_end', 13, 21, 'thursday_end');
	time_select('friday_start', 9, 17, 'friday_start');
	time_select('friday_end', 10, 18, 'friday_end');
	time_select('saturday_start', 9, 16, 'saturday_start');
	time_select('saturday_end', 10, 17, 'saturday_end');
	time_select('sunday_start', 12, 17, 'sunday_start');
	time_select('sunday_end', 13, 18, 'sunday_end');

}

function send_form(){
	
	//clear previous warnings
	clear_warnings();
	
	//check name
	var have_name = document.contact_form.name.value==""?false:true;
	//check contact
	var email_status = get_email_status();
	var phone_status = get_phone_status();

	switch(email_status){
		case "checked,empty":
		case "checked,invalid":
		case "unchecked,invalid":
			document.getElementById('email_warning').setAttribute('class', 'warn');
			var warning_text = (email_status.length > 13)?'invalid email address.  please format as follows: yourname@yourdomain.com':'please enter your email address.';
			document.getElementById('email_warning').innerHTML = '<br />&nbsp;&nbsp;&nbsp;' + warning_text;
			var email_warn = true;
			break;
		case "checked,valid":
		case "unchecked,valid":
			var email_ok = true;
			break;
		case "unchecked,empty":
			var email_empty = true;
			break;
	}
	switch(phone_status){
		case "checked,empty":
		case "checked,invalid":
		case "unchecked,invalid":
			document.getElementById('phone_warning').setAttribute('class', 'warn');
			document.getElementById('phone_warning').innerHTML = '<br />&nbsp;&nbsp;&nbsp;please enter a valid 10 digit phone number.';
			var phone_warn = true;
			break;
		case "checked,valid":
		case "unchecked,valid":
			var phone_ok = true;
			break;
		case "unchecked,empty":
			var phone_empty = true;
			break;
	}
	
	//check if appointment requested
	if(email_empty && phone_empty){
		if(document.contact_form.show_apts.checked){
			document.getElementById('no_contact_warning').setAttribute('class', 'warn');
			document.getElementById('no_contact_warning').innerHTML = '<br />&nbsp;&nbsp;&nbsp;please leave your contact information.';
		} else {//check comment area
			if(document.contact_form.comment.value==""){//no substantial content in form
				document.getElementById('end_form_warning').setAttribute('class', 'warn');
				document.getElementById('end_form_warning').innerHTML = '&nbsp;&nbsp;&nbsp;please fill out appropriate form items before sending.';
			} else {//submit
				send_form_to_email();
			}
		}
	} else if((!(email_warn || phone_warn)) && have_name){//we have a contact name and no warnings
		send_form_to_email();
	} else {
		var full_warning;
		if(!have_name){
			document.getElementById('no_name_warning').setAttribute('class', 'warn');
			document.getElementById('no_name_warning').innerHTML = '<br />&nbsp;&nbsp;&nbsp;please enter your name.';
		}
		full_warning = document.getElementById('no_name_warning').innerHTML;
		full_warning += document.getElementById('no_contact_warning').innerHTML;
		full_warning += document.getElementById('email_warning').innerHTML;
		full_warning += document.getElementById('phone_warning').innerHTML;
		full_warning += '<br />&nbsp;&nbsp;&nbsp;please fill out appropriate form items before sending.';
		document.getElementById('end_form_warning').setAttribute('class', 'warn');
		document.getElementById('end_form_warning').innerHTML = full_warning;
	}
	
	checkHeight();

	function get_email_status(){
		
		var status;
		status = document.contact_form.contact_by_email.checked?"checked,":"unchecked,";
		if(document.contact_form.email.value==""){
			status += "empty";
		} else if(validate_email(document.contact_form.email.value, "all")){
			status += "valid";
		} else {
			status += "invalid";
		}
		return status;
	}

	function get_phone_status(){
		
		var status;
		status = document.contact_form.contact_by_phone.checked?"checked,":"unchecked,";
		if((document.contact_form.phone1.value=='')&&(document.contact_form.phone2.value=='')&&(document.contact_form.phone3.value=='')){
			status += "empty";
		} else if(validate_phone(document.contact_form.phone1.value, document.contact_form.phone2.value, document.contact_form.phone3.value)){
			status += "valid";
		} else {
			status += "invalid";
		}
		return status;
	}
	
	function clear_warnings(){
		document.getElementById('no_name_warning').innerHTML = "";
		document.getElementById('no_name_warning').setAttribute('class', 'hide');
		document.getElementById('no_contact_warning').innerHTML = "";
		document.getElementById('no_contact_warning').setAttribute('class', 'hide');
		document.getElementById('email_warning').innerHTML = "";
		document.getElementById('email_warning').setAttribute('class', 'hide');
		document.getElementById('phone_warning').innerHTML = "";
		document.getElementById('phone_warning').setAttribute('class', 'hide');
		document.getElementById('end_form_warning').innerHTML = "";
		document.getElementById('end_form_warning').setAttribute('class', 'hide');
	}
}

function GetXmlHttpObject(){
	if (window.XMLHttpRequest){
		// code for IE7+, Firefox, Chrome, Opera, Safari
		return new XMLHttpRequest();
	}
	if (window.ActiveXObject){
		// code for IE6, IE5
		return new ActiveXObject("Microsoft.XMLHTTP");
	}
	return null;
}

function send_form_to_email(){
	var xmlhttp;
	var html_text = "";
	var url = 'send_form.php?';
	var form_data = encode_form_data();
	url += form_data;
	xmlhttp=GetXmlHttpObject();
	if (xmlhttp==null){
		alert ("Browser does not support HTTP Request");
		return;
	}
	//xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xmlhttp.onreadystatechange = function(){stateChanged(xmlhttp);};
	xmlhttp.open("GET",url,true);
	xmlhttp.send(null);
	
	function stateChanged(xmlhttp){
		if (xmlhttp.readyState==4){
			
			var html_string = xmlhttp.responseText;
			var div_tag = document.createElement("div");
			div_tag.innerHTML = html_string;
			div_tag.setAttribute("class","warn");
			document.getElementById('form_response').appendChild(div_tag);
			document.getElementById('end_form_warning').setAttribute('class', 'warn');
			document.getElementById('end_form_warning').innerHTML = html_string;

			checkHeight();
		}
	}
	
	//return html_text;
}

function encode_form_data(){
		var strSubmit       = '';
        var formElem;
        var strLastElemName = '';
        var docForm = document.contact_form;
		
        for (i = 0; i < docForm.elements.length; i++) {
                formElem = docForm.elements[i];
                switch (formElem.type) {
                        // Text, select, hidden, password, textarea elements
                        case 'text':
                        case 'select-one':
						case 'select':
                        case 'hidden':
                        case 'password':
                        case 'textarea':
                                strSubmit += formElem.name + 
                                '=' + escape(formElem.value) + '&'
                        	break;
						case 'checkbox':
								if(formElem.checked){
									strSubmit += formElem.name + 
                                	'=' + escape(formElem.value) + '&'
								}
							break;
				}
		}
		return strSubmit;
}

function validate_email(email, extensions){
//INPUTS:
//$email: email to check for validity
//$extensions : "all" does not check for valid domain extensions
//				OR array with valid extensions
//OUTPUT: boolean of email validity

	var first_split = email.split("@");	
	if(first_split[0] == email){ //there is no @
		var validity = false;
	} else {
		if ((first_split.length == 2) && (first_split[1].length > 0)){ //there is a suffix, check for "."
			var second_split = first_split[1].split("."); //
			var parts = second_split.length; //count parts of second split
			var last_part = parts - 1;
			var suffix = second_split[last_part];
			if((suffix.length > 0) && (parts > 1)){
				if(extensions == "all"){
					var validity = true;	
				} else { //check extension array
					/*if(in_array($suffix, $extensions)){
						$validity = true;			
					} else {
						$validity = false;	
					}*/
				}			
			} else {
				var validity = false;	
			}
		} else {
			var validity = false;
		}
	}
	return validity;
}

function validate_phone(area_code, first_3, last_4){
//INPUTS:
//$area_code: area code
//$first_3: next 3 after area code
//$last_4: last 4 phone digits
//OUTPUTS:
//if valid: formatted string with phone number
//if invalid: false
	if((area_code.length == 3) && (!isNaN(area_code))){
		if((first_3.length == 3) && (!isNaN(first_3))){
			if((last_4.length == 4) && (!isNaN(last_4))){
				var validity = true;
			} else {
				var validity = false;
			}
		} else {
			var validity = false;
		}
	} else {
		var validity = false;
	}
	return validity;	
}