var recommendToggle = true;  //toggle between displaying form and message
var copyTimer;  //holds timer value
var requestSent = false;  //has the request been sent?
 
//display strings
//var senderText = 'your name';
var senderEmailText = 'your e-mail address';
var recipientEmailText = 'friend\'s e-mail address';
var subjectText = 'subject line';
var commentsText = 'message';
 
//add function to page onload to display recommendation form
//add menu to page onload
//xAddEventListener(window, 'load', DisplayRecommendForm, false);
 
function DisplayRecommendForm() {
	//show the javascript version of the recommendation form link if it's available
	if (document.getElementById('recommend-sidebar')) {
		document.getElementById('recommend-sidebar').style.display = 'block';
	}
}
 
function ShowRecommendForm(forceCopy) {
	//display the recommendation form
	var formObj = document.recommend;
	var cookieEmail;
	
	if (recommendToggle && !forceCopy) {
		//abort copy animation
		window.clearTimeout(copyTimer);
 
		//hide copy and show button
		new Effect.SlideUp('recommend-copy', {duration: 0.5});
		$('recommend-submit').setStyle({visibility: 'visible'});

		
		//reset copy after it is hidden
		//the text should match the default copy in the web page
		copyTimer = window.setTimeout("document.getElementById('recommend-copy-copy').innerHTML = 'Click above to send this page to a friend.'", 550);
		
		//set default form values
		//check cookie for last 'from' email address
		cookieEmail = ReadCookie('email_address');
		if (cookieEmail !== null)  {
			formObj.senderEmail.value = cookieEmail;
		} else {
			formObj.senderEmail.value = senderEmailText;
		}
		formObj.recipientEmail.value = recipientEmailText;
		formObj.subject.value = subjectText;
		formObj.comments.value = commentsText;
		
		//display form
		new Effect.SlideDown('recommend-form-container');
 
		recommendToggle = !recommendToggle;
	} else {				// was else if (forceCopy)
		//abort copy animation
		window.clearTimeout(copyTimer);
		
		//hide form
		new Effect.SlideUp('recommend-form-container');
		
		//display copy after effect finishes
		copyTimer = window.setTimeout("new Effect.SlideDown('recommend-copy', {duration: 0.25})", 500);

		recommendToggle = !recommendToggle;
	}
 
	return false;
}
 
function ValidateRecommendForm(formObj) {
	//validate the recommendation form
	var pulsateMinOpacity = 0.1;
	
	//required fields
	if (StripWhitespace(formObj.senderEmail.value) == "" || formObj.senderEmail.value == senderEmailText) {
		formObj.senderEmail.value = senderEmailText;
		new Effect.Pulsate('sender-email', {from: pulsateMinOpacity,  pulses: 3});
		return false;
	} else if (!isValidEmail(formObj.senderEmail.value)) {
		//if email address is invalid, revert to default copy
		formObj.senderEmail.value = senderEmailText;
		new Effect.Pulsate('sender-email', {from: pulsateMinOpacity,  pulses: 3});
		return false;
	}
	
	if (StripWhitespace(formObj.recipientEmail.value) == "" || formObj.recipientEmail.value == recipientEmailText) {
		formObj.recipientEmail.value = recipientEmailText;
		new Effect.Pulsate('recipient-email', {from: pulsateMinOpacity,  pulses: 3});
		return false;
	} else if (!isValidEmail(formObj.recipientEmail.value)) {
		//if email address is invalid, revert to default copy
		formObj.recipientEmail.value = recipientEmailText;
		new Effect.Pulsate('recipient-email', {from: pulsateMinOpacity,  pulses: 3});
		return false;
	}
	
	if (StripWhitespace(formObj.subject.value) == "" || formObj.subject.value == subjectText) {
		formObj.subject.value = subjectText;
		new Effect.Pulsate('subject', {from: pulsateMinOpacity,  pulses: 3});
		return false;
	}
	
	//if we got here, form data is valid
	
	//clear comments of default text
	if (formObj.comments.value == commentsText) {
		formObj.comments.value = "";
	}
	
	//submit form
	formObj.submit();
	return true;
}
 
var http_request = false;
function MakePostRequest(url, parameters) {
	//AJAX form post
	http_request = false;
	if (window.XMLHttpRequest) { //Mozilla, Safari,...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
			//set type accordingly to anticipated content type
			http_request.overrideMimeType('text/html');
		}
	} else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}
	if (!http_request) {
		document.getElementById('recommend-copy-copy').innerHTML = "This functionality is not supported by your browser&nbsp;&#8212; your recommendation could not be sent.";
		ShowRecommendForm(true);
		return false;
	}
 
	http_request.onreadystatechange = RequestResult;
	http_request.open('POST', url, true);
	http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	http_request.setRequestHeader("Content-length", parameters.length);
	http_request.setRequestHeader("Connection", "close");
	http_request.send(parameters);
}
 
function RequestResult() {
	//AJAX form post results
	if (http_request.readyState == 4) {
		if (http_request.status == 200 && http_request.responseText == "success") {
			//success
			document.getElementById('recommend-copy-copy').innerHTML = "Message sent. Click above to send another e-mail.";            
		} else {
			//problem with the request
			document.getElementById('recommend-copy-copy').innerHTML = "Your message could not be sent.  Please try again later.";
		}
		//hide form and display copy
		ShowRecommendForm(true);
	}
	
	//allow user to submit again
	requestSent = false;
}
 
function SubmitRecommendation(formObj) {
	//submit the recommendation form
 
	//disallow double-submit
	if (!requestSent) {
		$('recommend-submit').setStyle({visibility: 'hidden'});
		
		//save sender's email address in cookie
		CreateCookie('email_address', formObj.senderEmail.value);
	
		//AJAX form submit
		var poststr = 'senderEmail=' + encodeURIComponent(formObj.senderEmail.value) + '&recipientEmail=' + encodeURIComponent(formObj.recipientEmail.value) + '&pageURL=' + encodeURIComponent(formObj.currentPageURL.value) + '&pageTitle=' + encodeURIComponent(formObj.currentPageTitle.value) + '&subject=' + encodeURIComponent(formObj.subject.value) + '&comments=' + encodeURIComponent(formObj.comments.value);
	
		requestSent = true;
 
		MakePostRequest('/actions/send-to-friend.php', poststr);
	}
}
 
function StripWhitespace(anyString) {
	//remove all whitespace from string, even in the middle of the string
	return (anyString.replace(/\s/g,""));
}
 
function isValidEmail(emailAddress) {
	//returns true if string argument emailAddress forms a valid email address
	var rx
	
	rx = new RegExp("^ *[-a-zA-Z0-9\\_\\.\\-]+@[-a-zA-Z0-9\\_\\.\\-]+\\.[a-zA-Z]{2,6}?$");
	if (rx.exec(emailAddress) == null) {
		return false;
	} else {
		return true;
	}
}
 
function CreateCookie(name, value, days) {
	//create a client-side cookie
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	} else {
		var expires = "";
	}
	document.cookie = name+"="+value+expires+"; path=/";
}
 
function ReadCookie(name) {
	//get the value from a cookie
	var ca = document.cookie.split(';');
	var nameEQ = name + "=";
	for(var i=0; i < ca.length; i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1, c.length); //delete spaces
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
	}
	return null;
}
 
function EraseCookie(name) {
	//delete a cookie
	createCookie(name, "", -1);
}

